veryfront 0.1.807 → 0.1.810

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 (29) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/build/production-build/build/build-executor.d.ts +2 -0
  3. package/esm/src/build/production-build/build/build-executor.d.ts.map +1 -1
  4. package/esm/src/build/production-build/build/build-orchestrator.d.ts.map +1 -1
  5. package/esm/src/build/production-build/build/build-orchestrator.js +9 -0
  6. package/esm/src/build/production-build/build/output-generator.d.ts +2 -0
  7. package/esm/src/build/production-build/build/output-generator.d.ts.map +1 -1
  8. package/esm/src/build/production-build/build/output-generator.js +9 -7
  9. package/esm/src/build/production-build/local-release-assets.d.ts +2 -1
  10. package/esm/src/build/production-build/local-release-assets.d.ts.map +1 -1
  11. package/esm/src/build/production-build/local-release-assets.js +14 -4
  12. package/esm/src/build/production-build/static-generation.d.ts +2 -0
  13. package/esm/src/build/production-build/static-generation.d.ts.map +1 -1
  14. package/esm/src/build/production-build/static-generation.js +29 -5
  15. package/esm/src/html/utils.d.ts.map +1 -1
  16. package/esm/src/html/utils.js +8 -8
  17. package/esm/src/release-assets/build-executor.d.ts +14 -0
  18. package/esm/src/release-assets/build-executor.d.ts.map +1 -1
  19. package/esm/src/release-assets/build-executor.js +158 -20
  20. package/esm/src/server/build-app-route-renderer.d.ts +2 -0
  21. package/esm/src/server/build-app-route-renderer.d.ts.map +1 -1
  22. package/esm/src/server/build-app-route-renderer.js +3 -2
  23. package/esm/src/server/handlers/request/module/page-module-handler.d.ts.map +1 -1
  24. package/esm/src/server/handlers/request/module/page-module-handler.js +11 -0
  25. package/esm/src/server/handlers/request/static.handler.d.ts.map +1 -1
  26. package/esm/src/server/handlers/request/static.handler.js +6 -0
  27. package/esm/src/utils/version-constant.d.ts +1 -1
  28. package/esm/src/utils/version-constant.js +1 -1
  29. package/package.json +1 -1
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.807",
3
+ "version": "0.1.810",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -3,6 +3,7 @@ import type { VeryfrontConfig } from "../../../config/index.js";
3
3
  import type { VeryfrontRenderer } from "../../../rendering/index.js";
4
4
  import type { AppRouteInfo, RouteInfo } from "../../../server/build-types.js";
5
5
  import type { ChunkManifest } from "../../bundler/index.js";
