@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,40 +1,111 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NexxusSchemaValidator = void 0;
4
+ const Exceptions_1 = require("../lib/Exceptions");
4
5
  class NexxusSchemaValidator {
5
- static validateUserDetails(partialDetails, userDetailSchema) {
6
- for (const field in partialDetails) {
7
- const fieldDef = userDetailSchema[field];
8
- const fieldValue = partialDetails[field];
6
+ static validateAgainstSchema(data, modelDef) {
7
+ if (!data || typeof data !== 'object' || Array.isArray(data)) {
8
+ throw new Exceptions_1.InvalidSchemaDataException(`Schema validation: input must be a non-null object`);
9
+ }
10
+ const result = { ...data };
11
+ for (const [fieldName, value] of Object.entries(data)) {
12
+ if (fieldName === 'version') {
13
+ throw new Exceptions_1.InvalidSchemaDataException(`Field "version" is a system-managed Nexxus field and cannot be set by user input`);
14
+ }
15
+ const fieldDef = modelDef[fieldName];
9
16
  if (!fieldDef) {
10
- return false;
17
+ continue;
11
18
  }
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;
19
+ result[fieldName] = NexxusSchemaValidator.validateValue(value, fieldDef, fieldName);
20
+ }
21
+ return result;
22
+ }
23
+ static validateValue(value, fieldDef, path) {
24
+ switch (fieldDef.type) {
25
+ case 'string':
26
+ return NexxusSchemaValidator.validateString(value, path);
27
+ case 'number':
28
+ return NexxusSchemaValidator.validateNumber(value, path);
29
+ case 'boolean':
30
+ return NexxusSchemaValidator.validateBoolean(value, path);
31
+ case 'date':
32
+ return NexxusSchemaValidator.validateDate(value, path);
33
+ case 'object':
34
+ return NexxusSchemaValidator.validateObject(value, fieldDef, path);
35
+ case 'array':
36
+ return NexxusSchemaValidator.validateArray(value, fieldDef, path);
37
+ default:
38
+ throw new Exceptions_1.InvalidSchemaDataException(`Unknown field type at path "${path}"`);
39
+ }
40
+ }
41
+ static validateString(value, path) {
42
+ if (typeof value !== 'string') {
43
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected string at path "${path}", got ${typeof value}`);
44
+ }
45
+ return value;
46
+ }
47
+ static validateNumber(value, path) {
48
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
49
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected number at path "${path}", got ${typeof value}`);
50
+ }
51
+ return value;
52
+ }
53
+ static validateBoolean(value, path) {
54
+ if (typeof value !== 'boolean') {
55
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected boolean at path "${path}", got ${typeof value}`);
56
+ }
57
+ return value;
58
+ }
59
+ static validateDate(value, path) {
60
+ if (typeof value === 'number' && Number.isFinite(value)) {
61
+ return value;
62
+ }
63
+ if (typeof value === 'string') {
64
+ const asNum = Number(value);
65
+ if (Number.isFinite(asNum)) {
66
+ return asNum;
67
+ }
68
+ const ts = new Date(value).getTime();
69
+ if (Number.isFinite(ts)) {
70
+ return Math.floor(ts);
71
+ }
72
+ }
73
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected valid date at path "${path}", got "${String(value)}"`);
74
+ }
75
+ static validateObject(value, fieldDef, path) {
76
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
77
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected object at path "${path}"`);
78
+ }
79
+ const input = value;
80
+ const result = { ...input };
81
+ for (const [key, propDef] of Object.entries(fieldDef.properties)) {
82
+ if (key in input) {
83
+ result[key] = NexxusSchemaValidator.validateValue(input[key], propDef, `${path}.${key}`);
35
84
  }
36
85
  }
37
- return true;
86
+ return result;
87
+ }
88
+ static validateArray(value, fieldDef, path) {
89
+ if (!Array.isArray(value)) {
90
+ throw new Exceptions_1.InvalidSchemaDataException(`Expected array at path "${path}"`);
91
+ }
92
+ return value.map((element, index) => {
93
+ const elementPath = `${path}[${index}]`;
94
+ if (fieldDef.arrayType === 'object') {
95
+ if (!fieldDef.properties) {
96
+ throw new Exceptions_1.InvalidSchemaDataException(`Array of objects at "${path}" is missing properties definition`);
97
+ }
98
+ const objFieldDef = {
99
+ type: 'object',
100
+ properties: fieldDef.properties,
101
+ };
102
+ return NexxusSchemaValidator.validateObject(element, objFieldDef, elementPath);
103
+ }
104
+ const primitiveFieldDef = {
105
+ type: fieldDef.arrayType,
106
+ };
107
+ return NexxusSchemaValidator.validateValue(element, primitiveFieldDef, elementPath);
108
+ });
38
109
  }
39
110
  }
40
111
  exports.NexxusSchemaValidator = NexxusSchemaValidator;
@@ -1 +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"}
1
+ {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../src/common/SchemaValidator.ts"],"names":[],"mappings":"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"}
package/dist-cjs/index.js CHANGED
@@ -10,7 +10,10 @@ tslib_1.__exportStar(require("./lib/Logger"), exports);
10
10
  tslib_1.__exportStar(require("./common/QueuePayloads"), exports);
11
11
  tslib_1.__exportStar(require("./common/JsonPatch"), exports);
12
12
  tslib_1.__exportStar(require("./common/FilterQuery"), exports);
13
+ tslib_1.__exportStar(require("./common/InferModel"), exports);
14
+ tslib_1.__exportStar(require("./common/SchemaValidator"), exports);
13
15
  tslib_1.__exportStar(require("./models/BaseModel"), exports);
16
+ tslib_1.__exportStar(require("./models/BuiltinModel"), exports);
14
17
  tslib_1.__exportStar(require("./common/BuiltinSchemas"), exports);
15
18
  tslib_1.__exportStar(require("./models/AppModel"), exports);
16
19
  tslib_1.__exportStar(require("./models/Application"), exports);
@@ -1 +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"}
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,8DAAoC;AACpC,mEAAyC;AACzC,6DAAmC;AACnC,gEAAsC;AACtC,kEAAwC;AACxC,4DAAkC;AAClC,+DAAqC;AACrC,wDAA8B;AAEjB,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,gBAAgB,GAAG,KAAK,CAAC"}
@@ -37,6 +37,7 @@ class NexxusBaseService extends TypedEventEmitter {
37
37
  config;
38
38
  static envVars;
39
39
  static cliArgs;
40
+ static configRootKey;
40
41
  static schemaPath;
41
42
  static schemaContents;
42
43
  constructor(config) {
@@ -59,18 +60,17 @@ class NexxusBaseService extends TypedEventEmitter {
59
60
  if (!this.schemaPath) {
60
61
  throw new Exceptions_1.FatalErrorException(`Schema path not set for ${this.name} class.`);
61
62
  }
63
+ if (!this.configRootKey) {
64
+ throw new Exceptions_1.FatalErrorException(`configRootKey not set for ${this.name} class. ` +
65
+ 'This static must declare the top-level key under which this service\'s config sits in the merged root config.');
66
+ }
62
67
  if (!this.schemaContents) {
63
68
  this.schemaContents = fs.readFileSync(this.schemaPath, 'utf-8');
64
69
  }
65
70
  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
71
  return {
72
72
  name: this.name,
73
- where: definition.$comment,
73
+ where: this.configRootKey,
74
74
  definition,
75
75
  required: true
76
76
  };
@@ -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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"}
@@ -17,10 +17,10 @@ class NexxusConfigManager {
17
17
  data = {};
18
18
  configProviders = [];
19
19
  customProviders = [];
20
- constructor(confFile) {
20
+ constructor(configFileName) {
21
21
  const schemaPath = path.join(__dirname, "../../src/schemas/root.schema.json");
22
22
  this.jsonSchema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
23
- this.configProviders.push(new ConfigProvider_1.NexxusFileConfigProvider(path.join(process.cwd(), confFile ?? NexxusConfigManager.CONF_FILE_NAME)));
23
+ this.configProviders.push(new ConfigProvider_1.NexxusFileConfigProvider(path.join(process.cwd(), configFileName ?? NexxusConfigManager.CONF_FILE_NAME)));
24
24
  this.configProviders.push(new ConfigProvider_1.NexxusEnvVarsConfigProvider());
25
25
  this.configProviders.push(new ConfigProvider_1.NexxusCliArgConfigProvider());
26
26
  }
@@ -41,19 +41,16 @@ class NexxusConfigManager {
41
41
  this.jsonSchema.required.push(def.where);
42
42
  }
43
43
  }
44
- validateServices(svcs) {
44
+ async validateServices(svcs) {
45
45
  for (const NxxSvc of svcs) {
46
- this.addCliArgsToSpec(NxxSvc.cliArgConfig());
47
- this.addEnvVarsToSpec(NxxSvc.envVarConfig());
48
- this.addJsonSchemaDef(NxxSvc.schema());
46
+ const schemaDef = NxxSvc.schema();
47
+ const className = NxxSvc.name;
48
+ const configRootKey = schemaDef.where;
49
+ this.cliArgsSpecs.push({ className, configRootKey, specs: NxxSvc.cliArgConfig() });
50
+ this.envVarsSpecs.push({ className, configRootKey, specs: NxxSvc.envVarConfig() });
51
+ this.addJsonSchemaDef(schemaDef);
49
52
  }
50
- this.validate();
51
- }
52
- addCliArgsToSpec(cliArgSpec) {
53
- this.cliArgsSpecs.push(cliArgSpec);
54
- }
55
- addEnvVarsToSpec(envVarSpec) {
56
- this.envVarsSpecs.push(envVarSpec);
53
+ await this.validate();
57
54
  }
58
55
  populateFromCliArgs() {
59
56
  if (this.cliArgsSpecs.length === 0) {
@@ -65,9 +62,9 @@ class NexxusConfigManager {
65
62
  spec.specs.forEach((arg) => {
66
63
  if (collectedNames.has(arg.name)) {
67
64
  throw new Exceptions_1.InvalidConfigException(`Duplicate CLI argument name: "${arg.name}".
68
- Defined first by source: "${collectedNames.get(arg.name)}" and now by source: "${spec.source}"`);
65
+ Defined first by class "${collectedNames.get(arg.name)}" and now by class "${spec.className}"`);
69
66
  }
70
- collectedNames.set(arg.name, spec.source);
67
+ collectedNames.set(arg.name, spec.className);
71
68
  cliArgProvider.addArgument(arg.name, arg.type);
72
69
  });
