@@ -13,7 +13,7 @@ import {
1313} from "jsr:@std/assert" ;
1414import { encodeSigned , encodeUnsigned } from "../vlq.ts" ;
1515import { decode , DecodeMode } from "./decode.ts" ;
16- import type { SourceMapJson } from "../scopes.d.ts" ;
16+ import type { IndexSourceMapJson , SourceMapJson } from "../scopes.d.ts" ;
1717import { GeneratedRangeFlags , OriginalScopeFlags , Tag } from "../codec.ts" ;
1818
1919class ItemEncoder {
@@ -492,4 +492,69 @@ describe("decode", () => {
492492 ] ,
493493 ] ) ;
494494 } ) ;
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+ } ) ;
495560} ) ;
0 commit comments