UNPKG

joiful

Version:

TypeScript Declarative Validation. Decorate your class properties to validate them using Joi.

77 lines 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkJoiIsCompatible = exports.IncompatibleJoiVersion = exports.getJoiVersion = exports.parseVersionString = exports.updateWorkingSchema = exports.getJoiSchema = exports.getMergedWorkingSchemas = exports.getWorkingSchema = exports.JOI_VERSION = exports.SCHEMA_KEY = exports.WORKING_SCHEMA_KEY = exports.getJoi = void 0; require("reflect-metadata"); const Joi = require("joi"); const getJoi = (options = {}) => options.joi || Joi; exports.getJoi = getJoi; exports.WORKING_SCHEMA_KEY = 'tsdv:working-schema'; exports.SCHEMA_KEY = 'tsdv:schema'; exports.JOI_VERSION = getJoiVersion(Joi); function getWorkingSchema(target) { let workingSchema = Reflect.getOwnMetadata(exports.WORKING_SCHEMA_KEY, target); return workingSchema; } exports.getWorkingSchema = getWorkingSchema; function getMergedWorkingSchemas(target) { const parentPrototype = Object.getPrototypeOf(target); const parentSchema = (parentPrototype && (parentPrototype.constructor !== Object) && getMergedWorkingSchemas(parentPrototype)); const workingSchema = getWorkingSchema(target); if (workingSchema || parentSchema) { return Object.assign(Object.assign({}, parentSchema), workingSchema); } return undefined; } exports.getMergedWorkingSchemas = getMergedWorkingSchemas; function getJoiSchema(Class, joi) { const isSchemaDefined = Reflect.hasOwnMetadata(exports.SCHEMA_KEY, Class.prototype); if (isSchemaDefined) { return Reflect.getOwnMetadata(exports.SCHEMA_KEY, Class.prototype); } let workingSchema = getMergedWorkingSchemas(Class.prototype); const joiSchema = (workingSchema ? joi.object().keys(workingSchema) : undefined); Reflect.defineMetadata(exports.SCHEMA_KEY, joiSchema, Class.prototype); return joiSchema; } exports.getJoiSchema = getJoiSchema; function updateWorkingSchema(target, propertyKey, schema) { let workingSchema = getWorkingSchema(target); if (!workingSchema) { workingSchema = {}; Reflect.defineMetadata(exports.WORKING_SCHEMA_KEY, workingSchema, target); } workingSchema[String(propertyKey)] = schema; } exports.updateWorkingSchema = updateWorkingSchema; function parseVersionString(version) { const [major, minor, patch] = (version).split('.'); return { major: major || '', minor: minor || '', patch: patch || '', }; } exports.parseVersionString = parseVersionString; function getJoiVersion(joi) { const versionString = (joi || {})['version'] || '?.?.?'; return parseVersionString(versionString); } exports.getJoiVersion = getJoiVersion; class IncompatibleJoiVersion extends Error { constructor(actualVersion) { super(`Cannot use Joi v${actualVersion} with Joiful. Joiful requires Joi v${exports.JOI_VERSION.major}.x.x`); } } exports.IncompatibleJoiVersion = IncompatibleJoiVersion; function checkJoiIsCompatible(joi) { if (joi) { const actualVersion = getJoiVersion(joi); if (exports.JOI_VERSION.major !== actualVersion.major) { throw new IncompatibleJoiVersion(actualVersion); } } } exports.checkJoiIsCompatible = checkJoiIsCompatible; //# sourceMappingURL=core.js.map