veryfront 0.1.827 → 0.1.829
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/templates.d.ts.map +1 -1
- package/esm/src/build/production-build/templates.js +1 -1
- package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
- package/esm/src/html/hydration-script-builder/templates/router.js +78 -4
- package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.d.ts +2 -2
- package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/import-rewriter.js +14 -22
- package/esm/src/modules/react-loader/ssr-module-loader/loader.js +2 -2
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/ssr-cache-manager.js +11 -4
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.d.ts +2 -2
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.d.ts.map +1 -1
- package/esm/src/modules/react-loader/ssr-module-loader/vf-module-resolver.js +22 -15
- package/esm/src/release-assets/build-executor.d.ts.map +1 -1
- package/esm/src/release-assets/build-executor.js +43 -62
- package/esm/src/release-assets/html-consumption.d.ts +2 -1
- package/esm/src/release-assets/html-consumption.d.ts.map +1 -1
- package/esm/src/release-assets/html-consumption.js +4 -2
- package/esm/src/rendering/rsc/component-analyzer.d.ts.map +1 -1
- package/esm/src/rendering/rsc/component-analyzer.js +2 -1
- package/esm/src/rendering/rsc/export-extractor.d.ts +5 -3
- package/esm/src/rendering/rsc/export-extractor.d.ts.map +1 -1
- package/esm/src/rendering/rsc/export-extractor.js +59 -36
- package/esm/src/routing/client/page-loader.d.ts.map +1 -1
- package/esm/src/routing/client/page-loader.js +2 -4
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +8 -14
- package/esm/src/transforms/mdx/esm-module-loader/import-transformer.d.ts +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/import-transformer.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/import-transformer.js +32 -26
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/nested-imports.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-fetcher/nested-imports.js +7 -5
- package/esm/src/transforms/mdx/esm-module-loader/module-writer.d.ts.map +1 -1
- package/esm/src/transforms/mdx/esm-module-loader/module-writer.js +8 -8
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/import-finder.d.ts +2 -2
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/import-finder.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/import-finder.js +16 -26
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/index.js +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.d.ts.map +1 -1
- package/esm/src/transforms/pipeline/stages/ssr-vf-modules/transform.js +8 -5
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
import { join } from "../../../platform/compat/path/index.js";
|
|
10
10
|
import { rendererLogger as logger } from "../../../utils/index.js";
|
|
11
11
|
import { transformImportsWithMap } from "../../../modules/import-map/index.js";
|
|
12
|
-
import { replaceSpecifiers } from "../../esm/lexer.js";
|
|
12
|
+
import { parseImports, replaceSpecifiers } from "../../esm/lexer.js";
|
|
13
13
|
import { getLocalReactPaths, isReactSpecifier } from "../../../platform/compat/react-paths.js";
|
|
14
|
-
import { ESBUILD_JSX_FACTORY, ESBUILD_JSX_FRAGMENT, FRAMEWORK_ROOT,
|
|
14
|
+
import { ESBUILD_JSX_FACTORY, ESBUILD_JSX_FRAGMENT, FRAMEWORK_ROOT, LOG_PREFIX_MDX_LOADER, } from "./constants.js";
|
|
15
15
|
import { getLocalFs } from "./cache/index.js";
|
|
16
16
|
import { buildMdxJsxCacheFileName } from "./cache-format.js";
|
|
17
17
|
import { rewriteDntImports } from "./module-fetcher/index.js";
|
|
@@ -19,10 +19,13 @@ import { ensureCachedJsxModulePatched } from "./jsx-cache.js";
|
|
|
19
19
|
/**
|
|
20
20
|
* Rewrite @/ aliased imports to /_vf_modules/ paths.
|
|
21
21
|
*/
|
|
22
|
-
export function rewriteProjectAliasImports(code) {
|
|
23
|
-
return code
|
|
22
|
+
export async function rewriteProjectAliasImports(code) {
|
|
23
|
+
return await replaceSpecifiers(code, (specifier) => {
|
|
24
|
+
if (!specifier.startsWith("@/"))
|
|
25
|
+
return null;
|
|
26
|
+
const path = specifier.slice(2);
|
|
24
27
|
const jsPath = path.endsWith(".js") ? path : `${path}.js`;
|
|
25
|
-
return
|
|
28
|
+
return `/_vf_modules/${jsPath}`;
|
|
26
29
|
});
|
|
27
30
|
}
|
|
28
31
|
/**
|
|
@@ -65,6 +68,10 @@ export function transformImports(code, importMap) {
|
|
|
65
68
|
resolveBare: true,
|
|
66
69
|
});
|
|
67
70
|
}
|
|
71
|
+
async function hasReactImport(code) {
|
|
72
|
+
const imports = await parseImports(code);
|
|
73
|
+
return imports.some((importSpecifier) => importSpecifier.n === "react");
|
|
74
|
+
}
|
|
68
75
|
/**
|
|
69
76
|
* Transform JSX/TSX imports using esbuild.
|
|
70
77
|
* Optimized to process all imports in parallel batches for better performance.
|
|
@@ -72,25 +79,22 @@ export function transformImports(code, importMap) {
|
|
|
72
79
|
export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
73
80
|
const { transform } = await import("../../../extensions/bundler/index.js");
|
|
74
81
|
const importsToProcess = [];
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
if (!
|
|
79
|
-
logger.warn(`${LOG_PREFIX_MDX_LOADER} Skipping JSX import with undefined fields`, {
|
|
80
|
-
fullMatch,
|
|
81
|
-
hasFilePath: !!filePath,
|
|
82
|
-
hasImportClause: !!importClause,
|
|
83
|
-
hasExt: !!ext,
|
|
84
|
-
});
|
|
82
|
+
const imports = await parseImports(code);
|
|
83
|
+
for (const importSpecifier of imports) {
|
|
84
|
+
const specifier = importSpecifier.n;
|
|
85
|
+
if (!specifier?.startsWith("file://"))
|
|
85
86
|
continue;
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
const filePath = specifier.slice("file://".length);
|
|
88
|
+
const ext = filePath.match(/\.(tsx?|jsx?)$/)?.[1];
|
|
89
|
+
if (!ext)
|
|
90
|
+
continue;
|
|
91
|
+
importsToProcess.push({ specifier, filePath, ext });
|
|
88
92
|
}
|
|
89
93
|
if (importsToProcess.length === 0)
|
|
90
94
|
return code;
|
|
91
95
|
const transformStart = performance.now();
|
|
92
96
|
logger.debug(`${LOG_PREFIX_MDX_LOADER} Transforming ${importsToProcess.length} JSX imports in parallel`);
|
|
93
|
-
const transformResults = await Promise.all(importsToProcess.map(async ({
|
|
97
|
+
const transformResults = await Promise.all(importsToProcess.map(async ({ specifier, filePath, ext }) => {
|
|
94
98
|
try {
|
|
95
99
|
const isFrameworkFile = filePath.startsWith(FRAMEWORK_ROOT);
|
|
96
100
|
let jsxCode;
|
|
@@ -115,8 +119,8 @@ export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
|
115
119
|
const useCached = await ensureCachedJsxModulePatched(transformedPath, filePath);
|
|
116
120
|
if (useCached) {
|
|
117
121
|
return {
|
|
118
|
-
|
|
119
|
-
|
|
122
|
+
specifier,
|
|
123
|
+
replacement: `file://${transformedPath}`,
|
|
120
124
|
cached: true,
|
|
121
125
|
};
|
|
122
126
|
}
|
|
@@ -140,7 +144,7 @@ export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
|
140
144
|
format: "esm",
|
|
141
145
|
});
|
|
142
146
|
let transformed = result.code;
|
|
143
|
-
if (!
|
|
147
|
+
if (!(await hasReactImport(transformed))) {
|
|
144
148
|
transformed = `import React from 'react';\n${transformed}`;
|
|
145
149
|
}
|
|
146
150
|
// Rewrite _dnt.polyfills.js / _dnt.shims.js relative imports to absolute file:// paths.
|
|
@@ -149,8 +153,8 @@ export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
|
149
153
|
transformed = await rewriteDntImports(transformed, filePath);
|
|
150
154
|
await getLocalFs().writeTextFile(transformedPath, transformed);
|
|
151
155
|
return {
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
specifier,
|
|
157
|
+
replacement: `file://${transformedPath}`,
|
|
154
158
|
cached: false,
|
|
155
159
|
};
|
|
156
160
|
}
|
|
@@ -165,10 +169,12 @@ export async function transformJsxImports(code, adapter, esmCacheDir) {
|
|
|
165
169
|
cached: transformResults.filter((r) => r?.cached).length,
|
|
166
170
|
durationMs: (performance.now() - transformStart).toFixed(1),
|
|
167
171
|
});
|
|
168
|
-
|
|
172
|
+
const replacements = new Map();
|
|
169
173
|
for (const t of transformResults) {
|
|
170
174
|
if (t)
|
|
171
|
-
|
|
175
|
+
replacements.set(t.specifier, t.replacement);
|
|
172
176
|
}
|
|
173
|
-
|
|
177
|
+
if (replacements.size === 0)
|
|
178
|
+
return code;
|
|
179
|
+
return await replaceSpecifiers(code, (specifier) => replacements.get(specifier) ?? null);
|
|
174
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-imports.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/nested-imports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"nested-imports.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/module-fetcher/nested-imports.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,GACjB;IACD,SAAS,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,QAAQ,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF,CAkCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAM3F;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,kBAAkB,EAAE,EAC7B,WAAW,EAAE,MAAM,EACnB,oBAAoB,EAAE,OAAO,EAC7B,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAqCjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,MAAM,CAAC,CAuDjB"}
|
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module transforms/mdx/esm-module-loader/module-fetcher/nested-imports
|
|
5
5
|
*/
|
|
6
|
-
import { LOG_PREFIX_MDX_LOADER
|
|
6
|
+
import { LOG_PREFIX_MDX_LOADER } from "../constants.js";
|
|
7
7
|
import { createStubModule } from "../utils/stub-module.js";
|
|
8
8
|
import { findStaticImportFromSpans, replaceSourceSpans, } from "../utils/source-spans.js";
|
|
9
9
|
import { buildMissingModuleError } from "../missing-module.js";
|
|
10
|
+
function matchUnresolvedVfModuleSpecifier(specifier) {
|
|
11
|
+
return specifier.match(/^((?:file:\/\/)?\/?\/?_vf_modules\/[^?]+)(?:\?.*)?$/)?.[1] ?? null;
|
|
12
|
+
}
|
|
10
13
|
/**
|
|
11
14
|
* Find nested module imports in code.
|
|
12
15
|
* Matches both /_vf_modules/... and file:///_vf_modules/... patterns.
|
|
@@ -14,7 +17,7 @@ import { buildMissingModuleError } from "../missing-module.js";
|
|
|
14
17
|
export function findNestedImports(moduleCode) {
|
|
15
18
|
const vfModules = [];
|
|
16
19
|
const relative = [];
|
|
17
|
-
for (const { original, path: rawPath, start, end } of findStaticImportFromSpans(moduleCode,
|
|
20
|
+
for (const { original, path: rawPath, start, end } of findStaticImportFromSpans(moduleCode, matchUnresolvedVfModuleSpecifier)) {
|
|
18
21
|
// Strip file:// prefix and leading slashes to get clean _vf_modules/... path
|
|
19
22
|
vfModules.push({
|
|
20
23
|
original,
|
|
@@ -37,11 +40,10 @@ export function findNestedImports(moduleCode) {
|
|
|
37
40
|
* Check for unresolved /_vf_modules/ imports.
|
|
38
41
|
*/
|
|
39
42
|
export function hasUnresolvedImports(moduleCode) {
|
|
40
|
-
const
|
|
41
|
-
const matches = [...moduleCode.matchAll(pattern)];
|
|
43
|
+
const matches = findStaticImportFromSpans(moduleCode, matchUnresolvedVfModuleSpecifier);
|
|
42
44
|
return {
|
|
43
45
|
count: matches.length,
|
|
44
|
-
paths: matches.map((
|
|
46
|
+
paths: matches.map((match) => match.path).slice(0, 5),
|
|
45
47
|
};
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-writer.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/module-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"module-writer.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/module-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AA8CnD,wBAAsB,eAAe,CACnC,mBAAmB,EAAE,MAAM,EAC3B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,CAAC,CA2VpB"}
|
|
@@ -20,7 +20,7 @@ import { loadImportMap } from "../../../modules/import-map/index.js";
|
|
|
20
20
|
import { cacheHttpImportsToLocal, ensureHttpBundlesExist } from "../../esm/http-cache.js";
|
|
21
21
|
import { extractAllHttpBundlePathsRecursive, extractHttpBundlePaths, } from "../../../modules/react-loader/ssr-module-loader/http-bundle-helpers.js";
|
|
22
22
|
import { setupSSRGlobals } from "../../../rendering/ssr-globals.js";
|
|
23
|
-
import { LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER
|
|
23
|
+
import { LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER } from "./constants.js";
|
|
24
24
|
import { getLocalFs } from "./cache/index.js";
|
|
25
25
|
import { hashString } from "./utils/hash.js";
|
|
26
26
|
import { ssrVfModulesPlugin } from "../../pipeline/stages/ssr-vf-modules.js";
|
|
@@ -28,6 +28,7 @@ import { REACT_DEFAULT_VERSION } from "../../../utils/constants/cdn.js";
|
|
|
28
28
|
import { extractFrameworkBundlePaths } from "../../shared/framework-bundle-paths.js";
|
|
29
29
|
import { rewriteProjectAliasImports, transformImports, transformJsxImports, transformReactToLocalPaths, } from "./import-transformer.js";
|
|
30
30
|
import { findMissingFrameworkBundles, findVfModuleImports, initializeCacheDir, processVfModuleImports, resolveProjectDir, } from "./loader-helpers.js";
|
|
31
|
+
import { hasUnresolvedImports } from "./module-fetcher/nested-imports.js";
|
|
31
32
|
/** Singleflight for MDX module file writes to prevent race conditions */
|
|
32
33
|
const mdxWriteFlight = new Singleflight();
|
|
33
34
|
/**
|
|
@@ -64,7 +65,7 @@ export async function doLoadModuleESM(compiledProgramCode, context) {
|
|
|
64
65
|
logger.debug(`${LOG_PREFIX_MDX_LOADER} Step: initializeCacheDir START`, { projectSlug });
|
|
65
66
|
const esmCacheDir = await initializeCacheDir(context);
|
|
66
67
|
logger.debug(`${LOG_PREFIX_MDX_LOADER} Step: initializeCacheDir DONE`, { projectSlug });
|
|
67
|
-
let rewritten = rewriteProjectAliasImports(compiledProgramCode);
|
|
68
|
+
let rewritten = await rewriteProjectAliasImports(compiledProgramCode);
|
|
68
69
|
const projectDir = resolveProjectDir(context);
|
|
69
70
|
logger.debug(`${LOG_PREFIX_MDX_LOADER} Step: loadImportMap START`, { projectSlug });
|
|
70
71
|
const importMap = await loadImportMap(projectDir, adapter);
|
|
@@ -103,12 +104,11 @@ export async function doLoadModuleESM(compiledProgramCode, context) {
|
|
|
103
104
|
return cached;
|
|
104
105
|
}
|
|
105
106
|
logger.debug(`${LOG_PREFIX_MDX_LOADER} Module cache miss`, { projectSlug, compositeKey });
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
const errorMsg = `MDX has ${unresolvedMatches.length} unresolved module imports: ${unresolvedPaths.join(", ")}`;
|
|
107
|
+
const unresolved = hasUnresolvedImports(rewritten);
|
|
108
|
+
if (unresolved.count > 0) {
|
|
109
|
+
const errorMsg = `MDX has ${unresolved.count} unresolved module imports: ${unresolved.paths
|
|
110
|
+
.slice(0, 5)
|
|
111
|
+
.join(", ")}`;
|
|
112
112
|
logger.error(`${LOG_PREFIX_MDX_RENDERER} ${errorMsg}`);
|
|
113
113
|
throw IMPORT_RESOLUTION_ERROR.create({ detail: errorMsg });
|
|
114
114
|
}
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* Find all /_vf_modules/_veryfront/ imports in the code.
|
|
6
6
|
* Only matches framework modules, not user project files.
|
|
7
7
|
*/
|
|
8
|
-
export declare function findVfModuleImports(code: string): string[]
|
|
8
|
+
export declare function findVfModuleImports(code: string): Promise<string[]>;
|
|
9
9
|
/**
|
|
10
10
|
* Find all relative imports (./foo, ../bar) in the code.
|
|
11
11
|
* Returns array of specifiers.
|
|
12
12
|
*/
|
|
13
|
-
export declare function findRelativeImports(code: string): string[]
|
|
13
|
+
export declare function findRelativeImports(code: string): Promise<string[]>;
|
|
14
14
|
//# sourceMappingURL=import-finder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-finder.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/import-finder.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"import-finder.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/import-finder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUzE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUzE"}
|
|
@@ -1,39 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Import discovery functions for the SSR VF Modules stage.
|
|
3
3
|
*/
|
|
4
|
+
import { parseImports } from "../../../esm/lexer.js";
|
|
5
|
+
function unique(values) {
|
|
6
|
+
return [...new Set(values)];
|
|
7
|
+
}
|
|
4
8
|
/**
|
|
5
9
|
* Find all /_vf_modules/_veryfront/ imports in the code.
|
|
6
10
|
* Only matches framework modules, not user project files.
|
|
7
11
|
*/
|
|
8
|
-
export function findVfModuleImports(code) {
|
|
9
|
-
const imports =
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const pattern = /from\s*["']((?:file:\/\/)?\/_vf_modules\/_veryfront\/[^"']+)["']/g;
|
|
15
|
-
let match;
|
|
16
|
-
while ((match = pattern.exec(code)) !== null) {
|
|
17
|
-
imports.push(match[1]);
|
|
18
|
-
}
|
|
19
|
-
return [...new Set(imports)];
|
|
12
|
+
export async function findVfModuleImports(code) {
|
|
13
|
+
const imports = await parseImports(code);
|
|
14
|
+
return unique(imports
|
|
15
|
+
.map((imp) => imp.n)
|
|
16
|
+
.filter((specifier) => specifier?.startsWith("/_vf_modules/_veryfront/") === true ||
|
|
17
|
+
specifier?.startsWith("file:///_vf_modules/_veryfront/") === true));
|
|
20
18
|
}
|
|
21
19
|
/**
|
|
22
20
|
* Find all relative imports (./foo, ../bar) in the code.
|
|
23
21
|
* Returns array of specifiers.
|
|
24
22
|
*/
|
|
25
|
-
export function findRelativeImports(code) {
|
|
26
|
-
const imports =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
let match;
|
|
32
|
-
while ((match = fromPattern.exec(code)) !== null) {
|
|
33
|
-
imports.push(match[1]);
|
|
34
|
-
}
|
|
35
|
-
while ((match = sideEffectPattern.exec(code)) !== null) {
|
|
36
|
-
imports.push(match[1]);
|
|
37
|
-
}
|
|
38
|
-
return [...new Set(imports)];
|
|
23
|
+
export async function findRelativeImports(code) {
|
|
24
|
+
const imports = await parseImports(code);
|
|
25
|
+
return unique(imports
|
|
26
|
+
.map((imp) => imp.n)
|
|
27
|
+
.filter((specifier) => specifier?.startsWith("./") === true ||
|
|
28
|
+
specifier?.startsWith("../") === true));
|
|
39
29
|
}
|
|
@@ -52,7 +52,7 @@ export const ssrVfModulesPlugin = {
|
|
|
52
52
|
condition: (ctx) => ctx.target === "ssr",
|
|
53
53
|
async transform(ctx) {
|
|
54
54
|
logInitOnce();
|
|
55
|
-
const vfModuleImports = findVfModuleImports(ctx.code);
|
|
55
|
+
const vfModuleImports = await findVfModuleImports(ctx.code);
|
|
56
56
|
logger.debug(`${LOG_PREFIX} Transform called`, {
|
|
57
57
|
file: ctx.filePath?.slice(-60) ?? "<unknown>",
|
|
58
58
|
count: vfModuleImports.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAmBrE,OAAO,EAOL,KAAK,gBAAgB,EAGtB,MAAM,gBAAgB,CAAC;AAKxB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAgBD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAwMhE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,oBAAoB,UAAQ,EAC5B,KAAK,SAAI,GACR,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/pipeline/stages/ssr-vf-modules/transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAmBrE,OAAO,EAOL,KAAK,gBAAgB,EAGtB,MAAM,gBAAgB,CAAC;AAKxB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAgBD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAwMhE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,gBAAgB,EACrB,oBAAoB,UAAQ,EAC5B,KAAK,SAAI,GACR,OAAO,CAAC,MAAM,CAAC,CAgPjB;AAED;;;GAGG;AACH,wBAAsB,kCAAkC,CACtD,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4CxB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -8,7 +8,7 @@ import { join } from "../../../../platform/compat/path/index.js";
|
|
|
8
8
|
import denoConfig from "../../../../../deno.js";
|
|
9
9
|
import { rendererLogger as logger } from "../../../../utils/index.js";
|
|
10
10
|
import { IMPORT_RESOLUTION_ERROR } from "../../../../errors/index.js";
|
|
11
|
-
import { replaceSpecifiers } from "../../../esm/lexer.js";
|
|
11
|
+
import { parseImports, replaceSpecifiers } from "../../../esm/lexer.js";
|
|
12
12
|
import { hashCodeHex } from "../../../../utils/hash-utils.js";
|
|
13
13
|
import { LRUCache } from "../../../../utils/lru-wrapper.js";
|
|
14
14
|
import { getHttpBundleCacheDir, getMdxEsmCacheDir } from "../../../../utils/cache-dir.js";
|
|
@@ -187,7 +187,7 @@ async function rewriteFallbackRelativeImports(code, sourcePath, ctx, visited = n
|
|
|
187
187
|
visited.add(sourcePath);
|
|
188
188
|
// Note: we do not early-return when there are no relative imports, because
|
|
189
189
|
// react/react-dom specifiers still need rewriting below.
|
|
190
|
-
const relativeImports = findRelativeImports(code);
|
|
190
|
+
const relativeImports = await findRelativeImports(code);
|
|
191
191
|
// Built once and reused for both the relative-import loop (React re-export
|
|
192
192
|
// rewriting) and the final specifier pass below.
|
|
193
193
|
const reactImportMap = getReactImportMap(ctx.reactVersion);
|
|
@@ -312,8 +312,11 @@ export async function transformFrameworkCode(content, sourcePath, ctx, throwOnMi
|
|
|
312
312
|
let transformed = result.code;
|
|
313
313
|
// Collect and recursively resolve all #veryfront/ imports
|
|
314
314
|
const veryfrontReplacements = new Map();
|
|
315
|
-
|
|
316
|
-
|
|
315
|
+
const transformedImports = await parseImports(transformed);
|
|
316
|
+
for (const importSpecifier of transformedImports) {
|
|
317
|
+
const specifier = importSpecifier.n;
|
|
318
|
+
if (!specifier?.startsWith("#veryfront/"))
|
|
319
|
+
continue;
|
|
317
320
|
if (veryfrontReplacements.has(specifier))
|
|
318
321
|
continue;
|
|
319
322
|
const resolved = await resolveAndTransformVeryfrontImport(specifier, ctx);
|
|
@@ -344,7 +347,7 @@ export async function transformFrameworkCode(content, sourcePath, ctx, throwOnMi
|
|
|
344
347
|
const frameworkSrcDir = join(FRAMEWORK_ROOT, "src") + "/";
|
|
345
348
|
const embeddedSrcDirPrefix = EMBEDDED_SRC_DIR + "/";
|
|
346
349
|
{
|
|
347
|
-
const relativeImports = findRelativeImports(transformed);
|
|
350
|
+
const relativeImports = await findRelativeImports(transformed);
|
|
348
351
|
for (const specifier of relativeImports) {
|
|
349
352
|
// Skip non-code imports (like deno.json, package.json, etc.)
|
|
350
353
|
if (/\.(json|css|svg|png|jpg|jpeg|gif|ico|woff2?|ttf|eot)$/.test(specifier)) {
|