@mayhem93/nexxus-core-lib 0.0.1 → 0.0.2

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 (77) hide show
  1. package/dist-cjs/common/BuiltinSchemas.js +24 -5
  2. package/dist-cjs/common/BuiltinSchemas.js.map +1 -1
  3. package/dist-cjs/common/FilterQuery.js +4 -15
  4. package/dist-cjs/common/FilterQuery.js.map +1 -1
  5. package/dist-cjs/common/InferModel.js +3 -0
  6. package/dist-cjs/common/InferModel.js.map +1 -0
  7. package/dist-cjs/common/JsonPatch.js +42 -225
  8. package/dist-cjs/common/JsonPatch.js.map +1 -1
  9. package/dist-cjs/common/SchemaValidator.js +100 -29
  10. package/dist-cjs/common/SchemaValidator.js.map +1 -1
  11. package/dist-cjs/index.js +3 -0
  12. package/dist-cjs/index.js.map +1 -1
  13. package/dist-cjs/lib/BaseService.js +6 -6
  14. package/dist-cjs/lib/BaseService.js.map +1 -1
  15. package/dist-cjs/lib/ConfigManager.js +18 -21
  16. package/dist-cjs/lib/ConfigManager.js.map +1 -1
  17. package/dist-cjs/lib/Exceptions.js +8 -1
  18. package/dist-cjs/lib/Exceptions.js.map +1 -1
  19. package/dist-cjs/lib/Logger.js +138 -65
  20. package/dist-cjs/lib/Logger.js.map +1 -1
  21. package/dist-cjs/models/AppModel.js +17 -3
  22. package/dist-cjs/models/AppModel.js.map +1 -1
  23. package/dist-cjs/models/Application.js +51 -12
  24. package/dist-cjs/models/Application.js.map +1 -1
  25. package/dist-cjs/models/BaseModel.js.map +1 -1
  26. package/dist-cjs/models/BuiltinModel.js +8 -0
  27. package/dist-cjs/models/BuiltinModel.js.map +1 -0
  28. package/dist-cjs/models/User.js +12 -3
  29. package/dist-cjs/models/User.js.map +1 -1
  30. package/dist-esm/common/BuiltinSchemas.js +23 -4
  31. package/dist-esm/common/BuiltinSchemas.js.map +1 -1
  32. package/dist-esm/common/FilterQuery.js +5 -16
  33. package/dist-esm/common/FilterQuery.js.map +1 -1
  34. package/dist-esm/common/InferModel.js +2 -0
  35. package/dist-esm/common/InferModel.js.map +1 -0
  36. package/dist-esm/common/JsonPatch.js +44 -227
  37. package/dist-esm/common/JsonPatch.js.map +1 -1
  38. package/dist-esm/common/SchemaValidator.js +100 -29
  39. package/dist-esm/common/SchemaValidator.js.map +1 -1
  40. package/dist-esm/index.js +3 -0
  41. package/dist-esm/index.js.map +1 -1
  42. package/dist-esm/lib/BaseService.js +8 -8
  43. package/dist-esm/lib/BaseService.js.map +1 -1
  44. package/dist-esm/lib/ConfigManager.js +18 -21
  45. package/dist-esm/lib/ConfigManager.js.map +1 -1
  46. package/dist-esm/lib/Exceptions.js +6 -0
  47. package/dist-esm/lib/Exceptions.js.map +1 -1
  48. package/dist-esm/lib/Logger.js +139 -66
  49. package/dist-esm/lib/Logger.js.map +1 -1
  50. package/dist-esm/models/AppModel.js +17 -3
  51. package/dist-esm/models/AppModel.js.map +1 -1
  52. package/dist-esm/models/Application.js +52 -13
  53. package/dist-esm/models/Application.js.map +1 -1
  54. package/dist-esm/models/BaseModel.js.map +1 -1
  55. package/dist-esm/models/BuiltinModel.js +4 -0
  56. package/dist-esm/models/BuiltinModel.js.map +1 -0
  57. package/dist-esm/models/User.js +11 -2
  58. package/dist-esm/models/User.js.map +1 -1
  59. package/dist-types/common/BuiltinSchemas.d.ts +59 -5
  60. package/dist-types/common/FilterQuery.d.ts +3 -11
  61. package/dist-types/common/InferModel.d.ts +29 -0
  62. package/dist-types/common/JsonPatch.d.ts +4 -45
  63. package/dist-types/common/ModelTypes.d.ts +1 -0
  64. package/dist-types/common/QueuePayloads.d.ts +48 -26
  65. package/dist-types/common/SchemaValidator.d.ts +42 -2
  66. package/dist-types/index.d.ts +3 -0
  67. package/dist-types/lib/BaseService.d.ts +8 -1
  68. package/dist-types/lib/ConfigManager.d.ts +6 -12
  69. package/dist-types/lib/Exceptions.d.ts +4 -0
  70. package/dist-types/lib/Logger.d.ts +84 -14
  71. package/dist-types/models/AppModel.d.ts +31 -5
  72. package/dist-types/models/Application.d.ts +36 -8
  73. package/dist-types/models/BaseModel.d.ts +14 -12
  74. package/dist-types/models/BuiltinModel.d.ts +3 -0
  75. package/dist-types/models/User.d.ts +15 -13
  76. package/package.json +4 -4
  77. package/src/schemas/winston-logger.schema.json +51 -6
