@vmz/vmz 0.1.0 → 0.1.2

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 (40) hide show
  1. package/dist/build-assemble.js +4 -3
  2. package/dist/cdn-policy.js +5 -8
  3. package/dist/cli.js +20 -7
  4. package/dist/content-addressed-assets.js +2 -1
  5. package/dist/delivery-profile.d.ts +10 -0
  6. package/dist/delivery-profile.js +69 -0
  7. package/dist/dev-session.d.ts +6 -0
  8. package/dist/dev-session.js +166 -40
  9. package/dist/document-build.js +24 -28
  10. package/dist/document-cmd.js +2 -9
  11. package/dist/document-integrate.js +10 -17
  12. package/dist/embedded-packaging.js +3 -7
  13. package/dist/index.d.ts +19 -1
  14. package/dist/index.js +62 -2
  15. package/dist/locale-check.js +28 -58
  16. package/dist/locale-cmd.js +10 -42
  17. package/dist/locale-route-emit.d.ts +4 -1
  18. package/dist/locale-route-emit.js +7 -32
  19. package/dist/mini-host.d.ts +47 -0
  20. package/dist/mini-host.js +202 -0
  21. package/dist/native-addon.d.ts +9 -0
  22. package/dist/native-addon.js +84 -0
  23. package/dist/pack-client-packages.d.ts +25 -0
  24. package/dist/pack-client-packages.js +399 -0
  25. package/dist/pack.d.ts +21 -3
  26. package/dist/pack.js +21 -6
  27. package/dist/pretty-json.d.ts +19 -0
  28. package/dist/pretty-json.js +43 -0
  29. package/dist/production-observability.js +3 -2
  30. package/dist/production-test-pack.js +4 -3
  31. package/dist/release-pack.js +5 -18
  32. package/dist/route-path.d.ts +35 -0
  33. package/dist/route-path.js +77 -0
  34. package/dist/server-artifact.js +5 -6
  35. package/dist/site-delivery.js +3 -2
  36. package/dist/static-emit.js +67 -86
  37. package/dist/test-cmd.js +2 -1
  38. package/dist/wechat-packaging.d.ts +22 -0
  39. package/dist/wechat-packaging.js +59 -0
  40. package/package.json +12 -12
