.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / table / node_modules / ajv / lib / vocabularies / jtd / values.ts
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/lib/vocabularies/jtd/values.ts b/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/lib/vocabularies/jtd/values.ts
new file mode 100644 (file)
index 0000000..86091b8
--- /dev/null
@@ -0,0 +1,55 @@
+import type {CodeKeywordDefinition, SchemaObject} from "../../types"
+import type {KeywordCxt} from "../../compile/validate"
+import {alwaysValidSchema, Type} from "../../compile/util"
+import {not, Name} from "../../compile/codegen"
+import {checkMetadata} from "./metadata"
+import {checkNullableObject} from "./nullable"
+import {typeError, _JTDTypeError} from "./error"
+
+export type JTDValuesError = _JTDTypeError<"values", "object", SchemaObject>
+
+const def: CodeKeywordDefinition = {
+  keyword: "values",
+  schemaType: "object",
+  error: typeError("object"),
+  code(cxt: KeywordCxt) {
+    checkMetadata(cxt)
+    const {gen, data, schema, it} = cxt
+    if (alwaysValidSchema(it, schema)) return
+    const [valid, cond] = checkNullableObject(cxt, data)
+    gen.if(cond)
+    gen.assign(valid, validateMap())
+    gen.elseIf(not(valid))
+    cxt.error()
+    gen.endIf()
+    cxt.ok(valid)
+
+    function validateMap(): Name | boolean {
+      const _valid = gen.name("valid")
+      if (it.allErrors) {
+        const validMap = gen.let("valid", true)
+        validateValues(() => gen.assign(validMap, false))
+        return validMap
+      }
+      gen.var(_valid, true)
+      validateValues(() => gen.break())
+      return _valid
+
+      function validateValues(notValid: () => void): void {
+        gen.forIn("key", data, (key) => {
+          cxt.subschema(
+            {
+              keyword: "values",
+              dataProp: key,
+              dataPropType: Type.Str,
+            },
+            _valid
+          )
+          gen.if(not(_valid), notValid)
+        })
+      }
+    }
+  },
+}
+
+export default def