@plasmicapp/loader-splits 1.0.3 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { getActiveVariation, getSplitKey } from './variation';
1
+ export { getActiveVariation, getExternalIds, getSplitKey } from './variation';
@@ -80,7 +80,32 @@ function getActiveVariation(opts) {
80
80
  });
81
81
  return variation;
82
82
  }
83
+ function getExternalIds(splits, variation) {
84
+ var externalVariation = {};
85
+ Object.keys(variation).forEach(function (variationKey) {
86
+ var _variationKey$split = variationKey.split('.'),
87
+ splitId = _variationKey$split[1];
88
+
89
+ var sliceId = variation[variationKey];
90
+ var split = splits.find(function (s) {
91
+ return s.id === splitId || s.externalId === splitId;
92
+ });
93
+
94
+ if (split && split.externalId) {
95
+ var slice = split.slices.find(function (s) {
96
+ return s.id === sliceId || s.externalId === sliceId;
97
+ });
98
+
99
+ if (slice != null && slice.externalId) {
100
+ // Save variation without ext prefix
101
+ externalVariation["" + split.externalId] = slice.externalId;
102
+ }
103
+ }
104
+ });
105
+ return externalVariation;
106
+ }
83
107
 
84
108
  exports.getActiveVariation = getActiveVariation;
109
+ exports.getExternalIds = getExternalIds;
85
110
  exports.getSplitKey = getSplitKey;
