@sourcemeta/blaze 15.3.0 → 15.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. package/describe.mjs +75 -2
  2. package/index.mjs +250 -231
  3. package/opcodes.mjs +88 -86
  4. package/package.json +1 -1
package/describe.mjs CHANGED
@@ -4,7 +4,8 @@ import {
4
4
  ASSERTION_DEFINES_EXACTLY, ASSERTION_DEFINES_EXACTLY_STRICT,
5
5
  ASSERTION_DEFINES_EXACTLY_STRICT_HASH3, ASSERTION_PROPERTY_DEPENDENCIES,
6
6
  ASSERTION_TYPE, ASSERTION_TYPE_ANY, ASSERTION_TYPE_STRICT,
7
- ASSERTION_TYPE_STRICT_ANY, ASSERTION_TYPE_STRING_BOUNDED,
7
+ ASSERTION_TYPE_STRICT_ANY, ASSERTION_NOT_TYPE_STRICT_ANY,
8
+ ASSERTION_TYPE_STRING_BOUNDED,
8
9
  ASSERTION_TYPE_STRING_UPPER, ASSERTION_TYPE_ARRAY_BOUNDED,
9
10
  ASSERTION_TYPE_ARRAY_UPPER, ASSERTION_TYPE_OBJECT_BOUNDED,
10
11
  ASSERTION_TYPE_OBJECT_UPPER, ASSERTION_REGEX,
@@ -49,6 +50,7 @@ import {
49
50
  const TYPE_INTEGER = 2;
50
51
  const TYPE_REAL = 3;
51
52
  const TYPE_OBJECT = 6;
53
+ const TYPE_DECIMAL = 7;
52
54
 
53
55
  const TYPE_NAMES = [ 'null', 'boolean', 'integer', 'number',
54
56
  'string', 'array', 'object', 'number' ];
@@ -214,6 +216,22 @@ function describeTypeCheck(valid, currentType, expectedType) {
214
216
  return message;
215
217
  }
216
218
 
219
+ function describeNotTypeCheck(valid, currentType, expectedType) {
220
+ let message = 'The value was expected to NOT be of type ' + typeName(expectedType);
221
+ if (!valid) {
222
+ message += ' but it was of type ';
223
+ if (currentType === TYPE_DECIMAL && expectedType === TYPE_INTEGER) {
224
+ message += 'integer';
225
+ } else if ((currentType === TYPE_INTEGER && expectedType === TYPE_REAL) ||
226
+ currentType === TYPE_DECIMAL) {
227
+ message += 'number';
228
+ } else {
229
+ message += typeName(currentType);
230
+ }
231
+ }
232
+ return message;
233
+ }
234
+
217
235
  function describeTypesCheck(valid, currentType, bitmask) {
218
236
  let types = normalizeTypes(bitmask);
219
237
  const hasReal = (bitmask & (1 << TYPE_REAL)) !== 0;
@@ -265,6 +283,57 @@ function describeTypesCheck(valid, currentType, bitmask) {
265
283
  return message;
266
284
  }
267
285
 
286
+ function describeNotTypesCheck(valid, currentType, bitmask) {
287
+ let types = normalizeTypes(bitmask);
288
+ const hasReal = (bitmask & (1 << TYPE_REAL)) !== 0;
289
+ const hasInteger = (bitmask & (1 << TYPE_INTEGER)) !== 0;
290
+
291
+ let popcount = 0;
292
+ for (let bit = 0; bit < 8; bit++) {
293
+ if ((types & (1 << bit)) !== 0) popcount++;
294
+ }
295
+
296
+ if (popcount === 1) {
297
+ let typeIndex = 0;
298
+ for (let bit = 0; bit < 8; bit++) {
299
+ if ((types & (1 << bit)) !== 0) { typeIndex = bit; break; }
300
+ }
301
+ return describeNotTypeCheck(valid, currentType, typeIndex);
302
+ }
303
+
304
+ let message = 'The value was expected to NOT be of type ';
305
+ let first = true;
306
+ let lastBit = 0;
307
+ for (let bit = 0; bit < 8; bit++) {
308
+ if ((types & (1 << bit)) !== 0) lastBit = bit;
309
+ }
310
+ for (let bit = 0; bit < 8; bit++) {
311
+ if ((types & (1 << bit)) !== 0) {
312
+ if (!first) message += ', ';
313
+ if (bit === lastBit) message += 'or ';
314
+ message += typeName(bit);
315
+ first = false;
316
+ }
317
+ }
318
+
319
+ if (valid) {
320
+ message += ' and it was of type ';
321
+ } else {
322
+ message += ' but it was of type ';
323
+ }
324
+
325
+ if (!valid && currentType === TYPE_INTEGER && hasReal) {
326
+ message += 'number';
327
+ } else if ((!valid && currentType === TYPE_INTEGER && hasReal) ||
328
+ currentType === TYPE_REAL) {
329
+ message += 'number';
330
+ } else {
331
+ message += typeName(currentType);
332
+ }
333
+
334
+ return message;
335
+ }
336
+
268
337
  function describeReference(target) {
269
338
  return 'The ' + typeName(jsonTypeOf(target)) +
270
339
  ' value was expected to validate against the referenced schema';
@@ -357,7 +426,7 @@ export function describe(valid, instruction, evaluatePath,
357
426
  }
358
427
 
359
428
  if (opcode === LOGICAL_AND) {
360
- if (keyword === 'allOf') {
429
+ if (keyword === 'allOf' || keyword === 'extends') {
361
430
  const childCount = children ? children.length : 0;
362
431
  let message = 'The ' + typeName(targetType) +
363
432
  ' value was expected to validate against the ';
@@ -916,6 +985,10 @@ export function describe(valid, instruction, evaluatePath,
916
985
  return describeTypesCheck(valid, targetType, value);
917
986
  }
918
987
 
988
+ if (opcode === ASSERTION_NOT_TYPE_STRICT_ANY) {
989
+ return describeNotTypesCheck(valid, targetType, value);
990
+ }
991
+
919
992
  if (opcode === ASSERTION_TYPE_STRING_BOUNDED) {
920
993
  const minimum = value[0];
921
994
  const maximum = value[1];
package/index.mjs CHANGED
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  ANNOTATION_EMIT, ANNOTATION_TO_PARENT, ANNOTATION_BASENAME_TO_PARENT,
3
+ ASSERTION_EQUALS_ANY,
3
4
  CONTROL_GROUP as CONTROL_GROUP_START,
4
- CONTROL_EVALUATE as CONTROL_EVALUATE_END
5
+ CONTROL_EVALUATE as CONTROL_EVALUATE_END,
6
+ CONTROL_JUMP, CONTROL_DYNAMIC_ANCHOR_JUMP
5
7
  } from './opcodes.mjs';
6
8
 
7
- const JSON_VERSION = 4;
9
+ const JSON_VERSION = 5;
8
10
  const DEPTH_LIMIT = 300;
9
11
  const URI_REGEX = /^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/;
10
12
 
@@ -121,7 +123,7 @@ function prepareInstruction(instruction) {
121
123
  }
122
124
 
123
125
  const opcode = instruction[0];
124
- if (opcode === 27 && Array.isArray(instruction[5])) {
126
+ if (opcode === ASSERTION_EQUALS_ANY && Array.isArray(instruction[5])) {
125
127
  const values = instruction[5];
126
128
  let allPrimitive = true;
127
129
  for (let index = 0; index < values.length; index++) {
@@ -153,7 +155,7 @@ function prepareInstruction(instruction) {
153
155
  function resolveJumpTargets(instructions, targets) {
154
156
  for (let index = 0; index < instructions.length; index++) {
155
157
  const instruction = instructions[index];
156
- if (instruction[0] === 98) {
158
+ if (instruction[0] === CONTROL_JUMP) {
157
159
  const targetIndex = instruction[5];
158
160
  if (targetIndex < targets.length) {
159
161
  instruction[5] = targets[targetIndex];
@@ -188,7 +190,7 @@ function collectAnchorNames(targets, result) {
188
190
  function collectAnchorNamesFromInstructions(instructions, result) {
189
191
  for (let index = 0; index < instructions.length; index++) {
190
192
  const instruction = instructions[index];
191
- if (instruction[0] === 97 && typeof instruction[5] === 'string') {
193
+ if (instruction[0] === CONTROL_DYNAMIC_ANCHOR_JUMP && typeof instruction[5] === 'string') {
192
194
  result.add(instruction[5]);
193
195
  }
194
196
  if (instruction[6]) {
@@ -253,7 +255,7 @@ function compileInstructionToCode(instruction, captures, visited, budget) {
253
255
  if (cr.length !== 0) return null;
254
256
  switch (op) {
255
257
  case 11: return '{if(_es(' + tv + ')!==' + cv + ')return false;}';
256
- case 42: return 'if(' + tv + '!=null&&typeof ' + tv + "==='object'&&!Array.isArray(" + tv + ')){' + emitResolve('t', tv, cr) + 'if(t!==void 0&&_es(t)!==' + cv + ')return false;}';
258
+ case 43: return 'if(' + tv + '!=null&&typeof ' + tv + "==='object'&&!Array.isArray(" + tv + ')){' + emitResolve('t', tv, cr) + 'if(t!==void 0&&_es(t)!==' + cv + ')return false;}';
257
259
  default: return null;
258
260
  }
259
261
  }
@@ -276,65 +278,66 @@ function compileInstructionToCode(instruction, captures, visited, budget) {
276
278
  case 10: { var r=R('t'); return r?r+'var a=_jt(t);if(('+value+'&(1<<a))!==0)return true;return('+value+'&4)!==0&&_ii(t);':null; }
277
279
  case 11: { var r=R('t'); return r?r+'return _es(t)==='+value+';':null; }
278
280
  case 12: { var r=R('t'); return r?r+'return('+value+'&(1<<_es(t)))!==0;':null; }
279
- case 13: { var r=R('t'); return r?r+"if(typeof t!=='string')return false;var l=_ul(t);if(l<"+value[0]+')return false;'+(value[1]!==null?'if(l>'+value[1]+')return false;':'')+'return true;':null; }
280
- case 14: { var r=R('t'); return r?r+"return typeof t==='string'&&_ul(t)<="+value+';':null; }
281
- case 15: { var r=R('t'); return r?r+'if(!Array.isArray(t))return false;if(t.length<'+value[0]+')return false;'+(value[1]!==null?'if(t.length>'+value[1]+')return false;':'')+'return true;':null; }
282
- case 16: { var r=R('t'); return r?r+'return Array.isArray(t)&&t.length<='+value+';':null; }
283
- case 17: { var r=R('t'); return r?r+TO+'return false;var s=0;for(var k in t)s++;if(s<'+value[0]+')return false;'+(value[1]!==null?'if(s>'+value[1]+')return false;':'')+'return true;':null; }
284
- case 18: { var r=R('t'); return r?r+TO+'return false;var s=0;for(var k in t)s++;return s<='+value+';':null; }
285
- case 19: return fb(19); case 20: return fb(20); case 21: return fb(21);
286
- case 22: { var r=R('t'); return r?r+'if(!Array.isArray(t))return true;return t.length<'+value+';':null; }
287
- case 23: { var r=R('t'); return r?r+'if(!Array.isArray(t))return true;return t.length>'+value+';':null; }
288
- case 24: { var r=R('t'); return r?r+TO+'return true;var s=0;for(var k in t)s++;return s<'+value+';':null; }
289
- case 25: { var r=R('t'); return r?r+TO+'return true;var s=0;for(var k in t)s++;return s>'+value+';':null; }
290
- case 26: { if(typeof value==='string'||typeof value==='number'||typeof value==='boolean'||value===null){var r=R('t');return r?r+'return t==='+JSON.stringify(value)+';':null;}return fb(26); }
291
- case 27: return fb(27); case 28: return fb(28);
292
- case 29: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t>="+v+';':null; }
293
- case 30: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t<="+v+';':null; }
294
- case 31: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t>"+v+';':null; }
295
- case 32: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t<"+v+';':null; }
296
- case 33: return fb(33); case 34: return fb(34);
297
- case 35: return fb(35); case 36: return fb(36); case 37: return fb(37); case 38: return fb(38);
298
- case 39: return fb(39);
299
- case 40: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;var a=_jt(t);return a==='+value+'||('+value+'===2&&_ii(t));':null; }
300
- case 41: return fb(41);
301
- case 42: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;return _es(t)==='+value+';':null; }
302
- case 43: return fb(43);
303
- case 44: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;return('+value+'&(1<<_es(t)))!==0;':null; }
304
- case 45: return fb(45); case 46: return fb(46); case 47: return fb(47);
305
- case 48: return fb(48);
306
- case 49: return 'return true;'; case 50: return 'return true;'; case 51: return 'return true;'; case 52: return 'return true;';
307
- case 53: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return false;'; var c=r; for(var j=0;j<children.length;j++)c+='if(!'+cc(children[j],'t')+')return true;'; return c+'return false;'; }
308
- case 54: return fb(54);
309
- case 55: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return true;'; if(value){var c=r+'var __r=false;';for(var j=0;j<children.length;j++)c+='if('+cc(children[j],'t')+')__r=true;';return c+'return __r;';} var c=r;for(var j=0;j<children.length;j++)c+='if('+cc(children[j],'t')+')return true;';return c+'return false;'; }
310
- case 56: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return true;'; return r+seq(children,'t')+'return true;'; }
311
- case 57: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return false;'; var c=r+'var __r=true,__m=false;';for(var j=0;j<children.length;j++){c+='if('+cc(children[j],'t')+'){if(__m){__r=false;'+(!value?'return false;':'')+ '}else __m=true;}';}return c+'return __r&&__m;'; }
312
- case 58: return fb(58);
313
- case 59: { var r=R('t'); if(!r)return null; var c=r+'if(_jt(t)!=='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'t'); return c+'return true;'; }
314
- case 60: { 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,'t'); return c+'return true;'; }
315
- case 61: { var r=R('t'); if(!r)return null; var c=r+'if(!Array.isArray(t)||t.length<='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'t'); return c+'return true;'; }
316
- case 62: return fb(62); case 63: return fb(63);
317
- case 64: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; var mi=captures.length; captures.push(value); var gf=''; for(var gi=0;gi<children.length;gi++){var gc=children[gi][6]; if(gc&&gc.length>0){gf+='function(i,d,_t,_v){'+lb(gc,'i')+'return true;},';}else{gf+='null,';}} return r+TO+'return true;var __cg=['+gf+'];for(var k in t){var __mi=_c['+mi+'][k];if(__mi!==void 0){var __cf=__cg[__mi];if(__cf&&!__cf(t,d,_t,_v))return false;}}return true;'; }
318
- case 65: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; var mi=captures.length; captures.push(value); var gf=''; for(var gi=0;gi<children.length;gi++){var gc=children[gi][6]; if(gc&&gc.length>0){gf+='function(i,d,_t,_v){'+lb(gc,'i')+'return true;},';}else{gf+='null,';}} return r+TO+'return true;var __cg=['+gf+'];for(var k in t){var __mi=_c['+mi+'][k];if(__mi===void 0)return false;var __cf=__cg[__mi];if(__cf&&!__cf(t,d,_t,_v))return false;}return true;'; }
319
- case 66: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+TO+'return true;for(var k in t){'+lb(children,'t[k]')+'}return true;'; }
320
- case 67: return fb(67); case 68: return fb(68); case 69: return fb(69); case 70: return fb(70); case 71: return fb(71);
321
- case 72: return fb(72); case 73: return fb(73); case 74: return fb(74); case 75: return fb(75);
322
- case 76: { var r=R('t'); return r?r+TO+'return true;for(var k in t){if(_es(t[k])!=='+value+')return false;}return true;':null; }
323
- case 77: return fb(77); case 78: return fb(78); case 79: return fb(79); case 80: return fb(80);
324
- case 81: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+'if(!Array.isArray(t))return true;for(var j=0;j<t.length;j++){'+lb(children,'t[j]')+'}return true;'; }
325
- case 82: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+'if(!Array.isArray(t)||'+value+'>=t.length)return true;for(var j='+value+';j<t.length;j++){'+lb(children,'t[j]')+'}return true;'; }
326
- case 83: return fb(83);
327
- case 84: { 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; }
328
- case 85: { 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; }
329
- case 86: { 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; }
330
- case 87: return fb(87); case 88: return fb(88); case 89: return fb(89); case 90: return fb(90); case 91: return fb(91);
331
- case 92: { 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;'; }
332
- case 93: { 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;'; }
333
- case 94: { 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;'; }
334
- case 95: { var c='if(_jt(i)!=='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'i'); return c+'return true;'; }
335
- case 96: return 'return true;';
336
- case 97: return fb(97);
337
- case 98: { if(!value)return 'return true;'; if(visited&&visited.has(instruction))return fb(98); if(!visited)visited=new Set(); visited.add(instruction); var r=R('t'); if(!r)return fb(98); 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;'; }
281
+ case 13: { var r=R('t'); return r?r+'return('+value+'&(1<<_es(t)))===0;':null; }
282
+ case 14: { var r=R('t'); return r?r+"if(typeof t!=='string')return false;var l=_ul(t);if(l<"+value[0]+')return false;'+(value[1]!==null?'if(l>'+value[1]+')return false;':'')+'return true;':null; }
283
+ case 15: { var r=R('t'); return r?r+"return typeof t==='string'&&_ul(t)<="+value+';':null; }
284
+ case 16: { var r=R('t'); return r?r+'if(!Array.isArray(t))return false;if(t.length<'+value[0]+')return false;'+(value[1]!==null?'if(t.length>'+value[1]+')return false;':'')+'return true;':null; }
285
+ case 17: { var r=R('t'); return r?r+'return Array.isArray(t)&&t.length<='+value+';':null; }
286
+ case 18: { var r=R('t'); return r?r+TO+'return false;var s=0;for(var k in t)s++;if(s<'+value[0]+')return false;'+(value[1]!==null?'if(s>'+value[1]+')return false;':'')+'return true;':null; }
287
+ case 19: { var r=R('t'); return r?r+TO+'return false;var s=0;for(var k in t)s++;return s<='+value+';':null; }
288
+ case 20: return fb(20); case 21: return fb(21); case 22: return fb(22);
289
+ case 23: { var r=R('t'); return r?r+'if(!Array.isArray(t))return true;return t.length<'+value+';':null; }
290
+ case 24: { var r=R('t'); return r?r+'if(!Array.isArray(t))return true;return t.length>'+value+';':null; }
291
+ case 25: { var r=R('t'); return r?r+TO+'return true;var s=0;for(var k in t)s++;return s<'+value+';':null; }
292
+ case 26: { var r=R('t'); return r?r+TO+'return true;var s=0;for(var k in t)s++;return s>'+value+';':null; }
293
+ case 27: { if(typeof value==='string'||typeof value==='number'||typeof value==='boolean'||value===null){var r=R('t');return r?r+'return t==='+JSON.stringify(value)+';':null;}return fb(27); }
294
+ case 28: return fb(28); case 29: return fb(29);
295
+ case 30: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t>="+v+';':null; }
296
+ case 31: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t<="+v+';':null; }
297
+ case 32: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t>"+v+';':null; }
298
+ case 33: { var r=R('t'),v=typeof value==='bigint'?value+'n':value; return r?r+"var tt=typeof t;if(tt!=='number'&&tt!=='bigint')return true;return t<"+v+';':null; }
299
+ case 34: return fb(34); case 35: return fb(35);
300
+ case 36: return fb(36); case 37: return fb(37); case 38: return fb(38); case 39: return fb(39);
301
+ case 40: return fb(40);
302
+ case 41: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;var a=_jt(t);return a==='+value+'||('+value+'===2&&_ii(t));':null; }
303
+ case 42: return fb(42);
304
+ case 43: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;return _es(t)==='+value+';':null; }
305
+ case 44: return fb(44);
306
+ case 45: { var r=R('t'); return r?IO+r+'if(t===void 0)return true;return('+value+'&(1<<_es(t)))!==0;':null; }
307
+ case 46: return fb(46); case 47: return fb(47); case 48: return fb(48);
308
+ case 49: return fb(49);
309
+ case 50: return 'return true;'; case 51: return 'return true;'; case 52: return 'return true;'; case 53: return 'return true;';
310
+ case 54: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return false;'; var c=r; for(var j=0;j<children.length;j++)c+='if(!'+cc(children[j],'t')+')return true;'; return c+'return false;'; }
311
+ case 55: return fb(55);
312
+ case 56: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return true;'; if(value){var c=r+'var __r=false;';for(var j=0;j<children.length;j++)c+='if('+cc(children[j],'t')+')__r=true;';return c+'return __r;';} var c=r;for(var j=0;j<children.length;j++)c+='if('+cc(children[j],'t')+')return true;';return c+'return false;'; }
313
+ case 57: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return true;'; return r+seq(children,'t')+'return true;'; }
314
+ case 58: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return 'return false;'; var c=r+'var __r=true,__m=false;';for(var j=0;j<children.length;j++){c+='if('+cc(children[j],'t')+'){if(__m){__r=false;'+(!value?'return false;':'')+ '}else __m=true;}';}return c+'return __r&&__m;'; }
315
+ case 59: return fb(59);
316
+ case 60: { var r=R('t'); if(!r)return null; var c=r+'if(_jt(t)!=='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'t'); return c+'return true;'; }
317
+ case 61: { 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,'t'); return c+'return true;'; }
318
+ case 62: { var r=R('t'); if(!r)return null; var c=r+'if(!Array.isArray(t)||t.length<='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'t'); return c+'return true;'; }
319
+ case 63: return fb(63); case 64: return fb(64);
320
+ case 65: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; var mi=captures.length; captures.push(value); var gf=''; for(var gi=0;gi<children.length;gi++){var gc=children[gi][6]; if(gc&&gc.length>0){gf+='function(i,d,_t,_v){'+lb(gc,'i')+'return true;},';}else{gf+='null,';}} return r+TO+'return true;var __cg=['+gf+'];for(var k in t){var __mi=_c['+mi+'][k];if(__mi!==void 0){var __cf=__cg[__mi];if(__cf&&!__cf(t,d,_t,_v))return false;}}return true;'; }
321
+ case 66: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; var mi=captures.length; captures.push(value); var gf=''; for(var gi=0;gi<children.length;gi++){var gc=children[gi][6]; if(gc&&gc.length>0){gf+='function(i,d,_t,_v){'+lb(gc,'i')+'return true;},';}else{gf+='null,';}} return r+TO+'return true;var __cg=['+gf+'];for(var k in t){var __mi=_c['+mi+'][k];if(__mi===void 0)return false;var __cf=__cg[__mi];if(__cf&&!__cf(t,d,_t,_v))return false;}return true;'; }
322
+ case 67: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+TO+'return true;for(var k in t){'+lb(children,'t[k]')+'}return true;'; }
323
+ case 68: return fb(68); case 69: return fb(69); case 70: return fb(70); case 71: return fb(71); case 72: return fb(72);
324
+ case 73: return fb(73); case 74: return fb(74); case 75: return fb(75); case 76: return fb(76);
325
+ case 77: { var r=R('t'); return r?r+TO+'return true;for(var k in t){if(_es(t[k])!=='+value+')return false;}return true;':null; }
326
+ case 78: return fb(78); case 79: return fb(79); case 80: return fb(80); case 81: return fb(81);
327
+ case 82: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+'if(!Array.isArray(t))return true;for(var j=0;j<t.length;j++){'+lb(children,'t[j]')+'}return true;'; }
328
+ case 83: { var r=R('t'); if(!r)return null; if(!children||children.length===0)return r+'return true;'; return r+'if(!Array.isArray(t)||'+value+'>=t.length)return true;for(var j='+value+';j<t.length;j++){'+lb(children,'t[j]')+'}return true;'; }
329
+ case 84: return fb(84);
330
+ case 85: { 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; }
331
+ case 86: { 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; }
332
+ case 87: { 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; }
333
+ case 88: return fb(88); case 89: return fb(89); case 90: return fb(90); case 91: return fb(91); case 92: return fb(92);
334
+ case 93: { 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;'; }
335
+ case 94: { 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;'; }
336
+ case 95: { 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;'; }
337
+ case 96: { var c='if(_jt(i)!=='+value+')return true;'; if(children&&children.length>0)c+=seq(children,'i'); return c+'return true;'; }
338
+ case 97: return 'return true;';
339
+ case 98: return fb(98);
340
+ case 99: { if(!value)return 'return true;'; if(visited&&visited.has(instruction))return fb(99); if(!visited)visited=new Set(); visited.add(instruction); var r=R('t'); if(!r)return fb(99); 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;'; }
338
341
  default: return null;
339
342
  }
340
343
  }
@@ -663,7 +666,7 @@ function evaluateInstructionTracked(instruction, instance, depth, template, eval
663
666
  if (!handler) return true;
664
667
 
665
668
  const type = instruction[0];
666
- if (type < 92 || type > 96) {
669
+ if (type < CONTROL_GROUP_START || type > CONTROL_EVALUATE_END) {
667
670
  if (evaluator.trackMode) {
668
671
  evaluator.pushPath(instruction[1]);
669
672
  }
@@ -1054,6 +1057,14 @@ function AssertionTypeStrictAny(instruction, instance, depth, template, evaluato
1054
1057
  return __result;
1055
1058
  };
1056
1059
 
1060
+ function AssertionNotTypeStrictAny(instruction, instance, depth, template, evaluator) {
1061
+ if (evaluator.callbackMode) evaluator.callbackPush(instruction);
1062
+ const target = resolveInstance(instance, instruction[2]);
1063
+ const __result = !typeSetTest(instruction[5], effectiveTypeStrictReal(target));
1064
+ if (evaluator.callbackMode) evaluator.callbackPop(instruction, __result);
1065
+ return __result;
1066
+ };
1067
+
1057
1068
  function AssertionTypeStringBounded(instruction, instance, depth, template, evaluator) {
1058
1069
  if (evaluator.callbackMode) evaluator.callbackPush(instruction);
1059
1070
  const target = resolveInstance(instance, instruction[2]);
@@ -2617,92 +2628,93 @@ const handlers = [
2617
2628
  AssertionTypeAny, // 10
2618
2629
  AssertionTypeStrict, // 11
2619
2630
  AssertionTypeStrictAny, // 12
2620
- AssertionTypeStringBounded, // 13
2621
- AssertionTypeStringUpper, // 14
2622
- AssertionTypeArrayBounded, // 15
2623
- AssertionTypeArrayUpper, // 16
2624
- AssertionTypeObjectBounded, // 17
2625
- AssertionTypeObjectUpper, // 18
2626
- AssertionRegex, // 19
2627
- AssertionStringSizeLess, // 20
2628
- AssertionStringSizeGreater, // 21
2629
- AssertionArraySizeLess, // 22
2630
- AssertionArraySizeGreater, // 23
2631
- AssertionObjectSizeLess, // 24
2632
- AssertionObjectSizeGreater, // 25
2633
- AssertionEqual, // 26
2634
- AssertionEqualsAny, // 27
2635
- AssertionEqualsAnyStringHash, // 28
2636
- AssertionGreaterEqual, // 29
2637
- AssertionLessEqual, // 30
2638
- AssertionGreater, // 31
2639
- AssertionLess, // 32
2640
- AssertionUnique, // 33
2641
- AssertionDivisible, // 34
2642
- AssertionTypeIntegerBounded, // 35
2643
- AssertionTypeIntegerBoundedStrict, // 36
2644
- AssertionTypeIntegerLowerBound, // 37
2645
- AssertionTypeIntegerLowerBoundStrict, // 38
2646
- AssertionStringType, // 39
2647
- AssertionPropertyType, // 40
2648
- AssertionPropertyTypeEvaluate, // 41
2649
- AssertionPropertyTypeStrict, // 42
2650
- AssertionPropertyTypeStrictEvaluate, // 43
2651
- AssertionPropertyTypeStrictAny, // 44
2652
- AssertionPropertyTypeStrictAnyEvaluate, // 45
2653
- AssertionArrayPrefix, // 46
2654
- AssertionArrayPrefixEvaluate, // 47
2655
- AssertionObjectPropertiesSimple, // 48
2656
- AnnotationEmit, // 49
2657
- AnnotationToParent, // 50
2658
- AnnotationBasenameToParent, // 51
2659
- Evaluate, // 52
2660
- LogicalNot, // 53
2661
- LogicalNotEvaluate, // 54
2662
- LogicalOr, // 55
2663
- LogicalAnd, // 56
2664
- LogicalXor, // 57
2665
- LogicalCondition, // 58
2666
- LogicalWhenType, // 59
2667
- LogicalWhenDefines, // 60
2668
- LogicalWhenArraySizeGreater, // 61
2669
- LoopPropertiesUnevaluated, // 62
2670
- LoopPropertiesUnevaluatedExcept, // 63
2671
- LoopPropertiesMatch, // 64
2672
- LoopPropertiesMatchClosed, // 65
2673
- LoopProperties, // 66
2674
- LoopPropertiesEvaluate, // 67
2675
- LoopPropertiesRegex, // 68
2676
- LoopPropertiesRegexClosed, // 69
2677
- LoopPropertiesStartsWith, // 70
2678
- LoopPropertiesExcept, // 71
2679
- LoopPropertiesType, // 72
2680
- LoopPropertiesTypeEvaluate, // 73
2681
- LoopPropertiesExactlyTypeStrict, // 74
2682
- LoopPropertiesExactlyTypeStrictHash, // 75
2683
- LoopPropertiesTypeStrict, // 76
2684
- LoopPropertiesTypeStrictEvaluate, // 77
2685
- LoopPropertiesTypeStrictAny, // 78
2686
- LoopPropertiesTypeStrictAnyEvaluate, // 79
2687
- LoopKeys, // 80
2688
- LoopItems, // 81
2689
- LoopItemsFrom, // 82
2690
- LoopItemsUnevaluated, // 83
2691
- LoopItemsType, // 84
2692
- LoopItemsTypeStrict, // 85
2693
- LoopItemsTypeStrictAny, // 86
2694
- LoopItemsPropertiesExactlyTypeStrictHash, // 87
2631
+ AssertionNotTypeStrictAny, // 13
2632
+ AssertionTypeStringBounded, // 14
2633
+ AssertionTypeStringUpper, // 15
2634
+ AssertionTypeArrayBounded, // 16
2635
+ AssertionTypeArrayUpper, // 17
2636
+ AssertionTypeObjectBounded, // 18
2637
+ AssertionTypeObjectUpper, // 19
2638
+ AssertionRegex, // 20
2639
+ AssertionStringSizeLess, // 21
2640
+ AssertionStringSizeGreater, // 22
2641
+ AssertionArraySizeLess, // 23
2642
+ AssertionArraySizeGreater, // 24
2643
+ AssertionObjectSizeLess, // 25
2644
+ AssertionObjectSizeGreater, // 26
2645
+ AssertionEqual, // 27
2646
+ AssertionEqualsAny, // 28
2647
+ AssertionEqualsAnyStringHash, // 29
2648
+ AssertionGreaterEqual, // 30
2649
+ AssertionLessEqual, // 31
2650
+ AssertionGreater, // 32
2651
+ AssertionLess, // 33
2652
+ AssertionUnique, // 34
2653
+ AssertionDivisible, // 35
2654
+ AssertionTypeIntegerBounded, // 36
2655
+ AssertionTypeIntegerBoundedStrict, // 37
2656
+ AssertionTypeIntegerLowerBound, // 38
2657
+ AssertionTypeIntegerLowerBoundStrict, // 39
2658
+ AssertionStringType, // 40
2659
+ AssertionPropertyType, // 41
2660
+ AssertionPropertyTypeEvaluate, // 42
2661
+ AssertionPropertyTypeStrict, // 43
2662
+ AssertionPropertyTypeStrictEvaluate, // 44
2663
+ AssertionPropertyTypeStrictAny, // 45
2664
+ AssertionPropertyTypeStrictAnyEvaluate, // 46
2665
+ AssertionArrayPrefix, // 47
2666
+ AssertionArrayPrefixEvaluate, // 48
2667
+ AssertionObjectPropertiesSimple, // 49
2668
+ AnnotationEmit, // 50
2669
+ AnnotationToParent, // 51
2670
+ AnnotationBasenameToParent, // 52
2671
+ Evaluate, // 53
2672
+ LogicalNot, // 54
2673
+ LogicalNotEvaluate, // 55
2674
+ LogicalOr, // 56
2675
+ LogicalAnd, // 57
2676
+ LogicalXor, // 58
2677
+ LogicalCondition, // 59
2678
+ LogicalWhenType, // 60
2679
+ LogicalWhenDefines, // 61
2680
+ LogicalWhenArraySizeGreater, // 62
2681
+ LoopPropertiesUnevaluated, // 63
2682
+ LoopPropertiesUnevaluatedExcept, // 64
2683
+ LoopPropertiesMatch, // 65
2684
+ LoopPropertiesMatchClosed, // 66
2685
+ LoopProperties, // 67
2686
+ LoopPropertiesEvaluate, // 68
2687
+ LoopPropertiesRegex, // 69
2688
+ LoopPropertiesRegexClosed, // 70
2689
+ LoopPropertiesStartsWith, // 71
2690
+ LoopPropertiesExcept, // 72
2691
+ LoopPropertiesType, // 73
2692
+ LoopPropertiesTypeEvaluate, // 74
2693
+ LoopPropertiesExactlyTypeStrict, // 75
2694
+ LoopPropertiesExactlyTypeStrictHash, // 76
2695
+ LoopPropertiesTypeStrict, // 77
2696
+ LoopPropertiesTypeStrictEvaluate, // 78
2697
+ LoopPropertiesTypeStrictAny, // 79
2698
+ LoopPropertiesTypeStrictAnyEvaluate, // 80
2699
+ LoopKeys, // 81
2700
+ LoopItems, // 82
2701
+ LoopItemsFrom, // 83
2702
+ LoopItemsUnevaluated, // 84
2703
+ LoopItemsType, // 85
2704
+ LoopItemsTypeStrict, // 86
2705
+ LoopItemsTypeStrictAny, // 87
2695
2706
  LoopItemsPropertiesExactlyTypeStrictHash, // 88
2696
- LoopItemsIntegerBounded, // 89
2697
- LoopItemsIntegerBoundedSized, // 90
2698
- LoopContains, // 91
2699
- ControlGroup, // 92
2700
- ControlGroupWhenDefines, // 93
2701
- ControlGroupWhenDefinesDirect, // 94
2702
- ControlGroupWhenType, // 95
2703
- ControlEvaluate, // 96
2704
- ControlDynamicAnchorJump, // 97
2705
- ControlJump // 98
2707
+ LoopItemsPropertiesExactlyTypeStrictHash, // 89
2708
+ LoopItemsIntegerBounded, // 90
2709
+ LoopItemsIntegerBoundedSized, // 91
2710
+ LoopContains, // 92
2711
+ ControlGroup, // 93
2712
+ ControlGroupWhenDefines, // 94
2713
+ ControlGroupWhenDefinesDirect, // 95
2714
+ ControlGroupWhenType, // 96
2715
+ ControlEvaluate, // 97
2716
+ ControlDynamicAnchorJump, // 98
2717
+ ControlJump // 99
2706
2718
  ];
2707
2719
 
2708
2720
  function AssertionTypeArrayBounded_fast(instruction, instance, depth, template, evaluator) {
@@ -3211,6 +3223,12 @@ function AssertionTypeStrictAny_fast(instruction, instance, depth, template, eva
3211
3223
  return typeSetTest(instruction[5], effectiveTypeStrictReal(target));
3212
3224
  }
3213
3225
 
3226
+ function AssertionNotTypeStrictAny_fast(instruction, instance, depth, template, evaluator) {
3227
+ const relInstance = instruction[2];
3228
+ const target = relInstance.length === 0 ? instance : resolveInstance(instance, relInstance);
3229
+ return !typeSetTest(instruction[5], effectiveTypeStrictReal(target));
3230
+ }
3231
+
3214
3232
  function AssertionTypeStringUpper_fast(instruction, instance, depth, template, evaluator) {
3215
3233
  const relInstance = instruction[2];
3216
3234
  const target = relInstance.length === 0 ? instance : resolveInstance(instance, relInstance);
@@ -3879,100 +3897,101 @@ function AssertionTypeIntegerLowerBoundStrict_fast(instruction, instance, depth,
3879
3897
  }
3880
3898
 
3881
3899
  const fastHandlers = handlers.slice();
3882
- fastHandlers[15] = AssertionTypeArrayBounded_fast;
3883
- fastHandlers[86] = LoopItemsTypeStrictAny_fast;
3884
- fastHandlers[42] = AssertionPropertyTypeStrict_fast;
3900
+ fastHandlers[16] = AssertionTypeArrayBounded_fast;
3901
+ fastHandlers[87] = LoopItemsTypeStrictAny_fast;
3902
+ fastHandlers[43] = AssertionPropertyTypeStrict_fast;
3885
3903
  fastHandlers[11] = AssertionTypeStrict_fast;
3886
3904
  fastHandlers[4] = AssertionDefinesAllStrict_fast;
3887
- fastHandlers[26] = AssertionEqual_fast;
3888
- fastHandlers[64] = LoopPropertiesMatch_fast;
3889
- fastHandlers[55] = LogicalOr_fast;
3890
- fastHandlers[98] = ControlJump_fast;
3891
- fastHandlers[28] = AssertionEqualsAnyStringHash_fast;
3892
- fastHandlers[57] = LogicalXor_fast;
3905
+ fastHandlers[27] = AssertionEqual_fast;
3906
+ fastHandlers[65] = LoopPropertiesMatch_fast;
3907
+ fastHandlers[56] = LogicalOr_fast;
3908
+ fastHandlers[99] = ControlJump_fast;
3909
+ fastHandlers[29] = AssertionEqualsAnyStringHash_fast;
3910
+ fastHandlers[58] = LogicalXor_fast;
3893
3911
  fastHandlers[2] = AssertionDefinesStrict_fast;
3894
- fastHandlers[81] = LoopItems_fast;
3895
- fastHandlers[65] = LoopPropertiesMatchClosed_fast;
3896
- fastHandlers[13] = AssertionTypeStringBounded_fast;
3897
- fastHandlers[56] = LogicalAnd_fast;
3912
+ fastHandlers[82] = LoopItems_fast;
3913
+ fastHandlers[66] = LoopPropertiesMatchClosed_fast;
3914
+ fastHandlers[14] = AssertionTypeStringBounded_fast;
3915
+ fastHandlers[57] = LogicalAnd_fast;
3898
3916
  fastHandlers[8] = AssertionPropertyDependencies_fast;
3899
3917
  fastHandlers[10] = AssertionTypeAny_fast;
3900
- fastHandlers[58] = LogicalCondition_fast;
3901
- fastHandlers[71] = LoopPropertiesExcept_fast;
3902
- fastHandlers[19] = AssertionRegex_fast;
3903
- fastHandlers[66] = LoopProperties_fast;
3918
+ fastHandlers[59] = LogicalCondition_fast;
3919
+ fastHandlers[72] = LoopPropertiesExcept_fast;
3920
+ fastHandlers[20] = AssertionRegex_fast;
3921
+ fastHandlers[67] = LoopProperties_fast;
3904
3922
  fastHandlers[1] = AssertionDefines_fast;
3905
- fastHandlers[59] = LogicalWhenType_fast;
3906
- fastHandlers[60] = LogicalWhenDefines_fast;
3923
+ fastHandlers[60] = LogicalWhenType_fast;
3924
+ fastHandlers[61] = LogicalWhenDefines_fast;
3907
3925
  fastHandlers[0] = AssertionFail_fast;
3908
- fastHandlers[91] = LoopContains_fast;
3909
- fastHandlers[53] = LogicalNot_fast;
3910
- fastHandlers[84] = LoopItemsType_fast;
3911
- fastHandlers[85] = LoopItemsTypeStrict_fast;
3912
- fastHandlers[27] = AssertionEqualsAny_fast;
3926
+ fastHandlers[92] = LoopContains_fast;
3927
+ fastHandlers[54] = LogicalNot_fast;
3928
+ fastHandlers[85] = LoopItemsType_fast;
3929
+ fastHandlers[86] = LoopItemsTypeStrict_fast;
3930
+ fastHandlers[28] = AssertionEqualsAny_fast;
3913
3931
  fastHandlers[3] = AssertionDefinesAll_fast;
3914
3932
  fastHandlers[5] = AssertionDefinesExactly_fast;
3915
3933
  fastHandlers[6] = AssertionDefinesExactlyStrict_fast;
3916
3934
  fastHandlers[7] = AssertionDefinesExactlyStrictHash3_fast;
3917
3935
  fastHandlers[9] = AssertionType_fast;
3918
3936
  fastHandlers[12] = AssertionTypeStrictAny_fast;
3919
- fastHandlers[14] = AssertionTypeStringUpper_fast;
3920
- fastHandlers[16] = AssertionTypeArrayUpper_fast;
3921
- fastHandlers[17] = AssertionTypeObjectBounded_fast;
3922
- fastHandlers[18] = AssertionTypeObjectUpper_fast;
3923
- fastHandlers[20] = AssertionStringSizeLess_fast;
3924
- fastHandlers[21] = AssertionStringSizeGreater_fast;
3925
- fastHandlers[22] = AssertionArraySizeLess_fast;
3926
- fastHandlers[23] = AssertionArraySizeGreater_fast;
3927
- fastHandlers[24] = AssertionObjectSizeLess_fast;
3928
- fastHandlers[25] = AssertionObjectSizeGreater_fast;
3929
- fastHandlers[29] = AssertionGreaterEqual_fast;
3930
- fastHandlers[30] = AssertionLessEqual_fast;
3931
- fastHandlers[31] = AssertionGreater_fast;
3932
- fastHandlers[32] = AssertionLess_fast;
3933
- fastHandlers[33] = AssertionUnique_fast;
3934
- fastHandlers[34] = AssertionDivisible_fast;
3935
- fastHandlers[35] = AssertionTypeIntegerBounded_fast;
3936
- fastHandlers[36] = AssertionTypeIntegerBoundedStrict_fast;
3937
- fastHandlers[37] = AssertionTypeIntegerLowerBound_fast;
3938
- fastHandlers[38] = AssertionTypeIntegerLowerBoundStrict_fast;
3939
- fastHandlers[39] = AssertionStringType_fast;
3940
- fastHandlers[40] = AssertionPropertyType_fast;
3941
- fastHandlers[41] = AssertionPropertyTypeEvaluate_fast;
3942
- fastHandlers[43] = AssertionPropertyTypeStrictEvaluate_fast;
3943
- fastHandlers[44] = AssertionPropertyTypeStrictAny_fast;
3944
- fastHandlers[45] = AssertionPropertyTypeStrictAnyEvaluate_fast;
3945
- fastHandlers[46] = AssertionArrayPrefix_fast;
3946
- fastHandlers[47] = AssertionArrayPrefixEvaluate_fast;
3947
- fastHandlers[48] = AssertionObjectPropertiesSimple_fast;
3948
- fastHandlers[49] = AnnotationEmit_fast;
3949
- fastHandlers[50] = AnnotationToParent_fast;
3950
- fastHandlers[51] = AnnotationBasenameToParent_fast;
3951
- fastHandlers[52] = Evaluate_fast;
3952
- fastHandlers[54] = LogicalNotEvaluate_fast;
3953
- fastHandlers[61] = LogicalWhenArraySizeGreater_fast;
3954
- fastHandlers[62] = LoopPropertiesUnevaluated_fast;
3955
- fastHandlers[63] = LoopPropertiesUnevaluatedExcept_fast;
3956
- fastHandlers[67] = LoopPropertiesEvaluate_fast;
3957
- fastHandlers[68] = LoopPropertiesRegex_fast;
3958
- fastHandlers[69] = LoopPropertiesRegexClosed_fast;
3959
- fastHandlers[70] = LoopPropertiesStartsWith_fast;
3960
- fastHandlers[72] = LoopPropertiesType_fast;
3961
- fastHandlers[73] = LoopPropertiesTypeEvaluate_fast;
3962
- fastHandlers[74] = LoopPropertiesExactlyTypeStrict_fast;
3963
- fastHandlers[75] = LoopPropertiesExactlyTypeStrictHash_fast;
3964
- fastHandlers[76] = LoopPropertiesTypeStrict_fast;
3965
- fastHandlers[77] = LoopPropertiesTypeStrictEvaluate_fast;
3966
- fastHandlers[78] = LoopPropertiesTypeStrictAny_fast;
3967
- fastHandlers[79] = LoopPropertiesTypeStrictAnyEvaluate_fast;
3968
- fastHandlers[80] = LoopKeys_fast;
3969
- fastHandlers[82] = LoopItemsFrom_fast;
3970
- fastHandlers[83] = LoopItemsUnevaluated_fast;
3971
- fastHandlers[87] = LoopItemsPropertiesExactlyTypeStrictHash_fast;
3937
+ fastHandlers[13] = AssertionNotTypeStrictAny_fast;
3938
+ fastHandlers[15] = AssertionTypeStringUpper_fast;
3939
+ fastHandlers[17] = AssertionTypeArrayUpper_fast;
3940
+ fastHandlers[18] = AssertionTypeObjectBounded_fast;
3941
+ fastHandlers[19] = AssertionTypeObjectUpper_fast;
3942
+ fastHandlers[21] = AssertionStringSizeLess_fast;
3943
+ fastHandlers[22] = AssertionStringSizeGreater_fast;
3944
+ fastHandlers[23] = AssertionArraySizeLess_fast;
3945
+ fastHandlers[24] = AssertionArraySizeGreater_fast;
3946
+ fastHandlers[25] = AssertionObjectSizeLess_fast;
3947
+ fastHandlers[26] = AssertionObjectSizeGreater_fast;
3948
+ fastHandlers[30] = AssertionGreaterEqual_fast;
3949
+ fastHandlers[31] = AssertionLessEqual_fast;
3950
+ fastHandlers[32] = AssertionGreater_fast;
3951
+ fastHandlers[33] = AssertionLess_fast;
3952
+ fastHandlers[34] = AssertionUnique_fast;
3953
+ fastHandlers[35] = AssertionDivisible_fast;
3954
+ fastHandlers[36] = AssertionTypeIntegerBounded_fast;
3955
+ fastHandlers[37] = AssertionTypeIntegerBoundedStrict_fast;
3956
+ fastHandlers[38] = AssertionTypeIntegerLowerBound_fast;
3957
+ fastHandlers[39] = AssertionTypeIntegerLowerBoundStrict_fast;
3958
+ fastHandlers[40] = AssertionStringType_fast;
3959
+ fastHandlers[41] = AssertionPropertyType_fast;
3960
+ fastHandlers[42] = AssertionPropertyTypeEvaluate_fast;
3961
+ fastHandlers[44] = AssertionPropertyTypeStrictEvaluate_fast;
3962
+ fastHandlers[45] = AssertionPropertyTypeStrictAny_fast;
3963
+ fastHandlers[46] = AssertionPropertyTypeStrictAnyEvaluate_fast;
3964
+ fastHandlers[47] = AssertionArrayPrefix_fast;
3965
+ fastHandlers[48] = AssertionArrayPrefixEvaluate_fast;
3966
+ fastHandlers[49] = AssertionObjectPropertiesSimple_fast;
3967
+ fastHandlers[50] = AnnotationEmit_fast;
3968
+ fastHandlers[51] = AnnotationToParent_fast;
3969
+ fastHandlers[52] = AnnotationBasenameToParent_fast;
3970
+ fastHandlers[53] = Evaluate_fast;
3971
+ fastHandlers[55] = LogicalNotEvaluate_fast;
3972
+ fastHandlers[62] = LogicalWhenArraySizeGreater_fast;
3973
+ fastHandlers[63] = LoopPropertiesUnevaluated_fast;
3974
+ fastHandlers[64] = LoopPropertiesUnevaluatedExcept_fast;
3975
+ fastHandlers[68] = LoopPropertiesEvaluate_fast;
3976
+ fastHandlers[69] = LoopPropertiesRegex_fast;
3977
+ fastHandlers[70] = LoopPropertiesRegexClosed_fast;
3978
+ fastHandlers[71] = LoopPropertiesStartsWith_fast;
3979
+ fastHandlers[73] = LoopPropertiesType_fast;
3980
+ fastHandlers[74] = LoopPropertiesTypeEvaluate_fast;
3981
+ fastHandlers[75] = LoopPropertiesExactlyTypeStrict_fast;
3982
+ fastHandlers[76] = LoopPropertiesExactlyTypeStrictHash_fast;
3983
+ fastHandlers[77] = LoopPropertiesTypeStrict_fast;
3984
+ fastHandlers[78] = LoopPropertiesTypeStrictEvaluate_fast;
3985
+ fastHandlers[79] = LoopPropertiesTypeStrictAny_fast;
3986
+ fastHandlers[80] = LoopPropertiesTypeStrictAnyEvaluate_fast;
3987
+ fastHandlers[81] = LoopKeys_fast;
3988
+ fastHandlers[83] = LoopItemsFrom_fast;
3989
+ fastHandlers[84] = LoopItemsUnevaluated_fast;
3972
3990
  fastHandlers[88] = LoopItemsPropertiesExactlyTypeStrictHash_fast;
3973
- fastHandlers[89] = LoopItemsIntegerBounded_fast;
3974
- fastHandlers[90] = LoopItemsIntegerBoundedSized_fast;
3975
- fastHandlers[97] = ControlDynamicAnchorJump_fast;
3991
+ fastHandlers[89] = LoopItemsPropertiesExactlyTypeStrictHash_fast;
3992
+ fastHandlers[90] = LoopItemsIntegerBounded_fast;
3993
+ fastHandlers[91] = LoopItemsIntegerBoundedSized_fast;
3994
+ fastHandlers[98] = ControlDynamicAnchorJump_fast;
3976
3995
 
3977
3996
  import { describe } from './describe.mjs';
3978
3997
 
package/opcodes.mjs CHANGED
@@ -11,92 +11,93 @@ export const ASSERTION_TYPE = 9;
11
11
  export const ASSERTION_TYPE_ANY = 10;
12
12
  export const ASSERTION_TYPE_STRICT = 11;
13
13
  export const ASSERTION_TYPE_STRICT_ANY = 12;
14
- export const ASSERTION_TYPE_STRING_BOUNDED = 13;
15
- export const ASSERTION_TYPE_STRING_UPPER = 14;
16
- export const ASSERTION_TYPE_ARRAY_BOUNDED = 15;
17
- export const ASSERTION_TYPE_ARRAY_UPPER = 16;
18
- export const ASSERTION_TYPE_OBJECT_BOUNDED = 17;
19
- export const ASSERTION_TYPE_OBJECT_UPPER = 18;
20
- export const ASSERTION_REGEX = 19;
21
- export const ASSERTION_STRING_SIZE_LESS = 20;
22
- export const ASSERTION_STRING_SIZE_GREATER = 21;
23
- export const ASSERTION_ARRAY_SIZE_LESS = 22;
24
- export const ASSERTION_ARRAY_SIZE_GREATER = 23;
25
- export const ASSERTION_OBJECT_SIZE_LESS = 24;
26
- export const ASSERTION_OBJECT_SIZE_GREATER = 25;
27
- export const ASSERTION_EQUAL = 26;
28
- export const ASSERTION_EQUALS_ANY = 27;
29
- export const ASSERTION_EQUALS_ANY_STRING_HASH = 28;
30
- export const ASSERTION_GREATER_EQUAL = 29;
31
- export const ASSERTION_LESS_EQUAL = 30;
32
- export const ASSERTION_GREATER = 31;
33
- export const ASSERTION_LESS = 32;
34
- export const ASSERTION_UNIQUE = 33;
35
- export const ASSERTION_DIVISIBLE = 34;
36
- export const ASSERTION_TYPE_INTEGER_BOUNDED = 35;
37
- export const ASSERTION_TYPE_INTEGER_BOUNDED_STRICT = 36;
38
- export const ASSERTION_TYPE_INTEGER_LOWER_BOUND = 37;
39
- export const ASSERTION_TYPE_INTEGER_LOWER_BOUND_STRICT = 38;
40
- export const ASSERTION_STRING_TYPE = 39;
41
- export const ASSERTION_PROPERTY_TYPE = 40;
42
- export const ASSERTION_PROPERTY_TYPE_EVALUATE = 41;
43
- export const ASSERTION_PROPERTY_TYPE_STRICT = 42;
44
- export const ASSERTION_PROPERTY_TYPE_STRICT_EVALUATE = 43;
45
- export const ASSERTION_PROPERTY_TYPE_STRICT_ANY = 44;
46
- export const ASSERTION_PROPERTY_TYPE_STRICT_ANY_EVALUATE = 45;
47
- export const ASSERTION_ARRAY_PREFIX = 46;
48
- export const ASSERTION_ARRAY_PREFIX_EVALUATE = 47;
49
- export const ASSERTION_OBJECT_PROPERTIES_SIMPLE = 48;
50
- export const ANNOTATION_EMIT = 49;
51
- export const ANNOTATION_TO_PARENT = 50;
52
- export const ANNOTATION_BASENAME_TO_PARENT = 51;
53
- export const EVALUATE = 52;
54
- export const LOGICAL_NOT = 53;
55
- export const LOGICAL_NOT_EVALUATE = 54;
56
- export const LOGICAL_OR = 55;
57
- export const LOGICAL_AND = 56;
58
- export const LOGICAL_XOR = 57;
59
- export const LOGICAL_CONDITION = 58;
60
- export const LOGICAL_WHEN_TYPE = 59;
61
- export const LOGICAL_WHEN_DEFINES = 60;
62
- export const LOGICAL_WHEN_ARRAY_SIZE_GREATER = 61;
63
- export const LOOP_PROPERTIES_UNEVALUATED = 62;
64
- export const LOOP_PROPERTIES_UNEVALUATED_EXCEPT = 63;
65
- export const LOOP_PROPERTIES_MATCH = 64;
66
- export const LOOP_PROPERTIES_MATCH_CLOSED = 65;
67
- export const LOOP_PROPERTIES = 66;
68
- export const LOOP_PROPERTIES_EVALUATE = 67;
69
- export const LOOP_PROPERTIES_REGEX = 68;
70
- export const LOOP_PROPERTIES_REGEX_CLOSED = 69;
71
- export const LOOP_PROPERTIES_STARTS_WITH = 70;
72
- export const LOOP_PROPERTIES_EXCEPT = 71;
73
- export const LOOP_PROPERTIES_TYPE = 72;
74
- export const LOOP_PROPERTIES_TYPE_EVALUATE = 73;
75
- export const LOOP_PROPERTIES_EXACTLY_TYPE_STRICT = 74;
76
- export const LOOP_PROPERTIES_EXACTLY_TYPE_STRICT_HASH = 75;
77
- export const LOOP_PROPERTIES_TYPE_STRICT = 76;
78
- export const LOOP_PROPERTIES_TYPE_STRICT_EVALUATE = 77;
79
- export const LOOP_PROPERTIES_TYPE_STRICT_ANY = 78;
80
- export const LOOP_PROPERTIES_TYPE_STRICT_ANY_EVALUATE = 79;
81
- export const LOOP_KEYS = 80;
82
- export const LOOP_ITEMS = 81;
83
- export const LOOP_ITEMS_FROM = 82;
84
- export const LOOP_ITEMS_UNEVALUATED = 83;
85
- export const LOOP_ITEMS_TYPE = 84;
86
- export const LOOP_ITEMS_TYPE_STRICT = 85;
87
- export const LOOP_ITEMS_TYPE_STRICT_ANY = 86;
88
- export const LOOP_ITEMS_PROPERTIES_EXACTLY_TYPE_STRICT_HASH = 87;
89
- export const LOOP_ITEMS_PROPERTIES_EXACTLY_TYPE_STRICT_HASH3 = 88;
90
- export const LOOP_ITEMS_INTEGER_BOUNDED = 89;
91
- export const LOOP_ITEMS_INTEGER_BOUNDED_SIZED = 90;
92
- export const LOOP_CONTAINS = 91;
93
- export const CONTROL_GROUP = 92;
94
- export const CONTROL_GROUP_WHEN_DEFINES = 93;
95
- export const CONTROL_GROUP_WHEN_DEFINES_DIRECT = 94;
96
- export const CONTROL_GROUP_WHEN_TYPE = 95;
97
- export const CONTROL_EVALUATE = 96;
98
- export const CONTROL_DYNAMIC_ANCHOR_JUMP = 97;
99
- export const CONTROL_JUMP = 98;
14
+ export const ASSERTION_NOT_TYPE_STRICT_ANY = 13;
15
+ export const ASSERTION_TYPE_STRING_BOUNDED = 14;
16
+ export const ASSERTION_TYPE_STRING_UPPER = 15;
17
+ export const ASSERTION_TYPE_ARRAY_BOUNDED = 16;
18
+ export const ASSERTION_TYPE_ARRAY_UPPER = 17;
19
+ export const ASSERTION_TYPE_OBJECT_BOUNDED = 18;
20
+ export const ASSERTION_TYPE_OBJECT_UPPER = 19;
21
+ export const ASSERTION_REGEX = 20;
22
+ export const ASSERTION_STRING_SIZE_LESS = 21;
23
+ export const ASSERTION_STRING_SIZE_GREATER = 22;
24
+ export const ASSERTION_ARRAY_SIZE_LESS = 23;
25
+ export const ASSERTION_ARRAY_SIZE_GREATER = 24;
26
+ export const ASSERTION_OBJECT_SIZE_LESS = 25;
27
+ export const ASSERTION_OBJECT_SIZE_GREATER = 26;
28
+ export const ASSERTION_EQUAL = 27;
29
+ export const ASSERTION_EQUALS_ANY = 28;
30
+ export const ASSERTION_EQUALS_ANY_STRING_HASH = 29;
31
+ export const ASSERTION_GREATER_EQUAL = 30;
32
+ export const ASSERTION_LESS_EQUAL = 31;
33
+ export const ASSERTION_GREATER = 32;
34
+ export const ASSERTION_LESS = 33;
35
+ export const ASSERTION_UNIQUE = 34;
36
+ export const ASSERTION_DIVISIBLE = 35;
37
+ export const ASSERTION_TYPE_INTEGER_BOUNDED = 36;
38
+ export const ASSERTION_TYPE_INTEGER_BOUNDED_STRICT = 37;
39
+ export const ASSERTION_TYPE_INTEGER_LOWER_BOUND = 38;
40
+ export const ASSERTION_TYPE_INTEGER_LOWER_BOUND_STRICT = 39;
41
+ export const ASSERTION_STRING_TYPE = 40;
42
+ export const ASSERTION_PROPERTY_TYPE = 41;
43
+ export const ASSERTION_PROPERTY_TYPE_EVALUATE = 42;
44
+ export const ASSERTION_PROPERTY_TYPE_STRICT = 43;
45
+ export const ASSERTION_PROPERTY_TYPE_STRICT_EVALUATE = 44;
46
+ export const ASSERTION_PROPERTY_TYPE_STRICT_ANY = 45;
47
+ export const ASSERTION_PROPERTY_TYPE_STRICT_ANY_EVALUATE = 46;
48
+ export const ASSERTION_ARRAY_PREFIX = 47;
49
+ export const ASSERTION_ARRAY_PREFIX_EVALUATE = 48;
50
+ export const ASSERTION_OBJECT_PROPERTIES_SIMPLE = 49;
51
+ export const ANNOTATION_EMIT = 50;
52
+ export const ANNOTATION_TO_PARENT = 51;
53
+ export const ANNOTATION_BASENAME_TO_PARENT = 52;
54
+ export const EVALUATE = 53;
55
+ export const LOGICAL_NOT = 54;
56
+ export const LOGICAL_NOT_EVALUATE = 55;
57
+ export const LOGICAL_OR = 56;
58
+ export const LOGICAL_AND = 57;
59
+ export const LOGICAL_XOR = 58;
60
+ export const LOGICAL_CONDITION = 59;
61
+ export const LOGICAL_WHEN_TYPE = 60;
62
+ export const LOGICAL_WHEN_DEFINES = 61;
63
+ export const LOGICAL_WHEN_ARRAY_SIZE_GREATER = 62;
64
+ export const LOOP_PROPERTIES_UNEVALUATED = 63;
65
+ export const LOOP_PROPERTIES_UNEVALUATED_EXCEPT = 64;
66
+ export const LOOP_PROPERTIES_MATCH = 65;
67
+ export const LOOP_PROPERTIES_MATCH_CLOSED = 66;
68
+ export const LOOP_PROPERTIES = 67;
69
+ export const LOOP_PROPERTIES_EVALUATE = 68;
70
+ export const LOOP_PROPERTIES_REGEX = 69;
71
+ export const LOOP_PROPERTIES_REGEX_CLOSED = 70;
72
+ export const LOOP_PROPERTIES_STARTS_WITH = 71;
73
+ export const LOOP_PROPERTIES_EXCEPT = 72;
74
+ export const LOOP_PROPERTIES_TYPE = 73;
75
+ export const LOOP_PROPERTIES_TYPE_EVALUATE = 74;
76
+ export const LOOP_PROPERTIES_EXACTLY_TYPE_STRICT = 75;
77
+ export const LOOP_PROPERTIES_EXACTLY_TYPE_STRICT_HASH = 76;
78
+ export const LOOP_PROPERTIES_TYPE_STRICT = 77;
79
+ export const LOOP_PROPERTIES_TYPE_STRICT_EVALUATE = 78;
80
+ export const LOOP_PROPERTIES_TYPE_STRICT_ANY = 79;
81
+ export const LOOP_PROPERTIES_TYPE_STRICT_ANY_EVALUATE = 80;
82
+ export const LOOP_KEYS = 81;
83
+ export const LOOP_ITEMS = 82;
84
+ export const LOOP_ITEMS_FROM = 83;
85
+ export const LOOP_ITEMS_UNEVALUATED = 84;
86
+ export const LOOP_ITEMS_TYPE = 85;
87
+ export const LOOP_ITEMS_TYPE_STRICT = 86;
88
+ export const LOOP_ITEMS_TYPE_STRICT_ANY = 87;
89
+ export const LOOP_ITEMS_PROPERTIES_EXACTLY_TYPE_STRICT_HASH = 88;
90
+ export const LOOP_ITEMS_PROPERTIES_EXACTLY_TYPE_STRICT_HASH3 = 89;
91
+ export const LOOP_ITEMS_INTEGER_BOUNDED = 90;
92
+ export const LOOP_ITEMS_INTEGER_BOUNDED_SIZED = 91;
93
+ export const LOOP_CONTAINS = 92;
94
+ export const CONTROL_GROUP = 93;
95
+ export const CONTROL_GROUP_WHEN_DEFINES = 94;
96
+ export const CONTROL_GROUP_WHEN_DEFINES_DIRECT = 95;
97
+ export const CONTROL_GROUP_WHEN_TYPE = 96;
98
+ export const CONTROL_EVALUATE = 97;
99
+ export const CONTROL_DYNAMIC_ANCHOR_JUMP = 98;
100
+ export const CONTROL_JUMP = 99;
100
101
 
101
102
  export const INSTRUCTION_NAMES = {
102
103
  "AssertionFail": ASSERTION_FAIL,
@@ -112,6 +113,7 @@ export const INSTRUCTION_NAMES = {
112
113
  "AssertionTypeAny": ASSERTION_TYPE_ANY,
113
114
  "AssertionTypeStrict": ASSERTION_TYPE_STRICT,
114
115
  "AssertionTypeStrictAny": ASSERTION_TYPE_STRICT_ANY,
116
+ "AssertionNotTypeStrictAny": ASSERTION_NOT_TYPE_STRICT_ANY,
115
117
  "AssertionTypeStringBounded": ASSERTION_TYPE_STRING_BOUNDED,
116
118
  "AssertionTypeStringUpper": ASSERTION_TYPE_STRING_UPPER,
117
119
  "AssertionTypeArrayBounded": ASSERTION_TYPE_ARRAY_BOUNDED,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourcemeta/blaze",
3
- "version": "15.3.0",
3
+ "version": "15.4.1",
4
4
  "description": "A pure JavaScript port of the evaluator from Blaze, a high-performance C++ JSON Schema validator. Zero dependencies. Supports Draft 4, Draft 6, Draft 7, 2019-09, and 2020-12 with schema-specific code generation for near-native speed",
5
5
  "type": "module",
6
6
  "main": "./index.mjs",