UNPKG

es-grid-template

Version:

es-grid-template

73 lines (71 loc) 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; const factorySymbol = Symbol('factory-symbol'); function isProtoFactory(v) { return v && v[factorySymbol]; } function proto(baseRecord, ensureArray = 'auto') { const baseKeys = Object.keys(baseRecord); function process(record) { const result = Object.assign({}, record); baseKeys.forEach(key => { if (result[key] === proto.empty) { delete result[key]; return; } const base = baseRecord[key]; if (isProtoFactory(base)) { result[key] = base(result[key]); } else { result[key] = result[key] ?? base; } }); return result; } function factory(arg) { const isEnsureArray = ensureArray === 'auto' ? Array.isArray(arg) : ensureArray; if (isEnsureArray) { if (arg == null) { return []; } return arg.map(process); } else { return process(arg); } } // @ts-ignore factory[factorySymbol] = true; factory.extends = extRecord => { const extFactory = proto(extRecord, ensureArray); return arg => factory(extFactory(arg)); }; return factory; } proto.empty = Symbol('proto.empty'); proto.string = v => { if (v != null && typeof v !== 'string') { throw new Error('must be string'); } return v; }; proto.string[factorySymbol] = true; proto.number = v => { if (v != null && typeof v !== 'number') { throw new Error('must be number'); } return v; }; proto.number[factorySymbol] = true; proto.notNull = v => { if (v == null) { throw new Error('must be not null'); } return v; }; proto.notNull[factorySymbol] = true; proto.object = baseRecord => proto(baseRecord, false); proto.array = baseRecord => proto(baseRecord, true); var _default = exports.default = proto;