@vmz/vmz 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/build-assemble.js +3 -4
  2. package/dist/cdn-policy.js +4 -5
  3. package/dist/cli.js +15 -50
  4. package/dist/content-addressed-assets.d.ts +2 -8
  5. package/dist/content-addressed-assets.js +34 -110
  6. package/dist/delivery-profile.d.ts +1 -11
  7. package/dist/delivery-profile.js +1 -70
  8. package/dist/dev-session.d.ts +0 -1
  9. package/dist/dev-session.js +64 -220
  10. package/dist/document-build.js +34 -61
  11. package/dist/document-cmd.js +9 -2
  12. package/dist/document-enrich.d.ts +1 -2
  13. package/dist/document-enrich.js +4 -15
  14. package/dist/document-integrate.js +21 -28
  15. package/dist/embedded-packaging.js +1 -2
  16. package/dist/index.d.ts +1 -15
  17. package/dist/index.js +3 -58
  18. package/dist/locale-check.js +61 -28
  19. package/dist/locale-cmd.js +42 -10
  20. package/dist/locale-route-emit.d.ts +1 -4
  21. package/dist/locale-route-emit.js +32 -7
  22. package/dist/locale-router.js +8 -26
  23. package/dist/pack.js +2 -3
  24. package/dist/production-observability.js +2 -3
  25. package/dist/production-test-pack.js +3 -4
  26. package/dist/release-pack.js +18 -5
  27. package/dist/server-artifact.js +3 -4
  28. package/dist/site-delivery.js +3 -4
  29. package/dist/static-emit.js +78 -116
  30. package/dist/test-cmd.js +1 -2
  31. package/package.json +12 -12
  32. package/dist/dev-watch-roots.d.ts +0 -67
  33. package/dist/dev-watch-roots.js +0 -220
  34. package/dist/document-host-chrome.d.ts +0 -28
  35. package/dist/document-host-chrome.js +0 -128
  36. package/dist/native-addon.d.ts +0 -9
  37. package/dist/native-addon.js +0 -84
  38. package/dist/pretty-json.d.ts +0 -19
  39. package/dist/pretty-json.js +0 -43
  40. package/dist/route-path.d.ts +0 -35
  41. package/dist/route-path.js +0 -77
  42. package/dist/wechat-packaging.d.ts +0 -22
  43. package/dist/wechat-packaging.js +0 -59
@@ -9,16 +9,10 @@ import { DIAG } from './document-schema.js';
9
9
  * @param {string} routeBase e.g. /docs
10
10
  * @param {string} locale
11
11
  * @param {string} pageKey
12
- * @param {{ strategy?: string }} [routing]
13
12
  */
