@atlaskit/tmp-editor-statsig 148.0.0 → 149.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 (51) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/cjs/create-boolean-experiment.js +20 -0
  3. package/dist/cjs/{experiment-builders.js → create-multivariate-experiment.js} +2 -13
  4. package/dist/cjs/editor-experiment.js +107 -0
  5. package/dist/cjs/exp-val-no-exposure.js +15 -0
  6. package/dist/cjs/exp-val.js +31 -0
  7. package/dist/cjs/expVal.js +29 -49
  8. package/dist/cjs/experiments-config.js +298 -306
  9. package/dist/cjs/experiments.js +12 -127
  10. package/dist/cjs/is-boolean.js +9 -0
  11. package/dist/cjs/one-of.js +20 -0
  12. package/dist/cjs/type-guards.js +1 -27
  13. package/dist/cjs/unstable-editor-experiment-param.js +37 -0
  14. package/dist/es2019/create-boolean-experiment.js +11 -0
  15. package/dist/es2019/{experiment-builders.js → create-multivariate-experiment.js} +1 -12
  16. package/dist/es2019/editor-experiment.js +100 -0
  17. package/dist/es2019/exp-val-no-exposure.js +9 -0
  18. package/dist/es2019/exp-val.js +26 -0
  19. package/dist/es2019/expVal.js +11 -44
  20. package/dist/es2019/experiments-config.js +3 -11
  21. package/dist/es2019/experiments.js +5 -119
  22. package/dist/es2019/is-boolean.js +3 -0
  23. package/dist/es2019/one-of.js +14 -0
  24. package/dist/es2019/type-guards.js +0 -20
  25. package/dist/es2019/unstable-editor-experiment-param.js +31 -0
  26. package/dist/esm/create-boolean-experiment.js +13 -0
  27. package/dist/esm/{experiment-builders.js → create-multivariate-experiment.js} +1 -11
  28. package/dist/esm/editor-experiment.js +101 -0
  29. package/dist/esm/exp-val-no-exposure.js +9 -0
  30. package/dist/esm/exp-val.js +26 -0
  31. package/dist/esm/expVal.js +11 -44
  32. package/dist/esm/experiments-config.js +3 -11
  33. package/dist/esm/experiments.js +5 -120
  34. package/dist/esm/is-boolean.js +3 -0
  35. package/dist/esm/one-of.js +14 -0
  36. package/dist/esm/type-guards.js +0 -20
  37. package/dist/esm/unstable-editor-experiment-param.js +31 -0
  38. package/dist/types/create-boolean-experiment.d.ts +11 -0
  39. package/dist/types/create-multivariate-experiment.d.ts +11 -0
  40. package/dist/types/editor-experiment.d.ts +52 -0
  41. package/dist/types/exp-val-no-exposure.d.ts +2 -0
  42. package/dist/types/exp-val.d.ts +18 -0
  43. package/dist/types/expVal.d.ts +11 -26
  44. package/dist/types/experiments-config.d.ts +1 -7
  45. package/dist/types/experiments.d.ts +4 -63
  46. package/dist/types/is-boolean.d.ts +1 -0
  47. package/dist/types/one-of.d.ts +1 -0
  48. package/dist/types/type-guards.d.ts +8 -2
  49. package/dist/types/unstable-editor-experiment-param.d.ts +15 -0
  50. package/package.json +1 -1
  51. package/dist/types/experiment-builders.d.ts +0 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @atlaskit/editor-statsig-tmp
2
2
 
