@vmz/vmz 0.0.4 → 0.1.1

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 (55) hide show
  1. package/dist/build-assemble.d.ts +52 -0
  2. package/dist/build-assemble.js +192 -0
  3. package/dist/cdn-policy.d.ts +22 -4
  4. package/dist/cdn-policy.js +109 -13
  5. package/dist/cli.js +122 -27
  6. package/dist/content-addressed-assets.js +2 -1
  7. package/dist/delivery-profile.d.ts +84 -0
  8. package/dist/delivery-profile.js +348 -0
  9. package/dist/dev-session.d.ts +6 -0
  10. package/dist/dev-session.js +167 -40
  11. package/dist/document-build.js +33 -32
  12. package/dist/document-cmd.js +2 -9
  13. package/dist/document-enrich.js +8 -0
  14. package/dist/document-integrate.js +10 -17
  15. package/dist/embedded-packaging.d.ts +22 -0
  16. package/dist/embedded-packaging.js +109 -0
  17. package/dist/index.d.ts +26 -1
  18. package/dist/index.js +69 -2
  19. package/dist/locale-check.js +39 -66
  20. package/dist/locale-cmd.js +12 -44
  21. package/dist/locale-route-emit.d.ts +37 -0
  22. package/dist/locale-route-emit.js +109 -0
  23. package/dist/locale-router.d.ts +20 -0
  24. package/dist/locale-router.js +68 -0
  25. package/dist/log.d.ts +2 -2
  26. package/dist/log.js +11 -3
  27. package/dist/mini-host.d.ts +47 -0
  28. package/dist/mini-host.js +202 -0
  29. package/dist/native-addon.d.ts +9 -0
  30. package/dist/native-addon.js +84 -0
  31. package/dist/pack-client-packages.d.ts +25 -0
  32. package/dist/pack-client-packages.js +399 -0
  33. package/dist/pack.d.ts +58 -0
  34. package/dist/pack.js +123 -0
  35. package/dist/plugin-host.d.ts +1 -1
  36. package/dist/plugin-host.js +2 -2
  37. package/dist/pretty-json.d.ts +19 -0
  38. package/dist/pretty-json.js +43 -0
  39. package/dist/production-observability.js +3 -2
  40. package/dist/production-test-pack.d.ts +0 -14
  41. package/dist/production-test-pack.js +27 -31
  42. package/dist/release-pack.js +17 -21
  43. package/dist/route-path.d.ts +35 -0
  44. package/dist/route-path.js +77 -0
  45. package/dist/server-artifact.d.ts +140 -0
  46. package/dist/server-artifact.js +204 -0
  47. package/dist/server-language-backend.d.ts +89 -0
  48. package/dist/server-language-backend.js +121 -0
  49. package/dist/site-delivery.js +3 -2
  50. package/dist/static-emit.d.ts +10 -1
  51. package/dist/static-emit.js +192 -97
  52. package/dist/test-cmd.js +2 -1
  53. package/dist/wechat-packaging.d.ts +22 -0
  54. package/dist/wechat-packaging.js +59 -0
  55. package/package.json +12 -12
