ata-validator 1.10.0 → 1.12.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/CHANGELOG.md +43 -0
- package/index.js +240 -115
- package/lib/enrich-error.js +10 -3
- package/lib/error-codes.js +54 -1
- package/lib/formats.js +390 -4
- package/lib/interpreter.js +7 -7
- package/lib/js-compiler.js +118 -40
- package/lib/version.js +1 -1
- package/package.json +9 -9
package/lib/js-compiler.js
CHANGED
|
@@ -762,9 +762,9 @@ const _formats = require('./formats')
|
|
|
762
762
|
const FORMAT_CHECKS = {
|
|
763
763
|
email: (s) => { const at = s.indexOf('@'); return at > 0 && at < s.length - 1 && s.indexOf('.', at) > at + 1 },
|
|
764
764
|
date: _formats.date,
|
|
765
|
-
uuid:
|
|
765
|
+
uuid: _formats.uuid,
|
|
766
766
|
ipv4: _formats.ipv4,
|
|
767
|
-
hostname:
|
|
767
|
+
hostname: _formats.hostname,
|
|
768
768
|
}
|
|
769
769
|
|
|
770
770
|
// Dangerous JS property names that exist on Object.prototype
|
|
@@ -850,6 +850,49 @@ function hasNestedIdScope(node, isRoot = true) {
|
|
|
850
850
|
// the generated code the same way `$ref: "#"` does at the root. A plain
|
|
851
851
|
// cross-reference (A -> B where B does not refer back) is not on a cycle and
|
|
852
852
|
// still inlines.
|
|
853
|
+
// Data can point back at itself, and a schema that references itself would
|
|
854
|
+
// then recurse until the stack runs out. Validation runs in two passes: the
|
|
855
|
+
// fast one counts depth and gives up past CYCLE_DEPTH, the second re-runs with
|
|
856
|
+
// a set of the values currently under check, where a value met twice is a
|
|
857
|
+
// fixed point and counts as satisfied. That is what the interpreted engine
|
|
858
|
+
// does, so both engines answer the same on cyclic input. Legitimate documents
|
|
859
|
+
// never reach the threshold, so they only pay the counter.
|
|
860
|
+
// Raised by a generator that meets a construct it cannot express. The entry
|
|
861
|
+
// point turns it into a decline, so the caller falls back to an engine that
|
|
862
|
+
// can. Emitting nothing would mean "everything is valid", which is the failure
|
|
863
|
+
// mode this project has shipped three times in $ref handling; declining is the
|
|
864
|
+
// only safe way out.
|
|
865
|
+
const DECLINE = Symbol('ata.decline')
|
|
866
|
+
|
|
867
|
+
const CYCLE_DEPTH = 512
|
|
868
|
+
|
|
869
|
+
// Declarations the guarded functions close over. Emitted once, ahead of them.
|
|
870
|
+
function emitGuardState () {
|
|
871
|
+
return 'const _CYC={};const _stk=new Set();let _sd=0,_sg=false\n '
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
// Wraps a self-recursive root: `name` is the guarded entry, `name`_b the body.
|
|
875
|
+
function emitRootGuard (name, args, onRepeat) {
|
|
876
|
+
const call = `${name}_b(${args})`
|
|
877
|
+
return (
|
|
878
|
+
`function ${name}(${args}){\n ` +
|
|
879
|
+
`if(_sg){if(typeof d!=='object'||d===null)return ${call};if(_stk.has(d))return ${onRepeat};_stk.add(d);try{return ${call}}finally{_stk.delete(d)}}\n ` +
|
|
880
|
+
`if(++_sd>${CYCLE_DEPTH})throw _CYC\n const _r=${call}\n _sd--\n return _r\n }\n `
|
|
881
|
+
)
|
|
882
|
+
}
|
|
883
|
+
|
|
884
|
+
// Runs `attempt`, and on the depth signal runs it again under the guard.
|
|
885
|
+
// `reset` clears anything the abandoned pass left behind.
|
|
886
|
+
function emitGuardedRun (attempt, reset, defSets) {
|
|
887
|
+
const clears = ['_stk.clear()'].concat(defSets.map((n) => `${n}_s.clear()`)).join(';')
|
|
888
|
+
return (
|
|
889
|
+
`_sd=0\n try{${attempt}}catch(_err){\n ` +
|
|
890
|
+
`if(_err!==_CYC)throw _err\n ` +
|
|
891
|
+
`${reset}_sg=true;${clears}\n ` +
|
|
892
|
+
`try{${attempt}}finally{_sg=false}\n }\n `
|
|
893
|
+
)
|
|
894
|
+
}
|
|
895
|
+
|
|
853
896
|
function cyclicDefNames (defs) {
|
|
854
897
|
const out = new Set()
|
|
855
898
|
if (!defs || typeof defs !== 'object') return out
|
|
@@ -1417,18 +1460,33 @@ function compileToJSCodegen(schema, schemaMap, userFormats) {
|
|
|
1417
1460
|
}
|
|
1418
1461
|
}
|
|
1419
1462
|
|
|
1463
|
+
const defSets = ctx.defFns ? Array.from(ctx.defFns.values()) : []
|
|
1464
|
+
const needsGuard = ctx.usesRecursion || defSets.length > 0
|
|
1465
|
+
|
|
1420
1466
|
let body, hybridBody
|
|
1421
1467
|
if (ctx.usesRecursion) {
|
|
1422
|
-
// Self-recursive:
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1468
|
+
// Self-recursive: a named body reached through the cycle guard, so data
|
|
1469
|
+
// that points back at itself settles instead of exhausting the stack.
|
|
1470
|
+
const decl = emitRootGuard('_validate', 'd', 'true') +
|
|
1471
|
+
`function _validate_b(d){\n ${checkStr}\n return true\n }\n `
|
|
1472
|
+
const run = emitGuardedRun('return _validate(d)', '', defSets)
|
|
1473
|
+
body = `${decl}function _run(d){\n ${run}\n }\n return _run(d)`
|
|
1474
|
+
// Hybrid: keep the boolean answer, wrap only the outer call
|
|
1475
|
+
hybridBody = `${decl}function _run(d){\n ${run}\n }\n return _run(d)?R:E(d)`
|
|
1476
|
+
} else if (defSets.length > 0) {
|
|
1477
|
+
// No self-reference at the root, but a def on a cycle can still be
|
|
1478
|
+
// re-entered with the same value; the guarded functions need their state.
|
|
1479
|
+
const run = emitGuardedRun(`return _body(d)`, '', defSets)
|
|
1480
|
+
body = `function _body(d){\n ${checkStr}\n return true\n }\n function _run(d){\n ${run}\n }\n return _run(d)`
|
|
1481
|
+
hybridBody = `function _body(d){\n ${checkStr}\n return true\n }\n function _run(d){\n ${run}\n }\n return _run(d)?R:E(d)`
|
|
1426
1482
|
} else {
|
|
1427
1483
|
body = checkStr + '\n return true'
|
|
1428
1484
|
hybridBody = replaceTopLevel(checkStr + '\n return R')
|
|
1429
1485
|
}
|
|
1430
1486
|
|
|
1431
|
-
const
|
|
1487
|
+
const guardStr = needsGuard ? emitGuardState() : ''
|
|
1488
|
+
const preambleStr = guardStr +
|
|
1489
|
+
(ctx.preamble && ctx.preamble.length ? ctx.preamble.join('\n ') + '\n ' : '')
|
|
1432
1490
|
|
|
1433
1491
|
try {
|
|
1434
1492
|
let boolFn
|
|
@@ -1695,7 +1753,16 @@ function genCode(schema, v, lines, ctx, knownType) {
|
|
|
1695
1753
|
ctx.defFns.set(defName, fnName)
|
|
1696
1754
|
const bodyLines = []
|
|
1697
1755
|
genCode(ctx.rootDefs[defName], 'd', bodyLines, ctx)
|
|
1698
|
-
|
|
1756
|
+
// Entered through the cycle guard: see emitGuardState. In the fast
|
|
1757
|
+
// pass the wrapper only counts depth; the set is used by the second,
|
|
1758
|
+
// guarded pass that runs when data turns out to point back at
|
|
1759
|
+
// itself.
|
|
1760
|
+
ctx.preamble.push(
|
|
1761
|
+
`const ${fnName}_s=new Set()\n function ${fnName}(d){\n ` +
|
|
1762
|
+
`if(_sg){if(typeof d!=='object'||d===null)return ${fnName}_b(d);if(${fnName}_s.has(d))return true;${fnName}_s.add(d);try{return ${fnName}_b(d)}finally{${fnName}_s.delete(d)}}\n ` +
|
|
1763
|
+
`if(++_sd>${CYCLE_DEPTH})throw _CYC\n const _r=${fnName}_b(d)\n _sd--\n return _r\n }\n ` +
|
|
1764
|
+
`function ${fnName}_b(d){${bodyLines.join('\n ')}\n return true}`,
|
|
1765
|
+
)
|
|
1699
1766
|
}
|
|
1700
1767
|
lines.push(`if(!${fnName}(${v}))return false`)
|
|
1701
1768
|
if (!hasSiblings) return
|
|
@@ -2900,31 +2967,19 @@ const FORMAT_CODEGEN = {
|
|
|
2900
2967
|
: `if(typeof ${v}==='string'){const _at=${v}.indexOf('@');if(_at<=0||_at>=${v}.length-1||${v}.indexOf('.',_at)<=_at+1)return false}`
|
|
2901
2968
|
},
|
|
2902
2969
|
date: _formats.dateSource,
|
|
2903
|
-
uuid:
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
'date-time': (v, isStr) => isStr
|
|
2907
|
-
? `if(!/^\\d{4}-\\d{2}-\\d{2}[Tt]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/.test(${v})||isNaN(Date.parse(${v})))return false`
|
|
2908
|
-
: `if(typeof ${v}==='string'&&(!/^\\d{4}-\\d{2}-\\d{2}[Tt]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?([Zz]|[+-]\\d{2}:\\d{2})$/.test(${v})||isNaN(Date.parse(${v}))))return false`,
|
|
2909
|
-
time: (v, isStr) => isStr
|
|
2910
|
-
? `if(!/^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?$/.test(${v}))return false`
|
|
2911
|
-
: `if(typeof ${v}==='string'&&!/^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?$/.test(${v}))return false`,
|
|
2970
|
+
uuid: _formats.uuidSource,
|
|
2971
|
+
'date-time': _formats.dateTimeSource,
|
|
2972
|
+
time: _formats.timeSource,
|
|
2912
2973
|
duration: (v, isStr) => isStr
|
|
2913
2974
|
? `if(!/^P(?:\\d+Y)?(?:\\d+M)?(?:\\d+W)?(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+(?:\\.\\d+)?S)?)?$/.test(${v})||${v}==='P'||${v}.endsWith('T'))return false`
|
|
2914
2975
|
: `if(typeof ${v}==='string'&&(!/^P(?:\\d+Y)?(?:\\d+M)?(?:\\d+W)?(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+(?:\\.\\d+)?S)?)?$/.test(${v})||${v}==='P'||${v}.endsWith('T')))return false`,
|
|
2915
|
-
uri:
|
|
2916
|
-
? `if(!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(${v})||/[\\s\\u0000-\\u001f\\u007f]/.test(${v}))return false`
|
|
2917
|
-
: `if(typeof ${v}==='string'&&(!/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(${v})||/[\\s\\u0000-\\u001f\\u007f]/.test(${v})))return false`,
|
|
2976
|
+
uri: _formats.uriSource,
|
|
2918
2977
|
'uri-reference': (v, isStr) => isStr
|
|
2919
|
-
? `
|
|
2920
|
-
: `if(typeof ${v}==='string'
|
|
2978
|
+
? `{${_formats.noReservedSource(v, '0')}}`
|
|
2979
|
+
: `if(typeof ${v}==='string'){${_formats.noReservedSource(v, '0')}}`,
|
|
2921
2980
|
ipv4: _formats.ipv4Source,
|
|
2922
|
-
ipv6:
|
|
2923
|
-
|
|
2924
|
-
: `if(typeof ${v}==='string'){const _s=${v};if(_s===''||!/^[0-9a-fA-F:]+$/.test(_s)||_s.split(':').length<3||_s.split(':').length>8)return false}`,
|
|
2925
|
-
hostname: (v, isStr) => isStr
|
|
2926
|
-
? `if(!/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(${v}))return false`
|
|
2927
|
-
: `if(typeof ${v}==='string'&&!/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(${v}))return false`,
|
|
2981
|
+
ipv6: _formats.ipv6Source,
|
|
2982
|
+
hostname: _formats.hostnameSource,
|
|
2928
2983
|
}
|
|
2929
2984
|
|
|
2930
2985
|
// Safe key escaping: use JSON.stringify to handle all special chars (newlines, null bytes, etc.)
|
|
@@ -3069,8 +3124,6 @@ function compileToJSCodegenWithErrors(schema, schemaMap, userFormats, sourceOpts
|
|
|
3069
3124
|
if (typeof schema === 'object' && schema !== null) {
|
|
3070
3125
|
const s = JSON.stringify(schema)
|
|
3071
3126
|
if (s.includes('unevaluatedProperties') || s.includes('unevaluatedItems')) return null
|
|
3072
|
-
// Bail on self-referencing schemas — error codegen doesn't support recursion
|
|
3073
|
-
if (s.includes('"$ref":"#"')) return null
|
|
3074
3127
|
}
|
|
3075
3128
|
if (typeof schema === 'boolean') {
|
|
3076
3129
|
return schema
|
|
@@ -3133,7 +3186,12 @@ function compileToJSCodegenWithErrors(schema, schemaMap, userFormats, sourceOpts
|
|
|
3133
3186
|
: null }
|
|
3134
3187
|
ctx.helperCode.push('const _cpLen=s=>{let n=0;for(const _ of s)n++;return n}')
|
|
3135
3188
|
const lines = []
|
|
3136
|
-
|
|
3189
|
+
try {
|
|
3190
|
+
genCodeE(schema, 'd', '', lines, ctx, '#')
|
|
3191
|
+
} catch (e) {
|
|
3192
|
+
if (e === DECLINE) return null
|
|
3193
|
+
throw e
|
|
3194
|
+
}
|
|
3137
3195
|
// Inline branch-collapse helper only when the schema actually used a
|
|
3138
3196
|
// oneOf/anyOf branch path (tracked via ctx.usesBranchCollapse). Keeps the
|
|
3139
3197
|
// AOT output small for schemas that don't compose. Standalone modules can't
|
|
@@ -3144,16 +3202,28 @@ function compileToJSCodegenWithErrors(schema, schemaMap, userFormats, sourceOpts
|
|
|
3144
3202
|
if (lines.length === 0) return (d) => ({ valid: true, errors: [] })
|
|
3145
3203
|
|
|
3146
3204
|
const checkStr = lines.join('\n ')
|
|
3205
|
+
const defSetsE = ctx.defFns ? Array.from(ctx.defFns.values()) : []
|
|
3206
|
+
const needsGuardE = ctx.usesRecursion || defSetsE.length > 0
|
|
3207
|
+
const guardStrE = needsGuardE ? emitGuardState() : ''
|
|
3208
|
+
const helpersE = ctx.helperCode.length ? ctx.helperCode.join('\n ') + '\n ' : ''
|
|
3209
|
+
|
|
3147
3210
|
let body
|
|
3148
3211
|
if (ctx.usesRecursion) {
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3212
|
+
// The abandoned first pass may have pushed errors, so the retry starts
|
|
3213
|
+
// from an empty list and the reported errors come from the guarded run
|
|
3214
|
+
// alone.
|
|
3215
|
+
body = `const _e=[];\n ` + guardStrE + helpersE +
|
|
3216
|
+
emitRootGuard('_validateE', 'd,_all,_e', '') +
|
|
3217
|
+
`function _validateE_b(d,_all,_e){\n ${checkStr}\n }\n ` +
|
|
3218
|
+
emitGuardedRun('_validateE(d,_all,_e)', '_e.length=0;', defSetsE) +
|
|
3219
|
+
`return{valid:_e.length===0,errors:_e}`
|
|
3220
|
+
} else if (defSetsE.length > 0) {
|
|
3221
|
+
body = `const _e=[];\n ` + guardStrE + helpersE +
|
|
3222
|
+
`function _bodyE(d,_all,_e){\n ${checkStr}\n }\n ` +
|
|
3223
|
+
emitGuardedRun('_bodyE(d,_all,_e)', '_e.length=0;', defSetsE) +
|
|
3152
3224
|
`return{valid:_e.length===0,errors:_e}`
|
|
3153
3225
|
} else {
|
|
3154
|
-
body = `const _e=[];\n ` +
|
|
3155
|
-
(ctx.helperCode.length ? ctx.helperCode.join('\n ') + '\n ' : '') +
|
|
3156
|
-
checkStr +
|
|
3226
|
+
body = `const _e=[];\n ` + helpersE + checkStr +
|
|
3157
3227
|
`\n return{valid:_e.length===0,errors:_e}`
|
|
3158
3228
|
}
|
|
3159
3229
|
try {
|
|
@@ -3232,8 +3302,11 @@ function genCodeE(schema, v, pathExpr, lines, ctx, schemaPrefix) {
|
|
|
3232
3302
|
}
|
|
3233
3303
|
// $ref — resolve local and cross-schema refs
|
|
3234
3304
|
if (schema.$ref) {
|
|
3235
|
-
//
|
|
3236
|
-
|
|
3305
|
+
// A self-reference cannot be expressed here yet: the root helper takes no
|
|
3306
|
+
// path argument, so errors raised through it would carry the path of the
|
|
3307
|
+
// root rather than of the value that failed. This used to fall through as
|
|
3308
|
+
// a permissive no-op, which accepted whatever the reference guarded.
|
|
3309
|
+
if (schema.$ref === '#') throw DECLINE
|
|
3237
3310
|
const m = schema.$ref.match(/^#\/(?:\$defs|definitions)\/(.+)$/)
|
|
3238
3311
|
if (m && ctx.rootDefs && ctx.rootDefs[m[1]]) {
|
|
3239
3312
|
const defName = m[1]
|
|
@@ -3248,7 +3321,12 @@ function genCodeE(schema, v, pathExpr, lines, ctx, schemaPrefix) {
|
|
|
3248
3321
|
ctx.defFns.set(defName, fnName)
|
|
3249
3322
|
const bodyLines = []
|
|
3250
3323
|
genCodeE(ctx.rootDefs[defName], 'd', '_p', bodyLines, ctx, '#/$defs/' + defName)
|
|
3251
|
-
ctx.helperCode.push(
|
|
3324
|
+
ctx.helperCode.push(
|
|
3325
|
+
`const ${fnName}_s=new Set()\n function ${fnName}(d,_p,_all,_e){\n ` +
|
|
3326
|
+
`if(_sg){if(typeof d!=='object'||d===null)return ${fnName}_b(d,_p,_all,_e);if(${fnName}_s.has(d))return;${fnName}_s.add(d);try{return ${fnName}_b(d,_p,_all,_e)}finally{${fnName}_s.delete(d)}}\n ` +
|
|
3327
|
+
`if(++_sd>${CYCLE_DEPTH})throw _CYC\n const _r=${fnName}_b(d,_p,_all,_e)\n _sd--\n return _r\n }\n ` +
|
|
3328
|
+
`function ${fnName}_b(d,_p,_all,_e){${bodyLines.join('\n ')}}`,
|
|
3329
|
+
)
|
|
3252
3330
|
}
|
|
3253
3331
|
lines.push(`${fnName}(${v},${pathExpr || '""'},_all,_e);if(!_all&&_e.length)return{valid:false,errors:_e}`)
|
|
3254
3332
|
return
|
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.12.0",
|
|
4
4
|
"description": "JSON Schema validation with first-class TypeScript and zero runtime cost. AOT compile to per-schema ESM modules with zero validator dependency. Generic Validator<T> for TypeBox/Zod/Valibot composition. Optional runtime API. Standard Schema V1 compatible.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "index.mjs",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"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",
|
|
45
45
|
"build": "cmake-js build --target ata",
|
|
46
46
|
"rebuild": "cmake-js rebuild --target ata",
|
|
47
|
-
"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_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_diagnostic.js && node tests/test_format_engine_parity.js && node tests/test_formats_single_pass.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_ajv_errors.js && node tests/test_pattern_properties_errors.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_value_equality.js && node tests/test_vocabulary.js && node tests/test_schema_scan.js && node tests/test_lazy_errors.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_data_positions.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",
|
|
47
|
+
"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_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_diagnostic.js && node tests/test_format_engine_parity.js && node tests/test_formats_single_pass.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_ajv_errors.js && node tests/test_pattern_properties_errors.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_value_equality.js && node tests/test_vocabulary.js && node tests/test_schema_scan.js && node tests/test_lazy_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_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_data_positions.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",
|
|
48
48
|
"bench:size": "node benchmark/bench_aot_size.mjs",
|
|
49
49
|
"test:suite": "node tests/run_suite.js && node tests/run_suite.js draft7 && node tests/run_suite.js v1",
|
|
50
50
|
"test:compat": "node tests/test_compat.js",
|
|
@@ -112,13 +112,13 @@
|
|
|
112
112
|
"LICENSE"
|
|
113
113
|
],
|
|
114
114
|
"optionalDependencies": {
|
|
115
|
-
"@ata-validator/native-darwin-arm64": "1.
|
|
116
|
-
"@ata-validator/native-darwin-x64": "1.
|
|
117
|
-
"@ata-validator/native-linux-x64-gnu": "1.
|
|
118
|
-
"@ata-validator/native-linux-arm64-gnu": "1.
|
|
119
|
-
"@ata-validator/native-linux-x64-musl": "1.
|
|
120
|
-
"@ata-validator/native-linux-arm64-musl": "1.
|
|
121
|
-
"@ata-validator/native-win32-x64": "1.
|
|
115
|
+
"@ata-validator/native-darwin-arm64": "1.12.0",
|
|
116
|
+
"@ata-validator/native-darwin-x64": "1.12.0",
|
|
117
|
+
"@ata-validator/native-linux-x64-gnu": "1.12.0",
|
|
118
|
+
"@ata-validator/native-linux-arm64-gnu": "1.12.0",
|
|
119
|
+
"@ata-validator/native-linux-x64-musl": "1.12.0",
|
|
120
|
+
"@ata-validator/native-linux-arm64-musl": "1.12.0",
|
|
121
|
+
"@ata-validator/native-win32-x64": "1.12.0"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|
|
124
124
|
"yaml": "^2.0.0"
|