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