86
111
  //# sourceMappingURL=loader-splits.cjs.development.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-splits.cjs.development.js","sources":["../src/variation.ts"],"sourcesContent":["import { Split } 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>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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"],"names":["getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","variation","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","Math","random","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;IAGaA,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD;AACzB,eAAUA,KAAK,CAACC,IAAN,KAAe,YAAf,GAA8B,MAA9B,GAAuC,MAAjD,IAA0DD,KAAK,CAACE,EAAhE;AACD;SAEeC,mBAAmBC;AAMjC,MAAQC,MAAR,GAAoDD,IAApD,CAAQC,MAAR;AAAA,MAAgBC,aAAhB,GAAoDF,IAApD,CAAgBE,aAAhB;AAAA,MAA+BC,gBAA/B,GAAoDH,IAApD,CAA+BG,gBAA/B;AACA,MAAMC,SAAS,GAA2B,EAA1C;AACAH,EAAAA,MAAM,CAACI,OAAP,CAAe,UAACT,KAAD;AACb,QAAMU,GAAG,GAAGX,WAAW,CAACC,KAAD,CAAvB;AACA,QAAMW,QAAQ,GAAGL,aAAa,CAACI,GAAD,CAA9B;;AACA,QAAIC,QAAJ,EAAc;AACZH,MAAAA,SAAS,CAACE,GAAD,CAAT,GAAiBC,QAAjB;AACA;AACD;;AACD,QAAMC,SAAS,GAAGZ,KAAK,CAACa,MAAN,CAAaC,MAA/B;AACA,QAAIC,WAAW,GAAGC,SAAlB;;AACA,QAAIhB,KAAK,CAACC,IAAN,KAAe,YAAnB,EAAiC;AAC/B,UAAIgB,CAAC,GAAGC,IAAI,CAACC,MAAL,EAAR;AACAJ,MAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaD,SAAS,GAAG,CAAzB,CAAd;;AACA,WAAK,IAAIQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,SAApB,EAA+BQ,CAAC,EAAhC,EAAoC;AAClC,YAAIH,CAAC,GAAGjB,KAAK,CAACa,MAAN,CAAaO,CAAb,EAAgBC,IAApB,IAA4B,CAAhC,EAAmC;AACjCN,UAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaO,CAAb,CAAd;AACA;AACD;;AACDH,QAAAA,CAAC,IAAIjB,KAAK,CAACa,MAAN,CAAaO,CAAb,EAAgBC,IAArB;AACD;AACF,KAVD,MAUO,IAAIrB,KAAK,CAACC,IAAN,KAAe,SAAnB,EAA8B;AACnC,WAAK,IAAImB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGR,SAApB,EAA+BQ,EAAC,EAAhC,EAAoC;AAClC,YACEE,SAAS,CAACC,KAAV,CAAgBvB,KAAK,CAACa,MAAN,CAAaO,EAAb,EAAgBI,IAAhC;AACEC,UAAAA,IAAI,EAAE,IAAIC,IAAJ,GAAWC,WAAX;AADR,WAEKvB,IAAI,CAACwB,MAFV,EADF,EAKE;AACAb,UAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaO,EAAb,CAAd;AACD;AACF;AACF;;AAED,QAAIL,WAAJ,EAAiB;AACfP,MAAAA,SAAS,CAACE,GAAD,CAAT,GAAiBK,WAAW,CAACb,EAA7B;;AACA,UAAIF,KAAK,CAAC6B,UAAN,IAAoBd,WAAW,CAACc,UAApC,EAAgD;AAC9CrB,QAAAA,SAAS,UAAQR,KAAK,CAAC6B,UAAd,CAAT,GAAuCd,WAAW,CAACc,UAAnD;AACD;;AACD,UAAI7B,KAAK,CAACC,IAAN,KAAe,YAAnB,EAAiC;AAC/BM,QAAAA,gBAAgB,CAACG,GAAD,EAAMK,WAAW,CAACb,EAAlB,CAAhB;AACD;AACF;AACF,GAzCD;AA2CA,SAAOM,SAAP;AACD;;;;;"}
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}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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","variation","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","Math","random","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 i in r)Object.prototype.hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e}).apply(this,arguments)}var i=function(e){return("experiment"===e.type?"exp.":"seg.")+e.id};exports.getActiveVariation=function(e){var n=e.getKnownValue,a=e.updateKnownValue,s={};return e.splits.forEach((function(o){var l=i(o),p=n(l);if(p)s[l]=p;else{var c=o.slices.length,f=void 0;if("experiment"===o.type){var u=Math.random();f=o.slices[c-1];for(var d=0;d<c;d++){if(u-o.slices[d].prob<=0){f=o.slices[d];break}u-=o.slices[d].prob}}else if("segment"===o.type)for(var v=0;v<c;v++)t.apply(o.slices[v].cond,r({time:(new Date).toISOString()},e.traits))&&(f=o.slices[v]);f&&(s[l]=f.id,o.externalId&&f.externalId&&(s["ext."+o.externalId]=f.externalId),"experiment"===o.type&&a(l,f.id))}})),s},exports.getSplitKey=i;
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(s){var o=n(s),c=i(o);if(c)l[o]=c;else{var p=s.slices.length,d=void 0;if("experiment"===s.type){var f=Math.random();d=s.slices[p-1];for(var u=0;u<p;u++){if(f-s.slices[u].prob<=0){d=s.slices[u];break}f-=s.slices[u].prob}}else if("segment"===s.type)for(var x=0;x<p;x++)t.apply(s.slices[x].cond,r({time:(new Date).toISOString()},e.traits))&&(d=s.slices[x]);d&&(l[o]=d.id,s.externalId&&d.externalId&&(l["ext."+s.externalId]=d.externalId),"experiment"===s.type&&a(o,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 s=l.slices.find((function(e){return e.id===a||e.externalId===a}));null!=s&&s.externalId&&(r[""+l.externalId]=s.externalId)}})),r},exports.getSplitKey=n;
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 { Split } 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>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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"],"names":["getSplitKey","split","type","id","opts","getKnownValue","updateKnownValue","variation","splits","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","Math","random","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId"],"mappings":"2WAGaA,EAAc,SAACC,UACD,eAAfA,EAAMC,KAAwB,OAAS,QAASD,EAAME,wCAG/BC,OAMjBC,EAAoCD,EAApCC,cAAeC,EAAqBF,EAArBE,iBACzBC,EAAoC,UADUH,EAA5CI,OAEDC,SAAQ,SAACR,OACRS,EAAMV,EAAYC,GAClBU,EAAWN,EAAcK,MAC3BC,EACFJ,EAAUG,GAAOC,WAGbC,EAAYX,EAAMY,OAAOC,OAC3BC,OAAcC,KACC,eAAff,EAAMC,KAAuB,KAC3Be,EAAIC,KAAKC,SACbJ,EAAcd,EAAMY,OAAOD,EAAY,OAClC,IAAIQ,EAAI,EAAGA,EAAIR,EAAWQ,IAAK,IAC9BH,EAAIhB,EAAMY,OAAOO,GAAGC,MAAQ,EAAG,CACjCN,EAAcd,EAAMY,OAAOO,SAG7BH,GAAKhB,EAAMY,OAAOO,GAAGC,WAElB,GAAmB,YAAfpB,EAAMC,SACV,IAAIkB,EAAI,EAAGA,EAAIR,EAAWQ,IAE3BE,EAAUC,MAAMtB,EAAMY,OAAOO,GAAGI,QAC9BC,MAAM,IAAIC,MAAOC,eACdvB,EAAKwB,WAGVb,EAAcd,EAAMY,OAAOO,IAK7BL,IACFR,EAAUG,GAAOK,EAAYZ,GACzBF,EAAM4B,YAAcd,EAAYc,aAClCtB,SAAiBN,EAAM4B,YAAgBd,EAAYc,YAElC,eAAf5B,EAAMC,MACRI,EAAiBI,EAAKK,EAAYZ,SAKjCI"}
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}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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","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,OAMjBC,EAAoCD,EAApCC,cAAeC,EAAqBF,EAArBE,iBACzBC,EAAoC,UADUH,EAA5CI,OAEDC,SAAQ,SAACR,OACRS,EAAMV,EAAYC,GAClBU,EAAWN,EAAcK,MAC3BC,EACFJ,EAAUG,GAAOC,WAGbC,EAAYX,EAAMY,OAAOC,OAC3BC,OAAcC,KACC,eAAff,EAAMC,KAAuB,KAC3Be,EAAIC,KAAKC,SACbJ,EAAcd,EAAMY,OAAOD,EAAY,OAClC,IAAIQ,EAAI,EAAGA,EAAIR,EAAWQ,IAAK,IAC9BH,EAAIhB,EAAMY,OAAOO,GAAGC,MAAQ,EAAG,CACjCN,EAAcd,EAAMY,OAAOO,SAG7BH,GAAKhB,EAAMY,OAAOO,GAAGC,WAElB,GAAmB,YAAfpB,EAAMC,SACV,IAAIkB,EAAI,EAAGA,EAAIR,EAAWQ,IAE3BE,EAAUC,MAAMtB,EAAMY,OAAOO,GAAGI,QAC9BC,MAAM,IAAIC,MAAOC,eACdvB,EAAKwB,WAGVb,EAAcd,EAAMY,OAAOO,IAK7BL,IACFR,EAAUG,GAAOK,EAAYZ,GACzBF,EAAM4B,YAAcd,EAAYc,aAClCtB,SAAiBN,EAAM4B,YAAgBd,EAAYc,YAElC,eAAf5B,EAAMC,MACRI,EAAiBI,EAAKK,EAAYZ,SAKjCI,mCAIPC,EACAD,OAEMuB,EAA4C,UAClDC,OAAOC,KAAKzB,GAAWE,SAAQ,SAACwB,OACrBC,EAAWD,EAAahC,MAAM,QACjCkC,EAAU5B,EAAU0B,GACpBhC,EAAQO,EAAO4B,MACnB,SAACC,UAAMA,EAAElC,KAAO+B,GAAWG,EAAER,aAAeK,QAE1CjC,GAASA,EAAM4B,WAAY,KACvBS,EAASrC,EAAMY,OAElBuB,MAAK,SAACC,UAAMA,EAAElC,KAAOgC,GAAWE,EAAER,aAAeM,WAChDG,GAAAA,EAAOT,aAETC,KAAqB7B,EAAM4B,YAAgBS,EAAMT,gBAIhDC"}
@@ -74,6 +74,30 @@ function getActiveVariation(opts) {
74
74
  });
