迁移到 schema-dsl v3
schema-dsl v3 只引入一项有意的破坏性变化:导入或 require 包 root 时,不再修改 String.prototype。
Root 导入
root 与 schema-dsl/pure 暴露同一套无副作用核心 API。已经使用 s(...)、dsl(...)、validate(...)、builder、exporter 或 schema-dsl/runtime 的代码,可保留原有 API 调用。
直接 String 链式
直接在字符串字面量上调用方法的代码,必须在应用启动阶段显式启用:
需要用单一入口明确保留 v1/v2 运行时行为时,可导入 schema-dsl/compat。库通常应使用 s('email!').description(...) 这类 builder,避免修改宿主原型。
Required、optional 与 null
!表示属性必填;编译完整对象并读取标准 JSON Schemarequired[]。?表示属性可缺省,不代表允许null。- 允许
null必须显式使用 null union,例如types:string|null或 raw JSON Schema{ type: ['string', 'null'] }。 - v3 不新增
isRequired()/isOptional();_required/_optional只是内部兼容细节。
ValidationResult
valid 与归一化后的 data 保持稳定。canonical error 使用 path、message、keyword;旧 field、type、expected 别名在 v3.0 继续兼容但已弃用。新集成应在自己的公共边界从 canonical 字段映射。