@atlaskit/media-common 2.12.1 → 2.13.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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/media-common
2
2
 
3
+ ## 2.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`501240ef964`](https://bitbucket.org/atlassian/atlassian-frontend/commits/501240ef964) - Export `filterFeatureFlagKeysAllProducts`
8
+ - [`a09f961b9b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a09f961b9b2) - Add filterFeatureFlagNamesWithAllProducts for returning the feature flags for all the products
9
+ - [`a4f822c2d5d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a4f822c2d5d) - Add MediaFeatureFlagMap for Confluence and Jira
10
+
3
11
  ## 2.12.1
4
12
 
5
13
  ### Patch Changes
@@ -3,5 +3,6 @@
3
3
  "main": "../dist/cjs/analytics/index.js",
4
4
  "module": "../dist/esm/analytics/index.js",
5
5
  "module:es2019": "../dist/es2019/analytics/index.js",
6
+ "sideEffects": false,
6
7
  "types": "../dist/types/analytics/index.d.ts"
7
8
  }
package/dist/cjs/index.js CHANGED
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "downloadUrl", {
33
33
  return _downloadUrl.downloadUrl;
34
34
  }
35
35
  });
36
+ Object.defineProperty(exports, "filterFeatureFlagKeysAllProducts", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _mediaFeatureFlags.filterFeatureFlagKeysAllProducts;
40
+ }
41
+ });
36
42
  Object.defineProperty(exports, "filterFeatureFlagNames", {
37
43
  enumerable: true,
38
44
  get: function get() {
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "areEqualFeatureFlags", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _mediaFeatureFlags.areEqualFeatureFlags;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "defaultMediaFeatureFlags", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _mediaFeatureFlags.defaultMediaFeatureFlags;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "filterFeatureFlagKeysAllProducts", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _mediaFeatureFlags.filterFeatureFlagKeysAllProducts;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "filterFeatureFlagNames", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _mediaFeatureFlags.filterFeatureFlagNames;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "getMediaFeatureFlag", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _mediaFeatureFlags.getMediaFeatureFlag;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "useMemoizeFeatureFlags", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _mediaFeatureFlags.useMemoizeFeatureFlags;
40
+ }
41
+ });
42
+
43
+ var _mediaFeatureFlags = require("./mediaFeatureFlags");
@@ -5,17 +5,113 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.filterFeatureFlagNames = exports.defaultMediaFeatureFlags = exports.areEqualFeatureFlags = void 0;
8
+ exports.filterFeatureFlagNames = exports.filterFeatureFlagKeysAllProducts = exports.defaultMediaFeatureFlags = exports.areEqualFeatureFlags = void 0;
9
9
  exports.getMediaFeatureFlag = getMediaFeatureFlag;
10
- exports.useMemoizeFeatureFlags = void 0;
10
+ exports.useMemoizeFeatureFlags = exports.mediaFeatureFlagsProductToLaunchDarklyMap = exports.mapAndFilterFeatureFlagNames = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
14
  var _react = require("react");
15
15
 
16
- var _mediaFeatureFlagLocal = require("./mediaFeatureFlag-local");
16
+ var _mediaFeatureFlagLocal = require("../mediaFeatureFlag-local");
17
17
 
