Skip to content

Commit 7eef293

Browse files
committed
move ts handling from transform to before analysis
1 parent b58e0c8 commit 7eef293

File tree

6 files changed

+44
-59
lines changed

6 files changed

+44
-59
lines changed

packages/svelte/src/compiler/index.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { parse as _parse } from './phases/1-parse/index.js';
1+
import { getLocator } from 'locate-character';
2+
import { walk } from 'zimmerframe';
3+
import { CompileError } from './errors.js';
4+
import { convert } from './legacy.js';
25
import { parse as parse_acorn } from './phases/1-parse/acorn.js';
6+
import { parse as _parse } from './phases/1-parse/index.js';
7+
import { remove_typescript_nodes } from './phases/1-parse/remove_typescript_nodes.js';
38
import { analyze_component, analyze_module } from './phases/2-analyze/index.js';
49
import { transform_component, transform_module } from './phases/3-transform/index.js';
5-
import { getLocator } from 'locate-character';
6-
import { walk } from 'zimmerframe';
710
import { validate_component_options, validate_module_options } from './validate-options.js';
8-
import { convert } from './legacy.js';
9-
import { CompileError } from './errors.js';
10-
import { strip_ts_assertions } from './phases/1-parse/strip_ts_assertions.js';
1111
export { default as preprocess } from './preprocess/index.js';
1212