3
+ ## 149.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [`76e9f6152bf16`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/76e9f6152bf16) -
8
+ Enable launched synced block integrations and remove obsolete experiment scaffolding.
9
+
10
+ BREAKING: `@atlaskit/tmp-editor-statsig` no longer defines the `platform_synced_block` editor
11
+ experiment. Consumers that use `editorExperiment('platform_synced_block', ...)` to conditionally
12
+ enable synced-block integrations will no longer be able to look up that experiment; synced-block
13
+ integrations are now enabled by default. Remove each lookup and its conditional branch:
14
+
15
+ ```ts
16
+ // Before
17
+ if (editorExperiment('platform_synced_block', true)) {
18
+ enableSyncedBlocks();
19
+ }
20
+
21
+ // After
22
+ enableSyncedBlocks();
23
+ ```
24
+
25
+ ## 148.1.0
26
+
27
+ ### Minor Changes
28
+
29
+ - [`72434f514923a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/72434f514923a) -
30
+ Split multi-export modules into one export per file to meet the Volt package standard. The
31
+ `exports` map is unchanged — all 10 public subpaths keep their existing targets — and every symbol
32
+ that moved is still re-exported from the subpath that previously exposed it, now marked
33
+ `@deprecated`:
34
+ - `@atlaskit/tmp-editor-statsig/expVal` — `expVal` and `expValNoExposure` now live in
35
+ `src/exp-val.ts` and `src/exp-val-no-exposure.ts`.
36
+ - `@atlaskit/tmp-editor-statsig/experiments` — `editorExperiment` and
37
+ `unstable_editorExperimentParam` now live in `src/editor-experiment.ts` and
38
+ `src/unstable-editor-experiment-param.ts`.
39
+
40
+ `expValInternal` is now exported from `@atlaskit/tmp-editor-statsig/expVal`. It was previously a
41
+ module-private helper and is only public so the split `expVal`/`expValNoExposure` modules can
42
+ share it — it is not intended for consumer use and will be removed once the deprecated shims go
43
+ (VOLTC-139).
44
+
45
+ Internal-only modules were also split out (`create-boolean-experiment`,
46
+ `create-multivariate-experiment`, `is-boolean`, `one-of`), and barrel imports of
47
+ `@atlaskit/feature-gate-js-client` and `@atlaskit/platform-feature-flags` were replaced with their
48
+ subpath equivalents. No behaviour change.
49
+
3
50
  ## 148.0.0
4
51
 
5
52
  ### Major Changes
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createBooleanExperiment = createBooleanExperiment;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _isBoolean = require("./is-boolean");
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ /**
13
+ * Helper to create a boolean experiment configuration
14
+ */
15
+ function createBooleanExperiment(config) {
16
+ return _objectSpread(_objectSpread({}, config), {}, {
17
+ typeGuard: _isBoolean.isBoolean,
18
+ defaultValue: config.defaultValue
19
+ });
20
+ }
@@ -4,23 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.createBooleanExperiment = createBooleanExperiment;
8
7
  exports.createMultivariateExperiment = createMultivariateExperiment;
9
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _typeGuards = require("./type-guards");
10
+ var _oneOf = require("./one-of");
12
11
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
12
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
- /**
15
- * Helper to create a boolean experiment configuration
16
- */
17
- function createBooleanExperiment(config) {
18
- return _objectSpread(_objectSpread({}, config), {}, {
19
- typeGuard: _typeGuards.isBoolean,
20
- defaultValue: config.defaultValue
21
- });
22
- }
23
-
24
13
  /**
25
14
  * Helper to create a multivariate experiment configuration
26
15
  */
@@ -29,7 +18,7 @@ function createMultivariateExperiment(config) {
29
18
  return _objectSpread(_objectSpread({}, config), {}, {
30
19
  values: (0, _toConsumableArray2.default)(values),
31
20
  // Maintains the tuple
32
- typeGuard: (0, _typeGuards.oneOf)(config.values),
21
+ typeGuard: (0, _oneOf.oneOf)(config.values),
33
22
  defaultValue: config.defaultValue
34
23
  });
35
24
  }
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.editorExperiment = editorExperiment;
8
+ var _featureGates = _interopRequireDefault(require("@atlaskit/feature-gate-js-client/feature-gates"));
9
+ var _featureFlagsAccessed = require("@atlaskit/react-ufo/feature-flags-accessed");
10
+ var _experimentsConfig = require("./experiments-config");
11
+ var _setup = require("./setup");
12
+ /* eslint-disable @atlaskit/editor/no-re-export */
13
+ // Entry file in package.json
14
+
15
+ /**
16
+ * Check the value of an editor experiment.
17
+ *
18
+ * Note: By default this will not fire an [exposure event](https://hello.atlassian.net/wiki/spaces/~732385844/pages/3187295823/Exposure+Events+101).
19
+ *
20
+ * You need explicitly call it using the exposure property when you need an exposure event to be fired (all experiments should fire exposure events).
21
+ *
22
+ * @example Boolean experiment
23
+ * ```ts
24
+ * if (editorExperiment('example-boolean', true)) {
25
+ * // Run code for on variant
26
+ * } else {
27
+ * // Run code for off variant
28
+ * }
29
+ * ```
30
+ *
31
+ * @example Multivariate experiment
32
+ * ```ts
33
+ * switch (true) {
34
+ * case editorExperiment('example-multivariate', 'one'):
35
+ * // Run code for variant one
36
+ * break;
37
+ * case editorExperiment('example-multivariate', 'two'):
38
+ * // Run code for variant two
39
+ * break;
40
+ * case editorExperiment('example-multivariate', 'three'):
41
+ * // Run code for variant three
42
+ * break;
43
+ * }
44
+ * }
45
+ *```
46
+
47
+ @example Experiment with exposure event
48
+ * ```ts
49
+ * // Inside feature surface where either the control or variant should be shown
50
+ * if (editorExperiment('example-boolean', true, { exposure: true })) {
51
+ * // Run code for on variant
52
+ * } else {
53
+ * // Run code for off variant
54
+ * }
55
+ * ```
56
+ *
57
+ * @private
58
+ * @deprecated This utility is deprecated in favour of using `expValEquals` from `@atlaskit/tmp-editor-statsig/exp-val-equals`.
59
+ * ExpValEquals fires exposure events by default preventing cases when consumers of exitorExperiment forget to pass the `exposure` option.
60
+ * It also closely aligns with similar utilities in other Atlassian products.
61
+ * For no exposure option use `expValEqualsNoExposure` from `@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure`.
62
+ */
63
+ function editorExperiment(experimentName, expectedExperimentValue) {
64
+ var _experimentConfig$pro;
65
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
66
+ exposure: false
67
+ };
68
+ var experimentConfig = _experimentsConfig.editorExperimentsConfig[experimentName];
69
+ if (_setup._overrides[experimentName] !== undefined) {
70
+ // This will be hit in the case of a test setting an override
71
+ return _setup._overrides[experimentName] === expectedExperimentValue;
72
+ }
73
+ if (experimentConfig === undefined) {
74
+ // Warning! If a product is improperly configured (ie. their editor packages are misaligned)
75
+ // it can cause the editor to crash here or if the experiment does not exist.
76
+ // We will definitely crash via any code path later in this function - this just makes the error explicit and clear.
77
+ throw new Error("Editor experiment configuration is not defined ".concat(experimentName, ". Likely the experiment does not exist or editor package versions are misaligned"));
78
+ }
79
+ if (!_setup._product) {
80
+ // This will be hit in the case of a product not having setup the editor experiment tooling
81
+ return experimentConfig.defaultValue === expectedExperimentValue;
82
+ }
83
+
84
+ // Typescript is complaining here about accessing the productKeys property
85
+ // Ignored via go/ees005
86
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
87
+ var experimentKey = experimentConfig === null || experimentConfig === void 0 || (_experimentConfig$pro = experimentConfig.productKeys) === null || _experimentConfig$pro === void 0 ? void 0 : _experimentConfig$pro[_setup._product];
88
+ if (!experimentKey) {
89
+ var _editorExperimentsCon;
90
+ // This will be hit in the case of an experiment not being set up for the product
91
+ return ((_editorExperimentsCon = _experimentsConfig.editorExperimentsConfig[experimentName]) === null || _editorExperimentsCon === void 0 ? void 0 : _editorExperimentsCon.defaultValue) === expectedExperimentValue;
92
+ }
93
+
94
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
95
+ var experimentValue = _featureGates.default.getExperimentValue(experimentKey, experimentConfig.param, experimentConfig.defaultValue, {
96
+ typeGuard: experimentConfig.typeGuard,
97
+ fireExperimentExposure: options.exposure
98
+ });
99
+ if (
100
+ // When cleaning this gate up -- `calling where the experiments have the product key set`
101
+ // in __tests__/experiments should be updated (as it's had the count bumped to include these).
102
+ // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
103
+ _featureGates.default.getExperimentValue('cc_editor_experiments_ufo_gate_reporting', 'isEnabled', false)) {
104
+ (0, _featureFlagsAccessed.addFeatureFlagAccessed)("".concat(experimentName, ":").concat(experimentConfig.param), experimentValue);
105
+ }
106
+ return expectedExperimentValue === experimentValue;
107
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.expValNoExposure = expValNoExposure;
7
+ var _expVal = require("./expVal");
8
+ function expValNoExposure(experimentName, experimentParam, defaultValue) {
9
+ return (0, _expVal.expValInternal)({
10
+ experimentName: experimentName,
11
+ experimentParam: experimentParam,
12
+ defaultValue: defaultValue,
13
+ fireExperimentExposure: false
14
+ });
15
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.expVal = expVal;
7
+ var _expVal = require("./expVal");
8
+ /**
9
+ * Use to check a any param value for an experiment
10
+ *
11
+ * **Note**: this will return the default value when the experiment;
12
+ * - is not being served to the client (ie. pre start)
13
+ * - or is not configured in experiments-config
14
+ *
15
+ * If you need to check a param value without an exposure check see
16
+ * {@link import('./exp-val-no-exposure').expValNoExposure}
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const delay = expVal('experiment-name', 'param-name', defaultValue)
21
+ * await new Promise(res => setTimeout(res, delay)
22
+ * ```
23
+ */
24
+ function expVal(experimentName, experimentParam, defaultValue) {
25
+ return (0, _expVal.expValInternal)({
26
+ experimentName: experimentName,
27
+ experimentParam: experimentParam,
28
+ defaultValue: defaultValue,
29
+ fireExperimentExposure: true
30
+ });
31
+ }
@@ -4,13 +4,29 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.expVal = expVal;
8
- exports.expValNoExposure = expValNoExposure;
9
- var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
10
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
7
+ Object.defineProperty(exports, "expVal", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _expVal.expVal;
11
+ }
12
+ });
13
+ exports.expValInternal = expValInternal;
14
+ Object.defineProperty(exports, "expValNoExposure", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _expValNoExposure.expValNoExposure;
18
+ }
19
+ });
20
+ var _featureGates = _interopRequireDefault(require("@atlaskit/feature-gate-js-client/feature-gates"));
21
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
11
22
  var _featureFlagsAccessed = require("@atlaskit/react-ufo/feature-flags-accessed");