18
- // default values defined here, not necessary for components to know directly as they should use the function below
18
+ var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
19
+ if (!ffA && !ffB) {
20
+ return true;
21
+ }
22
+
23
+ if (!ffA || !ffB) {
24
+ return false;
25
+ }
26
+
27
+ var results = {
28
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
29
+ captions: ffA.captions === ffB.captions,
30
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
31
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
32
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
33
+ observedWidth: ffA.observedWidth === ffB.observedWidth
34
+ };
35
+ return Object.values(results).every(function (result) {
36
+ return result;
37
+ });
38
+ };
39
+
40
+ exports.areEqualFeatureFlags = areEqualFeatureFlags;
41
+
42
+ var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
43
+ var pairs = Object.entries(flags);
44
+ return pairs.filter(function (_ref) {
45
+ var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
46
+ _key = _ref2[0],
47
+ value = _ref2[1];
48
+
49
+ return !!value;
50
+ }).map(function (_ref3) {
51
+ var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
52
+ key = _ref4[0];
53
+
54
+ return key;
55
+ });
56
+ };
57
+ /**
58
+ * Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
59
+ * Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
60
+ * */
61
+
62
+
63
+ exports.filterFeatureFlagNames = filterFeatureFlagNames;
64
+
65
+ var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
66
+ var mediaFeatureFlags = filterFeatureFlagNames(flags);
67
+ return mediaFeatureFlags.map(function (key) {
68
+ return mediaFeatureFlagsProductToLaunchDarklyMap[product][key];
69
+ });
70
+ }; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
71
+
72
+ /**
73
+ * Takes a record of {Media Feature Flag Names → boolean}.
74
+ * Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
75
+ * */
76
+
77
+
78
+ exports.mapAndFilterFeatureFlagNames = mapAndFilterFeatureFlagNames;
79
+
80
+ var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
81
+ var filteredFlags = filterFeatureFlagNames(flags);
82
+ var supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
83
+ var ldFeatureFlags = [];
84
+ filteredFlags.forEach(function (flag) {
85
+ return supportedProducts.forEach(function (product) {
86
+ return ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag]);
87
+ });
88
+ });
89
+ return ldFeatureFlags.filter(function (flag) {
90
+ return flag !== '';
91
+ });
92
+ };
93
+
94
+ exports.filterFeatureFlagKeysAllProducts = filterFeatureFlagKeysAllProducts;
95
+ var mediaFeatureFlagsProductToLaunchDarklyMap = {
96
+ confluence: {
97
+ newCardExperience: 'confluence.media.cards.new.experience',
98
+ captions: 'confluence.frontend.fabric.editor.media.captions',
99
+ mediaInline: 'confluence.frontend.fabric.editor.media.inline',
100
+ folderUploads: 'confluence.media.picker.folder.uploads',
101
+ timestampOnVideo: '',
102
+ observedWidth: ''
103
+ },
104
+ jira: {
105
+ newCardExperience: 'issue.details.media-cards-new-experience',
106
+ captions: 'issue.details.editor.media.captions',
107
+ mediaInline: '',
108
+ folderUploads: '',
109
+ timestampOnVideo: '',
110
+ observedWidth: ''
111
+ }
112
+ }; // default values defined here, not necessary for components to know directly as they should use the function below
113
+
114
+ exports.mediaFeatureFlagsProductToLaunchDarklyMap = mediaFeatureFlagsProductToLaunchDarklyMap;
19
115
  var defaultMediaFeatureFlags = {
20
116
  newCardExperience: false,
21
117
  captions: false,
@@ -66,31 +162,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
66
162
  // eslint-disable-next-line no-console
67
163
  console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
68
164
  }
69
- }); // With this type we ensure the object will contain all the flags
70
-
71
- var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
72
- if (!ffA && !ffB) {
73
- return true;
74
- }
75
-
76
- if (!ffA || !ffB) {
77
- return false;
78
- }
79
-
80
- var results = {
81
- newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
82
- captions: ffA.captions === ffB.captions,
83
- mediaInline: ffA.mediaInline === ffB.mediaInline,
84
- folderUploads: ffA.folderUploads === ffB.folderUploads,
85
- timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
86
- observedWidth: ffA.observedWidth === ffB.observedWidth
87
- };
88
- return Object.values(results).every(function (result) {
89
- return result;
90
- });
91
- };
92
-
93
- exports.areEqualFeatureFlags = areEqualFeatureFlags;
165
+ });
94
166
 
95
167
  var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
96
168
  var ref = (0, _react.useRef)();
@@ -102,22 +174,4 @@ var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
102
174
  return ref.current;
103
175
  };
104
176
 
105
- exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
106
-
107
- var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
108
- var pairs = Object.entries(flags);
109
- return pairs.filter(function (_ref) {
110
- var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
111
- _key = _ref2[0],
112
- value = _ref2[1];
113
-
114
- return !!value;
115
- }).map(function (_ref3) {
116
- var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
117
- key = _ref4[0];
118
-
119
- return key;
120
- });
121
- };
122
-
123
- exports.filterFeatureFlagNames = filterFeatureFlagNames;
177
+ exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.12.1",
3
+ "version": "2.13.0",
4
4
  "sideEffects": false
