@atlaskit/adf-utils 18.0.2 → 18.0.4

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 (168) hide show
  1. package/CHANGELOG.md +17 -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/block_content.js +1 -1
  82. package/dist/cjs/validator/specs/doc.js +1 -1
  83. package/dist/cjs/validator/specs/index.js +2 -85
  84. package/dist/cjs/validator/specs/listItem.js +1 -1
  85. package/dist/cjs/validator/specs/nestedExpand_content.js +1 -1
  86. package/dist/cjs/validator/specs/non_nestable_block_content.js +1 -1
  87. package/dist/cjs/validator/specs/panel.js +3 -3
  88. package/dist/cjs/validator/specs/tableCell_content.js +1 -1
  89. package/dist/cjs/validator/utils.js +4 -20
  90. package/dist/cjs/validator/validator.js +67 -218
  91. package/dist/cjs/validator.js +0 -1
  92. package/dist/cjs/version.json +1 -1
  93. package/dist/es2019/builders/utils/apply-mark.js +0 -2
  94. package/dist/es2019/builders/utils/is-duplicate-mark.js +0 -1
  95. package/dist/es2019/builders.js +4 -1
  96. package/dist/es2019/scrub/default-node-replacements.js +2 -7
  97. package/dist/es2019/scrub/hash.js +0 -2
  98. package/dist/es2019/scrub/scrub-adf.js +4 -10
  99. package/dist/es2019/scrub/scrub-content.js +7 -20
  100. package/dist/es2019/transforms/dedupe-marks-transform.js +4 -16
  101. package/dist/es2019/transforms/helpers.js +0 -1
  102. package/dist/es2019/transforms/indentation-marks-transform.js +10 -10
  103. package/dist/es2019/transforms/invalid-media-content-transform.js +5 -15
  104. package/dist/es2019/transforms/media-link-transform.js +2 -9
  105. package/dist/es2019/transforms/nodes-missing-content-transform.js +6 -38
  106. package/dist/es2019/transforms/text-link-code-transform.js +5 -8
  107. package/dist/es2019/traverse/traverse.js +5 -13
  108. package/dist/es2019/validator/specs/block_content.js +1 -1
  109. package/dist/es2019/validator/specs/doc.js +1 -1
  110. package/dist/es2019/validator/specs/index.js +2 -2
  111. package/dist/es2019/validator/specs/listItem.js +1 -1
  112. package/dist/es2019/validator/specs/nestedExpand_content.js +1 -1
  113. package/dist/es2019/validator/specs/non_nestable_block_content.js +1 -1
  114. package/dist/es2019/validator/specs/panel.js +3 -3
  115. package/dist/es2019/validator/specs/tableCell_content.js +1 -1
  116. package/dist/es2019/validator/utils.js +4 -2
  117. package/dist/es2019/validator/validator.js +60 -174
  118. package/dist/es2019/version.json +1 -1
  119. package/dist/esm/builders/nodes/blockquote.js +0 -1
  120. package/dist/esm/builders/nodes/bodied-extension.js +0 -1
  121. package/dist/esm/builders/nodes/bullet-list.js +0 -1
  122. package/dist/esm/builders/nodes/caption.js +0 -1
  123. package/dist/esm/builders/nodes/code-block.js +0 -1
  124. package/dist/esm/builders/nodes/decision-item.js +0 -1
  125. package/dist/esm/builders/nodes/decision-list.js +0 -1
  126. package/dist/esm/builders/nodes/doc.js +0 -1
  127. package/dist/esm/builders/nodes/expand.js +0 -1
  128. package/dist/esm/builders/nodes/heading.js +0 -1
  129. package/dist/esm/builders/nodes/media-group.js +0 -1
  130. package/dist/esm/builders/nodes/mention.js +0 -3
  131. package/dist/esm/builders/nodes/nested-expand.js +0 -1
  132. package/dist/esm/builders/nodes/ordered-list.js +0 -1
  133. package/dist/esm/builders/nodes/panel.js +0 -1
  134. package/dist/esm/builders/nodes/paragraph.js +0 -1
  135. package/dist/esm/builders/nodes/table-cell.js +0 -1
  136. package/dist/esm/builders/nodes/table-header.js +0 -1
  137. package/dist/esm/builders/nodes/table.js +0 -1
  138. package/dist/esm/builders/nodes/task-item.js +0 -1
  139. package/dist/esm/builders/nodes/task-list.js +0 -1
  140. package/dist/esm/builders/utils/apply-mark.js +0 -2
  141. package/dist/esm/builders/utils/is-duplicate-mark.js +0 -1
  142. package/dist/esm/builders.js +4 -1
  143. package/dist/esm/scrub/default-node-replacements.js +0 -9
  144. package/dist/esm/scrub/hash.js +0 -2
  145. package/dist/esm/scrub/scrub-adf.js +2 -17
  146. package/dist/esm/scrub/scrub-content.js +7 -28
  147. package/dist/esm/transforms/dedupe-marks-transform.js +2 -18
  148. package/dist/esm/transforms/helpers.js +0 -1
  149. package/dist/esm/transforms/indentation-marks-transform.js +6 -11
  150. package/dist/esm/transforms/invalid-media-content-transform.js +3 -18
  151. package/dist/esm/transforms/media-link-transform.js +2 -9
  152. package/dist/esm/transforms/nodes-missing-content-transform.js +0 -38
  153. package/dist/esm/transforms/text-link-code-transform.js +3 -10
  154. package/dist/esm/traverse/traverse.js +1 -15
  155. package/dist/esm/validator/specs/block_content.js +1 -1
  156. package/dist/esm/validator/specs/doc.js +1 -1
  157. package/dist/esm/validator/specs/index.js +2 -2
  158. package/dist/esm/validator/specs/listItem.js +1 -1
  159. package/dist/esm/validator/specs/nestedExpand_content.js +1 -1
  160. package/dist/esm/validator/specs/non_nestable_block_content.js +1 -1
  161. package/dist/esm/validator/specs/panel.js +3 -3
  162. package/dist/esm/validator/specs/tableCell_content.js +1 -1
  163. package/dist/esm/validator/utils.js +4 -2
  164. package/dist/esm/validator/validator.js +67 -209
  165. package/dist/esm/version.json +1 -1
  166. package/dist/types/validator/specs/index.d.ts +2 -2
  167. package/dist/types/validator/specs/panel.d.ts +3 -3
  168. 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
