lograil 0.1.1 → 0.1.4
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/CHANGELOG.md +105 -1
- package/dist/cjs/context/async-context.browser.d.ts +1 -7
- package/dist/cjs/context/async-context.browser.d.ts.map +1 -1
- package/dist/cjs/context/async-context.browser.js +4 -1
- package/dist/cjs/context/async-context.browser.js.map +1 -1
- package/dist/cjs/context/context.js +1 -1
- package/dist/cjs/context/context.js.map +1 -1
- package/dist/cjs/core/logger.d.ts +2 -0
- package/dist/cjs/core/logger.d.ts.map +1 -1
- package/dist/cjs/core/logger.js +11 -1
- package/dist/cjs/core/logger.js.map +1 -1
- package/dist/cjs/pipeline/formatter.d.ts.map +1 -1
- package/dist/cjs/pipeline/formatter.js +37 -21
- package/dist/cjs/pipeline/formatter.js.map +1 -1
- package/dist/cjs/pipeline/pipeline.d.ts.map +1 -1
- package/dist/cjs/pipeline/pipeline.js +2 -1
- package/dist/cjs/pipeline/pipeline.js.map +1 -1
- package/dist/cjs/pipeline/sampler.d.ts.map +1 -1
- package/dist/cjs/pipeline/sampler.js +5 -0
- package/dist/cjs/pipeline/sampler.js.map +1 -1
- package/dist/cjs/plugin/otel-trace.d.ts.map +1 -1
- package/dist/cjs/plugin/otel-trace.js +4 -7
- package/dist/cjs/plugin/otel-trace.js.map +1 -1
- package/dist/cjs/runtime/electron-binding.d.ts +4 -0
- package/dist/cjs/runtime/electron-binding.d.ts.map +1 -1
- package/dist/cjs/runtime/electron-binding.js +24 -2
- package/dist/cjs/runtime/electron-binding.js.map +1 -1
- package/dist/cjs/runtime/electron.d.ts.map +1 -1
- package/dist/cjs/runtime/electron.js +7 -1
- package/dist/cjs/runtime/electron.js.map +1 -1
- package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -1
- package/dist/cjs/runtime/process-lifecycle.js +11 -0
- package/dist/cjs/runtime/process-lifecycle.js.map +1 -1
- package/dist/cjs/transport/cluster-ipc.d.ts +2 -0
- package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -1
- package/dist/cjs/transport/cluster-ipc.js +53 -5
- package/dist/cjs/transport/cluster-ipc.js.map +1 -1
- package/dist/cjs/transport/console.d.ts.map +1 -1
- package/dist/cjs/transport/console.js +10 -9
- package/dist/cjs/transport/console.js.map +1 -1
- package/dist/cjs/transport/electron-ipc.d.ts +4 -17
- package/dist/cjs/transport/electron-ipc.d.ts.map +1 -1
- package/dist/cjs/transport/electron-ipc.js +42 -73
- package/dist/cjs/transport/electron-ipc.js.map +1 -1
- package/dist/cjs/transport/file.d.ts +3 -1
- package/dist/cjs/transport/file.d.ts.map +1 -1
- package/dist/cjs/transport/file.js +10 -4
- package/dist/cjs/transport/file.js.map +1 -1
- package/dist/cjs/transport/live.js +1 -1
- package/dist/cjs/transport/live.js.map +1 -1
- package/dist/cjs/transport/worker-ipc.d.ts +2 -0
- package/dist/cjs/transport/worker-ipc.d.ts.map +1 -1
- package/dist/cjs/transport/worker-ipc.js +69 -9
- package/dist/cjs/transport/worker-ipc.js.map +1 -1
- package/dist/cjs/types.d.ts +2 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js.map +1 -1
- package/dist/esm/context/async-context.browser.d.ts +1 -7
- package/dist/esm/context/async-context.browser.d.ts.map +1 -1
- package/dist/esm/context/async-context.browser.js +4 -1
- package/dist/esm/context/async-context.browser.js.map +1 -1
- package/dist/esm/context/context.js +1 -1
- package/dist/esm/context/context.js.map +1 -1
- package/dist/esm/core/logger.d.ts +2 -0
- package/dist/esm/core/logger.d.ts.map +1 -1
- package/dist/esm/core/logger.js +11 -1
- package/dist/esm/core/logger.js.map +1 -1
- package/dist/esm/pipeline/formatter.d.ts.map +1 -1
- package/dist/esm/pipeline/formatter.js +37 -21
- package/dist/esm/pipeline/formatter.js.map +1 -1
- package/dist/esm/pipeline/pipeline.d.ts.map +1 -1
- package/dist/esm/pipeline/pipeline.js +2 -1
- package/dist/esm/pipeline/pipeline.js.map +1 -1
- package/dist/esm/pipeline/sampler.d.ts.map +1 -1
- package/dist/esm/pipeline/sampler.js +5 -0
- package/dist/esm/pipeline/sampler.js.map +1 -1
- package/dist/esm/plugin/otel-trace.d.ts.map +1 -1
- package/dist/esm/plugin/otel-trace.js +4 -7
- package/dist/esm/plugin/otel-trace.js.map +1 -1
- package/dist/esm/runtime/electron-binding.d.ts +4 -0
- package/dist/esm/runtime/electron-binding.d.ts.map +1 -1
- package/dist/esm/runtime/electron-binding.js +24 -2
- package/dist/esm/runtime/electron-binding.js.map +1 -1
- package/dist/esm/runtime/electron.d.ts.map +1 -1
- package/dist/esm/runtime/electron.js +7 -1
- package/dist/esm/runtime/electron.js.map +1 -1
- package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -1
- package/dist/esm/runtime/process-lifecycle.js +11 -0
- package/dist/esm/runtime/process-lifecycle.js.map +1 -1
- package/dist/esm/transport/cluster-ipc.d.ts +2 -0
- package/dist/esm/transport/cluster-ipc.d.ts.map +1 -1
- package/dist/esm/transport/cluster-ipc.js +52 -5
- package/dist/esm/transport/cluster-ipc.js.map +1 -1
- package/dist/esm/transport/console.d.ts.map +1 -1
- package/dist/esm/transport/console.js +10 -9
- package/dist/esm/transport/console.js.map +1 -1
- package/dist/esm/transport/electron-ipc.d.ts +4 -17
- package/dist/esm/transport/electron-ipc.d.ts.map +1 -1
- package/dist/esm/transport/electron-ipc.js +42 -71
- package/dist/esm/transport/electron-ipc.js.map +1 -1
- package/dist/esm/transport/file.d.ts +3 -1
- package/dist/esm/transport/file.d.ts.map +1 -1
- package/dist/esm/transport/file.js +10 -4
- package/dist/esm/transport/file.js.map +1 -1
- package/dist/esm/transport/live.js +1 -1
- package/dist/esm/transport/live.js.map +1 -1
- package/dist/esm/transport/worker-ipc.d.ts +2 -0
- package/dist/esm/transport/worker-ipc.d.ts.map +1 -1
- package/dist/esm/transport/worker-ipc.js +68 -9
- package/dist/esm/transport/worker-ipc.js.map +1 -1
- package/dist/esm/types.d.ts +2 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/package.json +12 -3
- package/dist/cjs/transport/rotating-file.d.ts +0 -67
- package/dist/cjs/transport/rotating-file.d.ts.map +0 -1
- package/dist/cjs/transport/rotating-file.js +0 -179
- package/dist/cjs/transport/rotating-file.js.map +0 -1
- package/dist/esm/transport/rotating-file.d.ts +0 -67
- package/dist/esm/transport/rotating-file.d.ts.map +0 -1
- package/dist/esm/transport/rotating-file.js +0 -175
- package/dist/esm/transport/rotating-file.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/worker-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/worker-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,mGAAmG;AACnG,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AACtE,sEAAsE;AACtE,KAAK,aAAa,GAAG;IACnB,WAAW,EAAE,aAAa,CAAC;CAC5B,CAAC;AACF,MAAM,WAAW,yBAAyB;IACxC,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,GAAE,yBAA8B;IAGnD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAUhD,6DAA6D;IAC7D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWrC,KAAK,IAAI,IAAI;CAGd;AACD,MAAM,WAAW,qBAAqB;IACpC,+GAA+G;IAC/G,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,qBAAqB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GACjF,MAAM,IAAI,CAuGZ;AACD,wCAAwC;AACxC,wBAAgB,yBAAyB,IAAI,IAAI,CAKhD"}
|
|
@@ -37,6 +37,19 @@ export class WorkerIpcTransport {
|
|
|
37
37
|
/* No-op. Worker lifecycle is managed by the Worker instance itself. */
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Shared dedup state on globalThis so that multiple bundled copies of this
|
|
42
|
+
* module all share the same registration flag and callbacks.
|
|
43
|
+
*/
|
|
44
|
+
const _DEDUP_WORKER = Symbol('lograil:worker-ipc:dedup');
|
|
45
|
+
function _getWorkerState() {
|
|
46
|
+
if (typeof globalThis !== 'undefined' && _DEDUP_WORKER in globalThis)
|
|
47
|
+
return globalThis[_DEDUP_WORKER];
|
|
48
|
+
const s = { registered: false, ingest: null, onLevelCommand: null };
|
|
49
|
+
if (typeof globalThis !== 'undefined')
|
|
50
|
+
globalThis[_DEDUP_WORKER] = s;
|
|
51
|
+
return s;
|
|
52
|
+
}
|
|
40
53
|
/**
|
|
41
54
|
* Main-thread helper: listen for worker entries and feed them into the
|
|
42
55
|
* provided `ingest` callback (typically `logger.ingestEntry`). Level-change
|
|
@@ -86,7 +99,7 @@ export function registerWorkerReceiver(ingest, options = {}) {
|
|
|
86
99
|
};
|
|
87
100
|
}
|
|
88
101
|
if ('onmessage' in worker) {
|
|
89
|
-
// Web Worker — dedicated worker onmessage
|
|
102
|
+
// Web Worker — dedicated worker onmessage (single handler, no dedup needed)
|
|
90
103
|
worker.onmessage = handler;
|
|
91
104
|
return () => {
|
|
92
105
|
if (worker.onmessage === handler)
|
|
@@ -95,15 +108,61 @@ export function registerWorkerReceiver(ingest, options = {}) {
|
|
|
95
108
|
}
|
|
96
109
|
}
|
|
97
110
|
// Global self.onmessage — shared worker / fallback
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
111
|
+
// Guard against duplicate registration on the global scope.
|
|
112
|
+
// Use globalThis-based state so multiple bundled copies share the same flag.
|
|
113
|
+
const state = _getWorkerState();
|
|
114
|
+
if (state.registered) {
|
|
115
|
+
// Update the callback so the existing handler processes new loggers
|
|
116
|
+
state.ingest = ingest;
|
|
117
|
+
state.onLevelCommand = onLevelCommand ?? null;
|
|
118
|
+
return () => {
|
|
119
|
+
if (state.ingest === ingest) {
|
|
120
|
+
state.ingest = null;
|
|
121
|
+
state.onLevelCommand = null;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
state.registered = true;
|
|
126
|
+
state.ingest = ingest;
|
|
127
|
+
state.onLevelCommand = onLevelCommand ?? null;
|
|
128
|
+
const globalHandler = (event) => {
|
|
129
|
+
const data = event.data;
|
|
130
|
+
if (data &&
|
|
131
|
+
typeof data === 'object' &&
|
|
132
|
+
'__lograilWorker' in data &&
|
|
133
|
+
data.__lograilWorker === true &&
|
|
134
|
+
'entry' in data) {
|
|
135
|
+
if (state.ingest) {
|
|
136
|
+
state.ingest(data.entry);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else if (isLogLevelCommand(data) && state.onLevelCommand) {
|
|
140
|
+
state.onLevelCommand(normalizeLevel(data.level));
|
|
106
141
|
}
|
|
107
142
|
};
|
|
143
|
+
// Safe access to self — only in environments where self exists
|
|
144
|
+
const targetSelf = typeof self !== 'undefined' ? self : null;
|
|
145
|
+
if (targetSelf) {
|
|
146
|
+
const prevOnMessage = targetSelf.onmessage;
|
|
147
|
+
targetSelf.addEventListener('message', globalHandler);
|
|
148
|
+
return () => {
|
|
149
|
+
state.registered = false;
|
|
150
|
+
state.ingest = null;
|
|
151
|
+
state.onLevelCommand = null;
|
|
152
|
+
targetSelf.removeEventListener('message', globalHandler);
|
|
153
|
+
if (targetSelf.onmessage === globalHandler || targetSelf.onmessage === prevOnMessage) {
|
|
154
|
+
targetSelf.onmessage = prevOnMessage;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
// Fallback for Node environments without self — no-op
|
|
159
|
+
return () => { };
|
|
160
|
+
}
|
|
161
|
+
/** Reset internal state for testing. */
|
|
162
|
+
export function _resetWorkerReceiverState() {
|
|
163
|
+
const state = _getWorkerState();
|
|
164
|
+
state.registered = false;
|
|
165
|
+
state.ingest = null;
|
|
166
|
+
state.onLevelCommand = null;
|
|
108
167
|
}
|
|
109
168
|
//# sourceMappingURL=worker-ipc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-ipc.js","sourceRoot":"","sources":["../../../src/transport/worker-ipc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-ipc.js","sourceRoot":"","sources":["../../../src/transport/worker-ipc.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.d.ts
CHANGED
package/dist/esm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,CAO1D,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,eAAe,EAA8B,YAAY,EAAE,CAAC;AAEzE,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,KAAK,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,YAAY,CAAC;IACxB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC;;oEAEgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAEzD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CASlE;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,IAAI,CAAC;IACnB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;CACrC;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,aAAa,CAO1D,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,eAAe,EAA8B,YAAY,EAAE,CAAC;AAEzE,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,KAAK,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,SAAS,EAAE,YAAY,CAAC;IACxB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC;;oEAEgE;IAChE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,KAAK,CAAC;IACZ,8BAA8B;IAC9B,GAAG,EAAE,KAAK,CAAC;IACX,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAEzD,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CASlE;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,IAAI,CAAC;IACnB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;CACrC;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAO1E"}
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwC;IAC7D,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAmB,CAAC;AAEzE,gBAAgB;AAChB,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,UAAU,CAAC;AAC1D,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwC;IAC7D,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAmB,CAAC;AAEzE,gBAAgB;AAChB,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,UAAU,CAAC;AAC1D,CAAC;AA6DD,gBAAgB;AAChB,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAiC,CAAC,YAAY,KAAK,IAAI;QACvD,KAAiC,CAAC,gBAAgB,KAAK,UAAU,CACnE,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lograil",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"packageManager": "yarn@1.22.22",
|
|
5
5
|
"description": "High-performance, secure universal logging library for Web, Node.js and Electron — first-class runtime support, extensible to other platforms via plugins.",
|
|
6
6
|
"author": "Axetroy <axetroy.dev@gmail.com>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/axetroy/lograil.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/axetroy/lograil#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/axetroy/lograil/issues"
|
|
14
|
+
},
|
|
7
15
|
"type": "module",
|
|
8
16
|
"main": "./dist/cjs/index.js",
|
|
9
17
|
"module": "./dist/esm/index.js",
|
|
@@ -98,7 +106,7 @@
|
|
|
98
106
|
],
|
|
99
107
|
"license": "MIT",
|
|
100
108
|
"peerDependencies": {
|
|
101
|
-
"@opentelemetry/api": "^1.
|
|
109
|
+
"@opentelemetry/api": "^1.9.1"
|
|
102
110
|
},
|
|
103
111
|
"peerDependenciesMeta": {
|
|
104
112
|
"@opentelemetry/api": {
|
|
@@ -107,7 +115,8 @@
|
|
|
107
115
|
},
|
|
108
116
|
"devDependencies": {
|
|
109
117
|
"@eslint/js": "^9.39.5",
|
|
110
|
-
"@
|
|
118
|
+
"@opentelemetry/api": "^1.9.1",
|
|
119
|
+
"@types/node": "^26.4.1",
|
|
111
120
|
"@vitest/coverage-v8": "2.1.9",
|
|
112
121
|
"electron": "^28.0.0",
|
|
113
122
|
"eslint": "^9.39.5",
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { LogEntry } from '../types.js';
|
|
2
|
-
import type { Formatter } from '../pipeline/formatter.js';
|
|
3
|
-
import type { Transport } from './transport.js';
|
|
4
|
-
export interface RotatingFileTransportOptions {
|
|
5
|
-
/** Active (or current-day) log file path, e.g. `/var/log/app.log`. */
|
|
6
|
-
path: string;
|
|
7
|
-
/** Size mode: rotate once the active file exceeds this size in bytes. */
|
|
8
|
-
maxSize?: number;
|
|
9
|
-
/**
|
|
10
|
-
* Maximum number of files in the rotation set.
|
|
11
|
-
* - Size mode: `app.log` + `app.1.log` … (generations). Minimum 2.
|
|
12
|
-
* - Daily mode: `{name}.{YYYY-MM-DD}.01..{maxFiles}.log` per day; when the
|
|
13
|
-
* index would pass `maxFiles` it wraps back to `01` and clears that file.
|
|
14
|
-
* Defaults to 5 (size) or 99 (daily).
|
|
15
|
-
*/
|
|
16
|
-
maxFiles?: number;
|
|
17
|
-
/**
|
|
18
|
-
* Daily mode (default `true`): one dated file per day, split into
|
|
19
|
-
* `01`..`{maxFiles}` indexes. Set `false` for plain size-based generation
|
|
20
|
-
* rotation (`app.log` → `app.1.log` → …) without dates.
|
|
21
|
-
*/
|
|
22
|
-
daily?: boolean;
|
|
23
|
-
/** Override the clock (mainly for testing). Defaults to `new Date()`. */
|
|
24
|
-
now?: () => Date;
|
|
25
|
-
formatter?: Formatter;
|
|
26
|
-
name?: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* File transport with rotation, for the Electron main process (Node.js).
|
|
30
|
-
*
|
|
31
|
-
* Two modes:
|
|
32
|
-
* - **Daily** (default): the active file is
|
|
33
|
-
* `{name}.{YYYY-MM-DD}.{index}.log`, where `index` runs `01`..`maxFiles`
|
|
34
|
-
* (default 99). When it would pass `maxFiles` it wraps back to `01` and
|
|
35
|
-
* that file is cleared — a `maxFiles`-file ring buffer per day. When the
|
|
36
|
-
* local day changes, the index resets to `01` for the new day.
|
|
37
|
-
*/
|
|
38
|
-
export declare class RotatingFileTransport implements Transport {
|
|
39
|
-
readonly name: string;
|
|
40
|
-
readonly formatter: Formatter;
|
|
41
|
-
private readonly path;
|
|
42
|
-
private readonly maxSize;
|
|
43
|
-
private readonly maxFiles;
|
|
44
|
-
private readonly daily;
|
|
45
|
-
private readonly now;
|
|
46
|
-
private handle;
|
|
47
|
-
private queue;
|
|
48
|
-
private size;
|
|
49
|
-
private sizeInitialized;
|
|
50
|
-
private currentDate;
|
|
51
|
-
private index;
|
|
52
|
-
constructor(options: RotatingFileTransportOptions);
|
|
53
|
-
private activePath;
|
|
54
|
-
private ensureHandle;
|
|
55
|
-
private ensureSize;
|
|
56
|
-
private rotateSize;
|
|
57
|
-
/**
|
|
58
|
-
* Move to a new index file. When `clear` is true the target file is
|
|
59
|
-
* truncated first (used both for normal index advancement and for the
|
|
60
|
-
* wrap-to-01, which must clear the stale `01` slot).
|
|
61
|
-
*/
|
|
62
|
-
private rotateToIndex;
|
|
63
|
-
write(_entry: LogEntry, formatted: string): void | Promise<void>;
|
|
64
|
-
flush(): Promise<void>;
|
|
65
|
-
close(): Promise<void>;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=rotating-file.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotating-file.d.ts","sourceRoot":"","sources":["../../../src/transport/rotating-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,4BAA4B;IAC3C,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAaD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,KAAK,CAAK;gBAEN,OAAO,EAAE,4BAA4B;IAkBjD,OAAO,CAAC,UAAU;YAUJ,YAAY;YAOZ,UAAU;YAWV,UAAU;IAuBxB;;;;OAIG;YACW,aAAa;IAqB3B,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RotatingFileTransport = void 0;
|
|
4
|
-
const promises_1 = require("node:fs/promises");
|
|
5
|
-
const node_path_1 = require("node:path");
|
|
6
|
-
const formatter_js_1 = require("../pipeline/formatter.js");
|
|
7
|
-
const DEFAULT_MAX_SIZE = 10 * 1024 * 1024;
|
|
8
|
-
const DEFAULT_MAX_FILES = 5;
|
|
9
|
-
const DEFAULT_MAX_FILES_DAILY = 99;
|
|
10
|
-
function dateStamp(d) {
|
|
11
|
-
const y = d.getFullYear();
|
|
12
|
-
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
13
|
-
const day = String(d.getDate()).padStart(2, '0');
|
|
14
|
-
return `${y}-${m}-${day}`;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* File transport with rotation, for the Electron main process (Node.js).
|
|
18
|
-
*
|
|
19
|
-
* Two modes:
|
|
20
|
-
* - **Daily** (default): the active file is
|
|
21
|
-
* `{name}.{YYYY-MM-DD}.{index}.log`, where `index` runs `01`..`maxFiles`
|
|
22
|
-
* (default 99). When it would pass `maxFiles` it wraps back to `01` and
|
|
23
|
-
* that file is cleared — a `maxFiles`-file ring buffer per day. When the
|
|
24
|
-
* local day changes, the index resets to `01` for the new day.
|
|
25
|
-
*/
|
|
26
|
-
class RotatingFileTransport {
|
|
27
|
-
constructor(options) {
|
|
28
|
-
this.handle = null;
|
|
29
|
-
this.queue = Promise.resolve();
|
|
30
|
-
this.size = 0;
|
|
31
|
-
this.sizeInitialized = false;
|
|
32
|
-
this.index = 1;
|
|
33
|
-
if (!options.path) {
|
|
34
|
-
throw new Error('RotatingFileTransport requires a "path"');
|
|
35
|
-
}
|
|
36
|
-
this.path = options.path;
|
|
37
|
-
this.daily = options.daily ?? true;
|
|
38
|
-
this.maxSize = options.maxSize ?? DEFAULT_MAX_SIZE;
|
|
39
|
-
this.maxFiles = options.maxFiles ?? (this.daily ? DEFAULT_MAX_FILES_DAILY : DEFAULT_MAX_FILES);
|
|
40
|
-
if (!this.daily) {
|
|
41
|
-
this.maxFiles = Math.max(2, this.maxFiles);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
this.maxFiles = Math.max(1, this.maxFiles);
|
|
45
|
-
}
|
|
46
|
-
this.now = options.now ?? (() => new Date());
|
|
47
|
-
this.name = options.name ?? `rotating-file:${options.path}`;
|
|
48
|
-
this.formatter = options.formatter ?? (0, formatter_js_1.createJsonFormatter)();
|
|
49
|
-
}
|
|
50
|
-
activePath() {
|
|
51
|
-
if (!this.daily) {
|
|
52
|
-
return this.path;
|
|
53
|
-
}
|
|
54
|
-
const ext = (0, node_path_1.extname)(this.path);
|
|
55
|
-
const base = ext ? this.path.slice(0, -ext.length) : this.path;
|
|
56
|
-
const idx = String(this.index).padStart(2, '0');
|
|
57
|
-
return `${base}.${this.currentDate}.${idx}${ext}`;
|
|
58
|
-
}
|
|
59
|
-
async ensureHandle() {
|
|
60
|
-
if (!this.handle) {
|
|
61
|
-
await (0, promises_1.mkdir)((0, node_path_1.dirname)(this.activePath()), { recursive: true });
|
|
62
|
-
this.handle = await (0, promises_1.open)(this.activePath(), 'a');
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
async ensureSize() {
|
|
66
|
-
if (this.sizeInitialized)
|
|
67
|
-
return;
|
|
68
|
-
try {
|
|
69
|
-
const st = await (0, promises_1.stat)(this.activePath());
|
|
70
|
-
this.size = st.size;
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
this.size = 0;
|
|
74
|
-
}
|
|
75
|
-
this.sizeInitialized = true;
|
|
76
|
-
}
|
|
77
|
-
async rotateSize() {
|
|
78
|
-
if (this.handle) {
|
|
79
|
-
await this.handle.close();
|
|
80
|
-
this.handle = null;
|
|
81
|
-
}
|
|
82
|
-
const gens = this.maxFiles - 1;
|
|
83
|
-
for (let k = gens; k >= 2; k--) {
|
|
84
|
-
try {
|
|
85
|
-
await (0, promises_1.rename)(`${this.path}.${k - 1}`, `${this.path}.${k}`);
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
/* generation missing — skip */
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
await (0, promises_1.rename)(this.path, `${this.path}.1`);
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
/* nothing to rotate yet */
|
|
96
|
-
}
|
|
97
|
-
this.size = 0;
|
|
98
|
-
this.sizeInitialized = true;
|
|
99
|
-
await this.ensureHandle();
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Move to a new index file. When `clear` is true the target file is
|
|
103
|
-
* truncated first (used both for normal index advancement and for the
|
|
104
|
-
* wrap-to-01, which must clear the stale `01` slot).
|
|
105
|
-
*/
|
|
106
|
-
async rotateToIndex(idx, clear) {
|
|
107
|
-
if (this.handle) {
|
|
108
|
-
await this.handle.close();
|
|
109
|
-
this.handle = null;
|
|
110
|
-
}
|
|
111
|
-
this.index = idx;
|
|
112
|
-
if (clear) {
|
|
113
|
-
try {
|
|
114
|
-
await (0, promises_1.truncate)(this.activePath(), 0);
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
/* file did not exist yet — fine */
|
|
118
|
-
}
|
|
119
|
-
this.size = 0;
|
|
120
|
-
this.sizeInitialized = true;
|
|
121
|
-
}
|
|
122
|
-
await this.ensureHandle();
|
|
123
|
-
if (!clear) {
|
|
124
|
-
await this.ensureSize();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
write(_entry, formatted) {
|
|
128
|
-
const line = formatted + '\n';
|
|
129
|
-
const bytes = Buffer.byteLength(line, 'utf8');
|
|
130
|
-
const task = this.queue
|
|
131
|
-
.then(async () => {
|
|
132
|
-
if (!this.daily) {
|
|
133
|
-
await this.ensureSize();
|
|
134
|
-
if (this.size + bytes > this.maxSize) {
|
|
135
|
-
await this.rotateSize();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
const today = dateStamp(this.now());
|
|
140
|
-
if (this.currentDate === undefined || today !== this.currentDate) {
|
|
141
|
-
// First open, or a new day: reset to index 01 (resume/append).
|
|
142
|
-
this.currentDate = today;
|
|
143
|
-
this.index = 1;
|
|
144
|
-
await this.rotateToIndex(1, false);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
await this.ensureSize();
|
|
148
|
-
if (this.size + bytes > this.maxSize) {
|
|
149
|
-
let next = this.index + 1;
|
|
150
|
-
if (next > this.maxFiles) {
|
|
151
|
-
next = 1; // wrap and clear the 01 slot
|
|
152
|
-
}
|
|
153
|
-
await this.rotateToIndex(next, true);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
await this.ensureHandle();
|
|
158
|
-
await this.handle.write(line);
|
|
159
|
-
this.size += bytes;
|
|
160
|
-
})
|
|
161
|
-
.catch(() => {
|
|
162
|
-
/* swallow write errors to avoid crashing the app */
|
|
163
|
-
});
|
|
164
|
-
this.queue = task;
|
|
165
|
-
return task;
|
|
166
|
-
}
|
|
167
|
-
async flush() {
|
|
168
|
-
await this.queue;
|
|
169
|
-
}
|
|
170
|
-
async close() {
|
|
171
|
-
await this.queue;
|
|
172
|
-
if (this.handle) {
|
|
173
|
-
await this.handle.close();
|
|
174
|
-
this.handle = null;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
exports.RotatingFileTransport = RotatingFileTransport;
|
|
179
|
-
//# sourceMappingURL=rotating-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotating-file.js","sourceRoot":"","sources":["../../../src/transport/rotating-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { LogEntry } from '../types.js';
|
|
2
|
-
import type { Formatter } from '../pipeline/formatter.js';
|
|
3
|
-
import type { Transport } from './transport.js';
|
|
4
|
-
export interface RotatingFileTransportOptions {
|
|
5
|
-
/** Active (or current-day) log file path, e.g. `/var/log/app.log`. */
|
|
6
|
-
path: string;
|
|
7
|
-
/** Size mode: rotate once the active file exceeds this size in bytes. */
|
|
8
|
-
maxSize?: number;
|
|
9
|
-
/**
|
|
10
|
-
* Maximum number of files in the rotation set.
|
|
11
|
-
* - Size mode: `app.log` + `app.1.log` … (generations). Minimum 2.
|
|
12
|
-
* - Daily mode: `{name}.{YYYY-MM-DD}.01..{maxFiles}.log` per day; when the
|
|
13
|
-
* index would pass `maxFiles` it wraps back to `01` and clears that file.
|
|
14
|
-
* Defaults to 5 (size) or 99 (daily).
|
|
15
|
-
*/
|
|
16
|
-
maxFiles?: number;
|
|
17
|
-
/**
|
|
18
|
-
* Daily mode (default `true`): one dated file per day, split into
|
|
19
|
-
* `01`..`{maxFiles}` indexes. Set `false` for plain size-based generation
|
|
20
|
-
* rotation (`app.log` → `app.1.log` → …) without dates.
|
|
21
|
-
*/
|
|
22
|
-
daily?: boolean;
|
|
23
|
-
/** Override the clock (mainly for testing). Defaults to `new Date()`. */
|
|
24
|
-
now?: () => Date;
|
|
25
|
-
formatter?: Formatter;
|
|
26
|
-
name?: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* File transport with rotation, for the Electron main process (Node.js).
|
|
30
|
-
*
|
|
31
|
-
* Two modes:
|
|
32
|
-
* - **Daily** (default): the active file is
|
|
33
|
-
* `{name}.{YYYY-MM-DD}.{index}.log`, where `index` runs `01`..`maxFiles`
|
|
34
|
-
* (default 99). When it would pass `maxFiles` it wraps back to `01` and
|
|
35
|
-
* that file is cleared — a `maxFiles`-file ring buffer per day. When the
|
|
36
|
-
* local day changes, the index resets to `01` for the new day.
|
|
37
|
-
*/
|
|
38
|
-
export declare class RotatingFileTransport implements Transport {
|
|
39
|
-
readonly name: string;
|
|
40
|
-
readonly formatter: Formatter;
|
|
41
|
-
private readonly path;
|
|
42
|
-
private readonly maxSize;
|
|
43
|
-
private readonly maxFiles;
|
|
44
|
-
private readonly daily;
|
|
45
|
-
private readonly now;
|
|
46
|
-
private handle;
|
|
47
|
-
private queue;
|
|
48
|
-
private size;
|
|
49
|
-
private sizeInitialized;
|
|
50
|
-
private currentDate;
|
|
51
|
-
private index;
|
|
52
|
-
constructor(options: RotatingFileTransportOptions);
|
|
53
|
-
private activePath;
|
|
54
|
-
private ensureHandle;
|
|
55
|
-
private ensureSize;
|
|
56
|
-
private rotateSize;
|
|
57
|
-
/**
|
|
58
|
-
* Move to a new index file. When `clear` is true the target file is
|
|
59
|
-
* truncated first (used both for normal index advancement and for the
|
|
60
|
-
* wrap-to-01, which must clear the stale `01` slot).
|
|
61
|
-
*/
|
|
62
|
-
private rotateToIndex;
|
|
63
|
-
write(_entry: LogEntry, formatted: string): void | Promise<void>;
|
|
64
|
-
flush(): Promise<void>;
|
|
65
|
-
close(): Promise<void>;
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=rotating-file.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rotating-file.d.ts","sourceRoot":"","sources":["../../../src/transport/rotating-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,4BAA4B;IAC3C,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAaD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,KAAK,CAAK;gBAEN,OAAO,EAAE,4BAA4B;IAkBjD,OAAO,CAAC,UAAU;YAUJ,YAAY;YAOZ,UAAU;YAWV,UAAU;IAuBxB;;;;OAIG;YACW,aAAa;IAqB3B,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC1D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
|