@wordpress/blocks
Version:
Block API for WordPress.
164 lines (162 loc) • 6.78 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/blocks/src/api/parser/index.js
var parser_exports = {};
__export(parser_exports, {
default: () => parse,
normalizeRawBlock: () => normalizeRawBlock,
parseRawBlock: () => parseRawBlock
});
module.exports = __toCommonJS(parser_exports);
var import_block_serialization_default_parser = require("@wordpress/block-serialization-default-parser");
var import_autop = require("@wordpress/autop");
var import_registration = require("../registration");
var import_serializer = require("../serializer");
var import_validation = require("../validation");
var import_factory = require("../factory");
var import_convert_legacy_block = require("./convert-legacy-block");
var import_serialize_raw_block = require("./serialize-raw-block");
var import_get_block_attributes = require("./get-block-attributes");
var import_apply_block_deprecated_versions = require("./apply-block-deprecated-versions");
var import_apply_built_in_validation_fixes = require("./apply-built-in-validation-fixes");
function convertLegacyBlocks(rawBlock) {
const [correctName, correctedAttributes] = (0, import_convert_legacy_block.convertLegacyBlockNameAndAttributes)(
rawBlock.blockName,
rawBlock.attrs
);
return {
...rawBlock,
blockName: correctName,
attrs: correctedAttributes
};
}
function normalizeRawBlock(rawBlock, options) {
const fallbackBlockName = (0, import_registration.getFreeformContentHandlerName)();
const rawBlockName = rawBlock.blockName || (0, import_registration.getFreeformContentHandlerName)();
const rawAttributes = rawBlock.attrs || {};
const rawInnerBlocks = rawBlock.innerBlocks || [];
let rawInnerHTML = rawBlock.innerHTML.trim();
if (rawBlockName === fallbackBlockName && rawBlockName === "core/freeform" && !options?.__unstableSkipAutop) {
rawInnerHTML = (0, import_autop.autop)(rawInnerHTML).trim();
}
return {
...rawBlock,
blockName: rawBlockName,
attrs: rawAttributes,
innerHTML: rawInnerHTML,
innerBlocks: rawInnerBlocks
};
}
function createMissingBlockType(rawBlock) {
const unregisteredFallbackBlock = (0, import_registration.getUnregisteredTypeHandlerName)() || (0, import_registration.getFreeformContentHandlerName)();
const originalUndelimitedContent = (0, import_serialize_raw_block.serializeRawBlock)(rawBlock, {
isCommentDelimited: false
});
const originalContent = (0, import_serialize_raw_block.serializeRawBlock)(rawBlock, {
isCommentDelimited: true
});
return {
blockName: unregisteredFallbackBlock,
attrs: {
originalName: rawBlock.blockName,
originalContent,
originalUndelimitedContent
},
innerHTML: rawBlock.blockName ? originalContent : rawBlock.innerHTML,
innerBlocks: rawBlock.innerBlocks,
innerContent: rawBlock.innerContent
};
}
function applyBlockValidation(unvalidatedBlock, blockType) {
const [isValid] = (0, import_validation.validateBlock)(unvalidatedBlock, blockType);
if (isValid) {
return { ...unvalidatedBlock, isValid, validationIssues: [] };
}
const fixedBlock = (0, import_apply_built_in_validation_fixes.applyBuiltInValidationFixes)(
unvalidatedBlock,
blockType
);
const [isFixedValid, validationIssues] = (0, import_validation.validateBlock)(
fixedBlock,
blockType
);
return { ...fixedBlock, isValid: isFixedValid, validationIssues };
}
function parseRawBlock(rawBlock, options) {
let normalizedBlock = normalizeRawBlock(rawBlock, options);
normalizedBlock = convertLegacyBlocks(normalizedBlock);
let blockType = (0, import_registration.getBlockType)(normalizedBlock.blockName);
if (!blockType) {
normalizedBlock = createMissingBlockType(normalizedBlock);
blockType = (0, import_registration.getBlockType)(normalizedBlock.blockName);
}
const isFallbackBlock = normalizedBlock.blockName === (0, import_registration.getFreeformContentHandlerName)() || normalizedBlock.blockName === (0, import_registration.getUnregisteredTypeHandlerName)();
if (!blockType || !normalizedBlock.innerHTML && isFallbackBlock) {
return;
}
const parsedInnerBlocks = normalizedBlock.innerBlocks.map((innerBlock) => parseRawBlock(innerBlock, options)).filter((innerBlock) => !!innerBlock);
const parsedBlock = (0, import_factory.createBlock)(
normalizedBlock.blockName,
(0, import_get_block_attributes.getBlockAttributes)(
blockType,
normalizedBlock.innerHTML,
normalizedBlock.attrs
),
parsedInnerBlocks
);
parsedBlock.originalContent = normalizedBlock.innerHTML;
const validatedBlock = applyBlockValidation(parsedBlock, blockType);
const { validationIssues } = validatedBlock;
const updatedBlock = (0, import_apply_block_deprecated_versions.applyBlockDeprecatedVersions)(
validatedBlock,
normalizedBlock,
blockType
);
if (!updatedBlock.isValid) {
updatedBlock.__unstableBlockSource = rawBlock;
}
if (!validatedBlock.isValid && updatedBlock.isValid && !options?.__unstableSkipMigrationLogs) {
console.groupCollapsed("Updated Block: %s", blockType.name);
console.info(
"Block successfully updated for `%s` (%o).\n\nNew content generated by `save` function:\n\n%s\n\nContent retrieved from post body:\n\n%s",
blockType.name,
blockType,
(0, import_serializer.getSaveContent)(blockType, updatedBlock.attributes),
updatedBlock.originalContent
);
console.groupEnd();
} else if (!validatedBlock.isValid && !updatedBlock.isValid) {
validationIssues.forEach(({ log, args }) => log(...args));
}
return updatedBlock;
}
function parse(content, options) {
return (0, import_block_serialization_default_parser.parse)(content).reduce((accumulator, rawBlock) => {
const block = parseRawBlock(rawBlock, options);
if (block) {
accumulator.push(block);
}
return accumulator;
}, []);
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
normalizeRawBlock,
parseRawBlock
});
//# sourceMappingURL=index.js.map