ata-validator 1.41.0 → 1.42.0

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.
@@ -135,10 +135,15 @@ function install(deps) {
135
135
  // Rollback marks: the two array lengths and the contiguous count.
136
136
  function pLen(rec) { return rec.props === null ? 0 : rec.props.length; }
137
137
  function xLen(rec) { return rec.x === null ? 0 : rec.x.length; }
138
+ // Writing an array's length is a slow path in V8 even when it does not
139
+ // change it, and most undos change nothing: a branch that failed before
140
+ // marking anything. So the length is written only when it moves.
138
141
  function undo(rec, pl, n0, xl) {
139
- if (rec.props !== null) rec.props.length = pl;
142
+ const p = rec.props;
143
+ if (p !== null && p.length !== pl) p.length = pl;
140
144
  rec.n = n0;
141
- if (rec.x !== null) rec.x.length = xl;
145
+ const x = rec.x;
146
+ if (x !== null && x.length !== xl) x.length = xl;
142
147
  }
143
148
 
144
149
  // The value-level keywords of one node, compiled. evalLeafV() answers the
package/lib/rejections.js CHANGED
@@ -261,9 +261,26 @@ const COLLAPSE_CODES = new Set(['ATA4001', 'ATA4002', 'ATA4003']);
261
261
  function stripOrdinal(e) {
262
262
  if (e === null || typeof e !== 'object') return e;
263
263
  // Generated code keeps errors at a fixed path as frozen literals shared by
264
- // every call. The caller gets its own copy, as it always has, so an error it
265
- // edits (a translated message) is its own and editing it does not throw.
266
- if (e._o === undefined && e.docUrl === undefined && (e.code === undefined || COLLAPSE_CODES.has(e.code)) && !e.branchErrors) return Object.isFrozen(e) ? { ...e } : e;
264
+ // every call, marked with a non-enumerable `_s` (see sharedErr in
265
+ // lib/js-compiler.js). The caller gets its own copy, as it always has, so an
266
+ // error it edits (a translated message) is its own and editing it does not
267
+ // throw. Those literals hold the five keys of this shape and nothing else
268
+ // enumerable, so a literal of the same shape copies them: spreading one cost
269
+ // twice as much, and Object.isFrozen, which used to pick them out, more than
270
+ // the copy itself.
271
+ if (e._s === true && e.code === undefined && e.docUrl === undefined && e.branchErrors === undefined) {
272
+ return { keyword: e.keyword, instancePath: e.instancePath, schemaPath: e.schemaPath, params: e.params, message: e.message };
273
+ }
274
+ // A collapsed oneOf/anyOf error has one of the two shapes __ataCollapse in
275
+ // lib/branch-collapse.js builds, the only place these codes come from. Its
276
+ // fields are copied by name, in that order, without the ordinal: walking
277
+ // its keys with for-in was most of the cost of reading such an error.
278
+ if (e.path !== undefined && e.docUrl === undefined && COLLAPSE_CODES.has(e.code)) {
279
+ const out = { code: e.code, keyword: e.keyword, instancePath: e.instancePath, path: e.path, schemaPath: e.schemaPath, message: e.message, params: e.params };
280
+ if ('branchErrors' in e) out.branchErrors = Array.isArray(e.branchErrors) ? e.branchErrors.map(stripOrdinal) : e.branchErrors;
281
+ return out;
282
+ }
283
+ if (e._o === undefined && e.docUrl === undefined && (e.code === undefined || COLLAPSE_CODES.has(e.code)) && !e.branchErrors) return e._s === true ? { ...e } : e;
267
284
  const out = {};
268
285
  for (const k in e) {
269
286
  if (k === '_o' || k === 'docUrl') continue;
@@ -232,9 +232,16 @@ const VALID_RESULT = Object.freeze({ valid: true, errors: Object.freeze([]) });
232
232
  // How many calls a validator answers through its verdict function before its
233
233
  // validate() and validateJSON() compile the single-function hybrid.
234
234
  const HYBRID_TIER_CALLS = 64;
235
+ // A frozen error object shared between calls carries a non-enumerable `_s`, so
236
+ // the reader that hands errors out copies it (lib/rejections.js stripOrdinal)
237
+ // without asking Object.isFrozen, which costs more than the copy.
238
+ function _sharedError(e) {
239
+ Object.defineProperty(e, '_s', { value: true });
240
+ return Object.freeze(e);
241
+ }
235
242
  const ABORT_EARLY_RESULT = Object.freeze({
236
243
  valid: false,
237
- errors: Object.freeze([Object.freeze({
244
+ errors: Object.freeze([_sharedError({
238
245
  code: 'ATA9000',
239
246
  message: 'validation failed',
240
247
  keyword: '__abort_early__',
@@ -292,7 +299,7 @@ function resolveSchemaByPath(rootSchema, schemaPath) {
292
299
  //
293
300
  // A failing route sees the same handful of schemaPaths over and over, which is
294
301
  // what makes the first one worth having.
295
- const { LazyRejection, RichRejection, LazyJsonRejection, _enrichLazy, presentErrors, needsOrdering, sortErrorsBySchemaOrder } = require('./rejections');
302
+ const { LazyRejection, RichRejection, LazyJsonRejection, _enrichLazy, presentErrors, needsOrdering, sortErrorsBySchemaOrder, stripOrdinal } = require('./rejections');
296
303
 
297
304
  // Text that does not parse, reported the same way on every path and platform:
298
305
  // ATA9001 with the parser's own message. The native addon used to say only
@@ -1026,14 +1033,27 @@ class Validator {
1026
1033
  // locals and on this object rather than on the instance: every call reads
1027
1034
  // `validate` off the instance, and three more own properties made that
1028
1035
  // read slower across the suite's validators.
1029
- let _rejectBase = null, _rejectPresented = null, _rejectPlain = false;
1036
+ let _rejectBase = null, _rejectPresented = null, _rejectPlain = false, _oneShotRich = null, _richBuilder = null, _oneShotPlain = false, _isCleanShape = null, _onePassOf = null, _isCombined = null;
1030
1037
  if (jsFn) {
1031
1038
  const _cg = {
1032
1039
  jsFn, _isCodegen, preprocess, fusedRemove, options, schemaObj, useSimdjsonForLarge, _buildCombined, _buildErr,
1033
- combined: () => jsCombinedFn, err: () => jsErrFn, rejectBase: null,
1040
+ combined: () => jsCombinedFn, err: () => jsErrFn, rejectBase: null, richBuilder: null, oneShotPlain: false, isCleanShape: null, isCombined: null, onePassOf: null,
1041
+ // The combined function with errors built enriched where they happen,
1042
+ // for a validator whose errors are read with richErrors on and no
1043
+ // schema source to attach frames from (see makeRich).
1044
+ buildRich: (this._richErrors && !this._schemaPositions && !this._usesKeywords)
1045
+ ? () => compileToJSCombined(schemaObj, VALID_RESULT, sm, this._userFormats, { runtimeShape: true, rich: true }) || null
1046
+ : null,
1047
+ oneShotRich: null,
1034
1048
  };
1035
1049
  _codegen.installPaths.call(this, _cg);
1036
1050
  _rejectBase = _cg.rejectBase;
1051
+ _oneShotRich = _cg.oneShotRich;
1052
+ _richBuilder = _cg.richBuilder;
1053
+ _oneShotPlain = _cg.oneShotPlain;
1054
+ _isCleanShape = _cg.isCleanShape;
1055
+ _onePassOf = _cg.onePassOf;
1056
+ _isCombined = _cg.isCombined;
1037
1057
  } else {
1038
1058
  // No JS codegen: the interpreted engine, with or without the addon. The
1039
1059
  // buffer APIs come from _installBufferApis on first use, as they do on
@@ -1264,10 +1284,67 @@ class Validator {
1264
1284
  }
1265
1285
  return _withExtra(raw, data);
1266
1286
  };
1267
- this.validate = (data) => {
1287
+ // validate() answers from the verdict and builds the errors when they
1288
+ // are read. What builds them improves once they are being read: from
1289
+ // the third read the combined function is called directly, without the
1290
+ // rejection layers, and with richErrors on it builds the errors
1291
+ // enriched where they fail (see makeRich in lib/enrich-site.js) rather
1292
+ // than plain and enriched afterwards. Built on the second read, not the
1293
+ // first, so a first rejection still compiles one generator. The rejection
1294
+ // holds `_errorsOf`, which dispatches to whichever builder is current.
1295
+ let _errorsNow = _buildErrors;
1296
+ let _onePass = null;
1297
+ let _richLater = (_plain !== null && _oneShotRich !== null && _richBuilder !== null && !_extra) ? 1 : 0;
1298
+ const _errorsOf = (data) => {
1299
+ if (_richLater !== 0 && ++_richLater > 2) {
1300
+ _richLater = 0;
1301
+ const combRich = _oneShotRich();
1302
+ if (combRich) {
1303
+ const clean = !this._richErrors && _isCleanShape !== null && _isCleanShape(combRich);
1304
+ _errorsNow = _richBuilder(combRich, this._schemaObj, (raw, d) => presentErrors(raw, d, null, this, this._schemaObj, this._richErrors ? _enrichLazy : null), _verdictFallback, _oneShotPlain, clean);
1305
+ _errorsOf.final = !_oneShotPlain;
1306
+ // Plain errors from the combined function: from here validate()
1307
+ // is that function in its result shape, one pass that decides,
1308
+ // collects and returns, instead of a verdict now and a second
1309
+ // pass when the errors are read. A caller reading only `.valid`
1310
+ // pays the collecting pass (about twice the verdict on a document
1311
+ // that fails); with richErrors on the errors stay lazy, since
1312
+ // enriching costs far more.
1313
+ // Collapsed branches are presented inside the one-pass function
1314
+ // (see onePassOf), so any plain combined function qualifies.
1315
+ // Plain errors only. With richErrors on, enriching is most of what
1316
+ // a read costs and the lazy path answers an accepted document from
1317
+ // the verdict, so one pass measured no faster on rejections and
1318
+ // slower on acceptances.
1319
+ const onePass = !this._richErrors && _onePassOf !== null && _isCombined !== null && _isCombined(combRich) ? _onePassOf(EMPTY_ERRORS, _plainValidate) : null;
1320
+ if (onePass) { _onePass = onePass; self.validate = onePass; }
1321
+ }
1322
+ }
1323
+ return _errorsNow(data);
1324
+ };
1325
+ _errorsOf.final = false;
1326
+ const _plainValidate = (data) => {
1268
1327
  if (_fast(data)) return { valid: true, data, errors: EMPTY_ERRORS };
1269
- return new LazyRejection(_buildErrors, data, _buildRawErrors);
1328
+ return new LazyRejection(_errorsOf, data, _buildRawErrors);
1270
1329
  };
1330
+ // Past its first calls, validate() is the generated checks returning
1331
+ // these same results directly (jsFn._resultFactory): no wrapper between
1332
+ // the caller and the checks, and allocation sites of its own. Compiled
1333
+ // only once the validator is in use, as the hybrid is.
1334
+ const self = this;
1335
+ const _factory = (_vx === null && _fast === this._fastVerdict && typeof _fast._resultFactory === 'function') ? _fast._resultFactory : null;
1336
+ if (_factory !== null) {
1337
+ let calls = 0;
1338
+ this.validate = (data) => {
1339
+ if (++calls === HYBRID_TIER_CALLS && _onePass === null) {
1340
+ const gen = _factory(LazyRejection, _errorsOf, _buildRawErrors, EMPTY_ERRORS);
1341
+ if (gen) self.validate = gen;
1342
+ }
1343
+ return _plainValidate(data);
1344
+ };
1345
+ } else {
1346
+ this.validate = _plainValidate;
1347
+ }
1271
1348
  }
1272
1349
  if (_vx && !_vxApplied && this.validate) {
1273
1350
  const inner = this.validate;
@@ -1751,7 +1828,7 @@ Object.defineProperty(Validator.prototype, "~standard", {
1751
1828
  // reported as a generic failure rather than hidden.
1752
1829
  const _VERDICT_DISAGREES = Object.freeze({
1753
1830
  valid: false,
1754
- errors: Object.freeze([Object.freeze({ keyword: 'validation', instancePath: '', schemaPath: '#', params: Object.freeze({}), message: 'schema validation failed' })]),
1831
+ errors: Object.freeze([_sharedError({ keyword: 'validation', instancePath: '', schemaPath: '#', params: Object.freeze({}), message: 'schema validation failed' })]),
1755
1832
  });
1756
1833
  // The error builders of the common rejection path (see _ensureCompiled): run
1757
1834
  // the error function behind `reject` for a document the verdict rejected, and
@@ -1764,9 +1841,12 @@ function _plainBuilders(reject, enrich, root, self, fallback) {
1764
1841
  };
1765
1842
  return {
1766
1843
  errors: (data) => presentErrors(rawOf(data), data, null, self, root, enrich),
1844
+ // The raw list in the plain shape: a collapsed branch error carried its
1845
+ // ordering key out to `_ataRaw()` callers, and a shared literal was
1846
+ // handed out as it is.
1767
1847
  raw: (data) => {
1768
1848
  const raw = rawOf(data);
1769
- return needsOrdering(raw) ? sortErrorsBySchemaOrder(root, raw) : raw;
1849
+ return (needsOrdering(raw) ? sortErrorsBySchemaOrder(root, raw) : raw).map(stripOrdinal);
1770
1850
  },
1771
1851
  };
1772
1852
  }
@@ -1859,7 +1939,7 @@ function _jsonEntryWrappers({ check, errors }) {
1859
1939
  },
1860
1940
  };
1861
1941
  }
1862
- const _EXT_FALLBACK = Object.freeze({ keyword: 'validation', instancePath: '', schemaPath: '#', params: {}, message: 'schema validation failed' });
1942
+ const _EXT_FALLBACK = _sharedError({ keyword: 'validation', instancePath: '', schemaPath: '#', params: {}, message: 'schema validation failed' });
1863
1943
 
1864
1944
  // A verdict function that also runs `tail` on what it accepts. The generated
1865
1945
  // function can take the check in place of its final `return true`, one call
@@ -2089,7 +2169,15 @@ _defineLazyMethod('validate', (self) => (data) => {
2089
2169
  self._ensureCompiled();
2090
2170
  return self.validate(data);
2091
2171
  });
2092
- _defineLazyMethod('isValidObject', (self) => (data) => {
2172
+ _defineLazyMethod('isValidObject', (self) => {
2173
+ // A caller can hold this stub itself: `const check = v.isValidObject`, or a
2174
+ // bound copy, taken before the first call. Once the first call has bound the
2175
+ // real method, the stub hands straight to it; it used to classify the schema
2176
+ // again on every call, about 200 ns, ten times the check.
2177
+ let bound = false;
2178
+ return (data) => {
2179
+ if (bound) return self.isValidObject(data);
2180
+ bound = true;
2093
2181
  // A validator that rewrites its input goes through the full compile, which
2094
2182
  // binds a verdict method that runs the rewrite first. So does one whose
2095
2183
  // schema uses a custom keyword: neither the tier-0 plan nor the code
@@ -2124,6 +2212,7 @@ _defineLazyMethod('isValidObject', (self) => (data) => {
2124
2212
  if (!self._jsFn) self._ensureCompiled();
2125
2213
  }
2126
2214
  return self.isValidObject(data);
2215
+ };
2127
2216
  });
2128
2217
  _defineLazyMethod('validateJSON', (self) => (jsonStr) => {
2129
2218
  self._ensureCompiled();
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.41.0';
10
+ module.exports = '1.42.0';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ata-validator",
3
- "version": "1.41.0",
3
+ "version": "1.42.0",
4
4
  "description": "JSON Schema validator that compiles to plain JavaScript, still runs where code generation is blocked, and can be compiled away at build time. Passes the full official test suite.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -64,7 +64,7 @@
64
64
  "release:check": "node tests/test_pack_purity.js && node scripts/check-doc-coverage.js && node tests/test_error_codes_lock.js && node tests/test_safe_regex_embed.js && node tests/test_version_sync.js",
65
65
  "build": "cmake-js build --target ata",
66
66
  "rebuild": "cmake-js rebuild --target ata",
67
- "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_number_text_parity.js && node tests/test_text_path_errors.js && node tests/test_compiled_parity.js && node tests/test_compiled_extension_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_error_list_differential.js && node tests/test_output_format.js && node tests/test_standard_json_schema.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.js && node tests/test_browser_nofs.js && node tests/test_browser_imports_guard.js && node tests/test_esm_exports.js && node tests/test_version_sync.js && node tests/test_native_loaded.js && node tests/test_native_lazy.js && node tests/test_buffer_apis_without_native.js && node tests/test_cold_start_modules.js && node tests/test_safe_regex_embed.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_regex_ecma_whitespace.js && node tests/test_regex_native_linear.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_generator_error_content.js && node tests/test_inherited_key_presence.js && node tests/test_proto_accessor.js && node tests/test_hybrid_tier.js && node tests/test_first_rejection_builds_one.js && node tests/test_container_local.js && node tests/test_one_shot_validate.js && node tests/test_fixed_pattern_inline.js && node tests/test_plan_source.js && node tests/test_fused_remove_additional.js && node tests/test_runtime_parse.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_encoded_refs.js && node tests/test_cross_doc_root_ref.js && node tests/test_codegen_entrypoint_agreement.js && node tests/test_schema_code_injection.js && node tests/test_aot_html_safe.js && node tests/test_ref_annotation_siblings.js && node tests/test_gate_wrapped_schemas.js && node tests/test_pattern_message_escape.js && node tests/test_nested_defaults_engines.js && node tests/test_nested_coercion_parity.js && node tests/test_preprocess_cache.js && node tests/test_large_schema_codegen.js && node tests/test_base_uri.js && node tests/test_hoisted_def_recursion.js && node tests/test_alias_definitions.js && node tests/test_property_names_ref.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_custom_keyword_codegen.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_unevaluated_differential.js && node tests/fuzz_differential.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_ref_error_order.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_lite_parity.js && node tests/test_lite_bundle_size.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_render_without_process.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_aot_source_frames.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 tests/test_collect_evaluated.js && node tests/test_differential_tiers.js && node tests/test_draft7.js && node tests/test_dual_path.js && node tests/test_keywords_codegen.js && node tests/test_ref_cross.js && node tests/test_shape_classifier.js && node tests/test_tier0.js && node benchmark/bench_aot_size.mjs",
67
+ "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_number_text_parity.js && node tests/test_text_path_errors.js && node tests/test_compiled_parity.js && node tests/test_compiled_extension_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_error_list_differential.js && node tests/test_output_format.js && node tests/test_standard_json_schema.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.js && node tests/test_browser_nofs.js && node tests/test_browser_imports_guard.js && node tests/test_esm_exports.js && node tests/test_version_sync.js && node tests/test_native_loaded.js && node tests/test_native_lazy.js && node tests/test_buffer_apis_without_native.js && node tests/test_cold_start_modules.js && node tests/test_safe_regex_embed.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_regex_ecma_whitespace.js && node tests/test_regex_native_linear.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_generator_error_content.js && node tests/test_inherited_key_presence.js && node tests/test_proto_accessor.js && node tests/test_hybrid_tier.js && node tests/test_first_rejection_builds_one.js && node tests/test_container_local.js && node tests/test_one_shot_validate.js && node tests/test_fixed_pattern_inline.js && node tests/test_plan_source.js && node tests/test_fused_remove_additional.js && node tests/test_runtime_parse.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_encoded_refs.js && node tests/test_cross_doc_root_ref.js && node tests/test_codegen_entrypoint_agreement.js && node tests/test_schema_code_injection.js && node tests/test_aot_html_safe.js && node tests/test_ref_annotation_siblings.js && node tests/test_gate_wrapped_schemas.js && node tests/test_pattern_message_escape.js && node tests/test_nested_defaults_engines.js && node tests/test_nested_coercion_parity.js && node tests/test_preprocess_cache.js && node tests/test_large_schema_codegen.js && node tests/test_base_uri.js && node tests/test_hoisted_def_recursion.js && node tests/test_alias_definitions.js && node tests/test_property_names_ref.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_custom_keyword_codegen.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_unevaluated_differential.js && node tests/fuzz_differential.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_ref_error_order.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_error_read_paths.js && node tests/test_unique_items_error_pair.js && node tests/test_rich_errors_generated.js && node tests/test_captured_verdict_stub.js && node tests/test_generated_returns_rewrite.js && node tests/test_deep_pointer_refs.js && node tests/test_uneval_props_dynamic.js && node tests/test_one_pass_no_fallback.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_lite_parity.js && node tests/test_lite_bundle_size.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_render_without_process.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_aot_source_frames.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 tests/test_collect_evaluated.js && node tests/test_differential_tiers.js && node tests/test_draft7.js && node tests/test_dual_path.js && node tests/test_keywords_codegen.js && node tests/test_ref_cross.js && node tests/test_shape_classifier.js && node tests/test_tier0.js && node benchmark/bench_aot_size.mjs",
68
68
  "bench:size": "node benchmark/bench_aot_size.mjs",
69
69
  "test:suite": "node tests/run_suite.js && node tests/run_suite.js draft7 && node tests/run_suite.js v1",
70
70
  "test:compat": "node tests/test_compat.js",
@@ -143,13 +143,13 @@
143
143
  "LICENSE"
144
144
  ],
145
145
  "optionalDependencies": {
146
- "@ata-validator/native-darwin-arm64": "1.41.0",
147
- "@ata-validator/native-darwin-x64": "1.41.0",
148
- "@ata-validator/native-linux-arm64-gnu": "1.41.0",
149
- "@ata-validator/native-linux-arm64-musl": "1.41.0",
150
- "@ata-validator/native-linux-x64-gnu": "1.41.0",
151
- "@ata-validator/native-linux-x64-musl": "1.41.0",
152
- "@ata-validator/native-win32-x64": "1.41.0"
146
+ "@ata-validator/native-darwin-arm64": "1.42.0",
147
+ "@ata-validator/native-darwin-x64": "1.42.0",
148
+ "@ata-validator/native-linux-arm64-gnu": "1.42.0",
149
+ "@ata-validator/native-linux-arm64-musl": "1.42.0",
150
+ "@ata-validator/native-linux-x64-gnu": "1.42.0",
151
+ "@ata-validator/native-linux-x64-musl": "1.42.0",
152
+ "@ata-validator/native-win32-x64": "1.42.0"
153
153
  },
154
154
  "peerDependencies": {
155
155
  "yaml": "^2.0.0"