@plasmicapp/loader-edge 1.0.5 → 1.0.8
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 +1 -1
- package/dist/loader-edge.cjs.development.js +97 -73
- package/dist/loader-edge.cjs.development.js.map +1 -1
- package/dist/loader-edge.cjs.production.min.js +1 -1
- package/dist/loader-edge.cjs.production.min.js.map +1 -1
- package/dist/loader-edge.esm.js +96 -72
- package/dist/loader-edge.esm.js.map +1 -1
- package/dist/random.d.ts +1 -0
- package/dist/variation.d.ts +18 -18
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { generateAllPaths,
|
|
1
|
+
export { generateAllPaths, getActiveVariation, getMiddlewareResponse, rewriteWithoutTraits, rewriteWithTraits, } from './variation';
|
|
@@ -2,111 +2,135 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var loaderFetcher = require('@plasmicapp/loader-fetcher');
|
|
6
5
|
var loaderSplits = require('@plasmicapp/loader-splits');
|
|
7
6
|
|
|
7
|
+
const getSeededRandomFunction = strSeed => {
|
|
8
|
+
// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript
|
|
9
|
+
function cyrb128(str) {
|
|
10
|
+
let h1 = 1779033703,
|
|
11
|
+
h2 = 3144134277,
|
|
12
|
+
h3 = 1013904242,
|
|
13
|
+
h4 = 2773480762;
|
|
14
|
+
|
|
15
|
+
for (let i = 0, k; i < str.length; i++) {
|
|
16
|
+
k = str.charCodeAt(i);
|
|
17
|
+
h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
|
|
18
|
+
h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
|
|
19
|
+
h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
|
|
20
|
+
h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
h1 = Math.imul(h3 ^ h1 >>> 18, 597399067);
|
|
24
|
+
h2 = Math.imul(h4 ^ h2 >>> 22, 2869860233);
|
|
25
|
+
h3 = Math.imul(h1 ^ h3 >>> 17, 951274213);
|
|
26
|
+
h4 = Math.imul(h2 ^ h4 >>> 19, 2716044179);
|
|
27
|
+
return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function sfc32(a, b, c, d) {
|
|
31
|
+
return function () {
|
|
32
|
+
a >>>= 0;
|
|
33
|
+
b >>>= 0;
|
|
34
|
+
c >>>= 0;
|
|
35
|
+
d >>>= 0;
|
|
36
|
+
var t = a + b | 0;
|
|
37
|
+
a = b ^ b >>> 9;
|
|
38
|
+
b = c + (c << 3) | 0;
|
|
39
|
+
c = c << 21 | c >>> 11;
|
|
40
|
+
d = d + 1 | 0;
|
|
41
|
+
t = t + d | 0;
|
|
42
|
+
c = c + t | 0;
|
|
43
|
+
return (t >>> 0) / 4294967296;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const seed = cyrb128(strSeed);
|
|
48
|
+
const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);
|
|
49
|
+
return rand;
|
|
50
|
+
};
|
|
51
|
+
|
|
8
52
|
const DELIMITER = '__pm__';
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
53
|
+
const PLASMIC_SEED = 'plasmic_seed';
|
|
54
|
+
const SEED_RANGE = 16;
|
|
55
|
+
|
|
56
|
+
const getSeed = () => {
|
|
57
|
+
return `${Math.floor(Math.random() * SEED_RANGE)}`;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const rewriteWithoutTraits = url => {
|
|
61
|
+
const [path, ...traitssArr] = url.split(DELIMITER);
|
|
62
|
+
const traits = traitssArr.reduce((acc, elem) => {
|
|
12
63
|
const [key, value] = elem.split('=');
|
|
13
64
|
return { ...acc,
|
|
14
65
|
[key]: value
|
|
15
66
|
};
|
|
16
67
|
}, {});
|
|
17
68
|
return {
|
|
18
|
-
path,
|
|
19
|
-
|
|
69
|
+
path: path === '/' ? path : path.endsWith('/') ? path.substring(0, path.length - 1) : path,
|
|
70
|
+
traits
|
|
20
71
|
};
|
|
21
72
|
};
|
|
22
73
|
|
|
23
|
-
const
|
|
74
|
+
const expandTraits = traits => {
|
|
24
75
|
const cmp = (a, b) => {
|
|
25
|
-
|
|
26
|
-
const idB = b.split('.')[1];
|
|
27
|
-
return idA < idB ? -1 : idA > idB ? 1 : 0;
|
|
76
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
28
77
|
};
|
|
29
78
|
|
|
30
|
-
return Object.keys(
|
|
31
|
-
.sort(cmp).map(key => `${DELIMITER}${key}=${variation[key]}`).join('');
|
|
79
|
+
return Object.keys(traits).sort(cmp).map(key => `${DELIMITER}${key}=${traits[key]}`).join('');
|
|
32
80
|
};
|
|
33
81
|
|
|
34
|
-
const
|
|
35
|
-
return `${
|
|
82
|
+
const rewriteWithTraits = (path, traits) => {
|
|
83
|
+
return `${path}${path.endsWith('/') ? '' : '/'}${expandTraits(traits)}`;
|
|
36
84
|
};
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
if (splits.length === 0) {
|
|
40
|
-
return [''];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const [curSplit, ...tail] = splits;
|
|
44
|
-
const tailPaths = generateAllSplitPaths(tail);
|
|
45
|
-
const curPaths = ['', ...curSplit.slices.map(slice => expandVariation({
|
|
46
|
-
[loaderSplits.getSplitKey(curSplit)]: slice.id
|
|
47
|
-
}))];
|
|
48
|
-
const paths = [];
|
|
49
|
-
|
|
50
|
-
for (let i = 0; i < curPaths.length; i++) {
|
|
51
|
-
for (let j = 0; j < tailPaths.length; j++) {
|
|
52
|
-
paths.push(curPaths[i] + tailPaths[j]);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
85
|
+
const generateAllPaths = path => {
|
|
86
|
+
const paths = [path, ...Array(SEED_RANGE).fill(0).map((_, idx) => `${path}${path.endsWith('/') ? '' : '/'}__pm__${PLASMIC_SEED}=${idx}`)];
|
|
56
87
|
return paths;
|
|
57
88
|
};
|
|
89
|
+
const getMiddlewareResponse = opts => {
|
|
90
|
+
const newCookies = [];
|
|
91
|
+
const seed = opts.cookies[PLASMIC_SEED] || getSeed();
|
|
92
|
+
|
|
93
|
+
if (!opts.cookies[PLASMIC_SEED]) {
|
|
94
|
+
newCookies.push({
|
|
95
|
+
key: PLASMIC_SEED,
|
|
96
|
+
value: seed
|
|
97
|
+
});
|
|
98
|
+
}
|
|
58
99
|
|
|
59
|
-
const generateAllPaths = (path, splits) => {
|
|
60
|
-
return generateAllSplitPaths(splits.sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0)).map(meta => `${path}${path.endsWith('/') ? '' : '/'}${meta}`);
|
|
61
|
-
};
|
|
62
|
-
const getActiveSplits = async opts => {
|
|
63
|
-
const fetcher = new loaderFetcher.PlasmicModulesFetcher(opts);
|
|
64
|
-
const all = await fetcher.fetchAllData();
|
|
65
|
-
const splits = all.activeSplits;
|
|
66
|
-
const paths = all.components.filter(comp => comp.isPage && comp.path).map(comp => comp.path);
|
|
67
100
|
return {
|
|
68
|
-
|
|
69
|
-
|
|
101
|
+
pathname: rewriteWithTraits(opts.path, {
|
|
102
|
+
[PLASMIC_SEED]: seed,
|
|
103
|
+
...opts.traits
|
|
104
|
+
}),
|
|
105
|
+
cookies: newCookies
|
|
70
106
|
};
|
|
71
107
|
};
|
|
72
|
-
const
|
|
73
|
-
opts,
|
|
74
|
-
cookies,
|
|
75
|
-
traits,
|
|
76
|
-
url
|
|
77
|
-
}) => {
|
|
108
|
+
const getActiveVariation = opts => {
|
|
78
109
|
const {
|
|
79
|
-
splits
|
|
80
|
-
} = await getActiveSplits(opts);
|
|
81
|
-
const newCookies = [];
|
|
82
|
-
const variation = loaderSplits.getActiveVariation({
|
|
83
110
|
splits,
|
|
84
111
|
traits,
|
|
85
|
-
|
|
86
|
-
|
|
112
|
+
path
|
|
113
|
+
} = opts;
|
|
114
|
+
return loaderSplits.getActiveVariation({
|
|
115
|
+
splits,
|
|
116
|
+
traits: {
|
|
117
|
+
pageUrl: path,
|
|
118
|
+
...traits
|
|
87
119
|
},
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
120
|
+
getKnownValue: () => undefined,
|
|
121
|
+
updateKnownValue: () => null,
|
|
122
|
+
getRandomValue: key => {
|
|
123
|
+
var _traits$PLASMIC_SEED;
|
|
124
|
+
|
|
125
|
+
const rand = getSeededRandomFunction(((_traits$PLASMIC_SEED = traits[PLASMIC_SEED]) != null ? _traits$PLASMIC_SEED : '') + key);
|
|
126
|
+
return rand();
|
|
93
127
|
}
|
|
94
128
|
});
|
|
95
|
-
let newUrl = url;
|
|
96
|
-
|
|
97
|
-
if (Object.keys(variation).length) {
|
|
98
|
-
newUrl = rewriteWithVariation(url, variation);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return {
|
|
102
|
-
url: newUrl,
|
|
103
|
-
cookies: newCookies
|
|
104
|
-
};
|
|
105
129
|
};
|
|
106
130
|
|
|
107
131
|
exports.generateAllPaths = generateAllPaths;
|
|
108
|
-
exports.
|
|
132
|
+
exports.getActiveVariation = getActiveVariation;
|
|
109
133
|
exports.getMiddlewareResponse = getMiddlewareResponse;
|
|
110
|
-
exports.
|
|
111
|
-
exports.
|
|
134
|
+
exports.rewriteWithTraits = rewriteWithTraits;
|
|
135
|
+
exports.rewriteWithoutTraits = rewriteWithoutTraits;
|
|
112
136
|
//# sourceMappingURL=loader-edge.cjs.development.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-edge.cjs.development.js","sources":["../src/variation.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"loader-edge.cjs.development.js","sources":["../src/random.ts","../src/variation.ts"],"sourcesContent":["export const getSeededRandomFunction = (strSeed: string) => {\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n function cyrb128(str) {\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, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var 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","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"],"names":["getSeededRandomFunction","strSeed","cyrb128","str","h1","h2","h3","h4","i","k","length","charCodeAt","Math","imul","sfc32","a","b","c","d","t","seed","rand","DELIMITER","PLASMIC_SEED","SEED_RANGE","getSeed","floor","random","rewriteWithoutTraits","url","path","traitssArr","split","traits","reduce","acc","elem","key","value","endsWith","substring","expandTraits","cmp","Object","keys","sort","map","join","rewriteWithTraits","generateAllPaths","paths","Array","fill","_","idx","getMiddlewareResponse","opts","newCookies","cookies","push","pathname","getActiveVariation","splits","getActiveVariationSplits","pageUrl","getKnownValue","undefined","updateKnownValue","getRandomValue"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@plasmicapp/loader-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@plasmicapp/loader-splits");const e=(t,e)=>`${t}${t.endsWith("/")?"":"/"}${(t=>Object.keys(t).sort((t,e)=>t<e?-1:t>e?1:0).map(e=>`__pm__${e}=${t[e]}`).join(""))(e)}`;exports.generateAllPaths=t=>[t,...Array(16).fill(0).map((e,r)=>`${t}${t.endsWith("/")?"":"/"}__pm__plasmic_seed=${r}`)],exports.getActiveVariation=e=>{const{splits:r,traits:s,path:a}=e;return t.getActiveVariation({splits:r,traits:{pageUrl:a,...s},getKnownValue:()=>{},updateKnownValue:()=>null,getRandomValue:t=>{var e;return(t=>{const e=function(t){let e=1779033703,r=3144134277,s=1013904242,a=2773480762;for(let i,l=0;l<t.length;l++)i=t.charCodeAt(l),e=r^Math.imul(e^i,597399067),r=s^Math.imul(r^i,2869860233),s=a^Math.imul(s^i,951274213),a=e^Math.imul(a^i,2716044179);return e=Math.imul(s^e>>>18,597399067),r=Math.imul(a^r>>>22,2869860233),s=Math.imul(e^s>>>17,951274213),a=Math.imul(r^a>>>19,2716044179),[(e^r^s^a)>>>0,(r^e)>>>0,(s^e)>>>0,(a^e)>>>0]}(t);var r,s,a,i;return r=e[0],s=e[1],a=e[2],i=e[3],function(){var t=(r>>>=0)+(s>>>=0)|0;return r=s^s>>>9,s=(a>>>=0)+(a<<3)|0,a=(a=a<<21|a>>>11)+(t=t+(i=1+(i>>>=0)|0)|0)|0,(t>>>0)/4294967296}})((null!=(e=s.plasmic_seed)?e:"")+t)()}})},exports.getMiddlewareResponse=t=>{const r=[],s=t.cookies.plasmic_seed||""+Math.floor(16*Math.random());return t.cookies.plasmic_seed||r.push({key:"plasmic_seed",value:s}),{pathname:e(t.path,{plasmic_seed:s,...t.traits}),cookies:r}},exports.rewriteWithTraits=e,exports.rewriteWithoutTraits=t=>{const[e,...r]=t.split("__pm__"),s=r.reduce((t,e)=>{const[r,s]=e.split("=");return{...t,[r]:s}},{});return{path:"/"===e?e:e.endsWith("/")?e.substring(0,e.length-1):e,traits:s}};
|
|
2
2
|
//# sourceMappingURL=loader-edge.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-edge.cjs.production.min.js","sources":["../src/variation.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"loader-edge.cjs.production.min.js","sources":["../src/random.ts","../src/variation.ts"],"sourcesContent":["export const getSeededRandomFunction = (strSeed: string) => {\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n function cyrb128(str) {\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, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var 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","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"],"names":["rewriteWithTraits","path","traits","endsWith","Object","keys","sort","a","b","map","key","join","expandTraits","Array","fill","_","idx","opts","splits","getActiveVariationSplits","pageUrl","getKnownValue","updateKnownValue","getRandomValue","strSeed","seed","str","h1","h2","h3","h4","k","i","length","charCodeAt","Math","imul","cyrb128","c","d","t","getSeededRandomFunction","rand","newCookies","cookies","floor","random","push","value","pathname","url","traitssArr","split","reduce","acc","elem","substring"],"mappings":"+GAAO,MC4CMA,EAAoB,CAACC,EAAcC,OACpCD,IAAOA,EAAKE,SAAS,KAAO,GAAK,MAXvBD,CAAAA,GAIbE,OAAOC,KAAKH,GAChBI,KAJS,CAACC,EAAWC,IACfD,EAAIC,GAAK,EAAID,EAAIC,EAAI,EAAI,GAI/BC,IAAKC,YAAuBA,KAAOR,EAAOQ,MAC1CC,KAAK,IAIyCC,CAAaV,8BAG/BD,GACjB,CACZA,KACGY,MA7CY,IA8CZC,KAAK,GACLL,IACC,CAACM,EAAGC,OACCf,IAAOA,EAAKE,SAAS,KAAO,GAAK,yBAA4Ba,iCA4BvCC,UAK3BC,OAAEA,EAAFhB,OAAUA,EAAVD,KAAkBA,GAASgB,SAC1BE,qBAAyB,CAC9BD,OAAAA,EACAhB,OAAQ,CACNkB,QAASnB,KACNC,GAELmB,cAAe,OACfC,iBAAkB,IAAM,KACxBC,eAAiBb,gBDjGmBc,CAAAA,UAyChCC,WAvCWC,OACXC,EAAK,WACPC,EAAK,WACLC,EAAK,WACLC,EAAK,eACF,IAAWC,EAAPC,EAAI,EAAMA,EAAIN,EAAIO,OAAQD,IACjCD,EAAIL,EAAIQ,WAAWF,GACnBL,EAAKC,EAAKO,KAAKC,KAAKT,EAAKI,EAAG,WAC5BH,EAAKC,EAAKM,KAAKC,KAAKR,EAAKG,EAAG,YAC5BF,EAAKC,EAAKK,KAAKC,KAAKP,EAAKE,EAAG,WAC5BD,EAAKH,EAAKQ,KAAKC,KAAKN,EAAKC,EAAG,mBAE9BJ,EAAKQ,KAAKC,KAAKP,EAAMF,IAAO,GAAK,WACjCC,EAAKO,KAAKC,KAAKN,EAAMF,IAAO,GAAK,YACjCC,EAAKM,KAAKC,KAAKT,EAAME,IAAO,GAAK,WACjCC,EAAKK,KAAKC,KAAKR,EAAME,IAAO,GAAK,YAC1B,EACJH,EAAKC,EAAKC,EAAKC,KAAQ,GACvBF,EAAKD,KAAQ,GACbE,EAAKF,KAAQ,GACbG,EAAKH,KAAQ,GAmBLU,CAAQb,OAhBNjB,EAAGC,EAAG8B,EAAGC,SAAThC,EAiBIkB,EAAK,GAjBNjB,EAiBUiB,EAAK,GAjBZa,EAiBgBb,EAAK,GAjBlBc,EAiBsBd,EAAK,GAhB1C,eAKDe,GAJJjC,KAAO,IACPC,KAAO,GAGW,SAClBD,EAAIC,EAAKA,IAAM,EACfA,GAJA8B,KAAO,IAIGA,GAAK,GAAM,EAIrBA,GAHAA,EAAKA,GAAK,GAAOA,IAAM,KAEvBE,EAAKA,GADLD,EAAS,GALTA,KAAO,GAKO,GACA,GACA,GACNC,IAAM,GAAK,aC4DNC,WAAyBvC,EAAM,gBAAkB,IAAMQ,EAC7DgC,qCAtCyBzB,UAK9B0B,EAA+C,GAC/ClB,EAAOR,EAAK2B,QAAL,iBAxDHT,KAAKU,MALE,GAKIV,KAAKW,iBAyDrB7B,EAAK2B,QAAL,cACHD,EAAWI,KAAK,CACdrC,IAjEe,eAkEfsC,MAAOvB,IAGJ,CACLwB,SAAUjD,EAAkBiB,EAAKhB,KAAM,cACrBwB,KACbR,EAAKf,SAEV0C,QAASD,6DAjEwBO,UAC5BjD,KAASkD,GAAcD,EAAIE,MAXlB,UAYVlD,EAASiD,EAAWE,OAAO,CAACC,EAAKC,WAC9B7C,EAAKsC,GAASO,EAAKH,MAAM,WACzB,IACFE,GACF5C,GAAMsC,IAER,UACI,CACL/C,KACW,MAATA,EACIA,EACAA,EAAKE,SAAS,KACdF,EAAKuD,UAAU,EAAGvD,EAAKgC,OAAS,GAChChC,EACNC,OAAAA"}
|
package/dist/loader-edge.esm.js
CHANGED
|
@@ -1,104 +1,128 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { getActiveVariation as getActiveVariation$1 } from '@plasmicapp/loader-splits';
|
|
2
|
+
|
|
3
|
+
const getSeededRandomFunction = strSeed => {
|
|
4
|
+
// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript
|
|
5
|
+
function cyrb128(str) {
|
|
6
|
+
let h1 = 1779033703,
|
|
7
|
+
h2 = 3144134277,
|
|
8
|
+
h3 = 1013904242,
|
|
9
|
+
h4 = 2773480762;
|
|
10
|
+
|
|
11
|
+
for (let i = 0, k; i < str.length; i++) {
|
|
12
|
+
k = str.charCodeAt(i);
|
|
13
|
+
h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
|
|
14
|
+
h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
|
|
15
|
+
h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
|
|
16
|
+
h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
h1 = Math.imul(h3 ^ h1 >>> 18, 597399067);
|
|
20
|
+
h2 = Math.imul(h4 ^ h2 >>> 22, 2869860233);
|
|
21
|
+
h3 = Math.imul(h1 ^ h3 >>> 17, 951274213);
|
|
22
|
+
h4 = Math.imul(h2 ^ h4 >>> 19, 2716044179);
|
|
23
|
+
return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function sfc32(a, b, c, d) {
|
|
27
|
+
return function () {
|
|
28
|
+
a >>>= 0;
|
|
29
|
+
b >>>= 0;
|
|
30
|
+
c >>>= 0;
|
|
31
|
+
d >>>= 0;
|
|
32
|
+
var t = a + b | 0;
|
|
33
|
+
a = b ^ b >>> 9;
|
|
34
|
+
b = c + (c << 3) | 0;
|
|
35
|
+
c = c << 21 | c >>> 11;
|
|
36
|
+
d = d + 1 | 0;
|
|
37
|
+
t = t + d | 0;
|
|
38
|
+
c = c + t | 0;
|
|
39
|
+
return (t >>> 0) / 4294967296;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const seed = cyrb128(strSeed);
|
|
44
|
+
const rand = sfc32(seed[0], seed[1], seed[2], seed[3]);
|
|
45
|
+
return rand;
|
|
46
|
+
};
|
|
3
47
|
|
|
4
48
|
const DELIMITER = '__pm__';
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
49
|
+
const PLASMIC_SEED = 'plasmic_seed';
|
|
50
|
+
const SEED_RANGE = 16;
|
|
51
|
+
|
|
52
|
+
const getSeed = () => {
|
|
53
|
+
return `${Math.floor(Math.random() * SEED_RANGE)}`;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const rewriteWithoutTraits = url => {
|
|
57
|
+
const [path, ...traitssArr] = url.split(DELIMITER);
|
|
58
|
+
const traits = traitssArr.reduce((acc, elem) => {
|
|
8
59
|
const [key, value] = elem.split('=');
|
|
9
60
|
return { ...acc,
|
|
10
61
|
[key]: value
|
|
11
62
|
};
|
|
12
63
|
}, {});
|
|
13
64
|
return {
|
|
14
|
-
path,
|
|
15
|
-
|
|
65
|
+
path: path === '/' ? path : path.endsWith('/') ? path.substring(0, path.length - 1) : path,
|
|
66
|
+
traits
|
|
16
67
|
};
|
|
17
68
|
};
|
|
18
69
|
|
|
19
|
-
const
|
|
70
|
+
const expandTraits = traits => {
|
|
20
71
|
const cmp = (a, b) => {
|
|
21
|
-
|
|
22
|
-
const idB = b.split('.')[1];
|
|
23
|
-
return idA < idB ? -1 : idA > idB ? 1 : 0;
|
|
72
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
24
73
|
};
|
|
25
74
|
|
|
26
|
-
return Object.keys(
|
|
27
|
-
.sort(cmp).map(key => `${DELIMITER}${key}=${variation[key]}`).join('');
|
|
75
|
+
return Object.keys(traits).sort(cmp).map(key => `${DELIMITER}${key}=${traits[key]}`).join('');
|
|
28
76
|
};
|
|
29
77
|
|
|
30
|
-
const
|
|
31
|
-
return `${
|
|
78
|
+
const rewriteWithTraits = (path, traits) => {
|
|
79
|
+
return `${path}${path.endsWith('/') ? '' : '/'}${expandTraits(traits)}`;
|
|
32
80
|
};
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
if (splits.length === 0) {
|
|
36
|
-
return [''];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const [curSplit, ...tail] = splits;
|
|
40
|
-
const tailPaths = generateAllSplitPaths(tail);
|
|
41
|
-
const curPaths = ['', ...curSplit.slices.map(slice => expandVariation({
|
|
42
|
-
[getSplitKey(curSplit)]: slice.id
|
|
43
|
-
}))];
|
|
44
|
-
const paths = [];
|
|
45
|
-
|
|
46
|
-
for (let i = 0; i < curPaths.length; i++) {
|
|
47
|
-
for (let j = 0; j < tailPaths.length; j++) {
|
|
48
|
-
paths.push(curPaths[i] + tailPaths[j]);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
81
|
+
const generateAllPaths = path => {
|
|
82
|
+
const paths = [path, ...Array(SEED_RANGE).fill(0).map((_, idx) => `${path}${path.endsWith('/') ? '' : '/'}__pm__${PLASMIC_SEED}=${idx}`)];
|
|
52
83
|
return paths;
|
|
53
84
|
};
|
|
85
|
+
const getMiddlewareResponse = opts => {
|
|
86
|
+
const newCookies = [];
|
|
87
|
+
const seed = opts.cookies[PLASMIC_SEED] || getSeed();
|
|
88
|
+
|
|
89
|
+
if (!opts.cookies[PLASMIC_SEED]) {
|
|
90
|
+
newCookies.push({
|
|
91
|
+
key: PLASMIC_SEED,
|
|
92
|
+
value: seed
|
|
93
|
+
});
|
|
94
|
+
}
|
|
54
95
|
|
|
55
|
-
const generateAllPaths = (path, splits) => {
|
|
56
|
-
return generateAllSplitPaths(splits.sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0)).map(meta => `${path}${path.endsWith('/') ? '' : '/'}${meta}`);
|
|
57
|
-
};
|
|
58
|
-
const getActiveSplits = async opts => {
|
|
59
|
-
const fetcher = new PlasmicModulesFetcher(opts);
|
|
60
|
-
const all = await fetcher.fetchAllData();
|
|
61
|
-
const splits = all.activeSplits;
|
|
62
|
-
const paths = all.components.filter(comp => comp.isPage && comp.path).map(comp => comp.path);
|
|
63
96
|
return {
|
|
64
|
-
|
|
65
|
-
|
|
97
|
+
pathname: rewriteWithTraits(opts.path, {
|
|
98
|
+
[PLASMIC_SEED]: seed,
|
|
99
|
+
...opts.traits
|
|
100
|
+
}),
|
|
101
|
+
cookies: newCookies
|
|
66
102
|
};
|
|
67
103
|
};
|
|
68
|
-
const
|
|
69
|
-
opts,
|
|
70
|
-
cookies,
|
|
71
|
-
traits,
|
|
72
|
-
url
|
|
73
|
-
}) => {
|
|
104
|
+
const getActiveVariation = opts => {
|
|
74
105
|
const {
|
|
75
|
-
splits
|
|
76
|
-
} = await getActiveSplits(opts);
|
|
77
|
-
const newCookies = [];
|
|
78
|
-
const variation = getActiveVariation({
|
|
79
106
|
splits,
|
|
80
107
|
traits,
|
|
81
|
-
|
|
82
|
-
|
|
108
|
+
path
|
|
109
|
+
} = opts;
|
|
110
|
+
return getActiveVariation$1({
|
|
111
|
+
splits,
|
|
112
|
+
traits: {
|
|
113
|
+
pageUrl: path,
|
|
114
|
+
...traits
|
|
83
115
|
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
116
|
+
getKnownValue: () => undefined,
|
|
117
|
+
updateKnownValue: () => null,
|
|
118
|
+
getRandomValue: key => {
|
|
119
|
+
var _traits$PLASMIC_SEED;
|
|
120
|
+
|
|
121
|
+
const rand = getSeededRandomFunction(((_traits$PLASMIC_SEED = traits[PLASMIC_SEED]) != null ? _traits$PLASMIC_SEED : '') + key);
|
|
122
|
+
return rand();
|
|
89
123
|
}
|
|
90
124
|
});
|
|
91
|
-
let newUrl = url;
|
|
92
|
-
|
|
93
|
-
if (Object.keys(variation).length) {
|
|
94
|
-
newUrl = rewriteWithVariation(url, variation);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
url: newUrl,
|
|
99
|
-
cookies: newCookies
|
|
100
|
-
};
|
|
101
125
|
};
|
|
102
126
|
|
|
103
|
-
export { generateAllPaths,
|
|
127
|
+
export { generateAllPaths, getActiveVariation, getMiddlewareResponse, rewriteWithTraits, rewriteWithoutTraits };
|
|
104
128
|
//# sourceMappingURL=loader-edge.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader-edge.esm.js","sources":["../src/variation.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"loader-edge.esm.js","sources":["../src/random.ts","../src/variation.ts"],"sourcesContent":["export const getSeededRandomFunction = (strSeed: string) => {\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n function cyrb128(str) {\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, b, c, d) {\n return function () {\n a >>>= 0;\n b >>>= 0;\n c >>>= 0;\n d >>>= 0;\n var 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","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"],"names":["getSeededRandomFunction","strSeed","cyrb128","str","h1","h2","h3","h4","i","k","length","charCodeAt","Math","imul","sfc32","a","b","c","d","t","seed","rand","DELIMITER","PLASMIC_SEED","SEED_RANGE","getSeed","floor","random","rewriteWithoutTraits","url","path","traitssArr","split","traits","reduce","acc","elem","key","value","endsWith","substring","expandTraits","cmp","Object","keys","sort","map","join","rewriteWithTraits","generateAllPaths","paths","Array","fill","_","idx","getMiddlewareResponse","opts","newCookies","cookies","push","pathname","getActiveVariation","splits","getActiveVariationSplits","pageUrl","getKnownValue","undefined","updateKnownValue","getRandomValue"],"mappings":"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"}
|
package/dist/random.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getSeededRandomFunction: (strSeed: string) => () => number;
|
package/dist/variation.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare const
|
|
1
|
+
import { Split } from '@plasmicapp/loader-fetcher';
|
|
2
|
+
declare type Traits = Record<string, string | number | boolean>;
|
|
3
|
+
export declare const rewriteWithoutTraits: (url: string) => {
|
|
4
4
|
path: string;
|
|
5
|
-
|
|
5
|
+
traits: {};
|
|
6
6
|
};
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const generateAllPaths: (path: string
|
|
9
|
-
export declare
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
paths: string[];
|
|
13
|
-
}>;
|
|
14
|
-
export declare const getMiddlewareResponse: ({ opts, cookies, traits, url, }: {
|
|
15
|
-
opts: MiddlewareOptions;
|
|
7
|
+
export declare const rewriteWithTraits: (path: string, traits: Traits) => string;
|
|
8
|
+
export declare const generateAllPaths: (path: string) => string[];
|
|
9
|
+
export declare const getMiddlewareResponse: (opts: {
|
|
10
|
+
path: string;
|
|
11
|
+
traits: Traits;
|
|
16
12
|
cookies: Record<string, string>;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}) => Promise<{
|
|
20
|
-
url: string;
|
|
13
|
+
}) => {
|
|
14
|
+
pathname: string;
|
|
21
15
|
cookies: {
|
|
22
16
|
key: string;
|
|
23
17
|
value: string;
|
|
24
18
|
}[];
|
|
25
|
-
}
|
|
19
|
+
};
|
|
20
|
+
export declare const getActiveVariation: (opts: {
|
|
21
|
+
splits: Split[];
|
|
22
|
+
traits: Record<string, string | number | boolean>;
|
|
23
|
+
path: string;
|
|
24
|
+
}) => Record<string, string>;
|
|
25
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.8",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"typescript": "^4.3.2"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@plasmicapp/loader-fetcher": "1.0.
|
|
57
|
-
"@plasmicapp/loader-splits": "1.0.
|
|
56
|
+
"@plasmicapp/loader-fetcher": "1.0.3",
|
|
57
|
+
"@plasmicapp/loader-splits": "1.0.7"
|
|
58
58
|
},
|
|
59
59
|
"publishConfig": {
|
|
60
60
|
"access": "public"
|
|
61
61
|
},
|
|
62
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "82d225454e795bc101aa3ae685090658b7aab113"
|
|
63
63
|
}
|