skema
Version:
Skema provides a handy & composable way to validate / transform / purify the input data.
86 lines (63 loc) • 2.13 kB
JavaScript
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;
;