diff --git a/src/compiler/compile/render_dom/wrappers/Fragment.js b/src/compiler/compile/render_dom/wrappers/Fragment.js index d8bdd01a4b..048bf87a75 100644 --- a/src/compiler/compile/render_dom/wrappers/Fragment.js +++ b/src/compiler/compile/render_dom/wrappers/Fragment.js @@ -3,7 +3,7 @@ import Body from './Body.js'; import DebugTag from './DebugTag.js'; import Document from './Document.js'; import EachBlock from './EachBlock.js'; -import Element from './Element.js'; +import Element from './Element/index.js'; import Head from './Head.js'; import IfBlock from './IfBlock.js'; import KeyBlock from './KeyBlock.js'; @@ -19,6 +19,7 @@ import Window from './Window.js'; import { trim_start, trim_end } from '../../../utils/trim.js'; import { link } from '../../../utils/link.js'; import { regex_starts_with_whitespace } from '../../../utils/patterns.js'; + const wrappers = { AwaitBlock, Body, @@ -55,6 +56,7 @@ function trimmable_at(child, next_sibling) { next_sibling.node.prev.type === 'EachBlock' ); } + export default class FragmentWrapper { /** @type {import('./shared/Wrapper.js').default[]} */ nodes; diff --git a/src/compiler/compile/render_dom/wrappers/Head.ts b/src/compiler/compile/render_dom/wrappers/Head.ts index 9564db85b9..98c8799db0 100644 --- a/src/compiler/compile/render_dom/wrappers/Head.ts +++ b/src/compiler/compile/render_dom/wrappers/Head.ts @@ -1,48 +1,49 @@ -import Wrapper from './shared/Wrapper'; -import Renderer from '../Renderer'; -import Block from '../Block'; -import Head from '../../nodes/Head'; -import FragmentWrapper from './Fragment'; +import Wrapper from './shared/Wrapper.js'; +import FragmentWrapper from './Fragment.js'; import { x, b } from 'code-red'; -import { Identifier } from 'estree'; +/** @extends Wrapper */ export default class HeadWrapper extends Wrapper { - fragment: FragmentWrapper; - node: Head; - - constructor( - renderer: Renderer, - block: Block, - parent: Wrapper, - node: Head, - strip_whitespace: boolean, - next_sibling: Wrapper - ) { - super(renderer, block, parent, node); - - this.fragment = new FragmentWrapper( - renderer, - block, - node.children, - this, - strip_whitespace, - next_sibling - ); - } - - render(block: Block, _parent_node: Identifier, _parent_nodes: Identifier) { - let nodes: Identifier; - if (this.renderer.options.hydratable && this.fragment.nodes.length) { - nodes = block.get_unique_name('head_nodes'); - block.chunks.claim.push( - b`const ${nodes} = @head_selector('${this.node.id}', @_document.head);` - ); - } - - this.fragment.render(block, x`@_document.head` as unknown as Identifier, nodes); - - if (nodes && this.renderer.options.hydratable) { - block.chunks.claim.push(b`${nodes}.forEach(@detach);`); - } - } + + /** @type {import('./Fragment.js').default} */ + fragment; + + /** @type {import('../../nodes/Head.js').default} */ + node; + + /** + * @param {import('../Renderer.js').default} renderer + * @param {import('../Block.js').default} block + * @param {import('./shared/Wrapper.js').default} parent + * @param {import('../../nodes/Head.js').default} node + * @param {boolean} strip_whitespace + * @param {import('./shared/Wrapper.js').default} next_sibling + */ + constructor(renderer, block, parent, node, strip_whitespace, next_sibling) { + super(renderer, block, parent, node); + this.fragment = new FragmentWrapper(renderer, block, node.children, this, strip_whitespace, next_sibling); + } + + /** + * @param {import('../Block.js').default} block + * @param {import('estree').Identifier} _parent_node + * @param {import('estree').Identifier} _parent_nodes + */ + render(block, _parent_node, _parent_nodes) { + + /** @type {import('estree').Identifier} */ + let nodes; + if (this.renderer.options.hydratable && this.fragment.nodes.length) { + nodes = block.get_unique_name('head_nodes'); + block.chunks.claim.push(b `const ${nodes} = @head_selector('${this.node.id}', @_document.head);`); + } + this.fragment.render(block, /** @type {unknown} */ /** @type {import('estree').Identifier} */ ((x `@_document.head`)), nodes); + if (nodes && this.renderer.options.hydratable) { + block.chunks.claim.push(b `${nodes}.forEach(@detach);`); + } + } } + + + +