5
5
  }
@@ -2,7 +2,7 @@ export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media
2
2
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
3
 
4
4
  // Media Feature Flags
5
- export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames } from './mediaFeatureFlags';
5
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
6
6
  // Analytics context
7
7
  export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
8
 
@@ -0,0 +1 @@
1
+ export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
@@ -1,7 +1,69 @@
1
1
  import { useRef } from 'react';
2
- import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local'; // Media feature flags - type and defaults defined here in one source of truth
2
+ import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
3
+ export const areEqualFeatureFlags = (ffA, ffB) => {
4
+ if (!ffA && !ffB) {
5
+ return true;
6
+ }
7
+
8
+ if (!ffA || !ffB) {
9
+ return false;
10
+ }
11
+
12
+ const results = {
13
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
14
+ captions: ffA.captions === ffB.captions,
15
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
16
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
17
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
18
+ observedWidth: ffA.observedWidth === ffB.observedWidth
19
+ };
20
+ return Object.values(results).every(result => result);
21
+ };
22
+ export const filterFeatureFlagNames = flags => {
23
+ const pairs = Object.entries(flags);
24
+ return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
25
+ };
26
+ /**
27
+ * Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
28
+ * Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
29
+ * */
30
+
31
+ export const mapAndFilterFeatureFlagNames = (flags, product) => {
32
+ const mediaFeatureFlags = filterFeatureFlagNames(flags);
33
+ return mediaFeatureFlags.map(key => mediaFeatureFlagsProductToLaunchDarklyMap[product][key]);
34
+ }; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
35
+
36
+ /**
37
+ * Takes a record of {Media Feature Flag Names → boolean}.
38
+ * Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
39
+ * */
40
+
41
+ export const filterFeatureFlagKeysAllProducts = flags => {
42
+ const filteredFlags = filterFeatureFlagNames(flags);
43
+ const supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
44
+ const ldFeatureFlags = [];
45
+ filteredFlags.forEach(flag => supportedProducts.forEach(product => ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag])));
46
+ return ldFeatureFlags.filter(flag => flag !== '');
47
+ };
48
+ export const mediaFeatureFlagsProductToLaunchDarklyMap = {
49
+ confluence: {
50
+ newCardExperience: 'confluence.media.cards.new.experience',
51
+ captions: 'confluence.frontend.fabric.editor.media.captions',
52
+ mediaInline: 'confluence.frontend.fabric.editor.media.inline',
53
+ folderUploads: 'confluence.media.picker.folder.uploads',
54
+ timestampOnVideo: '',
55
+ observedWidth: ''
56
+ },
57
+ jira: {
58
+ newCardExperience: 'issue.details.media-cards-new-experience',
59
+ captions: 'issue.details.editor.media.captions',
60
+ mediaInline: '',
61
+ folderUploads: '',
62
+ timestampOnVideo: '',
63
+ observedWidth: ''
64
+ }
65
+ }; // default values defined here, not necessary for components to know directly as they should use the function below
3
66
 
4
- // default values defined here, not necessary for components to know directly as they should use the function below
5
67
  export const defaultMediaFeatureFlags = {
6
68
  newCardExperience: false,
7
69
  captions: false,
@@ -49,27 +111,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(flagName => {
49
111
  // eslint-disable-next-line no-console
50
112
  console.info(`%c* LOCAL * MediaFeatureFlag.${flagName} = ${localOverride}`, 'font-weight:bold;color:cyan');
51
113
  }
52
- }); // With this type we ensure the object will contain all the flags
53
-
54
- export const areEqualFeatureFlags = (ffA, ffB) => {
55
- if (!ffA && !ffB) {
56
- return true;
57
- }
58
-
59
- if (!ffA || !ffB) {
60
- return false;
61
- }
62
-
63
- const results = {
64
- newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
65
- captions: ffA.captions === ffB.captions,
66
- mediaInline: ffA.mediaInline === ffB.mediaInline,
67
- folderUploads: ffA.folderUploads === ffB.folderUploads,
68
- timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
69
- observedWidth: ffA.observedWidth === ffB.observedWidth
70
- };
71
- return Object.values(results).every(result => result);
72
- };
114
+ });
73
115
  export const useMemoizeFeatureFlags = featureFlags => {
74
116
  const ref = useRef();
75
117
 
@@ -78,8 +120,4 @@ export const useMemoizeFeatureFlags = featureFlags => {
78
120
  }
79
121
 
80
122
  return ref.current;
81
- };
82
- export const filterFeatureFlagNames = flags => {
83
- const pairs = Object.entries(flags);
84
- return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
85
123
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.12.1",
3
+ "version": "2.13.0",
4
4
  "sideEffects": false
5
5
  }
