UNPKG

skema

Version:

Skema provides a handy & composable way to validate / transform / purify the input data.

86 lines (63 loc) 2.13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CUSTOM_INSPECT_SYMBOL = exports.SHAPE = exports.isError = exports.TYPE_ERROR = exports.isSkema = exports.TYPE_SKEMA = exports.symbol = exports.Types = void 0; var _error = require("./error"); var _util = require("./util"); // Something that has compatible problem for browsers // TODO: #6 // import symbol from 'symbol-for' const getTypeName = name => (0, _util.isObject)(name) ? name.name || name : name; // TODO: #6 supports browsers or fallback class Types { constructor() { // Use WeakMap so that it could be GCed this._map = new WeakMap(); this._hash = Object.create(null); } get(name, strict) { const value = (0, _util.isObject)(name) ? this._map.get(name) : this._hash[name]; if (strict && !value) { throw (0, _error.error)('UNKNOWN_TYPE', getTypeName(name)); } return value; } set(alias, skema) { if ((0, _util.isObject)(alias)) { return this._setMap(alias, skema); } if ((0, _util.isString)(alias)) { return this._setHash(alias, skema); } } _setMap(name, skema) { if (this._map.has(name)) { return this._redefine(name); } this._map.set(name, skema); } _redefine(name) { throw (0, _error.error)('REDECLARE_TYPE', getTypeName(name)); } _setHash(name, skema) { if (name in this._hash) { return this._redefine(name); } this._hash[name] = skema; } } // TODO: #6 supports browsers or fallback exports.Types = Types; const symbol = Symbol; exports.symbol = symbol; const TYPE_SKEMA = symbol.for('skema'); exports.TYPE_SKEMA = TYPE_SKEMA; const isSkema = subject => !!subject && subject[TYPE_SKEMA] === true; exports.isSkema = isSkema; const TYPE_ERROR = symbol.for('skema:error'); exports.TYPE_ERROR = TYPE_ERROR; const isError = subject => !!subject && subject[TYPE_ERROR]; exports.isError = isError; const SHAPE = symbol.for('skema:shape'); exports.SHAPE = SHAPE; const CUSTOM_INSPECT_SYMBOL = symbol.for('nodejs.util.inspect.custom'); exports.CUSTOM_INSPECT_SYMBOL = CUSTOM_INSPECT_SYMBOL;