@plasmicapp/loader-splits 1.0.7 → 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.
@@ -24,6 +24,21 @@ function _extends() {
24
24
  return _extends.apply(this, arguments);
25
25
  }
26
26
 
27
+ var isBrowser = typeof window !== 'undefined' && window != null && typeof window.document !== 'undefined';
28
+ var BUILTIN_TRAITS_UNKNOWN = {
29
+ pageUrl: 'unknown'
30
+ };
31
+
32
+ var getBrowserBuiltinTraits = function getBrowserBuiltinTraits() {
33
+ if (!isBrowser) {
34
+ return {};
35
+ }
36
+
37
+ return {
38
+ pageUrl: document.location.href
39
+ };
40
+ };
41
+
27
42
  var getSplitKey = function getSplitKey(split) {
28
43
  return "" + (split.type === 'experiment' ? 'exp.' : 'seg.') + split.id;
29
44
  };
@@ -69,7 +84,7 @@ function getActiveVariation(opts) {
69
84
  for (var _i = 0; _i < numSlices; _i++) {
70
85
  if (jsonLogic.apply(split.slices[_i].cond, _extends({
71
86
  time: new Date().toISOString()
72
- }, opts.traits))) {
87
+ }, BUILTIN_TRAITS_UNKNOWN, getBrowserBuiltinTraits(), opts.traits))) {
73
88
  chosenSlice = split.slices[_i];
74
89
  }
75
90
  }
@@ -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\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 ...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":["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 r(){return(r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e}).apply(this,arguments)}var n=function(e){return("experiment"===e.type?"exp.":"seg.")+e.id};exports.getActiveVariation=function(e){var i=e.getKnownValue,a=e.updateKnownValue,l={};return e.splits.forEach((function(o){var s=n(o),c=i(s);if(c)l[s]=c;else{var u=o.slices.length,d=void 0;if("experiment"===o.type){var f=function(t){return e.getRandomValue?e.getRandomValue(t):Math.random()}(o.id);d=o.slices[u-1];for(var p=0;p<u;p++){if(f-o.slices[p].prob<=0){d=o.slices[p];break}f-=o.slices[p].prob}}else if("segment"===o.type)for(var x=0;x<u;x++)t.apply(o.slices[x].cond,r({time:(new Date).toISOString()},e.traits))&&(d=o.slices[x]);d&&(l[s]=d.id,o.externalId&&d.externalId&&(l["ext."+o.externalId]=d.externalId),"experiment"===o.type&&a(s,d.id))}})),l},exports.getExternalIds=function(e,t){var r={};return Object.keys(t).forEach((function(n){var i=n.split(".")[1],a=t[n],l=e.find((function(e){return e.id===i||e.externalId===i}));if(l&&l.externalId){var o=l.slices.find((function(e){return e.id===a||e.externalId===a}));null!=o&&o.externalId&&(r[""+l.externalId]=o.externalId)}})),r},exports.getSplitKey=n;
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;
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\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 ...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":["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","traits","externalId","externalVariation","Object","keys","variationKey","splitId","sliceId","find","s","slice"],"mappings":"2WAOaA,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,eACdxB,EAAKyB,WAGVd,EAAcd,EAAMY,OAAOQ,IAK7BN,IACFR,EAAUG,GAAOK,EAAYZ,GACzBF,EAAM6B,YAAcf,EAAYe,aAClCvB,SAAiBN,EAAM6B,YAAgBf,EAAYe,YAElC,eAAf7B,EAAMC,MACRI,EAAiBI,EAAKK,EAAYZ,SAKjCI,mCAIPC,EACAD,OAEMwB,EAA4C,UAClDC,OAAOC,KAAK1B,GAAWE,SAAQ,SAACyB,OACrBC,EAAWD,EAAajC,MAAM,QACjCmC,EAAU7B,EAAU2B,GACpBjC,EAAQO,EAAO6B,MACnB,SAACC,UAAMA,EAAEnC,KAAOgC,GAAWG,EAAER,aAAeK,QAE1ClC,GAASA,EAAM6B,WAAY,KACvBS,EAAStC,EAAMY,OAElBwB,MAAK,SAACC,UAAMA,EAAEnC,KAAOiC,GAAWE,EAAER,aAAeM,WAChDG,GAAAA,EAAOT,aAETC,KAAqB9B,EAAM6B,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":"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"}
@@ -18,6 +18,21 @@ function _extends() {
18
18
  return _extends.apply(this, arguments);
19
19
  }
20
20
 
21
+ var isBrowser = typeof window !== 'undefined' && window != null && typeof window.document !== 'undefined';
22
+ var BUILTIN_TRAITS_UNKNOWN = {
23
+ pageUrl: 'unknown'
24
+ };
25
+
26
+ var getBrowserBuiltinTraits = function getBrowserBuiltinTraits() {
27
+ if (!isBrowser) {
28
+ return {};
29
+ }
30
+
31
+ return {
32
+ pageUrl: document.location.href
33
+ };
34
+ };
35
+
21
36
  var getSplitKey = function getSplitKey(split) {
22
37
  return "" + (split.type === 'experiment' ? 'exp.' : 'seg.') + split.id;
23
38
  };
@@ -63,7 +78,7 @@ function getActiveVariation(opts) {
63
78
  for (var _i = 0; _i < numSlices; _i++) {
64
79
  if (jsonLogic.apply(split.slices[_i].cond, _extends({
65
80
  time: new Date().toISOString()
66
- }, opts.traits))) {
81
+ }, BUILTIN_TRAITS_UNKNOWN, getBrowserBuiltinTraits(), opts.traits))) {
67
82
  chosenSlice = split.slices[_i];
68
83
  }
69
84
  }
@@ -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\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 ...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":["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":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.7",
2
+ "version": "1.0.8",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -60,5 +60,5 @@
60
60
  "publishConfig": {
61
61
  "access": "public"
62
62
  },
63
- "gitHead": "82d225454e795bc101aa3ae685090658b7aab113"
63
+ "gitHead": "0b147cc9d072ed76580d7dfbdf4bfb39adcca4fd"
64
64
  }