@@ -0,0 +1,109 @@
1
+ /**
2
+ * rust-embedded packaging adapter: resource index + baseline closure.
3
+ * Packaging only — does not invent route / MIME / fallback semantics.
4
+ */
5
+ // @ts-nocheck
6
+ import crypto from 'node:crypto';
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { writePrettyJsonFile } from './pretty-json.js';
10
+ export const EMBEDDED_RESOURCE_INDEX_SCHEMA = 'vmz.embedded.resource_index.v0';
11
+ /** Paths that must never enter the embedded baseline closure. */
12
+ const SKIP_NAMES = new Set(['vmz-serve-host.mjs', 'vmz-serve-host.js', 'node_modules', '.git']);
13
+ /**
14
+ * Walk outDir and build path → digest → relative blob path map.
15
+ * Copies files into `dist/_vmz/embedded-baseline/` (whole release, no file-level mix).
16
+ * @param {string} outDir
17
+ * @param {{ siteId?: string, contractDigest?: string | null }} [opts]
18
+ */
19
+ export function emitEmbeddedPackaging(outDir, opts = {}) {
20
+ const vmzDir = path.join(outDir, '_vmz');
21
+ const baselineDir = path.join(vmzDir, 'embedded-baseline');
22
+ fs.mkdirSync(baselineDir, { recursive: true });
23
+ /** @type {Array<{ path: string, digest: string, blob: string, bytes: number }>} */
24
+ const objects = [];
25
+ const root = path.resolve(outDir);
26
+ walkFiles(root, (abs) => {
27
+ const rel = toPosix(path.relative(root, abs));
28
+ if (!rel || rel.startsWith('_vmz/embedded-baseline'))
29
+ return;
30
+ if (rel.startsWith('_vmz/embedded-resource-index'))
31
+ return;
32
+ const base = path.basename(abs);
33
+ if (SKIP_NAMES.has(base))
34
+ return;
35
+ // Keep other _vmz manifests inside baseline (contract, capability table, etc.)
36
+ const buf = fs.readFileSync(abs);
37
+ const digest = sha256Hex(buf);
38
+ const blobRel = `objects/${digest.slice(0, 2)}/${digest}`;
39
+ const blobAbs = path.join(baselineDir, blobRel);
40
+ fs.mkdirSync(path.dirname(blobAbs), { recursive: true });
41
+ if (!fs.existsSync(blobAbs))
42
+ fs.writeFileSync(blobAbs, buf);
43
+ // Also mirror tree under baseline/tree for host convenience
44
+ const treeAbs = path.join(baselineDir, 'tree', rel);
45
+ fs.mkdirSync(path.dirname(treeAbs), { recursive: true });
46
+ fs.copyFileSync(abs, treeAbs);
47
+ objects.push({ path: rel, digest, blob: blobRel, bytes: buf.length });
48
+ });
49
+ objects.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
50
+ const index = {
51
+ schema: EMBEDDED_RESOURCE_INDEX_SCHEMA,
52
+ siteId: opts.siteId || null,
53
+ contractDigest: opts.contractDigest || null,
54
+ objectCount: objects.length,
55
+ objects,
56
+ };
57
+ index.indexDigest = sha256Hex(canonicalJson({ ...index, indexDigest: undefined }));
58
+ const indexPath = path.join(vmzDir, 'embedded-resource-index.json');
59
+ writePrettyJsonFile(indexPath, index);
60
+ // Optional include_bytes entry point for Rust packaging adapters
61
+ const rsPath = path.join(vmzDir, 'embedded_site.rs');
62
+ fs.writeFileSync(rsPath, `// @generated by vmz — rust-embedded packaging adapter (do not edit)
63
+ // Index digest: ${index.indexDigest}
64
+ pub const EMBEDDED_RESOURCE_INDEX: &str = include_str!("embedded-resource-index.json");
65
+ `, 'utf8');
66
+ return { index, indexPath, baselineDir };
67
+ }
68
+ /**
69
+ * @param {string} dir
70
+ * @param {(abs: string) => void} onFile
71
+ */
72
+ function walkFiles(dir, onFile) {
73
+ if (!fs.existsSync(dir))
74
+ return;
75
+ for (const name of fs.readdirSync(dir)) {
76
+ if (SKIP_NAMES.has(name))
77
+ continue;
78
+ const abs = path.join(dir, name);
79
+ const st = fs.statSync(abs);
80
+ if (st.isDirectory()) {
81
+ if (name === 'embedded-baseline' && path.basename(path.dirname(abs)) === '_vmz')
82
+ continue;
83
+ walkFiles(abs, onFile);
84
+ }
85
+ else if (st.isFile()) {
86
+ onFile(abs);
87
+ }
88
+ }
89
+ }
90
+ function toPosix(p) {
91
+ return p.split(path.sep).join('/');
92
+ }
93
+ function sha256Hex(data) {
94
+ return crypto.createHash('sha256').update(data).digest('hex');
95
+ }
96
+ function canonicalJson(value) {
97
+ return JSON.stringify(sortKeys(value));
98
+ }
99
+ function sortKeys(value) {
100
+ if (Array.isArray(value))
101
+ return value.map(sortKeys);
102
+ if (value && typeof value === 'object') {
103
+ const out = {};
104
+ for (const k of Object.keys(value).sort())
105
+ out[k] = sortKeys(value[k]);
106
+ return out;
107
+ }
108
+ return value;
109
+ }
package/dist/index.d.ts CHANGED
@@ -79,6 +79,15 @@ export declare function queryApplicationProtocolCatalog(): any;
79
79
  export declare function checkApplicationsJson(hostRoot: any, packageRoots: any): any;
