UNPKG

@contentful/rich-text-types

Version:

Type definitions and constants for the Contentful rich text field type.

96 lines 4.54 kB
"use strict"; 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