@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.
@@ -0,0 +1,22 @@
1
+
2
+ > @xframework/logtape@0.4.0 build /home/runner/work/x/x/packages/@xframework/logtape
3
+ > tsup
4
+
5
+ CLI Building entry: src/index.ts
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.3.5
8
+ CLI Using tsup config: /home/runner/work/x/x/packages/@xframework/logtape/tsup.config.ts
9
+ CLI Target: esnext
10
+ CLI Cleaning output folder
11
+ CJS Build start
12
+ ESM Build start
13
+ CJS dist/index.cjs 1.37 KB
14
+ CJS dist/index.cjs.map 676.00 B
15
+ CJS ⚡️ Build success in 36ms
16
+ ESM dist/index.js 346.00 B
17
+ ESM dist/index.js.map 640.00 B
18
+ ESM ⚡️ Build success in 34ms
19
+ DTS Build start
20
+ DTS ⚡️ Build success in 4163ms
21
+ DTS dist/index.d.cts 247.00 B
22
+ DTS dist/index.d.ts 247.00 B
package/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ # @xframework/logtape
2
+
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 98dd8e4: redesign
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [98dd8e4]
12
+ - @xframework/x@0.4.0
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":[]}
@@ -0,0 +1,10 @@
1
+ import { SyncAdapter } from '@xframework/x/adapter';
2
+ import { Logger } from '@logtape/logtape';
3
+
4
+ declare class LogTapeAdapter extends SyncAdapter<Logger> {
5
+ logger: Logger;
6
+ constructor();
7
+ export(): Logger;
8
+ }
9
+
10
+ export { LogTapeAdapter };
@@ -0,0 +1,10 @@
1
+ import { SyncAdapter } from '@xframework/x/adapter';
2
+ import { Logger } from '@logtape/logtape';
3
+
4
+ declare class LogTapeAdapter extends SyncAdapter<Logger> {
5
+ logger: Logger;
6
+ constructor();
7
+ export(): Logger;
8
+ }
9
+
10
+ export { LogTapeAdapter };
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
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "lib": ["ESNext", "DOM"]
6
+ },
7
+ "include": ["src", "tsup.config.ts"],
8
+ "exclude": ["node_modules", "dist"]
9
+ }
package/tsup.config.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { tsupConfig } from "../../../utils/tsup.config";
2
+
3
+ export default tsupConfig;