@atlaskit/adf-utils 17.1.4 → 17.1.5

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 (190) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/codemods/17.0.0-update-imports-to-new-entry-points.ts +2 -3
  3. package/dist/cjs/transforms/helpers.js +14 -0
  4. package/dist/cjs/transforms/invalid-media-content-transform.js +103 -0
  5. package/dist/cjs/transforms/nodes-missing-content-transform.js +26 -20
  6. package/dist/cjs/transforms.js +9 -1
  7. package/dist/cjs/version.json +1 -1
  8. package/dist/es2019/transforms/helpers.js +5 -0
  9. package/dist/es2019/transforms/invalid-media-content-transform.js +77 -0
  10. package/dist/es2019/transforms/nodes-missing-content-transform.js +20 -17
  11. package/dist/es2019/transforms.js +2 -1
  12. package/dist/es2019/version.json +1 -1
  13. package/dist/esm/transforms/helpers.js +5 -0
  14. package/dist/esm/transforms/invalid-media-content-transform.js +91 -0
  15. package/dist/esm/transforms/nodes-missing-content-transform.js +22 -17
  16. package/dist/esm/transforms.js +2 -1
  17. package/dist/esm/version.json +1 -1
  18. package/dist/types/transforms/helpers.d.ts +2 -0
  19. package/dist/types/transforms/invalid-media-content-transform.d.ts +5 -0
  20. package/dist/types/transforms.d.ts +1 -0
  21. package/package.json +6 -10
  22. package/report.api.md +15 -2
  23. package/dist/types-ts4.0/builders/marks/alignment.d.ts +0 -3
  24. package/dist/types-ts4.0/builders/marks/annotation.d.ts +0 -3
  25. package/dist/types-ts4.0/builders/marks/breakout.d.ts +0 -3
  26. package/dist/types-ts4.0/builders/marks/code.d.ts +0 -2
  27. package/dist/types-ts4.0/builders/marks/data-consumer.d.ts +0 -3
  28. package/dist/types-ts4.0/builders/marks/em.d.ts +0 -2
  29. package/dist/types-ts4.0/builders/marks/fragment.d.ts +0 -3
  30. package/dist/types-ts4.0/builders/marks/indentation.d.ts +0 -3
  31. package/dist/types-ts4.0/builders/marks/link.d.ts +0 -3
  32. package/dist/types-ts4.0/builders/marks/strike.d.ts +0 -2
  33. package/dist/types-ts4.0/builders/marks/strong.d.ts +0 -2
  34. package/dist/types-ts4.0/builders/marks/subsup.d.ts +0 -3
  35. package/dist/types-ts4.0/builders/marks/text-color.d.ts +0 -3
  36. package/dist/types-ts4.0/builders/marks/underline.d.ts +0 -2
  37. package/dist/types-ts4.0/builders/nodes/block-card.d.ts +0 -2
  38. package/dist/types-ts4.0/builders/nodes/blockquote.d.ts +0 -2
  39. package/dist/types-ts4.0/builders/nodes/bodied-extension.d.ts +0 -2
  40. package/dist/types-ts4.0/builders/nodes/bullet-list.d.ts +0 -2
  41. package/dist/types-ts4.0/builders/nodes/caption.d.ts +0 -2
  42. package/dist/types-ts4.0/builders/nodes/code-block.d.ts +0 -3
  43. package/dist/types-ts4.0/builders/nodes/date.d.ts +0 -2
  44. package/dist/types-ts4.0/builders/nodes/decision-item.d.ts +0 -2
  45. package/dist/types-ts4.0/builders/nodes/decision-list.d.ts +0 -2
  46. package/dist/types-ts4.0/builders/nodes/doc.d.ts +0 -2
  47. package/dist/types-ts4.0/builders/nodes/embed-card.d.ts +0 -2
  48. package/dist/types-ts4.0/builders/nodes/emoji.d.ts +0 -2
  49. package/dist/types-ts4.0/builders/nodes/expand.d.ts +0 -2
  50. package/dist/types-ts4.0/builders/nodes/extension.d.ts +0 -2
  51. package/dist/types-ts4.0/builders/nodes/hard-break.d.ts +0 -2
  52. package/dist/types-ts4.0/builders/nodes/heading.d.ts +0 -2
  53. package/dist/types-ts4.0/builders/nodes/inline-card.d.ts +0 -2
  54. package/dist/types-ts4.0/builders/nodes/inline-extension.d.ts +0 -2
  55. package/dist/types-ts4.0/builders/nodes/layout-column.d.ts +0 -4
  56. package/dist/types-ts4.0/builders/nodes/layout-section.d.ts +0 -2
  57. package/dist/types-ts4.0/builders/nodes/list-item.d.ts +0 -2
  58. package/dist/types-ts4.0/builders/nodes/media-group.d.ts +0 -2
  59. package/dist/types-ts4.0/builders/nodes/media-inline.d.ts +0 -2
  60. package/dist/types-ts4.0/builders/nodes/media-single.d.ts +0 -7
  61. package/dist/types-ts4.0/builders/nodes/media.d.ts +0 -2
  62. package/dist/types-ts4.0/builders/nodes/mention.d.ts +0 -2
  63. package/dist/types-ts4.0/builders/nodes/nested-expand.d.ts +0 -2
  64. package/dist/types-ts4.0/builders/nodes/ordered-list.d.ts +0 -2
  65. package/dist/types-ts4.0/builders/nodes/panel.d.ts +0 -2
  66. package/dist/types-ts4.0/builders/nodes/paragraph.d.ts +0 -2
  67. package/dist/types-ts4.0/builders/nodes/placeholder.d.ts +0 -2
  68. package/dist/types-ts4.0/builders/nodes/rule.d.ts +0 -2
  69. package/dist/types-ts4.0/builders/nodes/status.d.ts +0 -2
  70. package/dist/types-ts4.0/builders/nodes/table-cell.d.ts +0 -2
  71. package/dist/types-ts4.0/builders/nodes/table-header.d.ts +0 -2
  72. package/dist/types-ts4.0/builders/nodes/table-row.d.ts +0 -2
  73. package/dist/types-ts4.0/builders/nodes/table.d.ts +0 -2
  74. package/dist/types-ts4.0/builders/nodes/task-item.d.ts +0 -2
  75. package/dist/types-ts4.0/builders/nodes/task-list.d.ts +0 -2
  76. package/dist/types-ts4.0/builders/nodes/text.d.ts +0 -2
  77. package/dist/types-ts4.0/builders/types.d.ts +0 -8
  78. package/dist/types-ts4.0/builders/utils/apply-mark.d.ts +0 -4
  79. package/dist/types-ts4.0/builders/utils/create-text-nodes.d.ts +0 -3
  80. package/dist/types-ts4.0/builders/utils/is-duplicate-mark.d.ts +0 -6
  81. package/dist/types-ts4.0/builders.d.ts +0 -63
  82. package/dist/types-ts4.0/empty-adf.d.ts +0 -2
  83. package/dist/types-ts4.0/index.d.ts +0 -1
  84. package/dist/types-ts4.0/scrub/default-node-replacements.d.ts +0 -10
  85. package/dist/types-ts4.0/scrub/default-value-replacements.d.ts +0 -6
  86. package/dist/types-ts4.0/scrub/hash.d.ts +0 -1
  87. package/dist/types-ts4.0/scrub/scrub-adf.d.ts +0 -9
  88. package/dist/types-ts4.0/scrub/scrub-content.d.ts +0 -11
  89. package/dist/types-ts4.0/scrub.d.ts +0 -1
  90. package/dist/types-ts4.0/transforms/dedupe-marks-transform.d.ts +0 -8
  91. package/dist/types-ts4.0/transforms/indentation-marks-transform.d.ts +0 -7
  92. package/dist/types-ts4.0/transforms/media-link-transform.d.ts +0 -5
  93. package/dist/types-ts4.0/transforms/nodes-missing-content-transform.d.ts +0 -7
  94. package/dist/types-ts4.0/transforms/text-link-code-transform.d.ts +0 -5
  95. package/dist/types-ts4.0/transforms.d.ts +0 -5
  96. package/dist/types-ts4.0/traverse/filter.d.ts +0 -2
  97. package/dist/types-ts4.0/traverse/map.d.ts +0 -2
  98. package/dist/types-ts4.0/traverse/reduce.d.ts +0 -2
  99. package/dist/types-ts4.0/traverse/traverse.d.ts +0 -12
  100. package/dist/types-ts4.0/traverse.d.ts +0 -4
  101. package/dist/types-ts4.0/types/index.d.ts +0 -24
  102. package/dist/types-ts4.0/types/validatorTypes.d.ts +0 -137
  103. package/dist/types-ts4.0/validator/entry.d.ts +0 -1
  104. package/dist/types-ts4.0/validator/rules.d.ts +0 -3
  105. package/dist/types-ts4.0/validator/specs/alignment.d.ts +0 -17
  106. package/dist/types-ts4.0/validator/specs/annotation.d.ts +0 -20
  107. package/dist/types-ts4.0/validator/specs/atomic_inline.d.ts +0 -2
  108. package/dist/types-ts4.0/validator/specs/blockCard.d.ts +0 -26
  109. package/dist/types-ts4.0/validator/specs/block_content.d.ts +0 -2
  110. package/dist/types-ts4.0/validator/specs/blockquote.d.ts +0 -15
  111. package/dist/types-ts4.0/validator/specs/bodiedExtension.d.ts +0 -50
  112. package/dist/types-ts4.0/validator/specs/bodiedExtension_with_marks.d.ts +0 -10
  113. package/dist/types-ts4.0/validator/specs/breakout.d.ts +0 -17
  114. package/dist/types-ts4.0/validator/specs/bulletList.d.ts +0 -14
  115. package/dist/types-ts4.0/validator/specs/caption.d.ts +0 -14
  116. package/dist/types-ts4.0/validator/specs/code.d.ts +0 -9
  117. package/dist/types-ts4.0/validator/specs/codeBlock.d.ts +0 -38
  118. package/dist/types-ts4.0/validator/specs/codeBlock_with_marks.d.ts +0 -10
  119. package/dist/types-ts4.0/validator/specs/codeBlock_with_no_marks.d.ts +0 -11
  120. package/dist/types-ts4.0/validator/specs/code_inline.d.ts +0 -10
  121. package/dist/types-ts4.0/validator/specs/dataConsumer.d.ts +0 -20
  122. package/dist/types-ts4.0/validator/specs/date.d.ts +0 -17
  123. package/dist/types-ts4.0/validator/specs/decisionItem.d.ts +0 -25
  124. package/dist/types-ts4.0/validator/specs/decisionList.d.ts +0 -22
  125. package/dist/types-ts4.0/validator/specs/doc.d.ts +0 -18
  126. package/dist/types-ts4.0/validator/specs/em.d.ts +0 -9
  127. package/dist/types-ts4.0/validator/specs/embedCard.d.ts +0 -35
  128. package/dist/types-ts4.0/validator/specs/emoji.d.ts +0 -24
  129. package/dist/types-ts4.0/validator/specs/expand.d.ts +0 -28
  130. package/dist/types-ts4.0/validator/specs/expand_with_breakout_mark.d.ts +0 -10
  131. package/dist/types-ts4.0/validator/specs/expand_with_no_mark.d.ts +0 -11
  132. package/dist/types-ts4.0/validator/specs/extension.d.ts +0 -44
  133. package/dist/types-ts4.0/validator/specs/extension_with_marks.d.ts +0 -10
  134. package/dist/types-ts4.0/validator/specs/formatted_text_inline.d.ts +0 -10
  135. package/dist/types-ts4.0/validator/specs/fragment.d.ts +0 -21
  136. package/dist/types-ts4.0/validator/specs/hardBreak.d.ts +0 -19
  137. package/dist/types-ts4.0/validator/specs/heading.d.ts +0 -29
  138. package/dist/types-ts4.0/validator/specs/heading_with_alignment.d.ts +0 -10
  139. package/dist/types-ts4.0/validator/specs/heading_with_indentation.d.ts +0 -10
  140. package/dist/types-ts4.0/validator/specs/heading_with_no_marks.d.ts +0 -11
  141. package/dist/types-ts4.0/validator/specs/indentation.d.ts +0 -18
  142. package/dist/types-ts4.0/validator/specs/index.d.ts +0 -82
  143. package/dist/types-ts4.0/validator/specs/inline.d.ts +0 -2
  144. package/dist/types-ts4.0/validator/specs/inlineCard.d.ts +0 -26
  145. package/dist/types-ts4.0/validator/specs/inlineExtension.d.ts +0 -39
  146. package/dist/types-ts4.0/validator/specs/inlineExtension_with_marks.d.ts +0 -10
  147. package/dist/types-ts4.0/validator/specs/inline_comment_marker.d.ts +0 -16
  148. package/dist/types-ts4.0/validator/specs/layoutColumn.d.ts +0 -24
  149. package/dist/types-ts4.0/validator/specs/layoutSection.d.ts +0 -18
  150. package/dist/types-ts4.0/validator/specs/layoutSection_full.d.ts +0 -21
  151. package/dist/types-ts4.0/validator/specs/layoutSection_with_single_column.d.ts +0 -21
  152. package/dist/types-ts4.0/validator/specs/link.d.ts +0 -33
  153. package/dist/types-ts4.0/validator/specs/link_text_inline.d.ts +0 -10
  154. package/dist/types-ts4.0/validator/specs/listItem.d.ts +0 -15
  155. package/dist/types-ts4.0/validator/specs/media.d.ts +0 -73
  156. package/dist/types-ts4.0/validator/specs/mediaGroup.d.ts +0 -15
  157. package/dist/types-ts4.0/validator/specs/mediaInline.d.ts +0 -51
  158. package/dist/types-ts4.0/validator/specs/mediaSingle.d.ts +0 -29
  159. package/dist/types-ts4.0/validator/specs/mediaSingle_caption.d.ts +0 -13
  160. package/dist/types-ts4.0/validator/specs/mediaSingle_full.d.ts +0 -12
  161. package/dist/types-ts4.0/validator/specs/mention.d.ts +0 -29
  162. package/dist/types-ts4.0/validator/specs/nestedExpand.d.ts +0 -19
  163. package/dist/types-ts4.0/validator/specs/nestedExpand_content.d.ts +0 -7
  164. package/dist/types-ts4.0/validator/specs/nestedExpand_with_no_marks.d.ts +0 -11
  165. package/dist/types-ts4.0/validator/specs/non_nestable_block_content.d.ts +0 -2
  166. package/dist/types-ts4.0/validator/specs/orderedList.d.ts +0 -23
  167. package/dist/types-ts4.0/validator/specs/panel.d.ts +0 -39
  168. package/dist/types-ts4.0/validator/specs/paragraph.d.ts +0 -20
  169. package/dist/types-ts4.0/validator/specs/paragraph_with_alignment.d.ts +0 -10
  170. package/dist/types-ts4.0/validator/specs/paragraph_with_indentation.d.ts +0 -10
  171. package/dist/types-ts4.0/validator/specs/paragraph_with_no_marks.d.ts +0 -11
  172. package/dist/types-ts4.0/validator/specs/placeholder.d.ts +0 -16
  173. package/dist/types-ts4.0/validator/specs/rule.d.ts +0 -9
  174. package/dist/types-ts4.0/validator/specs/status.d.ts +0 -29
  175. package/dist/types-ts4.0/validator/specs/strike.d.ts +0 -9
  176. package/dist/types-ts4.0/validator/specs/strong.d.ts +0 -9
  177. package/dist/types-ts4.0/validator/specs/subsup.d.ts +0 -17
  178. package/dist/types-ts4.0/validator/specs/table.d.ts +0 -38
  179. package/dist/types-ts4.0/validator/specs/tableCell.d.ts +0 -35
  180. package/dist/types-ts4.0/validator/specs/tableCell_content.d.ts +0 -7
  181. package/dist/types-ts4.0/validator/specs/tableHeader.d.ts +0 -35
  182. package/dist/types-ts4.0/validator/specs/tableRow.d.ts +0 -13
  183. package/dist/types-ts4.0/validator/specs/taskItem.d.ts +0 -26
  184. package/dist/types-ts4.0/validator/specs/taskList.d.ts +0 -23
  185. package/dist/types-ts4.0/validator/specs/text.d.ts +0 -18
  186. package/dist/types-ts4.0/validator/specs/textColor.d.ts +0 -17
  187. package/dist/types-ts4.0/validator/specs/underline.d.ts +0 -9
  188. package/dist/types-ts4.0/validator/utils.d.ts +0 -8
  189. package/dist/types-ts4.0/validator/validator.d.ts +0 -3
  190. package/dist/types-ts4.0/validator.d.ts +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/adf-utils
