@uniformdev/next-app-router 20.83.1-alpha.9.sha-9aca3bf6f3 → 20.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{UniformComposition-le6UEB_r.d.mts → UniformComposition-B2WDS8_Y.d.mts} +2 -2
- package/dist/{UniformComposition-DBO-oo7J.d.ts → UniformComposition-CKvhCZV3.d.ts} +2 -2
- package/dist/cache.d.mts +2 -2
- package/dist/cache.d.ts +2 -2
- package/dist/{client-BElN_CWD.d.mts → client-CCXGmvoG.d.mts} +1 -0
- package/dist/{client-BElN_CWD.d.ts → client-CCXGmvoG.d.ts} +1 -0
- package/dist/compat.d.mts +3 -3
- package/dist/compat.d.ts +3 -3
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.esm.js +138 -13
- package/dist/index.js +138 -13
- package/dist/index.mjs +138 -13
- package/dist/middleware.d.mts +1 -1
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.js +130 -13
- package/dist/middleware.mjs +130 -13
- package/dist/{resolveRouteFromCode-BOvjIvM2.d.ts → resolveRouteFromCode-Bmb4yFgF.d.ts} +1 -1
- package/dist/{resolveRouteFromCode-CuJ4JHeb.d.mts → resolveRouteFromCode-Db8UEQfh.d.mts} +1 -1
- package/package.json +8 -8
package/dist/index.mjs
CHANGED
|
@@ -4510,6 +4510,7 @@ var bton = (base64) => {
|
|
|
4510
4510
|
}
|
|
4511
4511
|
return sign ? -number : number;
|
|
4512
4512
|
};
|
|
4513
|
+
var isZeroCookieScore = (score) => Math.abs(score) < 1;
|
|
4513
4514
|
var ssr = typeof document === "undefined";
|
|
4514
4515
|
var UNIFORM_DEFAULT_COOKIE_NAME = "ufvd";
|
|
4515
4516
|
var UNIFORM_DEFAULT_QUIRK_COOKIE_NAME = `ufvdqk`;
|
|
@@ -4517,6 +4518,7 @@ var _cookieName;
|
|
|
4517
4518
|
var _quirkCookieName;
|
|
4518
4519
|
var _cookieAttributes;
|
|
4519
4520
|
var _quirksEnabled;
|
|
4521
|
+
var _maxBytes;
|
|
4520
4522
|
var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
4521
4523
|
constructor({
|
|
4522
4524
|
serverCookieValue,
|
|
@@ -4524,7 +4526,9 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4524
4526
|
quirkCookieValue,
|
|
4525
4527
|
quirkCookieName = UNIFORM_DEFAULT_QUIRK_COOKIE_NAME,
|
|
4526
4528
|
cookieName = UNIFORM_DEFAULT_COOKIE_NAME,
|
|
4527
|
-
cookieAttributes = { sameSite: "lax" }
|
|
4529
|
+
cookieAttributes = { sameSite: "lax" },
|
|
4530
|
+
maxBytes,
|
|
4531
|
+
onLogMessage
|
|
4528
4532
|
}) {
|
|
4529
4533
|
super({
|
|
4530
4534
|
initialData: ssr ? parseScoreCookie(serverCookieValue, experimental_quirksEnabled ? quirkCookieValue : void 0) : void 0
|
|
@@ -4533,10 +4537,20 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4533
4537
|
__privateAdd5(this, _quirkCookieName);
|
|
4534
4538
|
__privateAdd5(this, _cookieAttributes);
|
|
4535
4539
|
__privateAdd5(this, _quirksEnabled);
|
|
4540
|
+
__privateAdd5(this, _maxBytes);
|
|
4541
|
+
__publicField3(this, "onLogMessage");
|
|
4536
4542
|
__privateSet3(this, _cookieName, cookieName);
|
|
4537
4543
|
__privateSet3(this, _cookieAttributes, cookieAttributes);
|
|
4538
4544
|
__privateSet3(this, _quirkCookieName, quirkCookieName);
|
|
4539
4545
|
__privateSet3(this, _quirksEnabled, experimental_quirksEnabled || false);
|
|
4546
|
+
__privateSet3(this, _maxBytes, maxBytes);
|
|
4547
|
+
this.onLogMessage = onLogMessage;
|
|
4548
|
+
const minimumBytes = minimumCookieBytes(cookieName);
|
|
4549
|
+
if (maxBytes !== void 0 && maxBytes < minimumBytes) {
|
|
4550
|
+
throw new Error(
|
|
4551
|
+
`maxBytes of ${maxBytes} is below the ${minimumBytes} bytes the "${cookieName}" cookie costs when it carries nothing but control group membership, so no visitor could ever meet it.`
|
|
4552
|
+
);
|
|
4553
|
+
}
|
|
4540
4554
|
}
|
|
4541
4555
|
handleDelete() {
|
|
4542
4556
|
if (ssr) return Promise.resolve();
|
|
@@ -4546,7 +4560,15 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4546
4560
|
async handleUpdateData(_, computedValue) {
|
|
4547
4561
|
if (ssr) return;
|
|
4548
4562
|
if (computedValue.consent) {
|
|
4549
|
-
|
|
4563
|
+
const cookieValue = serializeCookie(computedValue, {
|
|
4564
|
+
maxBytes: __privateGet5(this, _maxBytes),
|
|
4565
|
+
cookieName: __privateGet5(this, _cookieName),
|
|
4566
|
+
onBudgetExceeded: (dropped, bytes, maxBytes) => {
|
|
4567
|
+
var _a;
|
|
4568
|
+
return (_a = this.onLogMessage) == null ? void 0 : _a.call(this, ["info", 151, { dropped, bytes, maxBytes }]);
|
|
4569
|
+
}
|
|
4570
|
+
});
|
|
4571
|
+
api.set(__privateGet5(this, _cookieName), cookieValue, __privateGet5(this, _cookieAttributes));
|
|
4550
4572
|
if (__privateGet5(this, _quirksEnabled) && Object.keys(computedValue.quirks || {}).length) {
|
|
4551
4573
|
const quirkCookieValue = serializeQuirks(computedValue.quirks || {});
|
|
4552
4574
|
api.set(__privateGet5(this, _quirkCookieName), quirkCookieValue, __privateGet5(this, _cookieAttributes));
|
|
@@ -4563,6 +4585,7 @@ _cookieName = /* @__PURE__ */ new WeakMap();
|
|
|
4563
4585
|
_quirkCookieName = /* @__PURE__ */ new WeakMap();
|
|
4564
4586
|
_cookieAttributes = /* @__PURE__ */ new WeakMap();
|
|
4565
4587
|
_quirksEnabled = /* @__PURE__ */ new WeakMap();
|
|
4588
|
+
_maxBytes = /* @__PURE__ */ new WeakMap();
|
|
4566
4589
|
var TYPE_SEP = "~";
|
|
4567
4590
|
var PAIR_SEP = "!";
|
|
4568
4591
|
var KV_SEP = "-";
|
|
@@ -4634,18 +4657,66 @@ function decodeCookieType(type) {
|
|
|
4634
4657
|
return acc;
|
|
4635
4658
|
}, {});
|
|
4636
4659
|
}
|
|
4637
|
-
function serializeCookie(data) {
|
|
4660
|
+
function serializeCookie(data, options = {}) {
|
|
4661
|
+
const { maxBytes, cookieName = UNIFORM_DEFAULT_COOKIE_NAME, onBudgetExceeded } = options;
|
|
4662
|
+
const parts = {
|
|
4663
|
+
tests: { ...data.tests },
|
|
4664
|
+
sessionScores: encodeCookieType(data.sessionScores),
|
|
4665
|
+
scores: encodeCookieType(data.scores),
|
|
4666
|
+
controlGroup: data.controlGroup ? "1" : "0",
|
|
4667
|
+
personalizeVariants: encodePersonalizeVariants(data.personalizeVariants)
|
|
4668
|
+
};
|
|
4669
|
+
let value = serializeCookieParts(parts);
|
|
4670
|
+
if (maxBytes === void 0) {
|
|
4671
|
+
return value;
|
|
4672
|
+
}
|
|
4673
|
+
const overhead = encodeCookieName(cookieName).length + 1;
|
|
4674
|
+
const measure = () => overhead + api.converter.write(value, cookieName).length;
|
|
4675
|
+
if (measure() <= maxBytes) {
|
|
4676
|
+
return value;
|
|
4677
|
+
}
|
|
4678
|
+
const candidates = dropCandidates(parts, data);
|
|
4679
|
+
const dropped = [];
|
|
4680
|
+
for (let i = 0; i < candidates.length && measure() > maxBytes; i++) {
|
|
4681
|
+
const { bucket, key } = candidates[i];
|
|
4682
|
+
delete parts[bucket][key];
|
|
4683
|
+
dropped.push(`${bucket}.${key}`);
|
|
4684
|
+
value = serializeCookieParts(parts);
|
|
4685
|
+
}
|
|
4686
|
+
if (dropped.length) {
|
|
4687
|
+
onBudgetExceeded == null ? void 0 : onBudgetExceeded(dropped, measure(), maxBytes);
|
|
4688
|
+
}
|
|
4689
|
+
return value;
|
|
4690
|
+
}
|
|
4691
|
+
function serializeCookieParts(parts) {
|
|
4638
4692
|
return [
|
|
4639
|
-
serializeCookieType(
|
|
4640
|
-
serializeCookieType(
|
|
4641
|
-
serializeCookieType(
|
|
4642
|
-
|
|
4643
|
-
|
|
4693
|
+
serializeCookieType(parts.tests),
|
|
4694
|
+
serializeCookieType(parts.sessionScores),
|
|
4695
|
+
serializeCookieType(parts.scores),
|
|
4696
|
+
parts.controlGroup,
|
|
4697
|
+
serializeCookieType(parts.personalizeVariants)
|
|
4644
4698
|
].join(TYPE_SEP);
|
|
4645
4699
|
}
|
|
4646
|
-
function
|
|
4647
|
-
|
|
4648
|
-
|
|
4700
|
+
function dropCandidates(parts, data) {
|
|
4701
|
+
const dimensions = ["sessionScores", "scores"].flatMap(
|
|
4702
|
+
(bucket, order) => Object.keys(parts[bucket]).map((key) => {
|
|
4703
|
+
var _a;
|
|
4704
|
+
return { bucket, key, order, score: (_a = data[bucket][key]) != null ? _a : 0 };
|
|
4705
|
+
})
|
|
4706
|
+
);
|
|
4707
|
+
dimensions.sort(
|
|
4708
|
+
(a, b) => Number(isZeroCookieScore(b.score)) - Number(isZeroCookieScore(a.score)) || a.score - b.score || a.order - b.order || (a.key < b.key ? -1 : 1)
|
|
4709
|
+
);
|
|
4710
|
+
const keysOf = (bucket) => Object.keys(parts[bucket]).sort().map((key) => ({ bucket, key }));
|
|
4711
|
+
return [...dimensions, ...keysOf("personalizeVariants"), ...keysOf("tests")];
|
|
4712
|
+
}
|
|
4713
|
+
function minimumCookieBytes(cookieName) {
|
|
4714
|
+
return encodeCookieName(cookieName).length + 6;
|
|
4715
|
+
}
|
|
4716
|
+
function encodeCookieName(name) {
|
|
4717
|
+
return encodeURIComponent(name).replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent).replace(/\(/g, "%28").replace(/\)/g, "%29");
|
|
4718
|
+
}
|
|
4719
|
+
function encodePersonalizeVariants(personalizeVariants) {
|
|
4649
4720
|
const data = {};
|
|
4650
4721
|
if (typeof personalizeVariants === "object") {
|
|
4651
4722
|
Object.keys(personalizeVariants).forEach((personalizationName) => {
|
|
@@ -4657,8 +4728,7 @@ function serializePersonalizeVariants({
|
|
|
4657
4728
|
data[personalizationName] = results.join(",");
|
|
4658
4729
|
});
|
|
4659
4730
|
}
|
|
4660
|
-
|
|
4661
|
-
return serialized;
|
|
4731
|
+
return data;
|
|
4662
4732
|
}
|
|
4663
4733
|
function decodePersonalizeVariants(data) {
|
|
4664
4734
|
const parsed = parseCookieType(data);
|
|
@@ -4705,6 +4775,7 @@ fetchData_fn = async function() {
|
|
|
4705
4775
|
this.signalAsyncDataUpdate(serviceData);
|
|
4706
4776
|
}
|
|
4707
4777
|
};
|
|
4778
|
+
var isSystemDimension = (dimension) => dimension.startsWith("$");
|
|
4708
4779
|
var emptyVisitorData = () => ({
|
|
4709
4780
|
quirks: {},
|
|
4710
4781
|
scores: {},
|
|
@@ -4840,6 +4911,9 @@ var replaceData_fn;
|
|
|
4840
4911
|
var setVisitTimeout_fn;
|
|
4841
4912
|
var isExpired_fn;
|
|
4842
4913
|
var handleCaps_fn;
|
|
4914
|
+
var pruningManifest_get;
|
|
4915
|
+
var handlePruning_fn;
|
|
4916
|
+
var pruneScores_fn;
|
|
4843
4917
|
var defaultData_fn;
|
|
4844
4918
|
var VisitorDataStore = class {
|
|
4845
4919
|
constructor(options) {
|
|
@@ -4950,6 +5024,7 @@ replaceData_fn = function(data, quiet = false) {
|
|
|
4950
5024
|
sessionScores: data.sessionScores,
|
|
4951
5025
|
onLogMessage: __privateGet5(this, _options).onLogMessage
|
|
4952
5026
|
});
|
|
5027
|
+
__privateMethod2(this, _VisitorDataStore_instances, handlePruning_fn).call(this, data);
|
|
4953
5028
|
const haveScoresChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.scores, data.scores);
|
|
4954
5029
|
const haveSessionScoresChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.sessionScores, data.sessionScores);
|
|
4955
5030
|
const haveQuirksChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.quirks, data.quirks);
|
|
@@ -5022,6 +5097,48 @@ handleCaps_fn = function(scores) {
|
|
|
5022
5097
|
}
|
|
5023
5098
|
}
|
|
5024
5099
|
};
|
|
5100
|
+
pruningManifest_get = function() {
|
|
5101
|
+
var _a, _b, _c, _d, _e;
|
|
5102
|
+
const project = (_b = (_a = __privateGet5(this, _options).manifest) == null ? void 0 : _a.data) == null ? void 0 : _b.project;
|
|
5103
|
+
const populated = [(_c = project == null ? void 0 : project.pz) == null ? void 0 : _c.sig, (_d = project == null ? void 0 : project.pz) == null ? void 0 : _d.enr, (_e = project == null ? void 0 : project.pz) == null ? void 0 : _e.agg, project == null ? void 0 : project.test].some(
|
|
5104
|
+
(definitions) => definitions && Object.keys(definitions).length > 0
|
|
5105
|
+
);
|
|
5106
|
+
return populated ? __privateGet5(this, _options).manifest : void 0;
|
|
5107
|
+
};
|
|
5108
|
+
handlePruning_fn = function(data) {
|
|
5109
|
+
var _a, _b;
|
|
5110
|
+
const { pruneUnknownTests, pruneUnknownDimensions } = __privateGet5(this, _options);
|
|
5111
|
+
const manifest = pruneUnknownTests || pruneUnknownDimensions ? __privateGet5(this, _VisitorDataStore_instances, pruningManifest_get) : void 0;
|
|
5112
|
+
const pruned = [];
|
|
5113
|
+
if (pruneUnknownTests && manifest) {
|
|
5114
|
+
for (const test in data.tests) {
|
|
5115
|
+
if (!manifest.getTest(test)) {
|
|
5116
|
+
delete data.tests[test];
|
|
5117
|
+
pruned.push(`tests.${test}`);
|
|
5118
|
+
}
|
|
5119
|
+
}
|
|
5120
|
+
}
|
|
5121
|
+
__privateMethod2(this, _VisitorDataStore_instances, pruneScores_fn).call(this, data.scores, "scores", pruned, manifest);
|
|
5122
|
+
__privateMethod2(this, _VisitorDataStore_instances, pruneScores_fn).call(this, data.sessionScores, "sessionScores", pruned, manifest);
|
|
5123
|
+
if (pruned.length) {
|
|
5124
|
+
(_b = (_a = __privateGet5(this, _options)).onLogMessage) == null ? void 0 : _b.call(_a, ["info", 150, pruned]);
|
|
5125
|
+
}
|
|
5126
|
+
};
|
|
5127
|
+
pruneScores_fn = function(scores, bucket, pruned, manifest) {
|
|
5128
|
+
const { pruneUnknownDimensions, pruneZeroScores } = __privateGet5(this, _options);
|
|
5129
|
+
if (!pruneUnknownDimensions && !pruneZeroScores) {
|
|
5130
|
+
return;
|
|
5131
|
+
}
|
|
5132
|
+
const pruneUnknown = pruneUnknownDimensions && manifest;
|
|
5133
|
+
for (const dim in scores) {
|
|
5134
|
+
const isUnknown = pruneUnknown && !isSystemDimension(dim) && !manifest.getDimensionByKey(dim);
|
|
5135
|
+
const isZero = pruneZeroScores && (pruneZeroScores === "round" ? isZeroCookieScore(scores[dim]) : scores[dim] === 0);
|
|
5136
|
+
if (isUnknown || isZero) {
|
|
5137
|
+
delete scores[dim];
|
|
5138
|
+
pruned.push(`${bucket}.${dim}`);
|
|
5139
|
+
}
|
|
5140
|
+
}
|
|
5141
|
+
};
|
|
5025
5142
|
defaultData_fn = function() {
|
|
5026
5143
|
var _a, _b, _c;
|
|
5027
5144
|
return {
|
|
@@ -5555,6 +5672,9 @@ var dc2 = (0, import_rfdc3.default)();
|
|
|
5555
5672
|
|
|
5556
5673
|
// src/config/helpers.ts
|
|
5557
5674
|
import config from "@uniformdev/next-app-router/config/resolved";
|
|
5675
|
+
var getServerConfig = () => {
|
|
5676
|
+
return config;
|
|
5677
|
+
};
|
|
5558
5678
|
var getDisabledDevTools = () => {
|
|
5559
5679
|
var _a;
|
|
5560
5680
|
if (typeof ((_a = config.context) == null ? void 0 : _a.disableDevTools) === "boolean") {
|
|
@@ -6258,6 +6378,7 @@ var UniformContext = async ({ clientContextComponent, result }) => {
|
|
|
6258
6378
|
const disableDevTools = getDisabledDevTools();
|
|
6259
6379
|
const defaultConsent = (_a = result == null ? void 0 : result.pageState.defaultConsent) != null ? _a : getDefaultConsent();
|
|
6260
6380
|
const experimentalQuirkSerialization = getQuirkSerialization();
|
|
6381
|
+
const contextConfig = getServerConfig().context;
|
|
6261
6382
|
return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(
|
|
6262
6383
|
ContextComponent,
|
|
6263
6384
|
{
|
|
@@ -6265,6 +6386,10 @@ var UniformContext = async ({ clientContextComponent, result }) => {
|
|
|
6265
6386
|
disableDevTools,
|
|
6266
6387
|
defaultConsent,
|
|
6267
6388
|
experimentalQuirkSerialization,
|
|
6389
|
+
cookieMaxBytes: contextConfig == null ? void 0 : contextConfig.cookieMaxBytes,
|
|
6390
|
+
pruneUnknownTests: contextConfig == null ? void 0 : contextConfig.pruneUnknownTests,
|
|
6391
|
+
pruneUnknownDimensions: contextConfig == null ? void 0 : contextConfig.pruneUnknownDimensions,
|
|
6392
|
+
pruneZeroScores: contextConfig == null ? void 0 : contextConfig.pruneZeroScores,
|
|
6268
6393
|
compositionMetadata
|
|
6269
6394
|
}
|
|
6270
6395
|
));
|
package/dist/middleware.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Quirks } from '@uniformdev/context';
|
|
2
2
|
import { RewriteRequestPathResult, PageState } from '@uniformdev/next-app-router-shared';
|
|
3
3
|
import { NextRequest, NextResponse } from 'next/server';
|
|
4
|
-
import { D as DataClient } from './client-
|
|
4
|
+
import { D as DataClient } from './client-CCXGmvoG.mjs';
|
|
5
5
|
import '@uniformdev/canvas';
|
|
6
6
|
|
|
7
7
|
type RewriteOptions = {
|
package/dist/middleware.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Quirks } from '@uniformdev/context';
|
|
2
2
|
import { RewriteRequestPathResult, PageState } from '@uniformdev/next-app-router-shared';
|
|
3
3
|
import { NextRequest, NextResponse } from 'next/server';
|
|
4
|
-
import { D as DataClient } from './client-
|
|
4
|
+
import { D as DataClient } from './client-CCXGmvoG.js';
|
|
5
5
|
import '@uniformdev/canvas';
|
|
6
6
|
|
|
7
7
|
type RewriteOptions = {
|
package/dist/middleware.js
CHANGED
|
@@ -4487,6 +4487,7 @@ var bton = (base64) => {
|
|
|
4487
4487
|
}
|
|
4488
4488
|
return sign ? -number : number;
|
|
4489
4489
|
};
|
|
4490
|
+
var isZeroCookieScore = (score) => Math.abs(score) < 1;
|
|
4490
4491
|
var ssr = typeof document === "undefined";
|
|
4491
4492
|
var UNIFORM_DEFAULT_COOKIE_NAME = "ufvd";
|
|
4492
4493
|
var UNIFORM_DEFAULT_QUIRK_COOKIE_NAME = `ufvdqk`;
|
|
@@ -4494,6 +4495,7 @@ var _cookieName;
|
|
|
4494
4495
|
var _quirkCookieName;
|
|
4495
4496
|
var _cookieAttributes;
|
|
4496
4497
|
var _quirksEnabled;
|
|
4498
|
+
var _maxBytes;
|
|
4497
4499
|
var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
4498
4500
|
constructor({
|
|
4499
4501
|
serverCookieValue,
|
|
@@ -4501,7 +4503,9 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4501
4503
|
quirkCookieValue,
|
|
4502
4504
|
quirkCookieName = UNIFORM_DEFAULT_QUIRK_COOKIE_NAME,
|
|
4503
4505
|
cookieName = UNIFORM_DEFAULT_COOKIE_NAME,
|
|
4504
|
-
cookieAttributes = { sameSite: "lax" }
|
|
4506
|
+
cookieAttributes = { sameSite: "lax" },
|
|
4507
|
+
maxBytes,
|
|
4508
|
+
onLogMessage
|
|
4505
4509
|
}) {
|
|
4506
4510
|
super({
|
|
4507
4511
|
initialData: ssr ? parseScoreCookie(serverCookieValue, experimental_quirksEnabled ? quirkCookieValue : void 0) : void 0
|
|
@@ -4510,10 +4514,20 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4510
4514
|
__privateAdd4(this, _quirkCookieName);
|
|
4511
4515
|
__privateAdd4(this, _cookieAttributes);
|
|
4512
4516
|
__privateAdd4(this, _quirksEnabled);
|
|
4517
|
+
__privateAdd4(this, _maxBytes);
|
|
4518
|
+
__publicField3(this, "onLogMessage");
|
|
4513
4519
|
__privateSet2(this, _cookieName, cookieName);
|
|
4514
4520
|
__privateSet2(this, _cookieAttributes, cookieAttributes);
|
|
4515
4521
|
__privateSet2(this, _quirkCookieName, quirkCookieName);
|
|
4516
4522
|
__privateSet2(this, _quirksEnabled, experimental_quirksEnabled || false);
|
|
4523
|
+
__privateSet2(this, _maxBytes, maxBytes);
|
|
4524
|
+
this.onLogMessage = onLogMessage;
|
|
4525
|
+
const minimumBytes = minimumCookieBytes(cookieName);
|
|
4526
|
+
if (maxBytes !== void 0 && maxBytes < minimumBytes) {
|
|
4527
|
+
throw new Error(
|
|
4528
|
+
`maxBytes of ${maxBytes} is below the ${minimumBytes} bytes the "${cookieName}" cookie costs when it carries nothing but control group membership, so no visitor could ever meet it.`
|
|
4529
|
+
);
|
|
4530
|
+
}
|
|
4517
4531
|
}
|
|
4518
4532
|
handleDelete() {
|
|
4519
4533
|
if (ssr) return Promise.resolve();
|
|
@@ -4523,7 +4537,15 @@ var CookieTransitionDataStore = class extends TransitionDataStore {
|
|
|
4523
4537
|
async handleUpdateData(_, computedValue) {
|
|
4524
4538
|
if (ssr) return;
|
|
4525
4539
|
if (computedValue.consent) {
|
|
4526
|
-
|
|
4540
|
+
const cookieValue = serializeCookie(computedValue, {
|
|
4541
|
+
maxBytes: __privateGet4(this, _maxBytes),
|
|
4542
|
+
cookieName: __privateGet4(this, _cookieName),
|
|
4543
|
+
onBudgetExceeded: (dropped, bytes, maxBytes) => {
|
|
4544
|
+
var _a;
|
|
4545
|
+
return (_a = this.onLogMessage) == null ? void 0 : _a.call(this, ["info", 151, { dropped, bytes, maxBytes }]);
|
|
4546
|
+
}
|
|
4547
|
+
});
|
|
4548
|
+
api.set(__privateGet4(this, _cookieName), cookieValue, __privateGet4(this, _cookieAttributes));
|
|
4527
4549
|
if (__privateGet4(this, _quirksEnabled) && Object.keys(computedValue.quirks || {}).length) {
|
|
4528
4550
|
const quirkCookieValue = serializeQuirks(computedValue.quirks || {});
|
|
4529
4551
|
api.set(__privateGet4(this, _quirkCookieName), quirkCookieValue, __privateGet4(this, _cookieAttributes));
|
|
@@ -4540,6 +4562,7 @@ _cookieName = /* @__PURE__ */ new WeakMap();
|
|
|
4540
4562
|
_quirkCookieName = /* @__PURE__ */ new WeakMap();
|
|
4541
4563
|
_cookieAttributes = /* @__PURE__ */ new WeakMap();
|
|
4542
4564
|
_quirksEnabled = /* @__PURE__ */ new WeakMap();
|
|
4565
|
+
_maxBytes = /* @__PURE__ */ new WeakMap();
|
|
4543
4566
|
var TYPE_SEP = "~";
|
|
4544
4567
|
var PAIR_SEP = "!";
|
|
4545
4568
|
var KV_SEP = "-";
|
|
@@ -4611,18 +4634,66 @@ function decodeCookieType(type) {
|
|
|
4611
4634
|
return acc;
|
|
4612
4635
|
}, {});
|
|
4613
4636
|
}
|
|
4614
|
-
function serializeCookie(data) {
|
|
4637
|
+
function serializeCookie(data, options = {}) {
|
|
4638
|
+
const { maxBytes, cookieName = UNIFORM_DEFAULT_COOKIE_NAME, onBudgetExceeded } = options;
|
|
4639
|
+
const parts = {
|
|
4640
|
+
tests: { ...data.tests },
|
|
4641
|
+
sessionScores: encodeCookieType(data.sessionScores),
|
|
4642
|
+
scores: encodeCookieType(data.scores),
|
|
4643
|
+
controlGroup: data.controlGroup ? "1" : "0",
|
|
4644
|
+
personalizeVariants: encodePersonalizeVariants(data.personalizeVariants)
|
|
4645
|
+
};
|
|
4646
|
+
let value = serializeCookieParts(parts);
|
|
4647
|
+
if (maxBytes === void 0) {
|
|
4648
|
+
return value;
|
|
4649
|
+
}
|
|
4650
|
+
const overhead = encodeCookieName(cookieName).length + 1;
|
|
4651
|
+
const measure = () => overhead + api.converter.write(value, cookieName).length;
|
|
4652
|
+
if (measure() <= maxBytes) {
|
|
4653
|
+
return value;
|
|
4654
|
+
}
|
|
4655
|
+
const candidates = dropCandidates(parts, data);
|
|
4656
|
+
const dropped = [];
|
|
4657
|
+
for (let i = 0; i < candidates.length && measure() > maxBytes; i++) {
|
|
4658
|
+
const { bucket, key } = candidates[i];
|
|
4659
|
+
delete parts[bucket][key];
|
|
4660
|
+
dropped.push(`${bucket}.${key}`);
|
|
4661
|
+
value = serializeCookieParts(parts);
|
|
4662
|
+
}
|
|
4663
|
+
if (dropped.length) {
|
|
4664
|
+
onBudgetExceeded == null ? void 0 : onBudgetExceeded(dropped, measure(), maxBytes);
|
|
4665
|
+
}
|
|
4666
|
+
return value;
|
|
4667
|
+
}
|
|
4668
|
+
function serializeCookieParts(parts) {
|
|
4615
4669
|
return [
|
|
4616
|
-
serializeCookieType(
|
|
4617
|
-
serializeCookieType(
|
|
4618
|
-
serializeCookieType(
|
|
4619
|
-
|
|
4620
|
-
|
|
4670
|
+
serializeCookieType(parts.tests),
|
|
4671
|
+
serializeCookieType(parts.sessionScores),
|
|
4672
|
+
serializeCookieType(parts.scores),
|
|
4673
|
+
parts.controlGroup,
|
|
4674
|
+
serializeCookieType(parts.personalizeVariants)
|
|
4621
4675
|
].join(TYPE_SEP);
|
|
4622
4676
|
}
|
|
4623
|
-
function
|
|
4624
|
-
|
|
4625
|
-
|
|
4677
|
+
function dropCandidates(parts, data) {
|
|
4678
|
+
const dimensions = ["sessionScores", "scores"].flatMap(
|
|
4679
|
+
(bucket, order) => Object.keys(parts[bucket]).map((key) => {
|
|
4680
|
+
var _a;
|
|
4681
|
+
return { bucket, key, order, score: (_a = data[bucket][key]) != null ? _a : 0 };
|
|
4682
|
+
})
|
|
4683
|
+
);
|
|
4684
|
+
dimensions.sort(
|
|
4685
|
+
(a, b) => Number(isZeroCookieScore(b.score)) - Number(isZeroCookieScore(a.score)) || a.score - b.score || a.order - b.order || (a.key < b.key ? -1 : 1)
|
|
4686
|
+
);
|
|
4687
|
+
const keysOf = (bucket) => Object.keys(parts[bucket]).sort().map((key) => ({ bucket, key }));
|
|
4688
|
+
return [...dimensions, ...keysOf("personalizeVariants"), ...keysOf("tests")];
|
|
4689
|
+
}
|
|
4690
|
+
function minimumCookieBytes(cookieName) {
|
|
4691
|
+
return encodeCookieName(cookieName).length + 6;
|
|
4692
|
+
}
|
|
4693
|
+
function encodeCookieName(name) {
|
|
4694
|
+
return encodeURIComponent(name).replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent).replace(/\(/g, "%28").replace(/\)/g, "%29");
|
|
4695
|
+
}
|
|
4696
|
+
function encodePersonalizeVariants(personalizeVariants) {
|
|
4626
4697
|
const data = {};
|
|
4627
4698
|
if (typeof personalizeVariants === "object") {
|
|
4628
4699
|
Object.keys(personalizeVariants).forEach((personalizationName) => {
|
|
@@ -4634,8 +4705,7 @@ function serializePersonalizeVariants({
|
|
|
4634
4705
|
data[personalizationName] = results.join(",");
|
|
4635
4706
|
});
|
|
4636
4707
|
}
|
|
4637
|
-
|
|
4638
|
-
return serialized;
|
|
4708
|
+
return data;
|
|
4639
4709
|
}
|
|
4640
4710
|
function decodePersonalizeVariants(data) {
|
|
4641
4711
|
const parsed = parseCookieType(data);
|
|
@@ -4682,6 +4752,7 @@ fetchData_fn = async function() {
|
|
|
4682
4752
|
this.signalAsyncDataUpdate(serviceData);
|
|
4683
4753
|
}
|
|
4684
4754
|
};
|
|
4755
|
+
var isSystemDimension = (dimension) => dimension.startsWith("$");
|
|
4685
4756
|
var emptyVisitorData = () => ({
|
|
4686
4757
|
quirks: {},
|
|
4687
4758
|
scores: {},
|
|
@@ -4817,6 +4888,9 @@ var replaceData_fn;
|
|
|
4817
4888
|
var setVisitTimeout_fn;
|
|
4818
4889
|
var isExpired_fn;
|
|
4819
4890
|
var handleCaps_fn;
|
|
4891
|
+
var pruningManifest_get;
|
|
4892
|
+
var handlePruning_fn;
|
|
4893
|
+
var pruneScores_fn;
|
|
4820
4894
|
var defaultData_fn;
|
|
4821
4895
|
var VisitorDataStore = class {
|
|
4822
4896
|
constructor(options) {
|
|
@@ -4927,6 +5001,7 @@ replaceData_fn = function(data, quiet = false) {
|
|
|
4927
5001
|
sessionScores: data.sessionScores,
|
|
4928
5002
|
onLogMessage: __privateGet4(this, _options).onLogMessage
|
|
4929
5003
|
});
|
|
5004
|
+
__privateMethod(this, _VisitorDataStore_instances, handlePruning_fn).call(this, data);
|
|
4930
5005
|
const haveScoresChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.scores, data.scores);
|
|
4931
5006
|
const haveSessionScoresChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.sessionScores, data.sessionScores);
|
|
4932
5007
|
const haveQuirksChanged = !dequal(oldData == null ? void 0 : oldData.visitorData.quirks, data.quirks);
|
|
@@ -4999,6 +5074,48 @@ handleCaps_fn = function(scores) {
|
|
|
4999
5074
|
}
|
|
5000
5075
|
}
|
|
5001
5076
|
};
|
|
5077
|
+
pruningManifest_get = function() {
|
|
5078
|
+
var _a, _b, _c, _d, _e;
|
|
5079
|
+
const project = (_b = (_a = __privateGet4(this, _options).manifest) == null ? void 0 : _a.data) == null ? void 0 : _b.project;
|
|
5080
|
+
const populated = [(_c = project == null ? void 0 : project.pz) == null ? void 0 : _c.sig, (_d = project == null ? void 0 : project.pz) == null ? void 0 : _d.enr, (_e = project == null ? void 0 : project.pz) == null ? void 0 : _e.agg, project == null ? void 0 : project.test].some(
|
|
5081
|
+
(definitions) => definitions && Object.keys(definitions).length > 0
|
|
5082
|
+
);
|
|
5083
|
+
return populated ? __privateGet4(this, _options).manifest : void 0;
|
|
5084
|
+
};
|
|
5085
|
+
handlePruning_fn = function(data) {
|
|
5086
|
+
var _a, _b;
|
|
5087
|
+
const { pruneUnknownTests, pruneUnknownDimensions } = __privateGet4(this, _options);
|
|
5088
|
+
const manifest = pruneUnknownTests || pruneUnknownDimensions ? __privateGet4(this, _VisitorDataStore_instances, pruningManifest_get) : void 0;
|
|
5089
|
+
const pruned = [];
|
|
5090
|
+
if (pruneUnknownTests && manifest) {
|
|
5091
|
+
for (const test in data.tests) {
|
|
5092
|
+
if (!manifest.getTest(test)) {
|
|
5093
|
+
delete data.tests[test];
|
|
5094
|
+
pruned.push(`tests.${test}`);
|
|
5095
|
+
}
|
|
5096
|
+
}
|
|
5097
|
+
}
|
|
5098
|
+
__privateMethod(this, _VisitorDataStore_instances, pruneScores_fn).call(this, data.scores, "scores", pruned, manifest);
|
|
5099
|
+
__privateMethod(this, _VisitorDataStore_instances, pruneScores_fn).call(this, data.sessionScores, "sessionScores", pruned, manifest);
|
|
5100
|
+
if (pruned.length) {
|
|
5101
|
+
(_b = (_a = __privateGet4(this, _options)).onLogMessage) == null ? void 0 : _b.call(_a, ["info", 150, pruned]);
|
|
5102
|
+
}
|
|
5103
|
+
};
|
|
5104
|
+
pruneScores_fn = function(scores, bucket, pruned, manifest) {
|
|
5105
|
+
const { pruneUnknownDimensions, pruneZeroScores } = __privateGet4(this, _options);
|
|
5106
|
+
if (!pruneUnknownDimensions && !pruneZeroScores) {
|
|
5107
|
+
return;
|
|
5108
|
+
}
|
|
5109
|
+
const pruneUnknown = pruneUnknownDimensions && manifest;
|
|
5110
|
+
for (const dim in scores) {
|
|
5111
|
+
const isUnknown = pruneUnknown && !isSystemDimension(dim) && !manifest.getDimensionByKey(dim);
|
|
5112
|
+
const isZero = pruneZeroScores && (pruneZeroScores === "round" ? isZeroCookieScore(scores[dim]) : scores[dim] === 0);
|
|
5113
|
+
if (isUnknown || isZero) {
|
|
5114
|
+
delete scores[dim];
|
|
5115
|
+
pruned.push(`${bucket}.${dim}`);
|
|
5116
|
+
}
|
|
5117
|
+
}
|
|
5118
|
+
};
|
|
5002
5119
|
defaultData_fn = function() {
|
|
5003
5120
|
var _a, _b, _c;
|
|
5004
5121
|
return {
|