@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.
Files changed (183) hide show
  1. package/lib/guards/applyTypeGuardExtras.d.ts +3 -0
  2. package/lib/guards/applyTypeGuardExtras.d.ts.map +1 -0
  3. package/lib/guards/applyTypeGuardExtras.js +5 -0
  4. package/lib/guards/applyTypeGuardExtras.js.map +1 -0
  5. package/lib/guards/array.d.ts +2 -0
  6. package/lib/guards/array.d.ts.map +1 -0
  7. package/lib/guards/array.js +4 -0
  8. package/lib/guards/array.js.map +1 -0
  9. package/lib/guards/assert.d.ts +19 -0
  10. package/lib/guards/assert.d.ts.map +1 -0
  11. package/lib/guards/assert.js +50 -0
  12. package/lib/guards/assert.js.map +1 -0
  13. package/lib/guards/class.d.ts +27 -0
  14. package/lib/guards/class.d.ts.map +1 -0
  15. package/lib/guards/class.js +34 -0
  16. package/lib/guards/class.js.map +1 -0
  17. package/lib/guards/guard-tools.d.ts +20 -0
  18. package/lib/guards/guard-tools.d.ts.map +1 -0
  19. package/lib/guards/guard-tools.js +50 -0
  20. package/lib/guards/guard-tools.js.map +1 -0
  21. package/lib/guards/index.d.ts +8 -0
  22. package/lib/guards/index.d.ts.map +1 -0
  23. package/lib/guards/index.js +8 -0
  24. package/lib/guards/index.js.map +1 -0
  25. package/lib/guards/primitive.d.ts +26 -0
  26. package/lib/guards/primitive.d.ts.map +1 -0
  27. package/lib/guards/primitive.js +47 -0
  28. package/lib/guards/primitive.js.map +1 -0
  29. package/lib/guards/types.d.ts +10 -0
  30. package/lib/guards/types.d.ts.map +1 -0
  31. package/lib/guards/types.js +2 -0
  32. package/lib/guards/types.js.map +1 -0
  33. package/lib/helpers/Deferred.d.ts +31 -0
  34. package/lib/helpers/Deferred.d.ts.map +1 -0
  35. package/lib/helpers/Deferred.js +111 -0
  36. package/lib/helpers/Deferred.js.map +1 -0
  37. package/lib/helpers/index.d.ts +2 -0
  38. package/lib/helpers/index.d.ts.map +1 -0
  39. package/lib/helpers/index.js +2 -0
  40. package/lib/helpers/index.js.map +1 -0
  41. package/lib/index.d.ts +4 -0
  42. package/lib/index.d.ts.map +1 -0
  43. package/lib/index.js +4 -0
  44. package/lib/index.js.map +1 -0
  45. package/lib/logging/Appender.d.ts +5 -0
  46. package/lib/logging/Appender.d.ts.map +1 -0
  47. package/lib/logging/Appender.js +2 -0
  48. package/lib/logging/Appender.js.map +1 -0
  49. package/lib/logging/Formatter.d.ts +3 -0
  50. package/lib/logging/Formatter.d.ts.map +1 -0
  51. package/lib/logging/Formatter.js +2 -0
  52. package/lib/logging/Formatter.js.map +1 -0
  53. package/lib/logging/InternalLogger.d.ts +2 -0
  54. package/lib/logging/InternalLogger.d.ts.map +1 -0
  55. package/lib/logging/InternalLogger.js +6 -0
  56. package/lib/logging/InternalLogger.js.map +1 -0
  57. package/lib/logging/Level.d.ts +14 -0
  58. package/lib/logging/Level.d.ts.map +1 -0
  59. package/lib/logging/Level.js +13 -0
  60. package/lib/logging/Level.js.map +1 -0
  61. package/lib/logging/LogRecord.d.ts +16 -0
  62. package/lib/logging/LogRecord.d.ts.map +1 -0
  63. package/lib/logging/LogRecord.js +2 -0
  64. package/lib/logging/LogRecord.js.map +1 -0
  65. package/lib/logging/Logger.d.ts +77 -0
  66. package/lib/logging/Logger.d.ts.map +1 -0
  67. package/lib/logging/Logger.js +158 -0
  68. package/lib/logging/Logger.js.map +1 -0
  69. package/lib/logging/LoggingManager.d.ts +128 -0
  70. package/lib/logging/LoggingManager.d.ts.map +1 -0
  71. package/lib/logging/LoggingManager.js +236 -0
  72. package/lib/logging/LoggingManager.js.map +1 -0
  73. package/lib/logging/appenders/ConsoleAppender.d.ts +55 -0
  74. package/lib/logging/appenders/ConsoleAppender.d.ts.map +1 -0
  75. package/lib/logging/appenders/ConsoleAppender.js +72 -0
  76. package/lib/logging/appenders/ConsoleAppender.js.map +1 -0
  77. package/lib/logging/appenders/DebugAppender.d.ts +53 -0
  78. package/lib/logging/appenders/DebugAppender.d.ts.map +1 -0
  79. package/lib/logging/appenders/DebugAppender.js +183 -0
  80. package/lib/logging/appenders/DebugAppender.js.map +1 -0
  81. package/lib/logging/appenders/FileAppender.d.ts +65 -0
  82. package/lib/logging/appenders/FileAppender.d.ts.map +1 -0
  83. package/lib/logging/appenders/FileAppender.js +212 -0
  84. package/lib/logging/appenders/FileAppender.js.map +1 -0
  85. package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts +27 -0
  86. package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.d.ts.map +1 -0
  87. package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js +135 -0
  88. package/lib/logging/appenders/aws-firehose/AWSFirehoseAppender.js.map +1 -0
  89. package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts +27 -0
  90. package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.d.ts.map +1 -0
  91. package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js +94 -0
  92. package/lib/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.js.map +1 -0
  93. package/lib/logging/appenders/index.d.ts +4 -0
  94. package/lib/logging/appenders/index.d.ts.map +1 -0
  95. package/lib/logging/appenders/index.js +4 -0
  96. package/lib/logging/appenders/index.js.map +1 -0
  97. package/lib/logging/context/LogContext.d.ts +48 -0
  98. package/lib/logging/context/LogContext.d.ts.map +1 -0
  99. package/lib/logging/context/LogContext.js +58 -0
  100. package/lib/logging/context/LogContext.js.map +1 -0
  101. package/lib/logging/context/LogContextContainer.d.ts +9 -0
  102. package/lib/logging/context/LogContextContainer.d.ts.map +1 -0
  103. package/lib/logging/context/LogContextContainer.js +25 -0
  104. package/lib/logging/context/LogContextContainer.js.map +1 -0
  105. package/lib/logging/context/LogContextProvider.d.ts +24 -0
  106. package/lib/logging/context/LogContextProvider.d.ts.map +1 -0
  107. package/lib/logging/context/LogContextProvider.js +18 -0
  108. package/lib/logging/context/LogContextProvider.js.map +1 -0
  109. package/lib/logging/context/index.d.ts +4 -0
  110. package/lib/logging/context/index.d.ts.map +1 -0
  111. package/lib/logging/context/index.js +4 -0
  112. package/lib/logging/context/index.js.map +1 -0
  113. package/lib/logging/context/providers/node/NodeContextProvider.d.ts +2 -0
  114. package/lib/logging/context/providers/node/NodeContextProvider.d.ts.map +1 -0
  115. package/lib/logging/context/providers/node/NodeContextProvider.js +31 -0
  116. package/lib/logging/context/providers/node/NodeContextProvider.js.map +1 -0
  117. package/lib/logging/context/providers/node/index.d.ts +3 -0
  118. package/lib/logging/context/providers/node/index.d.ts.map +1 -0
  119. package/lib/logging/context/providers/node/index.js +2 -0
  120. package/lib/logging/context/providers/node/index.js.map +1 -0
  121. package/lib/logging/examples/example-debug-appender.d.ts +2 -0
  122. package/lib/logging/examples/example-debug-appender.d.ts.map +1 -0
  123. package/lib/logging/examples/example-debug-appender.js +14 -0
  124. package/lib/logging/examples/example-debug-appender.js.map +1 -0
  125. package/lib/logging/examples/example-file-appender.d.ts +2 -0
  126. package/lib/logging/examples/example-file-appender.d.ts.map +1 -0
  127. package/lib/logging/examples/example-file-appender.js +16 -0
  128. package/lib/logging/examples/example-file-appender.js.map +1 -0
  129. package/lib/logging/getLogger.d.ts +3 -0
  130. package/lib/logging/getLogger.d.ts.map +1 -0
  131. package/lib/logging/getLogger.js +5 -0
  132. package/lib/logging/getLogger.js.map +1 -0
  133. package/lib/logging/index-node.d.ts +3 -0
  134. package/lib/logging/index-node.d.ts.map +1 -0
  135. package/lib/logging/index-node.js +3 -0
  136. package/lib/logging/index-node.js.map +1 -0
  137. package/lib/logging/index.d.ts +11 -0
  138. package/lib/logging/index.d.ts.map +1 -0
  139. package/lib/logging/index.js +11 -0
  140. package/lib/logging/index.js.map +1 -0
  141. package/lib/logging/util.d.ts +3 -0
  142. package/lib/logging/util.d.ts.map +1 -0
  143. package/lib/logging/util.js +6 -0
  144. package/lib/logging/util.js.map +1 -0
  145. package/package.json +31 -0
  146. package/src/guards/applyTypeGuardExtras.ts +9 -0
  147. package/src/guards/array.ts +5 -0
  148. package/src/guards/assert.ts +83 -0
  149. package/src/guards/class.ts +56 -0
  150. package/src/guards/guard-tools.ts +78 -0
  151. package/src/guards/index.ts +7 -0
  152. package/src/guards/primitive.ts +77 -0
  153. package/src/guards/types.ts +15 -0
  154. package/src/helpers/Deferred.ts +149 -0
  155. package/src/helpers/index.ts +1 -0
  156. package/src/index.ts +3 -0
  157. package/src/logging/Appender.ts +5 -0
  158. package/src/logging/Formatter.ts +8 -0
  159. package/src/logging/InternalLogger.ts +6 -0
  160. package/src/logging/Level.ts +19 -0
  161. package/src/logging/LogRecord.ts +17 -0
  162. package/src/logging/Logger.ts +222 -0
  163. package/src/logging/LoggingManager.ts +306 -0
  164. package/src/logging/appenders/ConsoleAppender.ts +110 -0
  165. package/src/logging/appenders/DebugAppender.ts +254 -0
  166. package/src/logging/appenders/FileAppender.ts +281 -0
  167. package/src/logging/appenders/aws-firehose/AWSFirehoseAppender.ts +176 -0
  168. package/src/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.ts +132 -0
  169. package/src/logging/appenders/index.ts +3 -0
  170. package/src/logging/context/LogContext.ts +74 -0
  171. package/src/logging/context/LogContextContainer.ts +28 -0
  172. package/src/logging/context/LogContextProvider.ts +43 -0
  173. package/src/logging/context/index.ts +3 -0
  174. package/src/logging/context/providers/node/NodeContextProvider.ts +45 -0
  175. package/src/logging/context/providers/node/index.ts +3 -0
  176. package/src/logging/examples/example-debug-appender.ts +19 -0
  177. package/src/logging/examples/example-file-appender.ts +19 -0
  178. package/src/logging/getLogger.ts +9 -0
  179. package/src/logging/index-node.ts +2 -0
  180. package/src/logging/index.ts +11 -0
  181. package/src/logging/util.ts +6 -0
  182. package/tsconfig.json +9 -0
  183. 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,4 @@