2
2
 
3
+ ## 17.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`17014a9004c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/17014a9004c) - [ux] ED-15632 preprocess invalid media adf to avoid empty mediaSingle node and duplicated captions and media inside mediaSingle.The document will be transformed for this cases and validation error not thrown.When mediaSingle with empty content is encountered - it will be removed.When mediaSingle with duplicated captions or media nodes is encountered - duplicate captions or media nodes will be removed, prioritising removal of nodes with empty content first.
8
+
3
9
  ## 17.1.4
4
10
 
5
11
  ### Patch Changes
@@ -166,9 +166,8 @@ const entryPointChangeRequests: EntryPointChangeRequest[] = [
166
166
  scrub,
167
167
  ];
168
168
 
169
- export const entryPointChangeMigrates = createMigratesFromEntryPointChangeRequests(
170
- entryPointChangeRequests,
171
- );
169
+ export const entryPointChangeMigrates =
170
+ createMigratesFromEntryPointChangeRequests(entryPointChangeRequests);
172
171
 
173
172
  const transformer = createTransformer(entryPointChangeMigrates);
174
173
 
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isEmpty = void 0;
7
+
8
+ var isEmpty = function isEmpty(node) {
9
+ var _node$content;
10
+
11
+ return !(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length);
12
+ };
13
+
14
+ exports.isEmpty = isEmpty;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.transformInvalidMediaContent = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
14
+ var _traverse = require("../traverse/traverse");
15
+
16
+ var _helpers = require("./helpers");
17
+
18
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
+
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
+
22
+ var getChildrenTypeCounts = function getChildrenTypeCounts(nodeContent, allowedTypes) {
23
+ var childrenTypes = {};
24
+ nodeContent.forEach(function (childNode, index) {
25
+ if (!(childNode !== null && childNode !== void 0 && childNode.type) || !allowedTypes.includes(childNode.type)) {
26
+ return;
27
+ }
28
+
29
+ if (!childrenTypes[childNode.type]) {
30
+ childrenTypes[childNode.type] = 1;
31
+ return;
32
+ }
33
+
34
+ childrenTypes[childNode.type]++;
35
+ });
36
+ return childrenTypes;
37
+ };
38
+
39
+ var removeDuplicatedNodes = function removeDuplicatedNodes(type, content, predicate) {
40
+ var maxIterations = 10;
41
+ var childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
42
+ var firstPredicateNodeIndex = content.findIndex(predicate);
43
+
44
+ while (childrenTypeCounts > 1 && firstPredicateNodeIndex > -1 && maxIterations-- > 0) {
45
+ content.splice(firstPredicateNodeIndex, 1);
46
+ firstPredicateNodeIndex = content.findIndex(predicate);
47
+ childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
48
+ }
49
+ };
50
+ /**
51
+ * @param {{[type:string]:number}} allowedTypes - array types allowed to deduplicate
52
+ */
53
+
54
+
55
+ var deduplicateMediaSingleChildren = function deduplicateMediaSingleChildren(node, allowedTypes) {
56
+ if (!node.content) {
57
+ return;
58
+ }
59
+
60
+ var content = (0, _toConsumableArray2.default)(node.content);
61
+ Object.keys(allowedTypes).forEach(function (type) {
62
+ //prioritise removing empty nodes first
63
+ removeDuplicatedNodes(type, content, function (node) {
64
+ return (node === null || node === void 0 ? void 0 : node.type) === type && (0, _helpers.isEmpty)(node);
65
+ }); //remove other remaining dupicates
66
+
67
+ removeDuplicatedNodes(type, content, function (node) {
68
+ return (node === null || node === void 0 ? void 0 : node.type) === type;
69
+ });
70
+ });
71
+ return _objectSpread(_objectSpread({}, node), {}, {
72
+ content: content
73
+ });
74
+ };
75
+
76
+ var transformInvalidMediaContent = function transformInvalidMediaContent(adf) {
77
+ var isTransformed = false;
78
+ var transformedAdf = (0, _traverse.traverse)(adf, {
79
+ mediaSingle: function mediaSingle(node) {
80
+ var _node$content;
81
+
82
+ if (!(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length)) {
83
+ return;
84
+ }
85
+
86
+ var disallowedDuplicateTypes = ['media', 'caption'];
87
+ var childrenTypes = getChildrenTypeCounts(node.content, disallowedDuplicateTypes);
88
+
89
+ if (Object.values(childrenTypes).some(function (occurences) {
90
+ return occurences > 1;
91
+ })) {
92
+ isTransformed = true;
93
+ return deduplicateMediaSingleChildren(node, childrenTypes);
94
+ }
95
+ }
96
+ });
97
+ return {
98
+ transformedAdf: transformedAdf,
99
+ isTransformed: isTransformed
100
+ };
101
+ };
102
+
103
+ exports.transformInvalidMediaContent = transformInvalidMediaContent;
@@ -15,6 +15,8 @@ var _traverse = require("../traverse/traverse");
15
15
 
