{
  "version": 3,
  "sources": ["../../src/api/serializer.tsx"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport type { ReactNode } from 'react';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tComponent,\n\tcloneElement,\n\trenderToString,\n\tRawHTML,\n} from '@wordpress/element';\nimport { hasFilter, applyFilters } from '@wordpress/hooks';\nimport { isShallowEqual } from '@wordpress/is-shallow-equal';\nimport { removep } from '@wordpress/autop';\nimport deprecated from '@wordpress/deprecated';\n\n/**\n * Internal dependencies\n */\nimport {\n\tgetBlockType,\n\tgetFreeformContentHandlerName,\n\tgetUnregisteredTypeHandlerName,\n} from './registration';\nimport { serializeRawBlock } from './parser/serialize-raw-block';\nimport { isUnmodifiedDefaultBlock, normalizeBlockType } from './utils';\nimport type { Block, BlockType, BlockSerializationOptions } from '../types';\n\n/**\n * Returns the block's default classname from its name.\n *\n * @param blockName The block name.\n *\n * @return The block's default class.\n */\nexport function getBlockDefaultClassName( blockName: string ): string {\n\t// Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.\n\t// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').\n\tconst className =\n\t\t'wp-block-' + blockName.replace( /\\//, '-' ).replace( /^core-/, '' );\n\n\treturn applyFilters(\n\t\t'blocks.getBlockDefaultClassName',\n\t\tclassName,\n\t\tblockName\n\t) as string;\n}\n\n/**\n * Returns the block's default menu item classname from its name.\n *\n * @param blockName The block name.\n *\n * @return The block's default menu item class.\n */\nexport function getBlockMenuDefaultClassName( blockName: string ): string {\n\t// Generated HTML classes for blocks follow the `editor-block-list-item-{name}` nomenclature.\n\t// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').\n\tconst className =\n\t\t'editor-block-list-item-' +\n\t\tblockName.replace( /\\//, '-' ).replace( /^core-/, '' );\n\n\treturn applyFilters(\n\t\t'blocks.getBlockMenuDefaultClassName',\n\t\tclassName,\n\t\tblockName\n\t) as string;\n}\n\nconst blockPropsProvider: {\n\tblockType?: BlockType;\n\tattributes?: Record< string, unknown >;\n} = {};\nconst innerBlocksPropsProvider: { innerBlocks?: Block[] | unknown } = {};\n\n/**\n * Call within a save function to get the props for the block wrapper.\n *\n * @param props Optional. Props to pass to the element.\n */\nexport function getBlockProps(\n\tprops: Record< string, unknown > = {}\n): Record< string, unknown > {\n\tconst { blockType, attributes } = blockPropsProvider;\n\treturn ( getBlockProps as unknown as { skipFilters?: boolean } ).skipFilters\n\t\t? props\n\t\t: ( applyFilters(\n\t\t\t\t'blocks.getSaveContent.extraProps',\n\t\t\t\t{ ...props },\n\t\t\t\tblockType,\n\t\t\t\tattributes\n\t\t  ) as Record< string, unknown > );\n}\n\n/**\n * Call within a save function to get the props for the inner blocks wrapper.\n *\n * @param props Optional. Props to pass to the element.\n */\nexport function getInnerBlocksProps(\n\tprops: Record< string, unknown > = {}\n): Record< string, unknown > {\n\tconst { innerBlocks } = innerBlocksPropsProvider;\n\t// Allow a different component to be passed to getSaveElement to handle\n\t// inner blocks, bypassing the default serialisation.\n\tif ( ! Array.isArray( innerBlocks ) ) {\n\t\treturn { ...props, children: innerBlocks };\n\t}\n\t// Value is an array of blocks, so defer to block serializer.\n\tconst html = serialize( innerBlocks, { isInnerBlocks: true } );\n\t// Use special-cased raw HTML tag to avoid default escaping.\n\tconst children = <RawHTML>{ html }</RawHTML>;\n\n\treturn { ...props, children };\n}\n\n/**\n * Given a block type containing a save render implementation and attributes, returns the\n * enhanced element to be saved or string when raw HTML expected.\n *\n * @param blockTypeOrName Block type or name.\n * @param attributes      Block attributes.\n * @param innerBlocks     Nested blocks.\n *\n * @return Save element or raw HTML string.\n */\nexport function getSaveElement(\n\tblockTypeOrName: string | BlockType,\n\tattributes: Record< string, unknown >,\n\tinnerBlocks: Block[] = []\n): unknown {\n\tconst blockType = normalizeBlockType( blockTypeOrName );\n\n\tif ( ! blockType?.save ) {\n\t\treturn null;\n\t}\n\n\tlet save = blockType.save as unknown as (\n\t\tprops: Record< string, unknown >\n\t) => unknown;\n\n\t// Component classes are unsupported for save since serialization must\n\t// occur synchronously. For improved interoperability with higher-order\n\t// components which often return component class, emulate basic support.\n\tif ( save.prototype instanceof Component ) {\n\t\tconst SaveClass = save as unknown as new (\n\t\t\tprops: unknown\n\t\t) => Component;\n\t\tconst instance = new SaveClass( { attributes } );\n\t\tsave = instance.render.bind( instance );\n\t}\n\n\tblockPropsProvider.blockType = blockType;\n\tblockPropsProvider.attributes = attributes;\n\tinnerBlocksPropsProvider.innerBlocks = innerBlocks;\n\n\tlet element = save( {\n\t\tattributes,\n\t\tinnerBlocks,\n\t} ) as React.ReactElement;\n\n\tif (\n\t\telement !== null &&\n\t\ttypeof element === 'object' &&\n\t\thasFilter( 'blocks.getSaveContent.extraProps' ) &&\n\t\t! ( ( blockType.apiVersion ?? 0 ) > 1 )\n\t) {\n\t\t/**\n\t\t * Filters the props applied to the block save result element.\n\t\t *\n\t\t * @param props      Props applied to save element.\n\t\t * @param blockType  Block type definition.\n\t\t * @param attributes Block attributes.\n\t\t */\n\t\tconst props = applyFilters(\n\t\t\t'blocks.getSaveContent.extraProps',\n\t\t\t{ ...element.props },\n\t\t\tblockType,\n\t\t\tattributes\n\t\t);\n\n\t\tif ( ! isShallowEqual( props, element.props ) ) {\n\t\t\telement = cloneElement(\n\t\t\t\telement,\n\t\t\t\tprops as Record< string, unknown >\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Filters the save result of a block during serialization.\n\t *\n\t * @param element    Block save result.\n\t * @param blockType  Block type definition.\n\t * @param attributes Block attributes.\n\t */\n\treturn applyFilters(\n\t\t'blocks.getSaveElement',\n\t\telement,\n\t\tblockType,\n\t\tattributes\n\t);\n}\n\n/**\n * Given a block type containing a save render implementation and attributes, returns the\n * static markup to be saved.\n *\n * @param blockTypeOrName Block type or name.\n * @param attributes      Block attributes.\n * @param innerBlocks     Nested blocks.\n *\n * @return Save content.\n */\nexport function getSaveContent(\n\tblockTypeOrName: string | BlockType | undefined | null,\n\tattributes: Record< string, unknown >,\n\tinnerBlocks?: Block[]\n): string {\n\tconst blockType = normalizeBlockType(\n\t\tblockTypeOrName as string | BlockType\n\t);\n\n\tif ( ! blockType ) {\n\t\treturn '';\n\t}\n\n\treturn renderToString(\n\t\tgetSaveElement( blockType, attributes, innerBlocks ) as ReactNode\n\t);\n}\n\n/**\n * Returns attributes which are to be saved and serialized into the block\n * comment delimiter.\n *\n * When a block exists in memory it contains as its attributes both those\n * parsed the block comment delimiter _and_ those which matched from the\n * contents of the block.\n *\n * This function returns only those attributes which are needed to persist and\n * which cannot be matched from the block content.\n *\n * @param blockType  Block type.\n * @param attributes Attributes from in-memory block data.\n *\n * @return Subset of attributes for comment serialization.\n */\nexport function getCommentAttributes(\n\tblockType: BlockType,\n\tattributes: Record< string, unknown >\n): Record< string, unknown > {\n\treturn Object.entries( blockType.attributes ?? {} ).reduce(\n\t\t( accumulator, [ key, attributeSchema ] ) => {\n\t\t\tconst value = attributes[ key ];\n\t\t\t// Ignore undefined values.\n\t\t\tif ( undefined === value ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Ignore all attributes but the ones with an \"undefined\" source\n\t\t\t// \"undefined\" source refers to attributes saved in the block comment.\n\t\t\tif ( attributeSchema.source !== undefined ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Ignore all local attributes\n\t\t\tif ( attributeSchema.role === 'local' ) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\tif ( attributeSchema.__experimentalRole === 'local' ) {\n\t\t\t\tdeprecated( '__experimentalRole attribute', {\n\t\t\t\t\tsince: '6.7',\n\t\t\t\t\tversion: '6.8',\n\t\t\t\t\talternative: 'role attribute',\n\t\t\t\t\thint: `Check the block.json of the ${ blockType?.name } block.`,\n\t\t\t\t} );\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Ignore default value.\n\t\t\tif (\n\t\t\t\t'default' in attributeSchema &&\n\t\t\t\tJSON.stringify( attributeSchema.default ) ===\n\t\t\t\t\tJSON.stringify( value )\n\t\t\t) {\n\t\t\t\treturn accumulator;\n\t\t\t}\n\n\t\t\t// Otherwise, include in comment set.\n\t\t\taccumulator[ key ] = value;\n\t\t\treturn accumulator;\n\t\t},\n\t\t{} as Record< string, unknown >\n\t);\n}\n\n/**\n * Given an attributes object, returns a string in the serialized attributes\n * format prepared for post content.\n *\n * @param attributes Attributes object.\n *\n * @return Serialized attributes.\n */\nexport function serializeAttributes(\n\tattributes: Record< string, unknown >\n): string {\n\treturn (\n\t\tJSON.stringify( attributes )\n\t\t\t// Replace escaped `\\` characters with the unicode escape sequence.\n\t\t\t.replaceAll( '\\\\\\\\', '\\\\u005c' )\n\n\t\t\t// Don't break HTML comments.\n\t\t\t.replaceAll( '--', '\\\\u002d\\\\u002d' )\n\n\t\t\t// Don't break non-standard-compliant tools.\n\t\t\t.replaceAll( '<', '\\\\u003c' )\n\t\t\t.replaceAll( '>', '\\\\u003e' )\n\t\t\t.replaceAll( '&', '\\\\u0026' )\n\n\t\t\t// Replace escaped quotes (`\\\"`) to prevent problems with wp_kses_stripsplashes.\n\t\t\t// This simple replacement is safe because `\\\\` has already been replaced.\n\t\t\t// `\\\"` is not a JSON string quote like `\"\\\\\"`.\n\t\t\t.replaceAll( '\\\\\"', '\\\\u0022' )\n\t);\n}\n\n/**\n * Given a block object, returns the Block's Inner HTML markup.\n *\n * @param block Block instance.\n *\n * @return HTML.\n */\nexport function getBlockInnerHTML( block: Block ): string {\n\t// If block was parsed as invalid or encounters an error while generating\n\t// save content, use original content instead to avoid content loss. If a\n\t// block contains nested content, exempt it from this condition because we\n\t// otherwise have no access to its original content and content loss would\n\t// still occur.\n\tlet saveContent: string = block.originalContent ?? '';\n\tif ( block.isValid || block.innerBlocks.length ) {\n\t\ttry {\n\t\t\tsaveContent = getSaveContent(\n\t\t\t\tblock.name,\n\t\t\t\tblock.attributes,\n\t\t\t\tblock.innerBlocks\n\t\t\t);\n\t\t} catch {}\n\t}\n\n\treturn saveContent;\n}\n\n/**\n * Returns the content of a block, including comment delimiters.\n *\n * @param rawBlockName Block name.\n * @param attributes   Block attributes.\n * @param content      Block save content.\n *\n * @return Comment-delimited block content.\n */\nexport function getCommentDelimitedContent(\n\trawBlockName: string | undefined,\n\tattributes: Record< string, unknown > | null,\n\tcontent: string\n): string {\n\tconst serializedAttributes =\n\t\tattributes && Object.entries( attributes ).length\n\t\t\t? serializeAttributes( attributes ) + ' '\n\t\t\t: '';\n\n\t// Strip core blocks of their namespace prefix.\n\tconst blockName = rawBlockName?.startsWith( 'core/' )\n\t\t? rawBlockName.slice( 5 )\n\t\t: rawBlockName;\n\n\t// @todo make the `wp:` prefix potentially configurable.\n\n\tif ( ! content ) {\n\t\treturn `<!-- wp:${ blockName } ${ serializedAttributes }/-->`;\n\t}\n\n\treturn (\n\t\t`<!-- wp:${ blockName } ${ serializedAttributes }-->\\n` +\n\t\tcontent +\n\t\t`\\n<!-- /wp:${ blockName } -->`\n\t);\n}\n\n/**\n * Returns the content of a block, including comment delimiters, determining\n * serialized attributes and content form from the current state of the block.\n *\n * @param block                 Block instance.\n * @param options               Serialization options.\n *\n * @param options.isInnerBlocks\n * @return Serialized block.\n */\nexport function serializeBlock(\n\tblock: Block,\n\t{ isInnerBlocks = false }: BlockSerializationOptions = {}\n): string {\n\tif ( ! block.isValid && block.__unstableBlockSource ) {\n\t\treturn serializeRawBlock( block.__unstableBlockSource );\n\t}\n\n\tconst blockName = block.name;\n\tconst saveContent = getBlockInnerHTML( block );\n\n\tif (\n\t\tblockName === getUnregisteredTypeHandlerName() ||\n\t\t( ! isInnerBlocks && blockName === getFreeformContentHandlerName() )\n\t) {\n\t\treturn saveContent;\n\t}\n\n\tconst blockType = getBlockType( blockName );\n\tif ( ! blockType ) {\n\t\treturn saveContent;\n\t}\n\n\tconst saveAttributes = getCommentAttributes( blockType, block.attributes );\n\treturn getCommentDelimitedContent( blockName, saveAttributes, saveContent );\n}\n\nexport const __unstableSerializeAndClean = ( () => {\n\tconst cache = new WeakMap< Block[], string >();\n\n\treturn ( blocks: Block[] ): string => {\n\t\tconst cached = cache.get( blocks );\n\t\tif ( cached !== undefined ) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tlet effectiveBlocks = blocks;\n\n\t\t// A single unmodified default block is assumed to\n\t\t// be equivalent to an empty post.\n\t\tif (\n\t\t\teffectiveBlocks.length === 1 &&\n\t\t\tisUnmodifiedDefaultBlock( effectiveBlocks[ 0 ] )\n\t\t) {\n\t\t\teffectiveBlocks = [];\n\t\t}\n\n\t\tlet content = serialize( effectiveBlocks );\n\n\t\t// For compatibility, treat a post consisting of a\n\t\t// single freeform block as legacy content and apply\n\t\t// pre-block-editor removep'd content formatting.\n\t\tif (\n\t\t\teffectiveBlocks.length === 1 &&\n\t\t\teffectiveBlocks[ 0 ].name === getFreeformContentHandlerName() &&\n\t\t\teffectiveBlocks[ 0 ].name === 'core/freeform'\n\t\t) {\n\t\t\tcontent = removep( content );\n\t\t}\n\n\t\tcache.set( blocks, content );\n\t\treturn content;\n\t};\n} )();\n\n/**\n * Takes a block or set of blocks and returns the serialized post content.\n *\n * @param blocks  Block(s) to serialize.\n * @param options Serialization options.\n *\n * @return The post content.\n */\nexport default function serialize(\n\tblocks: Block | Block[],\n\toptions?: BlockSerializationOptions\n): string {\n\tconst blocksArray = Array.isArray( blocks ) ? blocks : [ blocks ];\n\treturn blocksArray\n\t\t.map( ( block ) => serializeBlock( block, options ) )\n\t\t.join( '\\n\\n' );\n}\n"],
  "mappings": "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",
  "names": ["deprecated"]
}
