@wordpress/blocks
Version:
Block API for WordPress.
74 lines (73 loc) • 2.28 kB
JavaScript
// 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