1- const JSON_VERSION = 1 ;
1+ const JSON_VERSION = 2 ;
22const DEPTH_LIMIT = 300 ;
33const ANNOTATION_EMIT = 44 ;
44const ANNOTATION_TO_PARENT = 45 ;
55const ANNOTATION_BASENAME_TO_PARENT = 46 ;
6- const CONTROL_GROUP_START = 85 ;
7- const CONTROL_EVALUATE_END = 89 ;
6+ const CONTROL_GROUP_START = 86 ;
7+ const CONTROL_EVALUATE_END = 90 ;
88const URI_REGEX = / ^ [ a - z A - Z ] [ a - z A - Z 0 - 9 + \- . ] * : [ ^ \s ] * $ / ;
99
1010function buildJsonPointer ( tokens , length ) {
@@ -150,7 +150,7 @@ function prepareInstruction(instruction) {
150150function resolveJumpTargets ( instructions , targets ) {
151151 for ( let index = 0 ; index < instructions . length ; index ++ ) {
152152 const instruction = instructions [ index ] ;
153- if ( instruction [ 0 ] === 91 ) {
153+ if ( instruction [ 0 ] === 92 ) {
154154 const targetIndex = instruction [ 5 ] ;
155155 if ( targetIndex < targets . length ) {
156156 instruction [ 5 ] = targets [ targetIndex ] ;
@@ -185,7 +185,7 @@ function collectAnchorNames(targets, result) {
185185function collectAnchorNamesFromInstructions ( instructions , result ) {
186186 for ( let index = 0 ; index < instructions . length ; index ++ ) {
187187 const instruction = instructions [ index ] ;
188- if ( instruction [ 0 ] === 90 && typeof instruction [ 5 ] === 'string' ) {
188+ if ( instruction [ 0 ] === 91 && typeof instruction [ 5 ] === 'string' ) {
189189 result . add ( instruction [ 5 ] ) ;
190190 }
191191 if ( instruction [ 6 ] ) {
@@ -321,14 +321,14 @@ function compileInstructionToCode(instruction, captures, visited, budget) {
321321 case 79 : { var r = R ( 't' ) ; return r ?r + 'if(!Array.isArray(t))return true;for(var j=0;j<t.length;j++){var a=_jt(t[j]);if(a!==' + value + '&&!(' + value + '===2&&_ii(t[j])))return false;}return true;' :null ; }
322322 case 80 : { var r = R ( 't' ) ; return r ?r + 'if(!Array.isArray(t))return true;for(var j=0;j<t.length;j++){if(_es(t[j])!==' + value + ')return false;}return true;' :null ; }
323323 case 81 : { var r = R ( 't' ) ; return r ?r + 'if(!Array.isArray(t))return true;for(var j=0;j<t.length;j++){if((' + value + '&(1<<_es(t[j])))===0)return false;}return true;' :null ; }
324- case 82 : return fb ( 82 ) ; case 83 : return fb ( 83 ) ; case 84 : return fb ( 84 ) ;
325- case 85 : { if ( ! children || children . length === 0 ) return 'return true;' ; var c = '' ; for ( var j = 0 ; j < children . length ; j ++ ) { var r2 = compileInstructionToCode ( children [ j ] , captures , visited , budget ) ; if ( r2 === null ) { var ci = captures . length ; captures . push ( children [ j ] ) ; c += 'if(!_e(_c[' + ci + '],i,d+1,_t,_v))return false;' ; } else { budget [ 0 ] -= r2 . length ; c += 'if(!(function(i,d,_t,_v){' + r2 + '})(i,d+1,_t,_v))return false;' ; } } return c + 'return true;' ; }
326- case 86 : { var r = R ( 't' ) ; if ( ! r ) return null ; var c = r + TO + 'return true;if(!Object.hasOwn(t,' + JSON . stringify ( value ) + '))return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
327- case 87 : { var c = IO + 'if(!Object.hasOwn(i,' + JSON . stringify ( value ) + '))return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
328- case 88 : { var c = 'if(_jt(i)!==' + value + ')return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
329- case 89 : return 'return true;' ;
330- case 90 : return fb ( 90 ) ;
331- case 91 : { if ( ! value ) return 'return true;' ; if ( visited && visited . has ( instruction ) ) return fb ( 91 ) ; if ( ! visited ) visited = new Set ( ) ; visited . add ( instruction ) ; var r = R ( 't' ) ; if ( ! r ) return fb ( 91 ) ; var c = r ; for ( var j = 0 ; j < value . length ; j ++ ) { var r2 = compileInstructionToCode ( value [ j ] , captures , visited , budget ) ; if ( r2 === null ) { var ci = captures . length ; captures . push ( value [ j ] ) ; c += 'if(!_e(_c[' + ci + '],t,d+1,_t,_v))return false;' ; } else { budget [ 0 ] -= r2 . length ; c += 'if(!(function(i,d,_t,_v){' + r2 + '})(t,d+1,_t,_v))return false;' ; } } return c + 'return true;' ; }
324+ case 82 : return fb ( 82 ) ; case 83 : return fb ( 83 ) ; case 84 : return fb ( 84 ) ; case 85 : return fb ( 85 ) ;
325+ case 86 : { if ( ! children || children . length === 0 ) return 'return true;' ; var c = '' ; for ( var j = 0 ; j < children . length ; j ++ ) { var r2 = compileInstructionToCode ( children [ j ] , captures , visited , budget ) ; if ( r2 === null ) { var ci = captures . length ; captures . push ( children [ j ] ) ; c += 'if(!_e(_c[' + ci + '],i,d+1,_t,_v))return false;' ; } else { budget [ 0 ] -= r2 . length ; c += 'if(!(function(i,d,_t,_v){' + r2 + '})(i,d+1,_t,_v))return false;' ; } } return c + 'return true;' ; }
326+ case 87 : { var r = R ( 't' ) ; if ( ! r ) return null ; var c = r + TO + 'return true;if(!Object.hasOwn(t,' + JSON . stringify ( value ) + '))return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
327+ case 88 : { var c = IO + 'if(!Object.hasOwn(i,' + JSON . stringify ( value ) + '))return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
328+ case 89 : { var c = 'if(_jt(i)!==' + value + ')return true;' ; if ( children && children . length > 0 ) c += seq ( children , 'i' ) ; return c + 'return true;' ; }
329+ case 90 : return 'return true;' ;
330+ case 91 : return fb ( 91 ) ;
331+ case 92 : { if ( ! value ) return 'return true;' ; if ( visited && visited . has ( instruction ) ) return fb ( 92 ) ; if ( ! visited ) visited = new Set ( ) ; visited . add ( instruction ) ; var r = R ( 't' ) ; if ( ! r ) return fb ( 92 ) ; var c = r ; for ( var j = 0 ; j < value . length ; j ++ ) { var r2 = compileInstructionToCode ( value [ j ] , captures , visited , budget ) ; if ( r2 === null ) { var ci = captures . length ; captures . push ( value [ j ] ) ; c += 'if(!_e(_c[' + ci + '],t,d+1,_t,_v))return false;' ; } else { budget [ 0 ] -= r2 . length ; c += 'if(!(function(i,d,_t,_v){' + r2 + '})(t,d+1,_t,_v))return false;' ; } } return c + 'return true;' ; }
332332 default : return null ;
333333 }
334334}
@@ -623,7 +623,7 @@ function evaluateInstructionTracked(instruction, instance, depth, template, eval
623623 if ( ! handler ) return true ;
624624
625625 const type = instruction [ 0 ] ;
626- if ( type < 85 || type > 89 ) {
626+ if ( type < 86 || type > 90 ) {
627627 if ( evaluator . trackMode ) {
628628 evaluator . pushPath ( instruction [ 1 ] ) ;
629629 }
@@ -2288,6 +2288,28 @@ function LoopItemsPropertiesExactlyTypeStrictHash(instruction, instance, depth,
22882288 if ( evaluator . callbackMode ) evaluator . callbackPop ( instruction , true ) ;
22892289 return true ;
22902290} ;
2291+
2292+ function LoopItemsIntegerBounded ( instruction , instance , depth , template , evaluator ) {
2293+ const target = resolveInstance ( instance , instruction [ 2 ] ) ;
2294+ if ( ! Array . isArray ( target ) || target . length === 0 ) return true ;
2295+ if ( evaluator . callbackMode ) evaluator . callbackPush ( instruction ) ;
2296+ const minimum = instruction [ 5 ] [ 0 ] ;
2297+ const maximum = instruction [ 5 ] [ 1 ] ;
2298+ for ( let index = 0 ; index < target . length ; index ++ ) {
2299+ const element = target [ index ] ;
2300+ if ( typeof element !== 'number' ) {
2301+ if ( evaluator . callbackMode ) evaluator . callbackPop ( instruction , false ) ;
2302+ return false ;
2303+ }
2304+ if ( element < minimum || element > maximum ) {
2305+ if ( evaluator . callbackMode ) evaluator . callbackPop ( instruction , false ) ;
2306+ return false ;
2307+ }
2308+ }
2309+ if ( evaluator . callbackMode ) evaluator . callbackPop ( instruction , true ) ;
2310+ return true ;
2311+ } ;
2312+
22912313function LoopContains ( instruction , instance , depth , template , evaluator ) {
22922314 const target = resolveInstance ( instance , instruction [ 2 ] ) ;
22932315 if ( ! Array . isArray ( target ) ) return true ;
@@ -2516,14 +2538,15 @@ const handlers = [
25162538 LoopItemsTypeStrictAny , // 81
25172539 LoopItemsPropertiesExactlyTypeStrictHash , // 82
25182540 LoopItemsPropertiesExactlyTypeStrictHash , // 83
2519- LoopContains , // 84
2520- ControlGroup , // 85
2521- ControlGroupWhenDefines , // 86
2522- ControlGroupWhenDefinesDirect , // 87
2523- ControlGroupWhenType , // 88
2524- ControlEvaluate , // 89
2525- ControlDynamicAnchorJump , // 90
2526- ControlJump // 91
2541+ LoopItemsIntegerBounded , // 84
2542+ LoopContains , // 85
2543+ ControlGroup , // 86
2544+ ControlGroupWhenDefines , // 87
2545+ ControlGroupWhenDefinesDirect , // 88
2546+ ControlGroupWhenType , // 89
2547+ ControlEvaluate , // 90
2548+ ControlDynamicAnchorJump , // 91
2549+ ControlJump // 92
25272550] ;
25282551
25292552function AssertionTypeArrayBounded_fast ( instruction , instance , depth , template , evaluator ) {
@@ -3622,6 +3645,18 @@ function ControlDynamicAnchorJump_fast(instruction, instance, depth, template, e
36223645 return false ;
36233646}
36243647
3648+ function LoopItemsIntegerBounded_fast ( instruction , instance , depth , template , evaluator ) {
3649+ const target = resolveInstance ( instance , instruction [ 2 ] ) ;
3650+ if ( ! Array . isArray ( target ) || target . length === 0 ) return true ;
3651+ const minimum = instruction [ 5 ] [ 0 ] ;
3652+ const maximum = instruction [ 5 ] [ 1 ] ;
3653+ for ( let index = 0 ; index < target . length ; index ++ ) {
3654+ const element = target [ index ] ;
3655+ if ( typeof element !== 'number' || element < minimum || element > maximum ) return false ;
3656+ }
3657+ return true ;
3658+ }
3659+
36253660const fastHandlers = handlers . slice ( ) ;
36263661fastHandlers [ 15 ] = AssertionTypeArrayBounded_fast ;
36273662fastHandlers [ 81 ] = LoopItemsTypeStrictAny_fast ;
@@ -3631,7 +3666,7 @@ fastHandlers[4] = AssertionDefinesAllStrict_fast;
36313666fastHandlers [ 26 ] = AssertionEqual_fast ;
36323667fastHandlers [ 59 ] = LoopPropertiesMatch_fast ;
36333668fastHandlers [ 50 ] = LogicalOr_fast ;
3634- fastHandlers [ 91 ] = ControlJump_fast ;
3669+ fastHandlers [ 92 ] = ControlJump_fast ;
36353670fastHandlers [ 28 ] = AssertionEqualsAnyStringHash_fast ;
36363671fastHandlers [ 52 ] = LogicalXor_fast ;
36373672fastHandlers [ 2 ] = AssertionDefinesStrict_fast ;
@@ -3649,7 +3684,7 @@ fastHandlers[1] = AssertionDefines_fast;
36493684fastHandlers [ 54 ] = LogicalWhenType_fast ;
36503685fastHandlers [ 55 ] = LogicalWhenDefines_fast ;
36513686fastHandlers [ 0 ] = AssertionFail_fast ;
3652- fastHandlers [ 84 ] = LoopContains_fast ;
3687+ fastHandlers [ 85 ] = LoopContains_fast ;
36533688fastHandlers [ 48 ] = LogicalNot_fast ;
36543689fastHandlers [ 79 ] = LoopItemsType_fast ;
36553690fastHandlers [ 80 ] = LoopItemsTypeStrict_fast ;
@@ -3709,6 +3744,7 @@ fastHandlers[77] = LoopItemsFrom_fast;
37093744fastHandlers [ 78 ] = LoopItemsUnevaluated_fast ;
37103745fastHandlers [ 82 ] = LoopItemsPropertiesExactlyTypeStrictHash_fast ;
37113746fastHandlers [ 83 ] = LoopItemsPropertiesExactlyTypeStrictHash_fast ;
3712- fastHandlers [ 90 ] = ControlDynamicAnchorJump_fast ;
3747+ fastHandlers [ 84 ] = LoopItemsIntegerBounded_fast ;
3748+ fastHandlers [ 91 ] = ControlDynamicAnchorJump_fast ;
37133749
37143750export { Blaze } ;
0 commit comments