{"version":3,"sources":["meteor://💻app/packages/shell-server/main.js","meteor://💻app/packages/shell-server/shell-server.js"],"names":["module","link","listen","v","shellDir","process","env","METEOR_SHELL_DIR","module1","export","disable","assert","default","pathJoin","join","PassThrough","closeSync","openSync","readFileSync","unlink","writeFileSync","writeSync","createServer","replStart","start","INFO_FILE_MODE","parseInt","EXITING_MESSAGE","callback","Server","Meteor","startup","__meteor_bootstrap__","hooks","startupHooks","push","setImmediate","getInfoFile","JSON","stringify","status","reason","mode","ignored","evalCommandPromise","Promise","resolve","constructor","ok","key","Math","random","toString","slice","server","socket","onConnection","on","err","console","error","stack","infoFile","port","address","timeout","setTimeout","removeAllListeners","end","readJSONFromStream","options","replInputSocket","clearTimeout","columns","Object","assign","create","prompt","terminal","useColors","ignoreUndefined","input","useGlobal","output","evaluateAndExit","startREPL","_wrappedDefaultEval","call","command","global","filename","result","sendResultToSocket","message","code","enableInteractiveMode","repl","context","setRequireAndModule","defaultEval","eval","wrappedDefaultEval","file","Package","ecmascript","ECMAScript","compileForShell","cacheDirectory","getCacheDirectory","then","catch","initializeHistory","defineProperty","get","last","set","val","configurable","addHelp","cmd","helpText","info","commands","help","write","defineCommand","action","exit","rli","historyFile","getHistoryFile","historyFd","historyLines","split","seenLines","history","historyIndex","length","line","pop","test","addListener","inputStream","outputStream","dataSoFar","onData","buffer","lines","shift","json","parse","SyntaxError","finish","pipe","onClose","Error","finished","removeListener","modules","toBeInstalled","shellModuleName","require","exports","extensions","meteorInstall"],"mappings":"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","file":"/packages/shell-server.js","sourcesContent":["export * from \"./shell-server.js\";\nimport { listen } from \"./shell-server.js\";\n\nconst shellDir = process.env.METEOR_SHELL_DIR;\nif (shellDir) {\n listen(shellDir);\n}\n","import assert from \"assert\";\nimport { join as pathJoin } from \"path\";\nimport { PassThrough } from \"stream\";\nimport {\n closeSync,\n openSync,\n readFileSync,\n unlink,\n writeFileSync,\n writeSync,\n} from \"fs\";\nimport { createServer } from \"net\";\nimport { start as replStart } from \"repl\";\n\nconst INFO_FILE_MODE = parseInt(\"600\", 8); // Only the owner can read or write.\nconst EXITING_MESSAGE = \"Shell exiting...\";\n\n// Invoked by the server process to listen for incoming connections from\n// shell clients. Each connection gets its own REPL instance.\nexport function listen(shellDir) {\n function callback() {\n new Server(shellDir).listen();\n }\n\n // If the server is still in the very early stages of starting up,\n // Meteor.startup may not available yet.\n if (typeof Meteor === \"object\") {\n Meteor.startup(callback);\n } else if (typeof __meteor_bootstrap__ === \"object\") {\n const hooks = __meteor_bootstrap__.startupHooks;\n if (hooks) {\n hooks.push(callback);\n } else {\n // As a fallback, just call the callback asynchronously.\n setImmediate(callback);\n }\n }\n}\n\n// Disabling the shell causes all attached clients to disconnect and exit.\nexport function disable(shellDir) {\n try {\n // Replace info.json with a file that says the shell server is\n // disabled, so that any connected shell clients will fail to\n // reconnect after the server process closes their sockets.\n writeFileSync(\n getInfoFile(shellDir),\n JSON.stringify({\n status: \"disabled\",\n reason: \"Shell server has shut down.\"\n }) + \"\\n\",\n { mode: INFO_FILE_MODE }\n );\n } catch (ignored) {}\n}\n\n// Shell commands need to be executed in a Fiber in case they call into\n// code that yields. Using a Promise is an even better idea, since it runs\n// its callbacks in Fibers drawn from a pool, so the Fibers are recycled.\nconst evalCommandPromise = Promise.resolve();\n\nclass Server {\n constructor(shellDir) {\n assert.ok(this instanceof Server);\n\n this.shellDir = shellDir;\n this.key = Math.random().toString(36).slice(2);\n\n this.server =\n createServer((socket) => {\n this.onConnection(socket);\n })\n .on(\"error\", (err) => {\n console.error(err.stack);\n });\n }\n\n listen() {\n const infoFile = getInfoFile(this.shellDir);\n\n unlink(infoFile, () => {\n this.server.listen(0, \"127.0.0.1\", () => {\n writeFileSync(infoFile, JSON.stringify({\n status: \"enabled\",\n port: this.server.address().port,\n key: this.key\n }) + \"\\n\", {\n mode: INFO_FILE_MODE\n });\n });\n });\n }\n\n onConnection(socket) {\n // Make sure this function doesn't try to write anything to the socket\n // after it has been closed.\n socket.on(\"close\", function() {\n socket = null;\n });\n\n // If communication is not established within 1000ms of the first\n // connection, forcibly close the socket.\n const timeout = setTimeout(function() {\n if (socket) {\n socket.removeAllListeners(\"data\");\n socket.end(EXITING_MESSAGE + \"\\n\");\n }\n }, 1000);\n\n // Let connecting clients configure certain REPL options by sending a\n // JSON object over the socket. For example, only the client knows\n // whether it's running a TTY or an Emacs subshell or some other kind of\n // terminal, so the client must decide the value of options.terminal.\n readJSONFromStream(socket, (error, options, replInputSocket) => {\n clearTimeout(timeout);\n\n if (error) {\n socket = null;\n console.error(error.stack);\n return;\n }\n\n if (options.key !== this.key) {\n if (socket) {\n socket.end(EXITING_MESSAGE + \"\\n\");\n }\n return;\n }\n delete options.key;\n\n // Set the columns to what is being requested by the client.\n if (options.columns && socket) {\n socket.columns = options.columns;\n }\n delete options.columns;\n\n options = Object.assign(\n Object.create(null),\n\n // Defaults for configurable options.\n {\n prompt: \"> \",\n terminal: true,\n useColors: true,\n ignoreUndefined: true,\n },\n\n // Configurable options\n options,\n\n // Immutable options.\n {\n input: replInputSocket,\n useGlobal: false,\n output: socket\n }\n );\n\n // The prompt during an evaluateAndExit must be blank to ensure\n // that the prompt doesn't inadvertently get parsed as part of\n // the JSON communication channel.\n if (options.evaluateAndExit) {\n options.prompt = \"\";\n }\n\n // Start the REPL.\n this.startREPL(options);\n\n if (options.evaluateAndExit) {\n this._wrappedDefaultEval.call(\n Object.create(null),\n options.evaluateAndExit.command,\n global,\n options.evaluateAndExit.filename || \"\",\n function (error, result) {\n if (socket) {\n function sendResultToSocket(message) {\n // Sending back a JSON payload allows the client to\n // distinguish between errors and successful results.\n socket.end(JSON.stringify(message) + \"\\n\");\n }\n\n if (error) {\n sendResultToSocket({\n error: error.toString(),\n code: 1\n });\n } else {\n sendResultToSocket({\n result,\n });\n }\n }\n }\n );\n return;\n }\n delete options.evaluateAndExit;\n\n this.enableInteractiveMode(options);\n });\n }\n\n startREPL(options) {\n // Make sure this function doesn't try to write anything to the output\n // stream after it has been closed.\n options.output.on(\"close\", function() {\n options.output = null;\n });\n\n const repl = this.repl = replStart(options);\n const { shellDir } = this;\n\n // This is technique of setting `repl.context` is similar to how the\n // `useGlobal` option would work during a normal `repl.start()` and\n // allows shell access (and tab completion!) to Meteor globals (i.e.\n // Underscore _, Meteor, etc.). By using this technique, which changes\n // the context after startup, we avoid stomping on the special `_`\n // variable (in `repl` this equals the value of the last command) from\n // being overridden in the client/server socket-handshaking. Furthermore,\n // by setting `useGlobal` back to true, we allow the default eval function\n // to use the desired `runInThisContext` method (https://git.io/vbvAB).\n repl.context = global;\n repl.useGlobal = true;\n\n setRequireAndModule(repl.context);\n\n // In order to avoid duplicating code here, specifically the complexities\n // of catching so-called \"Recoverable Errors\" (https://git.io/vbvbl),\n // we will wrap the default eval, run it in a Fiber (via a Promise), and\n // give it the opportunity to decide if the user is mid-code-block.\n const defaultEval = repl.eval;\n\n function wrappedDefaultEval(code, context, file, callback) {\n if (Package.ecmascript) {\n try {\n code = Package.ecmascript.ECMAScript.compileForShell(code, {\n cacheDirectory: getCacheDirectory(shellDir)\n });\n } catch (err) {\n // Any Babel error here might be just fine since it's\n // possible the code was incomplete (multi-line code on the REPL).\n // The defaultEval below will use its own functionality to determine\n // if this error is \"recoverable\".\n }\n }\n\n evalCommandPromise\n .then(() => defaultEval(code, context, file, callback))\n .catch(callback);\n }\n\n // Have the REPL use the newly wrapped function instead and store the\n // _wrappedDefaultEval so that evalulateAndExit calls can use it directly.\n repl.eval = this._wrappedDefaultEval = wrappedDefaultEval;\n }\n\n enableInteractiveMode(options) {\n // History persists across shell sessions!\n this.initializeHistory();\n\n const repl = this.repl;\n\n // Implement an alternate means of fetching the return value,\n // via `__` (double underscore) as originally implemented in:\n // https://github.com/meteor/meteor/commit/2443d832265c7d1c\n Object.defineProperty(repl.context, \"__\", {\n get: () => repl.last,\n set: (val) => {\n repl.last = val;\n },\n\n // Allow this property to be (re)defined more than once (e.g. each\n // time the server restarts).\n configurable: true\n });\n\n // Some improvements to the existing help messages.\n function addHelp(cmd, helpText) {\n const info = repl.commands[cmd] || repl.commands[\".\" + cmd];\n if (info) {\n info.help = helpText;\n }\n }\n addHelp(\"break\", \"Terminate current command input and display new prompt\");\n addHelp(\"exit\", \"Disconnect from server and leave shell\");\n addHelp(\"help\", \"Show this help information\");\n\n // When the REPL exits, signal the attached client to exit by sending it\n // the special EXITING_MESSAGE.\n repl.on(\"exit\", function() {\n if (options.output) {\n options.output.write(EXITING_MESSAGE + \"\\n\");\n options.output.end();\n }\n });\n\n // When the server process exits, end the output stream but do not\n // signal the attached client to exit.\n process.on(\"exit\", function() {\n if (options.output) {\n options.output.end();\n }\n });\n\n // This Meteor-specific shell command rebuilds the application as if a\n // change was made to server code.\n repl.defineCommand(\"reload\", {\n help: \"Restart the server and the shell\",\n action: function() {\n process.exit(0);\n }\n });\n }\n\n // This function allows a persistent history of shell commands to be saved\n // to and loaded from .meteor/local/shell-history.\n initializeHistory() {\n const rli = this.repl.rli;\n const historyFile = getHistoryFile(this.shellDir);\n let historyFd = openSync(historyFile, \"a+\");\n const historyLines = readFileSync(historyFile, \"utf8\").split(\"\\n\");\n const seenLines = Object.create(null);\n\n if (! rli.history) {\n rli.history = [];\n rli.historyIndex = -1;\n }\n\n while (rli.history && historyLines.length > 0) {\n const line = historyLines.pop();\n if (line && /\\S/.test(line) && ! seenLines[line]) {\n rli.history.push(line);\n seenLines[line] = true;\n }\n }\n\n rli.addListener(\"line\", function(line) {\n if (historyFd >= 0 && /\\S/.test(line)) {\n writeSync(historyFd, line + \"\\n\");\n }\n });\n\n this.repl.on(\"exit\", function() {\n closeSync(historyFd);\n historyFd = -1;\n });\n }\n}\n\nfunction readJSONFromStream(inputStream, callback) {\n const outputStream = new PassThrough();\n let dataSoFar = \"\";\n\n function onData(buffer) {\n const lines = buffer.toString(\"utf8\").split(\"\\n\");\n\n while (lines.length > 0) {\n dataSoFar += lines.shift();\n\n let json;\n try {\n json = JSON.parse(dataSoFar);\n } catch (error) {\n if (error instanceof SyntaxError) {\n continue;\n }\n\n return finish(error);\n }\n\n if (lines.length > 0) {\n outputStream.write(lines.join(\"\\n\"));\n }\n\n inputStream.pipe(outputStream);\n\n return finish(null, json);\n }\n }\n\n function onClose() {\n finish(new Error(\"stream unexpectedly closed\"));\n }\n\n let finished = false;\n function finish(error, json) {\n if (! finished) {\n finished = true;\n inputStream.removeListener(\"data\", onData);\n inputStream.removeListener(\"error\", finish);\n inputStream.removeListener(\"close\", onClose);\n callback(error, json, outputStream);\n }\n }\n\n inputStream.on(\"data\", onData);\n inputStream.on(\"error\", finish);\n inputStream.on(\"close\", onClose);\n}\n\nfunction getInfoFile(shellDir) {\n return pathJoin(shellDir, \"info.json\");\n}\n\nfunction getHistoryFile(shellDir) {\n return pathJoin(shellDir, \"history\");\n}\n\nfunction getCacheDirectory(shellDir) {\n return pathJoin(shellDir, \"cache\");\n}\n\nfunction setRequireAndModule(context) {\n if (Package.modules) {\n // Use the same `require` function and `module` object visible to the\n // application.\n const toBeInstalled = {};\n const shellModuleName = \"meteor-shell-\" +\n Math.random().toString(36).slice(2) + \".js\";\n\n toBeInstalled[shellModuleName] = function (require, exports, module) {\n context.module = module;\n context.require = require;\n\n // Tab completion sometimes uses require.extensions, but only for\n // the keys.\n require.extensions = {\n \".js\": true,\n \".json\": true,\n \".node\": true,\n };\n };\n\n // This populates repl.context.{module,require} by evaluating the\n // module defined above.\n Package.modules.meteorInstall(toBeInstalled)(\"./\" + shellModuleName);\n }\n}\n"]}