16
16
  var _builders = require("../builders");
17
17
 
18
+ var _helpers = require("./helpers");
19
+
18
20
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
19
21
 
20
22
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -43,15 +45,9 @@ var createValidEmptyContent = function createValidEmptyContent(node) {
43
45
  }
44
46
  };
45
47
 
46
- var isEmpty = function isEmpty(node) {
47
- var _node$content;
48
-
49
- return ((_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.length) === 0;
50
- };
51
-
52
48
  var fixIfTableCellInvalidEmpty = function fixIfTableCellInvalidEmpty(reportTransform) {
53
49
  return function (node) {
54
- if (isEmpty(node)) {
50
+ if ((0, _helpers.isEmpty)(node)) {
55
51
  reportTransform();
56
52
  return _objectSpread(_objectSpread({}, node), {}, {
57
53
  content: createValidEmptyContent(node)
@@ -61,17 +57,17 @@ var fixIfTableCellInvalidEmpty = function fixIfTableCellInvalidEmpty(reportTrans
61
57
  };
62
58
 
63
59
  var hasNonListItemChildren = function hasNonListItemChildren(node) {
64
- var _node$content2;
60
+ var _node$content;
65
61
 
66
- return (_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.some(function (node) {
62
+ return (_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.some(function (node) {
67
63
  return (node === null || node === void 0 ? void 0 : node.type) !== 'listItem';
68
64
  });
69
65
  };
70
66
 
71
67
  var hasEmptyListItemChildren = function hasEmptyListItemChildren(node) {
72
- var _node$content3;
68
+ var _node$content2;
73
69
 
74
- return (_node$content3 = node.content) === null || _node$content3 === void 0 ? void 0 : _node$content3.some(function (childNode) {
70
+ return (_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.some(function (childNode) {
75
71
  var _childNode$content2;
76
72
 
77
73
  return (childNode === null || childNode === void 0 ? void 0 : childNode.type) === 'listItem' && !((_childNode$content2 = childNode.content) !== null && _childNode$content2 !== void 0 && _childNode$content2.length);
@@ -86,7 +82,7 @@ var tryCreateValidListItemWrappedChildren = function tryCreateValidListItemWrapp
86
82
  switch (childNode.type) {
87
83
  case 'listItem':
88
84
  {
89
- if (isEmpty(childNode)) {
85
+ if ((0, _helpers.isEmpty)(childNode)) {
90
86
  var result = (0, _builders.listItem)([(0, _builders.paragraph)()]);
91
87
  return result;
92
88
  }
@@ -118,9 +114,9 @@ var fixIfListParentWithInvalidListItemChildren = function fixIfListParentWithInv
118
114
  };
119
115
 
120
116
  var hasNonTableRowChildren = function hasNonTableRowChildren(node) {
121
- var _node$content4;
117
+ var _node$content3;
122
118
 
123
- return (_node$content4 = node.content) === null || _node$content4 === void 0 ? void 0 : _node$content4.some(function (node) {
119
+ return (_node$content3 = node.content) === null || _node$content3 === void 0 ? void 0 : _node$content3.some(function (node) {
124
120
  return (node === null || node === void 0 ? void 0 : node.type) !== 'tableRow';
125
121
  });
126
122
  };
@@ -144,7 +140,7 @@ var tryCreateValidTableRowWrappedChildren = function tryCreateValidTableRowWrapp
144
140
 
145
141
  case 'tableRow':
146
142
  {
147
- if (isEmpty(childNode)) {
143
+ if ((0, _helpers.isEmpty)(childNode)) {
148
144
  return (0, _builders.tableRow)((0, _toConsumableArray2.default)(new Array(maxColsCount).fill((0, _builders.tableCell)({})((0, _builders.paragraph)()))));
149
145
  }
150
146
 
@@ -161,12 +157,12 @@ var tryCreateValidTableRowWrappedChildren = function tryCreateValidTableRowWrapp
161
157
  };
162
158
 
163
159
  var hasEmptyTableRowChildren = function hasEmptyTableRowChildren(node) {
164
- var _node$content5;
160
+ var _node$content4;
165
161
 
166
- return node === null || node === void 0 ? void 0 : (_node$content5 = node.content) === null || _node$content5 === void 0 ? void 0 : _node$content5.some(function (node) {
167
- var _node$content6;
162
+ return node === null || node === void 0 ? void 0 : (_node$content4 = node.content) === null || _node$content4 === void 0 ? void 0 : _node$content4.some(function (node) {
163
+ var _node$content5;
168
164
 
169
- return (node === null || node === void 0 ? void 0 : node.type) === 'tableRow' && (node === null || node === void 0 ? void 0 : (_node$content6 = node.content) === null || _node$content6 === void 0 ? void 0 : _node$content6.length) === 0;
165
+ return (node === null || node === void 0 ? void 0 : node.type) === 'tableRow' && (node === null || node === void 0 ? void 0 : (_node$content5 = node.content) === null || _node$content5 === void 0 ? void 0 : _node$content5.length) === 0;
170
166
  });
171
167
  };
172
168
 
@@ -181,6 +177,15 @@ var fixIfTableParentWithInvalidTableRowChildren = function fixIfTableParentWithI
181
177
  };
182
178
  };
183
179
 
180
+ var removeMediaSingleWithNoContent = function removeMediaSingleWithNoContent(reportTransform) {
181
+ return function (node) {
182
+ if ((0, _helpers.isEmpty)(node)) {
183
+ reportTransform();
184
+ return false;
185
+ }
186
+ };
187
+ };
188
+
184
189
  var transformNodesMissingContent = function transformNodesMissingContent(adf) {
185
190
  var isTransformed = false;
186
191
 
@@ -194,7 +199,8 @@ var transformNodesMissingContent = function transformNodesMissingContent(adf) {
194
199
  transformedAdf = (0, _traverse.traverse)(transformedAdf || adf, {
195
200
  bulletList: fixIfListParentWithInvalidListItemChildren(reportTransform),
196
201
  orderedList: fixIfListParentWithInvalidListItemChildren(reportTransform),
197
- table: fixIfTableParentWithInvalidTableRowChildren(reportTransform)
202
+ table: fixIfTableParentWithInvalidTableRowChildren(reportTransform),
203
+ mediaSingle: removeMediaSingleWithNoContent(reportTransform)
198
204
  });
199
205
  return {
200
206
  transformedAdf: transformedAdf,
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "transformIndentationMarks", {
15
15
  return _indentationMarksTransform.transformIndentationMarks;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "transformInvalidMediaContent", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _invalidMediaContentTransform.transformInvalidMediaContent;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "transformMediaLinkMarks", {
19
25
  enumerable: true,
20
26
  get: function get() {
@@ -42,4 +48,6 @@ var _dedupeMarksTransform = require("./transforms/dedupe-marks-transform");
42
48
 
43
49
  var _nodesMissingContentTransform = require("./transforms/nodes-missing-content-transform");
44
50
 
45
- var _indentationMarksTransform = require("./transforms/indentation-marks-transform");
51
+ var _indentationMarksTransform = require("./transforms/indentation-marks-transform");
52
+
53
+ var _invalidMediaContentTransform = require("./transforms/invalid-media-content-transform");
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/adf-utils",
3
- "version": "17.1.4",
3
+ "version": "17.1.5",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,5 @@
1
+ export const isEmpty = node => {
2
+ var _node$content;
3
+
4
+ return !(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length);
5
+ };
@@ -0,0 +1,77 @@
1
+ import { traverse } from '../traverse/traverse';
2
+ import { isEmpty } from './helpers';
3
+
4
+ const getChildrenTypeCounts = (nodeContent, allowedTypes) => {
5
+ let childrenTypes = {};
6
+ nodeContent.forEach((childNode, index) => {
7
+ if (!(childNode !== null && childNode !== void 0 && childNode.type) || !allowedTypes.includes(childNode.type)) {
8
+ return;
9
+ }
10
+
11
+ if (!childrenTypes[childNode.type]) {
12
+ childrenTypes[childNode.type] = 1;
13
+ return;
14
+ }
15
+
16
+ childrenTypes[childNode.type]++;
17
+ });
18
+ return childrenTypes;
19
+ };
20
+
21
+ const removeDuplicatedNodes = (type, content, predicate) => {
22
+ let maxIterations = 10;
23
+ let childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
24
+ let firstPredicateNodeIndex = content.findIndex(predicate);
25
+
26
+ while (childrenTypeCounts > 1 && firstPredicateNodeIndex > -1 && maxIterations-- > 0) {
27
+ content.splice(firstPredicateNodeIndex, 1);
28
+ firstPredicateNodeIndex = content.findIndex(predicate);
29
+ childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
30
+ }
31
+ };
32
+ /**
33
+ * @param {{[type:string]:number}} allowedTypes - array types allowed to deduplicate
34
+ */
35
+
36
+
37
+ const deduplicateMediaSingleChildren = (node, allowedTypes) => {
38
+ if (!node.content) {
39
+ return;
40
+ }
41
+
42
+ const content = [...node.content];
43
+ Object.keys(allowedTypes).forEach(type => {
44
+ //prioritise removing empty nodes first
45
+ removeDuplicatedNodes(type, content, node => (node === null || node === void 0 ? void 0 : node.type) === type && isEmpty(node)); //remove other remaining dupicates
46
+
47
+ removeDuplicatedNodes(type, content, node => (node === null || node === void 0 ? void 0 : node.type) === type);
48
+ });
49
+ return { ...node,
50
+ content
51
+ };
52
+ };
53
+
54
+ export const transformInvalidMediaContent = adf => {
55
+ let isTransformed = false;
56
+ const transformedAdf = traverse(adf, {
57
+ mediaSingle: node => {
58
+ var _node$content;
59
+
60
+ if (!(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length)) {
61
+ return;
62
+ }
63
+
64
+ const disallowedDuplicateTypes = ['media', 'caption'];
65
+ const childrenTypes = getChildrenTypeCounts(node.content, disallowedDuplicateTypes);
66
+
67
+ if (Object.values(childrenTypes).some(occurences => occurences > 1)) {
68
+ isTransformed = true;
69
+ return deduplicateMediaSingleChildren(node, childrenTypes);
70
+ }
71
+ }
72
+ });
73
+ return {
74
+ transformedAdf,
75
+ isTransformed
76
+ };
77
+ };
@@ -1,5 +1,6 @@
1
1
  import { traverse } from '../traverse/traverse';
2
2
  import { tableRow, tableCell, paragraph, listItem } from '../builders';
3
+ import { isEmpty } from './helpers';
3
4
 
4
5
  const getMaxColumnsCountForTable = tableNode => {
5
6
  var _tableNode$content;
@@ -25,12 +26,6 @@ const createValidEmptyContent = node => {
25
26
  }
26
27
  };
27
28
 
28
- const isEmpty = node => {
29
- var _node$content;
30
-
31
- return ((_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.length) === 0;
32
- };
33
-
34
29
  const fixIfTableCellInvalidEmpty = reportTransform => node => {
35
30
  if (isEmpty(node)) {
36
31
  reportTransform();
@@ -41,15 +36,15 @@ const fixIfTableCellInvalidEmpty = reportTransform => node => {
41
36
  };
42
37
 
43
38
  const hasNonListItemChildren = node => {
44
- var _node$content2;
39
+ var _node$content;
45
40
 
46
- return (_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.some(node => (node === null || node === void 0 ? void 0 : node.type) !== 'listItem');
41
+ return (_node$content = node.content) === null || _node$content === void 0 ? void 0 : _node$content.some(node => (node === null || node === void 0 ? void 0 : node.type) !== 'listItem');
47
42
  };
48
43
 
49
44
  const hasEmptyListItemChildren = node => {
50
- var _node$content3;
45
+ var _node$content2;
51
46
 
52
- return (_node$content3 = node.content) === null || _node$content3 === void 0 ? void 0 : _node$content3.some(childNode => {
47
+ return (_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.some(childNode => {
53
48
  var _childNode$content2;
54
49
 
55
50
  return (childNode === null || childNode === void 0 ? void 0 : childNode.type) === 'listItem' && !((_childNode$content2 = childNode.content) !== null && _childNode$content2 !== void 0 && _childNode$content2.length);
@@ -94,9 +89,9 @@ const fixIfListParentWithInvalidListItemChildren = reportTransform => node => {
94
89
  };
95
90
 
96
91
  const hasNonTableRowChildren = node => {
97
- var _node$content4;
92
+ var _node$content3;
98
93
 
99
- return (_node$content4 = node.content) === null || _node$content4 === void 0 ? void 0 : _node$content4.some(node => (node === null || node === void 0 ? void 0 : node.type) !== 'tableRow');
94
+ return (_node$content3 = node.content) === null || _node$content3 === void 0 ? void 0 : _node$content3.some(node => (node === null || node === void 0 ? void 0 : node.type) !== 'tableRow');
100
95
  };
101
96
 
102
97
  const tryCreateValidTableRowWrappedChildren = parentTableNode => {
@@ -135,12 +130,12 @@ const tryCreateValidTableRowWrappedChildren = parentTableNode => {
135
130
  };
136
131
 
137
132
  const hasEmptyTableRowChildren = node => {
138
- var _node$content5;
133
+ var _node$content4;
139
134
 
140
- return node === null || node === void 0 ? void 0 : (_node$content5 = node.content) === null || _node$content5 === void 0 ? void 0 : _node$content5.some(node => {
141
- var _node$content6;
135
+ return node === null || node === void 0 ? void 0 : (_node$content4 = node.content) === null || _node$content4 === void 0 ? void 0 : _node$content4.some(node => {
136
+ var _node$content5;
142
137
 
143
- return (node === null || node === void 0 ? void 0 : node.type) === 'tableRow' && (node === null || node === void 0 ? void 0 : (_node$content6 = node.content) === null || _node$content6 === void 0 ? void 0 : _node$content6.length) === 0;
138
+ return (node === null || node === void 0 ? void 0 : node.type) === 'tableRow' && (node === null || node === void 0 ? void 0 : (_node$content5 = node.content) === null || _node$content5 === void 0 ? void 0 : _node$content5.length) === 0;
144
139
  });
145
140
  };
146
141
 
@@ -153,6 +148,13 @@ const fixIfTableParentWithInvalidTableRowChildren = reportTransform => node => {
153
148
  }
154
149
  };
155
150
 
151
+ const removeMediaSingleWithNoContent = reportTransform => node => {
152
+ if (isEmpty(node)) {
153
+ reportTransform();
154
+ return false;
155
+ }
156
+ };
157
+
156
158
  export const transformNodesMissingContent = adf => {
157
159
  let isTransformed = false;
158
160
 
@@ -166,7 +168,8 @@ export const transformNodesMissingContent = adf => {
166
168
  transformedAdf = traverse(transformedAdf || adf, {
167
169
  bulletList: fixIfListParentWithInvalidListItemChildren(reportTransform),
168
170
  orderedList: fixIfListParentWithInvalidListItemChildren(reportTransform),
169
- table: fixIfTableParentWithInvalidTableRowChildren(reportTransform)
171
+ table: fixIfTableParentWithInvalidTableRowChildren(reportTransform),
172
+ mediaSingle: removeMediaSingleWithNoContent(reportTransform)
170
173
  });
171
174
  return {
172
175
  transformedAdf,
@@ -2,4 +2,5 @@ export { transformMediaLinkMarks } from './transforms/media-link-transform';
2
2
  export { transformTextLinkCodeMarks } from './transforms/text-link-code-transform';
3
3
  export { transformDedupeMarks } from './transforms/dedupe-marks-transform';
4
4
  export { transformNodesMissingContent } from './transforms/nodes-missing-content-transform';
5
- export { transformIndentationMarks } from './transforms/indentation-marks-transform';
5
+ export { transformIndentationMarks } from './transforms/indentation-marks-transform';
6
+ export { transformInvalidMediaContent } from './transforms/invalid-media-content-transform';
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/adf-utils",
3
- "version": "17.1.4",
3
+ "version": "17.1.5",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1,5 @@
1
+ export var isEmpty = function isEmpty(node) {
2
+ var _node$content;
3
+
4
+ return !(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length);
5
+ };
@@ -0,0 +1,91 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
+
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+
8
+ import { traverse } from '../traverse/traverse';
9
+ import { isEmpty } from './helpers';
10
+
11
+ var getChildrenTypeCounts = function getChildrenTypeCounts(nodeContent, allowedTypes) {
12
+ var childrenTypes = {};
13
+ nodeContent.forEach(function (childNode, index) {
14
+ if (!(childNode !== null && childNode !== void 0 && childNode.type) || !allowedTypes.includes(childNode.type)) {
15
+ return;
16
+ }
17
+
18
+ if (!childrenTypes[childNode.type]) {
19
+ childrenTypes[childNode.type] = 1;
20
+ return;
21
+ }
22
+
23
+ childrenTypes[childNode.type]++;
24
+ });
25
+ return childrenTypes;
26
+ };
27
+
28
+ var removeDuplicatedNodes = function removeDuplicatedNodes(type, content, predicate) {
29
+ var maxIterations = 10;
30
+ var childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
31
+ var firstPredicateNodeIndex = content.findIndex(predicate);
32
+
33
+ while (childrenTypeCounts > 1 && firstPredicateNodeIndex > -1 && maxIterations-- > 0) {
34
+ content.splice(firstPredicateNodeIndex, 1);
35
+ firstPredicateNodeIndex = content.findIndex(predicate);
36
+ childrenTypeCounts = getChildrenTypeCounts(content, [type])[type];
37
+ }
38
+ };
39
+ /**
40
+ * @param {{[type:string]:number}} allowedTypes - array types allowed to deduplicate
41
+ */
42
+
43
+
44
+ var deduplicateMediaSingleChildren = function deduplicateMediaSingleChildren(node, allowedTypes) {
45
+ if (!node.content) {
46
+ return;
47
+ }
48
+
49
+ var content = _toConsumableArray(node.content);
50
+
51
+ Object.keys(allowedTypes).forEach(function (type) {
52
+ //prioritise removing empty nodes first
53
+ removeDuplicatedNodes(type, content, function (node) {
54
+ return (node === null || node === void 0 ? void 0 : node.type) === type && isEmpty(node);
55
+ }); //remove other remaining dupicates
56
+
57
+ removeDuplicatedNodes(type, content, function (node) {
58
+ return (node === null || node === void 0 ? void 0 : node.type) === type;
59
+ });
60
+ });
61
+ return _objectSpread(_objectSpread({}, node), {}, {
62
+ content: content
63
+ });
64
+ };
65
+
66
+ export var transformInvalidMediaContent = function transformInvalidMediaContent(adf) {
67
+ var isTransformed = false;
68
+ var transformedAdf = traverse(adf, {
69
+ mediaSingle: function mediaSingle(node) {
70
+ var _node$content;
71
+
72
+ if (!(node !== null && node !== void 0 && (_node$content = node.content) !== null && _node$content !== void 0 && _node$content.length)) {
73
+ return;
74
+ }
75
+
76
+ var disallowedDuplicateTypes = ['media', 'caption'];
77
+ var childrenTypes = getChildrenTypeCounts(node.content, disallowedDuplicateTypes);
78
+
79
+ if (Object.values(childrenTypes).some(function (occurences) {
80
+ return occurences > 1;
81
+ })) {
82
+ isTransformed = true;
83
+ return deduplicateMediaSingleChildren(node, childrenTypes);
84
+ }
85
+ }
86
+ });
87
+ return {
88
+ transformedAdf: transformedAdf,
89
+ isTransformed: isTransformed
90
+ };
91
+ };