UNPKG

@naturalcycles/nodejs-lib

Version:
97 lines (96 loc) 4.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_PATTERN = exports.emailSchema = exports.verSchema = exports.unixTimestampMillis2000Schema = exports.unixTimestampMillisSchema = exports.unixTimestamp2000Schema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_PATTERN = exports.idSchema = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0; const joi_extensions_1 = require("./joi.extensions"); exports.booleanSchema = joi_extensions_1.Joi.boolean(); exports.booleanDefaultToFalseSchema = joi_extensions_1.Joi.boolean().default(false); exports.stringSchema = joi_extensions_1.Joi.string(); exports.numberSchema = joi_extensions_1.Joi.number(); exports.integerSchema = joi_extensions_1.Joi.number().integer(); exports.percentageSchema = joi_extensions_1.Joi.number().integer().min(0).max(100); exports.dateStringSchema = exports.stringSchema.dateString(); exports.binarySchema = joi_extensions_1.Joi.binary(); const urlSchema = (scheme = 'https') => joi_extensions_1.Joi.string().uri({ scheme }); exports.urlSchema = urlSchema; function arraySchema(items) { return items ? joi_extensions_1.Joi.array().items(items) : joi_extensions_1.Joi.array(); } exports.arraySchema = arraySchema; function objectSchema(schema) { return joi_extensions_1.Joi.object(schema); } exports.objectSchema = objectSchema; function oneOfSchema(...schemas) { return joi_extensions_1.Joi.alternatives(schemas); } exports.oneOfSchema = oneOfSchema; exports.anySchema = joi_extensions_1.Joi.any(); exports.anyObjectSchema = joi_extensions_1.Joi.object().options({ stripUnknown: false }); // 1g498efj5sder3324zer /** * [a-zA-Z0-9_]* * 6-64 length */ exports.idSchema = exports.stringSchema.regex(/^[a-zA-Z0-9_]{6,64}$/); /** * `_` should NOT be allowed to be able to use slug-ids as part of natural ids with `_` separator. */ exports.SLUG_PATTERN = /^[a-z0-9-]*$/; /** * "Slug" - a valid URL, filename, etc. */ exports.slugSchema = exports.stringSchema.regex(/^[a-z0-9-]{1,255}$/); const TS_2500 = 16725225600; // 2500-01-01 const TS_2000 = 946684800; // 2000-01-01 /** * Between years 1970 and 2050 */ exports.unixTimestampSchema = exports.numberSchema.integer().min(0).max(TS_2500); /** * Between years 2000 and 2050 */ exports.unixTimestamp2000Schema = exports.numberSchema.integer().min(0).min(TS_2000).max(TS_2500); /** * Between years 1970 and 2050 */ exports.unixTimestampMillisSchema = exports.numberSchema .integer() .min(0) .max(TS_2500 * 1000); /** * Between years 2000 and 2050 */ exports.unixTimestampMillis2000Schema = exports.numberSchema .integer() .min(TS_2000 * 1000) .max(TS_2500 * 1000); // 2 exports.verSchema = exports.numberSchema.optional().integer().min(1).max(100); /** * Be careful, by default emailSchema does TLD validation. To disable it - use `stringSchema.email({tld: false}).lowercase()` */ exports.emailSchema = exports.stringSchema.email().lowercase(); /** * Pattern is simplified for our use, it's not a canonical SemVer. */ exports.SEM_VER_PATTERN = /^[0-9]+\.[0-9]+\.[0-9]+$/; exports.semVerSchema = exports.stringSchema.regex(exports.SEM_VER_PATTERN); // todo: .error(() => 'should be SemVer') exports.userAgentSchema = exports.stringSchema .min(5) // I've seen UA of `Android` (7 characters) .max(400); exports.utcOffsetSchema = exports.numberSchema .min(-14 * 60) .max(14 * 60) .dividable(15); exports.ipAddressSchema = exports.stringSchema.ip(); exports.baseDBEntitySchema = objectSchema({ id: exports.stringSchema.optional(), created: exports.unixTimestamp2000Schema.optional(), updated: exports.unixTimestamp2000Schema.optional(), }); exports.savedDBEntitySchema = objectSchema({ id: exports.stringSchema, created: exports.unixTimestamp2000Schema, updated: exports.unixTimestamp2000Schema, });