1313
/**
@@ -31,9 +31,9 @@ export function compile(source, options) {
3131
if (parsed.metadata.ts) {
3232
parsed = {
3333
...parsed,
34-
fragment: parsed.fragment && strip_ts_assertions(parsed.fragment),
35-
instance: parsed.instance && strip_ts_assertions(parsed.instance),
36-
module: parsed.module && strip_ts_assertions(parsed.module)
34+
fragment: parsed.fragment && remove_typescript_nodes(parsed.fragment),
35+
instance: parsed.instance && remove_typescript_nodes(parsed.instance),
36+
module: parsed.module && remove_typescript_nodes(parsed.module)
3737
};
3838
}
3939

packages/svelte/src/compiler/phases/3-transform/typescript.js renamed to packages/svelte/src/compiler/phases/1-parse/remove_typescript_nodes.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import { walk } from 'zimmerframe';
12
import * as b from '../../utils/builders.js';
23

3-
/** @type {import('zimmerframe').Visitors<any, any>} */
4-
export const remove_types = {
4+
/** @type {import('zimmerframe').Visitors<any, null>} */
5+
const visitors = {
56
ImportDeclaration(node) {
67
if (node.importKind === 'type') return b.empty;
78

@@ -54,3 +55,12 @@ export const remove_types = {
5455
return b.empty;
5556
}
5657
};
58+
59+
/**
60+
* @template T
61+
* @param {T} ast
62+
* @returns {T}
63+
*/
64+
export function remove_typescript_nodes(ast) {
65+
return walk(ast, null, visitors);
66+
}

packages/svelte/src/compiler/phases/1-parse/strip_ts_assertions.js

Lines changed: 0 additions & 24 deletions
This file was deleted.

packages/svelte/src/compiler/phases/3-transform/client/transform-client.js

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { javascript_visitors } from './visitors/javascript.js';
88
import { javascript_visitors_runes } from './visitors/javascript-runes.js';
99
import { javascript_visitors_legacy } from './visitors/javascript-legacy.js';
1010
import { is_state_source, serialize_get_binding } from './utils.js';
11-
import { remove_types } from '../typescript.js';
1211

1312
/**
1413
* This function ensures visitor sets don't accidentally clobber each other
@@ -102,7 +101,6 @@ export function client_component(source, analysis, options) {
102101
state,
103102
combine_visitors(
104103
set_scope(analysis.module.scopes),
105-
remove_types,
106104
global_visitors,
107105
// @ts-expect-error TODO
108106
javascript_visitors,
@@ -118,21 +116,18 @@ export function client_component(source, analysis, options) {
118116
instance_state,
119117
combine_visitors(
120118
set_scope(analysis.instance.scopes),
121-
{ ...remove_types, ImportDeclaration: undefined, ExportNamedDeclaration: undefined },
122119
global_visitors,
123120
// @ts-expect-error TODO
124121
javascript_visitors,
125122
analysis.runes ? javascript_visitors_runes : javascript_visitors_legacy,
126123
{
127-
ImportDeclaration(node, context) {
128-
// @ts-expect-error
129-
state.hoisted.push(remove_types.ImportDeclaration(node, context));
124+
ImportDeclaration(node) {
125+
state.hoisted.push(node);
130126
return b.empty;
131127
},
132128
ExportNamedDeclaration(node, context) {
133129
if (node.declaration) {
134-
// @ts-expect-error
135-
return remove_types.ExportNamedDeclaration(context.visit(node.declaration), context);
130+
return context.visit(node.declaration);
136131
}
137132

138133
return b.empty;
@@ -148,7 +143,6 @@ export function client_component(source, analysis, options) {
148143
{ ...state, scope: analysis.instance.scope },
149144
combine_visitors(
150145
set_scope(analysis.template.scopes),
151-
remove_types,
152146
global_visitors,
153147
// @ts-expect-error TODO
154148
template_visitors

packages/svelte/src/compiler/phases/3-transform/server/transform-server.js

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { create_attribute, is_custom_element_node, is_element_node } from '../..
2424
import { error } from '../../../errors.js';
2525
import { binding_properties } from '../../bindings.js';
2626
import { regex_starts_with_newline, regex_whitespaces_strict } from '../../patterns.js';
27-
import { remove_types } from '../typescript.js';
2827
import { DOMBooleanAttributes } from '../../../../constants.js';
2928
import { sanitize_template_string } from '../../../utils/sanitize_template_string.js';
3029

@@ -1975,34 +1974,36 @@ export function server_component(analysis, options) {
19751974
};
19761975

19771976
const module = /** @type {import('estree').Program} */ (
1978-
walk(/** @type {import('#compiler').SvelteNode} */ (analysis.module.ast), state, {
1979-
...set_scope(analysis.module.scopes),
1980-
...global_visitors,
1981-
...remove_types,
1982-
...javascript_visitors,
1983-
...(analysis.runes ? javascript_visitors_runes : javascript_visitors_legacy)
1984-
})
1977+
walk(
1978+
/** @type {import('#compiler').SvelteNode} */ (analysis.module.ast),
1979+
state,
1980+
// @ts-expect-error TODO: zimmerframe types
1981+
{
1982+
...set_scope(analysis.module.scopes),
1983+
...global_visitors,
1984+
...javascript_visitors,
1985+
...(analysis.runes ? javascript_visitors_runes : javascript_visitors_legacy)
1986+
}
1987+
)
19851988
);
19861989

19871990
const instance = /** @type {import('estree').Program} */ (
19881991
walk(
19891992
/** @type {import('#compiler').SvelteNode} */ (analysis.instance.ast),
19901993
{ ...state, scope: analysis.instance.scope },
1994+
// @ts-expect-error TODO: zimmerframe types
19911995
{
19921996
...set_scope(analysis.instance.scopes),
19931997
...global_visitors,
1994-
...{ ...remove_types, ImportDeclaration: undefined, ExportNamedDeclaration: undefined },
19951998
...javascript_visitors,
19961999
...(analysis.runes ? javascript_visitors_runes : javascript_visitors_legacy),
1997-
ImportDeclaration(node, context) {
1998-
// @ts-expect-error
1999-
state.hoisted.push(remove_types.ImportDeclaration(node, context));
2000+
ImportDeclaration(node) {
2001+
state.hoisted.push(node);
20002002
return b.empty;
20012003
},
20022004
ExportNamedDeclaration(node, context) {
20032005
if (node.declaration) {
2004-
// @ts-expect-error
2005-
return remove_types.ExportNamedDeclaration(context.visit(node.declaration), context);
2006+
return context.visit(node.declaration);
20062007
}
20072008

20082009
return b.empty;
@@ -2015,10 +2016,10 @@ export function server_component(analysis, options) {
20152016
walk(
20162017
/** @type {import('#compiler').SvelteNode} */ (analysis.template.ast),
20172018
{ ...state, scope: analysis.template.scope },
2019+
// @ts-expect-error TODO: zimmerframe types
20182020
{
20192021
...set_scope(analysis.template.scopes),
20202022
...global_visitors,
2021-
...remove_types,
20222023
...template_visitors
20232024
}
20242025
)

packages/svelte/types/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,6 +1090,10 @@ declare module 'svelte/compiler' {
10901090
instance: Script | null;
10911091
/** The parsed `<script context="module">` element, if exists */
10921092
module: Script | null;
1093+
metadata: {
1094+
/** Whether the component was parsed with typescript */
1095+
ts: boolean;
1096+
}
10931097
}
10941098

10951099
interface SvelteOptions {

0 commit comments

Comments
 (0)