plgg-bundle 0.0.1 → 0.0.3

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 (208) hide show
  1. package/bin/hook.d.mts +20 -0
  2. package/bin/hook.mjs +11 -2
  3. package/bin/plgg-bundle.mjs +9 -0
  4. package/bin/relocate.mjs +108 -0
  5. package/package.json +2 -5
  6. package/src/Dev/fixtures/aliasDir/index.ts +6 -0
  7. package/src/Dev/node/devServer.ts +5 -5
  8. package/src/Dev/node/httpAdapter.ts +1 -1
  9. package/src/Dev/node/scanGraph.ts +2 -2
  10. package/src/Dev/node/watch.ts +1 -1
  11. package/src/Dev/usecase/selfAliasResolve.spec.ts +68 -0
  12. package/src/domain/usecase/build.ts +2 -2
  13. package/src/domain/usecase/collectModules.ts +2 -2
  14. package/src/domain/usecase/deriveExternal.ts +2 -2
  15. package/src/domain/usecase/discoverWorkspace.ts +2 -2
  16. package/src/domain/usecase/emitDts.ts +4 -4
  17. package/src/domain/usecase/resolveSpecifier.ts +2 -2
  18. package/src/domain/usecase/resolveWorkspaceSpecifier.ts +1 -1
  19. package/src/domain/usecase/rewriteDtsAliases.ts +2 -2
  20. package/src/vendors/nodeFs.ts +22 -0
  21. package/src/vendors/nodeHttp.ts +14 -0
  22. package/src/vendors/nodePath.ts +15 -0
  23. package/src/vendors/nodeProc.ts +12 -0
  24. package/src/vendors/nodeUrl.ts +6 -0
  25. package/dist/Dev/fixtures/devPoc.spec.d.ts +0 -2
  26. package/dist/Dev/fixtures/devPoc.spec.d.ts.map +0 -1
  27. package/dist/Dev/fixtures/devPoc.spec.js +0 -145
  28. package/dist/Dev/fixtures/devPoc.spec.js.map +0 -1
  29. package/dist/Dev/model/Fetch.d.ts +0 -20
  30. package/dist/Dev/model/Fetch.d.ts.map +0 -1
  31. package/dist/Dev/model/Fetch.js +0 -8
  32. package/dist/Dev/model/Fetch.js.map +0 -1
  33. package/dist/Dev/model/ModuleGraph.d.ts +0 -27
  34. package/dist/Dev/model/ModuleGraph.d.ts.map +0 -1
  35. package/dist/Dev/model/ModuleGraph.js +0 -2
  36. package/dist/Dev/model/ModuleGraph.js.map +0 -1
  37. package/dist/Dev/model/Protocol.d.ts +0 -22
  38. package/dist/Dev/model/Protocol.d.ts.map +0 -1
  39. package/dist/Dev/model/Protocol.js +0 -31
  40. package/dist/Dev/model/Protocol.js.map +0 -1
  41. package/dist/Dev/node/devServer.d.ts +0 -21
  42. package/dist/Dev/node/devServer.d.ts.map +0 -1
  43. package/dist/Dev/node/devServer.js +0 -298
  44. package/dist/Dev/node/devServer.js.map +0 -1
  45. package/dist/Dev/node/httpAdapter.d.ts +0 -19
  46. package/dist/Dev/node/httpAdapter.d.ts.map +0 -1
  47. package/dist/Dev/node/httpAdapter.js +0 -76
  48. package/dist/Dev/node/httpAdapter.js.map +0 -1
  49. package/dist/Dev/node/scanGraph.d.ts +0 -21
  50. package/dist/Dev/node/scanGraph.d.ts.map +0 -1
  51. package/dist/Dev/node/scanGraph.js +0 -145
  52. package/dist/Dev/node/scanGraph.js.map +0 -1
  53. package/dist/Dev/node/watch.d.ts +0 -10
  54. package/dist/Dev/node/watch.d.ts.map +0 -1
  55. package/dist/Dev/node/watch.js +0 -44
  56. package/dist/Dev/node/watch.js.map +0 -1
  57. package/dist/Dev/usecase/allowedHost.d.ts +0 -16
  58. package/dist/Dev/usecase/allowedHost.d.ts.map +0 -1
  59. package/dist/Dev/usecase/allowedHost.js +0 -33
  60. package/dist/Dev/usecase/allowedHost.js.map +0 -1
  61. package/dist/Dev/usecase/allowedHost.spec.d.ts +0 -2
  62. package/dist/Dev/usecase/allowedHost.spec.d.ts.map +0 -1
  63. package/dist/Dev/usecase/allowedHost.spec.js +0 -13
  64. package/dist/Dev/usecase/allowedHost.spec.js.map +0 -1
  65. package/dist/Dev/usecase/buildGraph.d.ts +0 -12
  66. package/dist/Dev/usecase/buildGraph.d.ts.map +0 -1
  67. package/dist/Dev/usecase/buildGraph.js +0 -24
  68. package/dist/Dev/usecase/buildGraph.js.map +0 -1
  69. package/dist/Dev/usecase/buildGraph.spec.d.ts +0 -2
  70. package/dist/Dev/usecase/buildGraph.spec.d.ts.map +0 -1
  71. package/dist/Dev/usecase/buildGraph.spec.js +0 -16
  72. package/dist/Dev/usecase/buildGraph.spec.js.map +0 -1
  73. package/dist/Dev/usecase/decorateDevHtml.d.ts +0 -12
  74. package/dist/Dev/usecase/decorateDevHtml.d.ts.map +0 -1
  75. package/dist/Dev/usecase/decorateDevHtml.js +0 -15
  76. package/dist/Dev/usecase/decorateDevHtml.js.map +0 -1
  77. package/dist/Dev/usecase/decorateDevHtml.spec.d.ts +0 -2
  78. package/dist/Dev/usecase/decorateDevHtml.spec.d.ts.map +0 -1
  79. package/dist/Dev/usecase/decorateDevHtml.spec.js +0 -19
  80. package/dist/Dev/usecase/decorateDevHtml.spec.js.map +0 -1
  81. package/dist/Dev/usecase/invalidate.d.ts +0 -17
  82. package/dist/Dev/usecase/invalidate.d.ts.map +0 -1
  83. package/dist/Dev/usecase/invalidate.js +0 -57
  84. package/dist/Dev/usecase/invalidate.js.map +0 -1
  85. package/dist/Dev/usecase/invalidate.spec.d.ts +0 -2
  86. package/dist/Dev/usecase/invalidate.spec.d.ts.map +0 -1
  87. package/dist/Dev/usecase/invalidate.spec.js +0 -64
  88. package/dist/Dev/usecase/invalidate.spec.js.map +0 -1
  89. package/dist/Dev/usecase/parseImports.d.ts +0 -24
  90. package/dist/Dev/usecase/parseImports.d.ts.map +0 -1
  91. package/dist/Dev/usecase/parseImports.js +0 -40
  92. package/dist/Dev/usecase/parseImports.js.map +0 -1
  93. package/dist/Dev/usecase/parseImports.spec.d.ts +0 -2
  94. package/dist/Dev/usecase/parseImports.spec.d.ts.map +0 -1
  95. package/dist/Dev/usecase/parseImports.spec.js +0 -24
  96. package/dist/Dev/usecase/parseImports.spec.js.map +0 -1
  97. package/dist/Dev/usecase/reloadDecision.d.ts +0 -20
  98. package/dist/Dev/usecase/reloadDecision.d.ts.map +0 -1
  99. package/dist/Dev/usecase/reloadDecision.js +0 -52
  100. package/dist/Dev/usecase/reloadDecision.js.map +0 -1
  101. package/dist/Dev/usecase/reloadDecision.spec.d.ts +0 -2
  102. package/dist/Dev/usecase/reloadDecision.spec.d.ts.map +0 -1
  103. package/dist/Dev/usecase/reloadDecision.spec.js +0 -17
  104. package/dist/Dev/usecase/reloadDecision.spec.js.map +0 -1
  105. package/dist/domain/model/BundleConfig.d.ts +0 -136
  106. package/dist/domain/model/BundleConfig.d.ts.map +0 -1
  107. package/dist/domain/model/BundleConfig.js +0 -18
  108. package/dist/domain/model/BundleConfig.js.map +0 -1
  109. package/dist/domain/model/BundleConfig.spec.d.ts +0 -2
  110. package/dist/domain/model/BundleConfig.spec.d.ts.map +0 -1
  111. package/dist/domain/model/BundleConfig.spec.js +0 -8
  112. package/dist/domain/model/BundleConfig.spec.js.map +0 -1
  113. package/dist/domain/usecase/asBundleConfig.d.ts +0 -17
  114. package/dist/domain/usecase/asBundleConfig.d.ts.map +0 -1
  115. package/dist/domain/usecase/asBundleConfig.js +0 -179
  116. package/dist/domain/usecase/asBundleConfig.js.map +0 -1
  117. package/dist/domain/usecase/asBundleConfig.spec.d.ts +0 -2
  118. package/dist/domain/usecase/asBundleConfig.spec.d.ts.map +0 -1
  119. package/dist/domain/usecase/asBundleConfig.spec.js +0 -119
  120. package/dist/domain/usecase/asBundleConfig.spec.js.map +0 -1
  121. package/dist/domain/usecase/build.d.ts +0 -14
  122. package/dist/domain/usecase/build.d.ts.map +0 -1
  123. package/dist/domain/usecase/build.js +0 -177
  124. package/dist/domain/usecase/build.js.map +0 -1
  125. package/dist/domain/usecase/collectModules.d.ts +0 -53
  126. package/dist/domain/usecase/collectModules.d.ts.map +0 -1
  127. package/dist/domain/usecase/collectModules.js +0 -118
  128. package/dist/domain/usecase/collectModules.js.map +0 -1
  129. package/dist/domain/usecase/deriveExternal.d.ts +0 -25
  130. package/dist/domain/usecase/deriveExternal.d.ts.map +0 -1
  131. package/dist/domain/usecase/deriveExternal.js +0 -79
  132. package/dist/domain/usecase/deriveExternal.js.map +0 -1
  133. package/dist/domain/usecase/deriveExternal.spec.d.ts +0 -2
  134. package/dist/domain/usecase/deriveExternal.spec.d.ts.map +0 -1
  135. package/dist/domain/usecase/deriveExternal.spec.js +0 -56
  136. package/dist/domain/usecase/deriveExternal.spec.js.map +0 -1
  137. package/dist/domain/usecase/discoverWorkspace.d.ts +0 -27
  138. package/dist/domain/usecase/discoverWorkspace.d.ts.map +0 -1
  139. package/dist/domain/usecase/discoverWorkspace.js +0 -116
  140. package/dist/domain/usecase/discoverWorkspace.js.map +0 -1
  141. package/dist/domain/usecase/discoverWorkspace.spec.d.ts +0 -2
  142. package/dist/domain/usecase/discoverWorkspace.spec.d.ts.map +0 -1
  143. package/dist/domain/usecase/discoverWorkspace.spec.js +0 -23
  144. package/dist/domain/usecase/discoverWorkspace.spec.js.map +0 -1
  145. package/dist/domain/usecase/emitBundle.d.ts +0 -43
  146. package/dist/domain/usecase/emitBundle.d.ts.map +0 -1
  147. package/dist/domain/usecase/emitBundle.js +0 -157
  148. package/dist/domain/usecase/emitBundle.js.map +0 -1
  149. package/dist/domain/usecase/emitBundle.spec.d.ts +0 -2
  150. package/dist/domain/usecase/emitBundle.spec.d.ts.map +0 -1
  151. package/dist/domain/usecase/emitBundle.spec.js +0 -80
  152. package/dist/domain/usecase/emitBundle.spec.js.map +0 -1
  153. package/dist/domain/usecase/emitDts.d.ts +0 -32
  154. package/dist/domain/usecase/emitDts.d.ts.map +0 -1
  155. package/dist/domain/usecase/emitDts.js +0 -99
  156. package/dist/domain/usecase/emitDts.js.map +0 -1
  157. package/dist/domain/usecase/isExternal.d.ts +0 -12
  158. package/dist/domain/usecase/isExternal.d.ts.map +0 -1
  159. package/dist/domain/usecase/isExternal.js +0 -16
  160. package/dist/domain/usecase/isExternal.js.map +0 -1
  161. package/dist/domain/usecase/isExternal.spec.d.ts +0 -2
  162. package/dist/domain/usecase/isExternal.spec.d.ts.map +0 -1
  163. package/dist/domain/usecase/isExternal.spec.js +0 -16
  164. package/dist/domain/usecase/isExternal.spec.js.map +0 -1
  165. package/dist/domain/usecase/resolveSpecifier.d.ts +0 -35
  166. package/dist/domain/usecase/resolveSpecifier.d.ts.map +0 -1
  167. package/dist/domain/usecase/resolveSpecifier.js +0 -83
  168. package/dist/domain/usecase/resolveSpecifier.js.map +0 -1
  169. package/dist/domain/usecase/resolveSpecifier.spec.d.ts +0 -2
  170. package/dist/domain/usecase/resolveSpecifier.spec.d.ts.map +0 -1
  171. package/dist/domain/usecase/resolveSpecifier.spec.js +0 -44
  172. package/dist/domain/usecase/resolveSpecifier.spec.js.map +0 -1
  173. package/dist/domain/usecase/resolveWorkspaceSpecifier.d.ts +0 -29
  174. package/dist/domain/usecase/resolveWorkspaceSpecifier.d.ts.map +0 -1
  175. package/dist/domain/usecase/resolveWorkspaceSpecifier.js +0 -89
  176. package/dist/domain/usecase/resolveWorkspaceSpecifier.js.map +0 -1
  177. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.d.ts +0 -2
  178. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.d.ts.map +0 -1
  179. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.js +0 -27
  180. package/dist/domain/usecase/resolveWorkspaceSpecifier.spec.js.map +0 -1
  181. package/dist/domain/usecase/rewriteDtsAliases.d.ts +0 -25
  182. package/dist/domain/usecase/rewriteDtsAliases.d.ts.map +0 -1
  183. package/dist/domain/usecase/rewriteDtsAliases.js +0 -71
  184. package/dist/domain/usecase/rewriteDtsAliases.js.map +0 -1
  185. package/dist/domain/usecase/rewriteDtsAliases.spec.d.ts +0 -2
  186. package/dist/domain/usecase/rewriteDtsAliases.spec.d.ts.map +0 -1
  187. package/dist/domain/usecase/rewriteDtsAliases.spec.js +0 -35
  188. package/dist/domain/usecase/rewriteDtsAliases.spec.js.map +0 -1
  189. package/dist/entrypoints/cli.d.ts +0 -2
  190. package/dist/entrypoints/cli.d.ts.map +0 -1
  191. package/dist/entrypoints/cli.js +0 -79
  192. package/dist/entrypoints/cli.js.map +0 -1
  193. package/dist/index.d.ts +0 -21
  194. package/dist/index.d.ts.map +0 -1
  195. package/dist/index.js +0 -28
  196. package/dist/index.js.map +0 -1
  197. package/dist/vendors/runner.d.ts +0 -20
  198. package/dist/vendors/runner.d.ts.map +0 -1
  199. package/dist/vendors/runner.js +0 -60
  200. package/dist/vendors/runner.js.map +0 -1
  201. package/dist/vendors/runner.spec.d.ts +0 -2
  202. package/dist/vendors/runner.spec.d.ts.map +0 -1
  203. package/dist/vendors/runner.spec.js +0 -20
  204. package/dist/vendors/runner.spec.js.map +0 -1
  205. package/dist/vendors/transpiler.d.ts +0 -19
  206. package/dist/vendors/transpiler.d.ts.map +0 -1
  207. package/dist/vendors/transpiler.js +0 -42
  208. package/dist/vendors/transpiler.js.map +0 -1
