veryfront 0.1.809 → 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.
- package/esm/deno.js +1 -1
- package/esm/src/build/production-build/build/build-executor.d.ts +2 -0
- package/esm/src/build/production-build/build/build-executor.d.ts.map +1 -1
- package/esm/src/build/production-build/build/build-orchestrator.d.ts.map +1 -1
- package/esm/src/build/production-build/build/build-orchestrator.js +9 -0
- package/esm/src/build/production-build/build/output-generator.d.ts +2 -0
- package/esm/src/build/production-build/build/output-generator.d.ts.map +1 -1
- package/esm/src/build/production-build/build/output-generator.js +9 -7
- package/esm/src/build/production-build/local-release-assets.d.ts +2 -1
- package/esm/src/build/production-build/local-release-assets.d.ts.map +1 -1
- package/esm/src/build/production-build/local-release-assets.js +14 -4
- package/esm/src/build/production-build/static-generation.d.ts +2 -0
- package/esm/src/build/production-build/static-generation.d.ts.map +1 -1
- package/esm/src/build/production-build/static-generation.js +29 -5
- package/esm/src/html/utils.d.ts.map +1 -1
- package/esm/src/html/utils.js +8 -8
- package/esm/src/release-assets/build-executor.d.ts +14 -0
- package/esm/src/release-assets/build-executor.d.ts.map +1 -1
- package/esm/src/release-assets/build-executor.js +158 -20
- package/esm/src/server/build-app-route-renderer.d.ts +2 -0
- package/esm/src/server/build-app-route-renderer.d.ts.map +1 -1
- package/esm/src/server/build-app-route-renderer.js +3 -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/esm/deno.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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;
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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 {
|
|
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, {
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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;
|
|
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"}
|
package/esm/src/html/utils.js
CHANGED
|
@@ -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
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
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
|
|
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
|
|
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
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
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:${
|
|
776
|
-
|
|
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:${
|
|
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
|
-
|
|
878
|
+
visiting.delete(sourceKey);
|
|
879
|
+
return null;
|
|
795
880
|
}
|
|
796
|
-
|
|
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
|
|
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;
|
|
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 })),
|