@wix/himalaya-cli 0.1420.0 → 0.1421.0

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.
@@ -824,7 +824,7 @@ export interface TelemetrySink {
824
824
  * integration; Phase A reserves the names so apps configuring telemetry sinks
825
825
  * before the engine lands can prepare matching schemas without later churn.
826
826
  */
827
- export type KnownTelemetryEventType = "screen_view" | "action_dispatched" | "action_completed" | "action_failed" | "cache_layer_miss" | "toggles_applied" | "unknown_component_fallback" | "bridge_call_denied" | "bridge_dispatch" | "bridge_wix_call" | "worker_boot_started" | "worker_boot_completed" | "worker_crashed" | "worker_console" | "bundle_load_failed" | "bundle_load_revoked" | "app_launched" | "app_foreground" | "app_background" | "launch_time" | "screen_load" | "network_request" | "app_crashed" | "error_logged" | "experiment_exposed" | "flag_evaluated";
827
+ export type KnownTelemetryEventType = "screen_view" | "action_dispatched" | "action_completed" | "action_failed" | "cache_layer_miss" | "toggles_applied" | "unknown_component_fallback" | "bridge_call_denied" | "bridge_dispatch" | "bridge_wix_call" | "worker_boot_started" | "worker_boot_completed" | "worker_crashed" | "worker_console" | "bundle_load_failed" | "bundle_load_revoked" | "descriptor_decode_failed" | "descriptor_decode_degraded" | "app_launched" | "app_foreground" | "app_background" | "launch_time" | "screen_load" | "network_request" | "app_crashed" | "error_logged" | "experiment_exposed" | "flag_evaluated";
828
828
  export interface TelemetryEvent {
829
829
  /**
830
830
  * Platform-mandated taxonomy, per invariant 23. Use [KnownTelemetryEventType]
package/dist/cli.mjs CHANGED
@@ -9002,6 +9002,81 @@ var init_token_suggest = __esm({
9002
9002
  }
9003
9003
  });
9004
9004
 
9005
+ // ../worker-globals/allowlist.ts
9006
+ var ES2020_GLOBALS, IMPLICIT_BINDINGS, WORKER_SURFACE, WORKER_ALLOWLIST;
9007
+ var init_allowlist = __esm({
9008
+ "../worker-globals/allowlist.ts"() {
9009
+ ES2020_GLOBALS = [
9010
+ // value properties
9011
+ "globalThis",
9012
+ "undefined",
9013
+ "NaN",
9014
+ "Infinity",
9015
+ // function properties
9016
+ "parseInt",
9017
+ "parseFloat",
9018
+ "isNaN",
9019
+ "isFinite",
9020
+ "encodeURI",
9021
+ "encodeURIComponent",
9022
+ "decodeURI",
9023
+ "decodeURIComponent",
9024
+ // fundamental objects
9025
+ "Object",
9026
+ "Function",
9027
+ "Boolean",
9028
+ "Symbol",
9029
+ // errors
9030
+ "Error",
9031
+ "EvalError",
9032
+ "RangeError",
9033
+ "ReferenceError",
9034
+ "SyntaxError",
9035
+ "TypeError",
9036
+ "URIError",
9037
+ // numbers, dates, text
9038
+ "Number",
9039
+ "BigInt",
9040
+ "Math",
9041
+ "Date",
9042
+ "String",
9043
+ "RegExp",
9044
+ // indexed / keyed collections
9045
+ "Array",
9046
+ "Map",
9047
+ "Set",
9048
+ "WeakMap",
9049
+ "WeakSet",
9050
+ // binary data
9051
+ "ArrayBuffer",
9052
+ "DataView",
9053
+ "Int8Array",
9054
+ "Uint8Array",
9055
+ "Uint8ClampedArray",
9056
+ "Int16Array",
9057
+ "Uint16Array",
9058
+ "Int32Array",
9059
+ "Uint32Array",
9060
+ "Float32Array",
9061
+ "Float64Array",
9062
+ "BigInt64Array",
9063
+ "BigUint64Array",
9064
+ // structured data, control abstraction, reflection
9065
+ "JSON",
9066
+ "Promise",
9067
+ "Reflect",
9068
+ "Proxy"
9069
+ ];
9070
+ IMPLICIT_BINDINGS = ["arguments"];
9071
+ WORKER_SURFACE = ["himalaya", "console"];
9072
+ WORKER_ALLOWLIST = /* @__PURE__ */ new Set([
9073
+ ...ES2020_GLOBALS,
9074
+ ...IMPLICIT_BINDINGS,
9075
+ ...WORKER_SURFACE
9076
+ ]);
9077
+ }
9078
+ });
9079
+
9005
9080
  // ../../core/dev-server/src/l10n-strings.ts
