@futdevpro/fsm-dynamo 1.16.5 → 1.16.9
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/.github/workflows/main.yml +433 -427
- package/__documentations/2026-06-22-dyfm-error-extends-error.md +109 -0
- package/build/_enums/error-status.enum.d.ts +28 -0
- package/build/_enums/error-status.enum.d.ts.map +1 -0
- package/build/_enums/error-status.enum.js +32 -0
- package/build/_enums/error-status.enum.js.map +1 -0
- package/build/_models/control-models/error.control-model.d.ts +11 -2
- package/build/_models/control-models/error.control-model.d.ts.map +1 -1
- package/build/_models/control-models/error.control-model.js +56 -3
- package/build/_models/control-models/error.control-model.js.map +1 -1
- package/build/_models/data-models/errors.data-model.d.ts +13 -0
- package/build/_models/data-models/errors.data-model.d.ts.map +1 -1
- package/build/_models/data-models/errors.data-model.js +13 -0
- package/build/_models/data-models/errors.data-model.js.map +1 -1
- package/build/_models/data-models/metadata.data-model.d.ts +16 -0
- package/build/_models/data-models/metadata.data-model.d.ts.map +1 -1
- package/build/_models/data-models/metadata.data-model.js +37 -20
- package/build/_models/data-models/metadata.data-model.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/_enums/error-status.enum.ts +30 -0
- package/src/_models/control-models/error.control-model.ts +67 -8
- package/src/_models/data-models/errors.data-model.ts +17 -0
- package/src/_models/data-models/metadata.data-model.ts +49 -24
- package/src/index.ts +1 -0
package/build/index.d.ts
CHANGED
|
@@ -32,6 +32,7 @@ export * from './_enums/basic-property-type.enum';
|
|
|
32
32
|
export * from './_enums/data-model-type.enum';
|
|
33
33
|
export * from './_enums/environment-flag.enum';
|
|
34
34
|
export * from './_enums/error-level.enum';
|
|
35
|
+
export * from './_enums/error-status.enum';
|
|
35
36
|
export * from './_enums/log-style.enum';
|
|
36
37
|
export * from './_enums/server-connection-status.enum';
|
|
37
38
|
export * from './_enums/http/http-call-type.enum';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iDAAiD,CAAC;AAChE,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAG/C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gDAAgD,CAAC;AAI/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAGvD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AAKjD,cAAc,0DAA0D,CAAC;AACzE,cAAc,6DAA6D,CAAC;AAC5E,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,sDAAsD,CAAC;AACrE,cAAc,uEAAuE,CAAC;AAGtF,cAAc,iEAAiE,CAAC;AAChF,cAAc,0DAA0D,CAAC;AACzE,cAAc,wDAAwD,CAAC;AAGvE,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAG1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,sCAAsC,CAAC;AACrD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,wDAAwD,CAAC;AACvE,cAAc,wCAAwC,CAAC;AAGvD,cAAc,gEAAgE,CAAC;AAC/E,cAAc,4DAA4D,CAAC;AAG3E,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -41,6 +41,7 @@ tslib_1.__exportStar(require("./_enums/basic-property-type.enum"), exports);
|
|
|
41
41
|
tslib_1.__exportStar(require("./_enums/data-model-type.enum"), exports);
|
|
42
42
|
tslib_1.__exportStar(require("./_enums/environment-flag.enum"), exports);
|
|
43
43
|
tslib_1.__exportStar(require("./_enums/error-level.enum"), exports);
|
|
44
|
+
tslib_1.__exportStar(require("./_enums/error-status.enum"), exports);
|
|
44
45
|
tslib_1.__exportStar(require("./_enums/log-style.enum"), exports);
|
|
45
46
|
tslib_1.__exportStar(require("./_enums/server-connection-status.enum"), exports);
|
|
46
47
|
// enums/HTTP
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,cAAc;AACd,wBAAwB;AACxB,oFAA0D;AAC1D,wFAA8D;AAC9D,yFAA+D;AAC/D,iFAAuD;AACvD,+EAAqD;AAErD,oBAAoB;AACpB,0EAAgD;AAChD,0EAAgD;AAChD,yEAA+C;AAC/C,0FAAgE;AAChE,sFAA4D;AAC5D,wEAA8C;AAC9C,+EAAqD;AACrD,gFAAsD;AACtD,2EAAiD;AACjD,gFAAsD;AACtD,0EAAgD;AAChD,2EAAiD;AACjD,gFAAsD;AACtD,yEAA+C;AAC/C,0FAAgE;AAChE,8EAAoD;AACpD,yEAA+C;AAE/C,yBAAyB;AACzB,oFAA0D;AAC1D,8EAAoD;AACpD,gFAAsD;AACtD,sFAA4D;AAC5D,iFAAuD;AAEvD,2BAA2B;AAC3B,yFAA+D;AAC/D,gFAAsD;AACtD,yFAA+D;AAG/D,QAAQ;AACR,4EAAkD;AAClD,wEAA8C;AAC9C,yEAA+C;AAC/C,oEAA0C;AAC1C,qEAA2C;AAC3C,kEAAwC;AACxC,iFAAuD;AAEvD,aAAa;AACb,4EAAkD;AAClD,6EAAmD;AACnD,gFAAsD;AAEtD,aAAa;AACb,yEAA+C;AAC/C,mEAAyC;AACzC,2EAAiD;AAGjD,SAAS;AACT,wBAAwB;AACxB,mGAAyE;AACzE,sGAA4E;AAC5E,uFAA6D;AAC7D,sFAA4D;AAC5D,6FAAmE;AACnE,+FAAqE;AACrE,gHAAsF;AAEtF,6BAA6B;AAC7B,0GAAgF;AAChF,mGAAyE;AACzE,iGAAuE;AAEvE,qBAAqB;AACrB,kFAAwD;AACxD,oFAA0D;AAE1D,oBAAoB;AACpB,oFAA0D;AAC1D,wFAA8D;AAC9D,+EAAqD;AACrD,uFAA6D;AAC7D,wFAA8D;AAC9D,sFAA4D;AAC5D,uFAA6D;AAC7D,iGAAuE;AACvE,iFAAuD;AAEvD,gCAAgC;AAChC,yGAA+E;AAC/E,qGAA2E;AAE3E,eAAe;AACf,yEAA+C;AAC/C,uEAA6C;AAC7C,yEAA+C;AAC/C,uEAA6C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/fsm-dynamo",
|
|
3
|
-
"version": "01.16.
|
|
3
|
+
"version": "01.16.9",
|
|
4
4
|
"description": "Full Stack Model Collection for Dynamic (NodeJS-Typescript) Framework called Dynamo, by Future Development Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "full-stack-package",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Lifecycle status of a persisted error record (`DyFM_Errors`).
|
|
6
|
+
*
|
|
7
|
+
* Drives the error-tracking / fix-attempt / auto-reactivation flow:
|
|
8
|
+
* - `active` — open error, not yet claimed fixed (default for every new record).
|
|
9
|
+
* - `investigating` — someone is actively working on it (optional intermediate;
|
|
10
|
+
* set manually, not auto-transitioned).
|
|
11
|
+
* - `fixed` — a fix was claimed (`recordFixAttempt` / `resolveError`); the record
|
|
12
|
+
* is KEPT (never deleted) so a later recurrence can be detected.
|
|
13
|
+
* - `regressed` — a NEW occurrence arrived carrying a version `>=` the last
|
|
14
|
+
* claimed-fix version → the fix did not hold → auto-reactivated by `recordError`.
|
|
15
|
+
* Treated as "active again" on the dashboard, but distinguishable from a
|
|
16
|
+
* never-fixed `active` so the next investigator knows a prior hypothesis failed.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* if (errorRecord.status === DyFM_ErrorStatus.regressed) {
|
|
21
|
+
* // a shipped fix did not hold — re-investigate, do not trust "fixed in vN"
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export enum DyFM_ErrorStatus {
|
|
26
|
+
active = 'active',
|
|
27
|
+
investigating = 'investigating',
|
|
28
|
+
fixed = 'fixed',
|
|
29
|
+
regressed = 'regressed',
|
|
30
|
+
}
|
|
@@ -73,9 +73,26 @@ export interface DyFM_Error_Settings {
|
|
|
73
73
|
__v?: number;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
export class DyFM_Error extends DyFM_Metadata {
|
|
76
|
+
export class DyFM_Error extends Error implements DyFM_Metadata {
|
|
77
77
|
readonly flag = DyFM_errorFlag + '-v2';
|
|
78
78
|
|
|
79
|
+
// ─── DyFM_Metadata mezok (implements DyFM_Metadata) ─────────────────────────
|
|
80
|
+
// A DyFM_Error mostantol `extends Error` — igy `err instanceof Error === true`, es a
|
|
81
|
+
// Node 22 strict unhandled-rejection riport a VALODI throw-site stacket mutatja (a korabbi
|
|
82
|
+
// `extends DyFM_Metadata` mellett a bare-object Promise rejection veletlen specet blame-elt).
|
|
83
|
+
// A metadata-orokles helyett strukturalisan IMPLEMENTALJUK a DyFM_Metadata-t: a mezoket itt
|
|
84
|
+
// deklaraljuk, az init-logikat a constructorban a DyFM_Metadata.applyMetadata statikus vegzi.
|
|
85
|
+
_id?: string;
|
|
86
|
+
__created?: Date;
|
|
87
|
+
__createdBy?: string;
|
|
88
|
+
__lastModified?: Date;
|
|
89
|
+
__lastModifiedBy?: string;
|
|
90
|
+
__v?: number;
|
|
91
|
+
_deleted?: Date;
|
|
92
|
+
_deletedBy?: string;
|
|
93
|
+
_archived?: Date;
|
|
94
|
+
_originalId?: string;
|
|
95
|
+
|
|
79
96
|
_errorCode?: string;
|
|
80
97
|
_errorCodes?: string[] = [];
|
|
81
98
|
|
|
@@ -105,7 +122,8 @@ export class DyFM_Error extends DyFM_Metadata {
|
|
|
105
122
|
errors?: DyFM_AnyError[] = [];
|
|
106
123
|
validationErrors?: DyFM_ValidationErrors;
|
|
107
124
|
|
|
108
|
-
stack
|
|
125
|
+
// `stack` az Error-bol jon (`extends Error`) — itt NEM deklaraljuk ujra, kulonben a
|
|
126
|
+
// class-field-init undefined-dal felulirna a natancsolt stacket a super() utan.
|
|
109
127
|
__localStack?: string;
|
|
110
128
|
|
|
111
129
|
level?: DyFM_ErrorLevel;
|
|
@@ -117,15 +135,32 @@ export class DyFM_Error extends DyFM_Metadata {
|
|
|
117
135
|
constructor(
|
|
118
136
|
set?: DyFM_Error_Settings
|
|
119
137
|
) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
138
|
+
// az Error-constructort a nyers input-message-dzsel hivjuk (a vegleges _message kesobb all
|
|
139
|
+
// ossze; a natancsolt Error.message-et a constructor vegen allitjuk ra) — super() KOTELEZOEN
|
|
140
|
+
// az elso utasitas, a this- erintese elott.
|
|
141
|
+
super(set?.message);
|
|
142
|
+
|
|
143
|
+
// a natancsolt Error.name -> 'DyFM_Error' (non-enumerable, hogy a szerializalt shape ne
|
|
144
|
+
// valtozzon): igy a logok / Node-riport "DyFM_Error: ..."-kent jelennek meg, nem "Error: ...".
|
|
145
|
+
Object.defineProperty(this, 'name', {
|
|
146
|
+
value: 'DyFM_Error',
|
|
147
|
+
enumerable: false,
|
|
148
|
+
writable: true,
|
|
149
|
+
configurable: true,
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
// metadata-init: a korabbi `super(set, { issuer })` helyett (a super most az Error),
|
|
153
|
+
// target-alapon a DyFM_Metadata.applyMetadata statikuson at.
|
|
154
|
+
DyFM_Metadata.applyMetadata(
|
|
155
|
+
this,
|
|
156
|
+
set,
|
|
157
|
+
{
|
|
158
|
+
issuer: set?.issuerService ??
|
|
159
|
+
(set?.error as DyFM_Error)?.___issuerService ??
|
|
125
160
|
DyFM_error_defaults.issuerService,
|
|
126
161
|
}
|
|
127
162
|
);
|
|
128
|
-
|
|
163
|
+
|
|
129
164
|
try {
|
|
130
165
|
if (!set) {
|
|
131
166
|
set = {};
|
|
@@ -408,6 +443,30 @@ export class DyFM_Error extends DyFM_Metadata {
|
|
|
408
443
|
Boolean(error) && (error instanceof Error || Boolean(Object.keys(error).length))
|
|
409
444
|
);
|
|
410
445
|
|
|
446
|
+
// ─── `extends Error` szerializacios igazitasok ─────────────────────────
|
|
447
|
+
// A natancsolt Error a stacket NON-ENUMERABLE own-property-kent kezeli, igy a
|
|
448
|
+
// `{ ...this }` spread (getErrorsFlat) es a JSON.stringify (getParsable / perzisztalas)
|
|
449
|
+
// elejtene. Enumerable-kent ujradefinialjuk, hogy a szerializacios utak megtartsak.
|
|
450
|
+
if (this.stack !== undefined) {
|
|
451
|
+
Object.defineProperty(this, 'stack', {
|
|
452
|
+
value: this.stack,
|
|
453
|
+
enumerable: true,
|
|
454
|
+
writable: true,
|
|
455
|
+
configurable: true,
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// A natancsolt Error.message-et a sajat _message-unkre allitjuk (NON-enumerable marad,
|
|
460
|
+
// hogy a szerializalt shape valtozatlan legyen — a forras tovabbra is a _message): igy a
|
|
461
|
+
// `(err as Error).message` fogyasztok ES a Node 22 unhandled-rejection printer a valodi
|
|
462
|
+
// uzenetet latjak, nem ures stringet.
|
|
463
|
+
Object.defineProperty(this, 'message', {
|
|
464
|
+
value: this._message ?? this.__userMessage ?? '',
|
|
465
|
+
enumerable: false,
|
|
466
|
+
writable: true,
|
|
467
|
+
configurable: true,
|
|
468
|
+
});
|
|
469
|
+
|
|
411
470
|
DyFM_Object.safeCleanObject(this);
|
|
412
471
|
|
|
413
472
|
if (!set.allowCircular) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DyFM_DataModel_Params } from '../control-models/data-model-params.control-model';
|
|
2
2
|
import { DyFM_ErrorLevel } from '../../_enums/error-level.enum';
|
|
3
|
+
import { DyFM_ErrorStatus } from '../../_enums/error-status.enum';
|
|
3
4
|
import { DyFM_Error } from '../control-models/error.control-model';
|
|
4
5
|
import { DyFM_Metadata } from './metadata.data-model';
|
|
5
6
|
|
|
@@ -26,6 +27,8 @@ export interface DyFM_Errors_FixAttempt {
|
|
|
26
27
|
version: string;
|
|
27
28
|
/** Plain-text root-cause hypothesis that justified the fix. */
|
|
28
29
|
hypothesis: string;
|
|
30
|
+
/** Optional free-form notes attached to this fix attempt (links, context, follow-ups). */
|
|
31
|
+
notes?: string;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
/**
|
|
@@ -81,6 +84,18 @@ export class DyFM_Errors<T_Error extends DyFM_Error> extends DyFM_Metadata {
|
|
|
81
84
|
|
|
82
85
|
// ─── Fix tracking (append-only audit + quick-access aliases) ────────────────
|
|
83
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Lifecycle status. `active` for every new record; `fixed` after a claimed
|
|
89
|
+
* fix (`recordFixAttempt` / `resolveError`, record KEPT not deleted);
|
|
90
|
+
* `regressed` when `recordError` sees a recurrence with a version >= the last
|
|
91
|
+
* claimed-fix version (auto-reactivation); `investigating` set manually.
|
|
92
|
+
* Mirrors `regressedAfterFix` (kept for back-compat): `regressed` ⇔ `regressedAfterFix=true`.
|
|
93
|
+
*/
|
|
94
|
+
status?: DyFM_ErrorStatus = DyFM_ErrorStatus.active;
|
|
95
|
+
|
|
96
|
+
/** Optional free-form notes captured on a soft-resolve (`resolveError`). */
|
|
97
|
+
resolutionNotes?: string;
|
|
98
|
+
|
|
84
99
|
/**
|
|
85
100
|
* Append-only audit log of fix attempts. New entries via `recordFixAttempt`
|
|
86
101
|
* on the data-service. Never overwritten / pruned — full hypothesis history
|
|
@@ -149,6 +164,8 @@ export const DyFM_errors_dataParams: DyFM_DataModel_Params<DyFM_Errors<DyFM_Erro
|
|
|
149
164
|
duplications: { type: 'DyNTS_Error[]' },
|
|
150
165
|
category: { type: 'string' },
|
|
151
166
|
|
|
167
|
+
status: { type: 'string' },
|
|
168
|
+
resolutionNotes: { type: 'string' },
|
|
152
169
|
fixAttempts: { type: 'any' },
|
|
153
170
|
lastFixedAt: { type: 'Date' },
|
|
154
171
|
lastFixedBy: { type: 'string' },
|
|
@@ -31,53 +31,78 @@ export class DyFM_Metadata {
|
|
|
31
31
|
|
|
32
32
|
constructor(
|
|
33
33
|
set?: DyFM_Metadata,
|
|
34
|
-
init?: {
|
|
34
|
+
init?: {
|
|
35
35
|
id?: string,
|
|
36
36
|
issuer: string,
|
|
37
37
|
},
|
|
38
38
|
){
|
|
39
|
+
// a metadata-init logika a statikus applyMetadata-ban el — igy a `DyFM_Error extends Error`
|
|
40
|
+
// (ami NEM tudja super()-rel hivni ezt a constructort) ugyanezt a target-en futtathatja.
|
|
41
|
+
DyFM_Metadata.applyMetadata(this, set, init);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Applies the metadata fields onto a target object.
|
|
46
|
+
*
|
|
47
|
+
* Kiemelt statikus a constructor-torzsbol: a viselkedes BIT-RE azonos a korabbi
|
|
48
|
+
* constructorral, de igy a `DyFM_Error extends Error implements DyFM_Metadata` is meg
|
|
49
|
+
* tudja hivni (az Error-bol orokolt osztaly nem tud `super(set, init)`-tel a
|
|
50
|
+
* DyFM_Metadata constructorba lepni, ezert target-alapon kell elerni az init-logikat).
|
|
51
|
+
*
|
|
52
|
+
* @param target - The object the metadata fields are written onto (`this`)
|
|
53
|
+
* @param set - The source metadata to copy from
|
|
54
|
+
* @param init - Optional id + issuer defaults
|
|
55
|
+
*/
|
|
56
|
+
static applyMetadata(
|
|
57
|
+
target: DyFM_Metadata,
|
|
58
|
+
set?: DyFM_Metadata,
|
|
59
|
+
init?: {
|
|
60
|
+
id?: string,
|
|
61
|
+
issuer: string,
|
|
62
|
+
},
|
|
63
|
+
): void {
|
|
39
64
|
if (set) {
|
|
40
|
-
if (!set._id && set._id !== undefined) {
|
|
65
|
+
if (!set._id && set._id !== undefined) {
|
|
41
66
|
set._id = undefined;
|
|
42
67
|
}
|
|
43
68
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
69
|
+
target._id = set._id;
|
|
70
|
+
target.__created = set.__created;
|
|
71
|
+
target.__createdBy = set.__createdBy;
|
|
72
|
+
target.__lastModified = set.__lastModified;
|
|
73
|
+
target.__lastModifiedBy = set.__lastModifiedBy;
|
|
74
|
+
target.__v = set.__v;
|
|
50
75
|
|
|
51
76
|
if (set._archived) {
|
|
52
|
-
|
|
53
|
-
|
|
77
|
+
target._archived = set._archived;
|
|
78
|
+
target._originalId = set._originalId;
|
|
54
79
|
}
|
|
55
80
|
}
|
|
56
81
|
|
|
57
|
-
if (!
|
|
58
|
-
|
|
82
|
+
if (!target.__created) {
|
|
83
|
+
target.__created = new Date();
|
|
59
84
|
}
|
|
60
85
|
|
|
61
|
-
if (!
|
|
62
|
-
|
|
86
|
+
if (!target.__lastModified) {
|
|
87
|
+
target.__lastModified = new Date();
|
|
63
88
|
}
|
|
64
|
-
|
|
65
|
-
if (!
|
|
66
|
-
|
|
89
|
+
|
|
90
|
+
if (!target.__v) {
|
|
91
|
+
target.__v = 0;
|
|
67
92
|
}
|
|
68
|
-
|
|
93
|
+
|
|
69
94
|
if (init) {
|
|
70
|
-
if (!
|
|
71
|
-
|
|
95
|
+
if (!target._id && init?.id) {
|
|
96
|
+
target._id = init.id;
|
|
72
97
|
}
|
|
73
98
|
|
|
74
99
|
if (init?.issuer) {
|
|
75
|
-
if (!
|
|
76
|
-
|
|
100
|
+
if (!target.__createdBy) {
|
|
101
|
+
target.__createdBy = init.issuer;
|
|
77
102
|
}
|
|
78
103
|
|
|
79
|
-
if (!
|
|
80
|
-
|
|
104
|
+
if (!target.__lastModifiedBy) {
|
|
105
|
+
target.__lastModifiedBy = init.issuer;
|
|
81
106
|
}
|
|
82
107
|
}
|
|
83
108
|
}
|
package/src/index.ts
CHANGED
|
@@ -44,6 +44,7 @@ export * from './_enums/basic-property-type.enum';
|
|
|
44
44
|
export * from './_enums/data-model-type.enum';
|
|
45
45
|
export * from './_enums/environment-flag.enum';
|
|
46
46
|
export * from './_enums/error-level.enum';
|
|
47
|
+
export * from './_enums/error-status.enum';
|
|
47
48
|
export * from './_enums/log-style.enum';
|
|
48
49
|
export * from './_enums/server-connection-status.enum';
|
|
49
50
|
|