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,99 @@
|
|
|
1
|
+
import { ConsoleTransport } from '../transport/console.js';
|
|
2
|
+
import { FileTransport } from '../transport/file.js';
|
|
3
|
+
import { registerIpcReceiver, RENDERER_PROCESS_MARKER } from '../transport/electron-ipc.js';
|
|
4
|
+
import { getElectronApp } from './electron-binding.js';
|
|
5
|
+
import { createElectronLifecycle } from './electron-lifecycle.js';
|
|
6
|
+
import { tmpdir } from '../shims/index.js';
|
|
7
|
+
import { join } from '../shims/index.js';
|
|
8
|
+
import { DEFAULT_FILE_CAPS } from './defaults.js';
|
|
9
|
+
/**
|
|
10
|
+
* Log directory for the Electron main runtime. Prefers Electron's dedicated
|
|
11
|
+
* `logs` path (e.g. `<userData>/logs`, already namespaced by the app name so
|
|
12
|
+
* multiple apps never collide), falling back to `<appData>/Logs` and finally
|
|
13
|
+
* the OS temp dir if Electron is unavailable or `app` is not ready.
|
|
14
|
+
*/
|
|
15
|
+
function defaultElectronLogDir() {
|
|
16
|
+
const app = getElectronApp();
|
|
17
|
+
if (app?.getPath) {
|
|
18
|
+
try {
|
|
19
|
+
return app.getPath('logs');
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
/* app not ready yet — try the next fallback */
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return join(app.getPath('appData'), 'Logs');
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
/* ignore */
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return tmpdir();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Electron **main process** runtime. Owns the filesystem, so by default it
|
|
35
|
+
* persists logs to a rotating file (unless `disableFile`) in addition to the
|
|
36
|
+
* console, and (by default) receives renderer entries over IPC so that all
|
|
37
|
+
* logs — including those produced in renderers — are written here.
|
|
38
|
+
*/
|
|
39
|
+
export function createElectronMainRuntime(options = {}) {
|
|
40
|
+
const pid = typeof process !== 'undefined' ? process.pid : undefined;
|
|
41
|
+
const receiveFromRenderer = options.receiveFromRenderer ?? true;
|
|
42
|
+
const runtime = {
|
|
43
|
+
name: 'electron',
|
|
44
|
+
processType: 'main',
|
|
45
|
+
now: () => Date.now(),
|
|
46
|
+
pid: () => pid,
|
|
47
|
+
hasFileSystem: () => true,
|
|
48
|
+
defaultTransports: () => {
|
|
49
|
+
const transports = [new ConsoleTransport()];
|
|
50
|
+
if (!options.disableFile) {
|
|
51
|
+
const dir = defaultElectronLogDir();
|
|
52
|
+
transports.push(new FileTransport({
|
|
53
|
+
mode: 'rotate-time',
|
|
54
|
+
unit: 'day',
|
|
55
|
+
appName: 'main',
|
|
56
|
+
dir,
|
|
57
|
+
// Disk-safety defaults so a zero-config logger never eats the
|
|
58
|
+
// disk; explicit `fileTransportOptions` values win.
|
|
59
|
+
...DEFAULT_FILE_CAPS,
|
|
60
|
+
// Main-process entries only: renderer entries are routed to the
|
|
61
|
+
// dedicated renderer log file below.
|
|
62
|
+
filter: (entry) => entry.metadata?.[RENDERER_PROCESS_MARKER] !== 'renderer',
|
|
63
|
+
...options.fileTransportOptions,
|
|
64
|
+
}));
|
|
65
|
+
if (receiveFromRenderer) {
|
|
66
|
+
transports.push(new FileTransport({
|
|
67
|
+
mode: 'rotate-time',
|
|
68
|
+
unit: 'day',
|
|
69
|
+
appName: 'renderer',
|
|
70
|
+
dir,
|
|
71
|
+
// Disk-safety defaults so a zero-config logger never eats the
|
|
72
|
+
// disk; explicit `fileTransportOptions` values win.
|
|
73
|
+
...DEFAULT_FILE_CAPS,
|
|
74
|
+
// Renderer entries only.
|
|
75
|
+
filter: (entry) => entry.metadata?.[RENDERER_PROCESS_MARKER] === 'renderer',
|
|
76
|
+
...options.fileTransportOptions,
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return transports;
|
|
81
|
+
},
|
|
82
|
+
lifecycle: createElectronLifecycle(),
|
|
83
|
+
};
|
|
84
|
+
if (receiveFromRenderer) {
|
|
85
|
+
runtime.attachReceiver = (ingest) => {
|
|
86
|
+
try {
|
|
87
|
+
return registerIpcReceiver(ingest, {
|
|
88
|
+
onLevelCommand: (level) => runtime.onLevelCommand?.(level),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// `electron` not available (e.g. tests) — degrade to a no-op.
|
|
93
|
+
return () => { };
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return runtime;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=electron-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"electron-main.js","sourceRoot":"","sources":["../../../src/runtime/electron-main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RuntimeAdapter } from './adapter.js';
|
|
2
|
+
import type { IpcRenderer } from 'electron';
|
|
3
|
+
export interface ElectronRendererRuntimeOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Forward entries to the main process over IPC so they are written there
|
|
6
|
+
* (default `true`). Disable to keep renderer logs local only.
|
|
7
|
+
*/
|
|
8
|
+
forwardToMain?: boolean;
|
|
9
|
+
/** Override the IPC channel used to reach the main process. */
|
|
10
|
+
channel?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Injected IPC sender. Required when the renderer cannot reach
|
|
13
|
+
* `require('electron')` (e.g. `nodeIntegration: false` +
|
|
14
|
+
* `contextIsolation: true`) — pass the `ipcRenderer` obtained from a preload
|
|
15
|
+
* bridge. Without it the transport falls back to `require('electron')`, which
|
|
16
|
+
* is unavailable in that locked-down setup.
|
|
17
|
+
*/
|
|
18
|
+
ipcRenderer?: Pick<IpcRenderer, 'send'>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Electron **renderer process** runtime. Renderers have no filesystem access,
|
|
22
|
+
* so by default they forward entries to the main process (which persists
|
|
23
|
+
* them) while still logging to the local console for devtools visibility.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createElectronRendererRuntime(options?: ElectronRendererRuntimeOptions): RuntimeAdapter;
|
|
26
|
+
//# sourceMappingURL=electron-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"electron-renderer.d.ts","sourceRoot":"","sources":["../../../src/runtime/electron-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,cAAc,CAuBhB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ConsoleTransport } from '../transport/console.js';
|
|
2
|
+
import { ElectronIpcTransport } from '../transport/electron-ipc.js';
|
|
3
|
+
import { createWebLifecycle } from './web-lifecycle.js';
|
|
4
|
+
/**
|
|
5
|
+
* Electron **renderer process** runtime. Renderers have no filesystem access,
|
|
6
|
+
* so by default they forward entries to the main process (which persists
|
|
7
|
+
* them) while still logging to the local console for devtools visibility.
|
|
8
|
+
*/
|
|
9
|
+
export function createElectronRendererRuntime(options = {}) {
|
|
10
|
+
const forwardToMain = options.forwardToMain ?? true;
|
|
11
|
+
return {
|
|
12
|
+
name: 'electron',
|
|
13
|
+
processType: 'renderer',
|
|
14
|
+
now: () => Date.now(),
|
|
15
|
+
pid: () => undefined,
|
|
16
|
+
hasFileSystem: () => false,
|
|
17
|
+
defaultTransports: () => {
|
|
18
|
+
const transports = [new ConsoleTransport()];
|
|
19
|
+
if (forwardToMain) {
|
|
20
|
+
transports.push(new ElectronIpcTransport({
|
|
21
|
+
channel: options.channel,
|
|
22
|
+
ipcRenderer: options.ipcRenderer,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
return transports;
|
|
26
|
+
},
|
|
27
|
+
lifecycle: createWebLifecycle(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=electron-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"electron-renderer.js","sourceRoot":"","sources":["../../../src/runtime/electron-renderer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAoBxD;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAC3C,UAA0C,EAAE;IAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,UAAU;QACvB,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;YACtB,MAAM,UAAU,GAAgB,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAC;YACzD,IAAI,aAAa,EAAE,CAAC;gBAClB,UAAU,CAAC,IAAI,CACb,IAAI,oBAAoB,CAAC;oBACvB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,SAAS,EAAE,kBAAkB,EAAE;KAChC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RuntimeAdapter } from './adapter.js';
|
|
2
|
+
import type { ElectronMainRuntimeOptions } from './electron-main.js';
|
|
3
|
+
import type { ElectronRendererRuntimeOptions } from './electron-renderer.js';
|
|
4
|
+
export { createElectronMainRuntime } from './electron-main.js';
|
|
5
|
+
export type { ElectronMainRuntimeOptions } from './electron-main.js';
|
|
6
|
+
export { createElectronRendererRuntime } from './electron-renderer.js';
|
|
7
|
+
export type { ElectronRendererRuntimeOptions } from './electron-renderer.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options accepted by {@link createElectronRuntime}. This is the union of the
|
|
10
|
+
* main and renderer runtime options; only the relevant subset is used after
|
|
11
|
+
* the process type is detected.
|
|
12
|
+
*/
|
|
13
|
+
export type ElectronRuntimeOptions = ElectronMainRuntimeOptions & ElectronRendererRuntimeOptions;
|
|
14
|
+
/**
|
|
15
|
+
* Auto-detect whether we run in the Electron main or renderer process and
|
|
16
|
+
* return the matching runtime. Prefer the explicit {@link createElectronMainRuntime}
|
|
17
|
+
* / {@link createElectronRendererRuntime} when the process type is known.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createElectronRuntime(options?: ElectronRuntimeOptions): RuntimeAdapter;
|
|
20
|
+
//# sourceMappingURL=electron.d.ts.map
|
|
@@ -0,0 +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,CAI1F"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createElectronMainRuntime } from './electron-main.js';
|
|
2
|
+
import { createElectronRendererRuntime } from './electron-renderer.js';
|
|
3
|
+
export { createElectronMainRuntime } from './electron-main.js';
|
|
4
|
+
export { createElectronRendererRuntime } from './electron-renderer.js';
|
|
5
|
+
function isMainProcess() {
|
|
6
|
+
// An Electron renderer explicitly reports `process.type === 'renderer'`.
|
|
7
|
+
// The main process may report `'browser'` *or* `undefined`, so anything
|
|
8
|
+
// that is not explicitly a renderer is treated as main.
|
|
9
|
+
return (typeof process === 'undefined' || process.type !== 'renderer');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Auto-detect whether we run in the Electron main or renderer process and
|
|
13
|
+
* return the matching runtime. Prefer the explicit {@link createElectronMainRuntime}
|
|
14
|
+
* / {@link createElectronRendererRuntime} when the process type is known.
|
|
15
|
+
*/
|
|
16
|
+
export function createElectronRuntime(options = {}) {
|
|
17
|
+
return isMainProcess()
|
|
18
|
+
? createElectronMainRuntime(options)
|
|
19
|
+
: createElectronRendererRuntime(options);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=electron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"electron.js","sourceRoot":"","sources":["../../../src/runtime/electron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAUvE,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,MAAM,UAAU,qBAAqB,CAAC,UAAkC,EAAE;IACxE,OAAO,aAAa,EAAE;QACpB,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RuntimeAdapter } from './adapter.js';
|
|
2
|
+
import type { NodeRuntimeOptions } from './node.js';
|
|
3
|
+
import type { ElectronRuntimeOptions } from './electron.js';
|
|
4
|
+
export type RuntimeOptions = ElectronRuntimeOptions & NodeRuntimeOptions;
|
|
5
|
+
/**
|
|
6
|
+
* Auto-detect the current runtime:
|
|
7
|
+
* - Electron main / renderer when `process.versions.electron` exists;
|
|
8
|
+
* - Plain Node.js when a Node process is present (has filesystem + pid);
|
|
9
|
+
* - Web (browser) otherwise.
|
|
10
|
+
*
|
|
11
|
+
* `ElectronRuntimeOptions`/`NodeRuntimeOptions` (e.g. `appName`, `fileTransportOptions`) are
|
|
12
|
+
* forwarded to the matching adapter.
|
|
13
|
+
*/
|
|
14
|
+
export declare function detectRuntime(options?: RuntimeOptions): RuntimeAdapter;
|
|
15
|
+
export type { RuntimeAdapter, RuntimeName, ElectronProcessType, IngestFn } from './adapter.js';
|
|
16
|
+
export { createWebRuntime } from './web.js';
|
|
17
|
+
export { createNodeRuntime } from './node.js';
|
|
18
|
+
export { createElectronRuntime, createElectronMainRuntime, createElectronRendererRuntime, } from './electron.js';
|
|
19
|
+
export type { ElectronRuntimeOptions, ElectronMainRuntimeOptions, ElectronRendererRuntimeOptions, } from './electron.js';
|
|
20
|
+
export { ElectronIpcTransport, registerIpcReceiver, LOGRAIL_CHANNEL, } from '../transport/electron-ipc.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAG5D,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;AAEzE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,cAAc,CAa1E;AAED,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createWebRuntime } from './web.js';
|
|
2
|
+
import { createNodeRuntime } from './node.js';
|
|
3
|
+
import { createElectronRuntime } from './electron.js';
|
|
4
|
+
/**
|
|
5
|
+
* Auto-detect the current runtime:
|
|
6
|
+
* - Electron main / renderer when `process.versions.electron` exists;
|
|
7
|
+
* - Plain Node.js when a Node process is present (has filesystem + pid);
|
|
8
|
+
* - Web (browser) otherwise.
|
|
9
|
+
*
|
|
10
|
+
* `ElectronRuntimeOptions`/`NodeRuntimeOptions` (e.g. `appName`, `fileTransportOptions`) are
|
|
11
|
+
* forwarded to the matching adapter.
|
|
12
|
+
*/
|
|
13
|
+
export function detectRuntime(options = {}) {
|
|
14
|
+
const versions = (typeof process !== 'undefined'
|
|
15
|
+
? process.versions
|
|
16
|
+
: undefined) ?? {};
|
|
17
|
+
if (versions.electron) {
|
|
18
|
+
return createElectronRuntime(options);
|
|
19
|
+
}
|
|
20
|
+
if (versions.node) {
|
|
21
|
+
return createNodeRuntime(options);
|
|
22
|
+
}
|
|
23
|
+
return createWebRuntime();
|
|
24
|
+
}
|
|
25
|
+
export { createWebRuntime } from './web.js';
|
|
26
|
+
export { createNodeRuntime } from './node.js';
|
|
27
|
+
export { createElectronRuntime, createElectronMainRuntime, createElectronRendererRuntime, } from './electron.js';
|
|
28
|
+
export { ElectronIpcTransport, registerIpcReceiver, LOGRAIL_CHANNEL, } from '../transport/electron-ipc.js';
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAItD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,UAA0B,EAAE;IACxD,MAAM,QAAQ,GACZ,CAAC,OAAO,OAAO,KAAK,WAAW;QAC7B,CAAC,CAAE,OAA0E,CAAC,QAAQ;QACtF,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEvB,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,gBAAgB,EAAE,CAAC;AAC5B,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAMvB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RotateTimeOptions } from '../transport/file.js';
|
|
2
|
+
import type { RuntimeAdapter } from './adapter.js';
|
|
3
|
+
export interface NodeRuntimeOptions {
|
|
4
|
+
/** Application name; embedded in the log file name (required). */
|
|
5
|
+
appName?: string;
|
|
6
|
+
/** Forwarded to the default `FileTransport` (mode `rotate-time`). */
|
|
7
|
+
fileTransportOptions?: Partial<Omit<RotateTimeOptions, 'mode'>>;
|
|
8
|
+
/** Disable the file transport entirely (console only). */
|
|
9
|
+
disableFile?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Plain Node.js runtime (CLI / server / worker). Has both a process id and
|
|
13
|
+
* filesystem access, so by default it persists logs to a time-rotated file
|
|
14
|
+
* (in addition to the console). Pass `disableFile` to opt out, or
|
|
15
|
+
* `appName` / `fileTransportOptions` to customize. `appName` is required for
|
|
16
|
+
* the file transport; if omitted it is inferred from the launched script and
|
|
17
|
+
* throws if it cannot be determined.
|
|
18
|
+
*
|
|
19
|
+
* **Cluster support.** When running inside `node:cluster`, the runtime
|
|
20
|
+
* automatically detects whether the current process is a worker or the
|
|
21
|
+
* primary. Workers disable the file transport and send entries to the
|
|
22
|
+
* primary via `process.send()` (the `ClusterIpcTransport`). The primary
|
|
23
|
+
* receives those entries and feeds them into the logger — no manual
|
|
24
|
+
* `registerClusterReceiver` call is needed.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createNodeRuntime(options?: NodeRuntimeOptions): RuntimeAdapter;
|
|
27
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/runtime/node.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAsBnD,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,oBAAoB,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAyCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CA0DlF"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { ConsoleTransport } from '../transport/console.js';
|
|
2
|
+
import { FileTransport } from '../transport/file.js';
|
|
3
|
+
import { ClusterIpcTransport, registerClusterReceiver } from '../transport/cluster-ipc.js';
|
|
4
|
+
import { WorkerIpcTransport } from '../transport/worker-ipc.js';
|
|
5
|
+
import { createProcessLifecycle } from './process-lifecycle.js';
|
|
6
|
+
import { tmpdir } from '../shims/index.js';
|
|
7
|
+
import { basename } from '../shims/index.js';
|
|
8
|
+
import { isClusterWorker } from '../shims/index.js';
|
|
9
|
+
import { DEFAULT_FILE_CAPS } from './defaults.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detect whether the current context is a Node worker_threads worker.
|
|
12
|
+
* Uses `typeof` on `globalThis.parentPort` — safe in all environments.
|
|
13
|
+
*/
|
|
14
|
+
function isNodeWorkerThread() {
|
|
15
|
+
try {
|
|
16
|
+
return (typeof globalThis.parentPort?.postMessage ===
|
|
17
|
+
'function');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Derive an application name from the invoked script when none is given. */
|
|
24
|
+
function inferAppName() {
|
|
25
|
+
try {
|
|
26
|
+
const p = process.argv[1];
|
|
27
|
+
if (p)
|
|
28
|
+
return basename(p).replace(/\.[^.]+$/, '');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
/* ignore */
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Lifecycle hooks for cluster workers. Flushes on `disconnect` (the primary
|
|
37
|
+
* closed the IPC channel) and on `beforeExit` / signals.
|
|
38
|
+
*/
|
|
39
|
+
function createClusterWorkerLifecycle() {
|
|
40
|
+
const lc = createProcessLifecycle();
|
|
41
|
+
return {
|
|
42
|
+
onFlushBeforeExit(cb) {
|
|
43
|
+
const detachProcess = lc.onFlushBeforeExit(cb);
|
|
44
|
+
const proc = process;
|
|
45
|
+
const onDisconnect = () => {
|
|
46
|
+
void cb();
|
|
47
|
+
};
|
|
48
|
+
proc.on?.('disconnect', onDisconnect);
|
|
49
|
+
return () => {
|
|
50
|
+
detachProcess();
|
|
51
|
+
proc.removeListener?.('disconnect', onDisconnect);
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
onUncaughtError: lc.onUncaughtError,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Plain Node.js runtime (CLI / server / worker). Has both a process id and
|
|
59
|
+
* filesystem access, so by default it persists logs to a time-rotated file
|
|
60
|
+
* (in addition to the console). Pass `disableFile` to opt out, or
|
|
61
|
+
* `appName` / `fileTransportOptions` to customize. `appName` is required for
|
|
62
|
+
* the file transport; if omitted it is inferred from the launched script and
|
|
63
|
+
* throws if it cannot be determined.
|
|
64
|
+
*
|
|
65
|
+
* **Cluster support.** When running inside `node:cluster`, the runtime
|
|
66
|
+
* automatically detects whether the current process is a worker or the
|
|
67
|
+
* primary. Workers disable the file transport and send entries to the
|
|
68
|
+
* primary via `process.send()` (the `ClusterIpcTransport`). The primary
|
|
69
|
+
* receives those entries and feeds them into the logger — no manual
|
|
70
|
+
* `registerClusterReceiver` call is needed.
|
|
71
|
+
*/
|
|
72
|
+
export function createNodeRuntime(options = {}) {
|
|
73
|
+
const pid = typeof process !== 'undefined' ? process.pid : undefined;
|
|
74
|
+
const worker = isClusterWorker();
|
|
75
|
+
// ── Cluster worker: no file, send to primary via IPC ──
|
|
76
|
+
if (worker) {
|
|
77
|
+
return {
|
|
78
|
+
name: 'node',
|
|
79
|
+
now: () => Date.now(),
|
|
80
|
+
pid: () => pid,
|
|
81
|
+
hasFileSystem: () => false,
|
|
82
|
+
defaultTransports: () => [new ConsoleTransport(), new ClusterIpcTransport()],
|
|
83
|
+
lifecycle: createClusterWorkerLifecycle(),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// ── Node worker_threads worker: no file, send to parent via postMessage ──
|
|
87
|
+
if (isNodeWorkerThread()) {
|
|
88
|
+
return {
|
|
89
|
+
name: 'node',
|
|
90
|
+
now: () => Date.now(),
|
|
91
|
+
pid: () => pid,
|
|
92
|
+
hasFileSystem: () => false,
|
|
93
|
+
defaultTransports: () => [new ConsoleTransport(), new WorkerIpcTransport()],
|
|
94
|
+
lifecycle: createClusterWorkerLifecycle(), // reuse: flush on disconnect/exit
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// ── Primary or non-cluster: console + file (default) ──
|
|
98
|
+
const transports = [new ConsoleTransport()];
|
|
99
|
+
if (!options.disableFile) {
|
|
100
|
+
const appName = options.appName ?? inferAppName();
|
|
101
|
+
if (!appName) {
|
|
102
|
+
throw new Error('Node runtime requires an "appName" (or a determinable script path) for the file transport');
|
|
103
|
+
}
|
|
104
|
+
transports.push(new FileTransport({
|
|
105
|
+
mode: 'rotate-time',
|
|
106
|
+
unit: 'day',
|
|
107
|
+
appName,
|
|
108
|
+
dir: tmpdir(),
|
|
109
|
+
...DEFAULT_FILE_CAPS,
|
|
110
|
+
...options.fileTransportOptions,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
name: 'node',
|
|
115
|
+
now: () => Date.now(),
|
|
116
|
+
pid: () => pid,
|
|
117
|
+
hasFileSystem: () => !options.disableFile,
|
|
118
|
+
defaultTransports: () => transports,
|
|
119
|
+
attachReceiver: (ingest) => registerClusterReceiver(ingest),
|
|
120
|
+
lifecycle: createProcessLifecycle(),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/runtime/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LifecycleHooks } from './adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lifecycle hooks backed by the Node/Electron `process` event surface. Shared
|
|
4
|
+
* by the Node runtime and both Electron process types — they all expose the
|
|
5
|
+
* same `process` events.
|
|
6
|
+
*
|
|
7
|
+
* The flush callback is supplied by the logger; this module only decides
|
|
8
|
+
* *when* to call it and owns the `process.exit()` that follows a signal or a
|
|
9
|
+
* fatal, uncaught crash. It never touches `window`, so it is safe to import in
|
|
10
|
+
* any runtime (the `process` probe just returns `undefined` where absent).
|
|
11
|
+
*/
|
|
12
|
+
export declare function createProcessLifecycle(): LifecycleHooks;
|
|
13
|
+
//# sourceMappingURL=process-lifecycle.d.ts.map
|
|
@@ -0,0 +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,CA2DvD"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
function getProcess() {
|
|
2
|
+
if (typeof process === 'undefined' || typeof process.on !== 'function') {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
return process;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Lifecycle hooks backed by the Node/Electron `process` event surface. Shared
|
|
9
|
+
* by the Node runtime and both Electron process types — they all expose the
|
|
10
|
+
* same `process` events.
|
|
11
|
+
*
|
|
12
|
+
* The flush callback is supplied by the logger; this module only decides
|
|
13
|
+
* *when* to call it and owns the `process.exit()` that follows a signal or a
|
|
14
|
+
* fatal, uncaught crash. It never touches `window`, so it is safe to import in
|
|
15
|
+
* any runtime (the `process` probe just returns `undefined` where absent).
|
|
16
|
+
*/
|
|
17
|
+
export function createProcessLifecycle() {
|
|
18
|
+
return {
|
|
19
|
+
onFlushBeforeExit(cb) {
|
|
20
|
+
const proc = getProcess();
|
|
21
|
+
if (!proc)
|
|
22
|
+
return () => { };
|
|
23
|
+
// Normal event-loop drain: flush pending writes; the process exits on
|
|
24
|
+
// its own once the loop empties. `beforeExit` re-fires while async writes
|
|
25
|
+
// keep it alive, so the queue keeps draining until empty.
|
|
26
|
+
const onBeforeExit = () => {
|
|
27
|
+
void cb();
|
|
28
|
+
};
|
|
29
|
+
// A signal must force an exit after flushing — but never hang shutdown on
|
|
30
|
+
// a stalled transport (the logger's flush timeout bounds it).
|
|
31
|
+
const onSignal = (code) => {
|
|
32
|
+
void Promise.resolve(cb()).finally(() => {
|
|
33
|
+
try {
|
|
34
|
+
proc.exit(code);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* ignore */
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const onSigInt = () => onSignal(130);
|
|
42
|
+
const onSigTerm = () => onSignal(143);
|
|
43
|
+
proc.on('beforeExit', onBeforeExit);
|
|
44
|
+
proc.on('SIGINT', onSigInt);
|
|
45
|
+
proc.on('SIGTERM', onSigTerm);
|
|
46
|
+
return () => {
|
|
47
|
+
proc.removeListener('beforeExit', onBeforeExit);
|
|
48
|
+
proc.removeListener('SIGINT', onSigInt);
|
|
49
|
+
proc.removeListener('SIGTERM', onSigTerm);
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
onUncaughtError(cb) {
|
|
53
|
+
const proc = getProcess();
|
|
54
|
+
if (!proc)
|
|
55
|
+
return () => { };
|
|
56
|
+
// Log the crash at fatal level, flush, then exit(1) — but never hang on a
|
|
57
|
+
// stalled transport (the logger's flush timeout bounds the flush).
|
|
58
|
+
const onErr = (err) => {
|
|
59
|
+
void Promise.resolve(cb(err)).finally(() => {
|
|
60
|
+
try {
|
|
61
|
+
proc.exit(1);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* ignore */
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
proc.on('uncaughtException', onErr);
|
|
69
|
+
proc.on('unhandledRejection', onErr);
|
|
70
|
+
return () => {
|
|
71
|
+
proc.removeListener('uncaughtException', onErr);
|
|
72
|
+
proc.removeListener('unhandledRejection', onErr);
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=process-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/process-lifecycle.ts"],"names":[],"mappings":"AASA,SAAS,UAAU;IACjB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAQ,OAA4B,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAA0B,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,iBAAiB,CAAC,EAAE;YAClB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAE3B,sEAAsE;YACtE,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,YAAY,GAAG,GAAS,EAAE;gBAC9B,KAAK,EAAE,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,0EAA0E;YAC1E,8DAA8D;YAC9D,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;gBACtC,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACtC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,GAAS,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9B,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC,CAAC;QACJ,CAAC;QAED,eAAe,CAAC,EAAE;YAChB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAE3B,0EAA0E;YAC1E,mEAAmE;YACnE,MAAM,KAAK,GAAG,CAAC,GAAY,EAAQ,EAAE;gBACnC,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;oBACzC,IAAI,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,CAAC;oBAAC,MAAM,CAAC;wBACP,YAAY;oBACd,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LifecycleHooks } from './adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Web lifecycle: flush pending entries when the page is being unloaded. There
|
|
4
|
+
* is no `process.exit` and no `uncaughtException` concept in a browser, so this
|
|
5
|
+
* only implements the "flush before close" hook (via `pagehide` /
|
|
6
|
+
* `visibilitychange`) and intentionally omits `onUncaughtError`.
|
|
7
|
+
*
|
|
8
|
+
* The flush is best-effort: the browser terminates the page after the unload
|
|
9
|
+
* event regardless, so the logger's own flush timeout is what bounds how long
|
|
10
|
+
* we wait.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createWebLifecycle(): LifecycleHooks;
|
|
13
|
+
//# sourceMappingURL=web-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/runtime/web-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAanD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,CAmBnD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
function getWindow() {
|
|
2
|
+
if (typeof window === 'undefined')
|
|
3
|
+
return undefined;
|
|
4
|
+
return window;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Web lifecycle: flush pending entries when the page is being unloaded. There
|
|
8
|
+
* is no `process.exit` and no `uncaughtException` concept in a browser, so this
|
|
9
|
+
* only implements the "flush before close" hook (via `pagehide` /
|
|
10
|
+
* `visibilitychange`) and intentionally omits `onUncaughtError`.
|
|
11
|
+
*
|
|
12
|
+
* The flush is best-effort: the browser terminates the page after the unload
|
|
13
|
+
* event regardless, so the logger's own flush timeout is what bounds how long
|
|
14
|
+
* we wait.
|
|
15
|
+
*/
|
|
16
|
+
export function createWebLifecycle() {
|
|
17
|
+
return {
|
|
18
|
+
onFlushBeforeExit(cb) {
|
|
19
|
+
const win = getWindow();
|
|
20
|
+
if (!win)
|
|
21
|
+
return () => { };
|
|
22
|
+
const onHide = () => {
|
|
23
|
+
void cb();
|
|
24
|
+
};
|
|
25
|
+
// `pagehide` fires on tab close / navigation. `visibilitychange` covers
|
|
26
|
+
// the backgrounded / mobile case where the page may be discarded.
|
|
27
|
+
win.addEventListener('pagehide', onHide);
|
|
28
|
+
win.addEventListener('visibilitychange', onHide);
|
|
29
|
+
return () => {
|
|
30
|
+
win.removeEventListener('pagehide', onHide);
|
|
31
|
+
win.removeEventListener('visibilitychange', onHide);
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=web-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-lifecycle.js","sourceRoot":"","sources":["../../../src/runtime/web-lifecycle.ts"],"names":[],"mappings":"AAQA,SAAS,SAAS;IAChB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACpD,OAAO,MAAwB,CAAC;AAClC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,iBAAiB,CAAC,EAAE;YAClB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAE1B,MAAM,MAAM,GAAG,GAAS,EAAE;gBACxB,KAAK,EAAE,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,wEAAwE;YACxE,kEAAkE;YAClE,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzC,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,GAAG,EAAE;gBACV,GAAG,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC5C,GAAG,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RuntimeAdapter } from './adapter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Web runtime (browsers + Node worker_threads). No process id, no filesystem,
|
|
4
|
+
* console only by default. Remote HTTP transports can be added by the
|
|
5
|
+
* application.
|
|
6
|
+
*
|
|
7
|
+
* **Worker support.** When running inside a Web Worker or Node worker_threads
|
|
8
|
+
* worker, the runtime automatically detects the Worker context and sends
|
|
9
|
+
* entries to the main/parent thread via `postMessage()`. The parent thread
|
|
10
|
+
* receives them via `registerWorkerReceiver()` (attached automatically by
|
|
11
|
+
* `createWebRuntime()`).
|
|
12
|
+
*/
|
|
13
|
+
export declare function createWebRuntime(): RuntimeAdapter;
|
|
14
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/runtime/web.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BnD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,cAAc,CAuBjD"}
|