1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 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
|