From 324bd8a7a3edb172258e734ed9b4191b89464d5f Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 21 May 2025 12:57:08 -0400 Subject: [PATCH] use proper discriminated unions (TODO replace args with node-specific properties) --- .../client/transform-template/to-string.js | 6 ++-- .../phases/3-transform/client/types.d.ts | 35 +++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-template/to-string.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-template/to-string.js index 820fef1ef6..7be9126b0c 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-template/to-string.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-template/to-string.js @@ -49,13 +49,13 @@ export function template_to_string(items) { case 'create_element': last_current_element = insert({ kind: 'element', - element: /** @type {string[]} */ (instruction.args)[0] + element: instruction.args[0] }); break; case 'create_text': insert({ kind: 'text', - value: /** @type {string[]} */ (instruction.args)[0] + value: instruction.args[0] }); break; case 'create_anchor': @@ -66,7 +66,7 @@ export function template_to_string(items) { break; case 'set_prop': { const el = /** @type {Element} */ (last_current_element); - const [prop, value] = /** @type {string[]} */ (instruction.args); + const [prop, value] = instruction.args; el.props ??= {}; el.props[prop] = escape_html(value, true); break; diff --git a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts index 87a7a188d3..f474aa6d9f 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts +++ b/packages/svelte/src/compiler/phases/3-transform/client/types.d.ts @@ -36,18 +36,31 @@ export interface ClientTransformState extends TransformState { >; } -type TemplateOperationsKind = - | 'create_element' - | 'create_text' - | 'create_anchor' - | 'set_prop' - | 'push_element' - | 'pop_element'; +type TemplateOperations = Array< + | { + kind: 'create_element'; + args: string[]; + } + | { + kind: 'create_text'; + args: string[]; + } + | { + kind: 'create_anchor'; + args?: string[]; + } + | { + kind: 'set_prop'; + args: string[]; + } + | { + kind: 'push_element'; + } + | { + kind: 'pop_element'; + } +>; -type TemplateOperations = Array<{ - kind: TemplateOperationsKind; - args?: Array; -}>; export interface ComponentClientTransformState extends ClientTransformState { readonly analysis: ComponentAnalysis; readonly options: ValidatedCompileOptions;