@@ -13,7 +13,7 @@ import {
13
13
} from "jsr:@std/assert" ;
14
14
import { encodeSigned , encodeUnsigned } from "../vlq.ts" ;
15
15
import { decode , DecodeMode } from "./decode.ts" ;
16
- import type { SourceMapJson } from "../scopes.d.ts" ;
16
+ import type { IndexSourceMapJson , SourceMapJson } from "../scopes.d.ts" ;
17
17
import { GeneratedRangeFlags , OriginalScopeFlags , Tag } from "../codec.ts" ;
18
18
19
19
class ItemEncoder {
@@ -492,4 +492,69 @@ describe("decode", () => {
492
492
] ,
493
493
] ) ;
494
494
} ) ;
495
+
496
+ it ( "applies 'generatedOffset' option correctly for line 0" , ( ) => {
497
+ const scopes = new ScopeInfoBuilder ( ) . startRange ( 0 , 0 ) . endRange ( 0 , 10 )
498
+ . build ( ) ;
499
+ const map = encode ( scopes ) ;
500
+
501
+ const info = decode ( map , { generatedOffset : { line : 0 , column : 20 } } ) ;
502
+
503
+ assertEquals ( info . ranges [ 0 ] . start , { line : 0 , column : 20 } ) ;
504
+ assertEquals ( info . ranges [ 0 ] . end , { line : 0 , column : 30 } ) ;
505
+ } ) ;
506
+
507
+ it ( "applies 'generatedOffset' option correctly for non-zero line and column" , ( ) => {
508
+ const scopes = new ScopeInfoBuilder ( ) . startRange ( 0 , 10 ) . endRange ( 0 , 20 )
509
+ . build ( ) ;
510
+ const map = encode ( scopes ) ;
511
+
512
+ const info = decode ( map , { generatedOffset : { line : 2 , column : 5 } } ) ;
513
+
514
+ assertEquals ( info . ranges [ 0 ] . start , { line : 2 , column : 15 } ) ;
515
+ assertEquals ( info . ranges [ 0 ] . end , { line : 2 , column : 25 } ) ;
516
+ } ) ;
517
+
518
+ it ( "decodes index source maps" , ( ) => {
519
+ const map1 = encode (
520
+ new ScopeInfoBuilder ( ) . startRange ( 0 , 0 ) . endRange ( 0 , 10 )
521
+ . build ( ) ,
522
+ ) ;
523
+ const map2 = encode (
524
+ new ScopeInfoBuilder ( ) . startRange ( 0 , 0 ) . endRange ( 1 , 20 )
525
+ . build ( ) ,
526
+ ) ;
527
+ const map : IndexSourceMapJson = {
528
+ version : 3 ,
529
+ sections : [
530
+ { offset : { line : 0 , column : 0 } , map : map1 } ,
531
+ { offset : { line : 1 , column : 42 } , map : map2 } ,
532
+ ] ,
533
+ } ;
534
+
535
+ const info = decode ( map ) ;
536
+
537
+ assertEquals ( info . ranges [ 0 ] . start , { line : 0 , column : 0 } ) ;
538
+ assertEquals ( info . ranges [ 0 ] . end , { line : 0 , column : 10 } ) ;
539
+ assertEquals ( info . ranges [ 1 ] . start , { line : 1 , column : 42 } ) ;
540
+ assertEquals ( info . ranges [ 1 ] . end , { line : 2 , column : 20 } ) ;
541
+ } ) ;
542
+
543
+ it ( "ignores 'generatedOffset' option for index source maps" , ( ) => {
544
+ const map1 = encode (
545
+ new ScopeInfoBuilder ( ) . startRange ( 0 , 0 ) . endRange ( 0 , 10 )
546
+ . build ( ) ,
547
+ ) ;
548
+ const map : IndexSourceMapJson = {
549
+ version : 3 ,
550
+ sections : [
551
+ { offset : { line : 0 , column : 0 } , map : map1 } ,
552
+ ] ,
553
+ } ;
554
+
555
+ const info = decode ( map , { generatedOffset : { line : 4 , column : 42 } } ) ;
556
+
557
+ assertEquals ( info . ranges [ 0 ] . start , { line : 0 , column : 0 } ) ;
558
+ assertEquals ( info . ranges [ 0 ] . end , { line : 0 , column : 10 } ) ;
559
+ } ) ;
495
560
} ) ;
0 commit comments