@atlaskit/adf-utils 18.0.2 → 18.0.3

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 (143) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/cjs/builders/marks/alignment.js +0 -3
  3. package/dist/cjs/builders/marks/annotation.js +0 -3
  4. package/dist/cjs/builders/marks/breakout.js +0 -3
  5. package/dist/cjs/builders/marks/code.js +0 -3
  6. package/dist/cjs/builders/marks/data-consumer.js +0 -3
  7. package/dist/cjs/builders/marks/em.js +0 -3
  8. package/dist/cjs/builders/marks/fragment.js +0 -3
  9. package/dist/cjs/builders/marks/indentation.js +0 -3
  10. package/dist/cjs/builders/marks/link.js +0 -3
  11. package/dist/cjs/builders/marks/strike.js +0 -3
  12. package/dist/cjs/builders/marks/strong.js +0 -3
  13. package/dist/cjs/builders/marks/subsup.js +0 -3
  14. package/dist/cjs/builders/marks/text-color.js +0 -3
  15. package/dist/cjs/builders/marks/underline.js +0 -3
  16. package/dist/cjs/builders/nodes/block-card.js +0 -2
  17. package/dist/cjs/builders/nodes/blockquote.js +0 -3
  18. package/dist/cjs/builders/nodes/bodied-extension.js +0 -3
  19. package/dist/cjs/builders/nodes/bullet-list.js +0 -3
  20. package/dist/cjs/builders/nodes/caption.js +0 -3
  21. package/dist/cjs/builders/nodes/code-block.js +0 -3
  22. package/dist/cjs/builders/nodes/date.js +0 -2
  23. package/dist/cjs/builders/nodes/decision-item.js +0 -3
  24. package/dist/cjs/builders/nodes/decision-list.js +0 -3
  25. package/dist/cjs/builders/nodes/doc.js +0 -3
  26. package/dist/cjs/builders/nodes/embed-card.js +0 -2
  27. package/dist/cjs/builders/nodes/emoji.js +0 -2
  28. package/dist/cjs/builders/nodes/expand.js +0 -3
  29. package/dist/cjs/builders/nodes/extension.js +0 -2
  30. package/dist/cjs/builders/nodes/hard-break.js +0 -2
  31. package/dist/cjs/builders/nodes/heading.js +0 -3
  32. package/dist/cjs/builders/nodes/inline-card.js +0 -2
  33. package/dist/cjs/builders/nodes/inline-extension.js +0 -2
  34. package/dist/cjs/builders/nodes/layout-column.js +0 -2
  35. package/dist/cjs/builders/nodes/layout-section.js +0 -2
  36. package/dist/cjs/builders/nodes/list-item.js +0 -2
  37. package/dist/cjs/builders/nodes/media-group.js +0 -3
  38. package/dist/cjs/builders/nodes/media-inline.js +0 -2
  39. package/dist/cjs/builders/nodes/media-single.js +0 -2
  40. package/dist/cjs/builders/nodes/media.js +0 -2
  41. package/dist/cjs/builders/nodes/mention.js +0 -6
  42. package/dist/cjs/builders/nodes/nested-expand.js +0 -3
  43. package/dist/cjs/builders/nodes/ordered-list.js +0 -3
  44. package/dist/cjs/builders/nodes/panel.js +0 -3
  45. package/dist/cjs/builders/nodes/paragraph.js +0 -4
  46. package/dist/cjs/builders/nodes/placeholder.js +0 -2
  47. package/dist/cjs/builders/nodes/rule.js +0 -2
  48. package/dist/cjs/builders/nodes/status.js +0 -2
  49. package/dist/cjs/builders/nodes/table-cell.js +0 -3
  50. package/dist/cjs/builders/nodes/table-header.js +0 -3
  51. package/dist/cjs/builders/nodes/table-row.js +0 -2
  52. package/dist/cjs/builders/nodes/table.js +0 -3
  53. package/dist/cjs/builders/nodes/task-item.js +0 -3
  54. package/dist/cjs/builders/nodes/task-list.js +0 -3
  55. package/dist/cjs/builders/nodes/text.js +0 -2
  56. package/dist/cjs/builders/utils/apply-mark.js +0 -5
  57. package/dist/cjs/builders/utils/create-text-nodes.js +0 -3
  58. package/dist/cjs/builders/utils/is-duplicate-mark.js +0 -3
  59. package/dist/cjs/builders.js +0 -51
  60. package/dist/cjs/empty-adf.js +0 -2
  61. package/dist/cjs/scrub/default-node-replacements.js +0 -11
  62. package/dist/cjs/scrub/default-value-replacements.js +0 -2
  63. package/dist/cjs/scrub/hash.js +0 -4
  64. package/dist/cjs/scrub/scrub-adf.js +2 -25
  65. package/dist/cjs/scrub/scrub-content.js +7 -37
  66. package/dist/cjs/scrub.js +0 -2
  67. package/dist/cjs/transforms/dedupe-marks-transform.js +2 -23
  68. package/dist/cjs/transforms/helpers.js +0 -3
  69. package/dist/cjs/transforms/indentation-marks-transform.js +6 -14
  70. package/dist/cjs/transforms/invalid-media-content-transform.js +3 -22
  71. package/dist/cjs/transforms/media-link-transform.js +2 -12
  72. package/dist/cjs/transforms/nodes-missing-content-transform.js +0 -44
  73. package/dist/cjs/transforms/text-link-code-transform.js +3 -13
  74. package/dist/cjs/transforms.js +0 -6
  75. package/dist/cjs/traverse/filter.js +0 -2
  76. package/dist/cjs/traverse/map.js +0 -2
  77. package/dist/cjs/traverse/reduce.js +0 -2
  78. package/dist/cjs/traverse/traverse.js +1 -18
  79. package/dist/cjs/traverse.js +0 -4
  80. package/dist/cjs/validator/rules.js +0 -2
  81. package/dist/cjs/validator/specs/index.js +0 -83
  82. package/dist/cjs/validator/utils.js +4 -20
  83. package/dist/cjs/validator/validator.js +67 -218
  84. package/dist/cjs/validator.js +0 -1
  85. package/dist/cjs/version.json +1 -1
  86. package/dist/es2019/builders/utils/apply-mark.js +0 -2
  87. package/dist/es2019/builders/utils/is-duplicate-mark.js +0 -1
  88. package/dist/es2019/builders.js +4 -1
  89. package/dist/es2019/scrub/default-node-replacements.js +2 -7
  90. package/dist/es2019/scrub/hash.js +0 -2
  91. package/dist/es2019/scrub/scrub-adf.js +4 -10
  92. package/dist/es2019/scrub/scrub-content.js +7 -20
  93. package/dist/es2019/transforms/dedupe-marks-transform.js +4 -16
  94. package/dist/es2019/transforms/helpers.js +0 -1
  95. package/dist/es2019/transforms/indentation-marks-transform.js +10 -10
  96. package/dist/es2019/transforms/invalid-media-content-transform.js +5 -15
  97. package/dist/es2019/transforms/media-link-transform.js +2 -9
  98. package/dist/es2019/transforms/nodes-missing-content-transform.js +6 -38
  99. package/dist/es2019/transforms/text-link-code-transform.js +5 -8
  100. package/dist/es2019/traverse/traverse.js +5 -13
  101. package/dist/es2019/validator/utils.js +4 -2
  102. package/dist/es2019/validator/validator.js +60 -174
  103. package/dist/es2019/version.json +1 -1
  104. package/dist/esm/builders/nodes/blockquote.js +0 -1
  105. package/dist/esm/builders/nodes/bodied-extension.js +0 -1
  106. package/dist/esm/builders/nodes/bullet-list.js +0 -1
  107. package/dist/esm/builders/nodes/caption.js +0 -1
  108. package/dist/esm/builders/nodes/code-block.js +0 -1
  109. package/dist/esm/builders/nodes/decision-item.js +0 -1
  110. package/dist/esm/builders/nodes/decision-list.js +0 -1
  111. package/dist/esm/builders/nodes/doc.js +0 -1
  112. package/dist/esm/builders/nodes/expand.js +0 -1
  113. package/dist/esm/builders/nodes/heading.js +0 -1
  114. package/dist/esm/builders/nodes/media-group.js +0 -1
  115. package/dist/esm/builders/nodes/mention.js +0 -3
  116. package/dist/esm/builders/nodes/nested-expand.js +0 -1
  117. package/dist/esm/builders/nodes/ordered-list.js +0 -1
  118. package/dist/esm/builders/nodes/panel.js +0 -1
  119. package/dist/esm/builders/nodes/paragraph.js +0 -1
  120. package/dist/esm/builders/nodes/table-cell.js +0 -1
  121. package/dist/esm/builders/nodes/table-header.js +0 -1
  122. package/dist/esm/builders/nodes/table.js +0 -1
  123. package/dist/esm/builders/nodes/task-item.js +0 -1
  124. package/dist/esm/builders/nodes/task-list.js +0 -1
  125. package/dist/esm/builders/utils/apply-mark.js +0 -2
  126. package/dist/esm/builders/utils/is-duplicate-mark.js +0 -1
  127. package/dist/esm/builders.js +4 -1
  128. package/dist/esm/scrub/default-node-replacements.js +0 -9
  129. package/dist/esm/scrub/hash.js +0 -2
  130. package/dist/esm/scrub/scrub-adf.js +2 -17
  131. package/dist/esm/scrub/scrub-content.js +7 -28
  132. package/dist/esm/transforms/dedupe-marks-transform.js +2 -18
  133. package/dist/esm/transforms/helpers.js +0 -1
  134. package/dist/esm/transforms/indentation-marks-transform.js +6 -11
  135. package/dist/esm/transforms/invalid-media-content-transform.js +3 -18
  136. package/dist/esm/transforms/media-link-transform.js +2 -9
  137. package/dist/esm/transforms/nodes-missing-content-transform.js +0 -38
  138. package/dist/esm/transforms/text-link-code-transform.js +3 -10
  139. package/dist/esm/traverse/traverse.js +1 -15
  140. package/dist/esm/validator/utils.js +4 -2
  141. package/dist/esm/validator/validator.js +67 -209
  142. package/dist/esm/version.json +1 -1
  143. package/package.json +2 -2
