@@ -10,9 +10,6 @@ import {
1010 type Node ,
1111 type Span ,
1212 type TSModuleDeclarationName ,
13- type TSTypeName ,
14- type TSTypeQuery ,
15- type TSTypeReference ,
1613 type VariableDeclaration ,
1714 type VariableDeclarator ,
1815} from 'oxc-parser'
@@ -115,7 +112,7 @@ export function dts(): Plugin {
115112 ) . id
116113 if ( ! binding ) continue
117114 const original = s . sliceNode ( node )
118- const deps = [ ... collectDependencies ( node ) , ... collectTypeDeps ( node ) ]
115+ const deps = collectDependencies ( node )
119116 const depsString = deps
120117 . map ( ( node ) => `() => ${ s . sliceNode ( node ) } ` )
121118 . join ( ', ' )
@@ -196,11 +193,11 @@ export function dts(): Plugin {
196193 const [ decl ] = node . declarations
197194
198195 const raw = s . sliceNode ( node )
199- const deps = collectTypeDeps ( node )
200- const symbolId = register ( raw , decl . id , deps , node )
201- const depsString = collectTypeDeps ( node )
196+ const deps = collectDependencies ( node )
197+ const depsString = deps
202198 . map ( ( node ) => `() => ${ s . sliceNode ( node ) } ` )
203199 . join ( ', ' )
200+ const symbolId = register ( raw , decl . id , deps , node )
204201 const runtime = `[${ symbolId } , ${ depsString } ]`
205202 s . overwriteNode ( node , `var ${ s . sliceNode ( decl . id ) } = ${ runtime } ` )
206203 }
@@ -214,39 +211,24 @@ function collectDependencies(node: Node): (Node & Span)[] {
214211 deps . add ( node . superClass )
215212 } else if (
216213 ( node . type === 'MethodDefinition' ||
217- node . type === 'PropertyDefinition' ) &&
214+ node . type === 'PropertyDefinition' ||
215+ node . type === 'TSPropertySignature' ) &&
218216 ( node . key . type === 'Identifier' ||
219217 node . key . type === 'MemberExpression' ) &&
220218 node . computed
221219 ) {
222220 deps . add ( node . key )
221+ } else if ( node . type === 'TSTypeReference' ) {
222+ deps . add ( node . typeName )
223+ } else if ( node . type === 'TSTypeQuery' ) {
224+ deps . add ( node . exprName )
223225 }
224226 } ,
225227 } )
226228 return Array . from ( deps )
227229}
228230
229- function collectTypeDeps ( node : Node ) : TSTypeName [ ] {
230- if ( ! node ) return [ ]
231- const result : any [ ] = [ ]
232-
233- for ( const value of Object . values ( node ) ) {
234- if ( value ?. type === 'TSTypeReference' ) {
235- result . push ( ( value as TSTypeReference ) . typeName )
236- }
237- if ( value ?. type === 'TSTypeQuery' ) {
238- result . push ( ( value as TSTypeQuery ) . exprName )
239- }
240-
241- if ( typeof value === 'object' ) {
242- result . push ( ...collectTypeDeps ( value ) )
243- }
244- }
245-
246- return result
247- }
248-
249- // patch `let x = 1;` to `declare let x: typeof 1;`
231+ // patch `let x = 1;` to `type x: 1;`
250232function patchVariableDeclarator (
251233 s : MagicStringAST ,
252234 node : VariableDeclaration ,
@@ -255,7 +237,7 @@ function patchVariableDeclarator(
255237 if ( decl . init && ! decl . id . typeAnnotation ) {
256238 s . overwriteNode (
257239 node ,
258- `declare ${ node . kind } ${ s . sliceNode ( decl . id ) } : typeof ${ s . sliceNode ( decl . init ) } ` ,
240+ `type ${ s . sliceNode ( decl . id ) } = ${ s . sliceNode ( decl . init ) } ` ,
259241 )
260242 } else if ( ! node . declare ) {
261243 s . prependLeft ( node . start , 'declare ' )
0 commit comments