veryfront 0.1.368 → 0.1.370

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 (207) hide show
  1. package/esm/cli/commands/build/command.d.ts.map +1 -1
  2. package/esm/cli/commands/build/command.js +2 -0
  3. package/esm/cli/commands/init/config-generator.d.ts.map +1 -1
  4. package/esm/cli/commands/init/config-generator.js +1 -0
  5. package/esm/cli/main.js +15 -0
  6. package/esm/cli/shared/ensure-content-transformer.d.ts +10 -0
  7. package/esm/cli/shared/ensure-content-transformer.d.ts.map +1 -0
  8. package/esm/cli/shared/ensure-content-transformer.js +16 -0
  9. package/esm/cli/shared/server-startup.d.ts.map +1 -1
  10. package/esm/cli/shared/server-startup.js +10 -3
  11. package/esm/deno.d.ts +3 -3
  12. package/esm/deno.js +6 -5
  13. package/esm/extensions/ext-esbuild/src/binary.d.ts +7 -0
  14. package/esm/extensions/ext-esbuild/src/binary.d.ts.map +1 -0
  15. package/esm/extensions/ext-esbuild/src/binary.js +143 -0
  16. package/esm/extensions/ext-esbuild/src/es-module-lexer.d.ts +17 -0
  17. package/esm/extensions/ext-esbuild/src/es-module-lexer.d.ts.map +1 -0
  18. package/esm/extensions/ext-esbuild/src/es-module-lexer.js +29 -0
  19. package/esm/extensions/ext-esbuild/src/esbuild-bundler.d.ts +20 -0
  20. package/esm/extensions/ext-esbuild/src/esbuild-bundler.d.ts.map +1 -0
  21. package/esm/extensions/ext-esbuild/src/esbuild-bundler.js +98 -0
  22. package/esm/extensions/ext-esbuild/src/index.d.ts +19 -0
  23. package/esm/extensions/ext-esbuild/src/index.d.ts.map +1 -0
  24. package/esm/extensions/ext-esbuild/src/index.js +40 -0
  25. package/esm/extensions/ext-esbuild/src/plugin-adapter.d.ts +14 -0
  26. package/esm/extensions/ext-esbuild/src/plugin-adapter.d.ts.map +1 -0
  27. package/esm/extensions/ext-esbuild/src/plugin-adapter.js +55 -0
  28. package/esm/extensions/ext-esbuild/src/runtime.d.ts +4 -0
  29. package/esm/extensions/ext-esbuild/src/runtime.d.ts.map +1 -0
  30. package/esm/extensions/ext-esbuild/src/runtime.js +43 -0
  31. package/esm/extensions/ext-mdx/src/compiler/markdown-compile.d.ts +3 -0
  32. package/esm/extensions/ext-mdx/src/compiler/markdown-compile.d.ts.map +1 -0
  33. package/esm/extensions/ext-mdx/src/compiler/markdown-compile.js +99 -0
  34. package/esm/extensions/ext-mdx/src/compiler/mdx-compile.d.ts +3 -0
  35. package/esm/extensions/ext-mdx/src/compiler/mdx-compile.d.ts.map +1 -0
  36. package/esm/extensions/ext-mdx/src/compiler/mdx-compile.js +47 -0
  37. package/esm/extensions/ext-mdx/src/index.d.ts +30 -0
  38. package/esm/extensions/ext-mdx/src/index.d.ts.map +1 -0
  39. package/esm/extensions/ext-mdx/src/index.js +52 -0
  40. package/esm/extensions/ext-mdx/src/plugins/plugin-loader.d.ts +4 -0
  41. package/esm/extensions/ext-mdx/src/plugins/plugin-loader.d.ts.map +1 -0
  42. package/esm/extensions/ext-mdx/src/plugins/plugin-loader.js +18 -0
  43. package/esm/extensions/ext-mdx/src/plugins/rehype-node-positions.d.ts.map +1 -0
  44. package/esm/extensions/ext-mdx/src/plugins/remark-headings.d.ts.map +1 -0
  45. package/esm/extensions/ext-mdx/src/plugins/remark-mdx-utils.d.ts.map +1 -0
  46. package/esm/src/agent/fork-runtime-stream.d.ts +11 -1
  47. package/esm/src/agent/fork-runtime-stream.d.ts.map +1 -1
  48. package/esm/src/agent/fork-runtime-stream.js +36 -0
  49. package/esm/src/agent/index.d.ts +1 -1
  50. package/esm/src/agent/index.d.ts.map +1 -1
  51. package/esm/src/agent/index.js +1 -1
  52. package/esm/src/build/bundler/code-splitter/build-context.d.ts +1 -1
  53. package/esm/src/build/bundler/code-splitter/build-context.d.ts.map +1 -1
  54. package/esm/src/build/bundler/code-splitter/build-context.js +1 -1
  55. package/esm/src/build/bundler/code-splitter/esbuild-plugin.d.ts +1 -1
  56. package/esm/src/build/bundler/code-splitter/esbuild-plugin.d.ts.map +1 -1
  57. package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts +1 -1
  58. package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts.map +1 -1
  59. package/esm/src/build/bundler/code-splitter/types.d.ts +1 -1
  60. package/esm/src/build/bundler/code-splitter/types.d.ts.map +1 -1
  61. package/esm/src/build/compiler/mdx-compiler/transpiler.js +1 -1
  62. package/esm/src/build/compiler/mdx-to-js.js +1 -1
  63. package/esm/src/build/embedded/preset.js +1 -1
  64. package/esm/src/build/production-build/client-runtime.js +1 -1
  65. package/esm/src/discovery/transpiler.js +1 -1
  66. package/esm/src/extensions/bundler.d.ts +28 -0
  67. package/esm/src/extensions/bundler.d.ts.map +1 -0
  68. package/esm/src/extensions/bundler.js +42 -0
  69. package/esm/src/extensions/interfaces/bundler.d.ts +162 -27
  70. package/esm/src/extensions/interfaces/bundler.d.ts.map +1 -1
  71. package/esm/src/extensions/interfaces/content-transformer.d.ts +75 -24
  72. package/esm/src/extensions/interfaces/content-transformer.d.ts.map +1 -1
  73. package/esm/src/extensions/interfaces/content-transformer.js +13 -0
  74. package/esm/src/extensions/interfaces/index.d.ts +3 -2
  75. package/esm/src/extensions/interfaces/index.d.ts.map +1 -1
  76. package/esm/src/extensions/interfaces/module-lexer.d.ts +45 -0
  77. package/esm/src/extensions/interfaces/module-lexer.d.ts.map +1 -0
  78. package/esm/src/extensions/interfaces/module-lexer.js +13 -0
  79. package/esm/src/extensions/loader.d.ts.map +1 -1
  80. package/esm/src/extensions/loader.js +7 -1
  81. package/esm/src/extensions/recommendations.d.ts.map +1 -1
  82. package/esm/src/extensions/recommendations.js +3 -0
  83. package/esm/src/integrations/schema.d.ts +4 -4
  84. package/esm/src/platform/compat/esbuild.d.ts +20 -6
  85. package/esm/src/platform/compat/esbuild.d.ts.map +1 -1
  86. package/esm/src/platform/compat/esbuild.js +20 -137
  87. package/esm/src/rendering/script-page-handling.js +1 -1
  88. package/esm/src/routing/api/module-loader/esbuild-plugin.d.ts +1 -1
  89. package/esm/src/routing/api/module-loader/esbuild-plugin.d.ts.map +1 -1
  90. package/esm/src/routing/api/module-loader/loader.js +1 -1
  91. package/esm/src/server/bootstrap.d.ts.map +1 -1
  92. package/esm/src/server/bootstrap.js +22 -0
  93. package/esm/src/server/dev-server/middleware.js +1 -1
  94. package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts +1 -1
  95. package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts.map +1 -1
  96. package/esm/src/server/handlers/studio/bridge-modules.handler.js +1 -1
  97. package/esm/src/server/services/rsc/endpoints/script-handlers.js +1 -1
  98. package/esm/src/server/services/rsc/orchestrators/hydrator-handler.js +1 -1
  99. package/esm/src/server/shared/browser-module-bundler.js +1 -1
  100. package/esm/src/testing/bdd.d.ts +1 -0
  101. package/esm/src/testing/bdd.d.ts.map +1 -1
  102. package/esm/src/testing/bdd.js +1 -0
  103. package/esm/src/testing/init.js +7 -0
  104. package/esm/src/transforms/esm/http-bundler.d.ts +1 -1
  105. package/esm/src/transforms/esm/http-bundler.d.ts.map +1 -1
  106. package/esm/src/transforms/esm/lexer.d.ts +2 -9
  107. package/esm/src/transforms/esm/lexer.d.ts.map +1 -1
  108. package/esm/src/transforms/esm/lexer.js +9 -10
  109. package/esm/src/transforms/esm/transform-utils.d.ts +1 -1
  110. package/esm/src/transforms/esm/transform-utils.d.ts.map +1 -1
  111. package/esm/src/transforms/import-rewriter/parse-cache.d.ts +1 -1
  112. package/esm/src/transforms/import-rewriter/parse-cache.d.ts.map +1 -1
  113. package/esm/src/transforms/import-rewriter/parse-cache.js +8 -7
  114. package/esm/src/transforms/md/compiler/md-compiler.d.ts +2 -2
  115. package/esm/src/transforms/md/compiler/md-compiler.d.ts.map +1 -1
  116. package/esm/src/transforms/md/compiler/md-compiler.js +11 -106
  117. package/esm/src/transforms/mdx/compiler/import-rewriter.d.ts +1 -1
  118. package/esm/src/transforms/mdx/compiler/import-rewriter.d.ts.map +1 -1
  119. package/esm/src/transforms/mdx/compiler/index.d.ts +3 -3
  120. package/esm/src/transforms/mdx/compiler/index.d.ts.map +1 -1
  121. package/esm/src/transforms/mdx/compiler/mdx-compiler.d.ts +2 -2
  122. package/esm/src/transforms/mdx/compiler/mdx-compiler.d.ts.map +1 -1
  123. package/esm/src/transforms/mdx/compiler/mdx-compiler.js +10 -52
  124. package/esm/src/transforms/mdx/esm-module-loader/import-transformer.js +1 -1
  125. package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.js +2 -2
  126. package/esm/src/transforms/plugins/plugin-loader.d.ts +15 -0
  127. package/esm/src/transforms/plugins/plugin-loader.d.ts.map +1 -1
  128. package/esm/src/transforms/plugins/plugin-loader.js +20 -14
  129. package/esm/src/utils/version-constant.d.ts +1 -1
  130. package/esm/src/utils/version-constant.js +1 -1
  131. package/package.json +1 -1
  132. package/src/cli/commands/build/command.ts +2 -0
  133. package/src/cli/commands/init/config-generator.ts +1 -0
  134. package/src/cli/main.ts +14 -0
  135. package/src/cli/shared/ensure-content-transformer.ts +17 -0
  136. package/src/cli/shared/server-startup.ts +10 -3
  137. package/src/deno.js +6 -5
  138. package/src/extensions/ext-esbuild/src/binary.ts +154 -0
  139. package/src/extensions/ext-esbuild/src/es-module-lexer.ts +34 -0
  140. package/src/extensions/ext-esbuild/src/esbuild-bundler.ts +122 -0
  141. package/src/extensions/ext-esbuild/src/index.ts +46 -0
  142. package/src/extensions/ext-esbuild/src/plugin-adapter.ts +66 -0
  143. package/src/extensions/ext-esbuild/src/runtime.ts +54 -0
  144. package/src/extensions/ext-mdx/src/compiler/markdown-compile.ts +127 -0
  145. package/src/extensions/ext-mdx/src/compiler/mdx-compile.ts +73 -0
  146. package/src/extensions/ext-mdx/src/index.ts +63 -0
  147. package/src/extensions/ext-mdx/src/plugins/plugin-loader.ts +21 -0
  148. package/src/src/agent/fork-runtime-stream.ts +66 -1
  149. package/src/src/agent/index.ts +2 -0
  150. package/src/src/build/bundler/code-splitter/build-context.ts +1 -1
  151. package/src/src/build/bundler/code-splitter/esbuild-plugin.ts +1 -1
  152. package/src/src/build/bundler/code-splitter/manifest-builder.ts +1 -1
  153. package/src/src/build/bundler/code-splitter/splitter.ts +1 -1
  154. package/src/src/build/bundler/code-splitter/types.ts +1 -1
  155. package/src/src/build/compiler/mdx-compiler/transpiler.ts +1 -1
  156. package/src/src/build/compiler/mdx-to-js.ts +1 -1
  157. package/src/src/build/embedded/preset.ts +1 -1
  158. package/src/src/build/production-build/client-runtime.ts +2 -2
  159. package/src/src/discovery/transpiler.ts +2 -2
  160. package/src/src/extensions/bundler.ts +85 -0
  161. package/src/src/extensions/interfaces/bundler.ts +189 -16
  162. package/src/src/extensions/interfaces/content-transformer.ts +74 -20
  163. package/src/src/extensions/interfaces/index.ts +21 -2
  164. package/src/src/extensions/interfaces/module-lexer.ts +46 -0
  165. package/src/src/extensions/loader.ts +6 -1
  166. package/src/src/extensions/recommendations.ts +3 -0
  167. package/src/src/platform/compat/esbuild.ts +48 -160
  168. package/src/src/rendering/script-page-handling.ts +1 -1
  169. package/src/src/routing/api/module-loader/esbuild-plugin.ts +1 -1
  170. package/src/src/routing/api/module-loader/loader.ts +2 -2
  171. package/src/src/server/bootstrap.ts +29 -0
  172. package/src/src/server/dev-server/middleware.ts +1 -1
  173. package/src/src/server/handlers/dev/files/esbuild-plugins.ts +1 -1
  174. package/src/src/server/handlers/studio/bridge-modules.handler.ts +1 -1
  175. package/src/src/server/services/rsc/endpoints/script-handlers.ts +4 -4
  176. package/src/src/server/services/rsc/orchestrators/hydrator-handler.ts +1 -1
  177. package/src/src/server/shared/browser-module-bundler.ts +1 -1
  178. package/src/src/testing/bdd.ts +1 -0
  179. package/src/src/testing/init.ts +9 -0
  180. package/src/src/transforms/esm/http-bundler.ts +1 -1
  181. package/src/src/transforms/esm/lexer.ts +13 -21
  182. package/src/src/transforms/esm/transform-utils.ts +1 -1
  183. package/src/src/transforms/import-rewriter/parse-cache.ts +10 -7
  184. package/src/src/transforms/md/compiler/md-compiler.ts +17 -137
  185. package/src/src/transforms/mdx/compiler/import-rewriter.ts +1 -1
  186. package/src/src/transforms/mdx/compiler/index.ts +11 -3
  187. package/src/src/transforms/mdx/compiler/mdx-compiler.ts +15 -70
  188. package/src/src/transforms/mdx/esm-module-loader/import-transformer.ts +1 -1
  189. package/src/src/transforms/pipeline/stages/ssr-vf-modules/transform.ts +2 -2
  190. package/src/src/transforms/plugins/plugin-loader.ts +22 -24
  191. package/src/src/utils/version-constant.ts +1 -1
  192. package/esm/src/transforms/mdx/compiler/types.d.ts +0 -16
  193. package/esm/src/transforms/mdx/compiler/types.d.ts.map +0 -1
  194. package/esm/src/transforms/mdx/compiler/types.js +0 -1
  195. package/esm/src/transforms/plugins/rehype-node-positions.d.ts.map +0 -1
  196. package/esm/src/transforms/plugins/remark-headings.d.ts.map +0 -1
  197. package/esm/src/transforms/plugins/remark-mdx-utils.d.ts.map +0 -1
  198. package/src/src/transforms/mdx/compiler/types.ts +0 -12
  199. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/rehype-node-positions.d.ts +0 -0
  200. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/rehype-node-positions.js +0 -0
  201. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/remark-headings.d.ts +0 -0
  202. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/remark-headings.js +0 -0
  203. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/remark-mdx-utils.d.ts +0 -0
  204. /package/esm/{src/transforms → extensions/ext-mdx/src}/plugins/remark-mdx-utils.js +0 -0
  205. /package/src/{src/transforms → extensions/ext-mdx/src}/plugins/rehype-node-positions.ts +0 -0
  206. /package/src/{src/transforms → extensions/ext-mdx/src}/plugins/remark-headings.ts +0 -0
  207. /package/src/{src/transforms → extensions/ext-mdx/src}/plugins/remark-mdx-utils.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/command.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+EjE"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/build/command.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFjE"}