package/dist/esm/index.js CHANGED
@@ -2,7 +2,7 @@ export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media
2
2
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
3
 
4
4
  // Media Feature Flags
5
- export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames } from './mediaFeatureFlags';
5
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
6
6
  // Analytics context
7
7
  export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
8
 
@@ -0,0 +1 @@
1
+ export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
@@ -1,8 +1,91 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import { useRef } from 'react';
3
- import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local'; // Media feature flags - type and defaults defined here in one source of truth
3
+ import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
4
+ export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
5
+ if (!ffA && !ffB) {
6
+ return true;
7
+ }
8
+
9
+ if (!ffA || !ffB) {
10
+ return false;
11
+ }
12
+
13
+ var results = {
14
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
15
+ captions: ffA.captions === ffB.captions,
16
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
17
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
18
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
19
+ observedWidth: ffA.observedWidth === ffB.observedWidth
20
+ };
21
+ return Object.values(results).every(function (result) {
22
+ return result;
23
+ });
24
+ };
25
+ export var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
26
+ var pairs = Object.entries(flags);
27
+ return pairs.filter(function (_ref) {
28
+ var _ref2 = _slicedToArray(_ref, 2),
29
+ _key = _ref2[0],
30
+ value = _ref2[1];
31
+
32
+ return !!value;
33
+ }).map(function (_ref3) {
34
+ var _ref4 = _slicedToArray(_ref3, 1),
35
+ key = _ref4[0];
36
+
37
+ return key;
38
+ });
39
+ };
40
+ /**
41
+ * Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
42
+ * Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
43
+ * */
44
+
45
+ export var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
46
+ var mediaFeatureFlags = filterFeatureFlagNames(flags);
47
+ return mediaFeatureFlags.map(function (key) {
48
+ return mediaFeatureFlagsProductToLaunchDarklyMap[product][key];
49
+ });
50
+ }; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
51
+
52
+ /**
53
+ * Takes a record of {Media Feature Flag Names → boolean}.
54
+ * Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
55
+ * */
56
+
57
+ export var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
58
+ var filteredFlags = filterFeatureFlagNames(flags);
59
+ var supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
60
+ var ldFeatureFlags = [];
61
+ filteredFlags.forEach(function (flag) {
62
+ return supportedProducts.forEach(function (product) {
63
+ return ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag]);
64
+ });
65
+ });
66
+ return ldFeatureFlags.filter(function (flag) {
67
+ return flag !== '';
68
+ });
69
+ };
70
+ export var mediaFeatureFlagsProductToLaunchDarklyMap = {
71
+ confluence: {
72
+ newCardExperience: 'confluence.media.cards.new.experience',
73
+ captions: 'confluence.frontend.fabric.editor.media.captions',
74
+ mediaInline: 'confluence.frontend.fabric.editor.media.inline',
75
+ folderUploads: 'confluence.media.picker.folder.uploads',
76
+ timestampOnVideo: '',
77
+ observedWidth: ''
78
+ },
79
+ jira: {
80
+ newCardExperience: 'issue.details.media-cards-new-experience',
81
+ captions: 'issue.details.editor.media.captions',
82
+ mediaInline: '',
83
+ folderUploads: '',
84
+ timestampOnVideo: '',
85
+ observedWidth: ''
86
+ }
87
+ }; // default values defined here, not necessary for components to know directly as they should use the function below
4
88
 
5
- // default values defined here, not necessary for components to know directly as they should use the function below
6
89
  export var defaultMediaFeatureFlags = {
7
90
  newCardExperience: false,
8
91
  captions: false,
@@ -50,29 +133,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
50
133
  // eslint-disable-next-line no-console
51
134
  console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
52
135
  }
