@wix/himalaya-cli 0.1496.0 → 0.1497.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/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/attendance-classifier.d.ts +37 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/catalog-pricing-contract.d.ts +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/index.d.ts +2 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/iap/src/wix-payments-contract.d.ts +11 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/apple-iap-contract.d.ts +27 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/commerce-contract.d.ts +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-verticals/attendance.d.ts +10 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/iap-verticals/index.d.ts +1 -0
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/flows/iap-checkout/src/index.d.ts +1 -1
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/events/src/index.d.ts +33 -2
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap-checkout.mjs +346 -26
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/iap.mjs +132 -3
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/screens.mjs +366 -48
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-events.mjs +5 -0
- package/dist/cli.mjs +816 -666
- package/guides/iap-products.md +7 -1
- package/guides/sdk-reference.json +376 -27
- package/package.json +2 -2
- package/templates/beauty-salon/dev/index.ts +394 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/beauty-salon/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/branded-lite/dev/index.ts +1073 -284
- package/templates/branded-lite/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/branded-lite/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/branded-lite/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/branded-lite/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/community-club/dev/index.ts +397 -2
- package/templates/community-club/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/community-club/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/community-club/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/community-club/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/events-meetups/dev/index.ts +397 -2
- package/templates/events-meetups/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/events-meetups/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/events-meetups/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/events-meetups/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/gym-fitness/dev/index.ts +828 -39
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/gym-fitness/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/gym-fitness/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/nonprofit-cause/dev/index.ts +397 -2
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/nonprofit-cause/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/nonprofit-cause/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/podcast-creator/dev/index.ts +397 -2
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/podcast-creator/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/podcast-creator/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/portfolio-creative/dev/index.ts +397 -2
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/portfolio-creative/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/portfolio-creative/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/restaurant/dev/index.ts +397 -2
- package/templates/restaurant/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/restaurant/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/restaurant/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/restaurant/tier5-src/himi-events-detail/index.ts +112 -21
- package/templates/yoga-studio/dev/index.ts +828 -39
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance-form.ts +106 -0
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance-purchase.ts +211 -0
- package/templates/yoga-studio/tier5-src/_shared/iap-attendance.ts +38 -0
- package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +52 -7
- package/templates/yoga-studio/tier5-src/himi-events-detail/index.ts +112 -21
package/dist/cli.mjs
CHANGED
|
@@ -659,8 +659,8 @@ function mobileUxDocumentBody(mobile) {
|
|
|
659
659
|
}
|
|
660
660
|
return out2 + mobile.slice(last);
|
|
661
661
|
}
|
|
662
|
-
function mobileUxSection(
|
|
663
|
-
const match = new RegExp(`(?:^|\\n)##[ \\t]+${heading}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(
|
|
662
|
+
function mobileUxSection(text11, heading) {
|
|
663
|
+
const match = new RegExp(`(?:^|\\n)##[ \\t]+${heading}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(text11);
|
|
664
664
|
return match ? match[1] : null;
|
|
665
665
|
}
|
|
666
666
|
function sectionTables(markdown) {
|
|
@@ -689,8 +689,8 @@ function namesOneCta(cell2) {
|
|
|
689
689
|
if (!cell2) return false;
|
|
690
690
|
return !/[,;]|\s\/\s/.test(cell2);
|
|
691
691
|
}
|
|
692
|
-
function declaredStates(
|
|
693
|
-
const contract = section(
|
|
692
|
+
function declaredStates(text11) {
|
|
693
|
+
const contract = section(text11, "Screen contract");
|
|
694
694
|
if (!contract) return [];
|
|
695
695
|
const states = [];
|
|
696
696
|
for (const bullet of contract.matchAll(/^[ \t]*[-*][ \t]*[^:\n]*\bstates?[ \t]*:[ \t]*(\S.*)$/gim)) {
|
|
@@ -700,8 +700,8 @@ function declaredStates(text10) {
|
|
|
700
700
|
}
|
|
701
701
|
return [...new Set(states.map((state) => state.toLowerCase()))];
|
|
702
702
|
}
|
|
703
|
-
function primaryCtaStructureGap(
|
|
704
|
-
const acceptance = section(
|
|
703
|
+
function primaryCtaStructureGap(text11) {
|
|
704
|
+
const acceptance = section(text11, "Implementation acceptance");
|
|
705
705
|
if (acceptance === null) return "There is no `## Implementation acceptance` section to read it from.";
|
|
706
706
|
const tables = sectionTables(acceptance).filter((table) => table.data.length > 0);
|
|
707
707
|
if (!tables.length) return "Its acceptance table has no rows.";
|
|
@@ -714,7 +714,7 @@ function primaryCtaStructureGap(text10) {
|
|
|
714
714
|
const data = ctaTables.flatMap(({ table }) => table.data);
|
|
715
715
|
const flat = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
|
|
716
716
|
const rowText = data.map((row) => flat(row.join(" ")));
|
|
717
|
-
const missing2 = declaredStates(
|
|
717
|
+
const missing2 = declaredStates(text11).filter((state) => !rowText.some((row) => row.includes(flat(state))));
|
|
718
718
|
if (missing2.length) return `The acceptance table has no row for the declared state(s): ${missing2.join(", ")}.`;
|
|
719
719
|
return null;
|
|
720
720
|
}
|
|
@@ -729,16 +729,16 @@ function hasUnterminatedComment(mobile) {
|
|
|
729
729
|
}
|
|
730
730
|
}
|
|
731
731
|
function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
732
|
-
const
|
|
732
|
+
const text11 = mobileUxDocumentBody(mobile);
|
|
733
733
|
const findings = [];
|
|
734
|
-
if (!/^## Implementation acceptance\b/im.test(
|
|
734
|
+
if (!/^## Implementation acceptance\b/im.test(text11)) {
|
|
735
735
|
findings.push({ code: "missing-acceptance-matrix", message: "MOBILE-UX.md must contain the heading `## Implementation acceptance` at the start of a line. Case is not checked, but use this spelling: other tooling addresses the document by it." });
|
|
736
736
|
}
|
|
737
|
-
if (!/^## Evidence\b/im.test(
|
|
737
|
+
if (!/^## Evidence\b/im.test(text11)) {
|
|
738
738
|
findings.push({ code: "missing-evidence-section", message: "MOBILE-UX.md must contain the heading `## Evidence` at the start of a line. Case is not checked, but use this spelling: other tooling addresses the document by it." });
|
|
739
739
|
}
|
|
740
|
-
if (!/one primary CTA per state/i.test(
|
|
741
|
-
const gap = primaryCtaStructureGap(
|
|
740
|
+
if (!/one primary CTA per state/i.test(text11)) {
|
|
741
|
+
const gap = primaryCtaStructureGap(text11);
|
|
742
742
|
if (gap) {
|
|
743
743
|
findings.push({
|
|
744
744
|
code: "missing-primary-cta-rule",
|
|
@@ -746,8 +746,8 @@ function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
|
746
746
|
});
|
|
747
747
|
}
|
|
748
748
|
}
|
|
749
|
-
if (!hasWidthEvidence(
|
|
750
|
-
findings.push({ code: "missing-width-evidence", message: widthEvidenceMessage(
|
|
749
|
+
if (!hasWidthEvidence(text11, renderedWidths)) {
|
|
750
|
+
findings.push({ code: "missing-width-evidence", message: widthEvidenceMessage(text11, renderedWidths) });
|
|
751
751
|
}
|
|
752
752
|
if (findings.length && hasUnterminatedComment(mobile)) {
|
|
753
753
|
return [{
|
|
@@ -757,15 +757,15 @@ function mobileUxMarkerFindings(mobile, renderedWidths = []) {
|
|
|
757
757
|
}
|
|
758
758
|
return findings;
|
|
759
759
|
}
|
|
760
|
-
function widthMentions(
|
|
760
|
+
function widthMentions(text11) {
|
|
761
761
|
const mentions = [];
|
|
762
|
-
for (const match of
|
|
762
|
+
for (const match of text11.matchAll(/\d+/g)) {
|
|
763
763
|
const value = Number(match[0]);
|
|
764
764
|
const start = match.index ?? 0;
|
|
765
765
|
if (!inRange(value)) continue;
|
|
766
766
|
const end = start + match[0].length;
|
|
767
|
-
const after =
|
|
768
|
-
const before =
|
|
767
|
+
const after = text11.slice(end, end + EDGE_WINDOW);
|
|
768
|
+
const before = text11.slice(Math.max(0, start - EDGE_WINDOW), start);
|
|
769
769
|
if (looksLikeYear(value) && !(UNIT_ATTACHED.test(after) || UNIT_WORD_ATTACHED.test(after))) continue;
|
|
770
770
|
const spelledAsWidth = UNIT_ATTACHED.test(after) || UNIT_WORD_ATTACHED.test(after) || FILENAME_AFTER.test(after);
|
|
771
771
|
const vetoed = spelledAsWidth && (ANTI_CUE_BEFORE.test(before) || PAIR_HEIGHT_BEFORE.test(before) || ANTI_CUE_AFTER.test(after));
|
|
@@ -3463,8 +3463,8 @@ var init_catalog_cache = __esm({
|
|
|
3463
3463
|
let prior;
|
|
3464
3464
|
if (existsSync4(channelPath)) {
|
|
3465
3465
|
try {
|
|
3466
|
-
const
|
|
3467
|
-
if (Buffer.byteLength(
|
|
3466
|
+
const text11 = readFileSync5(channelPath, "utf8");
|
|
3467
|
+
if (Buffer.byteLength(text11) <= MAX_METADATA) prior = JSON.parse(text11);
|
|
3468
3468
|
} catch {
|
|
3469
3469
|
}
|
|
3470
3470
|
}
|
|
@@ -4090,8 +4090,8 @@ var init_catalog_v2 = __esm({
|
|
|
4090
4090
|
"../html-to-t5/catalog.v2.json"() {
|
|
4091
4091
|
catalog_v2_default = {
|
|
4092
4092
|
encoding: "gzip-base64",
|
|
4093
|
-
sha256: "
|
|
4094
|
-
data: "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"
|
|
4093
|
+
sha256: "c54c4867c4ceeb2712fe45fd349ca9fd8ab3254879549c7d437790ab15deb67a",
|
|
4094
|
+
data: "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"
|
|
4095
4095
|
};
|
|
4096
4096
|
}
|
|
4097
4097
|
});
|
|
@@ -4393,15 +4393,15 @@ function analyzeController(source, file2, profile, diagnostics) {
|
|
|
4393
4393
|
error(declaration ?? sf2, "Default-export defineController({ initialState, handlers }).");
|
|
4394
4394
|
return;
|
|
4395
4395
|
}
|
|
4396
|
-
const
|
|
4397
|
-
if (!
|
|
4396
|
+
const object9 = declaration.expression.arguments[0];
|
|
4397
|
+
if (!object9 || !ts2.isObjectLiteralExpression(object9)) {
|
|
4398
4398
|
error(declaration, "Controller definition must be an object literal.");
|
|
4399
4399
|
return;
|
|
4400
4400
|
}
|
|
4401
|
-
const props = new Map(
|
|
4401
|
+
const props = new Map(object9.properties.map((p2) => [p2.name?.getText(sf2).replace(/^["']|["']$/g, ""), p2]));
|
|
4402
4402
|
const state = props.get("initialState"), handlers = props.get("handlers");
|
|
4403
4403
|
if (!state || !ts2.isPropertyAssignment(state) || !handlers || !ts2.isPropertyAssignment(handlers) || !ts2.isObjectLiteralExpression(handlers.initializer)) {
|
|
4404
|
-
error(
|
|
4404
|
+
error(object9, "initialState and handlers must be object literals.");
|
|
4405
4405
|
return;
|
|
4406
4406
|
}
|
|
4407
4407
|
function literal(n2) {
|
|
@@ -4568,8 +4568,8 @@ function parseStyles(source, file2, diagnostics, origin = { line: 1, column: 1 }
|
|
|
4568
4568
|
declarations[decl.prop] = decl.value;
|
|
4569
4569
|
locations[decl.prop] = declLoc;
|
|
4570
4570
|
}
|
|
4571
|
-
for (const
|
|
4572
|
-
const s2 =
|
|
4571
|
+
for (const text11 of node.selector.split(",")) {
|
|
4572
|
+
const s2 = text11.trim();
|
|
4573
4573
|
if (!s2 || !selector.test(s2)) {
|
|
4574
4574
|
diagnostics.push({ ...loc, code: "HHP-CSS-SELECTOR", severity: "error", message: `Unsupported selector ${s2}.`, hint: "Use static tag, id, class, or compound selectors." });
|
|
4575
4575
|
continue;
|
|
@@ -4591,7 +4591,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4591
4591
|
if (!/^(?:0|\d+(?:\.\d+)?px)$/.test(v2)) throw new Error(`Expected a nonnegative px length, received ${v2}.`);
|
|
4592
4592
|
return parseFloat(v2);
|
|
4593
4593
|
};
|
|
4594
|
-
const
|
|
4594
|
+
const numeric2 = (v2) => {
|
|
4595
4595
|
if (!/^-?\d+(?:\.\d+)?$/.test(v2)) throw new Error(`Expected a number, received ${v2}.`);
|
|
4596
4596
|
return Number(v2);
|
|
4597
4597
|
};
|
|
@@ -4644,7 +4644,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4644
4644
|
mods.maxWidth = length(v2);
|
|
4645
4645
|
break;
|
|
4646
4646
|
case "flex-grow":
|
|
4647
|
-
mods.weight =
|
|
4647
|
+
mods.weight = numeric2(v2);
|
|
4648
4648
|
break;
|
|
4649
4649
|
case "color":
|
|
4650
4650
|
props.color = token(v2, "colors");
|
|
@@ -4673,17 +4673,17 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4673
4673
|
mods.shadow = { token: token(v2, "shadows") };
|
|
4674
4674
|
break;
|
|
4675
4675
|
case "opacity":
|
|
4676
|
-
mods.opacity =
|
|
4676
|
+
mods.opacity = numeric2(v2);
|
|
4677
4677
|
if (Number(mods.opacity) < 0 || Number(mods.opacity) > 1) throw new Error("Opacity must be between zero and one.");
|
|
4678
4678
|
break;
|
|
4679
4679
|
case "aspect-ratio": {
|
|
4680
|
-
const p2 = v2.split("/").map((x2) =>
|
|
4680
|
+
const p2 = v2.split("/").map((x2) => numeric2(x2.trim()));
|
|
4681
4681
|
mods.aspectRatio = p2[0] / (p2[1] ?? 1);
|
|
4682
4682
|
if (!Number.isFinite(mods.aspectRatio) || Number(mods.aspectRatio) <= 0) throw new Error("Aspect ratio must be positive.");
|
|
4683
4683
|
break;
|
|
4684
4684
|
}
|
|
4685
4685
|
case "z-index":
|
|
4686
|
-
mods.zIndex =
|
|
4686
|
+
mods.zIndex = numeric2(v2);
|
|
4687
4687
|
break;
|
|
4688
4688
|
case "visibility":
|
|
4689
4689
|
if (!["hidden", "visible"].includes(v2)) throw new Error("Unsupported visibility.");
|
|
@@ -4703,7 +4703,7 @@ function translateStyle(style, profile, type, props, mods, error) {
|
|
|
4703
4703
|
const parts = [...v2.matchAll(/(translateX|translateY|scale|rotate)\(([^)]+)\)/g)];
|
|
4704
4704
|
if (!parts.length || parts.map((p2) => p2[0]).join("") !== v2.replace(/\s+/g, "")) throw new Error("Supported transforms: translateX, translateY, scale, rotate.");
|
|
4705
4705
|
for (const [, fn2, arg] of parts) {
|
|
4706
|
-
if (fn2 === "scale") mods.scale =
|
|
4706
|
+
if (fn2 === "scale") mods.scale = numeric2(arg);
|
|
4707
4707
|
else if (fn2 === "rotate") {
|
|
4708
4708
|
if (!/^-?\d+(?:\.\d+)?deg$/.test(arg)) throw new Error("Rotation uses degrees.");
|
|
4709
4709
|
mods.rotation = parseFloat(arg);
|
|
@@ -5342,31 +5342,31 @@ function compileV2(html, profile, options) {
|
|
|
5342
5342
|
return component;
|
|
5343
5343
|
}
|
|
5344
5344
|
const textNodes = element.contents().toArray().filter((n2) => n2.type === "text");
|
|
5345
|
-
const
|
|
5345
|
+
const text11 = textNodes.map((n2) => n2.data).join(" ").replace(/\s+/g, " ").trim();
|
|
5346
5346
|
if (["Text", "RichText"].includes(type)) {
|
|
5347
|
-
const matches = [...
|
|
5348
|
-
if (/{{|}}/.test(
|
|
5347
|
+
const matches = [...text11.matchAll(/{{\s*([\w.$]+)\s*}}/g)];
|
|
5348
|
+
if (/{{|}}/.test(text11.replace(/{{\s*[\w.$]+\s*}}/g, ""))) error(el2, "HHP-TEXT-EXPRESSION", "Text interpolation accepts state/item paths; compute expressions in the controller.");
|
|
5349
5349
|
if (matches.length) {
|
|
5350
|
-
if (matches.length === 1 && matches[0][0] ===
|
|
5350
|
+
if (matches.length === 1 && matches[0][0] === text11 && type === "Text") {
|
|
5351
5351
|
props.text = path2(el2, matches[0][1], row);
|
|
5352
5352
|
} else if (controller && type === "Text") {
|
|
5353
5353
|
for (const match of matches) path2(el2, match[1], row);
|
|
5354
5354
|
const key3 = `t${textProjections.length}`;
|
|
5355
|
-
const normalized =
|
|
5355
|
+
const normalized = text11.replace(/{{\s*([\w.$]+)\s*}}/g, (_match, raw) => `{{${raw.startsWith("$item.") ? raw : statePath(raw)}}}`);
|
|
5356
5356
|
textProjections.push({ key: key3, text: normalized, ...row ? { collection: row } : {} });
|
|
5357
5357
|
props.text = row ? `$item.__hhpText_${key3}` : `$service:${serviceName}.__hhpText.${key3}`;
|
|
5358
5358
|
} else {
|
|
5359
5359
|
if (profile.surfaces.some((surface) => surface === "ios" || surface === "android" || surface === "macos"))
|
|
5360
5360
|
error(el2, "HHP-TEXT-TEMPLATE-SURFACE", "Text templates are not implemented by the enabled native renderers.", "Compute the complete string in controller state and bind it on a Text component with {{path}} or bind:content.");
|
|
5361
5361
|
const params = {};
|
|
5362
|
-
let template =
|
|
5362
|
+
let template = text11;
|
|
5363
5363
|
matches.forEach((m2, i2) => {
|
|
5364
5364
|
params[`v${i2}`] = path2(el2, m2[1], row);
|
|
5365
5365
|
template = template.replace(m2[0], `{v${i2}}`);
|
|
5366
5366
|
});
|
|
5367
5367
|
props.template = { template, params };
|
|
5368
5368
|
}
|
|
5369
|
-
} else if (
|
|
5369
|
+
} else if (text11) props.text = text11;
|
|
5370
5370
|
if (/^h[1-6]$/.test(tag) && props.style === void 0) {
|
|
5371
5371
|
const candidates = tag === "h1" ? ["largeTitle", "title1", "body"] : tag === "h2" ? ["title1", "headline", "body"] : ["headline", "body"];
|
|
5372
5372
|
const available = profile.tokens.typography ?? [];
|
|
@@ -5374,8 +5374,8 @@ function compileV2(html, profile, options) {
|
|
|
5374
5374
|
if (heading) props.style = heading;
|
|
5375
5375
|
else error(el2, "HHP-TOKEN", "Headings require a body, title1, headline, or largeTitle typography token.");
|
|
5376
5376
|
}
|
|
5377
|
-
} else if (type === "Button" && (
|
|
5378
|
-
else if (
|
|
5377
|
+
} else if (type === "Button" && (text11 || attrs.title)) props.title = text11 || attrs.title;
|
|
5378
|
+
else if (text11) error(el2, "HHP-TEXT", "Wrap container text in a paragraph or span.");
|
|
5379
5379
|
if (type === "Image" && attrs.src) {
|
|
5380
5380
|
if (/^https:\/\//.test(attrs.src)) props.url = attrs.src;
|
|
5381
5381
|
else {
|
|
@@ -7391,17 +7391,17 @@ ${BLOCK_END}`;
|
|
|
7391
7391
|
${block}
|
|
7392
7392
|
`;
|
|
7393
7393
|
}
|
|
7394
|
-
function markersIntact(
|
|
7395
|
-
const begins =
|
|
7396
|
-
const ends =
|
|
7394
|
+
function markersIntact(text11) {
|
|
7395
|
+
const begins = text11.split(BLOCK_BEGIN).length - 1;
|
|
7396
|
+
const ends = text11.split(BLOCK_END).length - 1;
|
|
7397
7397
|
if (begins === 0 && ends === 0) return true;
|
|
7398
|
-
return begins === 1 && ends === 1 &&
|
|
7398
|
+
return begins === 1 && ends === 1 && text11.indexOf(BLOCK_BEGIN) < text11.indexOf(BLOCK_END) && BLOCK_RE.test(text11);
|
|
7399
7399
|
}
|
|
7400
|
-
function withoutBlock(
|
|
7401
|
-
const m2 = BLOCK_RE.exec(
|
|
7402
|
-
if (!m2) return
|
|
7403
|
-
const before =
|
|
7404
|
-
const after =
|
|
7400
|
+
function withoutBlock(text11) {
|
|
7401
|
+
const m2 = BLOCK_RE.exec(text11);
|
|
7402
|
+
if (!m2) return text11;
|
|
7403
|
+
const before = text11.slice(0, m2.index).replace(/\n+$/, "");
|
|
7404
|
+
const after = text11.slice(m2.index + m2[0].length).replace(/^\n+/, "");
|
|
7405
7405
|
if (!before) return after;
|
|
7406
7406
|
if (!after) return `${before}
|
|
7407
7407
|
`;
|
|
@@ -7409,8 +7409,8 @@ function withoutBlock(text10) {
|
|
|
7409
7409
|
|
|
7410
7410
|
${after}`;
|
|
7411
7411
|
}
|
|
7412
|
-
function blockVersion(
|
|
7413
|
-
return STAMP_RE.exec(
|
|
7412
|
+
function blockVersion(text11) {
|
|
7413
|
+
return STAMP_RE.exec(text11)?.[1] ?? null;
|
|
7414
7414
|
}
|
|
7415
7415
|
function agentsMdBody(appName2) {
|
|
7416
7416
|
const gates = APPROVAL_GATES.map((g2) => `- \`${g2.id}\` \u2014 ${g2.label}`).join("\n");
|
|
@@ -7873,13 +7873,13 @@ function assertConfinedTsconfig(entry, contentRoot2, allows) {
|
|
|
7873
7873
|
`refused to read ${p2}: ${why}. A tsconfig may extend a file from its own package or an installed dependency \u2014 nothing else.`
|
|
7874
7874
|
);
|
|
7875
7875
|
};
|
|
7876
|
-
const stripJsonc = (
|
|
7877
|
-
if (
|
|
7876
|
+
const stripJsonc = (text11) => {
|
|
7877
|
+
if (text11.charCodeAt(0) === 65279) text11 = text11.slice(1);
|
|
7878
7878
|
let out2 = "";
|
|
7879
7879
|
let inStr = false;
|
|
7880
7880
|
let esc = false;
|
|
7881
|
-
for (let i2 = 0; i2 <
|
|
7882
|
-
const c2 =
|
|
7881
|
+
for (let i2 = 0; i2 < text11.length; i2++) {
|
|
7882
|
+
const c2 = text11[i2];
|
|
7883
7883
|
if (inStr) {
|
|
7884
7884
|
out2 += c2;
|
|
7885
7885
|
if (esc) esc = false;
|
|
@@ -7892,13 +7892,13 @@ function assertConfinedTsconfig(entry, contentRoot2, allows) {
|
|
|
7892
7892
|
out2 += c2;
|
|
7893
7893
|
continue;
|
|
7894
7894
|
}
|
|
7895
|
-
if (c2 === "/" &&
|
|
7896
|
-
while (i2 <
|
|
7895
|
+
if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
7896
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
7897
7897
|
continue;
|
|
7898
7898
|
}
|
|
7899
|
-
if (c2 === "/" &&
|
|
7899
|
+
if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
7900
7900
|
i2 += 2;
|
|
7901
|
-
while (i2 <
|
|
7901
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
7902
7902
|
i2++;
|
|
7903
7903
|
continue;
|
|
7904
7904
|
}
|
|
@@ -12468,8 +12468,8 @@ function pushSpan(out2, s2) {
|
|
|
12468
12468
|
else out2.push(s2);
|
|
12469
12469
|
}
|
|
12470
12470
|
function spanOf(textNode) {
|
|
12471
|
-
const
|
|
12472
|
-
if (
|
|
12471
|
+
const text11 = str(at(textNode, "textData", "text"));
|
|
12472
|
+
if (text11 === "") return null;
|
|
12473
12473
|
let bold = false, italic = false, underline = false;
|
|
12474
12474
|
let link;
|
|
12475
12475
|
const decorations = at(textNode, "textData", "decorations");
|
|
@@ -12496,7 +12496,7 @@ function spanOf(textNode) {
|
|
|
12496
12496
|
}
|
|
12497
12497
|
}
|
|
12498
12498
|
}
|
|
12499
|
-
const span = { text:
|
|
12499
|
+
const span = { text: text11 };
|
|
12500
12500
|
if (bold) span.bold = true;
|
|
12501
12501
|
if (italic) span.italic = true;
|
|
12502
12502
|
if (underline) span.underline = true;
|
|
@@ -12718,8 +12718,8 @@ function blockOf(ids, n2, path2) {
|
|
|
12718
12718
|
const { title, url } = cardFields(n2, type);
|
|
12719
12719
|
return [card(ids.claim(n2, path2), type, title, url)];
|
|
12720
12720
|
}
|
|
12721
|
-
const
|
|
12722
|
-
return
|
|
12721
|
+
const text11 = plainText(n2);
|
|
12722
|
+
return text11.trim() !== "" ? [{ kind: "paragraph", id: ids.claim(n2, path2), spans: [{ text: text11 }] }] : [];
|
|
12723
12723
|
}
|
|
12724
12724
|
}
|
|
12725
12725
|
}
|
|
@@ -14241,26 +14241,26 @@ function serviceOnlyBindingValues(props, key3) {
|
|
|
14241
14241
|
});
|
|
14242
14242
|
return out2;
|
|
14243
14243
|
}
|
|
14244
|
-
function matchBraceSafe(
|
|
14244
|
+
function matchBraceSafe(text11, open) {
|
|
14245
14245
|
let depth = 0;
|
|
14246
|
-
for (let i2 = open; i2 <
|
|
14247
|
-
const c2 =
|
|
14246
|
+
for (let i2 = open; i2 < text11.length; i2++) {
|
|
14247
|
+
const c2 = text11[i2];
|
|
14248
14248
|
if (c2 === '"' || c2 === "'" || c2 === "`") {
|
|
14249
14249
|
const q2 = c2;
|
|
14250
14250
|
i2++;
|
|
14251
|
-
while (i2 <
|
|
14252
|
-
if (
|
|
14251
|
+
while (i2 < text11.length && text11[i2] !== q2) {
|
|
14252
|
+
if (text11[i2] === "\\") i2++;
|
|
14253
14253
|
i2++;
|
|
14254
14254
|
}
|
|
14255
14255
|
continue;
|
|
14256
14256
|
}
|
|
14257
|
-
if (c2 === "/" &&
|
|
14258
|
-
while (i2 <
|
|
14257
|
+
if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
14258
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
14259
14259
|
continue;
|
|
14260
14260
|
}
|
|
14261
|
-
if (c2 === "/" &&
|
|
14261
|
+
if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
14262
14262
|
i2 += 2;
|
|
14263
|
-
while (i2 <
|
|
14263
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
14264
14264
|
i2++;
|
|
14265
14265
|
continue;
|
|
14266
14266
|
}
|
|
@@ -17352,11 +17352,11 @@ function strip(line) {
|
|
|
17352
17352
|
function scalar(v2) {
|
|
17353
17353
|
return v2.trim().replace(/^["']|["']$/g, "");
|
|
17354
17354
|
}
|
|
17355
|
-
function parseRolloutYaml(
|
|
17355
|
+
function parseRolloutYaml(text11) {
|
|
17356
17356
|
const cfg = { app: "", rings: [] };
|
|
17357
17357
|
let cur = null;
|
|
17358
17358
|
let inRings = false;
|
|
17359
|
-
for (const raw of
|
|
17359
|
+
for (const raw of text11.split("\n")) {
|
|
17360
17360
|
const line = strip(raw);
|
|
17361
17361
|
if (!line.trim()) continue;
|
|
17362
17362
|
const top = /^([a-zA-Z_]+):\s*(.*)$/.exec(line);
|
|
@@ -17387,10 +17387,10 @@ function assignRing(r3, key3, val) {
|
|
|
17387
17387
|
else if (key3 === "percent") r3.percent = Number(v2);
|
|
17388
17388
|
else if (key3 === "minBinaryVersion") r3.minBinaryVersion = v2;
|
|
17389
17389
|
}
|
|
17390
|
-
function parseRevocationsYaml(
|
|
17390
|
+
function parseRevocationsYaml(text11) {
|
|
17391
17391
|
const out2 = { app: "", revoked: [] };
|
|
17392
17392
|
let inList = false;
|
|
17393
|
-
for (const raw of
|
|
17393
|
+
for (const raw of text11.split("\n")) {
|
|
17394
17394
|
const line = strip(raw);
|
|
17395
17395
|
if (!line.trim()) continue;
|
|
17396
17396
|
const top = /^([a-zA-Z_]+):\s*(.*)$/.exec(line);
|
|
@@ -17767,14 +17767,14 @@ function discoverNativeActions(appDir3) {
|
|
|
17767
17767
|
}
|
|
17768
17768
|
const sources = roots2.flatMap(({ directory, extension, buildDirMaxDepth }) => nativeSourceFiles(resolve16(appDir3, directory), extension, buildDirMaxDepth));
|
|
17769
17769
|
const registered = sources.flatMap((source) => {
|
|
17770
|
-
let
|
|
17770
|
+
let text11;
|
|
17771
17771
|
try {
|
|
17772
|
-
|
|
17772
|
+
text11 = readFileSync16(source, "utf8");
|
|
17773
17773
|
} catch (err) {
|
|
17774
17774
|
if (!vanished(err)) throw err;
|
|
17775
17775
|
return [];
|
|
17776
17776
|
}
|
|
17777
|
-
return registeredActions(
|
|
17777
|
+
return registeredActions(text11);
|
|
17778
17778
|
});
|
|
17779
17779
|
return {
|
|
17780
17780
|
registered: new Set(registered),
|
|
@@ -21178,9 +21178,9 @@ var init_wix_cache_policy = __esm({
|
|
|
21178
21178
|
});
|
|
21179
21179
|
|
|
21180
21180
|
// ../../core/dev-server/src/l10n-catalog.ts
|
|
21181
|
-
function parseCatalog(
|
|
21181
|
+
function parseCatalog(text11) {
|
|
21182
21182
|
try {
|
|
21183
|
-
const c2 = JSON.parse(
|
|
21183
|
+
const c2 = JSON.parse(text11);
|
|
21184
21184
|
return c2 && typeof c2 === "object" && c2.messages && typeof c2.messages === "object" ? c2 : void 0;
|
|
21185
21185
|
} catch {
|
|
21186
21186
|
return void 0;
|
|
@@ -26719,10 +26719,10 @@ async function mintAnonymousVisitor(clientId, fetchImpl = fetch) {
|
|
|
26719
26719
|
headers: { "Content-Type": "application/json" },
|
|
26720
26720
|
body: JSON.stringify({ clientId, grantType: "anonymous" })
|
|
26721
26721
|
});
|
|
26722
|
-
const
|
|
26722
|
+
const text11 = await res.text();
|
|
26723
26723
|
let j2 = {};
|
|
26724
26724
|
try {
|
|
26725
|
-
j2 =
|
|
26725
|
+
j2 = text11 ? JSON.parse(text11) : {};
|
|
26726
26726
|
} catch {
|
|
26727
26727
|
}
|
|
26728
26728
|
if (res.status !== 200 || !j2.access_token) throw new Error(`visitor mint failed (${res.status})`);
|
|
@@ -27068,10 +27068,10 @@ ${session}`);
|
|
|
27068
27068
|
}),
|
|
27069
27069
|
timedOut
|
|
27070
27070
|
]);
|
|
27071
|
-
const
|
|
27071
|
+
const text11 = await Promise.race([res.text(), timedOut]);
|
|
27072
27072
|
let j2 = {};
|
|
27073
27073
|
try {
|
|
27074
|
-
j2 =
|
|
27074
|
+
j2 = text11 ? JSON.parse(text11) : {};
|
|
27075
27075
|
} catch {
|
|
27076
27076
|
}
|
|
27077
27077
|
if (res.status < 200 || res.status >= 300 || !j2.signedInstance)
|
|
@@ -27257,7 +27257,7 @@ ${session}`);
|
|
|
27257
27257
|
});
|
|
27258
27258
|
const xsrf = /(?:^|;\s*)XSRF-TOKEN=([^;]+)/.exec(sessionCookie)?.[1];
|
|
27259
27259
|
let status;
|
|
27260
|
-
let
|
|
27260
|
+
let text11;
|
|
27261
27261
|
try {
|
|
27262
27262
|
const res = await Promise.race([
|
|
27263
27263
|
this.fetchImpl(`${ONE_APP_SESSION}/${msid}/signed-instance?signed_instance_type=Member`, {
|
|
@@ -27269,7 +27269,7 @@ ${session}`);
|
|
|
27269
27269
|
timedOut
|
|
27270
27270
|
]);
|
|
27271
27271
|
status = res.status;
|
|
27272
|
-
|
|
27272
|
+
text11 = await Promise.race([res.text(), timedOut]);
|
|
27273
27273
|
} catch (e2) {
|
|
27274
27274
|
return refuse7(new SiteInstanceUnavailable(msid, `mint failed: ${e2?.message ?? e2}`), MEMBER_TRANSIENT_TTL_MS);
|
|
27275
27275
|
} finally {
|
|
@@ -27279,7 +27279,7 @@ ${session}`);
|
|
|
27279
27279
|
if (status === 401) return refuse7(new AccountSessionExpired(msid, `mint refused (${status})`), MEMBER_TRANSIENT_TTL_MS);
|
|
27280
27280
|
let instance;
|
|
27281
27281
|
try {
|
|
27282
|
-
instance = JSON.parse(
|
|
27282
|
+
instance = JSON.parse(text11).signedInstance;
|
|
27283
27283
|
} catch {
|
|
27284
27284
|
}
|
|
27285
27285
|
if (status < 200 || status >= 300 || typeof instance !== "string" || !instance) {
|
|
@@ -27357,8 +27357,8 @@ async function postJson(path2, body, auth) {
|
|
|
27357
27357
|
headers: { "Content-Type": "application/json", ...auth ? { Authorization: auth } : {} },
|
|
27358
27358
|
body: JSON.stringify(body)
|
|
27359
27359
|
});
|
|
27360
|
-
const
|
|
27361
|
-
return { status: res.status, json:
|
|
27360
|
+
const text11 = await res.text();
|
|
27361
|
+
return { status: res.status, json: text11 ? JSON.parse(text11) : {} };
|
|
27362
27362
|
}
|
|
27363
27363
|
async function mintVisitor(clientId) {
|
|
27364
27364
|
const r3 = await postJson("/oauth2/token", { clientId, grantType: "anonymous" });
|
|
@@ -27628,13 +27628,13 @@ function recordWixTraffic(gw, app, adminUrl, ev) {
|
|
|
27628
27628
|
full.respBody = truncate(redactBodyString(full.respBody));
|
|
27629
27629
|
gw.traffic.push(full);
|
|
27630
27630
|
if (gw.traffic.length > TRAFFIC_CAP) gw.traffic.splice(0, gw.traffic.length - TRAFFIC_CAP);
|
|
27631
|
-
const
|
|
27631
|
+
const text11 = `event: wix.traffic
|
|
27632
27632
|
data: ${JSON.stringify(full)}
|
|
27633
27633
|
|
|
27634
27634
|
`;
|
|
27635
27635
|
for (const res of [...gw.clients]) {
|
|
27636
27636
|
try {
|
|
27637
|
-
res.write(
|
|
27637
|
+
res.write(text11);
|
|
27638
27638
|
} catch {
|
|
27639
27639
|
gw.clients.delete(res);
|
|
27640
27640
|
}
|
|
@@ -28137,13 +28137,13 @@ async function resolveWixAccounts(cookieHeader, fetchImpl = fetch, authorization
|
|
|
28137
28137
|
if (res.status === 428 || res.status === 401 || res.status === 403) {
|
|
28138
28138
|
return { ok: false, reason: "no_session" };
|
|
28139
28139
|
}
|
|
28140
|
-
const
|
|
28140
|
+
const text11 = await res.text();
|
|
28141
28141
|
if (!res.ok) {
|
|
28142
|
-
return { ok: false, reason: "upstream_failed", status: res.status, detail:
|
|
28142
|
+
return { ok: false, reason: "upstream_failed", status: res.status, detail: text11.slice(0, 200) };
|
|
28143
28143
|
}
|
|
28144
28144
|
let parsed;
|
|
28145
28145
|
try {
|
|
28146
|
-
parsed = JSON.parse(
|
|
28146
|
+
parsed = JSON.parse(text11);
|
|
28147
28147
|
} catch {
|
|
28148
28148
|
return { ok: false, reason: "upstream_failed", status: res.status, detail: "unparseable_body" };
|
|
28149
28149
|
}
|
|
@@ -28184,13 +28184,13 @@ async function resolveAccountCredential(auth, fetchImpl) {
|
|
|
28184
28184
|
if (res.status === 428 || res.status === 401 || res.status === 403 || res.status === 404) {
|
|
28185
28185
|
return { ok: false, reason: "no_session" };
|
|
28186
28186
|
}
|
|
28187
|
-
const
|
|
28187
|
+
const text11 = await res.text();
|
|
28188
28188
|
if (!res.ok) {
|
|
28189
|
-
return { ok: false, reason: "upstream_failed", status: res.status, detail:
|
|
28189
|
+
return { ok: false, reason: "upstream_failed", status: res.status, detail: text11.slice(0, 200) };
|
|
28190
28190
|
}
|
|
28191
28191
|
let parsed;
|
|
28192
28192
|
try {
|
|
28193
|
-
parsed = JSON.parse(
|
|
28193
|
+
parsed = JSON.parse(text11);
|
|
28194
28194
|
} catch {
|
|
28195
28195
|
return { ok: false, reason: "upstream_failed", status: res.status, detail: "unparseable_body" };
|
|
28196
28196
|
}
|
|
@@ -28842,9 +28842,9 @@ async function getAndroidPixelDims(serial) {
|
|
|
28842
28842
|
try {
|
|
28843
28843
|
const args = serial ? ["-s", serial, "shell", "wm", "size"] : ["shell", "wm", "size"];
|
|
28844
28844
|
const out2 = await runner.capture(ADB_BIN, args);
|
|
28845
|
-
const
|
|
28846
|
-
const override = /Override size:\s*(\d+)x(\d+)/.exec(
|
|
28847
|
-
const physical = /Physical size:\s*(\d+)x(\d+)/.exec(
|
|
28845
|
+
const text11 = out2.toString("utf8");
|
|
28846
|
+
const override = /Override size:\s*(\d+)x(\d+)/.exec(text11);
|
|
28847
|
+
const physical = /Physical size:\s*(\d+)x(\d+)/.exec(text11);
|
|
28848
28848
|
const m2 = override ?? physical;
|
|
28849
28849
|
if (!m2) throw new Error("could not parse wm size");
|
|
28850
28850
|
const dims = { width: parseInt(m2[1], 10), height: parseInt(m2[2], 10) };
|
|
@@ -30750,9 +30750,9 @@ function mdScan(src, linkStyle = "") {
|
|
|
30750
30750
|
}
|
|
30751
30751
|
return out2 + mdEsc(src.slice(last));
|
|
30752
30752
|
}
|
|
30753
|
-
function mdInline(
|
|
30753
|
+
function mdInline(text11, linkColor) {
|
|
30754
30754
|
const safe = typeof linkColor === "string" && /^[#a-zA-Z0-9(),.%\s-]+$/.test(linkColor) ? linkColor : "";
|
|
30755
|
-
return { __html: mdScan(
|
|
30755
|
+
return { __html: mdScan(text11, safe ? ` style="color:${safe}"` : "") };
|
|
30756
30756
|
}
|
|
30757
30757
|
function sevColor(ctx, sev) {
|
|
30758
30758
|
switch (sev) {
|
|
@@ -31441,7 +31441,7 @@ function PickerLeadingVisual({ option, ctx, size = 20 }) {
|
|
|
31441
31441
|
return null;
|
|
31442
31442
|
}
|
|
31443
31443
|
}
|
|
31444
|
-
function PickerFieldBox({ look, ctx, option, text:
|
|
31444
|
+
function PickerFieldBox({ look, ctx, option, text: text11, isPlaceholder, font, style }) {
|
|
31445
31445
|
const C2 = ctx.color;
|
|
31446
31446
|
return /* @__PURE__ */ jsxs2(
|
|
31447
31447
|
"div",
|
|
@@ -31465,7 +31465,7 @@ function PickerFieldBox({ look, ctx, option, text: text10, isPlaceholder, font,
|
|
|
31465
31465
|
},
|
|
31466
31466
|
children: [
|
|
31467
31467
|
!isPlaceholder && /* @__PURE__ */ jsx5(PickerLeadingVisual, { option, ctx }),
|
|
31468
|
-
/* @__PURE__ */ jsx5("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: isPlaceholder ? C2(look.placeholderColor, "#888") : C2("textPrimary", "#111") }, children:
|
|
31468
|
+
/* @__PURE__ */ jsx5("span", { style: { flex: 1, minWidth: 0, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", color: isPlaceholder ? C2(look.placeholderColor, "#888") : C2("textPrimary", "#111") }, children: text11 }),
|
|
31469
31469
|
look.chevronIcon && /* @__PURE__ */ jsx5("span", { "data-picker-chevron": "", style: { flex: "none", display: "inline-grid", placeItems: "center" }, children: iconSvg(look.chevronIcon, { size: 16, color: C2("textSecondary", "#636b78") }) })
|
|
31470
31470
|
]
|
|
31471
31471
|
}
|
|
@@ -31883,9 +31883,9 @@ function createRicosHostSession(o2) {
|
|
|
31883
31883
|
if (!state.ready || state.unavailable) return;
|
|
31884
31884
|
o2.send({ v: 1, type: "command", name, ...arg?.level ? { level: arg.level } : {}, ...arg?.value ? { value: arg.value } : {} });
|
|
31885
31885
|
},
|
|
31886
|
-
insertLink(url,
|
|
31886
|
+
insertLink(url, text11) {
|
|
31887
31887
|
if (!state.ready || state.unavailable || !isSafeEditorLink(url)) return false;
|
|
31888
|
-
o2.send({ v: 1, type: "insertLink", url: url.trim(), ...
|
|
31888
|
+
o2.send({ v: 1, type: "insertLink", url: url.trim(), ...text11 ? { text: text11 } : {} });
|
|
31889
31889
|
return true;
|
|
31890
31890
|
},
|
|
31891
31891
|
removeLink() {
|
|
@@ -34357,8 +34357,8 @@ var init_esm = __esm({
|
|
|
34357
34357
|
|
|
34358
34358
|
// ../../core/ts/src/rich-text-field.ts
|
|
34359
34359
|
function richTextHtmlToPlainText(html) {
|
|
34360
|
-
const
|
|
34361
|
-
return
|
|
34360
|
+
const text11 = decodeHTML(html.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, "").replace(/<li\b[^>]*>/gi, "\u2022 ").replace(/<br\s*\/?>|<\/(?:p|div|li|h[1-6]|blockquote|pre|tr)\s*>/gi, "\n").replace(/<[^>]*>/g, ""));
|
|
34361
|
+
return text11.replace(/\r\n?/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
34362
34362
|
}
|
|
34363
34363
|
function richTextPlainTextToHtml(value) {
|
|
34364
34364
|
if (value === "") return "";
|
|
@@ -34381,9 +34381,9 @@ function richTextEditedHtml(originalHtml, originalText, nextText) {
|
|
|
34381
34381
|
if (/<(script|style)\b/i.test(source)) return richTextPlainTextToHtml(nextText);
|
|
34382
34382
|
const spans = [];
|
|
34383
34383
|
let visible = "";
|
|
34384
|
-
const append = (
|
|
34385
|
-
visible +=
|
|
34386
|
-
for (let i2 = 0; i2 <
|
|
34384
|
+
const append = (text11, start, end, structural = false) => {
|
|
34385
|
+
visible += text11;
|
|
34386
|
+
for (let i2 = 0; i2 < text11.length; i2++) spans.push({ start, end, structural });
|
|
34387
34387
|
};
|
|
34388
34388
|
const token = /<[^>]*>|&(?:#\d+|#x[\da-f]+|[a-z][\da-z]+);?|[^<&]+/gi;
|
|
34389
34389
|
for (const match of source.matchAll(token)) {
|
|
@@ -34437,7 +34437,7 @@ function richTextEditedHtml(originalHtml, originalText, nextText) {
|
|
|
34437
34437
|
let edited = source;
|
|
34438
34438
|
for (const span of removed.slice().reverse()) edited = edited.slice(0, span.start) + edited.slice(span.end);
|
|
34439
34439
|
const insertionAfterDelete = insertionAt - removed.filter((span) => span.end <= insertionAt).reduce((n2, span) => n2 + span.end - span.start, 0);
|
|
34440
|
-
const escape3 = (
|
|
34440
|
+
const escape3 = (text11) => text11.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\"/g, """).replace(/'/g, "'").replace(/\n/g, "<br>");
|
|
34441
34441
|
const replacement = escape3(nextText.slice(prefix, newEnd));
|
|
34442
34442
|
return edited.slice(0, insertionAfterDelete) + replacement + edited.slice(insertionAfterDelete);
|
|
34443
34443
|
}
|
|
@@ -34542,13 +34542,13 @@ function NamedImage({ node, alt, env }) {
|
|
|
34542
34542
|
}
|
|
34543
34543
|
function Block({ b: b2, env, depth }) {
|
|
34544
34544
|
const { ctx } = env;
|
|
34545
|
-
const
|
|
34545
|
+
const text11 = ctx.color("textPrimary", "#13171e");
|
|
34546
34546
|
const secondary = ctx.color("textSecondary", "#5c6370");
|
|
34547
34547
|
const border = ctx.color("border", "#e5e5e5");
|
|
34548
34548
|
switch (b2.kind) {
|
|
34549
34549
|
case "paragraph":
|
|
34550
34550
|
return /* @__PURE__ */ jsx9("p", { ...tid(env, b2.id, b2.kind), style: {
|
|
34551
|
-
...textStyle(ctx, "body",
|
|
34551
|
+
...textStyle(ctx, "body", text11),
|
|
34552
34552
|
textAlign: b2.align,
|
|
34553
34553
|
paddingInlineStart: b2.indent ? Math.min(b2.indent, 8) * 16 : void 0,
|
|
34554
34554
|
minHeight: b2.spans.length ? void 0 : "1.5em"
|
|
@@ -34556,7 +34556,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34556
34556
|
case "heading":
|
|
34557
34557
|
return React9.createElement(
|
|
34558
34558
|
`h${b2.level}`,
|
|
34559
|
-
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1],
|
|
34559
|
+
{ ...tid(env, b2.id, b2.kind), style: textStyle(ctx, RICH_CONTENT_HEADING_TOKENS[b2.level - 1], text11) },
|
|
34560
34560
|
/* @__PURE__ */ jsx9(Spans, { spans: b2.spans, env })
|
|
34561
34561
|
);
|
|
34562
34562
|
case "list": {
|
|
@@ -34566,7 +34566,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34566
34566
|
{
|
|
34567
34567
|
...tid(env, b2.id, b2.kind),
|
|
34568
34568
|
start: b2.ordered ? b2.start : void 0,
|
|
34569
|
-
style: { ...textStyle(ctx, "body",
|
|
34569
|
+
style: { ...textStyle(ctx, "body", text11), paddingInlineStart: 24, listStyleType: b2.ordered ? "decimal" : depth % 2 ? "circle" : "disc" },
|
|
34570
34570
|
children: b2.items.map((item, i2) => /* @__PURE__ */ jsx9("li", { "data-component-id": `${env.componentId}/${item.id}`, id: `${env.componentId}/${item.id}`, style: { marginBottom: 6 }, children: /* @__PURE__ */ jsx9("div", { style: { display: "flex", flexDirection: "column", gap: 6 }, children: item.blocks.map((child, j2) => /* @__PURE__ */ jsx9(Block, { b: child, env, depth: depth + 1 }, `${j2}:${child.id}`)) }) }, `${i2}:${item.id}`))
|
|
34571
34571
|
}
|
|
34572
34572
|
);
|
|
@@ -34580,7 +34580,7 @@ function Block({ b: b2, env, depth }) {
|
|
|
34580
34580
|
overflowWrap: "anywhere",
|
|
34581
34581
|
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
|
|
34582
34582
|
fontSize: "0.9em",
|
|
34583
|
-
color:
|
|
34583
|
+
color: text11,
|
|
34584
34584
|
background: ctx.color("surfaceSecondary", "#f5f5f7"),
|
|
34585
34585
|
padding: 10,
|
|
34586
34586
|
borderRadius: 6
|
|
@@ -34599,11 +34599,11 @@ function Block({ b: b2, env, depth }) {
|
|
|
34599
34599
|
case "button":
|
|
34600
34600
|
return /* @__PURE__ */ jsx9(LinkButton, { label: b2.label, url: b2.url, env, testId: `${env.componentId}/${b2.id}` });
|
|
34601
34601
|
case "table":
|
|
34602
|
-
return /* @__PURE__ */ jsx9("table", { ...tid(env, b2.id, b2.kind), style: { width: "100%", borderCollapse: "collapse", ...textStyle(ctx, "body",
|
|
34602
|
+
return /* @__PURE__ */ jsx9("table", { ...tid(env, b2.id, b2.kind), style: { width: "100%", borderCollapse: "collapse", ...textStyle(ctx, "body", text11) }, children: /* @__PURE__ */ jsx9("tbody", { children: b2.rows.map((row, r3) => /* @__PURE__ */ jsx9("tr", { children: row.map((cell2, c2) => /* @__PURE__ */ jsx9("td", { style: { border: `1px solid ${border}`, padding: 6, whiteSpace: "pre-wrap", verticalAlign: "top" }, children: cell2 }, c2)) }, r3)) }) });
|
|
34603
34603
|
case "card": {
|
|
34604
34604
|
const title = richContentCardTitle(b2);
|
|
34605
34605
|
return /* @__PURE__ */ jsxs6("div", { ...tid(env, b2.id, b2.kind), role: "group", "aria-label": title, style: { border: `1px solid ${border}`, borderRadius: 8, padding: 12, display: "flex", flexDirection: "column", gap: 6 }, children: [
|
|
34606
|
-
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "bodyEmphasis",
|
|
34606
|
+
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "bodyEmphasis", text11), children: title }),
|
|
34607
34607
|
b2.url ? /* @__PURE__ */ jsxs6(Fragment3, { children: [
|
|
34608
34608
|
/* @__PURE__ */ jsx9("div", { style: textStyle(ctx, "caption", secondary), children: richContentHost(b2.url) }),
|
|
34609
34609
|
/* @__PURE__ */ jsx9(LinkButton, { label: RICH_CONTENT_OPEN_LABEL, url: b2.url, env, testId: `${env.componentId}/${b2.id}/open` })
|
|
@@ -34632,10 +34632,10 @@ var init_richContent = __esm({
|
|
|
34632
34632
|
|
|
34633
34633
|
// ../../core/web-renderer/src/pdfPageCount.ts
|
|
34634
34634
|
function pdfPageCount(bytes2) {
|
|
34635
|
-
const
|
|
34636
|
-
const rooted = pdfRootPageCount(
|
|
34635
|
+
const text11 = pdfObjectSyntax(new TextDecoder("latin1").decode(bytes2));
|
|
34636
|
+
const rooted = pdfRootPageCount(text11);
|
|
34637
34637
|
let scanned = null;
|
|
34638
|
-
for (const m2 of
|
|
34638
|
+
for (const m2 of text11.matchAll(/<<((?:(?!<<|>>)[\s\S])*)>>/g)) {
|
|
34639
34639
|
const dict = m2[1];
|
|
34640
34640
|
if (!/\/Type\s*\/Pages(?![A-Za-z])/.test(dict)) continue;
|
|
34641
34641
|
const c2 = /\/Count\s+(\d+)/.exec(dict);
|
|
@@ -34647,24 +34647,24 @@ function pdfPageCount(bytes2) {
|
|
|
34647
34647
|
if (rooted !== null && scanned !== null && rooted !== scanned) return null;
|
|
34648
34648
|
return count2 <= PDF_MAX_PLAUSIBLE_PAGES ? count2 : null;
|
|
34649
34649
|
}
|
|
34650
|
-
function pdfObjectSyntax(
|
|
34651
|
-
const out2 =
|
|
34650
|
+
function pdfObjectSyntax(text11) {
|
|
34651
|
+
const out2 = text11.split("");
|
|
34652
34652
|
const blank = (from, to2) => {
|
|
34653
34653
|
for (let k2 = from; k2 < to2; k2++) out2[k2] = " ";
|
|
34654
34654
|
};
|
|
34655
34655
|
let i2 = 0;
|
|
34656
|
-
while (i2 <
|
|
34657
|
-
const c2 =
|
|
34656
|
+
while (i2 < text11.length) {
|
|
34657
|
+
const c2 = text11[i2];
|
|
34658
34658
|
if (c2 === "%") {
|
|
34659
|
-
const eol =
|
|
34660
|
-
const end = eol < 0 ?
|
|
34659
|
+
const eol = text11.slice(i2).search(/[\r\n]/);
|
|
34660
|
+
const end = eol < 0 ? text11.length : i2 + eol;
|
|
34661
34661
|
blank(i2, end);
|
|
34662
34662
|
i2 = end;
|
|
34663
34663
|
} else if (c2 === "(") {
|
|
34664
34664
|
let depth = 0;
|
|
34665
34665
|
let j2 = i2;
|
|
34666
|
-
for (; j2 <
|
|
34667
|
-
const d2 =
|
|
34666
|
+
for (; j2 < text11.length; j2++) {
|
|
34667
|
+
const d2 = text11[j2];
|
|
34668
34668
|
if (d2 === "\\") {
|
|
34669
34669
|
j2++;
|
|
34670
34670
|
continue;
|
|
@@ -34674,21 +34674,21 @@ function pdfObjectSyntax(text10) {
|
|
|
34674
34674
|
}
|
|
34675
34675
|
blank(i2, j2 + 1);
|
|
34676
34676
|
i2 = j2 + 1;
|
|
34677
|
-
} else if (c2 === "<" &&
|
|
34678
|
-
const end =
|
|
34679
|
-
const stop = end < 0 ?
|
|
34677
|
+
} else if (c2 === "<" && text11[i2 + 1] !== "<") {
|
|
34678
|
+
const end = text11.indexOf(">", i2);
|
|
34679
|
+
const stop = end < 0 ? text11.length : end + 1;
|
|
34680
34680
|
blank(i2, stop);
|
|
34681
34681
|
i2 = stop;
|
|
34682
|
-
} else if (c2 === "<" &&
|
|
34682
|
+
} else if (c2 === "<" && text11[i2 + 1] === "<") {
|
|
34683
34683
|
i2 += 2;
|
|
34684
34684
|
} else if (
|
|
34685
34685
|
// The `stream` KEYWORD, not the tail of a name (`/my-stream`) or of `endstream`: preceded by
|
|
34686
34686
|
// whitespace or the `>>` that closes its dictionary, and followed by CRLF or LF (PDF 32000
|
|
34687
34687
|
// §7.3.8.1 — a CR alone is not allowed there).
|
|
34688
|
-
|
|
34688
|
+
text11.startsWith("stream", i2) && /[\s>]/.test(text11[i2 - 1] ?? "") && (text11[i2 + 6] === "\n" || text11.startsWith("\r\n", i2 + 6))
|
|
34689
34689
|
) {
|
|
34690
|
-
const end =
|
|
34691
|
-
const stop = end < 0 ?
|
|
34690
|
+
const end = text11.indexOf("endstream", i2 + 6);
|
|
34691
|
+
const stop = end < 0 ? text11.length : end;
|
|
34692
34692
|
blank(i2 + 6, stop);
|
|
34693
34693
|
i2 = stop + "endstream".length;
|
|
34694
34694
|
} else {
|
|
@@ -36126,19 +36126,19 @@ function getFilenameFromContentDispositionHeader(contentDisposition) {
|
|
|
36126
36126
|
if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
|
|
36127
36127
|
return value;
|
|
36128
36128
|
}
|
|
36129
|
-
return value.replaceAll(/=\?([\w-]*)\?([QB])\?((?:[^?]|\?(?!=))*)\?=/gi, function(matches, charset, encoding,
|
|
36129
|
+
return value.replaceAll(/=\?([\w-]*)\?([QB])\?((?:[^?]|\?(?!=))*)\?=/gi, function(matches, charset, encoding, text11) {
|
|
36130
36130
|
if (encoding === "q" || encoding === "Q") {
|
|
36131
|
-
|
|
36132
|
-
|
|
36131
|
+
text11 = text11.replaceAll("_", " ");
|
|
36132
|
+
text11 = text11.replaceAll(/=([0-9a-f]{2})/gi, function(match, hex2) {
|
|
36133
36133
|
return String.fromCharCode(parseInt(hex2, 16));
|
|
36134
36134
|
});
|
|
36135
|
-
return textdecode(charset,
|
|
36135
|
+
return textdecode(charset, text11);
|
|
36136
36136
|
}
|
|
36137
36137
|
try {
|
|
36138
|
-
|
|
36138
|
+
text11 = atob(text11);
|
|
36139
36139
|
} catch {
|
|
36140
36140
|
}
|
|
36141
|
-
return textdecode(charset,
|
|
36141
|
+
return textdecode(charset, text11);
|
|
36142
36142
|
});
|
|
36143
36143
|
}
|
|
36144
36144
|
return "";
|
|
@@ -37008,11 +37008,11 @@ var init_pdf = __esm({
|
|
|
37008
37008
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
37009
37009
|
var definePropertyModule = __webpack_require__3(4913);
|
|
37010
37010
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
37011
|
-
module.exports = DESCRIPTORS ? function(
|
|
37012
|
-
return definePropertyModule.f(
|
|
37013
|
-
} : function(
|
|
37014
|
-
|
|
37015
|
-
return
|
|
37011
|
+
module.exports = DESCRIPTORS ? function(object9, key3, value) {
|
|
37012
|
+
return definePropertyModule.f(object9, key3, createPropertyDescriptor(1, value));
|
|
37013
|
+
} : function(object9, key3, value) {
|
|
37014
|
+
object9[key3] = value;
|
|
37015
|
+
return object9;
|
|
37016
37016
|
};
|
|
37017
37017
|
},
|
|
37018
37018
|
/***/
|
|
@@ -37031,9 +37031,9 @@ var init_pdf = __esm({
|
|
|
37031
37031
|
var DESCRIPTORS = __webpack_require__3(3724);
|
|
37032
37032
|
var definePropertyModule = __webpack_require__3(4913);
|
|
37033
37033
|
var createPropertyDescriptor = __webpack_require__3(6980);
|
|
37034
|
-
module.exports = function(
|
|
37035
|
-
if (DESCRIPTORS) definePropertyModule.f(
|
|
37036
|
-
else
|
|
37034
|
+
module.exports = function(object9, key3, value) {
|
|
37035
|
+
if (DESCRIPTORS) definePropertyModule.f(object9, key3, createPropertyDescriptor(0, value));
|
|
37036
|
+
else object9[key3] = value;
|
|
37037
37037
|
};
|
|
37038
37038
|
},
|
|
37039
37039
|
/***/
|
|
@@ -37323,9 +37323,9 @@ var init_pdf = __esm({
|
|
|
37323
37323
|
6706(module, __unused_webpack_exports, __webpack_require__3) {
|
|
37324
37324
|
var uncurryThis = __webpack_require__3(9504);
|
|
37325
37325
|
var aCallable = __webpack_require__3(9306);
|
|
37326
|
-
module.exports = function(
|
|
37326
|
+
module.exports = function(object9, key3, method) {
|
|
37327
37327
|
try {
|
|
37328
|
-
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(
|
|
37328
|
+
return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object9, key3)[method]));
|
|
37329
37329
|
} catch (error) {
|
|
37330
37330
|
}
|
|
37331
37331
|
};
|
|
@@ -38293,13 +38293,13 @@ var init_pdf = __esm({
|
|
|
38293
38293
|
var $Object = Object;
|
|
38294
38294
|
var ObjectPrototype = $Object.prototype;
|
|
38295
38295
|
module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O2) {
|
|
38296
|
-
var
|
|
38297
|
-
if (hasOwn(
|
|
38298
|
-
var constructor =
|
|
38299
|
-
if (isCallable(constructor) &&
|
|
38296
|
+
var object9 = toObject(O2);
|
|
38297
|
+
if (hasOwn(object9, IE_PROTO)) return object9[IE_PROTO];
|
|
38298
|
+
var constructor = object9.constructor;
|
|
38299
|
+
if (isCallable(constructor) && object9 instanceof constructor) {
|
|
38300
38300
|
return constructor.prototype;
|
|
38301
38301
|
}
|
|
38302
|
-
return
|
|
38302
|
+
return object9 instanceof $Object ? ObjectPrototype : null;
|
|
38303
38303
|
};
|
|
38304
38304
|
},
|
|
38305
38305
|
/***/
|
|
@@ -38315,8 +38315,8 @@ var init_pdf = __esm({
|
|
|
38315
38315
|
var indexOf = __webpack_require__3(9617).indexOf;
|
|
38316
38316
|
var hiddenKeys = __webpack_require__3(421);
|
|
38317
38317
|
var push = uncurryThis([].push);
|
|
38318
|
-
module.exports = function(
|
|
38319
|
-
var O2 = toIndexedObject(
|
|
38318
|
+
module.exports = function(object9, names2) {
|
|
38319
|
+
var O2 = toIndexedObject(object9);
|
|
38320
38320
|
var i2 = 0;
|
|
38321
38321
|
var result = [];
|
|
38322
38322
|
var key3;
|
|
@@ -39759,13 +39759,13 @@ var init_pdf = __esm({
|
|
|
39759
39759
|
}
|
|
39760
39760
|
return call(reviver, holder, name, val, context);
|
|
39761
39761
|
};
|
|
39762
|
-
var internalizeProperty = function(
|
|
39762
|
+
var internalizeProperty = function(object9, key3, value) {
|
|
39763
39763
|
if (DESCRIPTORS) {
|
|
39764
|
-
var descriptor = getOwnPropertyDescriptor(
|
|
39764
|
+
var descriptor = getOwnPropertyDescriptor(object9, key3);
|
|
39765
39765
|
if (descriptor && !descriptor.configurable) return;
|
|
39766
39766
|
}
|
|
39767
|
-
if (value === void 0) delete
|
|
39768
|
-
else createProperty(
|
|
39767
|
+
if (value === void 0) delete object9[key3];
|
|
39768
|
+
else createProperty(object9, key3, value);
|
|
39769
39769
|
};
|
|
39770
39770
|
var Node2 = function(value, end, source, nodes) {
|
|
39771
39771
|
this.value = value;
|
|
@@ -39810,7 +39810,7 @@ var init_pdf = __esm({
|
|
|
39810
39810
|
var source = this.source;
|
|
39811
39811
|
var i2 = this.index + 1;
|
|
39812
39812
|
var expectKeypair = false;
|
|
39813
|
-
var
|
|
39813
|
+
var object9 = {};
|
|
39814
39814
|
var nodes = {};
|
|
39815
39815
|
var closed = false;
|
|
39816
39816
|
while (i2 < source.length) {
|
|
@@ -39827,7 +39827,7 @@ var init_pdf = __esm({
|
|
|
39827
39827
|
i2 = this.skip(IS_WHITESPACE, i2);
|
|
39828
39828
|
result = this.fork(i2).parse();
|
|
39829
39829
|
createProperty(nodes, key3, result);
|
|
39830
|
-
createProperty(
|
|
39830
|
+
createProperty(object9, key3, result.value);
|
|
39831
39831
|
i2 = this.until([",", "}"], result.end);
|
|
39832
39832
|
var chr = at2(source, i2);
|
|
39833
39833
|
if (chr === ",") {
|
|
@@ -39840,7 +39840,7 @@ var init_pdf = __esm({
|
|
|
39840
39840
|
}
|
|
39841
39841
|
}
|
|
39842
39842
|
if (!closed) throw new SyntaxError2("Unterminated object at: " + i2);
|
|
39843
|
-
return this.node(OBJECT,
|
|
39843
|
+
return this.node(OBJECT, object9, this.index, i2, nodes);
|
|
39844
39844
|
},
|
|
39845
39845
|
array: function() {
|
|
39846
39846
|
var source = this.source;
|
|
@@ -39930,8 +39930,8 @@ var init_pdf = __esm({
|
|
|
39930
39930
|
return 1 / nativeParse("-0 ") !== -Infinity;
|
|
39931
39931
|
});
|
|
39932
39932
|
$2({ target: "JSON", stat: true, forced: NO_SOURCE_SUPPORT }, {
|
|
39933
|
-
parse: function parse4(
|
|
39934
|
-
return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(
|
|
39933
|
+
parse: function parse4(text11, reviver) {
|
|
39934
|
+
return PROPER_BASE_PARSE && !isCallable(reviver) ? nativeParse(text11) : $parse(text11, reviver);
|
|
39935
39935
|
}
|
|
39936
39936
|
});
|
|
39937
39937
|
},
|
|
@@ -40069,7 +40069,7 @@ var init_pdf = __esm({
|
|
|
40069
40069
|
return ordered;
|
|
40070
40070
|
};
|
|
40071
40071
|
if ($stringify) $2({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE || !NATIVE_RAW_JSON }, {
|
|
40072
|
-
stringify: function stringify(
|
|
40072
|
+
stringify: function stringify(text11, replacer, space) {
|
|
40073
40073
|
var replacerFunction = isCallable(replacer) ? replacer : void 0;
|
|
40074
40074
|
var propertyList = replacerFunction ? void 0 : getPropertyList(replacer);
|
|
40075
40075
|
var keyPrefix = propertyList && getKeyPrefix(propertyList);
|
|
@@ -40079,7 +40079,7 @@ var init_pdf = __esm({
|
|
|
40079
40079
|
var currentOrdered;
|
|
40080
40080
|
var marked = false;
|
|
40081
40081
|
var root = true;
|
|
40082
|
-
var json8 = stringifyWithProperSymbolsConversion(
|
|
40082
|
+
var json8 = stringifyWithProperSymbolsConversion(text11, function(key3, value) {
|
|
40083
40083
|
key3 = $String(key3);
|
|
40084
40084
|
if (propertyList) {
|
|
40085
40085
|
if (key3 === END_MARK) {
|
|
@@ -43151,7 +43151,7 @@ var init_pdf = __esm({
|
|
|
43151
43151
|
focusNode,
|
|
43152
43152
|
focusOffset
|
|
43153
43153
|
} = selection;
|
|
43154
|
-
const
|
|
43154
|
+
const text11 = selection.toString();
|
|
43155
43155
|
const anchorElement = this.#getAnchorElementForSelection(selection);
|
|
43156
43156
|
const textLayer = anchorElement.closest(".textLayer");
|
|
43157
43157
|
const boxes = this.getSelectionBoxes(textLayer);
|
|
@@ -43172,7 +43172,7 @@ var init_pdf = __esm({
|
|
|
43172
43172
|
anchorOffset,
|
|
43173
43173
|
focusNode,
|
|
43174
43174
|
focusOffset,
|
|
43175
|
-
text:
|
|
43175
|
+
text: text11
|
|
43176
43176
|
});
|
|
43177
43177
|
if (isNoneMode) {
|
|
43178
43178
|
this.showAllEditors("highlight", true, true);
|
|
@@ -44878,32 +44878,32 @@ var init_pdf = __esm({
|
|
|
44878
44878
|
deleted: this.isDeleted()
|
|
44879
44879
|
};
|
|
44880
44880
|
}
|
|
44881
|
-
set data(
|
|
44882
|
-
if (
|
|
44881
|
+
set data(text11) {
|
|
44882
|
+
if (text11 !== this.#text) {
|
|
44883
44883
|
this.#richText = null;
|
|
44884
44884
|
}
|
|
44885
|
-
if (
|
|
44885
|
+
if (text11 === null) {
|
|
44886
44886
|
this.#text = "";
|
|
44887
44887
|
this.#deleted = true;
|
|
44888
44888
|
return;
|
|
44889
44889
|
}
|
|
44890
|
-
this.#text =
|
|
44890
|
+
this.#text = text11;
|
|
44891
44891
|
this.#date = /* @__PURE__ */ new Date();
|
|
44892
44892
|
this.#deleted = false;
|
|
44893
44893
|
}
|
|
44894
44894
|
restoreData({
|
|
44895
|
-
text:
|
|
44895
|
+
text: text11,
|
|
44896
44896
|
richText,
|
|
44897
44897
|
date
|
|
44898
44898
|
}) {
|
|
44899
|
-
this.#text =
|
|
44899
|
+
this.#text = text11;
|
|
44900
44900
|
this.#richText = richText;
|
|
44901
44901
|
this.#date = date;
|
|
44902
44902
|
this.#deleted = false;
|
|
44903
44903
|
}
|
|
44904
|
-
setInitialText(
|
|
44905
|
-
this.#initialText =
|
|
44906
|
-
this.data =
|
|
44904
|
+
setInitialText(text11, richText = null) {
|
|
44905
|
+
this.#initialText = text11;
|
|
44906
|
+
this.data = text11;
|
|
44907
44907
|
this.#date = null;
|
|
44908
44908
|
this.#richText = richText;
|
|
44909
44909
|
}
|
|
@@ -45954,8 +45954,8 @@ var init_pdf = __esm({
|
|
|
45954
45954
|
get guessedAltText() {
|
|
45955
45955
|
return this.#altText?.guessedText;
|
|
45956
45956
|
}
|
|
45957
|
-
async setGuessedAltText(
|
|
45958
|
-
await this.#altText?.setGuessedText(
|
|
45957
|
+
async setGuessedAltText(text11) {
|
|
45958
|
+
await this.#altText?.setGuessedText(text11);
|
|
45959
45959
|
}
|
|
45960
45960
|
serializeAltText(isForCopying) {
|
|
45961
45961
|
return this.#altText?.serialize(isForCopying);
|
|
@@ -46002,13 +46002,13 @@ var init_pdf = __esm({
|
|
|
46002
46002
|
const {
|
|
46003
46003
|
data: {
|
|
46004
46004
|
richText,
|
|
46005
|
-
text:
|
|
46005
|
+
text: text11,
|
|
46006
46006
|
date,
|
|
46007
46007
|
deleted
|
|
46008
46008
|
}
|
|
46009
46009
|
} = this.#comment;
|
|
46010
46010
|
return {
|
|
46011
|
-
text:
|
|
46011
|
+
text: text11,
|
|
46012
46012
|
richText,
|
|
46013
46013
|
date,
|
|
46014
46014
|
deleted,
|
|
@@ -56802,13 +56802,13 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
56802
56802
|
} = this;
|
|
56803
56803
|
return this.annotationStorage.getRawValue(`${AnnotationEditorPrefix}${data.id}`)?.popup?.contents || data.contentsObj?.str || "";
|
|
56804
56804
|
}
|
|
56805
|
-
set commentText(
|
|
56805
|
+
set commentText(text11) {
|
|
56806
56806
|
const {
|
|
56807
56807
|
data
|
|
56808
56808
|
} = this;
|
|
56809
56809
|
const popup = {
|
|
56810
|
-
deleted: !
|
|
56811
|
-
contents:
|
|
56810
|
+
deleted: !text11,
|
|
56811
|
+
contents: text11 || ""
|
|
56812
56812
|
};
|
|
56813
56813
|
if (!this.annotationStorage.updateEditor(data.id, {
|
|
56814
56814
|
popup
|
|
@@ -56822,7 +56822,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
56822
56822
|
modificationDate: /* @__PURE__ */ new Date()
|
|
56823
56823
|
});
|
|
56824
56824
|
}
|
|
56825
|
-
if (!
|
|
56825
|
+
if (!text11) {
|
|
56826
56826
|
this.removePopup();
|
|
56827
56827
|
}
|
|
56828
56828
|
}
|
|
@@ -57374,9 +57374,9 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
57374
57374
|
get commentText() {
|
|
57375
57375
|
return this.editor.comment.text;
|
|
57376
57376
|
}
|
|
57377
|
-
set commentText(
|
|
57378
|
-
this.editor.comment =
|
|
57379
|
-
if (!
|
|
57377
|
+
set commentText(text11) {
|
|
57378
|
+
this.editor.comment = text11;
|
|
57379
|
+
if (!text11) {
|
|
57380
57380
|
this.removePopup();
|
|
57381
57381
|
}
|
|
57382
57382
|
}
|
|
@@ -58834,11 +58834,11 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58834
58834
|
this.#commentText ||= this.#firstElement.commentText;
|
|
58835
58835
|
return this.#commentText;
|
|
58836
58836
|
}
|
|
58837
|
-
set comment(
|
|
58838
|
-
if (
|
|
58837
|
+
set comment(text11) {
|
|
58838
|
+
if (text11 === this.comment) {
|
|
58839
58839
|
return;
|
|
58840
58840
|
}
|
|
58841
|
-
this.#firstElement.commentText = this.#commentText =
|
|
58841
|
+
this.#firstElement.commentText = this.#commentText = text11;
|
|
58842
58842
|
}
|
|
58843
58843
|
focus() {
|
|
58844
58844
|
this.#firstElement.container?.focus();
|
|
@@ -58955,10 +58955,10 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58955
58955
|
get #fontColor() {
|
|
58956
58956
|
return this.#html?.attributes?.style?.color || null;
|
|
58957
58957
|
}
|
|
58958
|
-
#makePopupContent(
|
|
58958
|
+
#makePopupContent(text11) {
|
|
58959
58959
|
const popupLines = [];
|
|
58960
58960
|
const popupContent = {
|
|
58961
|
-
str:
|
|
58961
|
+
str: text11,
|
|
58962
58962
|
html: {
|
|
58963
58963
|
name: "div",
|
|
58964
58964
|
attributes: {
|
|
@@ -58976,7 +58976,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
58976
58976
|
fontSize: this.#fontSize ? `calc(${this.#fontSize}px * var(--total-scale-factor))` : ""
|
|
58977
58977
|
}
|
|
58978
58978
|
};
|
|
58979
|
-
for (const line of
|
|
58979
|
+
for (const line of text11.split("\n")) {
|
|
58980
58980
|
popupLines.push({
|
|
58981
58981
|
name: "span",
|
|
58982
58982
|
value: line,
|
|
@@ -60485,9 +60485,9 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
60485
60485
|
if (savedText === newText) {
|
|
60486
60486
|
return;
|
|
60487
60487
|
}
|
|
60488
|
-
const setText = (
|
|
60489
|
-
this.#content =
|
|
60490
|
-
if (!
|
|
60488
|
+
const setText = (text11) => {
|
|
60489
|
+
this.#content = text11;
|
|
60490
|
+
if (!text11) {
|
|
60491
60491
|
this.remove();
|
|
60492
60492
|
return;
|
|
60493
60493
|
}
|
|
@@ -64302,7 +64302,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64302
64302
|
const uint8Buf = this.#toUint8(grayImage);
|
|
64303
64303
|
return [uint8Buf, newWidth, newHeight];
|
|
64304
64304
|
}
|
|
64305
|
-
static extractContoursFromText(
|
|
64305
|
+
static extractContoursFromText(text11, {
|
|
64306
64306
|
fontFamily,
|
|
64307
64307
|
fontStyle,
|
|
64308
64308
|
fontWeight
|
|
@@ -64321,7 +64321,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64321
64321
|
fontBoundingBoxAscent,
|
|
64322
64322
|
fontBoundingBoxDescent,
|
|
64323
64323
|
width
|
|
64324
|
-
} = ctx.measureText(
|
|
64324
|
+
} = ctx.measureText(text11);
|
|
64325
64325
|
const SCALE = 1.5;
|
|
64326
64326
|
const canvasWidth = Math.ceil(Math.max(Math.abs(actualBoundingBoxLeft) + Math.abs(actualBoundingBoxRight) || 0, width) * SCALE);
|
|
64327
64327
|
const canvasHeight = Math.ceil(Math.max(Math.abs(actualBoundingBoxAscent) + Math.abs(actualBoundingBoxDescent) || fontSize, Math.abs(fontBoundingBoxAscent) + Math.abs(fontBoundingBoxDescent) || fontSize) * SCALE);
|
|
@@ -64335,7 +64335,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64335
64335
|
ctx.fillStyle = "white";
|
|
64336
64336
|
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
64337
64337
|
ctx.fillStyle = "black";
|
|
64338
|
-
ctx.fillText(
|
|
64338
|
+
ctx.fillText(text11, canvasWidth * (SCALE - 1) / 2, canvasHeight * (3 - SCALE) / 2);
|
|
64339
64339
|
const uint8Buf = this.#toUint8(ctx.getImageData(0, 0, canvasWidth, canvasHeight).data);
|
|
64340
64340
|
const histogram = this.#getHistogram(uint8Buf);
|
|
64341
64341
|
const threshold = this.#guessThreshold(histogram);
|
|
@@ -64837,7 +64837,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64837
64837
|
} = this.parent.viewport;
|
|
64838
64838
|
return SignatureExtractor.process(bitmap, pageWidth, pageHeight, rotation, _SignatureEditor._INNER_MARGIN);
|
|
64839
64839
|
}
|
|
64840
|
-
getFromText(
|
|
64840
|
+
getFromText(text11, fontInfo) {
|
|
64841
64841
|
const {
|
|
64842
64842
|
rawDims: {
|
|
64843
64843
|
pageWidth,
|
|
@@ -64845,7 +64845,7 @@ fn fs_main(in : VertexOutput) -> @location(0) vec4<f32> {
|
|
|
64845
64845
|
},
|
|
64846
64846
|
rotation
|
|
64847
64847
|
} = this.parent.viewport;
|
|
64848
|
-
return SignatureExtractor.extractContoursFromText(
|
|
64848
|
+
return SignatureExtractor.extractContoursFromText(text11, fontInfo, pageWidth, pageHeight, rotation, _SignatureEditor._INNER_MARGIN);
|
|
64849
64849
|
}
|
|
64850
64850
|
getDrawnSignature(curves) {
|
|
64851
64851
|
const {
|
|
@@ -116188,11 +116188,11 @@ function pluralArgNames(pattern) {
|
|
|
116188
116188
|
return out2;
|
|
116189
116189
|
}
|
|
116190
116190
|
function formatInterpolated(pattern, params, resolvedByKey, ctx) {
|
|
116191
|
-
const
|
|
116191
|
+
const numeric2 = pluralArgNames(pattern);
|
|
116192
116192
|
const args = {};
|
|
116193
116193
|
for (const [k2, raw] of Object.entries(params)) {
|
|
116194
116194
|
const v2 = k2 in resolvedByKey ? resolvedByKey[k2] : raw;
|
|
116195
|
-
if (!
|
|
116195
|
+
if (!numeric2.has(k2)) {
|
|
116196
116196
|
args[k2] = v2;
|
|
116197
116197
|
continue;
|
|
116198
116198
|
}
|
|
@@ -116728,9 +116728,9 @@ function withExtras(name, render) {
|
|
|
116728
116728
|
Wrapped.displayName = name;
|
|
116729
116729
|
return Wrapped;
|
|
116730
116730
|
}
|
|
116731
|
-
function rememberReveal(
|
|
116731
|
+
function rememberReveal(text11, n2) {
|
|
116732
116732
|
if (revealProgress.size > 500) revealProgress.clear();
|
|
116733
|
-
revealProgress.set(
|
|
116733
|
+
revealProgress.set(text11, n2);
|
|
116734
116734
|
}
|
|
116735
116735
|
function revealHtml(html, shown2, fade) {
|
|
116736
116736
|
let w2 = 0;
|
|
@@ -117574,8 +117574,8 @@ function applyA11ySemantics(node, ctx, extra) {
|
|
|
117574
117574
|
extra["aria-live"] = str11(announce.politeness) === "assertive" ? "assertive" : "polite";
|
|
117575
117575
|
extra["aria-atomic"] = "true";
|
|
117576
117576
|
extra["aria-relevant"] = trigger === "on_appear" ? "additions" : trigger === "both" ? "additions text" : "text";
|
|
117577
|
-
const
|
|
117578
|
-
if (
|
|
117577
|
+
const text11 = str11(announce.text);
|
|
117578
|
+
if (text11 && extra["aria-label"] == null) extra["aria-label"] = text11;
|
|
117579
117579
|
}
|
|
117580
117580
|
}
|
|
117581
117581
|
return hint;
|
|
@@ -119901,13 +119901,13 @@ var init_renderNode = __esm({
|
|
|
119901
119901
|
const C2 = ctx.color;
|
|
119902
119902
|
const isBoundText = typeof props.textPath === "string" && isBinding(props.textPath);
|
|
119903
119903
|
const bound = useResolvedScalar(isBoundText ? props.textPath : void 0, ctx);
|
|
119904
|
-
const
|
|
119904
|
+
const text11 = isBoundText ? typeof bound === "string" || typeof bound === "number" ? String(bound) : "" : literalErrorText;
|
|
119905
119905
|
if (props.visible === false) return null;
|
|
119906
|
-
if (isBoundText && !
|
|
119906
|
+
if (isBoundText && !text11) return null;
|
|
119907
119907
|
const c2 = (props.severity ?? "error") === "warning" ? C2("warning", "#E89F00") : C2("danger", "#E62214");
|
|
119908
119908
|
return /* @__PURE__ */ jsxs8("div", { role: "alert", style: { display: "flex", gap: 6, alignItems: "center", color: c2, fontSize: pxToRem(13), fontFamily: bodyFont(ctx), ...wrap }, children: [
|
|
119909
119909
|
/* @__PURE__ */ jsx11("span", { "aria-hidden": "true", children: "\u26A0" }),
|
|
119910
|
-
|
|
119910
|
+
text11
|
|
119911
119911
|
] });
|
|
119912
119912
|
});
|
|
119913
119913
|
FormView = withExtras("FormView", ({ props, ctx, wrap }) => {
|
|
@@ -120533,7 +120533,7 @@ var init_renderNode = __esm({
|
|
|
120533
120533
|
const data = base + pdfOpenFragment(sourceHash, { page, zoom: zoomable ? view.zoom : null, fitWidth: !zoomable });
|
|
120534
120534
|
const label3 = typeof props.title === "string" && props.title ? props.title : "PDF document";
|
|
120535
120535
|
const documentStyle = showPageControls || zoomable || allowShare ? { display: "block", width: "100%", flex: "1 1 auto", minHeight: ph ? 0 : 280, border: "none" } : frame;
|
|
120536
|
-
const
|
|
120536
|
+
const object9 = typeof window === "undefined" ? /* @__PURE__ */ jsx11("object", { "data-himalaya-pdf": "static-fallback", data, type: "application/pdf", "aria-label": label3, style: documentStyle }) : /* @__PURE__ */ jsx11(React11.Suspense, { fallback: /* @__PURE__ */ jsx11("div", { "data-himalaya-pdf": "loading", role: "img", "aria-label": "loading document", "aria-busy": "true", style: documentStyle }), children: /* @__PURE__ */ jsx11(
|
|
120537
120537
|
PdfDocumentCanvas,
|
|
120538
120538
|
{
|
|
120539
120539
|
src: loadSrc ?? src,
|
|
@@ -120547,7 +120547,7 @@ var init_renderNode = __esm({
|
|
|
120547
120547
|
style: documentStyle
|
|
120548
120548
|
}
|
|
120549
120549
|
) });
|
|
120550
|
-
if (!showPageControls && !zoomable && !allowShare) return
|
|
120550
|
+
if (!showPageControls && !zoomable && !allowShare) return object9;
|
|
120551
120551
|
const C2 = ctx.color;
|
|
120552
120552
|
const go2 = (p2) => setNav({ from: rawUrl, page: Math.max(1, pageCount != null ? Math.min(p2, pageCount) : p2), zoom: view.zoom });
|
|
120553
120553
|
const zoomBy = (d2) => setNav({ from: rawUrl, page: view.page, zoom: pdfZoomStep(view.zoom ?? sourceZoomPercent(sourceHash) ?? null, d2) });
|
|
@@ -120565,7 +120565,7 @@ var init_renderNode = __esm({
|
|
|
120565
120565
|
const downloadHref = plan?.mode === "retype" ? base : directDoc?.blobUrl ?? null;
|
|
120566
120566
|
const openHref = base + pdfOpenFragment(sourceHash, { page: shownPage, zoom: zoomable ? view.zoom : null, viewerChrome: true });
|
|
120567
120567
|
return /* @__PURE__ */ jsxs8("div", { "data-himalaya-pdf": "reader", style: { ...frame, display: "flex", flexDirection: "column", background: C2("surfaceTertiary", "#f4f4f4") }, children: [
|
|
120568
|
-
|
|
120568
|
+
object9,
|
|
120569
120569
|
/* @__PURE__ */ jsxs8(
|
|
120570
120570
|
"div",
|
|
120571
120571
|
{
|
|
@@ -120674,8 +120674,8 @@ var init_renderNode = __esm({
|
|
|
120674
120674
|
const look = pickerFieldLook(props.field, ctx);
|
|
120675
120675
|
const shownSel = ctx.onAction ? sel : ctx.empty ? null : selectedId;
|
|
120676
120676
|
const picked = opts.find((o2) => o2 != null && String(o2.id) === String(shownSel ?? ""));
|
|
120677
|
-
const
|
|
120678
|
-
const box = /* @__PURE__ */ jsx11(PickerFieldBox, { look, ctx, option: picked, text:
|
|
120677
|
+
const text11 = picked ? labelOf(picked) : String(placeholderText || "Select");
|
|
120678
|
+
const box = /* @__PURE__ */ jsx11(PickerFieldBox, { look, ctx, option: picked, text: text11, isPlaceholder: !picked, font: bodyFont(ctx) });
|
|
120679
120679
|
if (!ctx.onAction) return /* @__PURE__ */ jsx11("div", { style: { width: "100%", ...wrap }, children: box });
|
|
120680
120680
|
return /* @__PURE__ */ jsxs8("div", { ...{ [A11Y_PART]: "root" }, "data-hm-picker-focus": "", style: { position: "relative", width: "100%", ...wrap }, children: [
|
|
120681
120681
|
box,
|
|
@@ -120694,7 +120694,7 @@ var init_renderNode = __esm({
|
|
|
120694
120694
|
...pickerA11yProps,
|
|
120695
120695
|
style: { position: "absolute", inset: 0, width: "100%", height: "100%", opacity: 0, cursor: "pointer", margin: 0, border: 0, fontSize: pxToRem(15) },
|
|
120696
120696
|
children: [
|
|
120697
|
-
!picked && /* @__PURE__ */ jsx11("option", { value: "", disabled: true, children:
|
|
120697
|
+
!picked && /* @__PURE__ */ jsx11("option", { value: "", disabled: true, children: text11 }),
|
|
120698
120698
|
opts.map((o2, i2) => /* @__PURE__ */ jsx11("option", { value: o2?.id, disabled: !pickerOptionPickable(o2), children: labelOf(o2) }, o2?.id ?? i2))
|
|
120699
120699
|
]
|
|
120700
120700
|
}
|
|
@@ -121144,37 +121144,37 @@ var init_renderNode = __esm({
|
|
|
121144
121144
|
REVEAL_BUFFER = 12;
|
|
121145
121145
|
revealProgress = /* @__PURE__ */ new Map();
|
|
121146
121146
|
countWords = (s2) => s2.split(/\s+/).filter((t2) => t2 !== "").length;
|
|
121147
|
-
RevealText = ({ text:
|
|
121148
|
-
const tokens2 = React11.useMemo(() =>
|
|
121147
|
+
RevealText = ({ text: text11, reduce, markdownHtml }) => {
|
|
121148
|
+
const tokens2 = React11.useMemo(() => text11.split(/(\s+)/).filter((t2) => t2 !== ""), [text11]);
|
|
121149
121149
|
const total = React11.useMemo(
|
|
121150
|
-
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(
|
|
121151
|
-
[
|
|
121150
|
+
() => markdownHtml != null ? revealHtml(markdownHtml, 0, void 0).total : countWords(text11),
|
|
121151
|
+
[text11, markdownHtml]
|
|
121152
121152
|
);
|
|
121153
121153
|
const [shown2, setShown] = React11.useState(total);
|
|
121154
121154
|
const prevRef = React11.useRef(null);
|
|
121155
121155
|
useIsomorphicLayoutEffect(() => {
|
|
121156
121156
|
const prev = prevRef.current;
|
|
121157
|
-
prevRef.current =
|
|
121157
|
+
prevRef.current = text11;
|
|
121158
121158
|
if (reduce) {
|
|
121159
|
-
rememberReveal(
|
|
121159
|
+
rememberReveal(text11, total);
|
|
121160
121160
|
setShown(total);
|
|
121161
121161
|
return;
|
|
121162
121162
|
}
|
|
121163
|
-
let start = revealProgress.get(
|
|
121164
|
-
if (start == null) start = prev != null &&
|
|
121163
|
+
let start = revealProgress.get(text11);
|
|
121164
|
+
if (start == null) start = prev != null && text11.startsWith(prev) ? revealProgress.get(prev) ?? countWords(prev) : 0;
|
|
121165
121165
|
start = Math.max(start, total - REVEAL_BUFFER);
|
|
121166
|
-
rememberReveal(
|
|
121166
|
+
rememberReveal(text11, start);
|
|
121167
121167
|
setShown(start);
|
|
121168
121168
|
if (start >= total) return;
|
|
121169
121169
|
let n2 = start;
|
|
121170
121170
|
const id = setInterval(() => {
|
|
121171
121171
|
n2 += 1;
|
|
121172
|
-
rememberReveal(
|
|
121172
|
+
rememberReveal(text11, n2);
|
|
121173
121173
|
setShown(n2);
|
|
121174
121174
|
if (n2 >= total) clearInterval(id);
|
|
121175
121175
|
}, REVEAL_RELEASE_MS);
|
|
121176
121176
|
return () => clearInterval(id);
|
|
121177
|
-
}, [
|
|
121177
|
+
}, [text11, reduce, total]);
|
|
121178
121178
|
const fade = reduce ? void 0 : `opacity ${REVEAL_FADE_MS}ms ease-out`;
|
|
121179
121179
|
if (markdownHtml != null) {
|
|
121180
121180
|
return /* @__PURE__ */ jsx11(
|
|
@@ -122177,7 +122177,7 @@ var init_renderNode = __esm({
|
|
|
122177
122177
|
TooltipNode = withExtras("TooltipNode", ({ props, ctx, wrap }) => {
|
|
122178
122178
|
const C2 = ctx.color;
|
|
122179
122179
|
const title = useBoundString(props.title, ctx);
|
|
122180
|
-
const
|
|
122180
|
+
const text11 = useBoundString(props.text, ctx);
|
|
122181
122181
|
const rich = title !== "";
|
|
122182
122182
|
const trigger = resolveTooltipTrigger(props.trigger, "pointer");
|
|
122183
122183
|
const edge = resolveOverlayEdge("Tooltip", props.edge);
|
|
@@ -122267,7 +122267,7 @@ var init_renderNode = __esm({
|
|
|
122267
122267
|
// A held press would otherwise open the browser's own context menu over the bubble.
|
|
122268
122268
|
onContextMenu: (e2) => e2.preventDefault()
|
|
122269
122269
|
};
|
|
122270
|
-
const hint = [title,
|
|
122270
|
+
const hint = [title, text11].filter((s2) => s2 !== "").join(". ");
|
|
122271
122271
|
const anchor = props.anchor ? renderNode(props.anchor, ctx) : null;
|
|
122272
122272
|
const wrapperHintId = `hm-tip-hint${React11.useId()}`;
|
|
122273
122273
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -122300,7 +122300,7 @@ var init_renderNode = __esm({
|
|
|
122300
122300
|
] }) }),
|
|
122301
122301
|
open && /* @__PURE__ */ jsxs8("div", { ref: bubbleRef, role: "tooltip", "data-hm-tooltip-edge": placed, style: { position: "absolute", zIndex: 45, maxWidth: Math.min(240, placement.maxWidth), overflowWrap: placement.maxWidth < 240 ? "anywhere" : void 0, width: "max-content", background: C2("textPrimary", "#13171e"), color: C2("textOnAccent", "#fff"), borderRadius: 8, padding: rich ? "10px 12px" : "6px 10px", fontFamily: bodyFont(ctx), fontSize: pxToRem(13), lineHeight: 1.35, boxShadow: "0 4px 14px rgba(0,0,0,.18)", ...overlayEdgeStyle(placed, TOOLTIP_GAP), translate: `${placement.x}px ${placement.y}px` }, children: [
|
|
122302
122302
|
rich && /* @__PURE__ */ jsx11("div", { style: { fontWeight: 700, marginBottom: 3 }, children: title }),
|
|
122303
|
-
|
|
122303
|
+
text11
|
|
122304
122304
|
] })
|
|
122305
122305
|
] });
|
|
122306
122306
|
});
|
|
@@ -124894,8 +124894,8 @@ function buildRenderTree(node, path2 = "$", provider = null, itemScope = void 0,
|
|
|
124894
124894
|
const asText3 = VALUE_PATH_TEXT.get(type);
|
|
124895
124895
|
if (typeof valuePath === "string" && asText3 && (valuePath.startsWith("$service:") || /^\$item\.[^.]/.test(valuePath))) {
|
|
124896
124896
|
const r3 = resolveTreeScalar(valuePath, provider, itemScope);
|
|
124897
|
-
const
|
|
124898
|
-
if (
|
|
124897
|
+
const text11 = asText3(r3, props);
|
|
124898
|
+
if (text11 !== void 0) values.value = text11;
|
|
124899
124899
|
else if (r3 !== void 0 && r3 !== null) {
|
|
124900
124900
|
delete values.value;
|
|
124901
124901
|
}
|
|
@@ -126844,11 +126844,11 @@ async function handleOwnerChatRequest(req, res) {
|
|
|
126844
126844
|
return sendJson(res, 400, { error: "invalid_json" }, cors);
|
|
126845
126845
|
}
|
|
126846
126846
|
const chatroomId = (parsed.chatroomId ?? "").trim();
|
|
126847
|
-
const
|
|
126848
|
-
if (!chatroomId || !
|
|
126847
|
+
const text11 = (parsed.text ?? "").trim();
|
|
126848
|
+
if (!chatroomId || !text11) return sendJson(res, 400, { error: "chatroomId_and_text_required" }, cors);
|
|
126849
126849
|
const metaSiteId = (parsed.metaSiteId ?? "").trim() || await resolveMetaSiteId();
|
|
126850
126850
|
if (!metaSiteId) return sendJson(res, 400, { error: "no_meta_site" }, cors);
|
|
126851
|
-
const result = await sendChatMessageLive(metaSiteId, chatroomId,
|
|
126851
|
+
const result = await sendChatMessageLive(metaSiteId, chatroomId, text11);
|
|
126852
126852
|
if (result.ok) return sendJson(res, 200, { ok: true, message: result.message }, cors);
|
|
126853
126853
|
return sendJson(res, result.status >= 400 && result.status < 600 ? result.status : 502, { ok: false, status: result.status, error: result.error }, cors);
|
|
126854
126854
|
}
|
|
@@ -127142,13 +127142,13 @@ function invalidate(state, ...screenIds) {
|
|
|
127142
127142
|
publishSSE(state, "screen.invalidated", { screenIds });
|
|
127143
127143
|
}
|
|
127144
127144
|
function publishSSE(state, type, payload) {
|
|
127145
|
-
const
|
|
127145
|
+
const text11 = `event: ${type}
|
|
127146
127146
|
data: ${JSON.stringify(payload)}
|
|
127147
127147
|
|
|
127148
127148
|
`;
|
|
127149
127149
|
for (const res of [...state.sseClients]) {
|
|
127150
127150
|
try {
|
|
127151
|
-
res.write(
|
|
127151
|
+
res.write(text11);
|
|
127152
127152
|
} catch {
|
|
127153
127153
|
state.sseClients.delete(res);
|
|
127154
127154
|
}
|
|
@@ -127164,13 +127164,13 @@ function publishAdminSSE(state, type, payload) {
|
|
|
127164
127164
|
state.lastDeviceScreen.set(key3, screenId);
|
|
127165
127165
|
}
|
|
127166
127166
|
}
|
|
127167
|
-
const
|
|
127167
|
+
const text11 = `event: ${type}
|
|
127168
127168
|
data: ${JSON.stringify(payload)}
|
|
127169
127169
|
|
|
127170
127170
|
`;
|
|
127171
127171
|
for (const res of [...state.adminClients]) {
|
|
127172
127172
|
try {
|
|
127173
|
-
res.write(
|
|
127173
|
+
res.write(text11);
|
|
127174
127174
|
} catch {
|
|
127175
127175
|
state.adminClients.delete(res);
|
|
127176
127176
|
}
|
|
@@ -127191,12 +127191,12 @@ function publishDevReady(state, res, extra = {}) {
|
|
|
127191
127191
|
hotReloadEnabled: state.hotReloadEnabled,
|
|
127192
127192
|
...extra
|
|
127193
127193
|
};
|
|
127194
|
-
const
|
|
127194
|
+
const text11 = `event: dev.ready
|
|
127195
127195
|
data: ${JSON.stringify(payload)}
|
|
127196
127196
|
|
|
127197
127197
|
`;
|
|
127198
127198
|
if (res) {
|
|
127199
|
-
res.write(
|
|
127199
|
+
res.write(text11);
|
|
127200
127200
|
} else {
|
|
127201
127201
|
publishSSE(state, "dev.ready", payload);
|
|
127202
127202
|
}
|
|
@@ -129245,9 +129245,9 @@ async function handleLiveSubscription(req, res, state) {
|
|
|
129245
129245
|
},
|
|
129246
129246
|
body: JSON.stringify({ ...body, app })
|
|
129247
129247
|
});
|
|
129248
|
-
const
|
|
129248
|
+
const text11 = await upstream.text();
|
|
129249
129249
|
res.writeHead(upstream.status, { "Content-Type": "application/json", ...cors });
|
|
129250
|
-
res.end(
|
|
129250
|
+
res.end(text11 || JSON.stringify({ ok: upstream.ok }));
|
|
129251
129251
|
} catch (error) {
|
|
129252
129252
|
sendJson(res, 502, { error: "admin_server_unreachable", detail: String(error) }, cors);
|
|
129253
129253
|
}
|
|
@@ -130202,8 +130202,8 @@ function sha256hex(b2) {
|
|
|
130202
130202
|
function stableStringify(value) {
|
|
130203
130203
|
if (value === null || typeof value !== "object") return JSON.stringify(value);
|
|
130204
130204
|
if (Array.isArray(value)) return "[" + value.map(stableStringify).join(",") + "]";
|
|
130205
|
-
const
|
|
130206
|
-
return "{" + Object.keys(
|
|
130205
|
+
const object9 = value;
|
|
130206
|
+
return "{" + Object.keys(object9).sort().map((key3) => JSON.stringify(key3) + ":" + stableStringify(object9[key3])).join(",") + "}";
|
|
130207
130207
|
}
|
|
130208
130208
|
function manifestContent(m2) {
|
|
130209
130209
|
const {
|
|
@@ -131536,10 +131536,10 @@ function componentModuleIds() {
|
|
|
131536
131536
|
function usageStringCopyFor(permissionCopy) {
|
|
131537
131537
|
const out2 = {};
|
|
131538
131538
|
for (const [rawId, copy] of Object.entries(permissionCopy ?? {})) {
|
|
131539
|
-
const
|
|
131540
|
-
if (!
|
|
131539
|
+
const text11 = typeof copy === "string" ? copy.trim() : "";
|
|
131540
|
+
if (!text11) continue;
|
|
131541
131541
|
const req = CAPABILITY_NATIVE[catalogKey(rawId)];
|
|
131542
|
-
for (const u2 of [...req?.ios?.usageStrings ?? [], ...req?.macos?.usageStrings ?? []]) out2[u2.key] =
|
|
131542
|
+
for (const u2 of [...req?.ios?.usageStrings ?? [], ...req?.macos?.usageStrings ?? []]) out2[u2.key] = text11;
|
|
131543
131543
|
}
|
|
131544
131544
|
return out2;
|
|
131545
131545
|
}
|
|
@@ -132464,10 +132464,10 @@ function netTransport(rules) {
|
|
|
132464
132464
|
if (res.needsUpstream) {
|
|
132465
132465
|
throw new Error(`net fixture rule ${res.ruleId} is a \`transform\` rule, which needs a real upstream \u2014 not usable in a hermetic crawl`);
|
|
132466
132466
|
}
|
|
132467
|
-
const { status, body:
|
|
132467
|
+
const { status, body: text11 } = res.resolved;
|
|
132468
132468
|
if (status < 200 || status >= 300) throw new Error(`Wix ${status} for ${method} ${bare}`);
|
|
132469
132469
|
try {
|
|
132470
|
-
return
|
|
132470
|
+
return text11 ? JSON.parse(text11) : {};
|
|
132471
132471
|
} catch {
|
|
132472
132472
|
return {};
|
|
132473
132473
|
}
|
|
@@ -132511,10 +132511,10 @@ function layeredTransport(layers3) {
|
|
|
132511
132511
|
});
|
|
132512
132512
|
if (res.matched) {
|
|
132513
132513
|
if (res.needsUpstream) throw new Error(`net fixture rule ${res.ruleId} is a \`transform\` rule, which needs a real upstream \u2014 not usable in a hermetic crawl`);
|
|
132514
|
-
const { status, body:
|
|
132514
|
+
const { status, body: text11 } = res.resolved;
|
|
132515
132515
|
if (status < 200 || status >= 300) throw new Error(`Wix ${status} for ${m2} ${bare}`);
|
|
132516
132516
|
try {
|
|
132517
|
-
return
|
|
132517
|
+
return text11 ? JSON.parse(text11) : {};
|
|
132518
132518
|
} catch {
|
|
132519
132519
|
return {};
|
|
132520
132520
|
}
|
|
@@ -134688,13 +134688,13 @@ var init_build2 = __esm({
|
|
|
134688
134688
|
});
|
|
134689
134689
|
|
|
134690
134690
|
// ../mobile-dist/release-pin.ts
|
|
134691
|
-
function withPinnedRelease(
|
|
134692
|
-
if (!releaseId) return
|
|
134691
|
+
function withPinnedRelease(text11, releaseId) {
|
|
134692
|
+
if (!releaseId) return text11;
|
|
134693
134693
|
let cfg;
|
|
134694
134694
|
try {
|
|
134695
|
-
cfg = JSON.parse(
|
|
134695
|
+
cfg = JSON.parse(text11);
|
|
134696
134696
|
} catch {
|
|
134697
|
-
return
|
|
134697
|
+
return text11;
|
|
134698
134698
|
}
|
|
134699
134699
|
cfg.releaseId = releaseId;
|
|
134700
134700
|
cfg.releasePinned = true;
|
|
@@ -135067,18 +135067,18 @@ async function bakeCatalogs(app, locale, fetchCatalog, putDoc) {
|
|
|
135067
135067
|
const source = locale?.default ?? "en";
|
|
135068
135068
|
const tags = [.../* @__PURE__ */ new Set([source, ...declared])];
|
|
135069
135069
|
for (const tag of tags) {
|
|
135070
|
-
const
|
|
135071
|
-
if (!
|
|
135072
|
-
if (!declared.length && !servesMessages(
|
|
135073
|
-
const hash2 = sha2563(
|
|
135074
|
-
await putDoc(app, hash2,
|
|
135070
|
+
const text11 = await fetchCatalog(tag);
|
|
135071
|
+
if (!text11) continue;
|
|
135072
|
+
if (!declared.length && !servesMessages(text11)) continue;
|
|
135073
|
+
const hash2 = sha2563(text11);
|
|
135074
|
+
await putDoc(app, hash2, text11);
|
|
135075
135075
|
out2[tag] = hash2;
|
|
135076
135076
|
}
|
|
135077
135077
|
return out2;
|
|
135078
135078
|
}
|
|
135079
|
-
function servesMessages(
|
|
135079
|
+
function servesMessages(text11) {
|
|
135080
135080
|
try {
|
|
135081
|
-
const m2 = JSON.parse(
|
|
135081
|
+
const m2 = JSON.parse(text11).messages;
|
|
135082
135082
|
return !!m2 && typeof m2 === "object" && Object.keys(m2).length > 0;
|
|
135083
135083
|
} catch {
|
|
135084
135084
|
return false;
|
|
@@ -135173,9 +135173,9 @@ async function snapshotTokens(app, base, fetchTokens, put) {
|
|
|
135173
135173
|
}
|
|
135174
135174
|
};
|
|
135175
135175
|
}
|
|
135176
|
-
const
|
|
135177
|
-
await put(
|
|
135178
|
-
return { hash: sha2563(
|
|
135176
|
+
const text11 = await res.text();
|
|
135177
|
+
await put(text11);
|
|
135178
|
+
return { hash: sha2563(text11) };
|
|
135179
135179
|
}
|
|
135180
135180
|
function tokensSnapshotMessage(app, base, status) {
|
|
135181
135181
|
const why = status === 400 ? `the dev-server rejected the app id as malformed (400 bad_app). It must be lowercase letters, digits and hyphens, starting with a letter or digit, at most 63 characters, with at most one interior dot \u2014 so a leading underscore or an uppercase letter fails, on every build of that app. A single dot is FINE (an owner-namespaced slug), so do not remove one to get past this` : `${status} from the tokens route`;
|
|
@@ -135276,23 +135276,23 @@ function maximumBinaryVersion(current, candidate) {
|
|
|
135276
135276
|
}
|
|
135277
135277
|
return current;
|
|
135278
135278
|
}
|
|
135279
|
-
async function withStoreNavBundle(
|
|
135279
|
+
async function withStoreNavBundle(text11, address) {
|
|
135280
135280
|
let cfg;
|
|
135281
135281
|
try {
|
|
135282
|
-
cfg = JSON.parse(
|
|
135282
|
+
cfg = JSON.parse(text11);
|
|
135283
135283
|
} catch {
|
|
135284
|
-
return
|
|
135284
|
+
return text11;
|
|
135285
135285
|
}
|
|
135286
135286
|
const refs = [cfg?.app?.logicBundle, cfg?.navigation?.navLogicBundle, cfg?.navLogicBundle].filter(
|
|
135287
135287
|
(r3) => !!r3 && typeof r3 === "object" && typeof r3.url === "string"
|
|
135288
135288
|
);
|
|
135289
|
-
if (refs.length === 0) return
|
|
135289
|
+
if (refs.length === 0) return text11;
|
|
135290
135290
|
const resolved2 = [];
|
|
135291
135291
|
for (const ref of refs) {
|
|
135292
135292
|
const name = bundleNameFromUrl(ref.url);
|
|
135293
|
-
if (!name) return
|
|
135293
|
+
if (!name) return text11;
|
|
135294
135294
|
const addressed = await address(name);
|
|
135295
|
-
if (!addressed) return
|
|
135295
|
+
if (!addressed) return text11;
|
|
135296
135296
|
resolved2.push({ ref, url: addressed.url, sri: addressed.sri });
|
|
135297
135297
|
}
|
|
135298
135298
|
for (const { ref, url, sri: integrity2 } of resolved2) {
|
|
@@ -135301,10 +135301,10 @@ async function withStoreNavBundle(text10, address) {
|
|
|
135301
135301
|
}
|
|
135302
135302
|
return JSON.stringify(cfg);
|
|
135303
135303
|
}
|
|
135304
|
-
function linkableScreenIdsFrom(
|
|
135304
|
+
function linkableScreenIdsFrom(text11) {
|
|
135305
135305
|
let cfg;
|
|
135306
135306
|
try {
|
|
135307
|
-
cfg = JSON.parse(
|
|
135307
|
+
cfg = JSON.parse(text11);
|
|
135308
135308
|
} catch {
|
|
135309
135309
|
return [];
|
|
135310
135310
|
}
|
|
@@ -135316,24 +135316,24 @@ function linkableScreenIdsFrom(text10) {
|
|
|
135316
135316
|
}
|
|
135317
135317
|
return [...ids];
|
|
135318
135318
|
}
|
|
135319
|
-
function withoutDevOnlyAppConfig(
|
|
135319
|
+
function withoutDevOnlyAppConfig(text11) {
|
|
135320
135320
|
let cfg;
|
|
135321
135321
|
try {
|
|
135322
|
-
cfg = JSON.parse(
|
|
135322
|
+
cfg = JSON.parse(text11);
|
|
135323
135323
|
} catch {
|
|
135324
|
-
return
|
|
135324
|
+
return text11;
|
|
135325
135325
|
}
|
|
135326
|
-
if (!cfg || typeof cfg !== "object" || !("devGatewayConfig" in cfg)) return
|
|
135326
|
+
if (!cfg || typeof cfg !== "object" || !("devGatewayConfig" in cfg)) return text11;
|
|
135327
135327
|
delete cfg.devGatewayConfig;
|
|
135328
135328
|
return JSON.stringify(cfg);
|
|
135329
135329
|
}
|
|
135330
|
-
function withProdServeAppConfig(
|
|
135331
|
-
if (!prod?.serve) return
|
|
135330
|
+
function withProdServeAppConfig(text11, prod) {
|
|
135331
|
+
if (!prod?.serve) return text11;
|
|
135332
135332
|
let cfg;
|
|
135333
135333
|
try {
|
|
135334
|
-
cfg = JSON.parse(
|
|
135334
|
+
cfg = JSON.parse(text11);
|
|
135335
135335
|
} catch {
|
|
135336
|
-
return
|
|
135336
|
+
return text11;
|
|
135337
135337
|
}
|
|
135338
135338
|
cfg.useProdServe = true;
|
|
135339
135339
|
cfg.prodServeBaseUrl = prod.serve;
|
|
@@ -135716,10 +135716,10 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135716
135716
|
if (bytes2.length === 0 || bytes2.length > MAX_AUTHORING_DOC_BYTES) {
|
|
135717
135717
|
throw new Error(`${file2} must be non-empty and at most ${MAX_AUTHORING_DOC_BYTES} bytes to ship with a release.`);
|
|
135718
135718
|
}
|
|
135719
|
-
const
|
|
135720
|
-
if (!Buffer.from(
|
|
135719
|
+
const text11 = bytes2.toString("utf8");
|
|
135720
|
+
if (!Buffer.from(text11, "utf8").equals(bytes2)) throw new Error(`${file2} must be canonical UTF-8 Markdown.`);
|
|
135721
135721
|
const hash2 = sha2563(bytes2);
|
|
135722
|
-
await store.putDoc(app, hash2,
|
|
135722
|
+
await store.putDoc(app, hash2, text11);
|
|
135723
135723
|
authoringDocs[name] = { sha256: hash2, sri: sri2(bytes2), bytes: bytes2.length, contentType: "text/markdown; charset=utf-8" };
|
|
135724
135724
|
}
|
|
135725
135725
|
}
|
|
@@ -135872,10 +135872,10 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135872
135872
|
base = BAKE_OFFLINE_BASE;
|
|
135873
135873
|
}
|
|
135874
135874
|
const devFetch = (url, init) => dev.inject(new Request(url, init));
|
|
135875
|
-
const depthRefusalFromText = (status,
|
|
135875
|
+
const depthRefusalFromText = (status, text11) => {
|
|
135876
135876
|
if (status !== 422) return null;
|
|
135877
135877
|
try {
|
|
135878
|
-
const body = JSON.parse(
|
|
135878
|
+
const body = JSON.parse(text11);
|
|
135879
135879
|
return body?.error === "depth_budget_exceeded" && body.finding ? body.finding : null;
|
|
135880
135880
|
} catch {
|
|
135881
135881
|
return null;
|
|
@@ -135883,8 +135883,8 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135883
135883
|
};
|
|
135884
135884
|
const depthRefusalOf = async (res) => depthRefusalFromText(res.status, await res.text());
|
|
135885
135885
|
const recordUnbuilt = async (screenId, res) => {
|
|
135886
|
-
const
|
|
135887
|
-
const finding = depthRefusalFromText(res.status,
|
|
135886
|
+
const text11 = await res.text();
|
|
135887
|
+
const finding = depthRefusalFromText(res.status, text11);
|
|
135888
135888
|
if (finding) {
|
|
135889
135889
|
failedToBuild.push({ screenId, status: res.status, error: finding.message });
|
|
135890
135890
|
if (!depthRefusals.some((r3) => r3.screenId === screenId)) depthRefusals.push({ screenId, finding });
|
|
@@ -135893,7 +135893,7 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
135893
135893
|
}
|
|
135894
135894
|
return;
|
|
135895
135895
|
}
|
|
135896
|
-
failedToBuild.push({ screenId, status: res.status, error:
|
|
135896
|
+
failedToBuild.push({ screenId, status: res.status, error: text11.slice(0, 2e3) });
|
|
135897
135897
|
};
|
|
135898
135898
|
try {
|
|
135899
135899
|
for (const screenId of screenIds) {
|
|
@@ -136138,11 +136138,11 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136138
136138
|
ok: res.ok,
|
|
136139
136139
|
status: res.status,
|
|
136140
136140
|
text: async () => {
|
|
136141
|
-
const
|
|
136141
|
+
const text11 = await res.text();
|
|
136142
136142
|
try {
|
|
136143
|
-
const doc = JSON.parse(
|
|
136143
|
+
const doc = JSON.parse(text11);
|
|
136144
136144
|
if (!publishedFontPlan) {
|
|
136145
|
-
if (!("fontFaces" in doc)) return
|
|
136145
|
+
if (!("fontFaces" in doc)) return text11;
|
|
136146
136146
|
const kept = publishableFontFaces(doc.fontFaces);
|
|
136147
136147
|
if (kept) doc.fontFaces = kept;
|
|
136148
136148
|
else delete doc.fontFaces;
|
|
@@ -136151,12 +136151,12 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136151
136151
|
doc.fontFaces = servedProjection(publishedFontPlan);
|
|
136152
136152
|
return JSON.stringify(doc);
|
|
136153
136153
|
} catch {
|
|
136154
|
-
return
|
|
136154
|
+
return text11;
|
|
136155
136155
|
}
|
|
136156
136156
|
}
|
|
136157
136157
|
};
|
|
136158
136158
|
},
|
|
136159
|
-
(
|
|
136159
|
+
(text11) => store.putTokens(app, text11)
|
|
136160
136160
|
);
|
|
136161
136161
|
if (snapshot2.hash) tokensHash = snapshot2.hash;
|
|
136162
136162
|
if (snapshot2.failure) {
|
|
@@ -136186,14 +136186,14 @@ async function buildFromLoaded(preloaded, dest, opts = {}) {
|
|
|
136186
136186
|
if (streamPolicyErrors.length) {
|
|
136187
136187
|
throw new Error(`invalid streamPolicy for release ${app}: ${streamPolicyErrors.join("; ")}`);
|
|
136188
136188
|
}
|
|
136189
|
-
const
|
|
136189
|
+
const text11 = await withStoreNavBundle(prodText, async (name) => {
|
|
136190
136190
|
const hash2 = await addressBundle(name) ?? null;
|
|
136191
136191
|
const entry = hash2 ? bundles[name] : void 0;
|
|
136192
136192
|
return entry ? { url: store.bundleUrl(app, entry.sha256), sri: entry.sri } : null;
|
|
136193
136193
|
});
|
|
136194
|
-
await store.putAppConfig(app,
|
|
136195
|
-
appConfigHash = sha2563(
|
|
136196
|
-
if (collect2?.descriptors) for (const id of linkableScreenIdsFrom(
|
|
136194
|
+
await store.putAppConfig(app, text11);
|
|
136195
|
+
appConfigHash = sha2563(text11);
|
|
136196
|
+
if (collect2?.descriptors) for (const id of linkableScreenIdsFrom(text11)) linkable.add(id);
|
|
136197
136197
|
}
|
|
136198
136198
|
const ahRes = await devFetch(`${base}/v1/action-handlers/${encodeURIComponent(app)}`, { headers: { "X-Himalaya-App": app } });
|
|
136199
136199
|
if (ahRes.ok) {
|
|
@@ -137122,8 +137122,8 @@ function penalty(m2, size) {
|
|
|
137122
137122
|
score += Math.floor(Math.abs(dark * 20 - total * 10) / total) * 10;
|
|
137123
137123
|
return score;
|
|
137124
137124
|
}
|
|
137125
|
-
function encodeQr(
|
|
137126
|
-
const bytes2 = [...new TextEncoder().encode(
|
|
137125
|
+
function encodeQr(text11) {
|
|
137126
|
+
const bytes2 = [...new TextEncoder().encode(text11)];
|
|
137127
137127
|
const version5 = fitVersion(bytes2.length);
|
|
137128
137128
|
if (!version5) {
|
|
137129
137129
|
throw new RangeError(`QR payload too long: ${bytes2.length} bytes exceeds version ${QR_MAX_VERSION} at EC level L`);
|
|
@@ -137363,14 +137363,14 @@ function headline(changes) {
|
|
|
137363
137363
|
function boardLines(changes) {
|
|
137364
137364
|
const lines = [];
|
|
137365
137365
|
for (const c2 of changes.items) {
|
|
137366
|
-
const
|
|
137367
|
-
const same3 = lines.find((l2) => l2.text ===
|
|
137366
|
+
const text11 = lineOf(c2);
|
|
137367
|
+
const same3 = lines.find((l2) => l2.text === text11);
|
|
137368
137368
|
if (same3) {
|
|
137369
137369
|
same3.n++;
|
|
137370
137370
|
continue;
|
|
137371
137371
|
}
|
|
137372
137372
|
lines.push({
|
|
137373
|
-
text:
|
|
137373
|
+
text: text11,
|
|
137374
137374
|
n: 1,
|
|
137375
137375
|
...c2.kind === "token" && c2.from && HEX.test(c2.from) ? { from: c2.from } : {},
|
|
137376
137376
|
...c2.kind === "token" && c2.to && HEX.test(c2.to) ? { to: c2.to } : {}
|
|
@@ -138157,10 +138157,10 @@ function ownerTransport(msid, fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS,
|
|
|
138157
138157
|
}
|
|
138158
138158
|
throw new Error(`${method} ${path2} failed: ${err?.message ?? String(e2)}`);
|
|
138159
138159
|
}
|
|
138160
|
-
const
|
|
138161
|
-
let parsed =
|
|
138160
|
+
const text11 = await res.text();
|
|
138161
|
+
let parsed = text11;
|
|
138162
138162
|
try {
|
|
138163
|
-
parsed =
|
|
138163
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
138164
138164
|
} catch {
|
|
138165
138165
|
}
|
|
138166
138166
|
if (!res.ok) throw new WixApiError(res.status, method, path2, parsed);
|
|
@@ -138342,10 +138342,10 @@ function scalar3(v2) {
|
|
|
138342
138342
|
}
|
|
138343
138343
|
return t2;
|
|
138344
138344
|
}
|
|
138345
|
-
function parseStoreConfig(
|
|
138345
|
+
function parseStoreConfig(text11) {
|
|
138346
138346
|
const cfg = {};
|
|
138347
138347
|
let section3 = null;
|
|
138348
|
-
for (const raw of
|
|
138348
|
+
for (const raw of text11.split("\n")) {
|
|
138349
138349
|
const line = strip2(raw);
|
|
138350
138350
|
if (!line.trim()) continue;
|
|
138351
138351
|
const indented = /^\s+/.test(raw);
|
|
@@ -143503,7 +143503,7 @@ function prettify(node, options, matcher, readonlyMatcher) {
|
|
|
143503
143503
|
return compress(node, options, matcher, readonlyMatcher);
|
|
143504
143504
|
}
|
|
143505
143505
|
function compress(arr2, options, matcher, readonlyMatcher) {
|
|
143506
|
-
let
|
|
143506
|
+
let text11;
|
|
143507
143507
|
const compressedObj = {};
|
|
143508
143508
|
for (let i2 = 0; i2 < arr2.length; i2++) {
|
|
143509
143509
|
const tagObj = arr2[i2];
|
|
@@ -143516,8 +143516,8 @@ function compress(arr2, options, matcher, readonlyMatcher) {
|
|
|
143516
143516
|
matcher.push(property2, rawAttrs);
|
|
143517
143517
|
}
|
|
143518
143518
|
if (property2 === options.textNodeName) {
|
|
143519
|
-
if (
|
|
143520
|
-
else
|
|
143519
|
+
if (text11 === void 0) text11 = tagObj[property2];
|
|
143520
|
+
else text11 += "" + tagObj[property2];
|
|
143521
143521
|
} else if (property2 === void 0) {
|
|
143522
143522
|
continue;
|
|
143523
143523
|
} else if (tagObj[property2]) {
|
|
@@ -143555,9 +143555,9 @@ function compress(arr2, options, matcher, readonlyMatcher) {
|
|
|
143555
143555
|
}
|
|
143556
143556
|
}
|
|
143557
143557
|
}
|
|
143558
|
-
if (typeof
|
|
143559
|
-
if (
|
|
143560
|
-
} else if (
|
|
143558
|
+
if (typeof text11 === "string") {
|
|
143559
|
+
if (text11.length > 0) compressedObj[options.textNodeName] = text11;
|
|
143560
|
+
} else if (text11 !== void 0) compressedObj[options.textNodeName] = text11;
|
|
143561
143561
|
return compressedObj;
|
|
143562
143562
|
}
|
|
143563
143563
|
function propName2(obj5) {
|
|
@@ -143735,9 +143735,9 @@ function arrToStr(arr2, options, indentation, matcher, stopNodeExpressions, xmlV
|
|
|
143735
143735
|
}
|
|
143736
143736
|
if (!Array.isArray(arr2)) {
|
|
143737
143737
|
if (arr2 !== void 0 && arr2 !== null) {
|
|
143738
|
-
let
|
|
143739
|
-
|
|
143740
|
-
return
|
|
143738
|
+
let text11 = arr2.toString();
|
|
143739
|
+
text11 = replaceEntitiesValue2(text11, options);
|
|
143740
|
+
return text11;
|
|
143741
143741
|
}
|
|
143742
143742
|
return "";
|
|
143743
143743
|
}
|
|
@@ -144023,22 +144023,22 @@ function resolveTagName2(name, isAttribute2, options, matcher, xmlVersion) {
|
|
|
144023
144023
|
if (qName(name, { xmlVersion })) return name;
|
|
144024
144024
|
return options.sanitizeName(name, { isAttribute: isAttribute2, matcher: matcher.readOnly() });
|
|
144025
144025
|
}
|
|
144026
|
-
function processTextOrObjNode(
|
|
144027
|
-
const attrValues = this.extractAttributes(
|
|
144026
|
+
function processTextOrObjNode(object9, key3, level, matcher, xmlVersion) {
|
|
144027
|
+
const attrValues = this.extractAttributes(object9);
|
|
144028
144028
|
matcher.push(key3, attrValues);
|
|
144029
144029
|
const isStopNode = this.checkStopNode(matcher);
|
|
144030
144030
|
if (isStopNode) {
|
|
144031
|
-
const rawContent = this.buildRawContent(
|
|
144032
|
-
const attrStr = this.buildAttributesForStopNode(
|
|
144031
|
+
const rawContent = this.buildRawContent(object9);
|
|
144032
|
+
const attrStr = this.buildAttributesForStopNode(object9);
|
|
144033
144033
|
matcher.pop();
|
|
144034
144034
|
return this.buildObjectNode(rawContent, key3, attrStr, level);
|
|
144035
144035
|
}
|
|
144036
|
-
const result = this.j2x(
|
|
144036
|
+
const result = this.j2x(object9, level + 1, matcher, xmlVersion);
|
|
144037
144037
|
matcher.pop();
|
|
144038
144038
|
if (key3[0] === "?") {
|
|
144039
144039
|
return this.buildTextValNode("", key3, result.attrStr, level, matcher);
|
|
144040
|
-
} else if (
|
|
144041
|
-
return this.buildTextValNode(
|
|
144040
|
+
} else if (object9[this.options.textNodeName] !== void 0 && Object.keys(object9).length === 1) {
|
|
144041
|
+
return this.buildTextValNode(object9[this.options.textNodeName], key3, result.attrStr, level, matcher);
|
|
144042
144042
|
} else {
|
|
144043
144043
|
return this.buildObjectNode(result.val, key3, result.attrStr, level);
|
|
144044
144044
|
}
|
|
@@ -146017,9 +146017,9 @@ function bundlesOf(block) {
|
|
|
146017
146017
|
walk2(block);
|
|
146018
146018
|
return [...out2];
|
|
146019
146019
|
}
|
|
146020
|
-
function parseJson2(
|
|
146020
|
+
function parseJson2(text11, what) {
|
|
146021
146021
|
try {
|
|
146022
|
-
const value = JSON.parse(
|
|
146022
|
+
const value = JSON.parse(text11);
|
|
146023
146023
|
if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("not an object");
|
|
146024
146024
|
return value;
|
|
146025
146025
|
} catch (e2) {
|
|
@@ -146604,9 +146604,9 @@ function planTrim(src, keepIds, links) {
|
|
|
146604
146604
|
for (const r3 of keptRoutes) for (const b2 of r3.bundles) keptWorkers.add(b2);
|
|
146605
146605
|
const importsOf2 = (dir) => {
|
|
146606
146606
|
const out2 = [];
|
|
146607
|
-
for (const [rel,
|
|
146607
|
+
for (const [rel, text11] of Object.entries(src.workerFiles)) {
|
|
146608
146608
|
if (!rel.startsWith(`tier5-src/${dir}/`)) continue;
|
|
146609
|
-
for (const m2 of
|
|
146609
|
+
for (const m2 of text11.matchAll(/(?:\bfrom\s*|\bimport\s*\(?\s*|\brequire\s*\(\s*)["']\.\.\/([A-Za-z0-9_.-]+)(?:\/|["'])/g)) out2.push(m2[1]);
|
|
146610
146610
|
}
|
|
146611
146611
|
return out2;
|
|
146612
146612
|
};
|
|
@@ -146652,9 +146652,9 @@ function planTrim(src, keepIds, links) {
|
|
|
146652
146652
|
continue;
|
|
146653
146653
|
}
|
|
146654
146654
|
const block = edited.get(r3);
|
|
146655
|
-
let
|
|
146656
|
-
if (r3 === app.home && homeModules?.text !== void 0)
|
|
146657
|
-
if (
|
|
146655
|
+
let text11 = block ? serializeAt(block, app.dev, r3.open) : void 0;
|
|
146656
|
+
if (r3 === app.home && homeModules?.text !== void 0) text11 = homeModules.text;
|
|
146657
|
+
if (text11 !== void 0) cut2(r3.open, r3.close, text11);
|
|
146658
146658
|
}
|
|
146659
146659
|
if (templatedEmptied) cut2(templatedEmptied[0], templatedEmptied[1], "\n");
|
|
146660
146660
|
dev += app.dev.slice(cursor);
|
|
@@ -146707,9 +146707,9 @@ function homeModulesPass(app, kept, edited) {
|
|
|
146707
146707
|
const removedVertical = verticals.some(([, card2]) => !kept.has(app.exact.get(card2.screenId)));
|
|
146708
146708
|
if (!removedVertical) return { dropped: [] };
|
|
146709
146709
|
const block = edited.get(app.home);
|
|
146710
|
-
const
|
|
146710
|
+
const text11 = block ? serializeAt(block, app.dev, app.home.open) : app.dev.slice(app.home.open, app.home.close);
|
|
146711
146711
|
const installed = verticals.filter(([, card2]) => kept.has(app.exact.get(card2.screenId))).map(([v2]) => v2);
|
|
146712
|
-
const patched = patchHomeModules(
|
|
146712
|
+
const patched = patchHomeModules(text11, installed);
|
|
146713
146713
|
if (!patched.droppedModules.length) return { dropped: [] };
|
|
146714
146714
|
return { text: patched.src, dropped: patched.droppedModules };
|
|
146715
146715
|
}
|
|
@@ -147091,8 +147091,8 @@ function workerReach(src) {
|
|
|
147091
147091
|
const f2 = queue.shift();
|
|
147092
147092
|
if (seen.has(f2)) continue;
|
|
147093
147093
|
seen.add(f2);
|
|
147094
|
-
const
|
|
147095
|
-
for (const m2 of
|
|
147094
|
+
const text11 = all.get(f2) ?? "";
|
|
147095
|
+
for (const m2 of text11.matchAll(RELATIVE_IMPORT)) {
|
|
147096
147096
|
const r3 = resolveImport(f2, m2[1], all);
|
|
147097
147097
|
if (r3 && !seen.has(r3)) queue.push(r3);
|
|
147098
147098
|
}
|
|
@@ -147102,11 +147102,11 @@ function workerReach(src) {
|
|
|
147102
147102
|
let fetchCall = false;
|
|
147103
147103
|
const hits = [];
|
|
147104
147104
|
for (const f2 of [...seen].sort()) {
|
|
147105
|
-
const
|
|
147105
|
+
const text11 = all.get(f2) ?? "";
|
|
147106
147106
|
const before = wix.size;
|
|
147107
|
-
for (const m2 of
|
|
147108
|
-
const r3 = /\bwixApi\b/.test(
|
|
147109
|
-
const fe2 = /(?<![.\w])fetch\s*\(/.test(
|
|
147107
|
+
for (const m2 of text11.matchAll(WIX_MODULE)) wix.add(m2[1].replace(/^@wix\/himalaya\//, "@himalaya/"));
|
|
147108
|
+
const r3 = /\bwixApi\b/.test(text11);
|
|
147109
|
+
const fe2 = /(?<![.\w])fetch\s*\(/.test(text11);
|
|
147110
147110
|
if (wix.size > before || r3 || fe2) hits.push(f2);
|
|
147111
147111
|
raw ||= r3;
|
|
147112
147112
|
fetchCall ||= fe2;
|
|
@@ -147518,10 +147518,10 @@ async function pushSetupRequest(options) {
|
|
|
147518
147518
|
signal: AbortSignal.timeout(options.timeoutMs ?? (setup ? 12e4 : 3e4)),
|
|
147519
147519
|
...setup ? { body: JSON.stringify(options.body) } : {}
|
|
147520
147520
|
});
|
|
147521
|
-
const
|
|
147521
|
+
const text11 = await response.text();
|
|
147522
147522
|
let parsed = null;
|
|
147523
147523
|
try {
|
|
147524
|
-
const value =
|
|
147524
|
+
const value = text11 ? JSON.parse(text11) : null;
|
|
147525
147525
|
parsed = value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
147526
147526
|
} catch {
|
|
147527
147527
|
parsed = null;
|
|
@@ -147665,8 +147665,8 @@ function appendProperties(literal, file2, lines) {
|
|
|
147665
147665
|
const at2 = trailing ? literal.properties.end : last.end;
|
|
147666
147666
|
const lead = trailing ? "" : ",";
|
|
147667
147667
|
if (onOneLine(literal, file2)) {
|
|
147668
|
-
const
|
|
147669
|
-
return { at: at2, end: at2, text: `${lead} ${trailing ?
|
|
147668
|
+
const text11 = inline();
|
|
147669
|
+
return { at: at2, end: at2, text: `${lead} ${trailing ? text11 : text11.replace(/,$/, "")}` };
|
|
147670
147670
|
}
|
|
147671
147671
|
const indent = lineIndent2(file2.text, last.getStart(file2));
|
|
147672
147672
|
return { at: at2, end: at2, text: lead + lines.map((line) => `
|
|
@@ -147676,9 +147676,9 @@ function onOneLine(node, file2) {
|
|
|
147676
147676
|
const line = (position) => file2.getLineAndCharacterOfPosition(position).line;
|
|
147677
147677
|
return line(node.getStart(file2)) === line(node.getEnd());
|
|
147678
147678
|
}
|
|
147679
|
-
function lineIndent2(
|
|
147680
|
-
const lineStart =
|
|
147681
|
-
return /^[ \t]*/.exec(
|
|
147679
|
+
function lineIndent2(text11, position) {
|
|
147680
|
+
const lineStart = text11.lastIndexOf("\n", position - 1) + 1;
|
|
147681
|
+
return /^[ \t]*/.exec(text11.slice(lineStart))[0];
|
|
147682
147682
|
}
|
|
147683
147683
|
function applySplices(source, splices) {
|
|
147684
147684
|
return [...splices].sort((a2, b2) => b2.at - a2.at).reduce((out2, s2) => out2.slice(0, s2.at) + s2.text + out2.slice(s2.end), source);
|
|
@@ -149186,9 +149186,9 @@ __export(screen_state_exports, {
|
|
|
149186
149186
|
import { createHash as createHash26 } from "node:crypto";
|
|
149187
149187
|
import { lstatSync as lstatSync15, readFileSync as readFileSync51 } from "node:fs";
|
|
149188
149188
|
import { join as join40 } from "node:path";
|
|
149189
|
-
function quotableLine(
|
|
149190
|
-
if (!
|
|
149191
|
-
const first =
|
|
149189
|
+
function quotableLine(text11) {
|
|
149190
|
+
if (!text11) return void 0;
|
|
149191
|
+
const first = text11.split(/\r?\n/).map((l2) => l2.trim()).find(Boolean);
|
|
149192
149192
|
if (!first) return void 0;
|
|
149193
149193
|
let line = first.replace(/\s+/g, " ");
|
|
149194
149194
|
if (line.length > LINE_MAX) {
|
|
@@ -149201,9 +149201,9 @@ function quotableLine(text10) {
|
|
|
149201
149201
|
function visibleText(html) {
|
|
149202
149202
|
return html.replace(/<(script|style)\b[\s\S]*?<\/\1>/gi, " ").replace(/<[^>]*>/g, " ").replace(/&#x([0-9a-f]+);/gi, (_2, h2) => String.fromCodePoint(parseInt(h2, 16))).replace(/&#(\d+);/g, (_2, d2) => String.fromCodePoint(Number(d2))).replace(/"/g, '"').replace(/'/g, "'").replace(/</g, "<").replace(/>/g, ">").replace(/ /g, " ").replace(/&/g, "&").replace(/\s+/g, " ");
|
|
149203
149203
|
}
|
|
149204
|
-
function painted(
|
|
149204
|
+
function painted(text11, page) {
|
|
149205
149205
|
if (page === void 0) return true;
|
|
149206
|
-
const probe =
|
|
149206
|
+
const probe = text11.replace(/\s+/g, " ").trim().slice(0, 60);
|
|
149207
149207
|
return !!probe && page.includes(probe);
|
|
149208
149208
|
}
|
|
149209
149209
|
function errorMessageOf(s2) {
|
|
@@ -150413,8 +150413,8 @@ var init_cms_schema = __esm({
|
|
|
150413
150413
|
|
|
150414
150414
|
// ../native-config/car.ts
|
|
150415
150415
|
function parseCarConfig(configTs) {
|
|
150416
|
-
const { text:
|
|
150417
|
-
for (const m2 of
|
|
150416
|
+
const { text: text11, inString } = scanConfig(configTs);
|
|
150417
|
+
for (const m2 of text11.matchAll(/\bcar\s*[:=]\s*\{([^}]*)\}/g)) {
|
|
150418
150418
|
if (inString[m2.index]) continue;
|
|
150419
150419
|
return { category: /category\s*:\s*["']([^"']+)["']/.exec(m2[1])?.[1] };
|
|
150420
150420
|
}
|
|
@@ -150939,10 +150939,10 @@ function tokenColorIssues(dir, tokensPathOverride) {
|
|
|
150939
150939
|
if (controlButton === void 0 || controlButton === null || typeof controlButton !== "object" || Array.isArray(controlButton)) return;
|
|
150940
150940
|
const btn = controlButton;
|
|
150941
150941
|
for (const size of ["sm", "md", "lg"]) {
|
|
150942
|
-
const
|
|
150943
|
-
if (
|
|
150942
|
+
const text11 = btn[size]?.text;
|
|
150943
|
+
if (text11 === void 0 || typeof text11 === "string" && typo.has(text11)) continue;
|
|
150944
150944
|
error(
|
|
150945
|
-
`${tokensPath}: ${where}controls.button.${size}.text is ${JSON.stringify(
|
|
150945
|
+
`${tokensPath}: ${where}controls.button.${size}.text is ${JSON.stringify(text11)}, which names no \`typography\` token \u2014 every renderer would keep the built-in Button label. Name one that exists.`
|
|
150946
150946
|
);
|
|
150947
150947
|
}
|
|
150948
150948
|
const variants = btn.variants;
|
|
@@ -151372,16 +151372,16 @@ function encode(value, quote) {
|
|
|
151372
151372
|
if (quote === "'") return `'${value.replace(/[\\']/g, "\\$&").replace(/\n/g, "\\n")}'`;
|
|
151373
151373
|
return `\`${value.replace(/[\\`]|\$(?=\{)/g, "\\$&")}\``;
|
|
151374
151374
|
}
|
|
151375
|
-
function syntaxErrors(file2,
|
|
151375
|
+
function syntaxErrors(file2, text11) {
|
|
151376
151376
|
if (file2.endsWith(".json")) {
|
|
151377
151377
|
try {
|
|
151378
|
-
JSON.parse(
|
|
151378
|
+
JSON.parse(text11);
|
|
151379
151379
|
return [];
|
|
151380
151380
|
} catch (e2) {
|
|
151381
151381
|
return [e2.message];
|
|
151382
151382
|
}
|
|
151383
151383
|
}
|
|
151384
|
-
const out2 = ts7.transpileModule(
|
|
151384
|
+
const out2 = ts7.transpileModule(text11, { fileName: file2, reportDiagnostics: true, compilerOptions: { target: ts7.ScriptTarget.ES2022 } });
|
|
151385
151385
|
return (out2.diagnostics ?? []).map((d2) => ts7.flattenDiagnosticMessageText(d2.messageText, "\n"));
|
|
151386
151386
|
}
|
|
151387
151387
|
function sweepCopy(dir, pairs, dryRun) {
|
|
@@ -151393,10 +151393,10 @@ function sweepCopy(dir, pairs, dryRun) {
|
|
|
151393
151393
|
const next = /* @__PURE__ */ new Map();
|
|
151394
151394
|
const replaced = pairs.map(([from, to2]) => ({ from, to: to2, files: {} }));
|
|
151395
151395
|
for (const f2 of files) {
|
|
151396
|
-
const
|
|
151397
|
-
if (!pairs.some(([from]) =>
|
|
151396
|
+
const text11 = readFileSync59(join49(dir, f2), "utf8");
|
|
151397
|
+
if (!pairs.some(([from]) => text11.includes(from) || text11.includes(JSON.stringify(from).slice(1, -1)))) continue;
|
|
151398
151398
|
const kind = f2.endsWith(".json") ? ts7.ScriptKind.JSON : f2.endsWith("x") ? ts7.ScriptKind.TSX : ts7.ScriptKind.TS;
|
|
151399
|
-
const sf2 = ts7.createSourceFile(f2,
|
|
151399
|
+
const sf2 = ts7.createSourceFile(f2, text11, ts7.ScriptTarget.Latest, true, kind);
|
|
151400
151400
|
const edits = [];
|
|
151401
151401
|
const visit = (node) => {
|
|
151402
151402
|
if ((ts7.isStringLiteral(node) || ts7.isNoSubstitutionTemplateLiteral(node)) && isCopy(node, f2)) {
|
|
@@ -151409,14 +151409,14 @@ function sweepCopy(dir, pairs, dryRun) {
|
|
|
151409
151409
|
});
|
|
151410
151410
|
if (value !== node.text) {
|
|
151411
151411
|
const start = node.getStart(sf2);
|
|
151412
|
-
edits.push({ start, end: node.end, text: encode(value,
|
|
151412
|
+
edits.push({ start, end: node.end, text: encode(value, text11[start]) });
|
|
151413
151413
|
}
|
|
151414
151414
|
}
|
|
151415
151415
|
ts7.forEachChild(node, visit);
|
|
151416
151416
|
};
|
|
151417
151417
|
visit(sf2);
|
|
151418
151418
|
if (!edits.length) continue;
|
|
151419
|
-
let out2 =
|
|
151419
|
+
let out2 = text11;
|
|
151420
151420
|
for (const e2 of edits.sort((a2, b2) => b2.start - a2.start)) out2 = out2.slice(0, e2.start) + e2.text + out2.slice(e2.end);
|
|
151421
151421
|
const errors = syntaxErrors(f2, out2);
|
|
151422
151422
|
if (errors.length) throw new TrimRefusal(`the sweep would break ${f2} \u2014 nothing written: ${errors[0]}`);
|
|
@@ -151710,9 +151710,9 @@ function verticalsFromBook(path2) {
|
|
|
151710
151710
|
throw new Error(`no book.json / provisioning.overlay.json under ${path2} \u2014 run \`himi site analyze\` first, or pass --verticals`);
|
|
151711
151711
|
}
|
|
151712
151712
|
function recommendTemplates(input) {
|
|
151713
|
-
const
|
|
151714
|
-
const owner = OWNER_WORDS.test(
|
|
151715
|
-
const want = new Set(tokens(
|
|
151713
|
+
const text11 = input.text ?? "";
|
|
151714
|
+
const owner = OWNER_WORDS.test(text11);
|
|
151715
|
+
const want = new Set(tokens(text11));
|
|
151716
151716
|
const byName3 = /* @__PURE__ */ new Map();
|
|
151717
151717
|
for (const row of input.catalog) {
|
|
151718
151718
|
const reasons = [];
|
|
@@ -151726,7 +151726,7 @@ function recommendTemplates(input) {
|
|
|
151726
151726
|
reasons.push(`matches ${hit.map((h2) => `"${h2}"`).join(", ")}`);
|
|
151727
151727
|
}
|
|
151728
151728
|
}
|
|
151729
|
-
if (
|
|
151729
|
+
if (text11) {
|
|
151730
151730
|
if (owner === isOwner) {
|
|
151731
151731
|
score += 0.3;
|
|
151732
151732
|
reasons.push(owner ? "owner/operations app, and this is an owner template" : "customer-facing app, and this is a customer template");
|
|
@@ -153334,9 +153334,9 @@ function xmlAttr(value) {
|
|
|
153334
153334
|
return value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
153335
153335
|
}
|
|
153336
153336
|
function renderHealthPermissionCopyXml(copy, indent) {
|
|
153337
|
-
const
|
|
153338
|
-
if (!
|
|
153339
|
-
return [`${indent}<meta-data android:name="${HEALTH_PERMISSION_COPY_META}" android:value="${xmlAttr(
|
|
153337
|
+
const text11 = copy?.trim();
|
|
153338
|
+
if (!text11) return [];
|
|
153339
|
+
return [`${indent}<meta-data android:name="${HEALTH_PERMISSION_COPY_META}" android:value="${xmlAttr(text11)}" />`];
|
|
153340
153340
|
}
|
|
153341
153341
|
function renderModulesIosPackage(products, indent) {
|
|
153342
153342
|
return products.flatMap((p2) => {
|
|
@@ -153503,8 +153503,8 @@ function swiftFilesWithModuleMarkers(app) {
|
|
|
153503
153503
|
if (entry.isDirectory()) {
|
|
153504
153504
|
if (!entry.name.endsWith(".xcodeproj")) stack.push(path2);
|
|
153505
153505
|
} else if (entry.isFile() && entry.name.endsWith(".swift")) {
|
|
153506
|
-
const
|
|
153507
|
-
if (hasMarkers(
|
|
153506
|
+
const text11 = readFileSync64(path2, "utf8");
|
|
153507
|
+
if (hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_IMPORT) || hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_INSTALL)) out2.push(path2);
|
|
153508
153508
|
}
|
|
153509
153509
|
}
|
|
153510
153510
|
}
|
|
@@ -153539,8 +153539,8 @@ function kotlinBootSourcesUnder(root) {
|
|
|
153539
153539
|
}
|
|
153540
153540
|
return out2.sort();
|
|
153541
153541
|
}
|
|
153542
|
-
function stripComments2(
|
|
153543
|
-
return
|
|
153542
|
+
function stripComments2(text11) {
|
|
153543
|
+
return text11.replace(/\/\*[\s\S]*?\*\//g, (c2) => c2.replace(/[^\n]/g, " ")).replace(/\/\/[^\n]*/g, "");
|
|
153544
153544
|
}
|
|
153545
153545
|
function duplicateModuleInstalls(...texts) {
|
|
153546
153546
|
const calls = ["installLinkedModules", ...NATIVE_MODULES.flatMap((m2) => m2.ios ? [`${m2.ios.product}.install`] : [])];
|
|
@@ -153602,19 +153602,19 @@ function hostAppliesDeferredWidgetActions(app) {
|
|
|
153602
153602
|
}
|
|
153603
153603
|
return false;
|
|
153604
153604
|
}
|
|
153605
|
-
function countBeginMarkers(
|
|
153606
|
-
return
|
|
153605
|
+
function countBeginMarkers(text11, kind, label3) {
|
|
153606
|
+
return text11.split("\n").filter((l2) => isBegin(l2, kind, label3)).length;
|
|
153607
153607
|
}
|
|
153608
|
-
function countEndMarkers(
|
|
153609
|
-
return
|
|
153608
|
+
function countEndMarkers(text11, kind, label3) {
|
|
153609
|
+
return text11.split("\n").filter((l2) => isEnd(l2, kind, label3)).length;
|
|
153610
153610
|
}
|
|
153611
|
-
function hasMarkers(
|
|
153612
|
-
const lines =
|
|
153611
|
+
function hasMarkers(text11, kind, label3) {
|
|
153612
|
+
const lines = text11.split("\n");
|
|
153613
153613
|
return lines.some((l2) => isBegin(l2, kind, label3)) && lines.some((l2) => isEnd(l2, kind, label3));
|
|
153614
153614
|
}
|
|
153615
|
-
function assertSingleMarkerPair(
|
|
153616
|
-
const opens = countBeginMarkers(
|
|
153617
|
-
const closes = countEndMarkers(
|
|
153615
|
+
function assertSingleMarkerPair(text11, kind, label3, where = "the file") {
|
|
153616
|
+
const opens = countBeginMarkers(text11, kind, label3);
|
|
153617
|
+
const closes = countEndMarkers(text11, kind, label3);
|
|
153618
153618
|
if (opens > 1 || closes > 1) {
|
|
153619
153619
|
const which = opens > 1 ? `">>> ${label3}" opens ${opens} times` : `"<<< ${label3}" closes ${closes} times`;
|
|
153620
153620
|
throw new Error(
|
|
@@ -153622,9 +153622,9 @@ function assertSingleMarkerPair(text10, kind, label3, where = "the file") {
|
|
|
153622
153622
|
);
|
|
153623
153623
|
}
|
|
153624
153624
|
}
|
|
153625
|
-
function injectBlock(
|
|
153626
|
-
assertSingleMarkerPair(
|
|
153627
|
-
const lines =
|
|
153625
|
+
function injectBlock(text11, kind, label3, render, where = "the file") {
|
|
153626
|
+
assertSingleMarkerPair(text11, kind, label3, where);
|
|
153627
|
+
const lines = text11.split("\n");
|
|
153628
153628
|
const beginIdx = lines.findIndex((l2) => isBegin(l2, kind, label3));
|
|
153629
153629
|
const endIdx = lines.findIndex((l2) => isEnd(l2, kind, label3));
|
|
153630
153630
|
if (beginIdx === -1 || endIdx === -1 || endIdx < beginIdx) {
|
|
@@ -153664,8 +153664,8 @@ function applyToFile(path2, kind, label3, render, check) {
|
|
|
153664
153664
|
function assertModuleFlagsMarkers(paths) {
|
|
153665
153665
|
for (const path2 of paths) {
|
|
153666
153666
|
if (!existsSync54(path2)) continue;
|
|
153667
|
-
const
|
|
153668
|
-
if (hasMarkers(
|
|
153667
|
+
const text11 = readFileSync64(path2, "utf8");
|
|
153668
|
+
if (hasMarkers(text11, "yaml", LABEL_MODULES_IOS_LINK) && !hasMarkers(text11, "yaml", LABEL_MODULES_IOS_FLAGS)) {
|
|
153669
153669
|
throw new Error(`${path2} links modules (${LABEL_MODULES_IOS_LINK}) but has no ${LABEL_MODULES_IOS_FLAGS} block under its project-level settings:, so no module would install. Add the markers (see apps/_template).`);
|
|
153670
153670
|
}
|
|
153671
153671
|
}
|
|
@@ -153901,8 +153901,8 @@ function genNativeConfig(app, opts = {}) {
|
|
|
153901
153901
|
}
|
|
153902
153902
|
}
|
|
153903
153903
|
for (const swift of swiftFilesWithModuleMarkers(app)) {
|
|
153904
|
-
const
|
|
153905
|
-
if (!hasMarkers(
|
|
153904
|
+
const text11 = readFileSync64(swift, "utf8");
|
|
153905
|
+
if (!hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_IMPORT) || !hasMarkers(text11, "slash", LABEL_MODULES_SWIFT_INSTALL)) {
|
|
153906
153906
|
throw new Error(`${app}: ${swift} must carry both ${LABEL_MODULES_SWIFT_IMPORT} and ${LABEL_MODULES_SWIFT_INSTALL} markers`);
|
|
153907
153907
|
}
|
|
153908
153908
|
files.push(applyToFile(swift, "slash", LABEL_MODULES_SWIFT_IMPORT, renderModulesSwiftImport, check));
|
|
@@ -153911,8 +153911,8 @@ function genNativeConfig(app, opts = {}) {
|
|
|
153911
153911
|
files.push(...genCapabilityRegistrations(appDir(app), ids, check));
|
|
153912
153912
|
const rce = declaresRichContentEditor(configTs);
|
|
153913
153913
|
for (const yml of [iosYml, macosProjectYml(app)]) {
|
|
153914
|
-
const
|
|
153915
|
-
const r3 = applyToFile(yml, "yaml", LABEL_LOCALWEB, renderLocalWebYaml(resourcesDirOf(
|
|
153914
|
+
const text11 = existsSync54(yml) ? readFileSync64(yml, "utf8") : "";
|
|
153915
|
+
const r3 = applyToFile(yml, "yaml", LABEL_LOCALWEB, renderLocalWebYaml(resourcesDirOf(text11), rce), check);
|
|
153916
153916
|
if (existsSync54(yml)) assertLocalWebBlockLanded(app, rce, yml, r3.outcome);
|
|
153917
153917
|
files.push(r3);
|
|
153918
153918
|
}
|
|
@@ -154893,8 +154893,8 @@ function renderBase44Types(entities, app) {
|
|
|
154893
154893
|
for (const f2 of fields) body.push(` ${key2(f2.key)}${required3.has(f2.key) ? "" : "?"}: ${fieldType(f2)};`);
|
|
154894
154894
|
body.push("};", `export const ${name} = entities<${name}Row>(${JSON.stringify(physicalEntityName(e2, app))});`);
|
|
154895
154895
|
}
|
|
154896
|
-
const
|
|
154897
|
-
const types = ["Json", "JsonObject"].filter((t2) => new RegExp(`\\b${t2}\\b`).test(
|
|
154896
|
+
const text11 = body.join("\n");
|
|
154897
|
+
const types = ["Json", "JsonObject"].filter((t2) => new RegExp(`\\b${t2}\\b`).test(text11)).map((t2) => `type ${t2}`);
|
|
154898
154898
|
if (usable.length) L2.push(`import { ${["entities", ...types].join(", ")} } from "@himalaya/base44";`);
|
|
154899
154899
|
return [...L2, ...body].join("\n") + "\n";
|
|
154900
154900
|
}
|
|
@@ -154906,14 +154906,14 @@ async function declaredEntities(dir) {
|
|
|
154906
154906
|
async function writeBase44Types(dir, app) {
|
|
154907
154907
|
const list = await declaredEntities(dir);
|
|
154908
154908
|
if (!list?.length) throw new Base44TypesError("no_base44_entities", "config.ts declares no base44.entities \u2014 nothing to type. Declare them (or run `himi base44 adopt`) first.");
|
|
154909
|
-
const
|
|
154909
|
+
const text11 = renderBase44Types(list, app);
|
|
154910
154910
|
const path2 = join56(dir, BASE44_TYPES_PATH);
|
|
154911
|
-
const changed = !existsSync56(path2) || readFileSync66(path2, "utf8") !==
|
|
154911
|
+
const changed = !existsSync56(path2) || readFileSync66(path2, "utf8") !== text11;
|
|
154912
154912
|
if (changed) {
|
|
154913
154913
|
mkdirSync26(dirname32(path2), { recursive: true });
|
|
154914
|
-
writeFileSync22(path2,
|
|
154914
|
+
writeFileSync22(path2, text11);
|
|
154915
154915
|
}
|
|
154916
|
-
return { path: path2, changed, entities:
|
|
154916
|
+
return { path: path2, changed, entities: text11.split("\nexport const ").length - 1 };
|
|
154917
154917
|
}
|
|
154918
154918
|
async function base44TypesIssues(dir, app, strict) {
|
|
154919
154919
|
const path2 = join56(dir, BASE44_TYPES_PATH);
|
|
@@ -155871,8 +155871,8 @@ function isNoneEntry(entry) {
|
|
|
155871
155871
|
const head = entryHead(entry);
|
|
155872
155872
|
return NONE.test(entry) || head !== "" && NONE.test(head);
|
|
155873
155873
|
}
|
|
155874
|
-
function parseDataAccess(
|
|
155875
|
-
const body =
|
|
155874
|
+
function parseDataAccess(text11, from) {
|
|
155875
|
+
const body = text11.replace(/<!--[\s\S]*?(?:-->|$)/g, "");
|
|
155876
155876
|
const heading = new RegExp(`(?:^|\\n)##[ \\t]+${DATA_ACCESS_HEADING}\\b[^\\n]*([\\s\\S]*?)(?=\\n##[ \\t]|$)`, "i").exec(body);
|
|
155877
155877
|
if (!heading) return null;
|
|
155878
155878
|
const lines = heading[1].split("\n").map((l2) => l2.trim()).filter((l2) => l2.startsWith("|"));
|
|
@@ -155899,13 +155899,13 @@ function readDataAccess(dir) {
|
|
|
155899
155899
|
for (const name of ["SPEC.md", "MOBILE-UX.md"]) {
|
|
155900
155900
|
const p2 = join62(dir, name);
|
|
155901
155901
|
if (!existsSync61(p2)) continue;
|
|
155902
|
-
let
|
|
155902
|
+
let text11;
|
|
155903
155903
|
try {
|
|
155904
|
-
|
|
155904
|
+
text11 = readFileSync71(p2, "utf8");
|
|
155905
155905
|
} catch {
|
|
155906
155906
|
continue;
|
|
155907
155907
|
}
|
|
155908
|
-
const plan = parseDataAccess(
|
|
155908
|
+
const plan = parseDataAccess(text11, name);
|
|
155909
155909
|
if (plan) return plan;
|
|
155910
155910
|
}
|
|
155911
155911
|
return null;
|
|
@@ -156061,7 +156061,7 @@ function readTestConfig(dir) {
|
|
|
156061
156061
|
if (input !== void 0 && (!input || typeof input !== "object" || Array.isArray(input) || Object.values(input).some((v2) => typeof v2 !== "string"))) {
|
|
156062
156062
|
throw new Error(`${TEST_CONFIG_FILE}: journeys[${i2}].input must be an object of string values \u2014 the screen input a nav edge would send, e.g. { "id": "svc-0001" }`);
|
|
156063
156063
|
}
|
|
156064
|
-
if (!Array.isArray(journey.expectText) || !journey.expectText.length || journey.expectText.some((
|
|
156064
|
+
if (!Array.isArray(journey.expectText) || !journey.expectText.length || journey.expectText.some((text11) => typeof text11 !== "string" || !text11.trim())) {
|
|
156065
156065
|
throw new Error(`${TEST_CONFIG_FILE}: journeys[${i2}] needs non-empty expectText values that prove a visible result`);
|
|
156066
156066
|
}
|
|
156067
156067
|
});
|
|
@@ -157751,14 +157751,14 @@ import { join as join68 } from "node:path";
|
|
|
157751
157751
|
function mobileUxIssues(dir, strict) {
|
|
157752
157752
|
const file2 = join68(dir, "MOBILE-UX.md");
|
|
157753
157753
|
if (!existsSync65(file2)) return [];
|
|
157754
|
-
let
|
|
157754
|
+
let text11;
|
|
157755
157755
|
try {
|
|
157756
|
-
|
|
157756
|
+
text11 = readFileSync76(file2, "utf8");
|
|
157757
157757
|
} catch {
|
|
157758
157758
|
return [];
|
|
157759
157759
|
}
|
|
157760
|
-
if (!
|
|
157761
|
-
return mobileUxMarkerFindings(
|
|
157760
|
+
if (!text11) return [];
|
|
157761
|
+
return mobileUxMarkerFindings(text11, recordedRenderWidths(dir)).map((finding) => {
|
|
157762
157762
|
const scaffoldAdvisory = finding.code === "missing-width-evidence";
|
|
157763
157763
|
return {
|
|
157764
157764
|
screen: null,
|
|
@@ -159582,12 +159582,12 @@ async function runRemoteFunctionOperation(input) {
|
|
|
159582
159582
|
if (input.boCookie) headers2.cookie = input.boCookie;
|
|
159583
159583
|
if (input.previewToken) headers2["x-himalaya-preview-token"] = input.previewToken;
|
|
159584
159584
|
const response = await (input.fetchImpl ?? fetch)(url, { method, headers: headers2 });
|
|
159585
|
-
const
|
|
159585
|
+
const text11 = await response.text();
|
|
159586
159586
|
let body;
|
|
159587
159587
|
try {
|
|
159588
|
-
body = JSON.parse(
|
|
159588
|
+
body = JSON.parse(text11);
|
|
159589
159589
|
} catch {
|
|
159590
|
-
body =
|
|
159590
|
+
body = text11;
|
|
159591
159591
|
}
|
|
159592
159592
|
return { ok: response.ok, status: response.status, body };
|
|
159593
159593
|
}
|
|
@@ -163266,10 +163266,10 @@ async function hostedAuthUrl(req, visitorToken, fetchImpl = fetch) {
|
|
|
163266
163266
|
}
|
|
163267
163267
|
})
|
|
163268
163268
|
});
|
|
163269
|
-
const
|
|
163269
|
+
const text11 = await res.text();
|
|
163270
163270
|
let parsed = {};
|
|
163271
163271
|
try {
|
|
163272
|
-
parsed =
|
|
163272
|
+
parsed = text11 ? JSON.parse(text11) : {};
|
|
163273
163273
|
} catch {
|
|
163274
163274
|
}
|
|
163275
163275
|
const fullUrl = parsed.redirectSession?.fullUrl;
|
|
@@ -163289,10 +163289,10 @@ async function exchangeAuthCode(cfg, code, verifier, fetchImpl = fetch) {
|
|
|
163289
163289
|
redirectUri: cfg.redirectUri
|
|
163290
163290
|
})
|
|
163291
163291
|
});
|
|
163292
|
-
const
|
|
163292
|
+
const text11 = await res.text();
|
|
163293
163293
|
let parsed = {};
|
|
163294
163294
|
try {
|
|
163295
|
-
parsed =
|
|
163295
|
+
parsed = text11 ? JSON.parse(text11) : {};
|
|
163296
163296
|
} catch {
|
|
163297
163297
|
}
|
|
163298
163298
|
if (res.status !== 200 || !parsed.access_token) throw new Error(`token exchange failed (${res.status})`);
|
|
@@ -164828,11 +164828,11 @@ async function localizeConfigResponse(res, kind, header) {
|
|
|
164828
164828
|
header
|
|
164829
164829
|
)
|
|
164830
164830
|
};
|
|
164831
|
-
const
|
|
164831
|
+
const text11 = JSON.stringify(next);
|
|
164832
164832
|
const headers2 = new Headers(res.headers);
|
|
164833
164833
|
headers2.delete("etag");
|
|
164834
|
-
headers2.set("content-length", String(new TextEncoder().encode(
|
|
164835
|
-
return new Response(
|
|
164834
|
+
headers2.set("content-length", String(new TextEncoder().encode(text11).length));
|
|
164835
|
+
return new Response(text11, { status: 200, headers: headers2 });
|
|
164836
164836
|
}
|
|
164837
164837
|
function makeRunHandler(opts) {
|
|
164838
164838
|
const mount = opts.chrome === "app" ? "/app" : "/preview";
|
|
@@ -165041,8 +165041,8 @@ var init_node_adapter = __esm({
|
|
|
165041
165041
|
function authConfigOf(appConfig) {
|
|
165042
165042
|
if (!appConfig) return void 0;
|
|
165043
165043
|
try {
|
|
165044
|
-
const
|
|
165045
|
-
return JSON.parse(
|
|
165044
|
+
const text11 = typeof appConfig === "string" ? appConfig : new TextDecoder().decode(appConfig);
|
|
165045
|
+
return JSON.parse(text11)?.authConfig ?? void 0;
|
|
165046
165046
|
} catch {
|
|
165047
165047
|
return void 0;
|
|
165048
165048
|
}
|
|
@@ -165406,16 +165406,16 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165406
165406
|
const manifest = await store.getManifest(app);
|
|
165407
165407
|
if (!manifest) throw new Error(`no release manifest for ${app} under ${root}`);
|
|
165408
165408
|
const b64 = (b2) => b2 ? Buffer.from(b2).toString("base64") : void 0;
|
|
165409
|
-
const
|
|
165409
|
+
const text11 = (b2) => b2 ? new TextDecoder().decode(b2) : void 0;
|
|
165410
165410
|
const screens = {};
|
|
165411
165411
|
const docs = {};
|
|
165412
165412
|
const addDoc = async (hash2) => {
|
|
165413
165413
|
if (!hash2 || docs[hash2] !== void 0) return;
|
|
165414
|
-
const d2 =
|
|
165414
|
+
const d2 = text11(await store.getDoc?.(app, hash2) ?? null);
|
|
165415
165415
|
if (d2 !== void 0) docs[hash2] = d2;
|
|
165416
165416
|
};
|
|
165417
165417
|
for (const [id, meta] of Object.entries(manifest.screens ?? {})) {
|
|
165418
|
-
const s2 =
|
|
165418
|
+
const s2 = text11(await store.getScreen(app, id));
|
|
165419
165419
|
if (s2 !== void 0) screens[id] = s2;
|
|
165420
165420
|
await addDoc(meta.descriptorHash);
|
|
165421
165421
|
}
|
|
@@ -165436,10 +165436,10 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165436
165436
|
}
|
|
165437
165437
|
const widgets = {};
|
|
165438
165438
|
for (const id of Object.keys(manifest.widgets ?? {})) {
|
|
165439
|
-
const w2 =
|
|
165439
|
+
const w2 = text11(await store.getWidget?.(app, id) ?? null);
|
|
165440
165440
|
if (w2 !== void 0) widgets[id] = w2;
|
|
165441
165441
|
}
|
|
165442
|
-
const appConfig =
|
|
165442
|
+
const appConfig = text11(await store.getAppConfig(app));
|
|
165443
165443
|
const wixClientId = appConfigWixClientId(appConfig);
|
|
165444
165444
|
return {
|
|
165445
165445
|
app,
|
|
@@ -165449,7 +165449,7 @@ async function releasePayloadFromDir(root, app, header) {
|
|
|
165449
165449
|
docs,
|
|
165450
165450
|
assets,
|
|
165451
165451
|
widgets,
|
|
165452
|
-
tokens:
|
|
165452
|
+
tokens: text11(await store.getTokens(app)),
|
|
165453
165453
|
appConfig,
|
|
165454
165454
|
icon: b64(await store.getIcon?.(app) ?? null),
|
|
165455
165455
|
header,
|
|
@@ -165845,13 +165845,18 @@ function appleSaleRules(options = {}) {
|
|
|
165845
165845
|
return {
|
|
165846
165846
|
onlineProgram: ONLINE_PROGRAM_SALE_RULE,
|
|
165847
165847
|
...(options.storesAppleSalesEnabled ?? STORES_APPLE_SALES_ENABLED) || (options.storesItemPaymentEnabled ?? STORES_ITEM_PAYMENT_ENABLED) ? { storesProduct: STORES_PRODUCT_SALE_RULE } : {},
|
|
165848
|
-
...options.pricingPlanAppleSalesEnabled ?? PRICING_PLAN_APPLE_SALES_ENABLED ? { pricingPlan: PRICING_PLAN_SALE_RULE } : {}
|
|
165848
|
+
...options.pricingPlanAppleSalesEnabled ?? PRICING_PLAN_APPLE_SALES_ENABLED ? { pricingPlan: PRICING_PLAN_SALE_RULE } : {},
|
|
165849
|
+
...options.bookingsAppleSalesEnabled ?? BOOKINGS_APPLE_SALES_ENABLED ? { bookingsService: ATTENDANCE_SALE_RULE } : {},
|
|
165850
|
+
...options.eventsAppleSalesEnabled ?? EVENTS_APPLE_SALES_ENABLED ? { eventsTicket: ATTENDANCE_SALE_RULE } : {}
|
|
165849
165851
|
};
|
|
165850
165852
|
}
|
|
165851
|
-
var HIMALAYA_SERVE_IAP_ROUTE, STORES_ITEM_PAYMENT_ENABLED, STORES_APPLE_SALES_ENABLED, STORES_PRODUCT_SALE_RULE, ONLINE_PROGRAM_SALE_RULE, PRICING_PLAN_APPLE_SALES_ENABLED, PRICING_PLAN_SALE_RULE, APPLE_SALE_RULES;
|
|
165853
|
+
var HIMALAYA_SERVE_IAP_ROUTE, BOOKINGS_APPLE_SALES_ENABLED, EVENTS_APPLE_SALES_ENABLED, ATTENDANCE_SALE_RULE, STORES_ITEM_PAYMENT_ENABLED, STORES_APPLE_SALES_ENABLED, STORES_PRODUCT_SALE_RULE, ONLINE_PROGRAM_SALE_RULE, PRICING_PLAN_APPLE_SALES_ENABLED, PRICING_PLAN_SALE_RULE, APPLE_SALE_RULES, APPLE_PROVISIONING_RULES;
|
|
165852
165854
|
var init_wix_payments_contract = __esm({
|
|
165853
165855
|
"../../core/sdk/iap/src/wix-payments-contract.ts"() {
|
|
165854
165856
|
HIMALAYA_SERVE_IAP_ROUTE = { prefix: "/himalaya-serve/v1/iap" };
|
|
165857
|
+
BOOKINGS_APPLE_SALES_ENABLED = false;
|
|
165858
|
+
EVENTS_APPLE_SALES_ENABLED = false;
|
|
165859
|
+
ATTENDANCE_SALE_RULE = { appProductId: (id) => id, productType: "CONSUMABLE" };
|
|
165855
165860
|
STORES_ITEM_PAYMENT_ENABLED = false;
|
|
165856
165861
|
STORES_APPLE_SALES_ENABLED = true;
|
|
165857
165862
|
STORES_PRODUCT_SALE_RULE = { appProductId: (id) => id, productType: "NON_CONSUMABLE" };
|
|
@@ -165859,6 +165864,11 @@ var init_wix_payments_contract = __esm({
|
|
|
165859
165864
|
PRICING_PLAN_APPLE_SALES_ENABLED = true;
|
|
165860
165865
|
PRICING_PLAN_SALE_RULE = { appProductId: (id) => id, productType: "NON_CONSUMABLE" };
|
|
165861
165866
|
APPLE_SALE_RULES = appleSaleRules();
|
|
165867
|
+
APPLE_PROVISIONING_RULES = {
|
|
165868
|
+
...APPLE_SALE_RULES,
|
|
165869
|
+
bookingsService: ATTENDANCE_SALE_RULE,
|
|
165870
|
+
eventsTicket: ATTENDANCE_SALE_RULE
|
|
165871
|
+
};
|
|
165862
165872
|
}
|
|
165863
165873
|
});
|
|
165864
165874
|
|
|
@@ -165977,11 +165987,11 @@ async function registerBundleId(opts) {
|
|
|
165977
165987
|
const j2 = await res.json();
|
|
165978
165988
|
return { status: "created", id: j2.data?.id };
|
|
165979
165989
|
}
|
|
165980
|
-
const
|
|
165981
|
-
if (res.status === 409 || /already (exists|in use)|duplicate|ENTITY_ERROR.*identifier/i.test(
|
|
165990
|
+
const text11 = await res.text();
|
|
165991
|
+
if (res.status === 409 || /already (exists|in use)|duplicate|ENTITY_ERROR.*identifier/i.test(text11)) {
|
|
165982
165992
|
return { status: "exists" };
|
|
165983
165993
|
}
|
|
165984
|
-
throw new Error(`POST /v1/bundleIds \u2192 ${res.status}: ${
|
|
165994
|
+
throw new Error(`POST /v1/bundleIds \u2192 ${res.status}: ${text11.slice(0, 300)}`);
|
|
165985
165995
|
}
|
|
165986
165996
|
async function main() {
|
|
165987
165997
|
const [app, ...rest] = process.argv.slice(2);
|
|
@@ -166234,9 +166244,9 @@ var init_iap_client = __esm({
|
|
|
166234
166244
|
retryAfterMs(response.headers.get("retry-after"), this.now())
|
|
166235
166245
|
);
|
|
166236
166246
|
}
|
|
166237
|
-
scrub(
|
|
166247
|
+
scrub(text11) {
|
|
166238
166248
|
const { keyId, issuerId, privateKeyPem } = this.options.key;
|
|
166239
|
-
let out2 =
|
|
166249
|
+
let out2 = text11;
|
|
166240
166250
|
for (const literal of [this.token?.value, privateKeyPem, issuerId, keyId]) {
|
|
166241
166251
|
if (literal) out2 = out2.split(literal).join("[redacted]");
|
|
166242
166252
|
}
|
|
@@ -166406,19 +166416,19 @@ var init_iap_api = __esm({
|
|
|
166406
166416
|
});
|
|
166407
166417
|
return toVersion(requireSingle(doc, "in-app purchase version"));
|
|
166408
166418
|
}
|
|
166409
|
-
async createLocalization(versionId,
|
|
166419
|
+
async createLocalization(versionId, text11) {
|
|
166410
166420
|
const doc = await this.client.post("/v2/inAppPurchaseLocalizations", {
|
|
166411
166421
|
data: {
|
|
166412
166422
|
type: "inAppPurchaseLocalizations",
|
|
166413
|
-
attributes: { locale:
|
|
166423
|
+
attributes: { locale: text11.locale, name: text11.name, description: text11.description },
|
|
166414
166424
|
relationships: { version: related("inAppPurchaseVersions", versionId) }
|
|
166415
166425
|
}
|
|
166416
166426
|
});
|
|
166417
166427
|
return toLocalization(requireSingle(doc, "localization"));
|
|
166418
166428
|
}
|
|
166419
|
-
async updateLocalization(localizationId,
|
|
166429
|
+
async updateLocalization(localizationId, text11) {
|
|
166420
166430
|
const doc = await this.client.patch(`/v2/inAppPurchaseLocalizations/${enc(localizationId)}`, {
|
|
166421
|
-
data: { type: "inAppPurchaseLocalizations", id: localizationId, attributes: { name:
|
|
166431
|
+
data: { type: "inAppPurchaseLocalizations", id: localizationId, attributes: { name: text11.name, description: text11.description } }
|
|
166422
166432
|
});
|
|
166423
166433
|
return toLocalization(requireSingle(doc, "localization"));
|
|
166424
166434
|
}
|
|
@@ -166522,7 +166532,7 @@ function createCatalogIapApi(client2, appId2, uploadMedia) {
|
|
|
166522
166532
|
const points = async (id, territory) => (await client2.listResources(appId2, "PRICE_POINT", { inAppPurchaseId: id, territory })).resources.map((point) => ({ id: point.id, customerPrice: text8(point, "customerPrice") }));
|
|
166523
166533
|
const desired = (item) => ({ localizations: item.localizations, price: selection(item.price), territories: item.territories });
|
|
166524
166534
|
const mapping = async (item) => {
|
|
166525
|
-
const rule = item.wix && !item.unlocks?.length ?
|
|
166535
|
+
const rule = item.wix && !item.unlocks?.length ? APPLE_PROVISIONING_RULES[item.wix.entityType] : void 0;
|
|
166526
166536
|
if (!rule || !item.wix || rule.productType !== appleProductType(item.type)) throw new IapCatalogError("mapping_unsupported", `No supported Wix mapping identity for ${item.productId}`);
|
|
166527
166537
|
const expected = rule.appProductId(item.wix.entityId);
|
|
166528
166538
|
const catalog3 = await client2.listProducts(appId2);
|
|
@@ -166786,8 +166796,8 @@ function reportDuplicateMappings(reader, items) {
|
|
|
166786
166796
|
reader.duplicates(items.flatMap((i2) => [i2.entitlement, ...(i2.unlocks ?? []).map((u2) => u2.entitlement)]), "items", "entitlement");
|
|
166787
166797
|
reader.duplicates(items.map((i2) => i2.referenceName), "items", "referenceName");
|
|
166788
166798
|
}
|
|
166789
|
-
function looksLikeCredential(
|
|
166790
|
-
return CREDENTIAL_SHAPES.some((shape) => shape.test(
|
|
166799
|
+
function looksLikeCredential(text11) {
|
|
166800
|
+
return CREDENTIAL_SHAPES.some((shape) => shape.test(text11));
|
|
166791
166801
|
}
|
|
166792
166802
|
function reportCredentialMaterial(reader, value, path2) {
|
|
166793
166803
|
if (typeof value === "string") {
|
|
@@ -166800,15 +166810,15 @@ function reportCredentialMaterial(reader, value, path2) {
|
|
|
166800
166810
|
for (const [key3, v2] of Object.entries(value)) reportCredentialMaterial(reader, v2, childPath(path2, key3));
|
|
166801
166811
|
}
|
|
166802
166812
|
}
|
|
166803
|
-
function parseJson3(
|
|
166813
|
+
function parseJson3(text11, label3) {
|
|
166804
166814
|
try {
|
|
166805
|
-
return JSON.parse(
|
|
166815
|
+
return JSON.parse(text11);
|
|
166806
166816
|
} catch (e2) {
|
|
166807
166817
|
throw new Error(`${label3} is not valid JSON: ${e2.message}`);
|
|
166808
166818
|
}
|
|
166809
166819
|
}
|
|
166810
|
-
function parseIapManifest(
|
|
166811
|
-
const doc = parseJson3(
|
|
166820
|
+
function parseIapManifest(text11, label3) {
|
|
166821
|
+
const doc = parseJson3(text11, label3);
|
|
166812
166822
|
const reader = new ManifestReader();
|
|
166813
166823
|
const obj5 = reader.object(doc, "", MANIFEST_KEYS);
|
|
166814
166824
|
if (obj5.manifestVersion !== 1) reader.problems.push("manifestVersion must be 1");
|
|
@@ -167758,9 +167768,9 @@ async function ensure(spec, sleep) {
|
|
|
167758
167768
|
}
|
|
167759
167769
|
}
|
|
167760
167770
|
function textFor(item, locale) {
|
|
167761
|
-
const
|
|
167762
|
-
if (!
|
|
167763
|
-
return
|
|
167771
|
+
const text11 = item.localizations.find((l2) => l2.locale === locale);
|
|
167772
|
+
if (!text11) throw new Error(`no ${locale} localization in the manifest for ${item.productId}`);
|
|
167773
|
+
return text11;
|
|
167764
167774
|
}
|
|
167765
167775
|
async function findProduct(api2, appId2, productId) {
|
|
167766
167776
|
return (await api2.listProducts(appId2)).find((p2) => p2.productId === productId);
|
|
@@ -167819,14 +167829,14 @@ async function deleteLeftoverScreenshot(context, resourceId) {
|
|
|
167819
167829
|
}
|
|
167820
167830
|
async function upsertManagedLocalization(run2, locale, context) {
|
|
167821
167831
|
const resourceId = required(run2.resourceId, "the product id");
|
|
167822
|
-
const
|
|
167832
|
+
const text11 = textFor(run2.item, locale);
|
|
167823
167833
|
const { api: api2, sleep } = context;
|
|
167824
167834
|
const find2 = async () => {
|
|
167825
167835
|
const version5 = await findDraft(api2, resourceId);
|
|
167826
|
-
const localization2 = version5 && await findLocalization(api2, version5.id, locale,
|
|
167836
|
+
const localization2 = version5 && await findLocalization(api2, version5.id, locale, text11);
|
|
167827
167837
|
return version5 && localization2 ? { version: version5, localization: localization2, outcome: "ALREADY_APPLIED" } : void 0;
|
|
167828
167838
|
};
|
|
167829
|
-
const { value, state } = await ensure({ write: () => api2.managed.upsertLocalization(resourceId,
|
|
167839
|
+
const { value, state } = await ensure({ write: () => api2.managed.upsertLocalization(resourceId, text11), find: find2 }, sleep);
|
|
167830
167840
|
run2.versionId = value.version.id;
|
|
167831
167841
|
return { state: value.outcome === "ALREADY_APPLIED" ? "reconciled" : state, resourceId: value.localization.id };
|
|
167832
167842
|
}
|
|
@@ -167851,16 +167861,16 @@ function operationRunners(context, manifest) {
|
|
|
167851
167861
|
createLocalization: async (run2, op) => {
|
|
167852
167862
|
if (api2.managed) return upsertManagedLocalization(run2, op.locale, context);
|
|
167853
167863
|
const versionId = required(run2.versionId, "the draft version");
|
|
167854
|
-
const
|
|
167855
|
-
const { value, state } = await ensure({ write: () => api2.createLocalization(versionId,
|
|
167864
|
+
const text11 = textFor(run2.item, op.locale);
|
|
167865
|
+
const { value, state } = await ensure({ write: () => api2.createLocalization(versionId, text11), find: () => findLocalization(api2, versionId, text11.locale) }, sleep);
|
|
167856
167866
|
return { state, resourceId: value.id };
|
|
167857
167867
|
},
|
|
167858
167868
|
updateLocalization: async (run2, op) => {
|
|
167859
167869
|
if (api2.managed) return upsertManagedLocalization(run2, op.locale, context);
|
|
167860
167870
|
const versionId = required(run2.versionId, "the draft version");
|
|
167861
|
-
const
|
|
167862
|
-
const localizationId = required(run2.localizations.find((l2) => l2.locale ===
|
|
167863
|
-
const { value, state } = await ensure({ write: () => api2.updateLocalization(localizationId,
|
|
167871
|
+
const text11 = textFor(run2.item, op.locale);
|
|
167872
|
+
const localizationId = required(run2.localizations.find((l2) => l2.locale === text11.locale)?.id, `the ${text11.locale} localization`);
|
|
167873
|
+
const { value, state } = await ensure({ write: () => api2.updateLocalization(localizationId, text11), find: () => findLocalization(api2, versionId, text11.locale, text11) }, sleep);
|
|
167864
167874
|
return { state, resourceId: value.id };
|
|
167865
167875
|
},
|
|
167866
167876
|
setPrice: async (run2) => {
|
|
@@ -168125,10 +168135,10 @@ function profilePath(name, home = homedir11()) {
|
|
|
168125
168135
|
}
|
|
168126
168136
|
return join93(credentialsDir(home), `${name}.json`);
|
|
168127
168137
|
}
|
|
168128
|
-
function parseProfile(
|
|
168138
|
+
function parseProfile(text11, label3) {
|
|
168129
168139
|
let doc;
|
|
168130
168140
|
try {
|
|
168131
|
-
doc = JSON.parse(
|
|
168141
|
+
doc = JSON.parse(text11);
|
|
168132
168142
|
} catch (e2) {
|
|
168133
168143
|
throw new Error(`${label3} is not valid JSON: ${e2.message}`);
|
|
168134
168144
|
}
|
|
@@ -168290,9 +168300,9 @@ var init_iap_credentials = __esm({
|
|
|
168290
168300
|
|
|
168291
168301
|
// ../store-release/iap-draft.ts
|
|
168292
168302
|
import { createHash as createHash46 } from "node:crypto";
|
|
168293
|
-
function fit(
|
|
168294
|
-
const chars = [...
|
|
168295
|
-
return chars.length <= max ?
|
|
168303
|
+
function fit(text11, max) {
|
|
168304
|
+
const chars = [...text11];
|
|
168305
|
+
return chars.length <= max ? text11 : `${chars.slice(0, max - 1).join("").trimEnd()}${ELLIPSIS}`;
|
|
168296
168306
|
}
|
|
168297
168307
|
function plainText2(html) {
|
|
168298
168308
|
return html.replace(/<[^>]*>/g, " ").replace(/&(amp|nbsp|lt|gt|quot|#39);/g, (entity) => ENTITIES[entity]).replace(/\s+/g, " ").trim();
|
|
@@ -168342,7 +168352,7 @@ function perItemProduct(item, options, names2) {
|
|
|
168342
168352
|
classification: "digital",
|
|
168343
168353
|
entitlement: entityKey(item.source, item.id),
|
|
168344
168354
|
productId: productIdFor(options.target.bundleId, SOURCE_SLUGS[item.source], item.id),
|
|
168345
|
-
type: "nonConsumable",
|
|
168355
|
+
type: repeatable(item) ? "consumable" : "nonConsumable",
|
|
168346
168356
|
referenceName: names2.claim(name, item.id),
|
|
168347
168357
|
localizations: [{ locale: options.locale, name: displayName(name), description: fit(plainDescription || `Unlock ${name}`, APPLE_LIMITS.description) }],
|
|
168348
168358
|
price: priceFor(item.price.amount, options),
|
|
@@ -168418,19 +168428,22 @@ function draftManifest(catalog3, options) {
|
|
|
168418
168428
|
else toDraft.push(item);
|
|
168419
168429
|
}
|
|
168420
168430
|
}
|
|
168421
|
-
const
|
|
168431
|
+
const perItem = toDraft.filter((item) => options.mode !== "tiers" || repeatable(item));
|
|
168432
|
+
const tiered = toDraft.filter((item) => options.mode === "tiers" && !repeatable(item));
|
|
168433
|
+
const drafted = [...perItem.map((item) => perItemProduct(item, options, names2)), ...draftTiers(tiered, options, names2, existingItems)];
|
|
168422
168434
|
const items = [...existingItems, ...drafted];
|
|
168423
168435
|
const newlyMapped = toDraft.length;
|
|
168424
168436
|
if (!items.length) return { skipped, kept, newlyMapped };
|
|
168425
168437
|
const manifest = { manifestVersion: 1, target: options.target, items };
|
|
168426
168438
|
return { manifest: parseIapManifest(JSON.stringify(manifest), "the drafted manifest"), skipped, kept, newlyMapped };
|
|
168427
168439
|
}
|
|
168428
|
-
var SOURCE_SLUGS, SKIP_REASONS, TIER_DESCRIPTION, ELLIPSIS, entityKey, sha2, ENTITIES, MAX_SUFFIX, ReferenceNames, nameOf, tierProductId;
|
|
168440
|
+
var SOURCE_SLUGS, repeatable, SKIP_REASONS, TIER_DESCRIPTION, ELLIPSIS, entityKey, sha2, ENTITIES, MAX_SUFFIX, ReferenceNames, nameOf, tierProductId;
|
|
168429
168441
|
var init_iap_draft = __esm({
|
|
168430
168442
|
"../store-release/iap-draft.ts"() {
|
|
168431
168443
|
init_iap_manifest();
|
|
168432
168444
|
init_iap_pricing();
|
|
168433
|
-
SOURCE_SLUGS = { storesProduct: "product", onlineProgram: "program", pricingPlan: "plan" };
|
|
168445
|
+
SOURCE_SLUGS = { storesProduct: "product", onlineProgram: "program", pricingPlan: "plan", bookingsService: "booking", eventsTicket: "ticket" };
|
|
168446
|
+
repeatable = (item) => item.source === "bookingsService" || item.source === "eventsTicket";
|
|
168434
168447
|
SKIP_REASONS = {
|
|
168435
168448
|
physical: "physical goods are never sold through in-app purchase",
|
|
168436
168449
|
subscription: "a recurring plan needs an App Store subscription, which this version does not register",
|
|
@@ -168439,7 +168452,7 @@ var init_iap_draft = __esm({
|
|
|
168439
168452
|
TIER_DESCRIPTION = "Unlocks one item in the app";
|
|
168440
168453
|
ELLIPSIS = "\u2026";
|
|
168441
168454
|
entityKey = (entityType, entityId) => `${entityType}:${entityId}`;
|
|
168442
|
-
sha2 = (
|
|
168455
|
+
sha2 = (text11) => createHash46("sha256").update(text11).digest("hex");
|
|
168443
168456
|
ENTITIES = { "&": "&", " ": " ", "<": "<", ">": ">", """: '"', "'": "'" };
|
|
168444
168457
|
MAX_SUFFIX = 24;
|
|
168445
168458
|
ReferenceNames = class {
|
|
@@ -168889,14 +168902,104 @@ var init_iap_config_edit = __esm({
|
|
|
168889
168902
|
}
|
|
168890
168903
|
});
|
|
168891
168904
|
|
|
168905
|
+
// ../../core/sdk/iap/src/attendance-classifier.ts
|
|
168906
|
+
function classifyForApple(item, currency) {
|
|
168907
|
+
if (item.hidden !== false || item.attendance === "hybrid") return "decide";
|
|
168908
|
+
if (item.kind === "bookingsService") return bookingRoute(item, currency);
|
|
168909
|
+
return ticketRoute(item, currency);
|
|
168910
|
+
}
|
|
168911
|
+
function bookingRoute(item, currency) {
|
|
168912
|
+
if (item.onlineBooking !== true) return "decide";
|
|
168913
|
+
if (item.conferencing === false && item.locations?.length && item.locations.every((type) => type === "BUSINESS" || type === "CUSTOMER" || type === "CUSTOM")) {
|
|
168914
|
+
return item.attendance === "online" ? "decide" : "wixPayments";
|
|
168915
|
+
}
|
|
168916
|
+
if (item.conferencing !== true || item.attendance === "physical") return "decide";
|
|
168917
|
+
if (item.attendance !== "online" && (!item.locations || item.locations.length > 0)) return "decide";
|
|
168918
|
+
if (item.type === "APPOINTMENT") {
|
|
168919
|
+
return item.capacity === 1 && item.maxParticipantsPerBooking === 1 ? "wixPayments" : "decide";
|
|
168920
|
+
}
|
|
168921
|
+
if (item.type !== "CLASS" && item.type !== "COURSE" || !item.capacity || item.capacity <= 1) return "decide";
|
|
168922
|
+
if (item.priceType === "NO_FEE" || zeroPrice(item.amount)) return "wixPayments";
|
|
168923
|
+
if (item.onlinePayment !== true || item.deposit !== false || item.priceType !== "FIXED") return "decide";
|
|
168924
|
+
return fixedPriceRoute(item, currency);
|
|
168925
|
+
}
|
|
168926
|
+
function ticketRoute(item, currency) {
|
|
168927
|
+
if (item.location === "VENUE") return item.attendance === "online" ? "decide" : "wixPayments";
|
|
168928
|
+
if (item.location !== "ONLINE" || item.attendance === "physical" || item.registration !== "TICKETING") return "decide";
|
|
168929
|
+
if (item.eventStatus !== "UPCOMING" && item.eventStatus !== "STARTED") return "decide";
|
|
168930
|
+
if (item.saleStatus !== "SALE_STARTED") return "decide";
|
|
168931
|
+
if (zeroPrice(item.amount)) return "wixPayments";
|
|
168932
|
+
return item.priceType === "STANDARD" ? fixedPriceRoute(item, currency) : "decide";
|
|
168933
|
+
}
|
|
168934
|
+
function fixedPriceRoute(item, currency) {
|
|
168935
|
+
const amount = item.amount;
|
|
168936
|
+
return typeof amount === "string" && /^\d+(?:\.\d+)?$/.test(amount) && Number.isFinite(Number(amount)) && Number(amount) > 0 && /^[A-Z]{3}$/.test(currency) && item.currency === currency ? "appleIap" : "decide";
|
|
168937
|
+
}
|
|
168938
|
+
function bookingAttendanceOf(raw) {
|
|
168939
|
+
const s2 = object7(raw);
|
|
168940
|
+
const payment = object7(s2.payment);
|
|
168941
|
+
const fixed = object7(payment.fixed);
|
|
168942
|
+
const price = object7(fixed.price);
|
|
168943
|
+
const options = object7(payment.options);
|
|
168944
|
+
const policy = object7(object7(s2.bookingPolicy).participantsPolicy);
|
|
168945
|
+
return {
|
|
168946
|
+
kind: "bookingsService",
|
|
168947
|
+
type: text9(s2.type),
|
|
168948
|
+
capacity: numeric(s2.defaultCapacity),
|
|
168949
|
+
maxParticipantsPerBooking: policy.enabled === true ? numeric(policy.maxParticipantsPerBooking) : void 0,
|
|
168950
|
+
hidden: boolean2(s2.hidden),
|
|
168951
|
+
conferencing: boolean2(object7(s2.conferencing).enabled),
|
|
168952
|
+
locations: Array.isArray(s2.locations) ? s2.locations.map((l2) => text9(object7(l2).type) ?? "UNKNOWN") : void 0,
|
|
168953
|
+
onlineBooking: boolean2(object7(s2.onlineBooking).enabled),
|
|
168954
|
+
onlinePayment: boolean2(options.online),
|
|
168955
|
+
deposit: options.deposit === true || fixed.deposit !== void 0,
|
|
168956
|
+
priceType: text9(payment.rateType),
|
|
168957
|
+
amount: text9(price.value),
|
|
168958
|
+
currency: text9(price.currency)
|
|
168959
|
+
};
|
|
168960
|
+
}
|
|
168961
|
+
function ticketAttendanceOf(event, definition) {
|
|
168962
|
+
const e2 = object7(event);
|
|
168963
|
+
const t2 = object7(definition);
|
|
168964
|
+
const pricing = object7(t2.pricingMethod);
|
|
168965
|
+
const price = object7(pricing.fixedPrice);
|
|
168966
|
+
const registration = object7(e2.registration);
|
|
168967
|
+
const type = text9(registration.type) ?? text9(registration.initialType) ?? text9(e2.eventType);
|
|
168968
|
+
const status = text9(e2.status) ?? text9(e2.eventStatus);
|
|
168969
|
+
return {
|
|
168970
|
+
kind: "eventsTicket",
|
|
168971
|
+
location: text9(object7(e2.location).type),
|
|
168972
|
+
registration: type === "TICKETS" || type === "RSVP_AND_TICKETS" ? "TICKETING" : type,
|
|
168973
|
+
eventStatus: status === "SCHEDULED" ? "UPCOMING" : status,
|
|
168974
|
+
saleStatus: text9(t2.saleStatus),
|
|
168975
|
+
hidden: boolean2(t2.hidden),
|
|
168976
|
+
priceType: text9(pricing.pricingType),
|
|
168977
|
+
amount: text9(price.value),
|
|
168978
|
+
currency: text9(price.currency)
|
|
168979
|
+
};
|
|
168980
|
+
}
|
|
168981
|
+
function object7(value) {
|
|
168982
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
168983
|
+
}
|
|
168984
|
+
var text9, numeric, boolean2, zeroPrice;
|
|
168985
|
+
var init_attendance_classifier = __esm({
|
|
168986
|
+
"../../core/sdk/iap/src/attendance-classifier.ts"() {
|
|
168987
|
+
init_wix_payments_contract();
|
|
168988
|
+
text9 = (value) => typeof value === "string" ? value : void 0;
|
|
168989
|
+
numeric = (value) => typeof value === "number" ? value : void 0;
|
|
168990
|
+
boolean2 = (value) => typeof value === "boolean" ? value : void 0;
|
|
168991
|
+
zeroPrice = (value) => typeof value === "string" && /^0+(?:\.0+)?$/.test(value);
|
|
168992
|
+
}
|
|
168993
|
+
});
|
|
168994
|
+
|
|
168892
168995
|
// src/store-iap-catalog.ts
|
|
168893
168996
|
function amountText(value) {
|
|
168894
168997
|
if (typeof value === "number" && Number.isFinite(value)) return String(value);
|
|
168895
168998
|
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
168896
168999
|
}
|
|
168897
169000
|
function priceOf(amount, currency) {
|
|
168898
|
-
const
|
|
168899
|
-
return
|
|
169001
|
+
const text11 = amountText(amount);
|
|
169002
|
+
return text11 && typeof currency === "string" && currency ? { amount: text11, currency } : void 0;
|
|
168900
169003
|
}
|
|
168901
169004
|
function catalogItem(fields) {
|
|
168902
169005
|
return Object.fromEntries(Object.entries(fields).filter(([, v2]) => v2 !== void 0 && v2 !== "" && v2 !== false));
|
|
@@ -169034,18 +169137,65 @@ async function readOneTimeUnlimitedPlanIds(wix) {
|
|
|
169034
169137
|
}
|
|
169035
169138
|
async function readWixCatalog(wix) {
|
|
169036
169139
|
const notes = [];
|
|
169037
|
-
const items = [...await readStores(wix, notes), ...await readPrograms(wix, notes), ...await readPlans(wix, notes)];
|
|
169038
|
-
notes.push(NEVER_DRAFTED_NOTE);
|
|
169140
|
+
const items = [...await readStores(wix, notes), ...await readPrograms(wix, notes), ...await readPlans(wix, notes), ...await readAttendance(wix, notes)];
|
|
169039
169141
|
return { items, notes };
|
|
169040
169142
|
}
|
|
169041
|
-
|
|
169143
|
+
async function attendanceRows(wix, path2, key3, extra = {}) {
|
|
169144
|
+
return allByOffset(async (offset) => {
|
|
169145
|
+
const { query = {}, ...fields } = extra;
|
|
169146
|
+
const res = await wix("POST", path2, { ...fields, query: { ...query, paging: { limit: PAGE4, offset } } });
|
|
169147
|
+
return { rows: res[key3] ?? [], total: res.pagingMetadata?.total ?? res.metadata?.total };
|
|
169148
|
+
}, path2);
|
|
169149
|
+
}
|
|
169150
|
+
function attendanceKind(item) {
|
|
169151
|
+
const route = classifyForApple(item, item.currency ?? "");
|
|
169152
|
+
return route === "appleIap" ? "digital" : route === "wixPayments" ? "physical" : "unknown";
|
|
169153
|
+
}
|
|
169154
|
+
async function readAttendance(wix, notes) {
|
|
169155
|
+
let services = [];
|
|
169156
|
+
let events = [];
|
|
169157
|
+
try {
|
|
169158
|
+
services = await attendanceRows(wix, "/bookings/v2/services/query", "services");
|
|
169159
|
+
} catch (e2) {
|
|
169160
|
+
if (isNotInstalled2(e2)) notInstalled(notes, "Wix Bookings");
|
|
169161
|
+
else throw e2;
|
|
169162
|
+
}
|
|
169163
|
+
try {
|
|
169164
|
+
events = await attendanceRows(wix, "/events/v3/events/query", "events", { fields: ["REGISTRATION", "DETAILS"] });
|
|
169165
|
+
} catch (e2) {
|
|
169166
|
+
if (isNotInstalled2(e2)) notInstalled(notes, "Wix Events");
|
|
169167
|
+
else throw e2;
|
|
169168
|
+
}
|
|
169169
|
+
const tickets = await mapLimit(events.filter((e2) => ticketAttendanceOf(e2, {}).registration === "TICKETING"), PROGRAM_READ_CONCURRENCY, async (event) => {
|
|
169170
|
+
const definitions2 = await attendanceRows(wix, "/events/v3/ticket-definitions/query", "ticketDefinitions", { query: { filter: { eventId: { $eq: event.id } } } });
|
|
169171
|
+
return definitions2.map((t2) => catalogItem({
|
|
169172
|
+
source: "eventsTicket",
|
|
169173
|
+
id: t2.id,
|
|
169174
|
+
name: t2.name || t2.id,
|
|
169175
|
+
description: t2.description,
|
|
169176
|
+
kind: attendanceKind(ticketAttendanceOf(event, t2)),
|
|
169177
|
+
hidden: t2.hidden === true,
|
|
169178
|
+
price: priceOf(t2.pricingMethod?.fixedPrice?.value, t2.pricingMethod?.fixedPrice?.currency)
|
|
169179
|
+
}));
|
|
169180
|
+
});
|
|
169181
|
+
return [...services.map((s2) => catalogItem({
|
|
169182
|
+
source: "bookingsService",
|
|
169183
|
+
id: s2.id,
|
|
169184
|
+
name: s2.name || s2.id,
|
|
169185
|
+
description: s2.description,
|
|
169186
|
+
kind: attendanceKind(bookingAttendanceOf(s2)),
|
|
169187
|
+
hidden: s2.hidden === true,
|
|
169188
|
+
price: priceOf(s2.payment?.fixed?.price?.value, s2.payment?.fixed?.price?.currency)
|
|
169189
|
+
})), ...tickets.flat()];
|
|
169190
|
+
}
|
|
169191
|
+
var PAGE4, MAX_PAGES3, PROGRAM_READ_CONCURRENCY, isNotInstalled2, isWrongCatalogVersion;
|
|
169042
169192
|
var init_store_iap_catalog = __esm({
|
|
169043
169193
|
"src/store-iap-catalog.ts"() {
|
|
169194
|
+
init_attendance_classifier();
|
|
169044
169195
|
init_wix_owner();
|
|
169045
169196
|
PAGE4 = 100;
|
|
169046
169197
|
MAX_PAGES3 = 500;
|
|
169047
169198
|
PROGRAM_READ_CONCURRENCY = 4;
|
|
169048
|
-
NEVER_DRAFTED_NOTE = "Bookings services and events are real-world services, which Apple does not allow as in-app purchases \u2014 they are never drafted.";
|
|
169049
169199
|
isNotInstalled2 = (e2) => e2 instanceof WixApiError && e2.isAppNotInstalled;
|
|
169050
169200
|
isWrongCatalogVersion = (e2) => e2 instanceof WixApiError && e2.status === 428 && /CATALOG_V1/.test(e2.message);
|
|
169051
169201
|
}
|
|
@@ -169053,7 +169203,7 @@ var init_store_iap_catalog = __esm({
|
|
|
169053
169203
|
|
|
169054
169204
|
// src/store-iap-connect.ts
|
|
169055
169205
|
async function planCheck(items, deps) {
|
|
169056
|
-
const rules = deps.saleRules ??
|
|
169206
|
+
const rules = deps.saleRules ?? APPLE_PROVISIONING_RULES;
|
|
169057
169207
|
if (!rules.pricingPlan || !items.some((item) => item.wix?.entityType === "pricingPlan")) return { ok: true, ids: /* @__PURE__ */ new Set() };
|
|
169058
169208
|
if (!deps.oneTimePlans) return { ok: false, why: "the site's plans were not read" };
|
|
169059
169209
|
try {
|
|
@@ -169155,7 +169305,7 @@ function providerPlan(provider) {
|
|
|
169155
169305
|
detail: "the appleIAP provider is connected through Serve's IAP routes (wix-iap ConnectProviderAccount), and this Serve target has none."
|
|
169156
169306
|
};
|
|
169157
169307
|
}
|
|
169158
|
-
async function mapItems(api2, appId2, items, apply, plans, rules =
|
|
169308
|
+
async function mapItems(api2, appId2, items, apply, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169159
169309
|
let catalog3;
|
|
169160
169310
|
try {
|
|
169161
169311
|
catalog3 = await api2.listProducts(appId2);
|
|
@@ -169187,7 +169337,7 @@ async function mapItems(api2, appId2, items, apply, plans, rules = APPLE_SALE_RU
|
|
|
169187
169337
|
}
|
|
169188
169338
|
return steps;
|
|
169189
169339
|
}
|
|
169190
|
-
function mappingTarget(item, plans, rules =
|
|
169340
|
+
function mappingTarget(item, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169191
169341
|
const skip = (entity2, detail) => ({ skip: { entity: entity2, appProductId: null, storeProductId: item.productId, state: "skipped", code: "mapping_unsupported", detail } });
|
|
169192
169342
|
if (!item.wix || item.unlocks?.length) {
|
|
169193
169343
|
return skip(item.productId, "a consumable tier unlocks several Wix items, but a purchase pays one order item, so it cannot be mapped");
|
|
@@ -169226,7 +169376,7 @@ function decide(catalog3, target) {
|
|
|
169226
169376
|
}
|
|
169227
169377
|
return void 0;
|
|
169228
169378
|
}
|
|
169229
|
-
function mappingWithoutApp(item, planning, plans, rules =
|
|
169379
|
+
function mappingWithoutApp(item, planning, plans, rules = APPLE_PROVISIONING_RULES) {
|
|
169230
169380
|
const target = mappingTarget(item, plans, rules);
|
|
169231
169381
|
if ("skip" in target) return target.skip;
|
|
169232
169382
|
return planning ? { ...target, state: "planned", detail: `map ${target.appProductId} \u2192 ${target.storeProductId}` } : { ...target, ...noApp("the app is not registered") };
|
|
@@ -169383,8 +169533,8 @@ async function shoot(selected, run2, outDir) {
|
|
|
169383
169533
|
function visibleText2(html) {
|
|
169384
169534
|
return html.replace(/ | | /gi, "\xA0").replace(/&/g, "&");
|
|
169385
169535
|
}
|
|
169386
|
-
function manifestWithScreenshots(
|
|
169387
|
-
const doc = JSON.parse(
|
|
169536
|
+
function manifestWithScreenshots(text11, shot) {
|
|
169537
|
+
const doc = JSON.parse(text11);
|
|
169388
169538
|
for (const [index, path2] of shot) doc.items[index].reviewScreenshot = path2;
|
|
169389
169539
|
return `${JSON.stringify(doc, null, 2)}
|
|
169390
169540
|
`;
|
|
@@ -169600,10 +169750,10 @@ function makeTransport(fetchImpl, auth, timeoutMs = DEFAULT_TIMEOUT_MS3) {
|
|
|
169600
169750
|
body: body === void 0 ? void 0 : JSON.stringify(body),
|
|
169601
169751
|
signal: AbortSignal.timeout(timeoutMs)
|
|
169602
169752
|
});
|
|
169603
|
-
const
|
|
169604
|
-
let parsed =
|
|
169753
|
+
const text11 = await res.text();
|
|
169754
|
+
let parsed = text11;
|
|
169605
169755
|
try {
|
|
169606
|
-
parsed =
|
|
169756
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
169607
169757
|
} catch {
|
|
169608
169758
|
}
|
|
169609
169759
|
if (!res.ok) throw new WixApiError2(res.status, method, path2, parsed);
|
|
@@ -169741,9 +169891,9 @@ function manifestDirOf(manifestPath) {
|
|
|
169741
169891
|
return dirname46(resolve70(manifestPath));
|
|
169742
169892
|
}
|
|
169743
169893
|
function readPlan(deps, path2) {
|
|
169744
|
-
const
|
|
169894
|
+
const text11 = readInput(deps, path2, "plan");
|
|
169745
169895
|
try {
|
|
169746
|
-
return verifyPlan2(JSON.parse(
|
|
169896
|
+
return verifyPlan2(JSON.parse(text11));
|
|
169747
169897
|
} catch (e2) {
|
|
169748
169898
|
if (e2 instanceof SyntaxError) throw new Error(`${path2} is not valid JSON: ${e2.message}`);
|
|
169749
169899
|
throw e2;
|
|
@@ -169754,10 +169904,10 @@ function writeJson(deps, out2, path2, value) {
|
|
|
169754
169904
|
`);
|
|
169755
169905
|
}
|
|
169756
169906
|
function writePlan(deps, out2, path2, plan) {
|
|
169757
|
-
const
|
|
169907
|
+
const text11 = `${JSON.stringify(plan, null, 2)}
|
|
169758
169908
|
`;
|
|
169759
|
-
if (out2.carriesSecret(
|
|
169760
|
-
deps.writeFileAtomic(path2,
|
|
169909
|
+
if (out2.carriesSecret(text11)) throw new Error("refusing to write a plan that contains this run's App Store Connect credentials");
|
|
169910
|
+
deps.writeFileAtomic(path2, text11);
|
|
169761
169911
|
}
|
|
169762
169912
|
function catalogRoutePrefix(flags, deps) {
|
|
169763
169913
|
if (flags["catalog-route"] !== void 0 && !textFlag(flags, "catalog-route")) throw new IapCatalogError("catalog_route_unavailable", "--catalog-route needs an explicit gateway path");
|
|
@@ -170242,7 +170392,7 @@ async function screenshotsCommand(flags, deps, out2) {
|
|
|
170242
170392
|
appleLocked: (item) => facts.get(item.productId)?.locked,
|
|
170243
170393
|
appleRead: textFlag(flags, "profile") !== void 0,
|
|
170244
170394
|
writeBytes: deps.writeBytes ?? writeBinaryFile,
|
|
170245
|
-
writeText: (path2,
|
|
170395
|
+
writeText: (path2, text11) => deps.writeFileAtomic(path2, text11),
|
|
170246
170396
|
...only ? { only: new Set(only.split(",").map((id) => id.trim()).filter(Boolean)) } : {},
|
|
170247
170397
|
...outDir ? { outDir: resolve70(outDir) } : {},
|
|
170248
170398
|
force: flags.force === true,
|
|
@@ -170396,8 +170546,8 @@ var init_store_iap = __esm({
|
|
|
170396
170546
|
protectKey(key3) {
|
|
170397
170547
|
this.secrets.push(key3.privateKey, key3.keyId);
|
|
170398
170548
|
}
|
|
170399
|
-
line(
|
|
170400
|
-
this.io.log(this.scrub(
|
|
170549
|
+
line(text11 = "") {
|
|
170550
|
+
this.io.log(this.scrub(text11));
|
|
170401
170551
|
}
|
|
170402
170552
|
print(value) {
|
|
170403
170553
|
this.io.log(this.serialize(value));
|
|
@@ -170410,11 +170560,11 @@ var init_store_iap = __esm({
|
|
|
170410
170560
|
return JSON.stringify(scrubDeep(value, (t2) => this.scrub(t2)), null, 2);
|
|
170411
170561
|
}
|
|
170412
170562
|
/** This run's own key material, raw or JSON-escaped, anywhere in `text`. */
|
|
170413
|
-
carriesSecret(
|
|
170414
|
-
return this.secrets.some((secret) => secret && (
|
|
170563
|
+
carriesSecret(text11) {
|
|
170564
|
+
return this.secrets.some((secret) => secret && (text11.includes(secret) || text11.includes(JSON.stringify(secret).slice(1, -1))));
|
|
170415
170565
|
}
|
|
170416
|
-
scrub(
|
|
170417
|
-
let out2 =
|
|
170566
|
+
scrub(text11) {
|
|
170567
|
+
let out2 = text11;
|
|
170418
170568
|
for (const secret of this.secrets) if (secret) out2 = out2.split(secret).join("[redacted]");
|
|
170419
170569
|
return scrubString(out2);
|
|
170420
170570
|
}
|
|
@@ -171768,12 +171918,12 @@ async function runRemoteSecretsCommand(operation, flags, io2, options) {
|
|
|
171768
171918
|
body = JSON.stringify({ value });
|
|
171769
171919
|
}
|
|
171770
171920
|
const response = await (options.fetchImpl ?? fetch)(url, { method: operation === "list" ? "GET" : operation === "set" ? "PUT" : "POST", headers: headers2, body });
|
|
171771
|
-
const
|
|
171921
|
+
const text11 = await response.text();
|
|
171772
171922
|
let output;
|
|
171773
171923
|
try {
|
|
171774
|
-
output = JSON.parse(
|
|
171924
|
+
output = JSON.parse(text11);
|
|
171775
171925
|
} catch {
|
|
171776
|
-
output =
|
|
171926
|
+
output = text11;
|
|
171777
171927
|
}
|
|
171778
171928
|
if (!response.ok) throw new Error(typeof output === "string" ? output : JSON.stringify(output));
|
|
171779
171929
|
io2.log(JSON.stringify(output));
|
|
@@ -171831,9 +171981,9 @@ function headersFor(options) {
|
|
|
171831
171981
|
...options.previewTag ? { "x-wix-route-serve": options.previewTag } : {}
|
|
171832
171982
|
};
|
|
171833
171983
|
}
|
|
171834
|
-
function objectFrom(
|
|
171984
|
+
function objectFrom(text11) {
|
|
171835
171985
|
try {
|
|
171836
|
-
const value =
|
|
171986
|
+
const value = text11 ? JSON.parse(text11) : null;
|
|
171837
171987
|
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
171838
171988
|
} catch {
|
|
171839
171989
|
return null;
|
|
@@ -172071,12 +172221,12 @@ async function runNotifyPing(flags, io2, deps = {}) {
|
|
|
172071
172221
|
const flagError = flagRefusal(flags);
|
|
172072
172222
|
if (flagError) return refuse6(io2, flagError);
|
|
172073
172223
|
const allMembers = flags["all-members"] === true;
|
|
172074
|
-
if (allMembers &&
|
|
172224
|
+
if (allMembers && text10(flags["member-email"])) return refuse6(io2, "recipient_conflict", "Choose --all-members or --member-email.");
|
|
172075
172225
|
if (allMembers && flags["dry-run"] !== true && flags.yes !== true) return refuse6(io2, "confirmation_required", "Preview with --dry-run, then add --yes to send to every approved member.");
|
|
172076
|
-
const input = mergePushInputs(pushInputsFromContent(resolve72(
|
|
172077
|
-
const missing2 = [...input.app ? [] : ["app"], ...input.site ? [] : ["site"], ...REQUIRED_FLAGS.filter((f2) => !(allMembers && f2 === "member-email") && !
|
|
172226
|
+
const input = mergePushInputs(pushInputsFromContent(resolve72(text10(flags.content) ?? process.cwd())), flags);
|
|
172227
|
+
const missing2 = [...input.app ? [] : ["app"], ...input.site ? [] : ["site"], ...REQUIRED_FLAGS.filter((f2) => !(allMembers && f2 === "member-email") && !text10(flags[f2]))];
|
|
172078
172228
|
if (missing2.length) return refuse6(io2, "needs_input", "Name the app and site (or --content), the member's login email, a title and a link.", 2, { missing: missing2 });
|
|
172079
|
-
const requestId2 =
|
|
172229
|
+
const requestId2 = text10(flags["request-id"]) ?? (deps.newRequestId ?? randomUUID10)();
|
|
172080
172230
|
if (!UUID_RE.test(requestId2)) return refuse6(io2, "invalid_request_id", "Reuse the requestId a previous send printed.");
|
|
172081
172231
|
const owner = await hostedOwnerSession(flags, deps);
|
|
172082
172232
|
if (!owner.ok) return refuse6(io2, owner.error, owner.hint, owner.exit);
|
|
@@ -172093,10 +172243,10 @@ async function runNotifyPing(flags, io2, deps = {}) {
|
|
|
172093
172243
|
const body = {
|
|
172094
172244
|
app: ownership.slug,
|
|
172095
172245
|
site: input.site,
|
|
172096
|
-
memberEmail:
|
|
172097
|
-
title:
|
|
172098
|
-
...
|
|
172099
|
-
link:
|
|
172246
|
+
memberEmail: text10(flags["member-email"]),
|
|
172247
|
+
title: text10(flags.title),
|
|
172248
|
+
...text10(flags.body) ? { body: text10(flags.body) } : {},
|
|
172249
|
+
link: text10(flags.link),
|
|
172100
172250
|
requestId: requestId2,
|
|
172101
172251
|
...flags["dry-run"] === true ? { dryRun: true } : {}
|
|
172102
172252
|
};
|
|
@@ -172136,7 +172286,7 @@ async function runAllMembers(args) {
|
|
|
172136
172286
|
const code = error instanceof PushSendError ? error.code : error instanceof Error && ROSTER_CODES.has(error.message) ? error.message : "member_lookup_unavailable";
|
|
172137
172287
|
return refuse6(io2, code, void 0, 1);
|
|
172138
172288
|
}
|
|
172139
|
-
const base = { app: input.app, site: input.site, title:
|
|
172289
|
+
const base = { app: input.app, site: input.site, title: text10(flags.title), ...text10(flags.body) ? { body: text10(flags.body) } : {}, link: text10(flags.link) };
|
|
172140
172290
|
const send2 = (recipient, memberRequestId, dryRun = false) => pushSendRequest({
|
|
172141
172291
|
target: session.target,
|
|
172142
172292
|
wixToken: session.wixToken,
|
|
@@ -172219,7 +172369,7 @@ function summary(result, sent) {
|
|
|
172219
172369
|
}
|
|
172220
172370
|
return `Ping accepted request ${sent.requestId} for ${sent.memberEmail}. Ping does not confirm delivery: it reaches the member's signed-in devices with notifications allowed.`;
|
|
172221
172371
|
}
|
|
172222
|
-
var LOCAL_SENDER_FLAGS, SWITCHES, REQUIRED_FLAGS, UUID_RE, KNOWN_CODES, ROSTER_CODES, HINTS,
|
|
172372
|
+
var LOCAL_SENDER_FLAGS, SWITCHES, REQUIRED_FLAGS, UUID_RE, KNOWN_CODES, ROSTER_CODES, HINTS, text10;
|
|
172223
172373
|
var init_notify_ping = __esm({
|
|
172224
172374
|
"src/notify-ping.ts"() {
|
|
172225
172375
|
init_push_send();
|
|
@@ -172247,7 +172397,7 @@ var init_notify_ping = __esm({
|
|
|
172247
172397
|
site_token_invalid: "Run wix login as the site owner; the site token must belong to the app owner's account.",
|
|
172248
172398
|
ping_permission_denied: "Himi Serve is not permitted to send through Ping; this is a platform issue, not your setup."
|
|
172249
172399
|
};
|
|
172250
|
-
|
|
172400
|
+
text10 = (v2) => typeof v2 === "string" && v2.length > 0 ? v2 : void 0;
|
|
172251
172401
|
}
|
|
172252
172402
|
});
|
|
172253
172403
|
|
|
@@ -173372,14 +173522,14 @@ async function callJson(t2, appId2, method, path2, what, body) {
|
|
|
173372
173522
|
...body !== void 0 ? { body: JSON.stringify(body) } : {}
|
|
173373
173523
|
});
|
|
173374
173524
|
if (!res.ok) {
|
|
173375
|
-
const
|
|
173376
|
-
throw new Base44RequestError(res.status,
|
|
173525
|
+
const text12 = await res.text().catch(() => "");
|
|
173526
|
+
throw new Base44RequestError(res.status, text12.slice(0, 500), what);
|
|
173377
173527
|
}
|
|
173378
|
-
const
|
|
173528
|
+
const text11 = await res.text();
|
|
173379
173529
|
try {
|
|
173380
|
-
return JSON.parse(
|
|
173530
|
+
return JSON.parse(text11);
|
|
173381
173531
|
} catch {
|
|
173382
|
-
throw new Base44RequestError(res.status, `unreadable response: ${
|
|
173532
|
+
throw new Base44RequestError(res.status, `unreadable response: ${text11.slice(0, 200)}`, what);
|
|
173383
173533
|
}
|
|
173384
173534
|
}
|
|
173385
173535
|
function requestFailure(e2) {
|
|
@@ -173647,16 +173797,16 @@ var init_seed = __esm({
|
|
|
173647
173797
|
});
|
|
173648
173798
|
|
|
173649
173799
|
// src/base44-analyze/project.ts
|
|
173650
|
-
function parseJsonc(
|
|
173800
|
+
function parseJsonc(text11) {
|
|
173651
173801
|
let out2 = "";
|
|
173652
173802
|
let i2 = 0;
|
|
173653
173803
|
let inStr = false;
|
|
173654
|
-
while (i2 <
|
|
173655
|
-
const c2 =
|
|
173804
|
+
while (i2 < text11.length) {
|
|
173805
|
+
const c2 = text11[i2];
|
|
173656
173806
|
if (inStr) {
|
|
173657
173807
|
out2 += c2;
|
|
173658
173808
|
if (c2 === "\\") {
|
|
173659
|
-
out2 +=
|
|
173809
|
+
out2 += text11[i2 + 1] ?? "";
|
|
173660
173810
|
i2 += 2;
|
|
173661
173811
|
continue;
|
|
173662
173812
|
}
|
|
@@ -173668,11 +173818,11 @@ function parseJsonc(text10) {
|
|
|
173668
173818
|
inStr = true;
|
|
173669
173819
|
out2 += c2;
|
|
173670
173820
|
i2++;
|
|
173671
|
-
} else if (c2 === "/" &&
|
|
173672
|
-
while (i2 <
|
|
173673
|
-
} else if (c2 === "/" &&
|
|
173821
|
+
} else if (c2 === "/" && text11[i2 + 1] === "/") {
|
|
173822
|
+
while (i2 < text11.length && text11[i2] !== "\n") i2++;
|
|
173823
|
+
} else if (c2 === "/" && text11[i2 + 1] === "*") {
|
|
173674
173824
|
i2 += 2;
|
|
173675
|
-
while (i2 <
|
|
173825
|
+
while (i2 < text11.length && !(text11[i2] === "*" && text11[i2 + 1] === "/")) i2++;
|
|
173676
173826
|
i2 += 2;
|
|
173677
173827
|
} else {
|
|
173678
173828
|
out2 += c2;
|
|
@@ -173681,32 +173831,32 @@ function parseJsonc(text10) {
|
|
|
173681
173831
|
}
|
|
173682
173832
|
return JSON.parse(dropTrailingCommas(out2));
|
|
173683
173833
|
}
|
|
173684
|
-
function dropTrailingCommas(
|
|
173834
|
+
function dropTrailingCommas(text11) {
|
|
173685
173835
|
let out2 = "";
|
|
173686
173836
|
let inStr = false;
|
|
173687
|
-
for (let i2 = 0; i2 <
|
|
173688
|
-
const c2 =
|
|
173837
|
+
for (let i2 = 0; i2 < text11.length; i2++) {
|
|
173838
|
+
const c2 = text11[i2];
|
|
173689
173839
|
if (inStr) {
|
|
173690
173840
|
out2 += c2;
|
|
173691
|
-
if (c2 === "\\") out2 +=
|
|
173841
|
+
if (c2 === "\\") out2 += text11[++i2] ?? "";
|
|
173692
173842
|
else if (c2 === '"') inStr = false;
|
|
173693
173843
|
continue;
|
|
173694
173844
|
}
|
|
173695
173845
|
if (c2 === '"') inStr = true;
|
|
173696
173846
|
if (c2 === ",") {
|
|
173697
173847
|
let j2 = i2 + 1;
|
|
173698
|
-
while (j2 <
|
|
173699
|
-
if (
|
|
173848
|
+
while (j2 < text11.length && /\s/.test(text11[j2])) j2++;
|
|
173849
|
+
if (text11[j2] === "}" || text11[j2] === "]") continue;
|
|
173700
173850
|
}
|
|
173701
173851
|
out2 += c2;
|
|
173702
173852
|
}
|
|
173703
173853
|
return out2;
|
|
173704
173854
|
}
|
|
173705
173855
|
function readJson9(files, path2) {
|
|
173706
|
-
const
|
|
173707
|
-
if (
|
|
173856
|
+
const text11 = files.get(path2);
|
|
173857
|
+
if (text11 === void 0) return void 0;
|
|
173708
173858
|
try {
|
|
173709
|
-
const v2 = parseJsonc(
|
|
173859
|
+
const v2 = parseJsonc(text11);
|
|
173710
173860
|
return v2 && typeof v2 === "object" && !Array.isArray(v2) ? v2 : void 0;
|
|
173711
173861
|
} catch {
|
|
173712
173862
|
return void 0;
|
|
@@ -174236,11 +174386,11 @@ async function readEntitySnapshot(appId2, deps) {
|
|
|
174236
174386
|
const { entries, skipped } = collectAppSource(dl2.dir);
|
|
174237
174387
|
const files = new Map(entries.map((e2) => [e2.path, e2.bytes.toString("utf8")]));
|
|
174238
174388
|
for (const cfgPath of ["base44/config.jsonc", "base44/config.json"]) {
|
|
174239
|
-
const
|
|
174240
|
-
if (
|
|
174389
|
+
const text11 = files.get(cfgPath);
|
|
174390
|
+
if (text11 === void 0) continue;
|
|
174241
174391
|
let cfg;
|
|
174242
174392
|
try {
|
|
174243
|
-
cfg = parseJsonc(
|
|
174393
|
+
cfg = parseJsonc(text11);
|
|
174244
174394
|
} catch (e2) {
|
|
174245
174395
|
throw new Error(`${cfgPath} does not parse (${e2.message}) \u2014 the entity directory it names cannot be trusted, so the snapshot may be incomplete`);
|
|
174246
174396
|
}
|
|
@@ -174253,11 +174403,11 @@ async function readEntitySnapshot(appId2, deps) {
|
|
|
174253
174403
|
const isEntityFile = (p2) => entityDirs.some((d2) => p2.startsWith(d2) && !p2.slice(d2.length).includes("/") && JSON_FILE2.test(p2));
|
|
174254
174404
|
const dropped = skipped.map((p2) => p2.split(/[\\/]/).join("/")).filter((p2) => entityDirs.some((d2) => p2.startsWith(d2) || d2.startsWith(`${p2}/`)));
|
|
174255
174405
|
if (dropped.length) throw new Error(`the download's entity files include ones himi will not read (${dropped.join(", ")}) \u2014 a sync without them would delete those entities`);
|
|
174256
|
-
for (const [path2,
|
|
174406
|
+
for (const [path2, text11] of files) {
|
|
174257
174407
|
if (!isEntityFile(path2)) continue;
|
|
174258
174408
|
let v2;
|
|
174259
174409
|
try {
|
|
174260
|
-
v2 = parseJsonc(
|
|
174410
|
+
v2 = parseJsonc(text11);
|
|
174261
174411
|
} catch (e2) {
|
|
174262
174412
|
throw new Error(`entity file ${path2} does not parse (${e2.message}) \u2014 a sync without it would delete that entity`);
|
|
174263
174413
|
}
|
|
@@ -174450,16 +174600,16 @@ function isPrivateV4([a2, b2, c2]) {
|
|
|
174450
174600
|
return a2 >= 224;
|
|
174451
174601
|
}
|
|
174452
174602
|
function v6Groups(host) {
|
|
174453
|
-
let
|
|
174454
|
-
const dotted = /:((?:\d{1,3}\.){3}\d{1,3})$/.exec(
|
|
174603
|
+
let text11 = host;
|
|
174604
|
+
const dotted = /:((?:\d{1,3}\.){3}\d{1,3})$/.exec(text11);
|
|
174455
174605
|
if (dotted) {
|
|
174456
174606
|
const octets = ipv4Octets(dotted[1]);
|
|
174457
174607
|
if (!octets) return null;
|
|
174458
174608
|
const hi2 = (octets[0] << 8 | octets[1]).toString(16);
|
|
174459
174609
|
const lo2 = (octets[2] << 8 | octets[3]).toString(16);
|
|
174460
|
-
|
|
174610
|
+
text11 = `${text11.slice(0, dotted.index)}:${hi2}:${lo2}`;
|
|
174461
174611
|
}
|
|
174462
|
-
const halves =
|
|
174612
|
+
const halves = text11.split("::");
|
|
174463
174613
|
if (halves.length > 2) return null;
|
|
174464
174614
|
const parts = (part3) => part3 ? part3.split(":") : [];
|
|
174465
174615
|
const head = parts(halves[0]);
|
|
@@ -174739,28 +174889,28 @@ var init_net_guard = __esm({
|
|
|
174739
174889
|
});
|
|
174740
174890
|
|
|
174741
174891
|
// src/site-analyze/copy-clean.ts
|
|
174742
|
-
function isTemplatePlaceholder(
|
|
174743
|
-
return PLACEHOLDER_RE.test(
|
|
174892
|
+
function isTemplatePlaceholder(text11) {
|
|
174893
|
+
return PLACEHOLDER_RE.test(text11);
|
|
174744
174894
|
}
|
|
174745
174895
|
function cleanText(raw, cap) {
|
|
174746
174896
|
const s2 = String(raw ?? "").replace(/[\u0000-\u001F\u007F]/g, " ").replace(/\s+/g, " ").trim();
|
|
174747
174897
|
return s2.length > cap ? `${s2.slice(0, cap - 1).trimEnd()}\u2026` : s2;
|
|
174748
174898
|
}
|
|
174749
|
-
function stripPii(
|
|
174750
|
-
return
|
|
174899
|
+
function stripPii(text11) {
|
|
174900
|
+
return text11.replace(EMAIL_RE2, "").replace(PHONE_SHAPE_RE, (m2) => {
|
|
174751
174901
|
const digits2 = (m2.match(ANY_DIGIT_RE) ?? []).length;
|
|
174752
174902
|
return digits2 >= PHONE_MIN_DIGITS && PHONE_DIGIT_RUN_RE.test(m2) ? "" : m2;
|
|
174753
174903
|
}).replace(/\s+/g, " ").trim();
|
|
174754
174904
|
}
|
|
174755
|
-
function isBoilerplate(
|
|
174756
|
-
return BOILERPLATE_RE.test(
|
|
174905
|
+
function isBoilerplate(text11) {
|
|
174906
|
+
return BOILERPLATE_RE.test(text11) || PLACEHOLDER_RE.test(text11);
|
|
174757
174907
|
}
|
|
174758
174908
|
function copyOrDrop(raw, cap) {
|
|
174759
|
-
const
|
|
174760
|
-
if (
|
|
174761
|
-
if (isBoilerplate(
|
|
174762
|
-
if (!/[A-Za-zͰ--]/.test(
|
|
174763
|
-
return
|
|
174909
|
+
const text11 = stripPii(cleanText(raw, cap));
|
|
174910
|
+
if (text11.length < 2) return "";
|
|
174911
|
+
if (isBoilerplate(text11)) return "";
|
|
174912
|
+
if (!/[A-Za-zͰ--]/.test(text11)) return "";
|
|
174913
|
+
return text11;
|
|
174764
174914
|
}
|
|
174765
174915
|
function dedupe2(values, cap) {
|
|
174766
174916
|
const out2 = [];
|
|
@@ -174856,8 +175006,8 @@ function parsePublishedHtml(html) {
|
|
|
174856
175006
|
const rawHeadings = [];
|
|
174857
175007
|
HEADING_RE.lastIndex = 0;
|
|
174858
175008
|
while (m2 = HEADING_RE.exec(html)) {
|
|
174859
|
-
const
|
|
174860
|
-
if (
|
|
175009
|
+
const text11 = copyOrDrop(textFromHtml(m2[1] ?? ""), 120);
|
|
175010
|
+
if (text11) rawHeadings.push(text11);
|
|
174861
175011
|
if (rawHeadings.length >= 40) break;
|
|
174862
175012
|
}
|
|
174863
175013
|
const headings = dedupe2(rawHeadings, 20);
|
|
@@ -174949,14 +175099,14 @@ async function readPublishedHtml(fetchImpl, siteUrl, opts) {
|
|
|
174949
175099
|
const chunk = await reader.read();
|
|
174950
175100
|
if (chunk.done) break;
|
|
174951
175101
|
bytes2 += chunk.value.byteLength;
|
|
174952
|
-
const
|
|
174953
|
-
html +=
|
|
174954
|
-
if (CODE_APP_ID_DONE_RE.test(overlap +
|
|
175102
|
+
const text11 = decoder.decode(chunk.value, { stream: true });
|
|
175103
|
+
html += text11;
|
|
175104
|
+
if (CODE_APP_ID_DONE_RE.test(overlap + text11) || bytes2 >= maxBytes) {
|
|
174955
175105
|
await reader.cancel().catch(() => {
|
|
174956
175106
|
});
|
|
174957
175107
|
break;
|
|
174958
175108
|
}
|
|
174959
|
-
overlap = (overlap +
|
|
175109
|
+
overlap = (overlap + text11).slice(-80);
|
|
174960
175110
|
}
|
|
174961
175111
|
} catch (e2) {
|
|
174962
175112
|
if (!opts.signal?.aborted) throw e2;
|
|
@@ -175181,9 +175331,9 @@ var init_permissions = __esm({
|
|
|
175181
175331
|
function genericDescription(it2) {
|
|
175182
175332
|
for (const field of DESCRIPTION_FIELDS) {
|
|
175183
175333
|
const raw = it2[field];
|
|
175184
|
-
const
|
|
175185
|
-
if (!
|
|
175186
|
-
const plain2 =
|
|
175334
|
+
const text11 = typeof raw === "string" ? raw : str8(raw?.text);
|
|
175335
|
+
if (!text11) continue;
|
|
175336
|
+
const plain2 = text11.replace(/<[^>]*>/g, " ").replace(/ /g, " ");
|
|
175187
175337
|
if (plain2.trim()) return plain2;
|
|
175188
175338
|
}
|
|
175189
175339
|
return void 0;
|
|
@@ -175664,8 +175814,8 @@ function cmsStatusNote(taxonomy) {
|
|
|
175664
175814
|
function yn2(v2) {
|
|
175665
175815
|
return v2 == null || v2 === "" ? "\u2014" : String(v2);
|
|
175666
175816
|
}
|
|
175667
|
-
function isAuthPhrase(
|
|
175668
|
-
const t2 =
|
|
175817
|
+
function isAuthPhrase(text11) {
|
|
175818
|
+
const t2 = text11.trim();
|
|
175669
175819
|
return AUTH_ONLY_ASCII.test(t2) || LOGIN_HE.includes(t2);
|
|
175670
175820
|
}
|
|
175671
175821
|
function looksGated(page) {
|
|
@@ -176464,12 +176614,12 @@ function mergeWst(pages2) {
|
|
|
176464
176614
|
return acc;
|
|
176465
176615
|
}
|
|
176466
176616
|
function fontSlug(value) {
|
|
176467
|
-
let
|
|
176617
|
+
let text11 = value;
|
|
176468
176618
|
try {
|
|
176469
|
-
|
|
176619
|
+
text11 = decodeURIComponent(value);
|
|
176470
176620
|
} catch {
|
|
176471
176621
|
}
|
|
176472
|
-
return
|
|
176622
|
+
return text11.toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
176473
176623
|
}
|
|
176474
176624
|
function fontUrlSlug(url) {
|
|
176475
176625
|
const last = url.split("?")[0].split("#")[0].split("/").pop() ?? "";
|
|
@@ -176557,9 +176707,9 @@ function attachVeloSources(book, sources, put) {
|
|
|
176557
176707
|
if (isSecretVeloPath(f2.path)) continue;
|
|
176558
176708
|
const rel = veloArtifactRelPath(f2.path);
|
|
176559
176709
|
if (!rel) continue;
|
|
176560
|
-
const
|
|
176561
|
-
if (!
|
|
176562
|
-
put(rel,
|
|
176710
|
+
const text11 = byPath.get(f2.path) ?? f2.excerpt;
|
|
176711
|
+
if (!text11) continue;
|
|
176712
|
+
put(rel, text11);
|
|
176563
176713
|
f2.localPath = rel;
|
|
176564
176714
|
}
|
|
176565
176715
|
}
|
|
@@ -176950,7 +177100,7 @@ function appIdFromUrl(raw) {
|
|
|
176950
177100
|
return void 0;
|
|
176951
177101
|
}
|
|
176952
177102
|
}
|
|
176953
|
-
function appIdFromText(
|
|
177103
|
+
function appIdFromText(text11) {
|
|
176954
177104
|
const shapes = [
|
|
176955
177105
|
// The published shell's own badge tag: `<script data-app-id="<id>" src="/static/js/badge.js">`.
|
|
176956
177106
|
/\bdata-app-id\s*=\s*["']([a-f0-9]{24})["']/,
|
|
@@ -176961,7 +177111,7 @@ function appIdFromText(text10) {
|
|
|
176961
177111
|
/\/apps\/([a-f0-9]{24})\b/
|
|
176962
177112
|
];
|
|
176963
177113
|
for (const re2 of shapes) {
|
|
176964
|
-
const m2 = re2.exec(
|
|
177114
|
+
const m2 = re2.exec(text11);
|
|
176965
177115
|
if (m2) return m2[1];
|
|
176966
177116
|
}
|
|
176967
177117
|
return void 0;
|
|
@@ -180409,8 +180559,8 @@ function copyFromEval(evaled) {
|
|
|
180409
180559
|
evaled.meta?.ogTitle,
|
|
180410
180560
|
evaled.meta?.ogDescription
|
|
180411
180561
|
].map((raw) => {
|
|
180412
|
-
const
|
|
180413
|
-
return
|
|
180562
|
+
const text11 = cleanText(raw, 400);
|
|
180563
|
+
return text11 && isTemplatePlaceholder(text11) ? stripPii(cleanText(text11, 90)) : "";
|
|
180414
180564
|
}),
|
|
180415
180565
|
8
|
|
180416
180566
|
);
|
|
@@ -181512,27 +181662,27 @@ var init_collect = __esm({
|
|
|
181512
181662
|
|
|
181513
181663
|
// src/one-app/navigation.ts
|
|
181514
181664
|
function sourceNavigationKind(raw) {
|
|
181515
|
-
const navigation =
|
|
181516
|
-
if (
|
|
181665
|
+
const navigation = object8(raw.navigation);
|
|
181666
|
+
if (object8(navigation.settings).drawerMode === true) return "side-menu";
|
|
181517
181667
|
const entries = array4(navigation.bottomTabs);
|
|
181518
181668
|
if (entries.length > 1) return "bottom-tabs";
|
|
181519
|
-
const screens =
|
|
181520
|
-
const screenId = string5(
|
|
181521
|
-
const screen = screenId && Object.hasOwn(screens, screenId) ?
|
|
181522
|
-
return
|
|
181669
|
+
const screens = object8(raw.screens);
|
|
181670
|
+
const screenId = string5(object8(entries[0]).screenId);
|
|
181671
|
+
const screen = screenId && Object.hasOwn(screens, screenId) ? object8(screens[screenId]) : {};
|
|
181672
|
+
return object8(screen.layout).type === "TOP_TABS" ? "top-tabs" : "single";
|
|
181523
181673
|
}
|
|
181524
181674
|
function planNavigation(raw, policy = "bottom-tabs") {
|
|
181525
|
-
const navigation =
|
|
181675
|
+
const navigation = object8(raw.navigation);
|
|
181526
181676
|
const entries = array4(navigation.bottomTabs);
|
|
181527
|
-
const screens =
|
|
181528
|
-
const layouts =
|
|
181677
|
+
const screens = object8(raw.screens);
|
|
181678
|
+
const layouts = object8(raw.layoutItems);
|
|
181529
181679
|
const kind = sourceNavigationKind(raw);
|
|
181530
181680
|
const warnings = [];
|
|
181531
|
-
const firstEntry =
|
|
181681
|
+
const firstEntry = object8(entries[0]);
|
|
181532
181682
|
const rootScreenId = string5(firstEntry.screenId) ?? null;
|
|
181533
|
-
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ?
|
|
181534
|
-
const rootLayout =
|
|
181535
|
-
const settings =
|
|
181683
|
+
const rootScreen = rootScreenId && Object.hasOwn(screens, rootScreenId) ? object8(screens[rootScreenId]) : {};
|
|
181684
|
+
const rootLayout = object8(rootScreen.layout);
|
|
181685
|
+
const settings = object8(navigation.settings);
|
|
181536
181686
|
const appInstance = string5(raw.appInstance) ?? null;
|
|
181537
181687
|
const source = {
|
|
181538
181688
|
kind,
|
|
@@ -181544,8 +181694,8 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181544
181694
|
const next = "Build navigation from this plan with himi docs one-app-to-himi-app. Report every warning; the plan does not replace the source graph.";
|
|
181545
181695
|
if (kind === "bottom-tabs") {
|
|
181546
181696
|
entries.forEach((value, index) => {
|
|
181547
|
-
const id = string5(
|
|
181548
|
-
if (id && Object.hasOwn(screens, id) &&
|
|
181697
|
+
const id = string5(object8(value).screenId);
|
|
181698
|
+
if (id && Object.hasOwn(screens, id) && object8(object8(screens[id]).layout).type === "TOP_TABS") {
|
|
181549
181699
|
warnings.push({ code: "nested_top_tabs", pointer: `/screens/${part2(id)}/layout/type`, reference: `/navigation/bottomTabs/${index}` });
|
|
181550
181700
|
}
|
|
181551
181701
|
});
|
|
@@ -181556,14 +181706,14 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181556
181706
|
const tabs = [];
|
|
181557
181707
|
const hiddenPages = [];
|
|
181558
181708
|
array4(rootLayout.items).forEach((value, index) => {
|
|
181559
|
-
const layoutItemId = string5(
|
|
181709
|
+
const layoutItemId = string5(object8(value).layoutItemId);
|
|
181560
181710
|
const itemPointer = `${pointer}/${index}`;
|
|
181561
181711
|
if (!layoutItemId || !Object.hasOwn(layouts, layoutItemId)) {
|
|
181562
181712
|
warnings.push({ code: "missing_reference", pointer: itemPointer, ...layoutItemId ? { reference: layoutItemId } : {} });
|
|
181563
181713
|
return;
|
|
181564
181714
|
}
|
|
181565
|
-
const layout =
|
|
181566
|
-
if (
|
|
181715
|
+
const layout = object8(layouts[layoutItemId]);
|
|
181716
|
+
if (object8(layout.settings).hideFromNavigation === true) {
|
|
181567
181717
|
hiddenPages.push({ layoutItemId, pointer: itemPointer });
|
|
181568
181718
|
return;
|
|
181569
181719
|
}
|
|
@@ -181608,10 +181758,10 @@ function planNavigation(raw, policy = "bottom-tabs") {
|
|
|
181608
181758
|
next
|
|
181609
181759
|
};
|
|
181610
181760
|
}
|
|
181611
|
-
var
|
|
181761
|
+
var object8, array4, string5, part2, TOP_TABS_POLICIES, MAX_BAR_TABS;
|
|
181612
181762
|
var init_navigation = __esm({
|
|
181613
181763
|
"src/one-app/navigation.ts"() {
|
|
181614
|
-
|
|
181764
|
+
object8 = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
181615
181765
|
array4 = (value) => Array.isArray(value) ? value : [];
|
|
181616
181766
|
string5 = (value) => typeof value === "string" && value ? value : void 0;
|
|
181617
181767
|
part2 = (value) => value.replaceAll("~", "~0").replaceAll("/", "~1");
|
|
@@ -182414,10 +182564,10 @@ async function mintVisitorToken(fetchImpl, clientId) {
|
|
|
182414
182564
|
body: JSON.stringify({ clientId, grantType: "anonymous" }),
|
|
182415
182565
|
signal: AbortSignal.timeout(8e3)
|
|
182416
182566
|
});
|
|
182417
|
-
const
|
|
182418
|
-
let parsed =
|
|
182567
|
+
const text11 = await res.text();
|
|
182568
|
+
let parsed = text11;
|
|
182419
182569
|
try {
|
|
182420
|
-
parsed =
|
|
182570
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
182421
182571
|
} catch {
|
|
182422
182572
|
}
|
|
182423
182573
|
if (!res.ok) throw new WixApiError2(res.status, "POST", "/oauth2/token", parsed);
|
|
@@ -183055,8 +183205,8 @@ var init_copy = __esm({
|
|
|
183055
183205
|
function textFields(look) {
|
|
183056
183206
|
if (look.unavailable) return [];
|
|
183057
183207
|
const out2 = [];
|
|
183058
|
-
const add = (
|
|
183059
|
-
if (
|
|
183208
|
+
const add = (text11, where, narrative = false) => {
|
|
183209
|
+
if (text11 && text11.trim()) out2.push({ text: text11, where, narrative });
|
|
183060
183210
|
};
|
|
183061
183211
|
for (const label3 of look.navLabels) add(label3, "nav");
|
|
183062
183212
|
for (const p2 of look.pages) {
|
|
@@ -183745,8 +183895,8 @@ async function analyzeSite(input, ports) {
|
|
|
183745
183895
|
if (locale) plan.provisioning.locale = locale;
|
|
183746
183896
|
const velo = buildVeloChapter({ look, owner: ownerVelo });
|
|
183747
183897
|
const veloFiles = ownerVelo.files.flatMap((f2) => {
|
|
183748
|
-
const
|
|
183749
|
-
return
|
|
183898
|
+
const text11 = f2.content ?? f2.excerpt;
|
|
183899
|
+
return text11 ? [{ path: f2.path, text: text11 }] : [];
|
|
183750
183900
|
}).slice(0, 80);
|
|
183751
183901
|
const permissions = buildPermissionsChapter({
|
|
183752
183902
|
cms,
|
|
@@ -185052,13 +185202,13 @@ async function veloCall(fetchImpl, method, url, opts = {}) {
|
|
|
185052
185202
|
body: opts.body === void 0 ? void 0 : JSON.stringify(opts.body),
|
|
185053
185203
|
signal: AbortSignal.timeout(opts.timeoutMs ?? 3e4)
|
|
185054
185204
|
});
|
|
185055
|
-
const
|
|
185056
|
-
let json8 =
|
|
185205
|
+
const text11 = await res.text();
|
|
185206
|
+
let json8 = text11;
|
|
185057
185207
|
try {
|
|
185058
|
-
json8 =
|
|
185208
|
+
json8 = text11 ? JSON.parse(text11) : null;
|
|
185059
185209
|
} catch {
|
|
185060
185210
|
}
|
|
185061
|
-
return { status: res.status, json: json8, text:
|
|
185211
|
+
return { status: res.status, json: json8, text: text11 };
|
|
185062
185212
|
}
|
|
185063
185213
|
function snippet2(x2, cap = 180) {
|
|
185064
185214
|
const s2 = typeof x2 === "string" ? x2 : JSON.stringify(x2) ?? "";
|
|
@@ -185615,10 +185765,10 @@ function accountTransport(fetchImpl = fetch, timeoutMs = DEFAULT_TIMEOUT_MS5, sp
|
|
|
185615
185765
|
}
|
|
185616
185766
|
throw new Error(`${method} ${path2} failed: ${err?.message ?? String(e2)}`);
|
|
185617
185767
|
}
|
|
185618
|
-
const
|
|
185619
|
-
let parsed =
|
|
185768
|
+
const text11 = await res.text();
|
|
185769
|
+
let parsed = text11;
|
|
185620
185770
|
try {
|
|
185621
|
-
parsed =
|
|
185771
|
+
parsed = text11 ? JSON.parse(text11) : null;
|
|
185622
185772
|
} catch {
|
|
185623
185773
|
}
|
|
185624
185774
|
if (!res.ok) throw new WixApiError(res.status, method, path2, parsed);
|
|
@@ -185679,16 +185829,16 @@ async function installVerticals(msid, wanted, token, fetchImpl = fetch, timeoutM
|
|
|
185679
185829
|
body: JSON.stringify({ apps: wanted.map((w2) => ({ id: w2.appDefId })) }),
|
|
185680
185830
|
signal: AbortSignal.timeout(timeoutMs)
|
|
185681
185831
|
});
|
|
185682
|
-
const
|
|
185832
|
+
const text11 = await res.text();
|
|
185683
185833
|
if (!res.ok) {
|
|
185684
185834
|
return {
|
|
185685
185835
|
...empty2,
|
|
185686
|
-
errors: wanted.map((w2) => ({ ...w2, message: `bulk-install -> ${res.status}: ${
|
|
185836
|
+
errors: wanted.map((w2) => ({ ...w2, message: `bulk-install -> ${res.status}: ${text11.slice(0, 200)}` }))
|
|
185687
185837
|
};
|
|
185688
185838
|
}
|
|
185689
185839
|
let body = {};
|
|
185690
185840
|
try {
|
|
185691
|
-
body =
|
|
185841
|
+
body = text11 ? JSON.parse(text11) : {};
|
|
185692
185842
|
} catch {
|
|
185693
185843
|
}
|
|
185694
185844
|
const nameOf2 = (appDefId) => wanted.find((w2) => w2.appDefId === appDefId)?.vertical ?? appDefId;
|
|
@@ -186294,9 +186444,9 @@ function redactVeloSource(source, knownSecrets = []) {
|
|
|
186294
186444
|
const visitLiterals = (node) => {
|
|
186295
186445
|
if (ts10.isStringLiteral(node) || ts10.isNoSubstitutionTemplateLiteral(node) || ts10.isTemplateExpression(node)) {
|
|
186296
186446
|
const start = node.getStart(clean2);
|
|
186297
|
-
const
|
|
186298
|
-
const redacted = redactLiteral(
|
|
186299
|
-
if (redacted !==
|
|
186447
|
+
const text11 = source.slice(start, node.end);
|
|
186448
|
+
const redacted = redactLiteral(text11, start);
|
|
186449
|
+
if (redacted !== text11) {
|
|
186300
186450
|
edits.push({ start, end: node.end, text: redacted });
|
|
186301
186451
|
return;
|
|
186302
186452
|
}
|
|
@@ -186720,10 +186870,10 @@ var ServeCliClient = class {
|
|
|
186720
186870
|
...carriesCredential ? { redirect: "error" } : {},
|
|
186721
186871
|
body: opts.rawBody !== void 0 ? new Uint8Array(opts.rawBody) : opts.body !== void 0 ? JSON.stringify(opts.body) : void 0
|
|
186722
186872
|
});
|
|
186723
|
-
const
|
|
186873
|
+
const text11 = await res.text();
|
|
186724
186874
|
let json8 = null;
|
|
186725
186875
|
try {
|
|
186726
|
-
json8 =
|
|
186876
|
+
json8 = text11 ? JSON.parse(text11) : null;
|
|
186727
186877
|
} catch {
|
|
186728
186878
|
json8 = null;
|
|
186729
186879
|
}
|
|
@@ -186731,7 +186881,7 @@ var ServeCliClient = class {
|
|
|
186731
186881
|
res.headers.forEach((v2, k2) => {
|
|
186732
186882
|
h2[k2] = v2;
|
|
186733
186883
|
});
|
|
186734
|
-
return { status: res.status, ok: res.ok, json: json8, text:
|
|
186884
|
+
return { status: res.status, ok: res.ok, json: json8, text: text11, headers: h2 };
|
|
186735
186885
|
}
|
|
186736
186886
|
// ---- serve (device-facing reads) ----
|
|
186737
186887
|
health(plane) {
|
|
@@ -187518,15 +187668,15 @@ function summarizeLint(app, bres, outcome, strict, extraIssues = []) {
|
|
|
187518
187668
|
}
|
|
187519
187669
|
};
|
|
187520
187670
|
const record2 = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
187521
|
-
const
|
|
187671
|
+
const text11 = (value) => typeof value === "string" && value ? value : void 0;
|
|
187522
187672
|
const message = (value) => {
|
|
187523
187673
|
const item = record2(value);
|
|
187524
|
-
if (
|
|
187525
|
-
if (
|
|
187674
|
+
if (text11(item.message)) return text11(item.message);
|
|
187675
|
+
if (text11(item.error)) return text11(item.error);
|
|
187526
187676
|
if (Array.isArray(item.errors)) {
|
|
187527
187677
|
const diagnostics = item.errors.map((entry) => {
|
|
187528
187678
|
const diagnostic = record2(entry);
|
|
187529
|
-
return
|
|
187679
|
+
return text11(diagnostic.text) ?? text11(diagnostic.message);
|
|
187530
187680
|
}).filter((entry) => !!entry);
|
|
187531
187681
|
if (diagnostics.length) return diagnostics.join("; ");
|
|
187532
187682
|
}
|
|
@@ -187539,29 +187689,29 @@ function summarizeLint(app, bres, outcome, strict, extraIssues = []) {
|
|
|
187539
187689
|
...issues,
|
|
187540
187690
|
...bres.compileErrors.map((value) => ({
|
|
187541
187691
|
pass: "compile",
|
|
187542
|
-
path:
|
|
187692
|
+
path: text11(record2(value).bundle),
|
|
187543
187693
|
ruleCode: "compile-error",
|
|
187544
187694
|
severity: "error",
|
|
187545
187695
|
message: message(value)
|
|
187546
187696
|
})),
|
|
187547
187697
|
...outcome.failedToBuild.map((value) => ({
|
|
187548
187698
|
pass: "build",
|
|
187549
|
-
screen:
|
|
187699
|
+
screen: text11(record2(value).screenId),
|
|
187550
187700
|
ruleCode: "failed-to-build",
|
|
187551
187701
|
severity: "error",
|
|
187552
187702
|
message: message(value)
|
|
187553
187703
|
})),
|
|
187554
187704
|
...outcome.missingBundles.map((value) => ({
|
|
187555
187705
|
pass: "build",
|
|
187556
|
-
screen:
|
|
187557
|
-
path:
|
|
187706
|
+
screen: text11(record2(value).screen),
|
|
187707
|
+
path: text11(record2(value).bundle),
|
|
187558
187708
|
ruleCode: "missing-bundle",
|
|
187559
187709
|
severity: "error",
|
|
187560
187710
|
message: message(value)
|
|
187561
187711
|
})),
|
|
187562
187712
|
...workerThrows.map((value) => ({
|
|
187563
187713
|
pass: "worker",
|
|
187564
|
-
path:
|
|
187714
|
+
path: text11(record2(value).bundle),
|
|
187565
187715
|
ruleCode: "worker-threw",
|
|
187566
187716
|
severity: "error",
|
|
187567
187717
|
message: message(value.threw)
|
|
@@ -187776,14 +187926,14 @@ function contentDir(flags) {
|
|
|
187776
187926
|
return resolve32(str3(flags.content) ?? process.cwd());
|
|
187777
187927
|
}
|
|
187778
187928
|
function renameRestoredSource(restored, declaredApp, renamed) {
|
|
187779
|
-
const
|
|
187929
|
+
const text11 = {};
|
|
187780
187930
|
for (const entry of restored) {
|
|
187781
187931
|
const decoded = entry.bytes.toString("utf8");
|
|
187782
|
-
if (Buffer.from(decoded, "utf8").equals(entry.bytes))
|
|
187932
|
+
if (Buffer.from(decoded, "utf8").equals(entry.bytes)) text11[entry.path] = decoded;
|
|
187783
187933
|
}
|
|
187784
|
-
const sentineled = sentinelizeArchive(
|
|
187934
|
+
const sentineled = sentinelizeArchive(text11, declaredApp);
|
|
187785
187935
|
for (const entry of restored) {
|
|
187786
|
-
if (!(entry.path in
|
|
187936
|
+
if (!(entry.path in text11)) continue;
|
|
187787
187937
|
const body = sentineled[entry.path];
|
|
187788
187938
|
if (body !== void 0) entry.bytes = Buffer.from(substituteIdentity(body, renamed), "utf8");
|
|
187789
187939
|
}
|
|
@@ -190077,8 +190227,8 @@ async function templateCommand(ctx) {
|
|
|
190077
190227
|
io2.error(JSON.stringify({ ok: false, error: e2.message }));
|
|
190078
190228
|
return 2;
|
|
190079
190229
|
}
|
|
190080
|
-
const
|
|
190081
|
-
if (!
|
|
190230
|
+
const text11 = str3(flags.text) ?? (pos.slice(2).join(" ") || void 0);
|
|
190231
|
+
if (!text11 && !verticals?.length) {
|
|
190082
190232
|
io2.error(JSON.stringify({
|
|
190083
190233
|
ok: false,
|
|
190084
190234
|
error: 'nothing to match \u2014 pass a business description (--text "\u2026"), --verticals stores,bookings, or --book <site analyze dir>',
|
|
@@ -190099,7 +190249,7 @@ async function templateCommand(ctx) {
|
|
|
190099
190249
|
note = `remote catalog unreachable (${e2.message}); ranked the embedded templates only`;
|
|
190100
190250
|
}
|
|
190101
190251
|
}
|
|
190102
|
-
const res = recommendTemplates2({ catalog: catalog3, verticals, text:
|
|
190252
|
+
const res = recommendTemplates2({ catalog: catalog3, verticals, text: text11 });
|
|
190103
190253
|
print({
|
|
190104
190254
|
ok: true,
|
|
190105
190255
|
...verticals?.length ? { verticals } : {},
|
|
@@ -190720,9 +190870,9 @@ function dpxSessionPresent(path2 = dpxSessionTokenPath()) {
|
|
|
190720
190870
|
return false;
|
|
190721
190871
|
}
|
|
190722
190872
|
}
|
|
190723
|
-
function isPortInUseError(
|
|
190724
|
-
if (!
|
|
190725
|
-
return /EADDRINUSE/i.test(
|
|
190873
|
+
function isPortInUseError(text11) {
|
|
190874
|
+
if (!text11) return false;
|
|
190875
|
+
return /EADDRINUSE/i.test(text11) || new RegExp(`(:::|:)${DPX_SESSION_PORT}\\b`).test(text11);
|
|
190726
190876
|
}
|
|
190727
190877
|
function parseDpxAuthStatusIdentity(stdout) {
|
|
190728
190878
|
if (!stdout) return void 0;
|
|
@@ -190874,23 +191024,23 @@ async function functionsCommand(ctx) {
|
|
|
190874
191024
|
const app = str3(flags.app) ?? loaded.app;
|
|
190875
191025
|
const invoked2 = await invokeRemoteFunction2({ baseUrl: target.baseUrl, app, definition, body: input, params, releaseId: remoteRelease, previewToken: str3(flags["preview-token"]), boCookie: boCookie() });
|
|
190876
191026
|
const response = invoked2.response;
|
|
190877
|
-
const
|
|
191027
|
+
const text12 = await response.text();
|
|
190878
191028
|
let body2;
|
|
190879
191029
|
try {
|
|
190880
|
-
body2 = JSON.parse(
|
|
191030
|
+
body2 = JSON.parse(text12);
|
|
190881
191031
|
} catch {
|
|
190882
|
-
body2 =
|
|
191032
|
+
body2 = text12;
|
|
190883
191033
|
}
|
|
190884
191034
|
print({ ok: response.ok, app, releaseId: remoteRelease ?? null, url: invoked2.url, status: response.status, body: body2 });
|
|
190885
191035
|
return response.ok ? 0 : 1;
|
|
190886
191036
|
}
|
|
190887
191037
|
const invoked = await invokeLocalFunction2(loaded, name, input, params);
|
|
190888
|
-
const
|
|
191038
|
+
const text11 = await invoked.response.text();
|
|
190889
191039
|
let body;
|
|
190890
191040
|
try {
|
|
190891
|
-
body = JSON.parse(
|
|
191041
|
+
body = JSON.parse(text11);
|
|
190892
191042
|
} catch {
|
|
190893
|
-
body =
|
|
191043
|
+
body = text11;
|
|
190894
191044
|
}
|
|
190895
191045
|
print({ ok: invoked.response.ok, app: loaded.app, releaseId: invoked.releaseId, status: invoked.response.status, body });
|
|
190896
191046
|
return invoked.response.ok ? 0 : 1;
|
|
@@ -191172,18 +191322,18 @@ function walkSource(dir, root = dir) {
|
|
|
191172
191322
|
const ext = entry.name.slice(entry.name.lastIndexOf("."));
|
|
191173
191323
|
if (!SOURCE_EXTENSIONS.has(ext)) continue;
|
|
191174
191324
|
const absolute = join76(dir, entry.name);
|
|
191175
|
-
const
|
|
191176
|
-
if (
|
|
191325
|
+
const text11 = readText2(absolute);
|
|
191326
|
+
if (text11 !== null) found.push({ path: relative14(root, absolute), text: text11 });
|
|
191177
191327
|
}
|
|
191178
191328
|
return found;
|
|
191179
191329
|
}
|
|
191180
|
-
function blankMatrixRows(
|
|
191181
|
-
const acceptance = mobileUxSection(mobileUxDocumentBody(
|
|
191330
|
+
function blankMatrixRows(text11) {
|
|
191331
|
+
const acceptance = mobileUxSection(mobileUxDocumentBody(text11), "Implementation acceptance") ?? "";
|
|
191182
191332
|
return /\|\s*(?:Ready|Empty|Add\s*\/\s*edit|Saved\s*\/\s*completed|Error\s*\/\s*recovery)\s*\|\s*\|\s*\|\s*\|\s*\|/i.test(acceptance);
|
|
191183
191333
|
}
|
|
191184
191334
|
function usesAppNetwork(source) {
|
|
191185
|
-
const code = (
|
|
191186
|
-
return source.some(({ text:
|
|
191335
|
+
const code = (text11) => text11.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\/\/[^\n]*/g, "");
|
|
191336
|
+
return source.some(({ text: text11 }) => /\bwixApi\b|(?:from|import)\s*["']@(?:himalaya|wix\/himalaya)\/wix-[^"']+["']/.test(code(text11)));
|
|
191187
191337
|
}
|
|
191188
191338
|
function auditUx(content, strict = false) {
|
|
191189
191339
|
const dir = resolve60(content);
|
|
@@ -193412,8 +193562,8 @@ import { resolve as resolve67 } from "node:path";
|
|
|
193412
193562
|
|
|
193413
193563
|
// ../../core/admin-web/src/utils/qr-terminal.ts
|
|
193414
193564
|
init_qr();
|
|
193415
|
-
function qrTerminal(
|
|
193416
|
-
const { modules, size } = encodeQr(
|
|
193565
|
+
function qrTerminal(text11, opts = {}) {
|
|
193566
|
+
const { modules, size } = encodeQr(text11);
|
|
193417
193567
|
const quietZone = opts.quietZone ?? 4;
|
|
193418
193568
|
const dim = size + quietZone * 2;
|
|
193419
193569
|
const dark = (x2, y2) => x2 >= quietZone && x2 < quietZone + size && y2 >= quietZone && y2 < quietZone + size ? modules[y2 - quietZone][x2 - quietZone] : false;
|
|
@@ -198066,14 +198216,14 @@ function createTrimValidator(deps = {}, spawnFn = spawn7) {
|
|
|
198066
198216
|
const parsed = JSON.parse(report3);
|
|
198067
198217
|
counts = parsed.counts;
|
|
198068
198218
|
if (Array.isArray(parsed.findings)) {
|
|
198069
|
-
const
|
|
198219
|
+
const text11 = (v2) => typeof v2 === "string" && v2 ? v2 : void 0;
|
|
198070
198220
|
errors = parsed.findings.filter((f2) => f2 && f2.severity === "error" && typeof f2.id === "string").map((f2) => ({
|
|
198071
198221
|
id: f2.id,
|
|
198072
|
-
message:
|
|
198073
|
-
...
|
|
198074
|
-
...
|
|
198075
|
-
...
|
|
198076
|
-
...
|
|
198222
|
+
message: text11(f2.message) ?? "",
|
|
198223
|
+
...text11(f2.pass) ? { pass: text11(f2.pass) } : {},
|
|
198224
|
+
...text11(f2.screen) ? { screen: text11(f2.screen) } : {},
|
|
198225
|
+
...text11(f2.path) ? { path: text11(f2.path) } : {},
|
|
198226
|
+
...text11(f2.ruleCode) ? { ruleCode: text11(f2.ruleCode) } : {}
|
|
198077
198227
|
}));
|
|
198078
198228
|
}
|
|
198079
198229
|
} catch {
|