@plasmicapp/loader-edge 1.0.42 → 1.0.44

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/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { generateAllPaths, getActiveVariation, getMiddlewareResponse, rewriteWithoutTraits, rewriteWithTraits, } from './variation';
1
+ export { generateAllPaths, generateAllPathsWithTraits, getActiveVariation, getMiddlewareResponse, rewriteWithoutTraits, rewriteWithTraits, } from "./variation";
package/dist/index.esm.js CHANGED
@@ -19,57 +19,15 @@ var __spreadValues = (a, b) => {
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
20
 
21
21
  // src/variation.ts
22
- import { getActiveVariation as getActiveVariationSplits } from "@plasmicapp/loader-splits";
23
-
24
- // src/random.ts
25
- var getSeededRandomFunction = (strSeed) => {
26
- function cyrb128(str) {
27
- let h1 = 1779033703, h2 = 3144134277, h3 = 1013904242, h4 = 2773480762;
28
- for (let i = 0, k; i < str.length; i++) {
29
- k = str.charCodeAt(i);
30
- h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
31
- h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
32
- h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
33
- h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
34
- }
35
- h1 = Math.imul(h3 ^ h1 >>> 18, 597399067);
36
- h2 = Math.imul(h4 ^ h2 >>> 22, 2869860233);
37
- h3 = Math.imul(h1 ^ h3 >>> 17, 951274213);
38
- h4 = Math.imul(h2 ^ h4 >>> 19, 2716044179);
39
- return [
40
- (h1 ^ h2 ^ h3 ^ h4) >>> 0,
41
- (h2 ^ h1) >>> 0,
42
- (h3 ^ h1) >>> 0,
43
- (h4 ^ h1) >>> 0
44
- ];
45
- }
46
- function sfc32(a, b, c, d) {
47
- return function() {
48
- a >>>= 0;
49
- b >>>= 0;
50
- c >>>= 0;
51
- d >>>= 0;
52
- let t = a + b | 0;
53
- a = b ^ b >>> 9;
54
- b = c + (c << 3) | 0;
55
- c = c << 21 | c >>> 11;
56
- d = d + 1 | 0;
57
- t = t + d | 0;
58
- c = c + t | 0;
59
- return (t >>> 0) / 4294967296;
60
- };
61
- }
62
- const seed = cyrb128(strSeed);
63
- const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);
64
- return rand;
65
- };
66
-
67
- // src/variation.ts
22
+ import {
23
+ getActiveVariation as getActiveVariationSplits,
24
+ getSeededRandomFunction
25
+ } from "@plasmicapp/loader-splits";
68
26
  var DELIMITER = "__pm__";
69
27
  var PLASMIC_SEED = "plasmic_seed";
