.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / ajv-keywords / keywords / transform.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/ajv-keywords/keywords/transform.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/ajv-keywords/keywords/transform.js
new file mode 100644 (file)
index 0000000..d715452
--- /dev/null
@@ -0,0 +1,80 @@
+'use strict';
+
+module.exports = function defFunc (ajv) {
+  var transform = {
+    trimLeft: function (value) {
+      return value.replace(/^[\s]+/, '');
+    },
+    trimRight: function (value) {
+      return value.replace(/[\s]+$/, '');
+    },
+    trim: function (value) {
+      return value.trim();
+    },
+    toLowerCase: function (value) {
+      return value.toLowerCase();
+    },
+    toUpperCase: function (value) {
+      return value.toUpperCase();
+    },
+    toEnumCase: function (value, cfg) {
+      return cfg.hash[makeHashTableKey(value)] || value;
+    }
+  };
+
+  defFunc.definition = {
+    type: 'string',
+    errors: false,
+    modifying: true,
+    valid: true,
+    compile: function (schema, parentSchema) {
+      var cfg;
+
+      if (schema.indexOf('toEnumCase') !== -1) {
+        // build hash table to enum values
+        cfg = {hash: {}};
+
+        // requires `enum` in schema
+        if (!parentSchema.enum)
+          throw new Error('Missing enum. To use `transform:["toEnumCase"]`, `enum:[...]` is required.');
+        for (var i = parentSchema.enum.length; i--; i) {
+          var v = parentSchema.enum[i];
+          if (typeof v !== 'string') continue;
+          var k = makeHashTableKey(v);
+          // requires all `enum` values have unique keys
+          if (cfg.hash[k])
+            throw new Error('Invalid enum uniqueness. To use `transform:["toEnumCase"]`, all values must be unique when case insensitive.');
+          cfg.hash[k] = v;
+        }
+      }
+
+      return function (data, dataPath, object, key) {
+        // skip if value only
+        if (!object) return;
+
+        // apply transform in order provided
+        for (var j = 0, l = schema.length; j < l; j++)
+          data = transform[schema[j]](data, cfg);
+
+        object[key] = data;
+      };
+    },
+    metaSchema: {
+      type: 'array',
+      items: {
+        type: 'string',
+        enum: [
+          'trimLeft', 'trimRight', 'trim',
+          'toLowerCase', 'toUpperCase', 'toEnumCase'
+        ]
+      }
+    }
+  };
+
+  ajv.addKeyword('transform', defFunc.definition);
+  return ajv;
+
+  function makeHashTableKey (value) {
+    return value.toLowerCase();
+  }
+};