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