- items = _ref.items,
43
- rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
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
- } // ['inline', 'emoji']
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
- spec.props.content.items = spec.props.content.items // ['inline'] => [['emoji', 'hr', ...]]
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
- }) // [['emoji', 'hr', 'inline_code']] => [['emoji', 'hr', ['text', { marks: {} }]]]
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 : // Now `NoMark` produces `items: []`, should be fixed in generator
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
- }) // Remove unsupported nodes & marks
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
- }) // Filter marks
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
- allowUnsupportedBlock = _spec$props$content.allowUnsupportedBlock,
241
- allowUnsupportedInline = _spec$props$content.allowUnsupportedInline;
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
- _ref2$mode = _ref2.mode,
306
- mode = _ref2$mode === void 0 ? 'strict' : _ref2$mode,
307
- _ref2$allowPrivateAtt = _ref2.allowPrivateAttributes,
308
- allowPrivateAttributes = _ref2$allowPrivateAtt === void 0 ? false : _ref2$allowPrivateAtt;
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
- } // this checks for mark level attribute errors
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
- items = _ref3.items;
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
- minItems = _content.minItems,
511
- maxItems = _content.maxItems;
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
- hasUnsupportedAttrs = _validateAttributes.hasUnsupportedAttrs,
586
- redundantAttrs = _validateAttributes.redundantAttrs,
587
- invalidAttrs = _validateAttributes.invalidAttrs;
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
- return (0, _utils.isDefined)(validatorSpec.props[k]);
708
- }),
709
- _partitionObject4 = (0, _slicedToArray2.default)(_partitionObject3, 2),
710
- requiredProps = _partitionObject4[0],
711
- redundantProps = _partitionObject4[1];
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
- } // Required Props
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); // If there's no validator.props then there shouldn't be any key except `type`
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
- } // Check text
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
- } // Content Length
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
- } // Required Props
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
- return v.optional || (0, _utils.isDefined)(prevEntity[k]);
793
- }),
794
- _partitionObject6 = (0, _slicedToArray2.default)(_partitionObject5, 2),
795
- missingProps = _partitionObject6[1];
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
- } // Children
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
- newChildEntity = _validateNode.entity,
880
- marksValidationOutput = _validateNode.marksValidationOutput;
881
-
742
+ newChildEntity = _validateNode.entity,
743
+ marksValidationOutput = _validateNode.marksValidationOutput;
882
744
  var _validateChildMarks = validateChildMarks(newChildEntity, marksValidationOutput, errorCallback, false, true),
883
- entity = _validateChildMarks.entity;
884
-
745
+ entity = _validateChildMarks.entity;
885
746
  return entity;
886
- } // Only go inside valid branch
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( // [p, hr, ...] or [p, [text, {}], ...]
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
- valid = _validateNode2.valid,
925
- _newChildEntity = _validateNode2.entity,
926
- _marksValidationOutput = _validateNode2.marksValidationOutput;
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
- marksAreValid = _validateChildMarks2.valid,
933
- _entity = _validateChildMarks2.entity;
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
- } // Marks
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
  }