@@ -50,12 +50,14 @@ function buildMustache(
50
50
} ;
51
51
}
52
52
53
+ type PossiblyDeprecatedBlock = ASTv1 . Block | ASTv1 . Template ;
54
+
53
55
function buildBlock (
54
56
path : BuilderHead ,
55
57
params : Nullable < ASTv1 . Expression [ ] > ,
56
58
hash : Nullable < ASTv1 . Hash > ,
57
- _defaultBlock : ASTv1 . PossiblyDeprecatedBlock ,
58
- _elseBlock ?: Nullable < ASTv1 . PossiblyDeprecatedBlock > ,
59
+ _defaultBlock : PossiblyDeprecatedBlock ,
60
+ _elseBlock ?: Nullable < PossiblyDeprecatedBlock > ,
59
61
loc ?: SourceLocation ,
60
62
openStrip ?: ASTv1 . StripFlags ,
61
63
inverseStrip ?: ASTv1 . StripFlags ,
@@ -454,13 +456,14 @@ function buildProgram(
454
456
body ?: ASTv1 . Statement [ ] ,
455
457
blockParams ?: string [ ] ,
456
458
loc ?: SourceLocation
457
- ) : ASTv1 . Template {
458
- return {
459
- type : 'Template' ,
460
- body : body || [ ] ,
461
- blockParams : blockParams || [ ] ,
462
- loc : buildLoc ( loc || null ) ,
463
- } ;
459
+ ) : ASTv1 . Template | ASTv1 . Block {
460
+ deprecate ( `b.program is deprecated. Use b.template or b.blockItself instead.` ) ;
461
+
462
+ if ( blockParams && blockParams . length ) {
463
+ return buildBlockItself ( body , blockParams , false , loc ) ;
464
+ } else {
465
+ return buildTemplate ( body , loc ) ;
466
+ }
464
467
}
465
468
466
469
function buildBlockItself (
@@ -480,15 +483,58 @@ function buildBlockItself(
480
483
} ;
481
484
}
482
485
486
+ type BuildTemplateRestArgs =
487
+ | [ loc ?: SourceLocation | undefined ]
488
+ | [ blockParams ?: string [ ] | never [ ] | undefined , loc ?: SourceLocation | undefined ] ;
489
+
490
+ function buildTemplate ( body ?: ASTv1 . Statement [ ] , loc ?: SourceLocation ) : ASTv1 . Template ;
491
+ function buildTemplate (
492
+ body ?: ASTv1 . Statement [ ] ,
493
+ blockParams ?: never [ ] ,
494
+ loc ?: SourceLocation
495
+ ) : ASTv1 . Template ;
483
496
function buildTemplate (
484
497
body ?: ASTv1 . Statement [ ] ,
485
498
blockParams ?: string [ ] ,
486
499
loc ?: SourceLocation
487
- ) : ASTv1 . Template {
500
+ ) : never ;
501
+ function buildTemplate ( body ?: ASTv1 . Statement [ ] , ...args : BuildTemplateRestArgs ) : ASTv1 . Template {
502
+ let blockParams : string [ ] | undefined ;
503
+ let loc : SourceLocation | undefined ;
504
+
505
+ if ( args . length === 1 ) {
506
+ let [ arg ] = args ;
507
+
508
+ if ( Array . isArray ( arg ) ) {
509
+ blockParams = arg ;
510
+ } else {
511
+ loc = arg ;
512
+ }
513
+ } else if ( args . length > 1 ) {
514
+ // force this to be an empty array to trigger the deprecation message
515
+ blockParams = ( args [ 0 ] || [ ] ) as string [ ] ;
516
+ loc = args [ 1 ] ;
517
+ }
518
+
519
+ if ( blockParams ) {
520
+ if ( blockParams . length === 0 ) {
521
+ deprecate (
522
+ `Template nodes can never have block params, you may omit the second argument to b.template`
523
+ ) ;
524
+ } else {
525
+ throw new Error ( 'Template nodes can never have block params' ) ;
526
+ }
527
+ }
528
+
488
529
return {
489
530
type : 'Template' ,
490
531
body : body || [ ] ,
491
- blockParams : blockParams || [ ] ,
532
+ get blockParams ( ) {
533
+ deprecate (
534
+ `Template nodes can never have block params. This array is always empty and will be removed in the future.`
535
+ ) ;
536
+ return [ ] ;
537
+ } ,
492
538
loc : buildLoc ( loc || null ) ,
493
539
} ;
494
540
}
0 commit comments