@xframework/logtape 0.4.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/.turbo/turbo-build.log +22 -0
- package/CHANGELOG.md +12 -0
- package/dist/index.cjs +42 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/package.json +33 -0
- package/src/__tests__/index.test.ts +154 -0
- package/src/index.ts +16 -0
- package/tsconfig.json +9 -0
- package/tsup.config.ts +3 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
> @xframework/logtape@0.4.0 build /home/runner/work/x/x/packages/@xframework/logtape
|
3
|
+
> tsup
|
4
|
+
|
5
|
+
[34mCLI[39m Building entry: src/index.ts
|
6
|
+
[34mCLI[39m Using tsconfig: tsconfig.json
|
7
|
+
[34mCLI[39m tsup v8.3.5
|
8
|
+
[34mCLI[39m Using tsup config: /home/runner/work/x/x/packages/@xframework/logtape/tsup.config.ts
|
9
|
+
[34mCLI[39m Target: esnext
|
10
|
+
[34mCLI[39m Cleaning output folder
|
11
|
+
[34mCJS[39m Build start
|
12
|
+
[34mESM[39m Build start
|
13
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m1.37 KB[39m
|
14
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m676.00 B[39m
|
15
|
+
[32mCJS[39m ⚡️ Build success in 36ms
|
16
|
+
[32mESM[39m [1mdist/index.js [22m[32m346.00 B[39m
|
17
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m640.00 B[39m
|
18
|
+
[32mESM[39m ⚡️ Build success in 34ms
|
19
|
+
[34mDTS[39m Build start
|
20
|
+
[32mDTS[39m ⚡️ Build success in 4163ms
|
21
|
+
[32mDTS[39m [1mdist/index.d.cts [22m[32m247.00 B[39m
|
22
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m247.00 B[39m
|
package/CHANGELOG.md
ADDED
package/dist/index.cjs
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __defProp = Object.defineProperty;
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
6
|
+
var __export = (target, all) => {
|
7
|
+
for (var name in all)
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
9
|
+
};
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
12
|
+
for (let key of __getOwnPropNames(from))
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
15
|
+
}
|
16
|
+
return to;
|
17
|
+
};
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
19
|
+
|
20
|
+
// src/index.ts
|
21
|
+
var index_exports = {};
|
22
|
+
__export(index_exports, {
|
23
|
+
LogTapeAdapter: () => LogTapeAdapter
|
24
|
+
});
|
25
|
+
module.exports = __toCommonJS(index_exports);
|
26
|
+
var import_adapter = require("@xframework/x/adapter");
|
27
|
+
var import_logtape = require("@logtape/logtape");
|
28
|
+
var LogTapeAdapter = class extends import_adapter.SyncAdapter {
|
29
|
+
logger;
|
30
|
+
constructor() {
|
31
|
+
super();
|
32
|
+
this.logger = (0, import_logtape.getLogger)();
|
33
|
+
}
|
34
|
+
export() {
|
35
|
+
return this.logger;
|
36
|
+
}
|
37
|
+
};
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
39
|
+
0 && (module.exports = {
|
40
|
+
LogTapeAdapter
|
41
|
+
});
|
42
|
+
//# sourceMappingURL=index.cjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { SyncAdapter } from \"@xframework/x/adapter\";\nimport type { Logger } from \"@logtape/logtape\";\nimport { getLogger } from \"@logtape/logtape\";\n\nexport class LogTapeAdapter extends SyncAdapter<Logger> {\n public logger: Logger;\n\n constructor() {\n super();\n this.logger = getLogger();\n }\n\n export(): Logger {\n return this.logger;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA4B;AAE5B,qBAA0B;AAEnB,IAAM,iBAAN,cAA6B,2BAAoB;AAAA,EAC/C;AAAA,EAEP,cAAc;AACZ,UAAM;AACN,SAAK,aAAS,0BAAU;AAAA,EAC1B;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
// src/index.ts
|
2
|
+
import { SyncAdapter } from "@xframework/x/adapter";
|
3
|
+
import { getLogger } from "@logtape/logtape";
|
4
|
+
var LogTapeAdapter = class extends SyncAdapter {
|
5
|
+
logger;
|
6
|
+
constructor() {
|
7
|
+
super();
|
8
|
+
this.logger = getLogger();
|
9
|
+
}
|
10
|
+
export() {
|
11
|
+
return this.logger;
|
12
|
+
}
|
13
|
+
};
|
14
|
+
export {
|
15
|
+
LogTapeAdapter
|
16
|
+
};
|
17
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { SyncAdapter } from \"@xframework/x/adapter\";\nimport type { Logger } from \"@logtape/logtape\";\nimport { getLogger } from \"@logtape/logtape\";\n\nexport class LogTapeAdapter extends SyncAdapter<Logger> {\n public logger: Logger;\n\n constructor() {\n super();\n this.logger = getLogger();\n }\n\n export(): Logger {\n return this.logger;\n }\n}\n"],"mappings":";AAAA,SAAS,mBAAmB;AAE5B,SAAS,iBAAiB;AAEnB,IAAM,iBAAN,cAA6B,YAAoB;AAAA,EAC/C;AAAA,EAEP,cAAc;AACZ,UAAM;AACN,SAAK,SAAS,UAAU;AAAA,EAC1B;AAAA,EAEA,SAAiB;AACf,WAAO,KAAK;AAAA,EACd;AACF;","names":[]}
|
package/package.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "@xframework/logtape",
|
3
|
+
"version": "0.4.0",
|
4
|
+
"type": "module",
|
5
|
+
"exports": {
|
6
|
+
".": {
|
7
|
+
"types": "./dist/index.d.ts",
|
8
|
+
"require": "./dist/index.cjs",
|
9
|
+
"import": "./dist/index.js"
|
10
|
+
}
|
11
|
+
},
|
12
|
+
"main": "./dist/index.cjs",
|
13
|
+
"module": "./dist/index.js",
|
14
|
+
"types": "./dist/index.d.ts",
|
15
|
+
"publishConfig": {
|
16
|
+
"access": "public"
|
17
|
+
},
|
18
|
+
"dependencies": {
|
19
|
+
"@xframework/x": "0.4.0"
|
20
|
+
},
|
21
|
+
"peerDependencies": {
|
22
|
+
"@logtape/logtape": ">=0.8.0"
|
23
|
+
},
|
24
|
+
"devDependencies": {
|
25
|
+
"@types/node": "^20.11.24",
|
26
|
+
"tsup": "^8.2.4",
|
27
|
+
"typescript": "^5.5.4"
|
28
|
+
},
|
29
|
+
"scripts": {
|
30
|
+
"build": "tsup",
|
31
|
+
"dev": "tsup --watch"
|
32
|
+
}
|
33
|
+
}
|
@@ -0,0 +1,154 @@
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
2
|
+
import { LogTapeAdapter } from "../index";
|
3
|
+
import { configure, getConsoleSink, getLogger } from "@logtape/logtape";
|
4
|
+
import { createX } from "@xframework/x";
|
5
|
+
|
6
|
+
describe("LogTapeAdapter", () => {
|
7
|
+
beforeEach(async () => {
|
8
|
+
await configure({
|
9
|
+
reset: true,
|
10
|
+
sinks: {
|
11
|
+
console: getConsoleSink(),
|
12
|
+
},
|
13
|
+
loggers: [
|
14
|
+
{
|
15
|
+
category: [],
|
16
|
+
sinks: ["console"],
|
17
|
+
lowestLevel: "debug",
|
18
|
+
},
|
19
|
+
],
|
20
|
+
});
|
21
|
+
});
|
22
|
+
|
23
|
+
afterEach(async () => {
|
24
|
+
await configure({
|
25
|
+
reset: true,
|
26
|
+
sinks: {},
|
27
|
+
loggers: [],
|
28
|
+
});
|
29
|
+
});
|
30
|
+
|
31
|
+
it("should properly initialize and export logger instance", () => {
|
32
|
+
const adapter = new LogTapeAdapter();
|
33
|
+
const logger = adapter.logger;
|
34
|
+
|
35
|
+
expect(logger).toBeDefined();
|
36
|
+
expect(Array.isArray(logger.category)).toBe(true);
|
37
|
+
expect(logger.category).toHaveLength(0);
|
38
|
+
expect(logger.parent).toBe(null);
|
39
|
+
expect(typeof logger.debug).toBe("function");
|
40
|
+
expect(typeof logger.info).toBe("function");
|
41
|
+
expect(typeof logger.warn).toBe("function");
|
42
|
+
expect(typeof logger.error).toBe("function");
|
43
|
+
expect(typeof logger.fatal).toBe("function");
|
44
|
+
});
|
45
|
+
|
46
|
+
it("should export logger with getLogger function", () => {
|
47
|
+
const adapter = new LogTapeAdapter();
|
48
|
+
const logger = adapter.logger;
|
49
|
+
|
50
|
+
expect(logger).toBeDefined();
|
51
|
+
const categoryLogger = getLogger(["test-category"]);
|
52
|
+
expect(categoryLogger.category).toEqual(["test-category"]);
|
53
|
+
});
|
54
|
+
|
55
|
+
it("should integrate with X framework", () => {
|
56
|
+
const adapter = new LogTapeAdapter();
|
57
|
+
const x = createX()
|
58
|
+
.syncAdapter("logger", () => adapter)
|
59
|
+
.build();
|
60
|
+
|
61
|
+
expect(x._.adapters.logger).toBeInstanceOf(LogTapeAdapter);
|
62
|
+
expect(x.logger).toBeDefined();
|
63
|
+
expect(typeof x.logger.debug).toBe("function");
|
64
|
+
expect(typeof x.logger.info).toBe("function");
|
65
|
+
expect(typeof x.logger.warn).toBe("function");
|
66
|
+
expect(typeof x.logger.error).toBe("function");
|
67
|
+
expect(typeof x.logger.fatal).toBe("function");
|
68
|
+
});
|
69
|
+
|
70
|
+
it("should properly log messages", () => {
|
71
|
+
const logger = getLogger([]);
|
72
|
+
|
73
|
+
expect(() => {
|
74
|
+
logger.debug("Debug message", { level: "debug" });
|
75
|
+
logger.info("Info message", { level: "info" });
|
76
|
+
logger.warn("Warning message", { level: "warn" });
|
77
|
+
logger.error("Error message", { level: "error" });
|
78
|
+
logger.fatal("Fatal message", { level: "fatal" });
|
79
|
+
}).not.toThrow();
|
80
|
+
});
|
81
|
+
|
82
|
+
it("should support getting new logger instances", () => {
|
83
|
+
const newLogger = getLogger(["test-category"]);
|
84
|
+
expect(newLogger).toBeDefined();
|
85
|
+
expect(newLogger.category).toEqual(["test-category"]);
|
86
|
+
});
|
87
|
+
|
88
|
+
it("should support child loggers with categories", () => {
|
89
|
+
const componentLogger = getLogger(["component"]);
|
90
|
+
expect(componentLogger).toBeDefined();
|
91
|
+
expect(componentLogger.category).toEqual(["component"]);
|
92
|
+
|
93
|
+
const childLogger = getLogger(["component", "test"]);
|
94
|
+
expect(childLogger).toBeDefined();
|
95
|
+
expect(childLogger.category).toEqual(["component", "test"]);
|
96
|
+
// Logtape maintains parent relationships
|
97
|
+
expect(childLogger.parent).toBeDefined();
|
98
|
+
expect(childLogger.parent?.category).toEqual(["component"]);
|
99
|
+
});
|
100
|
+
|
101
|
+
it("should support with method for adding context", () => {
|
102
|
+
const logger = getLogger([]);
|
103
|
+
const loggerWithContext = logger.with({ requestId: "123" });
|
104
|
+
expect(loggerWithContext).toBeDefined();
|
105
|
+
expect(() => {
|
106
|
+
loggerWithContext.info("Test message with context");
|
107
|
+
}).not.toThrow();
|
108
|
+
});
|
109
|
+
|
110
|
+
it("should respect log levels", async () => {
|
111
|
+
const logger = getLogger([]);
|
112
|
+
|
113
|
+
// Configure logger to only show info and above
|
114
|
+
await configure({
|
115
|
+
reset: true,
|
116
|
+
sinks: {
|
117
|
+
console: getConsoleSink(),
|
118
|
+
},
|
119
|
+
loggers: [
|
120
|
+
{
|
121
|
+
category: [],
|
122
|
+
sinks: ["console"],
|
123
|
+
lowestLevel: "info",
|
124
|
+
},
|
125
|
+
],
|
126
|
+
});
|
127
|
+
|
128
|
+
expect(() => {
|
129
|
+
logger.debug("This debug message should be filtered");
|
130
|
+
logger.info("This info message should go through");
|
131
|
+
logger.warn("This warning message should go through");
|
132
|
+
logger.error("This error message should go through");
|
133
|
+
logger.fatal("This fatal message should go through");
|
134
|
+
}).not.toThrow();
|
135
|
+
});
|
136
|
+
|
137
|
+
it("should handle nested child loggers", () => {
|
138
|
+
const level1 = getLogger(["level1"]);
|
139
|
+
const level2 = getLogger(["level1", "level2"]);
|
140
|
+
const level3 = getLogger(["level1", "level2", "level3"]);
|
141
|
+
|
142
|
+
expect(level1.category).toEqual(["level1"]);
|
143
|
+
expect(level2.category).toEqual(["level1", "level2"]);
|
144
|
+
expect(level3.category).toEqual(["level1", "level2", "level3"]);
|
145
|
+
|
146
|
+
// Logtape maintains parent relationships
|
147
|
+
expect(level1.parent).toBeDefined();
|
148
|
+
expect(level1.parent?.category).toEqual([]);
|
149
|
+
expect(level2.parent).toBeDefined();
|
150
|
+
expect(level2.parent?.category).toEqual(["level1"]);
|
151
|
+
expect(level3.parent).toBeDefined();
|
152
|
+
expect(level3.parent?.category).toEqual(["level1", "level2"]);
|
153
|
+
});
|
154
|
+
});
|
package/src/index.ts
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
import { SyncAdapter } from "@xframework/x/adapter";
|
2
|
+
import type { Logger } from "@logtape/logtape";
|
3
|
+
import { getLogger } from "@logtape/logtape";
|
4
|
+
|
5
|
+
export class LogTapeAdapter extends SyncAdapter<Logger> {
|
6
|
+
public logger: Logger;
|
7
|
+
|
8
|
+
constructor() {
|
9
|
+
super();
|
10
|
+
this.logger = getLogger();
|
11
|
+
}
|
12
|
+
|
13
|
+
export(): Logger {
|
14
|
+
return this.logger;
|
15
|
+
}
|
16
|
+
}
|
package/tsconfig.json
ADDED
package/tsup.config.ts
ADDED