@@ -12,6 +12,8 @@ import { artifactHrefFromHtml, buildDocumentIslands, buildDocumentSearch, collec
12
12
  import { resolveMarkdownEngine } from './document-markdown.js';
13
13
  import { DOCUMENT_VIEW_SCHEMA } from './document-schema.js';
14
14
  import { createWorkspace } from './index.js';
15
+ import { requireNativeAddon } from './native-addon.js';
16
+ import { writePrettyJsonFile } from './pretty-json.js';
15
17
  /**
16
18
  * @param {{ projectRoot: string, outDir?: string, strict?: boolean, engines?: { markdown?: string } }} opts
17
19
  */
@@ -113,7 +115,7 @@ export async function buildDocuments(opts) {
113
115
  const viewRel = path.posix.join('views', page.identity.locale, `${page.identity.pageKey === 'index' ? 'index' : page.identity.pageKey}.view.json`);
114
116
  const viewAbs = path.join(outDir, viewRel);
115
117
  fs.mkdirSync(path.dirname(viewAbs), { recursive: true });
116
- fs.writeFileSync(viewAbs, JSON.stringify(view, null, 2) + '\n', 'utf8');
118
+ writePrettyJsonFile(viewAbs, view);
117
119
  const html = renderStaticHtml({
118
120
  title: info.title,
119
121
  locale: page.identity.locale,
@@ -147,10 +149,10 @@ export async function buildDocuments(opts) {
147
149
  islands: 'document.islands.json',
148
150
  },
149
151
  };
150
- fs.writeFileSync(path.join(outDir, 'document.manifest.json'), JSON.stringify(manifestOut, null, 2) + '\n', 'utf8');
151
- fs.writeFileSync(path.join(outDir, 'document.evidence.json'), JSON.stringify(evidence.evidence, null, 2) + '\n', 'utf8');
152
- fs.writeFileSync(path.join(outDir, 'document.search.json'), JSON.stringify(search, null, 2) + '\n', 'utf8');
153
- fs.writeFileSync(path.join(outDir, 'document.islands.json'), JSON.stringify(islands, null, 2) + '\n', 'utf8');
152
+ writePrettyJsonFile(path.join(outDir, 'document.manifest.json'), manifestOut);
153
+ writePrettyJsonFile(path.join(outDir, 'document.evidence.json'), evidence.evidence);
154
+ writePrettyJsonFile(path.join(outDir, 'document.search.json'), search);
155
+ writePrettyJsonFile(path.join(outDir, 'document.islands.json'), islands);
154
156
  return { ok: true, manifest: manifestOut, outDir, pages: written, search, islands };
155
157
  }
156
158
  /**
@@ -170,7 +172,6 @@ function renderStaticHtml({ title, locale, route, nav, bodyHtml, headings, desig
170
172
  }
171
173
  if (designsHref)
172
174
  cssHrefs.push(hostChrome ? `/${designsHref}` : prefix + designsHref);
173
- const cssLink = cssHrefs.map((href) => ` <link rel="stylesheet" href="${esc(href)}" />`).join('\n') + (cssHrefs.length ? '\n' : '');
174
175
  const navItems = nav
175
176
  .map((n) => {
176
177
  const href = relativeHref(htmlRel, n.href, route);
@@ -188,17 +189,11 @@ function renderStaticHtml({ title, locale, route, nav, bodyHtml, headings, desig
188
189
  ${navItems}
189
190
  </ul>
190
191
  </nav>`;
192
+ /** @type {string} */
193
+ let bodyInner;
191
194
  if (hostChrome) {
192
195
  const header = hostChrome.header.replace(/(<a\s+href="\/d\/?")([^>]*>文档<\/a>)/, '$1 aria-current="page"$2');
193
- return `<!DOCTYPE html>
194
- <html lang="${esc(locale)}">
195
- <head>
196
- <meta charset="utf-8" />
197
- <meta name="viewport" content="width=device-width, initial-scale=1" />
198
- <title>${esc(title)}</title>
199
- ${cssLink}</head>
200
- <body data-vmz-hydrate="island-only">
201
- <div class="site site--docs">
196
+ bodyInner = ` <div class="site site--docs">
202
197
  <a class="skip-link" href="#main">Skip to content</a>
203
198
  ${header}
204
199
  <div class="doc-body">
@@ -215,28 +210,29 @@ ${playgroundShellHtml}
215
210
  </div>
216
211
  ${hostChrome.footer}
217
212
  </div>
218
- </body>
219
- </html>
220
213
  `;
221
214
  }
222
- return `<!DOCTYPE html>
223
- <html lang="${esc(locale)}">
224
- <head>
225
- <meta charset="utf-8" />
226
- <meta name="viewport" content="width=device-width, initial-scale=1" />
227
- <title>${esc(title)}</title>
228
- ${cssLink}</head>
229
- <body data-vmz-hydrate="island-only">
230
- <a class="skip-link" href="#main">Skip to content</a>
215
+ else {
216
+ bodyInner = ` <a class="skip-link" href="#main">Skip to content</a>
231
217
  ${docsNav}
232
218
  ${searchShellHtml}
233
219
  ${toc}<main id="main">
234
220
  ${bodyHtml}
235
221
  ${playgroundShellHtml}
236
222
  </main>
237
- </body>
238
- </html>
239
223
  `;
224
+ }
225
+ const native = requireNativeAddon();
226
+ if (typeof native.generateHtmlShell !== 'function') {
227
+ throw new Error('vmz native addon missing generateHtmlShell — rebuild with `pnpm napi:build`');
228
+ }
229
+ return native.generateHtmlShell({
230
+ title,
231
+ lang: locale,
232
+ cssHrefs,
233
+ bodyHtml: bodyInner,
234
+ bodyAttrs: ['data-vmz-hydrate', 'island-only'],
235
+ });
240
236
  }
241
237
  /**
242
238
  * Integrated DocumentMount: reuse host SiteHeader / SiteFooter .vmz templates.
@@ -2,7 +2,6 @@
2
2
  /**
3
3
  * `vmz document` / `vmz docs` CLI .
4
4
  */
5
- import fs from 'node:fs';
6
5
  import path from 'node:path';
7
6
  import { buildDocuments } from './document-build.js';
8
7
  import { checkDocuments, manifestHasErrors } from './document-check.js';
@@ -12,6 +11,7 @@ import { resolveMarkdownEngine } from './document-markdown.js';
12
11
  import { createWorkspace } from './index.js';
13
12
  import { log } from './log.js';
14
13
  import { parseArgs } from './cli.js';
14
+ import { emitPrettyJson } from './pretty-json.js';
15
15
  function printDocumentHelp() {
16
16
  console.log(`vmz document — project /documents domain
17
17
 
@@ -95,14 +95,7 @@ async function cmdDocumentCheck(args) {
95
95
  }
96
96
  const jsonOut = args.json;
97
97
  if (jsonOut) {
98
- const text = JSON.stringify(manifest, null, 2);
99
- if (typeof jsonOut === 'string') {
100
- fs.writeFileSync(jsonOut, text + '\n', 'utf8');
101
- log.info(`wrote ${jsonOut}`);
102
- }
103
- else {
104
- console.log(text);
105
- }
98
+ emitPrettyJson(jsonOut, manifest, { logWrote: (p) => log.info(`wrote ${p}`) });
106
99
  }
107
100
  else {
108
101
  for (const d of manifest.diagnostics) {
@@ -8,6 +8,7 @@ import path from 'node:path';
8
8
  import { buildDocuments } from './document-build.js';
9
9
  import { resolveDocumentsRoot } from './document-check.js';
10
10
  import { log } from './log.js';
11
+ import { requireNativeAddon } from './native-addon.js';
11
12
  /**
12
13
  * @param {string} projectRoot
13
14
  */
@@ -66,23 +67,15 @@ function writeMountRootRedirects(manifest, outDir) {
66
67
  const relDir = base.replace(/^\//, '');
67
68
  const abs = path.join(outDir, relDir, 'index.html');
68
69
  fs.mkdirSync(path.dirname(abs), { recursive: true });
69
- const html = `<!DOCTYPE html>
70
- <html lang="${escapeAttr(defaultLocale)}">
71
- <head>
72
- <meta charset="utf-8" />
73
- <meta http-equiv="refresh" content="0;url=${escapeAttr(target)}" />
74
- <link rel="canonical" href="${escapeAttr(target)}" />
75
- <title>Documents</title>
76
- </head>
77
- <body>
78
- <p><a href="${escapeAttr(target)}">Continue to ${escapeAttr(defaultLocale)} docs</a></p>
79
- </body>
80
- </html>
81
- `;
70
+ const native = requireNativeAddon();
71
+ if (typeof native.generateRedirectHtml !== 'function') {
72
+ throw new Error('vmz native addon missing generateRedirectHtml — rebuild with `pnpm napi:build`');
73
+ }
74
+ const html = native.generateRedirectHtml({
75
+ lang: defaultLocale,
76
+ target,
77
+ title: 'Documents',
78
+ });
82
79
  fs.writeFileSync(abs, html, 'utf8');
83
80
  }
84
81
  }
85
- /** @param {string} s */
86
- function escapeAttr(s) {
87
- return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;');
88
- }
@@ -6,14 +6,10 @@
6
6
  import crypto from 'node:crypto';
7
7
  import fs from 'node:fs';
8
8
  import path from 'node:path';
9
+ import { writePrettyJsonFile } from './pretty-json.js';
9
10
  export const EMBEDDED_RESOURCE_INDEX_SCHEMA = 'vmz.embedded.resource_index.v0';
10
11
  /** Paths that must never enter the embedded baseline closure. */
11
- const SKIP_NAMES = new Set([
12
- 'vmz-serve-host.mjs',
13
- 'vmz-serve-host.js',
14
- 'node_modules',
15
- '.git',
16
- ]);
12
+ const SKIP_NAMES = new Set(['vmz-serve-host.mjs', 'vmz-serve-host.js', 'node_modules', '.git']);
17
13
  /**
18
14
  * Walk outDir and build path → digest → relative blob path map.
19
15
  * Copies files into `dist/_vmz/embedded-baseline/` (whole release, no file-level mix).
@@ -60,7 +56,7 @@ export function emitEmbeddedPackaging(outDir, opts = {}) {
60
56
  };
61
57
  index.indexDigest = sha256Hex(canonicalJson({ ...index, indexDigest: undefined }));
62
58
  const indexPath = path.join(vmzDir, 'embedded-resource-index.json');
63
- fs.writeFileSync(indexPath, `${JSON.stringify(index, null, 2)}\n`, 'utf8');
59
+ writePrettyJsonFile(indexPath, index);
64
60
  // Optional include_bytes entry point for Rust packaging adapters
65
61
  const rsPath = path.join(vmzDir, 'embedded_site.rs');
66
62
  fs.writeFileSync(rsPath, `// @generated by vmz — rust-embedded packaging adapter (do not edit)
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;
@@ -153,7 +162,8 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
153
162
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
154
163
  export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
155
164
  export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
156
- export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.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';
157
167
  export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
158
168
  export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
159
169
  export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
@@ -231,6 +241,14 @@ declare const _default: {
231
241
  checkApplicationsJson: typeof checkApplicationsJson;
232
242
  queryTargetProtocolCatalog: typeof queryTargetProtocolCatalog;
233
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;
234
252
  queryProfileProtocolCatalog: typeof queryProfileProtocolCatalog;
235
253
  checkHostProfileProtocolJson: typeof checkHostProfileProtocolJson;
236
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();
@@ -335,7 +386,8 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
335
386
  export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
336
387
  export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
337
388
  export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
338
- export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.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';
339
391
  export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
340
392
  export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
341
393
  export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
@@ -413,6 +465,14 @@ export default {
413
465
  checkApplicationsJson,
414
466
  queryTargetProtocolCatalog,
415
467
  checkMiniprogramTargetContractJson,
468
+ lowerMiniprogramStaticSliceJson,
469
+ lowerMiniprogramBindingEventJson,
470
+ lowerMiniprogramStructureJson,
471
+ lowerMiniprogramRouteServerStyleJson,
472
+ lowerMiniprogramToolingDeployJson,
473
+ lowerMiniprogramWechatPackagingJson,
474
+ lowerMiniprogramMultiAdapterJson,
475
+ createMiniHost,
416
476
  queryProfileProtocolCatalog,
417
477
  checkHostProfileProtocolJson,
418
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
@@ -668,25 +670,19 @@ export function emitLocaleTypedModules(report, outDir) {
668
670
  fs.mkdirSync(outDir, { recursive: true });
669
671
  /** @type {string[]} */
670
672
  const written = [];
673
+ const native = requireNativeAddon();
674
+ if (typeof native.generateLocaleTypedModule !== 'function') {
675
+ throw new Error('vmz native addon missing generateLocaleTypedModule — rebuild with `pnpm napi:build`');
676
+ }
671
677
  for (const mod of report.typedModules || []) {
672
- const 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('');
678
+ const exports = (mod.exports || []).map((exp) => ({
679
+ exportName: exp.exportName,
680
+ params: (exp.params || []).map((p) => ({ name: p.name, kind: p.kind || 'string' })),
681
+ }));
682
+ const text = native.generateLocaleTypedModule(mod.module, exports);
687
683
  const file = path.join(outDir, `${mod.catalogId}.d.ts`);
688
684
  fs.mkdirSync(path.dirname(file), { recursive: true });
689
- fs.writeFileSync(file, lines.join('\n'), 'utf8');
685
+ fs.writeFileSync(file, text, 'utf8');
690
686
  written.push(file);
691
687
  }
692
688
  const index = {
@@ -694,7 +690,7 @@ export function emitLocaleTypedModules(report, outDir) {
694
690
  modules: (report.typedModules || []).map((m) => m.module),
695
691
  outDir,
696
692
  };
697
- fs.writeFileSync(path.join(outDir, 'index.json'), `${JSON.stringify(index, null, 2)}\n`, 'utf8');
693
+ writePrettyJsonFile(path.join(outDir, 'index.json'), index);
698
694
  return written;
699
695
  }
700
696
  /**
@@ -724,56 +720,30 @@ export function emitLocaleRuntimeModules(projectRoot, distDir) {
724
720
  const localesOut = path.join(distDir, 'locales');
725
721
  fs.mkdirSync(localesOut, { recursive: true });
726
722
  for (const mod of report.typedModules || []) {
727
- const lines = [
728
- `/** Generated ${mod.module} — runtime LocalizedText (defaultLocale=${defaultLocale}) */`,
729
- `const __vmzDefaultLocale = ${JSON.stringify(defaultLocale)};`,
730
- `function __vmzLocaleId() {`,
731
- ` try {`,
732
- ` const stored = localStorage.getItem("vmz.locale");`,
733
- ` if (stored) return stored;`,
734
- ` } catch {}`,
735
- ` if (typeof document !== "undefined") {`,
736
- ` const d = document.documentElement?.getAttribute("data-locale");`,
737
- ` if (d) return d;`,
738
- ` const lang = document.documentElement?.lang;`,
739
- ` if (lang === "en" || lang === "en-US" || lang === "en-us") return "en-us";`,
740
- ` if (lang === "zh" || lang === "zh-CN" || lang === "zh-Hans" || lang === "zh-hans") return "zh-hans";`,
741
- ` }`,
742
- ` return __vmzDefaultLocale;`,
743
- `}`,
744
- `function __vmzFormat(template, args) {`,
745
- ` if (!args) return String(template ?? "");`,
746
- ` return String(template ?? "").replace(/\\{(\\w+)(?:,\\s*\\w+)?\\}/g, (m, name) =>`,
747
- ` Object.prototype.hasOwnProperty.call(args, name) ? String(args[name]) : m`,
748
- ` );`,
749
- `}`,
750
- `function __vmzPick(variants, args) {`,
751
- ` const id = __vmzLocaleId();`,
752
- ` const template = variants[id] ?? variants[__vmzDefaultLocale] ?? "";`,
753
- ` return __vmzFormat(template, args);`,
754
- `}`,
755
- '',
756
- ];
723
+ const exports = [];
757
724
  for (const exp of mod.exports || []) {
758
725
  const node = byId.get(exp.messageId);
759
- const variants = {};
726
+ /** @type {string[][]} */
727
+ const variants = [];
760
728
  if (node?.variants) {
761
729
  for (const [loc, v] of Object.entries(node.variants)) {
762
- variants[loc] = v.template;
730
+ variants.push([loc, v.template]);
763
731
  }
764
732
  }
765
- const lit = JSON.stringify(variants);
766
- if ((exp.params || []).length) {
767
- lines.push(`export function ${exp.exportName}(args) { return __vmzPick(${lit}, args); }`);
768
- }
769
- else {
770
- lines.push(`export function ${exp.exportName}() { return __vmzPick(${lit}); }`);
771
- }
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`');
772
742
  }
773
- lines.push('');
743
+ const code = native.generateLocaleRuntimeModule(defaultLocale, exports);
774
744
  const file = path.join(localesOut, `${mod.catalogId}.js`);
775
745
  fs.mkdirSync(path.dirname(file), { recursive: true });
776
- fs.writeFileSync(file, lines.join('\n'), 'utf8');
746
+ fs.writeFileSync(file, code, 'utf8');
777
747
  written.push(file);
778
748
  }
779
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) {
@@ -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;
@@ -26,7 +26,10 @@ export declare function emitLocaleRouteRealization(projectRoot: any, distDir: an
26
26
  defaultLocale: any;
27
27
  };
28
28
  origin: string;
29
- routes: any;
29
+ routes: {
30
+ routeId: string;
31
+ path: string;
32
+ }[];
30
33
  realizations: any[];
31
34
  pageMetas: any[];
32
35
  };