@hardlydifficult/logger 1.0.7 → 1.0.9
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/dist/SessionTracker.d.ts +38 -0
- package/dist/SessionTracker.d.ts.map +1 -0
- package/dist/SessionTracker.js +156 -0
- package/dist/SessionTracker.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SessionEntry, SessionEntryType, SessionInfo } from "./types.js";
|
|
2
|
+
export interface SessionTrackerOptions {
|
|
3
|
+
/** Directory to store session JSONL files. */
|
|
4
|
+
stateDirectory: string;
|
|
5
|
+
/** Subdirectory within stateDirectory (default: "sessions"). */
|
|
6
|
+
subdirectory?: string;
|
|
7
|
+
/** Max age of session files before cleanup, in ms (default: 7 days). */
|
|
8
|
+
maxAgeMs?: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Append-only session logger that writes structured entries to per-session JSONL files.
|
|
12
|
+
*
|
|
13
|
+
* Each session is stored as `{stateDirectory}/{subdirectory}/{sessionId}.jsonl`
|
|
14
|
+
* with one JSON object per line. Designed for debug/analysis — capture full
|
|
15
|
+
* AI interactions (prompts, responses, tool calls) and download via API.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SessionTracker {
|
|
18
|
+
private readonly directory;
|
|
19
|
+
private readonly maxAgeMs;
|
|
20
|
+
constructor(options: SessionTrackerOptions);
|
|
21
|
+
/** Append an entry to a session's JSONL file. Creates the file if needed. */
|
|
22
|
+
append(sessionId: string, entry: {
|
|
23
|
+
type: SessionEntryType;
|
|
24
|
+
data: Record<string, unknown>;
|
|
25
|
+
}): void;
|
|
26
|
+
/** Read all entries for a session. Returns empty array if session doesn't exist. */
|
|
27
|
+
read(sessionId: string): SessionEntry[];
|
|
28
|
+
/** List all tracked sessions with metadata, sorted by lastModifiedAt descending. */
|
|
29
|
+
list(): SessionInfo[];
|
|
30
|
+
/** Check if a session file exists. */
|
|
31
|
+
has(sessionId: string): boolean;
|
|
32
|
+
/** Delete a specific session file. Returns true if deleted. */
|
|
33
|
+
delete(sessionId: string): boolean;
|
|
34
|
+
/** Delete session files older than maxAgeMs. Returns count of deleted files. */
|
|
35
|
+
cleanup(): number;
|
|
36
|
+
private filePath;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=SessionTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionTracker.d.ts","sourceRoot":"","sources":["../src/SessionTracker.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9E,MAAM,WAAW,qBAAqB;IACpC,8CAA8C;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;;;;GAMG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,qBAAqB;IAc1C,6EAA6E;IAC7E,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;QAAE,IAAI,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC/D,IAAI;IAcP,oFAAoF;IACpF,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAgBvC,oFAAoF;IACpF,IAAI,IAAI,WAAW,EAAE;IAkDrB,sCAAsC;IACtC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,+DAA+D;IAC/D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAalC,gFAAgF;IAChF,OAAO,IAAI,MAAM;IA4BjB,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionTracker = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const DEFAULT_SUBDIRECTORY = "sessions";
|
|
7
|
+
const DEFAULT_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
8
|
+
const JSONL_EXTENSION = ".jsonl";
|
|
9
|
+
/**
|
|
10
|
+
* Append-only session logger that writes structured entries to per-session JSONL files.
|
|
11
|
+
*
|
|
12
|
+
* Each session is stored as `{stateDirectory}/{subdirectory}/{sessionId}.jsonl`
|
|
13
|
+
* with one JSON object per line. Designed for debug/analysis — capture full
|
|
14
|
+
* AI interactions (prompts, responses, tool calls) and download via API.
|
|
15
|
+
*/
|
|
16
|
+
class SessionTracker {
|
|
17
|
+
directory;
|
|
18
|
+
maxAgeMs;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.directory = (0, node_path_1.join)(options.stateDirectory, options.subdirectory ?? DEFAULT_SUBDIRECTORY);
|
|
21
|
+
this.maxAgeMs = options.maxAgeMs ?? DEFAULT_MAX_AGE_MS;
|
|
22
|
+
try {
|
|
23
|
+
(0, node_fs_1.mkdirSync)(this.directory, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
/* swallow — directory may already exist or be unwritable */
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Append an entry to a session's JSONL file. Creates the file if needed. */
|
|
30
|
+
append(sessionId, entry) {
|
|
31
|
+
const fullEntry = {
|
|
32
|
+
type: entry.type,
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
data: entry.data,
|
|
35
|
+
};
|
|
36
|
+
const line = `${JSON.stringify(fullEntry)}\n`;
|
|
37
|
+
try {
|
|
38
|
+
(0, node_fs_1.appendFileSync)(this.filePath(sessionId), line);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
/* swallow — same as FilePlugin */
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Read all entries for a session. Returns empty array if session doesn't exist. */
|
|
45
|
+
read(sessionId) {
|
|
46
|
+
const fp = this.filePath(sessionId);
|
|
47
|
+
if (!(0, node_fs_1.existsSync)(fp)) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const content = (0, node_fs_1.readFileSync)(fp, "utf-8");
|
|
52
|
+
return content
|
|
53
|
+
.split("\n")
|
|
54
|
+
.filter((line) => line.length > 0)
|
|
55
|
+
.map((line) => JSON.parse(line));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** List all tracked sessions with metadata, sorted by lastModifiedAt descending. */
|
|
62
|
+
list() {
|
|
63
|
+
if (!(0, node_fs_1.existsSync)(this.directory)) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const files = (0, node_fs_1.readdirSync)(this.directory).filter((f) => f.endsWith(JSONL_EXTENSION));
|
|
68
|
+
const sessions = [];
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
const fp = (0, node_path_1.join)(this.directory, file);
|
|
71
|
+
try {
|
|
72
|
+
const stat = (0, node_fs_1.statSync)(fp);
|
|
73
|
+
const content = (0, node_fs_1.readFileSync)(fp, "utf-8");
|
|
74
|
+
const lines = content.split("\n").filter((l) => l.length > 0);
|
|
75
|
+
let startedAt = stat.birthtime.toISOString();
|
|
76
|
+
if (lines.length > 0) {
|
|
77
|
+
try {
|
|
78
|
+
const first = JSON.parse(lines[0]);
|
|
79
|
+
startedAt = first.timestamp;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
/* use birthtime */
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
sessions.push({
|
|
86
|
+
sessionId: file.slice(0, -JSONL_EXTENSION.length),
|
|
87
|
+
sizeBytes: stat.size,
|
|
88
|
+
startedAt,
|
|
89
|
+
lastModifiedAt: stat.mtime.toISOString(),
|
|
90
|
+
entryCount: lines.length,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
/* skip unreadable files */
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
sessions.sort((a, b) => new Date(b.lastModifiedAt).getTime() -
|
|
98
|
+
new Date(a.lastModifiedAt).getTime());
|
|
99
|
+
return sessions;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Check if a session file exists. */
|
|
106
|
+
has(sessionId) {
|
|
107
|
+
return (0, node_fs_1.existsSync)(this.filePath(sessionId));
|
|
108
|
+
}
|
|
109
|
+
/** Delete a specific session file. Returns true if deleted. */
|
|
110
|
+
delete(sessionId) {
|
|
111
|
+
const fp = this.filePath(sessionId);
|
|
112
|
+
if (!(0, node_fs_1.existsSync)(fp)) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
(0, node_fs_1.unlinkSync)(fp);
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/** Delete session files older than maxAgeMs. Returns count of deleted files. */
|
|
124
|
+
cleanup() {
|
|
125
|
+
if (!(0, node_fs_1.existsSync)(this.directory)) {
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
let deleted = 0;
|
|
129
|
+
const cutoff = Date.now() - this.maxAgeMs;
|
|
130
|
+
try {
|
|
131
|
+
const files = (0, node_fs_1.readdirSync)(this.directory).filter((f) => f.endsWith(JSONL_EXTENSION));
|
|
132
|
+
for (const file of files) {
|
|
133
|
+
const fp = (0, node_path_1.join)(this.directory, file);
|
|
134
|
+
try {
|
|
135
|
+
const stat = (0, node_fs_1.statSync)(fp);
|
|
136
|
+
if (stat.mtime.getTime() < cutoff) {
|
|
137
|
+
(0, node_fs_1.unlinkSync)(fp);
|
|
138
|
+
deleted++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
/* skip */
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
/* swallow */
|
|
148
|
+
}
|
|
149
|
+
return deleted;
|
|
150
|
+
}
|
|
151
|
+
filePath(sessionId) {
|
|
152
|
+
return (0, node_path_1.join)(this.directory, `${sessionId}${JSONL_EXTENSION}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.SessionTracker = SessionTracker;
|
|
156
|
+
//# sourceMappingURL=SessionTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionTracker.js","sourceRoot":"","sources":["../src/SessionTracker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
/** Structured logging with pluggable outputs. */
|
|
1
|
+
/** Structured logging with pluggable outputs and session tracking. */
|
|
2
2
|
export { Logger } from "./Logger.js";
|
|
3
3
|
export { ConsolePlugin, formatEntry } from "./plugins/ConsolePlugin.js";
|
|
4
4
|
export { DiscordPlugin, type DiscordSender } from "./plugins/DiscordPlugin.js";
|
|
5
5
|
export { FilePlugin } from "./plugins/FilePlugin.js";
|
|
6
|
+
export { SessionTracker } from "./SessionTracker.js";
|
|
6
7
|
export type { LogLevel, LogEntry, LoggerPlugin } from "./types.js";
|
|
8
|
+
export type { SessionEntry, SessionEntryType, SessionInfo } from "./types.js";
|
|
9
|
+
export type { SessionTrackerOptions } from "./SessionTracker.js";
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FilePlugin = exports.DiscordPlugin = exports.formatEntry = exports.ConsolePlugin = exports.Logger = void 0;
|
|
4
|
-
/** Structured logging with pluggable outputs. */
|
|
3
|
+
exports.SessionTracker = exports.FilePlugin = exports.DiscordPlugin = exports.formatEntry = exports.ConsolePlugin = exports.Logger = void 0;
|
|
4
|
+
/** Structured logging with pluggable outputs and session tracking. */
|
|
5
5
|
var Logger_js_1 = require("./Logger.js");
|
|
6
6
|
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_js_1.Logger; } });
|
|
7
7
|
var ConsolePlugin_js_1 = require("./plugins/ConsolePlugin.js");
|
|
@@ -11,4 +11,6 @@ var DiscordPlugin_js_1 = require("./plugins/DiscordPlugin.js");
|
|
|
11
11
|
Object.defineProperty(exports, "DiscordPlugin", { enumerable: true, get: function () { return DiscordPlugin_js_1.DiscordPlugin; } });
|
|
12
12
|
var FilePlugin_js_1 = require("./plugins/FilePlugin.js");
|
|
13
13
|
Object.defineProperty(exports, "FilePlugin", { enumerable: true, get: function () { return FilePlugin_js_1.FilePlugin; } });
|
|
14
|
+
var SessionTracker_js_1 = require("./SessionTracker.js");
|
|
15
|
+
Object.defineProperty(exports, "SessionTracker", { enumerable: true, get: function () { return SessionTracker_js_1.SessionTracker; } });
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,sEAAsE;AACtE,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AACf,+DAAwE;AAA/D,iHAAA,aAAa,OAAA;AAAE,+GAAA,WAAW,OAAA;AACnC,+DAA+E;AAAtE,iHAAA,aAAa,OAAA;AACtB,yDAAqD;AAA5C,2GAAA,UAAU,OAAA;AACnB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,4 +11,20 @@ export interface LoggerPlugin {
|
|
|
11
11
|
/** Called for notify() — out-of-band notifications. Optional. */
|
|
12
12
|
notify?(message: string): void;
|
|
13
13
|
}
|
|
14
|
+
/** Entry type discriminator for session log entries. */
|
|
15
|
+
export type SessionEntryType = "session_start" | "ai_request" | "ai_response" | "tool_call" | "tool_result" | "error" | "session_end" | "metadata";
|
|
16
|
+
/** A single entry in a debug session log (persisted as one JSONL line). */
|
|
17
|
+
export interface SessionEntry {
|
|
18
|
+
readonly type: SessionEntryType;
|
|
19
|
+
readonly timestamp: string;
|
|
20
|
+
readonly data: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
/** Summary info about a persisted session file. */
|
|
23
|
+
export interface SessionInfo {
|
|
24
|
+
readonly sessionId: string;
|
|
25
|
+
readonly sizeBytes: number;
|
|
26
|
+
readonly startedAt: string;
|
|
27
|
+
readonly lastModifiedAt: string;
|
|
28
|
+
readonly entryCount: number;
|
|
29
|
+
}
|
|
14
30
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAMD,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,WAAW,GACX,aAAa,GACb,OAAO,GACP,aAAa,GACb,UAAU,CAAC;AAEf,2EAA2E;AAC3E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hardlydifficult/logger",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -21,5 +21,13 @@
|
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
23
|
"node": ">=18.0.0"
|
|
24
|
+
},
|
|
25
|
+
"type": "commonjs",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"import": "./dist/index.js",
|
|
30
|
+
"require": "./dist/index.js"
|
|
31
|
+
}
|
|
24
32
|
}
|
|
25
33
|
}
|