From f29b35617ae1288e67a5fdf96314fdcf1bcec8e7 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 15:01:50 +0200 Subject: [PATCH] Convert src/compiler/compile/render_dom/wrappers/shared/Wrapper.ts to JavaScript --- .../render_dom/wrappers/shared/Wrapper.ts | 138 ++++++++++-------- 1 file changed, 75 insertions(+), 63 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/shared/Wrapper.ts b/src/compiler/compile/render_dom/wrappers/shared/Wrapper.ts index 76db479cc5..1e09bd9e31 100644 --- a/src/compiler/compile/render_dom/wrappers/shared/Wrapper.ts +++ b/src/compiler/compile/render_dom/wrappers/shared/Wrapper.ts @@ -1,76 +1,88 @@ -import Renderer from '../../Renderer'; -import Block from '../../Block'; import { x } from 'code-red'; -import { TemplateNode } from '../../../../interfaces'; -import { Identifier } from 'estree'; - export default class Wrapper { - renderer: Renderer; - parent: Wrapper; - node: TemplateNode; - - prev: Wrapper | null; - next: Wrapper | null; - var: Identifier; + /** @type {import('../../Renderer.js').default} */ + renderer; - constructor(renderer: Renderer, block: Block, parent: Wrapper, node: TemplateNode) { - this.node = node; + /** @type {Wrapper} */ + parent; - // make these non-enumerable so that they can be logged sensibly - // (TODO in dev only?) - Object.defineProperties(this, { - renderer: { - value: renderer - }, - parent: { - value: parent - } - }); + /** @type {import('../../../../interfaces.js').TemplateNode} */ + node; - block.wrappers.push(this); - } + /** @type {Wrapper | null} */ + prev; - get_or_create_anchor(block: Block, parent_node: Identifier, parent_nodes: Identifier) { - // TODO use this in EachBlock and IfBlock — tricky because - // children need to be created first - const needs_anchor = this.next - ? !this.next.is_dom_node() - : !parent_node || !this.parent.is_dom_node(); - const anchor = needs_anchor - ? block.get_unique_name(`${this.var.name}_anchor`) - : (this.next && this.next.var) || { type: 'Identifier', name: 'null' }; + /** @type {Wrapper | null} */ + next; - if (needs_anchor) { - block.add_element( - anchor, - x`@empty()`, - parent_nodes && x`@empty()`, - parent_node as Identifier - ); - } + /** @type {import('estree').Identifier} */ + var; - return anchor; - } + /** + * @param {import('../../Renderer.js').default} renderer + * @param {import('../../Block.js').default} block + * @param {Wrapper} parent + * @param {import('../../../../interfaces.js').TemplateNode} node + */ + constructor(renderer, block, parent, node) { + this.node = node; + // make these non-enumerable so that they can be logged sensibly + // (TODO in dev only?) + Object.defineProperties(this, { + renderer: { + value: renderer + }, + parent: { + value: parent + } + }); + block.wrappers.push(this); + } - get_update_mount_node(anchor: Identifier): Identifier { - return ( - this.parent && this.parent.is_dom_node() ? this.parent.var : x`${anchor}.parentNode` - ) as Identifier; - } + /** + * @param {import('../../Block.js').default} block + * @param {import('estree').Identifier} parent_node + * @param {import('estree').Identifier} parent_nodes + */ + get_or_create_anchor(block, parent_node, parent_nodes) { + // TODO use this in EachBlock and IfBlock — tricky because + // children need to be created first + const needs_anchor = this.next + ? !this.next.is_dom_node() + : !parent_node || !this.parent.is_dom_node(); + const anchor = needs_anchor + ? block.get_unique_name(`${this.var.name}_anchor`) + : (this.next && this.next.var) || { type: 'Identifier', name: 'null' }; + if (needs_anchor) { + block.add_element(anchor, x `@empty()`, parent_nodes && x `@empty()`, + /** @type {import('estree').Identifier} */ (parent_node)); + } + return anchor; + } - is_dom_node() { - return ( - this.node.type === 'Element' || this.node.type === 'Text' || this.node.type === 'MustacheTag' - ); - } + /** + * @param {import('estree').Identifier} anchor + * @returns {import("C:/repos/svelte/svelte/node_modules/.pnpm/@types+estree@1.0.0/node_modules/@types/estree/index").import('estree').Identifier} + */ + get_update_mount_node(anchor) { + return /** @type {import('estree').Identifier} */ ((this.parent && this.parent.is_dom_node() ? this.parent.var : x `${anchor}.parentNode`)); + } + is_dom_node() { + return (this.node.type === 'Element' || this.node.type === 'Text' || this.node.type === 'MustacheTag'); + } - render( - _block: Block, - _parent_node: Identifier, - _parent_nodes: Identifier, - _data: Record = undefined - ) { - throw Error('Wrapper class is not renderable'); - } + /** + * @param {import('../../Block.js').default} _block + * @param {import('estree').Identifier} _parent_node + * @param {import('estree').Identifier} _parent_nodes + * @param {Record} _data + */ + render(_block, _parent_node, _parent_nodes, _data = undefined) { + throw Error('Wrapper class is not renderable'); + } } + + + +