@carbon/feature-flags 1.0.0 → 1.1.0-rc.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/es/index.js +153 -159
- package/lib/index.js +153 -159
- package/package.json +12 -6
- package/types/FeatureFlagScope.d.ts +39 -0
- package/types/generated/feature-flags.d.ts +5 -0
- package/types/index.d.ts +15 -0
package/es/index.js
CHANGED
|
@@ -1,10 +1,132 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright IBM Corp. 2015,
|
|
2
|
+
* Copyright IBM Corp. 2015, 2026
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
function _arrayLikeToArray(r, a) {
|
|
9
|
+
(null == a || a > r.length) && (a = r.length);
|
|
10
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
11
|
+
return n;
|
|
12
|
+
}
|
|
13
|
+
function _arrayWithHoles(r) {
|
|
14
|
+
if (Array.isArray(r)) return r;
|
|
15
|
+
}
|
|
16
|
+
function _classCallCheck(a, n) {
|
|
17
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
18
|
+
}
|
|
19
|
+
function _defineProperties(e, r) {
|
|
20
|
+
for (var t = 0; t < r.length; t++) {
|
|
21
|
+
var o = r[t];
|
|
22
|
+
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function _createClass(e, r, t) {
|
|
26
|
+
return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
|
|
27
|
+
writable: false
|
|
28
|
+
}), e;
|
|
29
|
+
}
|
|
30
|
+
function _createForOfIteratorHelper(r, e) {
|
|
31
|
+
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
32
|
+
if (!t) {
|
|
33
|
+
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
|
|
34
|
+
t && (r = t);
|
|
35
|
+
var n = 0,
|
|
36
|
+
F = function () {};
|
|
37
|
+
return {
|
|
38
|
+
s: F,
|
|
39
|
+
n: function () {
|
|
40
|
+
return n >= r.length ? {
|
|
41
|
+
done: true
|
|
42
|
+
} : {
|
|
43
|
+
done: false,
|
|
44
|
+
value: r[n++]
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
e: function (r) {
|
|
48
|
+
throw r;
|
|
49
|
+
},
|
|
50
|
+
f: F
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
54
|
+
}
|
|
55
|
+
var o,
|
|
56
|
+
a = true,
|
|
57
|
+
u = false;
|
|
58
|
+
return {
|
|
59
|
+
s: function () {
|
|
60
|
+
t = t.call(r);
|
|
61
|
+
},
|
|
62
|
+
n: function () {
|
|
63
|
+
var r = t.next();
|
|
64
|
+
return a = r.done, r;
|
|
65
|
+
},
|
|
66
|
+
e: function (r) {
|
|
67
|
+
u = true, o = r;
|
|
68
|
+
},
|
|
69
|
+
f: function () {
|
|
70
|
+
try {
|
|
71
|
+
a || null == t.return || t.return();
|
|
72
|
+
} finally {
|
|
73
|
+
if (u) throw o;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function _iterableToArrayLimit(r, l) {
|
|
79
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
80
|
+
if (null != t) {
|
|
81
|
+
var e,
|
|
82
|
+
n,
|
|
83
|
+
i,
|
|
84
|
+
u,
|
|
85
|
+
a = [],
|
|
86
|
+
f = true,
|
|
87
|
+
o = false;
|
|
88
|
+
try {
|
|
89
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
90
|
+
} catch (r) {
|
|
91
|
+
o = true, n = r;
|
|
92
|
+
} finally {
|
|
93
|
+
try {
|
|
94
|
+
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
95
|
+
} finally {
|
|
96
|
+
if (o) throw n;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return a;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function _nonIterableRest() {
|
|
103
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
104
|
+
}
|
|
105
|
+
function _slicedToArray(r, e) {
|
|
106
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
107
|
+
}
|
|
108
|
+
function _toPrimitive(t, r) {
|
|
109
|
+
if ("object" != typeof t || !t) return t;
|
|
110
|
+
var e = t[Symbol.toPrimitive];
|
|
111
|
+
if (void 0 !== e) {
|
|
112
|
+
var i = e.call(t, r);
|
|
113
|
+
if ("object" != typeof i) return i;
|
|
114
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
115
|
+
}
|
|
116
|
+
return (String )(t);
|
|
117
|
+
}
|
|
118
|
+
function _toPropertyKey(t) {
|
|
119
|
+
var i = _toPrimitive(t, "string");
|
|
120
|
+
return "symbol" == typeof i ? i : i + "";
|
|
121
|
+
}
|
|
122
|
+
function _unsupportedIterableToArray(r, a) {
|
|
123
|
+
if (r) {
|
|
124
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
125
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
126
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
8
130
|
var enabled$1 = {};
|
|
9
131
|
try {
|
|
10
132
|
if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) {
|
|
@@ -249,135 +371,16 @@ var featureFlagInfo = [{
|
|
|
249
371
|
enabled: enabled$1.enablePresence
|
|
250
372
|
}];
|
|
251
373
|
|
|
252
|
-
function _arrayLikeToArray(r, a) {
|
|
253
|
-
(null == a || a > r.length) && (a = r.length);
|
|
254
|
-
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
255
|
-
return n;
|
|
256
|
-
}
|
|
257
|
-
function _arrayWithHoles(r) {
|
|
258
|
-
if (Array.isArray(r)) return r;
|
|
259
|
-
}
|
|
260
|
-
function _classCallCheck(a, n) {
|
|
261
|
-
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
262
|
-
}
|
|
263
|
-
function _defineProperties(e, r) {
|
|
264
|
-
for (var t = 0; t < r.length; t++) {
|
|
265
|
-
var o = r[t];
|
|
266
|
-
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
function _createClass(e, r, t) {
|
|
270
|
-
return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
|
|
271
|
-
writable: false
|
|
272
|
-
}), e;
|
|
273
|
-
}
|
|
274
|
-
function _createForOfIteratorHelper(r, e) {
|
|
275
|
-
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
276
|
-
if (!t) {
|
|
277
|
-
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
|
|
278
|
-
t && (r = t);
|
|
279
|
-
var n = 0,
|
|
280
|
-
F = function () {};
|
|
281
|
-
return {
|
|
282
|
-
s: F,
|
|
283
|
-
n: function () {
|
|
284
|
-
return n >= r.length ? {
|
|
285
|
-
done: true
|
|
286
|
-
} : {
|
|
287
|
-
done: false,
|
|
288
|
-
value: r[n++]
|
|
289
|
-
};
|
|
290
|
-
},
|
|
291
|
-
e: function (r) {
|
|
292
|
-
throw r;
|
|
293
|
-
},
|
|
294
|
-
f: F
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
298
|
-
}
|
|
299
|
-
var o,
|
|
300
|
-
a = true,
|
|
301
|
-
u = false;
|
|
302
|
-
return {
|
|
303
|
-
s: function () {
|
|
304
|
-
t = t.call(r);
|
|
305
|
-
},
|
|
306
|
-
n: function () {
|
|
307
|
-
var r = t.next();
|
|
308
|
-
return a = r.done, r;
|
|
309
|
-
},
|
|
310
|
-
e: function (r) {
|
|
311
|
-
u = true, o = r;
|
|
312
|
-
},
|
|
313
|
-
f: function () {
|
|
314
|
-
try {
|
|
315
|
-
a || null == t.return || t.return();
|
|
316
|
-
} finally {
|
|
317
|
-
if (u) throw o;
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
function _iterableToArrayLimit(r, l) {
|
|
323
|
-
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
324
|
-
if (null != t) {
|
|
325
|
-
var e,
|
|
326
|
-
n,
|
|
327
|
-
i,
|
|
328
|
-
u,
|
|
329
|
-
a = [],
|
|
330
|
-
f = true,
|
|
331
|
-
o = false;
|
|
332
|
-
try {
|
|
333
|
-
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
334
|
-
} catch (r) {
|
|
335
|
-
o = true, n = r;
|
|
336
|
-
} finally {
|
|
337
|
-
try {
|
|
338
|
-
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
339
|
-
} finally {
|
|
340
|
-
if (o) throw n;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return a;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
function _nonIterableRest() {
|
|
347
|
-
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
348
|
-
}
|
|
349
|
-
function _slicedToArray(r, e) {
|
|
350
|
-
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
351
|
-
}
|
|
352
|
-
function _toPrimitive(t, r) {
|
|
353
|
-
if ("object" != typeof t || !t) return t;
|
|
354
|
-
var e = t[Symbol.toPrimitive];
|
|
355
|
-
if (void 0 !== e) {
|
|
356
|
-
var i = e.call(t, r);
|
|
357
|
-
if ("object" != typeof i) return i;
|
|
358
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
359
|
-
}
|
|
360
|
-
return (String )(t);
|
|
361
|
-
}
|
|
362
|
-
function _toPropertyKey(t) {
|
|
363
|
-
var i = _toPrimitive(t, "string");
|
|
364
|
-
return "symbol" == typeof i ? i : i + "";
|
|
365
|
-
}
|
|
366
|
-
function _unsupportedIterableToArray(r, a) {
|
|
367
|
-
if (r) {
|
|
368
|
-
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
369
|
-
var t = {}.toString.call(r).slice(8, -1);
|
|
370
|
-
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
374
|
/**
|
|
375
|
-
* Copyright IBM Corp. 2015,
|
|
375
|
+
* Copyright IBM Corp. 2015, 2026
|
|
376
376
|
*
|
|
377
377
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
378
378
|
* LICENSE file in the root directory of this source tree.
|
|
379
379
|
*/
|
|
380
380
|
|
|
381
|
+
// TODO: Remove in the next major version.
|
|
382
|
+
/** @deprecated Use `FeatureFlagRecord` instead. */
|
|
383
|
+
|
|
381
384
|
var FeatureFlagScope = /*#__PURE__*/function () {
|
|
382
385
|
function FeatureFlagScope(flags) {
|
|
383
386
|
var _this = this;
|
|
@@ -392,7 +395,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
392
395
|
|
|
393
396
|
/**
|
|
394
397
|
* Check to see if a flag exists
|
|
395
|
-
* @param {string} name
|
|
396
398
|
*/
|
|
397
399
|
return _createClass(FeatureFlagScope, [{
|
|
398
400
|
key: "checkForFlag",
|
|
@@ -404,8 +406,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
404
406
|
|
|
405
407
|
/**
|
|
406
408
|
* Add a feature flag
|
|
407
|
-
* @param {string} name
|
|
408
|
-
* @param {boolean} enabled
|
|
409
409
|
*/
|
|
410
410
|
}, {
|
|
411
411
|
key: "add",
|
|
@@ -418,7 +418,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
418
418
|
|
|
419
419
|
/**
|
|
420
420
|
* Enable a feature flag
|
|
421
|
-
* @param {string} name
|
|
422
421
|
*/
|
|
423
422
|
}, {
|
|
424
423
|
key: "enable",
|
|
@@ -429,7 +428,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
429
428
|
|
|
430
429
|
/**
|
|
431
430
|
* Disable a feature flag
|
|
432
|
-
* @param {string} name
|
|
433
431
|
*/
|
|
434
432
|
}, {
|
|
435
433
|
key: "disable",
|
|
@@ -441,7 +439,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
441
439
|
/**
|
|
442
440
|
* Merge the given feature flags with the current set of feature flags.
|
|
443
441
|
* Duplicate keys will be set to the value in the given feature flags.
|
|
444
|
-
* @param {object} flags
|
|
445
442
|
*/
|
|
446
443
|
}, {
|
|
447
444
|
key: "merge",
|
|
@@ -451,10 +448,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
451
448
|
_this2.flags.set(key, flags[key]);
|
|
452
449
|
});
|
|
453
450
|
}
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* @param {FeatureFlagScope} scope
|
|
457
|
-
*/
|
|
458
451
|
}, {
|
|
459
452
|
key: "mergeWithScope",
|
|
460
453
|
value: function mergeWithScope(scope) {
|
|
@@ -479,40 +472,41 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
479
472
|
|
|
480
473
|
/**
|
|
481
474
|
* Check if a feature flag is enabled
|
|
482
|
-
* @param {string} name
|
|
483
|
-
* @returns {boolean}
|
|
484
475
|
*/
|
|
485
476
|
}, {
|
|
486
477
|
key: "enabled",
|
|
487
478
|
value: function enabled(name) {
|
|
479
|
+
var _this$flags$get;
|
|
488
480
|
this.checkForFlag(name);
|
|
489
|
-
return this.flags.get(name);
|
|
481
|
+
return (_this$flags$get = this.flags.get(name)) !== null && _this$flags$get !== void 0 ? _this$flags$get : false;
|
|
490
482
|
}
|
|
491
483
|
}]);
|
|
492
484
|
}();
|
|
493
485
|
|
|
494
|
-
var
|
|
495
|
-
for (var i = 0; i < featureFlagInfo.length; i++) {
|
|
496
|
-
var featureFlag = featureFlagInfo[i];
|
|
497
|
-
FeatureFlags.add(featureFlag.name, featureFlag.enabled);
|
|
498
|
-
}
|
|
499
|
-
function createScope(flags) {
|
|
486
|
+
var createScope = function createScope(flags) {
|
|
500
487
|
return new FeatureFlagScope(flags);
|
|
501
|
-
}
|
|
502
|
-
function
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
488
|
+
};
|
|
489
|
+
var createDefaultScope = function createDefaultScope() {
|
|
490
|
+
var scope = createScope();
|
|
491
|
+
var _iterator = _createForOfIteratorHelper(featureFlagInfo),
|
|
492
|
+
_step;
|
|
493
|
+
try {
|
|
494
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
495
|
+
var featureFlag = _step.value;
|
|
496
|
+
scope.add(featureFlag.name, featureFlag.enabled);
|
|
497
|
+
}
|
|
498
|
+
} catch (err) {
|
|
499
|
+
_iterator.e(err);
|
|
500
|
+
} finally {
|
|
501
|
+
_iterator.f();
|
|
502
|
+
}
|
|
503
|
+
return scope;
|
|
504
|
+
};
|
|
505
|
+
var FeatureFlags = createDefaultScope();
|
|
506
|
+
var add = FeatureFlags.add.bind(FeatureFlags);
|
|
507
|
+
var enable = FeatureFlags.enable.bind(FeatureFlags);
|
|
508
|
+
var disable = FeatureFlags.disable.bind(FeatureFlags);
|
|
509
|
+
var enabled = FeatureFlags.enabled.bind(FeatureFlags);
|
|
510
|
+
var merge = FeatureFlags.merge.bind(FeatureFlags);
|
|
517
511
|
|
|
518
512
|
export { FeatureFlags, add, createScope, disable, enable, enabled, merge };
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright IBM Corp. 2015,
|
|
2
|
+
* Copyright IBM Corp. 2015, 2026
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -7,6 +7,128 @@
|
|
|
7
7
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
|
+
function _arrayLikeToArray(r, a) {
|
|
11
|
+
(null == a || a > r.length) && (a = r.length);
|
|
12
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
13
|
+
return n;
|
|
14
|
+
}
|
|
15
|
+
function _arrayWithHoles(r) {
|
|
16
|
+
if (Array.isArray(r)) return r;
|
|
17
|
+
}
|
|
18
|
+
function _classCallCheck(a, n) {
|
|
19
|
+
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
20
|
+
}
|
|
21
|
+
function _defineProperties(e, r) {
|
|
22
|
+
for (var t = 0; t < r.length; t++) {
|
|
23
|
+
var o = r[t];
|
|
24
|
+
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function _createClass(e, r, t) {
|
|
28
|
+
return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
|
|
29
|
+
writable: false
|
|
30
|
+
}), e;
|
|
31
|
+
}
|
|
32
|
+
function _createForOfIteratorHelper(r, e) {
|
|
33
|
+
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
34
|
+
if (!t) {
|
|
35
|
+
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
|
|
36
|
+
t && (r = t);
|
|
37
|
+
var n = 0,
|
|
38
|
+
F = function () {};
|
|
39
|
+
return {
|
|
40
|
+
s: F,
|
|
41
|
+
n: function () {
|
|
42
|
+
return n >= r.length ? {
|
|
43
|
+
done: true
|
|
44
|
+
} : {
|
|
45
|
+
done: false,
|
|
46
|
+
value: r[n++]
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
e: function (r) {
|
|
50
|
+
throw r;
|
|
51
|
+
},
|
|
52
|
+
f: F
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
56
|
+
}
|
|
57
|
+
var o,
|
|
58
|
+
a = true,
|
|
59
|
+
u = false;
|
|
60
|
+
return {
|
|
61
|
+
s: function () {
|
|
62
|
+
t = t.call(r);
|
|
63
|
+
},
|
|
64
|
+
n: function () {
|
|
65
|
+
var r = t.next();
|
|
66
|
+
return a = r.done, r;
|
|
67
|
+
},
|
|
68
|
+
e: function (r) {
|
|
69
|
+
u = true, o = r;
|
|
70
|
+
},
|
|
71
|
+
f: function () {
|
|
72
|
+
try {
|
|
73
|
+
a || null == t.return || t.return();
|
|
74
|
+
} finally {
|
|
75
|
+
if (u) throw o;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function _iterableToArrayLimit(r, l) {
|
|
81
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
82
|
+
if (null != t) {
|
|
83
|
+
var e,
|
|
84
|
+
n,
|
|
85
|
+
i,
|
|
86
|
+
u,
|
|
87
|
+
a = [],
|
|
88
|
+
f = true,
|
|
89
|
+
o = false;
|
|
90
|
+
try {
|
|
91
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
92
|
+
} catch (r) {
|
|
93
|
+
o = true, n = r;
|
|
94
|
+
} finally {
|
|
95
|
+
try {
|
|
96
|
+
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
97
|
+
} finally {
|
|
98
|
+
if (o) throw n;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return a;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function _nonIterableRest() {
|
|
105
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
106
|
+
}
|
|
107
|
+
function _slicedToArray(r, e) {
|
|
108
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
109
|
+
}
|
|
110
|
+
function _toPrimitive(t, r) {
|
|
111
|
+
if ("object" != typeof t || !t) return t;
|
|
112
|
+
var e = t[Symbol.toPrimitive];
|
|
113
|
+
if (void 0 !== e) {
|
|
114
|
+
var i = e.call(t, r);
|
|
115
|
+
if ("object" != typeof i) return i;
|
|
116
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
117
|
+
}
|
|
118
|
+
return (String )(t);
|
|
119
|
+
}
|
|
120
|
+
function _toPropertyKey(t) {
|
|
121
|
+
var i = _toPrimitive(t, "string");
|
|
122
|
+
return "symbol" == typeof i ? i : i + "";
|
|
123
|
+
}
|
|
124
|
+
function _unsupportedIterableToArray(r, a) {
|
|
125
|
+
if (r) {
|
|
126
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
127
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
128
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
10
132
|
var enabled$1 = {};
|
|
11
133
|
try {
|
|
12
134
|
if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) {
|
|
@@ -251,135 +373,16 @@ var featureFlagInfo = [{
|
|
|
251
373
|
enabled: enabled$1.enablePresence
|
|
252
374
|
}];
|
|
253
375
|
|
|
254
|
-
function _arrayLikeToArray(r, a) {
|
|
255
|
-
(null == a || a > r.length) && (a = r.length);
|
|
256
|
-
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
257
|
-
return n;
|
|
258
|
-
}
|
|
259
|
-
function _arrayWithHoles(r) {
|
|
260
|
-
if (Array.isArray(r)) return r;
|
|
261
|
-
}
|
|
262
|
-
function _classCallCheck(a, n) {
|
|
263
|
-
if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
|
|
264
|
-
}
|
|
265
|
-
function _defineProperties(e, r) {
|
|
266
|
-
for (var t = 0; t < r.length; t++) {
|
|
267
|
-
var o = r[t];
|
|
268
|
-
o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
function _createClass(e, r, t) {
|
|
272
|
-
return r && _defineProperties(e.prototype, r), Object.defineProperty(e, "prototype", {
|
|
273
|
-
writable: false
|
|
274
|
-
}), e;
|
|
275
|
-
}
|
|
276
|
-
function _createForOfIteratorHelper(r, e) {
|
|
277
|
-
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
278
|
-
if (!t) {
|
|
279
|
-
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
|
|
280
|
-
t && (r = t);
|
|
281
|
-
var n = 0,
|
|
282
|
-
F = function () {};
|
|
283
|
-
return {
|
|
284
|
-
s: F,
|
|
285
|
-
n: function () {
|
|
286
|
-
return n >= r.length ? {
|
|
287
|
-
done: true
|
|
288
|
-
} : {
|
|
289
|
-
done: false,
|
|
290
|
-
value: r[n++]
|
|
291
|
-
};
|
|
292
|
-
},
|
|
293
|
-
e: function (r) {
|
|
294
|
-
throw r;
|
|
295
|
-
},
|
|
296
|
-
f: F
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
300
|
-
}
|
|
301
|
-
var o,
|
|
302
|
-
a = true,
|
|
303
|
-
u = false;
|
|
304
|
-
return {
|
|
305
|
-
s: function () {
|
|
306
|
-
t = t.call(r);
|
|
307
|
-
},
|
|
308
|
-
n: function () {
|
|
309
|
-
var r = t.next();
|
|
310
|
-
return a = r.done, r;
|
|
311
|
-
},
|
|
312
|
-
e: function (r) {
|
|
313
|
-
u = true, o = r;
|
|
314
|
-
},
|
|
315
|
-
f: function () {
|
|
316
|
-
try {
|
|
317
|
-
a || null == t.return || t.return();
|
|
318
|
-
} finally {
|
|
319
|
-
if (u) throw o;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
function _iterableToArrayLimit(r, l) {
|
|
325
|
-
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
326
|
-
if (null != t) {
|
|
327
|
-
var e,
|
|
328
|
-
n,
|
|
329
|
-
i,
|
|
330
|
-
u,
|
|
331
|
-
a = [],
|
|
332
|
-
f = true,
|
|
333
|
-
o = false;
|
|
334
|
-
try {
|
|
335
|
-
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
336
|
-
} catch (r) {
|
|
337
|
-
o = true, n = r;
|
|
338
|
-
} finally {
|
|
339
|
-
try {
|
|
340
|
-
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
341
|
-
} finally {
|
|
342
|
-
if (o) throw n;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
return a;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
function _nonIterableRest() {
|
|
349
|
-
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
350
|
-
}
|
|
351
|
-
function _slicedToArray(r, e) {
|
|
352
|
-
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
353
|
-
}
|
|
354
|
-
function _toPrimitive(t, r) {
|
|
355
|
-
if ("object" != typeof t || !t) return t;
|
|
356
|
-
var e = t[Symbol.toPrimitive];
|
|
357
|
-
if (void 0 !== e) {
|
|
358
|
-
var i = e.call(t, r);
|
|
359
|
-
if ("object" != typeof i) return i;
|
|
360
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
361
|
-
}
|
|
362
|
-
return (String )(t);
|
|
363
|
-
}
|
|
364
|
-
function _toPropertyKey(t) {
|
|
365
|
-
var i = _toPrimitive(t, "string");
|
|
366
|
-
return "symbol" == typeof i ? i : i + "";
|
|
367
|
-
}
|
|
368
|
-
function _unsupportedIterableToArray(r, a) {
|
|
369
|
-
if (r) {
|
|
370
|
-
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
371
|
-
var t = {}.toString.call(r).slice(8, -1);
|
|
372
|
-
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
|
|
376
376
|
/**
|
|
377
|
-
* Copyright IBM Corp. 2015,
|
|
377
|
+
* Copyright IBM Corp. 2015, 2026
|
|
378
378
|
*
|
|
379
379
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
380
380
|
* LICENSE file in the root directory of this source tree.
|
|
381
381
|
*/
|
|
382
382
|
|
|
383
|
+
// TODO: Remove in the next major version.
|
|
384
|
+
/** @deprecated Use `FeatureFlagRecord` instead. */
|
|
385
|
+
|
|
383
386
|
var FeatureFlagScope = /*#__PURE__*/function () {
|
|
384
387
|
function FeatureFlagScope(flags) {
|
|
385
388
|
var _this = this;
|
|
@@ -394,7 +397,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
394
397
|
|
|
395
398
|
/**
|
|
396
399
|
* Check to see if a flag exists
|
|
397
|
-
* @param {string} name
|
|
398
400
|
*/
|
|
399
401
|
return _createClass(FeatureFlagScope, [{
|
|
400
402
|
key: "checkForFlag",
|
|
@@ -406,8 +408,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
406
408
|
|
|
407
409
|
/**
|
|
408
410
|
* Add a feature flag
|
|
409
|
-
* @param {string} name
|
|
410
|
-
* @param {boolean} enabled
|
|
411
411
|
*/
|
|
412
412
|
}, {
|
|
413
413
|
key: "add",
|
|
@@ -420,7 +420,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
420
420
|
|
|
421
421
|
/**
|
|
422
422
|
* Enable a feature flag
|
|
423
|
-
* @param {string} name
|
|
424
423
|
*/
|
|
425
424
|
}, {
|
|
426
425
|
key: "enable",
|
|
@@ -431,7 +430,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
431
430
|
|
|
432
431
|
/**
|
|
433
432
|
* Disable a feature flag
|
|
434
|
-
* @param {string} name
|
|
435
433
|
*/
|
|
436
434
|
}, {
|
|
437
435
|
key: "disable",
|
|
@@ -443,7 +441,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
443
441
|
/**
|
|
444
442
|
* Merge the given feature flags with the current set of feature flags.
|
|
445
443
|
* Duplicate keys will be set to the value in the given feature flags.
|
|
446
|
-
* @param {object} flags
|
|
447
444
|
*/
|
|
448
445
|
}, {
|
|
449
446
|
key: "merge",
|
|
@@ -453,10 +450,6 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
453
450
|
_this2.flags.set(key, flags[key]);
|
|
454
451
|
});
|
|
455
452
|
}
|
|
456
|
-
|
|
457
|
-
/**
|
|
458
|
-
* @param {FeatureFlagScope} scope
|
|
459
|
-
*/
|
|
460
453
|
}, {
|
|
461
454
|
key: "mergeWithScope",
|
|
462
455
|
value: function mergeWithScope(scope) {
|
|
@@ -481,41 +474,42 @@ var FeatureFlagScope = /*#__PURE__*/function () {
|
|
|
481
474
|
|
|
482
475
|
/**
|
|
483
476
|
* Check if a feature flag is enabled
|
|
484
|
-
* @param {string} name
|
|
485
|
-
* @returns {boolean}
|
|
486
477
|
*/
|
|
487
478
|
}, {
|
|
488
479
|
key: "enabled",
|
|
489
480
|
value: function enabled(name) {
|
|
481
|
+
var _this$flags$get;
|
|
490
482
|
this.checkForFlag(name);
|
|
491
|
-
return this.flags.get(name);
|
|
483
|
+
return (_this$flags$get = this.flags.get(name)) !== null && _this$flags$get !== void 0 ? _this$flags$get : false;
|
|
492
484
|
}
|
|
493
485
|
}]);
|
|
494
486
|
}();
|
|
495
487
|
|
|
496
|
-
var
|
|
497
|
-
for (var i = 0; i < featureFlagInfo.length; i++) {
|
|
498
|
-
var featureFlag = featureFlagInfo[i];
|
|
499
|
-
FeatureFlags.add(featureFlag.name, featureFlag.enabled);
|
|
500
|
-
}
|
|
501
|
-
function createScope(flags) {
|
|
488
|
+
var createScope = function createScope(flags) {
|
|
502
489
|
return new FeatureFlagScope(flags);
|
|
503
|
-
}
|
|
504
|
-
function
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
490
|
+
};
|
|
491
|
+
var createDefaultScope = function createDefaultScope() {
|
|
492
|
+
var scope = createScope();
|
|
493
|
+
var _iterator = _createForOfIteratorHelper(featureFlagInfo),
|
|
494
|
+
_step;
|
|
495
|
+
try {
|
|
496
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
497
|
+
var featureFlag = _step.value;
|
|
498
|
+
scope.add(featureFlag.name, featureFlag.enabled);
|
|
499
|
+
}
|
|
500
|
+
} catch (err) {
|
|
501
|
+
_iterator.e(err);
|
|
502
|
+
} finally {
|
|
503
|
+
_iterator.f();
|
|
504
|
+
}
|
|
505
|
+
return scope;
|
|
506
|
+
};
|
|
507
|
+
var FeatureFlags = createDefaultScope();
|
|
508
|
+
var add = FeatureFlags.add.bind(FeatureFlags);
|
|
509
|
+
var enable = FeatureFlags.enable.bind(FeatureFlags);
|
|
510
|
+
var disable = FeatureFlags.disable.bind(FeatureFlags);
|
|
511
|
+
var enabled = FeatureFlags.enabled.bind(FeatureFlags);
|
|
512
|
+
var merge = FeatureFlags.merge.bind(FeatureFlags);
|
|
519
513
|
|
|
520
514
|
exports.FeatureFlags = FeatureFlags;
|
|
521
515
|
exports.add = add;
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/feature-flags",
|
|
3
3
|
"description": "Build with feature flags in Carbon",
|
|
4
|
-
"version": "1.0.0",
|
|
4
|
+
"version": "1.1.0-rc.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "es/index.js",
|
|
8
|
+
"types": "types/index.d.ts",
|
|
8
9
|
"sass": "index.scss",
|
|
9
10
|
"repository": {
|
|
10
11
|
"type": "git",
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
"files": [
|
|
16
17
|
"es",
|
|
17
18
|
"lib",
|
|
19
|
+
"types",
|
|
18
20
|
"scss",
|
|
19
21
|
"index.scss",
|
|
20
22
|
"telemetry.yml"
|
|
@@ -31,8 +33,8 @@
|
|
|
31
33
|
"provenance": true
|
|
32
34
|
},
|
|
33
35
|
"scripts": {
|
|
34
|
-
"build": "yarn clean && node tasks/build.js && rollup -c",
|
|
35
|
-
"clean": "rimraf es lib scss/generated src/generated",
|
|
36
|
+
"build": "yarn clean && node tasks/build.js && rollup -c && ../../node_modules/.bin/tsc -p tsconfig.json",
|
|
37
|
+
"clean": "rimraf es lib types scss/generated src/generated",
|
|
36
38
|
"watch": "yarn clean && node tasks/build.js && rollup -c -w",
|
|
37
39
|
"postinstall": "ibmtelemetry --config=telemetry.yml"
|
|
38
40
|
},
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
"@babel/core": "^7.27.3",
|
|
41
43
|
"@babel/generator": "^7.27.3",
|
|
42
44
|
"@babel/preset-env": "^7.27.2",
|
|
45
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
43
46
|
"@babel/template": "^7.27.2",
|
|
44
47
|
"@babel/types": "^7.27.3",
|
|
45
48
|
"@carbon/scss-generator": "^10.20.0",
|
|
@@ -50,16 +53,19 @@
|
|
|
50
53
|
"js-yaml": "^4.1.0",
|
|
51
54
|
"rimraf": "^6.0.1",
|
|
52
55
|
"rollup": "^4.41.1",
|
|
53
|
-
"rollup-plugin-strip-banner": "^3.0.0"
|
|
56
|
+
"rollup-plugin-strip-banner": "^3.0.0",
|
|
57
|
+
"typescript": "^5.7.3",
|
|
58
|
+
"typescript-config-carbon": "^0.9.0"
|
|
54
59
|
},
|
|
55
60
|
"sideEffects": false,
|
|
56
61
|
"babel": {
|
|
57
62
|
"presets": [
|
|
58
|
-
"@babel/env"
|
|
63
|
+
"@babel/env",
|
|
64
|
+
"@babel/preset-typescript"
|
|
59
65
|
]
|
|
60
66
|
},
|
|
61
67
|
"dependencies": {
|
|
62
68
|
"@ibm/telemetry-js": "^1.5.0"
|
|
63
69
|
},
|
|
64
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "f3e7c2811340637ead19b4a1a550a20820602cc4"
|
|
65
71
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2015, 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export type FeatureFlagRecord = Record<string, boolean>;
|
|
8
|
+
/** @deprecated Use `FeatureFlagRecord` instead. */
|
|
9
|
+
export type FeatureFlags = FeatureFlagRecord;
|
|
10
|
+
export declare class FeatureFlagScope {
|
|
11
|
+
flags: Map<string, boolean>;
|
|
12
|
+
constructor(flags?: FeatureFlagRecord);
|
|
13
|
+
/**
|
|
14
|
+
* Check to see if a flag exists
|
|
15
|
+
*/
|
|
16
|
+
checkForFlag(name: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Add a feature flag
|
|
19
|
+
*/
|
|
20
|
+
add(name: string, enabled: boolean): void;
|
|
21
|
+
/**
|
|
22
|
+
* Enable a feature flag
|
|
23
|
+
*/
|
|
24
|
+
enable(name: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Disable a feature flag
|
|
27
|
+
*/
|
|
28
|
+
disable(name: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Merge the given feature flags with the current set of feature flags.
|
|
31
|
+
* Duplicate keys will be set to the value in the given feature flags.
|
|
32
|
+
*/
|
|
33
|
+
merge(flags: FeatureFlagRecord): void;
|
|
34
|
+
mergeWithScope(scope: FeatureFlagScope): void;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a feature flag is enabled
|
|
37
|
+
*/
|
|
38
|
+
enabled(name: string): boolean;
|
|
39
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2015, 2026
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { FeatureFlagScope, type FeatureFlagRecord } from './FeatureFlagScope';
|
|
8
|
+
export type { FeatureFlagRecord } from './FeatureFlagScope';
|
|
9
|
+
export declare const createScope: (flags?: FeatureFlagRecord) => FeatureFlagScope;
|
|
10
|
+
export declare const FeatureFlags: FeatureFlagScope;
|
|
11
|
+
export declare const add: (name: string, enabled: boolean) => void;
|
|
12
|
+
export declare const enable: (name: string) => void;
|
|
13
|
+
export declare const disable: (name: string) => void;
|
|
14
|
+
export declare const enabled: (name: string) => boolean;
|
|
15
|
+
export declare const merge: (flags: FeatureFlagRecord) => void;
|