目标
实现有意义的 draft-07 子集校验器:type/enum/const、数值与字符串约束、对象属性与 required、数组 items 与 uniqueItems、allOf/anyOf/oneOf/not、if-then-else、本地 $ref 带环检测,错误报告实例路径加 schema 路径。
要点
编译为闭包树:regex 预编译、子校验器直引用,千次校验零重复解释;oneOf 数“空错误列表”的分支数,失败把各分支错误聚合进父错误让用户看到最接近的分支;$ref 惰性编译加栈守卫,递归树模式可任意深度而真环报命名错误;官方测试套件在 CI 里当永久裁判。
提示
错误路径就是产品:required 一次报全部缺失键、数组元素路径追加 /0 形式索引。
验证
每个测试断言精确的 instancePath 字符串;套件测试度量实现子集的通过率并白名单有意未实现项。 项目目录骨架:
jsonschema/
├── src/
│ ├── index.js
│ ├── compile.js
│ ├── keywords/
│ │ ├── types.js
│ │ ├── numeric.js
│ │ ├── strings.js
│ │ ├── objects.js
│ │ └── arrays.js
│ └── refs.js
├── test/
│ ├── keywords.test.js
│ └── suite.test.js
└── package.json
实施阶段:Core types and scalars → Objects and arrays → Combinators and conditionals → Local $ref and cycle safety。