@featurevisor/sdk 1.35.2 → 2.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.
- package/CHANGELOG.md +8 -0
- package/README.md +2 -381
- package/coverage/clover.xml +707 -643
- package/coverage/coverage-final.json +11 -9
- package/coverage/lcov-report/{segments.ts.html → bucketer.ts.html} +155 -77
- package/coverage/lcov-report/child.ts.html +940 -0
- package/coverage/lcov-report/conditions.ts.html +107 -158
- package/coverage/lcov-report/datafileReader.ts.html +763 -103
- package/coverage/lcov-report/emitter.ts.html +77 -59
- package/coverage/lcov-report/evaluate.ts.html +689 -416
- package/coverage/lcov-report/events.ts.html +334 -0
- package/coverage/lcov-report/helpers.ts.html +184 -0
- package/coverage/lcov-report/{feature.ts.html → hooks.ts.html} +90 -237
- package/coverage/lcov-report/index.html +119 -89
- package/coverage/lcov-report/instance.ts.html +341 -773
- package/coverage/lcov-report/logger.ts.html +64 -64
- package/coverage/lcov.info +1433 -1223
- package/dist/bucketer.d.ts +11 -0
- package/dist/child.d.ts +26 -0
- package/dist/compareVersions.d.ts +4 -0
- package/dist/conditions.d.ts +4 -4
- package/dist/datafileReader.d.ts +26 -6
- package/dist/emitter.d.ts +8 -9
- package/dist/evaluate.d.ts +31 -29
- package/dist/events.d.ts +5 -0
- package/dist/helpers.d.ts +5 -0
- package/dist/hooks.d.ts +45 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.gz +0 -0
- package/dist/index.mjs.map +1 -1
- package/dist/instance.d.ts +40 -72
- package/dist/logger.d.ts +6 -5
- package/dist/murmurhash.d.ts +1 -0
- package/jest.config.js +2 -0
- package/lib/bucketer.d.ts +11 -0
- package/lib/child.d.ts +26 -0
- package/lib/compareVersions.d.ts +4 -0
- package/lib/conditions.d.ts +4 -4
- package/lib/datafileReader.d.ts +26 -6
- package/lib/emitter.d.ts +8 -9
- package/lib/evaluate.d.ts +31 -29
- package/lib/events.d.ts +5 -0
- package/lib/helpers.d.ts +5 -0
- package/lib/hooks.d.ts +45 -0
- package/lib/index.d.ts +3 -2
- package/lib/instance.d.ts +40 -72
- package/lib/logger.d.ts +6 -5
- package/lib/murmurhash.d.ts +1 -0
- package/package.json +3 -5
- package/src/bucketer.spec.ts +165 -0
- package/src/bucketer.ts +84 -0
- package/src/child.spec.ts +267 -0
- package/src/child.ts +285 -0
- package/src/compareVersions.ts +93 -0
- package/src/conditions.spec.ts +563 -353
- package/src/conditions.ts +46 -63
- package/src/datafileReader.spec.ts +396 -84
- package/src/datafileReader.ts +280 -60
- package/src/emitter.spec.ts +27 -86
- package/src/emitter.ts +38 -32
- package/src/evaluate.ts +349 -258
- package/src/events.spec.ts +154 -0
- package/src/events.ts +83 -0
- package/src/helpers.ts +33 -0
- package/src/hooks.ts +88 -0
- package/src/index.ts +3 -2
- package/src/instance.spec.ts +305 -489
- package/src/instance.ts +247 -391
- package/src/logger.spec.ts +212 -134
- package/src/logger.ts +36 -36
- package/src/murmurhash.ts +71 -0
- package/coverage/lcov-report/bucket.ts.html +0 -502
- package/dist/bucket.d.ts +0 -30
- package/dist/feature.d.ts +0 -16
- package/dist/segments.d.ts +0 -5
- package/lib/bucket.d.ts +0 -30
- package/lib/feature.d.ts +0 -16
- package/lib/segments.d.ts +0 -5
- package/src/bucket.spec.ts +0 -37
- package/src/bucket.ts +0 -139
- package/src/feature.ts +0 -137
- package/src/segments.spec.ts +0 -468
- package/src/segments.ts +0 -58
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">90.9% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>20/22</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">60% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>3/5</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/6</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">90.9% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>20/22</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -116,111 +116,129 @@
|
|
|
116
116
|
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
117
|
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
118
|
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
120
126
|
<span class="cline-any cline-neutral"> </span>
|
|
121
127
|
<span class="cline-any cline-neutral"> </span>
|
|
122
128
|
<span class="cline-any cline-neutral"> </span>
|
|
123
129
|
<span class="cline-any cline-neutral"> </span>
|
|
124
130
|
<span class="cline-any cline-neutral"> </span>
|
|
125
|
-
<span class="cline-any cline-yes">2x</span>
|
|
126
131
|
<span class="cline-any cline-neutral"> </span>
|
|
127
132
|
<span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<span class="cline-any cline-yes">3x</span>
|
|
128
134
|
<span class="cline-any cline-neutral"> </span>
|
|
129
|
-
<span class="cline-any cline-yes">31x</span>
|
|
130
135
|
<span class="cline-any cline-neutral"> </span>
|
|
131
136
|
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-yes">21x</span>
|
|
132
138
|
<span class="cline-any cline-neutral"> </span>
|
|
133
|
-
<span class="cline-any cline-yes">22x</span>
|
|
134
|
-
<span class="cline-any cline-yes">18x</span>
|
|
135
139
|
<span class="cline-any cline-neutral"> </span>
|
|
136
140
|
<span class="cline-any cline-neutral"> </span>
|
|
137
|
-
<span class="cline-any cline-yes">
|
|
141
|
+
<span class="cline-any cline-yes">2x</span>
|
|
142
|
+
<span class="cline-any cline-yes">2x</span>
|
|
138
143
|
<span class="cline-any cline-neutral"> </span>
|
|
139
144
|
<span class="cline-any cline-neutral"> </span>
|
|
145
|
+
<span class="cline-any cline-yes">2x</span>
|
|
146
|
+
<span class="cline-any cline-yes">2x</span>
|
|
147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
148
|
+
<span class="cline-any cline-yes">2x</span>
|
|
140
149
|
<span class="cline-any cline-neutral"> </span>
|
|
141
|
-
<span class="cline-any cline-yes">
|
|
142
|
-
<span class="cline-any cline-yes">
|
|
150
|
+
<span class="cline-any cline-yes">2x</span>
|
|
151
|
+
<span class="cline-any cline-yes">2x</span>
|
|
152
|
+
<span class="cline-any cline-no"> </span>
|
|
143
153
|
<span class="cline-any cline-neutral"> </span>
|
|
144
154
|
<span class="cline-any cline-neutral"> </span>
|
|
145
|
-
<span class="cline-any cline-yes">
|
|
155
|
+
<span class="cline-any cline-yes">2x</span>
|
|
146
156
|
<span class="cline-any cline-neutral"> </span>
|
|
147
|
-
<span class="cline-any cline-yes">
|
|
148
|
-
<span class="cline-any cline-yes">
|
|
157
|
+
<span class="cline-any cline-yes">2x</span>
|
|
158
|
+
<span class="cline-any cline-yes">2x</span>
|
|
159
|
+
<span class="cline-any cline-yes">2x</span>
|
|
149
160
|
<span class="cline-any cline-neutral"> </span>
|
|
150
161
|
<span class="cline-any cline-neutral"> </span>
|
|
151
162
|
<span class="cline-any cline-neutral"> </span>
|
|
152
163
|
<span class="cline-any cline-neutral"> </span>
|
|
153
|
-
<span class="cline-any cline-yes">2x</span>
|
|
154
|
-
<span class="cline-any cline-yes">1x</span>
|
|
155
164
|
<span class="cline-any cline-neutral"> </span>
|
|
156
|
-
<span class="cline-any cline-yes">
|
|
157
|
-
<span class="cline-any cline-
|
|
165
|
+
<span class="cline-any cline-yes">6x</span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-yes">6x</span>
|
|
168
|
+
<span class="cline-any cline-yes">4x</span>
|
|
158
169
|
<span class="cline-any cline-neutral"> </span>
|
|
159
170
|
<span class="cline-any cline-neutral"> </span>
|
|
171
|
+
<span class="cline-any cline-yes">2x</span>
|
|
172
|
+
<span class="cline-any cline-yes">2x</span>
|
|
173
|
+
<span class="cline-any cline-yes">2x</span>
|
|
160
174
|
<span class="cline-any cline-neutral"> </span>
|
|
175
|
+
<span class="cline-any cline-no"> </span>
|
|
161
176
|
<span class="cline-any cline-neutral"> </span>
|
|
162
177
|
<span class="cline-any cline-neutral"> </span>
|
|
163
|
-
<span class="cline-any cline-yes">15x</span>
|
|
164
|
-
<span class="cline-any cline-yes">9x</span>
|
|
165
178
|
<span class="cline-any cline-neutral"> </span>
|
|
166
179
|
<span class="cline-any cline-neutral"> </span>
|
|
167
|
-
<span class="cline-any cline-yes">6x</span>
|
|
168
|
-
<span class="cline-any cline-yes">8x</span>
|
|
169
180
|
<span class="cline-any cline-neutral"> </span>
|
|
181
|
+
<span class="cline-any cline-yes">2x</span>
|
|
170
182
|
<span class="cline-any cline-neutral"> </span>
|
|
171
183
|
<span class="cline-any cline-neutral"> </span>
|
|
172
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">export type EventName = "
|
|
184
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">export type EventName = "datafile_set" | "context_set" | "sticky_set";
|
|
173
185
|
|
|
174
|
-
export
|
|
175
|
-
|
|
176
|
-
|
|
186
|
+
export type EventDetails = Record<string, unknown>;
|
|
187
|
+
|
|
188
|
+
export type EventCallback = (details: EventDetails) => void;
|
|
189
|
+
|
|
190
|
+
export type Listeners = Record<EventName, EventCallback[]> | {}; // eslint-disable-line
|
|
177
191
|
|
|
178
192
|
export class Emitter {
|
|
179
|
-
|
|
193
|
+
listeners: Listeners;
|
|
180
194
|
|
|
181
195
|
constructor() {
|
|
182
|
-
this.
|
|
196
|
+
this.listeners = {};
|
|
183
197
|
}
|
|
184
198
|
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
this.
|
|
199
|
+
on(eventName: EventName, callback: EventCallback) {
|
|
200
|
+
if (!this.listeners[eventName]) {
|
|
201
|
+
this.listeners[eventName] = [];
|
|
188
202
|
}
|
|
189
203
|
|
|
190
|
-
this.
|
|
191
|
-
|
|
204
|
+
const listeners = this.listeners[eventName];
|
|
205
|
+
listeners.push(callback);
|
|
192
206
|
|
|
193
|
-
|
|
194
|
-
if (typeof this._listeners[eventName] === "undefined") {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
207
|
+
let isActive = true;
|
|
197
208
|
|
|
198
|
-
|
|
209
|
+
return function unsubscribe() {
|
|
210
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!isActive) {
|
|
211
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
212
|
+
}
|
|
199
213
|
|
|
200
|
-
|
|
201
|
-
this._listeners[eventName].splice(index, 1);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
214
|
+
isActive = false;
|
|
204
215
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
this._listeners[key] = [];
|
|
211
|
-
});
|
|
212
|
-
}
|
|
216
|
+
const index = listeners.indexOf(callback);
|
|
217
|
+
if (index !== -1) {
|
|
218
|
+
listeners.splice(index, 1);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
213
221
|
}
|
|
214
222
|
|
|
215
|
-
|
|
216
|
-
|
|
223
|
+
trigger(eventName: EventName, details: EventDetails = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
224
|
+
const listeners = this.listeners[eventName];
|
|
225
|
+
|
|
226
|
+
if (!listeners) {
|
|
217
227
|
return;
|
|
218
228
|
}
|
|
219
229
|
|
|
220
|
-
|
|
221
|
-
|
|
230
|
+
listeners.forEach(function (listener) {
|
|
231
|
+
try {
|
|
232
|
+
listener(details);
|
|
233
|
+
} catch (err) {
|
|
234
|
+
<span class="cstat-no" title="statement not covered" > console.error(err);</span>
|
|
235
|
+
}
|
|
222
236
|
});
|
|
223
237
|
}
|
|
238
|
+
|
|
239
|
+
clearAll() {
|
|
240
|
+
this.listeners = {};
|
|
241
|
+
}
|
|
224
242
|
}
|
|
225
243
|
</pre></td></tr></table></pre>
|
|
226
244
|
|
|
@@ -229,7 +247,7 @@ export class Emitter {
|
|
|
229
247
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
230
248
|
Code coverage generated by
|
|
231
249
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
232
|
-
at 2025-
|
|
250
|
+
at 2025-07-13T22:31:55.309Z
|
|
233
251
|
</div>
|
|
234
252
|
<script src="prettify.js"></script>
|
|
235
253
|
<script>
|