@@ -7,6 +7,7 @@ import { displayBuildConfig, displayBuildStart } from "./config-display.js";
7
7
  import { handleBuildError } from "./error-handler.js";
8
8
  import { displayBuildSuccess } from "./stats-display.js";
9
9
  import { isJsonMode, streamJsonLine } from "../../shared/json-output.js";
10
+ import { ensureBuiltinContentTransformer } from "../../shared/ensure-content-transformer.js";
10
11
  export function buildCommand(options) {
11
12
  return withSpan("cli.command.build", async () => {
12
13
  const outputDir = options.outputDir ?? join(options.projectDir, "dist");
@@ -21,6 +22,7 @@ export function buildCommand(options) {
21
22
  }
22
23
  const adapter = await runtime.get();
23
24
  await getConfig(options.projectDir, adapter);
25
+ ensureBuiltinContentTransformer();
24
26
  if (isJsonMode()) {
25
27
  streamJsonLine({ type: "step", name: "config", status: "completed" });
26
28
  streamJsonLine({ type: "step", name: "build", status: "started" });
@@ -1 +1 @@
1
- {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/config-generator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA0Df"}
1
+ {"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/config-generator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,wBAAwB;IACvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA2Df"}
@@ -44,6 +44,7 @@ export async function createPackageJson(projectDir, projectName, options = {}) {
44
44
  react: `^${DEFAULT_INIT_REACT_VERSION}`,
45
45
  "react-dom": `^${DEFAULT_INIT_REACT_VERSION}`,
46
46
  veryfront: `^${VERSION}`,
47
+ "@veryfront/ext-esbuild": `^${VERSION}`,
47
48
  zod: "^3.24.0",
48
49
  },
49
50
  };
package/esm/cli/main.js CHANGED
@@ -13,6 +13,21 @@
13
13
  import "../_dnt.polyfills.js";
14
14
  import * as dntShim from "../_dnt.shims.js";
15
15
  await import("../src/platform/compat/esbuild-init.js");
16
+ // Register the default Bundler + ModuleLexer contracts shipped with the
17
+ // binary so bootstrap paths can resolve them without the user having to
18
+ // declare @veryfront/ext-esbuild as a project extension. User-installed
19
+ // extensions (orchestrated later) can still override these.
20
+ {
21
+ const { register } = await import("../src/extensions/contracts.js");
22
+ const { tryResolve } = await import("../src/extensions/index.js");
23
+ if (!tryResolve("Bundler") || !tryResolve("ModuleLexer")) {
24
+ const { EsbuildBundler, EsModuleLexer } = await import("../extensions/ext-esbuild/src/index.js");
25
+ if (!tryResolve("Bundler"))
26
+ register("Bundler", new EsbuildBundler());
27
+ if (!tryResolve("ModuleLexer"))
28
+ register("ModuleLexer", new EsModuleLexer());
29
+ }
30
+ }
16
31
  // All imports below must be dynamic to ensure esbuild init completes first
17
32
  const { getArgs } = await import("../src/platform/index.js");
18
33
  const { hasEnvLoaded, loadEnv, markEnvLoaded, supportsEnvFiles } = await import("../src/utils/env-loader.js");
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The CLI ships ext-mdx baked in so the compiled binary can render MDX/Markdown
3
+ * pages out of the box. Library consumers (programmatic `startProductionServer`)
4
+ * still opt in via `veryfront.config.ts` extensions. Bootstrap's
5
+ * `setupAll → teardownAll → reset()` clears the contract registry, so this
6
+ * must run *after* the server-start (or `getConfig`) call returns. We skip
7
+ * registration when a user-provided extension already supplied the contract.
8
+ */
9
+ export declare function ensureBuiltinContentTransformer(): void;
10
+ //# sourceMappingURL=ensure-content-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-content-transformer.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/ensure-content-transformer.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAGtD"}
@@ -0,0 +1,16 @@
1
+ import { tryResolve } from "../../src/extensions/index.js";
2
+ import { register } from "../../src/extensions/contracts.js";
3
+ import { MdxContentTransformer } from "../../extensions/ext-mdx/src/index.js";
4
+ /**
5
+ * The CLI ships ext-mdx baked in so the compiled binary can render MDX/Markdown
6
+ * pages out of the box. Library consumers (programmatic `startProductionServer`)
7
+ * still opt in via `veryfront.config.ts` extensions. Bootstrap's
8
+ * `setupAll → teardownAll → reset()` clears the contract registry, so this
9
+ * must run *after* the server-start (or `getConfig`) call returns. We skip
10
+ * registration when a user-provided extension already supplied the contract.
11
+ */
12
+ export function ensureBuiltinContentTransformer() {
13
+ if (tryResolve("ContentTransformer"))
14
+ return;
15
+ register("ContentTransformer", new MdxContentTransformer());
16
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"server-startup.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/server-startup.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,cAAc,EACd,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAcD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAoB5D;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CASrD;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAqB5D"}
1
+ {"version":3,"file":"server-startup.d.ts","sourceRoot":"","sources":["../../../src/cli/shared/server-startup.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,cAAc,EACd,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAcD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAsB5D;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAWrD;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAuB5D"}
@@ -1,5 +1,6 @@
1
1
  import { getEnv, runtime, setEnv } from "../../src/platform/index.js";
2
2
  import { startDevServer, startProductionServer, } from "../../src/server/index.js";
3
+ import { ensureBuiltinContentTransformer } from "./ensure-content-transformer.js";
3
4
  function buildDiscoveryConfig(options) {
4
5
  const token = getEnv("VERYFRONT_API_TOKEN") ?? "";
5
6
  const slug = getEnv("VERYFRONT_PROJECT_SLUG") ?? options.fallbackProjectSlug ?? "";
@@ -19,7 +20,7 @@ export async function startCliProxyModeServer(options) {
19
20
  if (!getEnv("NODE_ENV") && !getEnv("DENO_ENV")) {
20
21
  setEnv("NODE_ENV", "development");
21
22
  }
22
- return await startProductionServer({
23
+ const result = await startProductionServer({
23
24
  port: options.port,
24
25
  projectDir: options.projectDir,
25
26
  signal: options.signal,
@@ -28,6 +29,8 @@ export async function startCliProxyModeServer(options) {
28
29
  defaultProjectId: options.defaultProjectId,
29
30
  discoveryConfig: buildDiscoveryConfig(options),
30
31
  });
32
+ ensureBuiltinContentTransformer();
33
+ return result;
31
34
  }
32
35
  export async function startCliDevServer(options) {
33
36
  const devOptions = {
@@ -37,7 +40,9 @@ export async function startCliDevServer(options) {
37
40
  enableFastRefresh: options.enableFastRefresh,
38
41
  signal: options.signal,
39
42
  };
40
- return await startDevServer(devOptions);
43
+ const result = await startDevServer(devOptions);
44
+ ensureBuiltinContentTransformer();
45
+ return result;
41
46
  }
42
47
  export async function startCliProductionServer(options) {
43
48
  const adapter = options.adapter ?? (await runtime.get());
@@ -59,5 +64,7 @@ export async function startCliProductionServer(options) {
59
64
  // through `/_veryfront/rsc/module?` for non-local deployments, so no
60
65
  // `localProjects` entry is required for the compiled binary to work.
61
66
  };
62
- return await startProductionServer(serverOptions);
67
+ const result = await startProductionServer(serverOptions);
68
+ ensureBuiltinContentTransformer();
69
+ return result;
63
70
  }
package/esm/deno.d.ts CHANGED
@@ -123,6 +123,9 @@ declare namespace _default {
123
123
  "veryfront/testing": string;
124
124
  "veryfront/testing/assert": string;
125
125
  "veryfront/testing/bdd": string;
126
+ "veryfront/extensions/bundler": string;
127
+ "veryfront/extensions/contracts": string;
128
+ "veryfront/extensions/interfaces": string;
126
129
  "#veryfront": string;
127
130
  "#veryfront/agent": string;
128
131
  "#veryfront/agent/react": string;
@@ -255,9 +258,6 @@ declare namespace _default {
255
258
  "rehype-raw": string;
256
259
  "rehype-sanitize": string;
257
260
  "rehype-stringify": string;
258
- esbuild: string;
259
- "esbuild/mod.js": string;
260
- "es-module-lexer": string;
261
261
  "gray-matter": string;
262
262
  zod: string;
263
263
  mdast: string;
package/esm/deno.js CHANGED
@@ -1,15 +1,17 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.368",
3
+ "version": "0.1.370",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "workspace": [
7
7
  "./extensions/ext-anthropic",
8
8
  "./extensions/ext-babel",
9
9
  "./extensions/ext-jwt",
10
+ "./extensions/ext-mdx",
10
11
  "./extensions/ext-node-compat",
11
12
  "./extensions/ext-openai",
12
13
  "./extensions/ext-opentelemetry",
14
+ "./extensions/ext-esbuild",
13
15
  "./extensions/ext-redis",
14
16
  "./extensions/ext-tailwind"
15
17
  ],
@@ -143,6 +145,9 @@ export default {
143
145
  "veryfront/testing": "./src/testing/index.ts",
144
146
  "veryfront/testing/assert": "./src/testing/assert.ts",
145
147
  "veryfront/testing/bdd": "./src/testing/bdd.ts",
148
+ "veryfront/extensions/bundler": "./src/extensions/bundler.ts",
149
+ "veryfront/extensions/contracts": "./src/extensions/contracts.ts",
150
+ "veryfront/extensions/interfaces": "./src/extensions/interfaces/index.ts",
146
151
  "#veryfront": "./src/index.ts",
147
152
  "#veryfront/agent": "./src/agent/index.ts",
148
153
  "#veryfront/agent/react": "./src/agent/react/index.ts",
@@ -275,9 +280,6 @@ export default {
275
280
  "rehype-raw": "npm:rehype-raw@7.0.0",
276
281
  "rehype-sanitize": "npm:rehype-sanitize@6.0.0",
277
282
  "rehype-stringify": "npm:rehype-stringify@10.0.1",
278
- "esbuild": "npm:esbuild@0.27.4",
279
- "esbuild/mod.js": "npm:esbuild@0.27.4",
280
- "es-module-lexer": "npm:es-module-lexer@2.0.0",
281
283
  "gray-matter": "npm:gray-matter@4.0.3",
282
284
  "zod": "npm:zod@4.3.6",
283
285
  "mdast": "npm:@types/mdast@4.0.3",
@@ -440,7 +442,6 @@ export default {
440
442
  "npm:onnxruntime-node@1.21.0"
441
443
  ],
442
444
  "deny": [
443
- "npm:esbuild@0.27.4",
444
445
  "npm:protobufjs@7.5.4"
445
446
  ]
446
447
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Idempotent one-shot setup — copies the esbuild binary out of the VFS (if
3
+ * running in `deno compile`) and sets ESBUILD_BINARY_PATH. No-op on normal
4
+ * Deno or when the env var is already set.
5
+ */
6
+ export declare function ensureEsbuildBinary(): Promise<void>;
7
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-esbuild/src/binary.ts"],"names":[],"mappings":"AAmHA;;;;GAIG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCzD"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Binary extraction for `deno compile` VFS.
3
+ *
4
+ * Ported from src/platform/compat/esbuild.ts + esbuild-shared.ts. When the
5
+ * framework runs as a compiled Deno binary, the esbuild native binary lives
6
+ * inside the VFS and must be copied to a writable path before esbuild's
7
+ * child-process spawn can find it.
8
+ *
9
+ * On normal Deno (not `deno compile`) or when ESBUILD_BINARY_PATH is already
10
+ * set, `ensureEsbuildBinary()` is a no-op.
11
+ *
12
+ * @module extensions/ext-esbuild/binary
13
+ */
14
+ import * as dntShim from "../../../_dnt.shims.js";
15
+ import { isDenoCompiled } from "./runtime.js";
16
+ const ESBUILD_VERSION = "0.27.4";
17
+ function getTempDir() {
18
+ try {
19
+ return (dntShim.Deno.env.get("TMPDIR") ?? dntShim.Deno.env.get("TEMP") ?? dntShim.Deno.env.get("TMP") ?? "/tmp");
20
+ }
21
+ catch {
22
+ return "/tmp";
23
+ }
24
+ }
25
+ function getEsbuildBinaryName() {
26
+ const archMap = { x86_64: "x64", aarch64: "arm64" };
27
+ const arch = archMap[dntShim.Deno.build.arch] ?? dntShim.Deno.build.arch;
28
+ return `@esbuild/${dntShim.Deno.build.os}-${arch}`;
29
+ }
30
+ function getVFSBasePath(filePath, tempDir) {
31
+ const denoCompileMatch = filePath.match(/^(.*\/deno-compile-[^/]+)\//);
32
+ if (denoCompileMatch?.[1])
33
+ return denoCompileMatch[1];
34
+ const parts = filePath.split("/");
35
+ const srcIndex = parts.lastIndexOf("src");
36
+ if (srcIndex > 0)
37
+ return parts.slice(0, srcIndex).join("/");
38
+ return `${tempDir}/deno-compile-veryfront`;
39
+ }
40
+ async function isFile(path) {
41
+ try {
42
+ const stat = await dntShim.Deno.stat(path);
43
+ return stat.isFile;
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ async function findEsbuildInVFS() {
50
+ const binaryName = getEsbuildBinaryName();
51
+ const vfsBase = getVFSBasePath(new URL(globalThis[Symbol.for("import-meta-ponyfill-esmodule")](import.meta).url).pathname, getTempDir());
52
+ const possiblePaths = [
53
+ `${vfsBase}/node_modules/${binaryName}/bin/esbuild`,
54
+ `${vfsBase}/node_modules/.deno/${binaryName}@${ESBUILD_VERSION}/node_modules/${binaryName}/bin/esbuild`,
55
+ `${vfsBase}/node_modules/.deno/esbuild@${ESBUILD_VERSION}/node_modules/${binaryName}/bin/esbuild`,
56
+ `${vfsBase}/node_modules/esbuild/bin/esbuild`,
57
+ `${vfsBase}/node_modules/.package/esbuild@${ESBUILD_VERSION}/bin/esbuild`,
58
+ `${vfsBase}/node_modules/.package/${binaryName}@${ESBUILD_VERSION}/bin/esbuild`,
59
+ ];
60
+ for (const p of possiblePaths) {
61
+ if (await isFile(p))
62
+ return p;
63
+ }
64
+ try {
65
+ const nodeModulesPath = `${vfsBase}/node_modules`;
66
+ for await (const entry of dntShim.Deno.readDir(nodeModulesPath)) {
67
+ if (entry.name !== binaryName && !entry.name.startsWith("@esbuild"))
68
+ continue;
69
+ const binPath = `${nodeModulesPath}/${entry.name}/bin/esbuild`;
70
+ if (await isFile(binPath))
71
+ return binPath;
72
+ }
73
+ }
74
+ catch {
75
+ /* node_modules not readable in VFS */
76
+ }
77
+ return null;
78
+ }
79
+ async function extractEsbuildBinary() {
80
+ const cacheDir = `${getTempDir()}/veryfront-esbuild`;
81
+ const targetPath = `${cacheDir}/esbuild-${ESBUILD_VERSION}`;
82
+ try {
83
+ const stat = await dntShim.Deno.stat(targetPath);
84
+ if (stat.isFile && stat.mode && (stat.mode & 0o111))
85
+ return targetPath;
86
+ }
87
+ catch {
88
+ /* cache miss */
89
+ }
90
+ const vfsPath = await findEsbuildInVFS();
91
+ if (!vfsPath) {
92
+ throw new Error(`[ext-esbuild] Could not find esbuild binary in deno compile VFS. ` +
93
+ `Platform: ${getEsbuildBinaryName()}. ` +
94
+ `Ensure esbuild is in dependencies and deno compile includes node_modules.`);
95
+ }
96
+ await dntShim.Deno.mkdir(cacheDir, { recursive: true });
97
+ const binary = await dntShim.Deno.readFile(vfsPath);
98
+ await dntShim.Deno.writeFile(targetPath, binary, { mode: 0o755 });
99
+ return targetPath;
100
+ }
101
+ let setupComplete = false;
102
+ let setupPromise = null;
103
+ /**
104
+ * Idempotent one-shot setup — copies the esbuild binary out of the VFS (if
105
+ * running in `deno compile`) and sets ESBUILD_BINARY_PATH. No-op on normal
106
+ * Deno or when the env var is already set.
107
+ */
108
+ export async function ensureEsbuildBinary() {
109
+ if (setupComplete)
110
+ return;
111
+ if (setupPromise) {
112
+ await setupPromise;
113
+ return;
114
+ }
115
+ setupPromise = (async () => {
116
+ try {
117
+ if (dntShim.Deno.env.get("ESBUILD_BINARY_PATH") || !isDenoCompiled) {
118
+ setupComplete = true;
119
+ return;
120
+ }
121
+ try {
122
+ const binaryPath = await extractEsbuildBinary();
123
+ dntShim.Deno.env.set("ESBUILD_BINARY_PATH", binaryPath);
124
+ // esbuild reads process.env (not Deno.env) on some code paths.
125
+ const proc = dntShim.dntGlobalThis.process;
126
+ if (proc?.env)
127
+ proc.env.ESBUILD_BINARY_PATH = binaryPath;
128
+ }
129
+ catch (err) {
130
+ console.error("[ext-esbuild] Binary extraction failed:", err);
131
+ }
132
+ }
133
+ finally {
134
+ setupComplete = true;
135
+ }
136
+ })();
137
+ try {
138
+ await setupPromise;
139
+ }
140
+ finally {
141
+ setupPromise = null;
142
+ }
143
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * es-module-lexer-backed implementation of the {@link ModuleLexer} contract.
3
+ *
4
+ * es-module-lexer@2 exports `init` as a Promise in its ESM build but older
5
+ * typings expect a function. We tolerate both shapes (as the in-tree
6
+ * src/transforms/esm/lexer.ts did).
7
+ *
8
+ * @module extensions/ext-esbuild/es-module-lexer
9
+ */
10
+ import type { ImportSpecifier, ModuleLexer } from "../../../src/extensions/interfaces/index.js";
11
+ /** es-module-lexer-backed {@link ModuleLexer} implementation. */
12
+ export declare class EsModuleLexer implements ModuleLexer {
13
+ private initPromise;
14
+ init(): Promise<void>;
15
+ parse(code: string): readonly ImportSpecifier[];
16
+ }
17
+ //# sourceMappingURL=es-module-lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"es-module-lexer.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-esbuild/src/es-module-lexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,6CAA6C,CAAC;AAGhG,iEAAiE;AACjE,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,WAAW,CAA8B;IAE3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;CAIhD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * es-module-lexer-backed implementation of the {@link ModuleLexer} contract.
3
+ *
4
+ * es-module-lexer@2 exports `init` as a Promise in its ESM build but older
5
+ * typings expect a function. We tolerate both shapes (as the in-tree
6
+ * src/transforms/esm/lexer.ts did).
7
+ *
8
+ * @module extensions/ext-esbuild/es-module-lexer
9
+ */
10
+ import { init, parse } from "es-module-lexer";
11
+ /** es-module-lexer-backed {@link ModuleLexer} implementation. */
12
+ export class EsModuleLexer {
13
+ initPromise = null;
14
+ async init() {
15
+ if (this.initPromise) {
16
+ await this.initPromise;
17
+ return;
18
+ }
19
+ const anyInit = init;
20
+ this.initPromise = typeof anyInit === "function"
21
+ ? anyInit()
22
+ : anyInit;
23
+ await this.initPromise;
24
+ }
25
+ parse(code) {
26
+ const [imports] = parse(code);
27
+ return imports;
28
+ }
29
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * esbuild-backed implementation of the {@link Bundler} contract.
3
+ *
4
+ * Lazy-initializes the esbuild binary (including `deno compile` VFS
5
+ * extraction) on first use. All options pass through to esbuild unchanged
6
+ * because the {@link BundleOptions} shape was designed to be esbuild-compatible;
7
+ * the only translation is converting {@link BundlerPlugin}s into esbuild
8
+ * plugins via {@link toEsbuildPlugin}.
9
+ *
10
+ * @module extensions/ext-esbuild/esbuild-bundler
11
+ */
12
+ import type { BuildContext, BundleOptions, Bundler, BundleResult, TransformOptions, TransformResult } from "../../../src/extensions/interfaces/index.js";
13
+ /** esbuild-backed {@link Bundler} implementation. */
14
+ export declare class EsbuildBundler implements Bundler {
15
+ bundle(options: BundleOptions): Promise<BundleResult>;
16
+ transform(options: TransformOptions): Promise<TransformResult>;
17
+ context(options: BundleOptions): Promise<BuildContext>;
18
+ stop(): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=esbuild-bundler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuild-bundler.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-esbuild/src/esbuild-bundler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAEb,OAAO,EACP,YAAY,EAGZ,gBAAgB,EAChB,eAAe,EAChB,MAAM,6CAA6C,CAAC;AAoDrD,qDAAqD;AACrD,qBAAa,cAAe,YAAW,OAAO;IACtC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAWrD,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * esbuild-backed implementation of the {@link Bundler} contract.
3
+ *
4
+ * Lazy-initializes the esbuild binary (including `deno compile` VFS
5
+ * extraction) on first use. All options pass through to esbuild unchanged
6
+ * because the {@link BundleOptions} shape was designed to be esbuild-compatible;
7
+ * the only translation is converting {@link BundlerPlugin}s into esbuild
8
+ * plugins via {@link toEsbuildPlugin}.
9
+ *
10
+ * @module extensions/ext-esbuild/esbuild-bundler
11
+ */
12
+ import { ensureEsbuildBinary } from "./binary.js";
13
+ import { toEsbuildPlugin } from "./plugin-adapter.js";
14
+ let esbuildModule = null;
15
+ async function getEsbuild() {
16
+ await ensureEsbuildBinary();
17
+ if (esbuildModule)
18
+ return esbuildModule;
19
+ esbuildModule = await import("esbuild");
20
+ return esbuildModule;
21
+ }
22
+ // deno-lint-ignore no-explicit-any
23
+ function toMessage(m) {
24
+ return {
25
+ text: m.text,
26
+ location: m.location ?? null,
27
+ notes: m.notes,
28
+ pluginName: m.pluginName,
29
+ detail: m.detail,
30
+ };
31
+ }
32
+ // deno-lint-ignore no-explicit-any
33
+ function toMessages(ms) {
34
+ return (ms ?? []).map(toMessage);
35
+ }
36
+ // deno-lint-ignore no-explicit-any
37
+ function toOutput(f) {
38
+ return {
39
+ path: f.path,
40
+ contents: f.contents,
41
+ text: f.text,
42
+ hash: f.hash,
43
+ };
44
+ }
45
+ function mapOptions(options) {
46
+ const { plugins, ...rest } = options;
47
+ const mapped = { ...rest };
48
+ if (plugins && plugins.length > 0) {
49
+ mapped.plugins = plugins.map(toEsbuildPlugin);
50
+ }
51
+ return mapped;
52
+ }
53
+ /** esbuild-backed {@link Bundler} implementation. */
54
+ export class EsbuildBundler {
55
+ async bundle(options) {
56
+ const esbuild = await getEsbuild();
57
+ const result = await esbuild.build(mapOptions(options));
58
+ return {
59
+ outputFiles: (result.outputFiles ?? []).map(toOutput),
60
+ warnings: toMessages(result.warnings),
61
+ errors: toMessages(result.errors),
62
+ metafile: result.metafile,
63
+ };
64
+ }
65
+ async transform(options) {
66
+ const esbuild = await getEsbuild();
67
+ const { code, ...rest } = options;
68
+ const result = await esbuild.transform(code, rest);
69
+ return {
70
+ code: result.code,
71
+ map: result.map,
72
+ warnings: toMessages(result.warnings).map((m) => m.text),
73
+ };
74
+ }
75
+ async context(options) {
76
+ const esbuild = await getEsbuild();
77
+ const ctx = await esbuild.context(mapOptions(options));
78
+ return {
79
+ rebuild: async () => {
80
+ const result = await ctx.rebuild();
81
+ return {
82
+ outputFiles: (result.outputFiles ?? []).map(toOutput),
83
+ warnings: toMessages(result.warnings),
84
+ errors: toMessages(result.errors),
85
+ metafile: result.metafile,
86
+ };
87
+ },
88
+ dispose: () => ctx.dispose(),
89
+ };
90
+ }
91
+ async stop() {
92
+ const m = esbuildModule;
93
+ if (!m)
94
+ return;
95
+ esbuildModule = null;
96
+ await m.stop();
97
+ }
98
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ext-esbuild — Bundler + ModuleLexer contract implementations backed by
3
+ * esbuild and es-module-lexer.
4
+ *
5
+ * @module extensions/ext-esbuild
6
+ */
7
+ import type { ExtensionFactory } from "../../../src/extensions/index.js";
8
+ import { EsbuildBundler } from "./esbuild-bundler.js";
9
+ import { EsModuleLexer } from "./es-module-lexer.js";
10
+ /**
11
+ * Default export — the ext-esbuild extension factory.
12
+ *
13
+ * Registers both the `Bundler` (esbuild-backed) and `ModuleLexer`
14
+ * (es-module-lexer-backed) contracts.
15
+ */
16
+ declare const extEsbuild: ExtensionFactory;
17
+ export default extEsbuild;
18
+ export { EsbuildBundler, EsModuleLexer };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-esbuild/src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;GAKG;AACH,QAAA,MAAM,UAAU,EAAE,gBAwBjB,CAAC;AAEF,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ext-esbuild — Bundler + ModuleLexer contract implementations backed by
3
+ * esbuild and es-module-lexer.
4
+ *
5
+ * @module extensions/ext-esbuild
6
+ */
7
+ import { EsbuildBundler } from "./esbuild-bundler.js";
8
+ import { EsModuleLexer } from "./es-module-lexer.js";
9
+ /**
10
+ * Default export — the ext-esbuild extension factory.
11
+ *
12
+ * Registers both the `Bundler` (esbuild-backed) and `ModuleLexer`
13
+ * (es-module-lexer-backed) contracts.
14
+ */
15
+ const extEsbuild = () => {
16
+ const bundler = new EsbuildBundler();
17
+ const lexer = new EsModuleLexer();
18
+ return {
19
+ name: "ext-esbuild",
20
+ version: "0.1.0",
21
+ capabilities: [
22
+ { type: "contract", name: "Bundler" },
23
+ { type: "contract", name: "ModuleLexer" },
24
+ ],
25
+ setup(ctx) {
26
+ if (!ctx.get("Bundler")) {
27
+ ctx.provide("Bundler", bundler);
28
+ }
29
+ if (!ctx.get("ModuleLexer")) {
30
+ ctx.provide("ModuleLexer", lexer);
31
+ }
32
+ ctx.logger.info("[ext-esbuild] Bundler + ModuleLexer registered");
33
+ },
34
+ async teardown() {
35
+ await bundler.stop?.();
36
+ },
37
+ };
38
+ };
39
+ export default extEsbuild;
40
+ export { EsbuildBundler, EsModuleLexer };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Plugin adapter — converts {@link BundlerPlugin} (the bundler-agnostic
3
+ * contract shape) into an esbuild `Plugin`. The contract's onResolve /
4
+ * onLoad shapes were deliberately designed to match esbuild's, so the
5
+ * translation is near-1:1; this module exists to isolate the esbuild
6
+ * import from the rest of the extension.
7
+ *
8
+ * @module extensions/ext-esbuild/plugin-adapter
9
+ */
10
+ import type { BundlerPlugin } from "../../../src/extensions/interfaces/index.js";
11
+ type EsbuildPlugin = any;
12
+ export declare function toEsbuildPlugin(plugin: BundlerPlugin): EsbuildPlugin;
13
+ export {};
14
+ //# sourceMappingURL=plugin-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-adapter.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-esbuild/src/plugin-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,6CAA6C,CAAC;AAErD,KAAK,aAAa,GAAG,GAAG,CAAC;AAEzB,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CA4CpE"}