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
|
@@ -55,16 +55,13 @@ function createOtelTracePlugin() {
|
|
|
55
55
|
return {
|
|
56
56
|
name: 'otel-trace',
|
|
57
57
|
async onInit() {
|
|
58
|
+
// Dynamic import with a variable literal prevents TS from resolving the
|
|
59
|
+
// optional peer dependency at compile time.
|
|
58
60
|
try {
|
|
59
|
-
|
|
60
|
-
// The specifier is held in a variable so TypeScript does not try to
|
|
61
|
-
// resolve the (optional) module at compile time.
|
|
62
|
-
const specifier = '@opentelemetry/api';
|
|
63
|
-
const mod = (await Promise.resolve(`${specifier}`).then(s => __importStar(require(s))));
|
|
64
|
-
traceApi = mod.trace;
|
|
61
|
+
traceApi = (await Promise.resolve().then(() => __importStar(require('@opentelemetry/api')))).trace;
|
|
65
62
|
}
|
|
66
63
|
catch {
|
|
67
|
-
|
|
64
|
+
// Not installed — plugin stays a no-op.
|
|
68
65
|
}
|
|
69
66
|
},
|
|
70
67
|
onEntry(entry) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"otel-trace.js","sourceRoot":"","sources":["../../../src/plugin/otel-trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"otel-trace.js","sourceRoot":"","sources":["../../../src/plugin/otel-trace.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,sDA6BC;AA7CD;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,qBAAqB;IACnC,IAAI,QAAkC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,CAAC,MAAM;YACV,wEAAwE;YACxE,4CAA4C;YAC5C,IAAI,CAAC;gBACH,QAAQ,GAAG,CAAC,wDAAa,oBAAoB,GAAC,CAAC,CAAC,KAAiC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAe;YACrB,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,6DAA6D;YAC7D,qEAAqE;YACrE,QAAQ;YACR,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG;gBAAE,OAAO,KAAK,CAAC;YACvB,OAAO;gBACL,GAAG,KAAK;gBACR,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;aAC1E,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -12,6 +12,10 @@ export declare function isElectronProcess(): boolean;
|
|
|
12
12
|
* that performs `require('electron')`, so a web bundler can swap this whole
|
|
13
13
|
* module for `electron-binding.browser` (via package.json `browser`) and never
|
|
14
14
|
* touch the Electron binary.
|
|
15
|
+
*
|
|
16
|
+
* When the electron binary is absent (e.g. test environments with
|
|
17
|
+
* `ELECTRON_SKIP_BINARY_DOWNLOAD=1`), returns a minimal stub so the rest of
|
|
18
|
+
* the API remains callable without crashing.
|
|
15
19
|
*/
|
|
16
20
|
export declare function getElectron(): ElectronModule;
|
|
17
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,QAAQ,CAAC,mBAAmB,CAAC;AAIjE,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED
|
|
1
|
+
{"version":3,"file":"electron-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,QAAQ,CAAC,mBAAmB,CAAC;AAIjE,oDAAoD;AACpD,wBAAgB,iBAAiB,IAAI,OAAO,CAK3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,IAAI,cAAc,CA+B5C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,GAAG,GAAG,SAAS,CAOhD"}
|
|
@@ -14,6 +14,10 @@ function isElectronProcess() {
|
|
|
14
14
|
* that performs `require('electron')`, so a web bundler can swap this whole
|
|
15
15
|
* module for `electron-binding.browser` (via package.json `browser`) and never
|
|
16
16
|
* touch the Electron binary.
|
|
17
|
+
*
|
|
18
|
+
* When the electron binary is absent (e.g. test environments with
|
|
19
|
+
* `ELECTRON_SKIP_BINARY_DOWNLOAD=1`), returns a minimal stub so the rest of
|
|
20
|
+
* the API remains callable without crashing.
|
|
17
21
|
*/
|
|
18
22
|
function getElectron() {
|
|
19
23
|
if (cached !== undefined) {
|
|
@@ -26,8 +30,26 @@ function getElectron() {
|
|
|
26
30
|
cached = null;
|
|
27
31
|
throw new Error('electron is only available inside an Electron process');
|
|
28
32
|
}
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
try {
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
35
|
+
cached = require('electron');
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Electron binary not installed (e.g. ELECTRON_SKIP_BINARY_DOWNLOAD=1).
|
|
39
|
+
// Return a minimal stub so the library does not crash at runtime.
|
|
40
|
+
cached = {
|
|
41
|
+
ipcRenderer: { send() { } },
|
|
42
|
+
ipcMain: { on() { }, removeListener() { } },
|
|
43
|
+
app: {
|
|
44
|
+
getPath() {
|
|
45
|
+
return '/tmp';
|
|
46
|
+
},
|
|
47
|
+
on() { },
|
|
48
|
+
removeAllListeners() { },
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
return cached;
|
|
52
|
+
}
|
|
31
53
|
return cached;
|
|
32
54
|
}
|
|
33
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-binding.js","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":";;AAYA,8CAKC;
|
|
1
|
+
{"version":3,"file":"electron-binding.js","sourceRoot":"","sources":["../../../src/runtime/electron-binding.ts"],"names":[],"mappings":";;AAYA,8CAKC;AAYD,kCA+BC;AAQD,wCAOC;AAlED,IAAI,MAAyC,CAAC;AAE9C,oDAAoD;AACpD,SAAgB,iBAAiB;IAC/B,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAgD,CAAC,QAAQ,EAAE,QAAQ,CACvE,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,WAAW;IACzB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAmB,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;QACxE,kEAAkE;QAClE,MAAM,GAAG;YACP,WAAW,EAAE,EAAE,IAAI,KAAI,CAAC,EAAE;YAC1B,OAAO,EAAE,EAAE,EAAE,KAAI,CAAC,EAAE,cAAc,KAAI,CAAC,EAAE;YACzC,GAAG,EAAE;gBACH,OAAO;oBACL,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,EAAE,KAAI,CAAC;gBACP,kBAAkB,KAAI,CAAC;aACxB;SAC2B,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,iBAAiB,EAAE;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG,8BAA8B,CAAC;AAWjG;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"electron.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,YAAY,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAE7E;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,GAAG,8BAA8B,CAAC;AAWjG;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,cAAc,CAW1F"}
|
|
@@ -22,6 +22,12 @@ function isMainProcess() {
|
|
|
22
22
|
function createElectronRuntime(options = {}) {
|
|
23
23
|
return isMainProcess()
|
|
24
24
|
? (0, electron_main_js_1.createElectronMainRuntime)(options)
|
|
25
|
-
: (0, electron_renderer_js_1.createElectronRendererRuntime)(
|
|
25
|
+
: (0, electron_renderer_js_1.createElectronRendererRuntime)({
|
|
26
|
+
ipcRenderer: typeof require === 'function'
|
|
27
|
+
? // eslint-disable-next-line
|
|
28
|
+
require('electron').ipcRenderer
|
|
29
|
+
: undefined,
|
|
30
|
+
...options,
|
|
31
|
+
});
|
|
26
32
|
}
|
|
27
33
|
//# sourceMappingURL=electron.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":";;;AAgCA,
|
|
1
|
+
{"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":";;;AAgCA,sDAWC;AA1CD,yDAA+D;AAE/D,iEAAuE;AAGvE,uDAA+D;AAAtD,6HAAA,yBAAyB,OAAA;AAElC,+DAAuE;AAA9D,qIAAA,6BAA6B,OAAA;AAUtC,SAAS,aAAa;IACpB,yEAAyE;IACzE,wEAAwE;IACxE,wDAAwD;IACxD,OAAO,CACL,OAAO,OAAO,KAAK,WAAW,IAAK,OAAwC,CAAC,IAAI,KAAK,UAAU,CAChG,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,IAAA,4CAAyB,EAAC,OAAO,CAAC;QACpC,CAAC,CAAC,IAAA,oDAA6B,EAAC;YAC5B,WAAW,EACT,OAAO,OAAO,KAAK,UAAU;gBAC3B,CAAC,CAAC,2BAA2B;oBAC3B,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW;gBACjC,CAAC,CAAC,SAAS;YACf,GAAG,OAAO;SACX,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"process-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,cAAc,CAsEvD"}
|
|
@@ -46,10 +46,21 @@ function createProcessLifecycle() {
|
|
|
46
46
|
proc.on('beforeExit', onBeforeExit);
|
|
47
47
|
proc.on('SIGINT', onSigInt);
|
|
48
48
|
proc.on('SIGTERM', onSigTerm);
|
|
49
|
+
// Windows does not emit `SIGTERM`. Register `SIGBREAK` (Ctrl+Break) as a
|
|
50
|
+
// best-effort fallback so `autoFlushOnExit` has a signal hook on that
|
|
51
|
+
// platform. In practice taskkill / OS shutdown kills without emitting any
|
|
52
|
+
// Node signal, so no handler can cover that path — the `beforeExit` hook
|
|
53
|
+
// is the only portable shutdown flush mechanism.
|
|
54
|
+
if (process.platform === 'win32') {
|
|
55
|
+
proc.on('SIGBREAK', onSigInt);
|
|
56
|
+
}
|
|
49
57
|
return () => {
|
|
50
58
|
proc.removeListener('beforeExit', onBeforeExit);
|
|
51
59
|
proc.removeListener('SIGINT', onSigInt);
|
|
52
60
|
proc.removeListener('SIGTERM', onSigTerm);
|
|
61
|
+
if (process.platform === 'win32') {
|
|
62
|
+
proc.removeListener('SIGBREAK', onSigInt);
|
|
63
|
+
}
|
|
53
64
|
};
|
|
54
65
|
},
|
|
55
66
|
onUncaughtError(cb) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":";;AA0BA,
|
|
1
|
+
{"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,4 +33,6 @@ export interface ClusterReceiverOptions {
|
|
|
33
33
|
export declare function registerClusterReceiver(ingest: (entry: LogEntry) => void, options?: ClusterReceiverOptions & {
|
|
34
34
|
onLevelCommand?: (level: number) => void;
|
|
35
35
|
}): () => void;
|
|
36
|
+
/** Reset internal state for testing. */
|
|
37
|
+
export declare function _resetClusterReceiverState(): void;
|
|
36
38
|
//# sourceMappingURL=cluster-ipc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/cluster-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":"cluster-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAShD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,MAAM,WAAW,0BAA0B;IACzC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,OAAO,GAAE,0BAA+B;IAGpD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAkBhD,iEAAiE;IACjE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAatC;AACD,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,sBAAsB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAClF,MAAM,IAAI,CA+CZ;AACD,wCAAwC;AACxC,wBAAgB,0BAA0B,IAAI,IAAI,CAKjD"}
|
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClusterIpcTransport = exports.CLUSTER_IPC_CHANNEL = void 0;
|
|
4
4
|
exports.registerClusterReceiver = registerClusterReceiver;
|
|
5
|
+
exports._resetClusterReceiverState = _resetClusterReceiverState;
|
|
5
6
|
const types_js_1 = require("../types.js");
|
|
7
|
+
// Captured at module load so error reporting never recurses into itself.
|
|
8
|
+
const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
|
|
9
|
+
? console.error.bind(console)
|
|
10
|
+
: () => { };
|
|
6
11
|
/** IPC channel for cluster worker → primary communication. */
|
|
7
12
|
exports.CLUSTER_IPC_CHANNEL = 'lograil:cluster:log';
|
|
8
13
|
/**
|
|
@@ -20,7 +25,9 @@ class ClusterIpcTransport {
|
|
|
20
25
|
if (typeof proc.send === 'function') {
|
|
21
26
|
proc.send(entry, (err) => {
|
|
22
27
|
if (err) {
|
|
23
|
-
|
|
28
|
+
// Primary gone or channel closed — surface the error so users can
|
|
29
|
+
// detect cluster worker communication failures.
|
|
30
|
+
RAW_CONSOLE_ERROR('[lograil] cluster-ipc primary unreachable:', err);
|
|
24
31
|
}
|
|
25
32
|
});
|
|
26
33
|
}
|
|
@@ -44,6 +51,19 @@ class ClusterIpcTransport {
|
|
|
44
51
|
}
|
|
45
52
|
}
|
|
46
53
|
exports.ClusterIpcTransport = ClusterIpcTransport;
|
|
54
|
+
/**
|
|
55
|
+
* Shared dedup state on globalThis so that multiple bundled copies of this
|
|
56
|
+
* module all share the same registration flag and callbacks.
|
|
57
|
+
*/
|
|
58
|
+
const _DEDUP_CLUSTER = Symbol('lograil:cluster-ipc:dedup');
|
|
59
|
+
function _getClusterState() {
|
|
60
|
+
if (typeof globalThis !== 'undefined' && _DEDUP_CLUSTER in globalThis)
|
|
61
|
+
return globalThis[_DEDUP_CLUSTER];
|
|
62
|
+
const s = { registered: false, ingest: null, onLevelCommand: null };
|
|
63
|
+
if (typeof globalThis !== 'undefined')
|
|
64
|
+
globalThis[_DEDUP_CLUSTER] = s;
|
|
65
|
+
return s;
|
|
66
|
+
}
|
|
47
67
|
/**
|
|
48
68
|
* Primary-side helper: listen on the cluster IPC channel and feed received
|
|
49
69
|
* worker entries into the provided `ingest` callback (typically
|
|
@@ -55,22 +75,50 @@ function registerClusterReceiver(ingest, options = {}) {
|
|
|
55
75
|
const proc = process;
|
|
56
76
|
if (!proc.on || !proc.removeListener)
|
|
57
77
|
return () => { };
|
|
78
|
+
// Guard against duplicate registration on the same process.
|
|
79
|
+
// Use globalThis-based state so multiple bundled copies share the same flag.
|
|
80
|
+
const state = _getClusterState();
|
|
81
|
+
if (state.registered) {
|
|
82
|
+
// Update the callback so the existing handler processes new loggers
|
|
83
|
+
state.ingest = ingest;
|
|
84
|
+
state.onLevelCommand = onLevelCommand ?? null;
|
|
85
|
+
return () => {
|
|
86
|
+
if (state.ingest === ingest) {
|
|
87
|
+
state.ingest = null;
|
|
88
|
+
state.onLevelCommand = null;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
state.registered = true;
|
|
93
|
+
state.ingest = ingest;
|
|
94
|
+
state.onLevelCommand = onLevelCommand ?? null;
|
|
58
95
|
const handler = (message) => {
|
|
59
|
-
if ((0, types_js_1.isLogLevelCommand)(message)) {
|
|
60
|
-
onLevelCommand
|
|
96
|
+
if (state.onLevelCommand && (0, types_js_1.isLogLevelCommand)(message)) {
|
|
97
|
+
state.onLevelCommand((0, types_js_1.normalizeLevel)(message.level));
|
|
61
98
|
return;
|
|
62
99
|
}
|
|
63
|
-
if (
|
|
100
|
+
if (state.ingest &&
|
|
101
|
+
message &&
|
|
64
102
|
typeof message === 'object' &&
|
|
65
103
|
'level' in message &&
|
|
66
104
|
'message' in message &&
|
|
67
105
|
'timestamp' in message) {
|
|
68
|
-
ingest(message);
|
|
106
|
+
state.ingest(message);
|
|
69
107
|
}
|
|
70
108
|
};
|
|
71
109
|
proc.on('message', handler);
|
|
72
110
|
return () => {
|
|
111
|
+
state.registered = false;
|
|
112
|
+
state.ingest = null;
|
|
113
|
+
state.onLevelCommand = null;
|
|
73
114
|
proc.removeListener?.('message', handler);
|
|
74
115
|
};
|
|
75
116
|
}
|
|
117
|
+
/** Reset internal state for testing. */
|
|
118
|
+
function _resetClusterReceiverState() {
|
|
119
|
+
const state = _getClusterState();
|
|
120
|
+
state.registered = false;
|
|
121
|
+
state.ingest = null;
|
|
122
|
+
state.onLevelCommand = null;
|
|
123
|
+
}
|
|
76
124
|
//# sourceMappingURL=cluster-ipc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAwBhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAClE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,OAAO,CAAC,SAAS,CAA+C;gBAEpD,OAAO,GAAE,uBAA4B;IAiBjD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIhD"}
|
|
@@ -13,6 +13,15 @@ const realConsole = {
|
|
|
13
13
|
error: console.error.bind(console),
|
|
14
14
|
log: console.log.bind(console),
|
|
15
15
|
};
|
|
16
|
+
/** Default method mapping shared across all ConsoleTransport instances. */
|
|
17
|
+
const DEFAULT_METHOD_MAP = {
|
|
18
|
+
trace: realConsole.trace,
|
|
19
|
+
debug: realConsole.debug,
|
|
20
|
+
info: realConsole.info,
|
|
21
|
+
warn: realConsole.warn,
|
|
22
|
+
error: realConsole.error,
|
|
23
|
+
fatal: realConsole.error,
|
|
24
|
+
};
|
|
16
25
|
/**
|
|
17
26
|
* Writes log entries to the global `console`. Suitable for both Web and
|
|
18
27
|
* Node/Electron runtimes.
|
|
@@ -21,15 +30,7 @@ class ConsoleTransport {
|
|
|
21
30
|
constructor(options = {}) {
|
|
22
31
|
this.name = options.name ?? 'console';
|
|
23
32
|
this.formatter = options.formatter ?? (0, formatter_js_1.createLineFormatter)();
|
|
24
|
-
this.methodMap = {
|
|
25
|
-
trace: realConsole.trace,
|
|
26
|
-
debug: realConsole.debug,
|
|
27
|
-
info: realConsole.info,
|
|
28
|
-
warn: realConsole.warn,
|
|
29
|
-
error: realConsole.error,
|
|
30
|
-
fatal: realConsole.error,
|
|
31
|
-
...options.methodMap,
|
|
32
|
-
};
|
|
33
|
+
this.methodMap = { ...DEFAULT_METHOD_MAP, ...options.methodMap };
|
|
33
34
|
// Route the requested levels to stderr (console.error). Applied after
|
|
34
35
|
// `methodMap` so an explicitly provided method for a level is not silently
|
|
35
36
|
// overridden. Defaults to empty — the default `methodMap` already sends
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":";;;AAEA,2DAA+D;AAG/D,8EAA8E;AAC9E,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;CAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":";;;AAEA,2DAA+D;AAG/D,8EAA8E;AAC9E,4EAA4E;AAC5E,sEAAsE;AACtE,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;CAC/B,CAAC;AAEF,2EAA2E;AAC3E,MAAM,kBAAkB,GAAiD;IACvE,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,IAAI,EAAE,WAAW,CAAC,IAAI;IACtB,KAAK,EAAE,WAAW,CAAC,KAAK;IACxB,KAAK,EAAE,WAAW,CAAC,KAAK;CACzB,CAAC;AAgBF;;;GAGG;AACH,MAAa,gBAAgB;IAM3B,YAAY,UAAmC,EAAE;QAC/C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAA,kCAAmB,GAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC,SAAS,EAG7D,CAAC;QACF,sEAAsE;QACtE,2EAA2E;QAC3E,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,SAAiB;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC;QAC9D,EAAE,CAAC,SAAS,CAAC,CAAC;IAChB,CAAC;CACF;AA3BD,4CA2BC"}
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
import type { LogEntry } from '../types.js';
|
|
2
2
|
import type { Transport } from './transport.js';
|
|
3
3
|
import type { IpcRenderer } from 'electron';
|
|
4
|
-
/** Minimal view of
|
|
4
|
+
/** Minimal view of "IpcRenderer" the transport actually needs. */
|
|
5
5
|
type IpcSender = Pick<IpcRenderer, 'send'>;
|
|
6
|
-
/** Shape we probe for at runtime to enable the zero-copy transfer path. */
|
|
7
|
-
type IpcZeroCopySender = IpcSender & {
|
|
8
|
-
postMessage?: (channel: string, message: unknown, transfer?: unknown[]) => void;
|
|
9
|
-
};
|
|
10
|
-
/**
|
|
11
|
-
* Serialize an entry to an `ArrayBuffer` (UTF-8 JSON). The returned buffer is
|
|
12
|
-
* transferable: hand it to `postMessage(channel, buffer, [buffer])` so the
|
|
13
|
-
* underlying memory is moved across the process boundary instead of being
|
|
14
|
-
* structured-cloned (copied) by Electron.
|
|
15
|
-
*/
|
|
16
|
-
export declare function encodeEntry(entry: LogEntry): ArrayBuffer;
|
|
17
|
-
/** Inverse of {@link encodeEntry}. */
|
|
18
|
-
export declare function decodeEntry(buffer: ArrayBuffer | Uint8Array): LogEntry;
|
|
19
6
|
export declare const LOGRAIL_CHANNEL = "lograil:log";
|
|
20
7
|
/**
|
|
21
8
|
* Metadata key (on `LogEntry.metadata`) used to mark entries that originated
|
|
@@ -34,13 +21,13 @@ export interface ElectronIpcTransportOptions {
|
|
|
34
21
|
* `contextIsolation: true`): pass the `ipcRenderer` obtained from a preload
|
|
35
22
|
* bridge instead of letting the transport call `require('electron')`.
|
|
36
23
|
*/
|
|
37
|
-
ipcRenderer?:
|
|
24
|
+
ipcRenderer?: IpcSender;
|
|
38
25
|
}
|
|
39
26
|
/**
|
|
40
27
|
* Renderer-side transport. Forwards each log entry to the Electron main
|
|
41
28
|
* process over IPC, where it is persisted by the main logger (the renderer
|
|
42
|
-
* itself has no filesystem access).
|
|
43
|
-
*
|
|
29
|
+
* itself has no filesystem access). Uses structured cloning via
|
|
30
|
+
* `ipcRenderer.send()`.
|
|
44
31
|
*/
|
|
45
32
|
export declare class ElectronIpcTransport implements Transport {
|
|
46
33
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,kEAAkE;AAClE,KAAK,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAE3C,
|
|
1
|
+
{"version":3,"file":"electron-ipc.d.ts","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,kEAAkE;AAClE,KAAK,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAE3C,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,MAAM,WAAW,2BAA2B;IAC1C,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,WAAW,CAAC,CAAY;IAChC,OAAO,CAAC,WAAW,CAAC,CAAY;gBAEpB,OAAO,GAAE,2BAAgC;IAMrD,OAAO,CAAC,MAAM;IAYd,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAWhD,8DAA8D;IAC9D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAUtC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAeD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,OAAO,GAAE,kBAAkB,GAAG;IAAE,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC9E,MAAM,IAAI,CA+BZ"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ElectronIpcTransport = exports.RENDERER_PROCESS_MARKER = exports.LOGRAIL_CHANNEL = void 0;
|
|
4
|
-
exports.encodeEntry = encodeEntry;
|
|
5
|
-
exports.decodeEntry = decodeEntry;
|
|
6
4
|
exports.registerIpcReceiver = registerIpcReceiver;
|
|
7
5
|
const types_js_1 = require("../types.js");
|
|
8
6
|
const electron_binding_js_1 = require("../runtime/electron-binding.js");
|
|
@@ -10,23 +8,6 @@ const electron_binding_js_1 = require("../runtime/electron-binding.js");
|
|
|
10
8
|
const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
|
|
11
9
|
? console.error.bind(console)
|
|
12
10
|
: () => { };
|
|
13
|
-
// Reused across calls so we don't allocate an encoder/decoder per log line.
|
|
14
|
-
const encoder = new TextEncoder();
|
|
15
|
-
const decoder = new TextDecoder();
|
|
16
|
-
/**
|
|
17
|
-
* Serialize an entry to an `ArrayBuffer` (UTF-8 JSON). The returned buffer is
|
|
18
|
-
* transferable: hand it to `postMessage(channel, buffer, [buffer])` so the
|
|
19
|
-
* underlying memory is moved across the process boundary instead of being
|
|
20
|
-
* structured-cloned (copied) by Electron.
|
|
21
|
-
*/
|
|
22
|
-
function encodeEntry(entry) {
|
|
23
|
-
return encoder.encode(JSON.stringify(entry)).buffer;
|
|
24
|
-
}
|
|
25
|
-
/** Inverse of {@link encodeEntry}. */
|
|
26
|
-
function decodeEntry(buffer) {
|
|
27
|
-
const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
28
|
-
return JSON.parse(decoder.decode(bytes));
|
|
29
|
-
}
|
|
30
11
|
exports.LOGRAIL_CHANNEL = 'lograil:log';
|
|
31
12
|
/**
|
|
32
13
|
* Metadata key (on `LogEntry.metadata`) used to mark entries that originated
|
|
@@ -37,8 +18,8 @@ exports.RENDERER_PROCESS_MARKER = '__lograilProcess';
|
|
|
37
18
|
/**
|
|
38
19
|
* Renderer-side transport. Forwards each log entry to the Electron main
|
|
39
20
|
* process over IPC, where it is persisted by the main logger (the renderer
|
|
40
|
-
* itself has no filesystem access).
|
|
41
|
-
*
|
|
21
|
+
* itself has no filesystem access). Uses structured cloning via
|
|
22
|
+
* `ipcRenderer.send()`.
|
|
42
23
|
*/
|
|
43
24
|
class ElectronIpcTransport {
|
|
44
25
|
constructor(options = {}) {
|
|
@@ -64,20 +45,10 @@ class ElectronIpcTransport {
|
|
|
64
45
|
if (!ipc)
|
|
65
46
|
return;
|
|
66
47
|
try {
|
|
67
|
-
|
|
68
|
-
if (typeof sender.postMessage === 'function') {
|
|
69
|
-
// Zero-copy path: serialize once, then transfer the buffer's ownership
|
|
70
|
-
// across the process boundary (no structured-clone of the object graph).
|
|
71
|
-
const buf = encodeEntry(entry);
|
|
72
|
-
sender.postMessage(this.channel, buf, [buf]);
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// Fallback: Electron structured-clones the whole entry object.
|
|
76
|
-
ipc.send(this.channel, entry);
|
|
77
|
-
}
|
|
48
|
+
ipc.send(this.channel, entry);
|
|
78
49
|
}
|
|
79
50
|
catch (err) {
|
|
80
|
-
// Report IPC failure so users can diagnose renderer
|
|
51
|
+
// Report IPC failure so users can diagnose renderer -> main delivery issues.
|
|
81
52
|
RAW_CONSOLE_ERROR(`[lograil] ipc transport (${this.name}) send failed:`, err);
|
|
82
53
|
}
|
|
83
54
|
}
|
|
@@ -88,21 +59,28 @@ class ElectronIpcTransport {
|
|
|
88
59
|
return;
|
|
89
60
|
const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
|
|
90
61
|
try {
|
|
91
|
-
|
|
92
|
-
if (typeof sender.postMessage === 'function') {
|
|
93
|
-
const buf = encoder.encode(JSON.stringify(cmd)).buffer;
|
|
94
|
-
sender.postMessage(this.channel, buf, [buf]);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
ipc.send(this.channel, cmd);
|
|
98
|
-
}
|
|
62
|
+
ipc.send(this.channel, cmd);
|
|
99
63
|
}
|
|
100
64
|
catch {
|
|
101
|
-
/* silently drop
|
|
65
|
+
/* silently drop - command loss is not fatal */
|
|
102
66
|
}
|
|
103
67
|
}
|
|
104
68
|
}
|
|
105
69
|
exports.ElectronIpcTransport = ElectronIpcTransport;
|
|
70
|
+
/**
|
|
71
|
+
* Shared dedup state on globalThis so that multiple bundled copies of this
|
|
72
|
+
* module (e.g. from node_modules hoisting or chunk splitting) all share the
|
|
73
|
+
* same registration set instead of each keeping their own independent one.
|
|
74
|
+
*/
|
|
75
|
+
const _DEDUP_ELECTRON = Symbol('lograil:electron-ipc:dedup');
|
|
76
|
+
function _getRegisteredChannels() {
|
|
77
|
+
if (typeof globalThis !== 'undefined' && _DEDUP_ELECTRON in globalThis)
|
|
78
|
+
return globalThis[_DEDUP_ELECTRON];
|
|
79
|
+
const s = new Set();
|
|
80
|
+
if (typeof globalThis !== 'undefined')
|
|
81
|
+
globalThis[_DEDUP_ELECTRON] = s;
|
|
82
|
+
return s;
|
|
83
|
+
}
|
|
106
84
|
/**
|
|
107
85
|
* Main-side helper: listen on the IPC channel and feed received renderer
|
|
108
86
|
* entries into the provided `ingest` callback (typically `logger.ingestEntry`).
|
|
@@ -115,39 +93,30 @@ function registerIpcReceiver(ingest, options = {}) {
|
|
|
115
93
|
// `electron` is only present in a main process; resolve it lazily.
|
|
116
94
|
const ipcMain = (0, electron_binding_js_1.getElectron)().ipcMain;
|
|
117
95
|
const handler = (_event, payload) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if ((0, types_js_1.isLogLevelCommand)(decoded)) {
|
|
123
|
-
onLevelCommand?.((0, types_js_1.normalizeLevel)(decoded.level));
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const entry = decoded;
|
|
127
|
-
ingest({
|
|
128
|
-
...entry,
|
|
129
|
-
metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
catch {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
const data = payload;
|
|
138
|
-
if ((0, types_js_1.isLogLevelCommand)(data)) {
|
|
139
|
-
onLevelCommand?.((0, types_js_1.normalizeLevel)(data.level));
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const entry = data;
|
|
143
|
-
// Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
|
|
144
|
-
ingest({
|
|
145
|
-
...entry,
|
|
146
|
-
metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
|
|
147
|
-
});
|
|
96
|
+
const data = payload;
|
|
97
|
+
if ((0, types_js_1.isLogLevelCommand)(data)) {
|
|
98
|
+
onLevelCommand?.((0, types_js_1.normalizeLevel)(data.level));
|
|
99
|
+
return;
|
|
148
100
|
}
|
|
101
|
+
const entry = data;
|
|
102
|
+
// Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
|
|
103
|
+
ingest({
|
|
104
|
+
...entry,
|
|
105
|
+
metadata: { ...entry.metadata, [exports.RENDERER_PROCESS_MARKER]: 'renderer' },
|
|
106
|
+
});
|
|
149
107
|
};
|
|
108
|
+
// Guard against duplicate registration: if this channel is already tracked,
|
|
109
|
+
// do not add another handler (multiple loggers on the same channel would
|
|
110
|
+
// cause each IPC message to be processed once per logger).
|
|
111
|
+
const registeredChannels = _getRegisteredChannels();
|
|
112
|
+
if (registeredChannels.has(channel)) {
|
|
113
|
+
return () => { };
|
|
114
|
+
}
|
|
115
|
+
registeredChannels.add(channel);
|
|
150
116
|
ipcMain.on(channel, handler);
|
|
151
|
-
return () =>
|
|
117
|
+
return () => {
|
|
118
|
+
registeredChannels.delete(channel);
|
|
119
|
+
ipcMain.removeListener(channel, handler);
|
|
120
|
+
};
|
|
152
121
|
}
|
|
153
122
|
//# sourceMappingURL=electron-ipc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":";;;AAqHA,kDAkCC;AApJD,0CAAgE;AAEhE,wEAA6D;AAE7D,yEAAyE;AACzE,MAAM,iBAAiB,GACrB,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;IACnE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;AAKF,QAAA,eAAe,GAAG,aAAa,CAAC;AAE7C;;;;GAIG;AACU,QAAA,uBAAuB,GAAG,kBAAkB,CAAC;AAgB1D;;;;;GAKG;AACH,MAAa,oBAAoB;IAO/B,YAAY,UAAuC,EAAE;QACnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,uBAAe,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAEO,MAAM;QACZ,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,IAAA,iCAAW,GAAE,CAAC,WAAW,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,UAAkB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,6EAA6E;YAC7E,iBAAiB,CAAC,4BAA4B,IAAI,CAAC,IAAI,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,gBAAgB,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,GAAG,GAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACzF,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;CACF;AA/CD,oDA+CC;AAKD;;;;GAIG;AACH,MAAM,eAAe,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAC7D,SAAS,sBAAsB;IAC7B,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,eAAe,IAAI,UAAU;QACpE,OAAO,UAAU,CAAC,eAAqD,CAAgB,CAAC;IAC1F,MAAM,CAAC,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,IAAI,OAAO,UAAU,KAAK,WAAW;QAClC,UAA0C,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AACD;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,MAAiC,EACjC,UAA6E,EAAE;IAE/E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,uBAAe,CAAC;IACnD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9C,mEAAmE;IACnE,MAAM,OAAO,GAAG,IAAA,iCAAW,GAAE,CAAC,OAAO,CAAC;IACtC,MAAM,OAAO,GAAG,CAAC,MAAe,EAAE,OAAgB,EAAQ,EAAE;QAC1D,MAAM,IAAI,GAAG,OAAqC,CAAC;QACnD,IAAI,IAAA,4BAAiB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,cAAc,EAAE,CAAC,IAAA,yBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAgB,CAAC;QAC/B,8EAA8E;QAC9E,MAAM,CAAC;YACL,GAAG,KAAK;YACR,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,+BAAuB,CAAC,EAAE,UAAU,EAAE;SACvE,CAAC,CAAC;IACL,CAAC,CAAC;IACF,4EAA4E;IAC5E,yEAAyE;IACzE,2DAA2D;IAC3D,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,CAAC;IACpD,IAAI,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAClB,CAAC;IACD,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,GAAG,EAAE;QACV,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -142,6 +142,8 @@ export declare class FileTransport implements Transport {
|
|
|
142
142
|
readonly name: string;
|
|
143
143
|
readonly formatter: Formatter;
|
|
144
144
|
readonly filter?: (entry: LogEntry) => boolean;
|
|
145
|
+
/** Optional error hook, forwarded to the pipeline's global `onLoggerError`. */
|
|
146
|
+
onError?(err: unknown, entry: LogEntry): void;
|
|
145
147
|
/** Effective capacity limits, for diagnostics (e.g. "why was my log file
|
|
146
148
|
* deleted?"). `maxSize`/`maxFiles` reflect the active rotation mode;
|
|
147
149
|
* `maxTotalSize`/`maxAge` are the global caps (`Infinity`/`-1` = unset). */
|
|
@@ -163,7 +165,6 @@ export declare class FileTransport implements Transport {
|
|
|
163
165
|
private readonly owned;
|
|
164
166
|
private readonly createdAt;
|
|
165
167
|
private closed;
|
|
166
|
-
private reportedFirstError;
|
|
167
168
|
private handle;
|
|
168
169
|
private queue;
|
|
169
170
|
private ownedScanned;
|
|
@@ -171,6 +172,7 @@ export declare class FileTransport implements Transport {
|
|
|
171
172
|
private static readonly PERIODIC_INTERVAL_MS;
|
|
172
173
|
private writeCount;
|
|
173
174
|
private lastCheckMs;
|
|
175
|
+
private _lastWrittenEntry;
|
|
174
176
|
constructor(options: FileTransportOptions);
|
|
175
177
|
/** Absolute path of the log directory. */
|
|
176
178
|
getDir(): string;
|