@naturalcycles/nodejs-lib 12.102.1 → 12.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,35 @@
1
1
  /// <reference types="node" />
2
- import { BaseDBEntity, SavedDBEntity } from '@naturalcycles/js-lib';
2
+ import { BaseDBEntity, NumberEnum, SavedDBEntity, StringEnum } from '@naturalcycles/js-lib';
3
3
  import { AlternativesSchema, AnySchema, ArraySchema, ObjectSchema } from 'joi';
4
+ import { NumberSchema } from './number.extensions';
4
5
  import { StringSchema } from './string.extensions';
5
6
  export declare const booleanSchema: import("joi").BooleanSchema<boolean>;
6
7
  export declare const booleanDefaultToFalseSchema: import("joi").BooleanSchema<boolean>;
7
8
  export declare const stringSchema: StringSchema<string>;
8
- export declare const numberSchema: import("./number.extensions").NumberSchema<number>;
9
- export declare const integerSchema: import("./number.extensions").NumberSchema<number>;
10
- export declare const percentageSchema: import("./number.extensions").NumberSchema<number>;
9
+ export declare const stringSchemaTyped: <T>() => StringSchema<T>;
10
+ export declare const numberSchema: NumberSchema<number>;
11
+ export declare const numberSchemaTyped: <T>() => NumberSchema<T>;
12
+ export declare const integerSchema: NumberSchema<number>;
13
+ export declare const percentageSchema: NumberSchema<number>;
11
14
  export declare const dateStringSchema: StringSchema<string>;
12
15
  export declare const binarySchema: import("joi").BinarySchema<Buffer>;
13
16
  export declare const dateObjectSchema: ObjectSchema<any>;
17
+ /**
18
+ * Allows all values of a String Enum.
19
+ */
20
+ export declare const stringEnumValuesSchema: <ENUM extends StringEnum>(en: ENUM) => StringSchema<ENUM[keyof ENUM]>;
21
+ /**
22
+ * Allows all keys of a String Enum.
23
+ */
24
+ export declare const stringEnumKeysSchema: <ENUM extends StringEnum>(en: ENUM) => StringSchema;
25
+ /**
26
+ * Allows all values of a String Enum.
27
+ */
28
+ export declare const numberEnumValuesSchema: <ENUM extends NumberEnum>(en: ENUM) => NumberSchema<ENUM[keyof ENUM]>;
29
+ /**
30
+ * Allows all keys of a Number Enum.
31
+ */
32
+ export declare const numberEnumKeysSchema: <ENUM extends NumberEnum>(en: ENUM) => StringSchema;
14
33
  export declare const urlSchema: (scheme?: string | string[]) => StringSchema;
15
34
  export declare function arraySchema<T>(items?: AnySchema<T>): ArraySchema<T[]>;
