@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,46 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports.validateAttrs = validateAttrs;
|
|
11
9
|
exports.validator = validator;
|
|
12
|
-
|
|
13
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
14
|
-
|
|
15
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
-
|
|
17
12
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
18
|
-
|
|
19
13
|
var specs = _interopRequireWildcard(require("./specs"));
|
|
20
|
-
|
|
21
14
|
var _utils = require("./utils");
|
|
22
|
-
|
|
23
15
|
var _rules = require("./rules");
|
|
24
|
-
|
|
25
16
|
var _excluded = ["items"];
|
|
26
|
-
|
|
27
17
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
28
|
-
|
|
29
18
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
30
|
-
|
|
31
19
|
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; }
|
|
32
|
-
|
|
33
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; }
|
|
34
|
-
|
|
35
21
|
function mapMarksItems(spec) {
|
|
36
22
|
var fn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (x) {
|
|
37
23
|
return x;
|
|
38
24
|
};
|
|
39
|
-
|
|
40
25
|
if (spec.props && spec.props.marks) {
|
|
41
26
|
var _ref = spec.props.marks,
|
|
42
|
-
|
|
43
|
-
|
|
27
|
+
items = _ref.items,
|
|
28
|
+
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
|
44
29
|
return _objectSpread(_objectSpread({}, spec), {}, {
|
|
45
30
|
props: _objectSpread(_objectSpread({}, spec.props), {}, {
|
|
46
31
|
marks: _objectSpread(_objectSpread({}, rest), {}, {
|
|
@@ -56,33 +41,29 @@ function mapMarksItems(spec) {
|
|
|
56
41
|
return spec;
|
|
57
42
|
}
|
|
58
43
|
}
|
|
59
|
-
|
|
60
44
|
var partitionObject = function partitionObject(obj, predicate) {
|
|
61
45
|
return Object.keys(obj).reduce(function (acc, key) {
|
|
62
46
|
acc[predicate(key, obj[key], obj) ? 0 : 1].push(key);
|
|
63
47
|
return acc;
|
|
64
48
|
}, [[], []]);
|
|
65
49
|
};
|
|
50
|
+
|
|
66
51
|
/**
|
|
67
52
|
* Normalizes the structure of files imported form './specs'.
|
|
68
53
|
* We denormalised the spec to save bundle size.
|
|
69
54
|
*/
|
|
70
|
-
|
|
71
|
-
|
|
72
55
|
function createSpec(nodes, marks) {
|
|
73
56
|
return Object.keys(specs).reduce(function (newSpecs, k) {
|
|
74
57
|
var spec = _objectSpread({}, specs[k]);
|
|
75
|
-
|
|
76
58
|
if (spec.props) {
|
|
77
59
|
spec.props = _objectSpread({}, spec.props);
|
|
78
|
-
|
|
79
60
|
if (spec.props.content) {
|
|
80
61
|
// 'tableCell_content' => { type: 'array', items: [ ... ] }
|
|
81
62
|
if ((0, _utils.isString)(spec.props.content)) {
|
|
82
63
|
spec.props.content = specs[spec.props.content];
|
|
83
|
-
}
|
|
84
|
-
|
|
64
|
+
}
|
|
85
65
|
|
|
66
|
+
// ['inline', 'emoji']
|
|
86
67
|
if (Array.isArray(spec.props.content)) {
|
|
87
68
|
/**
|
|
88
69
|
* Flatten
|
|
@@ -102,17 +83,21 @@ function createSpec(nodes, marks) {
|
|
|
102
83
|
} else {
|
|
103
84
|
spec.props.content = _objectSpread({}, spec.props.content);
|
|
104
85
|
}
|
|
86
|
+
spec.props.content.items = spec.props.content.items
|
|
105
87
|
|
|
106
|
-
|
|
88
|
+
// ['inline'] => [['emoji', 'hr', ...]]
|
|
107
89
|
// ['media'] => [['media']]
|
|
108
90
|
.map(function (item) {
|
|
109
91
|
return (0, _utils.isString)(item) ? Array.isArray(specs[item]) ? specs[item] : [item] : item;
|
|
110
|
-
})
|
|
92
|
+
})
|
|
93
|
+
// [['emoji', 'hr', 'inline_code']] => [['emoji', 'hr', ['text', { marks: {} }]]]
|
|
111
94
|
.map(function (item) {
|
|
112
95
|
return item.map(function (subItem) {
|
|
113
|
-
return Array.isArray(specs[subItem]) ? specs[subItem] : (0, _utils.isString)(subItem) ? subItem :
|
|
96
|
+
return Array.isArray(specs[subItem]) ? specs[subItem] : (0, _utils.isString)(subItem) ? subItem :
|
|
97
|
+
// Now `NoMark` produces `items: []`, should be fixed in generator
|
|
114
98
|
['text', subItem];
|
|
115
|
-
})
|
|
99
|
+
})
|
|
100
|
+
// Remove unsupported nodes & marks
|
|
116
101
|
// Filter nodes
|
|
117
102
|
.filter(function (subItem) {
|
|
118
103
|
if (nodes) {
|
|
@@ -120,23 +105,19 @@ function createSpec(nodes, marks) {
|
|
|
120
105
|
// ['mediaSingle', { props: { content: { items: [ 'media', 'caption' ] } }}]
|
|
121
106
|
if (Array.isArray(subItem)) {
|
|
122
107
|
var _subItem$, _subItem$$props, _subItem$$props$conte;
|
|
123
|
-
|
|
124
108
|
var isMainNodeSupported = nodes.indexOf(subItem[0]) > -1;
|
|
125
|
-
|
|
126
109
|
if (isMainNodeSupported && (_subItem$ = subItem[1]) !== null && _subItem$ !== void 0 && (_subItem$$props = _subItem$.props) !== null && _subItem$$props !== void 0 && (_subItem$$props$conte = _subItem$$props.content) !== null && _subItem$$props$conte !== void 0 && _subItem$$props$conte.items) {
|
|
127
110
|
return subItem[1].props.content.items.every(function (item) {
|
|
128
111
|
return nodes.indexOf(item) > -1;
|
|
129
112
|
});
|
|
130
113
|
}
|
|
131
|
-
|
|
132
114
|
return isMainNodeSupported;
|
|
133
115
|
}
|
|
134
|
-
|
|
135
116
|
return nodes.indexOf(subItem) > -1;
|
|
136
117
|
}
|
|
137
|
-
|
|
138
118
|
return true;
|
|
139
|
-
})
|
|
119
|
+
})
|
|
120
|
+
// Filter marks
|
|
140
121
|
.map(function (subItem) {
|
|
141
122
|
return Array.isArray(subItem) && marks ?
|
|
142
123
|
/**
|
|
@@ -148,71 +129,54 @@ function createSpec(nodes, marks) {
|
|
|
148
129
|
});
|
|
149
130
|
}
|
|
150
131
|
}
|
|
151
|
-
|
|
152
132
|
newSpecs[k] = spec;
|
|
153
133
|
return newSpecs;
|
|
154
134
|
}, {});
|
|
155
135
|
}
|
|
156
|
-
|
|
157
136
|
function getOptionsForType(type, list) {
|
|
158
137
|
if (!list) {
|
|
159
138
|
return {};
|
|
160
139
|
}
|
|
161
|
-
|
|
162
140
|
for (var i = 0, len = list.length; i < len; i++) {
|
|
163
141
|
var spec = list[i];
|
|
164
142
|
var _name = spec;
|
|
165
143
|
var options = {};
|
|
166
|
-
|
|
167
144
|
if (Array.isArray(spec)) {
|
|
168
145
|
var _spec = (0, _slicedToArray2.default)(spec, 2);
|
|
169
|
-
|
|
170
146
|
_name = _spec[0];
|
|
171
147
|
options = _spec[1];
|
|
172
148
|
}
|
|
173
|
-
|
|
174
149
|
if (_name === type) {
|
|
175
150
|
return options;
|
|
176
151
|
}
|
|
177
152
|
}
|
|
178
|
-
|
|
179
153
|
return false;
|
|
180
154
|
}
|
|
181
|
-
|
|
182
155
|
function validateAttrs(spec, value) {
|
|
183
156
|
// extension_node parameters has no type
|
|
184
157
|
if (!(0, _utils.isDefined)(spec.type)) {
|
|
185
158
|
return !!spec.optional;
|
|
186
159
|
}
|
|
187
|
-
|
|
188
160
|
if (!(0, _utils.isDefined)(value)) {
|
|
189
161
|
return !!spec.optional;
|
|
190
162
|
}
|
|
191
|
-
|
|
192
163
|
switch (spec.type) {
|
|
193
164
|
case 'boolean':
|
|
194
165
|
return (0, _utils.isBoolean)(value);
|
|
195
|
-
|
|
196
166
|
case 'number':
|
|
197
167
|
return (0, _utils.isNumber)(value) && ((0, _utils.isDefined)(spec.minimum) ? spec.minimum <= value : true) && ((0, _utils.isDefined)(spec.maximum) ? spec.maximum >= value : true);
|
|
198
|
-
|
|
199
168
|
case 'integer':
|
|
200
169
|
return (0, _utils.isInteger)(value) && ((0, _utils.isDefined)(spec.minimum) ? spec.minimum <= value : true) && ((0, _utils.isDefined)(spec.maximum) ? spec.maximum >= value : true);
|
|
201
|
-
|
|
202
170
|
case 'string':
|
|
203
171
|
var validatorFnPassed = function validatorFnPassed(rule) {
|
|
204
172
|
return typeof value === 'string' && (0, _utils.isDefined)(_rules.validatorFnMap[rule]) && _rules.validatorFnMap[rule](value);
|
|
205
173
|
};
|
|
206
|
-
|
|
207
174
|
return (0, _utils.isString)(value) && ((0, _utils.isDefined)(spec.minLength) ? spec.minLength <= value.length : true) && ((0, _utils.isDefined)(spec.validatorFn) ? validatorFnPassed(spec.validatorFn) : true) && (spec.pattern ? new RegExp(spec.pattern).test(value) : true);
|
|
208
|
-
|
|
209
175
|
case 'object':
|
|
210
176
|
return (0, _utils.isPlainObject)(value);
|
|
211
|
-
|
|
212
177
|
case 'array':
|
|
213
178
|
var types = spec.items;
|
|
214
179
|
var lastTypeIndex = types.length - 1;
|
|
215
|
-
|
|
216
180
|
if (Array.isArray(value)) {
|
|
217
181
|
// We are doing this to support tuple which can be defined as [number, string]
|
|
218
182
|
// NOTE: Not validating tuples strictly
|
|
@@ -220,37 +184,29 @@ function validateAttrs(spec, value) {
|
|
|
220
184
|
return validateAttrs(types[Math.min(i, lastTypeIndex)], x);
|
|
221
185
|
});
|
|
222
186
|
}
|
|
223
|
-
|
|
224
187
|
return false;
|
|
225
|
-
|
|
226
188
|
case 'enum':
|
|
227
189
|
return (0, _utils.isString)(value) && spec.values.indexOf(value) > -1;
|
|
228
190
|
}
|
|
229
|
-
|
|
230
191
|
return false;
|
|
231
192
|
}
|
|
232
|
-
|
|
233
193
|
var errorMessageFor = function errorMessageFor(type, message) {
|
|
234
194
|
return "".concat(type, ": ").concat(message, ".");
|
|
235
195
|
};
|
|
236
|
-
|
|
237
196
|
var getUnsupportedOptions = function getUnsupportedOptions(spec) {
|
|
238
197
|
if (spec && spec.props && spec.props.content) {
|
|
239
198
|
var _spec$props$content = spec.props.content,
|
|
240
|
-
|
|
241
|
-
|
|
199
|
+
allowUnsupportedBlock = _spec$props$content.allowUnsupportedBlock,
|
|
200
|
+
allowUnsupportedInline = _spec$props$content.allowUnsupportedInline;
|
|
242
201
|
return {
|
|
243
202
|
allowUnsupportedBlock: allowUnsupportedBlock,
|
|
244
203
|
allowUnsupportedInline: allowUnsupportedInline
|
|
245
204
|
};
|
|
246
205
|
}
|
|
247
|
-
|
|
248
206
|
return {};
|
|
249
207
|
};
|
|
250
|
-
|
|
251
208
|
var invalidChildContent = function invalidChildContent(child, errorCallback, parentSpec) {
|
|
252
209
|
var message = errorMessageFor(child.type, 'invalid content');
|
|
253
|
-
|
|
254
210
|
if (!errorCallback) {
|
|
255
211
|
throw new Error(message);
|
|
256
212
|
} else {
|
|
@@ -260,10 +216,8 @@ var invalidChildContent = function invalidChildContent(child, errorCallback, par
|
|
|
260
216
|
}, getUnsupportedOptions(parentSpec));
|
|
261
217
|
}
|
|
262
218
|
};
|
|
263
|
-
|
|
264
219
|
var unsupportedMarkContent = function unsupportedMarkContent(errorCode, mark, errorCallback, errorMessage) {
|
|
265
220
|
var message = errorMessage || errorMessageFor(mark.type, 'unsupported mark');
|
|
266
|
-
|
|
267
221
|
if (!errorCallback) {
|
|
268
222
|
throw new Error(message);
|
|
269
223
|
} else {
|
|
@@ -278,7 +232,6 @@ var unsupportedMarkContent = function unsupportedMarkContent(errorCode, mark, er
|
|
|
278
232
|
});
|
|
279
233
|
}
|
|
280
234
|
};
|
|
281
|
-
|
|
282
235
|
var unsupportedNodeAttributesContent = function unsupportedNodeAttributesContent(entity, errorCode, invalidAttributes, message, errorCallback) {
|
|
283
236
|
if (!errorCallback) {
|
|
284
237
|
throw new Error(message);
|
|
@@ -297,16 +250,13 @@ var unsupportedNodeAttributesContent = function unsupportedNodeAttributesContent
|
|
|
297
250
|
});
|
|
298
251
|
}
|
|
299
252
|
};
|
|
300
|
-
|
|
301
253
|
function validator(nodes, marks, options) {
|
|
302
254
|
var validatorSpecs = createSpec(nodes, marks);
|
|
303
|
-
|
|
304
255
|
var _ref2 = options || {},
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
256
|
+
_ref2$mode = _ref2.mode,
|
|
257
|
+
mode = _ref2$mode === void 0 ? 'strict' : _ref2$mode,
|
|
258
|
+
_ref2$allowPrivateAtt = _ref2.allowPrivateAttributes,
|
|
259
|
+
allowPrivateAttributes = _ref2$allowPrivateAtt === void 0 ? false : _ref2$allowPrivateAtt;
|
|
310
260
|
var validate = function validate(entity, errorCallback, allowed, parentSpec) {
|
|
311
261
|
var validationResult = validateNode(entity, errorCallback, allowed, parentSpec);
|
|
312
262
|
return {
|
|
@@ -314,16 +264,12 @@ function validator(nodes, marks, options) {
|
|
|
314
264
|
valid: validationResult.valid
|
|
315
265
|
};
|
|
316
266
|
};
|
|
317
|
-
|
|
318
267
|
var validateNode = function validateNode(entity, errorCallback, allowed, parentSpec) {
|
|
319
268
|
var isMark = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
320
269
|
var type = entity.type;
|
|
321
|
-
|
|
322
270
|
var newEntity = _objectSpread({}, entity);
|
|
323
|
-
|
|
324
271
|
var err = function err(code, msg, meta) {
|
|
325
272
|
var message = errorMessageFor(type, msg);
|
|
326
|
-
|
|
327
273
|
if (errorCallback) {
|
|
328
274
|
return {
|
|
329
275
|
valid: false,
|
|
@@ -337,42 +283,32 @@ function validator(nodes, marks, options) {
|
|
|
337
283
|
throw new Error(message);
|
|
338
284
|
}
|
|
339
285
|
};
|
|
340
|
-
|
|
341
286
|
if (type) {
|
|
342
287
|
var typeOptions = getOptionsForType(type, allowed);
|
|
343
|
-
|
|
344
288
|
if (typeOptions === false) {
|
|
345
289
|
return isMark ? {
|
|
346
290
|
valid: false
|
|
347
291
|
} : err('INVALID_TYPE', 'type not allowed here');
|
|
348
292
|
}
|
|
349
|
-
|
|
350
293
|
var spec = validatorSpecs[type];
|
|
351
|
-
|
|
352
294
|
if (!spec) {
|
|
353
295
|
return err('INVALID_TYPE', "".concat(type, ": No validation spec found for type!"));
|
|
354
296
|
}
|
|
355
|
-
|
|
356
297
|
var specBasedValidationResult = specBasedValidationFor(spec, typeOptions, entity, err, newEntity, type, errorCallback, isMark);
|
|
357
|
-
|
|
358
298
|
if (specBasedValidationResult.hasValidated && specBasedValidationResult.result) {
|
|
359
299
|
return specBasedValidationResult.result;
|
|
360
300
|
}
|
|
361
301
|
} else {
|
|
362
302
|
return err('INVALID_TYPE', 'ProseMirror Node/Mark should contain a `type`');
|
|
363
303
|
}
|
|
364
|
-
|
|
365
304
|
return {
|
|
366
305
|
valid: true,
|
|
367
306
|
entity: newEntity
|
|
368
307
|
};
|
|
369
308
|
};
|
|
370
|
-
|
|
371
309
|
return validate;
|
|
372
|
-
|
|
373
310
|
function marksValidationFor(validator, entity, errorCallback, newEntity, err) {
|
|
374
311
|
var validationResult;
|
|
375
|
-
|
|
376
312
|
if (validator.props && validator.props.marks) {
|
|
377
313
|
var marksSet = allowedMarksFor(validator);
|
|
378
314
|
var marksValidationResult = marksAfterValidation(entity, errorCallback, marksSet, validator);
|
|
@@ -384,31 +320,27 @@ function validator(nodes, marks, options) {
|
|
|
384
320
|
} else {
|
|
385
321
|
validationResult = marksForEntitySpecNotSupportingMarks(entity, newEntity, errorCallback, err);
|
|
386
322
|
}
|
|
387
|
-
|
|
388
323
|
return validationResult;
|
|
389
324
|
}
|
|
390
|
-
|
|
391
325
|
function validatorFor(spec, typeOptions) {
|
|
392
326
|
return _objectSpread(_objectSpread(_objectSpread({}, spec), typeOptions), spec.props ? {
|
|
393
327
|
props: _objectSpread(_objectSpread({}, spec.props), typeOptions['props'] || {})
|
|
394
328
|
} : {});
|
|
395
329
|
}
|
|
396
|
-
|
|
397
330
|
function marksAfterValidation(entity, errorCallback, marksSet, validator) {
|
|
398
331
|
return entity.marks ? entity.marks.map(function (mark) {
|
|
399
332
|
var isAKnownMark = marks ? marks.indexOf(mark.type) > -1 : true;
|
|
400
|
-
|
|
401
333
|
if (mode === 'strict' && isAKnownMark) {
|
|
402
334
|
var finalResult = validateNode(mark, errorCallback, marksSet, validator, true);
|
|
403
335
|
var finalMark = finalResult.entity;
|
|
404
|
-
|
|
405
336
|
if (finalMark) {
|
|
406
337
|
return {
|
|
407
338
|
valid: true,
|
|
408
339
|
originalMark: mark,
|
|
409
340
|
newMark: finalMark
|
|
410
341
|
};
|
|
411
|
-
}
|
|
342
|
+
}
|
|
343
|
+
// this checks for mark level attribute errors
|
|
412
344
|
// and propagates error code and message
|
|
413
345
|
else if (finalResult.marksValidationOutput && finalResult.marksValidationOutput.length) {
|
|
414
346
|
return {
|
|
@@ -433,27 +365,22 @@ function validator(nodes, marks, options) {
|
|
|
433
365
|
}
|
|
434
366
|
}) : [];
|
|
435
367
|
}
|
|
436
|
-
|
|
437
368
|
function allowedMarksFor(validator) {
|
|
438
369
|
var _ref3 = validator.props.marks,
|
|
439
|
-
|
|
370
|
+
items = _ref3.items;
|
|
440
371
|
var marksSet = items.length ? Array.isArray(items[0]) ? items[0] : items : [];
|
|
441
372
|
return marksSet;
|
|
442
373
|
}
|
|
443
|
-
|
|
444
374
|
function marksForEntitySpecNotSupportingMarks(prevEntity, newEntity, errorCallback, err) {
|
|
445
375
|
var errorCode = 'REDUNDANT_MARKS';
|
|
446
376
|
var currentMarks = prevEntity.marks || [];
|
|
447
377
|
var newMarks = currentMarks.map(function (mark) {
|
|
448
378
|
var isUnsupportedNodeAttributeMark = mark.type === 'unsupportedNodeAttribute';
|
|
449
|
-
|
|
450
379
|
if (isUnsupportedNodeAttributeMark) {
|
|
451
380
|
return mark;
|
|
452
381
|
}
|
|
453
|
-
|
|
454
382
|
return unsupportedMarkContent(errorCode, mark, errorCallback);
|
|
455
383
|
});
|
|
456
|
-
|
|
457
384
|
if (newMarks.length) {
|
|
458
385
|
newEntity.marks = newMarks;
|
|
459
386
|
return {
|
|
@@ -466,13 +393,11 @@ function validator(nodes, marks, options) {
|
|
|
466
393
|
});
|
|
467
394
|
}
|
|
468
395
|
}
|
|
469
|
-
|
|
470
396
|
function requiredPropertyValidationFor(validatorSpec, prevEntity, err) {
|
|
471
397
|
var result = {
|
|
472
398
|
valid: true,
|
|
473
399
|
entity: prevEntity
|
|
474
400
|
};
|
|
475
|
-
|
|
476
401
|
if (validatorSpec.required) {
|
|
477
402
|
if (!validatorSpec.required.every(function (prop) {
|
|
478
403
|
return (0, _utils.isDefined)(prevEntity[prop]);
|
|
@@ -480,37 +405,30 @@ function validator(nodes, marks, options) {
|
|
|
480
405
|
result = err('MISSING_PROPERTIES', 'required prop missing');
|
|
481
406
|
}
|
|
482
407
|
}
|
|
483
|
-
|
|
484
408
|
return result;
|
|
485
409
|
}
|
|
486
|
-
|
|
487
410
|
function textPropertyValidationFor(validatorSpec, prevEntity, err) {
|
|
488
411
|
var result = {
|
|
489
412
|
valid: true,
|
|
490
413
|
entity: prevEntity
|
|
491
414
|
};
|
|
492
|
-
|
|
493
415
|
if (validatorSpec.props.text) {
|
|
494
416
|
if ((0, _utils.isDefined)(prevEntity.text) && !validateAttrs(validatorSpec.props.text, prevEntity.text)) {
|
|
495
417
|
result = err('INVALID_TEXT', "'text' validation failed");
|
|
496
418
|
}
|
|
497
419
|
}
|
|
498
|
-
|
|
499
420
|
return result;
|
|
500
421
|
}
|
|
501
|
-
|
|
502
422
|
function contentLengthValidationFor(validatorSpec, prevEntity, err) {
|
|
503
423
|
var result = {
|
|
504
424
|
valid: true,
|
|
505
425
|
entity: prevEntity
|
|
506
426
|
};
|
|
507
|
-
|
|
508
427
|
if (validatorSpec.props.content && prevEntity.content) {
|
|
509
428
|
var _content = validatorSpec.props.content,
|
|
510
|
-
|
|
511
|
-
|
|
429
|
+
minItems = _content.minItems,
|
|
430
|
+
maxItems = _content.maxItems;
|
|
512
431
|
var length = prevEntity.content.length;
|
|
513
|
-
|
|
514
432
|
if ((0, _utils.isDefined)(minItems) && minItems > length) {
|
|
515
433
|
result = err('INVALID_CONTENT_LENGTH', "'content' should have more than ".concat(minItems, " child"), {
|
|
516
434
|
length: length,
|
|
@@ -525,14 +443,11 @@ function validator(nodes, marks, options) {
|
|
|
525
443
|
});
|
|
526
444
|
}
|
|
527
445
|
}
|
|
528
|
-
|
|
529
446
|
return result;
|
|
530
447
|
}
|
|
531
|
-
|
|
532
448
|
function invalidAttributesFor(validatorSpec, prevEntity) {
|
|
533
449
|
var invalidAttrs = [];
|
|
534
450
|
var validatorAttrs = {};
|
|
535
|
-
|
|
536
451
|
if (validatorSpec.props && validatorSpec.props.attrs) {
|
|
537
452
|
var attrOptions = (0, _utils.makeArray)(validatorSpec.props.attrs);
|
|
538
453
|
/**
|
|
@@ -540,67 +455,52 @@ function validator(nodes, marks, options) {
|
|
|
540
455
|
* attrs: [{ props: { url: { type: 'string' } } }, { props: { data: {} } }],
|
|
541
456
|
* Gotcha: It will always report the last failure.
|
|
542
457
|
*/
|
|
543
|
-
|
|
544
458
|
for (var i = 0, length = attrOptions.length; i < length; ++i) {
|
|
545
459
|
var attrOption = attrOptions[i];
|
|
546
|
-
|
|
547
460
|
if (attrOption && attrOption.props) {
|
|
548
461
|
var _partitionObject = partitionObject(attrOption.props, function (k, v) {
|
|
549
462
|
return validateAttrs(v, prevEntity.attrs[k]);
|
|
550
463
|
});
|
|
551
|
-
|
|
552
464
|
var _partitionObject2 = (0, _slicedToArray2.default)(_partitionObject, 2);
|
|
553
|
-
|
|
554
465
|
invalidAttrs = _partitionObject2[1];
|
|
555
466
|
}
|
|
556
|
-
|
|
557
467
|
validatorAttrs = attrOption;
|
|
558
|
-
|
|
559
468
|
if (!invalidAttrs.length) {
|
|
560
469
|
break;
|
|
561
470
|
}
|
|
562
471
|
}
|
|
563
472
|
}
|
|
564
|
-
|
|
565
473
|
return {
|
|
566
474
|
invalidAttrs: invalidAttrs,
|
|
567
475
|
validatorAttrs: validatorAttrs
|
|
568
476
|
};
|
|
569
477
|
}
|
|
570
|
-
|
|
571
478
|
function attributesValidationFor(validatorSpec, prevEntity, newEntity, isMark, errorCallback) {
|
|
572
479
|
var validatorSpecAllowsAttributes = validatorSpec.props && validatorSpec.props.attrs;
|
|
573
|
-
|
|
574
480
|
if (prevEntity.attrs) {
|
|
575
481
|
if (!validatorSpecAllowsAttributes) {
|
|
576
482
|
if (isMark) {
|
|
577
483
|
return handleNoAttibutesAllowedInSpecForMark(prevEntity, prevEntity.attrs);
|
|
578
484
|
}
|
|
579
|
-
|
|
580
485
|
var attrs = Object.keys(prevEntity.attrs);
|
|
581
486
|
return handleUnsupportedNodeAttributes(prevEntity, newEntity, [], attrs, errorCallback);
|
|
582
487
|
}
|
|
583
|
-
|
|
584
488
|
var _validateAttributes = validateAttributes(validatorSpec, prevEntity, prevEntity.attrs),
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
489
|
+
hasUnsupportedAttrs = _validateAttributes.hasUnsupportedAttrs,
|
|
490
|
+
redundantAttrs = _validateAttributes.redundantAttrs,
|
|
491
|
+
invalidAttrs = _validateAttributes.invalidAttrs;
|
|
589
492
|
if (hasUnsupportedAttrs) {
|
|
590
493
|
if (isMark) {
|
|
591
494
|
return handleUnsupportedMarkAttributes(prevEntity, invalidAttrs, redundantAttrs);
|
|
592
495
|
}
|
|
593
|
-
|
|
594
496
|
return handleUnsupportedNodeAttributes(prevEntity, newEntity, invalidAttrs, redundantAttrs, errorCallback);
|
|
595
497
|
}
|
|
596
498
|
}
|
|
597
|
-
|
|
598
499
|
return {
|
|
599
500
|
valid: true,
|
|
600
501
|
entity: prevEntity
|
|
601
502
|
};
|
|
602
503
|
}
|
|
603
|
-
|
|
604
504
|
function validateAttributes(validatorSpec, prevEntity, attributes) {
|
|
605
505
|
var invalidAttributesResult = invalidAttributesFor(validatorSpec, prevEntity);
|
|
606
506
|
var invalidAttrs = invalidAttributesResult.invalidAttrs;
|
|
@@ -619,7 +519,6 @@ function validator(nodes, marks, options) {
|
|
|
619
519
|
redundantAttrs: redundantAttrs
|
|
620
520
|
};
|
|
621
521
|
}
|
|
622
|
-
|
|
623
522
|
function handleUnsupportedNodeAttributes(prevEntity, newEntity, invalidAttrs, redundantAttrs, errorCallback) {
|
|
624
523
|
var attr = invalidAttrs.concat(redundantAttrs);
|
|
625
524
|
var result = {
|
|
@@ -635,18 +534,15 @@ function validator(nodes, marks, options) {
|
|
|
635
534
|
};
|
|
636
535
|
return result;
|
|
637
536
|
}
|
|
638
|
-
|
|
639
537
|
function handleUnsupportedMarkAttributes(prevEntity, invalidAttrs, redundantAttrs) {
|
|
640
538
|
var errorCode = 'INVALID_ATTRIBUTES';
|
|
641
539
|
var message = errorMessageFor(prevEntity.type, "'attrs' validation failed");
|
|
642
540
|
var hasRedundantAttrs = redundantAttrs.length;
|
|
643
541
|
var hasBothInvalidAndRedundantAttrs = hasRedundantAttrs && invalidAttrs.length;
|
|
644
|
-
|
|
645
542
|
if (!hasBothInvalidAndRedundantAttrs && hasRedundantAttrs) {
|
|
646
543
|
errorCode = 'REDUNDANT_ATTRIBUTES';
|
|
647
544
|
message = errorMessageFor('redundant attributes found', redundantAttrs.join(', '));
|
|
648
545
|
}
|
|
649
|
-
|
|
650
546
|
var markValidationResult = {
|
|
651
547
|
valid: true,
|
|
652
548
|
originalMark: prevEntity,
|
|
@@ -658,7 +554,6 @@ function validator(nodes, marks, options) {
|
|
|
658
554
|
marksValidationOutput: [markValidationResult]
|
|
659
555
|
};
|
|
660
556
|
}
|
|
661
|
-
|
|
662
557
|
function handleNoAttibutesAllowedInSpecForMark(prevEntity, attributes) {
|
|
663
558
|
var message = errorMessageFor('redundant attributes found', Object.keys(attributes).join(', '));
|
|
664
559
|
var errorCode = 'REDUNDANT_ATTRIBUTES';
|
|
@@ -673,22 +568,16 @@ function validator(nodes, marks, options) {
|
|
|
673
568
|
marksValidationOutput: [markValidationResult]
|
|
674
569
|
};
|
|
675
570
|
}
|
|
676
|
-
|
|
677
571
|
function wrapUnSupportedNodeAttributes(prevEntity, newEntity, invalidAttrs, errorCode, message, errorCallback) {
|
|
678
572
|
var invalidValues = {};
|
|
679
|
-
|
|
680
573
|
for (var invalidAttr in invalidAttrs) {
|
|
681
574
|
invalidValues[invalidAttrs[invalidAttr]] = prevEntity.attrs && prevEntity.attrs[invalidAttrs[invalidAttr]];
|
|
682
|
-
|
|
683
575
|
if (newEntity.attrs) {
|
|
684
576
|
delete newEntity.attrs[invalidAttrs[invalidAttr]];
|
|
685
577
|
}
|
|
686
578
|
}
|
|
687
|
-
|
|
688
579
|
var unsupportedNodeAttributeValues = unsupportedNodeAttributesContent(prevEntity, errorCode, invalidValues, message, errorCallback);
|
|
689
|
-
|
|
690
580
|
var finalEntity = _objectSpread({}, newEntity);
|
|
691
|
-
|
|
692
581
|
if (finalEntity.marks) {
|
|
693
582
|
unsupportedNodeAttributeValues && finalEntity.marks.push(unsupportedNodeAttributeValues);
|
|
694
583
|
return finalEntity.marks;
|
|
@@ -696,20 +585,17 @@ function validator(nodes, marks, options) {
|
|
|
696
585
|
return [unsupportedNodeAttributeValues];
|
|
697
586
|
}
|
|
698
587
|
}
|
|
699
|
-
|
|
700
588
|
function extraPropsValidationFor(validatorSpec, prevEntity, err, newEntity, type) {
|
|
701
589
|
var result = {
|
|
702
590
|
valid: true,
|
|
703
591
|
entity: prevEntity
|
|
704
592
|
};
|
|
705
|
-
|
|
706
593
|
var _partitionObject3 = partitionObject(prevEntity, function (k) {
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
594
|
+
return (0, _utils.isDefined)(validatorSpec.props[k]);
|
|
595
|
+
}),
|
|
596
|
+
_partitionObject4 = (0, _slicedToArray2.default)(_partitionObject3, 2),
|
|
597
|
+
requiredProps = _partitionObject4[0],
|
|
598
|
+
redundantProps = _partitionObject4[1];
|
|
713
599
|
if (redundantProps.length) {
|
|
714
600
|
if (mode === 'loose') {
|
|
715
601
|
newEntity = {
|
|
@@ -726,34 +612,29 @@ function validator(nodes, marks, options) {
|
|
|
726
612
|
}
|
|
727
613
|
}
|
|
728
614
|
}
|
|
729
|
-
|
|
730
615
|
return result;
|
|
731
616
|
}
|
|
732
|
-
|
|
733
617
|
function specBasedValidationFor(spec, typeOptions, prevEntity, err, newEntity, type, errorCallback, isMark) {
|
|
734
618
|
var specBasedValidationResult = {
|
|
735
619
|
hasValidated: false
|
|
736
620
|
};
|
|
737
621
|
var validatorSpec = validatorFor(spec, typeOptions);
|
|
738
|
-
|
|
739
622
|
if (!validatorSpec) {
|
|
740
623
|
return specBasedValidationResult;
|
|
741
|
-
}
|
|
742
|
-
// For array format where `required` is an array
|
|
743
|
-
|
|
624
|
+
}
|
|
744
625
|
|
|
626
|
+
// Required Props
|
|
627
|
+
// For array format where `required` is an array
|
|
745
628
|
var requiredPropertyValidatonResult = requiredPropertyValidationFor(validatorSpec, prevEntity, err);
|
|
746
|
-
|
|
747
629
|
if (!requiredPropertyValidatonResult.valid) {
|
|
748
630
|
return {
|
|
749
631
|
hasValidated: true,
|
|
750
632
|
result: requiredPropertyValidatonResult
|
|
751
633
|
};
|
|
752
634
|
}
|
|
753
|
-
|
|
754
635
|
if (!validatorSpec.props) {
|
|
755
|
-
var props = Object.keys(prevEntity);
|
|
756
|
-
|
|
636
|
+
var props = Object.keys(prevEntity);
|
|
637
|
+
// If there's no validator.props then there shouldn't be any key except `type`
|
|
757
638
|
if (props.length > 1) {
|
|
758
639
|
return {
|
|
759
640
|
hasValidated: true,
|
|
@@ -762,38 +643,33 @@ function validator(nodes, marks, options) {
|
|
|
762
643
|
})
|
|
763
644
|
};
|
|
764
645
|
}
|
|
765
|
-
|
|
766
646
|
return specBasedValidationResult;
|
|
767
|
-
}
|
|
768
|
-
|
|
647
|
+
}
|
|
769
648
|
|
|
649
|
+
// Check text
|
|
770
650
|
var textPropertyValidationResult = textPropertyValidationFor(validatorSpec, prevEntity, err);
|
|
771
|
-
|
|
772
651
|
if (!textPropertyValidationResult.valid) {
|
|
773
652
|
return {
|
|
774
653
|
hasValidated: true,
|
|
775
654
|
result: textPropertyValidationResult
|
|
776
655
|
};
|
|
777
|
-
}
|
|
778
|
-
|
|
779
|
-
|
|
656
|
+
}
|
|
657
|
+
// Content Length
|
|
780
658
|
var contentLengthValidationResult = contentLengthValidationFor(validatorSpec, prevEntity, err);
|
|
781
|
-
|
|
782
659
|
if (!contentLengthValidationResult.valid) {
|
|
783
660
|
return {
|
|
784
661
|
hasValidated: true,
|
|
785
662
|
result: contentLengthValidationResult
|
|
786
663
|
};
|
|
787
|
-
}
|
|
788
|
-
// For object format based on `optional` property
|
|
789
|
-
|
|
664
|
+
}
|
|
790
665
|
|
|
666
|
+
// Required Props
|
|
667
|
+
// For object format based on `optional` property
|
|
791
668
|
var _partitionObject5 = partitionObject(validatorSpec.props, function (k, v) {
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
669
|
+
return v.optional || (0, _utils.isDefined)(prevEntity[k]);
|
|
670
|
+
}),
|
|
671
|
+
_partitionObject6 = (0, _slicedToArray2.default)(_partitionObject5, 2),
|
|
672
|
+
missingProps = _partitionObject6[1];
|
|
797
673
|
if (missingProps.length) {
|
|
798
674
|
return {
|
|
799
675
|
hasValidated: true,
|
|
@@ -802,46 +678,38 @@ function validator(nodes, marks, options) {
|
|
|
802
678
|
})
|
|
803
679
|
};
|
|
804
680
|
}
|
|
805
|
-
|
|
806
681
|
var attributesValidationResult = attributesValidationFor(validatorSpec, prevEntity, newEntity, isMark, errorCallback);
|
|
807
|
-
|
|
808
682
|
if (!attributesValidationResult.valid) {
|
|
809
683
|
return {
|
|
810
684
|
hasValidated: true,
|
|
811
685
|
result: attributesValidationResult
|
|
812
686
|
};
|
|
813
687
|
}
|
|
814
|
-
|
|
815
688
|
if (isMark && attributesValidationResult.valid) {
|
|
816
689
|
return {
|
|
817
690
|
hasValidated: true,
|
|
818
691
|
result: attributesValidationResult
|
|
819
692
|
};
|
|
820
693
|
}
|
|
821
|
-
|
|
822
694
|
var extraPropsValidationResult = extraPropsValidationFor(validatorSpec, prevEntity, err, newEntity, type);
|
|
823
|
-
|
|
824
695
|
if (!extraPropsValidationResult.valid) {
|
|
825
696
|
return {
|
|
826
697
|
hasValidated: true,
|
|
827
698
|
result: extraPropsValidationResult
|
|
828
699
|
};
|
|
829
|
-
}
|
|
830
|
-
|
|
700
|
+
}
|
|
831
701
|
|
|
702
|
+
// Children
|
|
832
703
|
if (validatorSpec.props.content) {
|
|
833
704
|
var contentValidatorSpec = validatorSpec.props.content;
|
|
834
|
-
|
|
835
705
|
if (prevEntity.content) {
|
|
836
706
|
var validateChildNode = function validateChildNode(child, index) {
|
|
837
707
|
if (child === undefined) {
|
|
838
708
|
return child;
|
|
839
709
|
}
|
|
840
|
-
|
|
841
710
|
var validateChildMarks = function validateChildMarks(childEntity, marksValidationOutput, errorCallback, isLastValidationSpec) {
|
|
842
711
|
var isParentTupleLike = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
843
712
|
var marksAreValid = true;
|
|
844
|
-
|
|
845
713
|
if (childEntity && childEntity.marks && marksValidationOutput) {
|
|
846
714
|
var validMarks = marksValidationOutput.filter(function (mark) {
|
|
847
715
|
return mark.valid;
|
|
@@ -853,11 +721,9 @@ function validator(nodes, marks, options) {
|
|
|
853
721
|
if (validMarks.length || isLastValidationSpec || isParentTupleLike || mr.errorCode === 'INVALID_TYPE' || mr.errorCode === 'INVALID_CONTENT' || mr.errorCode === 'REDUNDANT_ATTRIBUTES' || mr.errorCode === 'INVALID_ATTRIBUTES') {
|
|
854
722
|
return unsupportedMarkContent(mr.errorCode, mr.originalMark, errorCallback, mr.message);
|
|
855
723
|
}
|
|
856
|
-
|
|
857
724
|
return;
|
|
858
725
|
}
|
|
859
726
|
}).filter(Boolean);
|
|
860
|
-
|
|
861
727
|
if (finalMarks.length) {
|
|
862
728
|
childEntity.marks = finalMarks;
|
|
863
729
|
} else {
|
|
@@ -865,77 +731,63 @@ function validator(nodes, marks, options) {
|
|
|
865
731
|
marksAreValid = false;
|
|
866
732
|
}
|
|
867
733
|
}
|
|
868
|
-
|
|
869
734
|
return {
|
|
870
735
|
valid: marksAreValid,
|
|
871
736
|
entity: childEntity
|
|
872
737
|
};
|
|
873
738
|
};
|
|
874
|
-
|
|
875
739
|
var hasMultipleCombinationOfContentAllowed = !!contentValidatorSpec.isTupleLike;
|
|
876
|
-
|
|
877
740
|
if (hasMultipleCombinationOfContentAllowed) {
|
|
878
741
|
var _validateNode = validateNode(child, errorCallback, (0, _utils.makeArray)(contentValidatorSpec.items[index] || contentValidatorSpec.items[contentValidatorSpec.items.length - 1]), validatorSpec),
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
742
|
+
newChildEntity = _validateNode.entity,
|
|
743
|
+
marksValidationOutput = _validateNode.marksValidationOutput;
|
|
882
744
|
var _validateChildMarks = validateChildMarks(newChildEntity, marksValidationOutput, errorCallback, false, true),
|
|
883
|
-
|
|
884
|
-
|
|
745
|
+
entity = _validateChildMarks.entity;
|
|
885
746
|
return entity;
|
|
886
|
-
}
|
|
887
|
-
|
|
747
|
+
}
|
|
888
748
|
|
|
749
|
+
// Only go inside valid branch
|
|
889
750
|
var allowedSpecsForEntity = contentValidatorSpec.items.filter(function (item) {
|
|
890
|
-
return Array.isArray(item) ? item.some(
|
|
751
|
+
return Array.isArray(item) ? item.some(
|
|
752
|
+
// [p, hr, ...] or [p, [text, {}], ...]
|
|
891
753
|
function (spec) {
|
|
892
754
|
return (Array.isArray(spec) ? spec[0] : spec) === child.type;
|
|
893
755
|
}) : true;
|
|
894
756
|
});
|
|
895
|
-
|
|
896
757
|
if (allowedSpecsForEntity.length) {
|
|
897
758
|
if (allowedSpecsForEntity.length > 1) {
|
|
898
759
|
throw new Error('Consider using Tuple instead!');
|
|
899
760
|
}
|
|
900
|
-
|
|
901
761
|
var maybeArray = (0, _utils.makeArray)(allowedSpecsForEntity[0]);
|
|
902
762
|
var allowedSpecsForChild = maybeArray.filter(function (item) {
|
|
903
763
|
return (Array.isArray(item) ? item[0] : item) === child.type;
|
|
904
764
|
});
|
|
905
|
-
|
|
906
765
|
if (allowedSpecsForChild.length === 0) {
|
|
907
766
|
return invalidChildContent(child, errorCallback, validatorSpec);
|
|
908
767
|
}
|
|
768
|
+
|
|
909
769
|
/**
|
|
910
770
|
* When there's multiple possible branches try all of them.
|
|
911
771
|
* If all of them fails, throw the first one.
|
|
912
772
|
* e.g.- [['text', { marks: ['a'] }], ['text', { marks: ['b'] }]]
|
|
913
773
|
*/
|
|
914
|
-
|
|
915
|
-
|
|
916
774
|
var firstError;
|
|
917
775
|
var firstChild;
|
|
918
|
-
|
|
919
776
|
for (var i = 0, len = allowedSpecsForChild.length; i < len; i++) {
|
|
920
777
|
try {
|
|
921
778
|
var allowedValueForCurrentSpec = [allowedSpecsForChild[i]];
|
|
922
|
-
|
|
923
779
|
var _validateNode2 = validateNode(child, errorCallback, allowedValueForCurrentSpec, validatorSpec),
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
780
|
+
valid = _validateNode2.valid,
|
|
781
|
+
_newChildEntity = _validateNode2.entity,
|
|
782
|
+
_marksValidationOutput = _validateNode2.marksValidationOutput;
|
|
928
783
|
if (valid) {
|
|
929
784
|
var isLastValidationSpec = i === allowedSpecsForChild.length - 1;
|
|
930
|
-
|
|
931
785
|
var _validateChildMarks2 = validateChildMarks(_newChildEntity, _marksValidationOutput, errorCallback, isLastValidationSpec),
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
786
|
+
marksAreValid = _validateChildMarks2.valid,
|
|
787
|
+
_entity = _validateChildMarks2.entity;
|
|
935
788
|
var unsupportedMarks = _entity && _entity.marks && _entity.marks.filter(function (mark) {
|
|
936
789
|
return mark.type === 'unsupportedMark';
|
|
937
790
|
}) || [];
|
|
938
|
-
|
|
939
791
|
if (marksAreValid && !unsupportedMarks.length) {
|
|
940
792
|
return _entity;
|
|
941
793
|
} else {
|
|
@@ -948,7 +800,6 @@ function validator(nodes, marks, options) {
|
|
|
948
800
|
firstError = firstError || error;
|
|
949
801
|
}
|
|
950
802
|
}
|
|
951
|
-
|
|
952
803
|
if (!errorCallback) {
|
|
953
804
|
throw firstError;
|
|
954
805
|
} else {
|
|
@@ -958,7 +809,6 @@ function validator(nodes, marks, options) {
|
|
|
958
809
|
return invalidChildContent(child, errorCallback, validatorSpec);
|
|
959
810
|
}
|
|
960
811
|
};
|
|
961
|
-
|
|
962
812
|
newEntity.content = prevEntity.content.map(validateChildNode).filter(Boolean);
|
|
963
813
|
} else if (!contentValidatorSpec.optional) {
|
|
964
814
|
return {
|
|
@@ -966,16 +816,15 @@ function validator(nodes, marks, options) {
|
|
|
966
816
|
result: err('MISSING_PROPERTIES', 'missing `content` prop')
|
|
967
817
|
};
|
|
968
818
|
}
|
|
969
|
-
}
|
|
970
|
-
|
|
819
|
+
}
|
|
971
820
|
|
|
821
|
+
// Marks
|
|
972
822
|
if (prevEntity.marks) {
|
|
973
823
|
return {
|
|
974
824
|
hasValidated: true,
|
|
975
825
|
result: marksValidationFor(validatorSpec, prevEntity, errorCallback, newEntity, err)
|
|
976
826
|
};
|
|
977
827
|
}
|
|
978
|
-
|
|
979
828
|
return specBasedValidationResult;
|
|
980
829
|
}
|
|
981
830
|
}
|