80
80
  export declare function queryTargetProtocolCatalog(): any;
81
81
  export declare function checkMiniprogramTargetContractJson(rootPath: any): any;
82
+ export declare function lowerMiniprogramStaticSliceJson(rootPath: any): any;
83
+ export declare function lowerMiniprogramBindingEventJson(rootPath: any): any;
84
+ export declare function lowerMiniprogramStructureJson(rootPath: any): any;
85
+ export declare function lowerMiniprogramRouteServerStyleJson(rootPath: any): any;
86
+ export declare function lowerMiniprogramToolingDeployJson(rootPath: any): any;
87
+ export declare function lowerMiniprogramWechatPackagingJson(rootPath: any): any;
88
+ export declare function lowerMiniprogramMultiAdapterJson(rootPath: any): any;
89
+ import { createMiniHost } from './mini-host.js';
90
+ export { createMiniHost };
82
91
  export declare function queryProfileProtocolCatalog(): any;
83
92
  export declare function checkHostProfileProtocolJson(rootPath: any): any;
84
93
  export declare function checkProfileSolverJson(rootPath: any): any;
@@ -151,10 +160,18 @@ export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.j
151
160
  export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
152
161
  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';
153
162
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
163
+ export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
164
+ export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
165
+ export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
166
+ export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
167
+ export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
168
+ export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
169
+ export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
154
170
  export { PRODUCTION_SCENARIO_PACK_SCHEMA, PRODUCTION_CI_PROFILE_SCHEMA, PRODUCTION_TEST_REPORT_SCHEMA, browserProductionScenarioPack, browserProductionCiProfile, normalizeScenarioPack, normalizeCiProfile, scenarioPackDigest, ciProfileDigest, buildProductionTestReport, productionTestReportDigest, emitProductionTestArtifacts, assertNoForbiddenRunners, } from './production-test-pack.js';
155
171
  export { PRODUCTION_OBSERVABILITY_SCHEMA, PRODUCTION_TRACE_SCHEMA, REQUIRED_TRACE_FACETS, browserProductionObservability, normalizeObservability, redactSensitive, validateProductionTrace, buildCoveringProductionTrace, checkProductionBudgets, checkCapabilityClosure, applySecurityHeadersToCdnPolicy, measureDistBudgets, emitProductionObservability, observabilityDigest, } from './production-observability.js';
156
172
  export { buildApplicationContext, buildFormatterContext, checkLocaleRuntime, checkSsrClientParity, createLocaleSession, formatMessageTemplate, formatterContextDigest, negotiateLocale, resolveMessageVariant, validateFormatterContext, } from './locale-runtime.js';
157
- export { absoluteUrl, assertLocaleCacheKey, buildLocalePageMeta, buildLocaleRouteRealizationTable, checkLocaleRouter, commitLocaleRouteMetaTransition, localeAwareCacheKey, parseLocaleFromPath, planLocalePathNavigation, realizeRoutePath, resolveLinkHref, } from './locale-router.js';
173
+ export { absoluteUrl, assertLocaleCacheKey, buildLocalePageMeta, buildLocaleRouteRealizationTable, checkLocaleRouter, commitLocaleRouteMetaTransition, localeAwareCacheKey, localizeBodyLinks, localizeSameAppHref, parseLocaleFromPath, planLocalePathNavigation, realizeRoutePath, resolveLinkHref, } from './locale-router.js';
174
+ export { LOCALE_ROUTE_REALIZATION_ARTIFACT_SCHEMA, emitLocaleRouteRealization, } from './locale-route-emit.js';
158
175
  export { assertHostMessageInvariant, assertServerErrorEnvelope, assertServerFormatContext, buildLocaleDeliveryResolution, checkLocaleDelivery, fallbackDigest, messageCatalogHash, proveMiniPackageMessages, validateNativeLocalePack, } from './locale-delivery.js';
159
176
  export { checkLocaleConformance, diffLocaleCatalogs, explainLocaleMessage, extractHardcodedText, pseudoLocalizeCatalog, } from './locale-tooling.js';
160
177
  export { applyPlugins, contentHash, defineConfig, definePlugin, loadVmzConfig, } from './plugin-host.js';
