plgg-bundle 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +68 -0
  2. package/bin/appAliasHook.mjs +89 -0
  3. package/bin/hook.mjs +94 -0
  4. package/bin/plgg-bundle.mjs +16 -0
  5. package/dist/Dev/fixtures/devPoc.spec.d.ts +2 -0
  6. package/dist/Dev/fixtures/devPoc.spec.d.ts.map +1 -0
  7. package/dist/Dev/fixtures/devPoc.spec.js +145 -0
  8. package/dist/Dev/fixtures/devPoc.spec.js.map +1 -0
  9. package/dist/Dev/model/Fetch.d.ts +20 -0
  10. package/dist/Dev/model/Fetch.d.ts.map +1 -0
  11. package/dist/Dev/model/Fetch.js +8 -0
  12. package/dist/Dev/model/Fetch.js.map +1 -0
  13. package/dist/Dev/model/ModuleGraph.d.ts +27 -0
  14. package/dist/Dev/model/ModuleGraph.d.ts.map +1 -0
  15. package/dist/Dev/model/ModuleGraph.js +2 -0
  16. package/dist/Dev/model/ModuleGraph.js.map +1 -0
  17. package/dist/Dev/model/Protocol.d.ts +22 -0
  18. package/dist/Dev/model/Protocol.d.ts.map +1 -0
  19. package/dist/Dev/model/Protocol.js +31 -0
  20. package/dist/Dev/model/Protocol.js.map +1 -0
  21. package/dist/Dev/node/devServer.d.ts +21 -0
  22. package/dist/Dev/node/devServer.d.ts.map +1 -0
  23. package/dist/Dev/node/devServer.js +298 -0
  24. package/dist/Dev/node/devServer.js.map +1 -0
  25. package/dist/Dev/node/httpAdapter.d.ts +19 -0
  26. package/dist/Dev/node/httpAdapter.d.ts.map +1 -0
  27. package/dist/Dev/node/httpAdapter.js +76 -0
  28. package/dist/Dev/node/httpAdapter.js.map +1 -0
  29. package/dist/Dev/node/scanGraph.d.ts +21 -0
  30. package/dist/Dev/node/scanGraph.d.ts.map +1 -0
  31. package/dist/Dev/node/scanGraph.js +145 -0
  32. package/dist/Dev/node/scanGraph.js.map +1 -0
  33. package/dist/Dev/node/watch.d.ts +10 -0
  34. package/dist/Dev/node/watch.d.ts.map +1 -0
  35. package/dist/Dev/node/watch.js +44 -0
  36. package/dist/Dev/node/watch.js.map +1 -0
  37. package/dist/Dev/usecase/allowedHost.d.ts +16 -0
  38. package/dist/Dev/usecase/allowedHost.d.ts.map +1 -0
  39. package/dist/Dev/usecase/allowedHost.js +33 -0
  40. package/dist/Dev/usecase/allowedHost.js.map +1 -0
  41. package/dist/Dev/usecase/allowedHost.spec.d.ts +2 -0
  42. package/dist/Dev/usecase/allowedHost.spec.d.ts.map +1 -0
  43. package/dist/Dev/usecase/allowedHost.spec.js +13 -0
  44. package/dist/Dev/usecase/allowedHost.spec.js.map +1 -0
  45. package/dist/Dev/usecase/buildGraph.d.ts +12 -0
  46. package/dist/Dev/usecase/buildGraph.d.ts.map +1 -0
  47. package/dist/Dev/usecase/buildGraph.js +24 -0
  48. package/dist/Dev/usecase/buildGraph.js.map +1 -0
  49. package/dist/Dev/usecase/buildGraph.spec.d.ts +2 -0
  50. package/dist/Dev/usecase/buildGraph.spec.d.ts.map +1 -0
  51. package/dist/Dev/usecase/buildGraph.spec.js +16 -0
  52. package/dist/Dev/usecase/buildGraph.spec.js.map +1 -0
  53. package/dist/Dev/usecase/decorateDevHtml.d.ts +12 -0
  54. package/dist/Dev/usecase/decorateDevHtml.d.ts.map +1 -0
  55. package/dist/Dev/usecase/decorateDevHtml.js +15 -0
  56. package/dist/Dev/usecase/decorateDevHtml.js.map +1 -0
  57. package/dist/Dev/usecase/decorateDevHtml.spec.d.ts +2 -0
  58. package/dist/Dev/usecase/decorateDevHtml.spec.d.ts.map +1 -0
  59. package/dist/Dev/usecase/decorateDevHtml.spec.js +19 -0
  60. package/dist/Dev/usecase/decorateDevHtml.spec.js.map +1 -0
  61. package/dist/Dev/usecase/invalidate.d.ts +17 -0
  62. package/dist/Dev/usecase/invalidate.d.ts.map +1 -0
  63. package/dist/Dev/usecase/invalidate.js +57 -0
  64. package/dist/Dev/usecase/invalidate.js.map +1 -0
  65. package/dist/Dev/usecase/invalidate.spec.d.ts +2 -0
  66. package/dist/Dev/usecase/invalidate.spec.d.ts.map +1 -0
  67. package/dist/Dev/usecase/invalidate.spec.js +64 -0
  68. package/dist/Dev/usecase/invalidate.spec.js.map +1 -0
  69. package/dist/Dev/usecase/parseImports.d.ts +24 -0
  70. package/dist/Dev/usecase/parseImports.d.ts.map +1 -0
  71. package/dist/Dev/usecase/parseImports.js +40 -0
  72. package/dist/Dev/usecase/parseImports.js.map +1 -0
  73. package/dist/Dev/usecase/parseImports.spec.d.ts +2 -0
  74. package/dist/Dev/usecase/parseImports.spec.d.ts.map +1 -0
  75. package/dist/Dev/usecase/parseImports.spec.js +24 -0
  76. package/dist/Dev/usecase/parseImports.spec.js.map +1 -0
  77. package/dist/Dev/usecase/reloadDecision.d.ts +20 -0
  78. package/dist/Dev/usecase/reloadDecision.d.ts.map +1 -0
  79. package/dist/Dev/usecase/reloadDecision.js +52 -0
  80. package/dist/Dev/usecase/reloadDecision.js.map +1 -0
  81. package/dist/Dev/usecase/reloadDecision.spec.d.ts +2 -0
  82. package/dist/Dev/usecase/reloadDecision.spec.d.ts.map +1 -0
  83. package/dist/Dev/usecase/reloadDecision.spec.js +17 -0
  84. package/dist/Dev/usecase/reloadDecision.spec.js.map +1 -0
  85. package/dist/domain/model/BundleConfig.d.ts +136 -0
  86. package/dist/domain/model/BundleConfig.d.ts.map +1 -0
  87. package/dist/domain/model/BundleConfig.js +18 -0
  88. package/dist/domain/model/BundleConfig.js.map +1 -0
  89. package/dist/domain/model/BundleConfig.spec.d.ts +2 -0
  90. package/dist/domain/model/BundleConfig.spec.d.ts.map +1 -0
  91. package/dist/domain/model/BundleConfig.spec.js +8 -0
  92. package/dist/domain/model/BundleConfig.spec.js.map +1 -0
  93. package/dist/domain/usecase/asBundleConfig.d.ts +17 -0
  94. package/dist/domain/usecase/asBundleConfig.d.ts.map +1 -0
  95. package/dist/domain/usecase/asBundleConfig.js +179 -0
  96. package/dist/domain/usecase/asBundleConfig.js.map +1 -0
  97. package/dist/domain/usecase/asBundleConfig.spec.d.ts +2 -0
  98. package/dist/domain/usecase/asBundleConfig.spec.d.ts.map +1 -0
  99. package/dist/domain/usecase/asBundleConfig.spec.js +119 -0
  100. package/dist/domain/usecase/asBundleConfig.spec.js.map +1 -0
  101. package/dist/domain/usecase/build.d.ts +14 -0
  102. package/dist/domain/usecase/build.d.ts.map +1 -0
  103. package/dist/domain/usecase/build.js +177 -0
  104. package/dist/domain/usecase/build.js.map +1 -0
  105. package/dist/domain/usecase/collectModules.d.ts +53 -0
  106. package/dist/domain/usecase/collectModules.d.ts.map +1 -0
  107. package/dist/domain/usecase/collectModules.js +118 -0
  108. package/dist/domain/usecase/collectModules.js.map +1 -0
  109. package/dist/domain/usecase/deriveExternal.d.ts +25 -0
  110. package/dist/domain/usecase/deriveExternal.d.ts.map +1 -0
  111. package/dist/domain/usecase/deriveExternal.js +79 -0
  112. package/dist/domain/usecase/deriveExternal.js.map +1 -0
  113. package/dist/domain/usecase/deriveExternal.spec.d.ts +2 -0
  114. package/dist/domain/usecase/deriveExternal.spec.d.ts.map +1 -0
  115. package/dist/domain/usecase/deriveExternal.spec.js +56 -0
  116. package/dist/domain/usecase/deriveExternal.spec.js.map +1 -0
  117. package/dist/domain/usecase/discoverWorkspace.d.ts +27 -0
  118. package/dist/domain/usecase/discoverWorkspace.d.ts.map +1 -0
  119. package/dist/domain/usecase/discoverWorkspace.js +116 -0
  120. package/dist/domain/usecase/discoverWorkspace.js.map +1 -0
  121. package/dist/domain/usecase/discoverWorkspace.spec.d.ts +2 -0
  122. package/dist/domain/usecase/discoverWorkspace.spec.d.ts.map +1 -0
  123. package/dist/domain/usecase/discoverWorkspace.spec.js +23 -0
  124. package/dist/domain/usecase/discoverWorkspace.spec.js.map +1 -0
  125. package/dist/domain/usecase/emitBundle.d.ts +43 -0
  126. package/dist/domain/usecase/emitBundle.d.ts.map +1 -0
  127. package/dist/domain/usecase/emitBundle.js +157 -0
  128. package/dist/domain/usecase/emitBundle.js.map +1 -0
  129. package/dist/domain/usecase/emitBundle.spec.d.ts +2 -0
  130. package/dist/domain/usecase/emitBundle.spec.d.ts.map +1 -0
  131. package/dist/domain/usecase/emitBundle.spec.js +80 -0
  132. package/dist/domain/usecase/emitBundle.spec.js.map +1 -0
  133. package/dist/domain/usecase/emitDts.d.ts +32 -0
  134. package/dist/domain/usecase/emitDts.d.ts.map +1 -0
  135. package/dist/domain/usecase/emitDts.js +99 -0
  136. package/dist/domain/usecase/emitDts.js.map +1 -0
  137. package/dist/domain/usecase/isExternal.d.ts +12 -0
  138. package/dist/domain/usecase/isExternal.d.ts.map +1 -0
  139. package/dist/domain/usecase/isExternal.js +16 -0
  140. package/dist/domain/usecase/isExternal.js.map +1 -0
  141. package/dist/domain/usecase/isExternal.spec.d.ts +2 -0
  142. package/dist/domain/usecase/isExternal.spec.d.ts.map +1 -0
  143. package/dist/domain/usecase/isExternal.spec.js +16 -0
  144. package/dist/domain/usecase/isExternal.spec.js.map +1 -0
  145. package/dist/domain/usecase/resolveSpecifier.d.ts +35 -0
  146. package/dist/domain/usecase/resolveSpecifier.d.ts.map +1 -0
  147. package/dist/domain/usecase/resolveSpecifier.js +83 -0
  148. package/dist/domain/usecase/resolveSpecifier.js.map +1 -0
  149. package/dist/domain/usecase/resolveSpecifier.spec.d.ts +2 -0
  150. package/dist/domain/usecase/resolveSpecifier.spec.d.ts.map +1 -0
  151. package/dist/domain/usecase/resolveSpecifier.spec.js +44 -0
  152. package/dist/domain/usecase/resolveSpecifier.spec.js.map +1 -0
  153. package/dist/domain/usecase/resolveWorkspaceSpecifier.d.ts +29 -0
  154. package/dist/domain/usecase/resolveWorkspaceSpecifier.d.ts.map +1 -0
  155. package/dist/domain/usecase/resolveWorkspaceSpecifier.js +89 -0
  156. package/dist/domain/usecase/resolveWorkspaceSpecifier.js.map +1 -0
  157. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.d.ts +2 -0
  158. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.d.ts.map +1 -0
  159. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.js +27 -0
  160. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.js.map +1 -0
  161. package/dist/domain/usecase/rewriteDtsAliases.d.ts +25 -0
  162. package/dist/domain/usecase/rewriteDtsAliases.d.ts.map +1 -0
  163. package/dist/domain/usecase/rewriteDtsAliases.js +71 -0
  164. package/dist/domain/usecase/rewriteDtsAliases.js.map +1 -0
  165. package/dist/domain/usecase/rewriteDtsAliases.spec.d.ts +2 -0
  166. package/dist/domain/usecase/rewriteDtsAliases.spec.d.ts.map +1 -0
  167. package/dist/domain/usecase/rewriteDtsAliases.spec.js +35 -0
  168. package/dist/domain/usecase/rewriteDtsAliases.spec.js.map +1 -0
  169. package/dist/entrypoints/cli.d.ts +2 -0
  170. package/dist/entrypoints/cli.d.ts.map +1 -0
  171. package/dist/entrypoints/cli.js +79 -0
  172. package/dist/entrypoints/cli.js.map +1 -0
  173. package/dist/index.d.ts +21 -0
  174. package/dist/index.d.ts.map +1 -0
  175. package/dist/index.js +28 -0
  176. package/dist/index.js.map +1 -0
  177. package/dist/vendors/runner.d.ts +20 -0
  178. package/dist/vendors/runner.d.ts.map +1 -0
  179. package/dist/vendors/runner.js +60 -0
  180. package/dist/vendors/runner.js.map +1 -0
  181. package/dist/vendors/runner.spec.d.ts +2 -0
  182. package/dist/vendors/runner.spec.d.ts.map +1 -0
  183. package/dist/vendors/runner.spec.js +20 -0
  184. package/dist/vendors/runner.spec.js.map +1 -0
  185. package/dist/vendors/transpiler.d.ts +19 -0
  186. package/dist/vendors/transpiler.d.ts.map +1 -0
  187. package/dist/vendors/transpiler.js +42 -0
  188. package/dist/vendors/transpiler.js.map +1 -0
  189. package/package.json +31 -0
  190. package/src/Dev/fixtures/devPoc.spec.ts +235 -0
  191. package/src/Dev/model/Fetch.ts +31 -0
  192. package/src/Dev/model/ModuleGraph.ts +30 -0
  193. package/src/Dev/model/Protocol.ts +35 -0
  194. package/src/Dev/node/devServer.ts +503 -0
  195. package/src/Dev/node/httpAdapter.ts +162 -0
  196. package/src/Dev/node/scanGraph.ts +203 -0
  197. package/src/Dev/node/watch.ts +54 -0
  198. package/src/Dev/usecase/allowedHost.spec.ts +50 -0
  199. package/src/Dev/usecase/allowedHost.ts +39 -0
  200. package/src/Dev/usecase/buildGraph.spec.ts +30 -0
  201. package/src/Dev/usecase/buildGraph.ts +31 -0
  202. package/src/Dev/usecase/decorateDevHtml.spec.ts +39 -0
  203. package/src/Dev/usecase/decorateDevHtml.ts +21 -0
  204. package/src/Dev/usecase/invalidate.spec.ts +88 -0
  205. package/src/Dev/usecase/invalidate.ts +67 -0
  206. package/src/Dev/usecase/parseImports.spec.ts +58 -0
  207. package/src/Dev/usecase/parseImports.ts +50 -0
  208. package/src/Dev/usecase/reloadDecision.spec.ts +50 -0
  209. package/src/Dev/usecase/reloadDecision.ts +65 -0
  210. package/src/domain/model/BundleConfig.spec.ts +35 -0
  211. package/src/domain/model/BundleConfig.ts +162 -0
  212. package/src/domain/usecase/asBundleConfig.spec.ts +230 -0
  213. package/src/domain/usecase/asBundleConfig.ts +257 -0
  214. package/src/domain/usecase/build.ts +259 -0
  215. package/src/domain/usecase/collectModules.ts +226 -0
  216. package/src/domain/usecase/deriveExternal.spec.ts +125 -0
  217. package/src/domain/usecase/deriveExternal.ts +108 -0
  218. package/src/domain/usecase/discoverWorkspace.spec.ts +63 -0
  219. package/src/domain/usecase/discoverWorkspace.ts +183 -0
  220. package/src/domain/usecase/emitBundle.spec.ts +162 -0
  221. package/src/domain/usecase/emitBundle.ts +215 -0
  222. package/src/domain/usecase/emitDts.ts +156 -0
  223. package/src/domain/usecase/isExternal.spec.ts +53 -0
  224. package/src/domain/usecase/isExternal.ts +20 -0
  225. package/src/domain/usecase/resolveSpecifier.spec.ts +112 -0
  226. package/src/domain/usecase/resolveSpecifier.ts +127 -0
  227. package/src/domain/usecase/resolveWorkspaceSpecifier.spec.ts +79 -0
  228. package/src/domain/usecase/resolveWorkspaceSpecifier.ts +120 -0
  229. package/src/domain/usecase/rewriteDtsAliases.spec.ts +123 -0
  230. package/src/domain/usecase/rewriteDtsAliases.ts +133 -0
  231. package/src/entrypoints/cli.ts +105 -0
  232. package/src/index.ts +28 -0
  233. package/src/vendors/runner.spec.ts +50 -0
  234. package/src/vendors/runner.ts +78 -0
  235. package/src/vendors/transpiler.ts +48 -0
