@terascope/core-utils 2.0.0-dev.10

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