| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | 
							- '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);
 
-   }
 
- };
 
 
  |