@vmz/vmz 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-assemble.js +3 -4
- package/dist/cdn-policy.js +4 -5
- package/dist/cli.js +15 -50
- package/dist/content-addressed-assets.d.ts +2 -8
- package/dist/content-addressed-assets.js +34 -111
- package/dist/delivery-profile.d.ts +1 -11
- package/dist/delivery-profile.js +1 -70
- package/dist/dev-session.d.ts +0 -1
- package/dist/dev-session.js +65 -268
- package/dist/document-build.d.ts +1 -2
- package/dist/document-build.js +82 -104
- package/dist/document-cmd.js +9 -2
- package/dist/document-enrich.d.ts +1 -2
- package/dist/document-enrich.js +4 -15
- package/dist/document-integrate.js +21 -29
- package/dist/embedded-packaging.js +1 -2
- package/dist/index.d.ts +1 -15
- package/dist/index.js +3 -59
- package/dist/locale-check.js +61 -28
- package/dist/locale-cmd.js +42 -10
- package/dist/locale-route-emit.d.ts +1 -4
- package/dist/locale-route-emit.js +32 -7
- package/dist/locale-router.js +8 -26
- package/dist/pack.js +2 -3
- package/dist/production-observability.js +2 -3
- package/dist/production-test-pack.js +3 -4
- package/dist/release-pack.js +18 -5
- package/dist/server-artifact.js +3 -4
- package/dist/site-delivery.js +3 -4
- package/dist/static-emit.js +97 -118
- package/dist/test-cmd.js +1 -2
- package/package.json +12 -12
- package/dist/dev-watch-roots.d.ts +0 -80
- package/dist/dev-watch-roots.js +0 -245
- package/dist/document-layout-render.d.ts +0 -20
- package/dist/document-layout-render.js +0 -87
- package/dist/document-routing-config.d.ts +0 -13
- package/dist/document-routing-config.js +0 -40
- package/dist/native-addon.d.ts +0 -9
- package/dist/native-addon.js +0 -84
- package/dist/pretty-json.d.ts +0 -19
- package/dist/pretty-json.js +0 -43
- package/dist/route-path.d.ts +0 -35
- package/dist/route-path.js +0 -77
- package/dist/wechat-packaging.d.ts +0 -22
- package/dist/wechat-packaging.js +0 -59
package/dist/index.js
CHANGED
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Coarse-grained only — no transform hooks / per-AST callbacks.
|
|
5
5
|
*/
|
|
6
6
|
import { createRequire } from 'node:module';
|
|
7
|
-
import {
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { fileURLToPath } from 'node:url';
|
|
10
|
-
import { materializeWechatPackaging } from './wechat-packaging.js';
|
|
11
10
|
export { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLAN_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TEST_PROTOCOL, TEST_MANIFEST_SCHEMA, TEST_REPORT_SCHEMA, protocolCatalog, dxCatalog, testCatalog, applicationCatalog, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, TARGET_DIAG_DOM_LEAK_IN_PLAN, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_MAPPING_ENTRY_SCHEMA, PROFILE_LIFECYCLE_MAPPING_TABLE_SCHEMA, PROFILE_RECOVERY_POLICY_SCHEMA, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, LOCALE_PROTOCOL, LOCALE_MANIFEST_SCHEMA, LOCALE_MESSAGE_CATALOG_SCHEMA, LOCALE_MESSAGE_NODE_SCHEMA, LOCALE_CHECK_SCHEMA, LOCALE_TYPED_MODULE_SCHEMA, LOCALE_RENAME_SCHEMA, LOCALE_APPLICATION_CONTEXT_SCHEMA, LOCALE_FORMATTER_CONTEXT_SCHEMA, LOCALE_TRANSITION_SCHEMA, LOCALE_RUNTIME_CHECK_SCHEMA, LOCALE_FALLBACK_RESOLUTION_SCHEMA, FORMATTER_DATA_VERSION, LOCALE_ROUTE_REALIZATION_SCHEMA, LOCALE_PAGE_META_SCHEMA, LOCALE_LINK_RESOLUTION_SCHEMA, LOCALE_ROUTER_CHECK_SCHEMA, LOCALE_DELIVERY_RESOLUTION_SCHEMA, LOCALE_CHUNK_MANIFEST_SCHEMA, LOCALE_NATIVE_PACK_SCHEMA, LOCALE_MINI_PACKAGE_PROOF_SCHEMA, LOCALE_SERVER_ERROR_ENVELOPE_SCHEMA, LOCALE_DELIVERY_CHECK_SCHEMA, LOCALE_EXPLAIN_SCHEMA, LOCALE_DIFF_SCHEMA, LOCALE_EXTRACT_SCHEMA, LOCALE_PSEUDO_SCHEMA, LOCALE_CONFORMANCE_SCHEMA, LOCALE_DIAG_MANIFEST_MISSING, LOCALE_DIAG_ID_INVALID, LOCALE_DIAG_FALLBACK_CYCLE, LOCALE_DIAG_MESSAGE_PARAMETER_MISMATCH, LOCALE_DIAG_MESSAGE_UNUSED, LOCALE_DIAG_FORMATTER_CONTEXT_INCOMPLETE, LOCALE_DIAG_FORMATTER_VERSION_MISMATCH, LOCALE_DIAG_DIGEST_MISMATCH, LOCALE_DIAG_TRANSITION_PARTIAL, LOCALE_DIAG_TRANSITION_UNSUPPORTED, LOCALE_DIAG_TRANSITION_LOAD_FAILED, LOCALE_DIAG_MACHINE_DEFAULT_FORBIDDEN, LOCALE_DIAG_MESSAGE_MIXED_LOCALE, LOCALE_DIAG_STALE_GENERATION, LOCALE_DIAG_ROUTE_COLLISION, LOCALE_DIAG_CANONICAL_MISSING, LOCALE_DIAG_HREFLANG_INCOMPLETE, LOCALE_DIAG_META_LOCALE_MISMATCH, LOCALE_DIAG_LINK_HARDCODED_PATH, LOCALE_DIAG_CACHE_KEY_STEALS_CONTENT, LOCALE_DIAG_PREFIX_OMIT_WITHOUT_REDIRECT, LOCALE_DIAG_DELIVERY_FULL_BUNDLE, LOCALE_DIAG_CHUNK_HASH_MISMATCH, LOCALE_DIAG_NATIVE_PACK_UNSIGNED, LOCALE_DIAG_NATIVE_PACK_HAS_JS, LOCALE_DIAG_NATIVE_PACK_APP_MISMATCH, LOCALE_DIAG_MINI_CROSS_PACKAGE_UNPROVEN, LOCALE_DIAG_SERVER_TRANSLATED_ERROR, LOCALE_DIAG_SERVER_FORMAT_WITHOUT_CONTEXT, LOCALE_DIAG_HOST_MESSAGE_DIVERGENCE, LOCALE_DIAG_MESSAGE_DYNAMIC_ID_UNBOUNDED, LOCALE_DIAG_HARDCODED_TEXT, LOCALE_DIAG_PSEUDO_PRODUCTION_FORBIDDEN, LOCALE_DIAG_CONFORMANCE_DIVERGENCE, LOCALE_DIAG_EXPLAIN_UNKNOWN, LOCALE_VIRTUAL_MODULE_PREFIX, localeCatalog, } from '@vmz/protocol';
|
|
12
11
|
import { HOST_PROTOCOL, COMPILER_PROTOCOL, PROGRAM_IR_SCHEMA, PLUGIN_PROTOCOL, DX_PROTOCOL, DX_SYMBOL_SCHEMA, DX_REFERENCE_SCHEMA, DX_EXPLAIN_SCHEMA, DX_WORKSPACE_EDIT_SCHEMA, DX_CODE_ACTION_SCHEMA, DX_AFFECTED_SCHEMA, DX_RENAME_SCHEMA, DX_TEST_SELECTION_SCHEMA, DX_SOURCE_MAP_SCHEMA, DX_SYMBOL_INDEX_SCHEMA, DX_CROSS_SFC_CHECK_SCHEMA, DX_SEMANTIC_TRANSACTION_SCHEMA, DX_CANCEL_SCHEMA, DX_AFFECTED_PREVIEW_SCHEMA, DX_HMR_PLAN_SCHEMA, DX_BUDGET_SCHEMA, DX_TRANSACTION_CHECK_SCHEMA, DX_BOUNDARY_VALIDATOR_SCHEMA, DX_LEAKAGE_SCHEMA, DX_CAPABILITY_TARGET_SCHEMA, DX_DEAD_GRAPH_SCHEMA, DX_DEPLOYMENT_PROOF_CHECK_SCHEMA, DX_TRACE_SCHEMA, DX_CAUSAL_REPLAY_SCHEMA, DX_CAUSAL_REPLAY_CHECK_SCHEMA, APPLICATION_PROTOCOL, APPLICATION_DESCRIPTOR_SCHEMA, APPLICATIONS_CONFIG_SCHEMA, APPLICATION_CATALOG_SCHEMA, APPLICATION_CHECK_SCHEMA, APPLICATION_BASE_SCHEMA, APPLICATION_RELOCATION_SCHEMA, APPLICATION_RELOCATED_SCHEMA, APPLICATION_RELOCATABLE_CHECK_SCHEMA, APPLICATION_ARTIFACT_SCHEMA, APPLICATION_MOUNT_TABLE_SCHEMA, APPLICATION_ARTIFACT_BOUNDARY_SCHEMA, APPLICATION_ISOLATION_SCHEMA, APPLICATION_ISOLATION_CHECK_SCHEMA, APPLICATION_CROSS_LINK_SCHEMA, APPLICATION_HOST_COMPOSITION_SCHEMA, APPLICATION_DEV_SESSIONS_SCHEMA, APPLICATION_AFFECTED_SCHEMA, APPLICATION_PROXY_DISPATCH_SCHEMA, APPLICATION_MOUNTED_TEST_SCHEMA, APPLICATION_DEPLOY_ADAPTER_SCHEMA, APPLICATION_DEV_CHECK_SCHEMA, PROTOCOL_CATALOG_SCHEMA, TARGET_PROTOCOL, TARGET_VIEW_OPS_SCHEMA, TARGET_PLATFORM_PROFILE_SCHEMA, TARGET_MINI_PROGRAM_ARTIFACT_SCHEMA, TARGET_CHECK_SCHEMA, targetCatalog, PROFILE_PROTOCOL, PROFILE_HOST_SCHEMA, PROFILE_DELIVERY_SCHEMA, PROFILE_CHECK_SCHEMA, PROFILE_DIAG_HOST_PROFILE_INVALID, PROFILE_DIAG_RESOLUTION_DIGEST_MISMATCH, PROFILE_DIAG_CORE_ID_OVERRIDE, PROFILE_DIAG_HOST_PROFILE_REF_UNRESOLVED, PROFILE_SURFACE_KINDS, PROFILE_UNIFIED_LIFECYCLE_EVENTS, PROFILE_CORE_ID_PREFIX, PROFILE_SOLVER_CHECK_SCHEMA, PROFILE_HOST_RESOLUTION_MANIFEST_SCHEMA, PROFILE_EXECUTOR_CHECK_SCHEMA, PROFILE_EXECUTOR_SCENARIO_SCHEMA, PROFILE_DIAG_SURFACE_NO_MATCH, PROFILE_DIAG_SURFACE_AMBIGUOUS, PROFILE_DIAG_CAPABILITY_UNRESOLVED, PROFILE_DIAG_CAPABILITY_PERMISSION_UNDECLARED, PROFILE_DIAG_ROUTE_UNREALIZABLE, PROFILE_DIAG_STALE_GENERATION, PROFILE_DIAG_MISSING_ENVELOPE_IDS, PROFILE_DIAG_SURFACE_OWNS_STATE, PROFILE_DIAG_PRIVATE_OBJECT_CROSSING, PROFILE_DIAG_SPLIT_TRANSACTION, PROFILE_DIAG_DISPOSE_NOT_AUTHORITATIVE, PROFILE_DIAG_CANCEL_NOT_PROPAGATED, PROFILE_LIFECYCLE_SCENARIO_SCHEMA, PROFILE_LIFECYCLE_RECOVERY_CHECK_SCHEMA, PROFILE_LIFECYCLE_HOST_KINDS, PROFILE_PERSISTENCE_WINDOWS, PROFILE_DIAG_LIFECYCLE_UNPROVEN, PROFILE_DIAG_LIFECYCLE_MAPPING_INCOMPLETE, PROFILE_DIAG_RECOVERY_DUPLICATES_OWNER, PROFILE_DIAG_RECOVERY_ASSUMES_HEAP, PROFILE_DIAG_PERSISTENCE_WINDOW_INVALID, PROFILE_DELIVERY_PACKAGE_CONSTRAINTS_SCHEMA, PROFILE_DELIVERY_SECURITY_POLICY_SCHEMA, PROFILE_DELIVERY_UPDATE_POLICY_SCHEMA, PROFILE_DELIVERY_ARTIFACT_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_MANIFEST_SCHEMA, PROFILE_DELIVERY_PROOF_SCENARIO_SCHEMA, PROFILE_DELIVERY_PROOF_CHECK_SCHEMA, PROFILE_DELIVERY_UPDATE_CHANNELS, PROFILE_DELIVERY_ASSET_STRATEGIES, PROFILE_DIAG_DELIVERY_CONSTRAINT_EXCEEDED, PROFILE_DIAG_HOST_PLAN_VERSION_MISMATCH, PROFILE_DIAG_PROOF_MANIFEST_INCOMPLETE, PROFILE_DIAG_PROOF_COPIES_SEMANTIC_IR, PROFILE_DIAG_UPDATE_WITHOUT_REPROOF, PROFILE_DIAG_SECURITY_POLICY_INSECURE, PROFILE_CONFORMANCE_FIXTURE_SCHEMA, PROFILE_CONFORMANCE_STATE_SNAPSHOT_SCHEMA, PROFILE_CONFORMANCE_TRACE_SCHEMA, PROFILE_CONFORMANCE_HOST_RUN_SCHEMA, PROFILE_CONFORMANCE_SCENARIO_SCHEMA, PROFILE_CONFORMANCE_CHECK_SCHEMA, PROFILE_CONFORMANCE_SURFACE_ROLES, PROFILE_DIAG_STABLE_ID_DIVERGENCE, PROFILE_DIAG_STATE_RESULT_DIVERGENCE, PROFILE_DIAG_TRACE_INVARIANT_BROKEN, PROFILE_DIAG_CONFORMANCE_HOST_INCOMPLETE, PROFILE_DIAG_CONFORMANCE_SURFACE_ROLE_MISMATCH, profileCatalog, NATIVE_HOST_PROTOCOL, NATIVE_HOST_WEBVIEW_DEPLOYMENT_SCHEMA, NATIVE_HOST_CAPABILITY_SCHEMA, NATIVE_HOST_BRIDGE_SCHEMA, NATIVE_HOST_APPLICATION_IDENTITY_SCHEMA, NATIVE_HOST_CHECK_SCHEMA, NATIVE_HOST_DIAG_ARBITRARY_BRIDGE, NATIVE_HOST_SHELL_SCHEMA, NATIVE_HOST_SHELL_CHECK_SCHEMA, NATIVE_HOST_DEEP_LINK_SCHEMA, NATIVE_HOST_LOCAL_BUNDLE_SCHEMA, NATIVE_HOST_DIAG_MISSING_SHELL_HOOK, NATIVE_HOST_DIAG_PLATFORM_SEMANTIC_FORK, NATIVE_HOST_DIAG_REMOTE_ENTRY_DEFAULT, NATIVE_HOST_DIAG_MISSING_ENTRY_ARTIFACT, NATIVE_HOST_REQUIRED_SHELL_HOOKS, NATIVE_HOST_CAPABILITY_CALL_SCHEMA, NATIVE_HOST_BRIDGE_TRACE_SCHEMA, NATIVE_HOST_BRIDGE_STUB_CATALOG_SCHEMA, NATIVE_HOST_BRIDGE_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_NONCE, NATIVE_HOST_DIAG_CALL_NOT_ALLOWLISTED, NATIVE_HOST_FIRST_BATCH_STUB_IDS, NATIVE_HOST_LIFECYCLE_SCHEMA, NATIVE_HOST_LIFECYCLE_CHECK_SCHEMA, NATIVE_HOST_DIAG_BACKGROUND_IS_DESTROY, NATIVE_HOST_DIAG_CRASH_ASSUMES_JS_HEAP, NATIVE_HOST_DIAG_MISSING_LIFECYCLE_EVENT, NATIVE_HOST_REQUIRED_LIFECYCLE_EVENTS, NATIVE_HOST_FULLSTACK_SCHEMA, NATIVE_HOST_FULLSTACK_CHECK_SCHEMA, NATIVE_HOST_DIAG_BRIDGE_BYPASSES_SERVER, NATIVE_HOST_DIAG_REMOTE_WITHOUT_INTEGRITY, NATIVE_HOST_DIAG_MISSING_SERVER_TRANSPORT, NATIVE_HOST_NATIVE_SURFACE_SCHEMA, NATIVE_HOST_NATIVE_SURFACE_CHECK_SCHEMA, NATIVE_HOST_DIAG_SURFACE_IS_CAPABILITY, NATIVE_HOST_DIAG_IMPLICIT_STATE_SHARE, NATIVE_HOST_HIGH_VALUE_SURFACE_KINDS, NATIVE_HOST_MULTI_PLATFORM_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_SHARED_SCHEMA, NATIVE_HOST_MULTI_PLATFORM_CHECK_SCHEMA, NATIVE_HOST_DIAG_MISSING_PLATFORM_ADAPTER, NATIVE_HOST_DIAG_PLATFORM_PRIVATE_SCHEMA, NATIVE_HOST_DIAG_ADAPTER_IS_SEMANTIC_CORE, NATIVE_HOST_REQUIRED_MULTI_PLATFORMS, NATIVE_HOST_MULTI_PLATFORM_ADAPTER_KIND, nativeHostCatalog, localeCatalog, } from '@vmz/protocol';
|
|
13
12
|
const require = createRequire(import.meta.url);
|
|
@@ -144,32 +143,6 @@ export function resolveCoreRuntimeDist() {
|
|
|
144
143
|
return nested;
|
|
145
144
|
return null;
|
|
146
145
|
}
|
|
147
|
-
/** Runtime companions required by dist/vmz-serve-host.mjs relative imports. */
|
|
148
|
-
export const SERVE_HOST_RUNTIME_FILES = [
|
|
149
|
-
['serve-host.mjs', 'vmz-serve-host.mjs'],
|
|
150
|
-
['list-client-components.js', 'list-client-components.js'],
|
|
151
|
-
['deployment-registry.js', 'deployment-registry.js'],
|
|
152
|
-
['render-host.js', 'render-host.js'],
|
|
153
|
-
['route-layout-chain.js', 'route-layout-chain.js'],
|
|
154
|
-
];
|
|
155
|
-
/**
|
|
156
|
-
* Copy serve-host + registry bootstrap modules from `@vmz/core` into app outDir.
|
|
157
|
-
* @param {string} outDir
|
|
158
|
-
* @param {string} [coreDist]
|
|
159
|
-
*/
|
|
160
|
-
export function materializeServeHostRuntime(outDir, coreDist = resolveCoreRuntimeDist()) {
|
|
161
|
-
if (!coreDist) {
|
|
162
|
-
throw new Error('materializeServeHostRuntime: @vmz/core dist not found');
|
|
163
|
-
}
|
|
164
|
-
for (const [srcName, outName] of SERVE_HOST_RUNTIME_FILES) {
|
|
165
|
-
const src = path.join(coreDist, srcName);
|
|
166
|
-
const dst = path.join(outDir, outName);
|
|
167
|
-
if (!existsSync(src)) {
|
|
168
|
-
throw new Error(`materializeServeHostRuntime: missing ${src}`);
|
|
169
|
-
}
|
|
170
|
-
copyFileSync(src, dst);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
146
|
/**
|
|
174
147
|
* @typedef {object} WorkspaceOptions
|
|
175
148
|
* @property {string} root
|
|
@@ -185,7 +158,7 @@ export function createWorkspace(options) {
|
|
|
185
158
|
const native = loadNative();
|
|
186
159
|
const protocol = options.protocol ?? expectedProtocol();
|
|
187
160
|
const runtimeDist = options.runtimeDist ?? resolveCoreRuntimeDist() ?? undefined;
|
|
188
|
-
|
|
161
|
+
return native.JsWorkspace.create({
|
|
189
162
|
root: options.root,
|
|
190
163
|
outDir: options.outDir,
|
|
191
164
|
runtimeDist,
|
|
@@ -196,25 +169,6 @@ export function createWorkspace(options) {
|
|
|
196
169
|
pluginProtocol: protocol.pluginProtocol,
|
|
197
170
|
},
|
|
198
171
|
});
|
|
199
|
-
const pack = ws.lowerMiniprogramWechatPackaging.bind(ws);
|
|
200
|
-
const wrappedPack = () => {
|
|
201
|
-
materializeWechatPackaging(options.root);
|
|
202
|
-
return pack();
|
|
203
|
-
};
|
|
204
|
-
try {
|
|
205
|
-
ws.lowerMiniprogramWechatPackaging = wrappedPack;
|
|
206
|
-
return ws;
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
209
|
-
return new Proxy(ws, {
|
|
210
|
-
get(target, prop, receiver) {
|
|
211
|
-
if (prop === 'lowerMiniprogramWechatPackaging')
|
|
212
|
-
return wrappedPack;
|
|
213
|
-
const value = Reflect.get(target, prop, receiver);
|
|
214
|
-
return typeof value === 'function' ? value.bind(target) : value;
|
|
215
|
-
},
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
172
|
}
|
|
219
173
|
/**
|
|
220
174
|
* frozen application composition protocol catalog.
|
|
@@ -262,11 +216,6 @@ export function lowerMiniprogramToolingDeployJson(rootPath) {
|
|
|
262
216
|
const native = loadNative();
|
|
263
217
|
return native.lowerMiniprogramToolingDeployJson(rootPath);
|
|
264
218
|
}
|
|
265
|
-
export function lowerMiniprogramWechatPackagingJson(rootPath) {
|
|
266
|
-
const native = loadNative();
|
|
267
|
-
materializeWechatPackaging(rootPath);
|
|
268
|
-
return native.lowerMiniprogramWechatPackagingJson(rootPath);
|
|
269
|
-
}
|
|
270
219
|
export function lowerMiniprogramMultiAdapterJson(rootPath) {
|
|
271
220
|
const native = loadNative();
|
|
272
221
|
return native.lowerMiniprogramMultiAdapterJson(rootPath);
|
|
@@ -395,7 +344,6 @@ export function checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyP
|
|
|
395
344
|
return native.checkApplicationDevTestDeployJson(hostRoot, packageRoots, dirtyPaths);
|
|
396
345
|
}
|
|
397
346
|
export { createDevSession, listWatchedFiles, srcFingerprint } from './dev-session.js';
|
|
398
|
-
export { coalesceRootBurst, collectDevWatchRoots, mergeDirtySets, localLinkDependencyRoots, watchRootForSourceFile, } from './dev-watch-roots.js';
|
|
399
347
|
export { findAvailablePort } from './port.js';
|
|
400
348
|
export { runCli, parseArgs, printHelp, printGlobalHelp, printProjectHelp } from './cli.js';
|
|
401
349
|
export { findNearestProjectVmz, getInvocationContext, isGlobalAllowedCommand, isUnderNodeModules, resolveThisPackageRoot, resolveVmzBin, gateGlobalProjectCommand, } from './invocation.js';
|
|
@@ -413,8 +361,7 @@ export { CDN_POLICY_MANIFEST_SCHEMA, CDN_ADAPTER_PROJECTION_SCHEMA, CACHE_HTML,
|
|
|
413
361
|
export { SITE_DELIVERY_CONTRACT_SCHEMA, SITE_DELIVERY_RESOLUTION_SCHEMA, defineSite, normalizeSiteDelivery, normalizeSourceProbe, resolveSiteRelease, probeReleaseDirectory, emitSiteDelivery, } from './site-delivery.js';
|
|
414
362
|
export { EMBEDDED_RESOURCE_INDEX_SCHEMA, emitEmbeddedPackaging, } from './embedded-packaging.js';
|
|
415
363
|
export { SERVER_LANG_IDS, SERVER_LANG_ALIASES, SERVER_LANGUAGE_BACKENDS, resolveServerLanguage, assertLangRuntimePair, } from './server-language-backend.js';
|
|
416
|
-
export {
|
|
417
|
-
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, pickDeliveryPackaging, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
364
|
+
export { DELIVERY_PROFILE_AUTHORING_SCHEMA, BUILD_PROFILE_SELECTION_SCHEMA, ASSEMBLIES, SERVER_RUNTIMES, BUILTIN_PROFILES, pickSiteAuthoring, normalizeDeliveryAuthoring, selectBuildProfile, semanticIdsForAssembly, } from './delivery-profile.js';
|
|
418
365
|
export { PACK_MANIFEST_SCHEMA, packFromDeploymentIr, ensureRuntimeCompanions } from './pack.js';
|
|
419
366
|
export { SERVER_ARTIFACT_SCHEMA, HTTP_CONTRACT_SCHEMA, SERVER_RUNTIME_ADAPTER_SCHEMA, emitServerArtifact, projectServerRuntimeAdapter, } from './server-artifact.js';
|
|
420
367
|
export { BUILD_PROOF_SCHEMA, ASSEMBLE_MANIFEST_SCHEMA, assembleDelivery, emitBuildProof, } from './build-assemble.js';
|
|
@@ -484,8 +431,6 @@ export default {
|
|
|
484
431
|
expectedProtocol,
|
|
485
432
|
resolveNativePath,
|
|
486
433
|
resolveCoreRuntimeDist,
|
|
487
|
-
materializeServeHostRuntime,
|
|
488
|
-
SERVE_HOST_RUNTIME_FILES,
|
|
489
434
|
loadNative,
|
|
490
435
|
getProtocolVersions,
|
|
491
436
|
handshake,
|
|
@@ -499,7 +444,6 @@ export default {
|
|
|
499
444
|
lowerMiniprogramStructureJson,
|
|
500
445
|
lowerMiniprogramRouteServerStyleJson,
|
|
501
446
|
lowerMiniprogramToolingDeployJson,
|
|
502
|
-
lowerMiniprogramWechatPackagingJson,
|
|
503
447
|
lowerMiniprogramMultiAdapterJson,
|
|
504
448
|
createMiniHost,
|
|
505
449
|
queryProfileProtocolCatalog,
|
package/dist/locale-check.js
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import JSON5 from 'json5';
|
|
10
|
-
import { requireNativeAddon } from './native-addon.js';
|
|
11
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
12
10
|
import { DIAG_CATALOG_CONFLICT, DIAG_CATALOG_PARSE, DIAG_DEFAULT_MISSING, DIAG_DIR_MISSING, DIAG_DIR_ORPHAN, DIAG_FALLBACK_CYCLE, DIAG_FALLBACK_UNKNOWN, DIAG_ID_COLLISION, DIAG_ID_INVALID, DIAG_LAYOUT_ILLEGAL, DIAG_MANIFEST_MISSING, DIAG_MESSAGE_ARRAY_FORBIDDEN, DIAG_MESSAGE_HTML_FORBIDDEN, DIAG_MESSAGE_MISSING_DEFAULT, DIAG_MESSAGE_PARAMETER_MISMATCH, DIAG_MESSAGE_SYNTAX_INVALID, DIAG_MESSAGE_UNUSED, LOCALE_CHECK_SCHEMA, LOCALE_ID_RE, LOCALE_MANIFEST_SCHEMA, LOCALE_RESERVED_TOP, LOCALE_TYPED_MODULE_SCHEMA, LOCALE_VIRTUAL_MODULE_PREFIX, MESSAGE_CATALOG_SCHEMA, MESSAGE_NODE_SCHEMA, } from './locale-schema.js';
|
|
13
11
|
/**
|
|
14
12
|
* @param {string} literal
|
|
@@ -670,19 +668,25 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
670
668
|
fs.mkdirSync(outDir, { recursive: true });
|
|
671
669
|
/** @type {string[]} */
|
|
672
670
|
const written = [];
|
|
673
|
-
const native = requireNativeAddon();
|
|
674
|
-
if (typeof native.generateLocaleTypedModule !== 'function') {
|
|
675
|
-
throw new Error('vmz native addon missing generateLocaleTypedModule — rebuild with `pnpm napi:build`');
|
|
676
|
-
}
|
|
677
671
|
for (const mod of report.typedModules || []) {
|
|
678
|
-
const
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
672
|
+
const lines = [
|
|
673
|
+
`/** Generated LocalizedText module — ${mod.module} (vmz.locale.typed_module.v0) */`,
|
|
674
|
+
`export type LocalizedText = string & { readonly __brand: 'LocalizedText' };`,
|
|
675
|
+
'',
|
|
676
|
+
];
|
|
677
|
+
for (const exp of mod.exports) {
|
|
678
|
+
if (!exp.params.length) {
|
|
679
|
+
lines.push(`export declare function ${exp.exportName}(): LocalizedText;`);
|
|
680
|
+
}
|
|
681
|
+
else {
|
|
682
|
+
const args = exp.params.map((p) => `${p.name}: ${p.kind === 'plural' || p.kind === 'number' ? 'number' : 'string'}`).join('; ');
|
|
683
|
+
lines.push(`export declare function ${exp.exportName}(args: { ${args} }): LocalizedText;`);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
lines.push('');
|
|
683
687
|
const file = path.join(outDir, `${mod.catalogId}.d.ts`);
|
|
684
688
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
685
|
-
fs.writeFileSync(file,
|
|
689
|
+
fs.writeFileSync(file, lines.join('\n'), 'utf8');
|
|
686
690
|
written.push(file);
|
|
687
691
|
}
|
|
688
692
|
const index = {
|
|
@@ -690,7 +694,7 @@ export function emitLocaleTypedModules(report, outDir) {
|
|
|
690
694
|
modules: (report.typedModules || []).map((m) => m.module),
|
|
691
695
|
outDir,
|
|
692
696
|
};
|
|
693
|
-
|
|
697
|
+
fs.writeFileSync(path.join(outDir, 'index.json'), `${JSON.stringify(index, null, 2)}\n`, 'utf8');
|
|
694
698
|
return written;
|
|
695
699
|
}
|
|
696
700
|
/**
|
|
@@ -720,30 +724,59 @@ export function emitLocaleRuntimeModules(projectRoot, distDir) {
|
|
|
720
724
|
const localesOut = path.join(distDir, 'locales');
|
|
721
725
|
fs.mkdirSync(localesOut, { recursive: true });
|
|
722
726
|
for (const mod of report.typedModules || []) {
|
|
723
|
-
const
|
|
727
|
+
const lines = [
|
|
728
|
+
`/** Generated ${mod.module} — runtime LocalizedText (defaultLocale=${defaultLocale}) */`,
|
|
729
|
+
`const __vmzDefaultLocale = ${JSON.stringify(defaultLocale)};`,
|
|
730
|
+
`function __vmzLocaleId() {`,
|
|
731
|
+
` if (typeof globalThis !== "undefined" && globalThis.__vmzLocaleIdHint) {`,
|
|
732
|
+
` return String(globalThis.__vmzLocaleIdHint);`,
|
|
733
|
+
` }`,
|
|
734
|
+
` if (typeof document !== "undefined") {`,
|
|
735
|
+
` const d = document.documentElement?.getAttribute("data-locale");`,
|
|
736
|
+
` if (d) return d;`,
|
|
737
|
+
` const lang = document.documentElement?.lang;`,
|
|
738
|
+
` if (lang === "en" || lang === "en-US" || lang === "en-us") return "en-us";`,
|
|
739
|
+
` if (lang === "zh" || lang === "zh-CN" || lang === "zh-Hans" || lang === "zh-hans") return "zh-hans";`,
|
|
740
|
+
` }`,
|
|
741
|
+
` try {`,
|
|
742
|
+
` const stored = localStorage.getItem("vmz.locale");`,
|
|
743
|
+
` if (stored) return stored;`,
|
|
744
|
+
` } catch {}`,
|
|
745
|
+
` return __vmzDefaultLocale;`,
|
|
746
|
+
`}`,
|
|
747
|
+
`function __vmzFormat(template, args) {`,
|
|
748
|
+
` if (!args) return String(template ?? "");`,
|
|
749
|
+
` return String(template ?? "").replace(/\\{(\\w+)(?:,\\s*\\w+)?\\}/g, (m, name) =>`,
|
|
750
|
+
` Object.prototype.hasOwnProperty.call(args, name) ? String(args[name]) : m`,
|
|
751
|
+
` );`,
|
|
752
|
+
`}`,
|
|
753
|
+
`function __vmzPick(variants, args) {`,
|
|
754
|
+
` const id = __vmzLocaleId();`,
|
|
755
|
+
` const template = variants[id] ?? variants[__vmzDefaultLocale] ?? "";`,
|
|
756
|
+
` return __vmzFormat(template, args);`,
|
|
757
|
+
`}`,
|
|
758
|
+
'',
|
|
759
|
+
];
|
|
724
760
|
for (const exp of mod.exports || []) {
|
|
725
761
|
const node = byId.get(exp.messageId);
|
|
726
|
-
|
|
727
|
-
const variants = [];
|
|
762
|
+
const variants = {};
|
|
728
763
|
if (node?.variants) {
|
|
729
764
|
for (const [loc, v] of Object.entries(node.variants)) {
|
|
730
|
-
variants
|
|
765
|
+
variants[loc] = v.template;
|
|
731
766
|
}
|
|
732
767
|
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
if (typeof native.generateLocaleRuntimeModule !== 'function') {
|
|
741
|
-
throw new Error('vmz native addon missing generateLocaleRuntimeModule — rebuild with `pnpm napi:build`');
|
|
768
|
+
const lit = JSON.stringify(variants);
|
|
769
|
+
if ((exp.params || []).length) {
|
|
770
|
+
lines.push(`export function ${exp.exportName}(args) { return __vmzPick(${lit}, args); }`);
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
lines.push(`export function ${exp.exportName}() { return __vmzPick(${lit}); }`);
|
|
774
|
+
}
|
|
742
775
|
}
|
|
743
|
-
|
|
776
|
+
lines.push('');
|
|
744
777
|
const file = path.join(localesOut, `${mod.catalogId}.js`);
|
|
745
778
|
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
746
|
-
fs.writeFileSync(file,
|
|
779
|
+
fs.writeFileSync(file, lines.join('\n'), 'utf8');
|
|
747
780
|
written.push(file);
|
|
748
781
|
}
|
|
749
782
|
rewriteLocaleImportsInDist(distDir);
|
package/dist/locale-cmd.js
CHANGED
|
@@ -12,7 +12,6 @@ import { checkLocaleRouter } from './locale-router.js';
|
|
|
12
12
|
import { checkLocaleRuntime } from './locale-runtime.js';
|
|
13
13
|
import { checkLocaleConformance, diffLocaleCatalogs, explainLocaleMessage, extractHardcodedText, pseudoLocalizeCatalog, } from './locale-tooling.js';
|
|
14
14
|
import { log } from './log.js';
|
|
15
|
-
import { emitPrettyJson, generatePrettyJson } from './pretty-json.js';
|
|
16
15
|
function printLocaleHelp() {
|
|
17
16
|
console.log(`vmz locale — /locales application i18n (–)
|
|
18
17
|
|
|
@@ -92,7 +91,14 @@ function cmdLocaleCheck(args) {
|
|
|
92
91
|
const report = checkLocales({ projectRoot, strict: Boolean(args.strict) });
|
|
93
92
|
const jsonOut = args.json;
|
|
94
93
|
if (jsonOut) {
|
|
95
|
-
|
|
94
|
+
const text = JSON.stringify(report, null, 2);
|
|
95
|
+
if (typeof jsonOut === 'string') {
|
|
96
|
+
fs.writeFileSync(jsonOut, `${text}\n`, 'utf8');
|
|
97
|
+
log.info(`wrote ${jsonOut}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
console.log(text);
|
|
101
|
+
}
|
|
96
102
|
}
|
|
97
103
|
else {
|
|
98
104
|
for (const d of report.diagnostics) {
|
|
@@ -145,7 +151,7 @@ function cmdLocaleRename(args) {
|
|
|
145
151
|
const report = checkLocales({ projectRoot, checkUnused: false });
|
|
146
152
|
const plan = planLocaleRename(report, fromId, toId);
|
|
147
153
|
if (args.json) {
|
|
148
|
-
|
|
154
|
+
console.log(JSON.stringify(plan, null, 2));
|
|
149
155
|
}
|
|
150
156
|
else if (plan.status !== 'ready') {
|
|
151
157
|
log.error(plan.error || 'rename failed');
|
|
@@ -175,7 +181,14 @@ function cmdLocaleRuntimeCheck(args) {
|
|
|
175
181
|
});
|
|
176
182
|
const { session: _session, ...jsonReport } = report;
|
|
177
183
|
if (args.json) {
|
|
178
|
-
|
|
184
|
+
const text = JSON.stringify(jsonReport, null, 2);
|
|
185
|
+
if (typeof args.json === 'string') {
|
|
186
|
+
fs.writeFileSync(args.json, `${text}\n`, 'utf8');
|
|
187
|
+
log.info(`wrote ${args.json}`);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
console.log(text);
|
|
191
|
+
}
|
|
179
192
|
}
|
|
180
193
|
else {
|
|
181
194
|
for (const d of report.diagnostics) {
|
|
@@ -218,7 +231,14 @@ function cmdLocaleRouterCheck(args) {
|
|
|
218
231
|
origin: routesFile.origin || 'https://example.test',
|
|
219
232
|
});
|
|
220
233
|
if (args.json) {
|
|
221
|
-
|
|
234
|
+
const text = JSON.stringify(report, null, 2);
|
|
235
|
+
if (typeof args.json === 'string') {
|
|
236
|
+
fs.writeFileSync(args.json, `${text}\n`, 'utf8');
|
|
237
|
+
log.info(`wrote ${args.json}`);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
console.log(text);
|
|
241
|
+
}
|
|
222
242
|
}
|
|
223
243
|
else {
|
|
224
244
|
for (const d of report.diagnostics) {
|
|
@@ -248,7 +268,14 @@ function cmdLocaleDeliveryCheck(args) {
|
|
|
248
268
|
planVersion: 'plan.v0',
|
|
249
269
|
});
|
|
250
270
|
if (args.json) {
|
|
251
|
-
|
|
271
|
+
const text = JSON.stringify(report, null, 2);
|
|
272
|
+
if (typeof args.json === 'string') {
|
|
273
|
+
fs.writeFileSync(args.json, `${text}\n`, 'utf8');
|
|
274
|
+
log.info(`wrote ${args.json}`);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
console.log(text);
|
|
278
|
+
}
|
|
252
279
|
}
|
|
253
280
|
else {
|
|
254
281
|
for (const d of report.diagnostics) {
|
|
@@ -263,9 +290,14 @@ function cmdLocaleDeliveryCheck(args) {
|
|
|
263
290
|
return report.status === 'ready' ? 0 : 1;
|
|
264
291
|
}
|
|
265
292
|
function emitJson(args, report) {
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
293
|
+
const text = JSON.stringify(report, null, 2);
|
|
294
|
+
if (typeof args.json === 'string') {
|
|
295
|
+
fs.writeFileSync(args.json, `${text}\n`, 'utf8');
|
|
296
|
+
log.info(`wrote ${args.json}`);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
console.log(text);
|
|
300
|
+
}
|
|
269
301
|
}
|
|
270
302
|
function cmdLocaleExplain(args) {
|
|
271
303
|
const messageId = typeof args._[0] === 'string' ? args._[0] : '';
|
|
@@ -369,7 +401,7 @@ function cmdLocalePseudo(args) {
|
|
|
369
401
|
const outDir = (typeof args.out === 'string' && args.out) || path.join(projectRoot, 'dist', 'locales-pseudo');
|
|
370
402
|
fs.mkdirSync(outDir, { recursive: true });
|
|
371
403
|
const outFile = path.join(outDir, `${report.pseudoLocale}.json`);
|
|
372
|
-
fs.writeFileSync(outFile, `${
|
|
404
|
+
fs.writeFileSync(outFile, `${JSON.stringify(report.catalog, null, 2)}\n`, 'utf8');
|
|
373
405
|
log.info(`locale pseudo: source=${sourceLocale} keys=${Object.keys(report.catalog).length} out=${outFile}`);
|
|
374
406
|
}
|
|
375
407
|
return report.status === 'ready' ? 0 : 1;
|
|
@@ -26,10 +26,7 @@ export declare function emitLocaleRouteRealization(projectRoot: any, distDir: an
|
|
|
26
26
|
defaultLocale: any;
|
|
27
27
|
};
|
|
28
28
|
origin: string;
|
|
29
|
-
routes:
|
|
30
|
-
routeId: string;
|
|
31
|
-
path: string;
|
|
32
|
-
}[];
|
|
29
|
+
routes: any;
|
|
33
30
|
realizations: any[];
|
|
34
31
|
pageMetas: any[];
|
|
35
32
|
};
|
|
@@ -7,9 +7,34 @@ import fs from 'node:fs';
|
|
|
7
7
|
import path from 'node:path';
|
|
8
8
|
import { checkLocales, localeHasErrors } from './locale-check.js';
|
|
9
9
|
import { buildLocalePageMeta, buildLocaleRouteRealizationTable } from './locale-router.js';
|
|
10
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
11
|
-
import { listPublicPageUnits, unitBrowserPathPattern } from './route-path.js';
|
|
12
10
|
export const LOCALE_ROUTE_REALIZATION_ARTIFACT_SCHEMA = 'vmz.locale.route_realization.v0';
|
|
11
|
+
/**
|
|
12
|
+
* @param {string} chunkId
|
|
13
|
+
*/
|
|
14
|
+
function pathPatternFromChunk(chunkId) {
|
|
15
|
+
const rel = String(chunkId || '').replace(/^pages\//, '');
|
|
16
|
+
const parts = rel.split('/').filter(Boolean);
|
|
17
|
+
const segs = [];
|
|
18
|
+
for (let i = 0; i < parts.length; i++) {
|
|
19
|
+
const p = parts[i];
|
|
20
|
+
if (p === 'index' && i === parts.length - 1)
|
|
21
|
+
continue;
|
|
22
|
+
segs.push(p);
|
|
23
|
+
}
|
|
24
|
+
return segs.length ? `/${segs.join('/')}` : '/';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Layouts are not public RouteNodes for locale realization / SEO.
|
|
28
|
+
* @param {string} chunkId
|
|
29
|
+
*/
|
|
30
|
+
function isPublicPageChunk(chunkId) {
|
|
31
|
+
const id = String(chunkId || '');
|
|
32
|
+
if (!id.startsWith('pages/'))
|
|
33
|
+
return false;
|
|
34
|
+
if (/(^|\/)Layout$/.test(id))
|
|
35
|
+
return false;
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
13
38
|
/**
|
|
14
39
|
* @param {string} projectRoot
|
|
15
40
|
* @param {string} distDir
|
|
@@ -34,10 +59,10 @@ export function emitLocaleRouteRealization(projectRoot, distDir, opts = {}) {
|
|
|
34
59
|
};
|
|
35
60
|
}
|
|
36
61
|
const deployment = JSON.parse(fs.readFileSync(deploymentPath, 'utf8'));
|
|
37
|
-
const pages =
|
|
62
|
+
const pages = (deployment.units || []).filter((u) => u.kind === 'page' && isPublicPageChunk(String(u.chunkId)));
|
|
38
63
|
const routes = pages.map((u) => ({
|
|
39
64
|
routeId: String(u.chunkId),
|
|
40
|
-
path:
|
|
65
|
+
path: pathPatternFromChunk(String(u.chunkId)),
|
|
41
66
|
}));
|
|
42
67
|
const localeEntries = report.manifest?.locales || [];
|
|
43
68
|
const locales = localeEntries.map((l) => l.id);
|
|
@@ -92,14 +117,14 @@ export function emitLocaleRouteRealization(projectRoot, distDir, opts = {}) {
|
|
|
92
117
|
const vmzDir = path.join(distDir, '_vmz');
|
|
93
118
|
fs.mkdirSync(vmzDir, { recursive: true });
|
|
94
119
|
const outPath = path.join(vmzDir, 'locale-route-realization.json');
|
|
95
|
-
|
|
120
|
+
fs.writeFileSync(outPath, `${JSON.stringify(artifact, null, 2)}\n`, 'utf8');
|
|
96
121
|
const manifestOut = path.join(vmzDir, 'locale-manifest.json');
|
|
97
|
-
|
|
122
|
+
fs.writeFileSync(manifestOut, `${JSON.stringify({
|
|
98
123
|
schema: 'vmz.locale.manifest.v0',
|
|
99
124
|
defaultLocale,
|
|
100
125
|
locales: artifact.locales,
|
|
101
126
|
routing: artifact.routing,
|
|
102
|
-
});
|
|
127
|
+
}, null, 2)}\n`, 'utf8');
|
|
103
128
|
return {
|
|
104
129
|
ok: true,
|
|
105
130
|
written: ['_vmz/locale-route-realization.json', '_vmz/locale-manifest.json'],
|
package/dist/locale-router.js
CHANGED
|
@@ -90,34 +90,16 @@ export function buildLocaleRouteRealizationTable(input) {
|
|
|
90
90
|
pathPattern: normalizePath(route.path),
|
|
91
91
|
};
|
|
92
92
|
realizations.push(entry);
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
severity: 'error',
|
|
101
|
-
message: `path ${entry.path} claimed by ${prevRoute} and ${route.routeId}`,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
pathOwners.set(entry.path, route.routeId);
|
|
106
|
-
}
|
|
93
|
+
const prev = pathOwners.get(entry.path);
|
|
94
|
+
if (prev && prev !== `${route.routeId}@${localeId}`) {
|
|
95
|
+
diagnostics.push({
|
|
96
|
+
code: DIAG_LOCALE_ROUTE_COLLISION,
|
|
97
|
+
severity: 'error',
|
|
98
|
+
message: `path ${entry.path} claimed by ${prev} and ${route.routeId}@${localeId}`,
|
|
99
|
+
});
|
|
107
100
|
}
|
|
108
101
|
else {
|
|
109
|
-
|
|
110
|
-
const prev = pathOwners.get(entry.path);
|
|
111
|
-
if (prev && prev !== owner) {
|
|
112
|
-
diagnostics.push({
|
|
113
|
-
code: DIAG_LOCALE_ROUTE_COLLISION,
|
|
114
|
-
severity: 'error',
|
|
115
|
-
message: `path ${entry.path} claimed by ${prev} and ${owner}`,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
pathOwners.set(entry.path, owner);
|
|
120
|
-
}
|
|
102
|
+
pathOwners.set(entry.path, `${route.routeId}@${localeId}`);
|
|
121
103
|
}
|
|
122
104
|
}
|
|
123
105
|
}
|
package/dist/pack.js
CHANGED
|
@@ -5,11 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// @ts-nocheck
|
|
7
7
|
import crypto from 'node:crypto';
|
|
8
|
-
import { copyFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
8
|
+
import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { loadDeploymentIr, planBundleInputs } from './bundler-adapter.js';
|
|
11
11
|
import { packClientBareImports } from './pack-client-packages.js';
|
|
12
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
13
12
|
export const PACK_MANIFEST_SCHEMA = 'vmz.pack.manifest.v0';
|
|
14
13
|
/**
|
|
15
14
|
* Ensure dom split companions sit next to vmz-dom.js (barrel imports ./dom-core.js).
|
|
@@ -101,7 +100,7 @@ export function packFromDeploymentIr(outDir, opts = {}) {
|
|
|
101
100
|
const vmzDir = path.join(outDir, '_vmz');
|
|
102
101
|
mkdirSync(vmzDir, { recursive: true });
|
|
103
102
|
const file = path.join(vmzDir, 'pack-manifest.json');
|
|
104
|
-
|
|
103
|
+
writeFileSync(file, `${JSON.stringify(body, null, 2)}\n`, 'utf8');
|
|
105
104
|
return { manifest: body, path: file, clientPackages };
|
|
106
105
|
}
|
|
107
106
|
function stableStringify(value) {
|
|
@@ -7,7 +7,6 @@ import crypto from 'node:crypto';
|
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { canonicalJson, sha256Hex } from './release-pack.js';
|
|
10
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
11
10
|
export const PRODUCTION_OBSERVABILITY_SCHEMA = 'vmz.production.observability.v0';
|
|
12
11
|
export const PRODUCTION_TRACE_SCHEMA = 'vmz.production.trace.v0';
|
|
13
12
|
/** Facets that production traces must be able to carry (08 A5). */
|
|
@@ -458,8 +457,8 @@ export function emitProductionObservability(distDir, overrides = {}, meta = {})
|
|
|
458
457
|
fs.mkdirSync(vmzDir, { recursive: true });
|
|
459
458
|
const contractPath = path.join(vmzDir, 'production-observability.json');
|
|
460
459
|
const tracePath = path.join(vmzDir, 'production-trace.sample.json');
|
|
461
|
-
|
|
462
|
-
|
|
460
|
+
fs.writeFileSync(contractPath, `${JSON.stringify(contract, null, 2)}\n`, 'utf8');
|
|
461
|
+
fs.writeFileSync(tracePath, `${JSON.stringify(trace, null, 2)}\n`, 'utf8');
|
|
463
462
|
return { contract, trace, contractPath, tracePath };
|
|
464
463
|
}
|
|
465
464
|
export function observabilityDigest(contract) {
|
|
@@ -8,7 +8,6 @@ import crypto from 'node:crypto';
|
|
|
8
8
|
import fs from 'node:fs';
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { canonicalJson, sha256Hex } from './release-pack.js';
|
|
11
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
12
11
|
export const PRODUCTION_SCENARIO_PACK_SCHEMA = 'vmz.production.scenario_pack.v0';
|
|
13
12
|
export const PRODUCTION_CI_PROFILE_SCHEMA = 'vmz.production.ci_profile.v0';
|
|
14
13
|
export const PRODUCTION_TEST_REPORT_SCHEMA = 'vmz.production.test_report.v0';
|
|
@@ -432,9 +431,9 @@ export function emitProductionTestArtifacts(root, report, pack, profile) {
|
|
|
432
431
|
const reportPath = path.join(dir, 'report.json');
|
|
433
432
|
const packPath = path.join(dir, 'scenario-pack.json');
|
|
434
433
|
const profilePath = path.join(dir, 'ci-profile.json');
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
434
|
+
fs.writeFileSync(reportPath, `${JSON.stringify(stamped, null, 2)}\n`, 'utf8');
|
|
435
|
+
fs.writeFileSync(packPath, `${JSON.stringify(pack, null, 2)}\n`, 'utf8');
|
|
436
|
+
fs.writeFileSync(profilePath, `${JSON.stringify(profile, null, 2)}\n`, 'utf8');
|
|
438
437
|
return { reportPath, packPath, profilePath, report: stamped };
|
|
439
438
|
}
|
|
440
439
|
/** Assert CI profile forbids JS test-runner disguise. */
|
package/dist/release-pack.js
CHANGED
|
@@ -9,8 +9,6 @@
|
|
|
9
9
|
import crypto from 'node:crypto';
|
|
10
10
|
import fs from 'node:fs';
|
|
11
11
|
import path from 'node:path';
|
|
12
|
-
import { writePrettyJsonFile } from './pretty-json.js';
|
|
13
|
-
import { listPublicPageUnits, unitBrowserPathPattern } from './route-path.js';
|
|
14
12
|
export const RELEASE_ENVELOPE_SCHEMA = 'vmz.release.envelope.v0';
|
|
15
13
|
export const APPLICATION_ARTIFACT_SCHEMA = 'vmz.application.artifact.v0';
|
|
16
14
|
export const DELIVERY_ARTIFACT_MANIFEST_SCHEMA = 'vmz.profile.delivery_artifact_manifest.v0';
|
|
@@ -90,6 +88,21 @@ function listContentFiles(distDir) {
|
|
|
90
88
|
out.sort();
|
|
91
89
|
return out;
|
|
92
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* @param {string} chunkId
|
|
93
|
+
*/
|
|
94
|
+
function pathPatternFromChunk(chunkId) {
|
|
95
|
+
const rel = chunkId.replace(/^pages\//, '');
|
|
96
|
+
const parts = rel.split('/').filter(Boolean);
|
|
97
|
+
const segs = [];
|
|
98
|
+
for (let i = 0; i < parts.length; i++) {
|
|
99
|
+
const p = parts[i];
|
|
100
|
+
if (p === 'index' && i === parts.length - 1)
|
|
101
|
+
continue;
|
|
102
|
+
segs.push(p);
|
|
103
|
+
}
|
|
104
|
+
return segs.length ? `/${segs.join('/')}` : '/';
|
|
105
|
+
}
|
|
93
106
|
/**
|
|
94
107
|
* Pack `dist/` into `_vmz` manifests + release envelope (filesystem Delivery Profile).
|
|
95
108
|
* @param {string} distDir
|
|
@@ -111,13 +124,13 @@ export function packRelease(distDir, opts = {}) {
|
|
|
111
124
|
for (const rel of files) {
|
|
112
125
|
fileDigests[rel] = sha256File(path.join(abs, ...rel.split('/')));
|
|
113
126
|
}
|
|
114
|
-
const pages =
|
|
127
|
+
const pages = (deployment.units || []).filter((u) => u.kind === 'page');
|
|
115
128
|
const routeRealization = {
|
|
116
129
|
schema: ROUTE_REALIZATION_TABLE_SCHEMA,
|
|
117
130
|
routes: pages.map((u) => ({
|
|
118
131
|
routeId: String(u.chunkId),
|
|
119
132
|
chunkId: String(u.chunkId),
|
|
120
|
-
pathPattern:
|
|
133
|
+
pathPattern: pathPatternFromChunk(String(u.chunkId)),
|
|
121
134
|
clientEntry: u.clientEntry || null,
|
|
122
135
|
programIr: u.programIr || null,
|
|
123
136
|
})),
|
|
@@ -187,7 +200,7 @@ export function packRelease(distDir, opts = {}) {
|
|
|
187
200
|
* @param {unknown} value
|
|
188
201
|
*/
|
|
189
202
|
function writeJson(file, value) {
|
|
190
|
-
|
|
203
|
+
fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
|
|
191
204
|
}
|
|
192
205
|
/**
|
|
193
206
|
* @param {string} pointerPath
|