@lifeaz/lors-helper 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/main.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/main.ts +0 -470
package/README.md
CHANGED
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifeaz/lors-helper",
|
|
3
3
|
"description": "Lifeaz Online Retail Storefront Helper",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.13",
|
|
5
5
|
"main": "dist/main.js",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"build:version:ensure": "bash ./.scripts/bump.sh --no-build"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"dayjs": "^1.11.
|
|
41
|
+
"dayjs": "^1.11.20",
|
|
42
42
|
"uuidv7": "^1.2.1",
|
|
43
43
|
"zod": "^4.3.0"
|
|
44
44
|
},
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"lifeaz": {
|
|
52
52
|
"version": {
|
|
53
53
|
"short": 1,
|
|
54
|
-
"full": "1.1.
|
|
55
|
-
"code": "
|
|
54
|
+
"full": "1.1.13-b50",
|
|
55
|
+
"code": "101130050"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/main.ts
CHANGED
|
@@ -638,13 +638,6 @@ export type Campaign = z.infer<typeof CampaignSchema>;
|
|
|
638
638
|
|
|
639
639
|
export type DeliveryMethodId = '_Standard_' | '_Express_';
|
|
640
640
|
|
|
641
|
-
/**
|
|
642
|
-
* What the plain checkout commits to, in months.
|
|
643
|
-
*
|
|
644
|
-
* Named rather than written as a literal in four places, because it is reported in the webhooks
|
|
645
|
-
* now: a consumer reading "commitmentMonths" has to get the same answer from a partner order and
|
|
646
|
-
* from a direct one, and the direct one used to answer nothing at all.
|
|
647
|
-
*/
|
|
648
641
|
export const DEFAULT_COMMITMENT_MONTHS = 12;
|
|
649
642
|
|
|
650
643
|
export const PartnerNoticeSchema = z.object({
|
|
@@ -664,23 +657,8 @@ export const PartnerSchema = z.object({
|
|
|
664
657
|
logoUrl: z.string().nullable(),
|
|
665
658
|
promoCodesEnabled: z.boolean(),
|
|
666
659
|
hideReferralSurvey: z.boolean(),
|
|
667
|
-
/**
|
|
668
|
-
* Whether `deliveryCountries` replaces the base deliverable list or extends it.
|
|
669
|
-
*
|
|
670
|
-
* Extending is the older reading and stays the default: a partner that simply sells into one
|
|
671
|
-
* more market should not have to restate the countries everyone already ships to. Replacing
|
|
672
|
-
* is what lets an agreement covering one country be expressed as one country.
|
|
673
|
-
*/
|
|
674
660
|
deliveryCountriesExclusive: z.boolean().default(false),
|
|
675
|
-
/**
|
|
676
|
-
* Customer profiles this partner does not sell to.
|
|
677
|
-
*
|
|
678
|
-
* Blocks rather than an allow list, so a profile added to the catalogue is offered by every
|
|
679
|
-
* partner until one deliberately turns it off. Never all of them: a partner that sells to
|
|
680
|
-
* nobody is a funnel nobody can enter, and the API refuses to store that.
|
|
681
|
-
*/
|
|
682
661
|
blockedProfiles: z.array(z.string()).default([]),
|
|
683
|
-
/** Length of the rental commitment sold through this partner, in months. */
|
|
684
662
|
commitmentMonths: z.number().int().positive().max(120).default(DEFAULT_COMMITMENT_MONTHS),
|
|
685
663
|
hideOffersStep: z.boolean(),
|
|
686
664
|
defaultOfferType: OfferTypeSchema.nullable(),
|
|
@@ -692,10 +670,6 @@ export const PartnerSchema = z.object({
|
|
|
692
670
|
});
|
|
693
671
|
export type Partner = z.infer<typeof PartnerSchema>;
|
|
694
672
|
|
|
695
|
-
// =============================================================================
|
|
696
|
-
// MVT - Multivariate testing
|
|
697
|
-
// =============================================================================
|
|
698
|
-
|
|
699
673
|
export type MvtStatus = '_Draft_' | '_Scheduled_' | '_Running_' | '_Paused_' | '_Stopped_' | '_Archived_';
|
|
700
674
|
export const MvtStatusSchema = z.union([z.literal('_Draft_'), z.literal('_Scheduled_'), z.literal('_Running_'), z.literal('_Paused_'), z.literal('_Stopped_'), z.literal('_Archived_')]);
|
|
701
675
|
|
|
@@ -766,11 +740,6 @@ export const MvtOperatorSchema = z.union([
|
|
|
766
740
|
z.literal('_Date_Between_'),
|
|
767
741
|
]);
|
|
768
742
|
|
|
769
|
-
/**
|
|
770
|
-
* Operators that read no value at all. Storing an empty value list against one of them is not an
|
|
771
|
-
* error worth refusing, but the evaluator ignores it, and the Tools condition builder hides the
|
|
772
|
-
* value editor rather than offering a field that changes nothing.
|
|
773
|
-
*/
|
|
774
743
|
export const MVT_NULLARY_OPERATORS: readonly MvtOperator[] = [
|
|
775
744
|
'_Partner_Absent_',
|
|
776
745
|
'_Visitor_Is_New_',
|
|
@@ -814,62 +783,34 @@ export const MvtVariantSchema = z.object({
|
|
|
814
783
|
weight: z.number().int().nonnegative(),
|
|
815
784
|
control: z.boolean(),
|
|
816
785
|
overrides: z.array(MvtOverrideSchema),
|
|
817
|
-
/**
|
|
818
|
-
* Optional sub-targeting. A variant carrying one stops being a share of the split and becomes
|
|
819
|
-
* a rule: every unit matching it lands here, whatever the weights say. See mvtPickVariant.
|
|
820
|
-
*/
|
|
821
786
|
audience: MvtAudienceNodeSchema.nullable().default(null),
|
|
822
|
-
/** Evaluation order of the targeted variants. The first match wins, so this is the tie-break. */
|
|
823
787
|
order: z.number().int().default(0),
|
|
824
|
-
/** Purely cosmetic, so one arm keeps the same colour across the split bar, the studio and the results. */
|
|
825
788
|
color: z.string().nullable().default(null),
|
|
826
789
|
description: z.string().nullable().default(null),
|
|
827
790
|
});
|
|
828
791
|
export type MvtVariant = z.infer<typeof MvtVariantSchema>;
|
|
829
792
|
|
|
830
|
-
/**
|
|
831
|
-
* What a variant changes on one checkout.
|
|
832
|
-
*
|
|
833
|
-
* The plain checkout is the null partner; so is the storefront, which has no partner dimension.
|
|
834
|
-
* A checkout only ever receives the version written for it, never another checkout's: an
|
|
835
|
-
* override authored against the plain funnel names steps and options a partner funnel may not
|
|
836
|
-
* have, and a fallback would carry it there anyway. The API flattens the right version into
|
|
837
|
-
* `MvtVariant.overrides` before the config leaves the server, so the fronts never see the others.
|
|
838
|
-
*/
|
|
839
793
|
export const MvtVariantVersionSchema = z.object({
|
|
840
794
|
partnerId: z.string().nullable(),
|
|
841
795
|
overrides: z.array(MvtOverrideSchema),
|
|
842
796
|
});
|
|
843
797
|
export type MvtVariantVersion = z.infer<typeof MvtVariantVersionSchema>;
|
|
844
798
|
|
|
845
|
-
/**
|
|
846
|
-
* One checkout an experiment can reach, described by what it actually renders.
|
|
847
|
-
*
|
|
848
|
-
* Built by the API from the partner configuration and handed to the Tools, so the studio only
|
|
849
|
-
* offers what the funnel on screen has: a step the partner hides is not a step to reorder, and
|
|
850
|
-
* an option the partner blocks is not an option to preselect. The same object is what the API
|
|
851
|
-
* validates a version against before writing it, so the interface and the boundary agree.
|
|
852
|
-
*/
|
|
853
799
|
export const MvtCheckoutTargetSchema = z.object({
|
|
854
|
-
/** Null for the plain checkout. */
|
|
855
800
|
partnerId: z.string().nullable(),
|
|
856
801
|
slug: z.string().nullable(),
|
|
857
802
|
name: z.string(),
|
|
858
|
-
/** The referential funnel, in referential order. Always the six steps. */
|
|
859
803
|
steps: z.array(CartStepSchema),
|
|
860
|
-
/** Steps this checkout never shows, whatever a variant says. */
|
|
861
804
|
hiddenSteps: z.array(CartStepSchema),
|
|
862
805
|
availableOfferItemIds: z.array(z.string()),
|
|
863
806
|
availableOptionItemIds: z.array(z.string()),
|
|
864
807
|
blockedPaymentMethods: z.array(z.string()),
|
|
865
808
|
blockedDeliveryMethods: z.array(z.string()),
|
|
866
809
|
profiles: z.array(z.string()),
|
|
867
|
-
/** The offer this checkout applies by itself when it skips the Offers step. Null when it has none. */
|
|
868
810
|
defaultOfferType: OfferTypeSchema.nullable().default(null),
|
|
869
811
|
});
|
|
870
812
|
export type MvtCheckoutTarget = z.infer<typeof MvtCheckoutTargetSchema>;
|
|
871
813
|
|
|
872
|
-
/** The plain checkout as a target: everything the referential funnel offers, nothing removed. */
|
|
873
814
|
export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemIds: string[] = [], profiles: string[] = []): MvtCheckoutTarget {
|
|
874
815
|
return {
|
|
875
816
|
partnerId: null,
|
|
@@ -886,20 +827,12 @@ export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemId
|
|
|
886
827
|
};
|
|
887
828
|
}
|
|
888
829
|
|
|
889
|
-
/**
|
|
890
|
-
* How one variant ends up receiving traffic, resolved from the variant set as a whole.
|
|
891
|
-
*
|
|
892
|
-
* `_Targeted_` variants are claimed by their own conditions and take no part in the weighted
|
|
893
|
-
* draw; `_Weighted_` ones share whatever is left. Computed in one place because the operator is
|
|
894
|
-
* shown this and the evaluator obeys it, and the two disagreeing would be the worst outcome.
|
|
895
|
-
*/
|
|
896
830
|
export type MvtAllocationMode = '_Targeted_' | '_Weighted_' | '_Unreachable_';
|
|
897
831
|
|
|
898
832
|
export interface MvtAllocationRow {
|
|
899
833
|
key: string;
|
|
900
834
|
mode: MvtAllocationMode;
|
|
901
835
|
weight: number;
|
|
902
|
-
/** Share of the units that reach the weighted draw. Zero for a targeted variant, whose share depends on the audience rather than on a number. */
|
|
903
836
|
sharePct: number;
|
|
904
837
|
}
|
|
905
838
|
|
|
@@ -930,13 +863,6 @@ export const MvtConfigSchema = z.object({
|
|
|
930
863
|
});
|
|
931
864
|
export type MvtConfig = z.infer<typeof MvtConfigSchema>;
|
|
932
865
|
|
|
933
|
-
/**
|
|
934
|
-
* Everything the audience tree is allowed to read, resolved once and frozen into the assignment.
|
|
935
|
-
*
|
|
936
|
-
* Frozen matters more than it looks: a visitor who rotates their phone crosses the tablet/desktop
|
|
937
|
-
* breakpoint, and a context read live would move them to another variant mid-session. The context
|
|
938
|
-
* captured at assignment time is the one that decides, for as long as the assignment lives.
|
|
939
|
-
*/
|
|
940
866
|
export interface MvtContext {
|
|
941
867
|
unitId: string;
|
|
942
868
|
device: MvtDevice;
|
|
@@ -951,22 +877,12 @@ export interface MvtContext {
|
|
|
951
877
|
hasCart: boolean;
|
|
952
878
|
firstSeenAt: number;
|
|
953
879
|
now: number;
|
|
954
|
-
/** Query string of the landing URL, lowercased keys. Reads as a targeting dimension of its own so an ad link can pin an arm without an UTM convention. */
|
|
955
880
|
query: Record<string, string>;
|
|
956
|
-
/** Viewport width in CSS pixels. Coarser than the device buckets, for the tests where the breakpoint itself is the subject. */
|
|
957
881
|
screenWidth: number;
|
|
958
|
-
/** Sessions this unit has opened, this one included. */
|
|
959
882
|
visits: number;
|
|
960
883
|
loggedIn: boolean;
|
|
961
884
|
}
|
|
962
885
|
|
|
963
|
-
/**
|
|
964
|
-
* Fill in the dimensions an older caller does not provide.
|
|
965
|
-
*
|
|
966
|
-
* The context grew, and a front built against the previous shape must not start failing every
|
|
967
|
-
* leaf that reads a new field. Defaults are chosen so an absent dimension excludes rather than
|
|
968
|
-
* includes: a condition on something the caller cannot observe should not match everybody.
|
|
969
|
-
*/
|
|
970
886
|
export function mvtNormalizeContext(context: Partial<MvtContext> & { unitId: string }): MvtContext {
|
|
971
887
|
return {
|
|
972
888
|
device: '_Desktop_',
|
|
@@ -998,42 +914,14 @@ export interface MvtDecision {
|
|
|
998
914
|
overrides: MvtOverride[];
|
|
999
915
|
}
|
|
1000
916
|
|
|
1001
|
-
/**
|
|
1002
|
-
* How the control arm names itself to the analytics destinations.
|
|
1003
|
-
*
|
|
1004
|
-
* The fronts used to send a null variant for a control assignment, on the reasoning that "which
|
|
1005
|
-
* variant is this person seeing" and "are they in the experiment at all" are different questions.
|
|
1006
|
-
* In practice the destinations do not agree: a null is dropped by some, rendered as "(not set)"
|
|
1007
|
-
* by others, and never groups, so the control arm went missing from exactly the reports it is the
|
|
1008
|
-
* baseline of. A named value groups like any other, and null keeps a meaning of its own - the
|
|
1009
|
-
* visitor is outside the experiment - which is what it was being asked to carry two things for.
|
|
1010
|
-
*
|
|
1011
|
-
* Deliberately lowercase and free of the underscore convention: this is a value read in a report,
|
|
1012
|
-
* not an identifier the applications match on.
|
|
1013
|
-
*/
|
|
1014
917
|
export const MVT_CONTROL_VARIANT = 'control';
|
|
1015
918
|
|
|
1016
|
-
/**
|
|
1017
|
-
* @summary The variant name one decision reports to the trackers.
|
|
1018
|
-
*
|
|
1019
|
-
* Shared so the assignment list, the per-event attribution and the exposure events
|
|
1020
|
-
* cannot drift: one visitor showing up as `control` in one and as their arm key in
|
|
1021
|
-
* another is a segmentation that silently double counts.
|
|
1022
|
-
*/
|
|
1023
919
|
export function mvtTrackedVariant(decision: Pick<MvtDecision, 'control' | 'variantKey'>): string {
|
|
1024
920
|
return decision.control ? MVT_CONTROL_VARIANT : decision.variantKey;
|
|
1025
921
|
}
|
|
1026
922
|
|
|
1027
923
|
const MVT_RETURNING_AFTER_MS = 30 * 60 * 1000;
|
|
1028
924
|
|
|
1029
|
-
/**
|
|
1030
|
-
* FNV-1a, 32 bits.
|
|
1031
|
-
*
|
|
1032
|
-
* Chosen for being trivially reimplementable and byte-for-byte identical everywhere: the API, the
|
|
1033
|
-
* storefront and the checkout each bucket independently, with no round trip, and any disagreement
|
|
1034
|
-
* between them would show up as a visitor silently changing variant when they cross from one
|
|
1035
|
-
* application to the other.
|
|
1036
|
-
*/
|
|
1037
925
|
export function mvtHash(input: string): number {
|
|
1038
926
|
let hash = 0x811c9dc5;
|
|
1039
927
|
|
|
@@ -1056,23 +944,11 @@ export function mvtIsEligibleForTraffic(experiment: MvtExperiment, unitId: strin
|
|
|
1056
944
|
return mvtBucket(experiment.salt, unitId, 'traffic') < experiment.trafficPct * 100;
|
|
1057
945
|
}
|
|
1058
946
|
|
|
1059
|
-
/**
|
|
1060
|
-
* Pick the variant a unit falls into, by weight, deterministically.
|
|
1061
|
-
*
|
|
1062
|
-
* Weights are relative rather than percentages so that 90/10, 50/50 and 34/33/33 are all
|
|
1063
|
-
* expressible without the operator having to make anything add up. They are sorted by key first,
|
|
1064
|
-
* so that the mapping from bucket range to variant depends only on the weights themselves and not
|
|
1065
|
-
* on the order rows happened to come back from the database.
|
|
1066
|
-
*/
|
|
1067
947
|
export function mvtPickVariant(experiment: MvtExperiment, unitId: string, context?: MvtContext): MvtVariant | null {
|
|
1068
948
|
const targeted = experiment.variants
|
|
1069
949
|
.filter(variant => !!variant.audience)
|
|
1070
950
|
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || a.key.localeCompare(b.key));
|
|
1071
951
|
|
|
1072
|
-
// Targeted arms are rules, not shares: the first whose own conditions hold claims the unit
|
|
1073
|
-
// outright. Evaluated before the draw so that "everyone on mobile sees B" means exactly that
|
|
1074
|
-
// rather than "mobile visitors have a better chance of seeing B", which is what a weight
|
|
1075
|
-
// nudged by hand would have produced and what an operator would have had to verify by eye.
|
|
1076
952
|
if (context)
|
|
1077
953
|
for (const variant of targeted)
|
|
1078
954
|
if (mvtEvaluateAudience(variant.audience ?? null, context)) return variant;
|
|
@@ -1080,9 +956,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1080
956
|
const pool = experiment.variants.filter(variant => !variant.audience).sort((a, b) => a.key.localeCompare(b.key));
|
|
1081
957
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
1082
958
|
|
|
1083
|
-
// Every arm targeted and none of them matching leaves nobody to fall back on. The unit is
|
|
1084
|
-
// left out of the experiment entirely rather than pushed onto an arm whose conditions it
|
|
1085
|
-
// failed, which would silently make the targeting a lie.
|
|
1086
959
|
if (!pool.length || total <= 0) return null;
|
|
1087
960
|
|
|
1088
961
|
const target = (mvtBucket(experiment.salt, unitId) / 10000) * total;
|
|
@@ -1097,13 +970,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1097
970
|
return pool[pool.length - 1];
|
|
1098
971
|
}
|
|
1099
972
|
|
|
1100
|
-
/**
|
|
1101
|
-
* How the split actually resolves, for the operator rather than the evaluator.
|
|
1102
|
-
*
|
|
1103
|
-
* Weights are relative and targeted arms are outside the draw entirely, so the number an operator
|
|
1104
|
-
* typed and the share it buys are rarely the same. Computing that here, from the same rules the
|
|
1105
|
-
* bucketing obeys, is what lets the interface show a split bar that cannot drift from the truth.
|
|
1106
|
-
*/
|
|
1107
973
|
export function mvtDistribution(variants: readonly MvtVariant[]): MvtAllocationRow[] {
|
|
1108
974
|
const pool = variants.filter(variant => !variant.audience);
|
|
1109
975
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
@@ -1171,9 +1037,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1171
1037
|
case '_Is_Weekend_': return [0, 6].includes(new Date(context.now).getDay());
|
|
1172
1038
|
case '_Visits_At_Least_': return context.visits >= Number(values[0] ?? 1);
|
|
1173
1039
|
|
|
1174
|
-
// Written "name=value", or "name" on its own to test for presence. The value side goes
|
|
1175
|
-
// through the same wildcard matcher as the UTM leaves, so utm-like conventions carried in
|
|
1176
|
-
// a bespoke parameter behave the way an operator already expects them to.
|
|
1177
1040
|
case '_Query_Param_Matches_': {
|
|
1178
1041
|
return values.some(raw => {
|
|
1179
1042
|
const separator = raw.indexOf('=');
|
|
@@ -1188,10 +1051,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1188
1051
|
});
|
|
1189
1052
|
}
|
|
1190
1053
|
|
|
1191
|
-
// A bound left blank is open-ended rather than zero. `??` only catches an absent entry,
|
|
1192
|
-
// and the editor writes an empty string for a field the operator cleared - which
|
|
1193
|
-
// `Number('')` turns into 0, so "1024 and above" silently became "between 1024 and 0" and
|
|
1194
|
-
// matched nobody. Same reading as the date window below, which had it right.
|
|
1195
1054
|
case '_Screen_Width_Between_': {
|
|
1196
1055
|
const from = values[0] ? Number(values[0]) : 0;
|
|
1197
1056
|
const to = values[1] ? Number(values[1]) : Number.MAX_SAFE_INTEGER;
|
|
@@ -1201,9 +1060,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1201
1060
|
return context.screenWidth >= from && context.screenWidth <= to;
|
|
1202
1061
|
}
|
|
1203
1062
|
|
|
1204
|
-
// Bounds are wall-clock dates, and either may be left out for an open-ended window. This
|
|
1205
|
-
// is not the experiment's own schedule: it is for the tests whose point is a date, such
|
|
1206
|
-
// as a variant that only exists over a sale weekend.
|
|
1207
1063
|
case '_Date_Between_': {
|
|
1208
1064
|
const from = values[0] ? Date.parse(values[0]) : Number.NEGATIVE_INFINITY;
|
|
1209
1065
|
const to = values[1] ? Date.parse(values[1]) : Number.POSITIVE_INFINITY;
|
|
@@ -1217,14 +1073,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1217
1073
|
}
|
|
1218
1074
|
}
|
|
1219
1075
|
|
|
1220
|
-
/**
|
|
1221
|
-
* Evaluate an audience tree.
|
|
1222
|
-
*
|
|
1223
|
-
* A null tree targets everyone, which is the common case and should not require building a node.
|
|
1224
|
-
* An operator this build does not know returns false rather than throwing: a Tools release that
|
|
1225
|
-
* introduces a new operator must never be able to break a front that has not shipped yet, and
|
|
1226
|
-
* failing closed means the visitor stays on control instead of seeing a broken page.
|
|
1227
|
-
*/
|
|
1228
1076
|
export function mvtEvaluateAudience(node: MvtAudienceNode | null, context: MvtContext): boolean {
|
|
1229
1077
|
if (!node) return true;
|
|
1230
1078
|
|
|
@@ -1248,14 +1096,6 @@ export function mvtIsLive(experiment: MvtExperiment, now: number): boolean {
|
|
|
1248
1096
|
return experiment.status === '_Running_' && mvtIsWithinWindow(experiment, now);
|
|
1249
1097
|
}
|
|
1250
1098
|
|
|
1251
|
-
/**
|
|
1252
|
-
* Resolve every decision for one unit, in one pass.
|
|
1253
|
-
*
|
|
1254
|
-
* Experiments are walked by descending priority so that exclusion groups resolve predictably: the
|
|
1255
|
-
* first live experiment of a group claims it, and the rest are skipped for this unit. Without an
|
|
1256
|
-
* order the winner would depend on row order, and two visitors could end up in mutually exclusive
|
|
1257
|
-
* tests that were meant to be exclusive.
|
|
1258
|
-
*/
|
|
1259
1099
|
export function mvtResolve(config: MvtConfig, context: MvtContext, forced: Record<string, string> = {}): MvtDecision[] {
|
|
1260
1100
|
if (!config.enabled) return [];
|
|
1261
1101
|
|
|
@@ -1301,20 +1141,8 @@ function mvtToDecision(experiment: MvtExperiment, variant: MvtVariant): MvtDecis
|
|
|
1301
1141
|
};
|
|
1302
1142
|
}
|
|
1303
1143
|
|
|
1304
|
-
// -----------------------------------------------------------------------------
|
|
1305
|
-
// Slot registry
|
|
1306
|
-
// -----------------------------------------------------------------------------
|
|
1307
|
-
|
|
1308
1144
|
export type MvtSlotKind = 'boolean' | 'number' | 'duration' | 'text' | 'i18n' | 'color' | 'image' | 'enum' | 'list' | 'object' | 'record';
|
|
1309
1145
|
|
|
1310
|
-
/**
|
|
1311
|
-
* One editable field of a fixed-shape slot.
|
|
1312
|
-
*
|
|
1313
|
-
* The registry describes the shape rather than leaving the interface to infer it, because the
|
|
1314
|
-
* alternative is an operator typing JSON into a textarea and discovering their mistake from a
|
|
1315
|
-
* customer. A field the editor does not recognise degrades to a text input rather than
|
|
1316
|
-
* disappearing, so adding a kind here never blanks out a control in an older build.
|
|
1317
|
-
*/
|
|
1318
1146
|
export interface MvtSlotField {
|
|
1319
1147
|
key: string;
|
|
1320
1148
|
label: string;
|
|
@@ -1327,50 +1155,19 @@ export interface MvtSlotDefinition {
|
|
|
1327
1155
|
scope: MvtScope;
|
|
1328
1156
|
area: string;
|
|
1329
1157
|
label: string;
|
|
1330
|
-
/** One short sentence an operator reads before deciding whether this is the slot they want. */
|
|
1331
1158
|
hint: string;
|
|
1332
1159
|
kind: MvtSlotKind;
|
|
1333
1160
|
ops: readonly MvtOverrideOp[];
|
|
1334
|
-
/** Allowed values for an `enum`, or the closed set of entries for a constrained `list`. */
|
|
1335
1161
|
options?: readonly string[];
|
|
1336
|
-
/** The named fields of an `object`, or the per-item fields of a list of objects. */
|
|
1337
1162
|
fields?: readonly MvtSlotField[];
|
|
1338
|
-
/** The kind every value takes in a `record`, whose keys are open-ended. */
|
|
1339
1163
|
entryKind?: MvtSlotKind;
|
|
1340
|
-
/** Which property identifies an item, for the `remove`, `patch` and `reorder` operations. */
|
|
1341
1164
|
itemKey?: string;
|
|
1342
1165
|
schema: z.ZodType<unknown>;
|
|
1343
1166
|
}
|
|
1344
1167
|
|
|
1345
|
-
/**
|
|
1346
|
-
* A piece of copy, written in whichever languages the operator filled in.
|
|
1347
|
-
*
|
|
1348
|
-
* Partial on purpose, and it has to be said in the schema rather than left to convention: zod
|
|
1349
|
-
* treats a record keyed by a closed set as exhaustive, so `z.record` here would refuse a French-
|
|
1350
|
-
* only override at write time - which is the normal case, since a language left empty is
|
|
1351
|
-
* documented everywhere as keeping the untouched original rather than blanking it.
|
|
1352
|
-
*/
|
|
1353
1168
|
const i18nTextSchema = z.partialRecord(LangSchema, z.string());
|
|
1354
|
-
/**
|
|
1355
|
-
* A hex colour, or the one keyword that is not a colour.
|
|
1356
|
-
*
|
|
1357
|
-
* The value space stays closed - it is written straight onto a customer's page - but it has to
|
|
1358
|
-
* hold "no background at all". Without it a section given a background by mistake could be
|
|
1359
|
-
* recoloured and never undone: every value the picker can produce paints something, and clearing
|
|
1360
|
-
* the override only restores whatever the page painted in the first place.
|
|
1361
|
-
*/
|
|
1362
1169
|
const colorSchema = z.string().regex(/^(#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})|transparent)$/i);
|
|
1363
1170
|
|
|
1364
|
-
/**
|
|
1365
|
-
* What a link or image override may point at.
|
|
1366
|
-
*
|
|
1367
|
-
* Overrides are authored by operators and applied verbatim onto attributes of a customer's page,
|
|
1368
|
-
* so the value space has to be closed the same way the patch vocabulary is. A `javascript:` href
|
|
1369
|
-
* written through the studio would otherwise ride an override straight into `setAttribute` and
|
|
1370
|
-
* run in every visitor's browser, which turns a copy-editing tool into stored XSS. Only http(s)
|
|
1371
|
-
* and same-site relative destinations survive; everything else is refused at write time by the
|
|
1372
|
-
* schemas and ignored at render time by the fronts.
|
|
1373
|
-
*/
|
|
1374
1171
|
const SAFE_HREF_PATTERN = /^(https?:\/\/|\/(?!\/)|#|\?)/i;
|
|
1375
1172
|
const SAFE_IMAGE_PATTERN = /^(https?:\/\/|\/(?!\/)|assets\/)/i;
|
|
1376
1173
|
|
|
@@ -1386,21 +1183,8 @@ const safeHrefSchema = z.string().max(2048).refine(mvtIsSafeHref, { message: 'hr
|
|
|
1386
1183
|
const safeImageSchema = z.string().max(2048).refine(mvtIsSafeImage, { message: 'image must be http(s) or a same-site relative path' });
|
|
1387
1184
|
const safeRouteSchema = z.string().max(512).refine(value => value.startsWith('/') && !value.startsWith('//'), { message: 'route must be an absolute in-app path' });
|
|
1388
1185
|
|
|
1389
|
-
/**
|
|
1390
|
-
* What a test may do to one anchored element.
|
|
1391
|
-
*
|
|
1392
|
-
* This is the whole vocabulary of the visual editor, and it is deliberately short. Hide it, move
|
|
1393
|
-
* it, reword it, repoint it, restyle it within a closed set of properties. Nothing here can
|
|
1394
|
-
* inject markup or a script, so an override authored by clicking around a page carries the same
|
|
1395
|
-
* blast radius as one typed into the registry editor, which is what makes the studio safe to
|
|
1396
|
-
* hand to somebody who is not going to read a diff.
|
|
1397
|
-
*
|
|
1398
|
-
* Every field is optional and absence means untouched, so the patches stay small and two editing
|
|
1399
|
-
* sessions on the same element compose instead of overwriting one another.
|
|
1400
|
-
*/
|
|
1401
1186
|
export const MvtAnchorPatchSchema = z.object({
|
|
1402
1187
|
hidden: z.boolean().optional(),
|
|
1403
|
-
/** Position among its siblings. Lower comes first; anchors without one keep their place. */
|
|
1404
1188
|
order: z.number().int().min(-999).max(999).optional(),
|
|
1405
1189
|
text: i18nTextSchema.optional(),
|
|
1406
1190
|
href: safeHrefSchema.optional(),
|
|
@@ -1435,19 +1219,6 @@ function slot(definition: MvtSlotDefinition): MvtSlotDefinition {
|
|
|
1435
1219
|
return definition;
|
|
1436
1220
|
}
|
|
1437
1221
|
|
|
1438
|
-
/**
|
|
1439
|
-
* The single source of truth for what a test is allowed to change.
|
|
1440
|
-
*
|
|
1441
|
-
* Shared by all four applications on purpose. The API validates writes against it, so a malformed
|
|
1442
|
-
* override is refused at authoring time rather than discovered by a customer; Tools reads it to
|
|
1443
|
-
* render a typed editor instead of a free JSON field; and the fronts read it to reject anything
|
|
1444
|
-
* that slipped through anyway. A slot absent from this list simply does not exist, which is what
|
|
1445
|
-
* keeps the blast radius of the whole feature bounded.
|
|
1446
|
-
*
|
|
1447
|
-
* Nothing monetary appears here, and nothing ever should. Prices, items and discounts are steered
|
|
1448
|
-
* by campaigns and discounts, which carry their own controls and their own audit trail. A test
|
|
1449
|
-
* decides how an offer is presented, never what it costs.
|
|
1450
|
-
*/
|
|
1451
1222
|
export const MVT_SLOTS: readonly MvtSlotDefinition[] = [
|
|
1452
1223
|
slot({ key: 'storefront.sections.order', scope: '_Storefront_', area: 'Structure', label: 'Section order', hint: 'Reorder the blocks of a page. Blocks not listed keep their place at the end.', kind: 'list', ops: ['reorder', 'set'], itemKey: 'id', schema: z.array(z.string()) }),
|
|
1453
1224
|
slot({ key: 'storefront.sections.hidden', scope: '_Storefront_', area: 'Structure', label: 'Hidden sections', hint: 'Blocks to take off the page entirely.', kind: 'list', ops: ['set'], schema: z.array(z.string()) }),
|
|
@@ -1604,13 +1375,6 @@ export interface MvtOverrideIssue {
|
|
|
1604
1375
|
reason: string;
|
|
1605
1376
|
}
|
|
1606
1377
|
|
|
1607
|
-
/**
|
|
1608
|
-
* Validate a variant's overrides against the registry.
|
|
1609
|
-
*
|
|
1610
|
-
* Called by the API before a variant is stored, so that a slot typo or a colour written as a name
|
|
1611
|
-
* instead of a hex value is a 422 for the operator who can still fix it, rather than a silently
|
|
1612
|
-
* ignored override that makes a test look like it had no effect.
|
|
1613
|
-
*/
|
|
1614
1378
|
export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue[] {
|
|
1615
1379
|
const issues: MvtOverrideIssue[] = [];
|
|
1616
1380
|
|
|
@@ -1638,10 +1402,6 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1638
1402
|
return;
|
|
1639
1403
|
}
|
|
1640
1404
|
|
|
1641
|
-
// A merge onto a record is still a record of the same entries, so the full schema
|
|
1642
|
-
// applies and catches a malformed anchor patch here rather than in a customer's
|
|
1643
|
-
// browser. A merge onto a fixed-shape object is a partial by definition, and running
|
|
1644
|
-
// the whole schema over it would refuse every legitimate single-field edit.
|
|
1645
1405
|
if (definition.kind === 'record' && !definition.schema.safeParse(override.value).success)
|
|
1646
1406
|
issues.push({ index, slot: override.slot, reason: 'invalid_value' });
|
|
1647
1407
|
|
|
@@ -1655,51 +1415,18 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1655
1415
|
return issues;
|
|
1656
1416
|
}
|
|
1657
1417
|
|
|
1658
|
-
/**
|
|
1659
|
-
* Steps no experiment may hide on any checkout.
|
|
1660
|
-
*
|
|
1661
|
-
* Each of these writes something the rest of the funnel cannot do without: Profile decides
|
|
1662
|
-
* which offers exist at all, Information carries the customer identity, Delivery the address
|
|
1663
|
-
* the price depends on, Payment the money. A funnel skipping one of them is not a variation, it
|
|
1664
|
-
* is a checkout that blocks on the step after the missing one - which is exactly what happened
|
|
1665
|
-
* when hiding the profile step was allowed.
|
|
1666
|
-
*/
|
|
1667
1418
|
export const MVT_UNHIDEABLE_STEPS: readonly CartStep[] = ['_Profile_', '_Information_', '_Delivery_', '_Payment_'];
|
|
1668
1419
|
|
|
1669
|
-
/**
|
|
1670
|
-
* The only steps a test may skip.
|
|
1671
|
-
*
|
|
1672
|
-
* Options is optional by nature. Offers is skippable only when something else picks the offer:
|
|
1673
|
-
* either the partner funnel, which applies its single offer by itself, or the variant, through
|
|
1674
|
-
* the `checkout.offers.default` slot. Without one of those nothing selects an offer, and the
|
|
1675
|
-
* Options step has nothing to attach a warranty to.
|
|
1676
|
-
*/
|
|
1677
1420
|
export const MVT_HIDEABLE_STEPS: readonly CartStep[] = ['_Offers_', '_Options_'];
|
|
1678
1421
|
|
|
1679
|
-
/** Whether a preselection entry names an item identifier rather than a SKU. */
|
|
1680
1422
|
const UUID_LIKE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
1681
1423
|
|
|
1682
|
-
/**
|
|
1683
|
-
* The default offer a set of overrides names, if any.
|
|
1684
|
-
*/
|
|
1685
1424
|
export function mvtDefaultOfferOf(overrides: readonly MvtOverride[]): string | null {
|
|
1686
1425
|
const override = overrides.find(entry => entry.slot === 'checkout.offers.default' && entry.op === 'set');
|
|
1687
1426
|
|
|
1688
1427
|
return typeof override?.value === 'string' ? override.value : null;
|
|
1689
1428
|
}
|
|
1690
1429
|
|
|
1691
|
-
/**
|
|
1692
|
-
* Validate a version's overrides against the checkout it is written for.
|
|
1693
|
-
*
|
|
1694
|
-
* Runs after mvtValidateOverrides, which already knows the value is well-typed; this one knows
|
|
1695
|
-
* whether the value names something the target checkout has. Hiding a step the partner already
|
|
1696
|
-
* hides is refused rather than tolerated, because an override that changes nothing on the funnel
|
|
1697
|
-
* it was written for is an override somebody will later wonder about. Preselecting an option the
|
|
1698
|
-
* partner blocks is refused for the plainer reason that the customer could never see it.
|
|
1699
|
-
*
|
|
1700
|
-
* The step order stays a permutation of the six steps on every checkout, hidden ones included:
|
|
1701
|
-
* hiding is a separate list, and the fronts discard an order that drops a step as malformed.
|
|
1702
|
-
*/
|
|
1703
1430
|
export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target: MvtCheckoutTarget): MvtOverrideIssue[] {
|
|
1704
1431
|
const issues: MvtOverrideIssue[] = [];
|
|
1705
1432
|
const hidden = new Set<string>(target.hiddenSteps);
|
|
@@ -1736,9 +1463,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1736
1463
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
1737
1464
|
}
|
|
1738
1465
|
|
|
1739
|
-
// A warranty is matched by SKU or by item id on the front, so only an entry that looks
|
|
1740
|
-
// like an identifier can be checked here. A SKU is left to the front, which knows the
|
|
1741
|
-
// catalogue in the customer's country; naming a blocked item id is refused outright.
|
|
1742
1466
|
if (override.slot === 'checkout.warranty.preselected' && typeof override.value === 'string' && options.size) {
|
|
1743
1467
|
if (override.value !== '_None_' && UUID_LIKE.test(override.value) && !options.has(override.value))
|
|
1744
1468
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
@@ -1753,13 +1477,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1753
1477
|
return issues;
|
|
1754
1478
|
}
|
|
1755
1479
|
|
|
1756
|
-
/**
|
|
1757
|
-
* Apply one override to a base value.
|
|
1758
|
-
*
|
|
1759
|
-
* Every branch is total: an operation that cannot be carried out on the shape it was given returns
|
|
1760
|
-
* the base untouched. A test that does nothing is a disappointment; a test that throws inside a
|
|
1761
|
-
* component's render path is an outage, and the two are not worth trading against each other.
|
|
1762
|
-
*/
|
|
1763
1480
|
export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
1764
1481
|
const value = override.value;
|
|
1765
1482
|
|
|
@@ -1827,28 +1544,14 @@ export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
|
1827
1544
|
}
|
|
1828
1545
|
}
|
|
1829
1546
|
|
|
1830
|
-
// -----------------------------------------------------------------------------
|
|
1831
|
-
// Anchors
|
|
1832
|
-
// -----------------------------------------------------------------------------
|
|
1833
|
-
|
|
1834
1547
|
export const MVT_ANCHOR_ATTRIBUTE = 'data-mvt-anchor';
|
|
1835
1548
|
|
|
1836
|
-
/** The tags a text block may contain and still be edited wholesale: pure inline formatting. */
|
|
1837
1549
|
const MVT_INLINE_TEXT_TAGS = new Set(['BR', 'B', 'STRONG', 'EM', 'I', 'U', 'SPAN', 'SMALL', 'SUP', 'SUB', 'MARK']);
|
|
1838
1550
|
|
|
1839
|
-
/**
|
|
1840
|
-
* Whether an element holds nothing but text as far as editing is concerned.
|
|
1841
|
-
*
|
|
1842
|
-
* Used to be "no element children at all", which locked a title split by a <br> or a label
|
|
1843
|
-
* wrapped in a <strong> out of the double-click editor for no reason an operator could see.
|
|
1844
|
-
* Inline formatting tags are text; a nested component, a link or an image is not, because
|
|
1845
|
-
* replacing the textContent of those would delete markup Angular will not put back.
|
|
1846
|
-
*/
|
|
1847
1551
|
export function mvtHoldsOnlyText(node: HTMLElement): boolean {
|
|
1848
1552
|
return Array.from(node.querySelectorAll('*')).every(child => MVT_INLINE_TEXT_TAGS.has(child.tagName));
|
|
1849
1553
|
}
|
|
1850
1554
|
|
|
1851
|
-
/** What the style inspector edits, read from the page rather than assumed. */
|
|
1852
1555
|
export interface MvtAnchorStyleSnapshot {
|
|
1853
1556
|
background: string | null;
|
|
1854
1557
|
color: string | null;
|
|
@@ -1869,14 +1572,6 @@ function mvtColorToHex(value: string): string | null {
|
|
|
1869
1572
|
return `#${hex(match[1])}${hex(match[2])}${hex(match[3])}`;
|
|
1870
1573
|
}
|
|
1871
1574
|
|
|
1872
|
-
/**
|
|
1873
|
-
* Read the style an element actually renders with, in the vocabulary of the patch schema.
|
|
1874
|
-
*
|
|
1875
|
-
* The inspector used to open every element on white-on-black defaults, which told the operator
|
|
1876
|
-
* the editor did not know the page - and it did not. The background climbs the ancestors until
|
|
1877
|
-
* something opaque is found, because "transparent" is never what a person means by the colour
|
|
1878
|
-
* behind a title.
|
|
1879
|
-
*/
|
|
1880
1575
|
export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapshot {
|
|
1881
1576
|
const computed = window.getComputedStyle(node);
|
|
1882
1577
|
|
|
@@ -1906,24 +1601,10 @@ export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapsho
|
|
|
1906
1601
|
};
|
|
1907
1602
|
}
|
|
1908
1603
|
|
|
1909
|
-
/**
|
|
1910
|
-
* The anchors slot for one scope.
|
|
1911
|
-
*
|
|
1912
|
-
* Kept as a lookup rather than a naming convention the call sites repeat, because the studio, the
|
|
1913
|
-
* API validator and the two fronts all have to agree on it, and a typo in any of the four would
|
|
1914
|
-
* produce an override that validates and does nothing.
|
|
1915
|
-
*/
|
|
1916
1604
|
export function mvtAnchorsSlot(scope: MvtScope): string {
|
|
1917
1605
|
return scope === '_Checkout_' ? 'checkout.anchors' : 'storefront.anchors';
|
|
1918
1606
|
}
|
|
1919
1607
|
|
|
1920
|
-
/**
|
|
1921
|
-
* Fold a stack of anchor patches into one.
|
|
1922
|
-
*
|
|
1923
|
-
* Later patches win field by field rather than wholesale: two overrides touching the same element,
|
|
1924
|
-
* one hiding it and one rewording it, both have to survive, or the operator has to remember which
|
|
1925
|
-
* of their own edits cancelled which.
|
|
1926
|
-
*/
|
|
1927
1608
|
export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtAnchorPatch | undefined): MvtAnchorPatch {
|
|
1928
1609
|
if (!base) return next ?? {};
|
|
1929
1610
|
if (!next) return base;
|
|
@@ -1936,13 +1617,6 @@ export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtA
|
|
|
1936
1617
|
};
|
|
1937
1618
|
}
|
|
1938
1619
|
|
|
1939
|
-
/**
|
|
1940
|
-
* The inline style an anchor patch asks for, as a plain property bag.
|
|
1941
|
-
*
|
|
1942
|
-
* Only the closed set the patch schema allows can come out of here, which is the point: a front
|
|
1943
|
-
* applying this is not evaluating anything an operator wrote, it is reading a handful of numbers
|
|
1944
|
-
* and colours that have already been validated twice.
|
|
1945
|
-
*/
|
|
1946
1620
|
export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record<string, string> {
|
|
1947
1621
|
const style = patch?.style;
|
|
1948
1622
|
|
|
@@ -1963,188 +1637,68 @@ export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record
|
|
|
1963
1637
|
return out;
|
|
1964
1638
|
}
|
|
1965
1639
|
|
|
1966
|
-
// -----------------------------------------------------------------------------
|
|
1967
|
-
// Studio bridge
|
|
1968
|
-
// -----------------------------------------------------------------------------
|
|
1969
|
-
|
|
1970
|
-
/**
|
|
1971
|
-
* The message vocabulary between the Tools studio and the front rendered inside its frame.
|
|
1972
|
-
*
|
|
1973
|
-
* A separate protocol rather than a preview link with more query parameters, because the studio
|
|
1974
|
-
* has to do two things a link cannot: read back what is actually on the page - the anchors, their
|
|
1975
|
-
* labels, their nesting - and apply an edit without a reload, so that changing a colour is a
|
|
1976
|
-
* colour changing rather than a page blinking.
|
|
1977
|
-
*
|
|
1978
|
-
* Every message carries the protocol version. A front and a Tools release drift apart eventually,
|
|
1979
|
-
* and a version mismatch has to degrade to a plain preview rather than to an editor whose clicks
|
|
1980
|
-
* quietly do nothing.
|
|
1981
|
-
*/
|
|
1982
1640
|
export const MVT_STUDIO_PROTOCOL = 4;
|
|
1983
1641
|
|
|
1984
1642
|
export type MvtStudioAnchorRole = 'section' | 'cta' | 'text' | 'image' | 'block';
|
|
1985
1643
|
|
|
1986
1644
|
export interface MvtStudioAnchor {
|
|
1987
|
-
/** Stable identifier written into the markup by the front, never derived from the DOM position. */
|
|
1988
1645
|
id: string;
|
|
1989
1646
|
label: string;
|
|
1990
1647
|
role: MvtStudioAnchorRole;
|
|
1991
|
-
/** The anchor this one sits inside, for the studio's tree. Null at the top level. */
|
|
1992
1648
|
parentId: string | null;
|
|
1993
1649
|
order: number;
|
|
1994
|
-
/** What the untouched page shows today, so the editor opens on the real copy rather than an empty field. */
|
|
1995
1650
|
text: string | null;
|
|
1996
1651
|
movable: boolean;
|
|
1997
1652
|
hideable: boolean;
|
|
1998
|
-
/**
|
|
1999
|
-
* True for an element the page keeps hidden until a patch says `hidden: false`.
|
|
2000
|
-
*
|
|
2001
|
-
* Some elements only exist to be switched on by a test, a recommendation tag for instance.
|
|
2002
|
-
* Absent means false, so an older front keeps its current meaning.
|
|
2003
|
-
*/
|
|
2004
1653
|
hiddenByDefault?: boolean;
|
|
2005
|
-
/**
|
|
2006
|
-
* Slot keys this element governs, beyond its own patch.
|
|
2007
|
-
*
|
|
2008
|
-
* Declared by the front on the element people would naturally click for the change: the
|
|
2009
|
-
* checkout breadcrumb carries the step order and hidden steps, the flash banner carries its
|
|
2010
|
-
* placement. The studio and the in-page menu build their controls from the slot registry, so
|
|
2011
|
-
* a structural change is a right click on the thing itself rather than a form beside it.
|
|
2012
|
-
*/
|
|
2013
1654
|
slots: string[];
|
|
2014
|
-
/**
|
|
2015
|
-
* Opaque identity of the container the element can be reordered inside.
|
|
2016
|
-
*
|
|
2017
|
-
* Two anchors sharing a group share a DOM parent whose layout honours the order property.
|
|
2018
|
-
* The studio's own move arrows used to group by the nearest anchored ancestor, which is a
|
|
2019
|
-
* different relation: a hero's title and its visual share an ancestor but live in different
|
|
2020
|
-
* containers, and swapping their ranks would have moved nothing.
|
|
2021
|
-
*/
|
|
2022
1655
|
group: string;
|
|
2023
|
-
/** The style the element renders with today, so the inspector opens on the truth. */
|
|
2024
1656
|
style: MvtAnchorStyleSnapshot;
|
|
2025
1657
|
rect: { top: number; left: number; width: number; height: number };
|
|
2026
1658
|
}
|
|
2027
1659
|
|
|
2028
|
-
/**
|
|
2029
|
-
* Somewhere the studio can go next.
|
|
2030
|
-
*
|
|
2031
|
-
* The editor used to reach other pages through a free-text path field, which asked an operator to
|
|
2032
|
-
* already know the route they wanted and silently rendered a 404 inside the frame when they were
|
|
2033
|
-
* one character out. The front knows its own routes, so it says what they are.
|
|
2034
|
-
*
|
|
2035
|
-
* `kind` separates what the page happens to link to from what the front declares it can reach.
|
|
2036
|
-
* A storefront only has links; the checkout has steps that exist whether or not the current page
|
|
2037
|
-
* links to them, and an operator editing the payment step should not have to walk the funnel to
|
|
2038
|
-
* get there.
|
|
2039
|
-
*/
|
|
2040
1660
|
export interface MvtStudioLink {
|
|
2041
1661
|
path: string;
|
|
2042
1662
|
label: string;
|
|
2043
1663
|
kind: 'link' | 'step';
|
|
2044
|
-
/** Steps the cart has not unlocked yet are offered but marked, rather than hidden. */
|
|
2045
1664
|
reachable: boolean;
|
|
2046
1665
|
}
|
|
2047
1666
|
|
|
2048
|
-
/**
|
|
2049
|
-
* The simulated basket the checkout studio runs on.
|
|
2050
|
-
*
|
|
2051
|
-
* Editing the funnel means being inside it, and being inside it means holding a cart. Minting one
|
|
2052
|
-
* by hand through the real onboarding flow every time is what made the checkout scope effectively
|
|
2053
|
-
* uneditable.
|
|
2054
|
-
*/
|
|
2055
1667
|
export interface MvtStudioCart {
|
|
2056
1668
|
reference: string;
|
|
2057
1669
|
secret: string;
|
|
2058
|
-
/** Where the simulated cart currently sits, so the studio can offer the steps behind it. */
|
|
2059
1670
|
step: string;
|
|
2060
1671
|
simulated: true;
|
|
2061
|
-
/**
|
|
2062
|
-
* The checkout the basket was minted for. Null is the plain checkout.
|
|
2063
|
-
*
|
|
2064
|
-
* Carried so the studio can tell a basket minted for one partner from one minted for
|
|
2065
|
-
* another and never hand a partner funnel a basket that does not belong to it.
|
|
2066
|
-
*/
|
|
2067
1672
|
partnerId?: string | null;
|
|
2068
1673
|
}
|
|
2069
1674
|
|
|
2070
|
-
/**
|
|
2071
|
-
* One popup the page can open on demand.
|
|
2072
|
-
*
|
|
2073
|
-
* Popups exist behind timers, scroll depths and frequency caps by design, which makes them
|
|
2074
|
-
* invisible to an operator who opened the studio thirty seconds ago. The front declares the ones
|
|
2075
|
-
* it has, and the studio - or the in-frame overlay - opens them directly, so editing a popup does
|
|
2076
|
-
* not start with waiting for it.
|
|
2077
|
-
*/
|
|
2078
1675
|
export interface MvtStudioPopup {
|
|
2079
1676
|
id: string;
|
|
2080
1677
|
label: string;
|
|
2081
1678
|
}
|
|
2082
1679
|
|
|
2083
|
-
/** Tools to front. */
|
|
2084
1680
|
export type MvtStudioRequest =
|
|
2085
1681
|
| { protocol: number; type: 'studio:hello' }
|
|
2086
1682
|
| { protocol: number; type: 'studio:scan' }
|
|
2087
1683
|
| { protocol: number; type: 'studio:select'; anchorId: string | null }
|
|
2088
|
-
/** Open one declared popup by identifier, or close whichever is open with null. */
|
|
2089
1684
|
| { protocol: number; type: 'studio:popup'; popup: string | null }
|
|
2090
|
-
/**
|
|
2091
|
-
* The full authoring state of the variant on screen: the anchor patch set plus every
|
|
2092
|
-
* non-anchor override it carries. The frame renders exactly this, so a structural edit - a
|
|
2093
|
-
* reordered funnel, a moved banner - shows up live the same way a reworded title does.
|
|
2094
|
-
*/
|
|
2095
1685
|
| { protocol: number; type: 'studio:apply'; anchors: Record<string, MvtAnchorPatch>; overrides: MvtOverride[]; lang: string }
|
|
2096
1686
|
| { protocol: number; type: 'studio:mode'; picking: boolean }
|
|
2097
1687
|
| { protocol: number; type: 'studio:navigate'; path: string }
|
|
2098
1688
|
| { protocol: number; type: 'studio:links' }
|
|
2099
1689
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart };
|
|
2100
1690
|
|
|
2101
|
-
/** Front to Tools. */
|
|
2102
1691
|
export type MvtStudioEvent =
|
|
2103
|
-
/**
|
|
2104
|
-
* `partner` is the checkout the frame is actually running as, read from its own URL. Null is
|
|
2105
|
-
* the plain checkout; absent means an older front that does not say. The studio compares it
|
|
2106
|
-
* with the target it meant to open and refuses to write into a frame showing another one.
|
|
2107
|
-
*/
|
|
2108
1692
|
| { protocol: number; type: 'studio:ready'; scope: MvtScope; path: string; langs: string[]; lang: string; partner?: string | null }
|
|
2109
1693
|
| { protocol: number; type: 'studio:anchors'; anchors: MvtStudioAnchor[]; path: string }
|
|
2110
1694
|
| { protocol: number; type: 'studio:picked'; anchor: MvtStudioAnchor }
|
|
2111
1695
|
| { protocol: number; type: 'studio:navigated'; path: string }
|
|
2112
1696
|
| { protocol: number; type: 'studio:links'; links: MvtStudioLink[]; path: string }
|
|
2113
1697
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart | null }
|
|
2114
|
-
/** The popups this page can open on demand, re-announced whenever the set changes. */
|
|
2115
1698
|
| { protocol: number; type: 'studio:popups'; popups: MvtStudioPopup[] }
|
|
2116
|
-
/**
|
|
2117
|
-
* An edit made on the page itself rather than in the inspector.
|
|
2118
|
-
*
|
|
2119
|
-
* Reported as a patch fragment rather than as a whole patch, so the studio merges it into
|
|
2120
|
-
* whatever that anchor already carries instead of replacing it: dragging a section must not
|
|
2121
|
-
* discard the colour somebody set on it a minute earlier.
|
|
2122
|
-
*
|
|
2123
|
-
* The page never writes to the saved variant. It says what changed and the studio decides -
|
|
2124
|
-
* which keeps undo, the dirty marker and the save button in one place, and means a front that
|
|
2125
|
-
* gets this wrong can produce a bad edit but never a bad save.
|
|
2126
|
-
*/
|
|
2127
1699
|
| { protocol: number; type: 'studio:edited'; anchorId: string; patch: Partial<MvtAnchorPatch>; replace?: boolean }
|
|
2128
|
-
/**
|
|
2129
|
-
* A structural edit made through the in-page menu: a slot value rather than an anchor patch.
|
|
2130
|
-
*
|
|
2131
|
-
* Same contract as `studio:edited`: the page proposes, the studio disposes. The value is
|
|
2132
|
-
* validated by Tools against the slot registry before it ever lands in the variant, so a
|
|
2133
|
-
* bridge bug can produce a wrong preview but never a wrong save.
|
|
2134
|
-
*/
|
|
2135
1700
|
| { protocol: number; type: 'studio:slot'; slot: string; op: 'set' | 'merge'; value: unknown };
|
|
2136
1701
|
|
|
2137
|
-
/**
|
|
2138
|
-
* Strip a deployment base path from a document pathname, yielding the router-space path.
|
|
2139
|
-
*
|
|
2140
|
-
* A front served under a sub-path (the checkout lives at `/checkout/` on the shared staging host)
|
|
2141
|
-
* sees `window.location.pathname` carry that prefix, while its router - and the studio driving it -
|
|
2142
|
-
* both reason in base-relative paths. Every path crossing the studio bridge goes through this, so
|
|
2143
|
-
* the two sides always speak the same path space whatever the deployment layout is.
|
|
2144
|
-
*
|
|
2145
|
-
* The base is matched as a whole segment: `/checkout` strips `/checkout/cart` down to `/cart` and
|
|
2146
|
-
* leaves `/checkout-help` alone, because that is a different route and not a prefixed one.
|
|
2147
|
-
*/
|
|
2148
1702
|
export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
2149
1703
|
const base = (basePath ?? '').replace(/\/+$/, '');
|
|
2150
1704
|
|
|
@@ -2155,12 +1709,6 @@ export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
|
2155
1709
|
return pathname || '/';
|
|
2156
1710
|
}
|
|
2157
1711
|
|
|
2158
|
-
/**
|
|
2159
|
-
* The base path the document is served under, read from the base element the framework injected.
|
|
2160
|
-
*
|
|
2161
|
-
* Read from the DOM rather than configured, so the same build works at the domain root and under
|
|
2162
|
-
* a sub-path without anyone remembering to keep a constant in step with the deployment.
|
|
2163
|
-
*/
|
|
2164
1712
|
export function mvtBasePathOf(doc: Document): string {
|
|
2165
1713
|
try {
|
|
2166
1714
|
return new URL(doc.baseURI).pathname.replace(/\/+$/, '') || '/';
|
|
@@ -2169,21 +1717,6 @@ export function mvtBasePathOf(doc: Document): string {
|
|
|
2169
1717
|
}
|
|
2170
1718
|
}
|
|
2171
1719
|
|
|
2172
|
-
/**
|
|
2173
|
-
* Collect the navigable links of the page the front is currently showing.
|
|
2174
|
-
*
|
|
2175
|
-
* Shared rather than written twice, because the filtering is where this gets subtle and getting it
|
|
2176
|
-
* wrong in one front and not the other produces a link list that behaves differently depending on
|
|
2177
|
-
* which scope is being edited.
|
|
2178
|
-
*
|
|
2179
|
-
* Only same-origin, non-anchor, non-download links survive. An external link would navigate the
|
|
2180
|
-
* frame off the front entirely, taking the preview token with it and leaving the studio talking to
|
|
2181
|
-
* a page that has never heard of it; an in-page anchor is not a destination.
|
|
2182
|
-
*
|
|
2183
|
-
* `basePath` is the deployment prefix of the front, when it has one. Collected hrefs carry it -
|
|
2184
|
-
* the browser resolves them against the base element - while the studio and the router reason in
|
|
2185
|
-
* base-relative paths, so it is stripped here rather than by every caller.
|
|
2186
|
-
*/
|
|
2187
1720
|
export function mvtCollectLinks(root: ParentNode, origin: string, basePath = ''): MvtStudioLink[] {
|
|
2188
1721
|
const seen = new Set<string>();
|
|
2189
1722
|
const links: MvtStudioLink[] = [];
|
|
@@ -2210,9 +1743,6 @@ export function mvtCollectLinks(root: ParentNode, origin: string, basePath = '')
|
|
|
2210
1743
|
|
|
2211
1744
|
seen.add(path);
|
|
2212
1745
|
|
|
2213
|
-
// The visible text, collapsed. An operator picks a destination by the words they can see
|
|
2214
|
-
// on the page, not by its route, and a label carrying the whitespace of a three-line
|
|
2215
|
-
// menu entry is unreadable in a dropdown.
|
|
2216
1746
|
const label = (anchor.textContent ?? '').replace(/\s+/g, ' ').trim();
|
|
2217
1747
|
|
|
2218
1748
|
links.push({ path, label: label || path, kind: 'link', reachable: true });
|