@plasmicapp/loader-splits 1.0.18 → 1.0.20

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.
@@ -7,20 +7,17 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
7
7
  var jsonLogic = _interopDefault(require('json-logic-js'));
8
8
 
9
9
  function _extends() {
10
- _extends = Object.assign || function (target) {
10
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
11
11
  for (var i = 1; i < arguments.length; i++) {
12
12
  var source = arguments[i];
13
-
14
13
  for (var key in source) {
15
14
  if (Object.prototype.hasOwnProperty.call(source, key)) {
16
15
  target[key] = source[key];
17
16
  }
18
17
  }
19
18
  }
20
-
21
19
  return target;
22
20
  };
23
-
24
21
  return _extends.apply(this, arguments);
25
22
  }
26
23
 
@@ -28,56 +25,45 @@ var isBrowser = typeof window !== 'undefined' && window != null && typeof window
28
25
  var BUILTIN_TRAITS_UNKNOWN = {
29
26
  pageUrl: 'unknown'
30
27
  };
31
-
32
28
  var getBrowserBuiltinTraits = function getBrowserBuiltinTraits() {
33
29
  if (!isBrowser) {
34
30
  return {};
35
31
  }
36
-
37
32
  return {
38
33
  pageUrl: document.location.href
39
34
  };
40
35
  };
41
-
42
36
  var getSplitKey = function getSplitKey(split) {
43
37
  return "" + (split.type === 'experiment' ? 'exp.' : 'seg.') + split.id;
44
38
  };