@@ -1,24 +0,0 @@
1
- /**
2
- * Extract the import specifiers from a TypeScript/ESM
3
- * source string. Pure string analysis — no fs, no
4
- * `typescript` AST — matching the three import forms the
5
- * monorepo actually uses:
6
- *
7
- * - static `import ... from "spec"`,
8
- * - re-export `export ... from "spec"`,
9
- * - dynamic `import("spec")`.
10
- *
11
- * The node adapter feeds each watched file's contents
12
- * through this to build the local module graph. Returns
13
- * specifiers in source order (duplicates preserved);
14
- * resolution + local-only filtering is the adapter's job.
15
- *
16
- * This is intentionally a lightweight lexical scan, not a
17
- * full parser: the specifiers it yields drive only the
18
- * dev server's *reload decision* (which files are part of
19
- * the served graph), never the production build, so an
20
- * exotic un-matched form costs at most one conservative
21
- * extra reload — never a wrong bundle.
22
- */
23
- export declare const parseImports: (source: string) => ReadonlyArray<string>;
24
- //# sourceMappingURL=parseImports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseImports.d.ts","sourceRoot":"","sources":["../../../src/Dev/usecase/parseImports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,YAAY,GACvB,QAAQ,MAAM,KACb,aAAa,CAAC,MAAM,CAcpB,CAAC"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Extract the import specifiers from a TypeScript/ESM
3
- * source string. Pure string analysis — no fs, no
4
- * `typescript` AST — matching the three import forms the
5
- * monorepo actually uses:
6
- *
7
- * - static `import ... from "spec"`,
8
- * - re-export `export ... from "spec"`,
9
- * - dynamic `import("spec")`.
10
- *
11
- * The node adapter feeds each watched file's contents
12
- * through this to build the local module graph. Returns
13
- * specifiers in source order (duplicates preserved);
14
- * resolution + local-only filtering is the adapter's job.
15
- *
16
- * This is intentionally a lightweight lexical scan, not a
17
- * full parser: the specifiers it yields drive only the
18
- * dev server's *reload decision* (which files are part of
19
- * the served graph), never the production build, so an
20
- * exotic un-matched form costs at most one conservative
21
- * extra reload — never a wrong bundle.
22
- */
23
- export const parseImports = (source) =>
24
- // Each pattern's first capture group is the quoted
25
- // specifier's inner text. `Array.from(..., mapFn)` +
26
- // a type-guard `filter` extracts it without an
27
- // `if`/`??` branch on the (unreachable) `undefined` a
28
- // capture group would only take if it were optional.
29
- PATTERNS.flatMap((pattern) => Array.from(source.matchAll(pattern), (m) => m[1]).filter((spec) => spec !== undefined));
30
- /**
31
- * The specifier-bearing forms. A `from "…"` clause covers
32
- * both `import` and `export`; a bare `import("…")` covers
33
- * dynamic import. `["']` matches either quote style; the
34
- * inner `[^"']+` is the specifier.
35
- */
36
- const PATTERNS = [
37
- /\bfrom\s*["']([^"']+)["']/g,
38
- /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g,
39
- ];
40
- //# sourceMappingURL=parseImports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseImports.js","sourceRoot":"","sources":["../../../src/Dev/usecase/parseImports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAc,EACS,EAAE;AACzB,mDAAmD;AACnD,qDAAqD;AACrD,+CAA+C;AAC/C,sDAAsD;AACtD,qDAAqD;AACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3B,KAAK,CAAC,IAAI,CACR,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CACZ,CAAC,MAAM,CACN,CAAC,IAAI,EAAkB,EAAE,CACvB,IAAI,KAAK,SAAS,CACrB,CACF,CAAC;AAEJ;;;;;GAKG;AACH,MAAM,QAAQ,GAA0B;IACtC,4BAA4B;IAC5B,wCAAwC;CACzC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parseImports.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseImports.spec.d.ts","sourceRoot":"","sources":["../../../src/Dev/usecase/parseImports.spec.ts"],"names":[],"mappings":""}
@@ -1,24 +0,0 @@
1
- import { test, check, all, toBe, toEqual, } from "plgg-test";
2
- import { parseImports } from "plgg-bundle/Dev/usecase/parseImports";
3
- test("parseImports reads static import + re-export + dynamic forms", () => check(parseImports([
4
- `import { a } from "./a.ts";`,
5
- `import b from './b';`,
6
- `export { c } from "./c.ts";`,
7
- `const d = await import("./d.ts");`,
8
- `export * from "./e";`,
9
- ].join("\n")), toEqual([
10
- // `from "…"` matches (import/export/re-export) come
11
- // first, then the dynamic `import("…")` pass.
12
- "./a.ts",
13
- "./b",
14
- "./c.ts",
15
- "./e",
16
- "./d.ts",
17
- ])));
18
- test("parseImports returns empty for a source with no imports", () => check(parseImports("export const x = 1;\n").length, toBe(0)));
19
- test("parseImports captures bare package + node specifiers too (adapter filters locality)", () => check(parseImports(`import { x } from "node:fs";\nimport y from "some-pkg";`), toEqual(["node:fs", "some-pkg"])));
20
- test("parseImports handles single and double quotes", () => all([
21
- check(parseImports(`import("./x.ts")`), toEqual(["./x.ts"])),
22
- check(parseImports(`import('./y.ts')`), toEqual(["./y.ts"])),
23
- ]));
24
- //# sourceMappingURL=parseImports.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseImports.spec.js","sourceRoot":"","sources":["../../../src/Dev/usecase/parseImports.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,EACJ,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE,CACxE,KAAK,CACH,YAAY,CACV;IACE,6BAA6B;IAC7B,sBAAsB;IACtB,6BAA6B;IAC7B,mCAAmC;IACnC,sBAAsB;CACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,EACD,OAAO,CAAC;IACN,oDAAoD;IACpD,8CAA8C;IAC9C,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,KAAK;IACL,QAAQ;CACT,CAAC,CACH,CAAC,CAAC;AAEL,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE,CACnE,KAAK,CACH,YAAY,CACV,uBAAuB,CACxB,CAAC,MAAM,EACR,IAAI,CAAC,CAAC,CAAC,CACR,CAAC,CAAC;AAEL,IAAI,CAAC,qFAAqF,EAAE,GAAG,EAAE,CAC/F,KAAK,CACH,YAAY,CACV,yDAAyD,CAC1D,EACD,OAAO,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CACjC,CAAC,CAAC;AAEL,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE,CACzD,GAAG,CAAC;IACF,KAAK,CACH,YAAY,CAAC,kBAAkB,CAAC,EAChC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CACpB;IACD,KAAK,CACH,YAAY,CAAC,kBAAkB,CAAC,EAChC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CACpB;CACF,CAAC,CAAC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { type ModuleGraph } from "plgg-bundle/Dev/model/ModuleGraph";
2
- /**
3
- * Whether a changed file warrants a hot-reload:
4
- *
5
- * - content (non-source-code, e.g. `.md`) → always, since
6
- * the render re-reads it;
7
- * - source code that participates in the app's served
8
- * {@link ModuleGraph} (a graph key it imports from, or a
9
- * graph value something imports) → yes;
10
- * - source code the app never imports (a stray scratch
11
- * `.ts`) → ignored, so the browser only reloads on edits
12
- * that can change the output.
13
- *
14
- * Conservative fallback: an EMPTY graph means the scan
15
- * could not map the app, so every change reloads rather
16
- * than silently going stale. Pure decision over the graph —
17
- * the adapter owns the fs.
18
- */
19
- export declare const shouldReload: (graph: ModuleGraph, changed: string) => boolean;
20
- //# sourceMappingURL=reloadDecision.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reloadDecision.d.ts","sourceRoot":"","sources":["../../../src/Dev/usecase/reloadDecision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAgBrE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,WAAW,EAClB,SAAS,MAAM,KACd,OAI+B,CAAC"}
@@ -1,52 +0,0 @@
1
- import {} from "plgg-bundle/Dev/model/ModuleGraph";
2
- /**
3
- * Source-code extensions — the files the module graph
4
- * tracks. A changed file with any OTHER extension is
5
- * content (Markdown, an asset) whose edit the app re-reads
6
- * at render time, so it always warrants a reload.
7
- */
8
- const SOURCE_EXT = [
9
- ".ts",
10
- ".tsx",
11
- ".mts",
12
- ".js",
13
- ".mjs",
14
- ];
15
- /**
16
- * Whether a changed file warrants a hot-reload:
17
- *
18
- * - content (non-source-code, e.g. `.md`) → always, since
19
- * the render re-reads it;
20
- * - source code that participates in the app's served
21
- * {@link ModuleGraph} (a graph key it imports from, or a
22
- * graph value something imports) → yes;
23
- * - source code the app never imports (a stray scratch
24
- * `.ts`) → ignored, so the browser only reloads on edits
25
- * that can change the output.
26
- *
27
- * Conservative fallback: an EMPTY graph means the scan
28
- * could not map the app, so every change reloads rather
29
- * than silently going stale. Pure decision over the graph —
30
- * the adapter owns the fs.
31
- */
32
- export const shouldReload = (graph, changed) => !isSourceCode(changed) ||
33
- graph.size === 0 ||
34
- graph.has(changed) ||
35
- importsSomewhere(graph, changed);
36
- /** Whether a path is a tracked source-code file (by extension). */
37
- const isSourceCode = (changed) => SOURCE_EXT.some((e) => changed.endsWith(e));
38
- /**
39
- * Whether any node in the graph imports `changed` (i.e. it
40
- * appears as an edge target). Local scan over the forward
41
- * edges — the reverse lookup is only needed once per
42
- * decision, so it is not memoised.
43
- */
44
- const importsSomewhere = (graph, changed) => {
45
- for (const tos of graph.values()) {
46
- if (tos.includes(changed)) {
47
- return true;
48
- }
49
- }
50
- return false;
51
- };
52
- //# sourceMappingURL=reloadDecision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reloadDecision.js","sourceRoot":"","sources":["../../../src/Dev/usecase/reloadDecision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,mCAAmC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,UAAU,GAA0B;IACxC,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;CACP,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,KAAkB,EAClB,OAAe,EACN,EAAE,CACX,CAAC,YAAY,CAAC,OAAO,CAAC;IACtB,KAAK,CAAC,IAAI,KAAK,CAAC;IAChB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IAClB,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAEnC,mEAAmE;AACnE,MAAM,YAAY,GAAG,CACnB,OAAe,EACN,EAAE,CACX,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,CACvB,KAAkB,EAClB,OAAe,EACN,EAAE;IACX,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reloadDecision.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reloadDecision.spec.d.ts","sourceRoot":"","sources":["../../../src/Dev/usecase/reloadDecision.spec.ts"],"names":[],"mappings":""}
@@ -1,17 +0,0 @@
1
- import { test, check, all, toBe, } from "plgg-test";
2
- import { buildGraph } from "plgg-bundle/Dev/usecase/buildGraph";
3
- import { shouldReload } from "plgg-bundle/Dev/usecase/reloadDecision";
4
- const graph = buildGraph([
5
- { from: "/a.ts", to: "/b.ts" },
6
- ]);
7
- test("shouldReload is true for a file that imports (graph key)", () => check(shouldReload(graph, "/a.ts"), toBe(true)));
8
- test("shouldReload is true for an imported file (graph value)", () => check(shouldReload(graph, "/b.ts"), toBe(true)));
9
- test("shouldReload is false for a source file outside the served graph", () => check(shouldReload(graph, "/unrelated.ts"), toBe(false)));
10
- test("shouldReload is true for a content (non-code) file edit", () => all([
11
- check(shouldReload(graph, "/docs/guide.md"), toBe(true)),
12
- check(shouldReload(graph, "/assets/x.css"), toBe(true)),
13
- ]));
14
- test("shouldReload falls back to true for an empty graph", () => all([
15
- check(shouldReload(buildGraph([]), "/x.ts"), toBe(true)),
16
- ]));
17
- //# sourceMappingURL=reloadDecision.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reloadDecision.spec.js","sourceRoot":"","sources":["../../../src/Dev/usecase/reloadDecision.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,GACL,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,MAAM,KAAK,GAAG,UAAU,CAAC;IACvB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE;CAC/B,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE,CACpE,KAAK,CACH,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,IAAI,CAAC,CACX,CAAC,CAAC;AAEL,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE,CACnE,KAAK,CACH,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,IAAI,CAAC,CACX,CAAC,CAAC;AAEL,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE,CAC5E,KAAK,CACH,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,EACpC,IAAI,CAAC,KAAK,CAAC,CACZ,CAAC,CAAC;AAEL,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE,CACnE,GAAG,CAAC;IACF,KAAK,CACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,EACrC,IAAI,CAAC,IAAI,CAAC,CACX;IACD,KAAK,CACH,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,EACpC,IAAI,CAAC,IAAI,CAAC,CACX;CACF,CAAC,CAAC,CAAC;AAEN,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAC9D,GAAG,CAAC;IACF,KAAK,CACH,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EACrC,IAAI,CAAC,IAAI,CAAC,CACX;CACF,CAAC,CAAC,CAAC"}
@@ -1,136 +0,0 @@
1
- /**
2
- * The output module formats. `"es"` → ESM, `"cjs"` →
3
- * CommonJS — both emitted today by every library
4
- * package.
5
- */
6
- export type Format = "es" | "cjs";
7
- /**
8
- * What kind of artifact a config builds.
9
- * - `"library"` (default): a consumed package — dual
10
- * `es`/`cjs` per entry, a per-file `.d.ts` tree, and
11
- * sibling/`node:*` deps left EXTERNAL (ruling B), so the
12
- * bundle stays faithful to its declared dependencies.
13
- * - `"app"`: the leaf application (the `example` client) —
14
- * a single self-contained `es` bundle with every
15
- * workspace sibling INLINED from source (the mirror of
16
- * the library decision: the app is where bundling deps
17
- * is correct, since a browser cannot resolve a bare
18
- * `import "plgg"`). No `.d.ts` (nothing consumes it) and
19
- * only `node:*` stays external.
20
- */
21
- export type Target = "library" | "app";
22
- /**
23
- * A way to decide whether an imported specifier is
24
- * *external* (left as a runtime `import`/`require`,
25
- * not inlined into the bundle). Mirrors the three
26
- * shapes used across the vite configs:
27
- * - a string array of exact specifiers,
28
- * - a `RegExp` (e.g. `/^node:/`),
29
- * - a predicate function (plgg-fetch's
30
- * `isFrameworkDep`).
31
- */
32
- export type External = ReadonlyArray<string> | RegExp | ((specifier: string) => boolean);
33
- /**
34
- * One build entry. `name` is the output key — for most
35
- * packages it equals the file stem, but `plgg-view`'s
36
- * `styleEntry` / `plgg-server`'s `ssgEntry` use a
37
- * distinct output key so `dist/styleEntry.*` does not
38
- * case-collide with the `dist/Style/` declaration tree
39
- * on case-insensitive filesystems (the U0 fix). The
40
- * emitted JS file is `name` run through the config's
41
- * `fileNamePattern`.
42
- */
43
- export type Entry = {
44
- name: string;
45
- input: string;
46
- };
47
- /**
48
- * The optional `dev` section: everything `plgg-bundle dev`
49
- * needs to serve + hot-reload an app. Absent for a plain
50
- * library config (build-only), so existing configs need no
51
- * change.
52
- *
53
- * - `entry` — the app's dev-entry module (absolute or
54
- * `root`-relative), default-exporting a `FetchFactory`.
55
- * - `port` — the port the node:http server binds.
56
- * - `watch` — source roots (absolute or `root`-relative)
57
- * watched for code/content edits.
58
- * - `allowedHosts` — extra `Host` headers accepted beyond
59
- * loopback (e.g. a tunnel domain).
60
- * - `sourceAliases` — cross-package self-aliases to resolve
61
- * to SOURCE during dev, so a dependency's `<prefix>/*`
62
- * imports (e.g. a theme package's) load from its `.ts`
63
- * and hot-reload, instead of its built dist. Empty for a
64
- * self-contained app.
65
- */
66
- export type DevConfig = Readonly<{
67
- entry: string;
68
- port: number;
69
- watch: ReadonlyArray<string>;
70
- allowedHosts: ReadonlyArray<string>;
71
- sourceAliases: ReadonlyArray<SourceAlias>;
72
- }>;
73
- /**
74
- * A dev-time source resolution rule: resolve `<prefix>`
75
- * and `<prefix>/<sub>` specifiers to `<srcDir>` /
76
- * `<srcDir>/<sub>` (`.ts`/`/index.ts`), so a dependency
77
- * package's source participates in hot-reload.
78
- */
79
- export type SourceAlias = Readonly<{
80
- prefix: string;
81
- srcDir: string;
82
- }>;
83
- /**
84
- * The bundler's typed configuration, replacing
85
- * vite.config's `lib` + `rollupOptions`. Parsed and
86
- * validated at the `unknown` boundary by
87
- * `asBundleConfig` before any build runs.
88
- */
89
- export type BundleConfig = Readonly<{
90
- /**
91
- * The artifact kind (see {@link Target}). Optional in
92
- * the config file; defaults to `"library"`.
93
- */
94
- target: Target;
95
- /** Package root (absolute). */
96
- root: string;
97
- /** Source root under `root` (e.g. "src"). */
98
- rootDir: string;
99
- /** Output dir under `root` (e.g. "dist"). */
100
- outDir: string;
101
- /** One entry (single-entry) or several (multi). */
102
- entries: ReadonlyArray<Entry>;
103
- /** Formats to emit (es and/or cjs). */
104
- formats: ReadonlyArray<Format>;
105
- /**
106
- * Output file-name template with `[name]` and
107
- * `[format]` placeholders, e.g.
108
- * `"[name].[format].js"` → `index.es.js` /
109
- * `index.cjs.js` for the `index` entry,
110
- * `styleEntry.es.js` for `styleEntry`. Reproduces
111
- * vite's `index.${format}.js` / `${name}.${format}.js`.
112
- */
113
- fileNamePattern: string;
114
- /**
115
- * The package self-alias prefix and its source root,
116
- * e.g. `{ prefix: "plgg", srcRoot: "src" }` so
117
- * `plgg/Atomics/Num` resolves to `src/Atomics/Num`.
118
- */
119
- alias: Readonly<{
120
- prefix: string;
121
- srcRoot: string;
122
- }>;
123
- /**
124
- * The dev-server section. Present only for a config that
125
- * `plgg-bundle dev` serves; a build-only library omits
126
- * it. See {@link DevConfig}.
127
- */
128
- dev?: DevConfig;
129
- }>;
130
- /**
131
- * Apply a {@link BundleConfig#fileNamePattern} to an
132
- * entry name and format, substituting `[name]` and
133
- * `[format]`. Pure string templating.
134
- */
135
- export declare const applyFileName: (pattern: string, name: string, format: Format) => string;
136
- //# sourceMappingURL=BundleConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundleConfig.d.ts","sourceRoot":"","sources":["../../../src/domain/model/BundleConfig.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,MAAM,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAElC;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAEvC;;;;;;;;;GASG;AACH,MAAM,MAAM,QAAQ,GAChB,aAAa,CAAC,MAAM,CAAC,GACrB,MAAM,GACN,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;AAErC;;;;;;;;;GASG;AACH,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAC3C,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,uCAAuC;IACvC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;;OAOG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,KAAK,EAAE,QAAQ,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH;;;;OAIG;IACH,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB,CAAC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,SAAS,MAAM,EACf,MAAM,MAAM,EACZ,QAAQ,MAAM,KACb,MAKc,CAAC"}
@@ -1,18 +0,0 @@
1
- // Plain-TS build tool: a foundation bundler must not
2
- // depend on the library it builds (plgg), so this
3
- // package is written in plain TypeScript — native
4
- // control flow, throw-on-failure caught at the bin
5
- // boundary — rather than plgg's Result/Option idiom.
6
- // See README. The CLAUDE.md no-`as`/`any`/`ts-ignore`
7
- // rule still holds.
8
- /**
9
- * Apply a {@link BundleConfig#fileNamePattern} to an
10
- * entry name and format, substituting `[name]` and
11
- * `[format]`. Pure string templating.
12
- */
13
- export const applyFileName = (pattern, name, format) => pattern
14
- .split("[name]")
15
- .join(name)
16
- .split("[format]")
17
- .join(format);
18
- //# sourceMappingURL=BundleConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundleConfig.js","sourceRoot":"","sources":["../../../src/domain/model/BundleConfig.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,kDAAkD;AAClD,kDAAkD;AAClD,mDAAmD;AACnD,qDAAqD;AACrD,sDAAsD;AACtD,oBAAoB;AA6IpB;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAe,EACf,IAAY,EACZ,MAAc,EACN,EAAE,CACV,OAAO;KACJ,KAAK,CAAC,QAAQ,CAAC;KACf,IAAI,CAAC,IAAI,CAAC;KACV,KAAK,CAAC,UAAU,CAAC;KACjB,IAAI,CAAC,MAAM,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=BundleConfig.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundleConfig.spec.d.ts","sourceRoot":"","sources":["../../../src/domain/model/BundleConfig.spec.ts"],"names":[],"mappings":""}
@@ -1,8 +0,0 @@
1
- import { test, check, all, toBe, } from "plgg-test";
2
- import { applyFileName } from "plgg-bundle/domain/model/BundleConfig";
3
- test("applyFileName substitutes name and format", () => all([
4
- check(applyFileName("[name].[format].js", "index", "es"), toBe("index.es.js")),
5
- check(applyFileName("[name].[format].js", "index", "cjs"), toBe("index.cjs.js")),
6
- check(applyFileName("[name].[format].js", "styleEntry", "es"), toBe("styleEntry.es.js")),
7
- ]));
8
- //# sourceMappingURL=BundleConfig.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BundleConfig.spec.js","sourceRoot":"","sources":["../../../src/domain/model/BundleConfig.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,GACL,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE,CACrD,GAAG,CAAC;IACF,KAAK,CACH,aAAa,CACX,oBAAoB,EACpB,OAAO,EACP,IAAI,CACL,EACD,IAAI,CAAC,aAAa,CAAC,CACpB;IACD,KAAK,CACH,aAAa,CACX,oBAAoB,EACpB,OAAO,EACP,KAAK,CACN,EACD,IAAI,CAAC,cAAc,CAAC,CACrB;IACD,KAAK,CACH,aAAa,CACX,oBAAoB,EACpB,YAAY,EACZ,IAAI,CACL,EACD,IAAI,CAAC,kBAAkB,CAAC,CACzB;CACF,CAAC,CAAC,CAAC"}
@@ -1,17 +0,0 @@
1
- import { type BundleConfig } from "plgg-bundle/domain/model/BundleConfig";
2
- /**
3
- * Validate an `unknown` value (a dynamically-imported
4
- * config module's default export) into a typed
5
- * {@link BundleConfig}. The config is the bundler's
6
- * `unknown` boundary, so every field is narrowed with a
7
- * real guard (`typeof`, `Array.isArray`) — no `as`, no
8
- * `any`. Throws a `ConfigError` on the first invalid
9
- * field.
10
- *
11
- * Externals are NOT a config field: the bundler derives
12
- * them from the package's `package.json` dependency
13
- * graph (see `deriveExternal`), so they cannot drift
14
- * from the manifest.
15
- */
16
- export declare const asBundleConfig: (value: unknown) => BundleConfig;
17
- //# sourceMappingURL=asBundleConfig.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asBundleConfig.d.ts","sourceRoot":"","sources":["../../../src/domain/usecase/asBundleConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,OAAO,KACb,YAwBF,CAAC"}
@@ -1,179 +0,0 @@
1
- import {} from "plgg-bundle/domain/model/BundleConfig";
2
- /**
3
- * Validate an `unknown` value (a dynamically-imported
4
- * config module's default export) into a typed
5
- * {@link BundleConfig}. The config is the bundler's
6
- * `unknown` boundary, so every field is narrowed with a
7
- * real guard (`typeof`, `Array.isArray`) — no `as`, no
8
- * `any`. Throws a `ConfigError` on the first invalid
9
- * field.
10
- *
11
- * Externals are NOT a config field: the bundler derives
12
- * them from the package's `package.json` dependency
13
- * graph (see `deriveExternal`), so they cannot drift
14
- * from the manifest.
15
- */
16
- export const asBundleConfig = (value) => {
17
- if (!isRecord(value)) {
18
- return fail("config is not an object");
19
- }
20
- const devSection = dev(value);
21
- return {
22
- target: target(value),
23
- root: str(value, "root"),
24
- rootDir: str(value, "rootDir"),
25
- outDir: str(value, "outDir"),
26
- fileNamePattern: str(value, "fileNamePattern"),
27
- entries: entries(value),
28
- formats: formats(value),
29
- alias: alias(value),
30
- // `exactOptionalPropertyTypes`: only attach `dev` when
31
- // the config actually declared it (never `dev:
32
- // undefined`).
33
- ...(devSection === undefined
34
- ? {}
35
- : { dev: devSection }),
36
- };
37
- };
38
- /**
39
- * The optional `dev` section (see {@link DevConfig}).
40
- * Absent → `undefined` (a build-only library). Present →
41
- * every field narrowed at the boundary.
42
- */
43
- const dev = (o) => {
44
- const raw = o["dev"];
45
- if (raw === undefined) {
46
- return undefined;
47
- }
48
- if (!isRecord(raw)) {
49
- return fail(`"dev" must be an object`);
50
- }
51
- return {
52
- entry: str(raw, "entry"),
53
- port: num(raw, "port"),
54
- watch: strArray(raw, "watch"),
55
- allowedHosts: strArray(raw, "allowedHosts"),
56
- sourceAliases: sourceAliases(raw),
57
- };
58
- };
59
- /**
60
- * The optional `sourceAliases` array (defaults to `[]`):
61
- * each element `{ prefix, srcDir }` — both strings.
62
- */
63
- const sourceAliases = (o) => {
64
- const raw = o["sourceAliases"];
65
- return raw === undefined
66
- ? []
67
- : Array.isArray(raw)
68
- ? raw.map(sourceAlias)
69
- : fail(`"sourceAliases" must be an array`);
70
- };
71
- const sourceAlias = (raw) => isRecord(raw) &&
72
- typeof raw["prefix"] === "string" &&
73
- typeof raw["srcDir"] === "string"
74
- ? {
75
- prefix: raw["prefix"],
76
- srcDir: raw["srcDir"],
77
- }
78
- : fail(`each sourceAlias needs string "prefix" and "srcDir"`);
79
- /**
80
- * A required finite-number field.
81
- */
82
- const num = (o, key) => {
83
- const v = o[key];
84
- return typeof v === "number" &&
85
- Number.isFinite(v)
86
- ? v
87
- : fail(`"${key}" must be a number`);
88
- };
89
- /**
90
- * A required array-of-strings field. Maps each element
91
- * through a string guard (mirroring `entries`/`formats`)
92
- * so the result is a real `string[]` — never a leaked
93
- * `any[]` from `Array.isArray`.
94
- */
95
- const strArray = (o, key) => {
96
- const v = o[key];
97
- return Array.isArray(v)
98
- ? v.map((e) => strElem(e, key))
99
- : fail(`"${key}" must be an array`);
100
- };
101
- const strElem = (e, key) => typeof e === "string"
102
- ? e
103
- : fail(`each "${key}" entry must be a string`);
104
- /**
105
- * The optional `target` field — `"library"` (default) or
106
- * `"app"`. Absent means a library, so the existing
107
- * library configs need no change.
108
- */
109
- const target = (o) => {
110
- const v = o["target"];
111
- return v === undefined || v === "library"
112
- ? "library"
113
- : v === "app"
114
- ? "app"
115
- : fail(`"target" must be "library" or "app"`);
116
- };
117
- /**
118
- * Throw a config validation error. Return type `never`
119
- * so a failed check is a dead end at the call site.
120
- */
121
- const fail = (message) => {
122
- throw new Error(`ConfigError: ${message}`);
123
- };
124
- /**
125
- * Whether a value is a non-null object (records the
126
- * narrowing for property reads).
127
- */
128
- const isRecord = (v) => typeof v === "object" && v !== null;
129
- /**
130
- * A required string field.
131
- */
132
- const str = (o, key) => {
133
- const v = o[key];
134
- return typeof v === "string"
135
- ? v
136
- : fail(`"${key}" must be a string`);
137
- };
138
- /**
139
- * The `entries` array: each element an object with
140
- * string `name` and `input`.
141
- */
142
- const entries = (o) => {
143
- const raw = o["entries"];
144
- return Array.isArray(raw)
145
- ? raw.map(entry)
146
- : fail(`"entries" must be an array`);
147
- };
148
- const entry = (raw) => isRecord(raw) &&
149
- typeof raw["name"] === "string" &&
150
- typeof raw["input"] === "string"
151
- ? { name: raw["name"], input: raw["input"] }
152
- : fail(`each entry needs string "name" and "input"`);
153
- /**
154
- * The `formats` array: each `"es"` or `"cjs"`.
155
- */
156
- const formats = (o) => {
157
- const raw = o["formats"];
158
- return Array.isArray(raw)
159
- ? raw.map(format)
160
- : fail(`"formats" must be an array`);
161
- };
162
- const format = (raw) => raw === "es" || raw === "cjs"
163
- ? raw
164
- : fail(`each format must be "es" or "cjs"`);
165
- /**
166
- * The `alias` object: string `prefix` and `srcRoot`.
167
- */
168
- const alias = (o) => {
169
- const raw = o["alias"];
170
- return isRecord(raw) &&
171
- typeof raw["prefix"] === "string" &&
172
- typeof raw["srcRoot"] === "string"
173
- ? {
174
- prefix: raw["prefix"],
175
- srcRoot: raw["srcRoot"],
176
- }
177
- : fail(`"alias" needs string "prefix" and "srcRoot"`);
178
- };
179
- //# sourceMappingURL=asBundleConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asBundleConfig.js","sourceRoot":"","sources":["../../../src/domain/usecase/asBundleConfig.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=asBundleConfig.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asBundleConfig.spec.d.ts","sourceRoot":"","sources":["../../../src/domain/usecase/asBundleConfig.spec.ts"],"names":[],"mappings":""}