12
23
  var _experimentsConfig = require("./experiments-config");
13
24
  var _setup = require("./setup");
25
+ var _expVal = require("./exp-val");
26
+ var _expValNoExposure = require("./exp-val-no-exposure");
27
+ /* eslint-disable @repo/internal/deprecations/deprecation-ticket-required -- VOLTC-139 tracks removal of these deprecated re-export shims. */
28
+ /* eslint-disable @atlaskit/editor/no-re-export -- deprecated shims re-exporting the split `expVal`/`expValNoExposure` modules for backwards compatibility (VOLTC-139). */
29
+
14
30
  function expValInternal(_ref) {
15
31
  var _paramOverrides2, _experimentConfig$pro;
16
32
  var experimentName = _ref.experimentName,
@@ -37,7 +53,7 @@ function expValInternal(_ref) {
37
53
  }
38
54
 
39
55
  // If client is not initialized, we return the default value
40
- if (!_featureGateJsClient.default.initializeCompleted()) {
56
+ if (!_featureGates.default.initializeCompleted()) {
41
57
  return defaultValue;
42
58
  }
43
59
  if (!_setup._product) {
@@ -53,15 +69,15 @@ function expValInternal(_ref) {
53
69
  // This will be hit in the case of an experiment not being set up for the product
54
70
  return defaultValue;
55
71
  }
56
- var resolvedExperimentKey = !_experimentsConfig.disallowsProductKeys.includes(experimentName) && (0, _platformFeatureFlags.fg)('platform_editor_experiments_use_product_keys') ? experimentKey : experimentName;
72
+ var resolvedExperimentKey = !_experimentsConfig.disallowsProductKeys.includes(experimentName) && (0, _fg.fg)('platform_editor_experiments_use_product_keys') ? experimentKey : experimentName;
57
73
 
58
74
  // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
59
- var experimentValue = _featureGateJsClient.default.getExperimentValue(resolvedExperimentKey, experimentParam, defaultValue, {
75
+ var experimentValue = _featureGates.default.getExperimentValue(resolvedExperimentKey, experimentParam, defaultValue, {
60
76
  fireExperimentExposure: fireExperimentExposure
61
77
  });
62
78
  if (
63
79
  // eslint-disable-next-line @atlaskit/platform/use-recommended-utils
64
- _featureGateJsClient.default.getExperimentValue('cc_editor_experiments_ufo_gate_reporting_expval', 'isEnabled', false)) {
80
+ _featureGates.default.getExperimentValue('cc_editor_experiments_ufo_gate_reporting_expval', 'isEnabled', false)) {
65
81
  // Duplicated from /confluence/next/packages/feature-experiments/src/index.ts
66
82
  (0, _featureFlagsAccessed.addFeatureFlagAccessed)("".concat(resolvedExperimentKey, ":").concat(experimentParam), experimentValue);
67
83
  }
@@ -69,45 +85,9 @@ function expValInternal(_ref) {
69
85
  }
70
86
 
71
87
  /**
72
- * Use to check a any param value for an experiment
73
- *
74
- * **Note**: this will return the default value when the experiment;
75
- * - is not being served to the client (ie. pre start)
76
- * - or is not configured in experiments-config
77
- *
78
- * If you need to check a param value without an exposure check see {@link expValNoExposure}
79
- *
80
- * @example
81
- * ```ts
82
- * const delay = expVal('experiment-name', 'param-name', defaultValue)
83
- * await new Promise(res => setTimeout(res, delay)
84
- * ```
88
+ * @deprecated Use `import { expVal } from '@atlaskit/tmp-editor-statsig/expVal'` instead.
85
89
  */
86
- function expVal(experimentName, experimentParam, defaultValue) {
87
- return expValInternal({
88
- experimentName: experimentName,
89
- experimentParam: experimentParam,
90
- defaultValue: defaultValue,
91
- fireExperimentExposure: true
92
- });
93
- } /**
94
- * Use to check a any param value for an experiment without firing an exposure event
95
- *
96
- * **Note**: this will return the default value when the experiment;
97
- * - is not being served to the client (ie. pre start)
98
- * - or is not configured in experiments-config
99
- *
100
- * @example
101
- * ```ts
102
- * const delay = expParamEqualsNoExposure('experiment-name', 'param-name', defaultValue)
103
- * await new Promise(res => setTimeout(res, delay)
104
- * ```
105
- */
106
- function expValNoExposure(experimentName, experimentParam, defaultValue) {
107
- return expValInternal({
108
- experimentName: experimentName,
109
- experimentParam: experimentParam,
110
- defaultValue: defaultValue,
111
- fireExperimentExposure: false
112
- });
113
- }
90
+
91
+ /**
92
+ * @deprecated Use `import { expValNoExposure } from '@atlaskit/tmp-editor-statsig/expVal'` instead.
93
+ */