.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / ajv-keywords / keywords / select.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/ajv-keywords/keywords/select.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/ajv-keywords/keywords/select.js
new file mode 100644 (file)
index 0000000..f79c6c7
--- /dev/null
@@ -0,0 +1,79 @@
+'use strict';
+
+var util = require('./_util');
+
+module.exports = function defFunc(ajv) {
+  if (!ajv._opts.$data) {
+    console.warn('keyword select requires $data option');
+    return ajv;
+  }
+  var metaSchemaRef = util.metaSchemaRef(ajv);
+  var compiledCaseSchemas = [];
+
+  defFunc.definition = {
+    validate: function v(schema, data, parentSchema) {
+      if (parentSchema.selectCases === undefined)
+        throw new Error('keyword "selectCases" is absent');
+      var compiled = getCompiledSchemas(parentSchema, false);
+      var validate = compiled.cases[schema];
+      if (validate === undefined) validate = compiled.default;
+      if (typeof validate == 'boolean') return validate;
+      var valid = validate(data);
+      if (!valid) v.errors = validate.errors;
+      return valid;
+    },
+    $data: true,
+    metaSchema: { type: ['string', 'number', 'boolean', 'null'] }
+  };
+
+  ajv.addKeyword('select', defFunc.definition);
+  ajv.addKeyword('selectCases', {
+    compile: function (schemas, parentSchema) {
+      var compiled = getCompiledSchemas(parentSchema);
+      for (var value in schemas)
+        compiled.cases[value] = compileOrBoolean(schemas[value]);
+      return function() { return true; };
+    },
+    valid: true,
+    metaSchema: {
+      type: 'object',
+      additionalProperties: metaSchemaRef
+    }
+  });
+  ajv.addKeyword('selectDefault', {
+    compile: function (schema, parentSchema) {
+      var compiled = getCompiledSchemas(parentSchema);
+      compiled.default = compileOrBoolean(schema);
+      return function() { return true; };
+    },
+    valid: true,
+    metaSchema: metaSchemaRef
+  });
+  return ajv;
+
+
+  function getCompiledSchemas(parentSchema, create) {
+    var compiled;
+    compiledCaseSchemas.some(function (c) {
+      if (c.parentSchema === parentSchema) {
+        compiled = c;
+        return true;
+      }
+    });
+    if (!compiled && create !== false) {
+      compiled = {
+        parentSchema: parentSchema,
+        cases: {},
+        default: true
+      };
+      compiledCaseSchemas.push(compiled);
+    }
+    return compiled;
+  }
+
+  function compileOrBoolean(schema) {
+    return typeof schema == 'boolean'
+            ? schema
+            : ajv.compile(schema);
+  }
+};