UNPKG

chain-able

Version:

interfaces that describe their intentions.

100 lines (83 loc) 9.45 kB
/* eslint complexity: "OFF" */ // util var ENV_DEVELOPMENT = require('../deps/env/dev') var ObjectKeys = require('../deps/util/keys') var isObj = require('../deps/is/obj') var isArray = require('../deps/is/array') var isUndefined = require('../deps/is/undefined') var isFunction = require('../deps/is/undefined') // logic var schemaBuilder = require('../deps/validators/schemaBuilder') var validatorBuilder = require('../deps/validators/validatorBuilder') var SCHEMA_KEY = 'schema' var isObjOrArray = function (x) { return (isObj(x) && !isFunction(x)) || isArray(x); } // const meta = require('../deps/meta') // const or = require('../deps/conditional/or') // const and = require('../deps/conditional/and') // const not = require('../deps/conditional/not') // const condition = Condition(Condition.is(isFunction).and().not(isObj)).or(isArray) // const isObjNotFn = and(not(isFunction), isObj) // const isObjOrArray = or(isObjNotFn, isArray) /** * @desc handles: * 1. recursively building nestable schemas, * 2. creating MethodChains for all types * 3. carrying over the inheritable properties * 4. @modifies @injects @decorates .add(customValidators) * @pattern decorator...builder...plugin... * @param {Schema} obj * @return {MethodFactory} @chainable */ module.exports = function schema(obj) { var this$1 = this; var parent = this.parent var ref = this.entries(); var onValid = ref.onValid; var onInvalid = ref.onInvalid; var define = ref.define; var getSet = ref.getSet; var keys = ObjectKeys(obj) for (var k = 0; k < keys.length; k++) { var key = keys[k] var value = obj[key] // parent.method // ? parent.method(key) // : // var builder = this$1.newThis().name(key) // MethodChain // @TODO: PLUCK METHOD FOR USING VALID KEYS // @TODO: // const entryKeys = ObjectKeys(entries) // const entries = this.entries() // for (let e = 0; e < entryKeys.length; e++) { // const entryKey = entryKeys[e] // const entry = entries[entryKey] // builder[entryKey](entry) // } if (onInvalid) { builder.onInvalid(onInvalid) } if (onValid) { builder.onValid(onValid) } if (define) { builder.define() } if (getSet) { builder.getSet() } var type = value if (isObjOrArray(value)) { // @@DEBUGGER // could just assign to type var traversableValidator = schemaBuilder(key, value) if (ENV_DEVELOPMENT) { traversableValidator.schema = value } type = traversableValidator } // @HACK @FIXME @TODO: this should not happen, // just when using babel and decorating not calling constructor... // likely needs to `return this` on each? // parent.store = parent.store || new Map() // parent.meta = meta(parent) if (parent.meta) { parent.meta(SCHEMA_KEY, key, value) } builder.type(type).build() } return parent } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlcyI6WyJzY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IGNvbXBsZXhpdHk6IFwiT0ZGXCIgKi9cblxuLy8gdXRpbFxuY29uc3QgRU5WX0RFVkVMT1BNRU5UID0gcmVxdWlyZSgnLi4vZGVwcy9lbnYvZGV2JylcbmNvbnN0IE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9kZXBzL3V0aWwva2V5cycpXG5jb25zdCBpc09iaiA9IHJlcXVpcmUoJy4uL2RlcHMvaXMvb2JqJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9kZXBzL2lzL2FycmF5JylcbmNvbnN0IGlzVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vZGVwcy9pcy91bmRlZmluZWQnKVxuY29uc3QgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2RlcHMvaXMvdW5kZWZpbmVkJylcbi8vIGxvZ2ljXG5jb25zdCBzY2hlbWFCdWlsZGVyID0gcmVxdWlyZSgnLi4vZGVwcy92YWxpZGF0b3JzL3NjaGVtYUJ1aWxkZXInKVxuY29uc3QgdmFsaWRhdG9yQnVpbGRlciA9IHJlcXVpcmUoJy4uL2RlcHMvdmFsaWRhdG9ycy92YWxpZGF0b3JCdWlsZGVyJylcblxuY29uc3QgU0NIRU1BX0tFWSA9ICdzY2hlbWEnXG5cbmNvbnN0IGlzT2JqT3JBcnJheSA9IHggPT4gKGlzT2JqKHgpICYmICFpc0Z1bmN0aW9uKHgpKSB8fCBpc0FycmF5KHgpXG5cbi8vIGNvbnN0IG1ldGEgPSByZXF1aXJlKCcuLi9kZXBzL21ldGEnKVxuLy8gY29uc3Qgb3IgPSByZXF1aXJlKCcuLi9kZXBzL2NvbmRpdGlvbmFsL29yJylcbi8vIGNvbnN0IGFuZCA9IHJlcXVpcmUoJy4uL2RlcHMvY29uZGl0aW9uYWwvYW5kJylcbi8vIGNvbnN0IG5vdCA9IHJlcXVpcmUoJy4uL2RlcHMvY29uZGl0aW9uYWwvbm90Jylcbi8vIGNvbnN0IGNvbmRpdGlvbiA9IENvbmRpdGlvbihDb25kaXRpb24uaXMoaXNGdW5jdGlvbikuYW5kKCkubm90KGlzT2JqKSkub3IoaXNBcnJheSlcbi8vIGNvbnN0IGlzT2JqTm90Rm4gPSBhbmQobm90KGlzRnVuY3Rpb24pLCBpc09iailcbi8vIGNvbnN0IGlzT2JqT3JBcnJheSA9IG9yKGlzT2JqTm90Rm4sIGlzQXJyYXkpXG5cbi8qKlxuICogQGRlc2MgaGFuZGxlczpcbiAqICAgICAgIDEuIHJlY3Vyc2l2ZWx5IGJ1aWxkaW5nIG5lc3RhYmxlIHNjaGVtYXMsXG4gKiAgICAgICAyLiBjcmVhdGluZyBNZXRob2RDaGFpbnMgZm9yIGFsbCB0eXBlc1xuICogICAgICAgMy4gY2Fycnlpbmcgb3ZlciB0aGUgaW5oZXJpdGFibGUgcHJvcGVydGllc1xuICogICAgICAgNC4gQG1vZGlmaWVzIEBpbmplY3RzIEBkZWNvcmF0ZXMgLmFkZChjdXN0b21WYWxpZGF0b3JzKVxuICogICAgICAgQHBhdHRlcm4gZGVjb3JhdG9yLi4uYnVpbGRlci4uLnBsdWdpbi4uLlxuICogQHBhcmFtICB7U2NoZW1hfSBvYmpcbiAqIEByZXR1cm4ge01ldGhvZEZhY3Rvcnl9IEBjaGFpbmFibGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzY2hlbWEob2JqKSB7XG4gIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50XG4gIGNvbnN0IHtvblZhbGlkLCBvbkludmFsaWQsIGRlZmluZSwgZ2V0U2V0fSA9IHRoaXMuZW50cmllcygpXG4gIGNvbnN0IGtleXMgPSBPYmplY3RLZXlzKG9iailcblxuICBmb3IgKGxldCBrID0gMDsgayA8IGtleXMubGVuZ3RoOyBrKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2tdXG4gICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgLy8gcGFyZW50Lm1ldGhvZFxuICAgIC8vICAgPyBwYXJlbnQubWV0aG9kKGtleSlcbiAgICAvLyAgIDpcbiAgICAvL1xuICAgIGxldCBidWlsZGVyID0gdGhpcy5uZXdUaGlzKCkubmFtZShrZXkpIC8vIE1ldGhvZENoYWluXG5cbiAgICAvLyBAVE9ETzogUExVQ0sgTUVUSE9EIEZPUiBVU0lORyBWQUxJRCBLRVlTXG4gICAgLy8gQFRPRE86XG4gICAgLy8gY29uc3QgZW50cnlLZXlzID0gT2JqZWN0S2V5cyhlbnRyaWVzKVxuICAgIC8vIGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMoKVxuICAgIC8vIGZvciAobGV0IGUgPSAwOyBlIDwgZW50cnlLZXlzLmxlbmd0aDsgZSsrKSB7XG4gICAgLy8gICBjb25zdCBlbnRyeUtleSA9IGVudHJ5S2V5c1tlXVxuICAgIC8vICAgY29uc3QgZW50cnkgPSBlbnRyaWVzW2VudHJ5S2V5XVxuICAgIC8vICAgYnVpbGRlcltlbnRyeUtleV0oZW50cnkpXG4gICAgLy8gfVxuICAgIGlmIChvbkludmFsaWQpIGJ1aWxkZXIub25JbnZhbGlkKG9uSW52YWxpZClcbiAgICBpZiAob25WYWxpZCkgYnVpbGRlci5vblZhbGlkKG9uVmFsaWQpXG4gICAgaWYgKGRlZmluZSkgYnVpbGRlci5kZWZpbmUoKVxuICAgIGlmIChnZXRTZXQpIGJ1aWxkZXIuZ2V0U2V0KClcblxuICAgIGxldCB0eXBlID0gdmFsdWVcbiAgICBpZiAoaXNPYmpPckFycmF5KHZhbHVlKSkge1xuICAgICAgLy8gQEBERUJVR0dFUlxuXG4gICAgICAvLyBjb3VsZCBqdXN0IGFzc2lnbiB0byB0eXBlXG4gICAgICBjb25zdCB0cmF2ZXJzYWJsZVZhbGlkYXRvciA9IHNjaGVtYUJ1aWxkZXIoa2V5LCB2YWx1ZSlcblxuICAgICAgaWYgKEVOVl9ERVZFTE9QTUVOVCkge1xuICAgICAgICB0cmF2ZXJzYWJsZVZhbGlkYXRvci5zY2hlbWEgPSB2YWx1ZVxuICAgICAgfVxuXG4gICAgICB0eXBlID0gdHJhdmVyc2FibGVWYWxpZGF0b3JcbiAgICB9XG5cbiAgICAvLyBASEFDSyBARklYTUUgQFRPRE86IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sXG4gICAgLy8ganVzdCB3aGVuIHVzaW5nIGJhYmVsIGFuZCBkZWNvcmF0aW5nIG5vdCBjYWxsaW5nIGNvbnN0cnVjdG9yLi4uXG4gICAgLy8gbGlrZWx5IG5lZWRzIHRvIGByZXR1cm4gdGhpc2Agb24gZWFjaD9cbiAgICAvLyBwYXJlbnQuc3RvcmUgPSBwYXJlbnQuc3RvcmUgfHwgbmV3IE1hcCgpXG4gICAgLy8gcGFyZW50Lm1ldGEgPSBtZXRhKHBhcmVudClcbiAgICBpZiAocGFyZW50Lm1ldGEpIHtcbiAgICAgIHBhcmVudC5tZXRhKFNDSEVNQV9LRVksIGtleSwgdmFsdWUpXG4gICAgfVxuXG4gICAgYnVpbGRlci50eXBlKHR5cGUpLmJ1aWxkKClcbiAgfVxuXG4gIHJldHVybiBwYXJlbnRcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCIsInRoaXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7QUFHQUEsR0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDbERBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0FBQy9DQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUN2Q0EsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDM0NBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0FBQ25EQSxHQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzs7QUFFbERBLEdBQUssQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGtDQUFrQyxDQUFDO0FBQ2pFQSxHQUFLLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLHFDQUFxQyxDQUFDOztBQUV2RUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFROztBQUUzQkEsR0FBSyxDQUFDLFlBQVksR0FBRyxVQUFBLENBQUMsQ0FBQSxDQUFDLEFBQUcsU0FBQSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQnBFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBQUE7RUFDckNBLEdBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07RUFDMUIsQUFBSyxBQUFxQyxPQUFBLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUFwRCxJQUFBLE9BQU87RUFBRSxJQUFBLFNBQVM7RUFBRSxJQUFBLE1BQU07RUFBRSxJQUFBLE1BQU0sY0FBbkMsQUFBUSxBQUFXLEFBQVEsQUFBUSxBQUFrQjtFQUMzREEsR0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDOztFQUU1QixLQUFLQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNwQ0QsR0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25CQSxHQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7Ozs7OztJQU10QkMsR0FBRyxDQUFDLE9BQU8sR0FBR0MsTUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7Ozs7O0lBV3RDLElBQUksU0FBUyxFQUFFLEVBQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBQTtJQUMzQyxJQUFJLE9BQU8sRUFBRSxFQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUE7SUFDckMsSUFBSSxNQUFNLEVBQUUsRUFBQSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUE7SUFDNUIsSUFBSSxNQUFNLEVBQUUsRUFBQSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUE7O0lBRTVCRCxHQUFHLENBQUMsSUFBSSxHQUFHLEtBQUs7SUFDaEIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUU7Ozs7TUFJdkJELEdBQUssQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQzs7TUFFdEQsSUFBSSxlQUFlLEVBQUU7UUFDbkIsb0JBQW9CLENBQUMsTUFBTSxHQUFHLEtBQUs7T0FDcEM7O01BRUQsSUFBSSxHQUFHLG9CQUFvQjtLQUM1Qjs7Ozs7OztJQU9ELElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtNQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7S0FDcEM7O0lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7R0FDM0I7O0VBRUQsT0FBTyxNQUFNO0NBQ2Q7In0=