@@ -12,7 +12,7 @@ import {
12
12
assertThrows ,
13
13
} from "jsr:@std/assert" ;
14
14
import { encodeSigned , encodeUnsigned } from "../vlq.ts" ;
15
- import { decode } from "./decode.ts" ;
15
+ import { decode , DecodeMode } from "./decode.ts" ;
16
16
import type { SourceMapJson } from "../scopes.d.ts" ;
17
17
import { OriginalScopeFlags , Tag } from "../codec.ts" ;
18
18
@@ -142,11 +142,39 @@ describe("decode", () => {
142
142
assertStrictEquals ( info . scopes [ 0 ] . kind , undefined ) ;
143
143
} ) ;
144
144
145
- it ( "throws when encountering an ORIGINAL_SCOPE_END without start" , ( ) => {
145
+ it ( "throws when encountering an ORIGINAL_SCOPE_END without start in strict mode " , ( ) => {
146
146
const encoder = new ItemEncoder ( ) ;
147
147
encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 0 , 0 ) . finishItem ( ) ;
148
148
const map = createMap ( encoder . encode ( ) , [ ] ) ;
149
149
150
- assertThrows ( ( ) => decode ( map ) ) ;
150
+ assertThrows ( ( ) => decode ( map , { mode : DecodeMode . STRICT } ) ) ;
151
+ } ) ;
152
+
153
+ it ( "ignores miss-matched ORIGINAL_SCOPE_END items" , ( ) => {
154
+ const encoder = new ItemEncoder ( ) ;
155
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 0 , 0 ) . finishItem ( ) ;
156
+ const map = createMap ( encoder . encode ( ) , [ ] ) ;
157
+
158
+ const info = decode ( map , { mode : DecodeMode . LOOSE } ) ;
159
+
160
+ assertEquals ( info . scopes , [ ] ) ;
161
+ } ) ;
162
+
163
+ it ( "throws in strict mode when there are 'open' scopes left at the end" , ( ) => {
164
+ const encoder = new ItemEncoder ( ) ;
165
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
166
+ const map = createMap ( encoder . encode ( ) , [ ] ) ;
167
+
168
+ assertThrows ( ( ) => decode ( map , { mode : DecodeMode . STRICT } ) ) ;
169
+ } ) ;
170
+
171
+ it ( "ignores 'open' scopes left at the end in loose mode" , ( ) => {
172
+ const encoder = new ItemEncoder ( ) ;
173
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
174
+ const map = createMap ( encoder . encode ( ) , [ ] ) ;
175
+
176
+ const info = decode ( map , { mode : DecodeMode . LOOSE } ) ;
177
+
178
+ assertEquals ( info . scopes , [ ] ) ;
151
179
} ) ;
152
180
} ) ;
0 commit comments