53
- }); // With this type we ensure the object will contain all the flags
54
-
55
- export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
56
- if (!ffA && !ffB) {
57
- return true;
58
- }
59
-
60
- if (!ffA || !ffB) {
61
- return false;
62
- }
63
-
64
- var results = {
65
- newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
66
- captions: ffA.captions === ffB.captions,
67
- mediaInline: ffA.mediaInline === ffB.mediaInline,
68
- folderUploads: ffA.folderUploads === ffB.folderUploads,
69
- timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
70
- observedWidth: ffA.observedWidth === ffB.observedWidth
71
- };
72
- return Object.values(results).every(function (result) {
73
- return result;
74
- });
75
- };
136
+ });
76
137
  export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
77
138
  var ref = useRef();
78
139
 
@@ -81,19 +142,4 @@ export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags
81
142
  }
82
143
 
83
144
  return ref.current;
84
- };
85
- export var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
86
- var pairs = Object.entries(flags);
87
- return pairs.filter(function (_ref) {
88
- var _ref2 = _slicedToArray(_ref, 2),
89
- _key = _ref2[0],
90
- value = _ref2[1];
91
-
92
- return !!value;
93
- }).map(function (_ref3) {
94
- var _ref4 = _slicedToArray(_ref3, 1),
95
- key = _ref4[0];
96
-
97
- return key;
98
- });
99
145
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.12.1",
3
+ "version": "2.13.0",
4
4
  "sideEffects": false
5
5
  }
@@ -1,8 +1,8 @@
1
1
  export { downloadUrl } from './downloadUrl';
2
2
  export declare type MediaType = 'doc' | 'audio' | 'video' | 'image' | 'archive' | 'unknown';
3
3
  export declare type FileStatus = 'uploading' | 'processing' | 'processed' | 'error' | 'failed-processing';
4
- export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, } from './mediaFeatureFlags';
5
- export type { MediaFeatureFlags, WithMediaFeatureFlags, RequiredMediaFeatureFlags, } from './mediaFeatureFlags';
4
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts, } from './mediaFeatureFlags';
5
+ export type { MediaFeatureFlags, WithMediaFeatureFlags, } from './mediaFeatureFlags';
6
6
  export interface NumericalCardDimensions {
7
7
  width: number;
8
8
  height: number;
@@ -0,0 +1,2 @@
1
+ export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts, } from './mediaFeatureFlags';
2
+ export type { MediaFeatureFlags, WithMediaFeatureFlags, SupportedProduct, } from './types';
@@ -1,14 +1,17 @@
1
- export interface MediaFeatureFlags {
2
- newCardExperience?: boolean;
3
- captions?: boolean;
4
- mediaInline?: boolean;
5
- folderUploads?: boolean;
6
- timestampOnVideo?: boolean;
7
- observedWidth?: boolean;
8
- }
9
- export interface WithMediaFeatureFlags {
10
- featureFlags?: MediaFeatureFlags;
11
- }
1
+ import { RequiredMediaFeatureFlags, MediaFeatureFlags, MediaFeatureFlagsMap, SupportedProduct } from './types';
2
+ export declare const areEqualFeatureFlags: (ffA?: MediaFeatureFlags | undefined, ffB?: MediaFeatureFlags | undefined) => boolean;
3
+ export declare const filterFeatureFlagNames: (flags: RequiredMediaFeatureFlags) => Array<keyof MediaFeatureFlags>;
4
+ /**
5
+ * Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
6
+ * Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
7
+ * */
8
+ export declare const mapAndFilterFeatureFlagNames: (flags: RequiredMediaFeatureFlags, product: SupportedProduct) => Array<string>;
9
+ /**
10
+ * Takes a record of {Media Feature Flag Names → boolean}.
11
+ * Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
12
+ * */
13
+ export declare const filterFeatureFlagKeysAllProducts: (flags: RequiredMediaFeatureFlags) => Array<string>;
14
+ export declare const mediaFeatureFlagsProductToLaunchDarklyMap: Record<SupportedProduct, MediaFeatureFlagsMap>;
12
15
  export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
