@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.
- package/CHANGELOG.md +7 -0
- package/dist/cjs/builders/marks/alignment.js +0 -3
- package/dist/cjs/builders/marks/annotation.js +0 -3
- package/dist/cjs/builders/marks/breakout.js +0 -3
- package/dist/cjs/builders/marks/code.js +0 -3
- package/dist/cjs/builders/marks/data-consumer.js +0 -3
- package/dist/cjs/builders/marks/em.js +0 -3
- package/dist/cjs/builders/marks/fragment.js +0 -3
- package/dist/cjs/builders/marks/indentation.js +0 -3
- package/dist/cjs/builders/marks/link.js +0 -3
- package/dist/cjs/builders/marks/strike.js +0 -3
- package/dist/cjs/builders/marks/strong.js +0 -3
- package/dist/cjs/builders/marks/subsup.js +0 -3
- package/dist/cjs/builders/marks/text-color.js +0 -3
- package/dist/cjs/builders/marks/underline.js +0 -3
- package/dist/cjs/builders/nodes/block-card.js +0 -2
- package/dist/cjs/builders/nodes/blockquote.js +0 -3
- package/dist/cjs/builders/nodes/bodied-extension.js +0 -3
- package/dist/cjs/builders/nodes/bullet-list.js +0 -3
- package/dist/cjs/builders/nodes/caption.js +0 -3
- package/dist/cjs/builders/nodes/code-block.js +0 -3
- package/dist/cjs/builders/nodes/date.js +0 -2
- package/dist/cjs/builders/nodes/decision-item.js +0 -3
- package/dist/cjs/builders/nodes/decision-list.js +0 -3
- package/dist/cjs/builders/nodes/doc.js +0 -3
- package/dist/cjs/builders/nodes/embed-card.js +0 -2
- package/dist/cjs/builders/nodes/emoji.js +0 -2
- package/dist/cjs/builders/nodes/expand.js +0 -3
- package/dist/cjs/builders/nodes/extension.js +0 -2
- package/dist/cjs/builders/nodes/hard-break.js +0 -2
- package/dist/cjs/builders/nodes/heading.js +0 -3
- package/dist/cjs/builders/nodes/inline-card.js +0 -2
- package/dist/cjs/builders/nodes/inline-extension.js +0 -2
- package/dist/cjs/builders/nodes/layout-column.js +0 -2
- package/dist/cjs/builders/nodes/layout-section.js +0 -2
- package/dist/cjs/builders/nodes/list-item.js +0 -2
- package/dist/cjs/builders/nodes/media-group.js +0 -3
- package/dist/cjs/builders/nodes/media-inline.js +0 -2
- package/dist/cjs/builders/nodes/media-single.js +0 -2
- package/dist/cjs/builders/nodes/media.js +0 -2
- package/dist/cjs/builders/nodes/mention.js +0 -6
- package/dist/cjs/builders/nodes/nested-expand.js +0 -3
- package/dist/cjs/builders/nodes/ordered-list.js +0 -3
- package/dist/cjs/builders/nodes/panel.js +0 -3
- package/dist/cjs/builders/nodes/paragraph.js +0 -4
- package/dist/cjs/builders/nodes/placeholder.js +0 -2
- package/dist/cjs/builders/nodes/rule.js +0 -2
- package/dist/cjs/builders/nodes/status.js +0 -2
- package/dist/cjs/builders/nodes/table-cell.js +0 -3
- package/dist/cjs/builders/nodes/table-header.js +0 -3
- package/dist/cjs/builders/nodes/table-row.js +0 -2
- package/dist/cjs/builders/nodes/table.js +0 -3
- package/dist/cjs/builders/nodes/task-item.js +0 -3
- package/dist/cjs/builders/nodes/task-list.js +0 -3
- package/dist/cjs/builders/nodes/text.js +0 -2
- package/dist/cjs/builders/utils/apply-mark.js +0 -5
- package/dist/cjs/builders/utils/create-text-nodes.js +0 -3
- package/dist/cjs/builders/utils/is-duplicate-mark.js +0 -3
- package/dist/cjs/builders.js +0 -51
- package/dist/cjs/empty-adf.js +0 -2
- package/dist/cjs/scrub/default-node-replacements.js +0 -11
- package/dist/cjs/scrub/default-value-replacements.js +0 -2
- package/dist/cjs/scrub/hash.js +0 -4
- package/dist/cjs/scrub/scrub-adf.js +2 -25
- package/dist/cjs/scrub/scrub-content.js +7 -37
- package/dist/cjs/scrub.js +0 -2
- package/dist/cjs/transforms/dedupe-marks-transform.js +2 -23
- package/dist/cjs/transforms/helpers.js +0 -3
- package/dist/cjs/transforms/indentation-marks-transform.js +6 -14
- package/dist/cjs/transforms/invalid-media-content-transform.js +3 -22
- package/dist/cjs/transforms/media-link-transform.js +2 -12
- package/dist/cjs/transforms/nodes-missing-content-transform.js +0 -44
- package/dist/cjs/transforms/text-link-code-transform.js +3 -13
- package/dist/cjs/transforms.js +0 -6
- package/dist/cjs/traverse/filter.js +0 -2
- package/dist/cjs/traverse/map.js +0 -2
- package/dist/cjs/traverse/reduce.js +0 -2
- package/dist/cjs/traverse/traverse.js +1 -18
- package/dist/cjs/traverse.js +0 -4
- package/dist/cjs/validator/rules.js +0 -2
- package/dist/cjs/validator/specs/index.js +0 -83
- package/dist/cjs/validator/utils.js +4 -20
- package/dist/cjs/validator/validator.js +67 -218
- package/dist/cjs/validator.js +0 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/builders/utils/apply-mark.js +0 -2
- package/dist/es2019/builders/utils/is-duplicate-mark.js +0 -1
- package/dist/es2019/builders.js +4 -1
- package/dist/es2019/scrub/default-node-replacements.js +2 -7
- package/dist/es2019/scrub/hash.js +0 -2
- package/dist/es2019/scrub/scrub-adf.js +4 -10
- package/dist/es2019/scrub/scrub-content.js +7 -20
- package/dist/es2019/transforms/dedupe-marks-transform.js +4 -16
- package/dist/es2019/transforms/helpers.js +0 -1
- package/dist/es2019/transforms/indentation-marks-transform.js +10 -10
- package/dist/es2019/transforms/invalid-media-content-transform.js +5 -15
- package/dist/es2019/transforms/media-link-transform.js +2 -9
- package/dist/es2019/transforms/nodes-missing-content-transform.js +6 -38
- package/dist/es2019/transforms/text-link-code-transform.js +5 -8
- package/dist/es2019/traverse/traverse.js +5 -13
- package/dist/es2019/validator/utils.js +4 -2
- package/dist/es2019/validator/validator.js +60 -174
- package/dist/es2019/version.json +1 -1
- package/dist/esm/builders/nodes/blockquote.js +0 -1
- package/dist/esm/builders/nodes/bodied-extension.js +0 -1
- package/dist/esm/builders/nodes/bullet-list.js +0 -1
- package/dist/esm/builders/nodes/caption.js +0 -1
- package/dist/esm/builders/nodes/code-block.js +0 -1
- package/dist/esm/builders/nodes/decision-item.js +0 -1
- package/dist/esm/builders/nodes/decision-list.js +0 -1
- package/dist/esm/builders/nodes/doc.js +0 -1
- package/dist/esm/builders/nodes/expand.js +0 -1
- package/dist/esm/builders/nodes/heading.js +0 -1
- package/dist/esm/builders/nodes/media-group.js +0 -1
- package/dist/esm/builders/nodes/mention.js +0 -3
- package/dist/esm/builders/nodes/nested-expand.js +0 -1
- package/dist/esm/builders/nodes/ordered-list.js +0 -1
- package/dist/esm/builders/nodes/panel.js +0 -1
- package/dist/esm/builders/nodes/paragraph.js +0 -1
- package/dist/esm/builders/nodes/table-cell.js +0 -1
- package/dist/esm/builders/nodes/table-header.js +0 -1
- package/dist/esm/builders/nodes/table.js +0 -1
- package/dist/esm/builders/nodes/task-item.js +0 -1
- package/dist/esm/builders/nodes/task-list.js +0 -1
- package/dist/esm/builders/utils/apply-mark.js +0 -2
- package/dist/esm/builders/utils/is-duplicate-mark.js +0 -1
- package/dist/esm/builders.js +4 -1
- package/dist/esm/scrub/default-node-replacements.js +0 -9
- package/dist/esm/scrub/hash.js +0 -2
- package/dist/esm/scrub/scrub-adf.js +2 -17
- package/dist/esm/scrub/scrub-content.js +7 -28
- package/dist/esm/transforms/dedupe-marks-transform.js +2 -18
- package/dist/esm/transforms/helpers.js +0 -1
- package/dist/esm/transforms/indentation-marks-transform.js +6 -11
- package/dist/esm/transforms/invalid-media-content-transform.js +3 -18
- package/dist/esm/transforms/media-link-transform.js +2 -9
- package/dist/esm/transforms/nodes-missing-content-transform.js +0 -38
- package/dist/esm/transforms/text-link-code-transform.js +3 -10
- package/dist/esm/traverse/traverse.js +1 -15
- package/dist/esm/validator/utils.js +4 -2
- package/dist/esm/validator/validator.js +67 -209
- package/dist/esm/version.json +1 -1
- 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 {
|
|
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 {
|
|
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 {
|
|
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 {
|
|
9
|
+
return {
|
|
10
|
+
...node,
|
|
13
11
|
marks: node.marks.filter(mark => mark.type !== 'code')
|
|
14
12
|
};
|
|
15
13
|
}
|
|
16
|
-
|
|
17
14
|
return node;
|
|
18
|
-
};
|
|
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 = {
|
|
24
|
+
let newNode = {
|
|
25
|
+
...adfNode
|
|
27
26
|
};
|
|
28
|
-
|
|
29
27
|
if (visitor) {
|
|
30
|
-
const processedNode = visitor({
|
|
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]';
|
|
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
|
-
};
|
|
12
|
+
};
|
|
12
13
|
|
|
14
|
+
// Helpers
|
|
13
15
|
export const makeArray = maybeArray => Array.isArray(maybeArray) ? maybeArray : [maybeArray];
|