@wireio/shared 1.0.0
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/lib/guards/applyTypeGuardExtras.d.ts +3 -0
- package/lib/guards/applyTypeGuardExtras.d.ts.map +1 -0
- package/lib/guards/applyTypeGuardExtras.js +5 -0
- package/lib/guards/applyTypeGuardExtras.js.map +1 -0
- package/lib/guards/array.d.ts +2 -0
- package/lib/guards/array.d.ts.map +1 -0
- package/lib/guards/array.js +4 -0
- package/lib/guards/array.js.map +1 -0
- package/lib/guards/assert.d.ts +19 -0
- package/lib/guards/assert.d.ts.map +1 -0
- package/lib/guards/assert.js +50 -0
- package/lib/guards/assert.js.map +1 -0
- package/lib/guards/class.d.ts +27 -0
- package/lib/guards/class.d.ts.map +1 -0
- package/lib/guards/class.js +34 -0
- package/lib/guards/class.js.map +1 -0
- package/lib/guards/guard-tools.d.ts +20 -0
- package/lib/guards/guard-tools.d.ts.map +1 -0
- package/lib/guards/guard-tools.js +50 -0
- package/lib/guards/guard-tools.js.map +1 -0
- package/lib/guards/index.d.ts +8 -0
- package/lib/guards/index.d.ts.map +1 -0
- package/lib/guards/index.js +8 -0
- package/lib/guards/index.js.map +1 -0
- package/lib/guards/primitive.d.ts +26 -0
- package/lib/guards/primitive.d.ts.map +1 -0
- package/lib/guards/primitive.js +47 -0
- package/lib/guards/primitive.js.map +1 -0
- package/lib/guards/types.d.ts +10 -0
- package/lib/guards/types.d.ts.map +1 -0
- package/lib/guards/types.js +2 -0
- package/lib/guards/types.js.map +1 -0
- package/lib/helpers/Deferred.d.ts +31 -0
- package/lib/helpers/Deferred.d.ts.map +1 -0
- package/lib/helpers/Deferred.js +111 -0
- package/lib/helpers/Deferred.js.map +1 -0
- package/lib/helpers/index.d.ts +2 -0
- package/lib/helpers/index.d.ts.map +1 -0
- package/lib/helpers/index.js +2 -0
- package/lib/helpers/index.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -0
- package/lib/logging/Appender.d.ts +5 -0
- package/lib/logging/Appender.d.ts.map +1 -0
- package/lib/logging/Appender.js +2 -0
- package/lib/logging/Appender.js.map +1 -0
- package/lib/logging/Formatter.d.ts +3 -0
- package/lib/logging/Formatter.d.ts.map +1 -0
- package/lib/logging/Formatter.js +2 -0
- package/lib/logging/Formatter.js.map +1 -0
- package/lib/logging/InternalLogger.d.ts +2 -0
- package/lib/logging/InternalLogger.d.ts.map +1 -0
- package/lib/logging/InternalLogger.js +6 -0
- package/lib/logging/InternalLogger.js.map +1 -0
- package/lib/logging/Level.d.ts +14 -0
- package/lib/logging/Level.d.ts.map +1 -0
- package/lib/logging/Level.js +13 -0
- package/lib/logging/Level.js.map +1 -0
- package/lib/logging/LogRecord.d.ts +16 -0
- package/lib/logging/LogRecord.d.ts.map +1 -0
- package/lib/logging/LogRecord.js +2 -0
- package/lib/logging/LogRecord.js.map +1 -0
- package/lib/logging/Logger.d.ts +77 -0
- package/lib/logging/Logger.d.ts.map +1 -0
- package/lib/logging/Logger.js +158 -0
- package/lib/logging/Logger.js.map +1 -0
- package/lib/logging/LoggingManager.d.ts +128 -0
- package/lib/logging/LoggingManager.d.ts.map +1 -0
- package/lib/logging/LoggingManager.js +236 -0
- package/lib/logging/LoggingManager.js.map +1 -0
- package/lib/logging/appenders/ConsoleAppender.d.ts +55 -0
- package/lib/logging/appenders/ConsoleAppender.d.ts.map +1 -0
- package/lib/logging/appenders/ConsoleAppender.js +72 -0
- package/lib/logging/appenders/ConsoleAppender.js.map +1 -0
- package/lib/logging/appenders/DebugAppender.d.ts +53 -0
- package/lib/logging/appenders/DebugAppender.d.ts.map +1 -0
- package/lib/logging/appenders/DebugAppender.js +183 -0
- package/lib/logging/appenders/DebugAppender.js.map +1 -0
- package/lib/logging/appenders/FileAppender.d.ts +65 -0
- package/lib/logging/appenders/FileAppender.d.ts.map +1 -0
- package/lib/logging/appenders/FileAppender.js +212 -0
- package/lib/logging/appenders/FileAppender.js.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts +27 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js +135 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts +27 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +1 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +94 -0
- package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js.map +1 -0
- package/lib/logging/appenders/index.d.ts +4 -0
- package/lib/logging/appenders/index.d.ts.map +1 -0
- package/lib/logging/appenders/index.js +4 -0
- package/lib/logging/appenders/index.js.map +1 -0
- package/lib/logging/context/LogContext.d.ts +48 -0
- package/lib/logging/context/LogContext.d.ts.map +1 -0
- package/lib/logging/context/LogContext.js +58 -0
- package/lib/logging/context/LogContext.js.map +1 -0
- package/lib/logging/context/LogContextContainer.d.ts +9 -0
- package/lib/logging/context/LogContextContainer.d.ts.map +1 -0
- package/lib/logging/context/LogContextContainer.js +25 -0
- package/lib/logging/context/LogContextContainer.js.map +1 -0
- package/lib/logging/context/LogContextProvider.d.ts +24 -0
- package/lib/logging/context/LogContextProvider.d.ts.map +1 -0
- package/lib/logging/context/LogContextProvider.js +18 -0
- package/lib/logging/context/LogContextProvider.js.map +1 -0
- package/lib/logging/context/index.d.ts +4 -0
- package/lib/logging/context/index.d.ts.map +1 -0
- package/lib/logging/context/index.js +4 -0
- package/lib/logging/context/index.js.map +1 -0
- package/lib/logging/context/providers/node/NodeContextProvider.d.ts +2 -0
- package/lib/logging/context/providers/node/NodeContextProvider.d.ts.map +1 -0
- package/lib/logging/context/providers/node/NodeContextProvider.js +31 -0
- package/lib/logging/context/providers/node/NodeContextProvider.js.map +1 -0
- package/lib/logging/context/providers/node/index.d.ts +3 -0
- package/lib/logging/context/providers/node/index.d.ts.map +1 -0
- package/lib/logging/context/providers/node/index.js +2 -0
- package/lib/logging/context/providers/node/index.js.map +1 -0
- package/lib/logging/examples/example-debug-appender.d.ts +2 -0
- package/lib/logging/examples/example-debug-appender.d.ts.map +1 -0
- package/lib/logging/examples/example-debug-appender.js +14 -0
- package/lib/logging/examples/example-debug-appender.js.map +1 -0
- package/lib/logging/examples/example-file-appender.d.ts +2 -0
- package/lib/logging/examples/example-file-appender.d.ts.map +1 -0
- package/lib/logging/examples/example-file-appender.js +16 -0
- package/lib/logging/examples/example-file-appender.js.map +1 -0
- package/lib/logging/getLogger.d.ts +3 -0
- package/lib/logging/getLogger.d.ts.map +1 -0
- package/lib/logging/getLogger.js +5 -0
- package/lib/logging/getLogger.js.map +1 -0
- package/lib/logging/index-node.d.ts +3 -0
- package/lib/logging/index-node.d.ts.map +1 -0
- package/lib/logging/index-node.js +3 -0
- package/lib/logging/index-node.js.map +1 -0
- package/lib/logging/index.d.ts +11 -0
- package/lib/logging/index.d.ts.map +1 -0
- package/lib/logging/index.js +11 -0
- package/lib/logging/index.js.map +1 -0
- package/lib/logging/util.d.ts +3 -0
- package/lib/logging/util.d.ts.map +1 -0
- package/lib/logging/util.js +6 -0
- package/lib/logging/util.js.map +1 -0
- package/package.json +31 -0
- package/src/guards/applyTypeGuardExtras.ts +9 -0
- package/src/guards/array.ts +5 -0
- package/src/guards/assert.ts +83 -0
- package/src/guards/class.ts +56 -0
- package/src/guards/guard-tools.ts +78 -0
- package/src/guards/index.ts +7 -0
- package/src/guards/primitive.ts +77 -0
- package/src/guards/types.ts +15 -0
- package/src/helpers/Deferred.ts +149 -0
- package/src/helpers/index.ts +1 -0
- package/src/index.ts +3 -0
- package/src/logging/Appender.ts +5 -0
- package/src/logging/Formatter.ts +8 -0
- package/src/logging/InternalLogger.ts +6 -0
- package/src/logging/Level.ts +19 -0
- package/src/logging/LogRecord.ts +17 -0
- package/src/logging/Logger.ts +222 -0
- package/src/logging/LoggingManager.ts +306 -0
- package/src/logging/appenders/ConsoleAppender.ts +110 -0
- package/src/logging/appenders/DebugAppender.ts +254 -0
- package/src/logging/appenders/FileAppender.ts +281 -0
- package/src/logging/appenders/aws-firehose/AWSFirehoseAppender.ts +176 -0
- package/src/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.ts +132 -0
- package/src/logging/appenders/index.ts +3 -0
- package/src/logging/context/LogContext.ts +74 -0
- package/src/logging/context/LogContextContainer.ts +28 -0
- package/src/logging/context/LogContextProvider.ts +43 -0
- package/src/logging/context/index.ts +3 -0
- package/src/logging/context/providers/node/NodeContextProvider.ts +45 -0
- package/src/logging/context/providers/node/index.ts +3 -0
- package/src/logging/examples/example-debug-appender.ts +19 -0
- package/src/logging/examples/example-file-appender.ts +19 -0
- package/src/logging/getLogger.ts +9 -0
- package/src/logging/index-node.ts +2 -0
- package/src/logging/index.ts +11 -0
- package/src/logging/util.ts +6 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Appender } from "../Appender.js";
|
|
2
|
+
import { Level } from "../Level.js";
|
|
3
|
+
export declare class LogContext {
|
|
4
|
+
readonly appenders: Appender[];
|
|
5
|
+
/**
|
|
6
|
+
* Threshold override level
|
|
7
|
+
*
|
|
8
|
+
* @type {Level}
|
|
9
|
+
*/
|
|
10
|
+
readonly thresholdLevel: Level;
|
|
11
|
+
/**
|
|
12
|
+
* If specified, only categories that match will
|
|
13
|
+
* use this context
|
|
14
|
+
*
|
|
15
|
+
* @type {RegExp}
|
|
16
|
+
*/
|
|
17
|
+
readonly pattern: RegExp;
|
|
18
|
+
/**
|
|
19
|
+
* Exclusive, only use this config in context. Defaults to `false`
|
|
20
|
+
*
|
|
21
|
+
* @type {boolean}
|
|
22
|
+
*/
|
|
23
|
+
readonly exclusive: RegExp;
|
|
24
|
+
/**
|
|
25
|
+
* Use a logger context within
|
|
26
|
+
*
|
|
27
|
+
* @param {() => Promise<T>} fn
|
|
28
|
+
* @returns {Promise<T>}
|
|
29
|
+
*/
|
|
30
|
+
use<T = unknown>(fn: () => Promise<T>): Promise<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a new logger context
|
|
33
|
+
*
|
|
34
|
+
* @param {Appender[]} appenders - additional appenders for the context
|
|
35
|
+
* @param {LoggerContextOptions} options -
|
|
36
|
+
*/
|
|
37
|
+
protected constructor(appenders: Appender[], options: LoggerContextOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Create a new logger context
|
|
40
|
+
*
|
|
41
|
+
* @param {Appender[]} appenders
|
|
42
|
+
* @param {LoggerContextOptions} options
|
|
43
|
+
* @returns {LogContext}
|
|
44
|
+
*/
|
|
45
|
+
static with(appenders: Appender[], options?: LoggerContextOptions): LogContext;
|
|
46
|
+
}
|
|
47
|
+
export type LoggerContextOptions = Partial<Pick<LogContext, "pattern" | "exclusive">>;
|
|
48
|
+
//# sourceMappingURL=LogContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContext.d.ts","sourceRoot":"","sources":["../../../src/logging/context/LogContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AASnC,qBAAa,UAAU;IAwCnB,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE;IAvChC;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAA;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B;;;;;OAKG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAIrC;;;;;OAKG;IACH,SAAS,aACE,SAAS,EAAE,QAAQ,EAAE,EAC9B,OAAO,EAAE,oBAAoB;IAU/B;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAE,oBAAyB;CAGtE;AAED,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { LogContextContainer } from "./LogContextContainer.js";
|
|
2
|
+
export class LogContext {
|
|
3
|
+
appenders;
|
|
4
|
+
/**
|
|
5
|
+
* Threshold override level
|
|
6
|
+
*
|
|
7
|
+
* @type {Level}
|
|
8
|
+
*/
|
|
9
|
+
thresholdLevel;
|
|
10
|
+
/**
|
|
11
|
+
* If specified, only categories that match will
|
|
12
|
+
* use this context
|
|
13
|
+
*
|
|
14
|
+
* @type {RegExp}
|
|
15
|
+
*/
|
|
16
|
+
pattern;
|
|
17
|
+
/**
|
|
18
|
+
* Exclusive, only use this config in context. Defaults to `false`
|
|
19
|
+
*
|
|
20
|
+
* @type {boolean}
|
|
21
|
+
*/
|
|
22
|
+
exclusive;
|
|
23
|
+
/**
|
|
24
|
+
* Use a logger context within
|
|
25
|
+
*
|
|
26
|
+
* @param {() => Promise<T>} fn
|
|
27
|
+
* @returns {Promise<T>}
|
|
28
|
+
*/
|
|
29
|
+
use(fn) {
|
|
30
|
+
return LogContextContainer.runInContext(this, fn);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a new logger context
|
|
34
|
+
*
|
|
35
|
+
* @param {Appender[]} appenders - additional appenders for the context
|
|
36
|
+
* @param {LoggerContextOptions} options -
|
|
37
|
+
*/
|
|
38
|
+
constructor(appenders, options) {
|
|
39
|
+
this.appenders = appenders;
|
|
40
|
+
Object.assign(this, {
|
|
41
|
+
exclusive: false,
|
|
42
|
+
thresholdLevel: null,
|
|
43
|
+
pattern: null,
|
|
44
|
+
...options
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a new logger context
|
|
49
|
+
*
|
|
50
|
+
* @param {Appender[]} appenders
|
|
51
|
+
* @param {LoggerContextOptions} options
|
|
52
|
+
* @returns {LogContext}
|
|
53
|
+
*/
|
|
54
|
+
static with(appenders, options = {}) {
|
|
55
|
+
return new LogContext(appenders, options);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=LogContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContext.js","sourceRoot":"","sources":["../../../src/logging/context/LogContext.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAO9D,MAAM,OAAO,UAAU;IAwCV;IAvCX;;;;OAIG;IACM,cAAc,CAAO;IAE9B;;;;;OAKG;IACM,OAAO,CAAQ;IAExB;;;;OAIG;IACM,SAAS,CAAQ;IAE1B;;;;;OAKG;IACH,GAAG,CAAc,EAAoB;QACnC,OAAO,mBAAmB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;;;;OAKG;IACH,YACW,SAAqB,EAC9B,OAA6B;QADpB,cAAS,GAAT,SAAS,CAAY;QAG9B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAClB,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;YACb,GAAG,OAAO;SACX,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,SAAqB,EAAE,UAAgC,EAAE;QACnE,OAAO,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LogContext } from "./LogContext.js";
|
|
2
|
+
import { LogContextProvider } from "./LogContextProvider.js";
|
|
3
|
+
export declare namespace LogContextContainer {
|
|
4
|
+
function setProvider(provider: LogContextProvider): void;
|
|
5
|
+
function getProvider(): LogContextProvider;
|
|
6
|
+
function currentContext(): Array<LogContext>;
|
|
7
|
+
function runInContext<T = unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=LogContextContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContextContainer.d.ts","sourceRoot":"","sources":["../../../src/logging/context/LogContextContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAA6B,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAOvF,yBAAiB,mBAAmB,CAAE;IAEpC,SAAgB,WAAW,CAAC,QAAQ,EAAE,kBAAkB,QAEvD;IAED,SAAgB,WAAW,IAAG,kBAAkB,CAE/C;IAED,SAAgB,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,CAElD;IAED,SAAgB,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG/F;CAEF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DefaultLogContextProvider } from "./LogContextProvider.js";
|
|
2
|
+
const state = {
|
|
3
|
+
provider: DefaultLogContextProvider
|
|
4
|
+
};
|
|
5
|
+
export var LogContextContainer;
|
|
6
|
+
(function (LogContextContainer) {
|
|
7
|
+
function setProvider(provider) {
|
|
8
|
+
state.provider = provider ?? DefaultLogContextProvider;
|
|
9
|
+
}
|
|
10
|
+
LogContextContainer.setProvider = setProvider;
|
|
11
|
+
function getProvider() {
|
|
12
|
+
return state.provider ?? DefaultLogContextProvider;
|
|
13
|
+
}
|
|
14
|
+
LogContextContainer.getProvider = getProvider;
|
|
15
|
+
function currentContext() {
|
|
16
|
+
return getProvider().currentContext?.() ?? [];
|
|
17
|
+
}
|
|
18
|
+
LogContextContainer.currentContext = currentContext;
|
|
19
|
+
function runInContext(context, fn) {
|
|
20
|
+
const provider = getProvider();
|
|
21
|
+
return provider.runInContext(context, fn);
|
|
22
|
+
}
|
|
23
|
+
LogContextContainer.runInContext = runInContext;
|
|
24
|
+
})(LogContextContainer || (LogContextContainer = {}));
|
|
25
|
+
//# sourceMappingURL=LogContextContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContextContainer.js","sourceRoot":"","sources":["../../../src/logging/context/LogContextContainer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAsB,MAAM,yBAAyB,CAAA;AAEvF,MAAM,KAAK,GAAG;IACZ,QAAQ,EAAE,yBAA+C;CAC1D,CAAA;AAGD,MAAM,KAAW,mBAAmB,CAmBnC;AAnBD,WAAiB,mBAAmB;IAElC,SAAgB,WAAW,CAAC,QAA4B;QACtD,KAAK,CAAC,QAAQ,GAAG,QAAQ,IAAI,yBAAyB,CAAA;IACxD,CAAC;IAFe,+BAAW,cAE1B,CAAA;IAED,SAAgB,WAAW;QACzB,OAAO,KAAK,CAAC,QAAQ,IAAI,yBAAyB,CAAA;IACpD,CAAC;IAFe,+BAAW,cAE1B,CAAA;IAED,SAAgB,cAAc;QAC5B,OAAO,WAAW,EAAE,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAA;IAC/C,CAAC;IAFe,kCAAc,iBAE7B,CAAA;IAED,SAAgB,YAAY,CAAc,OAAmB,EAAE,EAAoB;QACjF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;QAC9B,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAC,EAAE,CAAC,CAAA;IAC1C,CAAC;IAHe,gCAAY,eAG3B,CAAA;AAEH,CAAC,EAnBgB,mBAAmB,KAAnB,mBAAmB,QAmBnC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LogContext } from "./LogContext";
|
|
2
|
+
export interface LogContextProvider {
|
|
3
|
+
/**
|
|
4
|
+
* Get current context stack
|
|
5
|
+
*
|
|
6
|
+
* @returns {any[]}
|
|
7
|
+
*/
|
|
8
|
+
currentContext(): Array<LogContext>;
|
|
9
|
+
/**
|
|
10
|
+
* Run in context
|
|
11
|
+
*
|
|
12
|
+
* @param {LogContext} context
|
|
13
|
+
* @param {() => Promise<T>} fn
|
|
14
|
+
* @returns {Promise<T>}
|
|
15
|
+
*/
|
|
16
|
+
runInContext<T = unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Dummy/Noop context provider
|
|
20
|
+
*
|
|
21
|
+
* @type {{currentContext(): Array<LogContext>, runInContext<T=unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>}}
|
|
22
|
+
*/
|
|
23
|
+
export declare const DefaultLogContextProvider: LogContextProvider;
|
|
24
|
+
//# sourceMappingURL=LogContextProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContextProvider.d.ts","sourceRoot":"","sources":["../../../src/logging/context/LogContextProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAI9C,MAAM,WAAW,kBAAkB;IAEjC;;;;OAIG;IACH,cAAc,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;IAEnC;;;;;;OAMG;IACH,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACjF;AAGD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAC,kBAWtC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// noinspection JSValidateJSDoc
|
|
2
|
+
/**
|
|
3
|
+
* Dummy/Noop context provider
|
|
4
|
+
*
|
|
5
|
+
* @type {{currentContext(): Array<LogContext>, runInContext<T=unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>}}
|
|
6
|
+
*/
|
|
7
|
+
export const DefaultLogContextProvider = {
|
|
8
|
+
currentContext() {
|
|
9
|
+
return [];
|
|
10
|
+
},
|
|
11
|
+
runInContext(context, fn) {
|
|
12
|
+
if (process.env.NODE_ENV === "development") {
|
|
13
|
+
console.warn(`Attempting to use LogContext without any installed provider`);
|
|
14
|
+
}
|
|
15
|
+
return fn();
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=LogContextProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogContextProvider.js","sourceRoot":"","sources":["../../../src/logging/context/LogContextProvider.ts"],"names":[],"mappings":"AAAA,+BAA+B;AA0B/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,cAAc;QACZ,OAAO,EAAE,CAAA;IACX,CAAC;IACD,YAAY,CAAc,OAAmB,EAAE,EAAoB;QACjE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;QAC7E,CAAC;QAED,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/logging/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/logging/context/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeContextProvider.d.ts","sourceRoot":"","sources":["../../../../../src/logging/context/providers/node/NodeContextProvider.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
|
+
import { uniq } from "lodash";
|
|
3
|
+
import { LogContextContainer } from "../../LogContextContainer.js";
|
|
4
|
+
const contextStorage = new AsyncLocalStorage();
|
|
5
|
+
function currentContextStore() {
|
|
6
|
+
return contextStorage.getStore() ?? [];
|
|
7
|
+
}
|
|
8
|
+
class NodeContextProvider {
|
|
9
|
+
/**
|
|
10
|
+
* Get current context stack
|
|
11
|
+
*
|
|
12
|
+
* @returns {any[]}
|
|
13
|
+
*/
|
|
14
|
+
currentContext() {
|
|
15
|
+
return currentContextStore() ?? [];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run in context
|
|
19
|
+
*
|
|
20
|
+
* @param {LogContext} context
|
|
21
|
+
* @param {() => Promise<T>} fn
|
|
22
|
+
* @returns {Promise<T>}
|
|
23
|
+
*/
|
|
24
|
+
runInContext(context, fn) {
|
|
25
|
+
const contexts = currentContextStore();
|
|
26
|
+
return contextStorage.run(uniq([...contexts, context]), fn);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const instance = new NodeContextProvider();
|
|
30
|
+
LogContextContainer.setProvider(instance);
|
|
31
|
+
//# sourceMappingURL=NodeContextProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeContextProvider.js","sourceRoot":"","sources":["../../../../../src/logging/context/providers/node/NodeContextProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAElE,MAAM,cAAc,GAAG,IAAI,iBAAiB,EAAqB,CAAA;AAEjE,SAAS,mBAAmB;IAC1B,OAAO,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,mBAAmB;IAGvB;;;;OAIG;IACH,cAAc;QACZ,OAAO,mBAAmB,EAAE,IAAI,EAAE,CAAA;IACpC,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CACV,OAAmB,EACnB,EAAoB;QAEpB,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAA;QACtC,OAAO,cAAc,CAAC,GAAG,CAAiB,IAAI,CAAC,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7E,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAA;AAE1C,mBAAmB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/logging/context/providers/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/logging/context/providers/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-debug-appender.d.ts","sourceRoot":"","sources":["../../../src/logging/examples/example-debug-appender.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getLogger } from "../getLogger.js";
|
|
2
|
+
import { LevelNames } from "../Level.js";
|
|
3
|
+
import { getLoggingManager } from "../LoggingManager.js";
|
|
4
|
+
getLoggingManager().configure({
|
|
5
|
+
// Default appenders list is [ConsoleAppender],
|
|
6
|
+
// so the following is not needed and only
|
|
7
|
+
// remains as an example:
|
|
8
|
+
//
|
|
9
|
+
// appenders: [new ConsoleAppender()],
|
|
10
|
+
rootLevel: "trace"
|
|
11
|
+
});
|
|
12
|
+
const log = getLogger(__filename);
|
|
13
|
+
LevelNames.forEach((name) => log[name].call(log, `example %s`, name));
|
|
14
|
+
//# sourceMappingURL=example-debug-appender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-debug-appender.js","sourceRoot":"","sources":["../../../src/logging/examples/example-debug-appender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGxD,iBAAiB,EAAE,CAAC,SAAS,CAAC;IAC5B,+CAA+C;IAC/C,0CAA0C;IAC1C,yBAAyB;IACzB,EAAE;IACF,sCAAsC;IACtC,SAAS,EAAE,OAAO;CACnB,CAAC,CAAA;AAEF,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;AAEjC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,CACxC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-file-appender.d.ts","sourceRoot":"","sources":["../../../src/logging/examples/example-file-appender.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FileAppender } from "../appenders/FileAppender.js";
|
|
2
|
+
import { getLogger } from "../getLogger.js";
|
|
3
|
+
import { getLoggingManager } from "../LoggingManager.js";
|
|
4
|
+
async function run() {
|
|
5
|
+
const manager = getLoggingManager();
|
|
6
|
+
const fileAppender = new FileAppender({
|
|
7
|
+
enableRolling: true,
|
|
8
|
+
maxFiles: 4,
|
|
9
|
+
maxSize: 20480
|
|
10
|
+
});
|
|
11
|
+
manager.setAppenders(fileAppender).setRootLevel("trace");
|
|
12
|
+
const log = getLogger(__filename);
|
|
13
|
+
await fileAppender.close();
|
|
14
|
+
}
|
|
15
|
+
run().catch((err) => console.error(`failed`, err));
|
|
16
|
+
//# sourceMappingURL=example-file-appender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-file-appender.js","sourceRoot":"","sources":["../../../src/logging/examples/example-file-appender.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,KAAK,UAAU,GAAG;IAChB,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;IACnC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAA;IACF,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAExD,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IACjC,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;AAC5B,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogger.d.ts","sourceRoot":"","sources":["../../src/logging/getLogger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGrD,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,MAAM,CAER"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogger.js","sourceRoot":"","sources":["../../src/logging/getLogger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,UAAkC,EAAE;IAEpC,OAAO,iBAAiB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../src/logging/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,6BAA6B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../src/logging/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,6BAA6B,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./Appender.js";
|
|
2
|
+
export * from "./Formatter.js";
|
|
3
|
+
export * from "./Level.js";
|
|
4
|
+
export * from "./LogRecord.js";
|
|
5
|
+
export * from "./Logger.js";
|
|
6
|
+
export * from "./LoggingManager.js";
|
|
7
|
+
export * from "./appenders/index.js";
|
|
8
|
+
export * from "./getLogger.js";
|
|
9
|
+
export * from "./util.js";
|
|
10
|
+
export * from "./context/index.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./Appender.js";
|
|
2
|
+
export * from "./Formatter.js";
|
|
3
|
+
export * from "./Level.js";
|
|
4
|
+
export * from "./LogRecord.js";
|
|
5
|
+
export * from "./Logger.js";
|
|
6
|
+
export * from "./LoggingManager.js";
|
|
7
|
+
export * from "./appenders/index.js";
|
|
8
|
+
export * from "./getLogger.js";
|
|
9
|
+
export * from "./util.js";
|
|
10
|
+
export * from "./context/index.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/logging/util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAc,MAAM,YAAY,CAAA;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,SAAS,CAErD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/logging/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAa,UAAU,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,UAAU,cAAc,CAAC,CAAM;IACnC,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,EAAS,CAAC,CAAA;AACtE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@wireio/shared",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "public"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"types": "lib/index.d.ts",
|
|
10
|
+
"module": "lib/index.js",
|
|
11
|
+
"access": "public",
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"@types/lodash": "4.17.23",
|
|
14
|
+
"@types/node": "^22.15.3",
|
|
15
|
+
"typescript": "5.9.2"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@aws-sdk/client-firehose": "3.972.0",
|
|
19
|
+
"@aws-sdk/client-sts": "3.972.0",
|
|
20
|
+
"bluebird": "3.7.2",
|
|
21
|
+
"debug": "^4.3.4",
|
|
22
|
+
"eventemitter3": "^5.0.4",
|
|
23
|
+
"lodash": "^4.17.21",
|
|
24
|
+
"prelude-ts": "^1.0.6",
|
|
25
|
+
"tracer": "^1.3.0"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc -b tsconfig.json",
|
|
29
|
+
"build:dev": "tsc -b tsconfig.json -w"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { isFunction, isString } from "./primitive.js"
|
|
2
|
+
|
|
3
|
+
export interface AssertOptions {
|
|
4
|
+
logErrorsToConsole: boolean
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const DefaultAssertOptions:AssertOptions = {
|
|
8
|
+
logErrorsToConsole: false
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
let assertOptions:AssertOptions = {...DefaultAssertOptions}
|
|
12
|
+
|
|
13
|
+
export function getAssertOptions() {
|
|
14
|
+
return {...assertOptions}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function setGlobalAssertOptions(options: AssertOptions) {
|
|
18
|
+
assertOptions = {...assertOptions, ...options}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class AssertError extends Error {
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
constructor(message: string, public readonly cause?: Error) {
|
|
26
|
+
super(message)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
const assertLift:AssertLift = <T>(test: (value:T) => boolean, messageProvider: string | ((value: T) => string)) => {
|
|
32
|
+
return (nextValue: T) => {
|
|
33
|
+
const ok = test(nextValue)
|
|
34
|
+
if (!ok) {
|
|
35
|
+
const message = isFunction(messageProvider) ? messageProvider(nextValue) : messageProvider ?? "no message"
|
|
36
|
+
throw new AssertError(message)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export type AssertLift = <T>(test: (value:T) => boolean, message: string | ((value: T) => string)) =>
|
|
42
|
+
(nextValue: T) => void | never
|
|
43
|
+
|
|
44
|
+
export interface Assert {
|
|
45
|
+
(
|
|
46
|
+
test: (() => boolean) | boolean,
|
|
47
|
+
msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,
|
|
48
|
+
overrideOptions?: Partial<AssertOptions>
|
|
49
|
+
): void | never
|
|
50
|
+
|
|
51
|
+
lift: AssertLift
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
export const assert: Assert = Object.assign((
|
|
56
|
+
test: (() => boolean) | boolean,
|
|
57
|
+
msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,
|
|
58
|
+
overrideOptions: Partial<AssertOptions> = {}
|
|
59
|
+
): void | never => {
|
|
60
|
+
const options = {...assertOptions, ...overrideOptions}
|
|
61
|
+
let result: boolean = false
|
|
62
|
+
let error: Error = undefined
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
result = isFunction(test) ? test() : test
|
|
66
|
+
} catch (err) {
|
|
67
|
+
error = err
|
|
68
|
+
if (options.logErrorsToConsole) {
|
|
69
|
+
console.error(`Assert failed: "${test}"`, err)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!result || !!error) {
|
|
74
|
+
const errOut = !msg ? (error?.message ?? "unknown") :
|
|
75
|
+
isFunction(msg) ? msg(error) :
|
|
76
|
+
msg
|
|
77
|
+
throw isString(errOut) ? new AssertError(errOut, error) : errOut
|
|
78
|
+
}
|
|
79
|
+
}, {
|
|
80
|
+
lift: assertLift
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is ES6+ class
|
|
3
|
+
*
|
|
4
|
+
* @see https://stackoverflow.com/questions/29093396/how-do-you-check-the-difference-between-an-ecmascript-6-class-and-function/49510834
|
|
5
|
+
*
|
|
6
|
+
* @param {any} value
|
|
7
|
+
* @returns {boolean}
|
|
8
|
+
*/
|
|
9
|
+
import type { ClassConstructor, TypeGuard } from "./types"
|
|
10
|
+
|
|
11
|
+
export function isNativeClass <T = any>(value:any): value is ClassConstructor<T> {
|
|
12
|
+
return typeof value === 'function' && value.toString().indexOf('class') === 0
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Character positions
|
|
16
|
+
const INDEX_OF_FUNCTION_NAME = 9 // "function X", X is at index 9
|
|
17
|
+
const FIRST_UPPERCASE_INDEX_IN_ASCII = 65 // A is at index 65 in ASCII
|
|
18
|
+
const LAST_UPPERCASE_INDEX_IN_ASCII = 90 // Z is at index 90 in ASCII
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Is Conventional Class
|
|
22
|
+
* Looks for function with capital first letter MyClass
|
|
23
|
+
* First letter is the 9th character
|
|
24
|
+
* If changed, isClass must also be updated
|
|
25
|
+
* @param {any} value
|
|
26
|
+
* @returns {boolean}
|
|
27
|
+
*/
|
|
28
|
+
export function isConventionalClass <T = any>(value:any): value is ClassConstructor<T> {
|
|
29
|
+
if ( typeof value !== 'function' ) return false
|
|
30
|
+
const c = value.toString().charCodeAt(INDEX_OF_FUNCTION_NAME)
|
|
31
|
+
return c >= FIRST_UPPERCASE_INDEX_IN_ASCII && c <= LAST_UPPERCASE_INDEX_IN_ASCII
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
export function isClass<T = any>(value: any, includeConventional: boolean = true): value is ClassConstructor<T> {
|
|
36
|
+
return isNativeClass<T>(value) || (includeConventional && isConventionalClass<T>(value))
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
export function createInstanceOfGuard<T, Ctor extends ClassConstructor<T>>(ctor: Ctor): ((o: any) => o is T) {
|
|
44
|
+
return (o: any): o is T => o instanceof ctor
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function instanceOf<T extends {}, Ctor extends ClassConstructor<T>>(ctor: Ctor) {
|
|
48
|
+
return createInstanceOfGuard<T,Ctor>(ctor)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function createGenericGuard<T>(tester: (val:any) => val is T):TypeGuard<T>
|
|
52
|
+
export function createGenericGuard<T>(type:{new():T}, tester: (val:any) => val is T):TypeGuard<T>
|
|
53
|
+
export function createGenericGuard<T>(typeOrTest: ({new():T} | ((val:any) => val is T)), tester?: (val:any) => val is T) {
|
|
54
|
+
return tester as TypeGuard<T>
|
|
55
|
+
}
|
|
56
|
+
|