@atlaskit/media-common 2.12.1 → 2.15.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 +21 -0
- package/analytics/package.json +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/mediaFeatureFlags/index.js +43 -0
- package/dist/cjs/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +89 -49
- package/dist/cjs/mediaFeatureFlags/productKeys.js +37 -0
- package/dist/cjs/mediaFeatureFlags/types.js +10 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/mediaFeatureFlags/index.js +1 -0
- package/dist/es2019/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +51 -28
- package/dist/es2019/mediaFeatureFlags/productKeys.js +26 -0
- package/dist/es2019/mediaFeatureFlags/types.js +3 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/mediaFeatureFlags/index.js +1 -0
- package/dist/esm/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +72 -41
- package/dist/esm/mediaFeatureFlags/productKeys.js +28 -0
- package/dist/esm/mediaFeatureFlags/types.js +3 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/mediaFeatureFlags/index.d.ts +2 -0
- package/dist/types/{mediaFeatureFlags.d.ts → mediaFeatureFlags/mediaFeatureFlags.d.ts} +13 -14
- package/dist/types/mediaFeatureFlags/productKeys.d.ts +2 -0
- package/dist/types/mediaFeatureFlags/types.d.ts +17 -0
- package/downloadUrl/package.json +1 -0
- package/mediaFeatureFlags/package.json +5 -4
- package/mediaTypeUtils/package.json +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/media-common
|
|
2
2
|
|
|
3
|
+
## 2.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`1a76e2839e6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1a76e2839e6) - Default value for mediaUploadApiV2 Media feature flag set to true.
|
|
8
|
+
|
|
9
|
+
## 2.14.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`bfde909c9b4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/bfde909c9b4) - Add new feature flag mediaUploadApiV2
|
|
14
|
+
- [`8d6064cece4`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8d6064cece4) - Add missing values for the launch darkly feature flags name
|
|
15
|
+
|
|
16
|
+
## 2.13.0
|
|
17
|
+
|
|
18
|
+
### Minor Changes
|
|
19
|
+
|
|
20
|
+
- [`501240ef964`](https://bitbucket.org/atlassian/atlassian-frontend/commits/501240ef964) - Export `filterFeatureFlagKeysAllProducts`
|
|
21
|
+
- [`a09f961b9b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a09f961b9b2) - Add filterFeatureFlagNamesWithAllProducts for returning the feature flags for all the products
|
|
22
|
+
- [`a4f822c2d5d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a4f822c2d5d) - Add MediaFeatureFlagMap for Confluence and Jira
|
|
23
|
+
|
|
3
24
|
## 2.12.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/analytics/package.json
CHANGED
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,98 @@ 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.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("
|
|
16
|
+
var _mediaFeatureFlagLocal = require("../mediaFeatureFlag-local");
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var _types = require("./types");
|
|
19
|
+
|
|
20
|
+
var _productKeys = require("./productKeys");
|
|
21
|
+
|
|
22
|
+
var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
23
|
+
if (!ffA && !ffB) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!ffA || !ffB) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var results = {
|
|
32
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
33
|
+
captions: ffA.captions === ffB.captions,
|
|
34
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
35
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
36
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth,
|
|
37
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
38
|
+
mediaUploadApiV2: ffA.mediaUploadApiV2 === ffB.mediaUploadApiV2
|
|
39
|
+
};
|
|
40
|
+
return Object.values(results).every(function (result) {
|
|
41
|
+
return result;
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.areEqualFeatureFlags = areEqualFeatureFlags;
|
|
46
|
+
|
|
47
|
+
var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
48
|
+
var pairs = Object.entries(flags);
|
|
49
|
+
return pairs.filter(function (_ref) {
|
|
50
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
51
|
+
_key = _ref2[0],
|
|
52
|
+
value = _ref2[1];
|
|
53
|
+
|
|
54
|
+
return !!value;
|
|
55
|
+
}).map(function (_ref3) {
|
|
56
|
+
var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
|
|
57
|
+
key = _ref4[0];
|
|
58
|
+
|
|
59
|
+
return key;
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
64
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
65
|
+
* */
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
exports.filterFeatureFlagNames = filterFeatureFlagNames;
|
|
69
|
+
|
|
70
|
+
var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
|
|
71
|
+
var mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
72
|
+
return mediaFeatureFlags.map(function (key) {
|
|
73
|
+
return (0, _productKeys.getProductKeys)()[product][key];
|
|
74
|
+
});
|
|
75
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
79
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
80
|
+
* */
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
exports.mapAndFilterFeatureFlagNames = mapAndFilterFeatureFlagNames;
|
|
84
|
+
|
|
85
|
+
var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
|
|
86
|
+
var filteredFlags = filterFeatureFlagNames(flags);
|
|
87
|
+
var ldFeatureFlags = [];
|
|
88
|
+
filteredFlags.forEach(function (flag) {
|
|
89
|
+
return _types.supportedProducts.forEach(function (product) {
|
|
90
|
+
return ldFeatureFlags.push((0, _productKeys.getProductKeys)()[product][flag]);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
return ldFeatureFlags.filter(function (flag) {
|
|
94
|
+
return flag !== '';
|
|
95
|
+
});
|
|
96
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
exports.filterFeatureFlagKeysAllProducts = filterFeatureFlagKeysAllProducts;
|
|
19
100
|
var defaultMediaFeatureFlags = {
|
|
20
101
|
newCardExperience: false,
|
|
21
102
|
captions: false,
|
|
@@ -23,8 +104,9 @@ var defaultMediaFeatureFlags = {
|
|
|
23
104
|
// We can't yet switch this feature on
|
|
24
105
|
// TODO https://product-fabric.atlassian.net/browse/MEX-104
|
|
25
106
|
folderUploads: false,
|
|
107
|
+
observedWidth: false,
|
|
26
108
|
timestampOnVideo: false,
|
|
27
|
-
|
|
109
|
+
mediaUploadApiV2: true
|
|
28
110
|
};
|
|
29
111
|
/**
|
|
30
112
|
* Public accessor from components to fallback to defaults if flags not passed,
|
|
@@ -66,31 +148,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
|
|
|
66
148
|
// eslint-disable-next-line no-console
|
|
67
149
|
console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
|
|
68
150
|
}
|
|
69
|
-
});
|
|
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;
|
|
151
|
+
});
|
|
94
152
|
|
|
95
153
|
var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
96
154
|
var ref = (0, _react.useRef)();
|
|
@@ -102,22 +160,4 @@ var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
|
102
160
|
return ref.current;
|
|
103
161
|
};
|
|
104
162
|
|
|
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;
|
|
163
|
+
exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getProductKeys = void 0;
|
|
7
|
+
var productKeys = {
|
|
8
|
+
confluence: {
|
|
9
|
+
newCardExperience: 'confluence.frontend.media.cards.new.experience',
|
|
10
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
11
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
12
|
+
folderUploads: 'confluence.frontend.media.picker.folder.uploads',
|
|
13
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
14
|
+
observedWidth: '',
|
|
15
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
16
|
+
timestampOnVideo: '',
|
|
17
|
+
mediaUploadApiV2: 'confluence.enable.media.upload.api.v2'
|
|
18
|
+
},
|
|
19
|
+
jira: {
|
|
20
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
21
|
+
captions: 'issue.details.editor.media.captions',
|
|
22
|
+
// Manged by Linking Platform. No Rollout plan found for Jira
|
|
23
|
+
mediaInline: '',
|
|
24
|
+
folderUploads: 'issue.details.media-picker-folder-upload',
|
|
25
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
26
|
+
observedWidth: '',
|
|
27
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
28
|
+
timestampOnVideo: '',
|
|
29
|
+
mediaUploadApiV2: 'issue.details.enable-media-upload-api-version-2'
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var getProductKeys = function getProductKeys() {
|
|
34
|
+
return productKeys;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
exports.getProductKeys = getProductKeys;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.supportedProducts = void 0;
|
|
7
|
+
// Media feature flags - type and defaults defined here in one source of truth
|
|
8
|
+
// With this type we ensure the object will contain all the flags
|
|
9
|
+
var supportedProducts = ['confluence', 'jira'];
|
|
10
|
+
exports.supportedProducts = supportedProducts;
|
package/dist/cjs/version.json
CHANGED
package/dist/es2019/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,7 +1,53 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
|
-
import { getLocalMediaFeatureFlag } from '
|
|
2
|
+
import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
|
|
3
|
+
import { supportedProducts } from './types';
|
|
4
|
+
import { getProductKeys } from './productKeys';
|
|
5
|
+
export const areEqualFeatureFlags = (ffA, ffB) => {
|
|
6
|
+
if (!ffA && !ffB) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (!ffA || !ffB) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const results = {
|
|
15
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
16
|
+
captions: ffA.captions === ffB.captions,
|
|
17
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
18
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
19
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth,
|
|
20
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
21
|
+
mediaUploadApiV2: ffA.mediaUploadApiV2 === ffB.mediaUploadApiV2
|
|
22
|
+
};
|
|
23
|
+
return Object.values(results).every(result => result);
|
|
24
|
+
};
|
|
25
|
+
export const filterFeatureFlagNames = flags => {
|
|
26
|
+
const pairs = Object.entries(flags);
|
|
27
|
+
return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
31
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
32
|
+
* */
|
|
33
|
+
|
|
34
|
+
export const mapAndFilterFeatureFlagNames = (flags, product) => {
|
|
35
|
+
const mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
36
|
+
return mediaFeatureFlags.map(key => getProductKeys()[product][key]);
|
|
37
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
41
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
42
|
+
* */
|
|
43
|
+
|
|
44
|
+
export const filterFeatureFlagKeysAllProducts = flags => {
|
|
45
|
+
const filteredFlags = filterFeatureFlagNames(flags);
|
|
46
|
+
const ldFeatureFlags = [];
|
|
47
|
+
filteredFlags.forEach(flag => supportedProducts.forEach(product => ldFeatureFlags.push(getProductKeys()[product][flag])));
|
|
48
|
+
return ldFeatureFlags.filter(flag => flag !== '');
|
|
49
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
3
50
|
|
|
4
|
-
// default values defined here, not necessary for components to know directly as they should use the function below
|
|
5
51
|
export const defaultMediaFeatureFlags = {
|
|
6
52
|
newCardExperience: false,
|
|
7
53
|
captions: false,
|
|
@@ -9,8 +55,9 @@ export const defaultMediaFeatureFlags = {
|
|
|
9
55
|
// We can't yet switch this feature on
|
|
10
56
|
// TODO https://product-fabric.atlassian.net/browse/MEX-104
|
|
11
57
|
folderUploads: false,
|
|
58
|
+
observedWidth: false,
|
|
12
59
|
timestampOnVideo: false,
|
|
13
|
-
|
|
60
|
+
mediaUploadApiV2: true
|
|
14
61
|
};
|
|
15
62
|
/**
|
|
16
63
|
* Public accessor from components to fallback to defaults if flags not passed,
|
|
@@ -49,27 +96,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(flagName => {
|
|
|
49
96
|
// eslint-disable-next-line no-console
|
|
50
97
|
console.info(`%c* LOCAL * MediaFeatureFlag.${flagName} = ${localOverride}`, 'font-weight:bold;color:cyan');
|
|
51
98
|
}
|
|
52
|
-
});
|
|
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
|
-
};
|
|
99
|
+
});
|
|
73
100
|
export const useMemoizeFeatureFlags = featureFlags => {
|
|
74
101
|
const ref = useRef();
|
|
75
102
|
|
|
@@ -78,8 +105,4 @@ export const useMemoizeFeatureFlags = featureFlags => {
|
|
|
78
105
|
}
|
|
79
106
|
|
|
80
107
|
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
108
|
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const productKeys = {
|
|
2
|
+
confluence: {
|
|
3
|
+
newCardExperience: 'confluence.frontend.media.cards.new.experience',
|
|
4
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
5
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
6
|
+
folderUploads: 'confluence.frontend.media.picker.folder.uploads',
|
|
7
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
8
|
+
observedWidth: '',
|
|
9
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
10
|
+
timestampOnVideo: '',
|
|
11
|
+
mediaUploadApiV2: 'confluence.enable.media.upload.api.v2'
|
|
12
|
+
},
|
|
13
|
+
jira: {
|
|
14
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
15
|
+
captions: 'issue.details.editor.media.captions',
|
|
16
|
+
// Manged by Linking Platform. No Rollout plan found for Jira
|
|
17
|
+
mediaInline: '',
|
|
18
|
+
folderUploads: 'issue.details.media-picker-folder-upload',
|
|
19
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
20
|
+
observedWidth: '',
|
|
21
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
22
|
+
timestampOnVideo: '',
|
|
23
|
+
mediaUploadApiV2: 'issue.details.enable-media-upload-api-version-2'
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export const getProductKeys = () => productKeys;
|
package/dist/es2019/version.json
CHANGED
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,75 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import { useRef } from 'react';
|
|
3
|
-
import { getLocalMediaFeatureFlag } from '
|
|
3
|
+
import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
|
|
4
|
+
import { supportedProducts } from './types';
|
|
5
|
+
import { getProductKeys } from './productKeys';
|
|
6
|
+
export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
7
|
+
if (!ffA && !ffB) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
if (!ffA || !ffB) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var results = {
|
|
16
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
17
|
+
captions: ffA.captions === ffB.captions,
|
|
18
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
19
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
20
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth,
|
|
21
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
22
|
+
mediaUploadApiV2: ffA.mediaUploadApiV2 === ffB.mediaUploadApiV2
|
|
23
|
+
};
|
|
24
|
+
return Object.values(results).every(function (result) {
|
|
25
|
+
return result;
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
29
|
+
var pairs = Object.entries(flags);
|
|
30
|
+
return pairs.filter(function (_ref) {
|
|
31
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
32
|
+
_key = _ref2[0],
|
|
33
|
+
value = _ref2[1];
|
|
34
|
+
|
|
35
|
+
return !!value;
|
|
36
|
+
}).map(function (_ref3) {
|
|
37
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
38
|
+
key = _ref4[0];
|
|
39
|
+
|
|
40
|
+
return key;
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
45
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
46
|
+
* */
|
|
47
|
+
|
|
48
|
+
export var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
|
|
49
|
+
var mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
50
|
+
return mediaFeatureFlags.map(function (key) {
|
|
51
|
+
return getProductKeys()[product][key];
|
|
52
|
+
});
|
|
53
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
57
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
58
|
+
* */
|
|
59
|
+
|
|
60
|
+
export var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
|
|
61
|
+
var filteredFlags = filterFeatureFlagNames(flags);
|
|
62
|
+
var ldFeatureFlags = [];
|
|
63
|
+
filteredFlags.forEach(function (flag) {
|
|
64
|
+
return supportedProducts.forEach(function (product) {
|
|
65
|
+
return ldFeatureFlags.push(getProductKeys()[product][flag]);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
return ldFeatureFlags.filter(function (flag) {
|
|
69
|
+
return flag !== '';
|
|
70
|
+
});
|
|
71
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
4
72
|
|
|
5
|
-
// default values defined here, not necessary for components to know directly as they should use the function below
|
|
6
73
|
export var defaultMediaFeatureFlags = {
|
|
7
74
|
newCardExperience: false,
|
|
8
75
|
captions: false,
|
|
@@ -10,8 +77,9 @@ export var defaultMediaFeatureFlags = {
|
|
|
10
77
|
// We can't yet switch this feature on
|
|
11
78
|
// TODO https://product-fabric.atlassian.net/browse/MEX-104
|
|
12
79
|
folderUploads: false,
|
|
80
|
+
observedWidth: false,
|
|
13
81
|
timestampOnVideo: false,
|
|
14
|
-
|
|
82
|
+
mediaUploadApiV2: true
|
|
15
83
|
};
|
|
16
84
|
/**
|
|
17
85
|
* Public accessor from components to fallback to defaults if flags not passed,
|
|
@@ -50,29 +118,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
|
|
|
50
118
|
// eslint-disable-next-line no-console
|
|
51
119
|
console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
|
|
52
120
|
}
|
|
53
|
-
});
|
|
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
|
-
};
|
|
121
|
+
});
|
|
76
122
|
export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
77
123
|
var ref = useRef();
|
|
78
124
|
|
|
@@ -81,19 +127,4 @@ export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags
|
|
|
81
127
|
}
|
|
82
128
|
|
|
83
129
|
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
130
|
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var productKeys = {
|
|
2
|
+
confluence: {
|
|
3
|
+
newCardExperience: 'confluence.frontend.media.cards.new.experience',
|
|
4
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
5
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
6
|
+
folderUploads: 'confluence.frontend.media.picker.folder.uploads',
|
|
7
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
8
|
+
observedWidth: '',
|
|
9
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
10
|
+
timestampOnVideo: '',
|
|
11
|
+
mediaUploadApiV2: 'confluence.enable.media.upload.api.v2'
|
|
12
|
+
},
|
|
13
|
+
jira: {
|
|
14
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
15
|
+
captions: 'issue.details.editor.media.captions',
|
|
16
|
+
// Manged by Linking Platform. No Rollout plan found for Jira
|
|
17
|
+
mediaInline: '',
|
|
18
|
+
folderUploads: 'issue.details.media-picker-folder-upload',
|
|
19
|
+
//TODO fill the value after https://product-fabric.atlassian.net/browse/MEX-1593
|
|
20
|
+
observedWidth: '',
|
|
21
|
+
// TODO https://product-fabric.atlassian.net/browse/MEX-1620
|
|
22
|
+
timestampOnVideo: '',
|
|
23
|
+
mediaUploadApiV2: 'issue.details.enable-media-upload-api-version-2'
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
export var getProductKeys = function getProductKeys() {
|
|
27
|
+
return productKeys;
|
|
28
|
+
};
|
package/dist/esm/version.json
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -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,
|
|
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,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { RequiredMediaFeatureFlags, MediaFeatureFlags, 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>;
|
|
12
14
|
export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
|
|
13
15
|
/**
|
|
14
16
|
* Public accessor from components to fallback to defaults if flags not passed,
|
|
@@ -21,7 +23,4 @@ export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
|
|
|
21
23
|
* (you will see a warning in console if override used)
|
|
22
24
|
* */
|
|
23
25
|
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
26
|
export declare const useMemoizeFeatureFlags: (featureFlags?: MediaFeatureFlags | undefined) => MediaFeatureFlags | undefined;
|
|
27
|
-
export declare const filterFeatureFlagNames: (flags: RequiredMediaFeatureFlags) => Array<keyof MediaFeatureFlags>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface MediaFeatureFlags {
|
|
2
|
+
newCardExperience?: boolean;
|
|
3
|
+
captions?: boolean;
|
|
4
|
+
mediaInline?: boolean;
|
|
5
|
+
folderUploads?: boolean;
|
|
6
|
+
observedWidth?: boolean;
|
|
7
|
+
timestampOnVideo?: boolean;
|
|
8
|
+
mediaUploadApiV2?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface WithMediaFeatureFlags {
|
|
11
|
+
featureFlags?: MediaFeatureFlags;
|
|
12
|
+
}
|
|
13
|
+
export declare type RequiredMediaFeatureFlags = Record<keyof Required<MediaFeatureFlags>, boolean>;
|
|
14
|
+
export declare type MediaFeatureFlagsMap = Record<keyof Required<MediaFeatureFlags>, string>;
|
|
15
|
+
export declare const supportedProducts: readonly ["confluence", "jira"];
|
|
16
|
+
export declare type SupportedProduct = typeof supportedProducts[number];
|
|
17
|
+
export declare type ProductKeys = Record<SupportedProduct, MediaFeatureFlagsMap>;
|
package/downloadUrl/package.json
CHANGED
|
@@ -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
|
-
"
|
|
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
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-common",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.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": "^
|
|
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",
|