@drip-apex/sdk 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/bundle-report.json +584 -226
- package/dist/define.cjs +123 -0
- package/dist/define.cjs.map +7 -0
- package/dist/define.mjs +102 -0
- package/dist/define.mjs.map +7 -0
- package/dist/drip.cjs +19262 -0
- package/dist/drip.cjs.map +7 -0
- package/dist/drip.debug.js +1 -1
- package/dist/drip.debug.js.map +1 -1
- package/dist/drip.heatmap.js +1 -1
- package/dist/drip.heatmap.js.map +1 -1
- package/dist/drip.js +1 -1
- package/dist/drip.js.map +1 -1
- package/dist/drip.live.js +1 -1
- package/dist/drip.live.js.map +1 -1
- package/dist/drip.mjs +19246 -0
- package/dist/drip.mjs.map +7 -0
- package/dist/drip.replay-recorder.js +2 -0
- package/dist/drip.replay-recorder.js.map +1 -0
- package/dist/editor.js +147 -142
- package/dist/editor.js.map +4 -4
- package/dist/flags.cjs +1788 -0
- package/dist/flags.cjs.map +7 -0
- package/dist/flags.mjs +1765 -0
- package/dist/flags.mjs.map +7 -0
- package/dist/index.mjs +12 -0
- package/dist/index.mjs.map +2 -2
- package/dist/metafiles/define.cjs.meta.json +28 -0
- package/dist/metafiles/define.mjs.meta.json +32 -0
- package/dist/metafiles/drip.cjs.meta.json +3193 -0
- package/dist/metafiles/drip.debug.meta.json +2859 -574
- package/dist/metafiles/drip.heatmap.meta.json +2732 -460
- package/dist/metafiles/drip.live.meta.json +2732 -460
- package/dist/metafiles/drip.meta.json +2859 -574
- package/dist/metafiles/drip.mjs.meta.json +3235 -0
- package/dist/metafiles/drip.replay-recorder.meta.json +82 -0
- package/dist/metafiles/editor.meta.json +67 -27
- package/dist/metafiles/flags.cjs.meta.json +220 -0
- package/dist/metafiles/flags.mjs.meta.json +225 -0
- package/dist/metafiles/index.meta.json +2717 -491
- package/dist/metafiles/index.mjs.meta.json +14 -4
- package/dist/react/index.js +16621 -13539
- package/dist/react/index.js.map +4 -4
- package/dist/sri.json +20 -15
- package/dist/types/activation-runtime.d.ts +91 -0
- package/dist/types/analytics-runtime.d.ts +166 -0
- package/dist/types/antiflicker.d.ts +9 -3
- package/dist/types/assignment-cookie-sync.d.ts +31 -0
- package/dist/types/assignment-runtime.d.ts +257 -0
- package/dist/types/assignment-store.d.ts +4 -8
- package/dist/types/bucket.d.ts +1 -2
- package/dist/types/compact-store.d.ts +1 -0
- package/dist/types/config-runtime.d.ts +313 -0
- package/dist/types/consent-evaluation.d.ts +27 -0
- package/dist/types/css.d.ts +5 -3
- package/dist/types/debug-loader.d.ts +2 -0
- package/dist/types/decide-assignments.d.ts +31 -0
- package/dist/types/delivery-timing.d.ts +8 -0
- package/dist/types/early-interaction-capture.d.ts +79 -0
- package/dist/types/early-reassert.d.ts +32 -0
- package/dist/types/edge-runtime.d.ts +11 -0
- package/dist/types/editor/api.d.ts +3 -0
- package/dist/types/editor/controller.d.ts +3 -1
- package/dist/types/editor/publication-result.d.ts +11 -0
- package/dist/types/editor/types.d.ts +2 -1
- package/dist/types/editor/view-kit.d.ts +1 -1
- package/dist/types/endpoint.d.ts +8 -0
- package/dist/types/exclusion-groups.d.ts +4 -7
- package/dist/types/flags.d.ts +2 -0
- package/dist/types/goal-eligibility.d.ts +4 -0
- package/dist/types/goals.d.ts +10 -1
- package/dist/types/guards.d.ts +7 -7
- package/dist/types/handover.d.ts +12 -1
- package/dist/types/hash.d.ts +8 -4
- package/dist/types/hydration.d.ts +2 -1
- package/dist/types/index.d.ts +24 -128
- package/dist/types/init-test-helpers.d.ts +48 -0
- package/dist/types/inline-bootstrap.d.ts +26 -0
- package/dist/types/js.d.ts +3 -1
- package/dist/types/money.d.ts +12 -0
- package/dist/types/mutate.d.ts +45 -6
- package/dist/types/performance.d.ts +2 -0
- package/dist/types/persistence-decoders.d.ts +12 -0
- package/dist/types/public-api.d.ts +209 -0
- package/dist/types/qa-assistant-state.d.ts +34 -0
- package/dist/types/react/index.d.ts +28 -3
- package/dist/types/reassert-sentinel.d.ts +6 -0
- package/dist/types/redirect.d.ts +48 -0
- package/dist/types/replay-recorder-entry.d.ts +1 -0
- package/dist/types/replay-signal-state.d.ts +6 -0
- package/dist/types/replay-signals.d.ts +13 -0
- package/dist/types/replay.d.ts +110 -0
- package/dist/types/router.d.ts +12 -2
- package/dist/types/runtime-state.d.ts +166 -0
- package/dist/types/sanitize.d.ts +1 -0
- package/dist/types/shadow.d.ts +3 -0
- package/dist/types/shopify-cart.d.ts +25 -1
- package/dist/types/storefront-vitals.d.ts +24 -0
- package/dist/types/targeting-diagnostics.d.ts +1 -0
- package/dist/types/targeting.d.ts +16 -2
- package/dist/types/track.d.ts +15 -1
- package/dist/types/types.d.ts +115 -9
- package/dist/types/wait.d.ts +14 -1
- package/dist/types/weekday-schedule.d.ts +3 -0
- package/package.json +17 -8
- package/src/activation-runtime.ts +2737 -0
- package/src/analytics-runtime.ts +2175 -0
- package/src/antiflicker.test.ts +216 -44
- package/src/antiflicker.ts +103 -28
- package/src/artifact-concurrency.test.ts +1091 -0
- package/src/assignment-cookie-sync.test.ts +202 -0
- package/src/assignment-cookie-sync.ts +189 -0
- package/src/assignment-runtime.ts +3204 -0
- package/src/assignment-store.test.ts +56 -0
- package/src/assignment-store.ts +7 -38
- package/src/bucket.ts +3 -18
- package/src/commerce-analytics-lifecycle.test.ts +75 -15
- package/src/commerce-config-lifecycle.test.ts +81 -1
- package/src/commerce-price-preserve.test.ts +133 -0
- package/src/commerce-price.test.ts +97 -0
- package/src/commerce-price.ts +74 -20
- package/src/commerce-shipping.test.ts +53 -0
- package/src/commerce-shipping.ts +5 -11
- package/src/compact-store.ts +15 -0
- package/src/config-fetch.test.ts +480 -9
- package/src/config-runtime.ts +2070 -0
- package/src/consent-evaluation-cookiescript.test.ts +50 -0
- package/src/consent-evaluation.ts +138 -0
- package/src/css.test.ts +30 -0
- package/src/css.ts +120 -6
- package/src/cwv.test.ts +60 -77
- package/src/debug-loader.test.ts +214 -0
- package/src/debug-loader.ts +41 -0
- package/src/decide-assignments.test.ts +196 -0
- package/src/decide-assignments.ts +204 -0
- package/src/delivery-timing.test.ts +104 -0
- package/src/delivery-timing.ts +89 -0
- package/src/early-interaction-capture.test.ts +451 -0
- package/src/early-interaction-capture.ts +230 -0
- package/src/early-reassert.test.ts +207 -0
- package/src/early-reassert.ts +152 -0
- package/src/edge-adoption.test.ts +435 -0
- package/src/edge-runtime.ts +30 -0
- package/src/editor/api.test.ts +109 -0
- package/src/editor/api.ts +34 -3
- package/src/editor/controller.test.ts +297 -14
- package/src/editor/controller.ts +69 -5
- package/src/editor/index.test.ts +2 -0
- package/src/editor/index.ts +1 -0
- package/src/editor/publication-result.ts +58 -0
- package/src/editor/types.ts +10 -1
- package/src/editor/view-kit.ts +2 -1
- package/src/editor/view.test.ts +108 -0
- package/src/editor/view.ts +49 -7
- package/src/endpoint.test.ts +15 -0
- package/src/endpoint.ts +10 -0
- package/src/exclusion-groups.ts +8 -18
- package/src/flags.test.ts +88 -1
- package/src/flags.ts +29 -29
- package/src/global-runtime-reconciler.test.ts +271 -0
- package/src/goal-eligibility.test.ts +29 -0
- package/src/goal-eligibility.ts +17 -0
- package/src/goals.test.ts +144 -1
- package/src/goals.ts +97 -18
- package/src/guards.test.ts +99 -1
- package/src/guards.ts +34 -15
- package/src/handover-cache-order.test.ts +6 -3
- package/src/handover.test.ts +154 -8
- package/src/handover.ts +122 -12
- package/src/hash.ts +29 -54
- package/src/holdout.test.ts +26 -0
- package/src/hydration.test.ts +73 -2
- package/src/hydration.ts +18 -9
- package/src/index.ts +130 -7287
- package/src/init-analytics.test.ts +1694 -0
- package/src/init-anti-flicker.test.ts +1211 -0
- package/src/init-cart-attributes.test.ts +2003 -0
- package/src/init-config-resolution.test.ts +999 -0
- package/src/init-consent.test.ts +971 -0
- package/src/init-empty.test.ts +11 -5406
- package/src/init-integrations.test.ts +846 -0
- package/src/init-page-activation.test.ts +5064 -0
- package/src/init-qa-loading.test.ts +740 -0
- package/src/init-redirects.test.ts +2156 -0
- package/src/init-test-helpers.ts +287 -0
- package/src/inline-bootstrap.test.ts +184 -0
- package/src/inline-bootstrap.ts +73 -0
- package/src/js.test.ts +51 -1
- package/src/js.ts +86 -2
- package/src/money.test.ts +55 -1
- package/src/money.ts +104 -2
- package/src/money.web-parity.contract.test.ts +85 -0
- package/src/mutate.test.ts +474 -10
- package/src/mutate.ts +739 -230
- package/src/page-trigger.test.ts +218 -8
- package/src/performance.ts +10 -0
- package/src/persistence-decoders.ts +18 -0
- package/src/public-api.ts +1828 -0
- package/src/qa-assistant-state.test.ts +249 -3
- package/src/qa-assistant-state.ts +146 -6
- package/src/qa-assistant-view.test.ts +220 -2
- package/src/qa-assistant-view.ts +102 -5
- package/src/react/index.test.tsx +37 -0
- package/src/react/index.tsx +19 -3
- package/src/reassert-sentinel.test.ts +155 -1
- package/src/reassert-sentinel.ts +168 -8
- package/src/redirect.test.ts +541 -0
- package/src/redirect.ts +572 -0
- package/src/replay-recorder-entry.ts +115 -0
- package/src/replay-signal-state.ts +100 -0
- package/src/replay-signals.test.ts +249 -0
- package/src/replay-signals.ts +151 -0
- package/src/replay.test.ts +764 -0
- package/src/replay.ts +514 -0
- package/src/router.test.ts +61 -2
- package/src/router.ts +50 -12
- package/src/runtime-state.ts +507 -0
- package/src/runtime.test.ts +174 -7
- package/src/runtime.ts +88 -14
- package/src/sanitize.test.ts +34 -0
- package/src/sanitize.ts +23 -12
- package/src/shadow.test.ts +187 -0
- package/src/shadow.ts +99 -0
- package/src/shopify-cart.test.ts +733 -23
- package/src/shopify-cart.ts +402 -49
- package/src/storefront-vitals.test.ts +217 -0
- package/src/storefront-vitals.ts +206 -0
- package/src/surface-signals.ts +6 -0
- package/src/targeting-conformance.test.ts +9 -0
- package/src/targeting-diagnostics.ts +38 -8
- package/src/targeting-parity-corpus.json +559 -0
- package/src/targeting-parity-corpus.test.ts +18 -0
- package/src/targeting.detailed.test.ts +105 -0
- package/src/targeting.test.ts +211 -0
- package/src/targeting.ts +88 -207
- package/src/track.test.ts +147 -0
- package/src/track.ts +125 -26
- package/src/types.ts +120 -13
- package/src/wait.test.ts +23 -0
- package/src/wait.ts +129 -13
- package/src/weekday-delivery.test.ts +56 -0
- package/src/weekday-schedule-parity-corpus.json +92 -0
- package/src/weekday-schedule.test.ts +69 -0
- package/src/weekday-schedule.ts +20 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "Europe Berlin DST start Sunday",
|
|
4
|
+
"schedule": {
|
|
5
|
+
"excludedDays": ["sunday"],
|
|
6
|
+
"timezone": "Europe/Berlin"
|
|
7
|
+
},
|
|
8
|
+
"instant": "2026-03-29T00:30:00.000Z",
|
|
9
|
+
"excluded": true
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "Europe Berlin local Monday after DST boundary",
|
|
13
|
+
"schedule": {
|
|
14
|
+
"excludedDays": ["monday"],
|
|
15
|
+
"timezone": "Europe/Berlin"
|
|
16
|
+
},
|
|
17
|
+
"instant": "2026-03-29T22:30:00.000Z",
|
|
18
|
+
"excluded": true
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "Los Angeles remains Wednesday before UTC Thursday",
|
|
22
|
+
"schedule": {
|
|
23
|
+
"excludedDays": ["wednesday"],
|
|
24
|
+
"timezone": "America/Los_Angeles"
|
|
25
|
+
},
|
|
26
|
+
"instant": "2026-01-01T07:30:00.000Z",
|
|
27
|
+
"excluded": true
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "Tokyo reaches Thursday before UTC",
|
|
31
|
+
"schedule": {
|
|
32
|
+
"excludedDays": ["thursday"],
|
|
33
|
+
"timezone": "Asia/Tokyo"
|
|
34
|
+
},
|
|
35
|
+
"instant": "2025-12-31T15:30:00.000Z",
|
|
36
|
+
"excluded": true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "Configured active day delivers",
|
|
40
|
+
"schedule": {
|
|
41
|
+
"excludedDays": ["friday", "saturday"],
|
|
42
|
+
"timezone": "UTC"
|
|
43
|
+
},
|
|
44
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
45
|
+
"excluded": false
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "Invalid timezone fails open",
|
|
49
|
+
"schedule": {
|
|
50
|
+
"excludedDays": ["monday"],
|
|
51
|
+
"timezone": "Mars/Olympus_Mons"
|
|
52
|
+
},
|
|
53
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
54
|
+
"excluded": false
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "All seven excluded days fail open",
|
|
58
|
+
"schedule": {
|
|
59
|
+
"excludedDays": ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"],
|
|
60
|
+
"timezone": "UTC"
|
|
61
|
+
},
|
|
62
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
63
|
+
"excluded": false
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "No excluded days fails open",
|
|
67
|
+
"schedule": {
|
|
68
|
+
"excludedDays": [],
|
|
69
|
+
"timezone": "UTC"
|
|
70
|
+
},
|
|
71
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
72
|
+
"excluded": false
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Unknown excluded day fails open",
|
|
76
|
+
"schedule": {
|
|
77
|
+
"excludedDays": ["funday"],
|
|
78
|
+
"timezone": "UTC"
|
|
79
|
+
},
|
|
80
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
81
|
+
"excluded": false
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "Non-array excluded days fails open",
|
|
85
|
+
"schedule": {
|
|
86
|
+
"excludedDays": "monday",
|
|
87
|
+
"timezone": "UTC"
|
|
88
|
+
},
|
|
89
|
+
"instant": "2026-08-03T12:00:00.000Z",
|
|
90
|
+
"excluded": false
|
|
91
|
+
}
|
|
92
|
+
]
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import corpus from "./weekday-schedule-parity-corpus.json";
|
|
3
|
+
|
|
4
|
+
// Hermeticity: weekday tests pin the most recent UTC Monday at 12:00 instead
|
|
5
|
+
// of a literal calendar date.
|
|
6
|
+
const RECENT_MONDAY_NOON = (() => {
|
|
7
|
+
const d = new Date();
|
|
8
|
+
d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 6) % 7));
|
|
9
|
+
d.setUTCHours(12, 0, 0, 0);
|
|
10
|
+
return d;
|
|
11
|
+
})();
|
|
12
|
+
import {
|
|
13
|
+
resetWeekdayScheduleWarningsForTests,
|
|
14
|
+
weekdayScheduleBlocksDelivery,
|
|
15
|
+
} from "./weekday-schedule";
|
|
16
|
+
|
|
17
|
+
describe("weekday schedule", () => {
|
|
18
|
+
it.each(corpus)("evaluates $name", ({ schedule, instant, excluded }) => {
|
|
19
|
+
expect(
|
|
20
|
+
weekdayScheduleBlocksDelivery(schedule as never, new Date(instant)),
|
|
21
|
+
).toBe(excluded);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("warns once and fails open for an invalid timezone", () => {
|
|
25
|
+
resetWeekdayScheduleWarningsForTests();
|
|
26
|
+
const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
27
|
+
const schedule = { excludedDays: ["monday"], timezone: "Mars/Olympus_Mons" };
|
|
28
|
+
expect(weekdayScheduleBlocksDelivery(schedule as never, new Date(RECENT_MONDAY_NOON))).toBe(false);
|
|
29
|
+
expect(weekdayScheduleBlocksDelivery(schedule as never, new Date(RECENT_MONDAY_NOON.getTime() + 3_600_000))).toBe(false);
|
|
30
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
31
|
+
warn.mockRestore();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it.each([
|
|
35
|
+
[
|
|
36
|
+
"all seven excluded days",
|
|
37
|
+
[
|
|
38
|
+
"monday",
|
|
39
|
+
"tuesday",
|
|
40
|
+
"wednesday",
|
|
41
|
+
"thursday",
|
|
42
|
+
"friday",
|
|
43
|
+
"saturday",
|
|
44
|
+
"sunday",
|
|
45
|
+
],
|
|
46
|
+
],
|
|
47
|
+
["no excluded days", []],
|
|
48
|
+
["an unknown excluded day", ["funday"]],
|
|
49
|
+
["non-array excluded days", "monday"],
|
|
50
|
+
])("warns once and fails open for %s", (_name, excludedDays) => {
|
|
51
|
+
resetWeekdayScheduleWarningsForTests();
|
|
52
|
+
const warn = vi.spyOn(console, "warn").mockImplementation(() => undefined);
|
|
53
|
+
const schedule = { excludedDays, timezone: "UTC" };
|
|
54
|
+
expect(
|
|
55
|
+
weekdayScheduleBlocksDelivery(
|
|
56
|
+
schedule as never,
|
|
57
|
+
new Date(RECENT_MONDAY_NOON),
|
|
58
|
+
),
|
|
59
|
+
).toBe(false);
|
|
60
|
+
expect(
|
|
61
|
+
weekdayScheduleBlocksDelivery(
|
|
62
|
+
schedule as never,
|
|
63
|
+
new Date(RECENT_MONDAY_NOON.getTime() + 3_600_000),
|
|
64
|
+
),
|
|
65
|
+
).toBe(false);
|
|
66
|
+
expect(warn).toHaveBeenCalledTimes(1);
|
|
67
|
+
warn.mockRestore();
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
weekdayScheduleBlocksDelivery as sharedWeekdayScheduleBlocksDelivery,
|
|
3
|
+
} from "@drip/shared-runtime/weekday-schedule";
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
isWeekdayExcluded,
|
|
7
|
+
resetWeekdayScheduleWarningsForTests,
|
|
8
|
+
WEEKDAYS,
|
|
9
|
+
} from "@drip/shared-runtime/weekday-schedule";
|
|
10
|
+
export type {
|
|
11
|
+
Weekday,
|
|
12
|
+
WeekdaySchedule,
|
|
13
|
+
} from "@drip/shared-runtime/weekday-schedule";
|
|
14
|
+
|
|
15
|
+
export function weekdayScheduleBlocksDelivery(
|
|
16
|
+
schedule: unknown,
|
|
17
|
+
now: Date,
|
|
18
|
+
): boolean {
|
|
19
|
+
return sharedWeekdayScheduleBlocksDelivery(schedule, now, "[drip]");
|
|
20
|
+
}
|