UNPKG

3.65 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_PATTERN = exports.emailSchema = exports.verSchema = 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;
4const joi_extensions_1 = require("./joi.extensions");
5exports.booleanSchema = joi_extensions_1.Joi.boolean();
6exports.booleanDefaultToFalseSchema = joi_extensions_1.Joi.boolean().default(false);
7exports.stringSchema = joi_extensions_1.Joi.string();
8exports.numberSchema = joi_extensions_1.Joi.number();
9exports.integerSchema = joi_extensions_1.Joi.number().integer();
10exports.percentageSchema = joi_extensions_1.Joi.number().integer().min(0).max(100);
11exports.dateStringSchema = exports.stringSchema.dateString();
12exports.binarySchema = joi_extensions_1.Joi.binary();
13const urlSchema = (scheme = 'https') => joi_extensions_1.Joi.string().uri({ scheme });
14exports.urlSchema = urlSchema;
15function arraySchema(items) {
16 return items ? joi_extensions_1.Joi.array().items(items) : joi_extensions_1.Joi.array();
17}
18exports.arraySchema = arraySchema;
19function objectSchema(schema) {
20 return joi_extensions_1.Joi.object(schema);
21}
22exports.objectSchema = objectSchema;
23function oneOfSchema(...schemas) {
24 return joi_extensions_1.Joi.alternatives(schemas);
25}
26exports.oneOfSchema = oneOfSchema;
27exports.anySchema = joi_extensions_1.Joi.any();
28exports.anyObjectSchema = joi_extensions_1.Joi.object().options({ stripUnknown: false });
29// 1g498efj5sder3324zer
30/**
31 * [a-zA-Z0-9_]*
32 * 6-64 length
33 */
34exports.idSchema = exports.stringSchema.regex(/^[a-zA-Z0-9_]{6,64}$/);
35/**
36 * `_` should NOT be allowed to be able to use slug-ids as part of natural ids with `_` separator.
37 */
38exports.SLUG_PATTERN = /^[a-z0-9-]*$/;
39/**
40 * "Slug" - a valid URL, filename, etc.
41 */
42exports.slugSchema = exports.stringSchema.regex(/^[a-z0-9-]{1,255}$/);
43// 16725225600 is 2500-01-01
44exports.unixTimestampSchema = exports.numberSchema.integer().min(0).max(16725225600);
45// 2
46exports.verSchema = exports.numberSchema.optional().integer().min(1).max(100);
47/**
48 * Be careful, by default emailSchema does TLD validation. To disable it - use `stringSchema.email({tld: false}).lowercase()`
49 */
50exports.emailSchema = exports.stringSchema.email().lowercase();
51/**
52 * Pattern is simplified for our use, it's not a canonical SemVer.
53 */
54exports.SEM_VER_PATTERN = /^[0-9]+\.[0-9]+\.[0-9]+$/;
55exports.semVerSchema = exports.stringSchema.regex(exports.SEM_VER_PATTERN);
56// todo: .error(() => 'should be SemVer')
57exports.userAgentSchema = exports.stringSchema
58 .min(5) // I've seen UA of `Android` (7 characters)
59 .max(400);
60exports.utcOffsetSchema = exports.numberSchema
61 .min(-14 * 60)
62 .max(14 * 60)
63 .dividable(15);
64exports.ipAddressSchema = exports.stringSchema.ip();
65exports.baseDBEntitySchema = objectSchema({
66 id: exports.stringSchema.optional(),
67 created: exports.unixTimestampSchema.optional(),
68 updated: exports.unixTimestampSchema.optional(),
69});
70exports.savedDBEntitySchema = objectSchema({
71 id: exports.stringSchema,
72 created: exports.unixTimestampSchema,
73 updated: exports.unixTimestampSchema,
74});