ata-validator 1.42.0 → 1.44.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.
- package/README.md +10 -10
- package/index.js +56 -2
- package/lib/branch-collapse.js +18 -12
- package/lib/clone-emit.js +5 -2
- package/lib/data-position-cache.js +12 -6
- package/lib/draft7.js +5 -7
- package/lib/enrich-site.js +2 -2
- package/lib/js-compiler.js +788 -172
- package/lib/levenshtein.js +34 -22
- package/lib/native-positions.js +100 -0
- package/lib/rejections.js +14 -7
- package/lib/scan-compiler.js +210 -25
- package/lib/scan-runtime.js +13 -1
- package/lib/suggestions.js +27 -20
- package/lib/validator-core.js +94 -14
- package/lib/version.js +1 -1
- package/package.json +9 -9
package/lib/suggestions.js
CHANGED
|
@@ -29,22 +29,35 @@ const FORMAT_HINTS = {
|
|
|
29
29
|
ipv4: (val) => typeof val === 'string' ? 'expected four 0-255 octets separated by dots' : null,
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
// Edits that still read as a typo of a name this long. With a flat two, a
|
|
33
|
+
// missing `name` was "corrected" to `age`, and `c` to `a`.
|
|
34
|
+
function typoBudget (name) {
|
|
35
|
+
const n = name.length;
|
|
36
|
+
return n < 3 ? 0 : n < 5 ? 1 : 2;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The one string candidate nearest `target` within the budget, or null when
|
|
40
|
+
// none is near enough or two are equally near.
|
|
41
|
+
function nearest (target, candidates) {
|
|
42
|
+
const budget = typoBudget(target);
|
|
35
43
|
let best = null;
|
|
36
|
-
let bestDist =
|
|
44
|
+
let bestDist = budget + 1;
|
|
37
45
|
let tied = false;
|
|
38
|
-
for (const
|
|
39
|
-
if (typeof
|
|
40
|
-
const d = levenshtein(
|
|
41
|
-
if (d
|
|
46
|
+
for (const c of candidates) {
|
|
47
|
+
if (typeof c !== 'string') continue;
|
|
48
|
+
const d = levenshtein(target, c, budget);
|
|
49
|
+
if (d === 0 || d > budget) continue;
|
|
50
|
+
if (d < bestDist) { best = c; bestDist = d; tied = false; }
|
|
42
51
|
else if (d === bestDist) tied = true;
|
|
43
52
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
return tied ? null : best;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function suggestEnumTypo (received, enumValues) {
|
|
57
|
+
if (typeof received !== 'string') return null;
|
|
58
|
+
if (!Array.isArray(enumValues) || enumValues.length === 0 || enumValues.length > 30) return null;
|
|
59
|
+
const best = nearest(received, enumValues);
|
|
60
|
+
return best === null ? null : { text: `did you mean \`${best}\`?`, kind: 'typo' };
|
|
48
61
|
}
|
|
49
62
|
|
|
50
63
|
// The widest container a typo hint is offered on. `suggestEnumTypo` caps its
|
|
@@ -56,14 +69,8 @@ const MAX_TYPO_CANDIDATES = 64;
|
|
|
56
69
|
function suggestRequiredTypo (missing, presentKeys) {
|
|
57
70
|
if (!missing || !Array.isArray(presentKeys)) return null;
|
|
58
71
|
if (presentKeys.length > MAX_TYPO_CANDIDATES) return null;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const d = levenshtein(missing, k, 2);
|
|
62
|
-
if (d <= 2 && d > 0) {
|
|
63
|
-
return { text: `did you mean \`${missing}\` instead of \`${k}\`?`, kind: 'similar-key' };
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return null;
|
|
72
|
+
const best = nearest(missing, presentKeys);
|
|
73
|
+
return best === null ? null : { text: `did you mean \`${missing}\` instead of \`${best}\`?`, kind: 'similar-key' };
|
|
67
74
|
}
|
|
68
75
|
|
|
69
76
|
function suggestFormat (format, raw) {
|
package/lib/validator-core.js
CHANGED
|
@@ -215,8 +215,27 @@ function codegenAvailable() {
|
|
|
215
215
|
return _codegenAvailable;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
// Schema compilation cache: same schema string -> reuse compiled functions
|
|
218
|
+
// Schema compilation cache: same schema string -> reuse compiled functions.
|
|
219
|
+
// It and the preprocess cache below are bounded, oldest out first. Unbounded,
|
|
220
|
+
// they held every schema's text, compiled functions and their sources for the
|
|
221
|
+
// life of the process: after compiling each of SchemaStore's schemas once and
|
|
222
|
+
// dropping the validators, 1.2 GB stayed on the heap. A schema compiled again
|
|
223
|
+
// after its entry left is compiled again, the cost of a miss and no more.
|
|
224
|
+
const CACHE_ENTRIES = 128;
|
|
225
|
+
const CACHE_KEY_CHARS = 16 * 1024 * 1024;
|
|
219
226
|
const _compileCache = new Map();
|
|
227
|
+
// Adds an entry and drops the oldest past either bound. The key characters
|
|
228
|
+
// are counted on the map itself.
|
|
229
|
+
function _boundedSet(map, key, entry) {
|
|
230
|
+
if (!map.has(key)) map._chars = (map._chars || 0) + key.length;
|
|
231
|
+
map.set(key, entry);
|
|
232
|
+
while (map.size > CACHE_ENTRIES || (map._chars > CACHE_KEY_CHARS && map.size > 1)) {
|
|
233
|
+
const oldest = map.keys().next().value;
|
|
234
|
+
map.delete(oldest);
|
|
235
|
+
map._chars -= oldest.length;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function _compileCacheSet(key, entry) { _boundedSet(_compileCache, key, entry); }
|
|
220
239
|
// Generated preprocess passes, keyed like _compileCache plus the options that
|
|
221
240
|
// shape the pass. Only passes that exist are kept: a schema with nothing to
|
|
222
241
|
// rewrite answers `null` quickly, and keeping that answer held its key, the
|
|
@@ -585,8 +604,10 @@ function resolveSchemaForPreprocess(schema, schemaMap) {
|
|
|
585
604
|
if (p && typeof p === 'object' && p.$ref && !p.type) {
|
|
586
605
|
const t = resolveRefForPreprocess(p.$ref, schemaMap)
|
|
587
606
|
if (t && typeof t === 'object') {
|
|
588
|
-
|
|
589
|
-
|
|
607
|
+
// Spread and defineProperty: a property named "__proto__" stays an own
|
|
608
|
+
// key of the copy (assignment would set the copy's prototype).
|
|
609
|
+
if (!cloned) { cloned = { ...s }; cloned.properties = { ...s.properties } }
|
|
610
|
+
Object.defineProperty(cloned.properties, key, { value: t, writable: true, enumerable: true, configurable: true })
|
|
590
611
|
}
|
|
591
612
|
}
|
|
592
613
|
}
|
|
@@ -756,6 +777,7 @@ class Validator {
|
|
|
756
777
|
// to attach dataFrame entries to each enriched error.
|
|
757
778
|
this._posCache = null; // created by _pos() on first use, only the JSON text path needs it
|
|
758
779
|
this._lastRawInput = null;
|
|
780
|
+
this._lastParsed = undefined;
|
|
759
781
|
// undefined: not built yet. null: this schema has no scanner.
|
|
760
782
|
this._scanner = undefined;
|
|
761
783
|
// Checks a wrapper registered through _extendChecks. Declared here so
|
|
@@ -796,7 +818,7 @@ class Validator {
|
|
|
796
818
|
}
|
|
797
819
|
|
|
798
820
|
_pos() {
|
|
799
|
-
return this._posCache || (this._posCache = require('./data-position-cache').createCache());
|
|
821
|
+
return this._posCache || (this._posCache = require('./data-position-cache').createCache(_codegen !== null && _codegen.nativePositions ? _codegen.nativePositions() : null));
|
|
800
822
|
}
|
|
801
823
|
|
|
802
824
|
_ensureVocabularies() {
|
|
@@ -828,7 +850,12 @@ class Validator {
|
|
|
828
850
|
// "validate this schema against its dialect" needs no network and no
|
|
829
851
|
// caller-supplied registry. Only schemas that mention json-schema.org in a
|
|
830
852
|
// reference pay for the lookup.
|
|
831
|
-
|
|
853
|
+
// A reference, not `$schema`: nearly every schema names its dialect, and
|
|
854
|
+
// matching that loaded the vendored meta-schemas into every validator's
|
|
855
|
+
// map, 27 entries that made its compile cache key a 30 KB string, rebuilt
|
|
856
|
+
// in 20 microseconds at each compile, and sent every compile through the
|
|
857
|
+
// external-document checks.
|
|
858
|
+
if (this._schemaStr.includes('json-schema.org/') && /"\$(?:ref|dynamicRef|recursiveRef)":"[^"]*json-schema\.org\//.test(this._schemaStr)) {
|
|
832
859
|
const { METASCHEMAS } = require('./metaschemas');
|
|
833
860
|
this._ownSchemaMap();
|
|
834
861
|
for (const [id, meta] of METASCHEMAS) {
|
|
@@ -911,7 +938,7 @@ class Validator {
|
|
|
911
938
|
// A function bound to this validator's keyword functions or formats is
|
|
912
939
|
// not the schema's alone, so it is not shared through the cache.
|
|
913
940
|
if (!uf && !this._keywords) {
|
|
914
|
-
|
|
941
|
+
_compileCacheSet(mapKey, { jsFn, combined: undefined, errFn: undefined, isCodegen: _isCodegen, full: false });
|
|
915
942
|
}
|
|
916
943
|
}
|
|
917
944
|
this._jsFn = jsFn;
|
|
@@ -938,7 +965,7 @@ class Validator {
|
|
|
938
965
|
if (hit !== undefined) preprocess = hit;
|
|
939
966
|
else {
|
|
940
967
|
preprocess = _codegen.buildPreprocess(preprocessSchema, options) || null;
|
|
941
|
-
if (ppKey !== null && preprocess !== null) _preprocessCache
|
|
968
|
+
if (ppKey !== null && preprocess !== null) _boundedSet(_preprocessCache, ppKey, preprocess);
|
|
942
969
|
}
|
|
943
970
|
}
|
|
944
971
|
if (!preprocess) {
|
|
@@ -1085,6 +1112,17 @@ class Validator {
|
|
|
1085
1112
|
_bindVerdict(this, this._fastVerdict
|
|
1086
1113
|
? this._fastVerdict
|
|
1087
1114
|
: (data) => run(data).valid);
|
|
1115
|
+
// Parsed, then the verdict first and the errors only for a document that
|
|
1116
|
+
// fails: collecting them on every document cost an accepted 5 MB one 9 ms
|
|
1117
|
+
// over JSON.parse and validate(). At this layer, below the presentation
|
|
1118
|
+
// that the text path wraps around it: going through validate() as it
|
|
1119
|
+
// stands once every layer is in place handed the text path errors
|
|
1120
|
+
// already presented, and they lost their source anchor.
|
|
1121
|
+
const runText = options.abortEarly
|
|
1122
|
+
? run
|
|
1123
|
+
: (preprocess
|
|
1124
|
+
? (data) => { preprocess(data); return interp.isValid(data) ? VALID_RESULT : interp.validate(data); }
|
|
1125
|
+
: (data) => (interp.isValid(data) ? VALID_RESULT : interp.validate(data)));
|
|
1088
1126
|
this.validateJSON = (jsonStr) => {
|
|
1089
1127
|
let data;
|
|
1090
1128
|
try {
|
|
@@ -1093,9 +1131,19 @@ class Validator {
|
|
|
1093
1131
|
if (!(e instanceof SyntaxError)) throw e;
|
|
1094
1132
|
return _jsonSyntaxRejection(e);
|
|
1095
1133
|
}
|
|
1096
|
-
|
|
1134
|
+
this._lastParsed = data;
|
|
1135
|
+
return runText(data);
|
|
1136
|
+
};
|
|
1137
|
+
this.isValidJSON = (jsonStr) => {
|
|
1138
|
+
let data;
|
|
1139
|
+
try {
|
|
1140
|
+
data = JSON.parse(jsonStr);
|
|
1141
|
+
} catch (e) {
|
|
1142
|
+
if (!(e instanceof SyntaxError)) throw e;
|
|
1143
|
+
return false;
|
|
1144
|
+
}
|
|
1145
|
+
return this.isValidObject(data);
|
|
1097
1146
|
};
|
|
1098
|
-
this.isValidJSON = (jsonStr) => this.validateJSON(jsonStr).valid;
|
|
1099
1147
|
}
|
|
1100
1148
|
|
|
1101
1149
|
// Error presentation, one lazy layer: declaration-order sorting, rich
|
|
@@ -1144,21 +1192,38 @@ class Validator {
|
|
|
1144
1192
|
// rejection it builds. Cleared as soon as it returns: the rejection
|
|
1145
1193
|
// carries the text itself, so nothing outlives the call.
|
|
1146
1194
|
this._lastRawInput = jsonStr;
|
|
1147
|
-
|
|
1195
|
+
this._lastParsed = undefined;
|
|
1196
|
+
let result, parsed;
|
|
1148
1197
|
try {
|
|
1149
1198
|
result = innerJson(jsonStr);
|
|
1150
1199
|
} finally {
|
|
1151
1200
|
this._lastRawInput = null;
|
|
1201
|
+
parsed = this._lastParsed;
|
|
1202
|
+
this._lastParsed = undefined;
|
|
1152
1203
|
}
|
|
1153
1204
|
// Every diagnostic the text path adds is deferred. Deciding here
|
|
1154
1205
|
// whether there is anything to add would mean reading `result.errors`,
|
|
1155
1206
|
// and on the codegen path that realizes the inner lazy layer, which is
|
|
1156
1207
|
// the document walk this exists to avoid.
|
|
1157
1208
|
if (result && result.valid === false) {
|
|
1158
|
-
return new LazyJsonRejection(result, jsonStr, this, enrich);
|
|
1209
|
+
return new LazyJsonRejection(result, jsonStr, this, enrich, parsed);
|
|
1159
1210
|
}
|
|
1160
1211
|
return result;
|
|
1161
1212
|
};
|
|
1213
|
+
} else if (this.validateJSON) {
|
|
1214
|
+
// Without enrichment the text path still presents its errors as
|
|
1215
|
+
// validate() does, in declaration order: on generated code they came
|
|
1216
|
+
// out in the order the function found them, so the same document gave
|
|
1217
|
+
// its errors in one order from validate() and another from here.
|
|
1218
|
+
const innerJson = this.validateJSON;
|
|
1219
|
+
this.validateJSON = (jsonStr) => {
|
|
1220
|
+
this._lastParsed = undefined;
|
|
1221
|
+
const result = innerJson(jsonStr);
|
|
1222
|
+
const parsed = this._lastParsed;
|
|
1223
|
+
this._lastParsed = undefined;
|
|
1224
|
+
if (!(result && result.valid === false && parsed !== undefined)) return result;
|
|
1225
|
+
return present(result, parsed);
|
|
1226
|
+
};
|
|
1162
1227
|
}
|
|
1163
1228
|
}
|
|
1164
1229
|
|
|
@@ -1192,10 +1257,12 @@ class Validator {
|
|
|
1192
1257
|
// errorMessage keep the validate hot path untouched. Layered after rich
|
|
1193
1258
|
// enrichment so `code`/`keyword`/`path` are already final and only the
|
|
1194
1259
|
// human-facing message changes.
|
|
1260
|
+
// The module loads only for a schema that has the keyword: loading it
|
|
1261
|
+
// to ask was a file read on every process's first compile.
|
|
1195
1262
|
{
|
|
1196
|
-
const emLib = require('./error-messages');
|
|
1197
1263
|
const schemaStr = this._schemaStr || (this._schemaObj ? JSON.stringify(this._schemaObj) : '');
|
|
1198
|
-
if (
|
|
1264
|
+
if (schemaStr.indexOf('"errorMessage"') !== -1) {
|
|
1265
|
+
const emLib = require('./error-messages');
|
|
1199
1266
|
const root = this._schemaObj;
|
|
1200
1267
|
const wrap = (inner) => (arg) => {
|
|
1201
1268
|
const result = inner(arg);
|
|
@@ -2165,7 +2232,15 @@ for (const [name, pick] of [
|
|
|
2165
2232
|
});
|
|
2166
2233
|
}
|
|
2167
2234
|
|
|
2235
|
+
// Cold start: an interpreted twin answers a large schema's first calls where
|
|
2236
|
+
// the code generator is registered (see coldTwin in index.js). Lite has none.
|
|
2237
|
+
Validator.prototype._coldTwin = function () {
|
|
2238
|
+
return _codegen === null || _codegen.coldTwin === undefined ? null : _codegen.coldTwin(this, Validator);
|
|
2239
|
+
};
|
|
2240
|
+
|
|
2168
2241
|
_defineLazyMethod('validate', (self) => (data) => {
|
|
2242
|
+
const t = self._coldTwin();
|
|
2243
|
+
if (t !== null) return t.validate(data);
|
|
2169
2244
|
self._ensureCompiled();
|
|
2170
2245
|
return self.validate(data);
|
|
2171
2246
|
});
|
|
@@ -2176,6 +2251,7 @@ _defineLazyMethod('isValidObject', (self) => {
|
|
|
2176
2251
|
// again on every call, about 200 ns, ten times the check.
|
|
2177
2252
|
let bound = false;
|
|
2178
2253
|
return (data) => {
|
|
2254
|
+
if (!bound) { const t = self._coldTwin(); if (t !== null) return t.isValidObject(data); }
|
|
2179
2255
|
if (bound) return self.isValidObject(data);
|
|
2180
2256
|
bound = true;
|
|
2181
2257
|
// A validator that rewrites its input goes through the full compile, which
|
|
@@ -2215,10 +2291,14 @@ _defineLazyMethod('isValidObject', (self) => {
|
|
|
2215
2291
|
};
|
|
2216
2292
|
});
|
|
2217
2293
|
_defineLazyMethod('validateJSON', (self) => (jsonStr) => {
|
|
2294
|
+
const t = self._coldTwin();
|
|
2295
|
+
if (t !== null) return t.validateJSON(jsonStr);
|
|
2218
2296
|
self._ensureCompiled();
|
|
2219
2297
|
return self.validateJSON(jsonStr);
|
|
2220
2298
|
});
|
|
2221
2299
|
_defineLazyMethod('isValidJSON', (self) => (jsonStr) => {
|
|
2300
|
+
const t = self._coldTwin();
|
|
2301
|
+
if (t !== null) return t.isValidJSON(jsonStr);
|
|
2222
2302
|
self._ensureCompiled();
|
|
2223
2303
|
return self.isValidJSON(jsonStr);
|
|
2224
2304
|
});
|
|
@@ -2259,4 +2339,4 @@ module.exports = {
|
|
|
2259
2339
|
// surface of `require('ata-validator')` is what it was.
|
|
2260
2340
|
Object.defineProperty(module.exports, '_registerCodegen', { value: _registerCodegen, enumerable: false });
|
|
2261
2341
|
// What the compiled paths in index.js need from this module.
|
|
2262
|
-
Object.defineProperty(module.exports, '_internals', { value: { _jsonSyntaxRejection, ABORT_EARLY_RESULT, HYBRID_TIER_CALLS, SIMDJSON_THRESHOLD, VALID_RESULT, _bindEntry, _bindVerdict, _compileCache, _mustReject, _rememberInstance, _verboseWrap, compileCacheKey, getNative, isV1Dialect, resolveSchemaByPath }, enumerable: false });
|
|
2342
|
+
Object.defineProperty(module.exports, '_internals', { value: { _jsonSyntaxRejection, ABORT_EARLY_RESULT, HYBRID_TIER_CALLS, SIMDJSON_THRESHOLD, VALID_RESULT, _bindEntry, _bindVerdict, _compileCache, _compileCacheSet, _mustReject, _rememberInstance, _verboseWrap, compileCacheKey, getNative, isV1Dialect, resolveSchemaByPath }, enumerable: false });
|
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ata-validator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.44.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_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",
|
|
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_scanner_size_cap.js && node tests/test_scanner_index_keys.js && node tests/test_both_defs_containers.js && node tests/test_uneval_branch_counts.js && node tests/test_branch_verdicts.js && node tests/test_property_names_subschema.js && node tests/test_property_named_ref.js && node tests/test_validate_json_engines_same_errors.js && node tests/test_prototype_property_names.js && node tests/test_proto_name_rename_invariance.js && node tests/test_shared_definitions.js && node tests/test_compile_cache_bound.js && node tests/test_uneval_items_dynamic.js && node tests/test_escaped_property_names.js && node tests/test_ref_siblings_combined.js && node tests/test_unicode_property_patterns.js && node tests/test_cold_twin.js && node tests/test_native_positions.js && node tests/test_validate_json_single_parse.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_levenshtein_banded.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.
|
|
147
|
-
"@ata-validator/native-darwin-x64": "1.
|
|
148
|
-
"@ata-validator/native-linux-arm64-gnu": "1.
|
|
149
|
-
"@ata-validator/native-linux-arm64-musl": "1.
|
|
150
|
-
"@ata-validator/native-linux-x64-gnu": "1.
|
|
151
|
-
"@ata-validator/native-linux-x64-musl": "1.
|
|
152
|
-
"@ata-validator/native-win32-x64": "1.
|
|
146
|
+
"@ata-validator/native-darwin-arm64": "1.44.0",
|
|
147
|
+
"@ata-validator/native-darwin-x64": "1.44.0",
|
|
148
|
+
"@ata-validator/native-linux-arm64-gnu": "1.44.0",
|
|
149
|
+
"@ata-validator/native-linux-arm64-musl": "1.44.0",
|
|
150
|
+
"@ata-validator/native-linux-x64-gnu": "1.44.0",
|
|
151
|
+
"@ata-validator/native-linux-x64-musl": "1.44.0",
|
|
152
|
+
"@ata-validator/native-win32-x64": "1.44.0"
|
|
153
153
|
},
|
|
154
154
|
"peerDependencies": {
|
|
155
155
|
"yaml": "^2.0.0"
|