@vmz/vmz 0.1.12 → 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 (46) 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 -111
  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 +65 -268
  10. package/dist/document-build.d.ts +1 -2
  11. package/dist/document-build.js +82 -104
  12. package/dist/document-cmd.js +9 -2
  13. package/dist/document-enrich.d.ts +1 -2
  14. package/dist/document-enrich.js +4 -15
  15. package/dist/document-integrate.js +21 -29
  16. package/dist/embedded-packaging.js +1 -2
  17. package/dist/index.d.ts +1 -15
  18. package/dist/index.js +3 -59
  19. package/dist/locale-check.js +61 -28
  20. package/dist/locale-cmd.js +42 -10
  21. package/dist/locale-route-emit.d.ts +1 -4
  22. package/dist/locale-route-emit.js +32 -7
  23. package/dist/locale-router.js +8 -26
  24. package/dist/pack.js +2 -3
  25. package/dist/production-observability.js +2 -3
  26. package/dist/production-test-pack.js +3 -4
  27. package/dist/release-pack.js +18 -5
  28. package/dist/server-artifact.js +3 -4
  29. package/dist/site-delivery.js +3 -4
  30. package/dist/static-emit.js +97 -118
  31. package/dist/test-cmd.js +1 -2
  32. package/package.json +12 -12
  33. package/dist/dev-watch-roots.d.ts +0 -80
  34. package/dist/dev-watch-roots.js +0 -245
  35. package/dist/document-layout-render.d.ts +0 -20
  36. package/dist/document-layout-render.js +0 -87
  37. package/dist/document-routing-config.d.ts +0 -13
  38. package/dist/document-routing-config.js +0 -40
  39. package/dist/native-addon.d.ts +0 -9
  40. package/dist/native-addon.js +0 -84
  41. package/dist/pretty-json.d.ts +0 -19
  42. package/dist/pretty-json.js +0 -43
  43. package/dist/route-path.d.ts +0 -35
  44. package/dist/route-path.js +0 -77
  45. package/dist/wechat-packaging.d.ts +0 -22
  46. package/dist/wechat-packaging.js +0 -59
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,32 +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
- ['route-layout-chain.js', 'route-layout-chain.js'],
154
- ];
155
- /**
156
- * Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
157
- * @param {string} outDir
158
- * @param {string} [coreDist]
159
- */
160
- export function materializeServeHostRuntime(outDir, coreDist = resolveCoreRuntimeDist()) {
161
- if (!coreDist) {
162
- throw new Error('materializeServeHostRuntime: @vmz/core dist not found');
163
- }
164
- for (const [srcName, outName] of SERVE_HOST_RUNTIME_FILES) {
165
- const src = path.join(coreDist, srcName);
166
- const dst = path.join(outDir, outName);
167
- if (!existsSync(src)) {
168
- throw new Error(`materializeServeHostRuntime: missing ${src}`);
169
- }
170
- copyFileSync(src, dst);
171
- }
172
- }
173
146
  /**
174
147
  * @typedef {object} WorkspaceOptions
175
148
  * @property {string} root
@@ -185,7 +158,7 @@ export function createWorkspace(options) {
185
158
  const native = loadNative();
186
159
  const protocol = options.protocol ?? expectedProtocol();
187
160
  const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
188
- const ws = native.JsWorkspace.create({
161
+ return native.JsWorkspace.create({
189
162
  root: options.root,
190
163
  outDir: options.outDir,
191
164
  runtimeDist,
@@ -196,25 +169,6 @@ export function createWorkspace(options) {
196
169
  pluginProtocol: protocol.pluginProtocol,
197
170
  },
198
171
  });
199
- const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
200
- const wrappedPack = () => {
201
- materializeWechatPackaging(options.root);
202
- return pack();
203
- };
204
- try {
205
- ws.lowerMiniprogramWechatPackaging = wrappedPack;
206
- return ws;
207
- }
208
- catch {
209
- return new Proxy(ws, {
210
- get(target, prop, receiver) {
211
- if (prop === 'lowerMiniprogramWechatPackaging')
212
- return wrappedPack;
213
- const value = Reflect.get(target, prop, receiver);
214
- return typeof value === 'function' ? value.bind(target) : value;
215
- },
216
- });
217
- }
218
172
  }
219
173
  /**
220
174
  * frozen application composition protocol catalog.
@@ -262,11 +216,6 @@ export function lowerMiniprogramToolingDeployJson(rootPath) {
262
216
  const native = loadNative();
263
217
  return native.lowerMiniprogramToolingDeployJson(rootPath);
264
218
  }
265
- export function lowerMiniprogramWechatPackagingJson(rootPath) {
266
- const native = loadNative();
267
- materializeWechatPackaging(rootPath);
268
- return native.lowerMiniprogramWechatPackagingJson(rootPath);
269
- }
270
219
  export function lowerMiniprogramMultiAdapterJson(rootPath) {
271
220
  const native = loadNative();
272
221
  return native.lowerMiniprogramMultiAdapterJson(rootPath);
@@ -395,7 +344,6 @@ export function checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyP
395
344
  return native.checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyPaths);
396
345
  }
397
346
  export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
398
- export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
399
347
  export { findAvailablePort } from './port.js';
400
348
  export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
401
349
  export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
@@ -413,8 +361,7 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
413
361
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
414
362
  export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
415
363
  export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
416
- export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
417
- 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';
418
365
  export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
419
366
  export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
420
367
  export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
@@ -484,8 +431,6 @@ export default {
484
431
  expectedProtocol,
485
432
  resolveNativePath,
486
433
  resolveCoreRuntimeDist,
487
- materializeServeHostRuntime,
488
- SERVE_HOST_RUNTIME_FILES,
489
434
  loadNative,
490
435
  getProtocolVersions,
491
436
  handshake,
@@ -499,7 +444,6 @@ export default {
499
444
  lowerMiniprogramStructureJson,
500
445
  lowerMiniprogramRouteServerStyleJson,
501
446
  lowerMiniprogramToolingDeployJson,
502
- lowerMiniprogramWechatPackagingJson,
503
447
  lowerMiniprogramMultiAdapterJson,
504
448
  createMiniHost,
505
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
  };
@@ -7,9 +7,34 @@ import fs from 'node:fs';
7
7
  import path from 'node:path';
8
8
  import { checkLocales, localeHasErrors } from './locale-check.js';
9
9
  import { buildLocalePageMeta, buildLocaleRouteRealizationTable } from './locale-router.js';
10
- import { writePrettyJsonFile } from './pretty-json.js';
11
- import { listPublicPageUnits, unitBrowserPathPattern } from './route-path.js';
12
10
  export const LOCALE_ROUTE_REALIZATION_ARTIFACT_SCHEMA = 'vmz.locale.route_realization.v0';
11
+ /**
12
+ * @param {string} chunkId
13
+ */
14
+ function pathPatternFromChunk(chunkId) {
15
+ const rel = String(chunkId || '').replace(/^pages\//, '');
16
+ const parts = rel.split('/').filter(Boolean);
17
+ const segs = [];
18
+ for (let i = 0; i < parts.length; i++) {
19
+ const p = parts[i];
20
+ if (p === 'index' && i === parts.length - 1)
21
+ continue;
22
+ segs.push(p);
23
+ }
24
+ return segs.length ? `/${segs.join('/')}` : '/';
25
+ }
26
+ /**
27
+ * Layouts are not public RouteNodes for locale realization / SEO.
28
+ * @param {string} chunkId
29
+ */
30
+ function isPublicPageChunk(chunkId) {
31
+ const id = String(chunkId || '');
32
+ if (!id.startsWith('pages/'))
33
+ return false;
34
+ if (/(^|\/)Layout$/.test(id))
35
+ return false;
36
+ return true;
37
+ }
13
38
  /**
14
39
  * @param {string} projectRoot
15
40
  * @param {string} distDir
@@ -34,10 +59,10 @@ export function emitLocaleRouteRealization(projectRoot, distDir, opts = {}) {
34
59
  };
35
60
  }
36
61
  const deployment = JSON.parse(fs.readFileSync(deploymentPath, 'utf8'));
37
- const pages = listPublicPageUnits(deployment);
62
+ const pages = (deployment.units || []).filter((u) => u.kind === 'page' && isPublicPageChunk(String(u.chunkId)));
38
63
  const routes = pages.map((u) => ({
39
64
  routeId: String(u.chunkId),
40
- path: unitBrowserPathPattern(u),
65
+ path: pathPatternFromChunk(String(u.chunkId)),
41
66
  }));
42
67
  const localeEntries = report.manifest?.locales || [];
43
68
  const locales = localeEntries.map((l) => l.id);
@@ -92,14 +117,14 @@ export function emitLocaleRouteRealization(projectRoot, distDir, opts = {}) {
92
117
  const vmzDir = path.join(distDir, '_vmz');
93
118
  fs.mkdirSync(vmzDir, { recursive: true });
94
119
  const outPath = path.join(vmzDir, 'locale-route-realization.json');
95
- writePrettyJsonFile(outPath, artifact);
120
+ fs.writeFileSync(outPath, `${JSON.stringify(artifact, null, 2)}\n`, 'utf8');
96
121
  const manifestOut = path.join(vmzDir, 'locale-manifest.json');
97
- writePrettyJsonFile(manifestOut, {
122
+ fs.writeFileSync(manifestOut, `${JSON.stringify({
98
123
  schema: 'vmz.locale.manifest.v0',
99
124
  defaultLocale,
100
125
  locales: artifact.locales,
101
126
  routing: artifact.routing,
102
- });
127
+ }, null, 2)}\n`, 'utf8');
103
128
  return {
104
129
  ok: true,
105
130
  written: ['_vmz/locale-route-realization.json', '_vmz/locale-manifest.json'],
@@ -90,34 +90,16 @@ export function buildLocaleRouteRealizationTable(input) {
90
90
  pathPattern: normalizePath(route.path),
91
91
  };
92
92
  realizations.push(entry);
93
- // `none` / `domain`: LocaleId is Host preference — many locales share one URL path.
94
- // Collision only when *different RouteIds* claim the same path.
95
- if (routing.strategy === 'none' || routing.strategy === 'domain') {
96
- const prevRoute = pathOwners.get(entry.path);
97
- if (prevRoute && prevRoute !== route.routeId) {
98
- diagnostics.push({
99
- code: DIAG_LOCALE_ROUTE_COLLISION,
100
- severity: 'error',
101
- message: `path ${entry.path} claimed by ${prevRoute} and ${route.routeId}`,
102
- });
103
- }
104
- else {
105
- pathOwners.set(entry.path, route.routeId);
106
- }
93
+ const prev = pathOwners.get(entry.path);
94
+ if (prev && prev !== `${route.routeId}@${localeId}`) {
95
+ diagnostics.push({
96
+ code: DIAG_LOCALE_ROUTE_COLLISION,
97
+ severity: 'error',
98
+ message: `path ${entry.path} claimed by ${prev} and ${route.routeId}@${localeId}`,
99
+ });
107
100
  }
108
101
  else {
109
- const owner = `${route.routeId}@${localeId}`;
110
- const prev = pathOwners.get(entry.path);
111
- if (prev && prev !== owner) {
112
- diagnostics.push({
113
- code: DIAG_LOCALE_ROUTE_COLLISION,
114
- severity: 'error',
115
- message: `path ${entry.path} claimed by ${prev} and ${owner}`,
116
- });
117
- }
118
- else {
119
- pathOwners.set(entry.path, owner);
120
- }
102
+ pathOwners.set(entry.path, `${route.routeId}@${localeId}`);
121
103
  }
122
104
  }
123
105
  }
package/dist/pack.js CHANGED
@@ -5,11 +5,10 @@
5
5
  */
6
6
  // @ts-nocheck
7
7
  import crypto from 'node:crypto';
8
- import { copyFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
8
+ import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
9
9
  import path from 'node:path';
10
10
  import { loadDeploymentIr, planBundleInputs } from './bundler-adapter.js';
11
11
  import { packClientBareImports } from './pack-client-packages.js';
12
- import { writePrettyJsonFile } from './pretty-json.js';
13
12
  export const PACK_MANIFEST_SCHEMA = 'vmz.pack.manifest.v0';
14
13
  /**
15
14
  * Ensure dom split companions sit next to vmz-dom.js (barrel imports ./dom-core.js).
@@ -101,7 +100,7 @@ export function packFromDeploymentIr(outDir, opts = {}) {
101
100
  const vmzDir = path.join(outDir, '_vmz');
102
101
  mkdirSync(vmzDir, { recursive: true });
103
102
  const file = path.join(vmzDir, 'pack-manifest.json');
104
- writePrettyJsonFile(file, body);
103
+ writeFileSync(file, `${JSON.stringify(body, null, 2)}\n`, 'utf8');
105
104
  return { manifest: body, path: file, clientPackages };
106
105
  }
107
106
  function stableStringify(value) {
@@ -7,7 +7,6 @@ import crypto from 'node:crypto';
7
7
  import fs from 'node:fs';
8
8
  import path from 'node:path';
9
9
  import { canonicalJson, sha256Hex } from './release-pack.js';
10
- import { writePrettyJsonFile } from './pretty-json.js';
11
10
  export const PRODUCTION_OBSERVABILITY_SCHEMA = 'vmz.production.observability.v0';
12
11
  export const PRODUCTION_TRACE_SCHEMA = 'vmz.production.trace.v0';
13
12
  /** Facets that production traces must be able to carry (08 A5). */
@@ -458,8 +457,8 @@ export function emitProductionObservability(distDir, overrides = {}, meta = {})
458
457
  fs.mkdirSync(vmzDir, { recursive: true });
459
458
  const contractPath = path.join(vmzDir, 'production-observability.json');
460
459
  const tracePath = path.join(vmzDir, 'production-trace.sample.json');
461
- writePrettyJsonFile(contractPath, contract);
462
- writePrettyJsonFile(tracePath, trace);
460
+ fs.writeFileSync(contractPath, `${JSON.stringify(contract, null, 2)}\n`, 'utf8');
461
+ fs.writeFileSync(tracePath, `${JSON.stringify(trace, null, 2)}\n`, 'utf8');
463
462
  return { contract, trace, contractPath, tracePath };
464
463
  }
465
464
  export function observabilityDigest(contract) {
@@ -8,7 +8,6 @@ import crypto from 'node:crypto';
8
8
  import fs from 'node:fs';
9
9
  import path from 'node:path';
10
10
  import { canonicalJson, sha256Hex } from './release-pack.js';
11
- import { writePrettyJsonFile } from './pretty-json.js';
12
11
  export const PRODUCTION_SCENARIO_PACK_SCHEMA = 'vmz.production.scenario_pack.v0';
13
12
  export const PRODUCTION_CI_PROFILE_SCHEMA = 'vmz.production.ci_profile.v0';
14
13
  export const PRODUCTION_TEST_REPORT_SCHEMA = 'vmz.production.test_report.v0';
@@ -432,9 +431,9 @@ export function emitProductionTestArtifacts(root, report, pack, profile) {
432
431
  const reportPath = path.join(dir, 'report.json');
433
432
  const packPath = path.join(dir, 'scenario-pack.json');
434
433
  const profilePath = path.join(dir, 'ci-profile.json');
435
- writePrettyJsonFile(reportPath, stamped);
436
- writePrettyJsonFile(packPath, pack);
437
- writePrettyJsonFile(profilePath, profile);
434
+ fs.writeFileSync(reportPath, `${JSON.stringify(stamped, null, 2)}\n`, 'utf8');
435
+ fs.writeFileSync(packPath, `${JSON.stringify(pack, null, 2)}\n`, 'utf8');
436
+ fs.writeFileSync(profilePath, `${JSON.stringify(profile, null, 2)}\n`, 'utf8');
438
437
  return { reportPath, packPath, profilePath, report: stamped };
439
438
  }
440
439
  /** Assert CI profile forbids JS test-runner disguise. */
@@ -9,8 +9,6 @@
9
9
  import crypto from 'node:crypto';
10
10
  import fs from 'node:fs';
11
11
  import path from 'node:path';
12
- import { writePrettyJsonFile } from './pretty-json.js';
13
- import { listPublicPageUnits, unitBrowserPathPattern } from './route-path.js';
14
12
  export const RELEASE_ENVELOPE_SCHEMA = 'vmz.release.envelope.v0';
15
13
  export const APPLICATION_ARTIFACT_SCHEMA = 'vmz.application.artifact.v0';
16
14
  export const DELIVERY_ARTIFACT_MANIFEST_SCHEMA = 'vmz.profile.delivery_artifact_manifest.v0';
@@ -90,6 +88,21 @@ function listContentFiles(distDir) {
90
88
  out.sort();
91
89
  return out;
92
90
  }
91
+ /**
92
+ * @param {string} chunkId
93
+ */
94
+ function pathPatternFromChunk(chunkId) {
95
+ const rel = chunkId.replace(/^pages\//, '');
96
+ const parts = rel.split('/').filter(Boolean);
97
+ const segs = [];
98
+ for (let i = 0; i < parts.length; i++) {
99
+ const p = parts[i];
100
+ if (p === 'index' && i === parts.length - 1)
101
+ continue;
102
+ segs.push(p);
103
+ }
104
+ return segs.length ? `/${segs.join('/')}` : '/';
105
+ }
93
106
  /**
94
107
  * Pack `dist/` into `_vmz` manifests + release envelope (filesystem Delivery Profile).
95
108
  * @param {string} distDir
@@ -111,13 +124,13 @@ export function packRelease(distDir, opts = {}) {
111
124
  for (const rel of files) {
112
125
  fileDigests[rel] = sha256File(path.join(abs, ...rel.split('/')));
113
126
  }
114
- const pages = listPublicPageUnits(deployment);
127
+ const pages = (deployment.units || []).filter((u) => u.kind === 'page');
115
128
  const routeRealization = {
116
129
  schema: ROUTE_REALIZATION_TABLE_SCHEMA,
117
130
  routes: pages.map((u) => ({
118
131
  routeId: String(u.chunkId),
119
132
  chunkId: String(u.chunkId),
120
- pathPattern: unitBrowserPathPattern(u),
133
+ pathPattern: pathPatternFromChunk(String(u.chunkId)),
121
134
  clientEntry: u.clientEntry || null,
122
135
  programIr: u.programIr || null,
123
136
  })),
@@ -187,7 +200,7 @@ export function packRelease(distDir, opts = {}) {
187
200
  * @param {unknown} value
188
201
  */
189
202
  function writeJson(file, value) {
190
- writePrettyJsonFile(file, value);
203
+ fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
191
204
  }
192
205
  /**
193
206
  * @param {string} pointerPath