6
+ import type { ReleaseAssetManifest } from "../../../release-assets/manifest-schema.js";
6
7
  export interface BuildExecutorOptions {
7
8
  adapter: RuntimeAdapter;
8
9
  projectDir: string;
@@ -13,6 +14,7 @@ export interface BuildExecutorOptions {
13
14
  chunkManifest: ChunkManifest | null;
14
15
  baseUrl: string;
15
16
  dryRun: boolean;
17
+ releaseAssetManifest?: ReleaseAssetManifest | null;
16
18
  }
17
19
  export interface BuildResult {
18
20
  pages: number;
@@ -1 +1 @@
1
- {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAI5D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,SAAS,EAAE,EACxB,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAiBtB"}
1
+ {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAIvF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,SAAS,EAAE,EACxB,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAiBtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"build-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAS5B,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAuH1E;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"build-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/build-orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,EAEnB,MAAM,oBAAoB,CAAC;AAU5B,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAqI1E;AAED,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -9,6 +9,7 @@ import { runCodeSplitting } from "./code-splitter-orchestrator.js";
9
9
  import { generateAllOutputs } from "./output-generator.js";
10
10
  import { collectAllRoutes } from "./route-collector.js";
11
11
  import { withSpan } from "../../../observability/tracing/otlp-setup.js";
12
+ import { generateLocalReleaseAssetManifest } from "../local-release-assets.js";
12
13
  export function buildProduction(options) {
13
14
  return withSpan("build.production", async () => {
14
15
  const startTime = Date.now();
@@ -35,6 +36,12 @@ export function buildProduction(options) {
35
36
  const enableCompression = normalizedOptions.enableCompression ?? true;
36
37
  const ssg = normalizedOptions.ssg ?? false;
37
38
  await withSpan("build.setupDirectories", () => setupBuildDirectories(context.adapter, outputDir, dryRun), {});
39
+ const releaseAssetManifest = await withSpan("build.localReleaseAssets", () => generateLocalReleaseAssetManifest({
40
+ adapter: context.adapter,
41
+ projectDir: normalizedOptions.projectDir,
42
+ outputDir,
43
+ dryRun,
44
+ }), {});
38
45
  const routes = await withSpan("build.collectRoutes", () => collectAllRoutes(context.adapter, normalizedOptions.projectDir, ssg, normalizedOptions.include, normalizedOptions.exclude), {});
39
46
  const splitResult = await withSpan("build.codeSplitting", () => runCodeSplitting(normalizedOptions.projectDir, outputDir, routes.pages, enableSplitting, dryRun), {});
40
47
  context.stats.chunks = splitResult.chunks;
@@ -48,6 +55,7 @@ export function buildProduction(options) {
48
55
  chunkManifest: splitResult.manifest,
49
56
  baseUrl: "",
50
57
  dryRun,
58
+ releaseAssetManifest,
51
59
  }), {});
52
60
  context.stats.pages = buildResult.pages;
53
61
  context.stats.totalSize = buildResult.totalSize;
@@ -63,6 +71,7 @@ export function buildProduction(options) {
63
71
  enableCompression,
64
72
  chunkManifest: splitResult.manifest,
65
73
  dryRun,
74
+ releaseAssetManifest,
66
75
  }), {});
67
76
  context.stats.duration = Date.now() - startTime;
68
77
  logBuildCompletion(context.stats);
@@ -11,6 +11,7 @@
11
11
  import type { RuntimeAdapter } from "../../../platform/adapters/base.js";
12
12
  import type { ChunkManifest } from "../../bundler/index.js";
13
13
  import type { AppRouteInfo, BuildStats, RouteInfo } from "../../../server/build-types.js";
14
+ import type { ReleaseAssetManifest } from "../../../release-assets/manifest-schema.js";
14
15
  export interface OutputGeneratorOptions {
15
16
  adapter: RuntimeAdapter;
16
17
  projectDir: string;
@@ -23,6 +24,7 @@ export interface OutputGeneratorOptions {
23
24
  enableCompression: boolean;
24
25
  chunkManifest: ChunkManifest | null;
25
26
  dryRun: boolean;
27
+ releaseAssetManifest?: ReleaseAssetManifest | null;
26
28
  }
27
29
  /**
28
30
  * Generate client runtime scripts
@@ -1 +1 @@
1
- {"version":3,"file":"output-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/output-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAa1F,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBvF"}
1
+ {"version":3,"file":"output-generator.d.ts","sourceRoot":"","sources":["../../../../../src/src/build/production-build/build/output-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAY1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAEvF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvF"}
@@ -66,14 +66,16 @@ export function copyAssets(adapter, projectDir, outputDir, dryRun) {
66
66
  * Generate all output files
67
67
  */
68
68
  export async function generateAllOutputs(options) {
69
- const { adapter, projectDir, outputDir, dryRun, stats } = options;
69
+ const { adapter, projectDir, outputDir, dryRun, stats, releaseAssetManifest } = options;
70
70
  await generateClientScripts(adapter, outputDir, dryRun);
71
- await generateLocalReleaseAssetManifest({
72
- adapter,
73
- projectDir,
74
- outputDir,
75
- dryRun,
76
- });
71
+ if (releaseAssetManifest === undefined) {
72
+ await generateLocalReleaseAssetManifest({
73
+ adapter,
74
+ projectDir,
75
+ outputDir,
76
+ dryRun,
77
+ });
78
+ }
77
79
  const assetStats = await copyAssets(adapter, projectDir, outputDir, dryRun);
78
80
  stats.assets = assetStats.assets;
79
81
  stats.totalSize += assetStats.totalSize;
@@ -1,5 +1,5 @@
1
1
  import type { RuntimeAdapter } from "../../platform/adapters/base.js";
2
- import { type ReleaseAssetHttpDependencyVendor } from "../../release-assets/build-executor.js";
2
+ import { type ReleaseAssetHttpDependencyVendor, type ReleaseAssetTransform } from "../../release-assets/build-executor.js";
3
3
  import type { ReleaseAssetManifest } from "../../release-assets/manifest-schema.js";
4
4
  export declare const LOCAL_RELEASE_ASSET_MANIFEST_PATH = "_veryfront/release-asset-manifest.json";
5
5
  export interface LocalReleaseAssetOptions {
@@ -10,6 +10,7 @@ export interface LocalReleaseAssetOptions {
10
10
  projectId?: string;
11
11
  releaseId?: string;
12
12
  vendorHttpImports?: ReleaseAssetHttpDependencyVendor;
13
+ frameworkTransform?: ReleaseAssetTransform;
13
14
  }
14
15
  export declare function generateLocalReleaseAssetManifest(options: LocalReleaseAssetOptions): Promise<ReleaseAssetManifest | null>;
15
16
  //# sourceMappingURL=local-release-assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-release-assets.d.ts","sourceRoot":"","sources":["../../../../src/src/build/production-build/local-release-assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAOtE,OAAO,EAIL,KAAK,gCAAgC,EACtC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAKpF,eAAO,MAAM,iCAAiC,2CAA2C,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,gCAAgC,CAAC;CACtD;AAoBD,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CA8EtC"}
1
+ {"version":3,"file":"local-release-assets.d.ts","sourceRoot":"","sources":["../../../../src/src/build/production-build/local-release-assets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAOtE,OAAO,EAML,KAAK,gCAAgC,EACrC,KAAK,qBAAqB,EAC3B,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAKpF,eAAO,MAAM,iCAAiC,2CAA2C,CAAC;AAE1F,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,gCAAgC,CAAC;IACrD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAoBD,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAwFtC"}
@@ -1,7 +1,7 @@
1
1
  import { dirname, join } from "../../platform/compat/path/index.js";
2
2
  import { getHostEnv } from "../../platform/compat/process.js";
3
3
  import { RELEASE_ASSET_BASE_PATH, RELEASE_ASSET_DEPENDENCY_IMPORT_MAP_ENV_FLAG, RELEASE_ASSET_MANIFEST_SCHEMA_VERSION, } from "../../release-assets/constants.js";
4
- import { buildCachedHttpDependencyAssets, buildReactImportMapDependencyAssets, } from "../../release-assets/build-executor.js";
4
+ import { buildCachedHttpDependencyAssets, buildFrameworkDependencyAssets, buildReactImportMapDependencyAssets, buildReleaseAssetDependencyUrlMap, } from "../../release-assets/build-executor.js";
5
5
  import { sha256HexBytes } from "../../release-assets/hash.js";
6
6
  import { resolveProjectReactVersion } from "../../transforms/esm/package-registry.js";
7
7
  import { VERSION } from "../../utils/version.js";
@@ -32,12 +32,22 @@ export async function generateLocalReleaseAssetManifest(options) {
32
32
  const cached = await buildCachedHttpDependencyAssets({
33
33
  cacheDir: join(options.projectDir, ".cache", "veryfront-http-bundle"),
34
34
  });
35
- const dependencies = { ...cached.dependencies, ...built.dependencies };
35
+ let dependencies = { ...cached.dependencies, ...built.dependencies };
36
+ const dependencyUrls = buildReleaseAssetDependencyUrlMap(dependencies);
37
+ const framework = await buildFrameworkDependencyAssets({
38
+ tempDir,
39
+ adapter: options.adapter,
40
+ reactVersion,
41
+ projectId: options.projectId ?? "local",
42
+ transform: options.frameworkTransform,
43
+ dependencyUrls,
44
+ });
45
+ dependencies = { ...dependencies, ...framework.dependencies };
36
46
  const assetsByHash = new Map();
37
- for (const asset of [...cached.assets, ...built.assets]) {
47
+ for (const asset of [...cached.assets, ...built.assets, ...framework.assets]) {
38
48
  assetsByHash.set(asset.contentHash, asset);
39
49
  }
40
- const gaps = [...cached.gaps, ...built.gaps];
50
+ const gaps = [...cached.gaps, ...built.gaps, ...framework.gaps];
41
51
  const sourceContentHash = await sha256HexBytes(new TextEncoder().encode([
42
52
  options.projectDir,
43
53
  reactVersion,
@@ -7,6 +7,7 @@ import type { VeryfrontRenderer } from "../../rendering/orchestrator/ssr.js";
7
7
  import type { VeryfrontConfig } from "../../config/index.js";
8
8
  import type { ChunkManifest } from "../bundler/index.js";
9
9
  import type { AppRouteInfo, RouteInfo } from "../../server/build-types.js";
10
+ import type { ReleaseAssetManifest } from "../../release-assets/manifest-schema.js";
10
11
  export interface PageRenderResult {
11
12
  html: string;
12
13
  frontmatter?: Record<string, unknown>;
@@ -42,6 +43,7 @@ export interface SSGOptions {
42
43
  traceStep?: <T>(name: string, fn: () => Promise<T>) => Promise<T>;
43
44
  /** React version for import map generation */
44
45
  reactVersion?: string;
46
+ releaseAssetManifest?: ReleaseAssetManifest | null;
45
47
  }
46
48
  export declare function buildPagesRoutes(routes: RouteInfo[], options: SSGOptions): Promise<SSGStats>;
47
49
  export declare function buildAppRoutes(appRoutes: AppRouteInfo[], options: SSGOptions): Promise<SSGStats>;
@@ -1 +1 @@
1
- {"version":3,"file":"static-generation.d.ts","sourceRoot":"","sources":["../../../../src/src/build/production-build/static-generation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAa3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,GAAG,WAAW,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,QAAQ,CAAC,CAqGnB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,QAAQ,CAAC,CAkDnB"}
1
+ {"version":3,"file":"static-generation.d.ts","sourceRoot":"","sources":["../../../../src/src/build/production-build/static-generation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAG3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAWpF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,KAAK,GAAG,WAAW,CAAC;KAC3B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,mGAAmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAClE,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAwID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,QAAQ,CAAC,CA4HnB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,YAAY,EAAE,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,QAAQ,CAAC,CAmDnB"}
@@ -6,7 +6,7 @@ import { serverLogger as logger } from "../../utils/index.js";
6
6
  import { dirname, join } from "../../platform/compat/path/index.js";
7
7
  import { renderAppRouteToHTML } from "../../server/build-app-route-renderer.js";
8
8
  import { loadClientStyles } from "./asset-generation.js";
9
- import { generateImportMap } from "./client-runtime.js";
9
+ import { buildImportMap } from "../../html/utils.js";
10
10
  import { cacheCSSAsync, extractCandidatesFromFiles, generateTailwindCSS, hashCSS, } from "../../html/styles-builder/index.js";
11
11
  import { DEFAULT_STYLESHEET } from "../../html/styles-builder/css-hash-cache.js";
12
12
  import { FRAMEWORK_CANDIDATES } from "../../server/handlers/dev/framework-candidates.generated.js";
@@ -27,6 +27,9 @@ function defaultTraceStep(_, fn) {
27
27
  function getByteLength(text) {
28
28
  return new TextEncoder().encode(text).length;
29
29
  }
30
+ function hasImportMapScript(html) {
31
+ return /<script\b[^>]*\btype=(["'])importmap\1/i.test(html);
32
+ }
30
33
  function extractClientNavigationHtml(html) {
31
34
  const rootOpen = html.match(/<div\b(?=[^>]*\bid=(["'])root\1)[^>]*>/i);
32
35
  if (!rootOpen || rootOpen.index === undefined)
@@ -125,22 +128,42 @@ export async function buildPagesRoutes(routes, options) {
125
128
  const clientStyles = loadClientStyles();
126
129
  for (const route of routes) {
127
130
  try {
128
- const result = await traceStep(`page:${route.slug}`, () => renderer.renderPage(route.slug, { contentSourceId }));
131
+ const result = await traceStep(`page:${route.slug}`, () => renderer.renderPage(route.slug, {
132
+ contentSourceId,
133
+ releaseAssetManifest: options.releaseAssetManifest,
134
+ }));
129
135
  let enhancedHtml = result.html;
130
136
  if (enablePrefetch && chunkManifest) {
131
137
  const { generatePreloadLinks } = await import("../bundler/code-splitter/index.js");
132
138
  const preloadLinks = generatePreloadLinks(chunkManifest, route.path, "/_veryfront/chunks");
133
139
  enhancedHtml = enhancedHtml.replace("</head>", `${preloadLinks}\n</head>`);
134
140
  }
135
- const importMap = await generateImportMap();
136
- enhancedHtml = enhancedHtml.replace("</head>", `
137
- ${importMap}
141
+ if (!hasImportMapScript(enhancedHtml)) {
142
+ const importMap = await buildImportMap({
143
+ projectDir: options.projectDir,
144
+ config: options.config,
145
+ releaseAssetManifest: options.releaseAssetManifest,
146
+ });
147
+ enhancedHtml = enhancedHtml.replace("</head>", `
148
+ <!-- Import map for React dependencies -->
149
+ <script type="importmap">
150
+ ${importMap.json}
151
+ </script>
138
152
 
139
153
  <!-- Basic styles -->
140
154
  <style>
141
155
  ${clientStyles}
142
156
  </style>
143
157
  </head>`);
158
+ }
159
+ else {
160
+ enhancedHtml = enhancedHtml.replace("</head>", `
161
+ <!-- Basic styles -->
162
+ <style>
163
+ ${clientStyles}
164
+ </style>
165
+ </head>`);
166
+ }
144
167
  enhancedHtml = enhancedHtml.replace("</body>", generateClientRuntime(route, result, baseUrl));
145
168
  const outputPath = getOutputPath(outputDir, route.slug);
146
169
  await adapter.fs.mkdir(dirname(outputPath), { recursive: true });
@@ -195,6 +218,7 @@ export async function buildAppRoutes(appRoutes, options) {
195
218
  pageFile: route.pageFile,
196
219
  contentSourceId,
197
220
  reactVersion,
221
+ releaseAssetManifest: options.releaseAssetManifest,
198
222
  stylesheetHref,
199
223
  includePreviewStylesheet: false,
200
224
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAejF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAQR;AAaD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AA4DD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AA6JF,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAiFD,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,cAAc,CAAC,CA+DzB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAElF"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/src/html/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAK1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAejF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAQR;AAaD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AA4DD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGrD,CAAC;AA6JF,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACpD;AAgFD,wBAAsB,cAAc,CAClC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,cAAc,CAAC,CA+DzB;AAED,wBAAsB,kBAAkB,CACtC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACvD,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAElF"}
@@ -226,14 +226,14 @@ function applyManifestDependencies(imports, manifest) {
226
226
  dependencyAssets.set(canonicalDependencyUrl(specifier), assetUrl);
227
227
  }
228
228
  return Object.fromEntries(Object.entries(imports).map(([specifier, url]) => {
229
- if (!url.startsWith("http://") && !url.startsWith("https://")) {
230
- return [specifier, url];
231
- }
232
- return [
233
- specifier,
234
- dependencyAssets.get(specifier) ?? dependencyAssets.get(url) ??
235
- dependencyAssets.get(canonicalDependencyUrl(url)) ?? url,
236
- ];
229
+ const directAsset = dependencyAssets.get(specifier);
230
+ if (directAsset)
231
+ return [specifier, directAsset];
232
+ const urlAsset = dependencyAssets.get(url) ??
233
+ dependencyAssets.get(canonicalDependencyUrl(url));
234
+ if (urlAsset)
235
+ return [specifier, urlAsset];
236
+ return [specifier, url];
237
237
  }));
238
238
  }
239
239
  function isImportMapOnlyOptions(options) {
@@ -125,6 +125,8 @@ interface PreparedAsset {
125
125
  export interface PreparedReleaseAsset extends PreparedAsset {
126
126
  bytes: Uint8Array;
127
127
  }
128
+ export declare function releaseAssetDependencyUrlForSpecifier(dependencyUrls: Map<string, string>, specifier: string): string | null;
129
+ export declare function buildReleaseAssetDependencyUrlMap(dependencies: Record<string, PreparedAsset>): Map<string, string>;
128
130
  export declare function buildReactImportMapDependencyAssets(options: {
129
131
  tempDir: string;
130
132
  reactVersion?: string;
@@ -141,6 +143,18 @@ export declare function buildCachedHttpDependencyAssets(options: {
141
143
  assets: PreparedReleaseAsset[];
142
144
  gaps: string[];
143
145
  }>;
146
+ export declare function buildFrameworkDependencyAssets(options: {
147
+ tempDir: string;
148
+ adapter: any;
149
+ reactVersion?: string;
150
+ projectId?: string;
151
+ transform?: ReleaseAssetTransform;
152
+ dependencyUrls: Map<string, string>;
153
+ }): Promise<{
154
+ dependencies: Record<string, PreparedAsset>;
155
+ assets: PreparedReleaseAsset[];
156
+ gaps: string[];
157
+ }>;
144
158
  /**
145
159
  * Execute a release asset build. Pure orchestration over the injected client
146
160
  * and a runtime-provided temp dir + react version.
@@ -1 +1 @@
1
- {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/build-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-executor.d.ts","sourceRoot":"","sources":["../../../src/src/release-assets/build-executor.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ import { VERSION } from "../utils/version.js";
19
19
  import { createFileSystem } from "../platform/compat/fs.js";
20
20
  import { getHostEnv } from "../platform/compat/process.js";
21
21
  import { dirname, join, normalize } from "../platform/compat/path/index.js";
22
- import { resolveFrameworkSourcePath } from "../platform/compat/framework-source-resolver.js";
22
+ import { FRAMEWORK_EMBEDDED_SRC_DIR, FRAMEWORK_SRC_DIR, resolveFrameworkSourcePath, resolveRelativeFrameworkSourceImport, } from "../platform/compat/framework-source-resolver.js";
23
23
  import { transformToESM } from "../transforms/esm-transform.js";
24
24
  import { cacheHttpImportsToLocal, normalizeHttpUrl } from "../transforms/esm/http-cache.js";
25
25
  import { extractSourceUrl } from "../transforms/esm/source-url-embed.js";
@@ -54,6 +54,20 @@ function frameworkModuleUrlToSourceKey(moduleUrl) {
54
54
  .slice(FRAMEWORK_MODULE_URL_PREFIX.length)
55
55
  .replace(/\.(mjs|cjs|js|jsx|ts|tsx)$/, "");
56
56
  }
57
+ function frameworkSourceKeyToModuleUrl(sourceKey) {
58
+ return `${FRAMEWORK_MODULE_URL_PREFIX}${sourceKey}.js`;
59
+ }
60
+ function frameworkSourcePathToSourceKey(sourcePath, lookupDirs) {
61
+ for (const lookupDir of lookupDirs) {
62
+ if (!sourcePath.startsWith(`${lookupDir}/`))
63
+ continue;
64
+ const relativePath = sourcePath.slice(lookupDir.length + 1)
65
+ .replace(/\.src$/, "")
66
+ .replace(/\.(tsx?|jsx?|mjs|mdx?|js)$/, "");
67
+ return normalizeLogicalPath(relativePath);
68
+ }
69
+ return null;
70
+ }
57
71
  /** Sanitize an error for state reporting (no internal paths / stack traces). */
58
72
  function sanitizeError(error) {
59
73
  const message = error instanceof Error ? error.message : String(error);
@@ -205,11 +219,11 @@ async function collectProjectModuleImports(code, logicalPath, knownPaths) {
205
219
  }
206
220
  async function rewriteProjectModuleImports(code, logicalPath, moduleAssets, knownPaths, dependencyUrls) {
207
221
  function rewriteSpecifier(specifier) {
208
- const dependencyUrl = dependencyUrls.get(specifier.replace(/[?#].*$/, ""));
222
+ const dependencyUrl = dependencyUrlForSpecifier(dependencyUrls, specifier);
209
223
  if (dependencyUrl)
210
224
  return dependencyUrl;
211
225
  if (specifier.startsWith("/_vf_modules/")) {
212
- const dependencyUrl = dependencyUrls.get(specifier.replace(/[?#].*$/, ""));
226
+ const dependencyUrl = dependencyUrlForSpecifier(dependencyUrls, specifier);
213
227
  if (dependencyUrl)
214
228
  return dependencyUrl;
215
229
  }
@@ -219,21 +233,51 @@ async function rewriteProjectModuleImports(code, logicalPath, moduleAssets, know
219
233
  }
220
234
  return await replaceSpecifiers(code, (specifier) => rewriteSpecifier(specifier));
221
235
  }
236
+ function dependencyUrlForSpecifier(dependencyUrls, specifier) {
237
+ const direct = dependencyUrls.get(specifier) ??
238
+ dependencyUrls.get(normalizeDependencySpecifier(specifier));
239
+ if (direct)
240
+ return direct;
241
+ if (specifier.startsWith("http://") || specifier.startsWith("https://")) {
242
+ const normalized = normalizeHttpUrl(specifier);
243
+ return dependencyUrls.get(normalized) ??
244
+ dependencyUrls.get(normalizeDependencySpecifier(normalized)) ?? null;
245
+ }
246
+ return null;
247
+ }
248
+ export function releaseAssetDependencyUrlForSpecifier(dependencyUrls, specifier) {
249
+ return dependencyUrlForSpecifier(dependencyUrls, specifier);
250
+ }
222
251
  function buildDependencyUrlMap(dependencies, dependencyModules) {
223
252
  const urls = new Map();
224
253
  for (const [manifestKey, entry] of Object.entries(dependencies)) {
225
254
  const dependency = dependencyModules?.get(manifestKey);
226
- if (!dependency)
227
- continue;
228
255
  const url = releaseAssetUrl(entry.contentHash, "js");
229
256
  urls.set(manifestKey, url);
257
+ urls.set(normalizeDependencySpecifier(manifestKey), url);
258
+ if (manifestKey.startsWith("http://") || manifestKey.startsWith("https://")) {
259
+ const normalized = normalizeHttpUrl(manifestKey);
260
+ urls.set(normalized, url);
261
+ urls.set(normalizeDependencySpecifier(normalized), url);
262
+ }
263
+ if (!dependency)
264
+ continue;
230
265
  urls.set(entry.logicalPath, url);
231
266
  for (const specifier of dependency.specifiers) {
267
+ urls.set(specifier, url);
232
268
  urls.set(normalizeDependencySpecifier(specifier), url);
269
+ if (specifier.startsWith("http://") || specifier.startsWith("https://")) {
270
+ const normalized = normalizeHttpUrl(specifier);
271
+ urls.set(normalized, url);
272
+ urls.set(normalizeDependencySpecifier(normalized), url);
273
+ }
233
274
  }
234
275
  }
235
276
  return urls;
236
277
  }
278
+ export function buildReleaseAssetDependencyUrlMap(dependencies) {
279
+ return buildDependencyUrlMap(dependencies);
280
+ }
237
281
  function exposeDependencySpecifierAliases(assets, dependencyModules) {
238
282
  const aliased = { ...assets };
239
283
  for (const dependency of dependencyModules.values()) {
@@ -761,20 +805,38 @@ async function addPreparedJavaScriptAsset(logicalPath, code, uploadQueue, pendin
761
805
  }
762
806
  return entry;
763
807
  }
764
- async function buildFrameworkDependencies(input, tempDir, transform, uploadQueue, pendingBytes, gaps) {
808
+ async function buildFrameworkDependencies(input, tempDir, transform, dependencyUrls, uploadQueue, pendingBytes, gaps) {
765
809
  const fs = createFileSystem();
766
810
  const dependencies = {};
767
- for (const [specifier, moduleUrl] of Object.entries(PLATFORM_UTILITIES)) {
768
- const sourceKey = frameworkModuleUrlToSourceKey(moduleUrl);
769
- if (!sourceKey)
770
- continue;
811
+ const lookupDirs = [FRAMEWORK_SRC_DIR, FRAMEWORK_EMBEDDED_SRC_DIR, join(tempDir, "src")];
812
+ const moduleAssets = new Map();
813
+ const visiting = new Set();
814
+ async function resolveFrameworkImport(specifier, fromSourcePath) {
815
+ if (specifier.startsWith("./") || specifier.startsWith("../")) {
816
+ const resolvedPath = await resolveRelativeFrameworkSourceImport(specifier, fromSourcePath);
817
+ return resolvedPath ? frameworkSourcePathToSourceKey(resolvedPath, lookupDirs) : null;
818
+ }
819
+ if (specifier.startsWith(FRAMEWORK_MODULE_URL_PREFIX)) {
820
+ return frameworkModuleUrlToSourceKey(specifier);
821
+ }
822
+ return null;
823
+ }
824
+ async function processFrameworkModule(sourceKey, publicSpecifier) {
825
+ const existing = moduleAssets.get(sourceKey);
826
+ if (existing)
827
+ return existing;
828
+ if (visiting.has(sourceKey)) {
829
+ gaps.push(`dependency-cycle:${publicSpecifier}:${sourceKey}`);
830
+ return null;
831
+ }
771
832
  const frameworkSource = await resolveFrameworkSourcePath(sourceKey, {
772
833
  extraLookupDirs: [join(tempDir, "src")],
773
834
  });
774
835
  if (!frameworkSource) {
775
- gaps.push(`dependency-missing:${specifier}`);
776
- continue;
836
+ gaps.push(`dependency-missing:${publicSpecifier}:${sourceKey}`);
837
+ return null;
777
838
  }
839
+ visiting.add(sourceKey);
778
840
  let code;
779
841
  try {
780
842
  const source = await fs.readTextFile(frameworkSource.path);
@@ -784,24 +846,98 @@ async function buildFrameworkDependencies(input, tempDir, transform, uploadQueue
784
846
  ssr: false,
785
847
  reactVersion: input.reactVersion,
786
848
  });
849
+ const frameworkImportUrls = new Map();
850
+ let hasUnresolvedFrameworkImport = false;
851
+ for (const imp of await parseImports(code)) {
852
+ if (!imp.n)
853
+ continue;
854
+ const importedSourceKey = await resolveFrameworkImport(imp.n, frameworkSource.path);
855
+ if (!importedSourceKey)
856
+ continue;
857
+ const importedAsset = await processFrameworkModule(importedSourceKey, publicSpecifier);
858
+ if (!importedAsset) {
859
+ hasUnresolvedFrameworkImport = true;
860
+ break;
861
+ }
862
+ frameworkImportUrls.set(imp.n, releaseAssetUrl(importedAsset.contentHash, "js"));
863
+ }
864
+ if (hasUnresolvedFrameworkImport) {
865
+ visiting.delete(sourceKey);
866
+ return null;
867
+ }
868
+ code = await replaceSpecifiers(code, (specifier) => frameworkImportUrls.get(specifier) ??
869
+ dependencyUrlForSpecifier(dependencyUrls, specifier));
787
870
  }
788
871
  catch (error) {
789
- gaps.push(`dependency-transform-failed:${specifier}`);
872
+ gaps.push(`dependency-transform-failed:${publicSpecifier}:${sourceKey}`);
790
873
  logger.warn("Framework dependency transform failed during release asset build", {
791
- specifier,
874
+ specifier: publicSpecifier,
875
+ sourceKey,
792
876
  error: sanitizeError(error),
793
877
  });
794
- continue;
878
+ visiting.delete(sourceKey);
879
+ return null;
795
880
  }
796
- const entry = await addPreparedJavaScriptAsset(`__dependencies__/${specifier}`, code, uploadQueue, pendingBytes);
881
+ visiting.delete(sourceKey);
882
+ const entry = await addPreparedJavaScriptAsset(`__dependencies__/${frameworkSourceKeyToModuleUrl(sourceKey)}`, code, uploadQueue, pendingBytes);
883
+ if (!entry) {
884
+ gaps.push(`dependency-oversized:${publicSpecifier}:${sourceKey}`);
885
+ return null;
886
+ }
887
+ moduleAssets.set(sourceKey, entry);
888
+ return entry;
889
+ }
890
+ for (const [specifier, moduleUrl] of Object.entries(PLATFORM_UTILITIES)) {
891
+ const sourceKey = frameworkModuleUrlToSourceKey(moduleUrl);
892
+ if (!sourceKey)
893
+ continue;
894
+ const entry = await processFrameworkModule(sourceKey, specifier);
797
895
  if (!entry) {
798
- gaps.push(`dependency-oversized:${specifier}`);
799
896
  continue;
800
897
  }
801
898
  dependencies[specifier] = entry;
802
899
  }
803
900
  return dependencies;
804
901
  }
902
+ export async function buildFrameworkDependencyAssets(options) {
903
+ const uploadQueue = [];
904
+ const pendingBytes = new Map();
905
+ const gaps = [];
906
+ const transform = options.transform ?? transformToESM;
907
+ const dependencies = await buildFrameworkDependencies({
908
+ projectReference: options.projectId ?? "local",
909
+ projectId: options.projectId ?? "local",
910
+ releaseId: "local",
911
+ releaseVersion: 0,
912
+ releaseVersionRef: "local",
913
+ reactVersion: options.reactVersion,
914
+ client: undefined,
915
+ adapter: options.adapter,
916
+ transform,
917
+ }, options.tempDir, transform, options.dependencyUrls, uploadQueue, pendingBytes, gaps);
918
+ return {
919
+ dependencies,
920
+ assets: uploadQueue.flatMap((asset) => {
921
+ const stored = pendingBytes.get(asset.contentHash);
922
+ if (!stored)
923
+ return [];
924
+ return [{
925
+ ...asset,
926
+ bytes: stored.bytes,
927
+ }];
928
+ }),
929
+ gaps,
930
+ };
931
+ }
932
+ function addFrameworkDependencyUrlAliases(urls, dependencies) {
933
+ for (const [specifier, entry] of Object.entries(dependencies)) {
934
+ const url = releaseAssetUrl(entry.contentHash, "js");
935
+ urls.set(specifier, url);
936
+ const moduleUrl = PLATFORM_UTILITIES[specifier];
937
+ if (moduleUrl)
938
+ urls.set(moduleUrl, url);
939
+ }
940
+ }
805
941
  /**
806
942
  * Walk the static import graph from a set of entry points using BFS.
807
943
  * Returns all reachable logical paths (entries included).
@@ -986,7 +1122,6 @@ async function runBuildInner(input, tempDir, client, transform) {
986
1122
  };
987
1123
  }
988
1124
  }
989
- const frameworkDependencies = await buildFrameworkDependencies(input, tempDir, transform, uploadQueue, pendingBytes, gaps);
990
1125
  let httpDependencies;
991
1126
  let httpDependencyFallbackUrls;
992
1127
  try {
@@ -1011,11 +1146,14 @@ async function runBuildInner(input, tempDir, client, transform) {
1011
1146
  };
1012
1147
  }
1013
1148
  httpDependencies = exposeDependencySpecifierAliases(httpDependencies, dependencyModules);
1014
- const dependencies = { ...frameworkDependencies, ...httpDependencies };
1015
- const dependencyUrls = buildDependencyUrlMap(dependencies, dependencyModules);
1149
+ const dependencyUrls = buildDependencyUrlMap(httpDependencies, dependencyModules);
1016
1150
  for (const [specifier, url] of httpDependencyFallbackUrls) {
1017
1151
  dependencyUrls.set(specifier, url);
1018
1152
  }
1153
+ const frameworkDependencies = await buildFrameworkDependencies(input, tempDir, transform, dependencyUrls, uploadQueue, pendingBytes, gaps);
1154
+ if (vendorDependencies)
1155
+ addFrameworkDependencyUrlAliases(dependencyUrls, frameworkDependencies);
1156
+ const dependencies = { ...frameworkDependencies, ...httpDependencies };
1019
1157
  const { modules, skippedModules } = await finalizeProjectModules(transformedModules, knownPaths, dependencyUrls, uploadQueue, pendingBytes, gaps);
1020
1158
  for (const logicalPath of transformedModules.keys()) {
1021
1159
  if (modules[logicalPath])
@@ -2,6 +2,7 @@
2
2
  * App Route HTML Rendering for Build
3
3
  */
4
4
  import type { RuntimeAdapter } from "../platform/adapters/base.js";
5
+ import type { ReleaseAssetManifest } from "../release-assets/manifest-schema.js";
5
6
  /**
6
7
  * Render an App Router route to HTML
7
8
  */
@@ -12,6 +13,7 @@ export declare function renderAppRouteToHTML(args: {
12
13
  pageFile: string;
13
14
  contentSourceId: string;
14
15
  reactVersion?: string;
16
+ releaseAssetManifest?: ReleaseAssetManifest | null;
15
17
  stylesheetHref?: string;
16
18
  includePreviewStylesheet?: boolean;
17
19
  }): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"build-app-route-renderer.d.ts","sourceRoot":"","sources":["../../../src/src/server/build-app-route-renderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAiEnE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,CAAC,CAgHlB"}
1
+ {"version":3,"file":"build-app-route-renderer.d.ts","sourceRoot":"","sources":["../../../src/src/server/build-app-route-renderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAMnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AA4DjF;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,GAAG,OAAO,CAAC,MAAM,CAAC,CAkHlB"}
@@ -50,7 +50,7 @@ function getLayoutsForRoute(appRoot, routePath) {
50
50
  * Render an App Router route to HTML
51
51
  */
52
52
  export async function renderAppRouteToHTML(args) {
53
- const { adapter, projectDir, routePath, pageFile, contentSourceId, stylesheetHref, includePreviewStylesheet, } = args;
53
+ const { adapter, projectDir, routePath, pageFile, contentSourceId, releaseAssetManifest, stylesheetHref, includePreviewStylesheet, } = args;
54
54
  const appRoot = join(projectDir, "app");
55
55
  const layoutCandidates = getLayoutsForRoute(appRoot, routePath);
56
56
  const layouts = [];
@@ -94,7 +94,7 @@ export async function renderAppRouteToHTML(args) {
94
94
  const htmlInner = await renderToStringAdapter(element);
95
95
  const title = "Veryfront App";
96
96
  const slug = routePathToSlug(routePath);
97
- const importMapJson = await buildImportMapJson({ projectDir });
97
+ const importMapJson = await buildImportMapJson({ projectDir, releaseAssetManifest });
98
98
  const hydrationData = hasUseClientDirective(pageSource)
99
99
  ? generateHydrationData(slug, {}, {}, {
100
100
  mode: "production",
@@ -102,6 +102,7 @@ export async function renderAppRouteToHTML(args) {
102
102
  projectDir,
103
103
  pagePath: pageFile,
104
104
  pageType: "tsx",
105
+ releaseAssetManifest,
105
106
  isLocalProject: false,
106
107
  forceProductionScripts: true,
107
108
  nestedLayouts: layouts.map((layoutPath) => ({ kind: "tsx", path: layoutPath })),
@@ -1 +1 @@
1
- {"version":3,"file":"page-module-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-module-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAMhE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CAmExB"}
1
+ {"version":3,"file":"page-module-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-module-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAYhE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CA4ExB"}
@@ -4,6 +4,11 @@ import { getRendererForProject } from "../../../shared/renderer-factory.js";
4
4
  import { shouldUseNoCacheHeadersFromHandler } from "../../../context/enriched-context.js";
5
5
  import { withSpan } from "../../../../observability/tracing/otlp-setup.js";
6
6
  import { serverLogger } from "../../../../utils/index.js";
7
+ import { VeryfrontError } from "../../../../errors/index.js";
8
+ function isPageModuleNotFound(error) {
9
+ return error instanceof VeryfrontError &&
10
+ (error.status === 404 || error.slug === "file-not-found" || error.slug === "page-not-found");
11
+ }
7
12
  export function handlePageModule(req, pathname, ctx, createResponseBuilder, respond, getErrorMessage) {
8
13
  return withSpan("module.page.handle", async () => {
9
14
  try {
@@ -35,6 +40,12 @@ export function handlePageModule(req, pathname, ctx, createResponseBuilder, resp
35
40
  return respond(builder.withCache(cacheMode).withETag(etag).javascript(code, 200));
36
41
  }
37
42
  catch (error) {
43
+ if (isPageModuleNotFound(error)) {
44
+ return respond(ResponseBuilder.error(404, "Module not found", req, {
45
+ securityConfig: ctx.securityConfig,
46
+ corsConfig: ctx.securityConfig?.cors,
47
+ }));
48
+ }
38
49
  // Log the full error server-side but return a generic message
39
50
  // to avoid leaking internal details (Babel/TS errors, file paths, etc.)
40
51
  serverLogger.error("[page-module] Failed to generate module", {
@@ -1 +1 @@
1
- {"version":3,"file":"static.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/static.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AA6BnG,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,EAAE,eAAe,CAOvB;IAEF,OAAO,CAAC,aAAa,CAA2B;IAEhD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAejE,OAAO,CAAC,cAAc;CAuEvB"}
1
+ {"version":3,"file":"static.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/static.handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAkCnG,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,EAAE,eAAe,CAOvB;IAEF,OAAO,CAAC,aAAa,CAA2B;IAEhD,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAejE,OAAO,CAAC,cAAc;CAwEvB"}
@@ -30,6 +30,10 @@ function isProductionBuildAssetPath(pathname) {
30
30
  pathname.startsWith("/_veryfront/data/") ||
31
31
  pathname.startsWith("/_vf/assets/");
32
32
  }
33
+ function isDynamicBuildFallbackPath(pathname) {
34
+ return pathname.startsWith("/_veryfront/pages/") ||
35
+ pathname.startsWith("/_veryfront/data/");
36
+ }
33
37
  export class StaticHandler extends BaseHandler {
34
38
  metadata = {
35
39
  name: "StaticHandler",
@@ -68,6 +72,8 @@ export class StaticHandler extends BaseHandler {
68
72
  isLocalProject: isLocal,
69
73
  });
70
74
  if (!result) {
75
+ if (isDynamicBuildFallbackPath(pathname))
76
+ return null;
71
77
  if (!this.staticService.isAssetRequest(pathname))
72
78
  return null;
73
79
  return builder
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.807";
2
+ export declare const VERSION = "0.1.810";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.807";
4
+ export const VERSION = "0.1.810";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.807",
3
+ "version": "0.1.810",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",