@lifeaz/lors-helper 1.1.12 → 1.1.14
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 +11 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +6 -0
- package/package.json +4 -4
- package/src/main.ts +8 -470
package/README.md
CHANGED
package/dist/main.d.ts
CHANGED
|
@@ -204,6 +204,7 @@ export declare const ItemPriceSchema: z.ZodObject<{
|
|
|
204
204
|
vat: z.ZodOptional<z.ZodNumber>;
|
|
205
205
|
incl: z.ZodOptional<z.ZodNumber>;
|
|
206
206
|
}, z.core.$strip>>>;
|
|
207
|
+
campaignId: z.ZodOptional<z.ZodNullable<z.ZodCustom<UUID, UUID>>>;
|
|
207
208
|
}, z.core.$strip>;
|
|
208
209
|
export type ItemPrice = z.infer<typeof ItemPriceSchema>;
|
|
209
210
|
export declare const ItemDescriptionSchema: z.ZodObject<{
|
|
@@ -237,6 +238,7 @@ export declare const ItemSchema: z.ZodObject<{
|
|
|
237
238
|
vat: z.ZodOptional<z.ZodNumber>;
|
|
238
239
|
incl: z.ZodOptional<z.ZodNumber>;
|
|
239
240
|
}, z.core.$strip>>>;
|
|
241
|
+
campaignId: z.ZodOptional<z.ZodNullable<z.ZodCustom<UUID, UUID>>>;
|
|
240
242
|
}, z.core.$strip>>;
|
|
241
243
|
allowedProfiles: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"_Individual_">, z.ZodLiteral<"_Small_Business_">, z.ZodLiteral<"_Company_">]>>;
|
|
242
244
|
isDefaultDelivery: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -733,6 +735,11 @@ export declare const CampaignPriceImpactSchema: z.ZodObject<{
|
|
|
733
735
|
rules: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
734
736
|
}, z.core.$strip>;
|
|
735
737
|
export type CampaignPriceImpact = z.infer<typeof CampaignPriceImpactSchema>;
|
|
738
|
+
export declare const CampaignItemTagSchema: z.ZodObject<{
|
|
739
|
+
strong: z.ZodNullable<z.ZodString>;
|
|
740
|
+
text: z.ZodString;
|
|
741
|
+
}, z.core.$strip>;
|
|
742
|
+
export type CampaignItemTag = z.infer<typeof CampaignItemTagSchema>;
|
|
736
743
|
export declare const CampaignSchema: z.ZodObject<{
|
|
737
744
|
id: z.ZodCustom<UUID, UUID>;
|
|
738
745
|
masterId: z.ZodDefault<z.ZodNullable<z.ZodCustom<UUID, UUID>>>;
|
|
@@ -781,6 +788,10 @@ export declare const CampaignSchema: z.ZodObject<{
|
|
|
781
788
|
valueType: z.ZodNullable<z.ZodUnion<readonly [z.ZodLiteral<"_Percentage_">, z.ZodLiteral<"_Fixed_Amount_">, z.ZodLiteral<"_Fixed_Total_">, z.ZodLiteral<"_Item_">, z.ZodLiteral<"_Composite_">]>>;
|
|
782
789
|
rules: z.ZodRecord<z.ZodString, z.ZodNumber>;
|
|
783
790
|
}, z.core.$strip>>;
|
|
791
|
+
itemTag: z.ZodDefault<z.ZodNullable<z.ZodObject<{
|
|
792
|
+
strong: z.ZodNullable<z.ZodString>;
|
|
793
|
+
text: z.ZodString;
|
|
794
|
+
}, z.core.$strip>>>;
|
|
784
795
|
}, z.core.$strip>;
|
|
785
796
|
export type Campaign = z.infer<typeof CampaignSchema>;
|
|
786
797
|
export type DeliveryMethodId = '_Standard_' | '_Express_';
|
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/dist/main.js
CHANGED
|
@@ -128,6 +128,7 @@ export const ItemPriceSchema = z.object({
|
|
|
128
128
|
vatRate: z.number().optional(),
|
|
129
129
|
validUntil: z.string().nullable().optional(),
|
|
130
130
|
regular: ItemRegularPriceSchema.nullable().optional(),
|
|
131
|
+
campaignId: uuidSchema.nullable().optional(),
|
|
131
132
|
});
|
|
132
133
|
export const ItemDescriptionSchema = z.object({
|
|
133
134
|
lines: z.array(z.string()),
|
|
@@ -442,6 +443,10 @@ export const CampaignPriceImpactSchema = z.object({
|
|
|
442
443
|
valueType: DiscountValueTypeSchema.nullable(),
|
|
443
444
|
rules: z.record(z.string(), z.number()),
|
|
444
445
|
});
|
|
446
|
+
export const CampaignItemTagSchema = z.object({
|
|
447
|
+
strong: z.string().nullable(),
|
|
448
|
+
text: z.string(),
|
|
449
|
+
});
|
|
445
450
|
export const CampaignSchema = z.object({
|
|
446
451
|
id: uuidSchema,
|
|
447
452
|
masterId: uuidSchema.nullable().default(null),
|
|
@@ -456,6 +461,7 @@ export const CampaignSchema = z.object({
|
|
|
456
461
|
priceTag: CampaignPriceTagSchema.nullable(),
|
|
457
462
|
ribbon: CampaignRibbonSchema.nullable(),
|
|
458
463
|
priceImpact: CampaignPriceImpactSchema.nullable(),
|
|
464
|
+
itemTag: CampaignItemTagSchema.nullable().default(null),
|
|
459
465
|
});
|
|
460
466
|
export const DEFAULT_COMMITMENT_MONTHS = 12;
|
|
461
467
|
export const PartnerNoticeSchema = z.object({
|
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.14",
|
|
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.14-b51",
|
|
55
|
+
"code": "101140051"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/main.ts
CHANGED
|
@@ -221,6 +221,7 @@ export const ItemPriceSchema = z.object({
|
|
|
221
221
|
vatRate: z.number().optional(),
|
|
222
222
|
validUntil: z.string().nullable().optional(),
|
|
223
223
|
regular: ItemRegularPriceSchema.nullable().optional(),
|
|
224
|
+
campaignId: uuidSchema.nullable().optional(),
|
|
224
225
|
});
|
|
225
226
|
export type ItemPrice = z.infer<typeof ItemPriceSchema>;
|
|
226
227
|
|
|
@@ -619,6 +620,12 @@ export const CampaignPriceImpactSchema = z.object({
|
|
|
619
620
|
});
|
|
620
621
|
export type CampaignPriceImpact = z.infer<typeof CampaignPriceImpactSchema>;
|
|
621
622
|
|
|
623
|
+
export const CampaignItemTagSchema = z.object({
|
|
624
|
+
strong: z.string().nullable(),
|
|
625
|
+
text: z.string(),
|
|
626
|
+
});
|
|
627
|
+
export type CampaignItemTag = z.infer<typeof CampaignItemTagSchema>;
|
|
628
|
+
|
|
622
629
|
export const CampaignSchema = z.object({
|
|
623
630
|
id: uuidSchema,
|
|
624
631
|
masterId: uuidSchema.nullable().default(null),
|
|
@@ -633,18 +640,12 @@ export const CampaignSchema = z.object({
|
|
|
633
640
|
priceTag: CampaignPriceTagSchema.nullable(),
|
|
634
641
|
ribbon: CampaignRibbonSchema.nullable(),
|
|
635
642
|
priceImpact: CampaignPriceImpactSchema.nullable(),
|
|
643
|
+
itemTag: CampaignItemTagSchema.nullable().default(null),
|
|
636
644
|
});
|
|
637
645
|
export type Campaign = z.infer<typeof CampaignSchema>;
|
|
638
646
|
|
|
639
647
|
export type DeliveryMethodId = '_Standard_' | '_Express_';
|
|
640
648
|
|
|
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
649
|
export const DEFAULT_COMMITMENT_MONTHS = 12;
|
|
649
650
|
|
|
650
651
|
export const PartnerNoticeSchema = z.object({
|
|
@@ -664,23 +665,8 @@ export const PartnerSchema = z.object({
|
|
|
664
665
|
logoUrl: z.string().nullable(),
|
|
665
666
|
promoCodesEnabled: z.boolean(),
|
|
666
667
|
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
668
|
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
669
|
blockedProfiles: z.array(z.string()).default([]),
|
|
683
|
-
/** Length of the rental commitment sold through this partner, in months. */
|
|
684
670
|
commitmentMonths: z.number().int().positive().max(120).default(DEFAULT_COMMITMENT_MONTHS),
|
|
685
671
|
hideOffersStep: z.boolean(),
|
|
686
672
|
defaultOfferType: OfferTypeSchema.nullable(),
|
|
@@ -692,10 +678,6 @@ export const PartnerSchema = z.object({
|
|
|
692
678
|
});
|
|
693
679
|
export type Partner = z.infer<typeof PartnerSchema>;
|
|
694
680
|
|
|
695
|
-
// =============================================================================
|
|
696
|
-
// MVT - Multivariate testing
|
|
697
|
-
// =============================================================================
|
|
698
|
-
|
|
699
681
|
export type MvtStatus = '_Draft_' | '_Scheduled_' | '_Running_' | '_Paused_' | '_Stopped_' | '_Archived_';
|
|
700
682
|
export const MvtStatusSchema = z.union([z.literal('_Draft_'), z.literal('_Scheduled_'), z.literal('_Running_'), z.literal('_Paused_'), z.literal('_Stopped_'), z.literal('_Archived_')]);
|
|
701
683
|
|
|
@@ -766,11 +748,6 @@ export const MvtOperatorSchema = z.union([
|
|
|
766
748
|
z.literal('_Date_Between_'),
|
|
767
749
|
]);
|
|
768
750
|
|
|
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
751
|
export const MVT_NULLARY_OPERATORS: readonly MvtOperator[] = [
|
|
775
752
|
'_Partner_Absent_',
|
|
776
753
|
'_Visitor_Is_New_',
|
|
@@ -814,62 +791,34 @@ export const MvtVariantSchema = z.object({
|
|
|
814
791
|
weight: z.number().int().nonnegative(),
|
|
815
792
|
control: z.boolean(),
|
|
816
793
|
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
794
|
audience: MvtAudienceNodeSchema.nullable().default(null),
|
|
822
|
-
/** Evaluation order of the targeted variants. The first match wins, so this is the tie-break. */
|
|
823
795
|
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
796
|
color: z.string().nullable().default(null),
|
|
826
797
|
description: z.string().nullable().default(null),
|
|
827
798
|
});
|
|
828
799
|
export type MvtVariant = z.infer<typeof MvtVariantSchema>;
|
|
829
800
|
|
|
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
801
|
export const MvtVariantVersionSchema = z.object({
|
|
840
802
|
partnerId: z.string().nullable(),
|
|
841
803
|
overrides: z.array(MvtOverrideSchema),
|
|
842
804
|
});
|
|
843
805
|
export type MvtVariantVersion = z.infer<typeof MvtVariantVersionSchema>;
|
|
844
806
|
|
|
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
807
|
export const MvtCheckoutTargetSchema = z.object({
|
|
854
|
-
/** Null for the plain checkout. */
|
|
855
808
|
partnerId: z.string().nullable(),
|
|
856
809
|
slug: z.string().nullable(),
|
|
857
810
|
name: z.string(),
|
|
858
|
-
/** The referential funnel, in referential order. Always the six steps. */
|
|
859
811
|
steps: z.array(CartStepSchema),
|
|
860
|
-
/** Steps this checkout never shows, whatever a variant says. */
|
|
861
812
|
hiddenSteps: z.array(CartStepSchema),
|
|
862
813
|
availableOfferItemIds: z.array(z.string()),
|
|
863
814
|
availableOptionItemIds: z.array(z.string()),
|
|
864
815
|
blockedPaymentMethods: z.array(z.string()),
|
|
865
816
|
blockedDeliveryMethods: z.array(z.string()),
|
|
866
817
|
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
818
|
defaultOfferType: OfferTypeSchema.nullable().default(null),
|
|
869
819
|
});
|
|
870
820
|
export type MvtCheckoutTarget = z.infer<typeof MvtCheckoutTargetSchema>;
|
|
871
821
|
|
|
872
|
-
/** The plain checkout as a target: everything the referential funnel offers, nothing removed. */
|
|
873
822
|
export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemIds: string[] = [], profiles: string[] = []): MvtCheckoutTarget {
|
|
874
823
|
return {
|
|
875
824
|
partnerId: null,
|
|
@@ -886,20 +835,12 @@ export function mvtPlainCheckoutTarget(offerItemIds: string[] = [], optionItemId
|
|
|
886
835
|
};
|
|
887
836
|
}
|
|
888
837
|
|
|
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
838
|
export type MvtAllocationMode = '_Targeted_' | '_Weighted_' | '_Unreachable_';
|
|
897
839
|
|
|
898
840
|
export interface MvtAllocationRow {
|
|
899
841
|
key: string;
|
|
900
842
|
mode: MvtAllocationMode;
|
|
901
843
|
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
844
|
sharePct: number;
|
|
904
845
|
}
|
|
905
846
|
|
|
@@ -930,13 +871,6 @@ export const MvtConfigSchema = z.object({
|
|
|
930
871
|
});
|
|
931
872
|
export type MvtConfig = z.infer<typeof MvtConfigSchema>;
|
|
932
873
|
|
|
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
874
|
export interface MvtContext {
|
|
941
875
|
unitId: string;
|
|
942
876
|
device: MvtDevice;
|
|
@@ -951,22 +885,12 @@ export interface MvtContext {
|
|
|
951
885
|
hasCart: boolean;
|
|
952
886
|
firstSeenAt: number;
|
|
953
887
|
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
888
|
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
889
|
screenWidth: number;
|
|
958
|
-
/** Sessions this unit has opened, this one included. */
|
|
959
890
|
visits: number;
|
|
960
891
|
loggedIn: boolean;
|
|
961
892
|
}
|
|
962
893
|
|
|
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
894
|
export function mvtNormalizeContext(context: Partial<MvtContext> & { unitId: string }): MvtContext {
|
|
971
895
|
return {
|
|
972
896
|
device: '_Desktop_',
|
|
@@ -998,42 +922,14 @@ export interface MvtDecision {
|
|
|
998
922
|
overrides: MvtOverride[];
|
|
999
923
|
}
|
|
1000
924
|
|
|
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
925
|
export const MVT_CONTROL_VARIANT = 'control';
|
|
1015
926
|
|
|
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
927
|
export function mvtTrackedVariant(decision: Pick<MvtDecision, 'control' | 'variantKey'>): string {
|
|
1024
928
|
return decision.control ? MVT_CONTROL_VARIANT : decision.variantKey;
|
|
1025
929
|
}
|
|
1026
930
|
|
|
1027
931
|
const MVT_RETURNING_AFTER_MS = 30 * 60 * 1000;
|
|
1028
932
|
|
|
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
933
|
export function mvtHash(input: string): number {
|
|
1038
934
|
let hash = 0x811c9dc5;
|
|
1039
935
|
|
|
@@ -1056,23 +952,11 @@ export function mvtIsEligibleForTraffic(experiment: MvtExperiment, unitId: strin
|
|
|
1056
952
|
return mvtBucket(experiment.salt, unitId, 'traffic') < experiment.trafficPct * 100;
|
|
1057
953
|
}
|
|
1058
954
|
|
|
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
955
|
export function mvtPickVariant(experiment: MvtExperiment, unitId: string, context?: MvtContext): MvtVariant | null {
|
|
1068
956
|
const targeted = experiment.variants
|
|
1069
957
|
.filter(variant => !!variant.audience)
|
|
1070
958
|
.sort((a, b) => (a.order ?? 0) - (b.order ?? 0) || a.key.localeCompare(b.key));
|
|
1071
959
|
|
|
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
960
|
if (context)
|
|
1077
961
|
for (const variant of targeted)
|
|
1078
962
|
if (mvtEvaluateAudience(variant.audience ?? null, context)) return variant;
|
|
@@ -1080,9 +964,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1080
964
|
const pool = experiment.variants.filter(variant => !variant.audience).sort((a, b) => a.key.localeCompare(b.key));
|
|
1081
965
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
1082
966
|
|
|
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
967
|
if (!pool.length || total <= 0) return null;
|
|
1087
968
|
|
|
1088
969
|
const target = (mvtBucket(experiment.salt, unitId) / 10000) * total;
|
|
@@ -1097,13 +978,6 @@ export function mvtPickVariant(experiment: MvtExperiment, unitId: string, contex
|
|
|
1097
978
|
return pool[pool.length - 1];
|
|
1098
979
|
}
|
|
1099
980
|
|
|
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
981
|
export function mvtDistribution(variants: readonly MvtVariant[]): MvtAllocationRow[] {
|
|
1108
982
|
const pool = variants.filter(variant => !variant.audience);
|
|
1109
983
|
const total = pool.reduce((sum, v) => sum + Math.max(v.weight, 0), 0);
|
|
@@ -1171,9 +1045,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1171
1045
|
case '_Is_Weekend_': return [0, 6].includes(new Date(context.now).getDay());
|
|
1172
1046
|
case '_Visits_At_Least_': return context.visits >= Number(values[0] ?? 1);
|
|
1173
1047
|
|
|
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
1048
|
case '_Query_Param_Matches_': {
|
|
1178
1049
|
return values.some(raw => {
|
|
1179
1050
|
const separator = raw.indexOf('=');
|
|
@@ -1188,10 +1059,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1188
1059
|
});
|
|
1189
1060
|
}
|
|
1190
1061
|
|
|
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
1062
|
case '_Screen_Width_Between_': {
|
|
1196
1063
|
const from = values[0] ? Number(values[0]) : 0;
|
|
1197
1064
|
const to = values[1] ? Number(values[1]) : Number.MAX_SAFE_INTEGER;
|
|
@@ -1201,9 +1068,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1201
1068
|
return context.screenWidth >= from && context.screenWidth <= to;
|
|
1202
1069
|
}
|
|
1203
1070
|
|
|
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
1071
|
case '_Date_Between_': {
|
|
1208
1072
|
const from = values[0] ? Date.parse(values[0]) : Number.NEGATIVE_INFINITY;
|
|
1209
1073
|
const to = values[1] ? Date.parse(values[1]) : Number.POSITIVE_INFINITY;
|
|
@@ -1217,14 +1081,6 @@ function mvtEvaluateLeaf(operator: MvtOperator, values: string[], context: MvtCo
|
|
|
1217
1081
|
}
|
|
1218
1082
|
}
|
|
1219
1083
|
|
|
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
1084
|
export function mvtEvaluateAudience(node: MvtAudienceNode | null, context: MvtContext): boolean {
|
|
1229
1085
|
if (!node) return true;
|
|
1230
1086
|
|
|
@@ -1248,14 +1104,6 @@ export function mvtIsLive(experiment: MvtExperiment, now: number): boolean {
|
|
|
1248
1104
|
return experiment.status === '_Running_' && mvtIsWithinWindow(experiment, now);
|
|
1249
1105
|
}
|
|
1250
1106
|
|
|
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
1107
|
export function mvtResolve(config: MvtConfig, context: MvtContext, forced: Record<string, string> = {}): MvtDecision[] {
|
|
1260
1108
|
if (!config.enabled) return [];
|
|
1261
1109
|
|
|
@@ -1301,20 +1149,8 @@ function mvtToDecision(experiment: MvtExperiment, variant: MvtVariant): MvtDecis
|
|
|
1301
1149
|
};
|
|
1302
1150
|
}
|
|
1303
1151
|
|
|
1304
|
-
// -----------------------------------------------------------------------------
|
|
1305
|
-
// Slot registry
|
|
1306
|
-
// -----------------------------------------------------------------------------
|
|
1307
|
-
|
|
1308
1152
|
export type MvtSlotKind = 'boolean' | 'number' | 'duration' | 'text' | 'i18n' | 'color' | 'image' | 'enum' | 'list' | 'object' | 'record';
|
|
1309
1153
|
|
|
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
1154
|
export interface MvtSlotField {
|
|
1319
1155
|
key: string;
|
|
1320
1156
|
label: string;
|
|
@@ -1327,50 +1163,19 @@ export interface MvtSlotDefinition {
|
|
|
1327
1163
|
scope: MvtScope;
|
|
1328
1164
|
area: string;
|
|
1329
1165
|
label: string;
|
|
1330
|
-
/** One short sentence an operator reads before deciding whether this is the slot they want. */
|
|
1331
1166
|
hint: string;
|
|
1332
1167
|
kind: MvtSlotKind;
|
|
1333
1168
|
ops: readonly MvtOverrideOp[];
|
|
1334
|
-
/** Allowed values for an `enum`, or the closed set of entries for a constrained `list`. */
|
|
1335
1169
|
options?: readonly string[];
|
|
1336
|
-
/** The named fields of an `object`, or the per-item fields of a list of objects. */
|
|
1337
1170
|
fields?: readonly MvtSlotField[];
|
|
1338
|
-
/** The kind every value takes in a `record`, whose keys are open-ended. */
|
|
1339
1171
|
entryKind?: MvtSlotKind;
|
|
1340
|
-
/** Which property identifies an item, for the `remove`, `patch` and `reorder` operations. */
|
|
1341
1172
|
itemKey?: string;
|
|
1342
1173
|
schema: z.ZodType<unknown>;
|
|
1343
1174
|
}
|
|
1344
1175
|
|
|
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
1176
|
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
1177
|
const colorSchema = z.string().regex(/^(#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})|transparent)$/i);
|
|
1363
1178
|
|
|
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
1179
|
const SAFE_HREF_PATTERN = /^(https?:\/\/|\/(?!\/)|#|\?)/i;
|
|
1375
1180
|
const SAFE_IMAGE_PATTERN = /^(https?:\/\/|\/(?!\/)|assets\/)/i;
|
|
1376
1181
|
|
|
@@ -1386,21 +1191,8 @@ const safeHrefSchema = z.string().max(2048).refine(mvtIsSafeHref, { message: 'hr
|
|
|
1386
1191
|
const safeImageSchema = z.string().max(2048).refine(mvtIsSafeImage, { message: 'image must be http(s) or a same-site relative path' });
|
|
1387
1192
|
const safeRouteSchema = z.string().max(512).refine(value => value.startsWith('/') && !value.startsWith('//'), { message: 'route must be an absolute in-app path' });
|
|
1388
1193
|
|
|
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
1194
|
export const MvtAnchorPatchSchema = z.object({
|
|
1402
1195
|
hidden: z.boolean().optional(),
|
|
1403
|
-
/** Position among its siblings. Lower comes first; anchors without one keep their place. */
|
|
1404
1196
|
order: z.number().int().min(-999).max(999).optional(),
|
|
1405
1197
|
text: i18nTextSchema.optional(),
|
|
1406
1198
|
href: safeHrefSchema.optional(),
|
|
@@ -1435,19 +1227,6 @@ function slot(definition: MvtSlotDefinition): MvtSlotDefinition {
|
|
|
1435
1227
|
return definition;
|
|
1436
1228
|
}
|
|
1437
1229
|
|
|
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
1230
|
export const MVT_SLOTS: readonly MvtSlotDefinition[] = [
|
|
1452
1231
|
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
1232
|
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 +1383,6 @@ export interface MvtOverrideIssue {
|
|
|
1604
1383
|
reason: string;
|
|
1605
1384
|
}
|
|
1606
1385
|
|
|
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
1386
|
export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue[] {
|
|
1615
1387
|
const issues: MvtOverrideIssue[] = [];
|
|
1616
1388
|
|
|
@@ -1638,10 +1410,6 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1638
1410
|
return;
|
|
1639
1411
|
}
|
|
1640
1412
|
|
|
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
1413
|
if (definition.kind === 'record' && !definition.schema.safeParse(override.value).success)
|
|
1646
1414
|
issues.push({ index, slot: override.slot, reason: 'invalid_value' });
|
|
1647
1415
|
|
|
@@ -1655,51 +1423,18 @@ export function mvtValidateOverrides(overrides: MvtOverride[]): MvtOverrideIssue
|
|
|
1655
1423
|
return issues;
|
|
1656
1424
|
}
|
|
1657
1425
|
|
|
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
1426
|
export const MVT_UNHIDEABLE_STEPS: readonly CartStep[] = ['_Profile_', '_Information_', '_Delivery_', '_Payment_'];
|
|
1668
1427
|
|
|
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
1428
|
export const MVT_HIDEABLE_STEPS: readonly CartStep[] = ['_Offers_', '_Options_'];
|
|
1678
1429
|
|
|
1679
|
-
/** Whether a preselection entry names an item identifier rather than a SKU. */
|
|
1680
1430
|
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
1431
|
|
|
1682
|
-
/**
|
|
1683
|
-
* The default offer a set of overrides names, if any.
|
|
1684
|
-
*/
|
|
1685
1432
|
export function mvtDefaultOfferOf(overrides: readonly MvtOverride[]): string | null {
|
|
1686
1433
|
const override = overrides.find(entry => entry.slot === 'checkout.offers.default' && entry.op === 'set');
|
|
1687
1434
|
|
|
1688
1435
|
return typeof override?.value === 'string' ? override.value : null;
|
|
1689
1436
|
}
|
|
1690
1437
|
|
|
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
1438
|
export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target: MvtCheckoutTarget): MvtOverrideIssue[] {
|
|
1704
1439
|
const issues: MvtOverrideIssue[] = [];
|
|
1705
1440
|
const hidden = new Set<string>(target.hiddenSteps);
|
|
@@ -1736,9 +1471,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1736
1471
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
1737
1472
|
}
|
|
1738
1473
|
|
|
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
1474
|
if (override.slot === 'checkout.warranty.preselected' && typeof override.value === 'string' && options.size) {
|
|
1743
1475
|
if (override.value !== '_None_' && UUID_LIKE.test(override.value) && !options.has(override.value))
|
|
1744
1476
|
issues.push({ index, slot: override.slot, reason: 'option_absent_on_target' });
|
|
@@ -1753,13 +1485,6 @@ export function mvtValidateOverridesForTarget(overrides: MvtOverride[], target:
|
|
|
1753
1485
|
return issues;
|
|
1754
1486
|
}
|
|
1755
1487
|
|
|
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
1488
|
export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
1764
1489
|
const value = override.value;
|
|
1765
1490
|
|
|
@@ -1827,28 +1552,14 @@ export function mvtApplyOverride<T>(base: T, override: MvtOverride): T {
|
|
|
1827
1552
|
}
|
|
1828
1553
|
}
|
|
1829
1554
|
|
|
1830
|
-
// -----------------------------------------------------------------------------
|
|
1831
|
-
// Anchors
|
|
1832
|
-
// -----------------------------------------------------------------------------
|
|
1833
|
-
|
|
1834
1555
|
export const MVT_ANCHOR_ATTRIBUTE = 'data-mvt-anchor';
|
|
1835
1556
|
|
|
1836
|
-
/** The tags a text block may contain and still be edited wholesale: pure inline formatting. */
|
|
1837
1557
|
const MVT_INLINE_TEXT_TAGS = new Set(['BR', 'B', 'STRONG', 'EM', 'I', 'U', 'SPAN', 'SMALL', 'SUP', 'SUB', 'MARK']);
|
|
1838
1558
|
|
|
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
1559
|
export function mvtHoldsOnlyText(node: HTMLElement): boolean {
|
|
1848
1560
|
return Array.from(node.querySelectorAll('*')).every(child => MVT_INLINE_TEXT_TAGS.has(child.tagName));
|
|
1849
1561
|
}
|
|
1850
1562
|
|
|
1851
|
-
/** What the style inspector edits, read from the page rather than assumed. */
|
|
1852
1563
|
export interface MvtAnchorStyleSnapshot {
|
|
1853
1564
|
background: string | null;
|
|
1854
1565
|
color: string | null;
|
|
@@ -1869,14 +1580,6 @@ function mvtColorToHex(value: string): string | null {
|
|
|
1869
1580
|
return `#${hex(match[1])}${hex(match[2])}${hex(match[3])}`;
|
|
1870
1581
|
}
|
|
1871
1582
|
|
|
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
1583
|
export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapshot {
|
|
1881
1584
|
const computed = window.getComputedStyle(node);
|
|
1882
1585
|
|
|
@@ -1906,24 +1609,10 @@ export function mvtSnapshotAnchorStyle(node: HTMLElement): MvtAnchorStyleSnapsho
|
|
|
1906
1609
|
};
|
|
1907
1610
|
}
|
|
1908
1611
|
|
|
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
1612
|
export function mvtAnchorsSlot(scope: MvtScope): string {
|
|
1917
1613
|
return scope === '_Checkout_' ? 'checkout.anchors' : 'storefront.anchors';
|
|
1918
1614
|
}
|
|
1919
1615
|
|
|
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
1616
|
export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtAnchorPatch | undefined): MvtAnchorPatch {
|
|
1928
1617
|
if (!base) return next ?? {};
|
|
1929
1618
|
if (!next) return base;
|
|
@@ -1936,13 +1625,6 @@ export function mvtMergeAnchorPatch(base: MvtAnchorPatch | undefined, next: MvtA
|
|
|
1936
1625
|
};
|
|
1937
1626
|
}
|
|
1938
1627
|
|
|
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
1628
|
export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record<string, string> {
|
|
1947
1629
|
const style = patch?.style;
|
|
1948
1630
|
|
|
@@ -1963,188 +1645,68 @@ export function mvtAnchorStyle(patch: MvtAnchorPatch | null | undefined): Record
|
|
|
1963
1645
|
return out;
|
|
1964
1646
|
}
|
|
1965
1647
|
|
|
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
1648
|
export const MVT_STUDIO_PROTOCOL = 4;
|
|
1983
1649
|
|
|
1984
1650
|
export type MvtStudioAnchorRole = 'section' | 'cta' | 'text' | 'image' | 'block';
|
|
1985
1651
|
|
|
1986
1652
|
export interface MvtStudioAnchor {
|
|
1987
|
-
/** Stable identifier written into the markup by the front, never derived from the DOM position. */
|
|
1988
1653
|
id: string;
|
|
1989
1654
|
label: string;
|
|
1990
1655
|
role: MvtStudioAnchorRole;
|
|
1991
|
-
/** The anchor this one sits inside, for the studio's tree. Null at the top level. */
|
|
1992
1656
|
parentId: string | null;
|
|
1993
1657
|
order: number;
|
|
1994
|
-
/** What the untouched page shows today, so the editor opens on the real copy rather than an empty field. */
|
|
1995
1658
|
text: string | null;
|
|
1996
1659
|
movable: boolean;
|
|
1997
1660
|
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
1661
|
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
1662
|
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
1663
|
group: string;
|
|
2023
|
-
/** The style the element renders with today, so the inspector opens on the truth. */
|
|
2024
1664
|
style: MvtAnchorStyleSnapshot;
|
|
2025
1665
|
rect: { top: number; left: number; width: number; height: number };
|
|
2026
1666
|
}
|
|
2027
1667
|
|
|
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
1668
|
export interface MvtStudioLink {
|
|
2041
1669
|
path: string;
|
|
2042
1670
|
label: string;
|
|
2043
1671
|
kind: 'link' | 'step';
|
|
2044
|
-
/** Steps the cart has not unlocked yet are offered but marked, rather than hidden. */
|
|
2045
1672
|
reachable: boolean;
|
|
2046
1673
|
}
|
|
2047
1674
|
|
|
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
1675
|
export interface MvtStudioCart {
|
|
2056
1676
|
reference: string;
|
|
2057
1677
|
secret: string;
|
|
2058
|
-
/** Where the simulated cart currently sits, so the studio can offer the steps behind it. */
|
|
2059
1678
|
step: string;
|
|
2060
1679
|
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
1680
|
partnerId?: string | null;
|
|
2068
1681
|
}
|
|
2069
1682
|
|
|
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
1683
|
export interface MvtStudioPopup {
|
|
2079
1684
|
id: string;
|
|
2080
1685
|
label: string;
|
|
2081
1686
|
}
|
|
2082
1687
|
|
|
2083
|
-
/** Tools to front. */
|
|
2084
1688
|
export type MvtStudioRequest =
|
|
2085
1689
|
| { protocol: number; type: 'studio:hello' }
|
|
2086
1690
|
| { protocol: number; type: 'studio:scan' }
|
|
2087
1691
|
| { protocol: number; type: 'studio:select'; anchorId: string | null }
|
|
2088
|
-
/** Open one declared popup by identifier, or close whichever is open with null. */
|
|
2089
1692
|
| { 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
1693
|
| { protocol: number; type: 'studio:apply'; anchors: Record<string, MvtAnchorPatch>; overrides: MvtOverride[]; lang: string }
|
|
2096
1694
|
| { protocol: number; type: 'studio:mode'; picking: boolean }
|
|
2097
1695
|
| { protocol: number; type: 'studio:navigate'; path: string }
|
|
2098
1696
|
| { protocol: number; type: 'studio:links' }
|
|
2099
1697
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart };
|
|
2100
1698
|
|
|
2101
|
-
/** Front to Tools. */
|
|
2102
1699
|
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
1700
|
| { protocol: number; type: 'studio:ready'; scope: MvtScope; path: string; langs: string[]; lang: string; partner?: string | null }
|
|
2109
1701
|
| { protocol: number; type: 'studio:anchors'; anchors: MvtStudioAnchor[]; path: string }
|
|
2110
1702
|
| { protocol: number; type: 'studio:picked'; anchor: MvtStudioAnchor }
|
|
2111
1703
|
| { protocol: number; type: 'studio:navigated'; path: string }
|
|
2112
1704
|
| { protocol: number; type: 'studio:links'; links: MvtStudioLink[]; path: string }
|
|
2113
1705
|
| { protocol: number; type: 'studio:cart'; cart: MvtStudioCart | null }
|
|
2114
|
-
/** The popups this page can open on demand, re-announced whenever the set changes. */
|
|
2115
1706
|
| { 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
1707
|
| { 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
1708
|
| { protocol: number; type: 'studio:slot'; slot: string; op: 'set' | 'merge'; value: unknown };
|
|
2136
1709
|
|
|
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
1710
|
export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
2149
1711
|
const base = (basePath ?? '').replace(/\/+$/, '');
|
|
2150
1712
|
|
|
@@ -2155,12 +1717,6 @@ export function mvtStripBasePath(pathname: string, basePath: string): string {
|
|
|
2155
1717
|
return pathname || '/';
|
|
2156
1718
|
}
|
|
2157
1719
|
|
|
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
1720
|
export function mvtBasePathOf(doc: Document): string {
|
|
2165
1721
|
try {
|
|
2166
1722
|
return new URL(doc.baseURI).pathname.replace(/\/+$/, '') || '/';
|
|
@@ -2169,21 +1725,6 @@ export function mvtBasePathOf(doc: Document): string {
|
|
|
2169
1725
|
}
|
|
2170
1726
|
}
|
|
2171
1727
|
|
|
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
1728
|
export function mvtCollectLinks(root: ParentNode, origin: string, basePath = ''): MvtStudioLink[] {
|
|
2188
1729
|
const seen = new Set<string>();
|
|
2189
1730
|
const links: MvtStudioLink[] = [];
|
|
@@ -2210,9 +1751,6 @@ export function mvtCollectLinks(root: ParentNode, origin: string, basePath = '')
|
|
|
2210
1751
|
|
|
2211
1752
|
seen.add(path);
|
|
2212
1753
|
|
|
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
1754
|
const label = (anchor.textContent ?? '').replace(/\s+/g, ' ').trim();
|
|
2217
1755
|
|
|
2218
1756
|
links.push({ path, label: label || path, kind: 'link', reachable: true });
|