@kameleoon/javascript-sdk-core 0.0.3 → 1.0.0

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.
Files changed (261) hide show
  1. package/README.md +7 -3
  2. package/dist/campaignConfiguration/campaignConfiguration.d.ts +46 -0
  3. package/dist/campaignConfiguration/campaignConfiguration.js +217 -0
  4. package/dist/campaignConfiguration/campaignConfiguration.js.map +1 -0
  5. package/dist/campaignConfiguration/constants.d.ts +18 -0
  6. package/dist/campaignConfiguration/constants.js +23 -0
  7. package/dist/campaignConfiguration/constants.js.map +1 -0
  8. package/dist/campaignConfiguration/index.d.ts +2 -0
  9. package/dist/campaignConfiguration/index.js +8 -0
  10. package/dist/campaignConfiguration/index.js.map +1 -0
  11. package/dist/campaignConfiguration/types.d.ts +126 -0
  12. package/dist/campaignConfiguration/types.js +47 -0
  13. package/dist/campaignConfiguration/types.js.map +1 -0
  14. package/dist/clientSettings/clientSettings.d.ts +12 -0
  15. package/dist/clientSettings/clientSettings.js +29 -0
  16. package/dist/clientSettings/clientSettings.js.map +1 -0
  17. package/dist/clientSettings/index.d.ts +2 -0
  18. package/dist/clientSettings/index.js +6 -0
  19. package/dist/clientSettings/index.js.map +1 -0
  20. package/dist/clientSettings/types.d.ts +6 -0
  21. package/dist/{interfaces/interfaces.js → clientSettings/types.js} +1 -1
  22. package/dist/clientSettings/types.js.map +1 -0
  23. package/dist/constants.d.ts +10 -16
  24. package/dist/constants.js +13 -20
  25. package/dist/constants.js.map +1 -1
  26. package/dist/eventSource/constants.d.ts +1 -0
  27. package/dist/eventSource/constants.js +5 -0
  28. package/dist/eventSource/constants.js.map +1 -0
  29. package/dist/eventSource/externalEventSource.d.ts +12 -0
  30. package/dist/eventSource/externalEventSource.js +26 -0
  31. package/dist/eventSource/externalEventSource.js.map +1 -0
  32. package/dist/eventSource/index.d.ts +3 -0
  33. package/dist/eventSource/index.js +8 -0
  34. package/dist/eventSource/index.js.map +1 -0
  35. package/dist/eventSource/types.d.ts +47 -0
  36. package/dist/eventSource/types.js +3 -0
  37. package/dist/eventSource/types.js.map +1 -0
  38. package/dist/hasher/constants.d.ts +1 -0
  39. package/dist/hasher/constants.js +5 -0
  40. package/dist/hasher/constants.js.map +1 -0
  41. package/dist/hasher/hasher.d.ts +6 -0
  42. package/dist/hasher/hasher.js +34 -0
  43. package/dist/hasher/hasher.js.map +1 -0
  44. package/dist/hasher/index.d.ts +1 -0
  45. package/dist/hasher/index.js +6 -0
  46. package/dist/hasher/index.js.map +1 -0
  47. package/dist/hasher/types.d.ts +12 -0
  48. package/dist/hasher/types.js +3 -0
  49. package/dist/hasher/types.js.map +1 -0
  50. package/dist/index.d.ts +10 -3
  51. package/dist/index.js +25 -7
  52. package/dist/index.js.map +1 -1
  53. package/dist/kameleoonClient.d.ts +189 -100
  54. package/dist/kameleoonClient.js +238 -701
  55. package/dist/kameleoonClient.js.map +1 -1
  56. package/dist/kameleoonData/browser.d.ts +21 -0
  57. package/dist/kameleoonData/browser.js +41 -0
  58. package/dist/kameleoonData/browser.js.map +1 -0
  59. package/dist/kameleoonData/constants.d.ts +1 -0
  60. package/dist/kameleoonData/constants.js +5 -0
  61. package/dist/kameleoonData/constants.js.map +1 -0
  62. package/dist/kameleoonData/conversion.d.ts +23 -0
  63. package/dist/kameleoonData/conversion.js +49 -0
  64. package/dist/kameleoonData/conversion.js.map +1 -0
  65. package/dist/kameleoonData/customData.d.ts +33 -0
  66. package/dist/kameleoonData/customData.js +68 -0
  67. package/dist/kameleoonData/customData.js.map +1 -0
  68. package/dist/kameleoonData/device.d.ts +21 -0
  69. package/dist/kameleoonData/device.js +41 -0
  70. package/dist/kameleoonData/device.js.map +1 -0
  71. package/dist/kameleoonData/index.d.ts +7 -0
  72. package/dist/kameleoonData/index.js +20 -0
  73. package/dist/kameleoonData/index.js.map +1 -0
  74. package/dist/kameleoonData/nonce.d.ts +5 -0
  75. package/dist/kameleoonData/nonce.js +20 -0
  76. package/dist/kameleoonData/nonce.js.map +1 -0
  77. package/dist/kameleoonData/pageView.d.ts +24 -0
  78. package/dist/kameleoonData/pageView.js +54 -0
  79. package/dist/kameleoonData/pageView.js.map +1 -0
  80. package/dist/kameleoonData/types.d.ts +100 -0
  81. package/dist/kameleoonData/types.js +36 -0
  82. package/dist/kameleoonData/types.js.map +1 -0
  83. package/dist/kameleoonData/userAgent.d.ts +18 -0
  84. package/dist/kameleoonData/userAgent.js +33 -0
  85. package/dist/kameleoonData/userAgent.js.map +1 -0
  86. package/dist/kameleoonError/constants.d.ts +22 -0
  87. package/dist/kameleoonError/constants.js +25 -0
  88. package/dist/kameleoonError/constants.js.map +1 -0
  89. package/dist/kameleoonError/helpers.d.ts +1 -0
  90. package/dist/kameleoonError/helpers.js +8 -0
  91. package/dist/kameleoonError/helpers.js.map +1 -0
  92. package/dist/kameleoonError/index.d.ts +3 -0
  93. package/dist/kameleoonError/index.js +10 -0
  94. package/dist/kameleoonError/index.js.map +1 -0
  95. package/dist/kameleoonError/kameleoonError.d.ts +24 -0
  96. package/dist/kameleoonError/kameleoonError.js +64 -0
  97. package/dist/kameleoonError/kameleoonError.js.map +1 -0
  98. package/dist/kameleoonError/types.d.ts +20 -0
  99. package/dist/kameleoonError/types.js +25 -0
  100. package/dist/kameleoonError/types.js.map +1 -0
  101. package/dist/kameleoonUtils.d.ts +11 -10
  102. package/dist/kameleoonUtils.js +42 -128
  103. package/dist/kameleoonUtils.js.map +1 -1
  104. package/dist/requester/constants.d.ts +15 -0
  105. package/dist/requester/constants.js +53 -0
  106. package/dist/requester/constants.js.map +1 -0
  107. package/dist/requester/index.d.ts +3 -0
  108. package/dist/requester/index.js +10 -0
  109. package/dist/requester/index.js.map +1 -0
  110. package/dist/requester/requester.d.ts +23 -0
  111. package/dist/requester/requester.js +121 -0
  112. package/dist/requester/requester.js.map +1 -0
  113. package/dist/requester/types.d.ts +43 -0
  114. package/dist/requester/types.js +39 -0
  115. package/dist/requester/types.js.map +1 -0
  116. package/dist/storage/constants.d.ts +9 -0
  117. package/dist/storage/constants.js +14 -0
  118. package/dist/storage/constants.js.map +1 -0
  119. package/dist/storage/externalStorage.d.ts +11 -0
  120. package/dist/storage/externalStorage.js +34 -0
  121. package/dist/storage/externalStorage.js.map +1 -0
  122. package/dist/storage/index.d.ts +3 -0
  123. package/dist/storage/index.js +8 -0
  124. package/dist/storage/index.js.map +1 -0
  125. package/dist/storage/types.d.ts +52 -11
  126. package/dist/targeting/conditions/conditionFactory.d.ts +6 -0
  127. package/dist/targeting/conditions/conditionFactory.js +26 -0
  128. package/dist/targeting/conditions/conditionFactory.js.map +1 -0
  129. package/dist/targeting/conditions/customDataCondition.d.ts +16 -0
  130. package/dist/targeting/conditions/customDataCondition.js +99 -0
  131. package/dist/targeting/conditions/customDataCondition.js.map +1 -0
  132. package/dist/targeting/conditions/exclusiveExperimentCondition.d.ts +9 -0
  133. package/dist/targeting/conditions/exclusiveExperimentCondition.js +21 -0
  134. package/dist/targeting/conditions/exclusiveExperimentCondition.js.map +1 -0
  135. package/dist/targeting/conditions/index.d.ts +5 -0
  136. package/dist/targeting/conditions/index.js +12 -0
  137. package/dist/targeting/conditions/index.js.map +1 -0
  138. package/dist/targeting/conditions/targetExperimentCondition.d.ts +13 -0
  139. package/dist/targeting/conditions/targetExperimentCondition.js +42 -0
  140. package/dist/targeting/conditions/targetExperimentCondition.js.map +1 -0
  141. package/dist/targeting/conditions/types.d.ts +22 -11
  142. package/dist/targeting/index.d.ts +3 -0
  143. package/dist/targeting/index.js +15 -0
  144. package/dist/targeting/index.js.map +1 -0
  145. package/dist/targeting/targetingNode.d.ts +21 -0
  146. package/dist/targeting/targetingNode.js +40 -0
  147. package/dist/targeting/targetingNode.js.map +1 -0
  148. package/dist/targeting/targetingTree.d.ts +16 -8
  149. package/dist/targeting/targetingTree.js +112 -10
  150. package/dist/targeting/targetingTree.js.map +1 -1
  151. package/dist/targeting/types.d.ts +127 -0
  152. package/dist/targeting/types.js +93 -0
  153. package/dist/targeting/types.js.map +1 -0
  154. package/dist/types.d.ts +135 -5
  155. package/dist/types.js +28 -0
  156. package/dist/types.js.map +1 -1
  157. package/dist/utilities/constants.d.ts +1 -0
  158. package/dist/utilities/constants.js +5 -0
  159. package/dist/utilities/constants.js.map +1 -0
  160. package/dist/utilities/index.d.ts +1 -0
  161. package/dist/utilities/index.js +6 -0
  162. package/dist/utilities/index.js.map +1 -0
  163. package/dist/utilities/types.d.ts +18 -0
  164. package/dist/utilities/types.js +3 -0
  165. package/dist/utilities/types.js.map +1 -0
  166. package/dist/utilities/utilities.d.ts +13 -0
  167. package/dist/utilities/utilities.js +119 -0
  168. package/dist/utilities/utilities.js.map +1 -0
  169. package/dist/variationConfiguration/index.d.ts +2 -0
  170. package/dist/variationConfiguration/index.js +6 -0
  171. package/dist/variationConfiguration/index.js.map +1 -0
  172. package/dist/variationConfiguration/types.d.ts +25 -0
  173. package/dist/variationConfiguration/types.js +3 -0
  174. package/dist/variationConfiguration/types.js.map +1 -0
  175. package/dist/variationConfiguration/variation.d.ts +13 -0
  176. package/dist/variationConfiguration/variation.js +38 -0
  177. package/dist/variationConfiguration/variation.js.map +1 -0
  178. package/dist/variationConfiguration/variationConfiguration.d.ts +36 -0
  179. package/dist/variationConfiguration/variationConfiguration.js +248 -0
  180. package/dist/variationConfiguration/variationConfiguration.js.map +1 -0
  181. package/package.json +19 -9
  182. package/dist/configurations/configuration.d.ts +0 -15
  183. package/dist/configurations/configuration.js +0 -31
  184. package/dist/configurations/configuration.js.map +0 -1
  185. package/dist/configurations/experiment.d.ts +0 -13
  186. package/dist/configurations/experiment.js +0 -54
  187. package/dist/configurations/experiment.js.map +0 -1
  188. package/dist/configurations/featureFlag.d.ts +0 -23
  189. package/dist/configurations/featureFlag.js +0 -105
  190. package/dist/configurations/featureFlag.js.map +0 -1
  191. package/dist/configurations/variation.d.ts +0 -15
  192. package/dist/configurations/variation.js +0 -14
  193. package/dist/configurations/variation.js.map +0 -1
  194. package/dist/data.d.ts +0 -67
  195. package/dist/data.js +0 -127
  196. package/dist/data.js.map +0 -1
  197. package/dist/exceptions/credentialsNotFound.d.ts +0 -6
  198. package/dist/exceptions/credentialsNotFound.js +0 -29
  199. package/dist/exceptions/credentialsNotFound.js.map +0 -1
  200. package/dist/exceptions/experimentConfigurationNotFound.d.ts +0 -6
  201. package/dist/exceptions/experimentConfigurationNotFound.js +0 -29
  202. package/dist/exceptions/experimentConfigurationNotFound.js.map +0 -1
  203. package/dist/exceptions/featureConfigurationNotFound.d.ts +0 -6
  204. package/dist/exceptions/featureConfigurationNotFound.js +0 -29
  205. package/dist/exceptions/featureConfigurationNotFound.js.map +0 -1
  206. package/dist/exceptions/notActivated.d.ts +0 -6
  207. package/dist/exceptions/notActivated.js +0 -29
  208. package/dist/exceptions/notActivated.js.map +0 -1
  209. package/dist/exceptions/notTargeted.d.ts +0 -6
  210. package/dist/exceptions/notTargeted.js +0 -29
  211. package/dist/exceptions/notTargeted.js.map +0 -1
  212. package/dist/exceptions/siteCodeDisabled.d.ts +0 -5
  213. package/dist/exceptions/siteCodeDisabled.js +0 -30
  214. package/dist/exceptions/siteCodeDisabled.js.map +0 -1
  215. package/dist/exceptions/variationConfigurationNotFound.d.ts +0 -6
  216. package/dist/exceptions/variationConfigurationNotFound.js +0 -29
  217. package/dist/exceptions/variationConfigurationNotFound.js.map +0 -1
  218. package/dist/exceptions/visitorCodeNotValid.d.ts +0 -5
  219. package/dist/exceptions/visitorCodeNotValid.js +0 -30
  220. package/dist/exceptions/visitorCodeNotValid.js.map +0 -1
  221. package/dist/interfaces/interfaces.d.ts +0 -81
  222. package/dist/interfaces/interfaces.js.map +0 -1
  223. package/dist/nonce.d.ts +0 -1
  224. package/dist/nonce.js +0 -16
  225. package/dist/nonce.js.map +0 -1
  226. package/dist/realTimeConfigurationService.d.ts +0 -12
  227. package/dist/realTimeConfigurationService.js +0 -24
  228. package/dist/realTimeConfigurationService.js.map +0 -1
  229. package/dist/storage/variationStorage.d.ts +0 -11
  230. package/dist/storage/variationStorage.js +0 -159
  231. package/dist/storage/variationStorage.js.map +0 -1
  232. package/dist/storage/visitorVariation.d.ts +0 -9
  233. package/dist/storage/visitorVariation.js +0 -22
  234. package/dist/storage/visitorVariation.js.map +0 -1
  235. package/dist/targeting/conditions/customDatum.d.ts +0 -12
  236. package/dist/targeting/conditions/customDatum.js +0 -129
  237. package/dist/targeting/conditions/customDatum.js.map +0 -1
  238. package/dist/targeting/conditions/exclusiveExperiment.d.ts +0 -9
  239. package/dist/targeting/conditions/exclusiveExperiment.js +0 -45
  240. package/dist/targeting/conditions/exclusiveExperiment.js.map +0 -1
  241. package/dist/targeting/conditions/targetExperiment.d.ts +0 -14
  242. package/dist/targeting/conditions/targetExperiment.js +0 -57
  243. package/dist/targeting/conditions/targetExperiment.js.map +0 -1
  244. package/dist/targeting/targetingCondition.d.ts +0 -7
  245. package/dist/targeting/targetingCondition.js +0 -9
  246. package/dist/targeting/targetingCondition.js.map +0 -1
  247. package/dist/targeting/targetingConditionsFactory.d.ts +0 -7
  248. package/dist/targeting/targetingConditionsFactory.js +0 -30
  249. package/dist/targeting/targetingConditionsFactory.js.map +0 -1
  250. package/dist/targeting/targetingData.d.ts +0 -7
  251. package/dist/targeting/targetingData.js +0 -11
  252. package/dist/targeting/targetingData.js.map +0 -1
  253. package/dist/targeting/targetingEngine.d.ts +0 -6
  254. package/dist/targeting/targetingEngine.js +0 -130
  255. package/dist/targeting/targetingEngine.js.map +0 -1
  256. package/dist/targeting/targetingSegment.d.ts +0 -5
  257. package/dist/targeting/targetingSegment.js +0 -9
  258. package/dist/targeting/targetingSegment.js.map +0 -1
  259. package/dist/targeting/targetingTreeBuilder.d.ts +0 -8
  260. package/dist/targeting/targetingTreeBuilder.js +0 -127
  261. package/dist/targeting/targetingTreeBuilder.js.map +0 -1
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.VariationConfiguration = void 0;
15
+ const ts_res_1 = require("ts-res");
16
+ const hasher_1 = require("../hasher");
17
+ const variation_1 = require("./variation");
18
+ const kameleoonError_1 = require("../kameleoonError");
19
+ const utilities_1 = require("../utilities");
20
+ const types_1 = require("../campaignConfiguration/types");
21
+ const constants_1 = require("../constants");
22
+ class VariationConfiguration {
23
+ constructor(experiments, externalStorage) {
24
+ this.getAssociatedVariationId = (visitorCode, experimentId) => {
25
+ let associatedVariation;
26
+ this.storage.read().and((data) => {
27
+ var _a;
28
+ associatedVariation = (_a = data === null || data === void 0 ? void 0 : data[visitorCode]) === null || _a === void 0 ? void 0 : _a[experimentId];
29
+ });
30
+ const experiment = this.experiments.find((experiment) => experiment.id === String(experimentId));
31
+ if (!experiment) {
32
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.ExperimentConfigurationNotFound, experimentId, visitorCode));
33
+ }
34
+ const variation = new variation_1.Variation(associatedVariation);
35
+ if (variation.isValid(experiment === null || experiment === void 0 ? void 0 : experiment.respoolTime)) {
36
+ return (0, ts_res_1.Ok)(variation.id);
37
+ }
38
+ return this.assignVariation(visitorCode, experiment);
39
+ };
40
+ this.experiments = experiments;
41
+ this.storage = externalStorage;
42
+ }
43
+ getAssignedVariations(visitorCode) {
44
+ const result = this.storage.read();
45
+ if (!result.ok) {
46
+ return result;
47
+ }
48
+ const experiments = result.data[visitorCode];
49
+ if (!experiments) {
50
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.StorageRead, visitorCode));
51
+ }
52
+ return (0, ts_res_1.Ok)(experiments);
53
+ }
54
+ getFeatureFlagVariation({ visitorCode, featureFlag, targetingData, withAssignment = false, }) {
55
+ const validateResult = utilities_1.Utilities.validateVisitorCode(visitorCode);
56
+ if (!validateResult.ok) {
57
+ return (0, ts_res_1.Err)(validateResult.error);
58
+ }
59
+ const { rules, featureKey, id: featureFlagId, defaultVariationKey, } = featureFlag;
60
+ for (const rule of rules) {
61
+ const { segment, experimentId, exposition, variationByExposition } = rule;
62
+ // --- Check targeting ---
63
+ const targetingResult = utilities_1.Utilities.checkTargeting({
64
+ segment,
65
+ visitorCode,
66
+ experimentId,
67
+ targetingData,
68
+ variationConfiguration: this,
69
+ });
70
+ if (!targetingResult.ok) {
71
+ return targetingResult;
72
+ }
73
+ if (!targetingResult.data) {
74
+ continue;
75
+ }
76
+ // --- Check if there was already rule variation assigned ---
77
+ const variationResult = this.getAssignedRuleVariation(visitorCode, rule);
78
+ // --- Note ---
79
+ // We don't handle `variationResult` error here, because it can only
80
+ // return internal `DataInconsistency` exception meaning that we should just
81
+ // continue execution thus re-allocating variation
82
+ if (variationResult.ok && variationResult.data.variationId !== null) {
83
+ return (0, ts_res_1.Ok)(Object.assign(Object.assign({}, variationResult.data), { featureFlagId,
84
+ featureKey,
85
+ rule }));
86
+ }
87
+ // --- Calculate new variation (and assign if `withAssignment` is `true`) ---
88
+ const hashDouble = hasher_1.Hasher.obtainFeatureFlagHashDouble({
89
+ visitorCode,
90
+ campaignId: String(featureFlagId),
91
+ });
92
+ const reShuffledHashDouble = hasher_1.Hasher.obtainFeatureFlagHashDouble({
93
+ visitorCode,
94
+ campaignId: String(featureFlagId),
95
+ reShuffle: true,
96
+ });
97
+ // --- Note ---
98
+ // - Double check with different `hashDouble` is performed here in order
99
+ // to first theck rule's exposition for allocation and then inner `variationByExposition`
100
+ // - If `hashDouble` would be same then some of the variations couldn't have never been reached
101
+ if (hashDouble < exposition) {
102
+ let totalDeviation = 0;
103
+ for (const variation of variationByExposition) {
104
+ totalDeviation += variation.exposition;
105
+ if (reShuffledHashDouble <= totalDeviation) {
106
+ // --- Note ---
107
+ // For the `RuleType.EXPERIMENTATION` variation assignment must happen without
108
+ // calculating experiment deviation
109
+ if (rule.type === types_1.RuleType.EXPERIMENTATION && withAssignment) {
110
+ this.updateStorageData({
111
+ visitorCode,
112
+ experimentId: String(experimentId),
113
+ // --- Note ---
114
+ // For `RuleType.EXPERIMENTATION` `variationId` can not be null
115
+ variationId: variation.variationId,
116
+ });
117
+ }
118
+ const { exposition } = variation, restParameters = __rest(variation, ["exposition"]);
119
+ return (0, ts_res_1.Ok)(Object.assign(Object.assign({}, restParameters), { rule, featureFlagId, featureKey }));
120
+ }
121
+ }
122
+ }
123
+ if (rule.type === types_1.RuleType.EXPERIMENTATION) {
124
+ return (0, ts_res_1.Ok)({
125
+ variationKey: constants_1.OFF_VARIATION_KEY,
126
+ variationId: null,
127
+ featureFlagId,
128
+ featureKey,
129
+ rule,
130
+ });
131
+ }
132
+ break;
133
+ }
134
+ return (0, ts_res_1.Ok)({
135
+ featureKey,
136
+ featureFlagId,
137
+ variationKey: defaultVariationKey,
138
+ variationId: null,
139
+ rule: null,
140
+ });
141
+ }
142
+ getExperimentVariation(visitorCode, experiment) {
143
+ const { id, respoolTime, deviations } = experiment;
144
+ const hashDouble = hasher_1.Hasher.obtainExperimentHashDouble({
145
+ visitorCode,
146
+ campaignId: id,
147
+ respoolTime,
148
+ });
149
+ let isUnallocated = true;
150
+ let totalDeviation = 0;
151
+ let resultVariationId = 0;
152
+ for (const deviation of deviations) {
153
+ totalDeviation += deviation.value;
154
+ if (totalDeviation >= hashDouble) {
155
+ // --- Note ---
156
+ // If sum of all variations is less than 1 (100%), then there is a chance
157
+ // user will end up outside of any variation
158
+ isUnallocated = false;
159
+ // --- Note ---
160
+ // 'origin' is the default `variationId`, it must return id of 0
161
+ if (deviation.variationId !== 'origin') {
162
+ resultVariationId = Number(deviation.variationId);
163
+ }
164
+ break;
165
+ }
166
+ }
167
+ if (isUnallocated) {
168
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.NotAllocated, visitorCode));
169
+ }
170
+ return (0, ts_res_1.Ok)(resultVariationId);
171
+ }
172
+ assignVariation(visitorCode, experiment) {
173
+ const variationResult = this.getExperimentVariation(visitorCode, experiment);
174
+ if (!variationResult.ok) {
175
+ return variationResult;
176
+ }
177
+ const result = this.updateStorageData({
178
+ visitorCode,
179
+ experimentId: experiment.id,
180
+ variationId: variationResult.data,
181
+ });
182
+ if (!result.ok) {
183
+ return result;
184
+ }
185
+ return (0, ts_res_1.Ok)(variationResult.data);
186
+ }
187
+ updateStorageData({ visitorCode, experimentId, variationId, }) {
188
+ const result = this.storage.read();
189
+ if (!result.ok) {
190
+ // --- Note ---
191
+ // If there is a parsing error we return error
192
+ // But if there is `LocalStorageRead` error it means that
193
+ // data was read successfully and it's empty, which is not problem
194
+ // cause that might be initial `read`
195
+ if (result.error.type === kameleoonError_1.KameleoonException.StorageParse) {
196
+ return result;
197
+ }
198
+ }
199
+ const updatedVariationData = result.ok
200
+ ? result.data
201
+ : {};
202
+ const updatedVariation = {
203
+ variationId,
204
+ assignmentDate: new Date().toString(),
205
+ };
206
+ if (updatedVariationData[visitorCode]) {
207
+ updatedVariationData[visitorCode][experimentId] = updatedVariation;
208
+ }
209
+ else {
210
+ updatedVariationData[visitorCode] = {
211
+ [experimentId]: updatedVariation,
212
+ };
213
+ }
214
+ return this.storage.write(updatedVariationData);
215
+ }
216
+ getAssignedRuleVariation(visitorCode, rule) {
217
+ const emptyVariation = {
218
+ variationId: null,
219
+ variationKey: '',
220
+ };
221
+ const { experimentId, variationByExposition } = rule;
222
+ const variationsResult = this.getAssignedVariations(visitorCode);
223
+ // --- Note ---
224
+ // If there is an error, we just want to skip seeking
225
+ // for variation in the storage, not throw an error
226
+ if (!variationsResult.ok) {
227
+ return (0, ts_res_1.Ok)(emptyVariation);
228
+ }
229
+ const variations = variationsResult.data;
230
+ if (experimentId &&
231
+ typeof variations[experimentId].variationId !== undefined) {
232
+ const id = variations[experimentId].variationId;
233
+ const featureFlagVariation = variationByExposition.find((item) => item.variationId == id);
234
+ if (!featureFlagVariation) {
235
+ // --- Note ---
236
+ // This error is not described for public methods as
237
+ // it serves internal purpose of checking whether
238
+ // the persistent variation has been updated and should be re-allocated
239
+ return (0, ts_res_1.Err)(new kameleoonError_1.KameleoonError(kameleoonError_1.KameleoonException.DataInconsistency));
240
+ }
241
+ const { exposition } = featureFlagVariation, restParameters = __rest(featureFlagVariation, ["exposition"]);
242
+ return (0, ts_res_1.Ok)(Object.assign({}, restParameters));
243
+ }
244
+ return (0, ts_res_1.Ok)(emptyVariation);
245
+ }
246
+ }
247
+ exports.VariationConfiguration = VariationConfiguration;
248
+ //# sourceMappingURL=variationConfiguration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variationConfiguration.js","sourceRoot":"","sources":["../../src/variationConfiguration/variationConfiguration.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,23 @@
1
1
  {
2
2
  "name": "@kameleoon/javascript-sdk-core",
3
- "version": "0.0.3",
3
+ "version": "1.0.0",
4
4
  "description": "Kameleoon JS SDK Core",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
5
7
  "files": [
6
8
  "dist"
7
9
  ],
8
- "main": "dist/index.js",
9
10
  "scripts": {
10
11
  "clean": "rimraf dist && rimraf tsconfig.tsbuildinfo",
11
12
  "start": "npm run clean && tsc -w",
12
13
  "build": "npm run clean && tsc",
13
14
  "deploy": "npm publish --tag latest --access public",
14
15
  "deploy-nexus": "npm publish --registry=https://nexus.kameleoon.net/repository/npm-kameleoon/",
16
+ "update-documentation": "/bin/bash ../../scripts/update_documentation.sh javascript-sdk-core",
15
17
  "release": "/bin/bash ../../scripts/release.sh javascript-sdk-core",
16
- "test": "echo 'running test'",
18
+ "test": "NODE_ENV=test && jest",
17
19
  "test:watch": "jest --watch",
18
- "test:coverage": "jest --coverage",
19
- "update-documentation": "/bin/bash ../../scripts/update_documentation.sh javascript-sdk-core"
20
+ "test:coverage": "jest --coverage"
20
21
  },
21
22
  "homepage": "https://developers.kameleoon.com/react-js-sdk.html",
22
23
  "publishConfig": {
@@ -25,16 +26,25 @@
25
26
  },
26
27
  "keywords": [
27
28
  "kameleoon",
28
- "react",
29
+ "core",
29
30
  "sdk",
30
- "react sdk"
31
+ "javascript core"
31
32
  ],
32
33
  "license": "ISC",
33
34
  "commitlint": {
34
35
  "extends": "@commitlint/config-conventional"
35
36
  },
36
37
  "dependencies": {
37
- "@react-native-async-storage/async-storage": "^1.17.10",
38
- "node-fetch": "^2.6.9"
38
+ "crypto-js": "^4.1.1",
39
+ "node-fetch": "^2.6.1",
40
+ "ts-res": "^1.1.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/crypto-js": "^4.1.1",
44
+ "@types/jest": "^27.0.2",
45
+ "@types/node": "^14.17.5",
46
+ "@types/node-fetch": "^2.6.2",
47
+ "jest": "^27.3.1",
48
+ "ts-jest": "^27.0.7"
39
49
  }
40
50
  }
