barely-effect 0.1.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/README.md +1 -0
- package/dist/ansi-colors/ansiColors.d.ts +11 -0
- package/dist/ansi-colors/ansiColors.d.ts.map +1 -0
- package/dist/ansi-colors/ansiColors.js +15 -0
- package/dist/ansi-colors/index.d.ts +2 -0
- package/dist/ansi-colors/index.d.ts.map +1 -0
- package/dist/ansi-colors/index.js +1 -0
- package/dist/assert.d.ts +10 -0
- package/dist/assert.d.ts.map +1 -0
- package/dist/assert.js +30 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/logger/LogFormatterJson.d.ts +5 -0
- package/dist/logger/LogFormatterJson.d.ts.map +1 -0
- package/dist/logger/LogFormatterJson.js +19 -0
- package/dist/logger/LogFormatterPretty.d.ts +17 -0
- package/dist/logger/LogFormatterPretty.d.ts.map +1 -0
- package/dist/logger/LogFormatterPretty.js +88 -0
- package/dist/logger/LogLevel.d.ts +4 -0
- package/dist/logger/LogLevel.d.ts.map +1 -0
- package/dist/logger/LogLevel.js +5 -0
- package/dist/logger/Logger.d.ts +36 -0
- package/dist/logger/Logger.d.ts.map +1 -0
- package/dist/logger/Logger.js +115 -0
- package/dist/logger/index.d.ts +7 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +5 -0
- package/dist/logger/parseLogArguments.d.ts +7 -0
- package/dist/logger/parseLogArguments.d.ts.map +1 -0
- package/dist/logger/parseLogArguments.js +51 -0
- package/dist/logger/resolveError.d.ts +7 -0
- package/dist/logger/resolveError.d.ts.map +1 -0
- package/dist/logger/resolveError.js +13 -0
- package/dist/logger/types.d.ts +38 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/logger/types.js +3 -0
- package/dist/networking/HttpClient.d.ts +78 -0
- package/dist/networking/HttpClient.d.ts.map +1 -0
- package/dist/networking/HttpClient.js +77 -0
- package/dist/networking/index.d.ts +2 -0
- package/dist/networking/index.d.ts.map +1 -0
- package/dist/networking/index.js +1 -0
- package/dist/platform/filesystem/AbsolutePath.d.ts +18 -0
- package/dist/platform/filesystem/AbsolutePath.d.ts.map +1 -0
- package/dist/platform/filesystem/AbsolutePath.js +41 -0
- package/dist/platform/filesystem/FileSystem.d.ts +30 -0
- package/dist/platform/filesystem/FileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/FileSystem.js +129 -0
- package/dist/platform/filesystem/IFileSystem.d.ts +98 -0
- package/dist/platform/filesystem/IFileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/IFileSystem.js +19 -0
- package/dist/platform/filesystem/KeyedMap.d.ts +23 -0
- package/dist/platform/filesystem/KeyedMap.d.ts.map +1 -0
- package/dist/platform/filesystem/KeyedMap.js +59 -0
- package/dist/platform/filesystem/MemoryFileSystem.d.ts +42 -0
- package/dist/platform/filesystem/MemoryFileSystem.d.ts.map +1 -0
- package/dist/platform/filesystem/MemoryFileSystem.js +200 -0
- package/dist/platform/filesystem/glob/cachedFs.d.ts +9 -0
- package/dist/platform/filesystem/glob/cachedFs.d.ts.map +1 -0
- package/dist/platform/filesystem/glob/cachedFs.js +25 -0
- package/dist/platform/filesystem/glob/glob.d.ts +15 -0
- package/dist/platform/filesystem/glob/glob.d.ts.map +1 -0
- package/dist/platform/filesystem/glob/glob.js +62 -0
- package/dist/platform/filesystem/glob/parseGlob.d.ts +11 -0
- package/dist/platform/filesystem/glob/parseGlob.d.ts.map +1 -0
- package/dist/platform/filesystem/glob/parseGlob.js +61 -0
- package/dist/platform/filesystem/index.d.ts +6 -0
- package/dist/platform/filesystem/index.d.ts.map +1 -0
- package/dist/platform/filesystem/index.js +5 -0
- package/dist/platform/process/EnvReader.d.ts +13 -0
- package/dist/platform/process/EnvReader.d.ts.map +1 -0
- package/dist/platform/process/EnvReader.js +92 -0
- package/dist/platform/process/ProcessContext.d.ts +34 -0
- package/dist/platform/process/ProcessContext.d.ts.map +1 -0
- package/dist/platform/process/ProcessContext.js +47 -0
- package/dist/time/Clock.d.ts +21 -0
- package/dist/time/Clock.d.ts.map +1 -0
- package/dist/time/Clock.js +27 -0
- package/dist/time/temporal.d.ts +5 -0
- package/dist/time/temporal.d.ts.map +1 -0
- package/dist/time/temporal.js +39 -0
- package/dist/utils/jsonStringify.d.ts +7 -0
- package/dist/utils/jsonStringify.d.ts.map +1 -0
- package/dist/utils/jsonStringify.js +23 -0
- package/dist/utils/runMain.d.ts +3 -0
- package/dist/utils/runMain.d.ts.map +1 -0
- package/dist/utils/runMain.js +75 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# barely-effect
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const ansiColors: {
|
|
2
|
+
red: (text: string) => string;
|
|
3
|
+
green: (text: string) => string;
|
|
4
|
+
yellow: (text: string) => string;
|
|
5
|
+
blue: (text: string) => string;
|
|
6
|
+
magenta: (text: string) => string;
|
|
7
|
+
cyan: (text: string) => string;
|
|
8
|
+
gray: (text: string) => string;
|
|
9
|
+
bold: (text: string) => string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=ansiColors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ansiColors.d.ts","sourceRoot":"","sources":["../../src/ansi-colors/ansiColors.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU;gBAHP,MAAM;kBAAN,MAAM;mBAAN,MAAM;iBAAN,MAAM;oBAAN,MAAM;iBAAN,MAAM;iBAAN,MAAM;iBAAN,MAAM;CAYrB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function color(open, close) {
|
|
2
|
+
const openCode = `\x1b[${open}m`;
|
|
3
|
+
const closeCode = `\x1b[${close}m`;
|
|
4
|
+
return (text) => openCode + text.replaceAll("\n", `${closeCode}\n${openCode}`) + closeCode;
|
|
5
|
+
}
|
|
6
|
+
export const ansiColors = {
|
|
7
|
+
red: color(31, 39),
|
|
8
|
+
green: color(32, 39),
|
|
9
|
+
yellow: color(33, 39),
|
|
10
|
+
blue: color(34, 39),
|
|
11
|
+
magenta: color(35, 39),
|
|
12
|
+
cyan: color(36, 39),
|
|
13
|
+
gray: color(90, 39),
|
|
14
|
+
bold: color(1, 22),
|
|
15
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ansi-colors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ansiColors } from "./ansiColors.js";
|
package/dist/assert.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class BaseError extends Error {
|
|
2
|
+
constructor(message: string, cause?: unknown);
|
|
3
|
+
}
|
|
4
|
+
export declare class AssertionError extends BaseError {
|
|
5
|
+
constructor(message?: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function assert(condition: boolean, error?: string | Error): asserts condition;
|
|
8
|
+
export declare function raise(error: string | Error): never;
|
|
9
|
+
export declare function assertNever(x: never): never;
|
|
10
|
+
//# sourceMappingURL=assert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAI7C;AAED,qBAAa,cAAe,SAAQ,SAAS;gBAC/B,OAAO,CAAC,EAAE,MAAM;CAO7B;AAED,wBAAgB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC,SAAS,CAIpF;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAMlD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAE3C"}
|
package/dist/assert.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class BaseError extends Error {
|
|
2
|
+
constructor(message, cause) {
|
|
3
|
+
super(message, { cause });
|
|
4
|
+
this.name = new.target.name; // sets the name of the error to name of the parent class
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class AssertionError extends BaseError {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
if (message !== undefined) {
|
|
10
|
+
super(`assertion failed: ${message}`);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
super("assertion failed");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function assert(condition, error) {
|
|
18
|
+
if (!condition) {
|
|
19
|
+
raise(error ?? "Assertion failed");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function raise(error) {
|
|
23
|
+
if (error instanceof Error) {
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
throw new AssertionError(error);
|
|
27
|
+
}
|
|
28
|
+
export function assertNever(x) {
|
|
29
|
+
throw new AssertionError(`assertNever: Unexpected object: ${x}`);
|
|
30
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "temporal-polyfill/global";
|
|
2
|
+
export * from "./platform/filesystem/AbsolutePath";
|
|
3
|
+
export * from "./ansi-colors";
|
|
4
|
+
export * from "./assert";
|
|
5
|
+
export * from "./time/Clock";
|
|
6
|
+
export * from "./platform/process/EnvReader";
|
|
7
|
+
export * from "./platform/filesystem";
|
|
8
|
+
export * from "./utils/jsonStringify";
|
|
9
|
+
export * from "./logger";
|
|
10
|
+
export * from "./networking";
|
|
11
|
+
export * from "./platform/process/ProcessContext";
|
|
12
|
+
export * from "./time/temporal";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAA;AAEjC,cAAc,oCAAoC,CAAA;AAClD,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,mCAAmC,CAAA;AACjD,cAAc,iBAAiB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "temporal-polyfill/global";
|
|
2
|
+
export * from "./platform/filesystem/AbsolutePath.js";
|
|
3
|
+
export * from "./ansi-colors/index.js";
|
|
4
|
+
export * from "./assert.js";
|
|
5
|
+
export * from "./time/Clock.js";
|
|
6
|
+
export * from "./platform/process/EnvReader.js";
|
|
7
|
+
export * from "./platform/filesystem/index.js";
|
|
8
|
+
export * from "./utils/jsonStringify.js";
|
|
9
|
+
export * from "./logger/index.js";
|
|
10
|
+
export * from "./networking/index.js";
|
|
11
|
+
export * from "./platform/process/ProcessContext.js";
|
|
12
|
+
export * from "./time/temporal.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogFormatterJson.d.ts","sourceRoot":"","sources":["../../src/logger/LogFormatterJson.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAE1D,qBAAa,gBAAiB,YAAW,YAAY;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAehC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsonStringifyAll } from "../utils/jsonStringify.js";
|
|
2
|
+
import {} from "./types.js";
|
|
3
|
+
export class LogFormatterJson {
|
|
4
|
+
format(entry) {
|
|
5
|
+
const core = {
|
|
6
|
+
time: entry.time.toISOString(),
|
|
7
|
+
level: entry.level,
|
|
8
|
+
service: entry.service,
|
|
9
|
+
message: entry.message,
|
|
10
|
+
error: entry.resolvedError,
|
|
11
|
+
};
|
|
12
|
+
try {
|
|
13
|
+
return jsonStringifyAll({ ...core, parameters: entry.parameters });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return jsonStringifyAll({ ...core });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type LogEntry, type LogFormatter } from "./types";
|
|
2
|
+
interface Options {
|
|
3
|
+
colors: boolean;
|
|
4
|
+
utc: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare class LogFormatterPretty implements LogFormatter {
|
|
7
|
+
private readonly options;
|
|
8
|
+
constructor(options?: Partial<Options>);
|
|
9
|
+
format(entry: LogEntry): string;
|
|
10
|
+
private formatLevel;
|
|
11
|
+
private formatTime;
|
|
12
|
+
private formatParameters;
|
|
13
|
+
private formatError;
|
|
14
|
+
private formatService;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=LogFormatterPretty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogFormatterPretty.d.ts","sourceRoot":"","sources":["../../src/logger/LogFormatterPretty.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAK1D,UAAU,OAAO;IACf,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;CACb;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAOtC,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;IAY/B,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;CAQtB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ansiColors } from "../ansi-colors/index.js";
|
|
2
|
+
import { assertNever } from "../assert.js";
|
|
3
|
+
import { prettyJsonStringifyAll } from "../utils/jsonStringify.js";
|
|
4
|
+
import {} from "./LogLevel.js";
|
|
5
|
+
import {} from "./types.js";
|
|
6
|
+
const INDENT_SIZE = 4;
|
|
7
|
+
const SINGLE_LINE_LIMIT = 60;
|
|
8
|
+
export class LogFormatterPretty {
|
|
9
|
+
options;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = {
|
|
12
|
+
colors: options?.colors ?? true,
|
|
13
|
+
utc: options?.utc ?? false,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
format(entry) {
|
|
17
|
+
const timeOut = this.formatTime(entry.time);
|
|
18
|
+
const levelOut = this.formatLevel(entry.level);
|
|
19
|
+
const serviceOut = this.formatService(entry.service);
|
|
20
|
+
const messageOut = entry.message ? ` ${entry.message}` : "";
|
|
21
|
+
const paramsOut = entry.resolvedError
|
|
22
|
+
? this.formatError({ ...entry.resolvedError, ...entry.parameters })
|
|
23
|
+
: this.formatParameters(entry.parameters ?? {});
|
|
24
|
+
return `${timeOut} ${levelOut}${serviceOut}${messageOut}${paramsOut}`;
|
|
25
|
+
}
|
|
26
|
+
formatLevel(level) {
|
|
27
|
+
if (this.options.colors) {
|
|
28
|
+
switch (level) {
|
|
29
|
+
case "CRITICAL":
|
|
30
|
+
case "ERROR":
|
|
31
|
+
return ansiColors.bold(ansiColors.red(level));
|
|
32
|
+
case "WARN":
|
|
33
|
+
return ansiColors.bold(ansiColors.yellow(level));
|
|
34
|
+
case "INFO":
|
|
35
|
+
return ansiColors.bold(ansiColors.green(level));
|
|
36
|
+
case "DEBUG":
|
|
37
|
+
return ansiColors.bold(ansiColors.magenta(level));
|
|
38
|
+
case "TRACE":
|
|
39
|
+
return ansiColors.bold(ansiColors.gray(level));
|
|
40
|
+
case "NONE":
|
|
41
|
+
return level;
|
|
42
|
+
default:
|
|
43
|
+
assertNever(level);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return level;
|
|
47
|
+
}
|
|
48
|
+
formatTime(now) {
|
|
49
|
+
const utc = this.options.utc;
|
|
50
|
+
const h = (utc ? now.getUTCHours() : now.getHours()).toString().padStart(2, "0");
|
|
51
|
+
const m = (utc ? now.getUTCMinutes() : now.getMinutes()).toString().padStart(2, "0");
|
|
52
|
+
const s = (utc ? now.getUTCSeconds() : now.getSeconds()).toString().padStart(2, "0");
|
|
53
|
+
const ms = (utc ? now.getUTCMilliseconds() : now.getMilliseconds()).toString().padStart(3, "0");
|
|
54
|
+
let result = `${h}:${m}:${s}.${ms}`;
|
|
55
|
+
if (utc) {
|
|
56
|
+
result += "Z";
|
|
57
|
+
}
|
|
58
|
+
return this.options.colors ? ansiColors.gray(result) : result;
|
|
59
|
+
}
|
|
60
|
+
formatParameters(parameters) {
|
|
61
|
+
const jsonParameters = prettyJsonStringifyAll(parameters, {
|
|
62
|
+
space: INDENT_SIZE,
|
|
63
|
+
singleLineUntilLength: SINGLE_LINE_LIMIT,
|
|
64
|
+
});
|
|
65
|
+
if (jsonParameters === "{}") {
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
const separator = jsonParameters.includes("\n") ? "\n" : " ";
|
|
69
|
+
return this.options.colors
|
|
70
|
+
? `${separator}${ansiColors.gray(jsonParameters)}`
|
|
71
|
+
: `${separator}${jsonParameters}`;
|
|
72
|
+
}
|
|
73
|
+
formatError(parameters) {
|
|
74
|
+
const jsonParameters = prettyJsonStringifyAll(parameters, { space: INDENT_SIZE });
|
|
75
|
+
if (jsonParameters === "{}") {
|
|
76
|
+
return "";
|
|
77
|
+
}
|
|
78
|
+
return this.options.colors ? `\n${ansiColors.red(jsonParameters)}` : `\n${jsonParameters}`;
|
|
79
|
+
}
|
|
80
|
+
formatService(service) {
|
|
81
|
+
if (!service) {
|
|
82
|
+
return "";
|
|
83
|
+
}
|
|
84
|
+
return this.options.colors
|
|
85
|
+
? ` ${ansiColors.gray("[")} ${ansiColors.yellow(service)} ${ansiColors.gray("]")}`
|
|
86
|
+
: ` [ ${service} ]`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogLevel.d.ts","sourceRoot":"","sources":["../../src/logger/LogLevel.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,0EAA2E,CAAA;AAClG,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAA;AAElD,eAAO,MAAM,KAAK,EAAS,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type LoggerOptions } from "./types";
|
|
2
|
+
export interface ILogger {
|
|
3
|
+
critical(...args: unknown[]): void;
|
|
4
|
+
error(...args: unknown[]): void;
|
|
5
|
+
warn(...args: unknown[]): void;
|
|
6
|
+
info(...args: unknown[]): void;
|
|
7
|
+
debug(...args: unknown[]): void;
|
|
8
|
+
trace(...args: unknown[]): void;
|
|
9
|
+
configure(options: Partial<LoggerOptions>): ILogger;
|
|
10
|
+
for(object: {} | string): ILogger;
|
|
11
|
+
}
|
|
12
|
+
export declare class Logger implements ILogger {
|
|
13
|
+
private readonly options;
|
|
14
|
+
private readonly logLevel;
|
|
15
|
+
constructor(options: Partial<LoggerOptions>);
|
|
16
|
+
static SILENT: Logger;
|
|
17
|
+
static CRITICAL: Logger;
|
|
18
|
+
static ERROR: Logger;
|
|
19
|
+
static WARN: Logger;
|
|
20
|
+
static INFO: Logger;
|
|
21
|
+
static DEBUG: Logger;
|
|
22
|
+
static TRACE: Logger;
|
|
23
|
+
static ALL: Logger;
|
|
24
|
+
configure(options: Partial<LoggerOptions>): Logger;
|
|
25
|
+
for(object: {} | string): Logger;
|
|
26
|
+
critical(...args: unknown[]): void;
|
|
27
|
+
error(...args: unknown[]): void;
|
|
28
|
+
warn(...args: unknown[]): void;
|
|
29
|
+
info(...args: unknown[]): void;
|
|
30
|
+
debug(...args: unknown[]): void;
|
|
31
|
+
trace(...args: unknown[]): void;
|
|
32
|
+
private parseEntry;
|
|
33
|
+
private print;
|
|
34
|
+
private dispatch;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAClC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAE/B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAA;IACnD,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,CAAA;CAClC;AAMD,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC;IAY3C,MAAM,CAAC,MAAM,SAAmC;IAChD,MAAM,CAAC,QAAQ,SAAsE;IACrF,MAAM,CAAC,KAAK,SAAmE;IAC/E,MAAM,CAAC,IAAI,SAAkE;IAC7E,MAAM,CAAC,IAAI,SAAkE;IAC7E,MAAM,CAAC,KAAK,SAAmE;IAC/E,MAAM,CAAC,KAAK,SAAmE;IAC/E,MAAM,CAAC,GAAG,SAAe;IAEzB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM;IAIlD,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM;IAQhC,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAQlC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAQ/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAM/B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,QAAQ;CAsBjB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { assertNever } from "../assert.js";
|
|
2
|
+
import { Clock } from "../time/Clock.js";
|
|
3
|
+
import { LogFormatterPretty } from "./LogFormatterPretty.js";
|
|
4
|
+
import {} from "./LogLevel.js";
|
|
5
|
+
import { LEVEL } from "./LogLevel.js";
|
|
6
|
+
import { parseLogArguments } from "./parseLogArguments.js";
|
|
7
|
+
import { resolveError } from "./resolveError.js";
|
|
8
|
+
import {} from "./types.js";
|
|
9
|
+
const defaultTransports = [
|
|
10
|
+
{ transport: console, formatter: new LogFormatterPretty() },
|
|
11
|
+
];
|
|
12
|
+
export class Logger {
|
|
13
|
+
options;
|
|
14
|
+
logLevel;
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.options = {
|
|
17
|
+
logLevel: options.logLevel ?? "INFO",
|
|
18
|
+
service: options.service,
|
|
19
|
+
utc: options.utc ?? false,
|
|
20
|
+
clock: options.clock ?? new Clock(),
|
|
21
|
+
reportError: options.reportError ?? (() => { }),
|
|
22
|
+
transports: options.transports ?? defaultTransports,
|
|
23
|
+
};
|
|
24
|
+
this.logLevel = LEVEL[this.options.logLevel];
|
|
25
|
+
}
|
|
26
|
+
static SILENT = new Logger({ logLevel: "NONE" });
|
|
27
|
+
static CRITICAL = new Logger({ logLevel: "CRITICAL", transports: defaultTransports });
|
|
28
|
+
static ERROR = new Logger({ logLevel: "ERROR", transports: defaultTransports });
|
|
29
|
+
static WARN = new Logger({ logLevel: "WARN", transports: defaultTransports });
|
|
30
|
+
static INFO = new Logger({ logLevel: "INFO", transports: defaultTransports });
|
|
31
|
+
static DEBUG = new Logger({ logLevel: "DEBUG", transports: defaultTransports });
|
|
32
|
+
static TRACE = new Logger({ logLevel: "TRACE", transports: defaultTransports });
|
|
33
|
+
static ALL = Logger.TRACE;
|
|
34
|
+
configure(options) {
|
|
35
|
+
return new Logger({ ...this.options, ...options });
|
|
36
|
+
}
|
|
37
|
+
for(object) {
|
|
38
|
+
const name = typeof object === "string" ? object : object.constructor.name;
|
|
39
|
+
return this.configure({
|
|
40
|
+
service: this.options.service ? `${this.options.service}.${name}` : name,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
critical(...args) {
|
|
44
|
+
if (this.logLevel >= LEVEL.CRITICAL) {
|
|
45
|
+
const entry = this.parseEntry("CRITICAL", args);
|
|
46
|
+
this.print(entry);
|
|
47
|
+
this.options.reportError(entry);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
error(...args) {
|
|
51
|
+
if (this.logLevel >= LEVEL.ERROR) {
|
|
52
|
+
const entry = this.parseEntry("ERROR", args);
|
|
53
|
+
this.print(entry);
|
|
54
|
+
this.options.reportError(entry);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
warn(...args) {
|
|
58
|
+
if (this.logLevel >= LEVEL.WARN) {
|
|
59
|
+
this.print(this.parseEntry("WARN", args));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
info(...args) {
|
|
63
|
+
if (this.logLevel >= LEVEL.INFO) {
|
|
64
|
+
this.print(this.parseEntry("INFO", args));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
debug(...args) {
|
|
68
|
+
if (this.logLevel >= LEVEL.DEBUG) {
|
|
69
|
+
this.print(this.parseEntry("DEBUG", args));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
trace(...args) {
|
|
73
|
+
if (this.logLevel >= LEVEL.TRACE) {
|
|
74
|
+
this.print(this.parseEntry("TRACE", args));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
parseEntry(level, args) {
|
|
78
|
+
const parsed = parseLogArguments(args);
|
|
79
|
+
return {
|
|
80
|
+
...parsed,
|
|
81
|
+
resolvedError: parsed.error && resolveError(parsed.error),
|
|
82
|
+
level,
|
|
83
|
+
time: this.options.clock.nowDate(),
|
|
84
|
+
service: this.options.service,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
print(entry) {
|
|
88
|
+
for (const transportOptions of this.options.transports) {
|
|
89
|
+
const output = transportOptions.formatter.format(entry);
|
|
90
|
+
this.dispatch(transportOptions.transport, entry.level, output);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
dispatch(transport, level, message) {
|
|
94
|
+
switch (level) {
|
|
95
|
+
case "CRITICAL":
|
|
96
|
+
case "ERROR":
|
|
97
|
+
transport.error(message);
|
|
98
|
+
break;
|
|
99
|
+
case "WARN":
|
|
100
|
+
transport.warn(message);
|
|
101
|
+
break;
|
|
102
|
+
case "INFO":
|
|
103
|
+
transport.log(message);
|
|
104
|
+
break;
|
|
105
|
+
case "DEBUG":
|
|
106
|
+
case "TRACE":
|
|
107
|
+
transport.debug(message);
|
|
108
|
+
break;
|
|
109
|
+
case "NONE":
|
|
110
|
+
break;
|
|
111
|
+
default:
|
|
112
|
+
assertNever(level);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { type ILogger, Logger } from "./Logger";
|
|
2
|
+
export { LogFormatterJson } from "./LogFormatterJson";
|
|
3
|
+
export { LogFormatterPretty } from "./LogFormatterPretty";
|
|
4
|
+
export { type LogLevel, LEVEL, LOG_LEVELS } from "./LogLevel";
|
|
5
|
+
export { type ResolvedError, resolveError } from "./resolveError";
|
|
6
|
+
export type { LogEntry, LogFormatter, LoggerConfig, LoggerOptions, LoggerTransport, LoggerTransportOptions, } from "./types";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACjE,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,eAAe,EACf,sBAAsB,GACvB,MAAM,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseLogArguments.d.ts","sourceRoot":"","sources":["../../src/logger/parseLogArguments.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAiDrE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export function parseLogArguments(args) {
|
|
2
|
+
let message;
|
|
3
|
+
let error;
|
|
4
|
+
const values = [];
|
|
5
|
+
let parameters = {};
|
|
6
|
+
for (const arg of args) {
|
|
7
|
+
if (typeof arg === "string") {
|
|
8
|
+
if (message === undefined) {
|
|
9
|
+
message = arg;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
values.push(arg);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else if (arg instanceof Error) {
|
|
16
|
+
if (error === undefined) {
|
|
17
|
+
error = arg;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
values.push(arg);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else if (typeof arg !== "object" || arg === null || Array.isArray(arg)) {
|
|
24
|
+
values.push(arg);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
parameters = { ...parameters, ...arg };
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (values.length === 1) {
|
|
31
|
+
parameters = { value: values[0], ...parameters };
|
|
32
|
+
}
|
|
33
|
+
else if (values.length > 1) {
|
|
34
|
+
parameters = { values, ...parameters };
|
|
35
|
+
}
|
|
36
|
+
const parameterMessage = Reflect.get(parameters, "message");
|
|
37
|
+
if (message === undefined && typeof parameterMessage === "string") {
|
|
38
|
+
message = parameterMessage;
|
|
39
|
+
Reflect.deleteProperty(parameters, "message");
|
|
40
|
+
}
|
|
41
|
+
const parameterError = Reflect.get(parameters, "error");
|
|
42
|
+
if (error === undefined && parameterError instanceof Error) {
|
|
43
|
+
error = parameterError;
|
|
44
|
+
Reflect.deleteProperty(parameters, "error");
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
message,
|
|
48
|
+
error,
|
|
49
|
+
parameters: Object.keys(parameters).length > 0 ? parameters : undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveError.d.ts","sourceRoot":"","sources":["../../src/logger/resolveError.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAaxD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type IClock } from "../time/Clock";
|
|
2
|
+
import { type LogLevel } from "./LogLevel";
|
|
3
|
+
import { type ResolvedError } from "./resolveError";
|
|
4
|
+
export interface LoggerTransport {
|
|
5
|
+
debug(message: string | object): void;
|
|
6
|
+
log(message: string | object): void;
|
|
7
|
+
warn(message: string | object): void;
|
|
8
|
+
error(message: string | object): void;
|
|
9
|
+
}
|
|
10
|
+
export interface LogFormatter {
|
|
11
|
+
format(entry: LogEntry): string | object;
|
|
12
|
+
}
|
|
13
|
+
export interface LoggerTransportOptions {
|
|
14
|
+
transport: LoggerTransport;
|
|
15
|
+
formatter: LogFormatter;
|
|
16
|
+
}
|
|
17
|
+
export interface LoggerConfig {
|
|
18
|
+
logLevel: LogLevel;
|
|
19
|
+
transports: LoggerTransportOptions[];
|
|
20
|
+
}
|
|
21
|
+
export interface LoggerOptions {
|
|
22
|
+
logLevel: LogLevel;
|
|
23
|
+
service?: string;
|
|
24
|
+
utc: boolean;
|
|
25
|
+
clock: IClock;
|
|
26
|
+
reportError: (entry: LogEntry) => void;
|
|
27
|
+
transports: LoggerTransportOptions[];
|
|
28
|
+
}
|
|
29
|
+
export interface LogEntry {
|
|
30
|
+
level: LogLevel;
|
|
31
|
+
time: Date;
|
|
32
|
+
service?: string;
|
|
33
|
+
message?: string;
|
|
34
|
+
error?: Error;
|
|
35
|
+
resolvedError?: ResolvedError;
|
|
36
|
+
parameters?: object;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/logger/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACrC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACpC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,eAAe,CAAA;IAC1B,SAAS,EAAE,YAAY,CAAA;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,UAAU,EAAE,sBAAsB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;IACtC,UAAU,EAAE,sBAAsB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB"}
|