UNPKG

@wordpress/blocks

Version:
74 lines (73 loc) 2.28 kB
// packages/blocks/src/api/parser/apply-block-deprecated-versions.js import { DEPRECATED_ENTRY_KEYS } from "../constants"; import { validateBlock } from "../validation"; import { getBlockAttributes } from "./get-block-attributes"; import { applyBuiltInValidationFixes } from "./apply-built-in-validation-fixes"; import { omit } from "../utils"; function stubFalse() { return false; } function applyBlockDeprecatedVersions(block, rawBlock, blockType) { const parsedAttributes = rawBlock.attrs; const { deprecated: deprecatedDefinitions } = blockType; if (!deprecatedDefinitions || !deprecatedDefinitions.length) { return block; } for (let i = 0; i < deprecatedDefinitions.length; i++) { const { isEligible = stubFalse } = deprecatedDefinitions[i]; if (block.isValid && !isEligible(parsedAttributes, block.innerBlocks, { blockNode: rawBlock, block })) { continue; } const deprecatedBlockType = Object.assign( omit(blockType, DEPRECATED_ENTRY_KEYS), deprecatedDefinitions[i] ); let migratedBlock = { ...block, attributes: getBlockAttributes( deprecatedBlockType, block.originalContent, parsedAttributes ) }; let [isValid] = validateBlock(migratedBlock, deprecatedBlockType); if (!isValid) { migratedBlock = applyBuiltInValidationFixes( migratedBlock, deprecatedBlockType ); [isValid] = validateBlock(migratedBlock, deprecatedBlockType); } if (!isValid) { continue; } let migratedInnerBlocks = migratedBlock.innerBlocks; let migratedAttributes = migratedBlock.attributes; const { migrate } = deprecatedBlockType; if (migrate) { let migrated = migrate(migratedAttributes, block.innerBlocks); if (!Array.isArray(migrated)) { migrated = [migrated]; } [ migratedAttributes = parsedAttributes, migratedInnerBlocks = block.innerBlocks ] = migrated; } block = { ...block, attributes: migratedAttributes, innerBlocks: migratedInnerBlocks, isValid: true, validationIssues: [] }; } return block; } export { applyBlockDeprecatedVersions }; //# sourceMappingURL=apply-block-deprecated-versions.js.map