9006
9081
  function isUserVisibleCopy(s2) {
9007
9082
  return isCopyShaped(s2) && /[A-Za-z֐-׿؀-ۿ]/.test(s2);
@@ -10091,6 +10166,19 @@ var init_rich_content = __esm({
10091
10166
  }
10092
10167
  });
10093
10168
 
10169
+ // ../../core/dev-server/src/realm-parity.ts
10170
+ function withheldGlobalsSource(hide) {
10171
+ if (!hide?.length) return "";
10172
+ return `${JSON.stringify(hide)}.forEach(function (n) { try { delete globalThis[n]; } catch (e) { /* non-configurable: leave it */ } });`;
10173
+ }
10174
+ function realmInstallsIntl(intl, hide) {
10175
+ return intl === true && !(hide ?? []).includes("Intl");
10176
+ }
10177
+ var init_realm_parity = __esm({
10178
+ "../../core/dev-server/src/realm-parity.ts"() {
10179
+ }
10180
+ });
10181
+
10094
10182
  // ../../core/dev-server/src/validate-descriptor.core.ts
10095
10183
  var validate_descriptor_core_exports = {};
10096
10184
  __export(validate_descriptor_core_exports, {
@@ -10098,7 +10186,9 @@ __export(validate_descriptor_core_exports, {
10098
10186
  CRAWL_BLOCKING_PASSES: () => CRAWL_BLOCKING_PASSES,
10099
10187
  DESCRIPTOR_DEPTH_BUDGETS: () => DESCRIPTOR_DEPTH_BUDGETS,
10100
10188
  DEVICE_NETWORK_WITHHELD: () => DEVICE_NETWORK_WITHHELD,
10189
+ DEVICE_PARITY_CANDIDATES: () => DEVICE_PARITY_CANDIDATES,
10101
10190
  DEVICE_PARITY_WITHHELD: () => DEVICE_PARITY_WITHHELD,
10191
+ DEVICE_STRIPPED_HOST_GLOBALS: () => DEVICE_STRIPPED_HOST_GLOBALS,
10102
10192
  DEVICE_WITHHELD: () => DEVICE_WITHHELD,
10103
10193
  EMBEDDED_BINDING: () => EMBEDDED_BINDING,
10104
10194
  INTEGER_MODIFIERS: () => INTEGER_MODIFIERS,
@@ -10123,6 +10213,7 @@ __export(validate_descriptor_core_exports, {
10123
10213
  componentPropFindings: () => componentPropFindings,
10124
10214
  depthBudgetFindings: () => depthBudgetFindings,
10125
10215
  depthBudgetIssues: () => depthBudgetIssues,
10216
+ deviceParityWithheldFrom: () => deviceParityWithheldFrom,
10126
10217
  dryRunBundle: () => dryRunBundle,
10127
10218
  enumFieldNames: () => enumFieldNames,
10128
10219
  extractBundleContract: () => extractBundleContract,
@@ -10139,6 +10230,7 @@ __export(validate_descriptor_core_exports, {
10139
10230
  pathCrossesOpaqueAuthorJson: () => pathCrossesOpaqueAuthorJson,
10140
10231
  pathValue: () => pathValue,
10141
10232
  pinnedIntrinsicsSource: () => pinnedIntrinsicsSource,
10233
+ realmInstallsIntl: () => realmInstallsIntl,
10142
10234
  resolveActionEvaluator: () => resolveActionEvaluator,
10143
10235
  resolveBootEvaluator: () => resolveBootEvaluator,
10144
10236
  resolveEvaluator: () => resolveEvaluator,
@@ -10148,6 +10240,7 @@ __export(validate_descriptor_core_exports, {
10148
10240
  setDefaultEvaluator: () => setDefaultEvaluator,
10149
10241
  topBarFindings: () => topBarFindings,
10150
10242
  validateScreenDescriptor: () => validateScreenDescriptor,
10243
+ withheldGlobalsSource: () => withheldGlobalsSource,
10151
10244
  workerSubtreeAllowed: () => workerSubtreeAllowed
10152
10245
  });
10153
10246
  function makeInert() {
@@ -10324,6 +10417,15 @@ function nondeterministicServices(bundleJs, opts = {}) {
10324
10417
  if (threw > 0) return names.sort();
10325
10418
  return names.filter((name) => safeStringify(a2[name]) !== safeStringify(b2[name])).sort();
10326
10419
  }
10420
+ function deviceParityWithheldFrom(root) {
10421
+ const names = new Set(DEVICE_PARITY_CANDIDATES);
10422
+ for (let o2 = root; o2 && o2 !== Object.prototype; o2 = Object.getPrototypeOf(o2)) {
10423
+ for (const name of Object.getOwnPropertyNames(o2)) names.add(name);
10424
+ }
10425
+ names.delete("constructor");
10426
+ names.delete("__proto__");
10427
+ return [...names].filter((name) => /^[A-Za-z_$][\w$]*$/.test(name) && !WORKER_ALLOWLIST.has(name)).sort();
10428
+ }
10327
10429
  function setDefaultEvaluator(evaluator) {
10328
10430
  defaultEvaluator = evaluator;
10329
10431
  }
@@ -10530,7 +10632,7 @@ async function bootBundleWorker(bundleJs, opts) {
10530
10632
  let guestActions;
10531
10633
  let guestSession;
10532
10634
  try {
10533
- const hide = opts.deviceParity ? DEVICE_WITHHELD : void 0;
10635
+ const hide = opts.deviceParity ? DEVICE_PARITY_WITHHELD : void 0;
10534
10636
  if (realm.runWithActions) {
10535
10637
  const ran = await realm.runWithActions(bundleJs, sandbox, {
10536
10638
  timeoutMs: 2e3 + budgetMs,
@@ -12473,13 +12575,14 @@ function validateScreenDescriptor(screenId, descriptor, opts = {}) {
12473
12575
  services: Object.keys(services)
12474
12576
  };
12475
12577
  }
12476
- var CRAWL_BLOCKING_PASSES, BOOT_EVAL_TIMEOUT_MS, DRIFT_PROBES, DEVICE_PARITY_WITHHELD, DEVICE_NETWORK_WITHHELD, DEVICE_WITHHELD, defaultEvaluator, bootEvaluator, actionEvaluator, NATIVE_PROP_ENUMS, KNOWN_PROPS, IN_ARRAY_BINDING_PROPS, SERVICE_SIGIL, INTEGER_PROPS, NATIVE_REQUIRED_PROPS, bareNestedClass, NATIVE_NESTED_CLASSES, NATIVE_MODIFIERS_CLASS, NATIVE_DESCRIPTOR_CLASS, NATIVE_DESCRIPTOR_NESTED, NATIVE_NESTED_PROPS, LENIENT_TOP_BAR_BLOCKS, MODIFIER_KEYS, INTEGER_MODIFIERS, MODIFIER_KINDS, SCHEMA_SCORED_NODES, CORE_PACKAGES, LEGACY_UNSCORED_KEYS, DYNAMIC_PLACEHOLDER, LITERAL_ONLY_PROPS, SERVICE_ONLY_BINDING_PROPS, WHOLE_VALUE_BINDING, EMBEDDED_BINDING, OPTIONS_BINDING_PROPS, EDITOR_SERVICE_NAME, SHEET_PLACEMENTS, DESCRIPTOR_DEPTH_BUDGETS, UNSAFE_TO_RECURSE_DEPTH, ROW_TEMPLATE_HOST_TYPES, TOP_BAR_TRAILING_LIMIT, TOP_BAR_NON_TRAILING, BUTTON_STYLES, EMPTY_STATE_ACTION_STYLES, EMPTY_STATE_ACTION_SIZES;
12578
+ var CRAWL_BLOCKING_PASSES, BOOT_EVAL_TIMEOUT_MS, DRIFT_PROBES, DEVICE_NETWORK_WITHHELD, DEVICE_STRIPPED_HOST_GLOBALS, DEVICE_WITHHELD, DEVICE_PARITY_CANDIDATES, DEVICE_PARITY_WITHHELD, defaultEvaluator, bootEvaluator, actionEvaluator, NATIVE_PROP_ENUMS, KNOWN_PROPS, IN_ARRAY_BINDING_PROPS, SERVICE_SIGIL, INTEGER_PROPS, NATIVE_REQUIRED_PROPS, bareNestedClass, NATIVE_NESTED_CLASSES, NATIVE_MODIFIERS_CLASS, NATIVE_DESCRIPTOR_CLASS, NATIVE_DESCRIPTOR_NESTED, NATIVE_NESTED_PROPS, LENIENT_TOP_BAR_BLOCKS, MODIFIER_KEYS, INTEGER_MODIFIERS, MODIFIER_KINDS, SCHEMA_SCORED_NODES, CORE_PACKAGES, LEGACY_UNSCORED_KEYS, DYNAMIC_PLACEHOLDER, LITERAL_ONLY_PROPS, SERVICE_ONLY_BINDING_PROPS, WHOLE_VALUE_BINDING, EMBEDDED_BINDING, OPTIONS_BINDING_PROPS, EDITOR_SERVICE_NAME, SHEET_PLACEMENTS, DESCRIPTOR_DEPTH_BUDGETS, UNSAFE_TO_RECURSE_DEPTH, ROW_TEMPLATE_HOST_TYPES, TOP_BAR_TRAILING_LIMIT, TOP_BAR_NON_TRAILING, BUTTON_STYLES, EMPTY_STATE_ACTION_STYLES, EMPTY_STATE_ACTION_SIZES;
12477
12579
  var init_validate_descriptor_core = __esm({
12478
12580
  "../../core/dev-server/src/validate-descriptor.core.ts"() {
12479
12581
  init_validator();
12480
12582
  init_validator();
12481
12583
  init_tokens();
12482
12584
  init_token_suggest();
12585
+ init_allowlist();
12483
12586
  init_l10n_strings();
12484
12587
  init_a11y_contract();
12485
12588
  init_bindings();
@@ -12488,6 +12591,7 @@ var init_validate_descriptor_core = __esm({
12488
12591
  init_frame_limits();
12489
12592
  init_rich_content();
12490
12593
  init_worker_subtree();
12594
+ init_realm_parity();
12491
12595
  CRAWL_BLOCKING_PASSES = /* @__PURE__ */ new Set([
12492
12596
  // A screen whose bindings do not resolve has no state to crawl.
12493
12597
  "bindings",
@@ -12508,17 +12612,6 @@ var init_validate_descriptor_core = __esm({
12508
12612
  { clock: Date.UTC(2021, 7, 28, 19, 35, 57, 789), seed: 1, mirrorRandom: true }
12509
12613
  // a Saturday or Sunday, the 28th/29th
12510
12614
  ];
12511
- DEVICE_PARITY_WITHHELD = [
12512
- "setTimeout",
12513
- "clearTimeout",
12514
- "setInterval",
12515
- "clearInterval",
12516
- "URL",
12517
- "URLSearchParams",
12518
- "TextEncoder",
12519
- "TextDecoder",
12520
- "AbortController"
12521
- ];
12522
12615
  DEVICE_NETWORK_WITHHELD = [
12523
12616
  "fetch",
12524
12617
  "XMLHttpRequest",
@@ -12537,7 +12630,44 @@ var init_validate_descriptor_core = __esm({
12537
12630
  "Response",
12538
12631
  "Headers"
12539
12632
  ];
12540
- DEVICE_WITHHELD = [...DEVICE_NETWORK_WITHHELD, ...DEVICE_PARITY_WITHHELD];
12633
+ DEVICE_STRIPPED_HOST_GLOBALS = [
12634
+ "setTimeout",
12635
+ "clearTimeout",
12636
+ "setInterval",
12637
+ "clearInterval",
12638
+ "URL",
12639
+ "URLSearchParams",
12640
+ "TextEncoder",
12641
+ "TextDecoder",
12642
+ "AbortController"
12643
+ ];
12644
+ DEVICE_WITHHELD = [...DEVICE_NETWORK_WITHHELD, ...DEVICE_STRIPPED_HOST_GLOBALS];
12645
+ DEVICE_PARITY_CANDIDATES = [
12646
+ ...DEVICE_WITHHELD,
12647
+ // Host APIs and post-ES2020 / non-portable intrinsics an engine may carry natively (QuickJS-ng 0.15
12648
+ // installs `performance` and `queueMicrotask`), named so a host realm without them still withholds them.
12649
+ "atob",
12650
+ "btoa",
12651
+ "structuredClone",
12652
+ "queueMicrotask",
12653
+ "crypto",
12654
+ "performance",
12655
+ "navigator",
12656
+ "self",
12657
+ "window",
12658
+ "Intl",
12659
+ "WeakRef",
12660
+ "FinalizationRegistry",
12661
+ "AggregateError",
12662
+ "InternalError",
12663
+ "SharedArrayBuffer",
12664
+ "Atomics",
12665
+ "WebAssembly",
12666
+ "eval",
12667
+ "escape",
12668
+ "unescape"
12669
+ ];
12670
+ DEVICE_PARITY_WITHHELD = deviceParityWithheldFrom(globalThis);
12541
12671
  defaultEvaluator = null;
12542
12672
  bootEvaluator = null;
12543
12673
  actionEvaluator = null;
@@ -14022,7 +14152,9 @@ __export(validate_descriptor_exports, {
14022
14152
  CRAWL_BLOCKING_PASSES: () => CRAWL_BLOCKING_PASSES,
14023
14153
  DESCRIPTOR_DEPTH_BUDGETS: () => DESCRIPTOR_DEPTH_BUDGETS,
14024
14154
  DEVICE_NETWORK_WITHHELD: () => DEVICE_NETWORK_WITHHELD,
14155
+ DEVICE_PARITY_CANDIDATES: () => DEVICE_PARITY_CANDIDATES,
14025
14156
  DEVICE_PARITY_WITHHELD: () => DEVICE_PARITY_WITHHELD,
14157
+ DEVICE_STRIPPED_HOST_GLOBALS: () => DEVICE_STRIPPED_HOST_GLOBALS,
14026
14158
  DEVICE_WITHHELD: () => DEVICE_WITHHELD,
14027
14159
  EMBEDDED_BINDING: () => EMBEDDED_BINDING,
14028
14160
  INTEGER_MODIFIERS: () => INTEGER_MODIFIERS,
@@ -14049,6 +14181,7 @@ __export(validate_descriptor_exports, {
14049
14181
  componentPropFindings: () => componentPropFindings,
14050
14182
  depthBudgetFindings: () => depthBudgetFindings,
14051
14183
  depthBudgetIssues: () => depthBudgetIssues,
14184
+ deviceParityWithheldFrom: () => deviceParityWithheldFrom,
14052
14185
  discoverNativeActions: () => discoverNativeActions,
14053
14186
  dryRunBundle: () => dryRunBundle,
14054
14187
  enumFieldNames: () => enumFieldNames,
@@ -14071,6 +14204,7 @@ __export(validate_descriptor_exports, {
14071
14204
  pinnedIntrinsicsSource: () => pinnedIntrinsicsSource,
14072
14205
  readBuiltBundle: () => readBuiltBundle,
14073
14206
  readBuiltBundleMap: () => readBuiltBundleMap,
14207
+ realmInstallsIntl: () => realmInstallsIntl,
14074
14208
  registeredActions: () => registeredActions,
14075
14209
  resolveActionEvaluator: () => resolveActionEvaluator,
14076
14210
  resolveBootEvaluator: () => resolveBootEvaluator,
@@ -14081,6 +14215,7 @@ __export(validate_descriptor_exports, {
14081
14215
  setDefaultEvaluator: () => setDefaultEvaluator,
14082
14216
  topBarFindings: () => topBarFindings,
14083
14217
  validateScreenDescriptor: () => validateScreenDescriptor,
14218
+ withheldGlobalsSource: () => withheldGlobalsSource,
14084
14219
  workerSubtreeAllowed: () => workerSubtreeAllowed
14085
14220
  });
14086
14221
  import { readFileSync as readFileSync15, existsSync as existsSync13, readdirSync as readdirSync11 } from "node:fs";
@@ -14177,10 +14312,13 @@ var init_validate_descriptor = __esm({
14177
14312
  "../../core/dev-server/src/validate-descriptor.ts"() {
14178
14313
  init_player_host_manifest();
14179
14314
  init_validate_descriptor_core();
14315
+ init_realm_parity();
14180
14316
  init_validate_descriptor_core();
14181
14317
  nodeVmEvaluator = {
14182
14318
  run(code, sandbox, opts) {
14183
14319
  const context = createContext(sandbox);
14320
+ const hideSource = withheldGlobalsSource((opts.hide ?? []).filter((name) => !(name in sandbox)));
14321
+ if (hideSource) runInContext(hideSource, context, { filename: "himi-hide.js" });
14184
14322
  const pins = pinnedIntrinsicsSource(opts);
14185
14323
  if (pins) {
14186
14324
  const pinned = runInContext(`(${pins})(Date, Math)`, context, { timeout: opts.timeoutMs, filename: "himi-pins.js" });
@@ -16318,6 +16456,9 @@ ${opts.clock === void 0 ? "" : opts.freezeDate ? ` globalThis.Date = (${pinnedI
16318
16456
  return sweepPromise;
16319
16457
  },
16320
16458
  });` : ""}
16459
+ // LAST, so nothing the prelude installed (the \`fetch\` stub) or the engine carries natively
16460
+ // (QuickJS-ng 0.15's \`performance\`, \`queueMicrotask\`) survives deviceParity (#4511).
16461
+ ${withheldGlobalsSource(opts.hide)}
16321
16462
  return ${opts.liveTransport ? "{ readback: readback, dispatch: dispatchAction, actions: readActions }" : "readback"};
16322
16463
  })();
16323
16464
  `;
@@ -16398,14 +16539,7 @@ async function createQuickJsEvaluator(options = {}) {
16398
16539
  }
16399
16540
  readback = pre.value;
16400
16541
  if ((options.webGlobals ?? options.intl) && !opts.hide?.length) installWebGlobals(ctx);
16401
- if (options.intl) {
16402
- if (opts.hide?.length) {
16403
- throw new Error(
16404
- "quickjs: `intl: true` and deviceParity are contradictory realms \u2014 deviceParity models the wrist (no timers, no Intl) and `intl` models the host. Pick one: an evaluator without `intl` for the device-floor crawl, or one with it for containment."
16405
- );
16406
- }
16407
- installIntl(ctx);
16408
- }
16542
+ if (realmInstallsIntl(options.intl, opts.hide)) installIntl(ctx);
16409
16543
  const res = ctx.evalCode(code, opts.filename);
16410
16544
  if (res.error) {
16411
16545
  const detail = ctx.dump(res.error);
@@ -16488,6 +16622,7 @@ var init_quickjs_evaluator = __esm({
16488
16622
  init_quickjs_intl();
16489
16623
  init_quickjs_state_codec();
16490
16624
  init_quickjs_web_globals();
16625
+ init_realm_parity();
16491
16626
  init_validate_descriptor_core();
16492
16627
  RECYCLE_AFTER_BLOWUPS = 1;
16493
16628
  DEFAULT_MEMORY_LIMIT_BYTES = 128 * 1024 * 1024;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1420.0",
3
+ "version": "0.1421.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -71,5 +71,5 @@
71
71
  "artifactId": "himalaya-cli"
72
72
  }
73
73
  },
74
- "falconPackageHash": "d2a780fce1a8d60a36a6f5cf4f8860d5d454764049e49a0fa39c2885"
74
+ "falconPackageHash": "4d89203d9e66955e734a0bf6b57b933b45cfceb3d80c598aff230922"
75
75
  }