package/src/index.ts ADDED
@@ -0,0 +1,28 @@
1
+ // Public API of the in-house bundler. The CLI
2
+ // (`bin/plgg-bundle.mjs` → `src/entrypoints/cli.ts`) is
3
+ // the usual entry; these exports let other tooling
4
+ // drive the bundler programmatically.
5
+ export * from "plgg-bundle/domain/model/BundleConfig";
6
+ export * from "plgg-bundle/domain/usecase/asBundleConfig";
7
+ export * from "plgg-bundle/domain/usecase/build";
8
+ export * from "plgg-bundle/domain/usecase/collectModules";
9
+ export * from "plgg-bundle/domain/usecase/deriveExternal";
10
+ export * from "plgg-bundle/domain/usecase/emitBundle";
11
+ export * from "plgg-bundle/domain/usecase/emitDts";
12
+ export * from "plgg-bundle/domain/usecase/isExternal";
13
+ export * from "plgg-bundle/domain/usecase/resolveSpecifier";
14
+ export * from "plgg-bundle/domain/usecase/rewriteDtsAliases";
15
+
16
+ // Dev server (the `plgg-bundle dev` toolchain half): the
17
+ // app⇄server contract, the pure hot-reload core, and the
18
+ // node-adapter entry point.
19
+ export * from "plgg-bundle/Dev/model/Fetch";
20
+ export * from "plgg-bundle/Dev/model/ModuleGraph";
21
+ export * from "plgg-bundle/Dev/model/Protocol";
22
+ export * from "plgg-bundle/Dev/usecase/parseImports";
23
+ export * from "plgg-bundle/Dev/usecase/buildGraph";
24
+ export * from "plgg-bundle/Dev/usecase/invalidate";
25
+ export * from "plgg-bundle/Dev/usecase/reloadDecision";
26
+ export * from "plgg-bundle/Dev/usecase/decorateDevHtml";
27
+ export * from "plgg-bundle/Dev/usecase/allowedHost";
28
+ export * from "plgg-bundle/Dev/node/devServer";
@@ -0,0 +1,50 @@
1
+ import {
2
+ test,
3
+ check,
4
+ all,
5
+ toBe,
6
+ } from "plgg-test";
7
+ import { join } from "node:path";
8
+ import { readExportNames } from "plgg-bundle/vendors/runner";
9
+
10
+ // Root createRequire at plgg-bundle's own package so a
11
+ // bundle's external require resolves against real
12
+ // node_modules / node builtins (gap #2: externals-aware
13
+ // export-surface discovery).
14
+ const resolveBase = join(
15
+ import.meta.dirname,
16
+ "..",
17
+ "..",
18
+ );
19
+
20
+ test("readExportNames reads a self-contained CJS bundle's keys", () =>
21
+ check(
22
+ readExportNames(
23
+ "exports.a = 1; exports.b = 2;",
24
+ resolveBase,
25
+ ).join(","),
26
+ toBe("a,b"),
27
+ ));
28
+
29
+ test("readExportNames resolves an EXTERNAL require during discovery (gap #2)", () =>
30
+ // The bundle keeps `require("node:path")` as an
31
+ // external; discovery must run it via host require
32
+ // (rooted at the target package) without throwing,
33
+ // and still enumerate the entry's own exports.
34
+ all([
35
+ check(
36
+ readExportNames(
37
+ 'const p = require("node:path"); exports.sep = p.sep; exports.x = 1;',
38
+ resolveBase,
39
+ ).join(","),
40
+ toBe("sep,x"),
41
+ ),
42
+ // __esModule is filtered out of the surface.
43
+ check(
44
+ readExportNames(
45
+ 'Object.defineProperty(exports, "__esModule", { value: true }); exports.only = 1;',
46
+ resolveBase,
47
+ ).join(","),
48
+ toBe("only"),
49
+ ),
50
+ ]));
@@ -0,0 +1,78 @@
1
+ import vm from "node:vm";
2
+ import { createRequire } from "node:module";
3
+ import { join } from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+
6
+ /**
7
+ * Run a self-contained CJS bundle in an isolated VM
8
+ * context and return its `module.exports` enumerable
9
+ * keys (minus `__esModule`), sorted. This is how the
10
+ * ESM emitter learns the exact public surface, since
11
+ * ESM cannot declare exports dynamically. Re-throws
12
+ * with context on failure.
13
+ *
14
+ * `resolveBase` is the TARGET package's root: the
15
+ * bundle's external `require("plgg")` / `require("node:*")`
16
+ * must resolve against the target package's own
17
+ * node_modules (not the bundler's), so the require is
18
+ * rooted there. Upstream dists exist in build order, so
19
+ * the externals resolve.
20
+ *
21
+ * Isolated in `src/vendors/` because executing generated
22
+ * code is an effectful boundary, not domain logic.
23
+ */
24
+ export const readExportNames = (
25
+ cjsCode: string,
26
+ resolveBase: string,
27
+ ): ReadonlyArray<string> => {
28
+ try {
29
+ return keysOf(evalCjs(cjsCode, resolveBase));
30
+ } catch (cause) {
31
+ throw new Error(
32
+ `EvalError: failed to read export surface: ${
33
+ cause instanceof Error
34
+ ? cause.message
35
+ : String(cause)
36
+ }`,
37
+ );
38
+ }
39
+ };
40
+
41
+ /**
42
+ * Evaluate CJS source in a fresh context with a `require`
43
+ * rooted at the target package, an empty
44
+ * `module`/`exports`, and `console`, returning the
45
+ * populated `module.exports`.
46
+ */
47
+ const evalCjs = (
48
+ code: string,
49
+ resolveBase: string,
50
+ ): object => {
51
+ const moduleObj: { exports: object } = {
52
+ exports: {},
53
+ };
54
+ const context = vm.createContext({
55
+ module: moduleObj,
56
+ exports: moduleObj.exports,
57
+ require: createRequire(
58
+ pathToFileURL(
59
+ join(resolveBase, "package.json"),
60
+ ),
61
+ ),
62
+ console,
63
+ });
64
+ vm.runInContext(code, context);
65
+ return moduleObj.exports;
66
+ };
67
+
68
+ /**
69
+ * Enumerable own keys of the exports object, dropping
70
+ * the `__esModule` interop marker, sorted for a stable
71
+ * named-export list.
72
+ */
73
+ const keysOf = (
74
+ exportsObj: object,
75
+ ): ReadonlyArray<string> =>
76
+ Object.keys(exportsObj)
77
+ .filter((k) => k !== "__esModule")
78
+ .sort();
@@ -0,0 +1,48 @@
1
+ import ts from "typescript";
2
+
3
+ /**
4
+ * Anti-corruption layer over the TypeScript compiler's
5
+ * single-file transpile. Translation + delegation only:
6
+ * TS source in, plain CommonJS JavaScript out; a thrown
7
+ * compiler error is re-thrown with file context. No
8
+ * bundling logic lives here — the graph walk and emit
9
+ * are the in-house domain.
10
+ *
11
+ * CommonJS is the target because the in-house
12
+ * module-registry runtime (domain/usecase/emitBundle)
13
+ * wraps each module body as `(module, exports, require)
14
+ * => {...}`; TS lowers `export`/`import`/`export *` to
15
+ * the `exports.x = ` / `require(...)` forms the runtime
16
+ * rewrites and links. `removeComments` is the free size
17
+ * trim that stands in for a (rejected) minifier
18
+ * dependency.
19
+ */
20
+ export const transpileToCjs = (
21
+ file: string,
22
+ source: string,
23
+ ): string => {
24
+ try {
25
+ return ts.transpileModule(source, {
26
+ fileName: file,
27
+ compilerOptions: {
28
+ module: ts.ModuleKind.CommonJS,
29
+ target: ts.ScriptTarget.ES2021,
30
+ esModuleInterop: false,
31
+ isolatedModules: true,
32
+ verbatimModuleSyntax: false,
33
+ removeComments: true,
34
+ },
35
+ }).outputText;
36
+ } catch (cause) {
37
+ throw new Error(
38
+ `TranspileError: ${file}: ${messageOf(cause)}`,
39
+ );
40
+ }
41
+ };
42
+
43
+ /**
44
+ * The message of an unknown thrown value, without
45
+ * assuming it is an `Error`.
46
+ */
47
+ const messageOf = (e: unknown): string =>
48
+ e instanceof Error ? e.message : String(e);