@@ -1,59 +1,47 @@
1
1
  import { traverse } from '../traverse/traverse';
2
2
  import { tableRow, tableCell, paragraph, listItem } from '../builders';
3
3
  import { isEmpty } from './helpers';
4
-
5
4
  const getMaxColumnsCountForTable = tableNode => {
6
5
  var _tableNode$content;
7
-
8
6
  let colsInRow = 1;
9
7
  (_tableNode$content = tableNode.content) === null || _tableNode$content === void 0 ? void 0 : _tableNode$content.forEach(childNode => {
10
8
  var _childNode$content;
11
-
12
9
  if ((childNode === null || childNode === void 0 ? void 0 : childNode.type) === 'tableRow' && typeof ((_childNode$content = childNode.content) === null || _childNode$content === void 0 ? void 0 : _childNode$content.length) === 'number' && childNode.content.length > colsInRow) {
13
10
  colsInRow = childNode.content.length;
14
11
  }
15
12
  });
16
13
  return colsInRow;
17
14
  };
18
-
19
15
  const createValidEmptyContent = node => {
20
16
  switch (node.type) {
21
17
  case 'tableCell':
22
18
  return [paragraph()];
23
-
24
19
  default:
25
20
  return [];
26
21
  }
27
22
  };
28
-
29
23
  const fixIfTableCellInvalidEmpty = reportTransform => node => {
30
24
  if (isEmpty(node)) {
31
25
  reportTransform();
32
- return { ...node,
26
+ return {
27
+ ...node,
33
28
  content: createValidEmptyContent(node)
34
29
  };
35
30
  }
36
31
  };
37
-
38
32
  const hasNonListItemChildren = node => {
39
33
  var _node$content;
40
-
41
34
  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');
42
35
  };
43
-
44
36
  const hasEmptyListItemChildren = node => {
45
37
  var _node$content2;
46
-
47
38
  return (_node$content2 = node.content) === null || _node$content2 === void 0 ? void 0 : _node$content2.some(childNode => {
48
39
  var _childNode$content2;
49
-
50
40
  return (childNode === null || childNode === void 0 ? void 0 : childNode.type) === 'listItem' && !((_childNode$content2 = childNode.content) !== null && _childNode$content2 !== void 0 && _childNode$content2.length);
51
41
  });
52
42
  };
53
-
54
43
  const tryCreateValidListItemWrappedChildren = parentListNode => {
55
44
  var _parentListNode$conte;
56
-
57
45
  return (_parentListNode$conte = parentListNode.content) === null || _parentListNode$conte === void 0 ? void 0 : _parentListNode$conte.map(childNode => {
58
46
  if (childNode) {
59
47
  switch (childNode.type) {
@@ -63,40 +51,32 @@ const tryCreateValidListItemWrappedChildren = parentListNode => {
63
51
  const result = listItem([paragraph()]);
64
52
  return result;
65
53
  }
66
-
67
54
  return childNode;
68
55
  }
69
-
70
56
  case 'text':
71
57
  return listItem([paragraph(childNode)]);
72
-
73
58
  default:
74
59
  return listItem([childNode]);
75
60
  }
76
61
  }
77
-
78
62
  return childNode;
79
63
  });
80
64
  };