70
- var SEED_RANGE = 16;
71
- var getSeed = () => {
72
- return `${Math.floor(Math.random() * SEED_RANGE)}`;
28
+ var DEFAULT_PLASMIC_SEED_RANGE = 16;
29
+ var getSeed = (seedRange = DEFAULT_PLASMIC_SEED_RANGE) => {
30
+ return `${Math.floor(Math.random() * seedRange)}`;
73
31
  };
74
32
  var rewriteWithoutTraits = (url) => {
75
33
  const [path, ...traitssArr] = url.split(DELIMITER);
@@ -91,30 +49,52 @@ var expandTraits = (traits) => {
91
49
  return Object.keys(traits).sort(cmp).map((key) => `${DELIMITER}${key}=${traits[key]}`).join("");
92
50
  };
93
51
  var rewriteWithTraits = (path, traits) => {
52
+ if (Object.keys(traits).length === 0) {
53
+ return path;
54
+ }
94
55
  return `${path}${path.endsWith("/") ? "" : "/"}${expandTraits(traits)}`;
95
56
  };
96
- var generateAllPaths = (path) => {
97
- const paths = [
98
- path,
99
- ...Array(SEED_RANGE).fill(0).map(
100
- (_, idx) => `${path}${path.endsWith("/") ? "" : "/"}__pm__${PLASMIC_SEED}=${idx}`
101
- )
102
- ];
103
- return paths;
57
+ var generateAllPaths = (path, seedRange = DEFAULT_PLASMIC_SEED_RANGE) => {
58
+ return generateAllPathsWithTraits(path, seedRange);
104
59
  };
60
+ function generateAllPathsWithTraits(path, seedRange = DEFAULT_PLASMIC_SEED_RANGE, traitValues = {}) {
61
+ const traitsCombinations = [{}];
62
+ traitsCombinations.push(
63
+ ...Array(seedRange).fill(0).map((_, idx) => ({
64
+ [PLASMIC_SEED]: idx
65
+ }))
66
+ );
67
+ for (const [trait, possibleValues] of Object.entries(traitValues)) {
68
+ const newCombinations = [];
69
+ for (const traitValue of possibleValues) {
70
+ for (const combination of traitsCombinations) {
71
+ newCombinations.push(__spreadProps(__spreadValues({}, combination), {
72
+ [trait]: traitValue
73
+ }));
74
+ }
75
+ }
76
+ traitsCombinations.push(...newCombinations);
77
+ }
78
+ return traitsCombinations.map((traits) => rewriteWithTraits(path, traits));
79
+ }
105
80
  var getMiddlewareResponse = (opts) => {
106
81
  const newCookies = [];
107
- const seed = opts.cookies[PLASMIC_SEED] || getSeed();
108
- if (!opts.cookies[PLASMIC_SEED]) {
109
- newCookies.push({
110
- key: PLASMIC_SEED,
111
- value: seed
82
+ const seedRange = Number.isInteger(opts.seedRange) ? opts.seedRange : DEFAULT_PLASMIC_SEED_RANGE;
83
+ const seed = opts.cookies[PLASMIC_SEED] || getSeed(seedRange);
84
+ let traits = opts.traits;
85
+ if (seedRange && seedRange > 0) {
86
+ traits = __spreadProps(__spreadValues({}, traits), {
87
+ [PLASMIC_SEED]: seed
112
88
  });
89
+ if (!opts.cookies[PLASMIC_SEED]) {
90
+ newCookies.push({
91
+ key: PLASMIC_SEED,
92
+ value: seed
93
+ });
94
+ }
113
95
  }
114
96
  return {
115
- pathname: rewriteWithTraits(opts.path, __spreadValues({
116
- [PLASMIC_SEED]: seed
117
- }, opts.traits)),
97
+ pathname: rewriteWithTraits(opts.path, traits),
118
98
  cookies: newCookies
119
99
  };
120
100
  };
@@ -136,6 +116,7 @@ var getActiveVariation = (opts) => {
136
116
  };
137
117
  export {
138
118
  generateAllPaths,
119
+ generateAllPathsWithTraits,
139
120
  getActiveVariation,
140
121
  getMiddlewareResponse,
141
122
  rewriteWithTraits,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/variation.ts", "../src/random.ts"],
4
- "sourcesContent": ["import { Split } from '@plasmicapp/loader-fetcher';\nimport { getActiveVariation as getActiveVariationSplits } from '@plasmicapp/loader-splits';\nimport { getSeededRandomFunction } from './random';\n\nconst DELIMITER = '__pm__';\nconst PLASMIC_SEED = 'plasmic_seed';\nconst SEED_RANGE = 16;\n\ntype Traits = Record<string, string | number | boolean>;\n\nconst getSeed = () => {\n return `${Math.floor(Math.random() * SEED_RANGE)}`;\n};\n\nexport const rewriteWithoutTraits = (url: string) => {\n const [path, ...traitssArr] = url.split(DELIMITER);\n const traits = traitssArr.reduce((acc, elem) => {\n const [key, value] = elem.split('=');\n return {\n ...acc,\n [key]: value,\n };\n }, {});\n return {\n path:\n path === '/'\n ? path\n : path.endsWith('/')\n ? path.substring(0, path.length - 1)\n : path,\n traits,\n };\n};\n\nconst expandTraits = (traits: Traits) => {\n const cmp = (a: string, b: string) => {\n return a < b ? -1 : a > b ? 1 : 0;\n };\n return Object.keys(traits)\n .sort(cmp)\n .map((key) => `${DELIMITER}${key}=${traits[key]}`)\n .join('');\n};\n\nexport const rewriteWithTraits = (path: string, traits: Traits) => {\n return `${path}${path.endsWith('/') ? '' : '/'}${expandTraits(traits)}`;\n};\n\nexport const generateAllPaths = (path: string) => {\n const paths = [\n path,\n ...Array(SEED_RANGE)\n .fill(0)\n .map(\n (_, idx) =>\n `${path}${path.endsWith('/') ? '' : '/'}__pm__${PLASMIC_SEED}=${idx}`\n ),\n ];\n return paths;\n};\n\nexport const getMiddlewareResponse = (opts: {\n path: string;\n traits: Traits;\n cookies: Record<string, string>;\n}) => {\n const newCookies: { key: string; value: string }[] = [];\n const seed = opts.cookies[PLASMIC_SEED] || getSeed();\n if (!opts.cookies[PLASMIC_SEED]) {\n newCookies.push({\n key: PLASMIC_SEED,\n value: seed,\n });\n }\n return {\n pathname: rewriteWithTraits(opts.path, {\n [PLASMIC_SEED]: seed,\n ...opts.traits,\n }),\n cookies: newCookies,\n };\n};\n\nexport const getActiveVariation = (opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n path: string;\n}) => {\n const { splits, traits, path } = opts;\n return getActiveVariationSplits({\n splits,\n traits: {\n pageUrl: path,\n ...traits,\n },\n getKnownValue: () => undefined,\n updateKnownValue: () => null,\n getRandomValue: (key) => {\n const rand = getSeededRandomFunction((traits[PLASMIC_SEED] ?? '') + key);\n return rand();\n },\n });\n};\n", "export const getSeededRandomFunction = (strSeed: string) => {\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n function cyrb128(str: string) {\n let h1 = 1779033703,\n h2 = 3144134277,\n h3 = 1013904242,\n h4 = 2773480762;\n for (let i = 0, k; i < str.length; i++) {\n k = str.charCodeAt(i);\n h1 = h2 ^ Math.imul(h1 ^ k, 597399067);\n h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);\n h3 = h4 ^ Math.imul(h3 ^ k, 951274213);\n h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);\n }\n h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);\n h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);\n h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);\n h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);\n return [\n (h1 ^ h2 ^ h3 ^ h4) >>> 0,\n (h2 ^ h1) >>> 0,\n (h3 ^ h1) >>> 0,\n (h4 ^ h1) >>> 0,\n ];\n }\n function sfc32(a: number, b: number, c: number, d: number) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n let t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n }\n const seed = cyrb128(strSeed);\n const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);\n return rand;\n};\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/variation.ts"],
4
+ "sourcesContent": ["import type { Split } from \"@plasmicapp/loader-fetcher\";\nimport {\n getActiveVariation as getActiveVariationSplits,\n getSeededRandomFunction,\n} from \"@plasmicapp/loader-splits\";\n\nexport const DELIMITER = \"__pm__\";\nexport const PLASMIC_SEED = \"plasmic_seed\";\nconst DEFAULT_PLASMIC_SEED_RANGE = 16;\n\ntype Traits = Record<string, string | number | boolean>;\n\nconst getSeed = (seedRange: number = DEFAULT_PLASMIC_SEED_RANGE) => {\n return `${Math.floor(Math.random() * seedRange)}`;\n};\n\nexport const rewriteWithoutTraits = (url: string) => {\n const [path, ...traitssArr] = url.split(DELIMITER);\n const traits = traitssArr.reduce((acc, elem) => {\n const [key, value] = elem.split(\"=\");\n return {\n ...acc,\n [key]: value,\n };\n }, {});\n return {\n path:\n path === \"/\"\n ? path\n : path.endsWith(\"/\")\n ? path.substring(0, path.length - 1)\n : path,\n traits,\n };\n};\n\nconst expandTraits = (traits: Traits) => {\n const cmp = (a: string, b: string) => {\n return a < b ? -1 : a > b ? 1 : 0;\n };\n return Object.keys(traits)\n .sort(cmp)\n .map((key) => `${DELIMITER}${key}=${traits[key]}`)\n .join(\"\");\n};\n\nexport const rewriteWithTraits = (path: string, traits: Traits) => {\n if (Object.keys(traits).length === 0) {\n return path;\n }\n\n return `${path}${path.endsWith(\"/\") ? \"\" : \"/\"}${expandTraits(traits)}`;\n};\n\nexport const generateAllPaths = (\n path: string,\n seedRange: number = DEFAULT_PLASMIC_SEED_RANGE\n) => {\n return generateAllPathsWithTraits(path, seedRange);\n};\n\n/**\n * Generates all possible paths with the given traits. Should be used to enable fallback false\n */\nexport function generateAllPathsWithTraits(\n path: string,\n seedRange = DEFAULT_PLASMIC_SEED_RANGE,\n traitValues: Record<string, string[]> = {}\n) {\n const traitsCombinations = [{}];\n traitsCombinations.push(\n ...Array(seedRange)\n .fill(0)\n .map((_, idx) => ({\n [PLASMIC_SEED]: idx,\n }))\n );\n for (const [trait, possibleValues] of Object.entries(traitValues)) {\n const newCombinations = [];\n for (const traitValue of possibleValues) {\n for (const combination of traitsCombinations) {\n newCombinations.push({\n ...combination,\n [trait]: traitValue,\n });\n }\n }\n traitsCombinations.push(...newCombinations);\n }\n return traitsCombinations.map((traits) => rewriteWithTraits(path, traits));\n}\n\nexport const getMiddlewareResponse = (opts: {\n path: string;\n traits: Traits;\n cookies: Record<string, string>;\n seedRange?: number;\n}) => {\n const newCookies: { key: string; value: string }[] = [];\n\n const seedRange = Number.isInteger(opts.seedRange)\n ? opts.seedRange\n : DEFAULT_PLASMIC_SEED_RANGE;\n const seed = opts.cookies[PLASMIC_SEED] || getSeed(seedRange);\n\n let traits = opts.traits;\n if (seedRange && seedRange > 0) {\n traits = {\n ...traits,\n [PLASMIC_SEED]: seed,\n };\n\n if (!opts.cookies[PLASMIC_SEED]) {\n newCookies.push({\n key: PLASMIC_SEED,\n value: seed,\n });\n }\n }\n return {\n pathname: rewriteWithTraits(opts.path, traits),\n cookies: newCookies,\n };\n};\n\nexport const getActiveVariation = (opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n path: string;\n}) => {\n const { splits, traits, path } = opts;\n return getActiveVariationSplits({\n splits,\n traits: {\n pageUrl: path,\n ...traits,\n },\n getKnownValue: () => undefined,\n updateKnownValue: () => null,\n getRandomValue: (key) => {\n const rand = getSeededRandomFunction((traits[PLASMIC_SEED] ?? \"\") + key);\n return rand();\n },\n });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AACA;AAAA,EACE,sBAAsB;AAAA,EACtB;AAAA,OACK;AAEA,IAAM,YAAY;AAClB,IAAM,eAAe;AAC5B,IAAM,6BAA6B;AAInC,IAAM,UAAU,CAAC,YAAoB,+BAA+B;AAClE,SAAO,GAAG,KAAK,MAAM,KAAK,OAAO,IAAI,SAAS;AAChD;AAEO,IAAM,uBAAuB,CAAC,QAAgB;AACnD,QAAM,CAAC,MAAM,GAAG,UAAU,IAAI,IAAI,MAAM,SAAS;AACjD,QAAM,SAAS,WAAW,OAAO,CAAC,KAAK,SAAS;AAC9C,UAAM,CAAC,KAAK,KAAK,IAAI,KAAK,MAAM,GAAG;AACnC,WAAO,iCACF,MADE;AAAA,MAEL,CAAC,GAAG,GAAG;AAAA,IACT;AAAA,EACF,GAAG,CAAC,CAAC;AACL,SAAO;AAAA,IACL,MACE,SAAS,MACL,OACA,KAAK,SAAS,GAAG,IACjB,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC,IACjC;AAAA,IACN;AAAA,EACF;AACF;AAEA,IAAM,eAAe,CAAC,WAAmB;AACvC,QAAM,MAAM,CAAC,GAAW,MAAc;AACpC,WAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;AAAA,EAClC;AACA,SAAO,OAAO,KAAK,MAAM,EACtB,KAAK,GAAG,EACR,IAAI,CAAC,QAAQ,GAAG,YAAY,OAAO,OAAO,GAAG,GAAG,EAChD,KAAK,EAAE;AACZ;AAEO,IAAM,oBAAoB,CAAC,MAAc,WAAmB;AACjE,MAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,OAAO,KAAK,SAAS,GAAG,IAAI,KAAK,MAAM,aAAa,MAAM;AACtE;AAEO,IAAM,mBAAmB,CAC9B,MACA,YAAoB,+BACjB;AACH,SAAO,2BAA2B,MAAM,SAAS;AACnD;AAKO,SAAS,2BACd,MACA,YAAY,4BACZ,cAAwC,CAAC,GACzC;AACA,QAAM,qBAAqB,CAAC,CAAC,CAAC;AAC9B,qBAAmB;AAAA,IACjB,GAAG,MAAM,SAAS,EACf,KAAK,CAAC,EACN,IAAI,CAAC,GAAG,SAAS;AAAA,MAChB,CAAC,YAAY,GAAG;AAAA,IAClB,EAAE;AAAA,EACN;AACA,aAAW,CAAC,OAAO,cAAc,KAAK,OAAO,QAAQ,WAAW,GAAG;AACjE,UAAM,kBAAkB,CAAC;AACzB,eAAW,cAAc,gBAAgB;AACvC,iBAAW,eAAe,oBAAoB;AAC5C,wBAAgB,KAAK,iCAChB,cADgB;AAAA,UAEnB,CAAC,KAAK,GAAG;AAAA,QACX,EAAC;AAAA,MACH;AAAA,IACF;AACA,uBAAmB,KAAK,GAAG,eAAe;AAAA,EAC5C;AACA,SAAO,mBAAmB,IAAI,CAAC,WAAW,kBAAkB,MAAM,MAAM,CAAC;AAC3E;AAEO,IAAM,wBAAwB,CAAC,SAKhC;AACJ,QAAM,aAA+C,CAAC;AAEtD,QAAM,YAAY,OAAO,UAAU,KAAK,SAAS,IAC7C,KAAK,YACL;AACJ,QAAM,OAAO,KAAK,QAAQ,YAAY,KAAK,QAAQ,SAAS;AAE5D,MAAI,SAAS,KAAK;AAClB,MAAI,aAAa,YAAY,GAAG;AAC9B,aAAS,iCACJ,SADI;AAAA,MAEP,CAAC,YAAY,GAAG;AAAA,IAClB;AAEA,QAAI,CAAC,KAAK,QAAQ,YAAY,GAAG;AAC/B,iBAAW,KAAK;AAAA,QACd,KAAK;AAAA,QACL,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AAAA,IACL,UAAU,kBAAkB,KAAK,MAAM,MAAM;AAAA,IAC7C,SAAS;AAAA,EACX;AACF;AAEO,IAAM,qBAAqB,CAAC,SAI7B;AACJ,QAAM,EAAE,QAAQ,QAAQ,KAAK,IAAI;AACjC,SAAO,yBAAyB;AAAA,IAC9B;AAAA,IACA,QAAQ;AAAA,MACN,SAAS;AAAA,OACN;AAAA,IAEL,eAAe,MAAM;AAAA,IACrB,kBAAkB,MAAM;AAAA,IACxB,gBAAgB,CAAC,QAAQ;AA3I7B;AA4IM,YAAM,OAAO,0BAAyB,YAAO,YAAY,MAAnB,YAAwB,MAAM,GAAG;AACvE,aAAO,KAAK;AAAA,IACd;AAAA,EACF,CAAC;AACH;",
6
6
  "names": []
7
7
  }
package/dist/index.js CHANGED
@@ -38,6 +38,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
38
38
  var src_exports = {};
39
39
  __export(src_exports, {
40
40
  generateAllPaths: () => generateAllPaths,
41
+ generateAllPathsWithTraits: () => generateAllPathsWithTraits,
41
42
  getActiveVariation: () => getActiveVariation,
42
43
  getMiddlewareResponse: () => getMiddlewareResponse,
43
44
  rewriteWithTraits: () => rewriteWithTraits,
@@ -47,56 +48,11 @@ module.exports = __toCommonJS(src_exports);
47
48
 
48
49
  // src/variation.ts
49
50
  var import_loader_splits = require("@plasmicapp/loader-splits");
50
-
51
- // src/random.ts
52
- var getSeededRandomFunction = (strSeed) => {
53
- function cyrb128(str) {
54
- let h1 = 1779033703, h2 = 3144134277, h3 = 1013904242, h4 = 2773480762;
55
- for (let i = 0, k; i < str.length; i++) {
56
- k = str.charCodeAt(i);
57
- h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
58
- h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
59
- h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
60
- h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
61
- }
62
- h1 = Math.imul(h3 ^ h1 >>> 18, 597399067);
63
- h2 = Math.imul(h4 ^ h2 >>> 22, 2869860233);
64
- h3 = Math.imul(h1 ^ h3 >>> 17, 951274213);
65
- h4 = Math.imul(h2 ^ h4 >>> 19, 2716044179);
66
- return [
67
- (h1 ^ h2 ^ h3 ^ h4) >>> 0,
68
- (h2 ^ h1) >>> 0,
69
- (h3 ^ h1) >>> 0,
70
- (h4 ^ h1) >>> 0
71
- ];
72
- }
73
- function sfc32(a, b, c, d) {
74
- return function() {
75
- a >>>= 0;
76
- b >>>= 0;
77
- c >>>= 0;
78
- d >>>= 0;
79
- let t = a + b | 0;
80
- a = b ^ b >>> 9;
81
- b = c + (c << 3) | 0;
82
- c = c << 21 | c >>> 11;
83
- d = d + 1 | 0;
84
- t = t + d | 0;
85
- c = c + t | 0;
86
- return (t >>> 0) / 4294967296;
87
- };
88
- }
89
- const seed = cyrb128(strSeed);
90
- const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);
91
- return rand;
92
- };
93
-
94
- // src/variation.ts
95
51
  var DELIMITER = "__pm__";
96
52
  var PLASMIC_SEED = "plasmic_seed";
97
- var SEED_RANGE = 16;
98
- var getSeed = () => {
99
- return `${Math.floor(Math.random() * SEED_RANGE)}`;
53
+ var DEFAULT_PLASMIC_SEED_RANGE = 16;
54
+ var getSeed = (seedRange = DEFAULT_PLASMIC_SEED_RANGE) => {
55
+ return `${Math.floor(Math.random() * seedRange)}`;
100
56
  };
101
57
  var rewriteWithoutTraits = (url) => {
102
58
  const [path, ...traitssArr] = url.split(DELIMITER);
@@ -118,30 +74,52 @@ var expandTraits = (traits) => {
118
74
  return Object.keys(traits).sort(cmp).map((key) => `${DELIMITER}${key}=${traits[key]}`).join("");
119
75
  };
120
76
  var rewriteWithTraits = (path, traits) => {
77
+ if (Object.keys(traits).length === 0) {
78
+ return path;
79
+ }
121
80
  return `${path}${path.endsWith("/") ? "" : "/"}${expandTraits(traits)}`;
122
81
  };
123
- var generateAllPaths = (path) => {
124
- const paths = [
125
- path,
126
- ...Array(SEED_RANGE).fill(0).map(
127
- (_, idx) => `${path}${path.endsWith("/") ? "" : "/"}__pm__${PLASMIC_SEED}=${idx}`
128
- )
129
- ];
130
- return paths;
82
+ var generateAllPaths = (path, seedRange = DEFAULT_PLASMIC_SEED_RANGE) => {
83
+ return generateAllPathsWithTraits(path, seedRange);
131
84
  };
85
+ function generateAllPathsWithTraits(path, seedRange = DEFAULT_PLASMIC_SEED_RANGE, traitValues = {}) {
86
+ const traitsCombinations = [{}];
87
+ traitsCombinations.push(
88
+ ...Array(seedRange).fill(0).map((_, idx) => ({
89
+ [PLASMIC_SEED]: idx
90
+ }))
91
+ );
92
+ for (const [trait, possibleValues] of Object.entries(traitValues)) {
93
+ const newCombinations = [];
94
+ for (const traitValue of possibleValues) {
95
+ for (const combination of traitsCombinations) {
96
+ newCombinations.push(__spreadProps(__spreadValues({}, combination), {
97
+ [trait]: traitValue
98
+ }));
99
+ }
100
+ }
101
+ traitsCombinations.push(...newCombinations);
102
+ }
103
+ return traitsCombinations.map((traits) => rewriteWithTraits(path, traits));
104
+ }
132
105
  var getMiddlewareResponse = (opts) => {
133
106
  const newCookies = [];
134
- const seed = opts.cookies[PLASMIC_SEED] || getSeed();
135
- if (!opts.cookies[PLASMIC_SEED]) {
136
- newCookies.push({
137
- key: PLASMIC_SEED,
138
- value: seed
107
+ const seedRange = Number.isInteger(opts.seedRange) ? opts.seedRange : DEFAULT_PLASMIC_SEED_RANGE;
108
+ const seed = opts.cookies[PLASMIC_SEED] || getSeed(seedRange);
109
+ let traits = opts.traits;
110
+ if (seedRange && seedRange > 0) {
111
+ traits = __spreadProps(__spreadValues({}, traits), {
112
+ [PLASMIC_SEED]: seed
139
113
  });
114
+ if (!opts.cookies[PLASMIC_SEED]) {
115
+ newCookies.push({
116
+ key: PLASMIC_SEED,
117
+ value: seed
118
+ });
119
+ }
140
120
  }
141
121
  return {
142
- pathname: rewriteWithTraits(opts.path, __spreadValues({
143
- [PLASMIC_SEED]: seed
144
- }, opts.traits)),
122
+ pathname: rewriteWithTraits(opts.path, traits),
145
123
  cookies: newCookies
146
124
  };
147
125
  };
@@ -156,7 +134,7 @@ var getActiveVariation = (opts) => {
156
134
  updateKnownValue: () => null,
157
135
  getRandomValue: (key) => {
158
136
  var _a;
159
- const rand = getSeededRandomFunction(((_a = traits[PLASMIC_SEED]) != null ? _a : "") + key);
137
+ const rand = (0, import_loader_splits.getSeededRandomFunction)(((_a = traits[PLASMIC_SEED]) != null ? _a : "") + key);
160
138
  return rand();
161
139
  }
162
140
  });
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/variation.ts", "../src/random.ts"],
4
- "sourcesContent": ["export {\n generateAllPaths,\n getActiveVariation,\n getMiddlewareResponse,\n rewriteWithoutTraits,\n rewriteWithTraits,\n} from './variation';\n", "import { Split } from '@plasmicapp/loader-fetcher';\nimport { getActiveVariation as getActiveVariationSplits } from '@plasmicapp/loader-splits';\nimport { getSeededRandomFunction } from './random';\n\nconst DELIMITER = '__pm__';\nconst PLASMIC_SEED = 'plasmic_seed';\nconst SEED_RANGE = 16;\n\ntype Traits = Record<string, string | number | boolean>;\n\nconst getSeed = () => {\n return `${Math.floor(Math.random() * SEED_RANGE)}`;\n};\n\nexport const rewriteWithoutTraits = (url: string) => {\n const [path, ...traitssArr] = url.split(DELIMITER);\n const traits = traitssArr.reduce((acc, elem) => {\n const [key, value] = elem.split('=');\n return {\n ...acc,\n [key]: value,\n };\n }, {});\n return {\n path:\n path === '/'\n ? path\n : path.endsWith('/')\n ? path.substring(0, path.length - 1)\n : path,\n traits,\n };\n};\n\nconst expandTraits = (traits: Traits) => {\n const cmp = (a: string, b: string) => {\n return a < b ? -1 : a > b ? 1 : 0;\n };\n return Object.keys(traits)\n .sort(cmp)\n .map((key) => `${DELIMITER}${key}=${traits[key]}`)\n .join('');\n};\n\nexport const rewriteWithTraits = (path: string, traits: Traits) => {\n return `${path}${path.endsWith('/') ? '' : '/'}${expandTraits(traits)}`;\n};\n\nexport const generateAllPaths = (path: string) => {\n const paths = [\n path,\n ...Array(SEED_RANGE)\n .fill(0)\n .map(\n (_, idx) =>\n `${path}${path.endsWith('/') ? '' : '/'}__pm__${PLASMIC_SEED}=${idx}`\n ),\n ];\n return paths;\n};\n\nexport const getMiddlewareResponse = (opts: {\n path: string;\n traits: Traits;\n cookies: Record<string, string>;\n}) => {\n const newCookies: { key: string; value: string }[] = [];\n const seed = opts.cookies[PLASMIC_SEED] || getSeed();\n if (!opts.cookies[PLASMIC_SEED]) {\n newCookies.push({\n key: PLASMIC_SEED,\n value: seed,\n });\n }\n return {\n pathname: rewriteWithTraits(opts.path, {\n [PLASMIC_SEED]: seed,\n ...opts.traits,\n }),\n cookies: newCookies,\n };\n};\n\nexport const getActiveVariation = (opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n path: string;\n}) => {\n const { splits, traits, path } = opts;\n return getActiveVariationSplits({\n splits,\n traits: {\n pageUrl: path,\n ...traits,\n },\n getKnownValue: () => undefined,\n updateKnownValue: () => null,\n getRandomValue: (key) => {\n const rand = getSeededRandomFunction((traits[PLASMIC_SEED] ?? '') + key);\n return rand();\n },\n });\n};\n", "export const getSeededRandomFunction = (strSeed: string) => {\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n function cyrb128(str: string) {\n let h1 = 1779033703,\n h2 = 3144134277,\n h3 = 1013904242,\n h4 = 2773480762;\n for (let i = 0, k; i < str.length; i++) {\n k = str.charCodeAt(i);\n h1 = h2 ^ Math.imul(h1 ^ k, 597399067);\n h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);\n h3 = h4 ^ Math.imul(h3 ^ k, 951274213);\n h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);\n }\n h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);\n h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);\n h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);\n h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);\n return [\n (h1 ^ h2 ^ h3 ^ h4) >>> 0,\n (h2 ^ h1) >>> 0,\n (h3 ^ h1) >>> 0,\n (h4 ^ h1) >>> 0,\n ];\n }\n function sfc32(a: number, b: number, c: number, d: number) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n let t = (a + b) | 0;\n a = b ^ (b >>> 9);\n b = (c + (c << 3)) | 0;\n c = (c << 21) | (c >>> 11);\n d = (d + 1) | 0;\n t = (t + d) | 0;\n c = (c + t) | 0;\n return (t >>> 0) / 4294967296;\n };\n }\n const seed = cyrb128(strSeed);\n const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);\n return rand;\n};\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/index.ts", "../src/variation.ts"],
4
+ "sourcesContent": ["export {\n generateAllPaths,\n generateAllPathsWithTraits,\n getActiveVariation,\n getMiddlewareResponse,\n rewriteWithoutTraits,\n rewriteWithTraits,\n} from \"./variation\";\n", "import type { Split } from \"@plasmicapp/loader-fetcher\";\nimport {\n getActiveVariation as getActiveVariationSplits,\n getSeededRandomFunction,\n} from \"@plasmicapp/loader-splits\";\n\nexport const DELIMITER = \"__pm__\";\nexport const PLASMIC_SEED = \"plasmic_seed\";\nconst DEFAULT_PLASMIC_SEED_RANGE = 16;\n\ntype Traits = Record<string, string | number | boolean>;\n\nconst getSeed = (seedRange: number = DEFAULT_PLASMIC_SEED_RANGE) => {\n return `${Math.floor(Math.random() * seedRange)}`;\n};\n\nexport const rewriteWithoutTraits = (url: string) => {\n const [path, ...traitssArr] = url.split(DELIMITER);\n const traits = traitssArr.reduce((acc, elem) => {\n const [key, value] = elem.split(\"=\");\n return {\n ...acc,\n [key]: value,\n };\n }, {});\n return {\n path:\n path === \"/\"\n ? path\n : path.endsWith(\"/\")\n ? path.substring(0, path.length - 1)\n : path,\n traits,\n };\n};\n\nconst expandTraits = (traits: Traits) => {\n const cmp = (a: string, b: string) => {\n return a < b ? -1 : a > b ? 1 : 0;\n };\n return Object.keys(traits)\n .sort(cmp)\n .map((key) => `${DELIMITER}${key}=${traits[key]}`)\n .join(\"\");\n};\n\nexport const rewriteWithTraits = (path: string, traits: Traits) => {\n if (Object.keys(traits).length === 0) {\n return path;\n }\n\n return `${path}${path.endsWith(\"/\") ? \"\" : \"/\"}${expandTraits(traits)}`;\n};\n\nexport const generateAllPaths = (\n path: string,\n seedRange: number = DEFAULT_PLASMIC_SEED_RANGE\n) => {\n return generateAllPathsWithTraits(path, seedRange);\n};\n\n/**\n * Generates all possible paths with the given traits. Should be used to enable fallback false\n */\nexport function generateAllPathsWithTraits(\n path: string,\n seedRange = DEFAULT_PLASMIC_SEED_RANGE,\n traitValues: Record<string, string[]> = {}\n) {\n const traitsCombinations = [{}];\n traitsCombinations.push(\n ...Array(seedRange)\n .fill(0)\n .map((_, idx) => ({\n [PLASMIC_SEED]: idx,\n }))\n );\n for (const [trait, possibleValues] of Object.entries(traitValues)) {\n const newCombinations = [];\n for (const traitValue of possibleValues) {\n for (const combination of traitsCombinations) {\n newCombinations.push({\n ...combination,\n [trait]: traitValue,\n });\n }\n }\n traitsCombinations.push(...newCombinations);\n }\n return traitsCombinations.map((traits) => rewriteWithTraits(path, traits));\n}\n\nexport const getMiddlewareResponse = (opts: {\n path: string;\n traits: Traits;\n cookies: Record<string, string>;\n seedRange?: number;\n}) => {\n const newCookies: { key: string; value: string }[] = [];\n\n const seedRange = Number.isInteger(opts.seedRange)\n ? opts.seedRange\n : DEFAULT_PLASMIC_SEED_RANGE;\n const seed = opts.cookies[PLASMIC_SEED] || getSeed(seedRange);\n\n let traits = opts.traits;\n if (seedRange && seedRange > 0) {\n traits = {\n ...traits,\n [PLASMIC_SEED]: seed,\n };\n\n if (!opts.cookies[PLASMIC_SEED]) {\n newCookies.push({\n key: PLASMIC_SEED,\n value: seed,\n });\n }\n }\n return {\n pathname: rewriteWithTraits(opts.path, traits),\n cookies: newCookies,\n };\n};\n\nexport const getActiveVariation = (opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n path: string;\n}) => {\n const { splits, traits, path } = opts;\n return getActiveVariationSplits({\n splits,\n traits: {\n pageUrl: path,\n ...traits,\n },\n getKnownValue: () => undefined,\n updateKnownValue: () => null,\n getRandomValue: (key) => {\n const rand = getSeededRandomFunction((traits[PLASMIC_SEED] ?? \"\") + key);\n return rand();\n },\n });\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["getActiveVariationSplits"]
7
7
  }
@@ -1,15 +1,22 @@
1
- import { Split } from '@plasmicapp/loader-fetcher';
1
+ import type { Split } from "@plasmicapp/loader-fetcher";
2
+ export declare const DELIMITER = "__pm__";
3
+ export declare const PLASMIC_SEED = "plasmic_seed";
2
4
  type Traits = Record<string, string | number | boolean>;
3
5
  export declare const rewriteWithoutTraits: (url: string) => {
4
6
  path: string;
5
7
  traits: {};
6
8
  };
7
9
  export declare const rewriteWithTraits: (path: string, traits: Traits) => string;
8
- export declare const generateAllPaths: (path: string) => string[];
10
+ export declare const generateAllPaths: (path: string, seedRange?: number) => string[];
11
+ /**
12
+ * Generates all possible paths with the given traits. Should be used to enable fallback false
13
+ */
14
+ export declare function generateAllPathsWithTraits(path: string, seedRange?: number, traitValues?: Record<string, string[]>): string[];
9
15
  export declare const getMiddlewareResponse: (opts: {
10
16
  path: string;
11
17
  traits: Traits;
12
18
  cookies: Record<string, string>;
19
+ seedRange?: number;
13
20
  }) => {
14
21
  pathname: string;
15
22
  cookies: {
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.42",
2
+ "version": "1.0.44",
3
3
  "license": "MIT",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
@@ -38,11 +38,13 @@
38
38
  }
39
39
  ],
40
40
  "dependencies": {
41
- "@plasmicapp/loader-fetcher": "1.0.36",
42
- "@plasmicapp/loader-splits": "1.0.41"
41
+ "@plasmicapp/loader-splits": "1.0.43"
42
+ },
43
+ "devDependencies": {
44
+ "@plasmicapp/loader-fetcher": "1.0.37"
43
45
  },
44
46
  "publishConfig": {
45
47
  "access": "public"
46
48
  },
47
- "gitHead": "061bfb393e0e5faabf92ef07b21e60107a5e7971"
49
+ "gitHead": "f9ffe94b022627f4677d77f8d953e27a4076dc39"
48
50
  }
package/dist/random.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare const getSeededRandomFunction: (strSeed: string) => () => number;