@@ -1,15 +0,0 @@
1
- import { ConfigurationInterface, ConfigurationExperimentsInterface, ConfigurationFeatureFlagsInterface, AutomationExperimentInterface, AutomationFeatureFlagInterface, ConfigurationSettings } from '../interfaces/interfaces';
2
- declare class Configuration implements ConfigurationInterface {
3
- settings: ConfigurationSettings;
4
- updateTime: number;
5
- experiments: ConfigurationExperimentsInterface;
6
- featureFlags: ConfigurationFeatureFlagsInterface;
7
- configuration: any;
8
- constructor(siteCode: string, actions: {
9
- configuration: ConfigurationSettings;
10
- experiments: AutomationExperimentInterface[];
11
- featureFlags: AutomationFeatureFlagInterface[];
12
- updateTime: number;
13
- });
14
- }
15
- export default Configuration;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var experiment_1 = __importDefault(require("./experiment"));
7
- var featureFlag_1 = __importDefault(require("./featureFlag"));
8
- var Configuration = /** @class */ (function () {
9
- function Configuration(siteCode, actions) {
10
- this.updateTime = actions.updateTime
11
- ? actions.updateTime
12
- : new Date().getTime();
13
- this.configuration = actions;
14
- this.settings = actions.configuration;
15
- this.experiments = actions.experiments
16
- .filter(function (experiment) { return experiment.siteCode == siteCode; })
17
- .reduce(function (obj, experiment) {
18
- obj[experiment.id] = new experiment_1.default(experiment);
19
- return obj;
20
- }, {});
21
- this.featureFlags = actions.featureFlags
22
- .filter(function (ff) { return ff.siteCode == siteCode; })
23
- .reduce(function (obj, ff) {
24
- obj[ff.id] = new featureFlag_1.default(ff);
25
- return obj;
26
- }, {});
27
- }
28
- return Configuration;
29
- }());
30
- exports.default = Configuration;
31
- //# sourceMappingURL=configuration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/configurations/configuration.ts"],"names":[],"mappings":";;;;;AAAA,4DAAsC;AACtC,8DAAwC;AAUxC;IAOE,uBACE,QAAgB,EAChB,OAKC;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU;YAClC,CAAC,CAAC,OAAO,CAAC,UAAU;YACpB,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;aACnC,MAAM,CAAC,UAAC,UAAU,IAAK,OAAA,UAAU,CAAC,QAAQ,IAAI,QAAQ,EAA/B,CAA+B,CAAC;aACvD,MAAM,CAAC,UAAC,GAAG,EAAE,UAAU;YACtB,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,oBAAU,CAAC,UAAU,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAuC,CAAC,CAAC;QAE9C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY;aACrC,MAAM,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,QAAQ,IAAI,QAAQ,EAAvB,CAAuB,CAAC;aACvC,MAAM,CAAC,UAAC,GAAG,EAAE,EAAE;YACd,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,qBAAW,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAwC,CAAC,CAAC;IACjD,CAAC;IACH,oBAAC;AAAD,CAAC,AAnCD,IAmCC;AAED,kBAAe,aAAa,CAAC"}
@@ -1,13 +0,0 @@
1
- import TargetingSegment from '../targeting/targetingSegment';
2
- import Variation from './variation';
3
- import { AutomationExperimentInterface, SiteEnabledInterface } from '../interfaces/interfaces';
4
- declare class Experiment implements SiteEnabledInterface {
5
- variationConfigurations: {
6
- [id: string]: Variation;
7
- };
8
- forceTargeting?: boolean;
9
- targetingSegment?: TargetingSegment;
10
- siteEnabled: boolean;
11
- constructor(experiment: AutomationExperimentInterface);
12
- }
13
- export default Experiment;
@@ -1,54 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var targetingSegment_1 = __importDefault(require("../targeting/targetingSegment"));
7
- var targetingTreeBuilder_1 = __importDefault(require("../targeting/targetingTreeBuilder"));
8
- var variation_1 = __importDefault(require("./variation"));
9
- var Experiment = /** @class */ (function () {
10
- function Experiment(experiment) {
11
- var _this = this;
12
- this.variationConfigurations = {};
13
- var deviations = experiment.deviations || null;
14
- if (deviations) {
15
- deviations.forEach(function (deviation) {
16
- var variationId = deviation.variationId;
17
- if (variationId == 'origin') {
18
- variationId = '0';
19
- }
20
- var deviationValue = deviation.value;
21
- var respTime = (experiment.respoolTime || []).find(function (resp) { return resp.variationId == variationId; });
22
- var respoolTimeValue = respTime === null || respTime === void 0 ? void 0 : respTime.value;
23
- var variation = (experiment.variations || []).find(function (variation) { return variation.id == variationId; });
24
- var customJsonString = variation ? variation.customJson : null;
25
- var customJson;
26
- try {
27
- customJson = JSON.parse(customJsonString || '{}');
28
- }
29
- catch (e) {
30
- customJson = {};
31
- }
32
- _this.variationConfigurations[variationId] = new variation_1.default({
33
- id: variationId,
34
- deviation: deviationValue,
35
- respoolTime: respoolTimeValue,
36
- customJson: customJson,
37
- });
38
- });
39
- var targetingSegment = void 0;
40
- var segment = experiment.segment;
41
- if (null != segment) {
42
- targetingSegment = new targetingSegment_1.default();
43
- var conditionsData = segment.conditionsData;
44
- var targetingTree = targetingTreeBuilder_1.default.createTargetingTree(conditionsData);
45
- targetingSegment.targetingTree = targetingTree;
46
- }
47
- this.targetingSegment = targetingSegment;
48
- }
49
- this.siteEnabled = experiment.siteEnabled;
50
- }
51
- return Experiment;
52
- }());
53
- exports.default = Experiment;
54
- //# sourceMappingURL=experiment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"experiment.js","sourceRoot":"","sources":["../../src/configurations/experiment.ts"],"names":[],"mappings":";;;;;AAAA,mFAA6D;AAC7D,2FAAqE;AACrE,0DAAoC;AAMpC;IAME,oBAAY,UAAyC;QAArD,iBA+CC;QA9CC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QAElC,IAAM,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,IAAI,CAAC;QAEjD,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,OAAO,CAAC,UAAC,SAAS;gBAC3B,IAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;gBACxC,IAAI,WAAW,IAAI,QAAQ,EAAE;oBAC3B,WAAW,GAAG,GAAG,CAAC;iBACnB;gBACD,IAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC;gBACvC,IAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAClD,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,WAAW,IAAI,WAAW,EAA/B,CAA+B,CAC1C,CAAC;gBACF,IAAM,gBAAgB,GAAG,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,CAAC;gBACzC,IAAM,SAAS,GAAG,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAClD,UAAC,SAAS,IAAK,OAAA,SAAS,CAAC,EAAE,IAAI,WAAW,EAA3B,CAA2B,CAC3C,CAAC;gBACF,IAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjE,IAAI,UAAU,CAAC;gBACf,IAAI;oBACF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;iBACnD;gBAAC,OAAO,CAAC,EAAE;oBACV,UAAU,GAAG,EAAE,CAAC;iBACjB;gBACD,KAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,GAAG,IAAI,mBAAS,CAAC;oBACxD,EAAE,EAAE,WAAW;oBACf,SAAS,EAAE,cAAc;oBACzB,WAAW,EAAE,gBAAgB;oBAC7B,UAAU,EAAE,UAAU;iBACvB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,gBAAgB,SAAA,CAAC;YACrB,IAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YACnC,IAAI,IAAI,IAAI,OAAO,EAAE;gBACnB,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;gBAC1C,IAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;gBAC9C,IAAM,aAAa,GACjB,8BAAoB,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;gBAC3D,gBAAgB,CAAC,aAAa,GAAG,aAAa,CAAC;aAChD;YACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;SAC1C;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAC5C,CAAC;IACH,iBAAC;AAAD,CAAC,AAtDD,IAsDC;AAED,kBAAe,UAAU,CAAC"}
@@ -1,23 +0,0 @@
1
- import TargetingSegment from '../targeting/targetingSegment';
2
- import Variation from './variation';
3
- import { AutomationFeatureFlagInterface, SiteEnabledInterface } from '../interfaces/interfaces';
4
- declare class FeatureFlag implements SiteEnabledInterface {
5
- static readonly STATUS_ACTIVE = "ACTIVE";
6
- static readonly FEATURE_STATUS_DEACTIVATED = "DEACTIVATED";
7
- status: string;
8
- featureStatus: string;
9
- variationConfigurations: {
10
- [id: string]: Variation;
11
- };
12
- forceTargeting?: boolean;
13
- targetingSegment?: TargetingSegment;
14
- identificationKey: string;
15
- schedules: {
16
- dateStart: number;
17
- dateEnd: number;
18
- }[];
19
- siteEnabled: boolean;
20
- constructor(featureFlag: AutomationFeatureFlagInterface);
21
- isScheduleActive: () => boolean;
22
- }
23
- export default FeatureFlag;
@@ -1,105 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- var targetingSegment_1 = __importDefault(require("../targeting/targetingSegment"));
7
- var targetingTreeBuilder_1 = __importDefault(require("../targeting/targetingTreeBuilder"));
8
- var variation_1 = __importDefault(require("./variation"));
9
- var FeatureFlag = /** @class */ (function () {
10
- function FeatureFlag(featureFlag) {
11
- var _this = this;
12
- this.isScheduleActive = function () {
13
- // if no schedules then need to fetch current status
14
- var currentStatus = _this.status == FeatureFlag.STATUS_ACTIVE;
15
- if (_this.featureStatus == FeatureFlag.FEATURE_STATUS_DEACTIVATED ||
16
- _this.schedules.length == 0) {
17
- return currentStatus;
18
- }
19
- var currentTime = new Date().getTime();
20
- // need to find if currentTime is in any period -> active or not -> not activate
21
- return (_this.schedules.filter(function (schedule) {
22
- return schedule.dateStart < currentTime && currentTime < schedule.dateEnd;
23
- }).length > 0);
24
- };
25
- this.variationConfigurations = {};
26
- this.identificationKey = featureFlag.identificationKey;
27
- this.status = featureFlag.status;
28
- this.featureStatus = featureFlag.featureStatus;
29
- this.schedules = [];
30
- var deviations = featureFlag.deviations || null;
31
- if (deviations) {
32
- deviations.forEach(function (deviation) {
33
- var variationId = deviation.variationId;
34
- if (variationId == 'origin') {
35
- variationId = '0';
36
- }
37
- var deviationValue = deviation.value;
38
- var respTime = (featureFlag.respoolTime || []).find(function (resp) { return resp.variationId == variationId; });
39
- var respoolTimeValue = respTime === null || respTime === void 0 ? void 0 : respTime.value;
40
- var variation = (featureFlag.variations || []).find(function (variation) { return variation.id == variationId; });
41
- var customJsonString = variation ? variation.customJson : null;
42
- var customJson;
43
- try {
44
- customJson = JSON.parse(customJsonString || '{}');
45
- }
46
- catch (e) {
47
- customJson = {};
48
- }
49
- _this.variationConfigurations[variationId] = new variation_1.default({
50
- id: variationId,
51
- deviation: deviationValue,
52
- respoolTime: respoolTimeValue,
53
- customJson: customJson,
54
- });
55
- });
56
- }
57
- if (featureFlag.schedules) {
58
- featureFlag.schedules.forEach(function (schedule) {
59
- _this.schedules.push({
60
- dateStart: schedule.dateStart
61
- ? Date.parse(schedule.dateStart)
62
- : -Infinity,
63
- dateEnd: schedule.dateEnd ? Date.parse(schedule.dateEnd) : Infinity,
64
- });
65
- });
66
- }
67
- // Temporary fix for ff
68
- featureFlag.variations.forEach(function (variation) {
69
- if (!_this.variationConfigurations[variation.id]) {
70
- var deviation = 1 - _this.variationConfigurations['0'].deviation;
71
- var respTime = (featureFlag.respoolTime || []).find(function (resp) { return resp.variationId == variation.id; });
72
- var respoolTimeValue = respTime === null || respTime === void 0 ? void 0 : respTime.value;
73
- var customJsonString = variation.customJson;
74
- var customJson = void 0;
75
- try {
76
- customJson = JSON.parse(customJsonString || '{}');
77
- }
78
- catch (e) {
79
- customJson = {};
80
- }
81
- _this.variationConfigurations[variation.id] = new variation_1.default({
82
- id: variation.id,
83
- deviation: deviation,
84
- respoolTime: respoolTimeValue,
85
- customJson: customJson,
86
- });
87
- }
88
- });
89
- var targetingSegment;
90
- var segment = featureFlag.segment;
91
- if (null != segment) {
92
- targetingSegment = new targetingSegment_1.default();
93
- var conditionsData = segment.conditionsData;
94
- var targetingTree = targetingTreeBuilder_1.default.createTargetingTree(conditionsData);
95
- targetingSegment.targetingTree = targetingTree;
96
- }
97
- this.targetingSegment = targetingSegment;
98
- this.siteEnabled = featureFlag.siteEnabled;
99
- }
100
- FeatureFlag.STATUS_ACTIVE = 'ACTIVE';
101
- FeatureFlag.FEATURE_STATUS_DEACTIVATED = 'DEACTIVATED';
102
- return FeatureFlag;
103
- }());
104
- exports.default = FeatureFlag;
105
- //# sourceMappingURL=featureFlag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"featureFlag.js","sourceRoot":"","sources":["../../src/configurations/featureFlag.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { CustomJsonType } from '../types';
2
- export interface VariationInterface {
3
- id: string;
4
- deviation: number;
5
- respoolTime?: number;
6
- customJson?: any;
7
- }
8
- declare class Variation implements VariationInterface {
9
- id: string;
10
- respoolTime?: number;
11
- deviation: number;
12
- customJson?: CustomJsonType;
13
- constructor({ id, deviation, respoolTime, customJson }: VariationInterface);
14
- }
15
- export default Variation;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var Variation = /** @class */ (function () {
4
- function Variation(_a) {
5
- var id = _a.id, deviation = _a.deviation, respoolTime = _a.respoolTime, customJson = _a.customJson;
6
- this.id = id;
7
- this.deviation = deviation;
8
- this.respoolTime = respoolTime;
9
- this.customJson = customJson;
10
- }
11
- return Variation;
12
- }());
13
- exports.default = Variation;
14
- //# sourceMappingURL=variation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"variation.js","sourceRoot":"","sources":["../../src/configurations/variation.ts"],"names":[],"mappings":";;AASA;IAME,mBAAY,EAA8D;YAA5D,EAAE,QAAA,EAAE,SAAS,eAAA,EAAE,WAAW,iBAAA,EAAE,UAAU,gBAAA;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IACH,gBAAC;AAAD,CAAC,AAZD,IAYC;AAED,kBAAe,SAAS,CAAC"}