123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.IpcSocketProvider = void 0;
- const net_1 = require("net");
- const provider_socket_js_1 = require("./provider-socket.js");
- // @TODO: Is this sufficient? Is this robust? Will newlines occur between
- // all payloads and only between payloads?
- function splitBuffer(data) {
- const messages = [];
- let lastStart = 0;
- while (true) {
- const nl = data.indexOf(10, lastStart);
- if (nl === -1) {
- break;
- }
- messages.push(data.subarray(lastStart, nl).toString().trim());
- lastStart = nl + 1;
- }
- return { messages, remaining: data.subarray(lastStart) };
- }
- /**
- * An **IpcSocketProvider** connects over an IPC socket on the host
- * which provides fast access to the node, but requires the node and
- * the script run on the same machine.
- */
- class IpcSocketProvider extends provider_socket_js_1.SocketProvider {
- #socket;
- /**
- * The connected socket.
- */
- get socket() { return this.#socket; }
- constructor(path, network, options) {
- super(network, options);
- this.#socket = (0, net_1.connect)(path);
- this.socket.on("ready", async () => {
- try {
- await this._start();
- }
- catch (error) {
- console.log("failed to start IpcSocketProvider", error);
- // @TODO: Now what? Restart?
- }
- });
- let response = Buffer.alloc(0);
- this.socket.on("data", (data) => {
- response = Buffer.concat([response, data]);
- const { messages, remaining } = splitBuffer(response);
- messages.forEach((message) => {
- this._processMessage(message);
- });
- response = remaining;
- });
- this.socket.on("end", () => {
- this.emit("close");
- this.socket.destroy();
- this.socket.end();
- });
- }
- destroy() {
- this.socket.destroy();
- this.socket.end();
- super.destroy();
- }
- async _write(message) {
- if (!message.endsWith("\n")) {
- message += "\n";
- }
- this.socket.write(message);
- }
- }
- exports.IpcSocketProvider = IpcSocketProvider;
- //# sourceMappingURL=provider-ipcsocket.js.map
|