@@ -1,5 +1,6 @@
1
- import { NEXXUS_BUILTIN_MODEL_SCHEMAS, NEXXUS_UNIVERSAL_FIELDS } from './BuiltinSchemas';
2
- import { InvalidJsonPatchException } from '../lib/Exceptions';
1
+ import { NEXXUS_UNIVERSAL_FIELDS } from './BuiltinSchemas';
2
+ import { InvalidJsonPatchException, InvalidSchemaDataException } from '../lib/Exceptions';
3
+ import { NexxusSchemaValidator } from './SchemaValidator';
3
4
  import * as dot from 'dot-prop';
4
5
  const JSON_OPS = [
5
6
  'replace',
@@ -14,9 +15,7 @@ export class NexxusJsonPatch {
14
15
  static OPERATION_RULES = {
15
16
  replace: {
16
17
  allowedTypes: ['string', 'number', 'boolean', 'date', 'object', 'array'],
17
- validateValue: (value, fieldDef, path) => {
18
- NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
19
- }
18
+ validateValue: (value, fieldDef, path) => NexxusSchemaValidator.validateValue(value, fieldDef, path)
20
19
  },
21
20
  append: {
22
21
  allowedTypes: ['array', 'string'],
@@ -32,21 +31,21 @@ export class NexxusJsonPatch {
32
31
  properties: arrayFieldDef.properties,
33
32
  required: false
34
33
  };
35
- NexxusJsonPatch.validateAgainstType(value, objFieldDef, path);
36
- }
37
- else {
38
- const primitiveFieldDef = {
39
- type: arrayFieldDef.arrayType,
40
- required: false
41
- };
42
- NexxusJsonPatch.validateAgainstType(value, primitiveFieldDef, path);
34
+ return NexxusSchemaValidator.validateValue(value, objFieldDef, path);
43
35
  }
36
+ const primitiveFieldDef = {
37
+ type: arrayFieldDef.arrayType,
38
+ required: false
39
+ };
40
+ return NexxusSchemaValidator.validateValue(value, primitiveFieldDef, path);
44
41
  }
45
- else if (fieldDef.type === 'string') {
42
+ if (fieldDef.type === 'string') {
46
43
  if (typeof value !== 'string') {
47
44
  throw new InvalidJsonPatchException(`Value for append at path "${path}" must be a string`);
48
45
  }
46
+ return value;
49
47
  }
48
+ throw new InvalidJsonPatchException(`append not supported on type "${fieldDef.type}" at path "${path}"`);
50
49
  }
51
50
  },
52
51
  prepend: {
@@ -63,34 +62,30 @@ export class NexxusJsonPatch {
63
62
  properties: arrayFieldDef.properties,
64
63
  required: false
65
64
  };
66
- NexxusJsonPatch.validateAgainstType(value, objFieldDef, path);
67
- }
68
- else {
69
- const primitiveFieldDef = {
70
- type: arrayFieldDef.arrayType,
71
- required: false
72
- };
73
- NexxusJsonPatch.validateAgainstType(value, primitiveFieldDef, path);
65
+ return NexxusSchemaValidator.validateValue(value, objFieldDef, path);
74
66
  }
67
+ const primitiveFieldDef = {
68
+ type: arrayFieldDef.arrayType,
69
+ required: false
70
+ };
71
+ return NexxusSchemaValidator.validateValue(value, primitiveFieldDef, path);
75
72
  }