75
75
  return variation;
76
76
  }
77
+ function getExternalIds(splits, variation) {
78
+ var externalVariation = {};
79
+ Object.keys(variation).forEach(function (variationKey) {
80
+ var _variationKey$split = variationKey.split('.'),
81
+ splitId = _variationKey$split[1];
77
82
 
78
- export { getActiveVariation, getSplitKey };
83
+ var sliceId = variation[variationKey];
84
+ var split = splits.find(function (s) {
85
+ return s.id === splitId || s.externalId === splitId;
86
+ });
87
+
88
+ if (split && split.externalId) {
89
+ var slice = split.slices.find(function (s) {
90
+ return s.id === sliceId || s.externalId === sliceId;
91
+ });
92
+
93
+ if (slice != null && slice.externalId) {
94
+ // Save variation without ext prefix
95
+ externalVariation["" + split.externalId] = slice.externalId;
96
+ }
97
+ }
98
+ });
99
+ return externalVariation;
100
+ }
101
+
102
+ export { getActiveVariation, getExternalIds, getSplitKey };
79
103
  //# sourceMappingURL=loader-splits.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader-splits.esm.js","sources":["../src/variation.ts"],"sourcesContent":["import { Split } 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>;\n getKnownValue: (key: string) => string | undefined;\n updateKnownValue: (key: string, value: string) => void;\n}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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"],"names":["getSplitKey","split","type","id","getActiveVariation","opts","splits","getKnownValue","updateKnownValue","variation","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","Math","random","i","prob","jsonLogic","apply","cond","time","Date","toISOString","traits","externalId"],"mappings":";;;;;;;;;;;;;;;;;;;;IAGaA,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD;AACzB,eAAUA,KAAK,CAACC,IAAN,KAAe,YAAf,GAA8B,MAA9B,GAAuC,MAAjD,IAA0DD,KAAK,CAACE,EAAhE;AACD;SAEeC,mBAAmBC;AAMjC,MAAQC,MAAR,GAAoDD,IAApD,CAAQC,MAAR;AAAA,MAAgBC,aAAhB,GAAoDF,IAApD,CAAgBE,aAAhB;AAAA,MAA+BC,gBAA/B,GAAoDH,IAApD,CAA+BG,gBAA/B;AACA,MAAMC,SAAS,GAA2B,EAA1C;AACAH,EAAAA,MAAM,CAACI,OAAP,CAAe,UAACT,KAAD;AACb,QAAMU,GAAG,GAAGX,WAAW,CAACC,KAAD,CAAvB;AACA,QAAMW,QAAQ,GAAGL,aAAa,CAACI,GAAD,CAA9B;;AACA,QAAIC,QAAJ,EAAc;AACZH,MAAAA,SAAS,CAACE,GAAD,CAAT,GAAiBC,QAAjB;AACA;AACD;;AACD,QAAMC,SAAS,GAAGZ,KAAK,CAACa,MAAN,CAAaC,MAA/B;AACA,QAAIC,WAAW,GAAGC,SAAlB;;AACA,QAAIhB,KAAK,CAACC,IAAN,KAAe,YAAnB,EAAiC;AAC/B,UAAIgB,CAAC,GAAGC,IAAI,CAACC,MAAL,EAAR;AACAJ,MAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaD,SAAS,GAAG,CAAzB,CAAd;;AACA,WAAK,IAAIQ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGR,SAApB,EAA+BQ,CAAC,EAAhC,EAAoC;AAClC,YAAIH,CAAC,GAAGjB,KAAK,CAACa,MAAN,CAAaO,CAAb,EAAgBC,IAApB,IAA4B,CAAhC,EAAmC;AACjCN,UAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaO,CAAb,CAAd;AACA;AACD;;AACDH,QAAAA,CAAC,IAAIjB,KAAK,CAACa,MAAN,CAAaO,CAAb,EAAgBC,IAArB;AACD;AACF,KAVD,MAUO,IAAIrB,KAAK,CAACC,IAAN,KAAe,SAAnB,EAA8B;AACnC,WAAK,IAAImB,EAAC,GAAG,CAAb,EAAgBA,EAAC,GAAGR,SAApB,EAA+BQ,EAAC,EAAhC,EAAoC;AAClC,YACEE,SAAS,CAACC,KAAV,CAAgBvB,KAAK,CAACa,MAAN,CAAaO,EAAb,EAAgBI,IAAhC;AACEC,UAAAA,IAAI,EAAE,IAAIC,IAAJ,GAAWC,WAAX;AADR,WAEKvB,IAAI,CAACwB,MAFV,EADF,EAKE;AACAb,UAAAA,WAAW,GAAGf,KAAK,CAACa,MAAN,CAAaO,EAAb,CAAd;AACD;AACF;AACF;;AAED,QAAIL,WAAJ,EAAiB;AACfP,MAAAA,SAAS,CAACE,GAAD,CAAT,GAAiBK,WAAW,CAACb,EAA7B;;AACA,UAAIF,KAAK,CAAC6B,UAAN,IAAoBd,WAAW,CAACc,UAApC,EAAgD;AAC9CrB,QAAAA,SAAS,UAAQR,KAAK,CAAC6B,UAAd,CAAT,GAAuCd,WAAW,CAACc,UAAnD;AACD;;AACD,UAAI7B,KAAK,CAACC,IAAN,KAAe,YAAnB,EAAiC;AAC/BM,QAAAA,gBAAgB,CAACG,GAAD,EAAMK,WAAW,CAACb,EAAlB,CAAhB;AACD;AACF;AACF,GAzCD;AA2CA,SAAOM,SAAP;AACD;;;;"}
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}) {\n const { splits, getKnownValue, updateKnownValue } = opts;\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 = Math.random();\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","variation","forEach","key","knownVal","numSlices","slices","length","chosenSlice","undefined","p","Math","random","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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"}
@@ -2,7 +2,8 @@ import { Split } from '@plasmicapp/loader-fetcher';
2
2
  export declare const getSplitKey: (split: Split) => string;
3
3
  export declare function getActiveVariation(opts: {
4
4
  splits: Split[];
5
- traits: Record<string, string | number>;
5
+ traits: Record<string, string | number | boolean>;
6
6
  getKnownValue: (key: string) => string | undefined;
7
7
  updateKnownValue: (key: string, value: string) => void;
8
8
  }): Record<string, string>;
9
+ export declare function getExternalIds(splits: Split[], variation: Record<string, string>): Record<string, string>;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.3",
2
+ "version": "1.0.6",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -13,7 +13,8 @@
13
13
  "start": "tsdx watch",
14
14
  "build": "tsdx build",
15
15
  "yalcp": "yalc publish --push",
16
- "test": "tsdx test",
16
+ "test": "tsdx test --passWithNoTests",
17
+ "coverage": "tsdx test --coverage --passWithNoTests",
17
18
  "lint": "tsdx lint",
18
19
  "prepare": "tsdx build",
19
20
  "size": "size-limit",
@@ -53,11 +54,11 @@
53
54
  "typescript": "^4.3.2"
54
55
  },
55
56
  "dependencies": {
56
- "@plasmicapp/loader-fetcher": "1.0.2",
57
+ "@plasmicapp/loader-fetcher": "1.0.3",
57
58
  "json-logic-js": "^2.0.2"
58
59
  },
59
60
  "publishConfig": {
60
61
  "access": "public"
61
62
  },
62
- "gitHead": "85308892b93b18d913f32ead0a92f7999741f245"
63
+ "gitHead": "bf8ca88e4d71e07b368eb012bddf69c67532ead7"
63
64
  }