Convert src/compiler/compile/render_dom/wrappers/Head.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent 02925da2e4
commit 9c5a97b69c

@ -3,7 +3,7 @@ import Body from './Body.js';
import DebugTag from './DebugTag.js'; import DebugTag from './DebugTag.js';
import Document from './Document.js'; import Document from './Document.js';
import EachBlock from './EachBlock.js'; import EachBlock from './EachBlock.js';
import Element from './Element.js'; import Element from './Element/index.js';
import Head from './Head.js'; import Head from './Head.js';
import IfBlock from './IfBlock.js'; import IfBlock from './IfBlock.js';
import KeyBlock from './KeyBlock.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 { trim_start, trim_end } from '../../../utils/trim.js';
import { link } from '../../../utils/link.js'; import { link } from '../../../utils/link.js';
import { regex_starts_with_whitespace } from '../../../utils/patterns.js'; import { regex_starts_with_whitespace } from '../../../utils/patterns.js';
const wrappers = { const wrappers = {
AwaitBlock, AwaitBlock,
Body, Body,
@ -55,6 +56,7 @@ function trimmable_at(child, next_sibling) {
next_sibling.node.prev.type === 'EachBlock' next_sibling.node.prev.type === 'EachBlock'
); );
} }
export default class FragmentWrapper { export default class FragmentWrapper {
/** @type {import('./shared/Wrapper.js').default[]} */ /** @type {import('./shared/Wrapper.js').default[]} */
nodes; nodes;

@ -1,48 +1,49 @@
import Wrapper from './shared/Wrapper'; import Wrapper from './shared/Wrapper.js';
import Renderer from '../Renderer'; import FragmentWrapper from './Fragment.js';
import Block from '../Block';
import Head from '../../nodes/Head';
import FragmentWrapper from './Fragment';
import { x, b } from 'code-red'; import { x, b } from 'code-red';
import { Identifier } from 'estree';
/** @extends Wrapper */
export default class HeadWrapper extends Wrapper { export default class HeadWrapper extends Wrapper {
fragment: FragmentWrapper;
node: Head; /** @type {import('./Fragment.js').default} */
fragment;
constructor(
renderer: Renderer, /** @type {import('../../nodes/Head.js').default} */
block: Block, node;
parent: Wrapper,
node: Head, /**
strip_whitespace: boolean, * @param {import('../Renderer.js').default} renderer
next_sibling: Wrapper * @param {import('../Block.js').default} block
) { * @param {import('./shared/Wrapper.js').default} parent
super(renderer, block, parent, node); * @param {import('../../nodes/Head.js').default} node
* @param {boolean} strip_whitespace
this.fragment = new FragmentWrapper( * @param {import('./shared/Wrapper.js').default} next_sibling
renderer, */
block, constructor(renderer, block, parent, node, strip_whitespace, next_sibling) {
node.children, super(renderer, block, parent, node);
this, this.fragment = new FragmentWrapper(renderer, block, node.children, this, strip_whitespace, next_sibling);
strip_whitespace, }
next_sibling
); /**
} * @param {import('../Block.js').default} block
* @param {import('estree').Identifier} _parent_node
render(block: Block, _parent_node: Identifier, _parent_nodes: Identifier) { * @param {import('estree').Identifier} _parent_nodes
let nodes: Identifier; */
if (this.renderer.options.hydratable && this.fragment.nodes.length) { render(block, _parent_node, _parent_nodes) {
nodes = block.get_unique_name('head_nodes');
block.chunks.claim.push( /** @type {import('estree').Identifier} */
b`const ${nodes} = @head_selector('${this.node.id}', @_document.head);` 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, x`@_document.head` as unknown as Identifier, nodes); }
this.fragment.render(block, /** @type {unknown} */ /** @type {import('estree').Identifier} */ ((x `@_document.head`)), nodes);
if (nodes && this.renderer.options.hydratable) { if (nodes && this.renderer.options.hydratable) {
block.chunks.claim.push(b`${nodes}.forEach(@detach);`); block.chunks.claim.push(b `${nodes}.forEach(@detach);`);
} }
} }
} }

Loading…
Cancel
Save