13
16
  /**
14
17
  * Public accessor from components to fallback to defaults if flags not passed,
@@ -21,7 +24,4 @@ export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
21
24
  * (you will see a warning in console if override used)
22
25
  * */
23
26
  export declare function getMediaFeatureFlag<T = boolean>(flagName: keyof MediaFeatureFlags, featureFlags?: MediaFeatureFlags): T;
24
- export declare type RequiredMediaFeatureFlags = Record<keyof Required<MediaFeatureFlags>, boolean>;
25
- export declare const areEqualFeatureFlags: (ffA?: MediaFeatureFlags | undefined, ffB?: MediaFeatureFlags | undefined) => boolean;
26
27
  export declare const useMemoizeFeatureFlags: (featureFlags?: MediaFeatureFlags | undefined) => MediaFeatureFlags | undefined;
27
- export declare const filterFeatureFlagNames: (flags: RequiredMediaFeatureFlags) => Array<keyof MediaFeatureFlags>;
@@ -0,0 +1,14 @@
1
+ export interface MediaFeatureFlags {
2
+ newCardExperience?: boolean;
3
+ captions?: boolean;
4
+ mediaInline?: boolean;
5
+ folderUploads?: boolean;
6
+ timestampOnVideo?: boolean;
7
+ observedWidth?: boolean;
8
+ }
9
+ export interface WithMediaFeatureFlags {
10
+ featureFlags?: MediaFeatureFlags;
11
+ }
12
+ export declare type RequiredMediaFeatureFlags = Record<keyof Required<MediaFeatureFlags>, boolean>;
13
+ export declare type MediaFeatureFlagsMap = Record<keyof Required<MediaFeatureFlags>, string>;
14
+ export declare type SupportedProduct = 'confluence' | 'jira';
@@ -3,5 +3,6 @@
3
3
  "main": "../dist/cjs/downloadUrl.js",
4
4
  "module": "../dist/esm/downloadUrl.js",
5
5
  "module:es2019": "../dist/es2019/downloadUrl.js",
6
+ "sideEffects": false,
6
7
  "types": "../dist/types/downloadUrl.d.ts"
7
8
  }
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common/mediaFeatureFlags",
3
- "main": "../dist/cjs/mediaFeatureFlags.js",
4
- "module": "../dist/esm/mediaFeatureFlags.js",
5
- "module:es2019": "../dist/es2019/mediaFeatureFlags.js",
6
- "types": "../dist/types/mediaFeatureFlags.d.ts"
3
+ "main": "../dist/cjs/mediaFeatureFlags/index.js",
4
+ "module": "../dist/esm/mediaFeatureFlags/index.js",
5
+ "module:es2019": "../dist/es2019/mediaFeatureFlags/index.js",
6
+ "sideEffects": false,
7
+ "types": "../dist/types/mediaFeatureFlags/index.d.ts"
7
8
  }
@@ -3,5 +3,6 @@
3
3
  "main": "../dist/cjs/mediaTypeUtils/index.js",
4
4
  "module": "../dist/esm/mediaTypeUtils/index.js",
5
5
  "module:es2019": "../dist/es2019/mediaTypeUtils/index.js",
6
+ "sideEffects": false,
6
7
  "types": "../dist/types/mediaTypeUtils/index.d.ts"
7
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.12.1",
3
+ "version": "2.13.0",
4
4
  "description": "Includes common utilities used by other media packages",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -16,7 +16,7 @@
16
16
  "atlaskit:src": "src/index.ts",
17
17
  "af:exports": {
18
18
  "./downloadUrl": "./src/downloadUrl.ts",
19
- "./mediaFeatureFlags": "./src/mediaFeatureFlags.ts",
19
+ "./mediaFeatureFlags": "./src/mediaFeatureFlags/index.ts",
20
20
  "./analytics": "./src/analytics/index.ts",
21
21
  "./docs": "./src/docs/index.ts",
22
22
  "./mediaTypeUtils": "./src/mediaTypeUtils/index.ts",
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@atlaskit/docs": "*",
47
- "@atlaskit/media-test-helpers": "^29.4.0",
47
+ "@atlaskit/media-test-helpers": "^30.0.0",
48
48
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
49
49
  "enzyme": "^3.10.0",
50
50
  "react": "^16.8.0",