16
35
  export declare function objectSchema<T>(schema?: {
@@ -46,20 +65,20 @@ export declare const slugSchema: StringSchema<string>;
46
65
  /**
47
66
  * Between years 1970 and 2050
48
67
  */
49
- export declare const unixTimestampSchema: import("./number.extensions").NumberSchema<number>;
68
+ export declare const unixTimestampSchema: NumberSchema<number>;
50
69
  /**
51
70
  * Between years 2000 and 2050
52
71
  */
53
- export declare const unixTimestamp2000Schema: import("./number.extensions").NumberSchema<number>;
72
+ export declare const unixTimestamp2000Schema: NumberSchema<number>;
54
73
  /**
55
74
  * Between years 1970 and 2050
56
75
  */
57
- export declare const unixTimestampMillisSchema: import("./number.extensions").NumberSchema<number>;
76
+ export declare const unixTimestampMillisSchema: NumberSchema<number>;
58
77
  /**
59
78
  * Between years 2000 and 2050
60
79
  */
61
- export declare const unixTimestampMillis2000Schema: import("./number.extensions").NumberSchema<number>;
62
- export declare const verSchema: import("./number.extensions").NumberSchema<number>;
80
+ export declare const unixTimestampMillis2000Schema: NumberSchema<number>;
81
+ export declare const verSchema: NumberSchema<number>;
63
82
  /**
64
83
  * Be careful, by default emailSchema does TLD validation. To disable it - use `stringSchema.email({tld: false}).lowercase()`
65
84
  */
@@ -70,7 +89,7 @@ export declare const emailSchema: StringSchema<string>;
70
89
  export declare const SEM_VER_REGEX: RegExp;
71
90
  export declare const semVerSchema: StringSchema<string>;
72
91
  export declare const userAgentSchema: StringSchema<string>;
73
- export declare const utcOffsetSchema: import("./number.extensions").NumberSchema<number>;
92
+ export declare const utcOffsetSchema: NumberSchema<number>;
74
93
  export declare const ipAddressSchema: StringSchema<string>;
75
94
  export declare const baseDBEntitySchema: ObjectSchema<BaseDBEntity>;
76
95
  export declare const savedDBEntitySchema: ObjectSchema<SavedDBEntity<string>>;
@@ -1,16 +1,41 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_REGEX = exports.emailSchema = exports.verSchema = exports.unixTimestampMillis2000Schema = exports.unixTimestampMillisSchema = exports.unixTimestamp2000Schema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_REGEX = exports.idBase64UrlSchema = exports.idBase64Schema = exports.idBase62Schema = exports.idSchema = exports.jwtSchema = exports.JWT_REGEX = exports.base64UrlSchema = exports.base64Schema = exports.base62Schema = exports.BASE64URL_REGEX = exports.BASE64_REGEX = exports.BASE62_REGEX = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.dateObjectSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchema = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
3
+ exports.savedDBEntitySchema = exports.baseDBEntitySchema = exports.ipAddressSchema = exports.utcOffsetSchema = exports.userAgentSchema = exports.semVerSchema = exports.SEM_VER_REGEX = exports.emailSchema = exports.verSchema = exports.unixTimestampMillis2000Schema = exports.unixTimestampMillisSchema = exports.unixTimestamp2000Schema = exports.unixTimestampSchema = exports.slugSchema = exports.SLUG_REGEX = exports.idBase64UrlSchema = exports.idBase64Schema = exports.idBase62Schema = exports.idSchema = exports.jwtSchema = exports.JWT_REGEX = exports.base64UrlSchema = exports.base64Schema = exports.base62Schema = exports.BASE64URL_REGEX = exports.BASE64_REGEX = exports.BASE62_REGEX = exports.anyObjectSchema = exports.anySchema = exports.oneOfSchema = exports.objectSchema = exports.arraySchema = exports.urlSchema = exports.numberEnumKeysSchema = exports.numberEnumValuesSchema = exports.stringEnumKeysSchema = exports.stringEnumValuesSchema = exports.dateObjectSchema = exports.binarySchema = exports.dateStringSchema = exports.percentageSchema = exports.integerSchema = exports.numberSchemaTyped = exports.numberSchema = exports.stringSchemaTyped = exports.stringSchema = exports.booleanDefaultToFalseSchema = exports.booleanSchema = void 0;
4
+ const js_lib_1 = require("@naturalcycles/js-lib");
4
5
  const joi_extensions_1 = require("./joi.extensions");
5
6
  exports.booleanSchema = joi_extensions_1.Joi.boolean();
6
7
  exports.booleanDefaultToFalseSchema = joi_extensions_1.Joi.boolean().default(false);
7
8
  exports.stringSchema = joi_extensions_1.Joi.string();
9
+ const stringSchemaTyped = () => joi_extensions_1.Joi.string();
10
+ exports.stringSchemaTyped = stringSchemaTyped;
8
11
  exports.numberSchema = joi_extensions_1.Joi.number();
12
+ const numberSchemaTyped = () => joi_extensions_1.Joi.number();
13
+ exports.numberSchemaTyped = numberSchemaTyped;
9
14
  exports.integerSchema = joi_extensions_1.Joi.number().integer();
10
15
  exports.percentageSchema = joi_extensions_1.Joi.number().integer().min(0).max(100);
11
16
  exports.dateStringSchema = exports.stringSchema.dateString();
12
17
  exports.binarySchema = joi_extensions_1.Joi.binary();
13
18
  exports.dateObjectSchema = joi_extensions_1.Joi.object().instance(Date);
19
+ /**
20
+ * Allows all values of a String Enum.
21
+ */
22
+ const stringEnumValuesSchema = (en) => joi_extensions_1.Joi.string().allow(...(0, js_lib_1._stringEnumValues)(en));
23
+ exports.stringEnumValuesSchema = stringEnumValuesSchema;
24
+ /**
25
+ * Allows all keys of a String Enum.
26
+ */
27
+ const stringEnumKeysSchema = (en) => joi_extensions_1.Joi.string().allow(...(0, js_lib_1._stringEnumKeys)(en));
28
+ exports.stringEnumKeysSchema = stringEnumKeysSchema;
29
+ /**
30
+ * Allows all values of a String Enum.
31
+ */
32
+ const numberEnumValuesSchema = (en) => joi_extensions_1.Joi.number().allow(...(0, js_lib_1._numberEnumValues)(en));
33
+ exports.numberEnumValuesSchema = numberEnumValuesSchema;
34
+ /**
35
+ * Allows all keys of a Number Enum.
36
+ */
37
+ const numberEnumKeysSchema = (en) => joi_extensions_1.Joi.string().allow(...(0, js_lib_1._numberEnumKeys)(en));
38
+ exports.numberEnumKeysSchema = numberEnumKeysSchema;
14
39
  const urlSchema = (scheme = 'https') => joi_extensions_1.Joi.string().uri({ scheme });
15
40
  exports.urlSchema = urlSchema;
16
41
  function arraySchema(items) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naturalcycles/nodejs-lib",
3
- "version": "12.102.1",
3
+ "version": "12.103.0",
4
4
  "scripts": {
5
5
  "prepare": "husky install",
6
6
  "docs-serve": "vuepress dev docs",
@@ -1,18 +1,56 @@
1
- import { BaseDBEntity, SavedDBEntity } from '@naturalcycles/js-lib'
1
+ import {
2
+ _numberEnumKeys,
3
+ _numberEnumValues,
4
+ _stringEnumKeys,
5
+ _stringEnumValues,
6
+ BaseDBEntity,
7
+ NumberEnum,
8
+ SavedDBEntity,
9
+ StringEnum,
10
+ } from '@naturalcycles/js-lib'
2
11
  import { AlternativesSchema, AnySchema, ArraySchema, ObjectSchema } from 'joi'
3
12
  import { Joi } from './joi.extensions'
13
+ import { NumberSchema } from './number.extensions'
4
14
  import { StringSchema } from './string.extensions'
5
15
 
6
16
  export const booleanSchema = Joi.boolean()
7
17
  export const booleanDefaultToFalseSchema = Joi.boolean().default(false)
8
18
  export const stringSchema = Joi.string()
19
+ export const stringSchemaTyped = <T>(): StringSchema<T> => Joi.string<T>()
9
20
  export const numberSchema = Joi.number()
21
+ export const numberSchemaTyped = <T>(): NumberSchema<T> => Joi.number<T>()
10
22
  export const integerSchema = Joi.number().integer()
11
23
  export const percentageSchema = Joi.number().integer().min(0).max(100)
12
24
  export const dateStringSchema = stringSchema.dateString()
13
25
  export const binarySchema = Joi.binary()
14
26
  export const dateObjectSchema = Joi.object().instance(Date)
15
27
 
28
+ /**
29
+ * Allows all values of a String Enum.
30
+ */
31
+ export const stringEnumValuesSchema = <ENUM extends StringEnum>(
32
+ en: ENUM,
33
+ ): StringSchema<ENUM[keyof ENUM]> => Joi.string<ENUM[keyof ENUM]>().allow(..._stringEnumValues(en))
34
+
35
+ /**
36
+ * Allows all keys of a String Enum.
37
+ */
38
+ export const stringEnumKeysSchema = <ENUM extends StringEnum>(en: ENUM): StringSchema =>
39
+ Joi.string().allow(..._stringEnumKeys(en))
40
+
41
+ /**
42
+ * Allows all values of a String Enum.
43
+ */
44
+ export const numberEnumValuesSchema = <ENUM extends NumberEnum>(
45
+ en: ENUM,
46
+ ): NumberSchema<ENUM[keyof ENUM]> => Joi.number<ENUM[keyof ENUM]>().allow(..._numberEnumValues(en))
47
+
48
+ /**
49
+ * Allows all keys of a Number Enum.
50
+ */
51
+ export const numberEnumKeysSchema = <ENUM extends NumberEnum>(en: ENUM): StringSchema =>
52
+ Joi.string().allow(..._numberEnumKeys(en))
53
+
16
54
  export const urlSchema = (scheme: string | string[] = 'https'): StringSchema =>
17
55
  Joi.string().uri({ scheme })
18
56