81
-
82
65
  const fixIfListParentWithInvalidListItemChildren = reportTransform => node => {
83
66
  if (hasNonListItemChildren(node) || hasEmptyListItemChildren(node)) {
84
67
  reportTransform();
85
- return { ...node,
68
+ return {
69
+ ...node,
86
70
  content: tryCreateValidListItemWrappedChildren(node)
87
71
  };
88
72
  }
89
73
  };
90
-
91
74
  const hasNonTableRowChildren = node => {
92
75
  var _node$content3;
93
-
94
76
  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');
95
77
  };
96
-
97
78
  const tryCreateValidTableRowWrappedChildren = parentTableNode => {
98
79
  var _parentTableNode$cont;
99
-
100
80
  const maxColsCount = getMaxColumnsCountForTable(parentTableNode);
101
81
  return (_parentTableNode$cont = parentTableNode.content) === null || _parentTableNode$cont === void 0 ? void 0 : _parentTableNode$cont.map(childNode => {
102
82
  if (childNode) {
@@ -105,63 +85,51 @@ const tryCreateValidTableRowWrappedChildren = parentTableNode => {
105
85
  {
106
86
  return tableRow([tableCell({})(paragraph(childNode)), ...new Array(maxColsCount - 1).fill(tableCell({})(paragraph()))]);
107
87
  }
108
-
109
88
  case 'tableCell':
110
89
  {
111
90
  return tableRow([childNode]);
112
91
  }
113
-
114
92
  case 'tableRow':
115
93
  {
116
94
  if (isEmpty(childNode)) {
117
95
  return tableRow([...new Array(maxColsCount).fill(tableCell({})(paragraph()))]);
118
96
  }
119
-
120
97
  return childNode;
121
98
  }
122
-
123
99
  default:
124
100
  return childNode;
125
101
  }
126
102
  }
127
-
128
103
  return childNode;
129
104
  });
130
105
  };
131
-
132
106
  const hasEmptyTableRowChildren = node => {
133
107
  var _node$content4;
134
-
135
108
  return node === null || node === void 0 ? void 0 : (_node$content4 = node.content) === null || _node$content4 === void 0 ? void 0 : _node$content4.some(node => {
136
109
  var _node$content5;
137
-
138
110
  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;
139
111
  });
140
112
  };
141
-
142
113
  const fixIfTableParentWithInvalidTableRowChildren = reportTransform => node => {
143
114
  if (hasEmptyTableRowChildren(node) || hasNonTableRowChildren(node)) {
144
115
  reportTransform();
145
- return { ...node,
116
+ return {
117
+ ...node,
146
118
  content: tryCreateValidTableRowWrappedChildren(node)
147
119
  };
148
120
  }
149
121
  };
150
-
151
122
  const removeMediaSingleWithNoContent = reportTransform => node => {
152
123
  if (isEmpty(node)) {
153
124
  reportTransform();
154
125
  return false;
155
126
  }
156
127
  };
157
-
158
128
  export const transformNodesMissingContent = adf => {
159
129
  let isTransformed = false;
160
-
161
130
  const reportTransform = () => {
162
131
  isTransformed = true;
163
132
  };
164
-
165
133
  let transformedAdf = traverse(adf, {
166
134
  tableCell: fixIfTableCellInvalidEmpty(reportTransform)
167
135
  });
@@ -1,25 +1,22 @@
1
1
  import { traverse } from '../traverse/traverse';
2
-
3
2
  const hasLinkAndCodeMarks = node => {
4
3
  var _node$marks;
5
-
6
4
  const marks = (_node$marks = node.marks) === null || _node$marks === void 0 ? void 0 : _node$marks.map(mark => mark.type);
7
5
  return (marks === null || marks === void 0 ? void 0 : marks.includes('link')) && (marks === null || marks === void 0 ? void 0 : marks.includes('code'));
8
6
  };
9
-
10
7
  const removeCodeMarks = node => {
11
8
  if (node.marks) {
12
- return { ...node,
9
+ return {
10
+ ...node,
13
11
  marks: node.marks.filter(mark => mark.type !== 'code')
14
12
  };
15
13
  }
16
-
17
14
  return node;
18
- }; // See: HOT-97965 https://product-fabric.atlassian.net/browse/ED-14400
15
+ };
16
+
17
+ // See: HOT-97965 https://product-fabric.atlassian.net/browse/ED-14400
19
18
  // We declared in code mark spec that links and marks should not co-exist on
20
19
  // text nodes. This util strips code marks from bad text nodes and preserves links.
21
-
22
-
23
20
  export const transformTextLinkCodeMarks = adf => {
24
21
  let isTransformed = false;
25
22
  const transformedAdf = traverse(adf, {
@@ -1,6 +1,7 @@
1
1
  export function validateVisitors(_visitors) {
2
2
  return true;
3
3
  }
4
+
4
5
  /**
5
6
  * Provides recursive, depth-first search document traversal. Use visitors collection to define nodes of interest.
6
7
  * If no visitor for given node is defined, no-op happens.
@@ -10,51 +11,42 @@ export function validateVisitors(_visitors) {
10
11
  * @param adf Document to traverse.
11
12
  * @param visitors Collection of visitors.
12
13
  */
13
-
14
14
  export function traverse(adf, visitors) {
15
15
  if (!validateVisitors(visitors)) {
16
16
  throw new Error(`Visitors are not valid: "${Object.keys(visitors).join(', ')}"`);
17
17
  }
18
-
19
18
  return traverseNode(adf, {
20
19
  node: undefined
21
20
  }, visitors, 0, 0);
22
21
  }
23
-
24
22
  function traverseNode(adfNode, parent, visitors, index, depth) {
25
23
  const visitor = visitors[adfNode.type] || visitors['any'];
26
- let newNode = { ...adfNode
24
+ let newNode = {
25
+ ...adfNode
27
26
  };
28
-
29
27
  if (visitor) {
30
- const processedNode = visitor({ ...newNode
28
+ const processedNode = visitor({
29
+ ...newNode
31
30
  }, parent, index, depth);
32
-
33
31
  if (processedNode === false) {
34
32
  return false;
35
33
  }
36
-
37
34
  newNode = processedNode || adfNode;
38
35
  }
39
-
40
36
  if (newNode.content) {
41
37
  newNode.content = newNode.content.reduce((acc, node, idx) => {
42
38
  if (!node) {
43
39
  return acc;
44
40
  }
45
-
46
41
  const processedNode = traverseNode(node, {
47
42
  node: newNode,
48
43
  parent
49
44
  }, visitors, idx, depth + 1);
50
-
51
45
  if (processedNode !== false) {
52
46
  acc.push(processedNode);
53
47
  }
54
-
55
48
  return acc;
56
49
  }, []);
57
50
  }
58
-
59
51
  return newNode;
60
52
  }
@@ -1,13 +1,15 @@
1
1
  export const isDefined = x => x != null;
2
2
  export const isNumber = x => typeof x === 'number' && !isNaN(x) && isFinite(x);
3
3
  export const isInteger = x => typeof x === 'number' && isFinite(x) && Math.floor(x) === x;
4
- export const isBoolean = x => x === true || x === false || toString.call(x) === '[object Boolean]'; // This is a kludge, might replace with something like _.isString in future
4
+ export const isBoolean = x => x === true || x === false || toString.call(x) === '[object Boolean]';
5
5
 
6
+ // This is a kludge, might replace with something like _.isString in future
6
7
  export const isString = s => typeof s === 'string' || s instanceof String;
7
8
  export const isPlainObject = x => typeof x === 'object' && x !== null && !Array.isArray(x);
8
9
  export const copy = (source, dest, key) => {
9
10
  dest[key] = source[key];
10
11
  return dest;
11
- }; // Helpers
12
+ };
12
13
 
14
+ // Helpers
13
15
  export const makeArray = maybeArray => Array.isArray(maybeArray) ? maybeArray : [maybeArray];