@contentful/rich-text-types
Version:
Type definitions and constants for the Contentful rich text field type.
96 lines • 4.54 kB
JavaScript
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateRichTextDocument = void 0;
var blocks_1 = require("../blocks");
var inlines_1 = require("../inlines");
var schemaConstraints_1 = require("../schemaConstraints");
var assert_1 = require("./assert");
var node_1 = require("./node");
var path_1 = require("./path");
var text_1 = require("./text");
var assertInlineOrText = (0, node_1.assert)(__spreadArray(__spreadArray([], Object.values(inlines_1.INLINES), true), ['text'], false).sort());
var assertList = (0, node_1.assert)([blocks_1.BLOCKS.LIST_ITEM]);
var assertVoidEntryLink = (0, node_1.assertLink)('Entry', node_1.VOID_CONTENT);
var assertTableCell = (0, node_1.assert)(function () { return ({
nodeTypes: [blocks_1.BLOCKS.PARAGRAPH],
min: 1,
}); }, function (data, path) {
var $ = new assert_1.ObjectAssertion(data, path);
$.noAdditionalProperties(['colspan', 'rowspan']);
$.number('colspan', true);
$.number('rowspan', true);
return $.errors;
});
var nodeValidator = (_a = {},
_a[blocks_1.BLOCKS.DOCUMENT] = (0, node_1.assert)(schemaConstraints_1.TOP_LEVEL_BLOCKS),
_a[blocks_1.BLOCKS.PARAGRAPH] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_1] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_2] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_3] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_4] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_5] = assertInlineOrText,
_a[blocks_1.BLOCKS.HEADING_6] = assertInlineOrText,
_a[blocks_1.BLOCKS.QUOTE] = (0, node_1.assert)(schemaConstraints_1.CONTAINERS[blocks_1.BLOCKS.QUOTE]),
_a[blocks_1.BLOCKS.EMBEDDED_ENTRY] = assertVoidEntryLink,
_a[blocks_1.BLOCKS.EMBEDDED_ASSET] = (0, node_1.assertLink)('Asset', node_1.VOID_CONTENT),
_a[blocks_1.BLOCKS.EMBEDDED_RESOURCE] = (0, node_1.assertLink)('Contentful:Entry', node_1.VOID_CONTENT),
_a[blocks_1.BLOCKS.HR] = (0, node_1.assert)(node_1.VOID_CONTENT),
_a[blocks_1.BLOCKS.OL_LIST] = assertList,
_a[blocks_1.BLOCKS.UL_LIST] = assertList,
_a[blocks_1.BLOCKS.LIST_ITEM] = (0, node_1.assert)(__spreadArray([], schemaConstraints_1.LIST_ITEM_BLOCKS, true).sort()),
_a[blocks_1.BLOCKS.TABLE] = (0, node_1.assert)(function () { return ({
nodeTypes: [blocks_1.BLOCKS.TABLE_ROW],
min: 1,
}); }),
_a[blocks_1.BLOCKS.TABLE_ROW] = (0, node_1.assert)(function () { return ({
nodeTypes: [blocks_1.BLOCKS.TABLE_CELL, blocks_1.BLOCKS.TABLE_HEADER_CELL],
min: 1,
}); }),
_a[blocks_1.BLOCKS.TABLE_CELL] = assertTableCell,
_a[blocks_1.BLOCKS.TABLE_HEADER_CELL] = assertTableCell,
_a[inlines_1.INLINES.HYPERLINK] = new node_1.HyperLinkAssertion(),
_a[inlines_1.INLINES.EMBEDDED_ENTRY] = assertVoidEntryLink,
_a[inlines_1.INLINES.EMBEDDED_RESOURCE] = (0, node_1.assertLink)('Contentful:Entry', node_1.VOID_CONTENT),
_a[inlines_1.INLINES.ENTRY_HYPERLINK] = (0, node_1.assertLink)('Entry', ['text']),
_a[inlines_1.INLINES.ASSET_HYPERLINK] = (0, node_1.assertLink)('Asset', ['text']),
_a[inlines_1.INLINES.RESOURCE_HYPERLINK] = (0, node_1.assertLink)('Contentful:Entry', ['text']),
_a);
function validateNode(node, path) {
if (node.nodeType === 'text') {
return (0, text_1.assertText)(node, path);
}
var errors = nodeValidator[node.nodeType].assert(node, path);
if (errors.length > 0) {
return errors;
}
var $ = new assert_1.ObjectAssertion(node, path);
$.each('content', function (item, path) {
// We already know those are valid nodes thanks to the assertion done in
// the NodeAssertion class
return validateNode(item, path);
});
return $.errors;
}
var validateRichTextDocument = function (document) {
var path = new path_1.Path();
var $ = new assert_1.ObjectAssertion(document, path);
if ($.object()) {
$.enum('nodeType', [blocks_1.BLOCKS.DOCUMENT]);
}
if ($.errors.length > 0) {
return $.errors;
}
return validateNode(document, path);
};
exports.validateRichTextDocument = validateRichTextDocument;
//# sourceMappingURL=index.js.map
;