@ninetailed/experience.js 2.2.11 → 3.0.0-beta.13
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/index.d.ts +0 -2
- package/index.esm.js +523 -736
- package/index.umd.js +343 -741
- package/lib/Ninetailed.d.ts +7 -8
- package/lib/analytics/constants.d.ts +4 -0
- package/lib/analytics/get-analytics-plugin.d.ts +4 -6
- package/lib/analytics/index.d.ts +1 -1
- package/lib/experience/isExperienceMatch.d.ts +1 -1
- package/lib/experience/selectHasVariants.d.ts +1 -1
- package/lib/experience/selectVariant.d.ts +1 -1
- package/lib/experience/types/Baseline.d.ts +1 -1
- package/lib/experience/types/BaselineWithVariants.d.ts +2 -2
- package/lib/utils/asyncThrottle.d.ts +6 -0
- package/package.json +6 -6
- package/lib/analytics/Cache/cache.d.ts +0 -11
- package/lib/analytics/Cache/index.d.ts +0 -1
- package/lib/analytics/utility/apiClient.d.ts +0 -23
- package/lib/analytics/utility/index.d.ts +0 -1
- package/lib/logger/ConsoleLogSink.d.ts +0 -10
- package/lib/logger/LogSink.d.ts +0 -10
- package/lib/logger/Logger.d.ts +0 -17
- package/lib/logger/OnErrorLogSink.d.ts +0 -10
- package/lib/logger/OnLogLogSink.d.ts +0 -12
- package/lib/logger/index.d.ts +0 -7
package/index.umd.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', 'lodash/
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Javascript = {}, global.
|
|
5
|
-
})(this, (function (exports,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/unionBy'), require('@ninetailed/experience.js-shared'), require('analytics'), require('lodash/flatten'), require('lodash/find'), require('lodash/includes'), require('lodash/pickBy'), require('murmurhash-js')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'lodash/unionBy', '@ninetailed/experience.js-shared', 'analytics', 'lodash/flatten', 'lodash/find', 'lodash/includes', 'lodash/pickBy', 'murmurhash-js'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Javascript = {}, global.unionBy, global.experience_jsShared, global.Analytics, global.flatten, global.find, global.includes, global.pickBy, global.murmurhashJs));
|
|
5
|
+
})(this, (function (exports, unionBy, experience_jsShared, Analytics, flatten, find, includes, pickBy, murmurhashJs) { 'use strict';
|
|
6
6
|
|
|
7
7
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
8
|
|
|
9
|
-
var get__default = /*#__PURE__*/_interopDefaultLegacy(get$2);
|
|
10
9
|
var unionBy__default = /*#__PURE__*/_interopDefaultLegacy(unionBy);
|
|
11
10
|
var Analytics__default = /*#__PURE__*/_interopDefaultLegacy(Analytics);
|
|
12
11
|
var flatten__default = /*#__PURE__*/_interopDefaultLegacy(flatten);
|
|
@@ -95,32 +94,32 @@
|
|
|
95
94
|
var FunctionPrototype$2 = Function.prototype;
|
|
96
95
|
var bind$5 = FunctionPrototype$2.bind;
|
|
97
96
|
var call$d = FunctionPrototype$2.call;
|
|
98
|
-
var uncurryThis$
|
|
97
|
+
var uncurryThis$o = NATIVE_BIND$2 && bind$5.bind(call$d, call$d);
|
|
99
98
|
|
|
100
99
|
var functionUncurryThis = NATIVE_BIND$2 ? function (fn) {
|
|
101
|
-
return fn && uncurryThis$
|
|
100
|
+
return fn && uncurryThis$o(fn);
|
|
102
101
|
} : function (fn) {
|
|
103
102
|
return fn && function () {
|
|
104
103
|
return call$d.apply(fn, arguments);
|
|
105
104
|
};
|
|
106
105
|
};
|
|
107
106
|
|
|
108
|
-
var uncurryThis$
|
|
107
|
+
var uncurryThis$n = functionUncurryThis;
|
|
109
108
|
|
|
110
|
-
var toString$
|
|
111
|
-
var stringSlice$6 = uncurryThis$
|
|
109
|
+
var toString$a = uncurryThis$n({}.toString);
|
|
110
|
+
var stringSlice$6 = uncurryThis$n(''.slice);
|
|
112
111
|
|
|
113
112
|
var classofRaw$1 = function (it) {
|
|
114
|
-
return stringSlice$6(toString$
|
|
113
|
+
return stringSlice$6(toString$a(it), 8, -1);
|
|
115
114
|
};
|
|
116
115
|
|
|
117
116
|
var global$H = global$I;
|
|
118
|
-
var uncurryThis$
|
|
117
|
+
var uncurryThis$m = functionUncurryThis;
|
|
119
118
|
var fails$f = fails$i;
|
|
120
119
|
var classof$7 = classofRaw$1;
|
|
121
120
|
|
|
122
121
|
var Object$4 = global$H.Object;
|
|
123
|
-
var split = uncurryThis$
|
|
122
|
+
var split = uncurryThis$m(''.split);
|
|
124
123
|
|
|
125
124
|
// fallback for non-array-like ES3 and non-enumerable old V8 strings
|
|
126
125
|
var indexedObject = fails$f(function () {
|
|
@@ -137,17 +136,17 @@
|
|
|
137
136
|
|
|
138
137
|
// `RequireObjectCoercible` abstract operation
|
|
139
138
|
// https://tc39.es/ecma262/#sec-requireobjectcoercible
|
|
140
|
-
var requireObjectCoercible$
|
|
139
|
+
var requireObjectCoercible$8 = function (it) {
|
|
141
140
|
if (it == undefined) throw TypeError$h("Can't call method on " + it);
|
|
142
141
|
return it;
|
|
143
142
|
};
|
|
144
143
|
|
|
145
144
|
// toObject with fallback for non-array-like ES3 strings
|
|
146
145
|
var IndexedObject$2 = indexedObject;
|
|
147
|
-
var requireObjectCoercible$
|
|
146
|
+
var requireObjectCoercible$7 = requireObjectCoercible$8;
|
|
148
147
|
|
|
149
148
|
var toIndexedObject$4 = function (it) {
|
|
150
|
-
return IndexedObject$2(requireObjectCoercible$
|
|
149
|
+
return IndexedObject$2(requireObjectCoercible$7(it));
|
|
151
150
|
};
|
|
152
151
|
|
|
153
152
|
// `IsCallable` abstract operation
|
|
@@ -173,9 +172,9 @@
|
|
|
173
172
|
return arguments.length < 2 ? aFunction(global$F[namespace]) : global$F[namespace] && global$F[namespace][method];
|
|
174
173
|
};
|
|
175
174
|
|
|
176
|
-
var uncurryThis$
|
|
175
|
+
var uncurryThis$l = functionUncurryThis;
|
|
177
176
|
|
|
178
|
-
var objectIsPrototypeOf = uncurryThis$
|
|
177
|
+
var objectIsPrototypeOf = uncurryThis$l({}.isPrototypeOf);
|
|
179
178
|
|
|
180
179
|
var getBuiltIn$6 = getBuiltIn$7;
|
|
181
180
|
|
|
@@ -333,20 +332,20 @@
|
|
|
333
332
|
});
|
|
334
333
|
|
|
335
334
|
var global$x = global$I;
|
|
336
|
-
var requireObjectCoercible$
|
|
335
|
+
var requireObjectCoercible$6 = requireObjectCoercible$8;
|
|
337
336
|
|
|
338
337
|
var Object$2 = global$x.Object;
|
|
339
338
|
|
|
340
339
|
// `ToObject` abstract operation
|
|
341
340
|
// https://tc39.es/ecma262/#sec-toobject
|
|
342
341
|
var toObject$4 = function (argument) {
|
|
343
|
-
return Object$2(requireObjectCoercible$
|
|
342
|
+
return Object$2(requireObjectCoercible$6(argument));
|
|
344
343
|
};
|
|
345
344
|
|
|
346
|
-
var uncurryThis$
|
|
345
|
+
var uncurryThis$k = functionUncurryThis;
|
|
347
346
|
var toObject$3 = toObject$4;
|
|
348
347
|
|
|
349
|
-
var hasOwnProperty = uncurryThis$
|
|
348
|
+
var hasOwnProperty = uncurryThis$k({}.hasOwnProperty);
|
|
350
349
|
|
|
351
350
|
// `HasOwnProperty` abstract operation
|
|
352
351
|
// https://tc39.es/ecma262/#sec-hasownproperty
|
|
@@ -354,14 +353,14 @@
|
|
|
354
353
|
return hasOwnProperty(toObject$3(it), key);
|
|
355
354
|
};
|
|
356
355
|
|
|
357
|
-
var uncurryThis$
|
|
356
|
+
var uncurryThis$j = functionUncurryThis;
|
|
358
357
|
|
|
359
358
|
var id = 0;
|
|
360
359
|
var postfix = Math.random();
|
|
361
|
-
var toString$
|
|
360
|
+
var toString$9 = uncurryThis$j(1.0.toString);
|
|
362
361
|
|
|
363
362
|
var uid$2 = function (key) {
|
|
364
|
-
return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$
|
|
363
|
+
return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$9(++id + postfix, 36);
|
|
365
364
|
};
|
|
366
365
|
|
|
367
366
|
var global$w = global$I;
|
|
@@ -557,11 +556,11 @@
|
|
|
557
556
|
|
|
558
557
|
var redefine$4 = {exports: {}};
|
|
559
558
|
|
|
560
|
-
var uncurryThis$
|
|
559
|
+
var uncurryThis$i = functionUncurryThis;
|
|
561
560
|
var isCallable$a = isCallable$g;
|
|
562
561
|
var store$1 = sharedStore;
|
|
563
562
|
|
|
564
|
-
var functionToString = uncurryThis$
|
|
563
|
+
var functionToString = uncurryThis$i(Function.toString);
|
|
565
564
|
|
|
566
565
|
// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper
|
|
567
566
|
if (!isCallable$a(store$1.inspectSource)) {
|
|
@@ -593,7 +592,7 @@
|
|
|
593
592
|
|
|
594
593
|
var NATIVE_WEAK_MAP = nativeWeakMap;
|
|
595
594
|
var global$q = global$I;
|
|
596
|
-
var uncurryThis$
|
|
595
|
+
var uncurryThis$h = functionUncurryThis;
|
|
597
596
|
var isObject$3 = isObject$8;
|
|
598
597
|
var createNonEnumerableProperty$3 = createNonEnumerableProperty$4;
|
|
599
598
|
var hasOwn$6 = hasOwnProperty_1;
|
|
@@ -604,16 +603,16 @@
|
|
|
604
603
|
var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
|
|
605
604
|
var TypeError$b = global$q.TypeError;
|
|
606
605
|
var WeakMap = global$q.WeakMap;
|
|
607
|
-
var set$
|
|
606
|
+
var set$1, get, has;
|
|
608
607
|
|
|
609
608
|
var enforce = function (it) {
|
|
610
|
-
return has(it) ? get
|
|
609
|
+
return has(it) ? get(it) : set$1(it, {});
|
|
611
610
|
};
|
|
612
611
|
|
|
613
612
|
var getterFor = function (TYPE) {
|
|
614
613
|
return function (it) {
|
|
615
614
|
var state;
|
|
616
|
-
if (!isObject$3(it) || (state = get
|
|
615
|
+
if (!isObject$3(it) || (state = get(it)).type !== TYPE) {
|
|
617
616
|
throw TypeError$b('Incompatible receiver, ' + TYPE + ' required');
|
|
618
617
|
} return state;
|
|
619
618
|
};
|
|
@@ -621,16 +620,16 @@
|
|
|
621
620
|
|
|
622
621
|
if (NATIVE_WEAK_MAP || shared$1.state) {
|
|
623
622
|
var store = shared$1.state || (shared$1.state = new WeakMap());
|
|
624
|
-
var wmget = uncurryThis$
|
|
625
|
-
var wmhas = uncurryThis$
|
|
626
|
-
var wmset = uncurryThis$
|
|
627
|
-
set$
|
|
623
|
+
var wmget = uncurryThis$h(store.get);
|
|
624
|
+
var wmhas = uncurryThis$h(store.has);
|
|
625
|
+
var wmset = uncurryThis$h(store.set);
|
|
626
|
+
set$1 = function (it, metadata) {
|
|
628
627
|
if (wmhas(store, it)) throw new TypeError$b(OBJECT_ALREADY_INITIALIZED);
|
|
629
628
|
metadata.facade = it;
|
|
630
629
|
wmset(store, it, metadata);
|
|
631
630
|
return metadata;
|
|
632
631
|
};
|
|
633
|
-
get
|
|
632
|
+
get = function (it) {
|
|
634
633
|
return wmget(store, it) || {};
|
|
635
634
|
};
|
|
636
635
|
has = function (it) {
|
|
@@ -639,13 +638,13 @@
|
|
|
639
638
|
} else {
|
|
640
639
|
var STATE = sharedKey$1('state');
|
|
641
640
|
hiddenKeys$3[STATE] = true;
|
|
642
|
-
set$
|
|
641
|
+
set$1 = function (it, metadata) {
|
|
643
642
|
if (hasOwn$6(it, STATE)) throw new TypeError$b(OBJECT_ALREADY_INITIALIZED);
|
|
644
643
|
metadata.facade = it;
|
|
645
644
|
createNonEnumerableProperty$3(it, STATE, metadata);
|
|
646
645
|
return metadata;
|
|
647
646
|
};
|
|
648
|
-
get
|
|
647
|
+
get = function (it) {
|
|
649
648
|
return hasOwn$6(it, STATE) ? it[STATE] : {};
|
|
650
649
|
};
|
|
651
650
|
has = function (it) {
|
|
@@ -654,8 +653,8 @@
|
|
|
654
653
|
}
|
|
655
654
|
|
|
656
655
|
var internalState = {
|
|
657
|
-
set: set$
|
|
658
|
-
get: get
|
|
656
|
+
set: set$1,
|
|
657
|
+
get: get,
|
|
659
658
|
has: has,
|
|
660
659
|
enforce: enforce,
|
|
661
660
|
getterFor: getterFor
|
|
@@ -803,13 +802,13 @@
|
|
|
803
802
|
indexOf: createMethod$3(false)
|
|
804
803
|
};
|
|
805
804
|
|
|
806
|
-
var uncurryThis$
|
|
805
|
+
var uncurryThis$g = functionUncurryThis;
|
|
807
806
|
var hasOwn$3 = hasOwnProperty_1;
|
|
808
807
|
var toIndexedObject$1 = toIndexedObject$4;
|
|
809
808
|
var indexOf$1 = arrayIncludes.indexOf;
|
|
810
809
|
var hiddenKeys$2 = hiddenKeys$4;
|
|
811
810
|
|
|
812
|
-
var push$2 = uncurryThis$
|
|
811
|
+
var push$2 = uncurryThis$g([].push);
|
|
813
812
|
|
|
814
813
|
var objectKeysInternal = function (object, names) {
|
|
815
814
|
var O = toIndexedObject$1(object);
|
|
@@ -853,12 +852,12 @@
|
|
|
853
852
|
objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;
|
|
854
853
|
|
|
855
854
|
var getBuiltIn$4 = getBuiltIn$7;
|
|
856
|
-
var uncurryThis$
|
|
855
|
+
var uncurryThis$f = functionUncurryThis;
|
|
857
856
|
var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
|
|
858
857
|
var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
|
|
859
858
|
var anObject$c = anObject$e;
|
|
860
859
|
|
|
861
|
-
var concat$2 = uncurryThis$
|
|
860
|
+
var concat$2 = uncurryThis$f([].concat);
|
|
862
861
|
|
|
863
862
|
// all object keys, includes non-enumerable and symbols
|
|
864
863
|
var ownKeys$1 = getBuiltIn$4('Reflect', 'ownKeys') || function ownKeys(it) {
|
|
@@ -987,7 +986,7 @@
|
|
|
987
986
|
|
|
988
987
|
/* eslint-disable no-proto -- safe */
|
|
989
988
|
|
|
990
|
-
var uncurryThis$
|
|
989
|
+
var uncurryThis$e = functionUncurryThis;
|
|
991
990
|
var anObject$b = anObject$e;
|
|
992
991
|
var aPossiblePrototype = aPossiblePrototype$1;
|
|
993
992
|
|
|
@@ -1001,7 +1000,7 @@
|
|
|
1001
1000
|
var setter;
|
|
1002
1001
|
try {
|
|
1003
1002
|
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
|
|
1004
|
-
setter = uncurryThis$
|
|
1003
|
+
setter = uncurryThis$e(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
|
|
1005
1004
|
setter(test, []);
|
|
1006
1005
|
CORRECT_SETTER = test instanceof Array;
|
|
1007
1006
|
} catch (error) { /* empty */ }
|
|
@@ -1056,11 +1055,11 @@
|
|
|
1056
1055
|
throw TypeError$9('Incorrect invocation');
|
|
1057
1056
|
};
|
|
1058
1057
|
|
|
1059
|
-
var uncurryThis$
|
|
1058
|
+
var uncurryThis$d = functionUncurryThis;
|
|
1060
1059
|
var aCallable$4 = aCallable$6;
|
|
1061
1060
|
var NATIVE_BIND$1 = functionBindNative;
|
|
1062
1061
|
|
|
1063
|
-
var bind$4 = uncurryThis$
|
|
1062
|
+
var bind$4 = uncurryThis$d(uncurryThis$d.bind);
|
|
1064
1063
|
|
|
1065
1064
|
// optional / simple context binding
|
|
1066
1065
|
var functionBindContext = function (fn, that) {
|
|
@@ -1281,7 +1280,7 @@
|
|
|
1281
1280
|
return ITERATION_SUPPORT;
|
|
1282
1281
|
};
|
|
1283
1282
|
|
|
1284
|
-
var uncurryThis$
|
|
1283
|
+
var uncurryThis$c = functionUncurryThis;
|
|
1285
1284
|
var fails$a = fails$i;
|
|
1286
1285
|
var isCallable$4 = isCallable$g;
|
|
1287
1286
|
var classof$4 = classof$6;
|
|
@@ -1292,7 +1291,7 @@
|
|
|
1292
1291
|
var empty = [];
|
|
1293
1292
|
var construct = getBuiltIn$2('Reflect', 'construct');
|
|
1294
1293
|
var constructorRegExp = /^\s*(?:class|function)\b/;
|
|
1295
|
-
var exec$3 = uncurryThis$
|
|
1294
|
+
var exec$3 = uncurryThis$c(constructorRegExp.exec);
|
|
1296
1295
|
var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
|
|
1297
1296
|
|
|
1298
1297
|
var isConstructorModern = function isConstructor(argument) {
|
|
@@ -1375,9 +1374,9 @@
|
|
|
1375
1374
|
|
|
1376
1375
|
var html$2 = getBuiltIn$1('document', 'documentElement');
|
|
1377
1376
|
|
|
1378
|
-
var uncurryThis$
|
|
1377
|
+
var uncurryThis$b = functionUncurryThis;
|
|
1379
1378
|
|
|
1380
|
-
var arraySlice$2 = uncurryThis$
|
|
1379
|
+
var arraySlice$2 = uncurryThis$b([].slice);
|
|
1381
1380
|
|
|
1382
1381
|
var global$g = global$I;
|
|
1383
1382
|
|
|
@@ -1410,7 +1409,7 @@
|
|
|
1410
1409
|
var IS_IOS$1 = engineIsIos;
|
|
1411
1410
|
var IS_NODE$3 = engineIsNode;
|
|
1412
1411
|
|
|
1413
|
-
var set
|
|
1412
|
+
var set = global$e.setImmediate;
|
|
1414
1413
|
var clear = global$e.clearImmediate;
|
|
1415
1414
|
var process$2 = global$e.process;
|
|
1416
1415
|
var Dispatch = global$e.Dispatch;
|
|
@@ -1451,8 +1450,8 @@
|
|
|
1451
1450
|
};
|
|
1452
1451
|
|
|
1453
1452
|
// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
|
|
1454
|
-
if (!set
|
|
1455
|
-
set
|
|
1453
|
+
if (!set || !clear) {
|
|
1454
|
+
set = function setImmediate(handler) {
|
|
1456
1455
|
validateArgumentsLength(arguments.length, 1);
|
|
1457
1456
|
var fn = isCallable$3(handler) ? handler : Function$1(handler);
|
|
1458
1457
|
var args = arraySlice$1(arguments, 1);
|
|
@@ -1510,7 +1509,7 @@
|
|
|
1510
1509
|
}
|
|
1511
1510
|
|
|
1512
1511
|
var task$1 = {
|
|
1513
|
-
set: set
|
|
1512
|
+
set: set,
|
|
1514
1513
|
clear: clear
|
|
1515
1514
|
};
|
|
1516
1515
|
|
|
@@ -1686,7 +1685,7 @@
|
|
|
1686
1685
|
|
|
1687
1686
|
var engineIsBrowser = typeof window == 'object';
|
|
1688
1687
|
|
|
1689
|
-
var $$
|
|
1688
|
+
var $$6 = _export;
|
|
1690
1689
|
var global$a = global$I;
|
|
1691
1690
|
var getBuiltIn = getBuiltIn$7;
|
|
1692
1691
|
var call$5 = functionCall;
|
|
@@ -2011,7 +2010,7 @@
|
|
|
2011
2010
|
}
|
|
2012
2011
|
}
|
|
2013
2012
|
|
|
2014
|
-
$$
|
|
2013
|
+
$$6({ global: true, wrap: true, forced: FORCED$1 }, {
|
|
2015
2014
|
Promise: PromiseConstructor
|
|
2016
2015
|
});
|
|
2017
2016
|
|
|
@@ -2021,7 +2020,7 @@
|
|
|
2021
2020
|
PromiseWrapper = getBuiltIn(PROMISE);
|
|
2022
2021
|
|
|
2023
2022
|
// statics
|
|
2024
|
-
$$
|
|
2023
|
+
$$6({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
2025
2024
|
// `Promise.reject` method
|
|
2026
2025
|
// https://tc39.es/ecma262/#sec-promise.reject
|
|
2027
2026
|
reject: function reject(r) {
|
|
@@ -2031,7 +2030,7 @@
|
|
|
2031
2030
|
}
|
|
2032
2031
|
});
|
|
2033
2032
|
|
|
2034
|
-
$$
|
|
2033
|
+
$$6({ target: PROMISE, stat: true, forced: FORCED$1 }, {
|
|
2035
2034
|
// `Promise.resolve` method
|
|
2036
2035
|
// https://tc39.es/ecma262/#sec-promise.resolve
|
|
2037
2036
|
resolve: function resolve(x) {
|
|
@@ -2039,7 +2038,7 @@
|
|
|
2039
2038
|
}
|
|
2040
2039
|
});
|
|
2041
2040
|
|
|
2042
|
-
$$
|
|
2041
|
+
$$6({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
|
|
2043
2042
|
// `Promise.all` method
|
|
2044
2043
|
// https://tc39.es/ecma262/#sec-promise.all
|
|
2045
2044
|
all: function all(iterable) {
|
|
@@ -2096,7 +2095,7 @@
|
|
|
2096
2095
|
};
|
|
2097
2096
|
|
|
2098
2097
|
var DESCRIPTORS$1 = descriptors;
|
|
2099
|
-
var uncurryThis$
|
|
2098
|
+
var uncurryThis$a = functionUncurryThis;
|
|
2100
2099
|
var call$4 = functionCall;
|
|
2101
2100
|
var fails$8 = fails$i;
|
|
2102
2101
|
var objectKeys$1 = objectKeys$2;
|
|
@@ -2109,7 +2108,7 @@
|
|
|
2109
2108
|
var $assign = Object.assign;
|
|
2110
2109
|
// eslint-disable-next-line es/no-object-defineproperty -- required for testing
|
|
2111
2110
|
var defineProperty = Object.defineProperty;
|
|
2112
|
-
var concat$1 = uncurryThis$
|
|
2111
|
+
var concat$1 = uncurryThis$a([].concat);
|
|
2113
2112
|
|
|
2114
2113
|
// `Object.assign` method
|
|
2115
2114
|
// https://tc39.es/ecma262/#sec-object.assign
|
|
@@ -2152,16 +2151,87 @@
|
|
|
2152
2151
|
} return T;
|
|
2153
2152
|
} : $assign;
|
|
2154
2153
|
|
|
2155
|
-
var $$
|
|
2154
|
+
var $$5 = _export;
|
|
2156
2155
|
var assign = objectAssign;
|
|
2157
2156
|
|
|
2158
2157
|
// `Object.assign` method
|
|
2159
2158
|
// https://tc39.es/ecma262/#sec-object.assign
|
|
2160
2159
|
// eslint-disable-next-line es/no-object-assign -- required for testing
|
|
2161
|
-
$$
|
|
2160
|
+
$$5({ target: 'Object', stat: true, forced: Object.assign !== assign }, {
|
|
2162
2161
|
assign: assign
|
|
2163
2162
|
});
|
|
2164
2163
|
|
|
2164
|
+
var isObject = isObject$8;
|
|
2165
|
+
var classof$2 = classofRaw$1;
|
|
2166
|
+
var wellKnownSymbol$3 = wellKnownSymbol$e;
|
|
2167
|
+
|
|
2168
|
+
var MATCH$1 = wellKnownSymbol$3('match');
|
|
2169
|
+
|
|
2170
|
+
// `IsRegExp` abstract operation
|
|
2171
|
+
// https://tc39.es/ecma262/#sec-isregexp
|
|
2172
|
+
var isRegexp = function (it) {
|
|
2173
|
+
var isRegExp;
|
|
2174
|
+
return isObject(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$2(it) == 'RegExp');
|
|
2175
|
+
};
|
|
2176
|
+
|
|
2177
|
+
var global$9 = global$I;
|
|
2178
|
+
var isRegExp$1 = isRegexp;
|
|
2179
|
+
|
|
2180
|
+
var TypeError$3 = global$9.TypeError;
|
|
2181
|
+
|
|
2182
|
+
var notARegexp = function (it) {
|
|
2183
|
+
if (isRegExp$1(it)) {
|
|
2184
|
+
throw TypeError$3("The method doesn't accept regular expressions");
|
|
2185
|
+
} return it;
|
|
2186
|
+
};
|
|
2187
|
+
|
|
2188
|
+
var global$8 = global$I;
|
|
2189
|
+
var classof$1 = classof$6;
|
|
2190
|
+
|
|
2191
|
+
var String$1 = global$8.String;
|
|
2192
|
+
|
|
2193
|
+
var toString$8 = function (argument) {
|
|
2194
|
+
if (classof$1(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
|
|
2195
|
+
return String$1(argument);
|
|
2196
|
+
};
|
|
2197
|
+
|
|
2198
|
+
var wellKnownSymbol$2 = wellKnownSymbol$e;
|
|
2199
|
+
|
|
2200
|
+
var MATCH = wellKnownSymbol$2('match');
|
|
2201
|
+
|
|
2202
|
+
var correctIsRegexpLogic = function (METHOD_NAME) {
|
|
2203
|
+
var regexp = /./;
|
|
2204
|
+
try {
|
|
2205
|
+
'/./'[METHOD_NAME](regexp);
|
|
2206
|
+
} catch (error1) {
|
|
2207
|
+
try {
|
|
2208
|
+
regexp[MATCH] = false;
|
|
2209
|
+
return '/./'[METHOD_NAME](regexp);
|
|
2210
|
+
} catch (error2) { /* empty */ }
|
|
2211
|
+
} return false;
|
|
2212
|
+
};
|
|
2213
|
+
|
|
2214
|
+
var $$4 = _export;
|
|
2215
|
+
var uncurryThis$9 = functionUncurryThis;
|
|
2216
|
+
var notARegExp$1 = notARegexp;
|
|
2217
|
+
var requireObjectCoercible$5 = requireObjectCoercible$8;
|
|
2218
|
+
var toString$7 = toString$8;
|
|
2219
|
+
var correctIsRegExpLogic$1 = correctIsRegexpLogic;
|
|
2220
|
+
|
|
2221
|
+
var stringIndexOf$1 = uncurryThis$9(''.indexOf);
|
|
2222
|
+
|
|
2223
|
+
// `String.prototype.includes` method
|
|
2224
|
+
// https://tc39.es/ecma262/#sec-string.prototype.includes
|
|
2225
|
+
$$4({ target: 'String', proto: true, forced: !correctIsRegExpLogic$1('includes') }, {
|
|
2226
|
+
includes: function includes(searchString /* , position = 0 */) {
|
|
2227
|
+
return !!~stringIndexOf$1(
|
|
2228
|
+
toString$7(requireObjectCoercible$5(this)),
|
|
2229
|
+
toString$7(notARegExp$1(searchString)),
|
|
2230
|
+
arguments.length > 1 ? arguments[1] : undefined
|
|
2231
|
+
);
|
|
2232
|
+
}
|
|
2233
|
+
});
|
|
2234
|
+
|
|
2165
2235
|
/*! *****************************************************************************
|
|
2166
2236
|
Copyright (c) Microsoft Corporation.
|
|
2167
2237
|
|
|
@@ -2236,48 +2306,6 @@
|
|
|
2236
2306
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
2237
2307
|
}
|
|
2238
2308
|
|
|
2239
|
-
var NINETAILED_CACHE_KEY = '__nt-cache__';
|
|
2240
|
-
var initialize = function initialize(_a, data) {
|
|
2241
|
-
var instance = _a.instance;
|
|
2242
|
-
|
|
2243
|
-
if (data === void 0) {
|
|
2244
|
-
data = {};
|
|
2245
|
-
}
|
|
2246
|
-
|
|
2247
|
-
var cache = experience_jsShared.buildEmptyCache();
|
|
2248
|
-
instance.storage.setItem(NINETAILED_CACHE_KEY, __assign(__assign({}, cache), data));
|
|
2249
|
-
return cache;
|
|
2250
|
-
};
|
|
2251
|
-
var get = function get(_a) {
|
|
2252
|
-
var instance = _a.instance;
|
|
2253
|
-
var cache = instance.storage.getItem(NINETAILED_CACHE_KEY);
|
|
2254
|
-
return cache;
|
|
2255
|
-
};
|
|
2256
|
-
var set = function set(cache, _a) {
|
|
2257
|
-
var instance = _a.instance;
|
|
2258
|
-
instance.storage.setItem(NINETAILED_CACHE_KEY, cache);
|
|
2259
|
-
return cache;
|
|
2260
|
-
};
|
|
2261
|
-
var remove = function remove(_a) {
|
|
2262
|
-
var instance = _a.instance;
|
|
2263
|
-
instance.storage.removeItem(NINETAILED_CACHE_KEY);
|
|
2264
|
-
};
|
|
2265
|
-
var reset = function reset(_a) {
|
|
2266
|
-
var instance = _a.instance;
|
|
2267
|
-
return initialize({
|
|
2268
|
-
instance: instance
|
|
2269
|
-
});
|
|
2270
|
-
};
|
|
2271
|
-
|
|
2272
|
-
var index = /*#__PURE__*/Object.freeze({
|
|
2273
|
-
__proto__: null,
|
|
2274
|
-
initialize: initialize,
|
|
2275
|
-
get: get,
|
|
2276
|
-
set: set,
|
|
2277
|
-
remove: remove,
|
|
2278
|
-
reset: reset
|
|
2279
|
-
});
|
|
2280
|
-
|
|
2281
2309
|
var buildClientLocale = function buildClientLocale() {
|
|
2282
2310
|
return navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;
|
|
2283
2311
|
};
|
|
@@ -2294,387 +2322,12 @@
|
|
|
2294
2322
|
};
|
|
2295
2323
|
};
|
|
2296
2324
|
|
|
2297
|
-
var BASE_URL = 'https://api.ninetailed.co';
|
|
2298
|
-
|
|
2299
|
-
var fetchWithTimeout = function fetchWithTimeout(input, init) {
|
|
2300
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
2301
|
-
var timeout, controller, id, response;
|
|
2302
|
-
return __generator(this, function (_a) {
|
|
2303
|
-
switch (_a.label) {
|
|
2304
|
-
case 0:
|
|
2305
|
-
timeout = init.timeout;
|
|
2306
|
-
controller = new AbortController();
|
|
2307
|
-
id = setTimeout(function () {
|
|
2308
|
-
logger.warn('Ninetailed Request timed out.');
|
|
2309
|
-
controller.abort();
|
|
2310
|
-
}, timeout);
|
|
2311
|
-
return [4
|
|
2312
|
-
/*yield*/
|
|
2313
|
-
, fetch(input, __assign(__assign({}, init), {
|
|
2314
|
-
signal: controller.signal
|
|
2315
|
-
}))];
|
|
2316
|
-
|
|
2317
|
-
case 1:
|
|
2318
|
-
response = _a.sent();
|
|
2319
|
-
clearTimeout(id);
|
|
2320
|
-
return [2
|
|
2321
|
-
/*return*/
|
|
2322
|
-
, response];
|
|
2323
|
-
}
|
|
2324
|
-
});
|
|
2325
|
-
});
|
|
2326
|
-
};
|
|
2327
|
-
|
|
2328
|
-
var NinetailedApiClient =
|
|
2329
|
-
/** @class */
|
|
2330
|
-
function () {
|
|
2331
|
-
function NinetailedApiClient(_a) {
|
|
2332
|
-
var clientId = _a.clientId,
|
|
2333
|
-
_b = _a.environment,
|
|
2334
|
-
environment = _b === void 0 ? 'main' : _b,
|
|
2335
|
-
_c = _a.url,
|
|
2336
|
-
url = _c === void 0 ? BASE_URL : _c;
|
|
2337
|
-
this.clientId = clientId;
|
|
2338
|
-
this.environment = environment;
|
|
2339
|
-
this.url = url;
|
|
2340
|
-
}
|
|
2341
|
-
|
|
2342
|
-
NinetailedApiClient.prototype.profile = function (options) {
|
|
2343
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
2344
|
-
var events, anonymousId, body, request, data, error_1;
|
|
2345
|
-
return __generator(this, function (_a) {
|
|
2346
|
-
switch (_a.label) {
|
|
2347
|
-
case 0:
|
|
2348
|
-
logger.info('Sending Profile Request.');
|
|
2349
|
-
events = options.events;
|
|
2350
|
-
anonymousId = events[0].anonymousId;
|
|
2351
|
-
body = options;
|
|
2352
|
-
logger.debug('Profile Request Body: ', body);
|
|
2353
|
-
_a.label = 1;
|
|
2354
|
-
|
|
2355
|
-
case 1:
|
|
2356
|
-
_a.trys.push([1, 4,, 5]);
|
|
2357
|
-
|
|
2358
|
-
return [4
|
|
2359
|
-
/*yield*/
|
|
2360
|
-
, fetchWithTimeout("".concat(this.url, "/v1/organizations/").concat(this.clientId, "/environments/").concat(this.environment, "/profiles/").concat(anonymousId, "/events"), {
|
|
2361
|
-
method: 'POST',
|
|
2362
|
-
headers: {
|
|
2363
|
-
'Content-Type': 'application/json'
|
|
2364
|
-
},
|
|
2365
|
-
body: JSON.stringify(body),
|
|
2366
|
-
timeout: options.timeout || 3000
|
|
2367
|
-
})];
|
|
2368
|
-
|
|
2369
|
-
case 2:
|
|
2370
|
-
request = _a.sent();
|
|
2371
|
-
logger.debug('Profile Request: ', request);
|
|
2372
|
-
return [4
|
|
2373
|
-
/*yield*/
|
|
2374
|
-
, request.json()];
|
|
2375
|
-
|
|
2376
|
-
case 3:
|
|
2377
|
-
data = _a.sent().data;
|
|
2378
|
-
logger.debug('Profile Request completed.');
|
|
2379
|
-
return [2
|
|
2380
|
-
/*return*/
|
|
2381
|
-
, data];
|
|
2382
|
-
|
|
2383
|
-
case 4:
|
|
2384
|
-
error_1 = _a.sent();
|
|
2385
|
-
throw error_1;
|
|
2386
|
-
|
|
2387
|
-
case 5:
|
|
2388
|
-
return [2
|
|
2389
|
-
/*return*/
|
|
2390
|
-
];
|
|
2391
|
-
}
|
|
2392
|
-
});
|
|
2393
|
-
});
|
|
2394
|
-
};
|
|
2395
|
-
|
|
2396
|
-
return NinetailedApiClient;
|
|
2397
|
-
}();
|
|
2398
|
-
|
|
2399
|
-
var Logger =
|
|
2400
|
-
/** @class */
|
|
2401
|
-
function () {
|
|
2402
|
-
function Logger() {
|
|
2403
|
-
this.name = '@ninetailed/experience.js';
|
|
2404
|
-
this.sinks = [];
|
|
2405
|
-
this.diary = diary.diary(this.name, this.onLogEvent.bind(this));
|
|
2406
|
-
diary.enable(this.name);
|
|
2407
|
-
}
|
|
2408
|
-
|
|
2409
|
-
Logger.prototype.addSink = function (sink) {
|
|
2410
|
-
this.sinks = __spreadArray(__spreadArray([], this.sinks.filter(function (existingSink) {
|
|
2411
|
-
return existingSink.name !== sink.name;
|
|
2412
|
-
}), true), [sink], false);
|
|
2413
|
-
};
|
|
2414
|
-
|
|
2415
|
-
Logger.prototype.removeSink = function (name) {
|
|
2416
|
-
this.sinks = this.sinks.filter(function (sink) {
|
|
2417
|
-
return sink.name !== name;
|
|
2418
|
-
});
|
|
2419
|
-
};
|
|
2420
|
-
|
|
2421
|
-
Logger.prototype.debug = function (message) {
|
|
2422
|
-
var _a;
|
|
2423
|
-
|
|
2424
|
-
var args = [];
|
|
2425
|
-
|
|
2426
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2427
|
-
args[_i - 1] = arguments[_i];
|
|
2428
|
-
}
|
|
2429
|
-
|
|
2430
|
-
(_a = this.diary).debug.apply(_a, __spreadArray([message], args, false));
|
|
2431
|
-
};
|
|
2432
|
-
|
|
2433
|
-
Logger.prototype.info = function (message) {
|
|
2434
|
-
var _a;
|
|
2435
|
-
|
|
2436
|
-
var args = [];
|
|
2437
|
-
|
|
2438
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2439
|
-
args[_i - 1] = arguments[_i];
|
|
2440
|
-
}
|
|
2441
|
-
|
|
2442
|
-
(_a = this.diary).info.apply(_a, __spreadArray([message], args, false));
|
|
2443
|
-
};
|
|
2444
|
-
|
|
2445
|
-
Logger.prototype.log = function (message) {
|
|
2446
|
-
var _a;
|
|
2447
|
-
|
|
2448
|
-
var args = [];
|
|
2449
|
-
|
|
2450
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2451
|
-
args[_i - 1] = arguments[_i];
|
|
2452
|
-
}
|
|
2453
|
-
|
|
2454
|
-
(_a = this.diary).log.apply(_a, __spreadArray([message], args, false));
|
|
2455
|
-
};
|
|
2456
|
-
|
|
2457
|
-
Logger.prototype.warn = function (message) {
|
|
2458
|
-
var _a;
|
|
2459
|
-
|
|
2460
|
-
var args = [];
|
|
2461
|
-
|
|
2462
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2463
|
-
args[_i - 1] = arguments[_i];
|
|
2464
|
-
}
|
|
2465
|
-
|
|
2466
|
-
(_a = this.diary).warn.apply(_a, __spreadArray([message], args, false));
|
|
2467
|
-
};
|
|
2468
|
-
|
|
2469
|
-
Logger.prototype.error = function (message) {
|
|
2470
|
-
var _a;
|
|
2471
|
-
|
|
2472
|
-
var args = [];
|
|
2473
|
-
|
|
2474
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2475
|
-
args[_i - 1] = arguments[_i];
|
|
2476
|
-
}
|
|
2477
|
-
|
|
2478
|
-
(_a = this.diary).error.apply(_a, __spreadArray([message], args, false));
|
|
2479
|
-
};
|
|
2480
|
-
|
|
2481
|
-
Logger.prototype.fatal = function (message) {
|
|
2482
|
-
var _a;
|
|
2483
|
-
|
|
2484
|
-
var args = [];
|
|
2485
|
-
|
|
2486
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2487
|
-
args[_i - 1] = arguments[_i];
|
|
2488
|
-
}
|
|
2489
|
-
|
|
2490
|
-
(_a = this.diary).fatal.apply(_a, __spreadArray([message], args, false));
|
|
2491
|
-
};
|
|
2492
|
-
|
|
2493
|
-
Logger.prototype.onLogEvent = function (event) {
|
|
2494
|
-
this.sinks.forEach(function (sink) {
|
|
2495
|
-
if (sink[event.level]) {
|
|
2496
|
-
sink[event.level].apply(sink, __spreadArray([event.message], event.extra, false));
|
|
2497
|
-
}
|
|
2498
|
-
});
|
|
2499
|
-
};
|
|
2500
|
-
|
|
2501
|
-
return Logger;
|
|
2502
|
-
}();
|
|
2503
|
-
var logger = new Logger();
|
|
2504
|
-
|
|
2505
|
-
var ConsoleLogSink =
|
|
2506
|
-
/** @class */
|
|
2507
|
-
function () {
|
|
2508
|
-
function ConsoleLogSink() {
|
|
2509
|
-
this.name = "ConsoleLogSink";
|
|
2510
|
-
}
|
|
2511
|
-
|
|
2512
|
-
ConsoleLogSink.prototype.debug = function (message) {
|
|
2513
|
-
var args = [];
|
|
2514
|
-
|
|
2515
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2516
|
-
args[_i - 1] = arguments[_i];
|
|
2517
|
-
}
|
|
2518
|
-
|
|
2519
|
-
console.debug.apply(console, __spreadArray([message], args, false));
|
|
2520
|
-
};
|
|
2521
|
-
|
|
2522
|
-
ConsoleLogSink.prototype.info = function (message) {
|
|
2523
|
-
var args = [];
|
|
2524
|
-
|
|
2525
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2526
|
-
args[_i - 1] = arguments[_i];
|
|
2527
|
-
}
|
|
2528
|
-
|
|
2529
|
-
console.info.apply(console, __spreadArray([message], args, false));
|
|
2530
|
-
};
|
|
2531
|
-
|
|
2532
|
-
ConsoleLogSink.prototype.log = function (message) {
|
|
2533
|
-
var args = [];
|
|
2534
|
-
|
|
2535
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2536
|
-
args[_i - 1] = arguments[_i];
|
|
2537
|
-
}
|
|
2538
|
-
|
|
2539
|
-
console.log.apply(console, __spreadArray([message], args, false));
|
|
2540
|
-
};
|
|
2541
|
-
|
|
2542
|
-
ConsoleLogSink.prototype.warn = function (message) {
|
|
2543
|
-
var args = [];
|
|
2544
|
-
|
|
2545
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2546
|
-
args[_i - 1] = arguments[_i];
|
|
2547
|
-
}
|
|
2548
|
-
|
|
2549
|
-
console.warn.apply(console, __spreadArray([message], args, false));
|
|
2550
|
-
};
|
|
2551
|
-
|
|
2552
|
-
ConsoleLogSink.prototype.error = function (message) {
|
|
2553
|
-
var args = [];
|
|
2554
|
-
|
|
2555
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2556
|
-
args[_i - 1] = arguments[_i];
|
|
2557
|
-
}
|
|
2558
|
-
|
|
2559
|
-
console.error.apply(console, __spreadArray([message], args, false));
|
|
2560
|
-
};
|
|
2561
|
-
|
|
2562
|
-
ConsoleLogSink.prototype.fatal = function (message) {
|
|
2563
|
-
var args = [];
|
|
2564
|
-
|
|
2565
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2566
|
-
args[_i - 1] = arguments[_i];
|
|
2567
|
-
}
|
|
2568
|
-
|
|
2569
|
-
console.error.apply(console, __spreadArray([message], args, false));
|
|
2570
|
-
};
|
|
2571
|
-
|
|
2572
|
-
return ConsoleLogSink;
|
|
2573
|
-
}();
|
|
2574
|
-
|
|
2575
|
-
var OnLogLogSink =
|
|
2576
|
-
/** @class */
|
|
2577
|
-
function () {
|
|
2578
|
-
function OnLogLogSink(onLog) {
|
|
2579
|
-
this.onLog = onLog;
|
|
2580
|
-
this.name = 'OnLogLogSink';
|
|
2581
|
-
}
|
|
2582
|
-
|
|
2583
|
-
OnLogLogSink.prototype.debug = function (message) {
|
|
2584
|
-
var args = [];
|
|
2585
|
-
|
|
2586
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2587
|
-
args[_i - 1] = arguments[_i];
|
|
2588
|
-
}
|
|
2589
|
-
|
|
2590
|
-
this.onLog.apply(this, __spreadArray([message], args, false));
|
|
2591
|
-
};
|
|
2592
|
-
|
|
2593
|
-
OnLogLogSink.prototype.info = function (message) {
|
|
2594
|
-
var args = [];
|
|
2595
|
-
|
|
2596
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2597
|
-
args[_i - 1] = arguments[_i];
|
|
2598
|
-
}
|
|
2599
|
-
|
|
2600
|
-
this.onLog.apply(this, __spreadArray([message], args, false));
|
|
2601
|
-
};
|
|
2602
|
-
|
|
2603
|
-
OnLogLogSink.prototype.log = function (message) {
|
|
2604
|
-
var args = [];
|
|
2605
|
-
|
|
2606
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2607
|
-
args[_i - 1] = arguments[_i];
|
|
2608
|
-
}
|
|
2609
|
-
|
|
2610
|
-
this.onLog.apply(this, __spreadArray([message], args, false));
|
|
2611
|
-
};
|
|
2612
|
-
|
|
2613
|
-
OnLogLogSink.prototype.warn = function (message) {
|
|
2614
|
-
var args = [];
|
|
2615
|
-
|
|
2616
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2617
|
-
args[_i - 1] = arguments[_i];
|
|
2618
|
-
}
|
|
2619
|
-
|
|
2620
|
-
this.onLog.apply(this, __spreadArray([message], args, false));
|
|
2621
|
-
};
|
|
2622
|
-
|
|
2623
|
-
return OnLogLogSink;
|
|
2624
|
-
}();
|
|
2625
|
-
|
|
2626
|
-
var OnErrorLogSink =
|
|
2627
|
-
/** @class */
|
|
2628
|
-
function () {
|
|
2629
|
-
function OnErrorLogSink(onError) {
|
|
2630
|
-
this.onError = onError;
|
|
2631
|
-
this.name = 'OnErrorLogSink';
|
|
2632
|
-
}
|
|
2633
|
-
|
|
2634
|
-
OnErrorLogSink.prototype.error = function (message) {
|
|
2635
|
-
var args = [];
|
|
2636
|
-
|
|
2637
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2638
|
-
args[_i - 1] = arguments[_i];
|
|
2639
|
-
}
|
|
2640
|
-
|
|
2641
|
-
this.onError.apply(this, __spreadArray([message], args, false));
|
|
2642
|
-
};
|
|
2643
|
-
|
|
2644
|
-
OnErrorLogSink.prototype.fatal = function (message) {
|
|
2645
|
-
var args = [];
|
|
2646
|
-
|
|
2647
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2648
|
-
args[_i - 1] = arguments[_i];
|
|
2649
|
-
}
|
|
2650
|
-
|
|
2651
|
-
this.onError.apply(this, __spreadArray([message], args, false));
|
|
2652
|
-
};
|
|
2653
|
-
|
|
2654
|
-
return OnErrorLogSink;
|
|
2655
|
-
}();
|
|
2656
|
-
|
|
2657
|
-
var NINETAILED_TRACKER_EVENTS = {
|
|
2658
|
-
/**
|
|
2659
|
-
* `profile` - Fires when the profile is returned by the cdp API.
|
|
2660
|
-
*/
|
|
2661
|
-
profile: 'profile'
|
|
2662
|
-
};
|
|
2663
|
-
var PLUGIN_NAME = 'ninetailed';
|
|
2664
|
-
var DEBUG_FLAG_KEY = 'nt-debug';
|
|
2665
|
-
|
|
2666
|
-
var delay = function delay(ms) {
|
|
2667
|
-
return new Promise(function (resolve) {
|
|
2668
|
-
return setTimeout(resolve, ms);
|
|
2669
|
-
});
|
|
2670
|
-
};
|
|
2671
2325
|
/**
|
|
2672
2326
|
* Similar to _.throttle but waits for the promise to resolve. There is no
|
|
2673
2327
|
* wait time because you can simply await `Promise.timeout` inside `fn`
|
|
2674
2328
|
* to wait some time before the next call.
|
|
2675
2329
|
*/
|
|
2676
2330
|
|
|
2677
|
-
|
|
2678
2331
|
function asyncThrottle(fn) {
|
|
2679
2332
|
var _this = this;
|
|
2680
2333
|
|
|
@@ -2711,32 +2364,53 @@
|
|
|
2711
2364
|
});
|
|
2712
2365
|
};
|
|
2713
2366
|
}
|
|
2367
|
+
|
|
2368
|
+
var LEGACY_ANONYMOUS_ID = '__anon_id';
|
|
2369
|
+
var ANONYMOUS_ID = '__nt_anonymous_id__';
|
|
2370
|
+
var DEBUG_FLAG = '__nt_debug__';
|
|
2371
|
+
var PROFILE_FALLBACK_CACHE = '__nt_profile__';
|
|
2372
|
+
|
|
2373
|
+
var NINETAILED_TRACKER_EVENTS = {
|
|
2374
|
+
/**
|
|
2375
|
+
* `profile` - Fires when the profile is returned by the cdp API.
|
|
2376
|
+
*/
|
|
2377
|
+
profile: 'profile',
|
|
2378
|
+
|
|
2379
|
+
/**
|
|
2380
|
+
* `reset` - gets fired when the profile gets reset, so other plugins can react.
|
|
2381
|
+
*/
|
|
2382
|
+
reset: 'reset'
|
|
2383
|
+
};
|
|
2384
|
+
var PLUGIN_NAME = 'ninetailed';
|
|
2385
|
+
|
|
2386
|
+
var delay = function delay(ms) {
|
|
2387
|
+
return new Promise(function (resolve) {
|
|
2388
|
+
return setTimeout(resolve, ms);
|
|
2389
|
+
});
|
|
2390
|
+
};
|
|
2391
|
+
|
|
2714
2392
|
var ninetailedPlugin = function ninetailedPlugin(_a) {
|
|
2715
2393
|
var clientId = _a.clientId,
|
|
2716
|
-
environment = _a.environment
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
url = _a.url,
|
|
2394
|
+
environment = _a.environment;
|
|
2395
|
+
_a.preview;
|
|
2396
|
+
var url = _a.url,
|
|
2720
2397
|
profile = _a.profile,
|
|
2721
2398
|
locale = _a.locale;
|
|
2722
|
-
var
|
|
2723
|
-
var apiClient = new NinetailedApiClient({
|
|
2399
|
+
var apiClient = new experience_jsShared.NinetailedApiClient({
|
|
2724
2400
|
clientId: clientId,
|
|
2725
2401
|
environment: environment,
|
|
2726
2402
|
url: url
|
|
2727
2403
|
});
|
|
2728
2404
|
var queue = [];
|
|
2729
|
-
var localOnly = false;
|
|
2730
2405
|
|
|
2731
2406
|
var flush = function flush(instance) {
|
|
2732
2407
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
2733
|
-
var events,
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
switch (_b.label) {
|
|
2408
|
+
var events, anonymousId, profile_1, error_1, fallbackProfile;
|
|
2409
|
+
return __generator(this, function (_a) {
|
|
2410
|
+
switch (_a.label) {
|
|
2737
2411
|
case 0:
|
|
2738
2412
|
events = Object.assign([], queue);
|
|
2739
|
-
logger.info('Start flushing events.');
|
|
2413
|
+
experience_jsShared.logger.info('Start flushing events.');
|
|
2740
2414
|
queue = [];
|
|
2741
2415
|
|
|
2742
2416
|
if (!events.length) {
|
|
@@ -2745,70 +2419,54 @@
|
|
|
2745
2419
|
];
|
|
2746
2420
|
}
|
|
2747
2421
|
|
|
2748
|
-
|
|
2749
|
-
instance: instance
|
|
2750
|
-
});
|
|
2751
|
-
_b.label = 1;
|
|
2422
|
+
_a.label = 1;
|
|
2752
2423
|
|
|
2753
2424
|
case 1:
|
|
2754
|
-
|
|
2425
|
+
_a.trys.push([1, 3,, 4]);
|
|
2755
2426
|
|
|
2756
|
-
|
|
2427
|
+
anonymousId = instance.storage.getItem(ANONYMOUS_ID);
|
|
2757
2428
|
return [4
|
|
2758
2429
|
/*yield*/
|
|
2759
|
-
, apiClient.
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
localOnly: localOnly,
|
|
2765
|
-
preview: preview,
|
|
2766
|
-
options: {
|
|
2767
|
-
locale: locale || 'en'
|
|
2768
|
-
},
|
|
2769
|
-
sessions: get__default["default"](cache, 'sessions', [])
|
|
2430
|
+
, apiClient.upsertProfile({
|
|
2431
|
+
profileId: anonymousId,
|
|
2432
|
+
events: events
|
|
2433
|
+
}, {
|
|
2434
|
+
locale: locale
|
|
2770
2435
|
})];
|
|
2771
2436
|
|
|
2772
2437
|
case 2:
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
random: profile_1.random,
|
|
2778
|
-
audiences: profile_1.audiences,
|
|
2779
|
-
traits: profile_1.traits,
|
|
2780
|
-
location: profile_1.location,
|
|
2781
|
-
signals: signals,
|
|
2782
|
-
traitsUpdatedAt: traitsUpdatedAt,
|
|
2783
|
-
sessions: sessions,
|
|
2784
|
-
session: profile_1.session
|
|
2785
|
-
}, {
|
|
2786
|
-
instance: instance
|
|
2787
|
-
});
|
|
2438
|
+
profile_1 = _a.sent();
|
|
2439
|
+
instance.storage.setItem(ANONYMOUS_ID, profile_1.id);
|
|
2440
|
+
instance.storage.setItem(PROFILE_FALLBACK_CACHE, profile_1);
|
|
2441
|
+
experience_jsShared.logger.debug('Profile from api: ', profile_1);
|
|
2788
2442
|
instance.dispatch({
|
|
2789
2443
|
type: NINETAILED_TRACKER_EVENTS.profile,
|
|
2790
|
-
profile: profile_1
|
|
2791
|
-
cache: updatedCache
|
|
2444
|
+
profile: profile_1
|
|
2792
2445
|
});
|
|
2793
2446
|
return [3
|
|
2794
2447
|
/*break*/
|
|
2795
2448
|
, 4];
|
|
2796
2449
|
|
|
2797
2450
|
case 3:
|
|
2798
|
-
error_1 =
|
|
2799
|
-
logger.debug('An error occurred during flushing the events: ', error_1);
|
|
2800
|
-
instance.
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2451
|
+
error_1 = _a.sent();
|
|
2452
|
+
experience_jsShared.logger.debug('An error occurred during flushing the events: ', error_1);
|
|
2453
|
+
fallbackProfile = instance.storage.getItem(PROFILE_FALLBACK_CACHE);
|
|
2454
|
+
|
|
2455
|
+
if (fallbackProfile) {
|
|
2456
|
+
experience_jsShared.logger.debug('Found a fallback profile - will use this.');
|
|
2457
|
+
instance.dispatch({
|
|
2458
|
+
type: NINETAILED_TRACKER_EVENTS.profile,
|
|
2459
|
+
profile: fallbackProfile
|
|
2460
|
+
});
|
|
2461
|
+
} else {
|
|
2462
|
+
experience_jsShared.logger.debug('No fallback profile found - setting profile to null.');
|
|
2463
|
+
instance.dispatch({
|
|
2464
|
+
type: NINETAILED_TRACKER_EVENTS.profile,
|
|
2465
|
+
profile: null,
|
|
2466
|
+
error: error_1
|
|
2467
|
+
});
|
|
2468
|
+
}
|
|
2469
|
+
|
|
2812
2470
|
return [3
|
|
2813
2471
|
/*break*/
|
|
2814
2472
|
, 4];
|
|
@@ -2821,7 +2479,7 @@
|
|
|
2821
2479
|
|
|
2822
2480
|
case 5:
|
|
2823
2481
|
// This is necessary to make sure that the cache is updated before the next flush is performed
|
|
2824
|
-
|
|
2482
|
+
_a.sent();
|
|
2825
2483
|
|
|
2826
2484
|
return [2
|
|
2827
2485
|
/*return*/
|
|
@@ -2829,15 +2487,11 @@
|
|
|
2829
2487
|
}
|
|
2830
2488
|
});
|
|
2831
2489
|
});
|
|
2832
|
-
};
|
|
2833
|
-
// leading: false,
|
|
2834
|
-
// trailing: true,
|
|
2835
|
-
// });
|
|
2836
|
-
|
|
2490
|
+
};
|
|
2837
2491
|
|
|
2838
2492
|
var throttledFlush = asyncThrottle(flush);
|
|
2839
2493
|
|
|
2840
|
-
var
|
|
2494
|
+
var enqueueEvent = function enqueueEvent(event, instance) {
|
|
2841
2495
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
2842
2496
|
return __generator(this, function (_a) {
|
|
2843
2497
|
queue = unionBy__default["default"]([event], queue, 'messageId');
|
|
@@ -2855,33 +2509,25 @@
|
|
|
2855
2509
|
initialize: function (_a) {
|
|
2856
2510
|
var instance = _a.instance;
|
|
2857
2511
|
|
|
2858
|
-
if (instance.storage.getItem(
|
|
2859
|
-
logger.addSink(new ConsoleLogSink());
|
|
2860
|
-
logger.info('Ninetailed Debug Mode is enabled.');
|
|
2861
|
-
}
|
|
2512
|
+
if (instance.storage.getItem(DEBUG_FLAG)) {
|
|
2513
|
+
experience_jsShared.logger.addSink(new experience_jsShared.ConsoleLogSink());
|
|
2514
|
+
experience_jsShared.logger.info('Ninetailed Debug Mode is enabled.');
|
|
2515
|
+
} // legacy support for the old anonymousId
|
|
2862
2516
|
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2517
|
+
|
|
2518
|
+
var legacyAnonymousId = instance.storage.getItem(LEGACY_ANONYMOUS_ID);
|
|
2519
|
+
|
|
2520
|
+
if (legacyAnonymousId) {
|
|
2521
|
+
experience_jsShared.logger.debug('Found legacy anonymousId, migrating to new one.', legacyAnonymousId);
|
|
2522
|
+
instance.storage.setItem(ANONYMOUS_ID, legacyAnonymousId);
|
|
2523
|
+
instance.storage.removeItem(LEGACY_ANONYMOUS_ID);
|
|
2524
|
+
}
|
|
2866
2525
|
|
|
2867
2526
|
if (profile) {
|
|
2868
|
-
instance.storage.setItem(
|
|
2869
|
-
initialize({
|
|
2870
|
-
instance: instance
|
|
2871
|
-
}, __assign(__assign({}, cache), {
|
|
2872
|
-
id: profile.id
|
|
2873
|
-
}));
|
|
2874
|
-
} else {
|
|
2875
|
-
var anonymousId = instance.storage.getItem('__anon_id');
|
|
2876
|
-
initialize({
|
|
2877
|
-
instance: instance
|
|
2878
|
-
}, __assign(__assign({}, cache), {
|
|
2879
|
-
id: anonymousId
|
|
2880
|
-
}));
|
|
2527
|
+
instance.storage.setItem(ANONYMOUS_ID, profile.id);
|
|
2881
2528
|
}
|
|
2882
2529
|
|
|
2883
|
-
|
|
2884
|
-
logger.debug('Ninetailed Core plugin initialized.');
|
|
2530
|
+
experience_jsShared.logger.debug('Ninetailed Core plugin initialized.');
|
|
2885
2531
|
},
|
|
2886
2532
|
page: function (_a) {
|
|
2887
2533
|
var payload = _a.payload,
|
|
@@ -2891,14 +2537,11 @@
|
|
|
2891
2537
|
return __generator(this, function (_b) {
|
|
2892
2538
|
switch (_b.label) {
|
|
2893
2539
|
case 0:
|
|
2894
|
-
logger.info('Sending Page event.');
|
|
2540
|
+
experience_jsShared.logger.info('Sending Page event.');
|
|
2895
2541
|
ctx = buildClientNinetailedRequestContext();
|
|
2896
|
-
localOnly = payload.localOnly;
|
|
2897
2542
|
return [4
|
|
2898
2543
|
/*yield*/
|
|
2899
|
-
,
|
|
2900
|
-
// doing this here as the anonymous id is set to late from init
|
|
2901
|
-
anonymousId: (profile === null || profile === void 0 ? void 0 : profile.id) || payload.anonymousId,
|
|
2544
|
+
, enqueueEvent(experience_jsShared.buildPageEvent({
|
|
2902
2545
|
messageId: payload.meta.rid,
|
|
2903
2546
|
timestamp: payload.meta.ts,
|
|
2904
2547
|
properties: payload.properties,
|
|
@@ -2923,14 +2566,11 @@
|
|
|
2923
2566
|
return __generator(this, function (_b) {
|
|
2924
2567
|
switch (_b.label) {
|
|
2925
2568
|
case 0:
|
|
2926
|
-
logger.info('Sending Track event.');
|
|
2569
|
+
experience_jsShared.logger.info('Sending Track event.');
|
|
2927
2570
|
ctx = buildClientNinetailedRequestContext();
|
|
2928
|
-
localOnly = payload.localOnly;
|
|
2929
2571
|
return [4
|
|
2930
2572
|
/*yield*/
|
|
2931
|
-
,
|
|
2932
|
-
// doing this here as the anonymous id is set to late from init
|
|
2933
|
-
anonymousId: (profile === null || profile === void 0 ? void 0 : profile.id) || payload.anonymousId,
|
|
2573
|
+
, enqueueEvent(experience_jsShared.buildTrackEvent({
|
|
2934
2574
|
messageId: payload.meta.rid,
|
|
2935
2575
|
timestamp: payload.meta.ts,
|
|
2936
2576
|
event: payload.event,
|
|
@@ -2956,14 +2596,12 @@
|
|
|
2956
2596
|
return __generator(this, function (_b) {
|
|
2957
2597
|
switch (_b.label) {
|
|
2958
2598
|
case 0:
|
|
2959
|
-
logger.info('Sending Identify event.');
|
|
2960
|
-
localOnly = payload.localOnly;
|
|
2599
|
+
experience_jsShared.logger.info('Sending Identify event.');
|
|
2961
2600
|
ctx = buildClientNinetailedRequestContext();
|
|
2962
2601
|
return [4
|
|
2963
2602
|
/*yield*/
|
|
2964
|
-
,
|
|
2603
|
+
, enqueueEvent(experience_jsShared.buildIdentifyEvent({
|
|
2965
2604
|
// doing this here as the anonymous id is set to late from init
|
|
2966
|
-
anonymousId: (profile === null || profile === void 0 ? void 0 : profile.id) || payload.anonymousId,
|
|
2967
2605
|
messageId: payload.meta.rid,
|
|
2968
2606
|
timestamp: payload.meta.ts,
|
|
2969
2607
|
traits: payload.traits,
|
|
@@ -2981,8 +2619,15 @@
|
|
|
2981
2619
|
});
|
|
2982
2620
|
});
|
|
2983
2621
|
},
|
|
2984
|
-
|
|
2985
|
-
|
|
2622
|
+
setItemStart: function (_a) {
|
|
2623
|
+
var abort = _a.abort,
|
|
2624
|
+
payload = _a.payload;
|
|
2625
|
+
|
|
2626
|
+
if (![ANONYMOUS_ID, DEBUG_FLAG, PROFILE_FALLBACK_CACHE].includes(payload.key)) {
|
|
2627
|
+
return abort();
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
return payload;
|
|
2986
2631
|
},
|
|
2987
2632
|
methods: {
|
|
2988
2633
|
reset: function () {
|
|
@@ -2993,39 +2638,47 @@
|
|
|
2993
2638
|
}
|
|
2994
2639
|
|
|
2995
2640
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
2996
|
-
var instance
|
|
2641
|
+
var instance;
|
|
2997
2642
|
return __generator(this, function (_a) {
|
|
2998
2643
|
switch (_a.label) {
|
|
2999
2644
|
case 0:
|
|
2645
|
+
experience_jsShared.logger.debug('Resetting profile.');
|
|
3000
2646
|
instance = args[args.length - 1];
|
|
3001
|
-
|
|
3002
|
-
|
|
2647
|
+
instance.dispatch({
|
|
2648
|
+
type: NINETAILED_TRACKER_EVENTS.reset
|
|
3003
2649
|
});
|
|
3004
2650
|
return [4
|
|
3005
2651
|
/*yield*/
|
|
3006
|
-
, instance.storage.
|
|
2652
|
+
, instance.storage.removeItem(ANONYMOUS_ID)];
|
|
3007
2653
|
|
|
3008
2654
|
case 1:
|
|
3009
2655
|
_a.sent();
|
|
3010
2656
|
|
|
3011
|
-
instance.dispatch({
|
|
3012
|
-
type: NINETAILED_TRACKER_EVENTS.profile,
|
|
3013
|
-
profile: {
|
|
3014
|
-
id: cache.id,
|
|
3015
|
-
random: 0,
|
|
3016
|
-
audiences: [],
|
|
3017
|
-
traits: {},
|
|
3018
|
-
location: {}
|
|
3019
|
-
},
|
|
3020
|
-
cache: cache
|
|
3021
|
-
});
|
|
3022
2657
|
return [4
|
|
3023
2658
|
/*yield*/
|
|
3024
|
-
,
|
|
2659
|
+
, instance.storage.removeItem(PROFILE_FALLBACK_CACHE)];
|
|
3025
2660
|
|
|
3026
2661
|
case 2:
|
|
3027
2662
|
_a.sent();
|
|
3028
2663
|
|
|
2664
|
+
experience_jsShared.logger.debug('Removed old profile data from localstorage.'); // sending a new page event, when no anonymousId is set will create a new profile.
|
|
2665
|
+
|
|
2666
|
+
return [4
|
|
2667
|
+
/*yield*/
|
|
2668
|
+
, instance.page()];
|
|
2669
|
+
|
|
2670
|
+
case 3:
|
|
2671
|
+
// sending a new page event, when no anonymousId is set will create a new profile.
|
|
2672
|
+
_a.sent();
|
|
2673
|
+
|
|
2674
|
+
experience_jsShared.logger.info('Profile reset successful.');
|
|
2675
|
+
return [4
|
|
2676
|
+
/*yield*/
|
|
2677
|
+
, delay(10)];
|
|
2678
|
+
|
|
2679
|
+
case 4:
|
|
2680
|
+
_a.sent();
|
|
2681
|
+
|
|
3029
2682
|
return [2
|
|
3030
2683
|
/*return*/
|
|
3031
2684
|
];
|
|
@@ -3047,21 +2700,19 @@
|
|
|
3047
2700
|
case 0:
|
|
3048
2701
|
enabled = args[0];
|
|
3049
2702
|
instance = args[args.length - 1];
|
|
3050
|
-
consoleLogSink = new ConsoleLogSink();
|
|
2703
|
+
consoleLogSink = new experience_jsShared.ConsoleLogSink();
|
|
3051
2704
|
if (!enabled) return [3
|
|
3052
2705
|
/*break*/
|
|
3053
2706
|
, 2];
|
|
3054
2707
|
return [4
|
|
3055
2708
|
/*yield*/
|
|
3056
|
-
, instance.storage.setItem(
|
|
2709
|
+
, instance.storage.setItem(DEBUG_FLAG, true)];
|
|
3057
2710
|
|
|
3058
2711
|
case 1:
|
|
3059
|
-
_a.sent();
|
|
3060
|
-
|
|
2712
|
+
_a.sent();
|
|
3061
2713
|
|
|
3062
|
-
logger.
|
|
3063
|
-
logger.
|
|
3064
|
-
logger.info('Debug mode enabled.');
|
|
2714
|
+
experience_jsShared.logger.addSink(consoleLogSink);
|
|
2715
|
+
experience_jsShared.logger.info('Debug mode enabled.');
|
|
3065
2716
|
return [3
|
|
3066
2717
|
/*break*/
|
|
3067
2718
|
, 4];
|
|
@@ -3069,13 +2720,13 @@
|
|
|
3069
2720
|
case 2:
|
|
3070
2721
|
return [4
|
|
3071
2722
|
/*yield*/
|
|
3072
|
-
, instance.storage.removeItem(
|
|
2723
|
+
, instance.storage.removeItem(DEBUG_FLAG)];
|
|
3073
2724
|
|
|
3074
2725
|
case 3:
|
|
3075
2726
|
_a.sent();
|
|
3076
2727
|
|
|
3077
|
-
logger.info('Debug mode disabled.');
|
|
3078
|
-
logger.removeSink(consoleLogSink.name);
|
|
2728
|
+
experience_jsShared.logger.info('Debug mode disabled.');
|
|
2729
|
+
experience_jsShared.logger.removeSink(consoleLogSink.name);
|
|
3079
2730
|
_a.label = 4;
|
|
3080
2731
|
|
|
3081
2732
|
case 4:
|
|
@@ -3186,6 +2837,8 @@
|
|
|
3186
2837
|
|
|
3187
2838
|
case 1:
|
|
3188
2839
|
_a.sent();
|
|
2840
|
+
/*console.log("Identify triggered");*/
|
|
2841
|
+
|
|
3189
2842
|
|
|
3190
2843
|
return [2
|
|
3191
2844
|
/*return*/
|
|
@@ -3196,44 +2849,18 @@
|
|
|
3196
2849
|
};
|
|
3197
2850
|
|
|
3198
2851
|
this.reset = function () {
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
return [4
|
|
3204
|
-
/*yield*/
|
|
3205
|
-
, this.waitUntilInitialized()];
|
|
3206
|
-
|
|
3207
|
-
case 1:
|
|
3208
|
-
_a.sent();
|
|
3209
|
-
|
|
3210
|
-
this.instance.plugins[PLUGIN_NAME].reset();
|
|
3211
|
-
return [2
|
|
3212
|
-
/*return*/
|
|
3213
|
-
];
|
|
3214
|
-
}
|
|
3215
|
-
});
|
|
2852
|
+
_this.onIsInitialized(function () {
|
|
2853
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2854
|
+
// @ts-ignore
|
|
2855
|
+
_this.instance.plugins[PLUGIN_NAME].reset();
|
|
3216
2856
|
});
|
|
3217
2857
|
};
|
|
3218
2858
|
|
|
3219
2859
|
this.debug = function (enabled) {
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3224
|
-
return [4
|
|
3225
|
-
/*yield*/
|
|
3226
|
-
, this.waitUntilInitialized()];
|
|
3227
|
-
|
|
3228
|
-
case 1:
|
|
3229
|
-
_a.sent();
|
|
3230
|
-
|
|
3231
|
-
this.instance.plugins[PLUGIN_NAME].debug(enabled);
|
|
3232
|
-
return [2
|
|
3233
|
-
/*return*/
|
|
3234
|
-
];
|
|
3235
|
-
}
|
|
3236
|
-
});
|
|
2860
|
+
_this.onIsInitialized(function () {
|
|
2861
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2862
|
+
// @ts-ignore
|
|
2863
|
+
_this.instance.plugins[PLUGIN_NAME].debug(enabled);
|
|
3237
2864
|
});
|
|
3238
2865
|
};
|
|
3239
2866
|
|
|
@@ -3241,11 +2868,20 @@
|
|
|
3241
2868
|
cb(_this.profileState);
|
|
3242
2869
|
return _this.instance.on(NINETAILED_TRACKER_EVENTS.profile, function (_a) {
|
|
3243
2870
|
var payload = _a.payload;
|
|
3244
|
-
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
2871
|
+
|
|
2872
|
+
if (payload.error) {
|
|
2873
|
+
cb(__assign(__assign({}, _this._profileState), {
|
|
2874
|
+
status: 'error',
|
|
2875
|
+
profile: payload.profile,
|
|
2876
|
+
error: payload.error
|
|
2877
|
+
}));
|
|
2878
|
+
} else {
|
|
2879
|
+
cb(__assign(__assign({}, _this._profileState), {
|
|
2880
|
+
status: 'success',
|
|
2881
|
+
profile: payload.profile,
|
|
2882
|
+
error: null
|
|
2883
|
+
}));
|
|
2884
|
+
}
|
|
3249
2885
|
});
|
|
3250
2886
|
};
|
|
3251
2887
|
|
|
@@ -3255,7 +2891,6 @@
|
|
|
3255
2891
|
onIsInitialized();
|
|
3256
2892
|
} else {
|
|
3257
2893
|
var detachOnReadyListener_1 = _this.instance.on('ready', function () {
|
|
3258
|
-
_this.isInitialized = true;
|
|
3259
2894
|
onIsInitialized();
|
|
3260
2895
|
detachOnReadyListener_1();
|
|
3261
2896
|
});
|
|
@@ -3275,27 +2910,27 @@
|
|
|
3275
2910
|
this._profileState = {
|
|
3276
2911
|
status: 'success',
|
|
3277
2912
|
profile: profile,
|
|
3278
|
-
error:
|
|
2913
|
+
error: null,
|
|
3279
2914
|
from: 'hydrated'
|
|
3280
2915
|
};
|
|
3281
2916
|
} else {
|
|
3282
2917
|
this._profileState = {
|
|
3283
2918
|
status: 'loading',
|
|
3284
2919
|
profile: null,
|
|
3285
|
-
error:
|
|
2920
|
+
error: null,
|
|
3286
2921
|
from: 'api'
|
|
3287
2922
|
};
|
|
3288
2923
|
}
|
|
3289
2924
|
|
|
3290
2925
|
if (typeof onLog === 'function') {
|
|
3291
|
-
logger.addSink(new OnLogLogSink(onLog));
|
|
2926
|
+
experience_jsShared.logger.addSink(new experience_jsShared.OnLogLogSink(onLog));
|
|
3292
2927
|
}
|
|
3293
2928
|
|
|
3294
2929
|
if (typeof onError === 'function') {
|
|
3295
|
-
logger.addSink(new OnErrorLogSink(onError));
|
|
2930
|
+
experience_jsShared.logger.addSink(new experience_jsShared.OnErrorLogSink(onError));
|
|
3296
2931
|
}
|
|
3297
2932
|
|
|
3298
|
-
this.logger = logger;
|
|
2933
|
+
this.logger = experience_jsShared.logger;
|
|
3299
2934
|
this.instance = Analytics__default["default"]({
|
|
3300
2935
|
app: 'ninetailed',
|
|
3301
2936
|
plugins: __spreadArray(__spreadArray([], this.plugins, true), [ninetailedPlugin({
|
|
@@ -3308,8 +2943,10 @@
|
|
|
3308
2943
|
preview: preview
|
|
3309
2944
|
})], false)
|
|
3310
2945
|
});
|
|
3311
|
-
this.
|
|
3312
|
-
|
|
2946
|
+
var detachOnReadyListener = this.instance.on('ready', function () {
|
|
2947
|
+
_this.isInitialized = true;
|
|
2948
|
+
experience_jsShared.logger.info('Ninetailed Experience.js SDK is completely initialized.');
|
|
2949
|
+
detachOnReadyListener();
|
|
3313
2950
|
}); // put in private method
|
|
3314
2951
|
|
|
3315
2952
|
this.onProfileChange(function (profileState) {
|
|
@@ -3364,12 +3001,12 @@
|
|
|
3364
3001
|
if (status === 'loading') {
|
|
3365
3002
|
return {
|
|
3366
3003
|
loading: true,
|
|
3367
|
-
variant: __assign({
|
|
3004
|
+
variant: __assign(__assign({}, baseline), {
|
|
3368
3005
|
id: 'baseline',
|
|
3369
3006
|
audience: {
|
|
3370
3007
|
id: 'baseline'
|
|
3371
3008
|
}
|
|
3372
|
-
}
|
|
3009
|
+
}),
|
|
3373
3010
|
audience: {
|
|
3374
3011
|
id: 'baseline'
|
|
3375
3012
|
},
|
|
@@ -3381,12 +3018,12 @@
|
|
|
3381
3018
|
if (status === 'error') {
|
|
3382
3019
|
return {
|
|
3383
3020
|
loading: false,
|
|
3384
|
-
variant: __assign({
|
|
3021
|
+
variant: __assign(__assign({}, baseline), {
|
|
3385
3022
|
id: 'baseline',
|
|
3386
3023
|
audience: {
|
|
3387
3024
|
id: 'baseline'
|
|
3388
3025
|
}
|
|
3389
|
-
}
|
|
3026
|
+
}),
|
|
3390
3027
|
audience: {
|
|
3391
3028
|
id: 'baseline'
|
|
3392
3029
|
},
|
|
@@ -3402,15 +3039,16 @@
|
|
|
3402
3039
|
});
|
|
3403
3040
|
|
|
3404
3041
|
if (variant) {
|
|
3405
|
-
|
|
3042
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
3043
|
+
// @ts-ignore
|
|
3044
|
+
if ((options === null || options === void 0 ? void 0 : options.holdout) || -1 > (profile === null || profile === void 0 ? void 0 : profile.random)) {
|
|
3406
3045
|
return {
|
|
3407
3046
|
loading: false,
|
|
3408
|
-
variant: __assign({
|
|
3409
|
-
id: baseline.id,
|
|
3047
|
+
variant: __assign(__assign({}, baseline), {
|
|
3410
3048
|
audience: {
|
|
3411
3049
|
id: 'baseline'
|
|
3412
3050
|
}
|
|
3413
|
-
}
|
|
3051
|
+
}),
|
|
3414
3052
|
audience: __assign(__assign({}, variant.audience), {
|
|
3415
3053
|
id: variant.audience.id
|
|
3416
3054
|
}),
|
|
@@ -3436,12 +3074,12 @@
|
|
|
3436
3074
|
|
|
3437
3075
|
return {
|
|
3438
3076
|
loading: false,
|
|
3439
|
-
variant: __assign({
|
|
3077
|
+
variant: __assign(__assign({}, baseline), {
|
|
3440
3078
|
id: 'baseline',
|
|
3441
3079
|
audience: {
|
|
3442
3080
|
id: 'baseline'
|
|
3443
3081
|
}
|
|
3444
|
-
}
|
|
3082
|
+
}),
|
|
3445
3083
|
audience: {
|
|
3446
3084
|
id: 'baseline'
|
|
3447
3085
|
},
|
|
@@ -3453,9 +3091,11 @@
|
|
|
3453
3091
|
var EXPERIENCE_TRAIT_PREFIX = 'nt_experiment_';
|
|
3454
3092
|
|
|
3455
3093
|
var selectBaselineWithVariants = function selectBaselineWithVariants(experience, baseline) {
|
|
3456
|
-
|
|
3094
|
+
var _a;
|
|
3095
|
+
|
|
3096
|
+
return (_a = experience.components.find(function (baselineWithVariants) {
|
|
3457
3097
|
return baselineWithVariants.baseline.id === baseline.id;
|
|
3458
|
-
});
|
|
3098
|
+
})) !== null && _a !== void 0 ? _a : null;
|
|
3459
3099
|
};
|
|
3460
3100
|
|
|
3461
3101
|
var selectVariants = function selectVariants(experience, baseline) {
|
|
@@ -3473,63 +3113,13 @@
|
|
|
3473
3113
|
return variants.length > 0;
|
|
3474
3114
|
};
|
|
3475
3115
|
|
|
3476
|
-
var global$9 = global$I;
|
|
3477
|
-
var classof$2 = classof$6;
|
|
3478
|
-
|
|
3479
|
-
var String$1 = global$9.String;
|
|
3480
|
-
|
|
3481
|
-
var toString$7 = function (argument) {
|
|
3482
|
-
if (classof$2(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
|
|
3483
|
-
return String$1(argument);
|
|
3484
|
-
};
|
|
3485
|
-
|
|
3486
|
-
var isObject = isObject$8;
|
|
3487
|
-
var classof$1 = classofRaw$1;
|
|
3488
|
-
var wellKnownSymbol$3 = wellKnownSymbol$e;
|
|
3489
|
-
|
|
3490
|
-
var MATCH$1 = wellKnownSymbol$3('match');
|
|
3491
|
-
|
|
3492
|
-
// `IsRegExp` abstract operation
|
|
3493
|
-
// https://tc39.es/ecma262/#sec-isregexp
|
|
3494
|
-
var isRegexp = function (it) {
|
|
3495
|
-
var isRegExp;
|
|
3496
|
-
return isObject(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$1(it) == 'RegExp');
|
|
3497
|
-
};
|
|
3498
|
-
|
|
3499
|
-
var global$8 = global$I;
|
|
3500
|
-
var isRegExp$1 = isRegexp;
|
|
3501
|
-
|
|
3502
|
-
var TypeError$3 = global$8.TypeError;
|
|
3503
|
-
|
|
3504
|
-
var notARegexp = function (it) {
|
|
3505
|
-
if (isRegExp$1(it)) {
|
|
3506
|
-
throw TypeError$3("The method doesn't accept regular expressions");
|
|
3507
|
-
} return it;
|
|
3508
|
-
};
|
|
3509
|
-
|
|
3510
|
-
var wellKnownSymbol$2 = wellKnownSymbol$e;
|
|
3511
|
-
|
|
3512
|
-
var MATCH = wellKnownSymbol$2('match');
|
|
3513
|
-
|
|
3514
|
-
var correctIsRegexpLogic = function (METHOD_NAME) {
|
|
3515
|
-
var regexp = /./;
|
|
3516
|
-
try {
|
|
3517
|
-
'/./'[METHOD_NAME](regexp);
|
|
3518
|
-
} catch (error1) {
|
|
3519
|
-
try {
|
|
3520
|
-
regexp[MATCH] = false;
|
|
3521
|
-
return '/./'[METHOD_NAME](regexp);
|
|
3522
|
-
} catch (error2) { /* empty */ }
|
|
3523
|
-
} return false;
|
|
3524
|
-
};
|
|
3525
|
-
|
|
3526
3116
|
var $$3 = _export;
|
|
3527
3117
|
var uncurryThis$8 = functionUncurryThis;
|
|
3528
3118
|
var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
|
|
3529
3119
|
var toLength$2 = toLength$4;
|
|
3530
|
-
var toString$6 = toString$
|
|
3120
|
+
var toString$6 = toString$8;
|
|
3531
3121
|
var notARegExp = notARegexp;
|
|
3532
|
-
var requireObjectCoercible$4 = requireObjectCoercible$
|
|
3122
|
+
var requireObjectCoercible$4 = requireObjectCoercible$8;
|
|
3533
3123
|
var correctIsRegExpLogic = correctIsRegexpLogic;
|
|
3534
3124
|
|
|
3535
3125
|
// eslint-disable-next-line es/no-string-prototype-startswith -- safe
|
|
@@ -3739,7 +3329,7 @@
|
|
|
3739
3329
|
/* eslint-disable regexp/no-useless-quantifier -- testing */
|
|
3740
3330
|
var call$3 = functionCall;
|
|
3741
3331
|
var uncurryThis$7 = functionUncurryThis;
|
|
3742
|
-
var toString$5 = toString$
|
|
3332
|
+
var toString$5 = toString$8;
|
|
3743
3333
|
var regexpFlags = regexpFlags$1;
|
|
3744
3334
|
var stickyHelpers$1 = regexpStickyHelpers;
|
|
3745
3335
|
var shared = shared$4.exports;
|
|
@@ -3937,8 +3527,8 @@
|
|
|
3937
3527
|
|
|
3938
3528
|
var uncurryThis$5 = functionUncurryThis;
|
|
3939
3529
|
var toIntegerOrInfinity$1 = toIntegerOrInfinity$4;
|
|
3940
|
-
var toString$4 = toString$
|
|
3941
|
-
var requireObjectCoercible$3 = requireObjectCoercible$
|
|
3530
|
+
var toString$4 = toString$8;
|
|
3531
|
+
var requireObjectCoercible$3 = requireObjectCoercible$8;
|
|
3942
3532
|
|
|
3943
3533
|
var charAt$2 = uncurryThis$5(''.charAt);
|
|
3944
3534
|
var charCodeAt = uncurryThis$5(''.charCodeAt);
|
|
@@ -4056,8 +3646,8 @@
|
|
|
4056
3646
|
var isCallable = isCallable$g;
|
|
4057
3647
|
var toIntegerOrInfinity = toIntegerOrInfinity$4;
|
|
4058
3648
|
var toLength$1 = toLength$4;
|
|
4059
|
-
var toString$3 = toString$
|
|
4060
|
-
var requireObjectCoercible$2 = requireObjectCoercible$
|
|
3649
|
+
var toString$3 = toString$8;
|
|
3650
|
+
var requireObjectCoercible$2 = requireObjectCoercible$8;
|
|
4061
3651
|
var advanceStringIndex$1 = advanceStringIndex$2;
|
|
4062
3652
|
var getMethod$1 = getMethod$5;
|
|
4063
3653
|
var getSubstitution = getSubstitution$1;
|
|
@@ -4238,13 +3828,13 @@
|
|
|
4238
3828
|
activeExperiments = _a.activeExperiments,
|
|
4239
3829
|
profile = _a.profile;
|
|
4240
3830
|
var trafficRandom = getTrafficRandom(profile, experience);
|
|
4241
|
-
logger.info("The traffic random factor for experience ".concat(experience.id, " is ").concat(trafficRandom, ". It's traffic allocation is set to ").concat(experience.trafficAllocation, "."));
|
|
3831
|
+
experience_jsShared.logger.info("The traffic random factor for experience ".concat(experience.id, " is ").concat(trafficRandom, ". It's traffic allocation is set to ").concat(experience.trafficAllocation, "."));
|
|
4242
3832
|
var isInTrafficRange = experience.trafficAllocation > trafficRandom;
|
|
4243
3833
|
var matchesAudience = !experience.audience || includes__default["default"](profile.audiences, experience.audience.id);
|
|
4244
3834
|
var hasActiveExperiment = !!find__default["default"](activeExperiments, {
|
|
4245
3835
|
id: experience.id
|
|
4246
3836
|
});
|
|
4247
|
-
logger.info("Is the profile in traffic allocation range? ".concat(isInTrafficRange ? 'yes' : 'no', ".\n\n Does the profile match the audience of the experience? ").concat(matchesAudience ? 'yes' : 'no', ".\n\n Is there an active experiment for this profile? ").concat(hasActiveExperiment ? 'yes' : 'no', "."));
|
|
3837
|
+
experience_jsShared.logger.info("Is the profile in traffic allocation range? ".concat(isInTrafficRange ? 'yes' : 'no', ".\n\n Does the profile match the audience of the experience? ").concat(matchesAudience ? 'yes' : 'no', ".\n\n Is there an active experiment for this profile? ").concat(hasActiveExperiment ? 'yes' : 'no', "."));
|
|
4248
3838
|
return isInTrafficRange && (matchesAudience || // if the expriment is active already then it's selectible without further contraints to be fullfilled
|
|
4249
3839
|
hasActiveExperiment);
|
|
4250
3840
|
};
|
|
@@ -4264,20 +3854,30 @@
|
|
|
4264
3854
|
profile: profile
|
|
4265
3855
|
});
|
|
4266
3856
|
});
|
|
4267
|
-
return selectedExperience;
|
|
3857
|
+
return selectedExperience !== null && selectedExperience !== void 0 ? selectedExperience : null;
|
|
4268
3858
|
};
|
|
4269
3859
|
|
|
4270
3860
|
var selectDistribution = function selectDistribution(_a) {
|
|
4271
3861
|
var experience = _a.experience,
|
|
4272
3862
|
profile = _a.profile;
|
|
4273
3863
|
var distributionRandom = getDistributionRandom(profile, experience);
|
|
4274
|
-
logger.log("The distribution random factor for experience ".concat(experience.id, " is ").concat(distributionRandom, ". It's distribution is set to ").concat(JSON.stringify(experience.distribution, null, 2), "."));
|
|
3864
|
+
experience_jsShared.logger.log("The distribution random factor for experience ".concat(experience.id, " is ").concat(distributionRandom, ". It's distribution is set to ").concat(JSON.stringify(experience.distribution, null, 2), "."));
|
|
4275
3865
|
var distribution = find__default["default"](experience.distribution, function (_a) {
|
|
4276
3866
|
var start = _a.start,
|
|
4277
3867
|
end = _a.end;
|
|
4278
3868
|
return distributionRandom >= start && distributionRandom <= end;
|
|
4279
3869
|
} // this overlaps on one value for each boundary but we just find the first match
|
|
4280
3870
|
);
|
|
3871
|
+
|
|
3872
|
+
if (!distribution) {
|
|
3873
|
+
// This should never happen. If it happens then the distribution is not configured correctly. So we just return the baseline.
|
|
3874
|
+
return {
|
|
3875
|
+
index: 0,
|
|
3876
|
+
start: 0,
|
|
3877
|
+
end: 1
|
|
3878
|
+
};
|
|
3879
|
+
}
|
|
3880
|
+
|
|
4281
3881
|
return distribution;
|
|
4282
3882
|
};
|
|
4283
3883
|
|
|
@@ -4431,11 +4031,11 @@
|
|
|
4431
4031
|
var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic;
|
|
4432
4032
|
var isRegExp = isRegexp;
|
|
4433
4033
|
var anObject = anObject$e;
|
|
4434
|
-
var requireObjectCoercible$1 = requireObjectCoercible$
|
|
4034
|
+
var requireObjectCoercible$1 = requireObjectCoercible$8;
|
|
4435
4035
|
var speciesConstructor = speciesConstructor$2;
|
|
4436
4036
|
var advanceStringIndex = advanceStringIndex$2;
|
|
4437
4037
|
var toLength = toLength$4;
|
|
4438
|
-
var toString$2 = toString$
|
|
4038
|
+
var toString$2 = toString$8;
|
|
4439
4039
|
var getMethod = getMethod$5;
|
|
4440
4040
|
var arraySlice = arraySliceSimple;
|
|
4441
4041
|
var callRegExpExec = regexpExecAbstract;
|
|
@@ -4586,8 +4186,8 @@
|
|
|
4586
4186
|
'\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
|
|
4587
4187
|
|
|
4588
4188
|
var uncurryThis$1 = functionUncurryThis;
|
|
4589
|
-
var requireObjectCoercible = requireObjectCoercible$
|
|
4590
|
-
var toString$1 = toString$
|
|
4189
|
+
var requireObjectCoercible = requireObjectCoercible$8;
|
|
4190
|
+
var toString$1 = toString$8;
|
|
4591
4191
|
var whitespaces$1 = whitespaces$2;
|
|
4592
4192
|
|
|
4593
4193
|
var replace = uncurryThis$1(''.replace);
|
|
@@ -4620,7 +4220,7 @@
|
|
|
4620
4220
|
var global$1 = global$I;
|
|
4621
4221
|
var fails = fails$i;
|
|
4622
4222
|
var uncurryThis = functionUncurryThis;
|
|
4623
|
-
var toString = toString$
|
|
4223
|
+
var toString = toString$8;
|
|
4624
4224
|
var trim = stringTrim.trim;
|
|
4625
4225
|
var whitespaces = whitespaces$2;
|
|
4626
4226
|
|
|
@@ -4666,7 +4266,7 @@
|
|
|
4666
4266
|
variantIndex: variantIndex
|
|
4667
4267
|
};
|
|
4668
4268
|
}).filter(function (x) {
|
|
4669
|
-
return x;
|
|
4269
|
+
return !!x;
|
|
4670
4270
|
}).reduce(function (acc, curr) {
|
|
4671
4271
|
var _a;
|
|
4672
4272
|
|
|
@@ -4674,14 +4274,16 @@
|
|
|
4674
4274
|
}, {});
|
|
4675
4275
|
};
|
|
4676
4276
|
|
|
4677
|
-
exports.
|
|
4277
|
+
exports.ANONYMOUS_ID = ANONYMOUS_ID;
|
|
4278
|
+
exports.DEBUG_FLAG = DEBUG_FLAG;
|
|
4678
4279
|
exports.EXPERIENCE_TRAIT_PREFIX = EXPERIENCE_TRAIT_PREFIX;
|
|
4280
|
+
exports.LEGACY_ANONYMOUS_ID = LEGACY_ANONYMOUS_ID;
|
|
4679
4281
|
exports.NINETAILED_TRACKER_EVENTS = NINETAILED_TRACKER_EVENTS;
|
|
4680
4282
|
exports.Ninetailed = Ninetailed;
|
|
4681
4283
|
exports.PLUGIN_NAME = PLUGIN_NAME;
|
|
4284
|
+
exports.PROFILE_FALLBACK_CACHE = PROFILE_FALLBACK_CACHE;
|
|
4682
4285
|
exports.decodeExperienceVariantsMap = decodeExperienceVariantsMap;
|
|
4683
4286
|
exports.isExperienceMatch = isExperienceMatch;
|
|
4684
|
-
exports.logger = logger;
|
|
4685
4287
|
exports.ninetailedPlugin = ninetailedPlugin;
|
|
4686
4288
|
exports.selectActiveExperiments = selectActiveExperiments;
|
|
4687
4289
|
exports.selectDistribution = selectDistribution;
|