76
- else if (fieldDef.type === 'string') {
73
+ if (fieldDef.type === 'string') {
77
74
  if (typeof value !== 'string') {
78
75
  throw new InvalidJsonPatchException(`Value for prepend at path "${path}" must be a string`);
79
76
  }
77
+ return value;
80
78
  }
79
+ throw new InvalidJsonPatchException(`prepend not supported on type "${fieldDef.type}" at path "${path}"`);
81
80
  }
82
81
  },
83
82
  incr: {
84
83
  allowedTypes: ['number', 'date'],
85
- validateValue: (value, fieldDef, path) => {
86
- NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
87
- }
84
+ validateValue: (value, fieldDef, path) => NexxusSchemaValidator.validateValue(value, fieldDef, path)
88
85
  },
89
86
  decr: {
90
87
  allowedTypes: ['number', 'date'],
91
- validateValue: (value, fieldDef, path) => {
92
- NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
93
- }
88
+ validateValue: (value, fieldDef, path) => NexxusSchemaValidator.validateValue(value, fieldDef, path)
94
89
  }
95
90
  };
96
91
  constructor(fullPatch) {
@@ -136,42 +131,19 @@ export class NexxusJsonPatch {
136
131
  }
137
132
  return partialModel;
138
133
  }
139
- validate(config) {
140
- const modelType = this.fullPatch.metadata.type;
141
- let modelSpec;
142
- if ('appSchema' in config) {
143
- const appModelSpec = config.appSchema[modelType];
144
- if (!appModelSpec) {
145
- throw new InvalidJsonPatchException(`Model type "${modelType}" not found in application schema`);
146
- }
147
- modelSpec = {
148
- updatedAt: NEXXUS_UNIVERSAL_FIELDS.updatedAt,
149
- ...appModelSpec
150
- };
151
- }
152
- else {
153
- const builtinSchema = NEXXUS_BUILTIN_MODEL_SCHEMAS[modelType];
154
- modelSpec = {
155
- updatedAt: NEXXUS_UNIVERSAL_FIELDS.updatedAt,
156
- ...builtinSchema
157
- };
158
- switch (config.modelType) {
159
- case 'user':
160
- if (config.modelType === 'user' && !config.userDetailsSchema) {
161
- throw new InvalidJsonPatchException("User detail schema must be provided for 'user' model patches");
162
- }
163
- modelSpec.details = { type: 'object', properties: config.userDetailsSchema, required: false };
164
- break;
165
- case 'application':
166
- break;
167
- default:
168
- throw new InvalidJsonPatchException(`Unsupported built-in model type: ${config.modelType}`);
169
- }
170
- }
134
+ validate(schema) {
135
+ const modelSpec = {
136
+ updatedAt: NEXXUS_UNIVERSAL_FIELDS.updatedAt,
137
+ ...schema
138
+ };
171
139
  const operationRule = NexxusJsonPatch.OPERATION_RULES[this.fullPatch.op];
172
140
  for (let i = 0; i < this.fullPatch.path.length; i++) {
173
141
  const currentPath = this.fullPatch.path[i];
174
142
  const currentValue = this.fullPatch.value[i];
143
+ const topLevelField = currentPath.split('.')[0];
144
+ if (topLevelField === 'version') {
145
+ throw new InvalidJsonPatchException(`Cannot patch system-managed field "version" at path "${currentPath}" — it is set exclusively by the database adapter`);
146
+ }
175
147
  const fieldDef = NexxusJsonPatch.traverseSchema(modelSpec, currentPath);
176
148
  if (!fieldDef) {
177
149
  throw new InvalidJsonPatchException(`Path "${currentPath}" does not exist in model "${this.fullPatch.metadata.type}"`);
@@ -179,7 +151,17 @@ export class NexxusJsonPatch {
179
151
  if (!operationRule.allowedTypes.includes(fieldDef.type)) {
180
152
  throw new InvalidJsonPatchException(`Operation "${this.fullPatch.op}" not allowed on type "${fieldDef.type}" at path "${currentPath}"`);
181
153
  }
182
- operationRule.validateValue(currentValue, fieldDef, currentPath);
154
+ let normalized;
155
+ try {
156
+ normalized = operationRule.validateValue(currentValue, fieldDef, currentPath);
157
+ }
158
+ catch (e) {
159
+ if (e instanceof InvalidSchemaDataException) {
160
+ throw new InvalidJsonPatchException(e.message);
161
+ }
162
+ throw e;
163
+ }
164
+ this.fullPatch.value[i] = normalized;
183
165
  if (!this.fullPatch.metadata.pathFieldTypes) {
184
166
  this.fullPatch.metadata.pathFieldTypes = [];
185
167
  }
@@ -187,76 +169,6 @@ export class NexxusJsonPatch {
187
169
  }
188
170
  this.valid = true;
189
171
  }
190
- static validateAgainstType(value, fieldDef, path) {
191
- switch (fieldDef.type) {
192
- case 'string':
193
- if (typeof value !== 'string') {
194
- throw new InvalidJsonPatchException(`Expected string at path: ${path}`);
195
- }
196
- break;
197
- case 'number':
198
- if (typeof value !== 'number' || isNaN(value)) {
199
- throw new InvalidJsonPatchException(`Expected number at path: ${path}`);
200
- }
201
- break;
202
- case 'boolean':
203
- if (typeof value !== 'boolean') {
204
- throw new InvalidJsonPatchException(`Expected boolean at path: ${path}`);
205
- }
206
- break;
207
- case 'date':
208
- const date = new Date(value);
209
- if (isNaN(date.getTime())) {
210
- throw new InvalidJsonPatchException(`Expected valid date at path: ${path}`);
211
- }
212
- break;
213
- case 'object':
214
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
215
- throw new InvalidJsonPatchException(`Expected object at path: ${path}`);
216
- }
217
- if (NexxusJsonPatch.isObjectFieldDef(fieldDef)) {
218
- for (const [key, propDef] of Object.entries(fieldDef.properties)) {
219
- if (propDef.required && !(key in value)) {
220
- throw new InvalidJsonPatchException(`Required field missing: ${path}.${key}`);
221
- }
222
- if (key in value) {
223
- NexxusJsonPatch.validateAgainstType(value[key], propDef, `${path}.${key}`);
224
- }
225
- }
226
- }
227
- break;
228
- case 'array':
229
- if (!Array.isArray(value)) {
230
- throw new InvalidJsonPatchException(`Expected array at path: ${path}`);
231
- }
232
- if (NexxusJsonPatch.isArrayFieldDef(fieldDef)) {
233
- value.forEach((element, index) => {
234
- const elementPath = `${path}[${index}]`;
235
- if (fieldDef.arrayType === 'object') {
236
- if (!fieldDef.properties) {
237
- throw new InvalidJsonPatchException(`Array of objects at "${path}" is missing properties definition`);
238
- }
239
- const objFieldDef = {
240
- type: 'object',
241
- properties: fieldDef.properties,
242
- required: false
243
- };
244
- NexxusJsonPatch.validateAgainstType(element, objFieldDef, elementPath);
245
- }
246
- else {
247
- const primitiveFieldDef = {
248
- type: fieldDef.arrayType,
249
- required: false
250
- };
251
- NexxusJsonPatch.validateAgainstType(element, primitiveFieldDef, elementPath);
252
- }
253
- });
254
- }
255
- break;
256
- default:
257
- throw new InvalidJsonPatchException(`Unknown field type at path: ${path}`);
258
- }
259
- }
260
172
  static traverseSchema(schema, path) {
261
173
  const parts = path.split('.');
262
174
  let current = schema;
@@ -288,100 +200,5 @@ export class NexxusJsonPatch {
288
200
  }
289
201
  return null;
290
202
  }
291
- static validateValueType(value, fieldDef, path) {
292
- const { type } = fieldDef;
293
- switch (type) {
294
- case 'string':
295
- return this.validateString(value, path);
296
- case 'number':
297
- return this.validateNumber(value, path);
298
- case 'boolean':
299
- return this.validateBoolean(value, path);
300
- case 'date':
301
- return this.validateDate(value, path);
302
- case 'object':
303
- return this.validateObject(value, fieldDef, path);
304
- case 'array':
305
- return this.validateArray(value, fieldDef, path);
306
- default:
307
- throw new InvalidJsonPatchException(`Unknown field type "${type}" at path "${path}"`);
308
- }
309
- }
310
- static validateString(value, path) {
311
- if (typeof value !== 'string') {
312
- throw new InvalidJsonPatchException(`Value at path "${path}" must be a string`);
313
- }
314
- return true;
315
- }
316
- static validateNumber(value, path) {
317
- if (typeof value !== 'number' || isNaN(value)) {
318
- throw new InvalidJsonPatchException(`Value at path "${path}" must be a number`);
319
- }
320
- return true;
321
- }
322
- static validateBoolean(value, path) {
323
- if (typeof value !== 'boolean') {
324
- throw new InvalidJsonPatchException(`Value at path "${path}" must be a boolean`);
325
- }
326
- return true;
327
- }
328
- static validateDate(value, path) {
329
- const isValid = typeof value === 'string' && !isNaN(Date.parse(value)) || typeof value === 'number' && !isNaN(new Date(value).getTime());
330
- if (!isValid) {
331
- throw new InvalidJsonPatchException(`Value at path "${path}" must be a valid date`);
332
- }
333
- return true;
334
- }
335
- static validateObject(value, fieldDef, path) {
336
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
337
- throw new InvalidJsonPatchException(`Value at path "${path}" must be an object`);
338
- }
339
- for (const key in value) {
340
- const nestedFieldDef = fieldDef.properties[key];
341
- if (!nestedFieldDef) {
342
- throw new InvalidJsonPatchException(`Unknown property "${key}" in object at path "${path}"`);
343
- }
344
- const nestedPath = path ? `${path}.${key}` : key;
345
- this.validateValueType(value[key], nestedFieldDef, nestedPath);
346
- }
347
- return true;
348
- }
349
- static validateArray(value, fieldDef, path) {
350
- if (!Array.isArray(value)) {
351
- throw new InvalidJsonPatchException(`Value at path "${path}" must be an array`);
352
- }
353
- const { arrayType } = fieldDef;
354
- value.forEach((item, index) => {
355
- const itemPath = `${path}[${index}]`;
356
- if (arrayType === 'object') {
357
- const objDef = fieldDef;
358
- this.validateObject(item, objDef, itemPath);
359
- }
360
- else {
361
- this.validatePrimitiveType(item, arrayType, itemPath);
362
- }
363
- });
364
- return true;
365
- }
366
- static validatePrimitiveType(value, type, path) {
367
- switch (type) {
368
- case 'string':
369
- return this.validateString(value, path);
370
- case 'number':
371
- return this.validateNumber(value, path);
372
- case 'boolean':
373
- return this.validateBoolean(value, path);
374
- case 'date':
375
- return this.validateDate(value, path);
376
- default:
377
- throw new InvalidJsonPatchException(`Unknown primitive type "${type}" at path "${path}"`);
378
- }
379
- }
380
- static isObjectFieldDef(fieldDef) {
381
- return fieldDef.type === 'object';
382
- }
383
- static isArrayFieldDef(fieldDef) {
384
- return fieldDef.type === 'array';
385
- }
386
203
  }
387
204
  //# sourceMappingURL=JsonPatch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JsonPatch.js","sourceRoot":"","sources":["../../src/common/JsonPatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JsonPatch.js","sourceRoot":"","sources":["../../src/common/JsonPatch.ts"],"names":[],"mappings":"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"}
@@ -1,37 +1,108 @@
1
+ import { InvalidSchemaDataException } from '../lib/Exceptions';
1
2
  export class NexxusSchemaValidator {
2
- static validateUserDetails(partialDetails, userDetailSchema) {
3
- for (const field in partialDetails) {
4
- const fieldDef = userDetailSchema[field];
5
- const fieldValue = partialDetails[field];
3
+ static validateAgainstSchema(data, modelDef) {
4
+ if (!data || typeof data !== 'object' || Array.isArray(data)) {
5
+ throw new InvalidSchemaDataException(`Schema validation: input must be a non-null object`);
6
+ }
7
+ const result = { ...data };
8
+ for (const [fieldName, value] of Object.entries(data)) {
9
+ if (fieldName === 'version') {
10
+ throw new InvalidSchemaDataException(`Field "version" is a system-managed Nexxus field and cannot be set by user input`);
11
+ }
12
+ const fieldDef = modelDef[fieldName];
6
13
  if (!fieldDef) {
7
- return false;
14
+ continue;
8
15
  }
9
- switch (fieldDef.type) {
10
- case 'string':
11
- if (typeof fieldValue !== 'string')
12
- return false;
13
- break;
14
- case 'number':
15
- if (typeof fieldValue !== 'number')
16
- return false;
17
- break;
18
- case 'boolean':
19
- if (typeof fieldValue !== 'boolean')
20
- return false;
21
- break;
22
- case 'object':
23
- if (typeof fieldValue !== 'object' || Array.isArray(fieldValue))
24
- return false;
25
- break;
26
- case 'array':
27
- if (!Array.isArray(fieldValue))
28
- return false;
29
- break;
30
- default:
31
- return false;
16
+ result[fieldName] = NexxusSchemaValidator.validateValue(value, fieldDef, fieldName);
17
+ }
18
+ return result;
19
+ }
20
+ static validateValue(value, fieldDef, path) {
21
+ switch (fieldDef.type) {
22
+ case 'string':
23
+ return NexxusSchemaValidator.validateString(value, path);
24
+ case 'number':
25
+ return NexxusSchemaValidator.validateNumber(value, path);
26
+ case 'boolean':
27
+ return NexxusSchemaValidator.validateBoolean(value, path);
28
+ case 'date':
29
+ return NexxusSchemaValidator.validateDate(value, path);
30
+ case 'object':
31
+ return NexxusSchemaValidator.validateObject(value, fieldDef, path);
32
+ case 'array':
33
+ return NexxusSchemaValidator.validateArray(value, fieldDef, path);
34
+ default:
35
+ throw new InvalidSchemaDataException(`Unknown field type at path "${path}"`);
36
+ }
37
+ }
38
+ static validateString(value, path) {
39
+ if (typeof value !== 'string') {
40
+ throw new InvalidSchemaDataException(`Expected string at path "${path}", got ${typeof value}`);
41
+ }
42
+ return value;
43
+ }
44
+ static validateNumber(value, path) {
45
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
46
+ throw new InvalidSchemaDataException(`Expected number at path "${path}", got ${typeof value}`);
47
+ }
48
+ return value;
49
+ }
50
+ static validateBoolean(value, path) {
51
+ if (typeof value !== 'boolean') {
52
+ throw new InvalidSchemaDataException(`Expected boolean at path "${path}", got ${typeof value}`);
53
+ }
54
+ return value;
55
+ }
56
+ static validateDate(value, path) {
57
+ if (typeof value === 'number' && Number.isFinite(value)) {
58
+ return value;
59
+ }
60
+ if (typeof value === 'string') {
61
+ const asNum = Number(value);
62
+ if (Number.isFinite(asNum)) {
63
+ return asNum;
64
+ }
65
+ const ts = new Date(value).getTime();
66
+ if (Number.isFinite(ts)) {
67
+ return Math.floor(ts);
68
+ }
69
+ }
70
+ throw new InvalidSchemaDataException(`Expected valid date at path "${path}", got "${String(value)}"`);
71
+ }
72
+ static validateObject(value, fieldDef, path) {
73
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
74
+ throw new InvalidSchemaDataException(`Expected object at path "${path}"`);
75
+ }
76
+ const input = value;
77
+ const result = { ...input };
78
+ for (const [key, propDef] of Object.entries(fieldDef.properties)) {
79
+ if (key in input) {
80
+ result[key] = NexxusSchemaValidator.validateValue(input[key], propDef, `${path}.${key}`);
32
81
  }
33
82
  }
34
- return true;
83
+ return result;
84
+ }
85
+ static validateArray(value, fieldDef, path) {
86
+ if (!Array.isArray(value)) {
87
+ throw new InvalidSchemaDataException(`Expected array at path "${path}"`);
88
+ }
89
+ return value.map((element, index) => {
90
+ const elementPath = `${path}[${index}]`;
91
+ if (fieldDef.arrayType === 'object') {
92
+ if (!fieldDef.properties) {
93
+ throw new InvalidSchemaDataException(`Array of objects at "${path}" is missing properties definition`);
94
+ }
95
+ const objFieldDef = {
96
+ type: 'object',
97
+ properties: fieldDef.properties,
98
+ };
99
+ return NexxusSchemaValidator.validateObject(element, objFieldDef, elementPath);
100
+ }
101
+ const primitiveFieldDef = {
102
+ type: fieldDef.arrayType,
103
+ };
104
+ return NexxusSchemaValidator.validateValue(element, primitiveFieldDef, elementPath);
105
+ });
35
106
  }
36
107
  }
37
108
  //# sourceMappingURL=SchemaValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../src/common/SchemaValidator.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,qBAAqB;IACzB,MAAM,CAAC,mBAAmB,CAAC,cAAmC,EAAE,gBAAwC;QAC7G,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,KAAK,CAAC;YACf,CAAC;YAED,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,QAAQ;oBACX,IAAI,OAAO,UAAU,KAAK,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBACjD,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,OAAO,UAAU,KAAK,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBACjD,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,OAAO,UAAU,KAAK,SAAS;wBACjC,OAAO,KAAK,CAAC;oBACf,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAC9E,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAC7C,MAAM;gBACR;oBACE,OAAO,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../src/common/SchemaValidator.ts"],"names":[],"mappings":"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"}
package/dist-esm/index.js CHANGED
@@ -6,7 +6,10 @@ export * from "./lib/Logger";
6
6
  export * from "./common/QueuePayloads";
7
7
  export * from "./common/JsonPatch";
8
8
  export * from "./common/FilterQuery";
9
+ export * from "./common/InferModel";
10
+ export * from "./common/SchemaValidator";
9
11
  export * from "./models/BaseModel";
12
+ export * from "./models/BuiltinModel";
10
13
  export * from './common/BuiltinSchemas';
11
14
  export * from "./models/AppModel";
12
15
  export * from "./models/Application";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAE7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAE7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
- import { FatalErrorException } from "./Exceptions";
3
- import * as fs from "node:fs";
2
+ import { FatalErrorException } from './Exceptions';
3
+ import * as fs from 'node:fs';
4
4
  import { EventEmitter } from 'node:events';
5
5
  function frozen(target, propertyKey) {
6
6
  Object.defineProperty(target, propertyKey, {
@@ -34,6 +34,7 @@ export class NexxusBaseService extends TypedEventEmitter {
34
34
  config;
35
35
  static envVars;
36
36
  static cliArgs;
37
+ static configRootKey;
37
38
  static schemaPath;
38
39
  static schemaContents;
39
40
  constructor(config) {
@@ -56,18 +57,17 @@ export class NexxusBaseService extends TypedEventEmitter {
56
57
  if (!this.schemaPath) {
57
58
  throw new FatalErrorException(`Schema path not set for ${this.name} class.`);
58
59
  }
60
+ if (!this.configRootKey) {
61
+ throw new FatalErrorException(`configRootKey not set for ${this.name} class. ` +
62
+ 'This static must declare the top-level key under which this service\'s config sits in the merged root config.');
63
+ }
59
64
  if (!this.schemaContents) {
60
65
  this.schemaContents = fs.readFileSync(this.schemaPath, 'utf-8');
61
66
  }
62
67
  const definition = JSON.parse(this.schemaContents);
63
- if (!definition.$comment) {
64
- throw new FatalErrorException(`Schema for ${this.name} is missing $comment field. ` +
65
- 'This field is required to specify where in the main config this specific configuration ' +
66
- 'should be placed.');
67
- }
68
68
  return {
69
69
  name: this.name,
70
- where: definition.$comment,
70
+ where: this.configRootKey,
71
71
  definition,
72
72
  required: true
73
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"BaseService.js","sourceRoot":"","sources":["../../src/lib/BaseService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseService.js","sourceRoot":"","sources":["../../src/lib/BaseService.ts"],"names":[],"mappings":"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"}