@@ -224,6 +241,14 @@ declare const _default: {
224
241
  checkApplicationsJson: typeof checkApplicationsJson;
225
242
  queryTargetProtocolCatalog: typeof queryTargetProtocolCatalog;
226
243
  checkMiniprogramTargetContractJson: typeof checkMiniprogramTargetContractJson;
244
+ lowerMiniprogramStaticSliceJson: typeof lowerMiniprogramStaticSliceJson;
245
+ lowerMiniprogramBindingEventJson: typeof lowerMiniprogramBindingEventJson;
246
+ lowerMiniprogramStructureJson: typeof lowerMiniprogramStructureJson;
247
+ lowerMiniprogramRouteServerStyleJson: typeof lowerMiniprogramRouteServerStyleJson;
248
+ lowerMiniprogramToolingDeployJson: typeof lowerMiniprogramToolingDeployJson;
249
+ lowerMiniprogramWechatPackagingJson: typeof lowerMiniprogramWechatPackagingJson;
250
+ lowerMiniprogramMultiAdapterJson: typeof lowerMiniprogramMultiAdapterJson;
251
+ createMiniHost: typeof createMiniHost;
227
252
  queryProfileProtocolCatalog: typeof queryProfileProtocolCatalog;
228
253
  checkHostProfileProtocolJson: typeof checkHostProfileProtocolJson;
229
254
  checkProfileSolverJson: typeof checkProfileSolverJson;
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import { createRequire } from 'node:module';
7
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';
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);
@@ -158,7 +159,7 @@ export function createWorkspace(options) {
158
159
  const native = loadNative();
159
160
  const protocol = options.protocol ?? expectedProtocol();
160
161
  const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
161
- return native.JsWorkspace.create({
162
+ const ws = native.JsWorkspace.create({
162
163
  root: options.root,
163
164
  outDir: options.outDir,
164
165
  runtimeDist,
@@ -169,6 +170,25 @@ export function createWorkspace(options) {
169
170
  pluginProtocol: protocol.pluginProtocol,
170
171
  },
171
172
  });
173
+ const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
174
+ const wrappedPack = () => {
175
+ materializeWechatPackaging(options.root);
176
+ return pack();
177
+ };
178
+ try {
179
+ ws.lowerMiniprogramWechatPackaging = wrappedPack;
180
+ return ws;
181
+ }
182
+ catch {
183
+ return new Proxy(ws, {
184
+ get(target, prop, receiver) {
185
+ if (prop === 'lowerMiniprogramWechatPackaging')
186
+ return wrappedPack;
187
+ const value = Reflect.get(target, prop, receiver);
188
+ return typeof value === 'function' ? value.bind(target) : value;
189
+ },
190
+ });
191
+ }
172
192
  }
173
193
  /**
174
194
  * frozen application composition protocol catalog.
@@ -196,6 +216,37 @@ export function checkMiniprogramTargetContractJson(rootPath) {
196
216
  const native = loadNative();
197
217
  return native.checkMiniprogramTargetContractJson(rootPath);
198
218
  }
219
+ export function lowerMiniprogramStaticSliceJson(rootPath) {
220
+ const native = loadNative();
221
+ return native.lowerMiniprogramStaticSliceJson(rootPath);
222
+ }
223
+ export function lowerMiniprogramBindingEventJson(rootPath) {
224
+ const native = loadNative();
225
+ return native.lowerMiniprogramBindingEventJson(rootPath);
226
+ }
227
+ export function lowerMiniprogramStructureJson(rootPath) {
228
+ const native = loadNative();
229
+ return native.lowerMiniprogramStructureJson(rootPath);
230
+ }
231
+ export function lowerMiniprogramRouteServerStyleJson(rootPath) {
232
+ const native = loadNative();
233
+ return native.lowerMiniprogramRouteServerStyleJson(rootPath);
234
+ }
235
+ export function lowerMiniprogramToolingDeployJson(rootPath) {
236
+ const native = loadNative();
237
+ return native.lowerMiniprogramToolingDeployJson(rootPath);
238
+ }
239
+ export function lowerMiniprogramWechatPackagingJson(rootPath) {
240
+ const native = loadNative();
241
+ materializeWechatPackaging(rootPath);
242
+ return native.lowerMiniprogramWechatPackagingJson(rootPath);
243
+ }
244
+ export function lowerMiniprogramMultiAdapterJson(rootPath) {
245
+ const native = loadNative();
246
+ return native.lowerMiniprogramMultiAdapterJson(rootPath);
247
+ }
248
+ import { createMiniHost } from './mini-host.js';
249
+ export { createMiniHost };
199
250
  export function queryProfileProtocolCatalog() {
200
251
  const native = loadNative();
201
252
  return native.queryProfileProtocolCatalog();
@@ -333,10 +384,18 @@ export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.j
333
384
  export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
334
385
  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';
335
386
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
387
+ export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
388
+ export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
389
+ export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
390
+ export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
391
+ export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
392
+ export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
393
+ export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
336
394
  export { PRODUCTION_SCENARIO_PACK_SCHEMA, PRODUCTION_CI_PROFILE_SCHEMA, PRODUCTION_TEST_REPORT_SCHEMA, browserProductionScenarioPack, browserProductionCiProfile, normalizeScenarioPack, normalizeCiProfile, scenarioPackDigest, ciProfileDigest, buildProductionTestReport, productionTestReportDigest, emitProductionTestArtifacts, assertNoForbiddenRunners, } from './production-test-pack.js';
337
395
  export { PRODUCTION_OBSERVABILITY_SCHEMA, PRODUCTION_TRACE_SCHEMA, REQUIRED_TRACE_FACETS, browserProductionObservability, normalizeObservability, redactSensitive, validateProductionTrace, buildCoveringProductionTrace, checkProductionBudgets, checkCapabilityClosure, applySecurityHeadersToCdnPolicy, measureDistBudgets, emitProductionObservability, observabilityDigest, } from './production-observability.js';
338
396
  export { buildApplicationContext, buildFormatterContext, checkLocaleRuntime, checkSsrClientParity, createLocaleSession, formatMessageTemplate, formatterContextDigest, negotiateLocale, resolveMessageVariant, validateFormatterContext, } from './locale-runtime.js';
339
- export { absoluteUrl, assertLocaleCacheKey, buildLocalePageMeta, buildLocaleRouteRealizationTable, checkLocaleRouter, commitLocaleRouteMetaTransition, localeAwareCacheKey, parseLocaleFromPath, planLocalePathNavigation, realizeRoutePath, resolveLinkHref, } from './locale-router.js';
397
+ export { absoluteUrl, assertLocaleCacheKey, buildLocalePageMeta, buildLocaleRouteRealizationTable, checkLocaleRouter, commitLocaleRouteMetaTransition, localeAwareCacheKey, localizeBodyLinks, localizeSameAppHref, parseLocaleFromPath, planLocalePathNavigation, realizeRoutePath, resolveLinkHref, } from './locale-router.js';
398
+ export { LOCALE_ROUTE_REALIZATION_ARTIFACT_SCHEMA, emitLocaleRouteRealization, } from './locale-route-emit.js';
340
399
  export { assertHostMessageInvariant, assertServerErrorEnvelope, assertServerFormatContext, buildLocaleDeliveryResolution, checkLocaleDelivery, fallbackDigest, messageCatalogHash, proveMiniPackageMessages, validateNativeLocalePack, } from './locale-delivery.js';
341
400
  export { checkLocaleConformance, diffLocaleCatalogs, explainLocaleMessage, extractHardcodedText, pseudoLocalizeCatalog, } from './locale-tooling.js';
342
401
  export { applyPlugins, contentHash, defineConfig, definePlugin, loadVmzConfig, } from './plugin-host.js';
@@ -406,6 +465,14 @@ export default {
406
465
  checkApplicationsJson,
407
466
  queryTargetProtocolCatalog,
408
467
  checkMiniprogramTargetContractJson,
468
+ lowerMiniprogramStaticSliceJson,
469
+ lowerMiniprogramBindingEventJson,
470
+ lowerMiniprogramStructureJson,
471
+ lowerMiniprogramRouteServerStyleJson,
472
+ lowerMiniprogramToolingDeployJson,
473
+ lowerMiniprogramWechatPackagingJson,
474
+ lowerMiniprogramMultiAdapterJson,
475
+ createMiniHost,
409
476
  queryProfileProtocolCatalog,
410
477
  checkHostProfileProtocolJson,
411
478
  checkProfileSolverJson,
@@ -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
@@ -250,10 +252,12 @@ export function checkLocales(opts) {
250
252
  const manifestPathJson = path.join(localesRoot, 'locales.json');
251
253
  const manifestPath = fs.existsSync(manifestPathJson5) ? manifestPathJson5 : fs.existsSync(manifestPathJson) ? manifestPathJson : null;
252
254
  if (!fs.existsSync(localesRoot) || !manifestPath) {
255
+ // Discipline nudge: i18n is first-class — missing policy is never silent.
256
+ // Soft for now (warning); production profiles may elevate to error later.
253
257
  diagnostics.push({
254
258
  code: DIAG_MANIFEST_MISSING,
255
- severity: 'error',
256
- message: 'locales/locales.json5 missing (LocaleId policy truth source)',
259
+ severity: 'warning',
260
+ message: 'locales/locales.json5 missing — declare LocaleId policy under /locales (native i18n, not an afterthought)',
257
261
  path: 'locales/locales.json5',
258
262
  });
259
263
  return emptyReport(projectRoot, diagnostics);
@@ -586,9 +590,10 @@ function paramSignature(params) {
586
590
  .join(',');
587
591
  }
588
592
  function emptyReport(projectRoot, diagnostics) {
593
+ const hasErrors = (diagnostics || []).some((d) => d.severity === 'error');
589
594
  return {
590
595
  schema: LOCALE_CHECK_SCHEMA,
591
- status: 'failed',
596
+ status: hasErrors ? 'failed' : 'ready',
592
597
  root: projectRoot,
593
598
  localesRoot: 'locales',
594
599
  manifest: null,
@@ -665,25 +670,19 @@ export function emitLocaleTypedModules(report, outDir) {
665
670
  fs.mkdirSync(outDir, { recursive: true });
666
671
  /** @type {string[]} */
667
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
+ }
668
677
  for (const mod of report.typedModules || []) {
669
- const lines = [
670
- `/** Generated LocalizedText module — ${mod.module} (vmz.locale.typed_module.v0) */`,
671
- `export type LocalizedText = string & { readonly __brand: 'LocalizedText' };`,
672
- '',
673
- ];
674
- for (const exp of mod.exports) {
675
- if (!exp.params.length) {
676
- lines.push(`export declare function ${exp.exportName}(): LocalizedText;`);
677
- }
678
- else {
679
- const args = exp.params.map((p) => `${p.name}: ${p.kind === 'plural' || p.kind === 'number' ? 'number' : 'string'}`).join('; ');
680
- lines.push(`export declare function ${exp.exportName}(args: { ${args} }): LocalizedText;`);
681
- }
682
- }
683
- 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);
684
683
  const file = path.join(outDir, `${mod.catalogId}.d.ts`);
685
684
  fs.mkdirSync(path.dirname(file), { recursive: true });
686
- fs.writeFileSync(file, lines.join('\n'), 'utf8');
685
+ fs.writeFileSync(file, text, 'utf8');
687
686
  written.push(file);
688
687
  }
