veryfront 0.1.367 → 0.1.369
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.
- package/esm/cli/commands/init/config-generator.d.ts.map +1 -1
- package/esm/cli/commands/init/config-generator.js +1 -0
- package/esm/cli/main.js +15 -0
- package/esm/deno.d.ts +3 -3
- package/esm/deno.js +5 -5
- package/esm/extensions/ext-esbuild/src/binary.d.ts +7 -0
- package/esm/extensions/ext-esbuild/src/binary.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/binary.js +143 -0
- package/esm/extensions/ext-esbuild/src/es-module-lexer.d.ts +17 -0
- package/esm/extensions/ext-esbuild/src/es-module-lexer.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/es-module-lexer.js +29 -0
- package/esm/extensions/ext-esbuild/src/esbuild-bundler.d.ts +20 -0
- package/esm/extensions/ext-esbuild/src/esbuild-bundler.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/esbuild-bundler.js +98 -0
- package/esm/extensions/ext-esbuild/src/index.d.ts +19 -0
- package/esm/extensions/ext-esbuild/src/index.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/index.js +40 -0
- package/esm/extensions/ext-esbuild/src/plugin-adapter.d.ts +14 -0
- package/esm/extensions/ext-esbuild/src/plugin-adapter.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/plugin-adapter.js +55 -0
- package/esm/extensions/ext-esbuild/src/runtime.d.ts +4 -0
- package/esm/extensions/ext-esbuild/src/runtime.d.ts.map +1 -0
- package/esm/extensions/ext-esbuild/src/runtime.js +43 -0
- package/esm/src/agent/conversation-bootstrap.d.ts +1 -1
- package/esm/src/agent/conversation-bootstrap.d.ts.map +1 -1
- package/esm/src/agent/conversation-bootstrap.js +1 -1
- package/esm/src/agent/conversation-root-run-context.d.ts +3 -3
- package/esm/src/agent/conversation-root-run-context.d.ts.map +1 -1
- package/esm/src/agent/conversation-root-run-context.js +3 -3
- package/esm/src/agent/durable.d.ts +1 -1
- package/esm/src/agent/durable.d.ts.map +1 -1
- package/esm/src/agent/durable.js +2 -2
- package/esm/src/agent/fork-runtime-stream.d.ts +11 -1
- package/esm/src/agent/fork-runtime-stream.d.ts.map +1 -1
- package/esm/src/agent/fork-runtime-stream.js +36 -0
- package/esm/src/agent/hosted-child-bootstrap.d.ts +1 -1
- package/esm/src/agent/hosted-child-bootstrap.d.ts.map +1 -1
- package/esm/src/agent/hosted-child-bootstrap.js +1 -1
- package/esm/src/agent/index.d.ts +1 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -1
- package/esm/src/build/bundler/code-splitter/build-context.d.ts +1 -1
- package/esm/src/build/bundler/code-splitter/build-context.d.ts.map +1 -1
- package/esm/src/build/bundler/code-splitter/build-context.js +1 -1
- package/esm/src/build/bundler/code-splitter/esbuild-plugin.d.ts +1 -1
- package/esm/src/build/bundler/code-splitter/esbuild-plugin.d.ts.map +1 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts +1 -1
- package/esm/src/build/bundler/code-splitter/manifest-builder.d.ts.map +1 -1
- package/esm/src/build/bundler/code-splitter/types.d.ts +1 -1
- package/esm/src/build/bundler/code-splitter/types.d.ts.map +1 -1
- package/esm/src/build/compiler/mdx-compiler/transpiler.js +1 -1
- package/esm/src/build/compiler/mdx-to-js.js +1 -1
- package/esm/src/build/embedded/preset.js +1 -1
- package/esm/src/build/production-build/client-runtime.js +1 -1
- package/esm/src/discovery/transpiler.js +1 -1
- package/esm/src/extensions/bundler.d.ts +28 -0
- package/esm/src/extensions/bundler.d.ts.map +1 -0
- package/esm/src/extensions/bundler.js +42 -0
- package/esm/src/extensions/interfaces/bundler.d.ts +162 -27
- package/esm/src/extensions/interfaces/bundler.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/index.d.ts +2 -1
- package/esm/src/extensions/interfaces/index.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/module-lexer.d.ts +45 -0
- package/esm/src/extensions/interfaces/module-lexer.d.ts.map +1 -0
- package/esm/src/extensions/interfaces/module-lexer.js +13 -0
- package/esm/src/extensions/loader.d.ts.map +1 -1
- package/esm/src/extensions/loader.js +7 -1
- package/esm/src/extensions/recommendations.d.ts.map +1 -1
- package/esm/src/extensions/recommendations.js +3 -0
- package/esm/src/platform/compat/esbuild.d.ts +20 -6
- package/esm/src/platform/compat/esbuild.d.ts.map +1 -1
- package/esm/src/platform/compat/esbuild.js +20 -137
- package/esm/src/rendering/script-page-handling.js +1 -1
- package/esm/src/routing/api/module-loader/esbuild-plugin.d.ts +1 -1
- package/esm/src/routing/api/module-loader/esbuild-plugin.d.ts.map +1 -1
- package/esm/src/routing/api/module-loader/loader.js +1 -1
- package/esm/src/server/bootstrap.d.ts.map +1 -1
- package/esm/src/server/bootstrap.js +22 -0
- package/esm/src/server/dev-server/middleware.js +1 -1
- package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts +1 -1
- package/esm/src/server/handlers/dev/files/esbuild-plugins.d.ts.map +1 -1
- package/esm/src/server/handlers/studio/bridge-modules.handler.js +1 -1
- package/esm/src/server/services/rsc/endpoints/script-handlers.js +1 -1
- package/esm/src/server/services/rsc/orchestrators/hydrator-handler.js +1 -1
- package/esm/src/server/shared/browser-module-bundler.js +1 -1
- package/esm/src/testing/bdd.d.ts +1 -0
- package/esm/src/testing/bdd.d.ts.map +1 -1
- package/esm/src/testing/bdd.js +1 -0
- package/esm/src/testing/init.js +7 -0
- package/esm/src/transforms/esm/http-bundler.d.ts +1 -1
- package/esm/src/transforms/esm/http-bundler.d.ts.map +1 -1
- package/esm/src/transforms/esm/lexer.d.ts +2 -9
- package/esm/src/transforms/esm/lexer.d.ts.map +1 -1
- package/esm/src/transforms/esm/lexer.js +9 -10
- package/esm/src/transforms/esm/transform-utils.d.ts +1 -1
- package/esm/src/transforms/esm/transform-utils.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/parse-cache.d.ts +1 -1
- package/esm/src/transforms/import-rewriter/parse-cache.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/parse-cache.js +8 -7
- package/esm/src/transforms/mdx/esm-module-loader/import-transformer.js +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.js +2 -2
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/cli/commands/init/config-generator.ts +1 -0
- package/src/cli/main.ts +14 -0
- package/src/deno.js +5 -5
- package/src/extensions/ext-esbuild/src/binary.ts +154 -0
- package/src/extensions/ext-esbuild/src/es-module-lexer.ts +34 -0
- package/src/extensions/ext-esbuild/src/esbuild-bundler.ts +122 -0
- package/src/extensions/ext-esbuild/src/index.ts +46 -0
- package/src/extensions/ext-esbuild/src/plugin-adapter.ts +66 -0
- package/src/extensions/ext-esbuild/src/runtime.ts +54 -0
- package/src/src/agent/conversation-bootstrap.ts +2 -2
- package/src/src/agent/conversation-root-run-context.ts +6 -6
- package/src/src/agent/durable.ts +3 -3
- package/src/src/agent/fork-runtime-stream.ts +61 -1
- package/src/src/agent/hosted-child-bootstrap.ts +2 -2
- package/src/src/agent/index.ts +2 -0
- package/src/src/build/bundler/code-splitter/build-context.ts +1 -1
- package/src/src/build/bundler/code-splitter/esbuild-plugin.ts +1 -1
- package/src/src/build/bundler/code-splitter/manifest-builder.ts +1 -1
- package/src/src/build/bundler/code-splitter/splitter.ts +1 -1
- package/src/src/build/bundler/code-splitter/types.ts +1 -1
- package/src/src/build/compiler/mdx-compiler/transpiler.ts +1 -1
- package/src/src/build/compiler/mdx-to-js.ts +1 -1
- package/src/src/build/embedded/preset.ts +1 -1
- package/src/src/build/production-build/client-runtime.ts +2 -2
- package/src/src/discovery/transpiler.ts +2 -2
- package/src/src/extensions/bundler.ts +85 -0
- package/src/src/extensions/interfaces/bundler.ts +189 -16
- package/src/src/extensions/interfaces/index.ts +16 -0
- package/src/src/extensions/interfaces/module-lexer.ts +46 -0
- package/src/src/extensions/loader.ts +6 -1
- package/src/src/extensions/recommendations.ts +3 -0
- package/src/src/platform/compat/esbuild.ts +48 -160
- package/src/src/rendering/script-page-handling.ts +1 -1
- package/src/src/routing/api/module-loader/esbuild-plugin.ts +1 -1
- package/src/src/routing/api/module-loader/loader.ts +2 -2
- package/src/src/server/bootstrap.ts +29 -0
- package/src/src/server/dev-server/middleware.ts +1 -1
- package/src/src/server/handlers/dev/files/esbuild-plugins.ts +1 -1
- package/src/src/server/handlers/studio/bridge-modules.handler.ts +1 -1
- package/src/src/server/services/rsc/endpoints/script-handlers.ts +4 -4
- package/src/src/server/services/rsc/orchestrators/hydrator-handler.ts +1 -1
- package/src/src/server/shared/browser-module-bundler.ts +1 -1
- package/src/src/testing/bdd.ts +1 -0
- package/src/src/testing/init.ts +9 -0
- package/src/src/transforms/esm/http-bundler.ts +1 -1
- package/src/src/transforms/esm/lexer.ts +13 -21
- package/src/src/transforms/esm/transform-utils.ts +1 -1
- package/src/src/transforms/import-rewriter/parse-cache.ts +10 -7
- package/src/src/transforms/mdx/esm-module-loader/import-transformer.ts +1 -1
- package/src/src/transforms/pipeline/stages/ssr-vf-modules/transform.ts +2 -2
- package/src/src/utils/version-constant.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/src/server/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../src/src/server/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,wBAAwB,CAAC;AAqCjG,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,OAAO,EAAE,cAAc,CAAC;IAExB,2BAA2B;IAC3B,MAAM,EAAE,eAAe,CAAC;IAExB,wCAAwC;IACxC,cAAc,EAAE,OAAO,CAAC;IAExB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,eAAe,EAAE,eAAe,CAAC;IAEjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAmED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,EAC3C,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAClC,OAAO,CAAC,eAAe,CAAC,CAO1B;AAkDD,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAkJ1B;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAa1B;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
|
|
@@ -2,6 +2,8 @@ import { clearConfigCache, getConfig } from "../config/index.js";
|
|
|
2
2
|
import { orchestrateExtensions, tryResolve } from "../extensions/index.js";
|
|
3
3
|
import { AIProviderRegistryName } from "../extensions/interfaces/index.js";
|
|
4
4
|
import { createAIProviderRegistry } from "../extensions/registries/ai-provider-registry.js";
|
|
5
|
+
import { MISSING_EXTENSION_ERROR } from "../extensions/errors.js";
|
|
6
|
+
import { getRecommendation } from "../extensions/recommendations.js";
|
|
5
7
|
import { setGlobalActiveSpanAccessor, setGlobalMetricsAPI, setGlobalTracerProvider, } from "../observability/tracing/api-shim.js";
|
|
6
8
|
import { getEnvironmentConfig, refreshEnvironmentConfig, } from "../config/environment-config.js";
|
|
7
9
|
import { getErrorMessage } from "../errors/veryfront-error.js";
|
|
@@ -22,6 +24,23 @@ const bootstrapProdLog = logger.component("bootstrap-prod");
|
|
|
22
24
|
* Wire the `TracingExporter` contract (if registered) into the core shim.
|
|
23
25
|
* Must be called after `orchestrateExtensions()` completes.
|
|
24
26
|
*/
|
|
27
|
+
/**
|
|
28
|
+
* Fail-fast: ensure the `Bundler` contract has been registered. Core depends
|
|
29
|
+
* on it for every JS/TS transform path. `ModuleLexer` is checked too, but
|
|
30
|
+
* only as a warning (dev-only paths can degrade).
|
|
31
|
+
*/
|
|
32
|
+
function assertRequiredContracts() {
|
|
33
|
+
if (!tryResolve("Bundler")) {
|
|
34
|
+
const recommendation = getRecommendation("Bundler");
|
|
35
|
+
throw MISSING_EXTENSION_ERROR.create({
|
|
36
|
+
message: `Missing extension for contract "Bundler"${recommendation ? `. Recommended: ${recommendation}` : ""}`,
|
|
37
|
+
detail: recommendation ? `Install it with: deno add ${recommendation}` : undefined,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (!tryResolve("ModuleLexer")) {
|
|
41
|
+
bootstrapLog.warn(`[bootstrap] no ModuleLexer extension registered — dev-server import rewriting will fail. Recommended: ${getRecommendation("ModuleLexer") ?? "@veryfront/ext-esbuild"}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
25
44
|
function wireTracingShim() {
|
|
26
45
|
const tracing = tryResolve("TracingExporter");
|
|
27
46
|
if (tracing) {
|
|
@@ -135,6 +154,7 @@ export async function bootstrap(projectDir, adapter) {
|
|
|
135
154
|
primeContracts: { [AIProviderRegistryName]: createAIProviderRegistry() },
|
|
136
155
|
});
|
|
137
156
|
wireTracingShim();
|
|
157
|
+
assertRequiredContracts();
|
|
138
158
|
return {
|
|
139
159
|
adapter,
|
|
140
160
|
config,
|
|
@@ -167,6 +187,7 @@ export async function bootstrap(projectDir, adapter) {
|
|
|
167
187
|
primeContracts: { [AIProviderRegistryName]: createAIProviderRegistry() },
|
|
168
188
|
});
|
|
169
189
|
wireTracingShim();
|
|
190
|
+
assertRequiredContracts();
|
|
170
191
|
return {
|
|
171
192
|
adapter,
|
|
172
193
|
config,
|
|
@@ -222,6 +243,7 @@ export async function bootstrap(projectDir, adapter) {
|
|
|
222
243
|
primeContracts: { [AIProviderRegistryName]: createAIProviderRegistry() },
|
|
223
244
|
}), fsDispose);
|
|
224
245
|
wireTracingShim();
|
|
246
|
+
assertRequiredContracts();
|
|
225
247
|
return {
|
|
226
248
|
adapter: enhancedAdapter,
|
|
227
249
|
config,
|
|
@@ -105,7 +105,7 @@ async function loadMiddlewareFromVirtualFS(middlewarePath, adapter) {
|
|
|
105
105
|
const content = await adapter.fs.readFile(middlewarePath);
|
|
106
106
|
const source = typeof content === "string" ? content : new TextDecoder().decode(content);
|
|
107
107
|
const loader = getEsbuildLoader(middlewarePath);
|
|
108
|
-
const { build } = await import("
|
|
108
|
+
const { build } = await import("../../extensions/bundler.js");
|
|
109
109
|
const result = await build({
|
|
110
110
|
bundle: false,
|
|
111
111
|
write: false,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Plugin } from "
|
|
1
|
+
import type { Plugin } from "../../../../extensions/bundler.js";
|
|
2
2
|
import type { RuntimeAdapter } from "../../../../platform/adapters/base.js";
|
|
3
3
|
import { type LockfileManager } from "../../../../utils/import-lockfile.js";
|
|
4
4
|
/** Create relative file system plugin for resolving imports via adapter's fs */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esbuild-plugins.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/dev/files/esbuild-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,MAAM,EAAe,MAAM,
|
|
1
|
+
{"version":3,"file":"esbuild-plugins.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/dev/files/esbuild-plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6B,MAAM,EAAe,MAAM,mCAAmC,CAAC;AAGxG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAQ5E,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,sCAAsC,CAAC;AAkB9C,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAyF1F;AAKD,UAAU,yBAAyB;IACjC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AA+DD,kFAAkF;AAClF,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,yBAAyB,GAAG,OAAe,GACnD,MAAM,CAqER;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAUjD"}
|
|
@@ -44,7 +44,7 @@ async function bundleBridge() {
|
|
|
44
44
|
// Dev mode: bundle on-the-fly with esbuild
|
|
45
45
|
const entryPoint = `${BRIDGE_DIR}bridge-coordinator.ts`;
|
|
46
46
|
const source = await dntShim.Deno.readTextFile(entryPoint);
|
|
47
|
-
const { build } = await import("
|
|
47
|
+
const { build } = await import("../../../extensions/bundler.js");
|
|
48
48
|
const { outputFiles } = await build({
|
|
49
49
|
bundle: true,
|
|
50
50
|
write: false,
|
|
@@ -17,7 +17,7 @@ async function buildOrServeScript(adapter, path, fallbackBundle, esbuildOptions)
|
|
|
17
17
|
let esbuild = null;
|
|
18
18
|
try {
|
|
19
19
|
const src = await adapter.fs.readFile(path);
|
|
20
|
-
esbuild = await import("
|
|
20
|
+
esbuild = await import("../../../../extensions/bundler.js");
|
|
21
21
|
const result = await esbuild.build({
|
|
22
22
|
...esbuildOptions,
|
|
23
23
|
stdin: { ...esbuildOptions.stdin, contents: src },
|
|
@@ -25,7 +25,7 @@ export class HydratorHandler {
|
|
|
25
25
|
return this.fsAdapter?.readFile(filePath) ?? compatFs.readTextFile(filePath);
|
|
26
26
|
}
|
|
27
27
|
async bundleHydrator(filePath) {
|
|
28
|
-
const { build, stop } = await import("
|
|
28
|
+
const { build, stop } = await import("../../../../extensions/bundler.js");
|
|
29
29
|
try {
|
|
30
30
|
const source = await this.readHydratorFile(filePath);
|
|
31
31
|
const result = await build({
|
|
@@ -4,7 +4,7 @@ import { getDirectory, getEsbuildLoader } from "../../utils/path-utils.js";
|
|
|
4
4
|
import { createBareExternalPlugin, createHttpExternalPlugin, createRelativeFsPlugin, } from "../handlers/dev/files/esbuild-plugins.js";
|
|
5
5
|
export function bundleBrowserModule(absPath, options) {
|
|
6
6
|
return withSpan("server.browser-module.bundle", async () => {
|
|
7
|
-
const { build } = await import("
|
|
7
|
+
const { build } = await import("../../extensions/bundler.js");
|
|
8
8
|
const src = await options.adapter.fs.readFile(absPath);
|
|
9
9
|
const importMapJson = await buildImportMapJson({
|
|
10
10
|
projectDir: options.projectDir,
|
package/esm/src/testing/bdd.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bdd.d.ts","sourceRoot":"","sources":["../../../src/src/testing/bdd.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bdd.d.ts","sourceRoot":"","sources":["../../../src/src/testing/bdd.ts"],"names":[],"mappings":"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"}
|
package/esm/src/testing/bdd.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import "../../_dnt.polyfills.js";
|
|
11
11
|
import * as dntShim from "../../_dnt.shims.js";
|
|
12
|
+
import "./init.js";
|
|
12
13
|
import { isBun, isDeno } from "../platform/compat/runtime.js";
|
|
13
14
|
import { getEnvOverlayStorage } from "../platform/compat/process.js";
|
|
14
15
|
function getActiveEnvOverlay() {
|
package/esm/src/testing/init.js
CHANGED
|
@@ -10,9 +10,16 @@
|
|
|
10
10
|
* @module
|
|
11
11
|
*/
|
|
12
12
|
import * as dntShim from "../../_dnt.shims.js";
|
|
13
|
+
import { EsbuildBundler, EsModuleLexer } from "../../extensions/ext-esbuild/src/index.js";
|
|
14
|
+
import { register as registerContract } from "../extensions/contracts.js";
|
|
13
15
|
const g = dntShim.dntGlobalThis;
|
|
14
16
|
g.__vfDisableLruInterval = true;
|
|
15
17
|
g.__vfTestEnv = true;
|
|
16
18
|
g.__vfTestEnvMask = {
|
|
17
19
|
prefixes: ["VERYFRONT_", "OTEL_", "OAUTH_", "GITHUB_", "OPENAI_", "ANTHROPIC_", "GOOGLE_"],
|
|
18
20
|
};
|
|
21
|
+
// Tests don't run the extension orchestrator; prime the Bundler + ModuleLexer
|
|
22
|
+
// contracts here so transforms that depend on them (lexer.ts, parse-cache.ts,
|
|
23
|
+
// the platform/compat/esbuild shim, and bundler call-sites) work in tests.
|
|
24
|
+
registerContract("Bundler", new EsbuildBundler());
|
|
25
|
+
registerContract("ModuleLexer", new EsModuleLexer());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-bundler.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-bundler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"http-bundler.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-bundler.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAyB,YAAY,EAAE,MAAM,uBAAuB,CAAC;AA0B5E,qCAAqC;AACrC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,yDAAyD;AACzD,OAAO,EAAE,YAAY,EAAE,CAAC;AAExB;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CA6GzC;AA4DD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyD1B"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
+
import type { ImportSpecifier } from "../../extensions/interfaces/module-lexer.js";
|
|
2
|
+
export type { ImportSpecifier };
|
|
1
3
|
export declare function initLexer(): Promise<void>;
|
|
2
|
-
export type ImportSpecifier = {
|
|
3
|
-
n: string | undefined;
|
|
4
|
-
s: number;
|
|
5
|
-
e: number;
|
|
6
|
-
ss: number;
|
|
7
|
-
se: number;
|
|
8
|
-
d: number;
|
|
9
|
-
a: number;
|
|
10
|
-
};
|
|
11
4
|
export declare function parseImports(code: string): Promise<readonly ImportSpecifier[]>;
|
|
12
5
|
/**
|
|
13
6
|
* Replace import specifiers (the path string) in the code.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/lexer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/lexer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,6CAA6C,CAAC;AAEhG,YAAY,EAAE,eAAe,EAAE,CAAC;AA0ChC,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAS/C;AAyBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC,CAqBpF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7E,OAAO,CAAC,MAAM,CAAC,CAoCjB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACnE,OAAO,CAAC,MAAM,CAAC,CAsBjB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logger as baseLogger } from "../../utils/index.js";
|
|
2
|
-
import {
|
|
2
|
+
import { resolve as resolveContract } from "../../extensions/contracts.js";
|
|
3
3
|
const logger = baseLogger.component("es-module-lexer");
|
|
4
4
|
let initPromise = null;
|
|
5
5
|
// Matches HTTP/HTTPS URLs in string literals (single, double, or backtick quotes)
|
|
@@ -22,17 +22,16 @@ function unmaskHttpUrls(code, urlMap) {
|
|
|
22
22
|
}
|
|
23
23
|
return result;
|
|
24
24
|
}
|
|
25
|
+
function getLexer() {
|
|
26
|
+
return resolveContract("ModuleLexer");
|
|
27
|
+
}
|
|
25
28
|
export async function initLexer() {
|
|
26
29
|
if (initPromise) {
|
|
27
30
|
await initPromise;
|
|
28
31
|
return;
|
|
29
32
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const anyInit = init;
|
|
33
|
-
initPromise = typeof anyInit === "function"
|
|
34
|
-
? anyInit()
|
|
35
|
-
: anyInit;
|
|
33
|
+
const lexer = getLexer();
|
|
34
|
+
initPromise = lexer.init ? lexer.init() : Promise.resolve();
|
|
36
35
|
await initPromise;
|
|
37
36
|
}
|
|
38
37
|
function logParseError(error, code) {
|
|
@@ -60,7 +59,7 @@ export async function parseImports(code) {
|
|
|
60
59
|
const { masked, urlMap } = maskHttpUrls(code);
|
|
61
60
|
let imports;
|
|
62
61
|
try {
|
|
63
|
-
|
|
62
|
+
imports = getLexer().parse(masked);
|
|
64
63
|
}
|
|
65
64
|
catch (error) {
|
|
66
65
|
logParseError(error, masked);
|
|
@@ -82,7 +81,7 @@ export async function parseImports(code) {
|
|
|
82
81
|
export async function replaceSpecifiers(code, replacer) {
|
|
83
82
|
await initLexer();
|
|
84
83
|
const { masked, urlMap } = maskHttpUrls(code);
|
|
85
|
-
const
|
|
84
|
+
const imports = getLexer().parse(masked);
|
|
86
85
|
let result = masked;
|
|
87
86
|
for (let i = imports.length - 1; i >= 0; i--) {
|
|
88
87
|
const imp = imports[i];
|
|
@@ -116,7 +115,7 @@ export async function replaceSpecifiers(code, replacer) {
|
|
|
116
115
|
export async function rewriteImports(code, rewriter) {
|
|
117
116
|
await initLexer();
|
|
118
117
|
const { masked, urlMap } = maskHttpUrls(code);
|
|
119
|
-
const
|
|
118
|
+
const imports = getLexer().parse(masked);
|
|
120
119
|
let result = masked;
|
|
121
120
|
for (let i = imports.length - 1; i >= 0; i--) {
|
|
122
121
|
const imp = imports[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/transform-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"transform-utils.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/transform-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE;AAaD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/import-rewriter/parse-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"parse-cache.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/import-rewriter/parse-cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAStD;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAO/C;AAsCD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,6CAA6C;IAC7C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAmB1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACvE,MAAM,CAiDR;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7E,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
|
|
@@ -4,17 +4,18 @@
|
|
|
4
4
|
* Single parse per file - reused across all strategies.
|
|
5
5
|
* This eliminates redundant parsing that happened with the fragmented system.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { resolve as resolveContract } from "../../extensions/contracts.js";
|
|
8
8
|
let initPromise = null;
|
|
9
|
+
function getLexer() {
|
|
10
|
+
return resolveContract("ModuleLexer");
|
|
11
|
+
}
|
|
9
12
|
/**
|
|
10
|
-
* Initialize
|
|
13
|
+
* Initialize the ModuleLexer (must be called before parsing).
|
|
11
14
|
*/
|
|
12
15
|
export async function initLexer() {
|
|
13
16
|
if (!initPromise) {
|
|
14
|
-
const
|
|
15
|
-
initPromise =
|
|
16
|
-
? anyInit()
|
|
17
|
-
: anyInit;
|
|
17
|
+
const lexer = getLexer();
|
|
18
|
+
initPromise = lexer.init ? lexer.init() : Promise.resolve();
|
|
18
19
|
}
|
|
19
20
|
await initPromise;
|
|
20
21
|
}
|
|
@@ -47,7 +48,7 @@ function unmaskUrl(specifier, urlMap) {
|
|
|
47
48
|
export async function parseAllImports(code) {
|
|
48
49
|
await initLexer();
|
|
49
50
|
const { masked, urlMap } = maskHttpUrls(code);
|
|
50
|
-
const
|
|
51
|
+
const rawImports = getLexer().parse(masked);
|
|
51
52
|
const imports = rawImports
|
|
52
53
|
.filter((imp) => imp.n !== undefined)
|
|
53
54
|
.map((imp) => ({
|
|
@@ -70,7 +70,7 @@ export function transformImports(code, importMap) {
|
|
|
70
70
|
* Optimized to process all imports in parallel batches for better performance.
|
|
71
71
|
*/
|
|
72
72
|
export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
73
|
-
const { transform } = await import("
|
|
73
|
+
const { transform } = await import("../../../extensions/bundler.js");
|
|
74
74
|
const importsToProcess = [];
|
|
75
75
|
let jsxMatch;
|
|
76
76
|
while ((jsxMatch = JSX_IMPORT_PATTERN.exec(code)) !== null) {
|
|
@@ -77,7 +77,7 @@ export async function transformFrameworkCode(content, sourcePath, ctx, throwOnMi
|
|
|
77
77
|
depth,
|
|
78
78
|
});
|
|
79
79
|
// Return minimally transformed code - it will fail at runtime but won't hang
|
|
80
|
-
const { transform } = await import("
|
|
80
|
+
const { transform } = await import("../../../../extensions/bundler.js");
|
|
81
81
|
const ext = sourcePath.match(/\.(tsx?|jsx?)$/)?.[1] ?? "tsx";
|
|
82
82
|
let loader = "js";
|
|
83
83
|
if (ext === "tsx")
|
|
@@ -121,7 +121,7 @@ export async function transformFrameworkCode(content, sourcePath, ctx, throwOnMi
|
|
|
121
121
|
// Mark as being transformed
|
|
122
122
|
transformingFiles.add(sourcePath);
|
|
123
123
|
try {
|
|
124
|
-
const { transform } = await import("
|
|
124
|
+
const { transform } = await import("../../../../extensions/bundler.js");
|
|
125
125
|
const ext = sourcePath.match(/\.(tsx?|jsx?)$/)?.[1] ?? "tsx";
|
|
126
126
|
let loader = "js";
|
|
127
127
|
if (ext === "tsx")
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.369";
|
|
2
2
|
//# sourceMappingURL=version-constant.d.ts.map
|
package/package.json
CHANGED
package/src/cli/main.ts
CHANGED
|
@@ -17,6 +17,20 @@ import * as dntShim from "../_dnt.shims.js";
|
|
|
17
17
|
|
|
18
18
|
await import("../src/platform/compat/esbuild-init.js");
|
|
19
19
|
|
|
20
|
+
// Register the default Bundler + ModuleLexer contracts shipped with the
|
|
21
|
+
// binary so bootstrap paths can resolve them without the user having to
|
|
22
|
+
// declare @veryfront/ext-esbuild as a project extension. User-installed
|
|
23
|
+
// extensions (orchestrated later) can still override these.
|
|
24
|
+
{
|
|
25
|
+
const { register } = await import("../src/extensions/contracts.js");
|
|
26
|
+
const { tryResolve } = await import("../src/extensions/index.js");
|
|
27
|
+
if (!tryResolve("Bundler") || !tryResolve("ModuleLexer")) {
|
|
28
|
+
const { EsbuildBundler, EsModuleLexer } = await import("../extensions/ext-esbuild/src/index.js");
|
|
29
|
+
if (!tryResolve("Bundler")) register("Bundler", new EsbuildBundler());
|
|
30
|
+
if (!tryResolve("ModuleLexer")) register("ModuleLexer", new EsModuleLexer());
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
20
34
|
// All imports below must be dynamic to ensure esbuild init completes first
|
|
21
35
|
const { getArgs } = await import("../src/platform/index.js");
|
|
22
36
|
const { hasEnvLoaded, loadEnv, markEnvLoaded, supportsEnvFiles } = await import(
|
package/src/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "veryfront",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.369",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"nodeModulesDir": "auto",
|
|
6
6
|
"workspace": [
|
|
@@ -10,6 +10,7 @@ export default {
|
|
|
10
10
|
"./extensions/ext-node-compat",
|
|
11
11
|
"./extensions/ext-openai",
|
|
12
12
|
"./extensions/ext-opentelemetry",
|
|
13
|
+
"./extensions/ext-esbuild",
|
|
13
14
|
"./extensions/ext-redis",
|
|
14
15
|
"./extensions/ext-tailwind"
|
|
15
16
|
],
|
|
@@ -143,6 +144,9 @@ export default {
|
|
|
143
144
|
"veryfront/testing": "./src/testing/index.ts",
|
|
144
145
|
"veryfront/testing/assert": "./src/testing/assert.ts",
|
|
145
146
|
"veryfront/testing/bdd": "./src/testing/bdd.ts",
|
|
147
|
+
"veryfront/extensions/bundler": "./src/extensions/bundler.ts",
|
|
148
|
+
"veryfront/extensions/contracts": "./src/extensions/contracts.ts",
|
|
149
|
+
"veryfront/extensions/interfaces": "./src/extensions/interfaces/index.ts",
|
|
146
150
|
"#veryfront": "./src/index.ts",
|
|
147
151
|
"#veryfront/agent": "./src/agent/index.ts",
|
|
148
152
|
"#veryfront/agent/react": "./src/agent/react/index.ts",
|
|
@@ -275,9 +279,6 @@ export default {
|
|
|
275
279
|
"rehype-raw": "npm:rehype-raw@7.0.0",
|
|
276
280
|
"rehype-sanitize": "npm:rehype-sanitize@6.0.0",
|
|
277
281
|
"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
282
|
"gray-matter": "npm:gray-matter@4.0.3",
|
|
282
283
|
"zod": "npm:zod@4.3.6",
|
|
283
284
|
"mdast": "npm:@types/mdast@4.0.3",
|
|
@@ -440,7 +441,6 @@ export default {
|
|
|
440
441
|
"npm:onnxruntime-node@1.21.0"
|
|
441
442
|
],
|
|
442
443
|
"deny": [
|
|
443
|
-
"npm:esbuild@0.27.4",
|
|
444
444
|
"npm:protobufjs@7.5.4"
|
|
445
445
|
]
|
|
446
446
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
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
|
+
|
|
16
|
+
|
|
17
|
+
import { isDenoCompiled } from "./runtime.js";
|
|
18
|
+
|
|
19
|
+
const ESBUILD_VERSION = "0.27.4";
|
|
20
|
+
|
|
21
|
+
function getTempDir(): string {
|
|
22
|
+
try {
|
|
23
|
+
return (
|
|
24
|
+
dntShim.Deno.env.get("TMPDIR") ?? dntShim.Deno.env.get("TEMP") ?? dntShim.Deno.env.get("TMP") ?? "/tmp"
|
|
25
|
+
);
|
|
26
|
+
} catch {
|
|
27
|
+
return "/tmp";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function getEsbuildBinaryName(): string {
|
|
32
|
+
const archMap: Record<string, string> = { x86_64: "x64", aarch64: "arm64" };
|
|
33
|
+
const arch = archMap[dntShim.Deno.build.arch] ?? dntShim.Deno.build.arch;
|
|
34
|
+
return `@esbuild/${dntShim.Deno.build.os}-${arch}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function getVFSBasePath(filePath: string, tempDir: string): string {
|
|
38
|
+
const denoCompileMatch = filePath.match(/^(.*\/deno-compile-[^/]+)\//);
|
|
39
|
+
if (denoCompileMatch?.[1]) return denoCompileMatch[1];
|
|
40
|
+
const parts = filePath.split("/");
|
|
41
|
+
const srcIndex = parts.lastIndexOf("src");
|
|
42
|
+
if (srcIndex > 0) return parts.slice(0, srcIndex).join("/");
|
|
43
|
+
return `${tempDir}/deno-compile-veryfront`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function isFile(path: string): Promise<boolean> {
|
|
47
|
+
try {
|
|
48
|
+
const stat = await dntShim.Deno.stat(path);
|
|
49
|
+
return stat.isFile;
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function findEsbuildInVFS(): Promise<string | null> {
|
|
56
|
+
const binaryName = getEsbuildBinaryName();
|
|
57
|
+
const vfsBase = getVFSBasePath(new URL(import.meta.url).pathname, getTempDir());
|
|
58
|
+
|
|
59
|
+
const possiblePaths = [
|
|
60
|
+
`${vfsBase}/node_modules/${binaryName}/bin/esbuild`,
|
|
61
|
+
`${vfsBase}/node_modules/.deno/${binaryName}@${ESBUILD_VERSION}/node_modules/${binaryName}/bin/esbuild`,
|
|
62
|
+
`${vfsBase}/node_modules/.deno/esbuild@${ESBUILD_VERSION}/node_modules/${binaryName}/bin/esbuild`,
|
|
63
|
+
`${vfsBase}/node_modules/esbuild/bin/esbuild`,
|
|
64
|
+
`${vfsBase}/node_modules/.package/esbuild@${ESBUILD_VERSION}/bin/esbuild`,
|
|
65
|
+
`${vfsBase}/node_modules/.package/${binaryName}@${ESBUILD_VERSION}/bin/esbuild`,
|
|
66
|
+
];
|
|
67
|
+
|
|
68
|
+
for (const p of possiblePaths) {
|
|
69
|
+
if (await isFile(p)) return p;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const nodeModulesPath = `${vfsBase}/node_modules`;
|
|
74
|
+
for await (const entry of dntShim.Deno.readDir(nodeModulesPath)) {
|
|
75
|
+
if (entry.name !== binaryName && !entry.name.startsWith("@esbuild")) continue;
|
|
76
|
+
const binPath = `${nodeModulesPath}/${entry.name}/bin/esbuild`;
|
|
77
|
+
if (await isFile(binPath)) return binPath;
|
|
78
|
+
}
|
|
79
|
+
} catch {
|
|
80
|
+
/* node_modules not readable in VFS */
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function extractEsbuildBinary(): Promise<string> {
|
|
87
|
+
const cacheDir = `${getTempDir()}/veryfront-esbuild`;
|
|
88
|
+
const targetPath = `${cacheDir}/esbuild-${ESBUILD_VERSION}`;
|
|
89
|
+
|
|
90
|
+
try {
|
|
91
|
+
const stat = await dntShim.Deno.stat(targetPath);
|
|
92
|
+
if (stat.isFile && stat.mode && (stat.mode & 0o111)) return targetPath;
|
|
93
|
+
} catch {
|
|
94
|
+
/* cache miss */
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const vfsPath = await findEsbuildInVFS();
|
|
98
|
+
if (!vfsPath) {
|
|
99
|
+
throw new Error(
|
|
100
|
+
`[ext-esbuild] Could not find esbuild binary in deno compile VFS. ` +
|
|
101
|
+
`Platform: ${getEsbuildBinaryName()}. ` +
|
|
102
|
+
`Ensure esbuild is in dependencies and deno compile includes node_modules.`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
await dntShim.Deno.mkdir(cacheDir, { recursive: true });
|
|
107
|
+
const binary = await dntShim.Deno.readFile(vfsPath);
|
|
108
|
+
await dntShim.Deno.writeFile(targetPath, binary, { mode: 0o755 });
|
|
109
|
+
|
|
110
|
+
return targetPath;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
let setupComplete = false;
|
|
114
|
+
let setupPromise: Promise<void> | null = null;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Idempotent one-shot setup — copies the esbuild binary out of the VFS (if
|
|
118
|
+
* running in `deno compile`) and sets ESBUILD_BINARY_PATH. No-op on normal
|
|
119
|
+
* Deno or when the env var is already set.
|
|
120
|
+
*/
|
|
121
|
+
export async function ensureEsbuildBinary(): Promise<void> {
|
|
122
|
+
if (setupComplete) return;
|
|
123
|
+
if (setupPromise) {
|
|
124
|
+
await setupPromise;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
setupPromise = (async () => {
|
|
129
|
+
try {
|
|
130
|
+
if (dntShim.Deno.env.get("ESBUILD_BINARY_PATH") || !isDenoCompiled) {
|
|
131
|
+
setupComplete = true;
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
const binaryPath = await extractEsbuildBinary();
|
|
137
|
+
dntShim.Deno.env.set("ESBUILD_BINARY_PATH", binaryPath);
|
|
138
|
+
// esbuild reads process.env (not Deno.env) on some code paths.
|
|
139
|
+
const proc = (dntShim.dntGlobalThis as { process?: { env: Record<string, string> } }).process;
|
|
140
|
+
if (proc?.env) proc.env.ESBUILD_BINARY_PATH = binaryPath;
|
|
141
|
+
} catch (err) {
|
|
142
|
+
console.error("[ext-esbuild] Binary extraction failed:", err);
|
|
143
|
+
}
|
|
144
|
+
} finally {
|
|
145
|
+
setupComplete = true;
|
|
146
|
+
}
|
|
147
|
+
})();
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
await setupPromise;
|
|
151
|
+
} finally {
|
|
152
|
+
setupPromise = null;
|
|
153
|
+
}
|
|
154
|
+
}
|