@mayhem93/nexxus-core-lib 0.0.1
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.
- package/LICENSE +373 -0
- package/README.md +384 -0
- package/dist-cjs/common/BuiltinSchemas.js +26 -0
- package/dist-cjs/common/BuiltinSchemas.js.map +1 -0
- package/dist-cjs/common/FilterQuery.js +252 -0
- package/dist-cjs/common/FilterQuery.js.map +1 -0
- package/dist-cjs/common/JsonPatch.js +392 -0
- package/dist-cjs/common/JsonPatch.js.map +1 -0
- package/dist-cjs/common/ModelTypes.js +3 -0
- package/dist-cjs/common/ModelTypes.js.map +1 -0
- package/dist-cjs/common/QueuePayloads.js +3 -0
- package/dist-cjs/common/QueuePayloads.js.map +1 -0
- package/dist-cjs/common/SchemaValidator.js +41 -0
- package/dist-cjs/common/SchemaValidator.js.map +1 -0
- package/dist-cjs/index.js +20 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/lib/BaseService.js +83 -0
- package/dist-cjs/lib/BaseService.js.map +1 -0
- package/dist-cjs/lib/ConfigManager.js +138 -0
- package/dist-cjs/lib/ConfigManager.js.map +1 -0
- package/dist-cjs/lib/ConfigProvider.js +65 -0
- package/dist-cjs/lib/ConfigProvider.js.map +1 -0
- package/dist-cjs/lib/Exceptions.js +64 -0
- package/dist-cjs/lib/Exceptions.js.map +1 -0
- package/dist-cjs/lib/GlobalServices.js +29 -0
- package/dist-cjs/lib/GlobalServices.js.map +1 -0
- package/dist-cjs/lib/Logger.js +131 -0
- package/dist-cjs/lib/Logger.js.map +1 -0
- package/dist-cjs/models/AppModel.js +14 -0
- package/dist-cjs/models/AppModel.js.map +1 -0
- package/dist-cjs/models/Application.js +79 -0
- package/dist-cjs/models/Application.js.map +1 -0
- package/dist-cjs/models/BaseModel.js +33 -0
- package/dist-cjs/models/BaseModel.js.map +1 -0
- package/dist-cjs/models/User.js +39 -0
- package/dist-cjs/models/User.js.map +1 -0
- package/dist-cjs/types/QueuePayloads.js +3 -0
- package/dist-cjs/types/QueuePayloads.js.map +1 -0
- package/dist-esm/common/BuiltinSchemas.js +22 -0
- package/dist-esm/common/BuiltinSchemas.js.map +1 -0
- package/dist-esm/common/FilterQuery.js +247 -0
- package/dist-esm/common/FilterQuery.js.map +1 -0
- package/dist-esm/common/JsonPatch.js +387 -0
- package/dist-esm/common/JsonPatch.js.map +1 -0
- package/dist-esm/common/ModelTypes.js +2 -0
- package/dist-esm/common/ModelTypes.js.map +1 -0
- package/dist-esm/common/QueuePayloads.js +2 -0
- package/dist-esm/common/QueuePayloads.js.map +1 -0
- package/dist-esm/common/SchemaValidator.js +37 -0
- package/dist-esm/common/SchemaValidator.js.map +1 -0
- package/dist-esm/index.js +16 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lib/BaseService.js +79 -0
- package/dist-esm/lib/BaseService.js.map +1 -0
- package/dist-esm/lib/ConfigManager.js +133 -0
- package/dist-esm/lib/ConfigManager.js.map +1 -0
- package/dist-esm/lib/ConfigProvider.js +56 -0
- package/dist-esm/lib/ConfigProvider.js.map +1 -0
- package/dist-esm/lib/Exceptions.js +53 -0
- package/dist-esm/lib/Exceptions.js.map +1 -0
- package/dist-esm/lib/GlobalServices.js +25 -0
- package/dist-esm/lib/GlobalServices.js.map +1 -0
- package/dist-esm/lib/Logger.js +125 -0
- package/dist-esm/lib/Logger.js.map +1 -0
- package/dist-esm/models/AppModel.js +10 -0
- package/dist-esm/models/AppModel.js.map +1 -0
- package/dist-esm/models/Application.js +74 -0
- package/dist-esm/models/Application.js.map +1 -0
- package/dist-esm/models/BaseModel.js +29 -0
- package/dist-esm/models/BaseModel.js.map +1 -0
- package/dist-esm/models/User.js +35 -0
- package/dist-esm/models/User.js.map +1 -0
- package/dist-esm/types/QueuePayloads.js +2 -0
- package/dist-esm/types/QueuePayloads.js.map +1 -0
- package/dist-types/common/BuiltinSchemas.d.ts +69 -0
- package/dist-types/common/FilterQuery.d.ts +58 -0
- package/dist-types/common/JsonPatch.d.ts +78 -0
- package/dist-types/common/ModelTypes.d.ts +24 -0
- package/dist-types/common/QueuePayloads.d.ts +78 -0
- package/dist-types/common/SchemaValidator.d.ts +4 -0
- package/dist-types/index.d.ts +15 -0
- package/dist-types/lib/BaseService.d.ts +28 -0
- package/dist-types/lib/ConfigManager.d.ts +48 -0
- package/dist-types/lib/ConfigProvider.d.ts +27 -0
- package/dist-types/lib/Exceptions.d.ts +33 -0
- package/dist-types/lib/GlobalServices.d.ts +19 -0
- package/dist-types/lib/Logger.d.ts +48 -0
- package/dist-types/models/AppModel.d.ts +9 -0
- package/dist-types/models/Application.d.ts +29 -0
- package/dist-types/models/BaseModel.d.ts +23 -0
- package/dist-types/models/User.d.ts +17 -0
- package/dist-types/types/QueuePayloads.d.ts +57 -0
- package/package.json +46 -0
- package/src/schemas/root.schema.json +8 -0
- package/src/schemas/winston-logger.schema.json +24 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexxusJsonPatch = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const BuiltinSchemas_1 = require("./BuiltinSchemas");
|
|
6
|
+
const Exceptions_1 = require("../lib/Exceptions");
|
|
7
|
+
const dot = tslib_1.__importStar(require("dot-prop"));
|
|
8
|
+
const JSON_OPS = [
|
|
9
|
+
'replace',
|
|
10
|
+
'append',
|
|
11
|
+
'prepend',
|
|
12
|
+
'incr',
|
|
13
|
+
'decr'
|
|
14
|
+
];
|
|
15
|
+
class NexxusJsonPatch {
|
|
16
|
+
valid = false;
|
|
17
|
+
fullPatch;
|
|
18
|
+
static OPERATION_RULES = {
|
|
19
|
+
replace: {
|
|
20
|
+
allowedTypes: ['string', 'number', 'boolean', 'date', 'object', 'array'],
|
|
21
|
+
validateValue: (value, fieldDef, path) => {
|
|
22
|
+
NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
append: {
|
|
26
|
+
allowedTypes: ['array', 'string'],
|
|
27
|
+
validateValue: (value, fieldDef, path) => {
|
|
28
|
+
if (fieldDef.type === 'array') {
|
|
29
|
+
const arrayFieldDef = fieldDef;
|
|
30
|
+
if (arrayFieldDef.arrayType === 'object') {
|
|
31
|
+
if (!arrayFieldDef.properties) {
|
|
32
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Array of objects at "${path}" is missing properties definition`);
|
|
33
|
+
}
|
|
34
|
+
const objFieldDef = {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: arrayFieldDef.properties,
|
|
37
|
+
required: false
|
|
38
|
+
};
|
|
39
|
+
NexxusJsonPatch.validateAgainstType(value, objFieldDef, path);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const primitiveFieldDef = {
|
|
43
|
+
type: arrayFieldDef.arrayType,
|
|
44
|
+
required: false
|
|
45
|
+
};
|
|
46
|
+
NexxusJsonPatch.validateAgainstType(value, primitiveFieldDef, path);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else if (fieldDef.type === 'string') {
|
|
50
|
+
if (typeof value !== 'string') {
|
|
51
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value for append at path "${path}" must be a string`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
prepend: {
|
|
57
|
+
allowedTypes: ['array', 'string'],
|
|
58
|
+
validateValue: (value, fieldDef, path) => {
|
|
59
|
+
if (fieldDef.type === 'array') {
|
|
60
|
+
const arrayFieldDef = fieldDef;
|
|
61
|
+
if (arrayFieldDef.arrayType === 'object') {
|
|
62
|
+
if (!arrayFieldDef.properties) {
|
|
63
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Array of objects at "${path}" is missing properties definition`);
|
|
64
|
+
}
|
|
65
|
+
const objFieldDef = {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: arrayFieldDef.properties,
|
|
68
|
+
required: false
|
|
69
|
+
};
|
|
70
|
+
NexxusJsonPatch.validateAgainstType(value, objFieldDef, path);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const primitiveFieldDef = {
|
|
74
|
+
type: arrayFieldDef.arrayType,
|
|
75
|
+
required: false
|
|
76
|
+
};
|
|
77
|
+
NexxusJsonPatch.validateAgainstType(value, primitiveFieldDef, path);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (fieldDef.type === 'string') {
|
|
81
|
+
if (typeof value !== 'string') {
|
|
82
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value for prepend at path "${path}" must be a string`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
incr: {
|
|
88
|
+
allowedTypes: ['number', 'date'],
|
|
89
|
+
validateValue: (value, fieldDef, path) => {
|
|
90
|
+
NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
decr: {
|
|
94
|
+
allowedTypes: ['number', 'date'],
|
|
95
|
+
validateValue: (value, fieldDef, path) => {
|
|
96
|
+
NexxusJsonPatch.validateAgainstType(value, fieldDef, path);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
constructor(fullPatch) {
|
|
101
|
+
if (!fullPatch || typeof fullPatch !== 'object' || Array.isArray(fullPatch)) {
|
|
102
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Invalid patch format`);
|
|
103
|
+
}
|
|
104
|
+
if (!JSON_OPS.includes(fullPatch.op)) {
|
|
105
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unsupported JSON Patch operation: ${fullPatch.op}`);
|
|
106
|
+
}
|
|
107
|
+
if (fullPatch.path.length !== fullPatch.value.length) {
|
|
108
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Path and value arrays must have the same length`);
|
|
109
|
+
}
|
|
110
|
+
if (!fullPatch.metadata.type || typeof fullPatch.metadata.type !== 'string') {
|
|
111
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Patch metadata must include type`);
|
|
112
|
+
}
|
|
113
|
+
if (!fullPatch.metadata.appId || typeof fullPatch.metadata.appId !== 'string') {
|
|
114
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Patch metadata must include appId`);
|
|
115
|
+
}
|
|
116
|
+
if (!fullPatch.metadata.id || typeof fullPatch.metadata.id !== 'string') {
|
|
117
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Patch metadata must include id`);
|
|
118
|
+
}
|
|
119
|
+
this.fullPatch = { ...fullPatch, metadata: { ...fullPatch.metadata, pathFieldTypes: [] } };
|
|
120
|
+
}
|
|
121
|
+
get() {
|
|
122
|
+
if (!this.valid) {
|
|
123
|
+
throw new Exceptions_1.InvalidJsonPatchException('Cannot get JSON Patch before validation');
|
|
124
|
+
}
|
|
125
|
+
return this.fullPatch;
|
|
126
|
+
}
|
|
127
|
+
isValid() {
|
|
128
|
+
return this.valid;
|
|
129
|
+
}
|
|
130
|
+
getPartialModel() {
|
|
131
|
+
const partialModel = {
|
|
132
|
+
id: this.fullPatch.metadata.id,
|
|
133
|
+
type: this.fullPatch.metadata.type,
|
|
134
|
+
appId: this.fullPatch.metadata.appId
|
|
135
|
+
};
|
|
136
|
+
for (let i = 0; i < this.fullPatch.path.length; i++) {
|
|
137
|
+
const path = this.fullPatch.path[i];
|
|
138
|
+
const value = this.fullPatch.value[i];
|
|
139
|
+
dot.setProperty(partialModel, path, value);
|
|
140
|
+
}
|
|
141
|
+
return partialModel;
|
|
142
|
+
}
|
|
143
|
+
validate(config) {
|
|
144
|
+
const modelType = this.fullPatch.metadata.type;
|
|
145
|
+
let modelSpec;
|
|
146
|
+
if ('appSchema' in config) {
|
|
147
|
+
const appModelSpec = config.appSchema[modelType];
|
|
148
|
+
if (!appModelSpec) {
|
|
149
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Model type "${modelType}" not found in application schema`);
|
|
150
|
+
}
|
|
151
|
+
modelSpec = {
|
|
152
|
+
updatedAt: BuiltinSchemas_1.NEXXUS_UNIVERSAL_FIELDS.updatedAt,
|
|
153
|
+
...appModelSpec
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const builtinSchema = BuiltinSchemas_1.NEXXUS_BUILTIN_MODEL_SCHEMAS[modelType];
|
|
158
|
+
modelSpec = {
|
|
159
|
+
updatedAt: BuiltinSchemas_1.NEXXUS_UNIVERSAL_FIELDS.updatedAt,
|
|
160
|
+
...builtinSchema
|
|
161
|
+
};
|
|
162
|
+
switch (config.modelType) {
|
|
163
|
+
case 'user':
|
|
164
|
+
if (config.modelType === 'user' && !config.userDetailsSchema) {
|
|
165
|
+
throw new Exceptions_1.InvalidJsonPatchException("User detail schema must be provided for 'user' model patches");
|
|
166
|
+
}
|
|
167
|
+
modelSpec.details = { type: 'object', properties: config.userDetailsSchema, required: false };
|
|
168
|
+
break;
|
|
169
|
+
case 'application':
|
|
170
|
+
break;
|
|
171
|
+
default:
|
|
172
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unsupported built-in model type: ${config.modelType}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const operationRule = NexxusJsonPatch.OPERATION_RULES[this.fullPatch.op];
|
|
176
|
+
for (let i = 0; i < this.fullPatch.path.length; i++) {
|
|
177
|
+
const currentPath = this.fullPatch.path[i];
|
|
178
|
+
const currentValue = this.fullPatch.value[i];
|
|
179
|
+
const fieldDef = NexxusJsonPatch.traverseSchema(modelSpec, currentPath);
|
|
180
|
+
if (!fieldDef) {
|
|
181
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Path "${currentPath}" does not exist in model "${this.fullPatch.metadata.type}"`);
|
|
182
|
+
}
|
|
183
|
+
if (!operationRule.allowedTypes.includes(fieldDef.type)) {
|
|
184
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Operation "${this.fullPatch.op}" not allowed on type "${fieldDef.type}" at path "${currentPath}"`);
|
|
185
|
+
}
|
|
186
|
+
operationRule.validateValue(currentValue, fieldDef, currentPath);
|
|
187
|
+
if (!this.fullPatch.metadata.pathFieldTypes) {
|
|
188
|
+
this.fullPatch.metadata.pathFieldTypes = [];
|
|
189
|
+
}
|
|
190
|
+
this.fullPatch.metadata.pathFieldTypes.push(fieldDef.type);
|
|
191
|
+
}
|
|
192
|
+
this.valid = true;
|
|
193
|
+
}
|
|
194
|
+
static validateAgainstType(value, fieldDef, path) {
|
|
195
|
+
switch (fieldDef.type) {
|
|
196
|
+
case 'string':
|
|
197
|
+
if (typeof value !== 'string') {
|
|
198
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected string at path: ${path}`);
|
|
199
|
+
}
|
|
200
|
+
break;
|
|
201
|
+
case 'number':
|
|
202
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
203
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected number at path: ${path}`);
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
case 'boolean':
|
|
207
|
+
if (typeof value !== 'boolean') {
|
|
208
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected boolean at path: ${path}`);
|
|
209
|
+
}
|
|
210
|
+
break;
|
|
211
|
+
case 'date':
|
|
212
|
+
const date = new Date(value);
|
|
213
|
+
if (isNaN(date.getTime())) {
|
|
214
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected valid date at path: ${path}`);
|
|
215
|
+
}
|
|
216
|
+
break;
|
|
217
|
+
case 'object':
|
|
218
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
219
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected object at path: ${path}`);
|
|
220
|
+
}
|
|
221
|
+
if (NexxusJsonPatch.isObjectFieldDef(fieldDef)) {
|
|
222
|
+
for (const [key, propDef] of Object.entries(fieldDef.properties)) {
|
|
223
|
+
if (propDef.required && !(key in value)) {
|
|
224
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Required field missing: ${path}.${key}`);
|
|
225
|
+
}
|
|
226
|
+
if (key in value) {
|
|
227
|
+
NexxusJsonPatch.validateAgainstType(value[key], propDef, `${path}.${key}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
case 'array':
|
|
233
|
+
if (!Array.isArray(value)) {
|
|
234
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Expected array at path: ${path}`);
|
|
235
|
+
}
|
|
236
|
+
if (NexxusJsonPatch.isArrayFieldDef(fieldDef)) {
|
|
237
|
+
value.forEach((element, index) => {
|
|
238
|
+
const elementPath = `${path}[${index}]`;
|
|
239
|
+
if (fieldDef.arrayType === 'object') {
|
|
240
|
+
if (!fieldDef.properties) {
|
|
241
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Array of objects at "${path}" is missing properties definition`);
|
|
242
|
+
}
|
|
243
|
+
const objFieldDef = {
|
|
244
|
+
type: 'object',
|
|
245
|
+
properties: fieldDef.properties,
|
|
246
|
+
required: false
|
|
247
|
+
};
|
|
248
|
+
NexxusJsonPatch.validateAgainstType(element, objFieldDef, elementPath);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
const primitiveFieldDef = {
|
|
252
|
+
type: fieldDef.arrayType,
|
|
253
|
+
required: false
|
|
254
|
+
};
|
|
255
|
+
NexxusJsonPatch.validateAgainstType(element, primitiveFieldDef, elementPath);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
default:
|
|
261
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unknown field type at path: ${path}`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
static traverseSchema(schema, path) {
|
|
265
|
+
const parts = path.split('.');
|
|
266
|
+
let current = schema;
|
|
267
|
+
for (let i = 0; i < parts.length; i++) {
|
|
268
|
+
const part = parts[i];
|
|
269
|
+
if (!(part in current)) {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
const fieldDef = current[part];
|
|
273
|
+
if (i === parts.length - 1) {
|
|
274
|
+
return fieldDef;
|
|
275
|
+
}
|
|
276
|
+
if (fieldDef.type === 'object') {
|
|
277
|
+
const objDef = fieldDef;
|
|
278
|
+
current = objDef.properties;
|
|
279
|
+
}
|
|
280
|
+
else if (fieldDef.type === 'array') {
|
|
281
|
+
const arrDef = fieldDef;
|
|
282
|
+
if (arrDef.arrayType === 'object' && 'properties' in arrDef) {
|
|
283
|
+
current = arrDef.properties;
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
static validateValueType(value, fieldDef, path) {
|
|
296
|
+
const { type } = fieldDef;
|
|
297
|
+
switch (type) {
|
|
298
|
+
case 'string':
|
|
299
|
+
return this.validateString(value, path);
|
|
300
|
+
case 'number':
|
|
301
|
+
return this.validateNumber(value, path);
|
|
302
|
+
case 'boolean':
|
|
303
|
+
return this.validateBoolean(value, path);
|
|
304
|
+
case 'date':
|
|
305
|
+
return this.validateDate(value, path);
|
|
306
|
+
case 'object':
|
|
307
|
+
return this.validateObject(value, fieldDef, path);
|
|
308
|
+
case 'array':
|
|
309
|
+
return this.validateArray(value, fieldDef, path);
|
|
310
|
+
default:
|
|
311
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unknown field type "${type}" at path "${path}"`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
static validateString(value, path) {
|
|
315
|
+
if (typeof value !== 'string') {
|
|
316
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be a string`);
|
|
317
|
+
}
|
|
318
|
+
return true;
|
|
319
|
+
}
|
|
320
|
+
static validateNumber(value, path) {
|
|
321
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
322
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be a number`);
|
|
323
|
+
}
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
static validateBoolean(value, path) {
|
|
327
|
+
if (typeof value !== 'boolean') {
|
|
328
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be a boolean`);
|
|
329
|
+
}
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
static validateDate(value, path) {
|
|
333
|
+
const isValid = typeof value === 'string' && !isNaN(Date.parse(value)) || typeof value === 'number' && !isNaN(new Date(value).getTime());
|
|
334
|
+
if (!isValid) {
|
|
335
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be a valid date`);
|
|
336
|
+
}
|
|
337
|
+
return true;
|
|
338
|
+
}
|
|
339
|
+
static validateObject(value, fieldDef, path) {
|
|
340
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
341
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be an object`);
|
|
342
|
+
}
|
|
343
|
+
for (const key in value) {
|
|
344
|
+
const nestedFieldDef = fieldDef.properties[key];
|
|
345
|
+
if (!nestedFieldDef) {
|
|
346
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unknown property "${key}" in object at path "${path}"`);
|
|
347
|
+
}
|
|
348
|
+
const nestedPath = path ? `${path}.${key}` : key;
|
|
349
|
+
this.validateValueType(value[key], nestedFieldDef, nestedPath);
|
|
350
|
+
}
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
static validateArray(value, fieldDef, path) {
|
|
354
|
+
if (!Array.isArray(value)) {
|
|
355
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Value at path "${path}" must be an array`);
|
|
356
|
+
}
|
|
357
|
+
const { arrayType } = fieldDef;
|
|
358
|
+
value.forEach((item, index) => {
|
|
359
|
+
const itemPath = `${path}[${index}]`;
|
|
360
|
+
if (arrayType === 'object') {
|
|
361
|
+
const objDef = fieldDef;
|
|
362
|
+
this.validateObject(item, objDef, itemPath);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
this.validatePrimitiveType(item, arrayType, itemPath);
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
return true;
|
|
369
|
+
}
|
|
370
|
+
static validatePrimitiveType(value, type, path) {
|
|
371
|
+
switch (type) {
|
|
372
|
+
case 'string':
|
|
373
|
+
return this.validateString(value, path);
|
|
374
|
+
case 'number':
|
|
375
|
+
return this.validateNumber(value, path);
|
|
376
|
+
case 'boolean':
|
|
377
|
+
return this.validateBoolean(value, path);
|
|
378
|
+
case 'date':
|
|
379
|
+
return this.validateDate(value, path);
|
|
380
|
+
default:
|
|
381
|
+
throw new Exceptions_1.InvalidJsonPatchException(`Unknown primitive type "${type}" at path "${path}"`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
static isObjectFieldDef(fieldDef) {
|
|
385
|
+
return fieldDef.type === 'object';
|
|
386
|
+
}
|
|
387
|
+
static isArrayFieldDef(fieldDef) {
|
|
388
|
+
return fieldDef.type === 'array';
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
exports.NexxusJsonPatch = NexxusJsonPatch;
|
|
392
|
+
//# sourceMappingURL=JsonPatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonPatch.js","sourceRoot":"","sources":["../../src/common/JsonPatch.ts"],"names":[],"mappings":";;;;AAaA,qDAI0B;AAE1B,kDAA8D;AAE9D,sDAAgC;AAEhC,MAAM,QAAQ,GAAG;IACf,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,MAAM;CACE,CAAC;AAuCX,MAAa,eAAe;IAClB,KAAK,GAAY,KAAK,CAAC;IACvB,SAAS,CAA0B;IAEnC,MAAM,CAAU,eAAe,GAAmD;QACxF,OAAO,EAAE;YACP,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;YACxE,aAAa,EAAE,CAAC,KAAU,EAAE,QAAwB,EAAE,IAAY,EAAE,EAAE;gBACpE,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;SACF;QACD,MAAM,EAAE;YACN,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YACjC,aAAa,EAAE,CAAC,KAAU,EAAE,QAAwB,EAAE,IAAY,EAAE,EAAE;gBACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,QAA+B,CAAC;oBAEtD,IAAI,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;wBACzC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;4BAC9B,MAAM,IAAI,sCAAyB,CAAC,wBAAwB,IAAI,oCAAoC,CAAC,CAAC;wBACxG,CAAC;wBAED,MAAM,WAAW,GAAyB;4BACxC,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,aAAa,CAAC,UAAU;4BACpC,QAAQ,EAAE,KAAK;yBAChB,CAAC;wBAEF,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,MAAM,iBAAiB,GAAsB;4BAC3C,IAAI,EAAE,aAAa,CAAC,SAAS;4BAC7B,QAAQ,EAAE,KAAK;yBAChB,CAAC;wBAEF,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,MAAM,IAAI,sCAAyB,CAAC,6BAA6B,IAAI,oBAAoB,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;SACF;QACD,OAAO,EAAE;YACP,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;YACjC,aAAa,EAAE,CAAC,KAAU,EAAE,QAAwB,EAAE,IAAY,EAAE,EAAE;gBACpE,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,QAA+B,CAAC;oBAEtD,IAAI,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;wBACzC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;4BAC9B,MAAM,IAAI,sCAAyB,CAAC,wBAAwB,IAAI,oCAAoC,CAAC,CAAC;wBACxG,CAAC;wBAED,MAAM,WAAW,GAAyB;4BACxC,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,aAAa,CAAC,UAAU;4BACpC,QAAQ,EAAE,KAAK;yBAChB,CAAC;wBAEF,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,MAAM,iBAAiB,GAAsB;4BAC3C,IAAI,EAAE,aAAa,CAAC,SAAS;4BAC7B,QAAQ,EAAE,KAAK;yBAChB,CAAC;wBAEF,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBAC9B,MAAM,IAAI,sCAAyB,CAAC,8BAA8B,IAAI,oBAAoB,CAAC,CAAC;oBAC9F,CAAC;gBACH,CAAC;YACH,CAAC;SACF;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;YAChC,aAAa,EAAE,CAAC,KAAU,EAAE,QAAwB,EAAE,IAAY,EAAE,EAAE;gBACpE,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;SACF;QACD,IAAI,EAAE;YACJ,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;YAChC,aAAa,EAAE,CAAC,KAAU,EAAE,QAAwB,EAAE,IAAY,EAAE,EAAE;gBACpE,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;SACF;KACF,CAAC;IAEF,YAAY,SAA+D;QACzE,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,sCAAyB,CAAC,sBAAsB,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,sCAAyB,CAAC,qCAAqC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,sCAAyB,CAAC,iDAAiD,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5E,MAAM,IAAI,sCAAyB,CAAC,kCAAkC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9E,MAAM,IAAI,sCAAyB,CAAC,mCAAmC,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,OAAO,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACxE,MAAM,IAAI,sCAAyB,CAAC,gCAAgC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC;IAC7F,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,sCAAyB,CAAC,yCAAyC,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,OAAO;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,eAAe;QACpB,MAAM,YAAY,GAAgC;YAChD,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YAC9B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;YAClC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK;SACrC,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAGtC,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,QAAQ,CAAC,MAAuC;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC/C,IAAI,SAAyB,CAAC;QAG9B,IAAI,WAAW,IAAI,MAAM,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,sCAAyB,CAAC,eAAe,SAAS,mCAAmC,CAAC,CAAC;YACnG,CAAC;YAED,SAAS,GAAG;gBACV,SAAS,EAAE,wCAAuB,CAAC,SAAS;gBAC5C,GAAG,YAAY;aAChB,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,aAAa,GAAG,6CAA4B,CAAC,SAAmC,CAAC,CAAC;YAExF,SAAS,GAAG;gBACV,SAAS,EAAE,wCAAuB,CAAC,SAAS;gBAC5C,GAAG,aAAa;aACjB,CAAC;YAEF,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzB,KAAK,MAAM;oBACT,IAAI,MAAM,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;wBAC7D,MAAM,IAAI,sCAAyB,CAAC,8DAA8D,CAAC,CAAC;oBACtG,CAAC;oBAED,SAAS,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;oBAE/F,MAAM;gBACR,KAAK,aAAa;oBAChB,MAAM;gBACR;oBACE,MAAM,IAAI,sCAAyB,CAAC,oCAAoC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAGzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAG7C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAExE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,sCAAyB,CACjC,SAAS,WAAW,8BAA8B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,CAClF,CAAC;YACJ,CAAC;YAGD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,sCAAyB,CACjC,cAAc,IAAI,CAAC,SAAS,CAAC,EAAE,0BAA0B,QAAQ,CAAC,IAAI,cAAc,WAAW,GAAG,CACnG,CAAC;YACJ,CAAC;YAGD,aAAa,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAEjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;gBAC5C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,GAAG,EAAE,CAAC;YAC9C,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAChC,KAAU,EACV,QAAwB,EACxB,IAAY;QAEZ,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,QAAQ;gBACX,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,sCAAyB,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,sCAAyB,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBACD,MAAM;YAER,KAAK,SAAS;gBACZ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,IAAI,sCAAyB,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM;YAER,KAAK,MAAM;gBACT,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,sCAAyB,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBACD,MAAM;YAER,KAAK,QAAQ;gBACX,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChE,MAAM,IAAI,sCAAyB,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBAED,IAAI,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBACjE,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;4BACxC,MAAM,IAAI,sCAAyB,CAAC,2BAA2B,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;wBAChF,CAAC;wBAED,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;4BACjB,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;wBAC7E,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YAER,KAAK,OAAO;gBACV,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,sCAAyB,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;gBACzE,CAAC;gBAED,IAAI,eAAe,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;wBAC/B,MAAM,WAAW,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;wBAExC,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;4BACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gCACzB,MAAM,IAAI,sCAAyB,CAAC,wBAAwB,IAAI,oCAAoC,CAAC,CAAC;4BACxG,CAAC;4BAED,MAAM,WAAW,GAAyB;gCACxC,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE,QAAQ,CAAC,UAAU;gCAC/B,QAAQ,EAAE,KAAK;6BAChB,CAAC;4BAEF,eAAe,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;wBACzE,CAAC;6BAAM,CAAC;4BACN,MAAM,iBAAiB,GAAsB;gCAC3C,IAAI,EAAE,QAAQ,CAAC,SAAS;gCACxB,QAAQ,EAAE,KAAK;6BAChB,CAAC;4BAEF,eAAe,CAAC,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YAER;gBACE,MAAM,IAAI,sCAAyB,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAC3B,MAAsB,EACtB,IAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAoD,MAAM,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAG/B,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,QAAQ,CAAC;YAClB,CAAC;YAGD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,QAAgC,CAAC;gBAEhD,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;YAC9B,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,QAA+B,CAAC;gBAG/C,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;oBAC5D,OAAO,GAAG,MAAM,CAAC,UAAW,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBAEN,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAC9B,KAAU,EACV,QAAwB,EACxB,IAAY;QAEZ,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAE1B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE1C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE1C,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAE3C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAExC,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEpD,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAEnD;gBACE,MAAM,IAAI,sCAAyB,CAAC,uBAAuB,IAAI,cAAc,IAAI,GAAG,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAKO,MAAM,CAAC,cAAc,CAAC,KAAU,EAAE,IAAY;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,oBAAoB,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,cAAc,CAAC,KAAU,EAAE,IAAY;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,oBAAoB,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,eAAe,CAAC,KAAU,EAAE,IAAY;QACrD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,qBAAqB,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,YAAY,CAAC,KAAsB,EAAE,IAAY;QAC9D,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzI,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,cAAc,CAC3B,KAAU,EACV,QAA8B,EAC9B,IAAY;QAGZ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,qBAAqB,CAAC,CAAC;QACnF,CAAC;QAGD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,sCAAyB,CAAC,qBAAqB,GAAG,wBAAwB,IAAI,GAAG,CAAC,CAAC;YAC/F,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,aAAa,CAC1B,KAAU,EACV,QAA6B,EAC7B,IAAY;QAGZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,sCAAyB,CAAC,kBAAkB,IAAI,oBAAoB,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QAG/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;YAErC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAE3B,MAAM,MAAM,GAAG,QAAe,CAAC;gBAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAKO,MAAM,CAAC,qBAAqB,CAClC,KAAU,EACV,IAA8B,EAC9B,IAAY;QAEZ,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1C,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC3C,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAExC;gBACE,MAAM,IAAI,sCAAyB,CAAC,2BAA2B,IAAI,cAAc,IAAI,GAAG,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,QAAwB;QACtD,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;IACpC,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,QAAwB;QACrD,OAAO,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC;IACnC,CAAC;;AAzgBH,0CA0gBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelTypes.js","sourceRoot":"","sources":["../../src/common/ModelTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueuePayloads.js","sourceRoot":"","sources":["../../src/common/QueuePayloads.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexxusSchemaValidator = void 0;
|
|
4
|
+
class NexxusSchemaValidator {
|
|
5
|
+
static validateUserDetails(partialDetails, userDetailSchema) {
|
|
6
|
+
for (const field in partialDetails) {
|
|
7
|
+
const fieldDef = userDetailSchema[field];
|
|
8
|
+
const fieldValue = partialDetails[field];
|
|
9
|
+
if (!fieldDef) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
switch (fieldDef.type) {
|
|
13
|
+
case 'string':
|
|
14
|
+
if (typeof fieldValue !== 'string')
|
|
15
|
+
return false;
|
|
16
|
+
break;
|
|
17
|
+
case 'number':
|
|
18
|
+
if (typeof fieldValue !== 'number')
|
|
19
|
+
return false;
|
|
20
|
+
break;
|
|
21
|
+
case 'boolean':
|
|
22
|
+
if (typeof fieldValue !== 'boolean')
|
|
23
|
+
return false;
|
|
24
|
+
break;
|
|
25
|
+
case 'object':
|
|
26
|
+
if (typeof fieldValue !== 'object' || Array.isArray(fieldValue))
|
|
27
|
+
return false;
|
|
28
|
+
break;
|
|
29
|
+
case 'array':
|
|
30
|
+
if (!Array.isArray(fieldValue))
|
|
31
|
+
return false;
|
|
32
|
+
break;
|
|
33
|
+
default:
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.NexxusSchemaValidator = NexxusSchemaValidator;
|
|
41
|
+
//# sourceMappingURL=SchemaValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../src/common/SchemaValidator.ts"],"names":[],"mappings":";;;AAEA,MAAa,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;AAlCD,sDAkCC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NEXXUS_PREFIX_UC = exports.NEXXUS_PREFIX_LC = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
tslib_1.__exportStar(require("./lib/Exceptions"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./lib/ConfigProvider"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./lib/ConfigManager"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./lib/BaseService"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./lib/Logger"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./common/QueuePayloads"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./common/JsonPatch"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./common/FilterQuery"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./models/BaseModel"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./common/BuiltinSchemas"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./models/AppModel"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./models/Application"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./models/User"), exports);
|
|
18
|
+
exports.NEXXUS_PREFIX_LC = "nxx";
|
|
19
|
+
exports.NEXXUS_PREFIX_UC = "NXX";
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,2DAAiC;AACjC,+DAAqC;AACrC,8DAAoC;AACpC,4DAAkC;AAClC,uDAA6B;AAE7B,iEAAuC;AACvC,6DAAmC;AACnC,+DAAqC;AACrC,6DAAmC;AACnC,kEAAwC;AACxC,4DAAkC;AAClC,+DAAqC;AACrC,wDAA8B;AAEjB,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,gBAAgB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexxusBaseService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const Exceptions_1 = require("./Exceptions");
|
|
6
|
+
const fs = tslib_1.__importStar(require("node:fs"));
|
|
7
|
+
const node_events_1 = require("node:events");
|
|
8
|
+
function frozen(target, propertyKey) {
|
|
9
|
+
Object.defineProperty(target, propertyKey, {
|
|
10
|
+
value: Object.freeze(target[propertyKey]),
|
|
11
|
+
writable: false,
|
|
12
|
+
configurable: false
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
class TypedEventEmitter {
|
|
16
|
+
emitter;
|
|
17
|
+
constructor() {
|
|
18
|
+
this.emitter = new node_events_1.EventEmitter();
|
|
19
|
+
}
|
|
20
|
+
on(event, listener) {
|
|
21
|
+
this.emitter.on(event, listener);
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
once(event, listener) {
|
|
25
|
+
this.emitter.once(event, listener);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
off(event, listener) {
|
|
29
|
+
this.emitter.off(event, listener);
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
emit(event, ...payload) {
|
|
33
|
+
return this.emitter.emit(event, ...payload);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
class NexxusBaseService extends TypedEventEmitter {
|
|
37
|
+
config;
|
|
38
|
+
static envVars;
|
|
39
|
+
static cliArgs;
|
|
40
|
+
static schemaPath;
|
|
41
|
+
static schemaContents;
|
|
42
|
+
constructor(config) {
|
|
43
|
+
super();
|
|
44
|
+
this.config = config;
|
|
45
|
+
}
|
|
46
|
+
static envVarConfig() {
|
|
47
|
+
if (!this.envVars) {
|
|
48
|
+
throw new Exceptions_1.FatalErrorException(`Env vars spec not set for ${this.name} class.`);
|
|
49
|
+
}
|
|
50
|
+
return this.envVars;
|
|
51
|
+
}
|
|
52
|
+
static cliArgConfig() {
|
|
53
|
+
if (!this.cliArgs) {
|
|
54
|
+
throw new Exceptions_1.FatalErrorException(`CLI args spec not set for ${this.name} class.`);
|
|
55
|
+
}
|
|
56
|
+
return this.cliArgs;
|
|
57
|
+
}
|
|
58
|
+
static schema() {
|
|
59
|
+
if (!this.schemaPath) {
|
|
60
|
+
throw new Exceptions_1.FatalErrorException(`Schema path not set for ${this.name} class.`);
|
|
61
|
+
}
|
|
62
|
+
if (!this.schemaContents) {
|
|
63
|
+
this.schemaContents = fs.readFileSync(this.schemaPath, 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
const definition = JSON.parse(this.schemaContents);
|
|
66
|
+
if (!definition.$comment) {
|
|
67
|
+
throw new Exceptions_1.FatalErrorException(`Schema for ${this.name} is missing $comment field. ` +
|
|
68
|
+
'This field is required to specify where in the main config this specific configuration ' +
|
|
69
|
+
'should be placed.');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
name: this.name,
|
|
73
|
+
where: definition.$comment,
|
|
74
|
+
definition,
|
|
75
|
+
required: true
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.NexxusBaseService = NexxusBaseService;
|
|
80
|
+
tslib_1.__decorate([
|
|
81
|
+
frozen
|
|
82
|
+
], NexxusBaseService.prototype, "config", void 0);
|
|
83
|
+
//# sourceMappingURL=BaseService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseService.js","sourceRoot":"","sources":["../../src/lib/BaseService.ts"],"names":[],"mappings":"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"}
|