ata-validator 1.31.0 → 1.31.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.
package/index.js CHANGED
@@ -1406,7 +1406,7 @@ class Validator {
1406
1406
  return this._compiled.validate(x);
1407
1407
  });
1408
1408
  }
1409
- return _errOnlyImpl(d);
1409
+ return _mustReject(_errOnlyImpl(d));
1410
1410
  };
1411
1411
 
1412
1412
  // Best path: combined validator (single pass, validates + collects errors)
@@ -1450,7 +1450,7 @@ class Validator {
1450
1450
  let _errPreferredImpl = null;
1451
1451
  const errPreferCombined = (d) => {
1452
1452
  if (_errPreferredImpl === null) _errPreferredImpl = combinedIfSafe() || errOnly;
1453
- return _errPreferredImpl(d);
1453
+ return _mustReject(_errPreferredImpl(d));
1454
1454
  };
1455
1455
 
1456
1456
  // The boolean engine is the verdict authority for these paths; the
@@ -1513,7 +1513,7 @@ class Validator {
1513
1513
  let impl = null;
1514
1514
  const onReject = (data) => {
1515
1515
  const combined = combinedIfSafe();
1516
- if (combined) { impl = combined; return combined(data); }
1516
+ if (combined) { impl = combined; return _mustReject(combined(data)); }
1517
1517
  return errOnly(data);
1518
1518
  };
1519
1519
  const hybridFn = jsFn._hybridFactory(VALID_RESULT, onReject);
@@ -2666,6 +2666,19 @@ Object.defineProperty(Validator.prototype, "~standard", {
2666
2666
  },
2667
2667
  });
2668
2668
 
2669
+ // The error resolvers run only after a verdict function has said no. If one
2670
+ // answers valid anyway, two generators disagree, and the verdict is the one
2671
+ // to keep: returning the resolver's answer is how a vacuous combined function
2672
+ // turned a rejection into an acceptance in validateJSON. The disagreement is
2673
+ // reported as a generic failure rather than hidden.
2674
+ const _VERDICT_DISAGREES = Object.freeze({
2675
+ valid: false,
2676
+ errors: Object.freeze([Object.freeze({ keyword: 'validation', instancePath: '', schemaPath: '#', params: Object.freeze({}), message: 'schema validation failed' })]),
2677
+ });
2678
+ function _mustReject(r) {
2679
+ return r && r.valid === false ? r : _VERDICT_DISAGREES;
2680
+ }
2681
+
2669
2682
  // Install the verdict method. Every place that binds isValidObject comes
2670
2683
  // through here, so a check registered with _extendVerdict survives the method
2671
2684
  // being replaced as the validator compiles further, which it does more than
@@ -968,6 +968,23 @@ function hasNestedIdScope(node, isRoot = true) {
968
968
  // only safe way out.
969
969
  const DECLINE = Symbol('ata.decline')
970
970
 
971
+ // The error and combined generators compile the subschemas of not, if, contains
972
+ // and their anyOf/oneOf closures with the boolean generator. That generator
973
+ // follows a reference back to the root with `_validate` and a reference cycle
974
+ // with a named function in its preamble, and neither exists inside the other
975
+ // two generators' functions: the first threw a ReferenceError on the first
976
+ // document that reached it, and the second cut the cycle, so the reference
977
+ // checked nothing. While `nestedBoolean` is set, genCode declines at those
978
+ // points instead, and the caller's generator declines the schema.
979
+ function nestedGenCode(schema, v, lines, ctx) {
980
+ ctx.nestedBoolean = (ctx.nestedBoolean || 0) + 1
981
+ try {
982
+ genCode(schema, v, lines, ctx)
983
+ } finally {
984
+ ctx.nestedBoolean--
985
+ }
986
+ }
987
+
971
988
  const CYCLE_DEPTH = 512
972
989
 
973
990
  // Declarations the guarded functions close over. Emitted once, ahead of them.
@@ -1878,6 +1895,7 @@ function genCode(schema, v, lines, ctx, knownType) {
1878
1895
  if (schema.$ref) {
1879
1896
  // Self-reference "#" — recursive call to root validator
1880
1897
  if (schema.$ref === '#') {
1898
+ if (ctx.nestedBoolean) throw DECLINE
1881
1899
  ctx.usesRecursion = true
1882
1900
  lines.push(`if(!_validate(${v}))return false`)
1883
1901
  if (!hasSiblings) return
@@ -1920,7 +1938,7 @@ function genCode(schema, v, lines, ctx, knownType) {
1920
1938
  }
1921
1939
  lines.push(`if(!${fnName}(${v}))return false`)
1922
1940
  if (!hasSiblings) return
1923
- } else if (ctx.refStack.has(schema.$ref)) { if (!hasSiblings) return }
1941
+ } else if (ctx.refStack.has(schema.$ref)) { if (ctx.nestedBoolean) throw DECLINE; if (!hasSiblings) return }
1924
1942
  else {
1925
1943
  ctx.refStack.add(schema.$ref)
1926
1944
  genCode(ctx.rootDefs[defName], v, lines, ctx, knownType)
@@ -1932,7 +1950,7 @@ function genCode(schema, v, lines, ctx, knownType) {
1932
1950
  const entry = ctx.rootDefs && ctx.rootDefs[schema.$ref]
1933
1951
  const anchorTarget = entry && entry.raw ? entry.raw : (ctx.anchors && ctx.anchors[schema.$ref])
1934
1952
  if (anchorTarget) {
1935
- if (ctx.refStack.has(schema.$ref)) { if (!hasSiblings) return }
1953
+ if (ctx.refStack.has(schema.$ref)) { if (ctx.nestedBoolean) throw DECLINE; if (!hasSiblings) return }
1936
1954
  else {
1937
1955
  ctx.refStack.add(schema.$ref)
1938
1956
  genCode(anchorTarget, v, lines, ctx, knownType)
@@ -1975,11 +1993,13 @@ function genCode(schema, v, lines, ctx, knownType) {
1975
1993
  const target = ctx.anchors[anchorKey]
1976
1994
  if (target === ctx.rootSchema) {
1977
1995
  // Self-recursive: generate _validate(v) call
1996
+ if (ctx.nestedBoolean) throw DECLINE
1978
1997
  ctx.usesRecursion = true
1979
1998
  lines.push(`if(!_validate(${v}))return false`)
1980
1999
  } else {
1981
2000
  // Different schema: inline the target validation
1982
2001
  const refKey = '$dynamicRef:' + anchorKey
2002
+ if (ctx.refStack.has(refKey) && ctx.nestedBoolean) throw DECLINE
1983
2003
  if (!ctx.refStack.has(refKey)) {
1984
2004
  ctx.refStack.add(refKey)
1985
2005
  genCode(target, v, lines, ctx, knownType)
@@ -4178,7 +4198,7 @@ function genCodeE(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4178
4198
  if (schema.contains !== undefined) {
4179
4199
  const ci = ctx.varCounter++
4180
4200
  const subLines = []
4181
- genCode(schema.contains, `_cv`, subLines, ctx)
4201
+ nestedGenCode(schema.contains, `_cv`, subLines, ctx)
4182
4202
  const fnBody = subLines.length === 0 ? `return true` : `${subLines.join(';')};return true`
4183
4203
  const minC = schema.minContains !== undefined ? schema.minContains : 1
4184
4204
  const maxC = schema.maxContains
@@ -4210,7 +4230,7 @@ function genCodeE(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4210
4230
  // not
4211
4231
  if (schema.not !== undefined) {
4212
4232
  const subLines = []
4213
- genCode(schema.not, '_nv', subLines, ctx)
4233
+ nestedGenCode(schema.not, '_nv', subLines, ctx)
4214
4234
  const nfn = subLines.length === 0 ? `function(_nv){return true}` : `function(_nv){${subLines.join(';')};return true}`
4215
4235
  const fi = ctx.varCounter++
4216
4236
  lines.push(`{const _nf${fi}=${nfn};if(_nf${fi}(${v})){${fail('not', 'not', '{}', "'must NOT be valid'")}}}`)
@@ -4219,7 +4239,7 @@ function genCodeE(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4219
4239
  // if/then/else
4220
4240
  if (schema.if !== undefined) {
4221
4241
  const ifLines = []
4222
- genCode(schema.if, '_iv', ifLines, ctx)
4242
+ nestedGenCode(schema.if, '_iv', ifLines, ctx)
4223
4243
  const fi = ctx.varCounter++
4224
4244
  const ifFn = ifLines.length === 0
4225
4245
  ? `function(_iv){return true}`
@@ -4324,22 +4344,34 @@ function compileToJSCombined(schema, VALID_RESULT, schemaMap, userFormats) {
4324
4344
  const ctx = { varCounter: 0, helperCode: [], shared: [], closureVars: ['_cpLen'], closureVals: [_cpLen],
4325
4345
  rootDefs: cRootDefs, refStack: new Set(), schemaMap: schemaMap || null, anchors: cAnchors, rootSchema: schema, userFormats: userFormats || null }
4326
4346
  const lines = []
4327
- genCodeC(schema, 'd', '', lines, ctx, '#')
4347
+ try {
4348
+ genCodeC(schema, 'd', '', lines, ctx, '#')
4349
+ } catch (e) {
4350
+ if (e === DECLINE) return null
4351
+ throw e
4352
+ }
4328
4353
  if (lines.length === 0) return () => VALID_RESULT
4329
4354
 
4330
- // Use factory pattern: closure vars (regexes, etc.) created once, not per call
4331
- const closureParams = ctx.closureVars.join(',')
4332
- // Lazy error array — no allocation for valid data (the common case)
4355
+ // Use factory pattern: closure vars (regexes, etc.) created once, not per call.
4356
+ // The helpers are constants too and are declared in the factory: inside the
4357
+ // function they were rebuilt on every call. `__ataSafeRe` is bound when a
4358
+ // helper compiles a pattern through it, which the boolean generator does for
4359
+ // subschemas under not/if/contains; without the binding those threw a
4360
+ // ReferenceError on the first document that reached them.
4361
+ const closureNames = ctx.usesSafeRe ? [...ctx.closureVars, '__ataSafeRe'] : ctx.closureVars
4362
+ const closureArgs = ctx.usesSafeRe ? [...ctx.closureVals, compileSafe] : ctx.closureVals
4363
+ const closureParams = closureNames.join(',')
4364
+ const helpers = ctx.helperCode.length ? ctx.helperCode.join('\n ') + '\n ' : ''
4365
+ // Lazy error array: no allocation for valid data (the common case)
4333
4366
  const inner = `let _e;\n ` +
4334
- (ctx.helperCode.length ? ctx.helperCode.join('\n ') + '\n ' : '') +
4335
4367
  lines.join('\n ') +
4336
4368
  `\n return _e?{valid:false,errors:_e}:R`
4337
4369
 
4338
4370
  try {
4339
- if (typeof process !== 'undefined' && process.env && process.env.ATA_DUMP_CODEGEN) console.log('=== COMBINED CODEGEN ===\n' + inner + '\n=== CLOSURE VARS: ' + ctx.closureVars.length + ' ===')
4371
+ if (typeof process !== 'undefined' && process.env && process.env.ATA_DUMP_CODEGEN) console.log('=== COMBINED CODEGEN ===\n' + helpers + inner + '\n=== CLOSURE VARS: ' + ctx.closureVars.length + ' ===')
4340
4372
  const factory = new Function('R' + (closureParams ? ',' + closureParams : ''),
4341
- `return function(d){${inner}}`)
4342
- return factory(VALID_RESULT, ...ctx.closureVals)
4373
+ `${helpers}return function(d){${inner}}`)
4374
+ return factory(VALID_RESULT, ...closureArgs)
4343
4375
  } catch (e) {
4344
4376
  if (typeof process !== 'undefined' && process.env && process.env.ATA_DEBUG) console.error('compileToJSCombined error:', e.message, '\n', inner.slice(0, 500))
4345
4377
  return null
@@ -4411,17 +4443,17 @@ function genCodeC(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4411
4443
  const anchorKey = schema.$dynamicRef.startsWith('#') ? schema.$dynamicRef : '#' + schema.$dynamicRef
4412
4444
  if (ctx.anchors && ctx.anchors[anchorKey]) {
4413
4445
  const target = ctx.anchors[anchorKey]
4414
- if (target === ctx.rootSchema) {
4415
- // Self-recursive: bail to non-combined path (combined doesn't support named recursion)
4416
- // Just skip — the hybrid path will handle this via jsFn + errFn
4417
- } else {
4418
- const refKey = '$dynamicRef:' + anchorKey
4419
- if (!ctx.refStack.has(refKey)) {
4420
- ctx.refStack.add(refKey)
4421
- genCodeC(target, v, pathExpr, lines, ctx, schemaPrefix)
4422
- ctx.refStack.delete(refKey)
4423
- }
4424
- }
4446
+ // This generator has no named functions, so it cannot follow a reference
4447
+ // back to the root or around a cycle. It used to emit nothing in both
4448
+ // cases, which the function then answered as valid: a document the other
4449
+ // generators reject passed through validateJSON. It declines instead,
4450
+ // and the schema takes the error generator.
4451
+ if (target === ctx.rootSchema) throw DECLINE
4452
+ const refKey = '$dynamicRef:' + anchorKey
4453
+ if (ctx.refStack.has(refKey)) throw DECLINE
4454
+ ctx.refStack.add(refKey)
4455
+ genCodeC(target, v, pathExpr, lines, ctx, schemaPrefix)
4456
+ ctx.refStack.delete(refKey)
4425
4457
  }
4426
4458
  }
4427
4459
 
@@ -4904,7 +4936,7 @@ function genCodeC(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4904
4936
  if (schema.contains !== undefined) {
4905
4937
  const ci = ctx.varCounter++
4906
4938
  const subLines = []
4907
- genCode(schema.contains, `_cv`, subLines, ctx)
4939
+ nestedGenCode(schema.contains, `_cv`, subLines, ctx)
4908
4940
  const fnBody = subLines.length === 0 ? `return true` : `${subLines.join(';')};return true`
4909
4941
  const minC = schema.minContains !== undefined ? schema.minContains : 1
4910
4942
  const maxC = schema.maxContains
@@ -4920,20 +4952,20 @@ function genCodeC(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4920
4952
  // anyOf
4921
4953
  if (schema.anyOf) {
4922
4954
  const fi = ctx.varCounter++
4923
- const fns = schema.anyOf.map(sub => { const sl = []; genCode(sub, '_av', sl, ctx); return sl.length === 0 ? `function(_av){return true}` : `function(_av){${sl.join(';')};return true}` })
4955
+ const fns = schema.anyOf.map(sub => { const sl = []; nestedGenCode(sub, '_av', sl, ctx); return sl.length === 0 ? `function(_av){return true}` : `function(_av){${sl.join(';')};return true}` })
4924
4956
  lines.push(`{const _af${fi}=[${fns.join(',')}];let _am=false;for(let _ai=0;_ai<_af${fi}.length;_ai++){if(_af${fi}[_ai](${v})){_am=true;break}}if(!_am){${fail('anyOf', 'anyOf', '{}', "'must match a schema in anyOf'")}}}`)
4925
4957
  }
4926
4958
 
4927
4959
  // oneOf
4928
4960
  if (schema.oneOf) {
4929
4961
  const fi = ctx.varCounter++
4930
- const fns = schema.oneOf.map(sub => { const sl = []; genCode(sub, '_ov', sl, ctx); return sl.length === 0 ? `function(_ov){return true}` : `function(_ov){${sl.join(';')};return true}` })
4962
+ const fns = schema.oneOf.map(sub => { const sl = []; nestedGenCode(sub, '_ov', sl, ctx); return sl.length === 0 ? `function(_ov){return true}` : `function(_ov){${sl.join(';')};return true}` })
4931
4963
  lines.push(`{const _of${fi}=[${fns.join(',')}];let _oc=0;for(let _oi=0;_oi<_of${fi}.length;_oi++){if(_of${fi}[_oi](${v}))_oc++;if(_oc>1)break}if(_oc!==1){${fail('oneOf', 'oneOf', '{}', "'must match exactly one schema in oneOf'")}}}`)
4932
4964
  }
4933
4965
 
4934
4966
  // not
4935
4967
  if (schema.not !== undefined) {
4936
- const sl = []; genCode(schema.not, '_nv', sl, ctx)
4968
+ const sl = []; nestedGenCode(schema.not, '_nv', sl, ctx)
4937
4969
  const nfn = sl.length === 0 ? `function(_nv){return true}` : `function(_nv){${sl.join(';')};return true}`
4938
4970
  const fi = ctx.varCounter++
4939
4971
  lines.push(`{const _nf${fi}=${nfn};if(_nf${fi}(${v})){${fail('not', 'not', '{}', "'must NOT be valid'")}}}`)
@@ -4941,7 +4973,7 @@ function genCodeC(schema, v, pathExpr, lines, ctx, schemaPrefix) {
4941
4973
 
4942
4974
  // if/then/else
4943
4975
  if (schema.if !== undefined) {
4944
- const sl = []; genCode(schema.if, '_iv', sl, ctx)
4976
+ const sl = []; nestedGenCode(schema.if, '_iv', sl, ctx)
4945
4977
  const fi = ctx.varCounter++
4946
4978
  const ifFn = sl.length === 0 ? `function(_iv){return true}` : `function(_iv){${sl.join(';')};return true}`
4947
4979
  lines.push(`{const _if${fi}=${ifFn}`)
package/lib/version.js CHANGED
@@ -7,4 +7,4 @@
7
7
  //
8
8
  // Kept in lockstep with package.json by `tests/test_version_sync.js`.
9
9
 
10
- module.exports = '1.31.0';
10
+ module.exports = '1.31.1';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ata-validator",
3
- "version": "1.31.0",
3
+ "version": "1.31.1",
4
4
  "description": "JSON Schema validation that compiles for speed and still runs where code generation is blocked. Compiled and interpreted engines answer identically at 100% of the official suite. TypeScript inference, Standard Schema V1, and a build step that emits dependency-free modules.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -51,7 +51,7 @@
51
51
  "release:check": "node scripts/regen-safe-regex-source.js && node tests/test_pack_purity.js && node scripts/check-doc-coverage.js && node tests/test_error_codes_lock.js && node tests/test_safe_regex_source_sync.js && node tests/test_version_sync.js",
52
52
  "build": "cmake-js build --target ata",
53
53
  "rebuild": "cmake-js rebuild --target ata",
54
- "test": "node test.js && node tests/test_removed_aot_methods.js && node tests/test_no_native.js && node tests/test_no_eval.js && node tests/test_property_dependencies.js && node tests/test_v1_dialect.js && node tests/test_buffer_path_parity.js && node tests/test_buffer_gate.js && node tests/test_scanner_differential.js && node tests/test_validate_json_scanner_cost.js && node tests/test_buffer_reject_cost.js && node tests/test_nan_verdict.js && node tests/test_remove_additional_nested.js && node tests/test_exclusive_bounds.js && node tests/test_engine_differential.js && node tests/test_error_shape_differential.js && node tests/test_output_format.js && node tests/test_retry_message.js && node tests/test_describe_schema.js && node tests/test_aot_parse.js && node tests/test_draft7_semantics.js && node tests/test_metaschema_ref.js && node tests/test_pure_js_unsupported.js && node tests/test_native_load_order.js && node tests/test_pack_purity.js && node tests/test_make_native_package.js && node tests/test_browser_nofs.js && node tests/test_browser_imports_guard.js && node tests/test_version_sync.js && node tests/test_native_loaded.js && node tests/test_safe_regex_source_sync.js && node tests/test_t_builder.js && node tests/test_async_refine.js && node tests/test_safe_regex.js && node tests/test_safe_regex_integration.js && node tests/test_aot_build.js && node tests/test_aot_differential.js && node tests/test_aot_cli_build.js && node tests/test_aot_cli_smoke.js && node tests/test_bundle_standalone.js && node tests/test_standalone_anyof.js && node tests/test_standalone_formats.js && node tests/test_aot_format_mode.js && node tests/test_aot_additional_props_errors.js && node tests/test_id_anchor_refs.js && node tests/test_engine_routing.js && node tests/test_engine_option.js && node tests/test_compile_cache_order.js && node tests/test_engine_diagnostic.js && node tests/test_format_engine_parity.js && node tests/test_error_accumulator_collision.js && node tests/test_uri_helper_parity.js && node tests/test_uri_fast_path.js && node tests/test_extend_verdict.js && node tests/test_ipv4_regex.js && node tests/test_ipv6_fast_path.js && node tests/test_formats_single_pass.js && node tests/test_email_format_cost.js && node tests/test_format_single_error.js && node tests/test_defs_pointer_alias.js && node tests/test_cross_doc_root_ref.js && node tests/test_codegen_entrypoint_agreement.js && node tests/test_hybrid_agreement.js && node tests/test_codegen_edge_shapes.js && node tests/test_deferred_def_scope.js && node tests/test_node_scoped_ctx_flags.js && node tests/test_fast_slot_exhaustion.js && node tests/test_ajv_errors.js && node tests/test_custom_keywords.js && node tests/test_strict_schema.js && node tests/test_aot_external_checks.js && node tests/test_ajv_parity.js && node tests/test_user_format_error_path.js && node tests/test_unevaluated_error_path.js && node tests/test_unevaluated_error_shape.js && node tests/test_pattern_properties_errors.js && node tests/test_additional_properties_scaling.js && node tests/test_additional_props_combined_cost.js && node tests/test_no_input_mutation.js && node tests/test_typed_validator_runner.js && node tests/test_define_schema.js && node tests/test_error_codes_lock.js && node tests/test_error_code_lookup.js && node tests/test_error_order.js && node tests/test_error_order_ordinal.js && node tests/test_rejection_shape.js && node tests/test_lazy_normalization.js && node tests/test_value_equality.js && node tests/test_vocabulary.js && node tests/test_schema_scan.js && node tests/test_lazy_errors.js && node tests/test_single_pass_errors.js && node tests/test_lazy_json_errors.js && node tests/test_lazy_instance.js && node tests/test_cyclic_input.js && node tests/test_native_error_codes.js && node tests/test_verdict_preprocess.js && node tests/test_defaults_own_keys.js && node tests/test_plan_compiler.js && node tests/test_nullable.js && node tests/test_validate_and_parse.js && node tests/test_validate_data.js && node tests/test_enrich_error.js && node tests/test_enrich_received.js && node tests/test_rich_errors_optout.js && node tests/test_error_messages.js && node tests/test_source_positions.js && node tests/fuzz_positions.js && node tests/test_malformed_json_termination.js && node tests/test_data_positions.js && node tests/test_targeted_positions.js && node tests/test_position_map_cost.js && node tests/test_targeted_positions_cost.js && node tests/test_aot_staleness.js && node tests/test_file_positions.js && node tests/test_aot_positions_cost.js && node tests/test_schema_hash.js && node tests/test_render_shared.js && node tests/test_renderers.js && node tests/test_additive_fields.js && node tests/test_diagnostic_source.js && node tests/test_diagnose.js && node tests/test_correlate.js && node tests/test_diagnostics_score.js && node tests/test_runtime_error_dx.js && node tests/test_aot_error_dx.js && node tests/test_abort_early.js && node tests/test_branch_collapse.js && node tests/test_suggestions.js && node tests/test_cli_validate.js && node tests/test_cli_version.js && node benchmark/bench_aot_size.mjs",
54
+ "test": "node test.js && node tests/test_removed_aot_methods.js && node tests/test_no_native.js && node tests/test_no_eval.js && node tests/test_property_dependencies.js && node tests/test_v1_dialect.js && node tests/test_buffer_path_parity.js && node tests/test_buffer_gate.js && node tests/test_scanner_differential.js && node tests/test_validate_json_scanner_cost.js && node tests/test_buffer_reject_cost.js && node tests/test_nan_verdict.js && node tests/test_remove_additional_nested.js && node tests/test_exclusive_bounds.js && node tests/test_engine_differential.js && node tests/test_error_shape_differential.js && node tests/test_output_format.js && node tests/test_retry_message.js && node tests/test_describe_schema.js && node tests/test_aot_parse.js && node tests/test_draft7_semantics.js && node tests/test_metaschema_ref.js && node tests/test_pure_js_unsupported.js && node tests/test_native_load_order.js && node tests/test_pack_purity.js && node tests/test_make_native_package.js && node tests/test_browser_nofs.js && node tests/test_browser_imports_guard.js && node tests/test_version_sync.js && node tests/test_native_loaded.js && node tests/test_safe_regex_source_sync.js && node tests/test_t_builder.js && node tests/test_async_refine.js && node tests/test_safe_regex.js && node tests/test_safe_regex_integration.js && node tests/test_aot_build.js && node tests/test_aot_differential.js && node tests/test_aot_cli_build.js && node tests/test_aot_cli_smoke.js && node tests/test_bundle_standalone.js && node tests/test_standalone_anyof.js && node tests/test_standalone_formats.js && node tests/test_aot_format_mode.js && node tests/test_aot_additional_props_errors.js && node tests/test_id_anchor_refs.js && node tests/test_engine_routing.js && node tests/test_engine_option.js && node tests/test_compile_cache_order.js && node tests/test_engine_diagnostic.js && node tests/test_format_engine_parity.js && node tests/test_error_accumulator_collision.js && node tests/test_uri_helper_parity.js && node tests/test_uri_fast_path.js && node tests/test_extend_verdict.js && node tests/test_ipv4_regex.js && node tests/test_ipv6_fast_path.js && node tests/test_nested_recursion_decline.js && node tests/test_formats_single_pass.js && node tests/test_email_format_cost.js && node tests/test_format_single_error.js && node tests/test_defs_pointer_alias.js && node tests/test_cross_doc_root_ref.js && node tests/test_codegen_entrypoint_agreement.js && node tests/test_hybrid_agreement.js && node tests/test_codegen_edge_shapes.js && node tests/test_deferred_def_scope.js && node tests/test_node_scoped_ctx_flags.js && node tests/test_fast_slot_exhaustion.js && node tests/test_ajv_errors.js && node tests/test_custom_keywords.js && node tests/test_strict_schema.js && node tests/test_aot_external_checks.js && node tests/test_ajv_parity.js && node tests/test_user_format_error_path.js && node tests/test_unevaluated_error_path.js && node tests/test_unevaluated_error_shape.js && node tests/test_pattern_properties_errors.js && node tests/test_additional_properties_scaling.js && node tests/test_additional_props_combined_cost.js && node tests/test_no_input_mutation.js && node tests/test_typed_validator_runner.js && node tests/test_define_schema.js && node tests/test_error_codes_lock.js && node tests/test_error_code_lookup.js && node tests/test_error_order.js && node tests/test_error_order_ordinal.js && node tests/test_rejection_shape.js && node tests/test_lazy_normalization.js && node tests/test_value_equality.js && node tests/test_vocabulary.js && node tests/test_schema_scan.js && node tests/test_lazy_errors.js && node tests/test_single_pass_errors.js && node tests/test_lazy_json_errors.js && node tests/test_lazy_instance.js && node tests/test_cyclic_input.js && node tests/test_native_error_codes.js && node tests/test_verdict_preprocess.js && node tests/test_defaults_own_keys.js && node tests/test_plan_compiler.js && node tests/test_nullable.js && node tests/test_validate_and_parse.js && node tests/test_validate_data.js && node tests/test_enrich_error.js && node tests/test_enrich_received.js && node tests/test_rich_errors_optout.js && node tests/test_error_messages.js && node tests/test_source_positions.js && node tests/fuzz_positions.js && node tests/test_malformed_json_termination.js && node tests/test_data_positions.js && node tests/test_targeted_positions.js && node tests/test_position_map_cost.js && node tests/test_targeted_positions_cost.js && node tests/test_aot_staleness.js && node tests/test_file_positions.js && node tests/test_aot_positions_cost.js && node tests/test_schema_hash.js && node tests/test_render_shared.js && node tests/test_renderers.js && node tests/test_additive_fields.js && node tests/test_diagnostic_source.js && node tests/test_diagnose.js && node tests/test_correlate.js && node tests/test_diagnostics_score.js && node tests/test_runtime_error_dx.js && node tests/test_aot_error_dx.js && node tests/test_abort_early.js && node tests/test_branch_collapse.js && node tests/test_suggestions.js && node tests/test_cli_validate.js && node tests/test_cli_version.js && node benchmark/bench_aot_size.mjs",
55
55
  "bench:size": "node benchmark/bench_aot_size.mjs",
56
56
  "test:suite": "node tests/run_suite.js && node tests/run_suite.js draft7 && node tests/run_suite.js v1",
57
57
  "test:compat": "node tests/test_compat.js",
@@ -121,13 +121,13 @@
121
121
  "LICENSE"
122
122
  ],
123
123
  "optionalDependencies": {
124
- "@ata-validator/native-darwin-arm64": "1.31.0",
125
- "@ata-validator/native-darwin-x64": "1.31.0",
126
- "@ata-validator/native-linux-arm64-gnu": "1.31.0",
127
- "@ata-validator/native-linux-arm64-musl": "1.31.0",
128
- "@ata-validator/native-linux-x64-gnu": "1.31.0",
129
- "@ata-validator/native-linux-x64-musl": "1.31.0",
130
- "@ata-validator/native-win32-x64": "1.31.0"
124
+ "@ata-validator/native-darwin-arm64": "1.31.1",
125
+ "@ata-validator/native-darwin-x64": "1.31.1",
126
+ "@ata-validator/native-linux-arm64-gnu": "1.31.1",
127
+ "@ata-validator/native-linux-arm64-musl": "1.31.1",
128
+ "@ata-validator/native-linux-x64-gnu": "1.31.1",
129
+ "@ata-validator/native-linux-x64-musl": "1.31.1",
130
+ "@ata-validator/native-win32-x64": "1.31.1"
131
131
  },
132
132
  "peerDependencies": {
133
133
  "yaml": "^2.0.0"