UNPKG

computed-types

Version:

Runtime validation types for TypeScript.

85 lines (65 loc) 11.3 kB
"use strict"; exports.__esModule = true; exports.deepConcat = deepConcat; exports.isPrimitive = isPrimitive; exports.isPromiseLike = isPromiseLike; exports.typeCheck = typeCheck; var _errors = require("./errors"); // export type RequiredKeys<T> = { // [k in keyof T]-?: undefined extends T[k] ? never : k; // }[keyof T]; // export type OptionalKeys<T> = Exclude<keyof T, RequiredKeys<T>>; // exported functions function typeCheck(ok) { return ok; } function isPromiseLike(value) { return !!value && typeof value.then === 'function'; } function isPrimitive(value) { return typeof value !== 'object' && typeof value !== 'function' || value === null; } function deepConcat(...values) { if (values.length < 2) { return values[0]; } values = values.filter(value => value !== undefined); if (values.length < 2) { return values[0]; } let base = values[0]; if (typeof base !== 'object' || base === null) { for (let i = 1; i < values.length; i += 1) { if (values[i] !== base) { throw new _errors.ValidationError(`Type mismatch on validation concat`); } } return base; } const keys = {}; for (let i = 0; i < values.length; i += 1) { const value = values[i]; if (typeof value !== 'object' || value === null) { throw new _errors.ValidationError(`Type mismatch on validation concat`); } for (const key in value) { if (!Object.prototype.hasOwnProperty.call(value, key)) continue; const keyVal = value[key]; if (keyVal === undefined) continue; if (!keys[key]) { keys[key] = []; } keys[key].push(keyVal); } } if (Array.isArray(base)) { base = []; } else { base = {}; } for (const key in keys) { base[key] = deepConcat(...keys[key]); } return base; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdXRpbHMudHMiXSwibmFtZXMiOlsidHlwZUNoZWNrIiwib2siLCJpc1Byb21pc2VMaWtlIiwidmFsdWUiLCJ0aGVuIiwiaXNQcmltaXRpdmUiLCJkZWVwQ29uY2F0IiwidmFsdWVzIiwibGVuZ3RoIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwiYmFzZSIsImkiLCJWYWxpZGF0aW9uRXJyb3IiLCJrZXlzIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwia2V5VmFsIiwicHVzaCIsIkFycmF5IiwiaXNBcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFQTs7QUFvRkE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVPLFNBQVNBLFNBQVQsQ0FDTEMsRUFESyxFQUVJO0FBQ1QsU0FBT0EsRUFBUDtBQUNEOztBQUVNLFNBQVNDLGFBQVQsQ0FBdUJDLEtBQXZCLEVBQXNFO0FBQzNFLFNBQU8sQ0FBQyxDQUFDQSxLQUFGLElBQVcsT0FBUUEsS0FBRCxDQUFnQ0MsSUFBdkMsS0FBZ0QsVUFBbEU7QUFDRDs7QUFFTSxTQUFTQyxXQUFULENBQXFCRixLQUFyQixFQUF5RDtBQUM5RCxTQUNHLE9BQU9BLEtBQVAsS0FBaUIsUUFBakIsSUFBNkIsT0FBT0EsS0FBUCxLQUFpQixVQUEvQyxJQUE4REEsS0FBSyxLQUFLLElBRDFFO0FBR0Q7O0FBbUJNLFNBQVNHLFVBQVQsQ0FBb0IsR0FBR0MsTUFBdkIsRUFBbUQ7QUFDeEQsTUFBSUEsTUFBTSxDQUFDQyxNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLFdBQU9ELE1BQU0sQ0FBQyxDQUFELENBQWI7QUFDRDs7QUFFREEsRUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNFLE1BQVAsQ0FBZU4sS0FBRCxJQUFXQSxLQUFLLEtBQUtPLFNBQW5DLENBQVQ7O0FBQ0EsTUFBSUgsTUFBTSxDQUFDQyxNQUFQLEdBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLFdBQU9ELE1BQU0sQ0FBQyxDQUFELENBQWI7QUFDRDs7QUFFRCxNQUFJSSxJQUFJLEdBQUdKLE1BQU0sQ0FBQyxDQUFELENBQWpCOztBQUNBLE1BQUksT0FBT0ksSUFBUCxLQUFnQixRQUFoQixJQUE0QkEsSUFBSSxLQUFLLElBQXpDLEVBQStDO0FBQzdDLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0wsTUFBTSxDQUFDQyxNQUEzQixFQUFtQ0ksQ0FBQyxJQUFJLENBQXhDLEVBQTJDO0FBQ3pDLFVBQUlMLE1BQU0sQ0FBQ0ssQ0FBRCxDQUFOLEtBQWNELElBQWxCLEVBQXdCO0FBQ3RCLGNBQU0sSUFBSUUsdUJBQUosQ0FBcUIsb0NBQXJCLENBQU47QUFDRDtBQUNGOztBQUVELFdBQU9GLElBQVA7QUFDRDs7QUFFRCxRQUFNRyxJQUErQixHQUFHLEVBQXhDOztBQUNBLE9BQUssSUFBSUYsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0wsTUFBTSxDQUFDQyxNQUEzQixFQUFtQ0ksQ0FBQyxJQUFJLENBQXhDLEVBQTJDO0FBQ3pDLFVBQU1ULEtBQUssR0FBR0ksTUFBTSxDQUFDSyxDQUFELENBQXBCOztBQUVBLFFBQUksT0FBT1QsS0FBUCxLQUFpQixRQUFqQixJQUE2QkEsS0FBSyxLQUFLLElBQTNDLEVBQWlEO0FBQy9DLFlBQU0sSUFBSVUsdUJBQUosQ0FBcUIsb0NBQXJCLENBQU47QUFDRDs7QUFFRCxTQUFLLE1BQU1FLEdBQVgsSUFBa0JaLEtBQWxCLEVBQXlCO0FBQ3ZCLFVBQUksQ0FBQ2EsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNoQixLQUFyQyxFQUE0Q1ksR0FBNUMsQ0FBTCxFQUF1RDtBQUV2RCxZQUFNSyxNQUFNLEdBQUdqQixLQUFLLENBQUNZLEdBQUQsQ0FBcEI7QUFDQSxVQUFJSyxNQUFNLEtBQUtWLFNBQWYsRUFBMEI7O0FBRTFCLFVBQUksQ0FBQ0ksSUFBSSxDQUFDQyxHQUFELENBQVQsRUFBZ0I7QUFDZEQsUUFBQUEsSUFBSSxDQUFDQyxHQUFELENBQUosR0FBWSxFQUFaO0FBQ0Q7O0FBQ0RELE1BQUFBLElBQUksQ0FBQ0MsR0FBRCxDQUFKLENBQVVNLElBQVYsQ0FBZUQsTUFBZjtBQUNEO0FBQ0Y7O0FBRUQsTUFBSUUsS0FBSyxDQUFDQyxPQUFOLENBQWNaLElBQWQsQ0FBSixFQUF5QjtBQUN2QkEsSUFBQUEsSUFBSSxHQUFHLEVBQVA7QUFDRCxHQUZELE1BRU87QUFDTEEsSUFBQUEsSUFBSSxHQUFHLEVBQVA7QUFDRDs7QUFFRCxPQUFLLE1BQU1JLEdBQVgsSUFBa0JELElBQWxCLEVBQXdCO0FBQ3JCSCxJQUFBQSxJQUFELENBQWtDSSxHQUFsQyxJQUF5Q1QsVUFBVSxDQUNqRCxHQUFJUSxJQUFJLENBQUNDLEdBQUQsQ0FEeUMsQ0FBbkQ7QUFHRDs7QUFFRCxTQUFPSixJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVuY3Rpb25UeXBlIGZyb20gJy4vRnVuY3Rpb25UeXBlJztcbmltcG9ydCB7IFJlbW92ZUFzeW5jIH0gZnJvbSAnLi9pbyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbnR5cGUgSWZBbnk8VCwgWSwgTj4gPSAwIGV4dGVuZHMgMSAmIFQgPyBZIDogTjtcblxudHlwZSBFcXVhbFJlZm9ybWF0PFQ+ID0gVCBleHRlbmRzIEZ1bmN0aW9uVHlwZVxuICA/IFtcbiAgICAgICckJEZ1bmN0aW9uVHlwZSQkJyxcbiAgICAgIEVxdWFsUmVmb3JtYXQ8UmV0dXJuVHlwZTxUPj4sXG4gICAgICBFcXVhbFJlZm9ybWF0PFBhcmFtZXRlcnM8VD4+LFxuICAgIF1cbiAgOiBUIGV4dGVuZHMgb2JqZWN0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICA/IHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBFcXVhbFJlZm9ybWF0PFRbS10+O1xuICAgIH1cbiAgOiBJZkFueTxULCBuZXZlciwgVD47XG5cbnR5cGUgSWZFcXVhbDxULCBSLCBZLCBOPiA9IFtSXSBleHRlbmRzIFtUXSA/IChbVF0gZXh0ZW5kcyBbUl0gPyBZIDogTikgOiBOO1xuXG50eXBlIElmRGVlcEVxdWFsPFQsIFIsIFksIE4+ID0gSWZFcXVhbDxcbiAgRXF1YWxSZWZvcm1hdDxUPixcbiAgRXF1YWxSZWZvcm1hdDxSPixcbiAgWSxcbiAgTlxuPjtcblxuLy8gZXhwb3J0ZWQgdHlwZXNcblxuZXhwb3J0IHR5cGUgT2JqZWN0UHJvcGVydHkgPSBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgc3ltYm9sXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCB2b2lkXG4gIHwgYmlnaW50O1xuXG5leHBvcnQgdHlwZSBUeXBlb2YgPSB7XG4gIHN0cmluZzogc3RyaW5nO1xuICBudW1iZXI6IG51bWJlcjtcbiAgb2JqZWN0OiBvYmplY3Q7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBib29sZWFuOiBib29sZWFuO1xuICBzeW1ib2w6IHN5bWJvbDtcbiAgYmlnaW50OiBiaWdpbnQ7XG4gIHVuZGVmaW5lZDogdW5kZWZpbmVkO1xufTtcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUwMTU5ODY0LzUxODE1M1xuZXhwb3J0IHR5cGUgRW51bTxFPiA9IFJlY29yZDxrZXlvZiBFLCBzdHJpbmcgfCBudW1iZXI+ICYge1xuICBbazogbnVtYmVyXTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRWYWx1ZTxUPiA9XG4gIC8vIGRvIG5vdCBlc2NhcGUgVCB0byBbVF0gdG8gc3VwcG9ydCBgbnVtYmVyIHwgUHJvbWlzZTxzdHJpbmc+YFxuICBUIGV4dGVuZHMgUHJvbWlzZUxpa2U8aW5mZXIgUj4gPyBSIDogVDtcblxuZXhwb3J0IHR5cGUgSXNBc3luYzxTPiA9IFJlc29sdmVkVmFsdWU8Uz4gZXh0ZW5kcyBTXG4gID8gdW5rbm93biBleHRlbmRzIFNcbiAgICA/IHVua25vd25cbiAgICA6IGZhbHNlXG4gIDogUmVtb3ZlQXN5bmM8Uz4gZXh0ZW5kcyBuZXZlclxuICA/IHRydWVcbiAgOiB1bmtub3duO1xuXG5leHBvcnQgdHlwZSBNYXliZUFzeW5jPFQsIFY+ID0gdW5rbm93biBleHRlbmRzIElzQXN5bmM8VD5cbiAgPyBQcm9taXNlTGlrZTxWPiB8IFZcbiAgOiB0cnVlIGV4dGVuZHMgSXNBc3luYzxUPlxuICA/IFByb21pc2VMaWtlPFY+XG4gIDogVjtcblxuZXhwb3J0IHR5cGUgUmVjdXJzaXZlTWVyZ2U8VD4gPSBbVF0gZXh0ZW5kcyBbUHJpbWl0aXZlXVxuICA/IFRcbiAgOiBbVF0gZXh0ZW5kcyBbW3Vua25vd25dXVxuICA/IFtSZWN1cnNpdmVNZXJnZTxUWzBdPl1cbiAgOiBbVF0gZXh0ZW5kcyBbW3Vua25vd24/XV1cbiAgPyBbUmVjdXJzaXZlTWVyZ2U8VFswXT4/XVxuICA6IFtUXSBleHRlbmRzIFtvYmplY3RdIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICA/IHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBSZWN1cnNpdmVNZXJnZTxUW0tdPjtcbiAgICB9XG4gIDogVDtcblxuLy8gZXhwb3J0IHR5cGUgUmVxdWlyZWRLZXlzPFQ+ID0ge1xuLy8gICBbayBpbiBrZXlvZiBUXS0/OiB1bmRlZmluZWQgZXh0ZW5kcyBUW2tdID8gbmV2ZXIgOiBrO1xuLy8gfVtrZXlvZiBUXTtcblxuLy8gZXhwb3J0IHR5cGUgT3B0aW9uYWxLZXlzPFQ+ID0gRXhjbHVkZTxrZXlvZiBULCBSZXF1aXJlZEtleXM8VD4+O1xuXG4vLyBleHBvcnRlZCBmdW5jdGlvbnNcblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVDaGVjazxULCBSLCBZID0gJ29rJyBleHRlbmRzIFQgPyBuZXZlciA6ICdvayc+KFxuICBvazogSWZEZWVwRXF1YWw8VCwgUiwgSWZBbnk8VCwgSWZBbnk8UiwgWSwgVD4sIElmQW55PFIsIFQsIFk+PiwgVD4sXG4pOiB1bmtub3duIHtcbiAgcmV0dXJuIG9rO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlTGlrZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFByb21pc2VMaWtlPHVua25vd24+IHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mICh2YWx1ZSBhcyBQcm9taXNlTGlrZTx1bmtub3duPikudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUHJpbWl0aXZlIHtcbiAgcmV0dXJuIChcbiAgICAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicpIHx8IHZhbHVlID09PSBudWxsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0KCk6IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEE+KC4uLnZhbHVlczogW0FdKTogQTtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEEsIEI+KC4uLnZhbHVlczogW0EsIEJdKTogQSAmIEI7XG5leHBvcnQgZnVuY3Rpb24gZGVlcENvbmNhdDxBLCBCLCBDPiguLi52YWx1ZXM6IFtBLCBCLCBDXSk6IEEgJiBCICYgQztcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEEsIEIsIEMsIEQ+KC4uLnZhbHVlczogW0EsIEIsIEMsIERdKTogQSAmIEIgJiBDICYgRDtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEEsIEIsIEMsIEQsIEU+KFxuICAuLi52YWx1ZXM6IFtBLCBCLCBDLCBELCBFXVxuKTogQSAmIEIgJiBDICYgRCAmIEU7XG5leHBvcnQgZnVuY3Rpb24gZGVlcENvbmNhdDxBLCBCLCBDLCBELCBFLCBGPihcbiAgLi4udmFsdWVzOiBbQSwgQiwgQywgRCwgRSwgRl1cbik6IEEgJiBCICYgQyAmIEQgJiBFICYgRjtcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEEsIEIsIEMsIEQsIEUsIEYsIEc+KFxuICAuLi52YWx1ZXM6IFtBLCBCLCBDLCBELCBFLCBGLCBHXVxuKTogQSAmIEIgJiBDICYgRCAmIEUgJiBGICYgRztcbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29uY2F0PEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg+KFxuICAuLi52YWx1ZXM6IFtBLCBCLCBDLCBELCBFLCBGLCBHLCBIXVxuKTogQSAmIEIgJiBDICYgRCAmIEUgJiBGICYgRyAmIEg7XG5leHBvcnQgZnVuY3Rpb24gZGVlcENvbmNhdCguLi52YWx1ZXM6IHVua25vd25bXSk6IHVua25vd24ge1xuICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gdmFsdWVzWzBdO1xuICB9XG5cbiAgdmFsdWVzID0gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpO1xuICBpZiAodmFsdWVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gdmFsdWVzWzBdO1xuICB9XG5cbiAgbGV0IGJhc2UgPSB2YWx1ZXNbMF07XG4gIGlmICh0eXBlb2YgYmFzZSAhPT0gJ29iamVjdCcgfHwgYmFzZSA9PT0gbnVsbCkge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAodmFsdWVzW2ldICE9PSBiYXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFR5cGUgbWlzbWF0Y2ggb24gdmFsaWRhdGlvbiBjb25jYXRgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIGNvbnN0IGtleXM6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4gPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBUeXBlIG1pc21hdGNoIG9uIHZhbGlkYXRpb24gY29uY2F0YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSBjb250aW51ZTtcblxuICAgICAgY29uc3Qga2V5VmFsID0gdmFsdWVba2V5IGFzIGtleW9mIHR5cGVvZiB2YWx1ZV07XG4gICAgICBpZiAoa2V5VmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoIWtleXNba2V5XSkge1xuICAgICAgICBrZXlzW2tleV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGtleXNba2V5XS5wdXNoKGtleVZhbCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZSkpIHtcbiAgICBiYXNlID0gW107XG4gIH0gZWxzZSB7XG4gICAgYmFzZSA9IHt9O1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4ga2V5cykge1xuICAgIChiYXNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gZGVlcENvbmNhdChcbiAgICAgIC4uLihrZXlzW2tleV0gYXMgW3Vua25vd25dKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGJhc2U7XG59XG4iXX0=