45
39
  function getActiveVariation(opts) {
46
40
  var splits = opts.splits,
47
- getKnownValue = opts.getKnownValue,
48
- updateKnownValue = opts.updateKnownValue;
49
-
41
+ getKnownValue = opts.getKnownValue,
42
+ updateKnownValue = opts.updateKnownValue;
50
43
  var getRandomValue = function getRandomValue(key) {
51
44
  if (opts.getRandomValue) {
52
45
  return opts.getRandomValue(key);
53
46
  }
54
-
55
47
  return Math.random();
56
48
  };
57
-
58
49
  var variation = {};
59
50
  splits.forEach(function (split) {
60
51
  var key = getSplitKey(split);
61
52
  var knownVal = getKnownValue(key);
62
-
63
53
  if (knownVal) {
64
54
  variation[key] = knownVal;
65
55
  return;
66
56
  }
67
-
68
57
  var numSlices = split.slices.length;
69
58
  var chosenSlice = undefined;
70
-
71
59
  if (split.type === 'experiment') {
72
60
  var p = getRandomValue(split.id);
73
61
  chosenSlice = split.slices[numSlices - 1];
74
-
75
62
  for (var i = 0; i < numSlices; i++) {
76
63
  if (p - split.slices[i].prob <= 0) {
77
64
  chosenSlice = split.slices[i];
78
65
  break;
79
66
  }
80
-
81
67
  p -= split.slices[i].prob;
82
68
  }
83
69
  } else if (split.type === 'segment') {
@@ -89,14 +75,11 @@ function getActiveVariation(opts) {
89
75
  }
90
76
  }
91
77
  }
92
-
93
78
  if (chosenSlice) {
94
79
  variation[key] = chosenSlice.id;
95
-
96
80
  if (split.externalId && chosenSlice.externalId) {
97
81
  variation["ext." + split.externalId] = chosenSlice.externalId;
98
82
  }
99
-
100
83
  if (split.type === 'experiment') {
101
84
  updateKnownValue(key, chosenSlice.id);
102
85
  }
@@ -108,18 +91,15 @@ function getExternalIds(splits, variation) {
108
91
  var externalVariation = {};
109
92
  Object.keys(variation).forEach(function (variationKey) {
110
93
  var _variationKey$split = variationKey.split('.'),
111
- splitId = _variationKey$split[1];
112
-
94
+ splitId = _variationKey$split[1];
113
95
  var sliceId = variation[variationKey];
114
96
  var split = splits.find(function (s) {
115
97
  return s.id === splitId || s.externalId === splitId;
116
98
  });
117
-
118
99
  if (split && split.externalId) {
119
100
  var slice = split.slices.find(function (s) {
120
101
  return s.id === sliceId || s.externalId === sliceId;
121
102
  });
122
-
123
103
  if (slice != null && slice.externalId) {
124
104
  // Save variation without ext prefix
125
105
  externalVariation["" + split.externalId] = slice.externalId;
@@ -1 +1 @@
1
- {"version":3,"file":"loader-splits.cjs.development.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getBrowserBuiltinTraits","location","href","getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","getRandomValue","key","Math","random","variation","forEach","knownVal","numSlices","slices","length","chosenSlice","undefined","p","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId","getExternalIds","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"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"}
1
+ {"version":3,"file":"loader-splits.cjs.development.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getBrowserBuiltinTraits","location","href","getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","getRandomValue","key","Math","random","variation","forEach","knownVal","numSlices","slices","length","chosenSlice","undefined","p","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId","getExternalIds","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=(e=require("json-logic-js"))&&"object"==typeof e&&"default"in e?e.default:e;function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var r="undefined"!=typeof window&&null!=window&&void 0!==window.document,i={pageUrl:"unknown"},a=function(e){return("experiment"===e.type?"exp.":"seg.")+e.id};exports.getActiveVariation=function(e){var o=e.getKnownValue,l=e.updateKnownValue,s={};return e.splits.forEach((function(d){var u=a(d),c=o(u);if(c)s[u]=c;else{var f=d.slices.length,p=void 0;if("experiment"===d.type){var x=function(t){return e.getRandomValue?e.getRandomValue(t):Math.random()}(d.id);p=d.slices[f-1];for(var v=0;v<f;v++){if(x-d.slices[v].prob<=0){p=d.slices[v];break}x-=d.slices[v].prob}}else if("segment"===d.type)for(var g=0;g<f;g++)t.apply(d.slices[g].cond,n({time:(new Date).toISOString()},i,r?{pageUrl:document.location.href}:{},e.traits))&&(p=d.slices[g]);p&&(s[u]=p.id,d.externalId&&p.externalId&&(s["ext."+d.externalId]=p.externalId),"experiment"===d.type&&l(u,p.id))}})),s},exports.getExternalIds=function(e,t){var n={};return Object.keys(t).forEach((function(r){var i=r.split(".")[1],a=t[r],o=e.find((function(e){return e.id===i||e.externalId===i}));if(o&&o.externalId){var l=o.slices.find((function(e){return e.id===a||e.externalId===a}));null!=l&&l.externalId&&(n[""+o.externalId]=l.externalId)}})),n},exports.getSplitKey=a;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e,t=(e=require("json-logic-js"))&&"object"==typeof e&&"default"in e?e.default:e;function n(){return(n=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}var r="undefined"!=typeof window&&null!=window&&void 0!==window.document,i={pageUrl:"unknown"},a=function(e){return("experiment"===e.type?"exp.":"seg.")+e.id};exports.getActiveVariation=function(e){var o=e.getKnownValue,l=e.updateKnownValue,s={};return e.splits.forEach((function(d){var u=a(d),c=o(u);if(c)s[u]=c;else{var f=d.slices.length,p=void 0;if("experiment"===d.type){var x=function(t){return e.getRandomValue?e.getRandomValue(t):Math.random()}(d.id);p=d.slices[f-1];for(var v=0;v<f;v++){if(x-d.slices[v].prob<=0){p=d.slices[v];break}x-=d.slices[v].prob}}else if("segment"===d.type)for(var g=0;g<f;g++)t.apply(d.slices[g].cond,n({time:(new Date).toISOString()},i,r?{pageUrl:document.location.href}:{},e.traits))&&(p=d.slices[g]);p&&(s[u]=p.id,d.externalId&&p.externalId&&(s["ext."+d.externalId]=p.externalId),"experiment"===d.type&&l(u,p.id))}})),s},exports.getExternalIds=function(e,t){var n={};return Object.keys(t).forEach((function(r){var i=r.split(".")[1],a=t[r],o=e.find((function(e){return e.id===i||e.externalId===i}));if(o&&o.externalId){var l=o.slices.find((function(e){return e.id===a||e.externalId===a}));null!=l&&l.externalId&&(n[""+o.externalId]=l.externalId)}})),n},exports.getSplitKey=a;
2
2
  //# sourceMappingURL=loader-splits.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-splits.cjs.production.min.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getSplitKey","split","type","id","opts","getKnownValue","updateKnownValue","variation","splits","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","getRandomValue","Math","random","i","prob","jsonLogic","apply","cond","time","Date","toISOString","location","href","traits","externalId","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"uWAOA,IAAMA,EACc,oBAAXC,QACG,MAAVA,aAC2B,IAApBA,OAAOC,SAEVC,EAAyB,CAC7BC,QAAS,WAYEC,EAAc,SAACC,UACD,eAAfA,EAAMC,KAAwB,OAAS,QAASD,EAAME,wCAG/BC,OAOjBC,EAAoCD,EAApCC,cAAeC,EAAqBF,EAArBE,iBAOzBC,EAAoC,UAPUH,EAA5CI,OAQDC,SAAQ,SAACR,OACRS,EAAMV,EAAYC,GAClBU,EAAWN,EAAcK,MAC3BC,EACFJ,EAAUG,GAAOC,WAGbC,EAAYX,EAAMY,OAAOC,OAC3BC,OAAcC,KACC,eAAff,EAAMC,KAAuB,KAC3Be,EAjBe,SAACP,UAClBN,EAAKc,eACAd,EAAKc,eAAeR,GAEtBS,KAAKC,SAaFF,CAAejB,EAAME,IAC7BY,EAAcd,EAAMY,OAAOD,EAAY,OAClC,IAAIS,EAAI,EAAGA,EAAIT,EAAWS,IAAK,IAC9BJ,EAAIhB,EAAMY,OAAOQ,GAAGC,MAAQ,EAAG,CACjCP,EAAcd,EAAMY,OAAOQ,SAG7BJ,GAAKhB,EAAMY,OAAOQ,GAAGC,WAElB,GAAmB,YAAfrB,EAAMC,SACV,IAAImB,EAAI,EAAGA,EAAIT,EAAWS,IAE3BE,EAAUC,MAAMvB,EAAMY,OAAOQ,GAAGI,QAC9BC,MAAM,IAAIC,MAAOC,eACd9B,EAnDRH,EAGE,CACLI,QAASF,SAASgC,SAASC,MAHpB,GAoDI1B,EAAK2B,WAGVhB,EAAcd,EAAMY,OAAOQ,IAK7BN,IACFR,EAAUG,GAAOK,EAAYZ,GACzBF,EAAM+B,YAAcjB,EAAYiB,aAClCzB,SAAiBN,EAAM+B,YAAgBjB,EAAYiB,YAElC,eAAf/B,EAAMC,MACRI,EAAiBI,EAAKK,EAAYZ,SAKjCI,mCAIPC,EACAD,OAEM0B,EAA4C,UAClDC,OAAOC,KAAK5B,GAAWE,SAAQ,SAAC2B,OACrBC,EAAWD,EAAanC,MAAM,QACjCqC,EAAU/B,EAAU6B,GACpBnC,EAAQO,EAAO+B,MACnB,SAACC,UAAMA,EAAErC,KAAOkC,GAAWG,EAAER,aAAeK,QAE1CpC,GAASA,EAAM+B,WAAY,KACvBS,EAASxC,EAAMY,OAElB0B,MAAK,SAACC,UAAMA,EAAErC,KAAOmC,GAAWE,EAAER,aAAeM,WAChDG,GAAAA,EAAOT,aAETC,KAAqBhC,EAAM+B,YAAgBS,EAAMT,gBAIhDC"}
1
+ {"version":3,"file":"loader-splits.cjs.production.min.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getSplitKey","split","type","id","opts","getKnownValue","updateKnownValue","variation","splits","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","getRandomValue","Math","random","i","prob","jsonLogic","apply","cond","time","Date","toISOString","location","href","traits","externalId","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"2XAOA,IAAMA,EACc,oBAAXC,QACG,MAAVA,aAC2B,IAApBA,OAAOC,SAEVC,EAAyB,CAC7BC,QAAS,WAYEC,EAAc,SAACC,GAC1B,OAAyB,eAAfA,EAAMC,KAAwB,OAAS,QAASD,EAAME,wCAG/BC,GAOjC,IAAgBC,EAAoCD,EAApCC,cAAeC,EAAqBF,EAArBE,iBAOzBC,EAAoC,GA8C1C,OArDoDH,EAA5CI,OAQDC,SAAQ,SAACR,GACd,IAAMS,EAAMV,EAAYC,GAClBU,EAAWN,EAAcK,GAC/B,GAAIC,EACFJ,EAAUG,GAAOC,MADnB,CAIA,IAAMC,EAAYX,EAAMY,OAAOC,OAC3BC,OAAcC,EAClB,GAAmB,eAAff,EAAMC,KAAuB,CAC/B,IAAIe,EAjBe,SAACP,GACtB,OAAIN,EAAKc,eACAd,EAAKc,eAAeR,GAEtBS,KAAKC,SAaFF,CAAejB,EAAME,IAC7BY,EAAcd,EAAMY,OAAOD,EAAY,GACvC,IAAK,IAAIS,EAAI,EAAGA,EAAIT,EAAWS,IAAK,CAClC,GAAIJ,EAAIhB,EAAMY,OAAOQ,GAAGC,MAAQ,EAAG,CACjCP,EAAcd,EAAMY,OAAOQ,GAC3B,MAEFJ,GAAKhB,EAAMY,OAAOQ,GAAGC,WAElB,GAAmB,YAAfrB,EAAMC,KACf,IAAK,IAAImB,EAAI,EAAGA,EAAIT,EAAWS,IAE3BE,EAAUC,MAAMvB,EAAMY,OAAOQ,GAAGI,QAC9BC,MAAM,IAAIC,MAAOC,eACd9B,EAnDRH,EAGE,CACLI,QAASF,SAASgC,SAASC,MAHpB,GAoDI1B,EAAK2B,WAGVhB,EAAcd,EAAMY,OAAOQ,IAK7BN,IACFR,EAAUG,GAAOK,EAAYZ,GACzBF,EAAM+B,YAAcjB,EAAYiB,aAClCzB,SAAiBN,EAAM+B,YAAgBjB,EAAYiB,YAElC,eAAf/B,EAAMC,MACRI,EAAiBI,EAAKK,EAAYZ,SAKjCI,mCAIPC,EACAD,GAEA,IAAM0B,EAA4C,GAiBlD,OAhBAC,OAAOC,KAAK5B,GAAWE,SAAQ,SAAC2B,GAC9B,IAASC,EAAWD,EAAanC,MAAM,QACjCqC,EAAU/B,EAAU6B,GACpBnC,EAAQO,EAAO+B,MACnB,SAACC,GAAC,OAAKA,EAAErC,KAAOkC,GAAWG,EAAER,aAAeK,KAE9C,GAAIpC,GAASA,EAAM+B,WAAY,CAC7B,IAAMS,EAASxC,EAAMY,OAElB0B,MAAK,SAACC,GAAC,OAAKA,EAAErC,KAAOmC,GAAWE,EAAER,aAAeM,WAChDG,GAAAA,EAAOT,aAETC,KAAqBhC,EAAM+B,YAAgBS,EAAMT,gBAIhDC"}
@@ -1,20 +1,17 @@
1
1
  import jsonLogic from 'json-logic-js';
2
2
 
3
3
  function _extends() {
4
- _extends = Object.assign || function (target) {
4
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
5
5
  for (var i = 1; i < arguments.length; i++) {
6
6
  var source = arguments[i];
7
-
8
7
  for (var key in source) {
9
8
  if (Object.prototype.hasOwnProperty.call(source, key)) {
10
9
  target[key] = source[key];
11
10
  }
12
11
  }
13
12
  }
14
-
15
13
  return target;
16
14
  };
17
-
18
15
  return _extends.apply(this, arguments);
19
16
  }
20
17
 
@@ -22,56 +19,45 @@ var isBrowser = typeof window !== 'undefined' && window != null && typeof window
22
19
  var BUILTIN_TRAITS_UNKNOWN = {
23
20
  pageUrl: 'unknown'
24
21
  };
25
-
26
22
  var getBrowserBuiltinTraits = function getBrowserBuiltinTraits() {
27
23
  if (!isBrowser) {
28
24
  return {};
29
25
  }
30
-
31
26
  return {
32
27
  pageUrl: document.location.href
33
28
  };
34
29
  };
35
-
36
30
  var getSplitKey = function getSplitKey(split) {
37
31
  return "" + (split.type === 'experiment' ? 'exp.' : 'seg.') + split.id;
38
32
  };
39
33
  function getActiveVariation(opts) {
40
34
  var splits = opts.splits,
41
- getKnownValue = opts.getKnownValue,
42
- updateKnownValue = opts.updateKnownValue;
43
-
35
+ getKnownValue = opts.getKnownValue,
36
+ updateKnownValue = opts.updateKnownValue;
44
37
  var getRandomValue = function getRandomValue(key) {
45
38
  if (opts.getRandomValue) {
46
39
  return opts.getRandomValue(key);
47
40
  }
48
-
49
41
  return Math.random();
50
42
  };
51
-
52
43
  var variation = {};
53
44
  splits.forEach(function (split) {
54
45
  var key = getSplitKey(split);
55
46
  var knownVal = getKnownValue(key);
56
-
57
47
  if (knownVal) {
58
48
  variation[key] = knownVal;
59
49
  return;
60
50
  }
61
-
62
51
  var numSlices = split.slices.length;
63
52
  var chosenSlice = undefined;
64
-
65
53
  if (split.type === 'experiment') {
66
54
  var p = getRandomValue(split.id);
67
55
  chosenSlice = split.slices[numSlices - 1];
68
-
69
56
  for (var i = 0; i < numSlices; i++) {
70
57
  if (p - split.slices[i].prob <= 0) {
71
58
  chosenSlice = split.slices[i];
72
59
  break;
73
60
  }
74
-
75
61
  p -= split.slices[i].prob;
76
62
  }
77
63
  } else if (split.type === 'segment') {
@@ -83,14 +69,11 @@ function getActiveVariation(opts) {
83
69
  }
84
70
  }
85
71
  }
86
-
87
72
  if (chosenSlice) {
88
73
  variation[key] = chosenSlice.id;
89
-
90
74
  if (split.externalId && chosenSlice.externalId) {
91
75
  variation["ext." + split.externalId] = chosenSlice.externalId;
92
76
  }
93
-
94
77
  if (split.type === 'experiment') {
95
78
  updateKnownValue(key, chosenSlice.id);
96
79
  }
@@ -102,18 +85,15 @@ function getExternalIds(splits, variation) {
102
85
  var externalVariation = {};
103
86
  Object.keys(variation).forEach(function (variationKey) {
104
87
  var _variationKey$split = variationKey.split('.'),
105
- splitId = _variationKey$split[1];
106
-
88
+ splitId = _variationKey$split[1];
107
89
  var sliceId = variation[variationKey];
108
90
  var split = splits.find(function (s) {
109
91
  return s.id === splitId || s.externalId === splitId;
110
92
  });
111
-
112
93
  if (split && split.externalId) {
113
94
  var slice = split.slices.find(function (s) {
114
95
  return s.id === sliceId || s.externalId === sliceId;
115
96
  });
116
-
117
97
  if (slice != null && slice.externalId) {
118
98
  // Save variation without ext prefix
119
99
  externalVariation["" + split.externalId] = slice.externalId;
@@ -1 +1 @@
1
- {"version":3,"file":"loader-splits.esm.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getBrowserBuiltinTraits","location","href","getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","getRandomValue","key","Math","random","variation","forEach","knownVal","numSlices","slices","length","chosenSlice","undefined","p","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId","getExternalIds","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"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"}
1
+ {"version":3,"file":"loader-splits.esm.js","sources":["../src/variation.ts"],"sourcesContent":["import {\n ExperimentSlice,\n SegmentSlice,\n Split,\n} from '@plasmicapp/loader-fetcher';\nimport jsonLogic from 'json-logic-js';\n\nconst isBrowser =\n typeof window !== 'undefined' &&\n window != null &&\n typeof window.document !== 'undefined';\n\nconst BUILTIN_TRAITS_UNKNOWN = {\n pageUrl: 'unknown',\n};\n\nconst getBrowserBuiltinTraits = () => {\n if (!isBrowser) {\n return {};\n }\n return {\n pageUrl: document.location.href,\n };\n};\n\nexport const getSplitKey = (split: Split) => {\n return `${split.type === 'experiment' ? 'exp.' : 'seg.'}${split.id}`;\n};\n\nexport function getActiveVariation(opts: {\n splits: Split[];\n traits: Record<string, string | number | boolean>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n getRandomValue?: (key: string) => number;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\n const getRandomValue = (key: string) => {\n if (opts.getRandomValue) {\n return opts.getRandomValue(key);\n }\n return Math.random();\n };\n const variation: Record<string, string> = {};\n splits.forEach((split) => {\n const key = getSplitKey(split);\n const knownVal = getKnownValue(key);\n if (knownVal) {\n variation[key] = knownVal;\n return;\n }\n const numSlices = split.slices.length;\n let chosenSlice = undefined;\n if (split.type === 'experiment') {\n let p = getRandomValue(split.id);\n chosenSlice = split.slices[numSlices - 1];\n for (let i = 0; i < numSlices; i++) {\n if (p - split.slices[i].prob <= 0) {\n chosenSlice = split.slices[i];\n break;\n }\n p -= split.slices[i].prob;\n }\n } else if (split.type === 'segment') {\n for (let i = 0; i < numSlices; i++) {\n if (\n jsonLogic.apply(split.slices[i].cond, {\n time: new Date().toISOString(),\n ...BUILTIN_TRAITS_UNKNOWN,\n ...getBrowserBuiltinTraits(),\n ...opts.traits,\n })\n ) {\n chosenSlice = split.slices[i];\n }\n }\n }\n\n if (chosenSlice) {\n variation[key] = chosenSlice.id;\n if (split.externalId && chosenSlice.externalId) {\n variation[`ext.${split.externalId}`] = chosenSlice.externalId;\n }\n if (split.type === 'experiment') {\n updateKnownValue(key, chosenSlice.id);\n }\n }\n });\n\n return variation;\n}\n\nexport function getExternalIds(\n splits: Split[],\n variation: Record<string, string>\n) {\n const externalVariation: Record<string, string> = {};\n Object.keys(variation).forEach((variationKey) => {\n const [, splitId] = variationKey.split('.');\n const sliceId = variation[variationKey];\n const split = splits.find(\n (s) => s.id === splitId || s.externalId === splitId\n );\n if (split && split.externalId) {\n const slice = (split.slices as Array<\n ExperimentSlice | SegmentSlice\n >).find((s) => s.id === sliceId || s.externalId === sliceId);\n if (slice?.externalId) {\n // Save variation without ext prefix\n externalVariation[`${split.externalId}`] = slice.externalId;\n }\n }\n });\n return externalVariation;\n}\n"],"names":["isBrowser","window","document","BUILTIN_TRAITS_UNKNOWN","pageUrl","getBrowserBuiltinTraits","location","href","getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","getRandomValue","key","Math","random","variation","forEach","knownVal","numSlices","slices","length","chosenSlice","undefined","p","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId","getExternalIds","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":";;;;;;;;;;;;;;;;;AAOA,IAAMA,SAAS,GACb,OAAOC,MAAM,KAAK,WAAW,IAC7BA,MAAM,IAAI,IAAI,IACd,OAAOA,MAAM,CAACC,QAAQ,KAAK,WAAW;AAExC,IAAMC,sBAAsB,GAAG;EAC7BC,OAAO,EAAE;CACV;AAED,IAAMC,uBAAuB,GAAG,SAA1BA,uBAAuB;EAC3B,IAAI,CAACL,SAAS,EAAE;IACd,OAAO,EAAE;;EAEX,OAAO;IACLI,OAAO,EAAEF,QAAQ,CAACI,QAAQ,CAACC;GAC5B;AACH,CAAC;IAEYC,WAAW,GAAG,SAAdA,WAAW,CAAIC,KAAY;EACtC,aAAUA,KAAK,CAACC,IAAI,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,IAAGD,KAAK,CAACE,EAAE;AACpE;SAEgBC,kBAAkB,CAACC,IAMlC;EACC,IAAQC,MAAM,GAAsCD,IAAI,CAAhDC,MAAM;IAAEC,aAAa,GAAuBF,IAAI,CAAxCE,aAAa;IAAEC,gBAAgB,GAAKH,IAAI,CAAzBG,gBAAgB;EAC/C,IAAMC,cAAc,GAAG,SAAjBA,cAAc,CAAIC,GAAW;IACjC,IAAIL,IAAI,CAACI,cAAc,EAAE;MACvB,OAAOJ,IAAI,CAACI,cAAc,CAACC,GAAG,CAAC;;IAEjC,OAAOC,IAAI,CAACC,MAAM,EAAE;GACrB;EACD,IAAMC,SAAS,GAA2B,EAAE;EAC5CP,MAAM,CAACQ,OAAO,CAAC,UAACb,KAAK;IACnB,IAAMS,GAAG,GAAGV,WAAW,CAACC,KAAK,CAAC;IAC9B,IAAMc,QAAQ,GAAGR,aAAa,CAACG,GAAG,CAAC;IACnC,IAAIK,QAAQ,EAAE;MACZF,SAAS,CAACH,GAAG,CAAC,GAAGK,QAAQ;MACzB;;IAEF,IAAMC,SAAS,GAAGf,KAAK,CAACgB,MAAM,CAACC,MAAM;IACrC,IAAIC,WAAW,GAAGC,SAAS;IAC3B,IAAInB,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;MAC/B,IAAImB,CAAC,GAAGZ,cAAc,CAACR,KAAK,CAACE,EAAE,CAAC;MAChCgB,WAAW,GAAGlB,KAAK,CAACgB,MAAM,CAACD,SAAS,GAAG,CAAC,CAAC;MACzC,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,SAAS,EAAEM,CAAC,EAAE,EAAE;QAClC,IAAID,CAAC,GAAGpB,KAAK,CAACgB,MAAM,CAACK,CAAC,CAAC,CAACC,IAAI,IAAI,CAAC,EAAE;UACjCJ,WAAW,GAAGlB,KAAK,CAACgB,MAAM,CAACK,CAAC,CAAC;UAC7B;;QAEFD,CAAC,IAAIpB,KAAK,CAACgB,MAAM,CAACK,CAAC,CAAC,CAACC,IAAI;;KAE5B,MAAM,IAAItB,KAAK,CAACC,IAAI,KAAK,SAAS,EAAE;MACnC,KAAK,IAAIoB,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGN,SAAS,EAAEM,EAAC,EAAE,EAAE;QAClC,IACEE,SAAS,CAACC,KAAK,CAACxB,KAAK,CAACgB,MAAM,CAACK,EAAC,CAAC,CAACI,IAAI;UAClCC,IAAI,EAAE,IAAIC,IAAI,EAAE,CAACC,WAAW;WACzBlC,sBAAsB,EACtBE,uBAAuB,EAAE,EACzBQ,IAAI,CAACyB,MAAM,EACd,EACF;UACAX,WAAW,GAAGlB,KAAK,CAACgB,MAAM,CAACK,EAAC,CAAC;;;;IAKnC,IAAIH,WAAW,EAAE;MACfN,SAAS,CAACH,GAAG,CAAC,GAAGS,WAAW,CAAChB,EAAE;MAC/B,IAAIF,KAAK,CAAC8B,UAAU,IAAIZ,WAAW,CAACY,UAAU,EAAE;QAC9ClB,SAAS,UAAQZ,KAAK,CAAC8B,UAAU,CAAG,GAAGZ,WAAW,CAACY,UAAU;;MAE/D,IAAI9B,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;QAC/BM,gBAAgB,CAACE,GAAG,EAAES,WAAW,CAAChB,EAAE,CAAC;;;GAG1C,CAAC;EAEF,OAAOU,SAAS;AAClB;SAEgBmB,cAAc,CAC5B1B,MAAe,EACfO,SAAiC;EAEjC,IAAMoB,iBAAiB,GAA2B,EAAE;EACpDC,MAAM,CAACC,IAAI,CAACtB,SAAS,CAAC,CAACC,OAAO,CAAC,UAACsB,YAAY;IAC1C,0BAAoBA,YAAY,CAACnC,KAAK,CAAC,GAAG,CAAC;MAAlCoC,OAAO;IAChB,IAAMC,OAAO,GAAGzB,SAAS,CAACuB,YAAY,CAAC;IACvC,IAAMnC,KAAK,GAAGK,MAAM,CAACiC,IAAI,CACvB,UAACC,CAAC;MAAA,OAAKA,CAAC,CAACrC,EAAE,KAAKkC,OAAO,IAAIG,CAAC,CAACT,UAAU,KAAKM,OAAO;MACpD;IACD,IAAIpC,KAAK,IAAIA,KAAK,CAAC8B,UAAU,EAAE;MAC7B,IAAMU,KAAK,GAAIxC,KAAK,CAACgB,MAEnB,CAACsB,IAAI,CAAC,UAACC,CAAC;QAAA,OAAKA,CAAC,CAACrC,EAAE,KAAKmC,OAAO,IAAIE,CAAC,CAACT,UAAU,KAAKO,OAAO;QAAC;MAC5D,IAAIG,KAAK,YAALA,KAAK,CAAEV,UAAU,EAAE;;QAErBE,iBAAiB,MAAIhC,KAAK,CAAC8B,UAAU,CAAG,GAAGU,KAAK,CAACV,UAAU;;;GAGhE,CAAC;EACF,OAAOE,iBAAiB;AAC1B;;;;"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.18",
2
+ "version": "1.0.20",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -54,11 +54,11 @@
54
54
  "typescript": "^4.3.2"
55
55
  },
56
56
  "dependencies": {
57
- "@plasmicapp/loader-fetcher": "1.0.13",
57
+ "@plasmicapp/loader-fetcher": "1.0.15",
58
58
  "json-logic-js": "^2.0.2"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "858a1d14da1356f1aafe3ad516c69081ce9e2371"
63
+ "gitHead": "e282c9cca3a168a822b34a1a5e6de3a6a072c00f"
64
64
  }