@vmz/vmz 0.1.13 → 0.1.14
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/dist/build-assemble.js +18 -7
- package/dist/cdn-policy.js +5 -4
- package/dist/cli.js +106 -38
- package/dist/content-addressed-assets.d.ts +23 -2
- package/dist/content-addressed-assets.js +178 -32
- package/dist/delivery-profile.d.ts +30 -2
- package/dist/delivery-profile.js +139 -5
- package/dist/dev-session.d.ts +1 -0
- package/dist/dev-session.js +269 -65
- package/dist/dev-watch-roots.d.ts +80 -0
- package/dist/dev-watch-roots.js +245 -0
- package/dist/document-build.d.ts +2 -1
- package/dist/document-build.js +104 -82
- package/dist/document-cmd.js +2 -9
- package/dist/document-enrich.d.ts +2 -1
- package/dist/document-enrich.js +15 -4
- package/dist/document-integrate.js +29 -21
- package/dist/document-layout-render.d.ts +20 -0
- package/dist/document-layout-render.js +87 -0
- package/dist/document-routing-config.d.ts +13 -0
- package/dist/document-routing-config.js +40 -0
- package/dist/embedded-packaging.js +2 -1
- package/dist/index.d.ts +18 -2
- package/dist/index.js +63 -4
- package/dist/locale-check.js +28 -61
- package/dist/locale-cmd.js +10 -42
- package/dist/locale-route-emit.d.ts +4 -1
- package/dist/locale-route-emit.js +7 -32
- package/dist/locale-router.js +26 -8
- package/dist/native-addon.d.ts +9 -0
- package/dist/native-addon.js +84 -0
- package/dist/pack.js +3 -2
- package/dist/pretty-json.d.ts +19 -0
- package/dist/pretty-json.js +43 -0
- package/dist/production-observability.js +3 -2
- package/dist/production-test-pack.js +4 -3
- package/dist/public-static-assets.d.ts +24 -0
- package/dist/public-static-assets.js +140 -0
- package/dist/release-pack.js +5 -18
- package/dist/route-path.d.ts +35 -0
- package/dist/route-path.js +77 -0
- package/dist/server-artifact.js +4 -3
- package/dist/site-delivery.js +4 -3
- package/dist/site-favicon.d.ts +31 -0
- package/dist/site-favicon.js +140 -0
- package/dist/static-emit.d.ts +21 -0
- package/dist/static-emit.js +134 -97
- package/dist/test-cmd.js +2 -1
- package/dist/wechat-packaging.d.ts +22 -0
- package/dist/wechat-packaging.js +59 -0
- package/package.json +12 -12
|
@@ -7,7 +7,10 @@ import fs from 'node:fs';
|
|
|
7
7
|
import path from 'node:path';
|
|
8
8
|
import { buildDocuments } from './document-build.js';
|
|
9
9
|
import { resolveDocumentsRoot } from './document-check.js';
|
|
10
|
+
import { loadLocalesRouting } from './document-routing-config.js';
|
|
11
|
+
import { pageHtmlRel } from './document-enrich.js';
|
|
10
12
|
import { log } from './log.js';
|
|
13
|
+
import { requireNativeAddon } from './native-addon.js';
|
|
11
14
|
/**
|
|
12
15
|
* @param {string} projectRoot
|
|
13
16
|
*/
|
|
@@ -30,6 +33,7 @@ export async function buildIntegratedDocuments(opts) {
|
|
|
30
33
|
const result = await buildDocuments({
|
|
31
34
|
projectRoot,
|
|
32
35
|
outDir,
|
|
36
|
+
appDistDir: outDir,
|
|
33
37
|
strict: Boolean(opts.strict),
|
|
34
38
|
});
|
|
35
39
|
if (!result.ok) {
|
|
@@ -39,7 +43,7 @@ export async function buildIntegratedDocuments(opts) {
|
|
|
39
43
|
}
|
|
40
44
|
return { ok: false, error: 'document diagnostics', pages: 0 };
|
|
41
45
|
}
|
|
42
|
-
writeMountRootRedirects(result.manifest, outDir);
|
|
46
|
+
writeMountRootRedirects(result.manifest, outDir, projectRoot);
|
|
43
47
|
log.info(`document mount: pages=${result.pages.length} → ${path.relative(process.cwd(), outDir) || '.'}`);
|
|
44
48
|
return { ok: true, pages: result.pages.length };
|
|
45
49
|
}
|
|
@@ -50,39 +54,43 @@ export async function buildIntegratedDocuments(opts) {
|
|
|
50
54
|
}
|
|
51
55
|
}
|
|
52
56
|
/**
|
|
53
|
-
* Emit `{routeBase}/index.html`
|
|
57
|
+
* Emit `{routeBase}/index.html` for integrated mounts.
|
|
58
|
+
* `routing.strategy: none` → copy default-locale docs index (LocaleId is Host state).
|
|
59
|
+
* prefix strategy → redirect HTML to `{routeBase}/{defaultLocale}/`.
|
|
54
60
|
* @param {import('./document-schema.js').DocumentManifest} manifest
|
|
55
61
|
* @param {string} outDir
|
|
62
|
+
* @param {string} projectRoot
|
|
56
63
|
*/
|
|
57
|
-
function writeMountRootRedirects(manifest, outDir) {
|
|
64
|
+
function writeMountRootRedirects(manifest, outDir, projectRoot) {
|
|
58
65
|
const defaultLocale = manifest.defaultLocale || manifest.locales?.[0];
|
|
59
66
|
if (!defaultLocale)
|
|
60
67
|
return;
|
|
68
|
+
const routing = loadLocalesRouting(projectRoot) || { strategy: 'prefix' };
|
|
61
69
|
for (const mount of manifest.mounts || []) {
|
|
62
70
|
if (!mount?.routeBase || mount.routeBase === '/')
|
|
63
71
|
continue;
|
|
64
72
|
const base = String(mount.routeBase).replace(/\/$/, '');
|
|
65
|
-
const target = `${base}/${defaultLocale}/`;
|
|
66
73
|
const relDir = base.replace(/^\//, '');
|
|
67
74
|
const abs = path.join(outDir, relDir, 'index.html');
|
|
68
75
|
fs.mkdirSync(path.dirname(abs), { recursive: true });
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
if (routing.strategy === 'none' || routing.strategy === 'domain') {
|
|
77
|
+
const srcRel = pageHtmlRel(base, defaultLocale, 'index');
|
|
78
|
+
const srcAbs = path.join(outDir, srcRel);
|
|
79
|
+
if (fs.existsSync(srcAbs)) {
|
|
80
|
+
fs.copyFileSync(srcAbs, abs);
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const target = `${base}/${defaultLocale}/`;
|
|
85
|
+
const native = requireNativeAddon();
|
|
86
|
+
if (typeof native.generateRedirectHtml !== 'function') {
|
|
87
|
+
throw new Error('vmz native addon missing generateRedirectHtml — rebuild with `pnpm napi:build`');
|
|
88
|
+
}
|
|
89
|
+
const html = native.generateRedirectHtml({
|
|
90
|
+
lang: defaultLocale,
|
|
91
|
+
target,
|
|
92
|
+
title: 'Documents',
|
|
93
|
+
});
|
|
82
94
|
fs.writeFileSync(abs, html, 'utf8');
|
|
83
95
|
}
|
|
84
96
|
}
|
|
85
|
-
/** @param {string} s */
|
|
86
|
-
function escapeAttr(s) {
|
|
87
|
-
return String(s).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<');
|
|
88
|
-
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Integrated DocumentMount — compile host chrome via DocumentLayout + createRenderHost.
|
|
3
|
+
* Replaces the removed regex template lowering in document-host-chrome.ts.
|
|
4
|
+
*/
|
|
5
|
+
/** @param {string} distDir */
|
|
6
|
+
export declare function resolveDocumentLayoutChunkId(distDir: any): string;
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} distDir
|
|
9
|
+
*/
|
|
10
|
+
export declare function assertIntegratedDistReady(distDir: any): string;
|
|
11
|
+
/**
|
|
12
|
+
* @param {string} html
|
|
13
|
+
*/
|
|
14
|
+
export declare function assertCompiledShellHtml(html: any): void;
|
|
15
|
+
/**
|
|
16
|
+
* @param {string} distDir
|
|
17
|
+
* @param {string} localeId
|
|
18
|
+
* @param {string} slotHtml
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderCompiledDocumentLayout(distDir: any, localeId: any, slotHtml: any): Promise<any>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Integrated DocumentMount — compile host chrome via DocumentLayout + createRenderHost.
|
|
4
|
+
* Replaces the removed regex template lowering in document-host-chrome.ts.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { pathToFileURL } from 'node:url';
|
|
9
|
+
import { createRenderHost } from '@vmz/core/render-host';
|
|
10
|
+
/** @param {string} distDir */
|
|
11
|
+
export function resolveDocumentLayoutChunkId(distDir) {
|
|
12
|
+
for (const chunkId of ['layouts/DocumentLayout', 'components/DocumentLayout']) {
|
|
13
|
+
if (fs.existsSync(path.join(distDir, `${chunkId}.client.js`)))
|
|
14
|
+
return chunkId;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @param {string} distDir
|
|
20
|
+
*/
|
|
21
|
+
export function assertIntegratedDistReady(distDir) {
|
|
22
|
+
const dom = path.join(distDir, 'vmz-dom.js');
|
|
23
|
+
if (!fs.existsSync(dom)) {
|
|
24
|
+
throw new Error('integrated document mount requires vmz build output (vmz-dom.js in app dist). Run `vmz build` before document emit.');
|
|
25
|
+
}
|
|
26
|
+
const chunkId = resolveDocumentLayoutChunkId(distDir);
|
|
27
|
+
if (!chunkId) {
|
|
28
|
+
throw new Error('integrated document mount requires compiled DocumentLayout (add src/layouts/DocumentLayout.vmz and rebuild)');
|
|
29
|
+
}
|
|
30
|
+
return chunkId;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @param {string} html
|
|
34
|
+
*/
|
|
35
|
+
export function assertCompiledShellHtml(html) {
|
|
36
|
+
const header = html.match(/<header[^>]*data-vmz-fixture="site-header"[\s\S]*?<\/header>/i)?.[0] ?? '';
|
|
37
|
+
const footer = html.match(/<footer[^>]*data-vmz-fixture="site-footer"[\s\S]*?<\/footer>/i)?.[0] ?? '';
|
|
38
|
+
for (const part of [header, footer]) {
|
|
39
|
+
const leak = part.match(/\{[A-Za-z][A-Za-z0-9]*\}/);
|
|
40
|
+
if (leak) {
|
|
41
|
+
throw new Error(`document layout SSR leaked binding placeholder ${leak[0]}`);
|
|
42
|
+
}
|
|
43
|
+
if (/<(?:Link|Button|Icon)\b/.test(part)) {
|
|
44
|
+
throw new Error('document layout SSR leaked uncompiled VMZ component tag in chrome');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (!header || !footer) {
|
|
48
|
+
throw new Error('document layout SSR missing compiled SiteHeader/SiteFooter fixtures');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @param {string} distDir
|
|
53
|
+
* @param {string} chunkId
|
|
54
|
+
*/
|
|
55
|
+
async function loadCtor(distDir, chunkId) {
|
|
56
|
+
const href = pathToFileURL(path.join(distDir, `${chunkId}.client.js`)).href;
|
|
57
|
+
const mod = await import(`${href}?t=${Date.now()}`);
|
|
58
|
+
return mod.default;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @param {string} distDir
|
|
62
|
+
* @param {string} localeId
|
|
63
|
+
* @param {string} slotHtml
|
|
64
|
+
*/
|
|
65
|
+
export async function renderCompiledDocumentLayout(distDir, localeId, slotHtml) {
|
|
66
|
+
const chunkId = assertIntegratedDistReady(distDir);
|
|
67
|
+
const prevHint = globalThis.__vmzLocaleIdHint;
|
|
68
|
+
globalThis.__vmzLocaleIdHint = localeId;
|
|
69
|
+
try {
|
|
70
|
+
if (typeof globalThis.document !== 'undefined' && globalThis.document?.documentElement) {
|
|
71
|
+
globalThis.document.documentElement.setAttribute('data-locale', localeId);
|
|
72
|
+
globalThis.document.documentElement.setAttribute('lang', localeId);
|
|
73
|
+
}
|
|
74
|
+
const host = await createRenderHost(distDir, { strictDeployment: true, preload: 'none' });
|
|
75
|
+
await host.ensureComponents([chunkId]);
|
|
76
|
+
const Layout = await loadCtor(distDir, chunkId);
|
|
77
|
+
const html = await host.renderToString(Layout, {}, { slotHtml });
|
|
78
|
+
assertCompiledShellHtml(html);
|
|
79
|
+
return html;
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
if (prevHint === undefined)
|
|
83
|
+
delete globalThis.__vmzLocaleIdHint;
|
|
84
|
+
else
|
|
85
|
+
globalThis.__vmzLocaleIdHint = prevHint;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project locale routing config for document mount (locales/locales.json5).
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @param {string} projectRoot
|
|
6
|
+
* @returns {{ strategy?: string, defaultLocale?: string } | null}
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadLocalesRouting(projectRoot: any): any;
|
|
9
|
+
/**
|
|
10
|
+
* @param {string} routeBase
|
|
11
|
+
* @param {string} pageKey
|
|
12
|
+
*/
|
|
13
|
+
export declare function docsRouteNone(routeBase: any, pageKey: any): string;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* Project locale routing config for document mount (locales/locales.json5).
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} projectRoot
|
|
9
|
+
* @returns {{ strategy?: string, defaultLocale?: string } | null}
|
|
10
|
+
*/
|
|
11
|
+
export function loadLocalesRouting(projectRoot) {
|
|
12
|
+
const p = path.join(projectRoot, 'locales', 'locales.json5');
|
|
13
|
+
if (!fs.existsSync(p))
|
|
14
|
+
return null;
|
|
15
|
+
try {
|
|
16
|
+
const raw = fs.readFileSync(p, 'utf8');
|
|
17
|
+
let s = raw.replace(/\/\*[\s\S]*?\*\//g, '').replace(/^\s*\/\/.*$/gm, '');
|
|
18
|
+
const m = s.match(/routing\s*:\s*\{([\s\S]*?)\}/);
|
|
19
|
+
if (!m)
|
|
20
|
+
return null;
|
|
21
|
+
let block = `{${m[1]}}`;
|
|
22
|
+
block = block.replace(/([,{]\s*)([A-Za-z_][A-Za-z0-9_]*)\s*:/g, '$1"$2":');
|
|
23
|
+
block = block.replace(/'([^'\\]*(?:\\.[^'\\]*)*)'/g, (_, inner) => JSON.stringify(inner));
|
|
24
|
+
block = block.replace(/,\s*([}\]])/g, '$1');
|
|
25
|
+
return JSON.parse(block);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @param {string} routeBase
|
|
33
|
+
* @param {string} pageKey
|
|
34
|
+
*/
|
|
35
|
+
export function docsRouteNone(routeBase, pageKey) {
|
|
36
|
+
const base = String(routeBase || '/').replace(/\/$/, '') || '';
|
|
37
|
+
const key = pageKey === 'index' ? '' : pageKey.replace(/\\/g, '/');
|
|
38
|
+
const parts = [base.replace(/^\//, ''), key].filter((p) => p !== '');
|
|
39
|
+
return '/' + (parts.length ? parts.join('/') : '');
|
|
40
|
+
}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import crypto from 'node:crypto';
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
|
+
import { writePrettyJsonFile } from './pretty-json.js';
|
|
9
10
|
export const EMBEDDED_RESOURCE_INDEX_SCHEMA = 'vmz.embedded.resource_index.v0';
|
|
10
11
|
/** Paths that must never enter the embedded baseline closure. */
|
|
11
12
|
const SKIP_NAMES = new Set(['vmz-serve-host.mjs', 'vmz-serve-host.js', 'node_modules', '.git']);
|
|
@@ -55,7 +56,7 @@ export function emitEmbeddedPackaging(outDir, opts = {}) {
|
|
|
55
56
|
};
|
|
56
57
|
index.indexDigest = sha256Hex(canonicalJson({ ...index, indexDigest: undefined }));
|
|
57
58
|
const indexPath = path.join(vmzDir, 'embedded-resource-index.json');
|
|
58
|
-
|
|
59
|
+
writePrettyJsonFile(indexPath, index);
|
|
59
60
|
// Optional include_bytes entry point for Rust packaging adapters
|
|
60
61
|
const rsPath = path.join(vmzDir, 'embedded_site.rs');
|
|
61
62
|
fs.writeFileSync(rsPath, `// @generated by vmz — rust-embedded packaging adapter (do not edit)
|
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,14 @@ export declare function handshake(host?: {
|
|
|
53
53
|
* @returns {string | null}
|
|
54
54
|
*/
|
|
55
55
|
export declare function resolveCoreRuntimeDist(): string;
|
|
56
|
+
/** Runtime companions required by dist/vmz-serve-host.mjs relative imports. */
|
|
57
|
+
export declare const SERVE_HOST_RUNTIME_FILES: string[][];
|
|
58
|
+
/**
|
|
59
|
+
* Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
|
|
60
|
+
* @param {string} outDir
|
|
61
|
+
* @param {string} [coreDist]
|
|
62
|
+
*/
|
|
63
|
+
export declare function materializeServeHostRuntime(outDir: any, coreDist?: string): void;
|
|
56
64
|
/**
|
|
57
65
|
* @typedef {object} WorkspaceOptions
|
|
58
66
|
* @property {string} root
|
|
@@ -84,6 +92,7 @@ export declare function lowerMiniprogramBindingEventJson(rootPath: any): any;
|
|
|
84
92
|
export declare function lowerMiniprogramStructureJson(rootPath: any): any;
|
|
85
93
|
export declare function lowerMiniprogramRouteServerStyleJson(rootPath: any): any;
|
|
86
94
|
export declare function lowerMiniprogramToolingDeployJson(rootPath: any): any;
|
|
95
|
+
export declare function lowerMiniprogramWechatPackagingJson(rootPath: any): any;
|
|
87
96
|
export declare function lowerMiniprogramMultiAdapterJson(rootPath: any): any;
|
|
88
97
|
import { createMiniHost } from './mini-host.js';
|
|
89
98
|
export { createMiniHost };
|
|
@@ -146,6 +155,7 @@ export declare function checkApplicationHostCompositionJson(hostRoot: any, packa
|
|
|
146
155
|
*/
|
|
147
156
|
export declare function checkApplicationDevTestDeployJson(hostRoot: any, packageRoots: any, dirtyPaths?: any[]): any;
|
|
148
157
|
export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
|
|
158
|
+
export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
|
|
149
159
|
export { findAvailablePort } from './port.js';
|
|
150
160
|
export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
|
|
151
161
|
export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
|
|
@@ -156,12 +166,15 @@ export { cmdApplication, runCheck as runApplicationCheck } from './application-c
|
|
|
156
166
|
export { cmdArtifact } from './release-cmd.js';
|
|
157
167
|
export { ARTIFACT_DIFF_SCHEMA, DELIVERY_ARTIFACT_MANIFEST_SCHEMA, RELEASE_ENVELOPE_SCHEMA, ROUTE_REALIZATION_TABLE_SCHEMA, atomicWritePointer, canonicalJson, diffArtifacts, loadReleaseEnvelope, packRelease, publishRelease, readPointer, rollbackRelease, sha256File, sha256Hex, } from './release-pack.js';
|
|
158
168
|
export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.js';
|
|
159
|
-
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
|
|
169
|
+
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, rewriteCssImports, rewriteJsEntryRelativeImports, } from './content-addressed-assets.js';
|
|
170
|
+
export { SITE_FAVICON_SCHEMA, emitSiteFavicon, readSiteFaviconHeadHtml, packPngsIntoIco, } from './site-favicon.js';
|
|
171
|
+
export { PUBLIC_STATIC_ASSETS_SCHEMA, emitPublicStaticAssets, } from './public-static-assets.js';
|
|
160
172
|
export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML, CACHE_ASSET_IMMUTABLE, CACHE_META, buildCdnPolicyManifest, emitCdnPolicy, projectCdnAdapter, createLocalStaticHandler, listenLocalStaticHost, matchGlob, } from './cdn-policy.js';
|
|
161
173
|
export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
|
|
162
174
|
export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
|
|
163
175
|
export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
|
|
164
|
-
export {
|
|
176
|
+
export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
|
|
177
|
+
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeProfileArtifactName, resolveProfileArtifactDir, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
165
178
|
export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
|
|
166
179
|
export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
|
|
167
180
|
export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
|
|
@@ -231,6 +244,8 @@ declare const _default: {
|
|
|
231
244
|
expectedProtocol: typeof expectedProtocol;
|
|
232
245
|
resolveNativePath: typeof resolveNativePath;
|
|
233
246
|
resolveCoreRuntimeDist: typeof resolveCoreRuntimeDist;
|
|
247
|
+
materializeServeHostRuntime: typeof materializeServeHostRuntime;
|
|
248
|
+
SERVE_HOST_RUNTIME_FILES: string[][];
|
|
234
249
|
loadNative: typeof loadNative;
|
|
235
250
|
getProtocolVersions: typeof getProtocolVersions;
|
|
236
251
|
handshake: typeof handshake;
|
|
@@ -244,6 +259,7 @@ declare const _default: {
|
|
|
244
259
|
lowerMiniprogramStructureJson: typeof lowerMiniprogramStructureJson;
|
|
245
260
|
lowerMiniprogramRouteServerStyleJson: typeof lowerMiniprogramRouteServerStyleJson;
|
|
246
261
|
lowerMiniprogramToolingDeployJson: typeof lowerMiniprogramToolingDeployJson;
|
|
262
|
+
lowerMiniprogramWechatPackagingJson: typeof lowerMiniprogramWechatPackagingJson;
|
|
247
263
|
lowerMiniprogramMultiAdapterJson: typeof lowerMiniprogramMultiAdapterJson;
|
|
248
264
|
createMiniHost: typeof createMiniHost;
|
|
249
265
|
queryProfileProtocolCatalog: typeof queryProfileProtocolCatalog;
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* Coarse-grained only — no transform hooks / per-AST callbacks.
|
|
5
5
|
*/
|
|
6
6
|
import { createRequire } from 'node:module';
|
|
7
|
-
import { existsSync } from 'node:fs';
|
|
7
|
+
import { copyFileSync, existsSync } from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { materializeWechatPackaging } from './wechat-packaging.js';
|
|
10
11
|
export { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLAN_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TEST_PROTOCOL, TEST_MANIFEST_SCHEMA, TEST_REPORT_SCHEMA, protocolCatalog, dxCatalog, testCatalog, applicationCatalog, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, TARGET_DIAG_DOM_LEAK_IN_PLAN, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_MAPPING_ENTRY_SCHEMA, PROFILE_LIFECYCLE_MAPPING_TABLE_SCHEMA, PROFILE_RECOVERY_POLICY_SCHEMA, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, LOCALE_PROTOCOL, LOCALE_MANIFEST_SCHEMA, LOCALE_MESSAGE_CATALOG_SCHEMA, LOCALE_MESSAGE_NODE_SCHEMA, LOCALE_CHECK_SCHEMA, LOCALE_TYPED_MODULE_SCHEMA, LOCALE_RENAME_SCHEMA, LOCALE_APPLICATION_CONTEXT_SCHEMA, LOCALE_FORMATTER_CONTEXT_SCHEMA, LOCALE_TRANSITION_SCHEMA, LOCALE_RUNTIME_CHECK_SCHEMA, LOCALE_FALLBACK_RESOLUTION_SCHEMA, FORMATTER_DATA_VERSION, LOCALE_ROUTE_REALIZATION_SCHEMA, LOCALE_PAGE_META_SCHEMA, LOCALE_LINK_RESOLUTION_SCHEMA, LOCALE_ROUTER_CHECK_SCHEMA, LOCALE_DELIVERY_RESOLUTION_SCHEMA, LOCALE_CHUNK_MANIFEST_SCHEMA, LOCALE_NATIVE_PACK_SCHEMA, LOCALE_MINI_PACKAGE_PROOF_SCHEMA, LOCALE_SERVER_ERROR_ENVELOPE_SCHEMA, LOCALE_DELIVERY_CHECK_SCHEMA, LOCALE_EXPLAIN_SCHEMA, LOCALE_DIFF_SCHEMA, LOCALE_EXTRACT_SCHEMA, LOCALE_PSEUDO_SCHEMA, LOCALE_CONFORMANCE_SCHEMA, LOCALE_DIAG_MANIFEST_MISSING, LOCALE_DIAG_ID_INVALID, LOCALE_DIAG_FALLBACK_CYCLE, LOCALE_DIAG_MESSAGE_PARAMETER_MISMATCH, LOCALE_DIAG_MESSAGE_UNUSED, LOCALE_DIAG_FORMATTER_CONTEXT_INCOMPLETE, LOCALE_DIAG_FORMATTER_VERSION_MISMATCH, LOCALE_DIAG_DIGEST_MISMATCH, LOCALE_DIAG_TRANSITION_PARTIAL, LOCALE_DIAG_TRANSITION_UNSUPPORTED, LOCALE_DIAG_TRANSITION_LOAD_FAILED, LOCALE_DIAG_MACHINE_DEFAULT_FORBIDDEN, LOCALE_DIAG_MESSAGE_MIXED_LOCALE, LOCALE_DIAG_STALE_GENERATION, LOCALE_DIAG_ROUTE_COLLISION, LOCALE_DIAG_CANONICAL_MISSING, LOCALE_DIAG_HREFLANG_INCOMPLETE, LOCALE_DIAG_META_LOCALE_MISMATCH, LOCALE_DIAG_LINK_HARDCODED_PATH, LOCALE_DIAG_CACHE_KEY_STEALS_CONTENT, LOCALE_DIAG_PREFIX_OMIT_WITHOUT_REDIRECT, LOCALE_DIAG_DELIVERY_FULL_BUNDLE, LOCALE_DIAG_CHUNK_HASH_MISMATCH, LOCALE_DIAG_NATIVE_PACK_UNSIGNED, LOCALE_DIAG_NATIVE_PACK_HAS_JS, LOCALE_DIAG_NATIVE_PACK_APP_MISMATCH, LOCALE_DIAG_MINI_CROSS_PACKAGE_UNPROVEN, LOCALE_DIAG_SERVER_TRANSLATED_ERROR, LOCALE_DIAG_SERVER_FORMAT_WITHOUT_CONTEXT, LOCALE_DIAG_HOST_MESSAGE_DIVERGENCE, LOCALE_DIAG_MESSAGE_DYNAMIC_ID_UNBOUNDED, LOCALE_DIAG_HARDCODED_TEXT, LOCALE_DIAG_PSEUDO_PRODUCTION_FORBIDDEN, LOCALE_DIAG_CONFORMANCE_DIVERGENCE, LOCALE_DIAG_EXPLAIN_UNKNOWN, LOCALE_VIRTUAL_MODULE_PREFIX, localeCatalog, } from '@vmz/protocol';
|
|
11
12
|
import { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, localeCatalog, } from '@vmz/protocol';
|
|
12
13
|
const require = createRequire(import.meta.url);
|
|
@@ -143,6 +144,33 @@ export function resolveCoreRuntimeDist() {
|
|
|
143
144
|
return nested;
|
|
144
145
|
return null;
|
|
145
146
|
}
|
|
147
|
+
/** Runtime companions required by dist/vmz-serve-host.mjs relative imports. */
|
|
148
|
+
export const SERVE_HOST_RUNTIME_FILES = [
|
|
149
|
+
['serve-host.mjs', 'vmz-serve-host.mjs'],
|
|
150
|
+
['native-addon.js', 'native-addon.js'],
|
|
151
|
+
['list-client-components.js', 'list-client-components.js'],
|
|
152
|
+
['deployment-registry.js', 'deployment-registry.js'],
|
|
153
|
+
['render-host.js', 'render-host.js'],
|
|
154
|
+
['route-layout-chain.js', 'route-layout-chain.js'],
|
|
155
|
+
];
|
|
156
|
+
/**
|
|
157
|
+
* Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
|
|
158
|
+
* @param {string} outDir
|
|
159
|
+
* @param {string} [coreDist]
|
|
160
|
+
*/
|
|
161
|
+
export function materializeServeHostRuntime(outDir, coreDist = resolveCoreRuntimeDist()) {
|
|
162
|
+
if (!coreDist) {
|
|
163
|
+
throw new Error('materializeServeHostRuntime: @vmz/core dist not found');
|
|
164
|
+
}
|
|
165
|
+
for (const [srcName, outName] of SERVE_HOST_RUNTIME_FILES) {
|
|
166
|
+
const src = path.join(coreDist, srcName);
|
|
167
|
+
const dst = path.join(outDir, outName);
|
|
168
|
+
if (!existsSync(src)) {
|
|
169
|
+
throw new Error(`materializeServeHostRuntime: missing ${src}`);
|
|
170
|
+
}
|
|
171
|
+
copyFileSync(src, dst);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
146
174
|
/**
|
|
147
175
|
* @typedef {object} WorkspaceOptions
|
|
148
176
|
* @property {string} root
|
|
@@ -158,7 +186,7 @@ export function createWorkspace(options) {
|
|
|
158
186
|
const native = loadNative();
|
|
159
187
|
const protocol = options.protocol ?? expectedProtocol();
|
|
160
188
|
const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
|
|
161
|
-
|
|
189
|
+
const ws = native.JsWorkspace.create({
|
|
162
190
|
root: options.root,
|
|
163
191
|
outDir: options.outDir,
|
|
164
192
|
runtimeDist,
|
|
@@ -169,6 +197,25 @@ export function createWorkspace(options) {
|
|
|
169
197
|
pluginProtocol: protocol.pluginProtocol,
|
|
170
198
|
},
|
|
171
199
|
});
|
|
200
|
+
const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
|
|
201
|
+
const wrappedPack = () => {
|
|
202
|
+
materializeWechatPackaging(options.root);
|
|
203
|
+
return pack();
|
|
204
|
+
};
|
|
205
|
+
try {
|
|
206
|
+
ws.lowerMiniprogramWechatPackaging = wrappedPack;
|
|
207
|
+
return ws;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return new Proxy(ws, {
|
|
211
|
+
get(target, prop, receiver) {
|
|
212
|
+
if (prop === 'lowerMiniprogramWechatPackaging')
|
|
213
|
+
return wrappedPack;
|
|
214
|
+
const value = Reflect.get(target, prop, receiver);
|
|
215
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
172
219
|
}
|
|
173
220
|
/**
|
|
174
221
|
* frozen application composition protocol catalog.
|
|
@@ -216,6 +263,11 @@ export function lowerMiniprogramToolingDeployJson(rootPath) {
|
|
|
216
263
|
const native = loadNative();
|
|
217
264
|
return native.lowerMiniprogramToolingDeployJson(rootPath);
|
|
218
265
|
}
|
|
266
|
+
export function lowerMiniprogramWechatPackagingJson(rootPath) {
|
|
267
|
+
const native = loadNative();
|
|
268
|
+
materializeWechatPackaging(rootPath);
|
|
269
|
+
return native.lowerMiniprogramWechatPackagingJson(rootPath);
|
|
270
|
+
}
|
|
219
271
|
export function lowerMiniprogramMultiAdapterJson(rootPath) {
|
|
220
272
|
const native = loadNative();
|
|
221
273
|
return native.lowerMiniprogramMultiAdapterJson(rootPath);
|
|
@@ -344,6 +396,7 @@ export function checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyP
|
|
|
344
396
|
return native.checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyPaths);
|
|
345
397
|
}
|
|
346
398
|
export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
|
|
399
|
+
export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
|
|
347
400
|
export { findAvailablePort } from './port.js';
|
|
348
401
|
export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
|
|
349
402
|
export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
|
|
@@ -356,12 +409,15 @@ export { ARTIFACT_DIFF_SCHEMA, DELIVERY_ARTIFACT_MANIFEST_SCHEMA, RELEASE_ENVELO
|
|
|
356
409
|
// APPLICATION_ARTIFACT_SCHEMA lives in @vmz/protocol (already re-exported above);
|
|
357
410
|
// release-pack keeps a local constant for envelope writes — do not dual-export the name.
|
|
358
411
|
export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.js';
|
|
359
|
-
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
|
|
412
|
+
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, rewriteCssImports, rewriteJsEntryRelativeImports, } from './content-addressed-assets.js';
|
|
413
|
+
export { SITE_FAVICON_SCHEMA, emitSiteFavicon, readSiteFaviconHeadHtml, packPngsIntoIco, } from './site-favicon.js';
|
|
414
|
+
export { PUBLIC_STATIC_ASSETS_SCHEMA, emitPublicStaticAssets, } from './public-static-assets.js';
|
|
360
415
|
export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML, CACHE_ASSET_IMMUTABLE, CACHE_META, buildCdnPolicyManifest, emitCdnPolicy, projectCdnAdapter, createLocalStaticHandler, listenLocalStaticHost, matchGlob, } from './cdn-policy.js';
|
|
361
416
|
export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
|
|
362
417
|
export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
|
|
363
418
|
export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
|
|
364
|
-
export {
|
|
419
|
+
export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
|
|
420
|
+
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeProfileArtifactName, resolveProfileArtifactDir, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
365
421
|
export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
|
|
366
422
|
export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
|
|
367
423
|
export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
|
|
@@ -431,6 +487,8 @@ export default {
|
|
|
431
487
|
expectedProtocol,
|
|
432
488
|
resolveNativePath,
|
|
433
489
|
resolveCoreRuntimeDist,
|
|
490
|
+
materializeServeHostRuntime,
|
|
491
|
+
SERVE_HOST_RUNTIME_FILES,
|
|
434
492
|
loadNative,
|
|
435
493
|
getProtocolVersions,
|
|
436
494
|
handshake,
|
|
@@ -444,6 +502,7 @@ export default {
|
|
|
444
502
|
lowerMiniprogramStructureJson,
|
|
445
503
|
lowerMiniprogramRouteServerStyleJson,
|
|
446
504
|
lowerMiniprogramToolingDeployJson,
|
|
505
|
+
lowerMiniprogramWechatPackagingJson,
|
|
447
506
|
lowerMiniprogramMultiAdapterJson,
|
|
448
507
|
createMiniHost,
|
|
449
508
|
queryProfileProtocolCatalog,
|
package/dist/locale-check.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import JSON5 from 'json5';
|
|
10
|
+
import { requireNativeAddon } from './native-addon.js';
|
|
11
|
+
import { writePrettyJsonFile } from './pretty-json.js';
|
|
10
12
|
import { DIAG_CATALOG_CONFLICT, DIAG_CATALOG_PARSE, DIAG_DEFAULT_MISSING, DIAG_DIR_MISSING, DIAG_DIR_ORPHAN, DIAG_FALLBACK_CYCLE, DIAG_FALLBACK_UNKNOWN, DIAG_ID_COLLISION, DIAG_ID_INVALID, DIAG_LAYOUT_ILLEGAL, DIAG_MANIFEST_MISSING, DIAG_MESSAGE_ARRAY_FORBIDDEN, DIAG_MESSAGE_HTML_FORBIDDEN, DIAG_MESSAGE_MISSING_DEFAULT, DIAG_MESSAGE_PARAMETER_MISMATCH, DIAG_MESSAGE_SYNTAX_INVALID, DIAG_MESSAGE_UNUSED, LOCALE_CHECK_SCHEMA, LOCALE_ID_RE, LOCALE_MANIFEST_SCHEMA, LOCALE_RESERVED_TOP, LOCALE_TYPED_MODULE_SCHEMA, LOCALE_VIRTUAL_MODULE_PREFIX, MESSAGE_CATALOG_SCHEMA, MESSAGE_NODE_SCHEMA, } from './locale-schema.js';
|
|
11
13
|
/**
|
|
12
14
|
* @param {string} literal
|
|
@@ -668,25 +670,19 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
668
670
|
fs.mkdirSync(outDir, { recursive: true });
|
|
669
671
|
/** @type {string[]} */
|
|
670
672
|
const written = [];
|
|
673
|
+
const native = requireNativeAddon();
|
|
674
|
+
if (typeof native.generateLocaleTypedModule !== 'function') {
|
|
675
|
+
throw new Error('vmz native addon missing generateLocaleTypedModule — rebuild with `pnpm napi:build`');
|
|
676
|
+
}
|
|
671
677
|
for (const mod of report.typedModules || []) {
|
|
672
|
-
const
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
for (const exp of mod.exports) {
|
|
678
|
-
if (!exp.params.length) {
|
|
679
|
-
lines.push(`export declare function ${exp.exportName}(): LocalizedText;`);
|
|
680
|
-
}
|
|
681
|
-
else {
|
|
682
|
-
const args = exp.params.map((p) => `${p.name}: ${p.kind === 'plural' || p.kind === 'number' ? 'number' : 'string'}`).join('; ');
|
|
683
|
-
lines.push(`export declare function ${exp.exportName}(args: { ${args} }): LocalizedText;`);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
lines.push('');
|
|
678
|
+
const exports = (mod.exports || []).map((exp) => ({
|
|
679
|
+
exportName: exp.exportName,
|
|
680
|
+
params: (exp.params || []).map((p) => ({ name: p.name, kind: p.kind || 'string' })),
|
|
681
|
+
}));
|
|
682
|
+
const text = native.generateLocaleTypedModule(mod.module, exports);
|
|
687
683
|
const file = path.join(outDir, `${mod.catalogId}.d.ts`);
|
|
688
684
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
689
|
-
fs.writeFileSync(file,
|
|
685
|
+
fs.writeFileSync(file, text, 'utf8');
|
|
690
686
|
written.push(file);
|
|
691
687
|
}
|
|
692
688
|
const index = {
|
|
@@ -694,7 +690,7 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
694
690
|
modules: (report.typedModules || []).map((m) => m.module),
|
|
695
691
|
outDir,
|
|
696
692
|
};
|
|
697
|
-
|
|
693
|
+
writePrettyJsonFile(path.join(outDir, 'index.json'), index);
|
|
698
694
|
return written;
|
|
699
695
|
}
|
|
700
696
|
/**
|
|
@@ -724,59 +720,30 @@ export function emitLocaleRuntimeModules(projectRoot, distDir) {
|
|
|
724
720
|
const localesOut = path.join(distDir, 'locales');
|
|
725
721
|
fs.mkdirSync(localesOut, { recursive: true });
|
|
726
722
|
for (const mod of report.typedModules || []) {
|
|
727
|
-
const
|
|
728
|
-
`/** Generated ${mod.module} — runtime LocalizedText (defaultLocale=${defaultLocale}) */`,
|
|
729
|
-
`const __vmzDefaultLocale = ${JSON.stringify(defaultLocale)};`,
|
|
730
|
-
`function __vmzLocaleId() {`,
|
|
731
|
-
` if (typeof globalThis !== "undefined" && globalThis.__vmzLocaleIdHint) {`,
|
|
732
|
-
` return String(globalThis.__vmzLocaleIdHint);`,
|
|
733
|
-
` }`,
|
|
734
|
-
` if (typeof document !== "undefined") {`,
|
|
735
|
-
` const d = document.documentElement?.getAttribute("data-locale");`,
|
|
736
|
-
` if (d) return d;`,
|
|
737
|
-
` const lang = document.documentElement?.lang;`,
|
|
738
|
-
` if (lang === "en" || lang === "en-US" || lang === "en-us") return "en-us";`,
|
|
739
|
-
` if (lang === "zh" || lang === "zh-CN" || lang === "zh-Hans" || lang === "zh-hans") return "zh-hans";`,
|
|
740
|
-
` }`,
|
|
741
|
-
` try {`,
|
|
742
|
-
` const stored = localStorage.getItem("vmz.locale");`,
|
|
743
|
-
` if (stored) return stored;`,
|
|
744
|
-
` } catch {}`,
|
|
745
|
-
` return __vmzDefaultLocale;`,
|
|
746
|
-
`}`,
|
|
747
|
-
`function __vmzFormat(template, args) {`,
|
|
748
|
-
` if (!args) return String(template ?? "");`,
|
|
749
|
-
` return String(template ?? "").replace(/\\{(\\w+)(?:,\\s*\\w+)?\\}/g, (m, name) =>`,
|
|
750
|
-
` Object.prototype.hasOwnProperty.call(args, name) ? String(args[name]) : m`,
|
|
751
|
-
` );`,
|
|
752
|
-
`}`,
|
|
753
|
-
`function __vmzPick(variants, args) {`,
|
|
754
|
-
` const id = __vmzLocaleId();`,
|
|
755
|
-
` const template = variants[id] ?? variants[__vmzDefaultLocale] ?? "";`,
|
|
756
|
-
` return __vmzFormat(template, args);`,
|
|
757
|
-
`}`,
|
|
758
|
-
'',
|
|
759
|
-
];
|
|
723
|
+
const exports = [];
|
|
760
724
|
for (const exp of mod.exports || []) {
|
|
761
725
|
const node = byId.get(exp.messageId);
|
|
762
|
-
|
|
726
|
+
/** @type {string[][]} */
|
|
727
|
+
const variants = [];
|
|
763
728
|
if (node?.variants) {
|
|
764
729
|
for (const [loc, v] of Object.entries(node.variants)) {
|
|
765
|
-
variants[loc
|
|
730
|
+
variants.push([loc, v.template]);
|
|
766
731
|
}
|
|
767
732
|
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
733
|
+
exports.push({
|
|
734
|
+
exportName: exp.exportName,
|
|
735
|
+
variants,
|
|
736
|
+
hasParams: (exp.params || []).length > 0,
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
const native = requireNativeAddon();
|
|
740
|
+
if (typeof native.generateLocaleRuntimeModule !== 'function') {
|
|
741
|
+
throw new Error('vmz native addon missing generateLocaleRuntimeModule — rebuild with `pnpm napi:build`');
|
|
775
742
|
}
|
|
776
|
-
|
|
743
|
+
const code = native.generateLocaleRuntimeModule(defaultLocale, exports);
|
|
777
744
|
const file = path.join(localesOut, `${mod.catalogId}.js`);
|
|
778
745
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
779
|
-
fs.writeFileSync(file,
|
|
746
|
+
fs.writeFileSync(file, code, 'utf8');
|
|
780
747
|
written.push(file);
|
|
781
748
|
}
|
|
782
749
|
rewriteLocaleImportsInDist(distDir);
|