@wix/himalaya-cli 0.1606.0 → 0.1608.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.
package/dist/cli.mjs CHANGED
@@ -15065,6 +15065,7 @@ function webViewOriginAllowed(url, origins) {
15065
15065
  }
15066
15066
  var init_webview_origin = __esm({
15067
15067
  "../../core/ts/src/webview-origin.ts"() {
15068
+ "use strict";
15068
15069
  init_define_HHP_CATALOG();
15069
15070
  }
15070
15071
  });
@@ -37624,6 +37625,17 @@ function formIsValid(bag) {
37624
37625
  }
37625
37626
  return true;
37626
37627
  }
37628
+ function hasWorkerFormSubmit(node) {
37629
+ if (!node || typeof node !== "object") return false;
37630
+ const n2 = node;
37631
+ const props2 = n2.body?.props ?? n2.props;
37632
+ if (!props2) return false;
37633
+ const action = props2.action ?? props2.onTap;
37634
+ if (typeof action === "string") return action.startsWith("$service:") || action.startsWith("$app:");
37635
+ if (typeof action?.actionId === "string" && action.actionId.startsWith("tier5.")) return true;
37636
+ const child = (value2) => Array.isArray(value2) ? value2.some(child) : !!value2 && typeof value2 === "object" && ("body" in value2 || "type" in value2) && hasWorkerFormSubmit(value2);
37637
+ return Object.values(props2).some(child);
37638
+ }
37627
37639
  var validity, formValidityProbe, FormValuesContext;
