#!/usr/bin/env node // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. // Copyright (c) 2015-present, Facebook, Inc. // This source code is licensed under the MIT license found in the // LICENSE file in the root directory of this source tree. Object.defineProperty(exports, "__esModule", { value: true }); exports.run = void 0; const child_process_1 = require("child_process"); const WebSocket = require("ws"); /* global console, __dirname, setTimeout */ function run(host = "localhost", port = "8081", role = "debugger", debuggerName = "OfficeAddinDebugger") { const debuggerWorkerRelativePath = "\\debuggerWorker.js"; const debuggerWorkerFullPath = `${__dirname}${debuggerWorkerRelativePath}`; const websocketRetryTimeout = 500; function connectToDebuggerProxy() { var ws = new WebSocket(`ws://${host}:${port}/debugger-proxy?role=${role}&name=${debuggerName}`); var worker; function createJSRuntime() { // This worker will run the application javascript code. worker = (0, child_process_1.fork)(`${debuggerWorkerFullPath}`, [], { stdio: ["pipe", "pipe", "pipe", "ipc"], execArgv: ["--inspect"], }); worker.on("message", (message) => { ws.send(JSON.stringify(message)); }); } function shutdownJSRuntime() { if (worker) { worker.kill(); worker.unref(); } } ws.onopen = () => { console.log("Web socket opened..."); }; ws.onmessage = (message) => { if (!message.data) { return; } var object = JSON.parse(message.data.toString()); if (object.$event === "client-disconnected") { shutdownJSRuntime(); return; } if (!object.method) { return; } // Special message that asks for a new JS runtime if (object.method === "prepareJSRuntime") { shutdownJSRuntime(); //console.clear(); createJSRuntime(); ws.send(JSON.stringify({ replyID: object.id })); } else if (object.method === "$disconnected") { shutdownJSRuntime(); } else { worker.send(object); } }; ws.onclose = (e) => { shutdownJSRuntime(); if (e.reason) { console.log(`Web socket closed because the following reason: ${e.reason}`); } setTimeout(connectToDebuggerProxy, websocketRetryTimeout); }; ws.onerror = (event) => { console.log(`${event.error}`); }; } connectToDebuggerProxy(); } exports.run = run; //# sourceMappingURL=debugger.js.map