14
- export function pageRoute(routeBase, locale, pageKey, routing = {}) {
13
+ export function pageRoute(routeBase, locale, pageKey) {
15
14
  const base = String(routeBase || '/').replace(/\/$/, '') || '';
16
15
  const key = pageKey === 'index' ? '' : pageKey.replace(/\\/g, '/');
17
- const strategy = routing.strategy || 'prefix';
18
- if (strategy === 'none' || strategy === 'domain') {
19
- const parts = [base.replace(/^\//, ''), key].filter((p) => p !== '');
20
- return '/' + (parts.length ? parts.join('/') : '');
21
- }
22
16
  const parts = [base.replace(/^\//, ''), locale, key].filter((p) => p !== '');
23
17
  return '/' + parts.join('/');
24
18
  }
@@ -41,7 +35,6 @@ export function pageHtmlRel(routeBase, locale, pageKey) {
41
35
  */
42
36
  export function enrichDocumentContent(manifest, ctx) {
43
37
  const routeBase = manifest.mounts?.[0]?.routeBase || '/docs';
44
- const routing = ctx.routing || { strategy: 'prefix' };
45
38
  /** @type {Map<string, { html: string, headings: any[], links: any[], title: string, route: string, anchors: string[] }>} */
46
39
  const byId = new Map();
47
40
  /** @type {import('./document-schema.js').DocumentDiagnostic[]} */
@@ -52,7 +45,7 @@ export function enrichDocumentContent(manifest, ctx) {
52
45
  const abs = path.isAbsolute(page.sourcePath) ? page.sourcePath : path.join(manifest.root, page.sourcePath);
53
46
  const source = fs.existsSync(abs) ? fs.readFileSync(abs, 'utf8') : '';
54
47
  const analyzed = ctx.analyzeMarkdown(source);
55
- const route = pageRoute(routeBase, page.identity.locale, page.identity.pageKey, routing);
48
+ const route = pageRoute(routeBase, page.identity.locale, page.identity.pageKey);
56
49
  const anchors = analyzed.headings.map((h) => h.id);
57
50
  const title = analyzed.headings.find((h) => h.level === 1)?.text || analyzed.headings[0]?.text || page.identity.pageKey;
58
51
  // Duplicate anchors on page
@@ -68,11 +61,7 @@ export function enrichDocumentContent(manifest, ctx) {
68
61
  }
69
62
  seen.add(id);
70
63
  }
71
- const owner = `${page.identity.locale}:${page.identity.pageKey}`;
72
- if (routing.strategy === 'none' || routing.strategy === 'domain') {
73
- routeOwners.set(route, owner);
74
- }
75
- else if (routeOwners.has(route)) {
64
+ if (routeOwners.has(route)) {
76
65
  diagnostics.push({
77
66
  code: DIAG.ROUTE_DUPLICATE,
78
67
  severity: 'error',
@@ -81,7 +70,7 @@ export function enrichDocumentContent(manifest, ctx) {
81
70
  });
82
71
  }
83
72
  else {
84
- routeOwners.set(route, owner);
73
+ routeOwners.set(route, `${page.identity.locale}:${page.identity.pageKey}`);
85
74
  }
86
75
  page.route = route;
87
76
  page.anchors = anchors;
@@ -7,10 +7,7 @@ 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-host-chrome.js';
11
- import { pageHtmlRel } from './document-enrich.js';
12
10
  import { log } from './log.js';
13
- import { requireNativeAddon } from './native-addon.js';
14
11
  /**
15
12
  * @param {string} projectRoot
16
13
  */
@@ -42,7 +39,7 @@ export async function buildIntegratedDocuments(opts) {
42
39
  }
43
40
  return { ok: false, error: 'document diagnostics', pages: 0 };
44
41
  }
45
- writeMountRootRedirects(result.manifest, outDir, projectRoot);
42
+ writeMountRootRedirects(result.manifest, outDir);
46
43
  log.info(`document mount: pages=${result.pages.length} → ${path.relative(process.cwd(), outDir) || '.'}`);
47
44
  return { ok: true, pages: result.pages.length };
48
45
  }
@@ -53,43 +50,39 @@ export async function buildIntegratedDocuments(opts) {
53
50
  }
54
51
  }
55
52
  /**
56
- * Emit `{routeBase}/index.html` for integrated mounts.
57
- * `routing.strategy: none` → copy default-locale docs index (LocaleId is Host state).
58
- * prefix strategy → redirect HTML to `{routeBase}/{defaultLocale}/`.
53
+ * Emit `{routeBase}/index.html` → defaultLocale landing (for /d/ and /docs/).
59
54
  * @param {import('./document-schema.js').DocumentManifest} manifest
60
55
  * @param {string} outDir
61
- * @param {string} projectRoot
62
56
  */
63
- function writeMountRootRedirects(manifest, outDir, projectRoot) {
57
+ function writeMountRootRedirects(manifest, outDir) {
64
58
  const defaultLocale = manifest.defaultLocale || manifest.locales?.[0];
65
59
  if (!defaultLocale)
66
60
  return;
67
- const routing = loadLocalesRouting(projectRoot) || { strategy: 'prefix' };
68
61
  for (const mount of manifest.mounts || []) {
69
62
  if (!mount?.routeBase || mount.routeBase === '/')
70
63
  continue;
71
64
  const base = String(mount.routeBase).replace(/\/$/, '');
65
+ const target = `${base}/${defaultLocale}/`;
72
66
  const relDir = base.replace(/^\//, '');
73
67
  const abs = path.join(outDir, relDir, 'index.html');
74
68
  fs.mkdirSync(path.dirname(abs), { recursive: true });
75
- if (routing.strategy === 'none' || routing.strategy === 'domain') {
76
- const srcRel = pageHtmlRel(base, defaultLocale, 'index');
77
- const srcAbs = path.join(outDir, srcRel);
78
- if (fs.existsSync(srcAbs)) {
79
- fs.copyFileSync(srcAbs, abs);
80
- }
81
- continue;
82
- }
83
- const target = `${base}/${defaultLocale}/`;
84
- const native = requireNativeAddon();
85
- if (typeof native.generateRedirectHtml !== 'function') {
86
- throw new Error('vmz native addon missing generateRedirectHtml — rebuild with `pnpm napi:build`');
87
- }
88
- const html = native.generateRedirectHtml({
89
- lang: defaultLocale,
90
- target,
91
- title: 'Documents',
92
- });
69
+ const html = `<!DOCTYPE html>
70
+ <html lang="${escapeAttr(defaultLocale)}">
71
+ <head>
72
+ <meta charset="utf-8" />
73
+ <meta http-equiv="refresh" content="0;url=${escapeAttr(target)}" />
74
+ <link rel="canonical" href="${escapeAttr(target)}" />
75
+ <title>Documents</title>
76
+ </head>
77
+ <body>
78
+ <p><a href="${escapeAttr(target)}">Continue to ${escapeAttr(defaultLocale)} docs</a></p>
79
+ </body>
80
+ </html>
81
+ `;
93
82
  fs.writeFileSync(abs, html, 'utf8');
94
83
  }
95
84
  }
85
+ /** @param {string} s */
86
+ function escapeAttr(s) {
87
+ return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;');
88
+ }
@@ -6,7 +6,6 @@
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';
10
9
  export const EMBEDDED_RESOURCE_INDEX_SCHEMA = 'vmz.embedded.resource_index.v0';
11
10
  /** Paths that must never enter the embedded baseline closure. */
12
11
  const SKIP_NAMES = new Set(['vmz-serve-host.mjs', 'vmz-serve-host.js', 'node_modules', '.git']);
@@ -56,7 +55,7 @@ export function emitEmbeddedPackaging(outDir, opts = {}) {
56
55
  };
57
56
  index.indexDigest = sha256Hex(canonicalJson({ ...index, indexDigest: undefined }));
58
57
  const indexPath = path.join(vmzDir, 'embedded-resource-index.json');
59
- writePrettyJsonFile(indexPath, index);
58
+ fs.writeFileSync(indexPath, `${JSON.stringify(index, null, 2)}\n`, 'utf8');
60
59
  // Optional include_bytes entry point for Rust packaging adapters
61
60
  const rsPath = path.join(vmzDir, 'embedded_site.rs');
62
61
  fs.writeFileSync(rsPath, `// @generated by vmz — rust-embedded packaging adapter (do not edit)
package/dist/index.d.ts CHANGED
@@ -53,14 +53,6 @@ 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;
64
56
  /**
65
57
  * @typedef {object} WorkspaceOptions
66
58
  * @property {string} root
@@ -92,7 +84,6 @@ export declare function lowerMiniprogramBindingEventJson(rootPath: any): any;
92
84
  export declare function lowerMiniprogramStructureJson(rootPath: any): any;
93
85
  export declare function lowerMiniprogramRouteServerStyleJson(rootPath: any): any;
94
86
  export declare function lowerMiniprogramToolingDeployJson(rootPath: any): any;
95
- export declare function lowerMiniprogramWechatPackagingJson(rootPath: any): any;
96
87
  export declare function lowerMiniprogramMultiAdapterJson(rootPath: any): any;
97
88
  import { createMiniHost } from './mini-host.js';
98
89
  export { createMiniHost };
@@ -155,7 +146,6 @@ export declare function checkApplicationHostCompositionJson(hostRoot: any, packa
155
146
  */
156
147
  export declare function checkApplicationDevTestDeployJson(hostRoot: any, packageRoots: any, dirtyPaths?: any[]): any;
157
148
  export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
158
- export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
159
149
  export { findAvailablePort } from './port.js';
160
150
  export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
161
151
  export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
@@ -171,8 +161,7 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
171
161
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
172
162
  export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
173
163
  export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
174
- export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
175
- export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
164
+ export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
176
165
  export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
177
166
  export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
178
167
  export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
@@ -242,8 +231,6 @@ declare const _default: {
242
231
  expectedProtocol: typeof expectedProtocol;
243
232
  resolveNativePath: typeof resolveNativePath;
244
233
  resolveCoreRuntimeDist: typeof resolveCoreRuntimeDist;
245
- materializeServeHostRuntime: typeof materializeServeHostRuntime;
246
- SERVE_HOST_RUNTIME_FILES: string[][];
247
234
  loadNative: typeof loadNative;
248
235
  getProtocolVersions: typeof getProtocolVersions;
249
236
  handshake: typeof handshake;
@@ -257,7 +244,6 @@ declare const _default: {
257
244
  lowerMiniprogramStructureJson: typeof lowerMiniprogramStructureJson;
258
245
  lowerMiniprogramRouteServerStyleJson: typeof lowerMiniprogramRouteServerStyleJson;
259
246
  lowerMiniprogramToolingDeployJson: typeof lowerMiniprogramToolingDeployJson;
260
- lowerMiniprogramWechatPackagingJson: typeof lowerMiniprogramWechatPackagingJson;
261
247
  lowerMiniprogramMultiAdapterJson: typeof lowerMiniprogramMultiAdapterJson;
262
248
  createMiniHost: typeof createMiniHost;
263
249
  queryProfileProtocolCatalog: typeof queryProfileProtocolCatalog;
package/dist/index.js CHANGED
@@ -4,10 +4,9 @@
4
4
  * Coarse-grained only — no transform hooks / per-AST callbacks.
5
5
  */
6
6
  import { createRequire } from 'node:module';
7
- import { copyFileSync, existsSync } from 'node:fs';
7
+ import { 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';
11
10
  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';
12
11
  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';
13
12
  const require = createRequire(import.meta.url);
@@ -144,31 +143,6 @@ export function resolveCoreRuntimeDist() {
144
143
  return nested;
145
144
  return null;
146
145
  }
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
- ['list-client-components.js', 'list-client-components.js'],
151
- ['deployment-registry.js', 'deployment-registry.js'],
152
- ['render-host.js', 'render-host.js'],
153
- ];
154
- /**
155
- * Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
156
- * @param {string} outDir
157
- * @param {string} [coreDist]
158
- */
159
- export function materializeServeHostRuntime(outDir, coreDist = resolveCoreRuntimeDist()) {
160
- if (!coreDist) {
161
- throw new Error('materializeServeHostRuntime: @vmz/core dist not found');
162
- }
163
- for (const [srcName, outName] of SERVE_HOST_RUNTIME_FILES) {
164
- const src = path.join(coreDist, srcName);
165
- const dst = path.join(outDir, outName);
166
- if (!existsSync(src)) {
167
- throw new Error(`materializeServeHostRuntime: missing ${src}`);
168
- }
169
- copyFileSync(src, dst);
170
- }
171
- }
172
146
  /**
173
147
  * @typedef {object} WorkspaceOptions
174
148
  * @property {string} root
@@ -184,7 +158,7 @@ export function createWorkspace(options) {
184
158
  const native = loadNative();
185
159
  const protocol = options.protocol ?? expectedProtocol();
186
160
  const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
187
- const ws = native.JsWorkspace.create({
161
+ return native.JsWorkspace.create({
188
162
  root: options.root,
189
163
  outDir: options.outDir,
190
164
  runtimeDist,
@@ -195,25 +169,6 @@ export function createWorkspace(options) {
195
169
  pluginProtocol: protocol.pluginProtocol,
196
170
  },
197
171
  });
198
- const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
199
- const wrappedPack = () => {
200
- materializeWechatPackaging(options.root);
201
- return pack();
202
- };
203
- try {
204
- ws.lowerMiniprogramWechatPackaging = wrappedPack;
205
- return ws;
206
- }
207
- catch {
208
- return new Proxy(ws, {
209
- get(target, prop, receiver) {
210
- if (prop === 'lowerMiniprogramWechatPackaging')
211
- return wrappedPack;
212
- const value = Reflect.get(target, prop, receiver);
213
- return typeof value === 'function' ? value.bind(target) : value;
214
- },
215
- });
216
- }
217
172
  }
218
173
  /**
219
174
  * frozen application composition protocol catalog.
@@ -261,11 +216,6 @@ export function lowerMiniprogramToolingDeployJson(rootPath) {
261
216
  const native = loadNative();
262
217
  return native.lowerMiniprogramToolingDeployJson(rootPath);
263
218
  }
264
- export function lowerMiniprogramWechatPackagingJson(rootPath) {
265
- const native = loadNative();
266
- materializeWechatPackaging(rootPath);
267
- return native.lowerMiniprogramWechatPackagingJson(rootPath);
268
- }
269
219
  export function lowerMiniprogramMultiAdapterJson(rootPath) {
270
220
  const native = loadNative();
271
221
  return native.lowerMiniprogramMultiAdapterJson(rootPath);
@@ -394,7 +344,6 @@ export function checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyP
394
344
  return native.checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyPaths);
395
345
  }
396
346
  export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
397
- export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
398
347
  export { findAvailablePort } from './port.js';
399
348
  export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
400
349
  export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
@@ -412,8 +361,7 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
412
361
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
413
362
  export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
414
363
  export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
415
- export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
416
- export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
364
+ export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
417
365
  export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
418
366
  export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
419
367
  export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
@@ -483,8 +431,6 @@ export default {
483
431
  expectedProtocol,
484
432
  resolveNativePath,
485
433
  resolveCoreRuntimeDist,
486
- materializeServeHostRuntime,
487
- SERVE_HOST_RUNTIME_FILES,
488
434
  loadNative,
489
435
  getProtocolVersions,
490
436
  handshake,
@@ -498,7 +444,6 @@ export default {
498
444
  lowerMiniprogramStructureJson,
499
445
  lowerMiniprogramRouteServerStyleJson,
500
446
  lowerMiniprogramToolingDeployJson,
501
- lowerMiniprogramWechatPackagingJson,
502
447
  lowerMiniprogramMultiAdapterJson,
503
448
  createMiniHost,
504
449
  queryProfileProtocolCatalog,
@@ -7,8 +7,6 @@
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';
12
10
  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';
13
11
  /**
14
12
  * @param {string} literal
@@ -670,19 +668,25 @@ export function emitLocaleTypedModules(report, outDir) {
670
668
  fs.mkdirSync(outDir, { recursive: true });
671
669
  /** @type {string[]} */
672
670
  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
- }
677
671
  for (const mod of report.typedModules || []) {
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);
672
+ const lines = [
673
+ `/** Generated LocalizedText module — ${mod.module} (vmz.locale.typed_module.v0) */`,
674
+ `export type LocalizedText = string & { readonly __brand: 'LocalizedText' };`,
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('');
683
687
  const file = path.join(outDir, `${mod.catalogId}.d.ts`);
684
688
  fs.mkdirSync(path.dirname(file), { recursive: true });
685
- fs.writeFileSync(file, text, 'utf8');
689
+ fs.writeFileSync(file, lines.join('\n'), 'utf8');
686
690
  written.push(file);
687
691
  }
688
692
  const index = {
@@ -690,7 +694,7 @@ export function emitLocaleTypedModules(report, outDir) {
690
694
  modules: (report.typedModules || []).map((m) => m.module),
691
695
  outDir,
692
696
  };
693
- writePrettyJsonFile(path.join(outDir, 'index.json'), index);
697
+ fs.writeFileSync(path.join(outDir, 'index.json'), `${JSON.stringify(index, null, 2)}\n`, 'utf8');
694
698
  return written;
695
699
  }
696
700
  /**
@@ -720,30 +724,59 @@ export function emitLocaleRuntimeModules(projectRoot, distDir) {
720
724
  const localesOut = path.join(distDir, 'locales');
721
725
  fs.mkdirSync(localesOut, { recursive: true });
722
726
  for (const mod of report.typedModules || []) {
723
- const exports = [];
727
+ const lines = [
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
+ ];
724
760
  for (const exp of mod.exports || []) {
725
761
  const node = byId.get(exp.messageId);
726
- /** @type {string[][]} */
727
- const variants = [];
762
+ const variants = {};
728
763
  if (node?.variants) {
729
764
  for (const [loc, v] of Object.entries(node.variants)) {
730
- variants.push([loc, v.template]);
765
+ variants[loc] = v.template;
731
766
  }
732
767
  }
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`');
768
+ const lit = JSON.stringify(variants);
769
+ if ((exp.params || []).length) {
770
+ lines.push(`export function ${exp.exportName}(args) { return __vmzPick(${lit}, args); }`);
771
+ }
772
+ else {
773
+ lines.push(`export function ${exp.exportName}() { return __vmzPick(${lit}); }`);
774
+ }
742
775
  }
743
- const code = native.generateLocaleRuntimeModule(defaultLocale, exports);
776
+ lines.push('');
744
777
  const file = path.join(localesOut, `${mod.catalogId}.js`);
745
778
  fs.mkdirSync(path.dirname(file), { recursive: true });
746
- fs.writeFileSync(file, code, 'utf8');
779
+ fs.writeFileSync(file, lines.join('\n'), 'utf8');
747
780
  written.push(file);
748
781
  }
749
782
  rewriteLocaleImportsInDist(distDir);
@@ -12,7 +12,6 @@ import { checkLocaleRouter } from './locale-router.js';
12
12
  import { checkLocaleRuntime } from './locale-runtime.js';
13
13
  import { checkLocaleConformance, diffLocaleCatalogs, explainLocaleMessage, extractHardcodedText, pseudoLocalizeCatalog, } from './locale-tooling.js';
14
14
  import { log } from './log.js';
15
- import { emitPrettyJson, generatePrettyJson } from './pretty-json.js';
16
15
  function printLocaleHelp() {
17
16
  console.log(`vmz locale — /locales application i18n (–)
18
17
 
@@ -92,7 +91,14 @@ function cmdLocaleCheck(args) {
92
91
  const report = checkLocales({ projectRoot, strict: Boolean(args.strict) });
93
92
  const jsonOut = args.json;
94
93
  if (jsonOut) {
95
- emitPrettyJson(jsonOut, report, { logWrote: (p) => log.info(`wrote ${p}`) });
94
+ const text = JSON.stringify(report, null, 2);
95
+ if (typeof jsonOut === 'string') {
96
+ fs.writeFileSync(jsonOut, `${text}\n`, 'utf8');
97
+ log.info(`wrote ${jsonOut}`);
98
+ }
99
+ else {
100
+ console.log(text);
101
+ }
96
102
  }
97
103
  else {
98
104
  for (const d of report.diagnostics) {
@@ -145,7 +151,7 @@ function cmdLocaleRename(args) {
145
151
  const report = checkLocales({ projectRoot, checkUnused: false });
146
152
  const plan = planLocaleRename(report, fromId, toId);
147
153
  if (args.json) {
148
- emitPrettyJson(args.json, plan);
154
+ console.log(JSON.stringify(plan, null, 2));
149
155
  }
150
156
  else if (plan.status !== 'ready') {
151
157
  log.error(plan.error || 'rename failed');
@@ -175,7 +181,14 @@ function cmdLocaleRuntimeCheck(args) {
175
181
  });
176
182
  const { session: _session, ...jsonReport } = report;
177
183
  if (args.json) {
178
- emitJson(args, jsonReport);
184
+ const text = JSON.stringify(jsonReport, null, 2);
185
+ if (typeof args.json === 'string') {
186
+ fs.writeFileSync(args.json, `${text}\n`, 'utf8');
187
+ log.info(`wrote ${args.json}`);
188
+ }
189
+ else {
190
+ console.log(text);
191
+ }
179
192
  }
180
193
  else {
181
194
  for (const d of report.diagnostics) {
@@ -218,7 +231,14 @@ function cmdLocaleRouterCheck(args) {
218
231
  origin: routesFile.origin || 'https://example.test',
219
232
  });
220
233
  if (args.json) {
221
- emitJson(args, report);
234
+ const text = JSON.stringify(report, null, 2);
235
+ if (typeof args.json === 'string') {
236
+ fs.writeFileSync(args.json, `${text}\n`, 'utf8');
237
+ log.info(`wrote ${args.json}`);
238
+ }
239
+ else {
240
+ console.log(text);
241
+ }
222
242
  }
223
243
  else {
224
244
  for (const d of report.diagnostics) {
@@ -248,7 +268,14 @@ function cmdLocaleDeliveryCheck(args) {
248
268
  planVersion: 'plan.v0',
249
269
  });
250
270
  if (args.json) {
251
- emitJson(args, report);
271
+ const text = JSON.stringify(report, null, 2);
272
+ if (typeof args.json === 'string') {
273
+ fs.writeFileSync(args.json, `${text}\n`, 'utf8');
274
+ log.info(`wrote ${args.json}`);
275
+ }
276
+ else {
277
+ console.log(text);
278
+ }
252
279
  }
253
280
  else {
254
281
  for (const d of report.diagnostics) {
@@ -263,9 +290,14 @@ function cmdLocaleDeliveryCheck(args) {
263
290
  return report.status === 'ready' ? 0 : 1;
264
291
  }
265
292
  function emitJson(args, report) {
266
- emitPrettyJson(args.json, report, {
267
- logWrote: (p) => log.info(`wrote ${p}`),
268
- });
293
+ const text = JSON.stringify(report, null, 2);
294
+ if (typeof args.json === 'string') {
295
+ fs.writeFileSync(args.json, `${text}\n`, 'utf8');
296
+ log.info(`wrote ${args.json}`);
297
+ }
298
+ else {
299
+ console.log(text);
300
+ }
269
301
  }
270
302
  function cmdLocaleExplain(args) {
271
303
  const messageId = typeof args._[0] === 'string' ? args._[0] : '';
@@ -369,7 +401,7 @@ function cmdLocalePseudo(args) {
369
401
  const outDir = (typeof args.out === 'string' && args.out) || path.join(projectRoot, 'dist', 'locales-pseudo');
370
402
  fs.mkdirSync(outDir, { recursive: true });
371
403
  const outFile = path.join(outDir, `${report.pseudoLocale}.json`);
372
- fs.writeFileSync(outFile, `${generatePrettyJson(report.catalog)}\n`, 'utf8');
404
+ fs.writeFileSync(outFile, `${JSON.stringify(report.catalog, null, 2)}\n`, 'utf8');
373
405
  log.info(`locale pseudo: source=${sourceLocale} keys=${Object.keys(report.catalog).length} out=${outFile}`);
374
406
  }
375
407
  return report.status === 'ready' ? 0 : 1;
@@ -26,10 +26,7 @@ export declare function emitLocaleRouteRealization(projectRoot: any, distDir: an
26
26
  defaultLocale: any;
27
27
  };
28
28
  origin: string;
29
- routes: {
30
- routeId: string;
31
- path: string;
32
- }[];
29
+ routes: any;
33
30
  realizations: any[];
34
31
  pageMetas: any[];
35
32
  };