689
688
  const index = {
@@ -691,7 +690,7 @@ export function emitLocaleTypedModules(report, outDir) {
691
690
  modules: (report.typedModules || []).map((m) => m.module),
692
691
  outDir,
693
692
  };
694
- fs.writeFileSync(path.join(outDir, 'index.json'), `${JSON.stringify(index, null, 2)}\n`, 'utf8');
693
+ writePrettyJsonFile(path.join(outDir, 'index.json'), index);
695
694
  return written;
696
695
  }
697
696
  /**
@@ -706,71 +705,45 @@ export function emitLocaleTypedModules(report, outDir) {
706
705
  * @returns {{ ok: boolean, written: string[], diagnostics: any[] }}
707
706
  */
708
707
  export function emitLocaleRuntimeModules(projectRoot, distDir) {
709
- const localesRoot = path.join(projectRoot, 'locales');
710
- if (!fs.existsSync(localesRoot)) {
711
- return { ok: true, written: [], diagnostics: [] };
712
- }
713
708
  const report = checkLocales({ projectRoot, checkUnused: false });
714
709
  if (localeHasErrors(report)) {
715
710
  return { ok: false, written: [], diagnostics: report.diagnostics || [] };
716
711
  }
717
- const defaultLocale = report.manifest?.defaultLocale || 'zh-hans';
712
+ // Missing locales.json5 is warning-only for now — surface diagnostics, skip emit.
713
+ if (!report.manifest) {
714
+ return { ok: true, written: [], diagnostics: report.diagnostics || [] };
715
+ }
716
+ const defaultLocale = report.manifest.defaultLocale || 'zh-hans';
718
717
  const byId = new Map((report.messageCatalog?.messages || []).map((m) => [m.messageId, m]));
719
718
  /** @type {string[]} */
720
719
  const written = [];
721
720
  const localesOut = path.join(distDir, 'locales');
722
721
  fs.mkdirSync(localesOut, { recursive: true });
723
722
  for (const mod of report.typedModules || []) {
724
- const lines = [
725
- `/** Generated ${mod.module} — runtime LocalizedText (defaultLocale=${defaultLocale}) */`,
726
- `const __vmzDefaultLocale = ${JSON.stringify(defaultLocale)};`,
727
- `function __vmzLocaleId() {`,
728
- ` try {`,
729
- ` const stored = localStorage.getItem("vmz.locale");`,
730
- ` if (stored) return stored;`,
731
- ` } catch {}`,
732
- ` if (typeof document !== "undefined") {`,
733
- ` const d = document.documentElement?.getAttribute("data-locale");`,
734
- ` if (d) return d;`,
735
- ` const lang = document.documentElement?.lang;`,
736
- ` if (lang === "en" || lang === "en-US" || lang === "en-us") return "en-us";`,
737
- ` if (lang === "zh" || lang === "zh-CN" || lang === "zh-Hans" || lang === "zh-hans") return "zh-hans";`,
738
- ` }`,
739
- ` return __vmzDefaultLocale;`,
740
- `}`,
741
- `function __vmzFormat(template, args) {`,
742
- ` if (!args) return String(template ?? "");`,
743
- ` return String(template ?? "").replace(/\\{(\\w+)(?:,\\s*\\w+)?\\}/g, (m, name) =>`,
744
- ` Object.prototype.hasOwnProperty.call(args, name) ? String(args[name]) : m`,
745
- ` );`,
746
- `}`,
747
- `function __vmzPick(variants, args) {`,
748
- ` const id = __vmzLocaleId();`,
749
- ` const template = variants[id] ?? variants[__vmzDefaultLocale] ?? "";`,
750
- ` return __vmzFormat(template, args);`,
751
- `}`,
752
- '',
753
- ];
723
+ const exports = [];
754
724
  for (const exp of mod.exports || []) {
755
725
  const node = byId.get(exp.messageId);
756
- const variants = {};
726
+ /** @type {string[][]} */
727
+ const variants = [];
757
728
  if (node?.variants) {
758
729
  for (const [loc, v] of Object.entries(node.variants)) {
759
- variants[loc] = v.template;
730
+ variants.push([loc, v.template]);
760
731
  }
761
732
  }
762
- const lit = JSON.stringify(variants);
763
- if ((exp.params || []).length) {
764
- lines.push(`export function ${exp.exportName}(args) { return __vmzPick(${lit}, args); }`);
765
- }
766
- else {
767
- lines.push(`export function ${exp.exportName}() { return __vmzPick(${lit}); }`);
768
- }
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`');
769
742
  }
770
- lines.push('');
743
+ const code = native.generateLocaleRuntimeModule(defaultLocale, exports);
771
744
  const file = path.join(localesOut, `${mod.catalogId}.js`);
772
745
  fs.mkdirSync(path.dirname(file), { recursive: true });
773
- fs.writeFileSync(file, lines.join('\n'), 'utf8');
746
+ fs.writeFileSync(file, code, 'utf8');
774
747
  written.push(file);
775
748
  }
776
749
  rewriteLocaleImportsInDist(distDir);
@@ -12,6 +12,7 @@ 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';
15
16
  function printLocaleHelp() {
16
17
  console.log(`vmz locale — /locales application i18n (–)
17
18
 
@@ -91,14 +92,7 @@ function cmdLocaleCheck(args) {
91
92
  const report = checkLocales({ projectRoot, strict: Boolean(args.strict) });
92
93
  const jsonOut = args.json;
93
94
  if (jsonOut) {
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
- }
95
+ emitPrettyJson(jsonOut, report, { logWrote: (p) => log.info(`wrote ${p}`) });
102
96
  }
103
97
  else {
104
98
  for (const d of report.diagnostics) {
@@ -117,8 +111,8 @@ function cmdLocaleList(args) {
117
111
  const projectRoot = resolveProject(args);
118
112
  const report = checkLocales({ projectRoot, checkUnused: false });
119
113
  if (!report.manifest) {
120
- log.error('locales.json5 missing');
121
- return 1;
114
+ console.warn('vmz warn vmz::locale::manifest_missing: locales/locales.json5 missing');
115
+ return localeHasErrors(report) ? 1 : 0;
122
116
  }
123
117
  for (const loc of report.manifest.locales) {
124
118
  const mark = loc.id === report.manifest.defaultLocale ? ' (default)' : '';
@@ -151,7 +145,7 @@ function cmdLocaleRename(args) {
151
145
  const report = checkLocales({ projectRoot, checkUnused: false });
152
146
  const plan = planLocaleRename(report, fromId, toId);
153
147
  if (args.json) {
154
- console.log(JSON.stringify(plan, null, 2));
148
+ emitPrettyJson(args.json, plan);
155
149
  }
156
150
  else if (plan.status !== 'ready') {
157
151
  log.error(plan.error || 'rename failed');
@@ -181,14 +175,7 @@ function cmdLocaleRuntimeCheck(args) {
181
175
  });
182
176
  const { session: _session, ...jsonReport } = report;
183
177
  if (args.json) {
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
- }
178
+ emitJson(args, jsonReport);
192
179
  }
193
180
  else {
194
181
  for (const d of report.diagnostics) {
@@ -231,14 +218,7 @@ function cmdLocaleRouterCheck(args) {
231
218
  origin: routesFile.origin || 'https://example.test',
232
219
  });
233
220
  if (args.json) {
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
- }
221
+ emitJson(args, report);
242
222
  }
243
223
  else {
244
224
  for (const d of report.diagnostics) {
@@ -268,14 +248,7 @@ function cmdLocaleDeliveryCheck(args) {
268
248
  planVersion: 'plan.v0',
269
249
  });
270
250
  if (args.json) {
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
- }
251
+ emitJson(args, report);
279
252
  }
280
253
  else {
281
254
  for (const d of report.diagnostics) {
@@ -290,14 +263,9 @@ function cmdLocaleDeliveryCheck(args) {
290
263
  return report.status === 'ready' ? 0 : 1;
291
264
  }
292
265
  function emitJson(args, report) {
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
- }
266
+ emitPrettyJson(args.json, report, {
267
+ logWrote: (p) => log.info(`wrote ${p}`),
268
+ });
301
269
  }
302
270
  function cmdLocaleExplain(args) {
303
271
  const messageId = typeof args._[0] === 'string' ? args._[0] : '';
@@ -401,7 +369,7 @@ function cmdLocalePseudo(args) {
401
369
  const outDir = (typeof args.out === 'string' && args.out) || path.join(projectRoot, 'dist', 'locales-pseudo');
402
370
  fs.mkdirSync(outDir, { recursive: true });
403
371
  const outFile = path.join(outDir, `${report.pseudoLocale}.json`);
404
- fs.writeFileSync(outFile, `${JSON.stringify(report.catalog, null, 2)}\n`, 'utf8');
372
+ fs.writeFileSync(outFile, `${generatePrettyJson(report.catalog)}\n`, 'utf8');
405
373
  log.info(`locale pseudo: source=${sourceLocale} keys=${Object.keys(report.catalog).length} out=${outFile}`);
406
374
  }
407
375
  return report.status === 'ready' ? 0 : 1;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Emit RouteId × LocaleId realization (+ PageMeta / hreflang seed) into dist/_vmz.
3
+ * Consumed by serve-host + static-emit; LocaleId stays out of stable RouteId.
4
+ */
5
+ export declare const LOCALE_ROUTE_REALIZATION_ARTIFACT_SCHEMA = "vmz.locale.route_realization.v0";
6
+ /**
7
+ * @param {string} projectRoot
8
+ * @param {string} distDir
9
+ * @param {{ origin?: string }} [opts]
10
+ */
11
+ export declare function emitLocaleRouteRealization(projectRoot: any, distDir: any, opts?: {}): {
12
+ ok: boolean;
13
+ written: any[];
14
+ diagnostics: any;
15
+ artifact: any;
16
+ } | {
17
+ ok: boolean;
18
+ written: string[];
19
+ artifact: {
20
+ schema: string;
21
+ defaultLocale: any;
22
+ locales: any;
23
+ routing: {
24
+ strategy: any;
25
+ defaultPrefix: any;
26
+ defaultLocale: any;
27
+ };
28
+ origin: string;
29
+ routes: {
30
+ routeId: string;
31
+ path: string;
32
+ }[];
33
+ realizations: any[];
34
+ pageMetas: any[];
35
+ };
36
+ diagnostics: any[];
37
+ };