Urara-Blog/node_modules/.pnpm-store/v3/files/80/4a5f3c44a586cabd1b0dae1fd85f3e68a4a927dd96556299001fd38c05c2fe0b4f7054737c9ed37be2242d704160fd6f0cfcffa2639710738a5d1c619684ca
2022-08-14 01:14:53 +08:00

50 lines
1.2 KiB
Text

import type {
CodeKeywordDefinition,
ErrorObject,
KeywordErrorDefinition,
AnySchema,
} from "../../types"
import type {KeywordCxt} from "../../compile/validate"
import {_, not} from "../../compile/codegen"
import {alwaysValidSchema} from "../../compile/util"
export type PropertyNamesError = ErrorObject<"propertyNames", {propertyName: string}, AnySchema>
const error: KeywordErrorDefinition = {
message: "property name must be valid",
params: ({params}) => _`{propertyName: ${params.propertyName}}`,
}
const def: CodeKeywordDefinition = {
keyword: "propertyNames",
type: "object",
schemaType: ["object", "boolean"],
error,
code(cxt: KeywordCxt) {
const {gen, schema, data, it} = cxt
if (alwaysValidSchema(it, schema)) return
const valid = gen.name("valid")
gen.forIn("key", data, (key) => {
cxt.setParams({propertyName: key})
cxt.subschema(
{
keyword: "propertyNames",
data: key,
dataTypes: ["string"],
propertyName: key,
compositeRule: true,
},
valid
)
gen.if(not(valid), () => {
cxt.error(true)
if (!it.allErrors) gen.break()
})
})
cxt.ok(valid)
},
}
export default def