73
70
  });
@@ -75,7 +72,7 @@ class NexxusConfigManager {
75
72
  this.cliArgsSpecs.forEach(spec => {
76
73
  spec.specs.forEach(arg => {
77
74
  if (parsed[arg.name] !== undefined && parsed[arg.name] !== null) {
78
- Dot.setProperty(this.data, arg.location, parsed[arg.name]);
75
+ Dot.setProperty(this.data, `${spec.configRootKey}.${arg.location}`, parsed[arg.name]);
79
76
  }
80
77
  });
81
78
  });
@@ -91,14 +88,14 @@ class NexxusConfigManager {
91
88
  this.envVarsSpecs.forEach(spec => {
92
89
  spec.specs.forEach(envVar => {
93
90
  if (collectedNames.has(envVar.name)) {
94
- throw new Exceptions_1.InvalidConfigException(`Duplicate Env var: "${prefix}_${envVar.name}".
95
- Defined first by source: "${collectedNames.get(envVar.name)}" and now by source: "${spec.source}"`);
91
+ throw new Exceptions_1.InvalidConfigException(`Duplicate Env var: "${prefix}${envVar.name}".
92
+ Defined first by class "${collectedNames.get(envVar.name)}" and now by class "${spec.className}"`);
96
93
  }
97
94
  const value = envResult?.[`${prefix}${envVar.name}`];
98
95
  if (value !== undefined) {
99
- Dot.setProperty(this.data, envVar.location, value);
96
+ Dot.setProperty(this.data, `${spec.configRootKey}.${envVar.location}`, value);
100
97
  }
101
- collectedNames.set(envVar.name, spec.source);
98
+ collectedNames.set(envVar.name, spec.className);
102
99
  });
103
100
  });
104
101
  }
@@ -119,7 +116,7 @@ class NexxusConfigManager {
119
116
  await this.populateFromCustomProviders();
120
117
  this.populateFromCliArgs();
121
118
  this.populateFromEnvVars();
122
- const ajv = new ajv_1.Ajv();
119
+ const ajv = new ajv_1.Ajv({ useDefaults: true });
123
120
  const validator = ajv.compile(this.jsonSchema);
124
121
  const result = validator(this.data);
125
122
  if (!result) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/lib/ConfigManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/lib/ConfigManager.ts"],"names":[],"mappings":";;;;AAAA,6CAA2E;AAE3E,qDAO0B;AAE1B,6BAAuC;AACvC,sDAAgC;AAChC,kEAAkC;AAGlC,oDAA8B;AAC9B,wDAAkC;AAsClC,MAAa,mBAAmB;IACtB,MAAM,CAAC,cAAc,GAAsB,kBAAkB,CAAC;IAE9D,UAAU,CAAc;IACxB,YAAY,GAA0C,EAAE,CAAC;IACzD,YAAY,GAA0C,EAAE,CAAC;IACzD,IAAI,GAAiB,EAAE,CAAC;IAExB,eAAe,GAAkC,EAAE,CAAC;IACpD,eAAe,GAAkC,EAAE,CAAC;IAE5D,YAAY,cAAwB;QAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oCAAoC,CAAC,CAAC;QAE9E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,yCAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,IAAI,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACxI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,4CAA2B,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,2CAA0B,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEM,iBAAiB,CAAC,QAA+B;QACtD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAEO,gBAAgB,CAAC,GAA4B;QAGnD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAA;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,EAA2B,CAAC;QACrG,CAAC;QAED,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE,CAAC;YAChC,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAsC;QAClE,KAAI,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;YAC9B,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC;YAEtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAyB,IAAI,GAAG,EAAE,CAAC;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAA+B,CAAC;QAEjF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,mCAAsB,CAAC,iCAAiC,GAAG,CAAC,IAAI;sCAC9C,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACpG,CAAC;gBAED,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAE7C,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;QAE1C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACvB,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAChE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAwB,IAAI,GAAG,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAgC,CAAC;QAClF,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,4CAA2B,CAAC,cAAc,CAAC;QAE1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC1B,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,mCAAsB,CAAC,uBAAuB,MAAM,GAAG,MAAM,CAAC,IAAI;sCAChD,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACvG,CAAC;gBAED,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAErD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;gBAChF,CAAC;gBAED,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,2BAA2B;QACvC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;YAE1C,IAAI,CAAC,IAAI,GAAG,IAAA,mBAAS,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,MAAyB;QAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACtB,OAAO,KAAK,GAAG,CAAC,YAAY,IAAI,OAAO,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC;QACjE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAA6B,CAAC;QAE/E,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,CAAC;QAE3C,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAa,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,MAA2B,CAAC,CAAC;YAErF,MAAM,IAAI,gCAAmB,CAAC,kCAAkC,GAAG,gBAAgB,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,KAAc;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;;AA9JH,kDA+JC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InvalidUserModelException = exports.InvalidQueryFilterException = exports.InvalidJsonPatchException = exports.InvalidConfigException = exports.ConnectionException = exports.BadRequestException = exports.FatalErrorException = exports.NexxusException = exports.NexxusExceptions = void 0;
3
+ exports.InvalidUserModelException = exports.InvalidSchemaDataException = exports.InvalidQueryFilterException = exports.InvalidJsonPatchException = exports.InvalidConfigException = exports.ConnectionException = exports.BadRequestException = exports.FatalErrorException = exports.NexxusException = exports.NexxusExceptions = void 0;
4
4
  var NexxusExceptions;
5
5
  (function (NexxusExceptions) {
6
6
  NexxusExceptions["FATAL_ERROR"] = "FatalErrorException";
@@ -9,6 +9,7 @@ var NexxusExceptions;
9
9
  NexxusExceptions["INVALID_CONFIG"] = "InvalidConfigException";
10
10
  NexxusExceptions["INVALID_JSON_PATCH"] = "InvalidJsonPatchException";
11
11
  NexxusExceptions["INVALID_QUERY_FILTER"] = "InvalidQueryFilterException";
12
+ NexxusExceptions["INVALID_SCHEMA_DATA"] = "InvalidSchemaDataException";
12
13
  NexxusExceptions["INVALID_USER_MODEL"] = "InvalidUserModelException";
13
14
  })(NexxusExceptions || (exports.NexxusExceptions = NexxusExceptions = {}));
14
15
  ;
@@ -55,6 +56,12 @@ class InvalidQueryFilterException extends NexxusException {
55
56
  }
56
57
  }
57
58
  exports.InvalidQueryFilterException = InvalidQueryFilterException;
59
+ class InvalidSchemaDataException extends NexxusException {
60
+ constructor(message) {
61
+ super(NexxusExceptions.INVALID_SCHEMA_DATA, message);
62
+ }
63
+ }
64
+ exports.InvalidSchemaDataException = InvalidSchemaDataException;
58
65
  class InvalidUserModelException extends NexxusException {
59
66
  constructor(message) {
60
67
  super(NexxusExceptions.INVALID_USER_MODEL, message);
@@ -1 +1 @@
1
- {"version":3,"file":"Exceptions.js","sourceRoot":"","sources":["../../src/lib/Exceptions.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,uDAAmC,CAAA;IACnC,uDAAmC,CAAA;IACnC,iEAA6C,CAAA;IAC7C,6DAAyC,CAAA;IACzC,oEAAgD,CAAA;IAChD,wEAAoD,CAAA;IACpD,oEAAgD,CAAA;AAClD,CAAC,EARW,gBAAgB,gCAAhB,gBAAgB,QAQ3B;AAAA,CAAC;AAEF,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AALD,0CAKC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,sBAAuB,SAAQ,eAAe;IACzD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;AAJD,wDAIC;AAED,MAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAJD,8DAIC;AAED,MAAa,2BAA4B,SAAQ,eAAe;IAC9D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAJD,kEAIC;AAED,MAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAJD,8DAIC"}
1
+ {"version":3,"file":"Exceptions.js","sourceRoot":"","sources":["../../src/lib/Exceptions.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBASX;AATD,WAAY,gBAAgB;IAC1B,uDAAmC,CAAA;IACnC,uDAAmC,CAAA;IACnC,iEAA6C,CAAA;IAC7C,6DAAyC,CAAA;IACzC,oEAAgD,CAAA;IAChD,wEAAoD,CAAA;IACpD,sEAAkD,CAAA;IAClD,oEAAgD,CAAA;AAClD,CAAC,EATW,gBAAgB,gCAAhB,gBAAgB,QAS3B;AAAA,CAAC;AAEF,MAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AALD,0CAKC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF;AAJD,kDAIC;AAED,MAAa,sBAAuB,SAAQ,eAAe;IACzD,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;CACF;AAJD,wDAIC;AAED,MAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAJD,8DAIC;AAED,MAAa,2BAA4B,SAAQ,eAAe;IAC9D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAJD,kEAIC;AAED,MAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;CACF;AAJD,gEAIC;AAED,MAAa,yBAA0B,SAAQ,eAAe;IAC5D,YAAY,OAAe;QACzB,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAJD,8DAIC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WinstonNexxusLogger = exports.NexxusBaseLogger = exports.NexxusLoggerLevels = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const BaseService_1 = require("./BaseService");
6
+ const Exceptions_1 = require("./Exceptions");
6
7
  const Winston = tslib_1.__importStar(require("winston"));
7
8
  const path = tslib_1.__importStar(require("node:path"));
8
9
  var NexxusLoggerLevels;
@@ -17,91 +18,114 @@ var NexxusLoggerLevels;
17
18
  NexxusLoggerLevels["DEBUG"] = "debug";
18
19
  })(NexxusLoggerLevels || (exports.NexxusLoggerLevels = NexxusLoggerLevels = {}));
19
20
  class NexxusBaseLogger extends BaseService_1.NexxusBaseService {
21
+ static configRootKey = "logger";
20
22
  constructor(services) {
21
23
  super(services.configManager.getConfig('logger'));
22
24
  }
23
- debug(message, label) {
24
- this.log("debug", message, label);
25
+ static serializeError(err) {
26
+ const out = {
27
+ name: err.name,
28
+ message: err.message,
29
+ stack: err.stack,
30
+ };
31
+ if (err.cause !== undefined) {
32
+ out.cause = err.cause;
33
+ }
34
+ return out;
35
+ }
36
+ static makeSafeReplacer() {
37
+ const seen = new WeakSet();
38
+ return (_key, value) => {
39
+ if (value instanceof Error) {
40
+ return NexxusBaseLogger.serializeError(value);
41
+ }
42
+ if (value !== null && typeof value === 'object') {
43
+ if (seen.has(value)) {
44
+ return '[circular]';
45
+ }
46
+ seen.add(value);
47
+ }
48
+ return value;
49
+ };
50
+ }
51
+ static safeStringify(value) {
52
+ return JSON.stringify(value, NexxusBaseLogger.makeSafeReplacer());
25
53
  }
26
- info(message, label) {
27
- this.log("info", message, label);
54
+ debug(message, attributesOrLabel, label) {
55
+ this.dispatch("debug", message, attributesOrLabel, label);
28
56
  }
29
- warn(message, label) {
30
- this.log("warn", message, label);
57
+ info(message, attributesOrLabel, label) {
58
+ this.dispatch("info", message, attributesOrLabel, label);
31
59
  }
32
- error(message, label) {
33
- this.log("error", message, label);
60
+ warn(message, attributesOrLabel, label) {
61
+ this.dispatch("warn", message, attributesOrLabel, label);
34
62
  }
35
- critical(message, label) {
36
- this.log("crit", message, label);
63
+ error(message, attributesOrLabel, label) {
64
+ this.dispatch("error", message, attributesOrLabel, label);
37
65
  }
38
- alert(message, label) {
39
- this.log("alert", message, label);
66
+ critical(message, attributesOrLabel, label) {
67
+ this.dispatch("crit", message, attributesOrLabel, label);
40
68
  }
41
- emerg(message, label) {
42
- this.log("emerg", message, label);
69
+ alert(message, attributesOrLabel, label) {
70
+ this.dispatch("alert", message, attributesOrLabel, label);
71
+ }
72
+ emerg(message, attributesOrLabel, label) {
73
+ this.dispatch("emerg", message, attributesOrLabel, label);
74
+ }
75
+ dispatch(level, message, attributesOrLabel, label) {
76
+ if (typeof attributesOrLabel === 'string') {
77
+ this.log(level, message, undefined, attributesOrLabel);
78
+ }
79
+ else {
80
+ this.log(level, message, attributesOrLabel, label);
81
+ }
43
82
  }
44
83
  }
45
84
  exports.NexxusBaseLogger = NexxusBaseLogger;
46
85
  class WinstonNexxusLogger extends NexxusBaseLogger {
47
86
  winston;
48
87
  static schemaPath = path.join(__dirname, "../../src/schemas/winston-logger.schema.json");
49
- static envVars = {
50
- source: this.name,
51
- specs: [
52
- {
53
- name: "LOG_LEVEL",
54
- location: "logger.level"
55
- }
56
- ]
57
- };
58
- static cliArgs = {
59
- source: this.name,
60
- specs: []
61
- };
62
- constructor(services) {
88
+ static envVars = [
89
+ { name: "LOG_LEVEL", location: "level" }
90
+ ];
91
+ static cliArgs = [];
92
+ constructor(services, resolvedTransports) {
63
93
  super(services);
64
94
  let format;
65
95
  if (this.config.logType === "json") {
66
- format = Winston.format.json({
67
- circularValue: '[circular]'
68
- });
69
- format = Winston.format.combine(Winston.format.printf(info => {
70
- const msg = info.message;
71
- if (msg.startsWith("{") || msg.startsWith("[")) {
72
- try {
73
- info.message = JSON.parse(msg);
74
- }
75
- catch (e) {
76
- if (e.message.includes("Unexpected")) {
77
- info.message = msg;
78
- }
79
- else {
80
- throw e;
81
- }
82
- }
96
+ format = Winston.format.printf(info => {
97
+ const record = {};
98
+ if (info.timestamp) {
99
+ record.time = info.timestamp;
100
+ }
101
+ record.level = info.level;
102
+ record.label = info.label ?? "default-label";
103
+ record.msg = info.message;
104
+ const attrs = info.attrs;
105
+ if (attrs && typeof attrs === 'object' && Object.keys(attrs).length > 0) {
106
+ record.attrs = attrs;
83
107
  }
84
- info.label = info.label || "default-label";
85
- return JSON.stringify(info);
86
- }), format);
108
+ return WinstonNexxusLogger.safeStringify(record);
109
+ });
87
110
  if (this.config.timestamps) {
88
111
  format = Winston.format.combine(Winston.format.timestamp(), format);
89
112
  }
90
113
  }
91
114
  else {
92
115
  format = Winston.format.printf(info => {
93
- let result = '';
94
- if (info.message === undefined) {
95
- const isMetadataEmpty = Object.keys(info.metadata).length === 0;
96
- info.message = isMetadataEmpty ? 'undefined' : JSON.stringify(info.metadata);
116
+ const label = info.label ?? "default-label";
117
+ const timestampPrefix = info.timestamp ? `[${info.timestamp}] ` : '';
118
+ const header = `${timestampPrefix}${info.level.toLocaleUpperCase()} [${label}]: ${info.message}`;
119
+ const attrs = info.attrs;
120
+ if (!attrs || typeof attrs !== 'object' || Object.keys(attrs).length === 0) {
121
+ return header;
97
122
  }
98
- info.label = info.label || "default-label";
99
- if (info.timestamp) {
100
- result += `[${info.timestamp}] `;
123
+ const lines = [header];
124
+ for (const [k, v] of Object.entries(attrs)) {
125
+ lines.push(` ${k}: ${WinstonNexxusLogger.safeStringify(v)}`);
101
126
  }
102
- return result + `${info.level.toLocaleUpperCase()} [${info.label}]: ${info.message}`;
127
+ return lines.join('\n');
103
128
  });
104
- format = Winston.format.combine(Winston.format.metadata({ fillExcept: ['message', 'level', 'timestamp', 'label'] }), format);
105
129
  if (this.config.timestamps) {
106
130
  format = Winston.format.combine(Winston.format.timestamp(), format);
107
131
  }
@@ -112,19 +136,68 @@ class WinstonNexxusLogger extends NexxusBaseLogger {
112
136
  this.winston = Winston.createLogger({
113
137
  level: this.config.level,
114
138
  format,
115
- transports: [
116
- new Winston.transports.Console()
117
- ]
139
+ transports: resolvedTransports
118
140
  });
119
141
  }
120
- log(level, message, label) {
121
- if (typeof message === 'object' || Array.isArray(message)) {
122
- message = JSON.stringify(message);
142
+ static async create(services) {
143
+ const config = services.configManager.getConfig('logger');
144
+ const resolvedTransports = await WinstonNexxusLogger.resolveTransports(config);
145
+ return new WinstonNexxusLogger(services, resolvedTransports);
146
+ }
147
+ static async resolveTransports(config) {
148
+ const entries = config.transports?.length
149
+ ? config.transports
150
+ : [{ type: 'stdout' }];
151
+ const resolved = [];
152
+ for (const entry of entries) {
153
+ switch (entry.type) {
154
+ case 'stdout':
155
+ resolved.push(new Winston.transports.Console());
156
+ break;
157
+ case 'file': {
158
+ const fileEntry = entry;
159
+ resolved.push(new Winston.transports.File({
160
+ filename: fileEntry.filename,
161
+ maxsize: fileEntry.maxSize || 10485760,
162
+ maxFiles: fileEntry.maxFiles || 5,
163
+ zippedArchive: true
164
+ }));
165
+ break;
166
+ }
167
+ default:
168
+ resolved.push(await WinstonNexxusLogger.loadCustomTransport(entry));
169
+ }
170
+ }
171
+ return resolved;
172
+ }
173
+ static async loadCustomTransport(transport) {
174
+ let mod;
175
+ try {
176
+ mod = await Promise.resolve(`${transport.type}`).then(s => tslib_1.__importStar(require(s)));
177
+ }
178
+ catch (e) {
179
+ throw new Exceptions_1.InvalidConfigException(`Transport package "${transport.type}" could not be loaded — make sure it's installed in your deployment. Underlying error: ${e.message}`);
180
+ }
181
+ let TransportCtor;
182
+ if (transport.export) {
183
+ TransportCtor = mod[transport.export];
184
+ if (typeof TransportCtor !== 'function') {
185
+ throw new Exceptions_1.InvalidConfigException(`Transport package "${transport.type}" has no export named "${transport.export}" (or it isn't a class/function)`);
186
+ }
187
+ }
188
+ else if (typeof mod.default === 'function') {
189
+ TransportCtor = mod.default;
190
+ }
191
+ else if (typeof mod === 'function') {
192
+ TransportCtor = mod;
123
193
  }
124
194
  else {
125
- message = String(message);
195
+ throw new Exceptions_1.InvalidConfigException(`Could not find a transport class in package "${transport.type}". Specify "export" in the transport config to name the class.`);
126
196
  }
127
- this.winston.log(level, message, { label });
197
+ return new TransportCtor(transport.options ?? {});
198
+ }
199
+ log(level, message, attributes, label) {
200
+ this.winston.log(level, message, { label, attrs: attributes });
128
201
  }
129
202
  }
130
203
  exports.WinstonNexxusLogger = WinstonNexxusLogger;