@terascope/core-utils 2.0.0-dev.8 → 2.0.0-rc.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.
@@ -25,6 +25,7 @@ export * from './objects.js';
25
25
  export * from './phone-number.js';
26
26
  export * from './promises.js';
27
27
  export * from './regex.js';
28
+ export * from './schemas.js';
28
29
  export * from './strings.js';
29
30
  export * from './iterators.js';
30
31
  export * from './vector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/src/index.js CHANGED
@@ -25,6 +25,7 @@ export * from './objects.js';
25
25
  export * from './phone-number.js';
26
26
  export * from './promises.js';
27
27
  export * from './regex.js';
28
+ export * from './schemas.js';
28
29
  export * from './strings.js';
29
30
  export * from './iterators.js';
30
31
  export * from './vector.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,69 @@
1
+ import bunyan from 'bunyan';
2
+ import moment from 'moment';
3
+ import { z, type ZodType } from 'zod';
4
+ import { AnyObject, Terafoundation as TF } from '@terascope/types';
5
+ export declare const formats: TF.Format[];
6
+ /**
7
+ * Facade class used to validate convict style schemas using the Zod library
8
+ */
9
+ export declare class SchemaValidator<T = AnyObject> {
10
+ name: string;
11
+ inputSchema: TF.Schema<T>;
12
+ zodSchema: ZodType<T>;
13
+ checkUndeclaredKeys: CheckUndeclaredKeys;
14
+ envMap: Record<string, {
15
+ envName: string;
16
+ format: TF.ConvictFormat;
17
+ }>;
18
+ argsMap: Record<string, {
19
+ argName: string;
20
+ format: TF.ConvictFormat;
21
+ }>;
22
+ logger: bunyan;
23
+ constructor(schema: TF.Schema<T>, name: string, extraFormats?: TF.Format[], checkUndeclaredKeys?: CheckUndeclaredKeys);
24
+ /**
25
+ * Validate that a configuration conforms to the schema
26
+ *
27
+ * @param { any } config A configuration to validate
28
+ * @returns { T } A valid object of type T
29
+ */
30
+ validate(config: any): T;
31
+ /**
32
+ * convert a convict style schema to zod schema
33
+ *
34
+ * @param { Schema<T> } schema A convict style schema
35
+ * @param { PropertyKey } parentKey Property name of a nested schema object
36
+ * or other identifier for the schema
37
+ * @param { Format[] } extraFormats User defined formats to be used for schema validation
38
+ * @returns { z.ZodType } A zod schema
39
+ */
40
+ _convictStyleSchemaToZod(schema: TF.Schema<T>, parentKey: PropertyKey): z.ZodType<T, unknown, z.core.$ZodTypeInternals<T, unknown>> | z.ZodDefault<z.ZodAny>;
41
+ /**
42
+ * Converts a convict style schema object to a zod schema
43
+ * @param { TF.SchemaObj } schemaObj The schema object to convert
44
+ * @param { PropertyKey } key The name of the property that uses the schemaObj
45
+ * @returns { ZodType } A Zod schema object
46
+ */
47
+ _convictSchemaObjToZod(schemaObj: TF.SchemaObj, key: PropertyKey): z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>> | z.ZodPipe<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>, z.ZodTransform<any, unknown>>;
48
+ /**
49
+ * Determines the base type that a full schema will be built on
50
+ * @param { PropertyKey } key The name of the property that uses the schemaObj
51
+ * @param { TF.ConvictFormat } convictFormatValue A convict compatible format value
52
+ * @returns { ZodType } The base type
53
+ */
54
+ _getBaseType(key: PropertyKey, convictFormatValue: TF.ConvictFormat): z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
55
+ /** Run the default value against the created schema to ensure it is valid */
56
+ _validateDefault(type: z.ZodType, defaultVal: any): void;
57
+ /** Unwrap the wrappers on base schema object and retrieve all keys */
58
+ getSchemaObjectKeys(schema: ZodType): string[] | undefined;
59
+ /** Look up a custom format by name and return the format object */
60
+ _getCustomFormatFromName(format: TF.ConvictFormat | undefined): TF.Format | null | undefined;
61
+ /** Determine if a format is the name of a custom format */
62
+ _isCustomFormatName(format: TF.ConvictFormat): boolean;
63
+ }
64
+ type CheckUndeclaredKeys = 'allow' | 'warn' | 'strict';
65
+ export declare function isSchemaObj<T>(value: unknown): value is TF.SchemaObj<T>;
66
+ export declare function isOfTypeFormat(value: unknown): value is TF.Format;
67
+ export declare function isMomentUnitOfTime(unitString: string): unitString is moment.unitOfTime.DurationConstructor;
68
+ export {};
69
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAsB,MAAM,KAAK,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,cAAc,IAAI,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAcnE,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,MAAM,EAgN9B,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAe,CAAC,CAAC,GAAG,SAAS;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAA;KAAE,CAAC,CAAM;IAC3E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAA;KAAE,CAAC,CAAM;IAC5E,MAAM,EAAE,MAAM,CAAC;gBAGX,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,EAAE,CAAC,MAAM,EAAO,EAC9B,mBAAmB,GAAE,mBAA4B;IA2BrD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,GAAG;IA0EpB;;;;;;;;OAQG;IACH,wBAAwB,CACpB,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACpB,SAAS,EAAE,WAAW;IA2B1B;;;;;OAKG;IACH,sBAAsB,CAClB,SAAS,EAAE,EAAE,CAAC,SAAS,EACvB,GAAG,EAAE,WAAW;IAoGpB;;;;;OAKG;IACH,YAAY,CACR,GAAG,EAAE,WAAW,EAChB,kBAAkB,EAAE,EAAE,CAAC,aAAa;IA2ExC,6EAA6E;IAC7E,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG;IAMjD,sEAAsE;IACtE,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS;IAmB1D,mEAAmE;IACnE,wBAAwB,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,GAAG,SAAS;IAO7D,2DAA2D;IAC3D,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa;CAQ/C;AAED,KAAK,mBAAmB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CA2CvE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC,MAAM,CAwBjE;AAED,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,MAAM,GACnB,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAqCrD"}
@@ -0,0 +1,664 @@
1
+ import assert from 'node:assert';
2
+ import bunyan from 'bunyan';
3
+ import dateMath from 'datemath-parser';
4
+ import moment from 'moment';
5
+ import { z } from 'zod';
6
+ import { isBoolean, toBoolean } from './booleans.js';
7
+ import { isValidDate, makeISODate } from './dates.js';
8
+ import { isFunction } from './functions.js';
9
+ import { isInteger, toInteger, toNumber } from './numbers.js';
10
+ import { isSimpleObject } from './objects.js';
11
+ import { isString, startsWith } from './strings.js';
12
+ const convictCompatibleBooleanFn = (value) => {
13
+ if (value === 'true' || value === '1' || value === 1)
14
+ return true;
15
+ if (value === 'false' || value === '0' || value === 0)
16
+ return false;
17
+ return value;
18
+ };
19
+ export const formats = [
20
+ {
21
+ name: 'required_string',
22
+ validate(val) {
23
+ if (!val || !isString(val)) {
24
+ throw new Error('This field is required and must be of type string');
25
+ }
26
+ }
27
+ },
28
+ {
29
+ name: 'optional_string',
30
+ validate(val) {
31
+ if (val == null)
32
+ return;
33
+ if (isString(val)) {
34
+ return;
35
+ }
36
+ throw new Error('This field is optional but if specified it must be of type string');
37
+ }
38
+ },
39
+ {
40
+ name: 'optional_date',
41
+ validate(val) {
42
+ if (val == null)
43
+ return;
44
+ if (isString(val) || isInteger(val)) {
45
+ if (isValidDate(val)) {
46
+ return;
47
+ }
48
+ throw new Error(`value: ${JSON.stringify(val)} cannot be coerced into a proper date`);
49
+ }
50
+ else {
51
+ throw new Error('parameter must be a string or number IF specified');
52
+ }
53
+ },
54
+ coerce(val) {
55
+ if (val == null)
56
+ return val;
57
+ try {
58
+ const parsed = dateMath.parse(val);
59
+ return makeISODate(parsed);
60
+ }
61
+ catch (err) {
62
+ return val;
63
+ }
64
+ }
65
+ },
66
+ {
67
+ name: 'elasticsearch_name',
68
+ validate(val) {
69
+ if (typeof val !== 'string') {
70
+ throw new Error(`value: ${val} must be a string`);
71
+ }
72
+ if (val.length > 255) {
73
+ throw new Error(`value: ${val} should not exceed 255 characters`);
74
+ }
75
+ if (startsWith(val, '_')
76
+ || startsWith(val, '-')
77
+ || startsWith(val, '+')) {
78
+ throw new Error(`value: ${val} should not start with _, -, or +`);
79
+ }
80
+ if (val === '.' || val === '..') {
81
+ throw new Error(`value: ${val} should not equal . or ..`);
82
+ }
83
+ // NOTE: the \\\\ is necessary to match a single \ in this case
84
+ const badChar = /[#*?"<>|/\\\\]/;
85
+ if (badChar.test(val)) {
86
+ throw new Error(`value: ${val} should not contain any invalid characters: #*?"<>|/\\`);
87
+ }
88
+ const upperRE = /[A-Z]/;
89
+ if (upperRE.test(val)) {
90
+ throw new Error(`value: ${val} should be lower case`);
91
+ }
92
+ },
93
+ },
94
+ {
95
+ name: 'positive_int',
96
+ validate(val) {
97
+ const int = toInteger(val);
98
+ if (int === false || int < 1) {
99
+ throw new Error('must be valid integer greater than zero');
100
+ }
101
+ },
102
+ coerce(val) {
103
+ return toInteger(val) || val;
104
+ },
105
+ },
106
+ {
107
+ name: 'optional_bool',
108
+ validate(val) {
109
+ if (val == null)
110
+ return;
111
+ if (!isBoolean(val)) {
112
+ throw new Error(`If specified, must be convertible to a boolean. Received: ${val}`);
113
+ }
114
+ },
115
+ coerce: convictCompatibleBooleanFn,
116
+ },
117
+ {
118
+ name: 'optional_int',
119
+ validate(val) {
120
+ if (val == null)
121
+ return;
122
+ if (!isInteger(val)) {
123
+ throw new Error(`If specified, must be an integer. Received: ${val}`);
124
+ }
125
+ },
126
+ coerce(val) {
127
+ return toInteger(val) || val;
128
+ },
129
+ },
130
+ {
131
+ name: 'duration',
132
+ coerce: (v) => {
133
+ if (typeof v === 'number') {
134
+ return v;
135
+ }
136
+ if (typeof v === 'string') {
137
+ const split = v.split(' ');
138
+ if (split.length == 1) {
139
+ // It must be an integer in string form.
140
+ return parseInt(v, 10);
141
+ }
142
+ else {
143
+ let unitString = split[1];
144
+ // Add an "s" as the unit of measurement used in Moment
145
+ if (!unitString.match(/s$/)) {
146
+ unitString += 's';
147
+ }
148
+ if (isMomentUnitOfTime(unitString)) {
149
+ return moment.duration(parseInt(split[0], 10), unitString).asMilliseconds();
150
+ }
151
+ }
152
+ }
153
+ return v;
154
+ },
155
+ validate: function (x) {
156
+ const err_msg = 'must be a positive integer or human readable string containing a number and valid unit (e.g. 3000, "5 days")';
157
+ if (Number.isInteger(x)) {
158
+ assert(x >= 0, err_msg);
159
+ }
160
+ else {
161
+ if (isString(x)) {
162
+ const unitString = x.split(' ')[1];
163
+ if (!isMomentUnitOfTime(unitString)) {
164
+ throw new Error(`Invalid duration unit: ${unitString}`);
165
+ }
166
+ assert(x.match(/^(\d)+ (.+)$/), err_msg);
167
+ }
168
+ else {
169
+ throw new Error(err_msg);
170
+ }
171
+ }
172
+ }
173
+ },
174
+ {
175
+ name: 'optional_duration',
176
+ coerce: (v) => {
177
+ if (v == null)
178
+ return v;
179
+ if (typeof v === 'number') {
180
+ return v;
181
+ }
182
+ if (typeof v === 'string') {
183
+ const split = v.split(' ');
184
+ if (split.length == 1) {
185
+ // It must be an integer in string form.
186
+ return parseInt(v, 10);
187
+ }
188
+ else {
189
+ let unitString = split[1];
190
+ // Add an "s" as the unit of measurement used in Moment
191
+ if (!unitString.match(/s$/)) {
192
+ unitString += 's';
193
+ }
194
+ if (isMomentUnitOfTime(unitString)) {
195
+ return moment.duration(parseInt(split[0], 10), unitString).asMilliseconds();
196
+ }
197
+ }
198
+ }
199
+ return v;
200
+ },
201
+ validate: function (x) {
202
+ const err_msg = 'If specified, must be a positive integer or human readable string containing a number and valid unit (e.g. 3000, "5 days")';
203
+ if (x == null)
204
+ return;
205
+ if (Number.isInteger(x)) {
206
+ assert(x >= 0, err_msg);
207
+ }
208
+ else {
209
+ if (isString(x)) {
210
+ const unitString = x.split(' ')[1];
211
+ if (!isMomentUnitOfTime(unitString)) {
212
+ throw new Error(`Invalid duration unit: ${unitString}`);
213
+ }
214
+ assert(x.match(/^(\d)+ (.+)$/), err_msg);
215
+ }
216
+ else {
217
+ throw new Error(err_msg);
218
+ }
219
+ }
220
+ }
221
+ },
222
+ {
223
+ name: 'timestamp',
224
+ coerce: (v) => moment(v).valueOf(),
225
+ validate: function (x) {
226
+ assert(Number.isInteger(x) && x >= 0, 'must be a positive integer');
227
+ }
228
+ }
229
+ ];
230
+ /**
231
+ * Facade class used to validate convict style schemas using the Zod library
232
+ */
233
+ export class SchemaValidator {
234
+ name;
235
+ inputSchema;
236
+ zodSchema;
237
+ checkUndeclaredKeys;
238
+ envMap = {};
239
+ argsMap = {};
240
+ logger;
241
+ constructor(schema, name, extraFormats = [], checkUndeclaredKeys = 'warn') {
242
+ extraFormats.forEach((newFormat) => {
243
+ let unique = true;
244
+ formats.forEach((existingFormat) => {
245
+ // find formats with same name
246
+ if (existingFormat.name === newFormat.name) {
247
+ // find format with different functions
248
+ if (existingFormat.coerce?.toString() !== newFormat.coerce?.toString()
249
+ || existingFormat.validate?.toString() !== newFormat.validate?.toString()) {
250
+ throw new Error(`Custom formats library already contains a format named ${newFormat.name}`);
251
+ }
252
+ unique = false;
253
+ }
254
+ });
255
+ if (unique) {
256
+ formats.push(newFormat);
257
+ }
258
+ });
259
+ this.name = name;
260
+ this.logger = bunyan.createLogger({ name: 'SchemaValidator' });
261
+ this.inputSchema = schema;
262
+ this.zodSchema = this._convictStyleSchemaToZod(schema, name);
263
+ this.checkUndeclaredKeys = checkUndeclaredKeys;
264
+ }
265
+ /**
266
+ * Validate that a configuration conforms to the schema
267
+ *
268
+ * @param { any } config A configuration to validate
269
+ * @returns { T } A valid object of type T
270
+ */
271
+ validate(config) {
272
+ const finalConfig = config;
273
+ // Node process arguments and environmental variables override
274
+ // values from a configuration
275
+ // precedence: args, env, loaded value from config, default
276
+ for (const key in this.envMap) {
277
+ const { envName, format } = this.envMap[key];
278
+ if (envName in process.env) {
279
+ let envVal;
280
+ if (format === Boolean || format === 'Boolean') {
281
+ envVal = toBoolean(process.env[envName]);
282
+ }
283
+ if (format === Number || format === 'Number') {
284
+ envVal = toNumber(process.env[envName]);
285
+ }
286
+ else {
287
+ envVal = process.env[envName];
288
+ }
289
+ finalConfig[key] = envVal;
290
+ }
291
+ }
292
+ for (const key in this.argsMap) {
293
+ const { argName, format } = this.argsMap[key];
294
+ // Find the arg either as exact match or with = syntax
295
+ let argIndex = process.argv.indexOf(`--${argName}`);
296
+ if (argIndex === -1) {
297
+ // Look for --argName=value syntax
298
+ argIndex = process.argv.findIndex((arg) => arg.startsWith(`--${argName}=`));
299
+ }
300
+ if (argIndex >= 2) { // argv flags start at index 2
301
+ const flag = process.argv[argIndex];
302
+ let argValue;
303
+ if (flag.includes('=')) {
304
+ argValue = flag.split('=')[1];
305
+ }
306
+ else {
307
+ argValue = process.argv[argIndex + 1];
308
+ }
309
+ if (format === Boolean || format === 'Boolean') {
310
+ argValue = toBoolean(argValue);
311
+ }
312
+ if (format === Number || format === 'Number') {
313
+ argValue = toNumber(argValue);
314
+ }
315
+ finalConfig[key] = argValue;
316
+ }
317
+ }
318
+ let validatedWithZod;
319
+ try {
320
+ validatedWithZod = this.zodSchema.parse(finalConfig);
321
+ }
322
+ catch (err) {
323
+ throw new Error(`Zod parse error: ${err}`);
324
+ }
325
+ if (this.checkUndeclaredKeys !== 'allow') {
326
+ const schemaKeys = this.getSchemaObjectKeys(this.zodSchema);
327
+ if (schemaKeys) {
328
+ for (const key in finalConfig) {
329
+ if (!schemaKeys.includes(key)) {
330
+ if (this.checkUndeclaredKeys === 'warn') {
331
+ this.logger.warn(`Key '${key}' is not declared in ${this.name} schema`);
332
+ }
333
+ else if (this.checkUndeclaredKeys === 'strict') {
334
+ throw new Error(`Key '${key}' is not declared in ${this.name} schema`);
335
+ }
336
+ }
337
+ }
338
+ }
339
+ }
340
+ return validatedWithZod;
341
+ }
342
+ /**
343
+ * convert a convict style schema to zod schema
344
+ *
345
+ * @param { Schema<T> } schema A convict style schema
346
+ * @param { PropertyKey } parentKey Property name of a nested schema object
347
+ * or other identifier for the schema
348
+ * @param { Format[] } extraFormats User defined formats to be used for schema validation
349
+ * @returns { z.ZodType } A zod schema
350
+ */
351
+ _convictStyleSchemaToZod(schema, parentKey) {
352
+ const fields = {};
353
+ const defaults = {};
354
+ if (!isSimpleObject(schema)) {
355
+ return z.any().default(schema);
356
+ }
357
+ for (const key in schema) {
358
+ const value = schema[key];
359
+ if (isSchemaObj(value)) {
360
+ fields[key] = this._convictSchemaObjToZod(value, key);
361
+ defaults[key] = value.default;
362
+ }
363
+ else {
364
+ fields[key] = this._convictStyleSchemaToZod(value, `${parentKey.toString()}.${key}`);
365
+ defaults[key] = fields[key].parse({});
366
+ }
367
+ }
368
+ return z.looseObject(fields)
369
+ .default(defaults);
370
+ }
371
+ /**
372
+ * Converts a convict style schema object to a zod schema
373
+ * @param { TF.SchemaObj } schemaObj The schema object to convert
374
+ * @param { PropertyKey } key The name of the property that uses the schemaObj
375
+ * @returns { ZodType } A Zod schema object
376
+ */
377
+ _convictSchemaObjToZod(schemaObj, key) {
378
+ let baseType;
379
+ let type;
380
+ let finalFormat;
381
+ if (schemaObj.format === undefined) {
382
+ // If no format is set assume the format is the typeof the default value
383
+ const defaultType = Object.prototype.toString.call(schemaObj.default);
384
+ finalFormat = function (x) {
385
+ assert(Object.prototype.toString.call(x) == defaultType, ' should be of type ' + defaultType.replace(/\[.* |]/g, ''));
386
+ };
387
+ baseType = this._getBaseType(key, finalFormat);
388
+ }
389
+ else {
390
+ baseType = this._getBaseType(key, schemaObj.format);
391
+ finalFormat = this._getCustomFormatFromName(schemaObj.format) || schemaObj.format;
392
+ }
393
+ try {
394
+ this._validateDefault(baseType, schemaObj.default);
395
+ }
396
+ catch (err) {
397
+ throw new Error(`Invalid default value for key ${key.toString()}: ${schemaObj.default}`);
398
+ }
399
+ type = z.preprocess((val) => {
400
+ // Only apply default for undefined, keep null as null
401
+ return val === undefined ? schemaObj.default : val;
402
+ }, baseType);
403
+ if (schemaObj.default === undefined) {
404
+ type = type.optional();
405
+ }
406
+ if (schemaObj.arg) {
407
+ this.argsMap[key.toString()] = { argName: schemaObj.arg, format: finalFormat };
408
+ }
409
+ if (schemaObj.env) {
410
+ this.envMap[key.toString()] = { envName: schemaObj.env, format: finalFormat };
411
+ }
412
+ if (isOfTypeFormat(finalFormat)) {
413
+ // custom formats
414
+ if (finalFormat.coerce && finalFormat.validate) {
415
+ return type.transform((val, ctx) => {
416
+ try {
417
+ // Both coerce and validate are guaranteed to exist from the check above
418
+ const finalVal = finalFormat.coerce(val);
419
+ finalFormat.validate(finalVal, schemaObj);
420
+ return finalVal;
421
+ }
422
+ catch (err) {
423
+ ctx.addIssue({
424
+ code: 'custom',
425
+ path: [key],
426
+ input: val,
427
+ message: err.message ? err.message : 'Validation failed',
428
+ });
429
+ return z.NEVER;
430
+ }
431
+ });
432
+ }
433
+ else {
434
+ return type.superRefine((val, ctx) => {
435
+ try {
436
+ if (finalFormat.validate) {
437
+ finalFormat.validate(val, schemaObj);
438
+ }
439
+ }
440
+ catch (err) {
441
+ ctx.addIssue({
442
+ code: 'custom',
443
+ path: [key],
444
+ input: val,
445
+ message: err instanceof Error ? err.message : 'Validation failed',
446
+ });
447
+ }
448
+ });
449
+ }
450
+ }
451
+ if (isFunction(finalFormat)) {
452
+ // formats defined in inline functions
453
+ return type.superRefine((args, ctx) => {
454
+ try {
455
+ finalFormat(args);
456
+ }
457
+ catch (err) {
458
+ ctx.addIssue({
459
+ code: 'custom',
460
+ input: args,
461
+ message: err instanceof Error ? err.message : 'Validation failed',
462
+ });
463
+ }
464
+ });
465
+ }
466
+ return type;
467
+ }
468
+ /**
469
+ * Determines the base type that a full schema will be built on
470
+ * @param { PropertyKey } key The name of the property that uses the schemaObj
471
+ * @param { TF.ConvictFormat } convictFormatValue A convict compatible format value
472
+ * @returns { ZodType } The base type
473
+ */
474
+ _getBaseType(key, convictFormatValue) {
475
+ let baseType;
476
+ switch (convictFormatValue) {
477
+ case '*':
478
+ baseType = z.any();
479
+ break;
480
+ case 'int':
481
+ baseType = z.number().int();
482
+ break;
483
+ case 'port':
484
+ baseType = z
485
+ .coerce.number()
486
+ .int()
487
+ .min(1)
488
+ .max(65535);
489
+ break;
490
+ case 'nat':
491
+ baseType = z
492
+ .number()
493
+ .int()
494
+ .min(0);
495
+ break;
496
+ case 'url':
497
+ baseType = z.url();
498
+ break;
499
+ case 'email':
500
+ baseType = z.email();
501
+ break;
502
+ case 'ipaddress':
503
+ baseType = z.union([z.ipv4(), z.ipv6()]);
504
+ break;
505
+ case 'String':
506
+ case String:
507
+ baseType = z.string();
508
+ break;
509
+ case 'Number':
510
+ case Number:
511
+ baseType = z.number();
512
+ break;
513
+ case 'Boolean':
514
+ case Boolean:
515
+ baseType = z.preprocess(convictCompatibleBooleanFn, z.boolean());
516
+ break;
517
+ case 'Object':
518
+ case Object:
519
+ baseType = z.record(z.string(), z.any());
520
+ break;
521
+ case 'Array':
522
+ case Array:
523
+ baseType = z.array(z.any());
524
+ break;
525
+ case 'RegExp':
526
+ case RegExp:
527
+ baseType = z.instanceof(RegExp);
528
+ break;
529
+ case (this._isCustomFormatName(convictFormatValue) ? convictFormatValue : undefined):
530
+ case (isFunction(convictFormatValue) ? convictFormatValue : undefined):
531
+ // let the inline format function do all validation
532
+ baseType = z.any();
533
+ break;
534
+ case (Array.isArray(convictFormatValue) ? convictFormatValue : undefined):
535
+ baseType = z.enum(convictFormatValue);
536
+ break;
537
+ default:
538
+ throw new Error(`Unrecognized convict format for key: ${key.toString()} cannot be converted to zod format: ${convictFormatValue}`);
539
+ }
540
+ return baseType;
541
+ }
542
+ /** Run the default value against the created schema to ensure it is valid */
543
+ _validateDefault(type, defaultVal) {
544
+ if (defaultVal !== undefined && defaultVal !== null) {
545
+ type.parse(defaultVal);
546
+ }
547
+ }
548
+ /** Unwrap the wrappers on base schema object and retrieve all keys */
549
+ getSchemaObjectKeys(schema) {
550
+ let s = schema;
551
+ // unwrap known wrappers
552
+ while (s instanceof z.ZodDefault
553
+ || s instanceof z.ZodOptional
554
+ || s instanceof z.ZodNullable) {
555
+ s = s.def.innerType;
556
+ }
557
+ if (s instanceof z.ZodObject) {
558
+ return Object.keys(s.shape);
559
+ }
560
+ return undefined;
561
+ }
562
+ /** Look up a custom format by name and return the format object */
563
+ _getCustomFormatFromName(format) {
564
+ if (typeof format !== 'string')
565
+ return null;
566
+ return formats.find((obj) => obj.name === format);
567
+ }
568
+ /** Determine if a format is the name of a custom format */
569
+ _isCustomFormatName(format) {
570
+ if (typeof format !== 'string')
571
+ return false;
572
+ const result = formats.filter((obj) => obj.name === format);
573
+ return result.length > 0;
574
+ }
575
+ }
576
+ export function isSchemaObj(value) {
577
+ if (typeof value !== 'object' || value === null) {
578
+ return false;
579
+ }
580
+ const obj = value;
581
+ if (!('default' in obj)) {
582
+ return false;
583
+ }
584
+ if ('format' in obj) {
585
+ const format = obj.format;
586
+ const validFormat = typeof format === 'string'
587
+ || typeof format === 'function'
588
+ || typeof format === 'object'
589
+ || Array.isArray(format)
590
+ || format === String
591
+ || format === Number
592
+ || format === Boolean
593
+ || format === Object
594
+ || format === Array
595
+ || format === RegExp;
596
+ if (!validFormat) {
597
+ return false;
598
+ }
599
+ }
600
+ if ('doc' in obj && typeof obj.doc !== 'string') {
601
+ return false;
602
+ }
603
+ if ('env' in obj && typeof obj.env !== 'string') {
604
+ return false;
605
+ }
606
+ if ('arg' in obj && typeof obj.arg !== 'string') {
607
+ return false;
608
+ }
609
+ return true;
610
+ }
611
+ export function isOfTypeFormat(value) {
612
+ if (typeof value !== 'object' || value === null) {
613
+ return false;
614
+ }
615
+ const obj = value;
616
+ if ('name' in obj && typeof obj.name !== 'string' && obj.name !== undefined) {
617
+ return false;
618
+ }
619
+ if ('coerce' in obj && typeof obj.coerce !== 'function' && obj.coerce !== undefined) {
620
+ return false;
621
+ }
622
+ if ('validate' in obj && typeof obj.validate !== 'function' && obj.validate !== undefined) {
623
+ return false;
624
+ }
625
+ if (!('name' in obj) && !('validate' in obj) && !('coerce' in obj)) {
626
+ return false;
627
+ }
628
+ return true;
629
+ }
630
+ export function isMomentUnitOfTime(unitString) {
631
+ // Helper function to create a type-checked array of valid units
632
+ const units = (arr) => arr;
633
+ const validUnits = units([
634
+ 'year',
635
+ 'years',
636
+ 'y',
637
+ 'month',
638
+ 'months',
639
+ 'M',
640
+ 'week',
641
+ 'weeks',
642
+ 'w',
643
+ 'day',
644
+ 'days',
645
+ 'd',
646
+ 'hour',
647
+ 'hours',
648
+ 'h',
649
+ 'minute',
650
+ 'minutes',
651
+ 'm',
652
+ 'second',
653
+ 'seconds',
654
+ 's',
655
+ 'millisecond',
656
+ 'milliseconds',
657
+ 'ms',
658
+ 'quarter',
659
+ 'quarters',
660
+ 'Q'
661
+ ]);
662
+ return validUnits.includes(unitString);
663
+ }
664
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/schemas.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@terascope/core-utils",
3
3
  "displayName": "Core Utils",
4
- "version": "2.0.0-dev.8",
4
+ "version": "2.0.0-rc.0",
5
5
  "description": "A collection of Teraslice Core Utilities",
6
6
  "homepage": "https://github.com/terascope/teraslice/tree/master/packages/core-utils#readme",
7
7
  "bugs": {
@@ -29,16 +29,23 @@
29
29
  "debug": "~4.4.3"
30
30
  },
31
31
  "dependencies": {
32
- "@terascope/types": "~2.0.0-dev.7",
32
+ "@terascope/types": "~2.0.0-rc.0",
33
33
  "awesome-phonenumber": "~7.5.0",
34
+ "bunyan": "~1.8.15",
35
+ "date-fns": "~4.1.0",
36
+ "date-fns-tz": "~3.2.0",
37
+ "datemath-parser": "~1.0.6",
34
38
  "debug": "~4.4.3",
35
39
  "is-plain-object": "~5.0.0",
36
40
  "js-string-escape": "~1.0.1",
37
41
  "kind-of": "~6.0.3",
38
42
  "lodash-es": "~4.17.21",
43
+ "mnemonist": "0.40.3",
44
+ "moment": "~2.30.1",
39
45
  "p-map": "~7.0.3",
40
46
  "shallow-clone": "~3.0.1",
41
- "validator": "~13.12.0"
47
+ "validator": "~13.12.0",
48
+ "zod": "~4.1.12"
42
49
  },
43
50
  "devDependencies": {
44
51
  "@types/debug": "~4.1.12",