@wordpress/block-library
Version:
Block library for the WordPress editor.
119 lines (117 loc) • 2.89 kB
JavaScript
const isObject = obj => typeof obj === 'object' && !Array.isArray(obj) && obj !== null;
// v2: Migrate to a more condensed version of the 'content' attribute attribute.
const v2 = {
attributes: {
ref: {
type: 'number'
},
content: {
type: 'object'
}
},
supports: {
customClassName: false,
html: false,
inserter: false,
renaming: false
},
// Force this deprecation to run whenever there's a values sub-property that's an object.
//
// This could fail in the future if a block ever has binding to a `values` attribute.
// Some extra protection is added to ensure `values` is an object, but this only reduces
// the likelihood, it doesn't solve it completely.
isEligible({
content
}) {
return !!content && Object.keys(content).every(contentKey => content[contentKey].values && isObject(content[contentKey].values));
},
/*
* Old attribute format:
* content: {
* "V98q_x": {
* // The attribute values are now stored as a 'values' sub-property.
* values: { content: 'My content value' },
* // ... additional metadata, like the block name can be stored here.
* }
* }
*
* New attribute format:
* content: {
* "V98q_x": {
* content: 'My content value',
* }
* }
*/
migrate(attributes) {
const {
content,
...retainedAttributes
} = attributes;
if (content && Object.keys(content).length) {
const updatedContent = {
...content
};
for (const contentKey in content) {
updatedContent[contentKey] = content[contentKey].values;
}
return {
...retainedAttributes,
content: updatedContent
};
}
return attributes;
}
};
// v1: Rename the `overrides` attribute to the `content` attribute.
const v1 = {
attributes: {
ref: {
type: 'number'
},
overrides: {
type: 'object'
}
},
supports: {
customClassName: false,
html: false,
inserter: false,
renaming: false
},
// Force this deprecation to run whenever there's an `overrides` object.
isEligible({
overrides
}) {
return !!overrides;
},
/*
* Old attribute format:
* overrides: {
* // An key is an id that represents a block.
* // The values are the attribute values of the block.
* "V98q_x": { content: 'My content value' }
* }
*
* New attribute format:
* content: {
* "V98q_x": { content: 'My content value' }
* }
*
*/
migrate(attributes) {
const {
overrides,
...retainedAttributes
} = attributes;
const content = {};
Object.keys(overrides).forEach(id => {
content[id] = overrides[id];
});
return {
...retainedAttributes,
content
};
}
};
export default [v2, v1];
//# sourceMappingURL=deprecated.js.map