.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / table / node_modules / ajv / dist / vocabularies / jtd / discriminator.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/dist/vocabularies/jtd/discriminator.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/table/node_modules/ajv/dist/vocabularies/jtd/discriminator.js
new file mode 100644 (file)
index 0000000..16dde01
--- /dev/null
@@ -0,0 +1,71 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const codegen_1 = require("../../compile/codegen");
+const metadata_1 = require("./metadata");
+const nullable_1 = require("./nullable");
+const error_1 = require("./error");
+const types_1 = require("../discriminator/types");
+const error = {
+    message: (cxt) => {
+        const { schema, params } = cxt;
+        return params.discrError
+            ? params.discrError === types_1.DiscrError.Tag
+                ? `tag "${schema}" must be string`
+                : `value of tag "${schema}" must be in mapping`
+            : error_1.typeErrorMessage(cxt, "object");
+    },
+    params: (cxt) => {
+        const { schema, params } = cxt;
+        return params.discrError
+            ? codegen_1._ `{error: ${params.discrError}, tag: ${schema}, tagValue: ${params.tag}}`
+            : error_1.typeErrorParams(cxt, "object");
+    },
+};
+const def = {
+    keyword: "discriminator",
+    schemaType: "string",
+    implements: ["mapping"],
+    error,
+    code(cxt) {
+        metadata_1.checkMetadata(cxt);
+        const { gen, data, schema, parentSchema } = cxt;
+        const [valid, cond] = nullable_1.checkNullableObject(cxt, data);
+        gen.if(cond);
+        validateDiscriminator();
+        gen.elseIf(codegen_1.not(valid));
+        cxt.error();
+        gen.endIf();
+        cxt.ok(valid);
+        function validateDiscriminator() {
+            const tag = gen.const("tag", codegen_1._ `${data}${codegen_1.getProperty(schema)}`);
+            gen.if(codegen_1._ `${tag} === undefined`);
+            cxt.error(false, { discrError: types_1.DiscrError.Tag, tag });
+            gen.elseIf(codegen_1._ `typeof ${tag} == "string"`);
+            validateMapping(tag);
+            gen.else();
+            cxt.error(false, { discrError: types_1.DiscrError.Tag, tag }, { instancePath: schema });
+            gen.endIf();
+        }
+        function validateMapping(tag) {
+            gen.if(false);
+            for (const tagValue in parentSchema.mapping) {
+                gen.elseIf(codegen_1._ `${tag} === ${tagValue}`);
+                gen.assign(valid, applyTagSchema(tagValue));
+            }
+            gen.else();
+            cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag }, { instancePath: schema, schemaPath: "mapping", parentSchema: true });
+            gen.endIf();
+        }
+        function applyTagSchema(schemaProp) {
+            const _valid = gen.name("valid");
+            cxt.subschema({
+                keyword: "mapping",
+                schemaProp,
+                jtdDiscriminator: schema,
+            }, _valid);
+            return _valid;
+        }
+    },
+};
+exports.default = def;
+//# sourceMappingURL=discriminator.js.map
\ No newline at end of file