From f3e323fb1b862e9906b56a03450c2d02970f9597 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 15:01:30 +0200 Subject: [PATCH] Convert src/compiler/compile/render_dom/wrappers/shared/Tag.ts to JavaScript --- .../compile/render_dom/wrappers/shared/Tag.ts | 86 +++++++++---------- .../shared/mark_each_block_bindings.js | 2 +- 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/src/compiler/compile/render_dom/wrappers/shared/Tag.ts b/src/compiler/compile/render_dom/wrappers/shared/Tag.ts index e354e4cfbe..7c9d954c42 100644 --- a/src/compiler/compile/render_dom/wrappers/shared/Tag.ts +++ b/src/compiler/compile/render_dom/wrappers/shared/Tag.ts @@ -1,52 +1,50 @@ import { b, x } from 'code-red'; -import Wrapper from './Wrapper'; -import Renderer from '../../Renderer'; -import Block from '../../Block'; -import MustacheTag from '../../../nodes/MustacheTag'; -import RawMustacheTag from '../../../nodes/RawMustacheTag'; -import { Node } from 'estree'; +import Wrapper from './Wrapper.js'; +/** @extends Wrapper */ export default class Tag extends Wrapper { - node: MustacheTag | RawMustacheTag; - constructor( - renderer: Renderer, - block: Block, - parent: Wrapper, - node: MustacheTag | RawMustacheTag - ) { - super(renderer, block, parent, node); - - block.add_dependencies(node.expression.dependencies); - } - - rename_this_method(block: Block, update: (value: Node) => Node | Node[]) { - const dependencies = this.node.expression.dynamic_dependencies(); - let snippet = this.node.expression.manipulate(block); - - const value = this.node.should_cache && block.get_unique_name(`${this.var.name}_value`); - const content = this.node.should_cache ? value : snippet; - - snippet = x`${snippet} + ""`; - - if (this.node.should_cache) block.add_variable(value, snippet); // TODO may need to coerce snippet to string - - if (dependencies.length > 0) { - let condition = block.renderer.dirty(dependencies); - - if (block.has_outros) { - condition = x`!#current || ${condition}`; - } + /** @type {import('../../../nodes/MustacheTag.js').default | import('../../../nodes/RawMustacheTag.js').default} */ + node; + + /** + * @param {import('../../Renderer.js').default} renderer + * @param {import('../../Block.js').default} block + * @param {import('./Wrapper.js').default} parent + * @param {import('../../../nodes/MustacheTag.js').default | import('../../../nodes/RawMustacheTag.js').default} node + */ + constructor(renderer, block, parent, node) { + super(renderer, block, parent, node); + block.add_dependencies(node.expression.dependencies); + } + + /** + * @param {import('../../Block.js').default} block + * @param {(value: import('estree').Node) => import('estree').Node | import('estree').Node[]} update + */ + rename_this_method(block, update) { + const dependencies = this.node.expression.dynamic_dependencies(); + let snippet = this.node.expression.manipulate(block); + const value = this.node.should_cache && block.get_unique_name(`${this.var.name}_value`); + const content = this.node.should_cache ? value : snippet; + snippet = x `${snippet} + ""`; + if (this.node.should_cache) + block.add_variable(value, snippet); // TODO may need to coerce snippet to string + if (dependencies.length > 0) { + let condition = block.renderer.dirty(dependencies); + if (block.has_outros) { + condition = x `!#current || ${condition}`; + } + const update_cached_value = x `${value} !== (${value} = ${snippet})`; + if (this.node.should_cache) { + condition = x `${condition} && ${update_cached_value}`; + } + block.chunks.update.push(b `if (${condition}) ${update(/** @type {import('estree').Node} */ (content))}`); + } + return { init: content }; + } +} - const update_cached_value = x`${value} !== (${value} = ${snippet})`; - if (this.node.should_cache) { - condition = x`${condition} && ${update_cached_value}`; - } - block.chunks.update.push(b`if (${condition}) ${update(content as Node)}`); - } - return { init: content }; - } -} diff --git a/src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.js b/src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.js index a3e00d1327..fc502305b6 100644 --- a/src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.js +++ b/src/compiler/compile/render_dom/wrappers/shared/mark_each_block_bindings.js @@ -1,5 +1,5 @@ /** - * @param {import('../Element.js').default | import('../InlineComponent.js').default} parent + * @param {import('../Element/index.js').default | import('../InlineComponent/index.js').default} parent * @param {import('../../../nodes/Binding.js').default} binding */ export default function mark_each_block_bindings(parent, binding) {