lograil 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/cjs/context/async-context.browser.d.ts +16 -0
- package/dist/cjs/context/async-context.browser.d.ts.map +1 -0
- package/dist/cjs/context/async-context.browser.js +29 -0
- package/dist/cjs/context/async-context.browser.js.map +1 -0
- package/dist/cjs/context/async-context.d.ts +10 -0
- package/dist/cjs/context/async-context.d.ts.map +1 -0
- package/dist/cjs/context/async-context.js +37 -0
- package/dist/cjs/context/async-context.js.map +1 -0
- package/dist/cjs/context/context.d.ts +33 -0
- package/dist/cjs/context/context.d.ts.map +1 -0
- package/dist/cjs/context/context.js +57 -0
- package/dist/cjs/context/context.js.map +1 -0
- package/dist/cjs/context/index.d.ts +3 -0
- package/dist/cjs/context/index.d.ts.map +1 -0
- package/dist/cjs/context/index.js +19 -0
- package/dist/cjs/context/index.js.map +1 -0
- package/dist/cjs/core/entry.d.ts +30 -0
- package/dist/cjs/core/entry.d.ts.map +1 -0
- package/dist/cjs/core/entry.js +37 -0
- package/dist/cjs/core/entry.js.map +1 -0
- package/dist/cjs/core/index.d.ts +7 -0
- package/dist/cjs/core/index.d.ts.map +1 -0
- package/dist/cjs/core/index.js +24 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/core/level.d.ts +12 -0
- package/dist/cjs/core/level.d.ts.map +1 -0
- package/dist/cjs/core/level.js +31 -0
- package/dist/cjs/core/level.js.map +1 -0
- package/dist/cjs/core/logger.d.ts +271 -0
- package/dist/cjs/core/logger.d.ts.map +1 -0
- package/dist/cjs/core/logger.js +751 -0
- package/dist/cjs/core/logger.js.map +1 -0
- package/dist/cjs/core/printf.d.ts +34 -0
- package/dist/cjs/core/printf.d.ts.map +1 -0
- package/dist/cjs/core/printf.js +133 -0
- package/dist/cjs/core/printf.js.map +1 -0
- package/dist/cjs/index.d.ts +40 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +56 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/pipeline/filter.d.ts +10 -0
- package/dist/cjs/pipeline/filter.d.ts.map +1 -0
- package/dist/cjs/pipeline/filter.js +16 -0
- package/dist/cjs/pipeline/filter.js.map +1 -0
- package/dist/cjs/pipeline/formatter.d.ts +19 -0
- package/dist/cjs/pipeline/formatter.d.ts.map +1 -0
- package/dist/cjs/pipeline/formatter.js +183 -0
- package/dist/cjs/pipeline/formatter.js.map +1 -0
- package/dist/cjs/pipeline/index.d.ts +6 -0
- package/dist/cjs/pipeline/index.d.ts.map +1 -0
- package/dist/cjs/pipeline/index.js +22 -0
- package/dist/cjs/pipeline/index.js.map +1 -0
- package/dist/cjs/pipeline/pipeline.d.ts +45 -0
- package/dist/cjs/pipeline/pipeline.d.ts.map +1 -0
- package/dist/cjs/pipeline/pipeline.js +80 -0
- package/dist/cjs/pipeline/pipeline.js.map +1 -0
- package/dist/cjs/pipeline/processor.d.ts +67 -0
- package/dist/cjs/pipeline/processor.d.ts.map +1 -0
- package/dist/cjs/pipeline/processor.js +284 -0
- package/dist/cjs/pipeline/processor.js.map +1 -0
- package/dist/cjs/pipeline/sampler.d.ts +45 -0
- package/dist/cjs/pipeline/sampler.d.ts.map +1 -0
- package/dist/cjs/pipeline/sampler.js +62 -0
- package/dist/cjs/pipeline/sampler.js.map +1 -0
- package/dist/cjs/plugin/index.d.ts +4 -0
- package/dist/cjs/plugin/index.d.ts.map +1 -0
- package/dist/cjs/plugin/index.js +20 -0
- package/dist/cjs/plugin/index.js.map +1 -0
- package/dist/cjs/plugin/manager.d.ts +38 -0
- package/dist/cjs/plugin/manager.d.ts.map +1 -0
- package/dist/cjs/plugin/manager.js +79 -0
- package/dist/cjs/plugin/manager.js.map +1 -0
- package/dist/cjs/plugin/otel-trace.d.ts +19 -0
- package/dist/cjs/plugin/otel-trace.d.ts.map +1 -0
- package/dist/cjs/plugin/otel-trace.js +91 -0
- package/dist/cjs/plugin/otel-trace.js.map +1 -0
- package/dist/cjs/plugin/plugin.d.ts +41 -0
- package/dist/cjs/plugin/plugin.d.ts.map +1 -0
- package/dist/cjs/plugin/plugin.js +3 -0
- package/dist/cjs/plugin/plugin.js.map +1 -0
- package/dist/cjs/runtime/adapter.d.ts +81 -0
- package/dist/cjs/runtime/adapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapter.js +3 -0
- package/dist/cjs/runtime/adapter.js.map +1 -0
- package/dist/cjs/runtime/defaults.d.ts +27 -0
- package/dist/cjs/runtime/defaults.d.ts.map +1 -0
- package/dist/cjs/runtime/defaults.js +30 -0
- package/dist/cjs/runtime/defaults.js.map +1 -0
- package/dist/cjs/runtime/electron-binding.browser.d.ts +10 -0
- package/dist/cjs/runtime/electron-binding.browser.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-binding.browser.js +18 -0
- package/dist/cjs/runtime/electron-binding.browser.js.map +1 -0
- package/dist/cjs/runtime/electron-binding.d.ts +24 -0
- package/dist/cjs/runtime/electron-binding.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-binding.js +49 -0
- package/dist/cjs/runtime/electron-binding.js.map +1 -0
- package/dist/cjs/runtime/electron-lifecycle.d.ts +17 -0
- package/dist/cjs/runtime/electron-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-lifecycle.js +47 -0
- package/dist/cjs/runtime/electron-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/electron-main.d.ts +24 -0
- package/dist/cjs/runtime/electron-main.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-main.js +102 -0
- package/dist/cjs/runtime/electron-main.js.map +1 -0
- package/dist/cjs/runtime/electron-renderer.d.ts +26 -0
- package/dist/cjs/runtime/electron-renderer.d.ts.map +1 -0
- package/dist/cjs/runtime/electron-renderer.js +33 -0
- package/dist/cjs/runtime/electron-renderer.js.map +1 -0
- package/dist/cjs/runtime/electron.d.ts +20 -0
- package/dist/cjs/runtime/electron.d.ts.map +1 -0
- package/dist/cjs/runtime/electron.js +27 -0
- package/dist/cjs/runtime/electron.js.map +1 -0
- package/dist/cjs/runtime/index.d.ts +21 -0
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +41 -0
- package/dist/cjs/runtime/index.js.map +1 -0
- package/dist/cjs/runtime/node.d.ts +27 -0
- package/dist/cjs/runtime/node.d.ts.map +1 -0
- package/dist/cjs/runtime/node.js +126 -0
- package/dist/cjs/runtime/node.js.map +1 -0
- package/dist/cjs/runtime/process-lifecycle.d.ts +13 -0
- package/dist/cjs/runtime/process-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/process-lifecycle.js +80 -0
- package/dist/cjs/runtime/process-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/web-lifecycle.d.ts +13 -0
- package/dist/cjs/runtime/web-lifecycle.d.ts.map +1 -0
- package/dist/cjs/runtime/web-lifecycle.js +39 -0
- package/dist/cjs/runtime/web-lifecycle.js.map +1 -0
- package/dist/cjs/runtime/web.d.ts +14 -0
- package/dist/cjs/runtime/web.d.ts.map +1 -0
- package/dist/cjs/runtime/web.js +61 -0
- package/dist/cjs/runtime/web.js.map +1 -0
- package/dist/cjs/shims/index.browser.d.ts +26 -0
- package/dist/cjs/shims/index.browser.d.ts.map +1 -0
- package/dist/cjs/shims/index.browser.js +67 -0
- package/dist/cjs/shims/index.browser.js.map +1 -0
- package/dist/cjs/shims/index.d.ts +15 -0
- package/dist/cjs/shims/index.d.ts.map +1 -0
- package/dist/cjs/shims/index.js +39 -0
- package/dist/cjs/shims/index.js.map +1 -0
- package/dist/cjs/transport/cluster-ipc.d.ts +36 -0
- package/dist/cjs/transport/cluster-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/cluster-ipc.js +76 -0
- package/dist/cjs/transport/cluster-ipc.js.map +1 -0
- package/dist/cjs/transport/console.d.ts +28 -0
- package/dist/cjs/transport/console.d.ts.map +1 -0
- package/dist/cjs/transport/console.js +48 -0
- package/dist/cjs/transport/console.js.map +1 -0
- package/dist/cjs/transport/electron-ipc.d.ts +69 -0
- package/dist/cjs/transport/electron-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/electron-ipc.js +153 -0
- package/dist/cjs/transport/electron-ipc.js.map +1 -0
- package/dist/cjs/transport/file.d.ts +190 -0
- package/dist/cjs/transport/file.d.ts.map +1 -0
- package/dist/cjs/transport/file.js +666 -0
- package/dist/cjs/transport/file.js.map +1 -0
- package/dist/cjs/transport/index.d.ts +9 -0
- package/dist/cjs/transport/index.d.ts.map +1 -0
- package/dist/cjs/transport/index.js +25 -0
- package/dist/cjs/transport/index.js.map +1 -0
- package/dist/cjs/transport/live.d.ts +72 -0
- package/dist/cjs/transport/live.d.ts.map +1 -0
- package/dist/cjs/transport/live.js +104 -0
- package/dist/cjs/transport/live.js.map +1 -0
- package/dist/cjs/transport/otlp.d.ts +97 -0
- package/dist/cjs/transport/otlp.d.ts.map +1 -0
- package/dist/cjs/transport/otlp.js +194 -0
- package/dist/cjs/transport/otlp.js.map +1 -0
- package/dist/cjs/transport/rotating-file.d.ts +67 -0
- package/dist/cjs/transport/rotating-file.d.ts.map +1 -0
- package/dist/cjs/transport/rotating-file.js +179 -0
- package/dist/cjs/transport/rotating-file.js.map +1 -0
- package/dist/cjs/transport/transport.d.ts +35 -0
- package/dist/cjs/transport/transport.d.ts.map +1 -0
- package/dist/cjs/transport/transport.js +3 -0
- package/dist/cjs/transport/transport.js.map +1 -0
- package/dist/cjs/transport/worker-ipc.d.ts +43 -0
- package/dist/cjs/transport/worker-ipc.d.ts.map +1 -0
- package/dist/cjs/transport/worker-ipc.js +106 -0
- package/dist/cjs/transport/worker-ipc.js.map +1 -0
- package/dist/cjs/types.d.ts +72 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +45 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/context/async-context.browser.d.ts +16 -0
- package/dist/esm/context/async-context.browser.d.ts.map +1 -0
- package/dist/esm/context/async-context.browser.js +25 -0
- package/dist/esm/context/async-context.browser.js.map +1 -0
- package/dist/esm/context/async-context.d.ts +10 -0
- package/dist/esm/context/async-context.d.ts.map +1 -0
- package/dist/esm/context/async-context.js +33 -0
- package/dist/esm/context/async-context.js.map +1 -0
- package/dist/esm/context/context.d.ts +33 -0
- package/dist/esm/context/context.d.ts.map +1 -0
- package/dist/esm/context/context.js +52 -0
- package/dist/esm/context/context.js.map +1 -0
- package/dist/esm/context/index.d.ts +3 -0
- package/dist/esm/context/index.d.ts.map +1 -0
- package/dist/esm/context/index.js +3 -0
- package/dist/esm/context/index.js.map +1 -0
- package/dist/esm/core/entry.d.ts +30 -0
- package/dist/esm/core/entry.d.ts.map +1 -0
- package/dist/esm/core/entry.js +34 -0
- package/dist/esm/core/entry.js.map +1 -0
- package/dist/esm/core/index.d.ts +7 -0
- package/dist/esm/core/index.d.ts.map +1 -0
- package/dist/esm/core/index.js +6 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/level.d.ts +12 -0
- package/dist/esm/core/level.d.ts.map +1 -0
- package/dist/esm/core/level.js +25 -0
- package/dist/esm/core/level.js.map +1 -0
- package/dist/esm/core/logger.d.ts +271 -0
- package/dist/esm/core/logger.d.ts.map +1 -0
- package/dist/esm/core/logger.js +747 -0
- package/dist/esm/core/logger.js.map +1 -0
- package/dist/esm/core/printf.d.ts +34 -0
- package/dist/esm/core/printf.d.ts.map +1 -0
- package/dist/esm/core/printf.js +129 -0
- package/dist/esm/core/printf.js.map +1 -0
- package/dist/esm/index.d.ts +40 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +38 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/pipeline/filter.d.ts +10 -0
- package/dist/esm/pipeline/filter.d.ts.map +1 -0
- package/dist/esm/pipeline/filter.js +11 -0
- package/dist/esm/pipeline/filter.js.map +1 -0
- package/dist/esm/pipeline/formatter.d.ts +19 -0
- package/dist/esm/pipeline/formatter.d.ts.map +1 -0
- package/dist/esm/pipeline/formatter.js +179 -0
- package/dist/esm/pipeline/formatter.js.map +1 -0
- package/dist/esm/pipeline/index.d.ts +6 -0
- package/dist/esm/pipeline/index.d.ts.map +1 -0
- package/dist/esm/pipeline/index.js +6 -0
- package/dist/esm/pipeline/index.js.map +1 -0
- package/dist/esm/pipeline/pipeline.d.ts +45 -0
- package/dist/esm/pipeline/pipeline.d.ts.map +1 -0
- package/dist/esm/pipeline/pipeline.js +76 -0
- package/dist/esm/pipeline/pipeline.js.map +1 -0
- package/dist/esm/pipeline/processor.d.ts +67 -0
- package/dist/esm/pipeline/processor.d.ts.map +1 -0
- package/dist/esm/pipeline/processor.js +277 -0
- package/dist/esm/pipeline/processor.js.map +1 -0
- package/dist/esm/pipeline/sampler.d.ts +45 -0
- package/dist/esm/pipeline/sampler.d.ts.map +1 -0
- package/dist/esm/pipeline/sampler.js +59 -0
- package/dist/esm/pipeline/sampler.js.map +1 -0
- package/dist/esm/plugin/index.d.ts +4 -0
- package/dist/esm/plugin/index.d.ts.map +1 -0
- package/dist/esm/plugin/index.js +4 -0
- package/dist/esm/plugin/index.js.map +1 -0
- package/dist/esm/plugin/manager.d.ts +38 -0
- package/dist/esm/plugin/manager.d.ts.map +1 -0
- package/dist/esm/plugin/manager.js +75 -0
- package/dist/esm/plugin/manager.js.map +1 -0
- package/dist/esm/plugin/otel-trace.d.ts +19 -0
- package/dist/esm/plugin/otel-trace.d.ts.map +1 -0
- package/dist/esm/plugin/otel-trace.js +55 -0
- package/dist/esm/plugin/otel-trace.js.map +1 -0
- package/dist/esm/plugin/plugin.d.ts +41 -0
- package/dist/esm/plugin/plugin.d.ts.map +1 -0
- package/dist/esm/plugin/plugin.js +2 -0
- package/dist/esm/plugin/plugin.js.map +1 -0
- package/dist/esm/runtime/adapter.d.ts +81 -0
- package/dist/esm/runtime/adapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapter.js +2 -0
- package/dist/esm/runtime/adapter.js.map +1 -0
- package/dist/esm/runtime/defaults.d.ts +27 -0
- package/dist/esm/runtime/defaults.d.ts.map +1 -0
- package/dist/esm/runtime/defaults.js +27 -0
- package/dist/esm/runtime/defaults.js.map +1 -0
- package/dist/esm/runtime/electron-binding.browser.d.ts +10 -0
- package/dist/esm/runtime/electron-binding.browser.d.ts.map +1 -0
- package/dist/esm/runtime/electron-binding.browser.js +13 -0
- package/dist/esm/runtime/electron-binding.browser.js.map +1 -0
- package/dist/esm/runtime/electron-binding.d.ts +24 -0
- package/dist/esm/runtime/electron-binding.d.ts.map +1 -0
- package/dist/esm/runtime/electron-binding.js +44 -0
- package/dist/esm/runtime/electron-binding.js.map +1 -0
- package/dist/esm/runtime/electron-lifecycle.d.ts +17 -0
- package/dist/esm/runtime/electron-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/electron-lifecycle.js +44 -0
- package/dist/esm/runtime/electron-lifecycle.js.map +1 -0
- package/dist/esm/runtime/electron-main.d.ts +24 -0
- package/dist/esm/runtime/electron-main.d.ts.map +1 -0
- package/dist/esm/runtime/electron-main.js +99 -0
- package/dist/esm/runtime/electron-main.js.map +1 -0
- package/dist/esm/runtime/electron-renderer.d.ts +26 -0
- package/dist/esm/runtime/electron-renderer.d.ts.map +1 -0
- package/dist/esm/runtime/electron-renderer.js +30 -0
- package/dist/esm/runtime/electron-renderer.js.map +1 -0
- package/dist/esm/runtime/electron.d.ts +20 -0
- package/dist/esm/runtime/electron.d.ts.map +1 -0
- package/dist/esm/runtime/electron.js +21 -0
- package/dist/esm/runtime/electron.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +21 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +29 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/node.d.ts +27 -0
- package/dist/esm/runtime/node.d.ts.map +1 -0
- package/dist/esm/runtime/node.js +123 -0
- package/dist/esm/runtime/node.js.map +1 -0
- package/dist/esm/runtime/process-lifecycle.d.ts +13 -0
- package/dist/esm/runtime/process-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/process-lifecycle.js +77 -0
- package/dist/esm/runtime/process-lifecycle.js.map +1 -0
- package/dist/esm/runtime/web-lifecycle.d.ts +13 -0
- package/dist/esm/runtime/web-lifecycle.d.ts.map +1 -0
- package/dist/esm/runtime/web-lifecycle.js +36 -0
- package/dist/esm/runtime/web-lifecycle.js.map +1 -0
- package/dist/esm/runtime/web.d.ts +14 -0
- package/dist/esm/runtime/web.d.ts.map +1 -0
- package/dist/esm/runtime/web.js +58 -0
- package/dist/esm/runtime/web.js.map +1 -0
- package/dist/esm/shims/index.browser.d.ts +26 -0
- package/dist/esm/shims/index.browser.d.ts.map +1 -0
- package/dist/esm/shims/index.browser.js +54 -0
- package/dist/esm/shims/index.browser.js.map +1 -0
- package/dist/esm/shims/index.d.ts +15 -0
- package/dist/esm/shims/index.d.ts.map +1 -0
- package/dist/esm/shims/index.js +22 -0
- package/dist/esm/shims/index.js.map +1 -0
- package/dist/esm/transport/cluster-ipc.d.ts +36 -0
- package/dist/esm/transport/cluster-ipc.d.ts.map +1 -0
- package/dist/esm/transport/cluster-ipc.js +71 -0
- package/dist/esm/transport/cluster-ipc.js.map +1 -0
- package/dist/esm/transport/console.d.ts +28 -0
- package/dist/esm/transport/console.d.ts.map +1 -0
- package/dist/esm/transport/console.js +44 -0
- package/dist/esm/transport/console.js.map +1 -0
- package/dist/esm/transport/electron-ipc.d.ts +69 -0
- package/dist/esm/transport/electron-ipc.d.ts.map +1 -0
- package/dist/esm/transport/electron-ipc.js +146 -0
- package/dist/esm/transport/electron-ipc.js.map +1 -0
- package/dist/esm/transport/file.d.ts +190 -0
- package/dist/esm/transport/file.d.ts.map +1 -0
- package/dist/esm/transport/file.js +662 -0
- package/dist/esm/transport/file.js.map +1 -0
- package/dist/esm/transport/index.d.ts +9 -0
- package/dist/esm/transport/index.d.ts.map +1 -0
- package/dist/esm/transport/index.js +9 -0
- package/dist/esm/transport/index.js.map +1 -0
- package/dist/esm/transport/live.d.ts +72 -0
- package/dist/esm/transport/live.d.ts.map +1 -0
- package/dist/esm/transport/live.js +100 -0
- package/dist/esm/transport/live.js.map +1 -0
- package/dist/esm/transport/otlp.d.ts +97 -0
- package/dist/esm/transport/otlp.d.ts.map +1 -0
- package/dist/esm/transport/otlp.js +190 -0
- package/dist/esm/transport/otlp.js.map +1 -0
- package/dist/esm/transport/rotating-file.d.ts +67 -0
- package/dist/esm/transport/rotating-file.d.ts.map +1 -0
- package/dist/esm/transport/rotating-file.js +175 -0
- package/dist/esm/transport/rotating-file.js.map +1 -0
- package/dist/esm/transport/transport.d.ts +35 -0
- package/dist/esm/transport/transport.d.ts.map +1 -0
- package/dist/esm/transport/transport.js +2 -0
- package/dist/esm/transport/transport.js.map +1 -0
- package/dist/esm/transport/worker-ipc.d.ts +43 -0
- package/dist/esm/transport/worker-ipc.d.ts.map +1 -0
- package/dist/esm/transport/worker-ipc.js +101 -0
- package/dist/esm/transport/worker-ipc.js.map +1 -0
- package/dist/esm/types.d.ts +72 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +39 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +128 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ConsoleTransport } from '../transport/console.js';
|
|
2
|
+
import { WorkerIpcTransport, registerWorkerReceiver } from '../transport/worker-ipc.js';
|
|
3
|
+
import { createWebLifecycle } from './web-lifecycle.js';
|
|
4
|
+
/**
|
|
5
|
+
* Detect whether the current context is a Web Worker or Node worker_threads.
|
|
6
|
+
* Uses `typeof` checks that are safe in all environments (returns false in
|
|
7
|
+
* non-worker contexts).
|
|
8
|
+
*/
|
|
9
|
+
function isWorkerThread() {
|
|
10
|
+
// Web Worker: WorkerGlobalScope exists and there's no document (rules out window)
|
|
11
|
+
if (typeof WorkerGlobalScope !== 'undefined' &&
|
|
12
|
+
typeof self !== 'undefined' &&
|
|
13
|
+
typeof self.document === 'undefined') {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
// Node worker_threads: parentPort exists with postMessage
|
|
17
|
+
if (typeof globalThis !== 'undefined' &&
|
|
18
|
+
typeof globalThis.parentPort?.postMessage ===
|
|
19
|
+
'function') {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Web runtime (browsers + Node worker_threads). No process id, no filesystem,
|
|
26
|
+
* console only by default. Remote HTTP transports can be added by the
|
|
27
|
+
* application.
|
|
28
|
+
*
|
|
29
|
+
* **Worker support.** When running inside a Web Worker or Node worker_threads
|
|
30
|
+
* worker, the runtime automatically detects the Worker context and sends
|
|
31
|
+
* entries to the main/parent thread via `postMessage()`. The parent thread
|
|
32
|
+
* receives them via `registerWorkerReceiver()` (attached automatically by
|
|
33
|
+
* `createWebRuntime()`).
|
|
34
|
+
*/
|
|
35
|
+
export function createWebRuntime() {
|
|
36
|
+
if (isWorkerThread()) {
|
|
37
|
+
// ── Worker: no file, send to parent via postMessage ──
|
|
38
|
+
return {
|
|
39
|
+
name: 'web',
|
|
40
|
+
now: () => Date.now(),
|
|
41
|
+
pid: () => undefined,
|
|
42
|
+
hasFileSystem: () => false,
|
|
43
|
+
defaultTransports: () => [new ConsoleTransport(), new WorkerIpcTransport()],
|
|
44
|
+
lifecycle: createWebLifecycle(),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// ── Main/parent thread: console only + receives worker logs ──
|
|
48
|
+
return {
|
|
49
|
+
name: 'web',
|
|
50
|
+
now: () => Date.now(),
|
|
51
|
+
pid: () => undefined,
|
|
52
|
+
hasFileSystem: () => false,
|
|
53
|
+
defaultTransports: () => [new ConsoleTransport()],
|
|
54
|
+
attachReceiver: (ingest) => registerWorkerReceiver(ingest),
|
|
55
|
+
lifecycle: createWebLifecycle(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/runtime/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;;GAIG;AACH,SAAS,cAAc;IACrB,kFAAkF;IAClF,IACE,OAAO,iBAAiB,KAAK,WAAW;QACxC,OAAO,IAAI,KAAK,WAAW;QAC3B,OAAQ,IAA+B,CAAC,QAAQ,KAAK,WAAW,EAChE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0DAA0D;IAC1D,IACE,OAAO,UAAU,KAAK,WAAW;QACjC,OAAQ,UAAwD,CAAC,UAAU,EAAE,WAAW;YACtF,UAAU,EACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,wDAAwD;QACxD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;YACpB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;YAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,EAAE,IAAI,kBAAkB,EAAE,CAAC;YAC3E,SAAS,EAAE,kBAAkB,EAAE;SAChC,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,OAAO;QACL,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS;QACpB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;QAC1B,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;QACjD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC;QAC1D,SAAS,EAAE,kBAAkB,EAAE;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser stub for all Node built-in modules used by lograil.
|
|
3
|
+
* Selected over `index.ts` via the `browser` field in `package.json`.
|
|
4
|
+
*
|
|
5
|
+
* Functions that are never called in browser builds (FileTransport) throw
|
|
6
|
+
* descriptive errors. Functions that have reasonable browser defaults
|
|
7
|
+
* (tmpdir) return sensible values.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tmpdir(): string;
|
|
10
|
+
export declare function isClusterWorker(): boolean;
|
|
11
|
+
export declare function basename(p: string, ext?: string): string;
|
|
12
|
+
export declare function dirname(p: string): string;
|
|
13
|
+
export declare function join(...segments: string[]): string;
|
|
14
|
+
export declare function mkdir(_path: string, _options?: unknown): Promise<void>;
|
|
15
|
+
export declare function open(_path: string, _flags?: string): Promise<{
|
|
16
|
+
fd: number;
|
|
17
|
+
close(): Promise<void>;
|
|
18
|
+
}>;
|
|
19
|
+
export declare function rename(_oldPath: string, _newPath: string): Promise<void>;
|
|
20
|
+
export declare function rm(_path: string, _options?: unknown): Promise<void>;
|
|
21
|
+
export declare function stat(_path: string): Promise<{
|
|
22
|
+
size: number;
|
|
23
|
+
mtimeMs: number;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function readdir(_path: string): Promise<string[]>;
|
|
26
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../../../src/shims/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAGD,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzC;AAED,wBAAgB,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAElD;AAKD,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5E;AAED,wBAAsB,IAAI,CACxB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAEjD;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAEpF;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE9D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser stub for all Node built-in modules used by lograil.
|
|
3
|
+
* Selected over `index.ts` via the `browser` field in `package.json`.
|
|
4
|
+
*
|
|
5
|
+
* Functions that are never called in browser builds (FileTransport) throw
|
|
6
|
+
* descriptive errors. Functions that have reasonable browser defaults
|
|
7
|
+
* (tmpdir) return sensible values.
|
|
8
|
+
*/
|
|
9
|
+
// --- os ---
|
|
10
|
+
export function tmpdir() {
|
|
11
|
+
return '/tmp';
|
|
12
|
+
}
|
|
13
|
+
// --- cluster ---
|
|
14
|
+
export function isClusterWorker() {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
// --- path ---
|
|
18
|
+
export function basename(p, ext) {
|
|
19
|
+
const seg = p
|
|
20
|
+
.replace(/[/\\]$/, '')
|
|
21
|
+
.split(/[/\\]/)
|
|
22
|
+
.pop() ?? '';
|
|
23
|
+
if (!ext)
|
|
24
|
+
return seg;
|
|
25
|
+
return seg.endsWith(ext) ? seg.slice(0, -ext.length) : seg;
|
|
26
|
+
}
|
|
27
|
+
export function dirname(p) {
|
|
28
|
+
const idx = Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\'));
|
|
29
|
+
return idx <= 0 ? '.' : p.slice(0, idx);
|
|
30
|
+
}
|
|
31
|
+
export function join(...segments) {
|
|
32
|
+
return segments.filter(Boolean).join('/');
|
|
33
|
+
}
|
|
34
|
+
// --- fs/promises ---
|
|
35
|
+
const NOT_AVAILABLE = 'File system APIs are not available in browser builds';
|
|
36
|
+
export async function mkdir(_path, _options) {
|
|
37
|
+
throw new Error(NOT_AVAILABLE);
|
|
38
|
+
}
|
|
39
|
+
export async function open(_path, _flags) {
|
|
40
|
+
throw new Error(NOT_AVAILABLE);
|
|
41
|
+
}
|
|
42
|
+
export async function rename(_oldPath, _newPath) {
|
|
43
|
+
throw new Error(NOT_AVAILABLE);
|
|
44
|
+
}
|
|
45
|
+
export async function rm(_path, _options) {
|
|
46
|
+
throw new Error(NOT_AVAILABLE);
|
|
47
|
+
}
|
|
48
|
+
export async function stat(_path) {
|
|
49
|
+
throw new Error(NOT_AVAILABLE);
|
|
50
|
+
}
|
|
51
|
+
export async function readdir(_path) {
|
|
52
|
+
throw new Error(NOT_AVAILABLE);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","sourceRoot":"","sources":["../../../src/shims/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,aAAa;AACb,MAAM,UAAU,MAAM;IACpB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe;AACf,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,GAAY;IAC9C,MAAM,GAAG,GACP,CAAC;SACE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,EAAE,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAS;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,QAAkB;IACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,sBAAsB;AACtB,MAAM,aAAa,GAAG,sDAAsD,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,KAAa,EAAE,QAAkB;IAC3D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAa,EACb,MAAe;IAEf,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE,QAAgB;IAC7D,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,KAAa,EAAE,QAAkB;IACxD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAa;IACtC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js API shims — the single entry point for all Node built-in module
|
|
3
|
+
* access in lograil. Every consumer imports from this module instead of
|
|
4
|
+
* `node:*` directly, so browser builds can swap the whole file at once
|
|
5
|
+
* via the `browser` field in `package.json`.
|
|
6
|
+
*
|
|
7
|
+
* If you need a new Node API, add the re-export here **and** the matching
|
|
8
|
+
* stub in `index.browser.ts`. ESLint will flag any direct `node:*` import
|
|
9
|
+
* outside this file.
|
|
10
|
+
*/
|
|
11
|
+
export { tmpdir } from 'node:os';
|
|
12
|
+
export { basename, dirname, join } from 'node:path';
|
|
13
|
+
export { mkdir, open, rename, rm, stat, readdir } from 'node:fs/promises';
|
|
14
|
+
export declare function isClusterWorker(): boolean;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shims/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI1E,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node.js API shims — the single entry point for all Node built-in module
|
|
3
|
+
* access in lograil. Every consumer imports from this module instead of
|
|
4
|
+
* `node:*` directly, so browser builds can swap the whole file at once
|
|
5
|
+
* via the `browser` field in `package.json`.
|
|
6
|
+
*
|
|
7
|
+
* If you need a new Node API, add the re-export here **and** the matching
|
|
8
|
+
* stub in `index.browser.ts`. ESLint will flag any direct `node:*` import
|
|
9
|
+
* outside this file.
|
|
10
|
+
*/
|
|
11
|
+
// --- os ---
|
|
12
|
+
export { tmpdir } from 'node:os';
|
|
13
|
+
// --- path ---
|
|
14
|
+
export { basename, dirname, join } from 'node:path';
|
|
15
|
+
// --- fs/promises ---
|
|
16
|
+
export { mkdir, open, rename, rm, stat, readdir } from 'node:fs/promises';
|
|
17
|
+
// --- cluster ---
|
|
18
|
+
import cluster from 'node:cluster';
|
|
19
|
+
export function isClusterWorker() {
|
|
20
|
+
return cluster.isWorker === true;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shims/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,aAAa;AACb,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEpD,sBAAsB;AACtB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE1E,kBAAkB;AAClB,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LogEntry } from '../types.js';
|
|
2
|
+
import type { Transport } from './transport.js';
|
|
3
|
+
/** IPC channel for cluster worker → primary communication. */
|
|
4
|
+
export declare const CLUSTER_IPC_CHANNEL = "lograil:cluster:log";
|
|
5
|
+
export interface ClusterIpcTransportOptions {
|
|
6
|
+
/** IPC channel used to reach the primary process. */
|
|
7
|
+
channel?: string;
|
|
8
|
+
/** Transport name. */
|
|
9
|
+
name?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Worker-side transport that sends entries to the primary process via
|
|
13
|
+
* `process.send()`. Safe to import in non-cluster environments — the write
|
|
14
|
+
* call is a no-op when `process.send` is unavailable.
|
|
15
|
+
*/
|
|
16
|
+
export declare class ClusterIpcTransport implements Transport {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
constructor(options?: ClusterIpcTransportOptions);
|
|
19
|
+
write(entry: LogEntry, _formatted: string): void;
|
|
20
|
+
/** Send a cross-process level command to the primary process. */
|
|
21
|
+
sendLevelCommand(level: number): void;
|
|
22
|
+
}
|
|
23
|
+
export interface ClusterReceiverOptions {
|
|
24
|
+
/** Reserved for future use. Currently all cluster messages share one channel. */
|
|
25
|
+
channel?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Primary-side helper: listen on the cluster IPC channel and feed received
|
|
29
|
+
* worker entries into the provided `ingest` callback (typically
|
|
30
|
+
* `logger.ingestEntry`). Level-change commands are forwarded to
|
|
31
|
+
* `onLevelCommand` when provided. Returns an unregister function.
|
|
32
|
+
*/
|
|
33
|
+
export declare function registerClusterReceiver(ingest: (entry: LogEntry) => void, options?: ClusterReceiverOptions & {
|
|
34
|
+
onLevelCommand?: (level: number) => void;
|
|
35
|
+
}): () => void;
|
|
36
|
+
//# sourceMappingURL=cluster-ipc.d.ts.map
|
|
@@ -0,0 +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;AAIhD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAEzD,MAAM,WAAW,0BAA0B;IACzC,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,OAAO,GAAE,0BAA+B;IAIpD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAiBhD,iEAAiE;IACjE,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAatC;AAED,MAAM,WAAW,sBAAsB;IACrC,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;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,CA6BZ"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { isLogLevelCommand, normalizeLevel } from '../types.js';
|
|
2
|
+
/** IPC channel for cluster worker → primary communication. */
|
|
3
|
+
export const CLUSTER_IPC_CHANNEL = 'lograil:cluster:log';
|
|
4
|
+
/**
|
|
5
|
+
* Worker-side transport that sends entries to the primary process via
|
|
6
|
+
* `process.send()`. Safe to import in non-cluster environments — the write
|
|
7
|
+
* call is a no-op when `process.send` is unavailable.
|
|
8
|
+
*/
|
|
9
|
+
export class ClusterIpcTransport {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
this.name = options.name ?? 'cluster-ipc';
|
|
12
|
+
}
|
|
13
|
+
write(entry, _formatted) {
|
|
14
|
+
try {
|
|
15
|
+
const proc = process;
|
|
16
|
+
if (typeof proc.send === 'function') {
|
|
17
|
+
proc.send(entry, (err) => {
|
|
18
|
+
if (err) {
|
|
19
|
+
/* primary gone or channel closed — drop silently */
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* process.send unavailable — drop silently */
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Send a cross-process level command to the primary process. */
|
|
29
|
+
sendLevelCommand(level) {
|
|
30
|
+
try {
|
|
31
|
+
const proc = process;
|
|
32
|
+
if (typeof proc.send === 'function') {
|
|
33
|
+
const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
|
|
34
|
+
proc.send(cmd);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
/* process.send unavailable — drop silently */
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Primary-side helper: listen on the cluster IPC channel and feed received
|
|
44
|
+
* worker entries into the provided `ingest` callback (typically
|
|
45
|
+
* `logger.ingestEntry`). Level-change commands are forwarded to
|
|
46
|
+
* `onLevelCommand` when provided. Returns an unregister function.
|
|
47
|
+
*/
|
|
48
|
+
export function registerClusterReceiver(ingest, options = {}) {
|
|
49
|
+
const onLevelCommand = options.onLevelCommand;
|
|
50
|
+
const proc = process;
|
|
51
|
+
if (!proc.on || !proc.removeListener)
|
|
52
|
+
return () => { };
|
|
53
|
+
const handler = (message) => {
|
|
54
|
+
if (isLogLevelCommand(message)) {
|
|
55
|
+
onLevelCommand?.(normalizeLevel(message.level));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (message &&
|
|
59
|
+
typeof message === 'object' &&
|
|
60
|
+
'level' in message &&
|
|
61
|
+
'message' in message &&
|
|
62
|
+
'timestamp' in message) {
|
|
63
|
+
ingest(message);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
proc.on('message', handler);
|
|
67
|
+
return () => {
|
|
68
|
+
proc.removeListener?.('message', handler);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=cluster-ipc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster-ipc.js","sourceRoot":"","sources":["../../../src/transport/cluster-ipc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AASzD;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAG9B,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAe,EAAE,UAAkB;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAEZ,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE;oBAC/B,IAAI,GAAG,EAAE,CAAC;wBACR,oDAAoD;oBACtD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,gBAAgB,CAAC,KAAa;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAEZ,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;gBACzF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;CACF;AAOD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAiC,EACjC,UAAiF,EAAE;IAEnF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAC9C,MAAM,IAAI,GAAG,OAGZ,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,CAAC,OAAgB,EAAQ,EAAE;QACzC,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,cAAc,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,IACE,OAAO;YACP,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,IAAI,OAAO;YAClB,SAAS,IAAI,OAAO;YACpB,WAAW,IAAI,OAAO,EACtB,CAAC;YACD,MAAM,CAAC,OAAmB,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { LogEntry, LogLevelName } from '../types.js';
|
|
2
|
+
import type { Formatter } from '../pipeline/formatter.js';
|
|
3
|
+
import type { Transport } from './transport.js';
|
|
4
|
+
export interface ConsoleTransportOptions {
|
|
5
|
+
name?: string;
|
|
6
|
+
formatter?: Formatter;
|
|
7
|
+
/** Map a level to the console method used. */
|
|
8
|
+
methodMap?: Partial<Record<string, (...args: unknown[]) => void>>;
|
|
9
|
+
/**
|
|
10
|
+
* Levels that should be written to `stderr` (via `console.error`). Any level
|
|
11
|
+
* listed here is routed to `console.error` even if `methodMap` maps it
|
|
12
|
+
* elsewhere. Defaults to `['error', 'fatal']` (matching the previous
|
|
13
|
+
* behaviour); add `'warn'` to also send warnings to stderr.
|
|
14
|
+
*/
|
|
15
|
+
stderrLevels?: LogLevelName[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Writes log entries to the global `console`. Suitable for both Web and
|
|
19
|
+
* Node/Electron runtimes.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ConsoleTransport implements Transport {
|
|
22
|
+
readonly name: string;
|
|
23
|
+
readonly formatter: Formatter;
|
|
24
|
+
private methodMap;
|
|
25
|
+
constructor(options?: ConsoleTransportOptions);
|
|
26
|
+
write(entry: LogEntry, formatted: string): void;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=console.d.ts.map
|
|
@@ -0,0 +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;AAchD,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;IAsBjD,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAIhD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createLineFormatter } from '../pipeline/formatter.js';
|
|
2
|
+
// Snapshot the real console methods at module load so that, even if something
|
|
3
|
+
// later redirects the global `console` (see `Logger.redirectConsole`), this
|
|
4
|
+
// transport keeps writing to the original console and never recurses.
|
|
5
|
+
const realConsole = {
|
|
6
|
+
trace: console.trace.bind(console),
|
|
7
|
+
debug: console.debug.bind(console),
|
|
8
|
+
info: console.info.bind(console),
|
|
9
|
+
warn: console.warn.bind(console),
|
|
10
|
+
error: console.error.bind(console),
|
|
11
|
+
log: console.log.bind(console),
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Writes log entries to the global `console`. Suitable for both Web and
|
|
15
|
+
* Node/Electron runtimes.
|
|
16
|
+
*/
|
|
17
|
+
export class ConsoleTransport {
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.name = options.name ?? 'console';
|
|
20
|
+
this.formatter = options.formatter ?? createLineFormatter();
|
|
21
|
+
this.methodMap = {
|
|
22
|
+
trace: realConsole.trace,
|
|
23
|
+
debug: realConsole.debug,
|
|
24
|
+
info: realConsole.info,
|
|
25
|
+
warn: realConsole.warn,
|
|
26
|
+
error: realConsole.error,
|
|
27
|
+
fatal: realConsole.error,
|
|
28
|
+
...options.methodMap,
|
|
29
|
+
};
|
|
30
|
+
// Route the requested levels to stderr (console.error). Applied after
|
|
31
|
+
// `methodMap` so an explicitly provided method for a level is not silently
|
|
32
|
+
// overridden. Defaults to empty — the default `methodMap` already sends
|
|
33
|
+
// `error`/`fatal` to stderr, so opt in with e.g. `stderrLevels: ['warn']`.
|
|
34
|
+
const stderrLevels = options.stderrLevels ?? [];
|
|
35
|
+
for (const level of stderrLevels) {
|
|
36
|
+
this.methodMap[level] = realConsole.error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
write(entry, formatted) {
|
|
40
|
+
const fn = this.methodMap[entry.levelName] ?? realConsole.log;
|
|
41
|
+
fn(formatted);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/transport/console.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;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;AAgBF;;;GAGG;AACH,MAAM,OAAO,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,mBAAmB,EAAE,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,GAAG,OAAO,CAAC,SAAS;SACrB,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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { LogEntry } from '../types.js';
|
|
2
|
+
import type { Transport } from './transport.js';
|
|
3
|
+
import type { IpcRenderer } from 'electron';
|
|
4
|
+
/** Minimal view of `IpcRenderer` the transport actually needs. */
|
|
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
|
+
export declare const LOGRAIL_CHANNEL = "lograil:log";
|
|
20
|
+
/**
|
|
21
|
+
* Metadata key (on `LogEntry.metadata`) used to mark entries that originated
|
|
22
|
+
* in a renderer process and arrived over IPC. The main runtime uses it to
|
|
23
|
+
* route those entries to a dedicated renderer log file.
|
|
24
|
+
*/
|
|
25
|
+
export declare const RENDERER_PROCESS_MARKER = "__lograilProcess";
|
|
26
|
+
export interface ElectronIpcTransportOptions {
|
|
27
|
+
/** IPC channel used to reach the main process. */
|
|
28
|
+
channel?: string;
|
|
29
|
+
/** Transport name. */
|
|
30
|
+
name?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Injected IPC sender. Use this when the renderer cannot reach
|
|
33
|
+
* `require('electron')` itself (e.g. `nodeIntegration: false` +
|
|
34
|
+
* `contextIsolation: true`): pass the `ipcRenderer` obtained from a preload
|
|
35
|
+
* bridge instead of letting the transport call `require('electron')`.
|
|
36
|
+
*/
|
|
37
|
+
ipcRenderer?: IpcZeroCopySender;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Renderer-side transport. Forwards each log entry to the Electron main
|
|
41
|
+
* process over IPC, where it is persisted by the main logger (the renderer
|
|
42
|
+
* itself has no filesystem access). The `electron` module is required lazily
|
|
43
|
+
* so this file is safe to import in non-Electron environments.
|
|
44
|
+
*/
|
|
45
|
+
export declare class ElectronIpcTransport implements Transport {
|
|
46
|
+
readonly name: string;
|
|
47
|
+
readonly channel: string;
|
|
48
|
+
private injectedIpc?;
|
|
49
|
+
private resolvedIpc?;
|
|
50
|
+
constructor(options?: ElectronIpcTransportOptions);
|
|
51
|
+
private getIpc;
|
|
52
|
+
write(entry: LogEntry, _formatted: string): void;
|
|
53
|
+
/** Send a cross-process level command to the main process. */
|
|
54
|
+
sendLevelCommand(level: number): void;
|
|
55
|
+
}
|
|
56
|
+
export interface IpcReceiverOptions {
|
|
57
|
+
channel?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Main-side helper: listen on the IPC channel and feed received renderer
|
|
61
|
+
* entries into the provided `ingest` callback (typically `logger.ingestEntry`).
|
|
62
|
+
* Level-change commands are forwarded to `onLevelCommand` when provided.
|
|
63
|
+
* Returns an unregister function.
|
|
64
|
+
*/
|
|
65
|
+
export declare function registerIpcReceiver(ingest: (entry: LogEntry) => void, options?: IpcReceiverOptions & {
|
|
66
|
+
onLevelCommand?: (level: number) => void;
|
|
67
|
+
}): () => void;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=electron-ipc.d.ts.map
|
|
@@ -0,0 +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,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG,SAAS,GAAG;IACnC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACjF,CAAC;AAMF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW,CAExD;AAED,sCAAsC;AACtC,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,QAAQ,CAGtE;AAED,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,iBAAiB,CAAC;CACjC;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,CAAoB;IACxC,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;IAoBhD,8DAA8D;IAC9D,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;CAgBtC;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,CAsCZ"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { isLogLevelCommand, normalizeLevel } from '../types.js';
|
|
2
|
+
import { getElectron } from '../runtime/electron-binding.js';
|
|
3
|
+
// Captured at module load so error reporting never recurses into itself.
|
|
4
|
+
const RAW_CONSOLE_ERROR = typeof console !== 'undefined' && typeof console.error === 'function'
|
|
5
|
+
? console.error.bind(console)
|
|
6
|
+
: () => { };
|
|
7
|
+
// Reused across calls so we don't allocate an encoder/decoder per log line.
|
|
8
|
+
const encoder = new TextEncoder();
|
|
9
|
+
const decoder = new TextDecoder();
|
|
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 function encodeEntry(entry) {
|
|
17
|
+
return encoder.encode(JSON.stringify(entry)).buffer;
|
|
18
|
+
}
|
|
19
|
+
/** Inverse of {@link encodeEntry}. */
|
|
20
|
+
export function decodeEntry(buffer) {
|
|
21
|
+
const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
22
|
+
return JSON.parse(decoder.decode(bytes));
|
|
23
|
+
}
|
|
24
|
+
export const LOGRAIL_CHANNEL = 'lograil:log';
|
|
25
|
+
/**
|
|
26
|
+
* Metadata key (on `LogEntry.metadata`) used to mark entries that originated
|
|
27
|
+
* in a renderer process and arrived over IPC. The main runtime uses it to
|
|
28
|
+
* route those entries to a dedicated renderer log file.
|
|
29
|
+
*/
|
|
30
|
+
export const RENDERER_PROCESS_MARKER = '__lograilProcess';
|
|
31
|
+
/**
|
|
32
|
+
* Renderer-side transport. Forwards each log entry to the Electron main
|
|
33
|
+
* process over IPC, where it is persisted by the main logger (the renderer
|
|
34
|
+
* itself has no filesystem access). The `electron` module is required lazily
|
|
35
|
+
* so this file is safe to import in non-Electron environments.
|
|
36
|
+
*/
|
|
37
|
+
export class ElectronIpcTransport {
|
|
38
|
+
constructor(options = {}) {
|
|
39
|
+
this.channel = options.channel ?? LOGRAIL_CHANNEL;
|
|
40
|
+
this.name = options.name ?? `ipc:${this.channel}`;
|
|
41
|
+
this.injectedIpc = options.ipcRenderer;
|
|
42
|
+
}
|
|
43
|
+
getIpc() {
|
|
44
|
+
if (this.injectedIpc)
|
|
45
|
+
return this.injectedIpc;
|
|
46
|
+
if (!this.resolvedIpc) {
|
|
47
|
+
try {
|
|
48
|
+
this.resolvedIpc = getElectron().ipcRenderer;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return this.resolvedIpc;
|
|
55
|
+
}
|
|
56
|
+
write(entry, _formatted) {
|
|
57
|
+
const ipc = this.getIpc();
|
|
58
|
+
if (!ipc)
|
|
59
|
+
return;
|
|
60
|
+
try {
|
|
61
|
+
const sender = ipc;
|
|
62
|
+
if (typeof sender.postMessage === 'function') {
|
|
63
|
+
// Zero-copy path: serialize once, then transfer the buffer's ownership
|
|
64
|
+
// across the process boundary (no structured-clone of the object graph).
|
|
65
|
+
const buf = encodeEntry(entry);
|
|
66
|
+
sender.postMessage(this.channel, buf, [buf]);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Fallback: Electron structured-clones the whole entry object.
|
|
70
|
+
ipc.send(this.channel, entry);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
// Report IPC failure so users can diagnose renderer → main delivery issues.
|
|
75
|
+
RAW_CONSOLE_ERROR(`[lograil] ipc transport (${this.name}) send failed:`, err);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** Send a cross-process level command to the main process. */
|
|
79
|
+
sendLevelCommand(level) {
|
|
80
|
+
const ipc = this.getIpc();
|
|
81
|
+
if (!ipc)
|
|
82
|
+
return;
|
|
83
|
+
const cmd = { __lograilCmd: true, __lograilCmdType: 'setLevel', level };
|
|
84
|
+
try {
|
|
85
|
+
const sender = ipc;
|
|
86
|
+
if (typeof sender.postMessage === 'function') {
|
|
87
|
+
const buf = encoder.encode(JSON.stringify(cmd)).buffer;
|
|
88
|
+
sender.postMessage(this.channel, buf, [buf]);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
ipc.send(this.channel, cmd);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
/* silently drop — command loss is not fatal */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Main-side helper: listen on the IPC channel and feed received renderer
|
|
101
|
+
* entries into the provided `ingest` callback (typically `logger.ingestEntry`).
|
|
102
|
+
* Level-change commands are forwarded to `onLevelCommand` when provided.
|
|
103
|
+
* Returns an unregister function.
|
|
104
|
+
*/
|
|
105
|
+
export function registerIpcReceiver(ingest, options = {}) {
|
|
106
|
+
const channel = options.channel ?? LOGRAIL_CHANNEL;
|
|
107
|
+
const onLevelCommand = options.onLevelCommand;
|
|
108
|
+
// `electron` is only present in a main process; resolve it lazily.
|
|
109
|
+
const ipcMain = getElectron().ipcMain;
|
|
110
|
+
const handler = (_event, payload) => {
|
|
111
|
+
if (payload instanceof ArrayBuffer || payload instanceof Uint8Array) {
|
|
112
|
+
// Zero-copy transfer path
|
|
113
|
+
try {
|
|
114
|
+
const decoded = JSON.parse(decoder.decode(payload));
|
|
115
|
+
if (isLogLevelCommand(decoded)) {
|
|
116
|
+
onLevelCommand?.(normalizeLevel(decoded.level));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const entry = decoded;
|
|
120
|
+
ingest({
|
|
121
|
+
...entry,
|
|
122
|
+
metadata: { ...entry.metadata, [RENDERER_PROCESS_MARKER]: 'renderer' },
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const data = payload;
|
|
131
|
+
if (isLogLevelCommand(data)) {
|
|
132
|
+
onLevelCommand?.(normalizeLevel(data.level));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const entry = data;
|
|
136
|
+
// Copy-on-write: mark renderer-origin without mutating a shared/frozen entry.
|
|
137
|
+
ingest({
|
|
138
|
+
...entry,
|
|
139
|
+
metadata: { ...entry.metadata, [RENDERER_PROCESS_MARKER]: 'renderer' },
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
ipcMain.on(channel, handler);
|
|
144
|
+
return () => ipcMain.removeListener(channel, handler);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=electron-ipc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"electron-ipc.js","sourceRoot":"","sources":["../../../src/transport/electron-ipc.ts"],"names":[],"mappings":"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"}
|