{"version":3,"file":"transpileTSToCJS.mjs","names":[],"sources":["../../../src/loadExternalFile/transpileTSToCJS.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { dirname, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n  type BuildOptions,\n  type BuildResult,\n  buildSync,\n  context,\n} from 'esbuild';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { getLoader } from './bundleFile';\n\nexport type TranspileOptions = BuildOptions & {\n  /**\n   * Optional custom esbuild instance to use for transpilation.\n   * Useful in environments (e.g. VS Code extensions) where the bundled\n   * esbuild binary may not match the host platform.\n   * When provided, its `buildSync`/`build` methods are used instead of\n   * the ones imported from the `esbuild` package.\n   */\n  esbuildInstance?: typeof import('esbuild');\n};\n\nconst getTsConfigPath = (filePath: string): string | undefined => {\n  const tsconfigPath = join(\n    getPackageJsonPath(dirname(filePath)).baseDir,\n    'tsconfig.json'\n  );\n\n  // Only return the tsconfig path if it exists\n  return existsSync(tsconfigPath) ? tsconfigPath : undefined;\n};\n\nconst getTransformationOptions = (filePath: string): BuildOptions => ({\n  loader: {\n    '.js': 'js',\n    '.jsx': 'jsx',\n    '.mjs': 'js',\n    '.ts': 'ts',\n    '.tsx': 'tsx',\n    '.cjs': 'js',\n    '.json': 'json',\n    '.md': 'text',\n    '.mdx': 'text',\n  },\n  format: 'cjs',\n  target: 'node20',\n  platform: 'node',\n  write: false,\n  packages: 'external',\n  bundle: true,\n  tsconfig: getTsConfigPath(filePath),\n  define: {\n    'import.meta.url': JSON.stringify(pathToFileURL(filePath).href),\n    'import.meta.env': 'process.env',\n  },\n});\n\nexport const transpileTSToCJSSync = (\n  code: string,\n  filePath: string,\n  options?: TranspileOptions\n): string | undefined => {\n  const extension = extname(filePath);\n  const loader = getLoader(extension);\n\n  const { esbuildInstance, ...buildOptions } = options ?? {};\n  const esbuildBuildSync = esbuildInstance?.buildSync ?? buildSync;\n\n  // esbuild's worker thread service calls `new Worker(__filename, …)` on first use.\n  // In Vite's SSR module runner the SSR-optimised chunk is ESM and __filename is\n  // never declared (confirmed: accessing it throws ReferenceError, not undefined).\n  // Because there is no local declaration the bare `__filename` lookup falls\n  // through to globalThis, so we set it there to esbuild's own CJS entry-point –\n  // the exact path esbuild would use if it were loaded in a normal CJS context.\n  if (typeof (globalThis as Record<string, unknown>).__filename !== 'string') {\n    try {\n      const _require = createRequire(import.meta.url);\n      const esbuildEntry = _require.resolve('esbuild');\n      (globalThis as Record<string, unknown>).__filename = esbuildEntry;\n      (globalThis as Record<string, unknown>).__dirname = dirname(esbuildEntry);\n    } catch {\n      // Best-effort: if esbuild can't be resolved the caller's catch handles it\n    }\n  }\n\n  const moduleResult: BuildResult = esbuildBuildSync({\n    stdin: {\n      contents: code,\n      loader,\n      resolveDir: dirname(filePath), // Add resolveDir to resolve imports relative to the file's location\n      sourcefile: filePath, // Add sourcefile for better error messages\n    },\n    ...getTransformationOptions(filePath),\n    ...buildOptions,\n  });\n\n  const moduleResultString = moduleResult.outputFiles?.[0].text;\n\n  return moduleResultString;\n};\n\nexport const transpileTSToCJS = async (\n  code: string,\n  filePath: string,\n  options?: TranspileOptions\n): Promise<string | undefined> => {\n  const extension = extname(filePath);\n  const loader = getLoader(extension);\n\n  const { esbuildInstance, ...buildOptions } = options ?? {};\n  // Use context() + rebuild() + dispose() so esbuild deterministically releases\n  // Go-subprocess resources for each one-shot transpilation, preventing them\n  // from accumulating between rapid HMR-driven file changes.\n  const esbuildContext = esbuildInstance?.context ?? context;\n\n  const ctx = await esbuildContext({\n    stdin: {\n      contents: code,\n      loader,\n      resolveDir: dirname(filePath),\n      sourcefile: filePath,\n    },\n    ...getTransformationOptions(filePath),\n    ...buildOptions,\n  });\n\n  try {\n    const moduleResult = await ctx.rebuild();\n    return moduleResult.outputFiles?.[0].text;\n  } finally {\n    await ctx.dispose();\n  }\n};\n"],"mappings":";;;;;;;;;AAwBA,MAAM,mBAAmB,aAAyC;CAChE,MAAM,eAAe,KACnB,mBAAmB,QAAQ,SAAS,CAAC,CAAC,SACtC,gBACD;AAGD,QAAO,WAAW,aAAa,GAAG,eAAe;;AAGnD,MAAM,4BAA4B,cAAoC;CACpE,QAAQ;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,OAAO;EACP,QAAQ;EACT;CACD,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,OAAO;CACP,UAAU;CACV,QAAQ;CACR,UAAU,gBAAgB,SAAS;CACnC,QAAQ;EACN,mBAAmB,KAAK,UAAU,cAAc,SAAS,CAAC,KAAK;EAC/D,mBAAmB;EACpB;CACF;AAED,MAAa,wBACX,MACA,UACA,YACuB;CAEvB,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAC1D,MAAM,mBAAmB,iBAAiB,aAAa;AAQvD,KAAI,OAAQ,WAAuC,eAAe,SAChE,KAAI;EAEF,MAAM,eADW,cAAc,OAAO,KAAK,IACd,CAAC,QAAQ,UAAU;AAChD,EAAC,WAAuC,aAAa;AACrD,EAAC,WAAuC,YAAY,QAAQ,aAAa;SACnE;AAkBV,QAbkC,iBAAiB;EACjD,OAAO;GACL,UAAU;GACV;GACA,YAAY,QAAQ,SAAS;GAC7B,YAAY;GACb;EACD,GAAG,yBAAyB,SAAS;EACrC,GAAG;EACJ,CAEsC,CAAC,cAAc,GAAG;;AAK3D,MAAa,mBAAmB,OAC9B,MACA,UACA,YACgC;CAEhC,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAM1D,MAAM,MAAM,OAFW,iBAAiB,WAAW,SAElB;EAC/B,OAAO;GACL,UAAU;GACV;GACA,YAAY,QAAQ,SAAS;GAC7B,YAAY;GACb;EACD,GAAG,yBAAyB,SAAS;EACrC,GAAG;EACJ,CAAC;AAEF,KAAI;AAEF,UAAO,MADoB,IAAI,SAAS,EACpB,cAAc,GAAG;WAC7B;AACR,QAAM,IAAI,SAAS"}