@vmz/vmz 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/author-input.d.ts +19 -0
- package/dist/author-input.js +52 -0
- package/dist/build-assemble.js +18 -7
- package/dist/cdn-policy.js +5 -4
- package/dist/cli.js +106 -38
- package/dist/content-addressed-assets.d.ts +23 -2
- package/dist/content-addressed-assets.js +178 -32
- package/dist/delivery-profile.d.ts +30 -2
- package/dist/delivery-profile.js +139 -5
- package/dist/dev-session.d.ts +1 -0
- package/dist/dev-session.js +269 -65
- package/dist/dev-watch-roots.d.ts +80 -0
- package/dist/dev-watch-roots.js +245 -0
- package/dist/document-build.d.ts +4 -3
- package/dist/document-build.js +104 -82
- package/dist/document-check.d.ts +24 -5
- package/dist/document-check.js +64 -101
- package/dist/document-cmd.js +2 -9
- package/dist/document-enrich.d.ts +2 -1
- package/dist/document-enrich.js +15 -4
- package/dist/document-integrate.js +29 -21
- package/dist/document-layout-render.d.ts +20 -0
- package/dist/document-layout-render.js +87 -0
- package/dist/document-routing-config.d.ts +17 -0
- package/dist/document-routing-config.js +31 -0
- package/dist/document-schema.js +8 -1
- package/dist/embedded-packaging.js +2 -1
- package/dist/index.d.ts +18 -2
- package/dist/index.js +63 -4
- package/dist/locale-check.js +81 -183
- package/dist/locale-cmd.js +13 -45
- package/dist/locale-route-emit.d.ts +4 -1
- package/dist/locale-route-emit.js +7 -32
- package/dist/locale-router.js +26 -8
- package/dist/native-addon.d.ts +9 -0
- package/dist/native-addon.js +84 -0
- package/dist/pack.js +3 -2
- package/dist/pretty-json.d.ts +19 -0
- package/dist/pretty-json.js +43 -0
- package/dist/production-observability.js +3 -2
- package/dist/production-test-pack.js +4 -3
- package/dist/public-static-assets.d.ts +24 -0
- package/dist/public-static-assets.js +140 -0
- package/dist/release-pack.js +5 -18
- package/dist/route-path.d.ts +35 -0
- package/dist/route-path.js +77 -0
- package/dist/server-artifact.js +4 -3
- package/dist/site-delivery.js +4 -3
- package/dist/site-favicon.d.ts +31 -0
- package/dist/site-favicon.js +140 -0
- package/dist/static-emit.d.ts +21 -0
- package/dist/static-emit.js +134 -97
- package/dist/test-cmd.js +2 -1
- package/dist/wechat-packaging.d.ts +22 -0
- package/dist/wechat-packaging.js +59 -0
- package/package.json +13 -14
package/dist/index.d.ts
CHANGED
|
@@ -53,6 +53,14 @@ export declare function handshake(host?: {
|
|
|
53
53
|
* @returns {string | null}
|
|
54
54
|
*/
|
|
55
55
|
export declare function resolveCoreRuntimeDist(): string;
|
|
56
|
+
/** Runtime companions required by dist/vmz-serve-host.mjs relative imports. */
|
|
57
|
+
export declare const SERVE_HOST_RUNTIME_FILES: string[][];
|
|
58
|
+
/**
|
|
59
|
+
* Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
|
|
60
|
+
* @param {string} outDir
|
|
61
|
+
* @param {string} [coreDist]
|
|
62
|
+
*/
|
|
63
|
+
export declare function materializeServeHostRuntime(outDir: any, coreDist?: string): void;
|
|
56
64
|
/**
|
|
57
65
|
* @typedef {object} WorkspaceOptions
|
|
58
66
|
* @property {string} root
|
|
@@ -84,6 +92,7 @@ export declare function lowerMiniprogramBindingEventJson(rootPath: any): any;
|
|
|
84
92
|
export declare function lowerMiniprogramStructureJson(rootPath: any): any;
|
|
85
93
|
export declare function lowerMiniprogramRouteServerStyleJson(rootPath: any): any;
|
|
86
94
|
export declare function lowerMiniprogramToolingDeployJson(rootPath: any): any;
|
|
95
|
+
export declare function lowerMiniprogramWechatPackagingJson(rootPath: any): any;
|
|
87
96
|
export declare function lowerMiniprogramMultiAdapterJson(rootPath: any): any;
|
|
88
97
|
import { createMiniHost } from './mini-host.js';
|
|
89
98
|
export { createMiniHost };
|
|
@@ -146,6 +155,7 @@ export declare function checkApplicationHostCompositionJson(hostRoot: any, packa
|
|
|
146
155
|
*/
|
|
147
156
|
export declare function checkApplicationDevTestDeployJson(hostRoot: any, packageRoots: any, dirtyPaths?: any[]): any;
|
|
148
157
|
export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
|
|
158
|
+
export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
|
|
149
159
|
export { findAvailablePort } from './port.js';
|
|
150
160
|
export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
|
|
151
161
|
export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
|
|
@@ -156,12 +166,15 @@ export { cmdApplication, runCheck as runApplicationCheck } from './application-c
|
|
|
156
166
|
export { cmdArtifact } from './release-cmd.js';
|
|
157
167
|
export { ARTIFACT_DIFF_SCHEMA, DELIVERY_ARTIFACT_MANIFEST_SCHEMA, RELEASE_ENVELOPE_SCHEMA, ROUTE_REALIZATION_TABLE_SCHEMA, atomicWritePointer, canonicalJson, diffArtifacts, loadReleaseEnvelope, packRelease, publishRelease, readPointer, rollbackRelease, sha256File, sha256Hex, } from './release-pack.js';
|
|
158
168
|
export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.js';
|
|
159
|
-
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
|
|
169
|
+
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, rewriteCssImports, rewriteJsEntryRelativeImports, } from './content-addressed-assets.js';
|
|
170
|
+
export { SITE_FAVICON_SCHEMA, emitSiteFavicon, readSiteFaviconHeadHtml, packPngsIntoIco, } from './site-favicon.js';
|
|
171
|
+
export { PUBLIC_STATIC_ASSETS_SCHEMA, emitPublicStaticAssets, } from './public-static-assets.js';
|
|
160
172
|
export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML, CACHE_ASSET_IMMUTABLE, CACHE_META, buildCdnPolicyManifest, emitCdnPolicy, projectCdnAdapter, createLocalStaticHandler, listenLocalStaticHost, matchGlob, } from './cdn-policy.js';
|
|
161
173
|
export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
|
|
162
174
|
export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
|
|
163
175
|
export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
|
|
164
|
-
export {
|
|
176
|
+
export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
|
|
177
|
+
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeProfileArtifactName, resolveProfileArtifactDir, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
165
178
|
export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
|
|
166
179
|
export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
|
|
167
180
|
export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
|
|
@@ -231,6 +244,8 @@ declare const _default: {
|
|
|
231
244
|
expectedProtocol: typeof expectedProtocol;
|
|
232
245
|
resolveNativePath: typeof resolveNativePath;
|
|
233
246
|
resolveCoreRuntimeDist: typeof resolveCoreRuntimeDist;
|
|
247
|
+
materializeServeHostRuntime: typeof materializeServeHostRuntime;
|
|
248
|
+
SERVE_HOST_RUNTIME_FILES: string[][];
|
|
234
249
|
loadNative: typeof loadNative;
|
|
235
250
|
getProtocolVersions: typeof getProtocolVersions;
|
|
236
251
|
handshake: typeof handshake;
|
|
@@ -244,6 +259,7 @@ declare const _default: {
|
|
|
244
259
|
lowerMiniprogramStructureJson: typeof lowerMiniprogramStructureJson;
|
|
245
260
|
lowerMiniprogramRouteServerStyleJson: typeof lowerMiniprogramRouteServerStyleJson;
|
|
246
261
|
lowerMiniprogramToolingDeployJson: typeof lowerMiniprogramToolingDeployJson;
|
|
262
|
+
lowerMiniprogramWechatPackagingJson: typeof lowerMiniprogramWechatPackagingJson;
|
|
247
263
|
lowerMiniprogramMultiAdapterJson: typeof lowerMiniprogramMultiAdapterJson;
|
|
248
264
|
createMiniHost: typeof createMiniHost;
|
|
249
265
|
queryProfileProtocolCatalog: typeof queryProfileProtocolCatalog;
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
* Coarse-grained only — no transform hooks / per-AST callbacks.
|
|
5
5
|
*/
|
|
6
6
|
import { createRequire } from 'node:module';
|
|
7
|
-
import { existsSync } from 'node:fs';
|
|
7
|
+
import { copyFileSync, existsSync } from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { materializeWechatPackaging } from './wechat-packaging.js';
|
|
10
11
|
export { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLAN_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TEST_PROTOCOL, TEST_MANIFEST_SCHEMA, TEST_REPORT_SCHEMA, protocolCatalog, dxCatalog, testCatalog, applicationCatalog, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, TARGET_DIAG_DOM_LEAK_IN_PLAN, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_MAPPING_ENTRY_SCHEMA, PROFILE_LIFECYCLE_MAPPING_TABLE_SCHEMA, PROFILE_RECOVERY_POLICY_SCHEMA, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, LOCALE_PROTOCOL, LOCALE_MANIFEST_SCHEMA, LOCALE_MESSAGE_CATALOG_SCHEMA, LOCALE_MESSAGE_NODE_SCHEMA, LOCALE_CHECK_SCHEMA, LOCALE_TYPED_MODULE_SCHEMA, LOCALE_RENAME_SCHEMA, LOCALE_APPLICATION_CONTEXT_SCHEMA, LOCALE_FORMATTER_CONTEXT_SCHEMA, LOCALE_TRANSITION_SCHEMA, LOCALE_RUNTIME_CHECK_SCHEMA, LOCALE_FALLBACK_RESOLUTION_SCHEMA, FORMATTER_DATA_VERSION, LOCALE_ROUTE_REALIZATION_SCHEMA, LOCALE_PAGE_META_SCHEMA, LOCALE_LINK_RESOLUTION_SCHEMA, LOCALE_ROUTER_CHECK_SCHEMA, LOCALE_DELIVERY_RESOLUTION_SCHEMA, LOCALE_CHUNK_MANIFEST_SCHEMA, LOCALE_NATIVE_PACK_SCHEMA, LOCALE_MINI_PACKAGE_PROOF_SCHEMA, LOCALE_SERVER_ERROR_ENVELOPE_SCHEMA, LOCALE_DELIVERY_CHECK_SCHEMA, LOCALE_EXPLAIN_SCHEMA, LOCALE_DIFF_SCHEMA, LOCALE_EXTRACT_SCHEMA, LOCALE_PSEUDO_SCHEMA, LOCALE_CONFORMANCE_SCHEMA, LOCALE_DIAG_MANIFEST_MISSING, LOCALE_DIAG_ID_INVALID, LOCALE_DIAG_FALLBACK_CYCLE, LOCALE_DIAG_MESSAGE_PARAMETER_MISMATCH, LOCALE_DIAG_MESSAGE_UNUSED, LOCALE_DIAG_FORMATTER_CONTEXT_INCOMPLETE, LOCALE_DIAG_FORMATTER_VERSION_MISMATCH, LOCALE_DIAG_DIGEST_MISMATCH, LOCALE_DIAG_TRANSITION_PARTIAL, LOCALE_DIAG_TRANSITION_UNSUPPORTED, LOCALE_DIAG_TRANSITION_LOAD_FAILED, LOCALE_DIAG_MACHINE_DEFAULT_FORBIDDEN, LOCALE_DIAG_MESSAGE_MIXED_LOCALE, LOCALE_DIAG_STALE_GENERATION, LOCALE_DIAG_ROUTE_COLLISION, LOCALE_DIAG_CANONICAL_MISSING, LOCALE_DIAG_HREFLANG_INCOMPLETE, LOCALE_DIAG_META_LOCALE_MISMATCH, LOCALE_DIAG_LINK_HARDCODED_PATH, LOCALE_DIAG_CACHE_KEY_STEALS_CONTENT, LOCALE_DIAG_PREFIX_OMIT_WITHOUT_REDIRECT, LOCALE_DIAG_DELIVERY_FULL_BUNDLE, LOCALE_DIAG_CHUNK_HASH_MISMATCH, LOCALE_DIAG_NATIVE_PACK_UNSIGNED, LOCALE_DIAG_NATIVE_PACK_HAS_JS, LOCALE_DIAG_NATIVE_PACK_APP_MISMATCH, LOCALE_DIAG_MINI_CROSS_PACKAGE_UNPROVEN, LOCALE_DIAG_SERVER_TRANSLATED_ERROR, LOCALE_DIAG_SERVER_FORMAT_WITHOUT_CONTEXT, LOCALE_DIAG_HOST_MESSAGE_DIVERGENCE, LOCALE_DIAG_MESSAGE_DYNAMIC_ID_UNBOUNDED, LOCALE_DIAG_HARDCODED_TEXT, LOCALE_DIAG_PSEUDO_PRODUCTION_FORBIDDEN, LOCALE_DIAG_CONFORMANCE_DIVERGENCE, LOCALE_DIAG_EXPLAIN_UNKNOWN, LOCALE_VIRTUAL_MODULE_PREFIX, localeCatalog, } from '@vmz/protocol';
|
|
11
12
|
import { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, localeCatalog, } from '@vmz/protocol';
|
|
12
13
|
const require = createRequire(import.meta.url);
|
|
@@ -143,6 +144,33 @@ export function resolveCoreRuntimeDist() {
|
|
|
143
144
|
return nested;
|
|
144
145
|
return null;
|
|
145
146
|
}
|
|
147
|
+
/** Runtime companions required by dist/vmz-serve-host.mjs relative imports. */
|
|
148
|
+
export const SERVE_HOST_RUNTIME_FILES = [
|
|
149
|
+
['serve-host.mjs', 'vmz-serve-host.mjs'],
|
|
150
|
+
['native-addon.js', 'native-addon.js'],
|
|
151
|
+
['list-client-components.js', 'list-client-components.js'],
|
|
152
|
+
['deployment-registry.js', 'deployment-registry.js'],
|
|
153
|
+
['render-host.js', 'render-host.js'],
|
|
154
|
+
['route-layout-chain.js', 'route-layout-chain.js'],
|
|
155
|
+
];
|
|
156
|
+
/**
|
|
157
|
+
* Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
|
|
158
|
+
* @param {string} outDir
|
|
159
|
+
* @param {string} [coreDist]
|
|
160
|
+
*/
|
|
161
|
+
export function materializeServeHostRuntime(outDir, coreDist = resolveCoreRuntimeDist()) {
|
|
162
|
+
if (!coreDist) {
|
|
163
|
+
throw new Error('materializeServeHostRuntime: @vmz/core dist not found');
|
|
164
|
+
}
|
|
165
|
+
for (const [srcName, outName] of SERVE_HOST_RUNTIME_FILES) {
|
|
166
|
+
const src = path.join(coreDist, srcName);
|
|
167
|
+
const dst = path.join(outDir, outName);
|
|
168
|
+
if (!existsSync(src)) {
|
|
169
|
+
throw new Error(`materializeServeHostRuntime: missing ${src}`);
|
|
170
|
+
}
|
|
171
|
+
copyFileSync(src, dst);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
146
174
|
/**
|
|
147
175
|
* @typedef {object} WorkspaceOptions
|
|
148
176
|
* @property {string} root
|
|
@@ -158,7 +186,7 @@ export function createWorkspace(options) {
|
|
|
158
186
|
const native = loadNative();
|
|
159
187
|
const protocol = options.protocol ?? expectedProtocol();
|
|
160
188
|
const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
|
|
161
|
-
|
|
189
|
+
const ws = native.JsWorkspace.create({
|
|
162
190
|
root: options.root,
|
|
163
191
|
outDir: options.outDir,
|
|
164
192
|
runtimeDist,
|
|
@@ -169,6 +197,25 @@ export function createWorkspace(options) {
|
|
|
169
197
|
pluginProtocol: protocol.pluginProtocol,
|
|
170
198
|
},
|
|
171
199
|
});
|
|
200
|
+
const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
|
|
201
|
+
const wrappedPack = () => {
|
|
202
|
+
materializeWechatPackaging(options.root);
|
|
203
|
+
return pack();
|
|
204
|
+
};
|
|
205
|
+
try {
|
|
206
|
+
ws.lowerMiniprogramWechatPackaging = wrappedPack;
|
|
207
|
+
return ws;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return new Proxy(ws, {
|
|
211
|
+
get(target, prop, receiver) {
|
|
212
|
+
if (prop === 'lowerMiniprogramWechatPackaging')
|
|
213
|
+
return wrappedPack;
|
|
214
|
+
const value = Reflect.get(target, prop, receiver);
|
|
215
|
+
return typeof value === 'function' ? value.bind(target) : value;
|
|
216
|
+
},
|
|
217
|
+
});
|
|
218
|
+
}
|
|
172
219
|
}
|
|
173
220
|
/**
|
|
174
221
|
* frozen application composition protocol catalog.
|
|
@@ -216,6 +263,11 @@ export function lowerMiniprogramToolingDeployJson(rootPath) {
|
|
|
216
263
|
const native = loadNative();
|
|
217
264
|
return native.lowerMiniprogramToolingDeployJson(rootPath);
|
|
218
265
|
}
|
|
266
|
+
export function lowerMiniprogramWechatPackagingJson(rootPath) {
|
|
267
|
+
const native = loadNative();
|
|
268
|
+
materializeWechatPackaging(rootPath);
|
|
269
|
+
return native.lowerMiniprogramWechatPackagingJson(rootPath);
|
|
270
|
+
}
|
|
219
271
|
export function lowerMiniprogramMultiAdapterJson(rootPath) {
|
|
220
272
|
const native = loadNative();
|
|
221
273
|
return native.lowerMiniprogramMultiAdapterJson(rootPath);
|
|
@@ -344,6 +396,7 @@ export function checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyP
|
|
|
344
396
|
return native.checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyPaths);
|
|
345
397
|
}
|
|
346
398
|
export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
|
|
399
|
+
export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
|
|
347
400
|
export { findAvailablePort } from './port.js';
|
|
348
401
|
export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
|
|
349
402
|
export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
|
|
@@ -356,12 +409,15 @@ export { ARTIFACT_DIFF_SCHEMA, DELIVERY_ARTIFACT_MANIFEST_SCHEMA, RELEASE_ENVELO
|
|
|
356
409
|
// APPLICATION_ARTIFACT_SCHEMA lives in @vmz/protocol (already re-exported above);
|
|
357
410
|
// release-pack keeps a local constant for envelope writes — do not dual-export the name.
|
|
358
411
|
export { STATIC_DELIVERY_MANIFEST_SCHEMA, emitWebStatic, } from './static-emit.js';
|
|
359
|
-
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, } from './content-addressed-assets.js';
|
|
412
|
+
export { CONTENT_ADDRESSED_ASSETS_SCHEMA, emitContentAddressedAssets, resolveAssetByDigest, assertSharedAssetPath, contentAddressedAssetsDigest, rewriteCssImports, rewriteJsEntryRelativeImports, } from './content-addressed-assets.js';
|
|
413
|
+
export { SITE_FAVICON_SCHEMA, emitSiteFavicon, readSiteFaviconHeadHtml, packPngsIntoIco, } from './site-favicon.js';
|
|
414
|
+
export { PUBLIC_STATIC_ASSETS_SCHEMA, emitPublicStaticAssets, } from './public-static-assets.js';
|
|
360
415
|
export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML, CACHE_ASSET_IMMUTABLE, CACHE_META, buildCdnPolicyManifest, emitCdnPolicy, projectCdnAdapter, createLocalStaticHandler, listenLocalStaticHost, matchGlob, } from './cdn-policy.js';
|
|
361
416
|
export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
|
|
362
417
|
export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
|
|
363
418
|
export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
|
|
364
|
-
export {
|
|
419
|
+
export { WECHAT_PACKAGING_SCHEMA, WECHAT_PACKAGING_REL, wechatPackagingFromDelivery, materializeWechatPackaging, } from './wechat-packaging.js';
|
|
420
|
+
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeProfileArtifactName, resolveProfileArtifactDir, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
365
421
|
export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
|
|
366
422
|
export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
|
|
367
423
|
export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
|
|
@@ -431,6 +487,8 @@ export default {
|
|
|
431
487
|
expectedProtocol,
|
|
432
488
|
resolveNativePath,
|
|
433
489
|
resolveCoreRuntimeDist,
|
|
490
|
+
materializeServeHostRuntime,
|
|
491
|
+
SERVE_HOST_RUNTIME_FILES,
|
|
434
492
|
loadNative,
|
|
435
493
|
getProtocolVersions,
|
|
436
494
|
handshake,
|
|
@@ -444,6 +502,7 @@ export default {
|
|
|
444
502
|
lowerMiniprogramStructureJson,
|
|
445
503
|
lowerMiniprogramRouteServerStyleJson,
|
|
446
504
|
lowerMiniprogramToolingDeployJson,
|
|
505
|
+
lowerMiniprogramWechatPackagingJson,
|
|
447
506
|
lowerMiniprogramMultiAdapterJson,
|
|
448
507
|
createMiniHost,
|
|
449
508
|
queryProfileProtocolCatalog,
|
package/dist/locale-check.js
CHANGED
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
|
-
import
|
|
10
|
-
import { DIAG_CATALOG_CONFLICT, DIAG_CATALOG_PARSE,
|
|
9
|
+
import { loadLocalePlan, mapPlanDiagnostics, parseAuthorInput } from './author-input.js';
|
|
10
|
+
import { DIAG_CATALOG_CONFLICT, DIAG_CATALOG_PARSE, DIAG_DIR_MISSING, DIAG_DIR_ORPHAN, DIAG_ID_INVALID, DIAG_LAYOUT_ILLEGAL, DIAG_MANIFEST_MISSING, DIAG_MESSAGE_ARRAY_FORBIDDEN, DIAG_MESSAGE_HTML_FORBIDDEN, DIAG_MESSAGE_MISSING_DEFAULT, DIAG_MESSAGE_MISSING_VARIANT, 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
|
+
import { requireNativeAddon } from './native-addon.js';
|
|
12
|
+
import { writePrettyJsonFile } from './pretty-json.js';
|
|
11
13
|
/**
|
|
12
14
|
* @param {string} literal
|
|
13
15
|
*/
|
|
@@ -246,124 +248,57 @@ export function checkLocales(opts) {
|
|
|
246
248
|
const localesRoot = path.join(projectRoot, 'locales');
|
|
247
249
|
/** @type {Array<{ code: string, severity: string, message: string, path?: string }>} */
|
|
248
250
|
const diagnostics = [];
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
const
|
|
252
|
-
if (
|
|
253
|
-
// Discipline nudge: i18n is first-class — missing policy is never silent.
|
|
254
|
-
// Soft for now (warning); production profiles may elevate to error later.
|
|
255
|
-
diagnostics.push({
|
|
256
|
-
code: DIAG_MANIFEST_MISSING,
|
|
257
|
-
severity: 'warning',
|
|
258
|
-
message: 'locales/locales.json5 missing — declare LocaleId policy under /locales (native i18n, not an afterthought)',
|
|
259
|
-
path: 'locales/locales.json5',
|
|
260
|
-
});
|
|
261
|
-
return emptyReport(projectRoot, diagnostics);
|
|
262
|
-
}
|
|
263
|
-
/** @type {any} */
|
|
264
|
-
let rawManifest = null;
|
|
265
|
-
try {
|
|
266
|
-
rawManifest = JSON5.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
267
|
-
}
|
|
268
|
-
catch (e) {
|
|
269
|
-
diagnostics.push({
|
|
270
|
-
code: DIAG_CATALOG_PARSE,
|
|
271
|
-
severity: 'error',
|
|
272
|
-
message: `locales.json5 parse failed: ${e.message || e}`,
|
|
273
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
274
|
-
});
|
|
251
|
+
const plan = loadLocalePlan(projectRoot);
|
|
252
|
+
diagnostics.push(...mapPlanDiagnostics(plan.diagnostics));
|
|
253
|
+
const missingManifest = (plan.diagnostics || []).some((d) => d.code === DIAG_MANIFEST_MISSING);
|
|
254
|
+
if (missingManifest || !plan.locales?.length) {
|
|
275
255
|
return emptyReport(projectRoot, diagnostics);
|
|
276
256
|
}
|
|
277
|
-
const localeEntries =
|
|
257
|
+
const localeEntries = plan.locales || [];
|
|
278
258
|
/** @type {string[]} */
|
|
279
|
-
const orderedIds =
|
|
259
|
+
const orderedIds = localeEntries.map((e) => e.id);
|
|
280
260
|
/** @type {Set<string>} */
|
|
281
|
-
const seen = new Set();
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
diagnostics.push({
|
|
287
|
-
code: DIAG_ID_INVALID,
|
|
288
|
-
severity: 'error',
|
|
289
|
-
message: v.message,
|
|
290
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
291
|
-
});
|
|
292
|
-
continue;
|
|
293
|
-
}
|
|
294
|
-
if (seen.has(id)) {
|
|
295
|
-
diagnostics.push({
|
|
296
|
-
code: DIAG_ID_COLLISION,
|
|
297
|
-
severity: 'error',
|
|
298
|
-
message: `duplicate LocaleId ${id} in locales[]`,
|
|
299
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
300
|
-
});
|
|
301
|
-
continue;
|
|
302
|
-
}
|
|
303
|
-
seen.add(id);
|
|
304
|
-
orderedIds.push(id);
|
|
305
|
-
}
|
|
306
|
-
const defaultLocale = String(rawManifest.defaultLocale || '');
|
|
307
|
-
if (!defaultLocale || !seen.has(defaultLocale)) {
|
|
308
|
-
diagnostics.push({
|
|
309
|
-
code: DIAG_DEFAULT_MISSING,
|
|
310
|
-
severity: 'error',
|
|
311
|
-
message: `defaultLocale ${JSON.stringify(defaultLocale)} missing from locales[]`,
|
|
312
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
const fallback = rawManifest.fallback && typeof rawManifest.fallback === 'object' ? rawManifest.fallback : {};
|
|
316
|
-
const fb = findFallbackCycles(fallback, seen);
|
|
317
|
-
for (const u of fb.unknown) {
|
|
318
|
-
diagnostics.push({
|
|
319
|
-
code: DIAG_FALLBACK_UNKNOWN,
|
|
320
|
-
severity: 'error',
|
|
321
|
-
message: `fallback references unknown LocaleId: ${u}`,
|
|
322
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
for (const c of fb.cycles) {
|
|
326
|
-
diagnostics.push({
|
|
327
|
-
code: DIAG_FALLBACK_CYCLE,
|
|
328
|
-
severity: 'error',
|
|
329
|
-
message: `fallback cycle: ${c}`,
|
|
330
|
-
path: path.relative(projectRoot, manifestPath).replace(/\\/g, '/'),
|
|
331
|
-
});
|
|
332
|
-
}
|
|
261
|
+
const seen = new Set(orderedIds);
|
|
262
|
+
const defaultLocale = String(plan.defaultLocale || '');
|
|
263
|
+
const fallback = plan.fallback && typeof plan.fallback === 'object' ? plan.fallback : {};
|
|
264
|
+
const missingPolicy = plan.missing || 'error';
|
|
265
|
+
const routing = plan.routing || { strategy: 'prefix', defaultPrefix: 'include' };
|
|
333
266
|
/** @type {string[]} */
|
|
334
267
|
const diskLocales = [];
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
268
|
+
if (fs.existsSync(localesRoot)) {
|
|
269
|
+
for (const ent of fs.readdirSync(localesRoot, { withFileTypes: true })) {
|
|
270
|
+
if (LOCALE_RESERVED_TOP.has(ent.name))
|
|
271
|
+
continue;
|
|
272
|
+
if (ent.isFile()) {
|
|
273
|
+
diagnostics.push({
|
|
274
|
+
code: DIAG_LAYOUT_ILLEGAL,
|
|
275
|
+
severity: 'error',
|
|
276
|
+
message: `illegal top-level file under /locales: ${ent.name} (only locales.json5 + LocaleId dirs)`,
|
|
277
|
+
path: `locales/${ent.name}`,
|
|
278
|
+
});
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
if (!ent.isDirectory())
|
|
282
|
+
continue;
|
|
283
|
+
const v = validateLocaleId(ent.name);
|
|
284
|
+
if (!v.ok) {
|
|
285
|
+
diagnostics.push({
|
|
286
|
+
code: DIAG_ID_INVALID,
|
|
287
|
+
severity: 'error',
|
|
288
|
+
message: `directory ${ent.name}: ${v.message}`,
|
|
289
|
+
path: `locales/${ent.name}`,
|
|
290
|
+
});
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
diskLocales.push(ent.name);
|
|
294
|
+
if (!seen.has(ent.name)) {
|
|
295
|
+
diagnostics.push({
|
|
296
|
+
code: DIAG_DIR_ORPHAN,
|
|
297
|
+
severity: 'error',
|
|
298
|
+
message: `locale directory ${ent.name} not listed in locales.json5 locales[]`,
|
|
299
|
+
path: `locales/${ent.name}`,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
367
302
|
}
|
|
368
303
|
}
|
|
369
304
|
for (const id of orderedIds) {
|
|
@@ -402,7 +337,7 @@ export function checkLocales(opts) {
|
|
|
402
337
|
});
|
|
403
338
|
return;
|
|
404
339
|
}
|
|
405
|
-
parsed =
|
|
340
|
+
parsed = parseAuthorInput(text);
|
|
406
341
|
}
|
|
407
342
|
catch (e) {
|
|
408
343
|
diagnostics.push({
|
|
@@ -446,7 +381,6 @@ export function checkLocales(opts) {
|
|
|
446
381
|
}
|
|
447
382
|
});
|
|
448
383
|
}
|
|
449
|
-
// Default locale must define every MessageId; param contracts must match across variants.
|
|
450
384
|
for (const node of messages.values()) {
|
|
451
385
|
if (defaultLocale && !node.variants[defaultLocale]) {
|
|
452
386
|
diagnostics.push({
|
|
@@ -475,7 +409,7 @@ export function checkLocales(opts) {
|
|
|
475
409
|
if (!node.variants[loc] && loc !== defaultLocale) {
|
|
476
410
|
const edges = fallback[loc] || [];
|
|
477
411
|
const canFallback = edges.some((e) => node.variants[e]);
|
|
478
|
-
if (!canFallback &&
|
|
412
|
+
if (!canFallback && missingPolicy !== 'warn') {
|
|
479
413
|
diagnostics.push({
|
|
480
414
|
code: DIAG_MESSAGE_MISSING_VARIANT,
|
|
481
415
|
severity: 'error',
|
|
@@ -486,7 +420,6 @@ export function checkLocales(opts) {
|
|
|
486
420
|
}
|
|
487
421
|
}
|
|
488
422
|
}
|
|
489
|
-
// scan source for #locales/* imports / message references.
|
|
490
423
|
const used = scanLocaleUsages(projectRoot);
|
|
491
424
|
/** @type {any[]} */
|
|
492
425
|
const typedModules = [];
|
|
@@ -557,12 +490,12 @@ export function checkLocales(opts) {
|
|
|
557
490
|
localesRoot: path.relative(projectRoot, localesRoot).replace(/\\/g, '/') || 'locales',
|
|
558
491
|
manifest: {
|
|
559
492
|
schema: LOCALE_MANIFEST_SCHEMA,
|
|
560
|
-
schemaVersion:
|
|
493
|
+
schemaVersion: 1,
|
|
561
494
|
defaultLocale,
|
|
562
495
|
locales: localeEntries,
|
|
563
496
|
fallback,
|
|
564
|
-
routing
|
|
565
|
-
missing:
|
|
497
|
+
routing,
|
|
498
|
+
missing: missingPolicy,
|
|
566
499
|
},
|
|
567
500
|
catalogIds: catalogIds.sort(),
|
|
568
501
|
messageCatalog: {
|
|
@@ -668,25 +601,19 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
668
601
|
fs.mkdirSync(outDir, { recursive: true });
|
|
669
602
|
/** @type {string[]} */
|
|
670
603
|
const written = [];
|
|
604
|
+
const native = requireNativeAddon();
|
|
605
|
+
if (typeof native.generateLocaleTypedModule !== 'function') {
|
|
606
|
+
throw new Error('vmz native addon missing generateLocaleTypedModule — rebuild with `pnpm napi:build`');
|
|
607
|
+
}
|
|
671
608
|
for (const mod of report.typedModules || []) {
|
|
672
|
-
const
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
for (const exp of mod.exports) {
|
|
678
|
-
if (!exp.params.length) {
|
|
679
|
-
lines.push(`export declare function ${exp.exportName}(): LocalizedText;`);
|
|
680
|
-
}
|
|
681
|
-
else {
|
|
682
|
-
const args = exp.params.map((p) => `${p.name}: ${p.kind === 'plural' || p.kind === 'number' ? 'number' : 'string'}`).join('; ');
|
|
683
|
-
lines.push(`export declare function ${exp.exportName}(args: { ${args} }): LocalizedText;`);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
lines.push('');
|
|
609
|
+
const exports = (mod.exports || []).map((exp) => ({
|
|
610
|
+
exportName: exp.exportName,
|
|
611
|
+
params: (exp.params || []).map((p) => ({ name: p.name, kind: p.kind || 'string' })),
|
|
612
|
+
}));
|
|
613
|
+
const text = native.generateLocaleTypedModule(mod.module, exports);
|
|
687
614
|
const file = path.join(outDir, `${mod.catalogId}.d.ts`);
|
|
688
615
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
689
|
-
fs.writeFileSync(file,
|
|
616
|
+
fs.writeFileSync(file, text, 'utf8');
|
|
690
617
|
written.push(file);
|
|
691
618
|
}
|
|
692
619
|
const index = {
|
|
@@ -694,7 +621,7 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
694
621
|
modules: (report.typedModules || []).map((m) => m.module),
|
|
695
622
|
outDir,
|
|
696
623
|
};
|
|
697
|
-
|
|
624
|
+
writePrettyJsonFile(path.join(outDir, 'index.json'), index);
|
|
698
625
|
return written;
|
|
699
626
|
}
|
|
700
627
|
/**
|
|
@@ -724,59 +651,30 @@ export function emitLocaleRuntimeModules(projectRoot, distDir) {
|
|
|
724
651
|
const localesOut = path.join(distDir, 'locales');
|
|
725
652
|
fs.mkdirSync(localesOut, { recursive: true });
|
|
726
653
|
for (const mod of report.typedModules || []) {
|
|
727
|
-
const
|
|
728
|
-
`/** Generated ${mod.module} — runtime LocalizedText (defaultLocale=${defaultLocale}) */`,
|
|
729
|
-
`const __vmzDefaultLocale = ${JSON.stringify(defaultLocale)};`,
|
|
730
|
-
`function __vmzLocaleId() {`,
|
|
731
|
-
` if (typeof globalThis !== "undefined" && globalThis.__vmzLocaleIdHint) {`,
|
|
732
|
-
` return String(globalThis.__vmzLocaleIdHint);`,
|
|
733
|
-
` }`,
|
|
734
|
-
` if (typeof document !== "undefined") {`,
|
|
735
|
-
` const d = document.documentElement?.getAttribute("data-locale");`,
|
|
736
|
-
` if (d) return d;`,
|
|
737
|
-
` const lang = document.documentElement?.lang;`,
|
|
738
|
-
` if (lang === "en" || lang === "en-US" || lang === "en-us") return "en-us";`,
|
|
739
|
-
` if (lang === "zh" || lang === "zh-CN" || lang === "zh-Hans" || lang === "zh-hans") return "zh-hans";`,
|
|
740
|
-
` }`,
|
|
741
|
-
` try {`,
|
|
742
|
-
` const stored = localStorage.getItem("vmz.locale");`,
|
|
743
|
-
` if (stored) return stored;`,
|
|
744
|
-
` } catch {}`,
|
|
745
|
-
` return __vmzDefaultLocale;`,
|
|
746
|
-
`}`,
|
|
747
|
-
`function __vmzFormat(template, args) {`,
|
|
748
|
-
` if (!args) return String(template ?? "");`,
|
|
749
|
-
` return String(template ?? "").replace(/\\{(\\w+)(?:,\\s*\\w+)?\\}/g, (m, name) =>`,
|
|
750
|
-
` Object.prototype.hasOwnProperty.call(args, name) ? String(args[name]) : m`,
|
|
751
|
-
` );`,
|
|
752
|
-
`}`,
|
|
753
|
-
`function __vmzPick(variants, args) {`,
|
|
754
|
-
` const id = __vmzLocaleId();`,
|
|
755
|
-
` const template = variants[id] ?? variants[__vmzDefaultLocale] ?? "";`,
|
|
756
|
-
` return __vmzFormat(template, args);`,
|
|
757
|
-
`}`,
|
|
758
|
-
'',
|
|
759
|
-
];
|
|
654
|
+
const exports = [];
|
|
760
655
|
for (const exp of mod.exports || []) {
|
|
761
656
|
const node = byId.get(exp.messageId);
|
|
762
|
-
|
|
657
|
+
/** @type {string[][]} */
|
|
658
|
+
const variants = [];
|
|
763
659
|
if (node?.variants) {
|
|
764
660
|
for (const [loc, v] of Object.entries(node.variants)) {
|
|
765
|
-
variants[loc
|
|
661
|
+
variants.push([loc, v.template]);
|
|
766
662
|
}
|
|
767
663
|
}
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
lines.push(`export function ${exp.exportName}() { return __vmzPick(${lit}); }`);
|
|
774
|
-
}
|
|
664
|
+
exports.push({
|
|
665
|
+
exportName: exp.exportName,
|
|
666
|
+
variants,
|
|
667
|
+
hasParams: (exp.params || []).length > 0,
|
|
668
|
+
});
|
|
775
669
|
}
|
|
776
|
-
|
|
670
|
+
const native = requireNativeAddon();
|
|
671
|
+
if (typeof native.generateLocaleRuntimeModule !== 'function') {
|
|
672
|
+
throw new Error('vmz native addon missing generateLocaleRuntimeModule — rebuild with `pnpm napi:build`');
|
|
673
|
+
}
|
|
674
|
+
const code = native.generateLocaleRuntimeModule(defaultLocale, exports);
|
|
777
675
|
const file = path.join(localesOut, `${mod.catalogId}.js`);
|
|
778
676
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
779
|
-
fs.writeFileSync(file,
|
|
677
|
+
fs.writeFileSync(file, code, 'utf8');
|
|
780
678
|
written.push(file);
|
|
781
679
|
}
|
|
782
680
|
rewriteLocaleImportsInDist(distDir);
|
|
@@ -790,7 +688,7 @@ function rewriteLocaleImportsInDist(distDir) {
|
|
|
790
688
|
const files = [];
|
|
791
689
|
walkDistJs(distDir, (file) => files.push(file));
|
|
792
690
|
for (const file of files) {
|
|
793
|
-
|
|
691
|
+
const text = fs.readFileSync(file, 'utf8');
|
|
794
692
|
if (!text.includes('#locales/'))
|
|
795
693
|
continue;
|
|
796
694
|
const fromDir = path.dirname(file);
|