# extendify/3.2.0/src/Agent/lib/heal-blocks.js

Extendify, version 3.2.0. 20 lines.

- Page: https://pluginprobe.com/plugins/extendify/3.2.0/code/src/Agent/lib/heal-blocks.js
- Raw: https://pluginprobe.com/plugins/extendify/3.2.0/raw/src/Agent/lib/heal-blocks.js
- Modified: 2026-08-12T16:23:58+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/extendify/3.2.0/code/src/Agent/lib/heal-blocks.js#L10-L20`.

```javascript
import { createBlock, getBlockType, parse, serialize } from '@wordpress/blocks';

const isDeepValid = (block) =>
	block.isValid !== false && block.innerBlocks.every(isDeepValid);

// Unregistered types keep their raw source; only registered ones can rebuild.
const recoverBlock = (block) => {
	const innerBlocks = block.innerBlocks.map(recoverBlock);
	if (block.isValid !== false || !getBlockType(block.name))
		return { ...block, innerBlocks };
	return createBlock(block.name, block.attributes, innerBlocks);
};

// The editor's "Attempt recovery" rebuild — model HTML drifting from save() breaks the block otherwise.
export const healBlockMarkup = (markup) => {
	const blocks = parse(markup);
	if (blocks.every(isDeepValid)) return markup;
	return serialize(blocks.map(recoverBlock));
};

```
