1
+ /** @import { Expression } from 'estree' */
2
+ /** @import { BaseNode, ConstTag, Root, SvelteNode, TemplateNode, Text } from '#compiler' */
3
+ /** @import * as Legacy from './types/legacy-nodes.js' */
1
4
import { walk } from 'zimmerframe' ;
2
5
import {
3
6
regex_ends_with_whitespaces ,
@@ -8,7 +11,7 @@ import { extract_svelte_ignore } from './utils/extract_svelte_ignore.js';
8
11
9
12
/**
10
13
* Some of the legacy Svelte AST nodes remove whitespace from the start and end of their children.
11
- * @param {import('./types/template.js'). TemplateNode[] } nodes
14
+ * @param {TemplateNode[] } nodes
12
15
*/
13
16
function remove_surrounding_whitespace_nodes ( nodes ) {
14
17
const first = nodes . at ( 0 ) ;
@@ -33,16 +36,13 @@ function remove_surrounding_whitespace_nodes(nodes) {
33
36
/**
34
37
* Transform our nice modern AST into the monstrosity emitted by Svelte 4
35
38
* @param {string } source
36
- * @param {import('#compiler'). Root } ast
37
- * @returns {import('./types/legacy-nodes.js') .LegacyRoot }
39
+ * @param {Root } ast
40
+ * @returns {Legacy .LegacyRoot }
38
41
*/
39
42
export function convert ( source , ast ) {
40
- const root =
41
- /** @type {import('./types/template.js').SvelteNode | import('./types/legacy-nodes.js').LegacySvelteNode } */ (
42
- ast
43
- ) ;
43
+ const root = /** @type {SvelteNode | Legacy.LegacySvelteNode } */ ( ast ) ;
44
44
45
- return /** @type {import('./types/legacy-nodes.js') .LegacyRoot } */ (
45
+ return /** @type {Legacy .LegacyRoot } */ (
46
46
walk ( root , null , {
47
47
_ ( node , { next } ) {
48
48
// @ts -ignore
@@ -74,8 +74,8 @@ export function convert(source, ast) {
74
74
let end = null ;
75
75
76
76
if ( node . fragment . nodes . length > 0 ) {
77
- const first = /** @type {import('#compiler'). BaseNode } */ ( node . fragment . nodes . at ( 0 ) ) ;
78
- const last = /** @type {import('#compiler'). BaseNode } */ ( node . fragment . nodes . at ( - 1 ) ) ;
77
+ const first = /** @type {BaseNode } */ ( node . fragment . nodes . at ( 0 ) ) ;
78
+ const last = /** @type {BaseNode } */ ( node . fragment . nodes . at ( - 1 ) ) ;
79
79
80
80
start = first . start ;
81
81
end = last . end ;
@@ -229,25 +229,20 @@ export function convert(source, ast) {
229
229
end : node . end ,
230
230
name : node . name ,
231
231
attributes : node . attributes . map (
232
- ( child ) =>
233
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
232
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
234
233
) ,
235
234
children : node . fragment . nodes . map (
236
- ( child ) =>
237
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
235
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
238
236
)
239
237
} ;
240
238
} ,
241
239
// @ts -ignore
242
240
ConstTag ( node ) {
243
- if (
244
- /** @type {import('./types/legacy-nodes.js').LegacyConstTag } */ ( node ) . expression !==
245
- undefined
246
- ) {
241
+ if ( /** @type {Legacy.LegacyConstTag } */ ( node ) . expression !== undefined ) {
247
242
return node ;
248
243
}
249
244
250
- const modern_node = /** @type {import('#compiler'). ConstTag } */ ( node ) ;
245
+ const modern_node = /** @type {ConstTag } */ ( node ) ;
251
246
const { id : left } = { ...modern_node . declaration . declarations [ 0 ] } ;
252
247
// @ts -ignore
253
248
delete left . typeAnnotation ;
@@ -274,8 +269,7 @@ export function convert(source, ast) {
274
269
end : node . end ,
275
270
expression : node . expression ,
276
271
children : node . fragment . nodes . map (
277
- ( child ) =>
278
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
272
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
279
273
)
280
274
} ;
281
275
} ,
@@ -354,8 +348,7 @@ export function convert(source, ast) {
354
348
start,
355
349
end : end ,
356
350
children : node . alternate . nodes . map (
357
- ( child ) =>
358
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
351
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
359
352
)
360
353
} ;
361
354
}
@@ -368,8 +361,7 @@ export function convert(source, ast) {
368
361
end : node . end ,
369
362
expression : node . test ,
370
363
children : node . consequent . nodes . map (
371
- ( child ) =>
372
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
364
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
373
365
) ,
374
366
else : elseblock ,
375
367
elseif : node . elseif ? true : undefined
@@ -407,12 +399,10 @@ export function convert(source, ast) {
407
399
end : node . end ,
408
400
name : node . name ,
409
401
attributes : node . attributes . map (
410
- ( child ) =>
411
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
402
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
412
403
) ,
413
404
children : node . fragment . nodes . map (
414
- ( child ) =>
415
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
405
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
416
406
)
417
407
} ;
418
408
} ,
@@ -433,12 +423,10 @@ export function convert(source, ast) {
433
423
start : node . start ,
434
424
end : node . end ,
435
425
attributes : node . attributes . map (
436
- ( child ) =>
437
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
426
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
438
427
) ,
439
428
children : node . fragment . nodes . map (
440
- ( child ) =>
441
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
429
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
442
430
)
443
431
} ;
444
432
} ,
@@ -450,12 +438,10 @@ export function convert(source, ast) {
450
438
end : node . end ,
451
439
expression : node . expression ,
452
440
attributes : node . attributes . map (
453
- ( child ) =>
454
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
441
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
455
442
) ,
456
443
children : node . fragment . nodes . map (
457
- ( child ) =>
458
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
444
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
459
445
)
460
446
} ;
461
447
} ,
@@ -466,17 +452,15 @@ export function convert(source, ast) {
466
452
start : node . start ,
467
453
end : node . end ,
468
454
attributes : node . attributes . map (
469
- ( child ) =>
470
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
455
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
471
456
) ,
472
457
children : node . fragment . nodes . map (
473
- ( child ) =>
474
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
458
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
475
459
)
476
460
} ;
477
461
} ,
478
462
SvelteElement ( node , { visit } ) {
479
- /** @type {import('estree'). Expression | string } */
463
+ /** @type {Expression | string } */
480
464
let tag = node . tag ;
481
465
if (
482
466
tag . type === 'Literal' &&
@@ -503,11 +487,10 @@ export function convert(source, ast) {
503
487
start : node . start ,
504
488
end : node . end ,
505
489
attributes : node . attributes . map (
506
- ( a ) => /** @type {import('./types/legacy-nodes.js') .LegacyAttributeLike } */ ( visit ( a ) )
490
+ ( a ) => /** @type {Legacy .LegacyAttributeLike } */ ( visit ( a ) )
507
491
) ,
508
492
children : node . fragment . nodes . map (
509
- ( child ) =>
510
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
493
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
511
494
)
512
495
} ;
513
496
} ,
@@ -518,12 +501,10 @@ export function convert(source, ast) {
518
501
start : node . start ,
519
502
end : node . end ,
520
503
attributes : node . attributes . map (
521
- ( child ) =>
522
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
504
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
523
505
) ,
524
506
children : node . fragment . nodes . map (
525
- ( child ) =>
526
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
507
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
527
508
)
528
509
} ;
529
510
} ,
@@ -534,8 +515,7 @@ export function convert(source, ast) {
534
515
start : node . start ,
535
516
end : node . end ,
536
517
attributes : node . attributes . map (
537
- ( child ) =>
538
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
518
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
539
519
)
540
520
} ;
541
521
} ,
@@ -546,12 +526,10 @@ export function convert(source, ast) {
546
526
start : node . start ,
547
527
end : node . end ,
548
528
attributes : node . attributes . map (
549
- ( child ) =>
550
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
529
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
551
530
) ,
552
531
children : node . fragment . nodes . map (
553
- ( child ) =>
554
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
532
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
555
533
)
556
534
} ;
557
535
} ,
@@ -562,20 +540,18 @@ export function convert(source, ast) {
562
540
start : node . start ,
563
541
end : node . end ,
564
542
attributes : node . attributes . map (
565
- ( child ) =>
566
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
543
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
567
544
) ,
568
545
children : node . fragment . nodes . map (
569
- ( child ) =>
570
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
546
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
571
547
)
572
548
} ;
573
549
} ,
574
550
Text ( node , { path } ) {
575
551
const parent = path . at ( - 1 ) ;
576
552
if ( parent ?. type === 'RegularElement' && parent . name === 'style' ) {
577
553
// these text nodes are missing `raw` for some dumb reason
578
- return /** @type {import('./types/template.js'). Text } */ ( {
554
+ return /** @type {Text } */ ( {
579
555
type : 'Text' ,
580
556
start : node . start ,
581
557
end : node . end ,
@@ -590,12 +566,10 @@ export function convert(source, ast) {
590
566
start : node . start ,
591
567
end : node . end ,
592
568
attributes : node . attributes . map (
593
- ( child ) =>
594
- /** @type {import('./types/legacy-nodes.js').LegacyAttributeLike } */ ( visit ( child ) )
569
+ ( child ) => /** @type {Legacy.LegacyAttributeLike } */ ( visit ( child ) )
595
570
) ,
596
571
children : node . fragment . nodes . map (
597
- ( child ) =>
598
- /** @type {import('./types/legacy-nodes.js').LegacyElementLike } */ ( visit ( child ) )
572
+ ( child ) => /** @type {Legacy.LegacyElementLike } */ ( visit ( child ) )
599
573
)
600
574
} ;
601
575
} ,
0 commit comments