1
+ export * from "./LogContext.js";
2
+ export * from "./LogContextProvider.js";
3
+ export * from "./LogContextContainer.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export * from "./LogContext.js";
2
+ export * from "./LogContextProvider.js";
3
+ export * from "./LogContextContainer.js";
4
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=NodeContextProvider.d.ts.map
@@ -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,3 @@
1
+ import "./NodeContextProvider.js";
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ import "./NodeContextProvider.js";
2
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=example-debug-appender.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=example-file-appender.d.ts.map
@@ -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,3 @@
1
+ import type { Logger, LoggerOptions } from "./Logger";
2
+ export declare function getLogger(category: string, options?: Partial<LoggerOptions>): Logger;
3
+ //# sourceMappingURL=getLogger.d.ts.map
@@ -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,5 @@
1
+ import { getLoggingManager } from "./LoggingManager.js";
2
+ export function getLogger(category, options = {}) {
3
+ return getLoggingManager().getLogger(category, options);
4
+ }
5
+ //# sourceMappingURL=getLogger.js.map
@@ -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,3 @@
1
+ export * from "./index.js";
2
+ export * from "./appenders/FileAppender.js";
3
+ //# sourceMappingURL=index-node.d.ts.map
@@ -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,3 @@
1
+ export * from "./index.js";
2
+ export * from "./appenders/FileAppender.js";
3
+ //# sourceMappingURL=index-node.js.map
@@ -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,3 @@
1
+ import { LevelKind } from "./Level.js";
2
+ export declare function isLogLevelKind(o: any): o is LevelKind;
3
+ //# sourceMappingURL=util.d.ts.map
@@ -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,6 @@
1
+ import { isString } from "../guards/primitive.js";
2
+ import { LevelNames } from "./Level.js";
3
+ export function isLogLevelKind(o) {
4
+ return isString(o) && LevelNames.includes(o?.toLowerCase?.());
5
+ }
6
+ //# sourceMappingURL=util.js.map
@@ -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,9 @@
1
+ import type { TypeGuard, TypeGuardExtras } from "./types"
2
+
3
+
4
+ export function applyTypeGuardExtras<T>(fn:TypeGuard<T>):TypeGuardExtras<T> {
5
+ (
6
+ fn as TypeGuardExtras<T>
7
+ ).lift = (o:any) => () => fn(o)
8
+ return fn as TypeGuardExtras<T>
9
+ }
@@ -0,0 +1,5 @@
1
+ export function isArray(
2
+ o: unknown
3
+ ): o is Array<typeof o extends Array<infer T> ? T : any> {
4
+ return Array.isArray(o)
5
+ }
@@ -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
+