37628
37640
  var init_formBag = __esm({
37629
37641
  "../../core/web-renderer/src/formBag.ts"() {
@@ -37927,7 +37939,7 @@ var init_actionParams = __esm({
37927
37939
  });
37928
37940
 
37929
37941
  // ../../core/web-renderer/src/workerTapBusy.ts
37930
- import React7, { useEffect as useEffect3, useRef, useState as useState3 } from "react";
37942
+ import React7, { useContext as useContext2, useEffect as useEffect3, useRef, useState as useState3 } from "react";
37931
37943
  function tracksWorkerTap(action) {
37932
37944
  if (!action || typeof action !== "object") return false;
37933
37945
  const a2 = action;
@@ -37935,21 +37947,22 @@ function tracksWorkerTap(action) {
37935
37947
  }
37936
37948
  function useWorkerTap(action) {
37937
37949
  const actionId = tracksWorkerTap(action) ? action.actionId : null;
37950
+ const owned = useContext2(WorkerTapScopeContext);
37938
37951
  const [busy, setBusy] = useState3(false);
37939
37952
  const tap = useRef(null);
37940
37953
  useEffect3(() => {
37941
- const current = new WorkerTap(actionId, setBusy);
37954
+ setBusy(false);
37955
+ const current = new WorkerTap(actionId, setBusy, owned);
37942
37956
  tap.current = current;
37943
37957
  return () => {
37944
37958
  current.dispose();
37945
37959
  tap.current = null;
37946
37960
  };
37947
- }, [actionId]);
37948
- return { busy, tapped: () => tap.current?.tapped() };
37961
+ }, [actionId, owned]);
37962
+ return { busy, tapped: (action2) => tap.current?.tapped(action2) ?? action2 };
37949
37963
  }
37950
37964
  function workerTapGateRef() {
37951
- return { busy: false, tapped: () => {
37952
- } };
37965
+ return { busy: false, tapped: (action) => action };
37953
37966
  }
37954
37967
  function WorkerTapGate({ gate, action, children, ...forwarded }) {
37955
37968
  const { busy, tapped } = useWorkerTap(action);
@@ -37962,18 +37975,21 @@ function WorkerTapGate({ gate, action, children, ...forwarded }) {
37962
37975
  if (busy) next["aria-disabled"] = "true";
37963
37976
  return React7.cloneElement(children, next);
37964
37977
  }
37965
- var WORKER_TAP_DELAY_MS, WORKER_TAP_CAP_MS, listeners, WorkerTap;
37978
+ var WORKER_TAP_DELAY_MS, WORKER_TAP_CAP_MS, listeners, TAP_FINISHED, WorkerTapScopeContext, WorkerTap;
37966
37979
  var init_workerTapBusy = __esm({
37967
37980
  "../../core/web-renderer/src/workerTapBusy.ts"() {
37968
37981
  init_define_HHP_CATALOG();
37969
37982
  WORKER_TAP_DELAY_MS = 150;
37970
37983
  WORKER_TAP_CAP_MS = 15e3;
37971
37984
  listeners = /* @__PURE__ */ new Set();
37985
+ TAP_FINISHED = Symbol();
37986
+ WorkerTapScopeContext = React7.createContext(false);
37972
37987
  WorkerTap = class {
37973
- constructor(actionId, onChange) {
37988
+ constructor(actionId, onChange, owned = false) {
37974
37989
  this.actionId = actionId;
37975
37990
  this.onChange = onChange;
37976
- if (actionId) {
37991
+ this.owned = owned;
37992
+ if (actionId && !owned) {
37977
37993
  const listener = (id) => {
37978
37994
  if (id === actionId) this.settle();
37979
37995
  };
@@ -37986,16 +38002,30 @@ var init_workerTapBusy = __esm({
37986
38002
  busy = false;
37987
38003
  timers = [];
37988
38004
  stop = null;
38005
+ pending;
38006
+ disposed = false;
37989
38007
  /** Call BEFORE dispatching the tap's action, so a fast finish cannot arrive first. */
37990
- tapped() {
37991
- if (!this.actionId) return;
38008
+ tapped(action) {
38009
+ if (!this.actionId) return action;
37992
38010
  this.clear();
37993
38011
  this.timers = [
37994
38012
  setTimeout(() => this.set(true), WORKER_TAP_DELAY_MS),
37995
- setTimeout(() => this.set(false), WORKER_TAP_CAP_MS)
38013
+ setTimeout(() => {
38014
+ this.pending?.clear();
38015
+ this.set(false);
38016
+ }, WORKER_TAP_CAP_MS)
37996
38017
  ];
38018
+ if (!this.owned || !action || typeof action !== "object") return action;
38019
+ this.pending ??= /* @__PURE__ */ new Set();
38020
+ const finished = () => {
38021
+ if (this.pending?.delete(finished) && !this.pending.size) this.settle();
38022
+ };
38023
+ this.pending.add(finished);
38024
+ return { ...action, [TAP_FINISHED]: finished };
37997
38025
  }
37998
38026
  dispose() {
38027
+ this.disposed = true;
38028
+ this.pending?.clear();
37999
38029
  this.clear();
38000
38030
  this.stop?.();
38001
38031
  this.stop = null;
@@ -38009,7 +38039,7 @@ var init_workerTapBusy = __esm({
38009
38039
  this.timers = [];
38010
38040
  }
38011
38041
  set(busy) {
38012
- if (this.busy === busy) return;
38042
+ if (this.disposed || this.busy === busy) return;
38013
38043
  this.busy = busy;
38014
38044
  this.onChange(busy);
38015
38045
  }
@@ -122866,6 +122896,7 @@ function makeCtx(tokens2, scheme = "light", opts = {}) {
122866
122896
  localeTag: opts.localeTag,
122867
122897
  provider,
122868
122898
  workerReady: opts.workerReady,
122899
+ formReadiness: opts.formReadiness,
122869
122900
  // `$service:` bindings in a NON-worker action's params resolve against the
122870
122901
  // live provider at DISPATCH (tap) time — here, the one seam every renderer
122871
122902
  // dispatch point flows through and where the provider is in scope (see
@@ -125330,15 +125361,15 @@ function renderNodeInner(node, ctx) {
125330
125361
  const nestedControl = tapActivator && typeof target.closest === "function" ? target.closest(NESTED_CONTROL_SELECTOR) : null;
125331
125362
  if (nestedControl && nestedControl !== e2.currentTarget && !nestedControl.hasAttribute(TAP_ACTIVATOR_ATTR)) return;
125332
125363
  if (busyGate?.busy) return;
125333
- busyGate?.tapped();
125334
125364
  prevOnClick?.(e2);
125335
- ctx.onAction(resolveItemDeep2(tap, ctx));
125365
+ const action = resolveItemDeep2(tap, ctx);
125366
+ ctx.onAction(busyGate ? busyGate.tapped(action) : action);
125336
125367
  };
125337
125368
  giveControlContract((e2) => {
125338
125369
  if (busyGate?.busy) return;
125339
- busyGate?.tapped();
125340
125370
  prevOnClick?.(e2);
125341
- ctx.onAction(resolveItemDeep2(tap, ctx));
125371
+ const action = resolveItemDeep2(tap, ctx);
125372
+ ctx.onAction(busyGate ? busyGate.tapped(action) : action);
125342
125373
  });
125343
125374
  ensurePressStyles();
125344
125375
  extra["data-himalaya-tap"] = "1";
@@ -127000,9 +127031,18 @@ var init_renderNode = __esm({
127000
127031
  const [touched, setTouched] = React16.useState(false);
127001
127032
  const [isFocused, setIsFocused] = React16.useState(false);
127002
127033
  const pendingEdits = React16.useRef([]);
127034
+ const previousBoundBinding = React16.useRef(binding2);
127003
127035
  const previousBoundText = React16.useRef(boundText);
127004
127036
  const previousBoundRawText = React16.useRef(boundRawText);
127037
+ const deferredExternalText = React16.useRef(false);
127005
127038
  React16.useEffect(() => {
127039
+ const bindingChanged = previousBoundBinding.current !== binding2;
127040
+ previousBoundBinding.current = binding2;
127041
+ if (bindingChanged) {
127042
+ changes.current?.drop();
127043
+ pendingEdits.current = [];
127044
+ deferredExternalText.current = true;
127045
+ }
127006
127046
  if (!isBound || boundText === void 0) return;
127007
127047
  const boundTextChanged = previousBoundText.current !== boundText;
127008
127048
  const boundRawTextChanged = previousBoundRawText.current !== boundRawText;
@@ -127011,11 +127051,13 @@ var init_renderNode = __esm({
127011
127051
  pendingEdits.current = pendingEdits.current.filter((edit) => Date.now() - edit.at < 3e4);
127012
127052
  const acknowledged = pendingEdits.current.findIndex((edit) => edit.value === boundRawText);
127013
127053
  if (acknowledged >= 0) {
127054
+ deferredExternalText.current = false;
127014
127055
  pendingEdits.current.splice(0, acknowledged + 1);
127015
127056
  if (pendingEdits.current.length > 0 || changes.current?.pending != null) return;
127016
127057
  }
127017
127058
  if (boundText === "") {
127018
- if (boundTextChanged || serializeRichText && boundRawTextChanged) {
127059
+ deferredExternalText.current = false;
127060
+ if (bindingChanged || boundTextChanged || serializeRichText && boundRawTextChanged) {
127019
127061
  changes.current?.drop();
127020
127062
  if (local !== "") setLocal("");
127021
127063
  if (serializeRichText) {
@@ -127032,8 +127074,12 @@ var init_renderNode = __esm({
127032
127074
  }
127033
127075
  return;
127034
127076
  }
127035
- if (!focused.current && boundText !== local && changes.current?.pending == null) setLocal(boundText);
127036
- }, [boundText, serializeRichText ? boundRawText : void 0, isFocused, serializeRichText ? edited : false]);
127077
+ if (boundTextChanged && acknowledged < 0) deferredExternalText.current = true;
127078
+ if (!focused.current && changes.current?.pending == null && deferredExternalText.current) {
127079
+ if (boundText !== local) setLocal(boundText);
127080
+ deferredExternalText.current = false;
127081
+ }
127082
+ }, [binding2, boundText, serializeRichText ? boundRawText : void 0, isFocused, serializeRichText ? edited : false]);
127037
127083
  const formBag = React16.useContext(FormValuesContext);
127038
127084
  const fieldId = props2.__formFieldId;
127039
127085
  const previousBinding = React16.useRef(binding2);
@@ -127054,11 +127100,15 @@ var init_renderNode = __esm({
127054
127100
  if (previousBinding.current === binding2) return;
127055
127101
  previousBinding.current = binding2;
127056
127102
  pendingEdits.current = [];
127057
- if (!serializeRichText) return;
127058
- if (fieldId) formBag?.clearValue(fieldId);
127103
+ previousBoundText.current = boundText;
127104
+ previousBoundRawText.current = boundRawText;
127105
+ deferredExternalText.current = false;
127106
+ if (fieldId && (serializeRichText || isBound && boundText === void 0)) formBag?.clearValue(fieldId);
127059
127107
  const nextPristineValue = isBound ? boundRawText : typeof valueBinding === "string" ? valueBinding : void 0;
127060
- if (fieldId && nextPristineValue) formBag?.set(fieldId, nextPristineValue);
127061
- setLocal(isBound ? boundText ?? "" : literalText);
127108
+ const nextLocal = isBound ? boundText ?? "" : literalText;
127109
+ if (fieldId && !serializeRichText) formBag?.set(fieldId, nextLocal);
127110
+ else if (fieldId && nextPristineValue) formBag?.set(fieldId, nextPristineValue);
127111
+ setLocal(nextLocal);
127062
127112
  setEdited(false);
127063
127113
  setPristineRichValue(nextPristineValue);
127064
127114
  setTouched(false);
@@ -127218,7 +127268,7 @@ var init_renderNode = __esm({
127218
127268
  prefixText && /* @__PURE__ */ jsx11("span", { style: { color: muted, flex: "none" }, children: prefixText }),
127219
127269
  multilineBox ? /* @__PURE__ */ jsx11("textarea", { "data-component-id": componentId, id: fieldDomId, "data-component-type": componentType, ...a11yFwd, ref: inputRef, value: local, onChange: onInput, onKeyDown, onFocus: onFieldFocus, onBlur: onFieldBlur, placeholder: placeholder3, dir: fieldDir, rows: 2, "aria-label": ariaLabelProp ?? placeholderName, "aria-labelledby": labelledBy, "aria-required": required3, "aria-invalid": errored || void 0, "aria-describedby": [errorId, describedByProp].filter(Boolean).join(" ") || void 0, inputMode, autoCapitalize, maxLength, autoCorrect: suggestOff ? "off" : suggestOn ? "on" : void 0, spellCheck: suggestOff ? false : suggestOn ? true : void 0, autoComplete: suggestOff ? "off" : void 0, style: inputBase }) : /* @__PURE__ */ jsx11("input", { "data-component-id": componentId, id: htmlId, "data-component-type": componentType, ...a11yFwd, ref: inputRef, type: secure && !(visibilityToggle && valueVisible) ? "password" : "text", value: local, onChange: onInput, onKeyDown, onFocus: onFieldFocus, onBlur: onFieldBlur, placeholder: placeholder3, dir: fieldDir, "aria-label": ariaLabelProp ?? placeholderName, "aria-labelledby": labelledBy, "aria-required": required3, "aria-invalid": errored || void 0, "aria-describedby": [errorId, describedByProp].filter(Boolean).join(" ") || void 0, inputMode, autoCapitalize, maxLength, autoCorrect: suggestOff ? "off" : suggestOn ? "on" : void 0, spellCheck: suggestOff ? false : suggestOn ? true : void 0, autoComplete: suggestOff ? "off" : void 0, enterKeyHint, style: inputBase }),
127220
127270
  suffixText && /* @__PURE__ */ jsx11("span", { style: { color: muted, flex: "none" }, children: suffixText }),
127221
- props2.clearButton && local && /* @__PURE__ */ jsx11("span", { onClick: () => {
127271
+ props2.clearButton && local && !(ctx.formReadiness && ctx.formReadiness !== "ready" && !ctx.onAction) && /* @__PURE__ */ jsx11("span", { onClick: () => {
127222
127272
  setLocal("");
127223
127273
  setEdited(true);
127224
127274
  emitNow("");
@@ -127565,8 +127615,7 @@ var init_renderNode = __esm({
127565
127615
  const io2 = new IntersectionObserver((entries) => {
127566
127616
  if (!live3 || !entries[entries.length - 1]?.isIntersecting) return;
127567
127617
  if (pages2.claim(cycle)) {
127568
- workerTap.tapped();
127569
- ctx.onAction?.(firedWithoutTap(action));
127618
+ ctx.onAction?.(workerTap.tapped(firedWithoutTap(action)));
127570
127619
  }
127571
127620
  }, { root, rootMargin: "0px 0px 320px 0px" });
127572
127621
  io2.observe(el2);
@@ -127592,7 +127641,12 @@ var init_renderNode = __esm({
127592
127641
  text13
127593
127642
  ] });
127594
127643
  });
127595
- FormView = withExtras("FormView", ({ props: props2, ctx, wrap }) => {
127644
+ FormView = withExtras("FormView", ({ props: props2, ctx: inputCtx, wrap }) => {
127645
+ const needsWorker = hasWorkerFormSubmit(props2.submitButton);
127646
+ const unavailable = needsWorker && inputCtx.formReadiness === "unavailable";
127647
+ const refreshing = needsWorker && inputCtx.formReadiness === "refreshing";
127648
+ const waiting = needsWorker && !unavailable && (refreshing || inputCtx.formReadiness === "pending" || inputCtx.formReadiness === void 0 && inputCtx.workerReady === false);
127649
+ const ctx = waiting || unavailable ? { ...inputCtx, onAction: null } : inputCtx;
127596
127650
  const bagRef = React16.useRef(null);
127597
127651
  if (!bagRef.current) bagRef.current = createFormBag();
127598
127652
  const bag = bagRef.current;
@@ -127616,14 +127670,18 @@ var init_renderNode = __esm({
127616
127670
  };
127617
127671
  const submitNode = React16.useMemo(() => {
127618
127672
  const node = props2.submitButton;
127619
- if (!node || valid) return node;
127673
+ if (!node || valid && !waiting && !unavailable) return node;
127620
127674
  if (node.body) return { ...node, body: { ...node.body, props: { ...node.body.props ?? {}, disabled: true } } };
127621
127675
  return { ...node, props: { ...node.props ?? {}, disabled: true } };
127622
- }, [props2.submitButton, valid]);
127623
- return /* @__PURE__ */ jsx11("div", { style: { display: "flex", flexDirection: "column", gap: 14, width: "100%", ...wrap }, children: /* @__PURE__ */ jsxs9(FormValuesContext.Provider, { value: bag, children: [
127624
- kids2(props2.fields, ctx),
127625
- submitNode && renderNode(submitNode, submitCtx)
127626
- ] }) });
127676
+ }, [props2.submitButton, valid, waiting, unavailable]);
127677
+ return /* @__PURE__ */ jsxs9("div", { "aria-busy": waiting || void 0, style: { display: "flex", flexDirection: "column", gap: 14, width: "100%", ...wrap }, children: [
127678
+ waiting && /* @__PURE__ */ jsx11("span", { role: "status", children: refreshing ? "Refreshing form\u2026" : "Loading form\u2026" }),
127679
+ unavailable && /* @__PURE__ */ jsx11("span", { role: "status", children: "Form unavailable. Please try again." }),
127680
+ /* @__PURE__ */ jsxs9(FormValuesContext.Provider, { value: bag, children: [
127681
+ /* @__PURE__ */ jsx11("fieldset", { disabled: waiting || unavailable, style: { display: waiting && !refreshing ? "none" : "contents", border: 0, padding: 0, margin: 0, minWidth: 0 }, children: kids2(props2.fields, ctx) }),
127682
+ submitNode && renderNode(submitNode, submitCtx)
127683
+ ] })
127684
+ ] });
127627
127685
  });
127628
127686
  MediaSlotProvider = class {
127629
127687
  constructor(state) {
@@ -129323,8 +129381,7 @@ var init_renderNode = __esm({
129323
129381
  const disabled = props2.disabled === true || loading || hiddenBool(boundDisabled);
129324
129382
  const onClick = ctx.onAction && props2.action && !disabled ? (e2) => {
129325
129383
  e2?.stopPropagation?.();
129326
- workerTap.tapped();
129327
- ctx.onAction(resolveItemDeep2(props2.action, ctx));
129384
+ ctx.onAction(workerTap.tapped(resolveItemDeep2(props2.action, ctx)));
129328
129385
  } : void 0;
129329
129386
  const builtInFg = primary ? C2("textOnAccent", "#fff") : destructive ? C2("danger", "#E62214") : accentTextColor(ctx);
129330
129387
  const fg = bt2.label != null ? C2(bt2.label, builtInFg) : builtInFg;
@@ -129428,7 +129485,7 @@ var init_renderNode = __esm({
129428
129485
  ...wrap
129429
129486
  }, rowStretch, "fit-content"),
129430
129487
  children: [
129431
- loading && /* @__PURE__ */ jsx11("span", { style: { width: glyph, height: glyph, borderRadius: "50%", border: `2px solid ${rgba(fg, primary ? 0.4 : 0.35)}`, borderTopColor: fg, animation: ctx.empty ? void 0 : "himalaya-spin .7s linear infinite" } }),
129488
+ loading && /* @__PURE__ */ jsx11("span", { style: { width: glyph, height: glyph, boxSizing: "border-box", borderRadius: "50%", border: `2px solid ${rgba(fg, primary ? 0.4 : 0.35)}`, borderTopColor: fg, animation: ctx.empty ? void 0 : "himalaya-spin .7s linear infinite" } }),
129432
129489
  !loading && resolvedLeadingIcon && ic(String(resolvedLeadingIcon)),
129433
129490
  !props2.iconOnly && (resolvedTitle != null && resolvedTitle !== "" ? String(resolvedTitle) : txt(props2.title, ctx) || "Button"),
129434
129491
  !loading && !props2.iconOnly && resolvedTrailingIcon && ic(String(resolvedTrailingIcon))
@@ -183810,44 +183867,44 @@ var init_preview_assets_generated = __esm({
183810
183867
  init_define_HHP_CATALOG();
183811
183868
  init_preview_assets_format();
183812
183869
  PREVIEW_ASSET_MANIFEST = [
183813
- { key: "assets/DashboardHost-CJ5nUJvd.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "2c79a4e0eebd2818290eddc68977b66f8b9c002ef5394da129b0c39c2241b146" },
183814
- { key: "assets/DevDrawer-D5vDBKOO.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "cc7bea1bba3b1ca0b289ad2ba1f6cf707c9cb8b7b3793cd688d4f13b438161b0" },
183815
- { key: "assets/IdiomCompare-B_JqFhqI.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "9a67e56e8be14212317c37ddbad01f45abc8d067035d36a7ac09ea9b18ed66a8" },
183816
- { key: "assets/LightboxViewer-DMmNCE-4.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "741d887005f4ca57fb4eaf6d888928ac88e55c6c75822511e91d27696d697905" },
183817
- { key: "assets/OfflineReadingBar-B9oxjdFO.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "29f6dcfe9ce5ca8895179480704a0c179f4bbdbe3450965acb7cda2c0fbb82e6" },
183818
- { key: "assets/PhonePreviewControl-C9x15i_a.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "e4b919af05e8d6af965680b1bde5d22742075eef94b099a0c3cf7442fda1cb0d" },
183819
- { key: "assets/SchemeCompare-BF1gYB8o.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "4338755b3c59a46715e28829f95bfa14d9c5c0671c98fc993777d78de97fdd8a" },
183820
- { key: "assets/WixFrogTelemetrySink-LsIa2qSg.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "f20c33c7d781b52b677758aa9eab6b928a9c97265ddba5fcbd126116f792f5ed" },
183870
+ { key: "assets/DashboardHost-BlHG_7xw.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "a98873322f4a9c7ff349cf63c6be21ba1267f3819892d8c868c26eaad85b7f53" },
183871
+ { key: "assets/DevDrawer-DWVwEc0w.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "f786eeeeeadb90b7f7bec65790b881aac4aec8141a1afcc715093aae232415da" },
183872
+ { key: "assets/IdiomCompare-q7oMoKQ4.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "51092198c8c0d1105908bddbe634998ce6ec1bf6095ed6a5e0c4baaaa69443c5" },
183873
+ { key: "assets/LightboxViewer-CC4HCCbi.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "c2dc12514f3e757992022b636d0e918699d4a0ae1bca30eb474c33ed97e75e66" },
183874
+ { key: "assets/OfflineReadingBar-CcDoAnjr.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "123e8008ddf241a3b3eb56588c6ec6915344db05846f6bc1e45132a9f63bfd40" },
183875
+ { key: "assets/PhonePreviewControl-DphdrcOd.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "4518e7541d329710acdf9a3586e461bdb39e2f1f4bef1324336245c70b93219d" },
183876
+ { key: "assets/SchemeCompare-CTWZfu6o.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "ef99c41a4b18efe70122116bd4f3981d98585efb6c938f0bcc877483b8ea9b35" },
183877
+ { key: "assets/WixFrogTelemetrySink-Co0Yr3kA.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "555afbed68e08a39b950ce0c3ff0a4e62f5e95a1cba63d67f142813b262c24e1" },
183821
183878
  { key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 74357, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
183822
- { key: "assets/files-transfer-DdfDiTU7.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6446, sha256: "71bc00e35b4e995994e4cb611cb8dd9736b78596f6fa3f6f2bf0dcd0b851ec0b" },
183879
+ { key: "assets/files-transfer-Cz8o5H76.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6446, sha256: "8f1661e16d93d8a7eaca2e68dd955b8eea3e0d9959f28e3d3c1730d7ea3d1777" },
183823
183880
  { key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 82995, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
183824
183881
  { key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 89573, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
183825
- { key: "assets/index-O9hDihry.js", contentType: "application/javascript; charset=utf-8", offset: 92277, length: 1495275, sha256: "65d5fb61d736220dffb2e31aa4eabbef963d5799fc346b8eeb11a53343071ea0" },
183826
- { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1587552, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
183827
- { key: "assets/pdf-VfhzBa6N.js", contentType: "application/javascript; charset=utf-8", offset: 1595176, length: 488215, sha256: "cef689a3d399e3c071f78bd48d66724f0564ea2614683378d74c2f6a6477e0d3" },
183828
- { key: "assets/pdf.worker.min-BGnVRhRG.js", contentType: "application/javascript; charset=utf-8", offset: 2083391, length: 90, sha256: "521a0e528916d678d7588b2cddf3dadd3bb959a6d62426382f61c77a82017e35" },
183829
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2083481, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
183830
- { key: "assets/pdfDocument-DNqUWMY0.js", contentType: "application/javascript; charset=utf-8", offset: 3400515, length: 3470, sha256: "285ae36db1d3af09cae93108278a83e2388d104aeb1317717ab0b223bac6e737" },
183831
- { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3403985, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
183832
- { key: "assets/webviewBridgeHost-DBpkiSiL.js", contentType: "application/javascript; charset=utf-8", offset: 3406251, length: 9888, sha256: "08c093827a52bdfc381ba0a73dc7a5d5ac6681637db4a8b57ab00aa0e4ab3f1f" },
183833
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3416139, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
183834
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3420749, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
183835
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3909333, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
183836
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 4000257, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
183837
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4091241, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
183838
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4182221, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
183839
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4273093, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
183840
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4364073, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
183841
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4472709, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
183842
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4581793, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
183843
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4690841, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
183844
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4798541, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
183845
- { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4886649, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
183846
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4893467, length: 4924, sha256: "b314df7501aac4f7ef691f44e29e5bfa323924474d3e0d1fc566f7a2003a9e76" },
183847
- { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4898391, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
183848
- { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4909848, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
183849
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4911019, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
183850
- { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4934066, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
183882
+ { key: "assets/index-D32TnChd.js", contentType: "application/javascript; charset=utf-8", offset: 92277, length: 1502718, sha256: "edbcdb28b09baeba4bdf5a7a45e9053c0a70970994d236161862a503423d8363" },
183883
+ { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1594995, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
183884
+ { key: "assets/pdf-mTl-i7am.js", contentType: "application/javascript; charset=utf-8", offset: 1602619, length: 488215, sha256: "18af3f1aeb2867464a4d53a332c7a6b1b5791d2f2558a681de0f785860f30090" },
183885
+ { key: "assets/pdf.worker.min-BGnVRhRG.js", contentType: "application/javascript; charset=utf-8", offset: 2090834, length: 90, sha256: "521a0e528916d678d7588b2cddf3dadd3bb959a6d62426382f61c77a82017e35" },
183886
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2090924, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
183887
+ { key: "assets/pdfDocument-BokqqgsB.js", contentType: "application/javascript; charset=utf-8", offset: 3407958, length: 3470, sha256: "e28160bf73bb8ec7adafa888693a7f50befe46b125cc22415d066599e8d6dfb3" },
183888
+ { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3411428, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
183889
+ { key: "assets/webviewBridgeHost-DBdQALYU.js", contentType: "application/javascript; charset=utf-8", offset: 3413694, length: 9888, sha256: "6b4a160189b882d826c9c7aa962e5119a694f3519688c4069c1b7d44f1a487c6" },
183890
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3423582, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
183891
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3428192, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
183892
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3916776, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
183893
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 4007700, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
183894
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4098684, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
183895
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4189664, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
183896
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4280536, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
183897
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4371516, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
183898
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4480152, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
183899
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4589236, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
183900
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4698284, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
183901
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4805984, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
183902
+ { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4894092, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
183903
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4900910, length: 4924, sha256: "baa64161cf90267f8f942d1223c742ffb441330a3372f53e52496517961c829f" },
183904
+ { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4905834, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
183905
+ { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4917291, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
183906
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4918462, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
183907
+ { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4941509, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
183851
183908
  ];
183852
183909
  }
183853
183910
  });
@@ -206590,7 +206647,8 @@ function parseFlags(argv) {
206590
206647
  } else {
206591
206648
  const next = argv[i2 + 1];
206592
206649
  const optionalNativeWithoutValue = a2 === "--native" && next !== "ios" && next !== "android";
206593
- const booleanOnly = BOOLEAN_FLAGS.has(a2.slice(2));
206650
+ const numericDepth = a2 === "--deep" && next !== void 0 && /^(?:[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|[+-]?Infinity|NaN)$/i.test(next);
206651
+ const booleanOnly = BOOLEAN_FLAGS.has(a2.slice(2)) && !numericDepth;
206594
206652
  if (!optionalNativeWithoutValue && !booleanOnly && next !== void 0 && !next.startsWith("--")) {
206595
206653
  assign(flags, a2.slice(2), next);
206596
206654
  i2++;
@@ -209291,8 +209349,8 @@ async function testCommand(ctx) {
209291
209349
  let deep;
209292
209350
  if (flags.deep !== void 0) {
209293
209351
  deep = flags.deep === true ? 3 : Number(str3(flags.deep));
209294
- if (!Number.isFinite(deep) || deep < 2 || deep > 6) {
209295
- io2.error(JSON.stringify({ error: `--deep takes a chain depth between 2 and 6 (got "${String(flags.deep)}") \u2014 bare --deep means 3` }));
209352
+ if (!Number.isInteger(deep) || deep < 2 || deep > 6) {
209353
+ io2.error(JSON.stringify({ code: "invalid_usage", error: `--deep takes an integer chain depth between 2 and 6 (got "${String(flags.deep)}") \u2014 bare --deep means 3` }));
209296
209354
  return 2;
209297
209355
  }
209298
209356
  }
Binary file
@@ -87,6 +87,12 @@ The check reads built descriptors, not every possible runtime string. A passing
87
87
  result does not verify dynamic live data, translations, branding images or device
88
88
  appearance. It does not change publication or coverage policy.
89
89
 
90
+ ## `himi test` depth codes
91
+
92
+ Invalid `--deep` values emit `code: "invalid_usage"` on stderr and exit 2.
93
+ Depth must be an integer from 2 through 6. A nonnumeric word after bare `--deep`
94
+ is a positional screen ID; use `--deep=<value>` to diagnose a nonnumeric depth.
95
+
90
96
  ## Push codes
91
97
 
92
98
  | Code | Meaning |
@@ -478,7 +478,7 @@ behavior. This instruction does not add an automatic suppression or retry gate t
478
478
  | `himi test` | The whole loop. Hermetic data + hostile passes. Exit 1 on any error. |
479
479
  | `--json` | Machine envelope — the surface an agent reads. |
480
480
  | `--content <dir>` | The content package to crawl (default: cwd). |
481
- | `--deep [n]` | BFS over action chains (depth 3; range 2–6). Sequence-only bugs. |
481
+ | `--deep [n]` | BFS over action chains (default depth 3; integer range 2–6). Both `--deep 4` and `--deep=4` select depth 4; bare `--deep home` keeps `home` as a screen ID. To target a numeric screen ID, disambiguate with `--deep=3 4`. Sequence-only bugs. |
482
482
  | `--record` | Refresh `dev/net-mocks.json` from live reads. QA site, read-path-only. |
483
483
  | `--offline` | Strip every data layer — see the failure UI head-on. (Excludes `--net`.) |
484
484
  | `--no-hostile` | Skip the empty-list / all-500 passes. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1606.0",
3
+ "version": "0.1608.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": [
@@ -72,5 +72,5 @@
72
72
  "artifactId": "himalaya-cli"
73
73
  }
74
74
  },
75
- "falconPackageHash": "d39364e0b5bb8ee230970f6ee80476f872e1b56e4cccfe4d76dbc4c3"
75
+ "falconPackageHash": "1bec846ad5466a0b26a35a61f3e2e514b5c39c2f5376641b9ae23195"
76
76
  }