{"version":3,"file":"bin.mjs","sourceRoot":"","sources":["../../src/bin.mts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\n// vim: set filetype=typescript\n\nimport { foregroundChild } from 'foreground-child'\nimport { readFileSync } from 'node:fs'\nimport { readFile } from 'node:fs/promises'\nimport Module from 'node:module'\nimport { resolve as pathResolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nconst [sMajor, sMinor] = process.versions.node.split('.')\n/* c8 ignore start */\nif (!sMajor || !sMinor) {\n  throw new Error(\n    'could not determine node version: ' + process.versions.node,\n  )\n}\n\nconst useImport = typeof Module.register === 'function'\nconst importScript = String(\n  new URL('./hooks/import.mjs', import.meta.url),\n)\nconst loaderScript = String(\n  new URL('./hooks/legacy-loader.mjs', import.meta.url),\n)\n/* c8 ignore start */\nconst addArg =\n  useImport ? `--import=${importScript}` : `--loader=${loaderScript}`\n/* c8 ignore stop */\n\nconst usage = () =>\n  console.log(`Usage: tsimp [<flag> | <node args>]\n\nFlags:\n\n--start   Start the persistent daemon and preload the TypeScript\n          program object for typecheck compilation.\n--stop    Kill the persistent daemon process.\n--restart Stop and then start again.\n--clear   Kill daemon and clear all cached data and logs.\n--ping    Issue a PING request to daemon and print result. Will start\n          the daemon if not already running.\n--help    You're looking at it.\n--log     Display the service log (ie, \\`cat .tsimp/daemon/log\\`)\n\n--compile <fileName>\n          Compile the specified TypeScript fileName, printing code\n          to stdout and diagnostics to stderr.\n\n--check <fileName>\n          Same as --compile, but do not output the code.\n\n--resolve <module> [<parent>]\n          Resolve the specified module name (ie, find the .ts file for\n          a .js import specifier). Will print either a full file://\n          url to the found module, or echo the specifier back.\n\nFlags have no effect unless they are the first argument.\n\nIf none of the above flags are specified, then tsimp runs node using\n'--loader=tsimp/loader' or  '--import=tsimp/import', as appropriate for\nthe current node version.\n\nAll other args are just normal node arguments.\n\nNote: \\`tsimp\\` without any arguments is a node repl that can import\nTypeScript modules, not a \"TypeScript repl\".`)\n\nconst startDaemon = async () => {\n  const { DaemonClient } = await import('./client.js')\n  await new DaemonClient().preload()\n  console.log('tsimp: daemon running')\n}\n\nconst pingDaemon = async () => {\n  const { DaemonClient } = await import('./client.js')\n  console.log(await new DaemonClient().ping())\n}\n\nconst stopDaemon = async () => {\n  const { DaemonClient } = await import('./client.js')\n  await new DaemonClient().kill()\n  console.log('tsimp: daemon stopped')\n}\n\nconst clearCache = async () => {\n  await stopDaemon()\n  const { rimraf } = await import('rimraf')\n  await rimraf('.tsimp')\n  console.log('tsimp: cache cleared')\n}\n\nconst log = async () => {\n  console.log(\n    (\n      await readFile('.tsimp/daemon/log', 'utf8').catch(\n        e =>\n          'log could not be read: ' +\n          (e as NodeJS.ErrnoException).code,\n      )\n    ).trimEnd(),\n  )\n}\n\nconst compile = async (src: string) => {\n  const { DaemonClient } = await import('./client.js')\n  const start = performance.now()\n  const { fileName, diagnostics } = await new DaemonClient().compile(\n    src,\n  )\n  const duration =\n    Math.floor((performance.now() - start) * 1000) / 1000\n  if (fileName) {\n    console.log(readFileSync(fileName, 'utf8'))\n  }\n  for (const d of diagnostics) console.error(d)\n  console.error(`compiled in ${duration} ms`)\n}\n\nconst cwdURL = String(pathToFileURL(pathResolve('x')))\nconst resolve = async (url: string, parentURL: string = cwdURL) => {\n  if (!parentURL.startsWith('file://')) {\n    parentURL = String(pathToFileURL(pathResolve(parentURL)))\n  }\n  const p = parentURL === cwdURL ? 'cwd' : parentURL\n  const f =\n    url.startsWith('./') || url.startsWith('../') ? ` from ${p}` : ''\n  console.error(`import('${url}')${f}`)\n  const { DaemonClient } = await import('./client.js')\n  console.log(await new DaemonClient().resolve(url, parentURL))\n}\n\nswitch (process.argv[2]) {\n  case '-h':\n  case '--help':\n    usage()\n    process.exit(0)\n  case '--clear':\n    await clearCache()\n    process.exit(0)\n  case '--restart':\n    await stopDaemon()\n    await startDaemon()\n    process.exit(0)\n  case '--start':\n    await startDaemon()\n    process.exit(0)\n  case '--stop':\n    await stopDaemon()\n    process.exit(0)\n  case '--ping':\n    await pingDaemon()\n    process.exit(0)\n  case '--log':\n    await log()\n    process.exit(0)\n  case '--compile':\n    if (!process.argv[3]) {\n      console.error('fileName is required')\n      process.exit(1)\n    }\n    await compile(process.argv[3])\n    process.exit(0)\n  case '--resolve':\n    if (!process.argv[3]) {\n      console.error('module specifier is required')\n      process.exit(1)\n    }\n    await resolve(process.argv[3], process.argv[4])\n    process.exit(0)\n}\n\nconst args = [addArg, ...process.execArgv, ...process.argv.slice(2)]\nforegroundChild(process.execPath, args)\n"]}