@justscale/core 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/LICENSE +21 -0
- package/README.md +261 -0
- package/bin/just.js +34 -0
- package/dist/app.d.ts +56 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +182 -0
- package/dist/app.js.map +1 -0
- package/dist/builder/build-context.d.ts +8 -0
- package/dist/builder/build-context.d.ts.map +1 -0
- package/dist/builder/build-context.js +4 -0
- package/dist/builder/build-context.js.map +1 -0
- package/dist/builder/builder.d.ts +60 -0
- package/dist/builder/builder.d.ts.map +1 -0
- package/dist/builder/builder.js +72 -0
- package/dist/builder/builder.js.map +1 -0
- package/dist/builder/create-builder.d.ts +36 -0
- package/dist/builder/create-builder.d.ts.map +1 -0
- package/dist/builder/create-builder.js +66 -0
- package/dist/builder/create-builder.js.map +1 -0
- package/dist/builder/execute.d.ts +37 -0
- package/dist/builder/execute.d.ts.map +1 -0
- package/dist/builder/execute.js +62 -0
- package/dist/builder/execute.js.map +1 -0
- package/dist/builder/feature-builder.d.ts +147 -0
- package/dist/builder/feature-builder.d.ts.map +1 -0
- package/dist/builder/feature-builder.js +138 -0
- package/dist/builder/feature-builder.js.map +1 -0
- package/dist/builder/index.d.ts +35 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +37 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/plugin.d.ts +90 -0
- package/dist/builder/plugin.d.ts.map +1 -0
- package/dist/builder/plugin.js +101 -0
- package/dist/builder/plugin.js.map +1 -0
- package/dist/builder/plugins/query.d.ts +31 -0
- package/dist/builder/plugins/query.d.ts.map +1 -0
- package/dist/builder/plugins/query.js +42 -0
- package/dist/builder/plugins/query.js.map +1 -0
- package/dist/builder/plugins/validation.d.ts +12 -0
- package/dist/builder/plugins/validation.d.ts.map +1 -0
- package/dist/builder/plugins/validation.js +12 -0
- package/dist/builder/plugins/validation.js.map +1 -0
- package/dist/builder/sort.d.ts +27 -0
- package/dist/builder/sort.d.ts.map +1 -0
- package/dist/builder/sort.js +210 -0
- package/dist/builder/sort.js.map +1 -0
- package/dist/builder/stop.d.ts +24 -0
- package/dist/builder/stop.d.ts.map +1 -0
- package/dist/builder/stop.js +27 -0
- package/dist/builder/stop.js.map +1 -0
- package/dist/builder/test/permits-type-spike.d.ts +8 -0
- package/dist/builder/test/permits-type-spike.d.ts.map +1 -0
- package/dist/builder/test/permits-type-spike.js +117 -0
- package/dist/builder/test/permits-type-spike.js.map +1 -0
- package/dist/builder/types.d.ts +678 -0
- package/dist/builder/types.d.ts.map +1 -0
- package/dist/builder/types.js +98 -0
- package/dist/builder/types.js.map +1 -0
- package/dist/builder/validation.d.ts +101 -0
- package/dist/builder/validation.d.ts.map +1 -0
- package/dist/builder/validation.js +335 -0
- package/dist/builder/validation.js.map +1 -0
- package/dist/cli/adapter.d.ts +23 -0
- package/dist/cli/adapter.d.ts.map +1 -0
- package/dist/cli/adapter.js +26 -0
- package/dist/cli/adapter.js.map +1 -0
- package/dist/cli/args.d.ts +150 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +172 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/assemble.d.ts +20 -0
- package/dist/cli/assemble.d.ts.map +1 -0
- package/dist/cli/assemble.js +55 -0
- package/dist/cli/assemble.js.map +1 -0
- package/dist/cli/bin/main.d.ts +26 -0
- package/dist/cli/bin/main.d.ts.map +1 -0
- package/dist/cli/bin/main.js +475 -0
- package/dist/cli/bin/main.js.map +1 -0
- package/dist/cli/build/migrations-plugin.d.ts +21 -0
- package/dist/cli/build/migrations-plugin.d.ts.map +1 -0
- package/dist/cli/build/migrations-plugin.js +41 -0
- package/dist/cli/build/migrations-plugin.js.map +1 -0
- package/dist/cli/build/process-plugin.d.ts +29 -0
- package/dist/cli/build/process-plugin.d.ts.map +1 -0
- package/dist/cli/build/process-plugin.js +66 -0
- package/dist/cli/build/process-plugin.js.map +1 -0
- package/dist/cli/builder/create-cli-builder.d.ts +42 -0
- package/dist/cli/builder/create-cli-builder.d.ts.map +1 -0
- package/dist/cli/builder/create-cli-builder.js +104 -0
- package/dist/cli/builder/create-cli-builder.js.map +1 -0
- package/dist/cli/builder/index.d.ts +8 -0
- package/dist/cli/builder/index.d.ts.map +1 -0
- package/dist/cli/builder/index.js +7 -0
- package/dist/cli/builder/index.js.map +1 -0
- package/dist/cli/builder/types.d.ts +113 -0
- package/dist/cli/builder/types.d.ts.map +1 -0
- package/dist/cli/builder/types.js +7 -0
- package/dist/cli/builder/types.js.map +1 -0
- package/dist/cli/cluster.d.ts +8 -0
- package/dist/cli/cluster.d.ts.map +1 -0
- package/dist/cli/cluster.js +145 -0
- package/dist/cli/cluster.js.map +1 -0
- package/dist/cli/current-app.d.ts +36 -0
- package/dist/cli/current-app.d.ts.map +1 -0
- package/dist/cli/current-app.js +21 -0
- package/dist/cli/current-app.js.map +1 -0
- package/dist/cli/define-app.d.ts +35 -0
- package/dist/cli/define-app.d.ts.map +1 -0
- package/dist/cli/define-app.js +79 -0
- package/dist/cli/define-app.js.map +1 -0
- package/dist/cli/define-main.d.ts +33 -0
- package/dist/cli/define-main.d.ts.map +1 -0
- package/dist/cli/define-main.js +67 -0
- package/dist/cli/define-main.js.map +1 -0
- package/dist/cli/define-project.d.ts +93 -0
- package/dist/cli/define-project.d.ts.map +1 -0
- package/dist/cli/define-project.js +85 -0
- package/dist/cli/define-project.js.map +1 -0
- package/dist/cli/dev-server.d.ts +20 -0
- package/dist/cli/dev-server.d.ts.map +1 -0
- package/dist/cli/dev-server.js +131 -0
- package/dist/cli/dev-server.js.map +1 -0
- package/dist/cli/discovery.d.ts +29 -0
- package/dist/cli/discovery.d.ts.map +1 -0
- package/dist/cli/discovery.js +142 -0
- package/dist/cli/discovery.js.map +1 -0
- package/dist/cli/factory.d.ts +43 -0
- package/dist/cli/factory.d.ts.map +1 -0
- package/dist/cli/factory.js +52 -0
- package/dist/cli/factory.js.map +1 -0
- package/dist/cli/generators/ai.d.ts +3 -0
- package/dist/cli/generators/ai.d.ts.map +1 -0
- package/dist/cli/generators/ai.js +65 -0
- package/dist/cli/generators/ai.js.map +1 -0
- package/dist/cli/generators/ci.d.ts +5 -0
- package/dist/cli/generators/ci.d.ts.map +1 -0
- package/dist/cli/generators/ci.js +102 -0
- package/dist/cli/generators/ci.js.map +1 -0
- package/dist/cli/generators/detect.d.ts +15 -0
- package/dist/cli/generators/detect.d.ts.map +1 -0
- package/dist/cli/generators/detect.js +75 -0
- package/dist/cli/generators/detect.js.map +1 -0
- package/dist/cli/generators/ide.d.ts +3 -0
- package/dist/cli/generators/ide.d.ts.map +1 -0
- package/dist/cli/generators/ide.js +179 -0
- package/dist/cli/generators/ide.js.map +1 -0
- package/dist/cli/generators/index.d.ts +5 -0
- package/dist/cli/generators/index.d.ts.map +1 -0
- package/dist/cli/generators/index.js +5 -0
- package/dist/cli/generators/index.js.map +1 -0
- package/dist/cli/index.d.ts +81 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +88 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +131 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +373 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/mcp/server.d.ts +23 -0
- package/dist/cli/mcp/server.d.ts.map +1 -0
- package/dist/cli/mcp/server.js +148 -0
- package/dist/cli/mcp/server.js.map +1 -0
- package/dist/cli/parser.d.ts +106 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +520 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/runner.d.ts +75 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +422 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/service.d.ts +61 -0
- package/dist/cli/service.d.ts.map +1 -0
- package/dist/cli/service.js +95 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/cli/types.d.ts +47 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +20 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/wizard.d.ts +11 -0
- package/dist/cli/wizard.d.ts.map +1 -0
- package/dist/cli/wizard.js +2 -0
- package/dist/cli/wizard.js.map +1 -0
- package/dist/cli/workspace-controller.d.ts +36 -0
- package/dist/cli/workspace-controller.d.ts.map +1 -0
- package/dist/cli/workspace-controller.js +896 -0
- package/dist/cli/workspace-controller.js.map +1 -0
- package/dist/cluster/client.d.ts +101 -0
- package/dist/cluster/client.d.ts.map +1 -0
- package/dist/cluster/client.js +256 -0
- package/dist/cluster/client.js.map +1 -0
- package/dist/cluster/cluster.d.ts +82 -0
- package/dist/cluster/cluster.d.ts.map +1 -0
- package/dist/cluster/cluster.js +27 -0
- package/dist/cluster/cluster.js.map +1 -0
- package/dist/cluster/coordinator/cluster-node.model.d.ts +14 -0
- package/dist/cluster/coordinator/cluster-node.model.d.ts.map +1 -0
- package/dist/cluster/coordinator/cluster-node.model.js +15 -0
- package/dist/cluster/coordinator/cluster-node.model.js.map +1 -0
- package/dist/cluster/coordinator/cluster-signals.d.ts +45 -0
- package/dist/cluster/coordinator/cluster-signals.d.ts.map +1 -0
- package/dist/cluster/coordinator/cluster-signals.js +24 -0
- package/dist/cluster/coordinator/cluster-signals.js.map +1 -0
- package/dist/cluster/coordinator/coordinator.process.d.ts +21 -0
- package/dist/cluster/coordinator/coordinator.process.d.ts.map +1 -0
- package/dist/cluster/coordinator/coordinator.process.js +221 -0
- package/dist/cluster/coordinator/coordinator.process.js.map +1 -0
- package/dist/cluster/coordinator/index.d.ts +13 -0
- package/dist/cluster/coordinator/index.d.ts.map +1 -0
- package/dist/cluster/coordinator/index.js +13 -0
- package/dist/cluster/coordinator/index.js.map +1 -0
- package/dist/cluster/coordinator/node-lifecycle.d.ts +31 -0
- package/dist/cluster/coordinator/node-lifecycle.d.ts.map +1 -0
- package/dist/cluster/coordinator/node-lifecycle.js +178 -0
- package/dist/cluster/coordinator/node-lifecycle.js.map +1 -0
- package/dist/cluster/index.d.ts +45 -0
- package/dist/cluster/index.d.ts.map +1 -0
- package/dist/cluster/index.js +57 -0
- package/dist/cluster/index.js.map +1 -0
- package/dist/cluster/protocol.d.ts +204 -0
- package/dist/cluster/protocol.d.ts.map +1 -0
- package/dist/cluster/protocol.js +274 -0
- package/dist/cluster/protocol.js.map +1 -0
- package/dist/cluster/scheduled-task/builder.d.ts +24 -0
- package/dist/cluster/scheduled-task/builder.d.ts.map +1 -0
- package/dist/cluster/scheduled-task/builder.js +63 -0
- package/dist/cluster/scheduled-task/builder.js.map +1 -0
- package/dist/cluster/scheduled-task/factory.d.ts +76 -0
- package/dist/cluster/scheduled-task/factory.d.ts.map +1 -0
- package/dist/cluster/scheduled-task/factory.js +64 -0
- package/dist/cluster/scheduled-task/factory.js.map +1 -0
- package/dist/cluster/scheduled-task/index.d.ts +43 -0
- package/dist/cluster/scheduled-task/index.d.ts.map +1 -0
- package/dist/cluster/scheduled-task/index.js +45 -0
- package/dist/cluster/scheduled-task/index.js.map +1 -0
- package/dist/cluster/scheduled-task/transport.d.ts +12 -0
- package/dist/cluster/scheduled-task/transport.d.ts.map +1 -0
- package/dist/cluster/scheduled-task/transport.js +146 -0
- package/dist/cluster/scheduled-task/transport.js.map +1 -0
- package/dist/cluster/scheduled-task/types.d.ts +89 -0
- package/dist/cluster/scheduled-task/types.d.ts.map +1 -0
- package/dist/cluster/scheduled-task/types.js +7 -0
- package/dist/cluster/scheduled-task/types.js.map +1 -0
- package/dist/cluster/server.d.ts +87 -0
- package/dist/cluster/server.d.ts.map +1 -0
- package/dist/cluster/server.js +290 -0
- package/dist/cluster/server.js.map +1 -0
- package/dist/cluster/transport.d.ts +86 -0
- package/dist/cluster/transport.d.ts.map +1 -0
- package/dist/cluster/transport.js +138 -0
- package/dist/cluster/transport.js.map +1 -0
- package/dist/core/container-hooks.d.ts +22 -0
- package/dist/core/container-hooks.d.ts.map +1 -0
- package/dist/core/container-hooks.js +29 -0
- package/dist/core/container-hooks.js.map +1 -0
- package/dist/core/container-reflection.d.ts +71 -0
- package/dist/core/container-reflection.d.ts.map +1 -0
- package/dist/core/container-reflection.js +60 -0
- package/dist/core/container-reflection.js.map +1 -0
- package/dist/core/context.d.ts +146 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +155 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/contribution.d.ts +152 -0
- package/dist/core/contribution.d.ts.map +1 -0
- package/dist/core/contribution.js +213 -0
- package/dist/core/contribution.js.map +1 -0
- package/dist/core/controller.contextual.d.ts +193 -0
- package/dist/core/controller.contextual.d.ts.map +1 -0
- package/dist/core/controller.contextual.js +459 -0
- package/dist/core/controller.contextual.js.map +1 -0
- package/dist/core/controller.d.ts +510 -0
- package/dist/core/controller.d.ts.map +1 -0
- package/dist/core/controller.js +411 -0
- package/dist/core/controller.js.map +1 -0
- package/dist/core/controller.procedure.d.ts +147 -0
- package/dist/core/controller.procedure.d.ts.map +1 -0
- package/dist/core/controller.procedure.js +115 -0
- package/dist/core/controller.procedure.js.map +1 -0
- package/dist/core/disposable.d.ts +126 -0
- package/dist/core/disposable.d.ts.map +1 -0
- package/dist/core/disposable.js +179 -0
- package/dist/core/disposable.js.map +1 -0
- package/dist/core/hmr.d.ts +83 -0
- package/dist/core/hmr.d.ts.map +1 -0
- package/dist/core/hmr.js +211 -0
- package/dist/core/hmr.js.map +1 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +25 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/internal/routes.d.ts +26 -0
- package/dist/core/internal/routes.d.ts.map +1 -0
- package/dist/core/internal/routes.js +48 -0
- package/dist/core/internal/routes.js.map +1 -0
- package/dist/core/lifecycle-impl.d.ts +45 -0
- package/dist/core/lifecycle-impl.d.ts.map +1 -0
- package/dist/core/lifecycle-impl.js +102 -0
- package/dist/core/lifecycle-impl.js.map +1 -0
- package/dist/core/lifecycle.d.ts +86 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +38 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/logger.d.ts +282 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +368 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/middleware.d.ts +108 -0
- package/dist/core/middleware.d.ts.map +1 -0
- package/dist/core/middleware.js +60 -0
- package/dist/core/middleware.js.map +1 -0
- package/dist/core/openapi-methods.d.ts +61 -0
- package/dist/core/openapi-methods.d.ts.map +1 -0
- package/dist/core/openapi-methods.js +53 -0
- package/dist/core/openapi-methods.js.map +1 -0
- package/dist/core/plugin.d.ts +209 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +36 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/scope-bridge.d.ts +19 -0
- package/dist/core/scope-bridge.d.ts.map +1 -0
- package/dist/core/scope-bridge.js +34 -0
- package/dist/core/scope-bridge.js.map +1 -0
- package/dist/core/service.d.ts +429 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +875 -0
- package/dist/core/service.js.map +1 -0
- package/dist/features/channel/backend.d.ts +98 -0
- package/dist/features/channel/backend.d.ts.map +1 -0
- package/dist/features/channel/backend.js +75 -0
- package/dist/features/channel/backend.js.map +1 -0
- package/dist/features/channel/channel.d.ts +18 -0
- package/dist/features/channel/channel.d.ts.map +1 -0
- package/dist/features/channel/channel.js +219 -0
- package/dist/features/channel/channel.js.map +1 -0
- package/dist/features/channel/channels.d.ts +87 -0
- package/dist/features/channel/channels.d.ts.map +1 -0
- package/dist/features/channel/channels.js +252 -0
- package/dist/features/channel/channels.js.map +1 -0
- package/dist/features/channel/feature.d.ts +40 -0
- package/dist/features/channel/feature.d.ts.map +1 -0
- package/dist/features/channel/feature.js +44 -0
- package/dist/features/channel/feature.js.map +1 -0
- package/dist/features/channel/index.d.ts +41 -0
- package/dist/features/channel/index.d.ts.map +1 -0
- package/dist/features/channel/index.js +41 -0
- package/dist/features/channel/index.js.map +1 -0
- package/dist/features/channel/types.d.ts +165 -0
- package/dist/features/channel/types.d.ts.map +1 -0
- package/dist/features/channel/types.js +10 -0
- package/dist/features/channel/types.js.map +1 -0
- package/dist/features/config/cli/config-controller.d.ts +77 -0
- package/dist/features/config/cli/config-controller.d.ts.map +1 -0
- package/dist/features/config/cli/config-controller.js +209 -0
- package/dist/features/config/cli/config-controller.js.map +1 -0
- package/dist/features/config/cli/index.d.ts +9 -0
- package/dist/features/config/cli/index.d.ts.map +1 -0
- package/dist/features/config/cli/index.js +9 -0
- package/dist/features/config/cli/index.js.map +1 -0
- package/dist/features/config/cli/profile-controller.d.ts +87 -0
- package/dist/features/config/cli/profile-controller.d.ts.map +1 -0
- package/dist/features/config/cli/profile-controller.js +223 -0
- package/dist/features/config/cli/profile-controller.js.map +1 -0
- package/dist/features/config/cli/utils.d.ts +14 -0
- package/dist/features/config/cli/utils.d.ts.map +1 -0
- package/dist/features/config/cli/utils.js +29 -0
- package/dist/features/config/cli/utils.js.map +1 -0
- package/dist/features/config/config-of.d.ts +36 -0
- package/dist/features/config/config-of.d.ts.map +1 -0
- package/dist/features/config/config-of.js +36 -0
- package/dist/features/config/config-of.js.map +1 -0
- package/dist/features/config/config-service.d.ts +54 -0
- package/dist/features/config/config-service.d.ts.map +1 -0
- package/dist/features/config/config-service.js +184 -0
- package/dist/features/config/config-service.js.map +1 -0
- package/dist/features/config/create-config.d.ts +21 -0
- package/dist/features/config/create-config.d.ts.map +1 -0
- package/dist/features/config/create-config.js +16 -0
- package/dist/features/config/create-config.js.map +1 -0
- package/dist/features/config/define-config-partial.d.ts +13 -0
- package/dist/features/config/define-config-partial.d.ts.map +1 -0
- package/dist/features/config/define-config-partial.js +19 -0
- package/dist/features/config/define-config-partial.js.map +1 -0
- package/dist/features/config/env-service.d.ts +54 -0
- package/dist/features/config/env-service.d.ts.map +1 -0
- package/dist/features/config/env-service.js +115 -0
- package/dist/features/config/env-service.js.map +1 -0
- package/dist/features/config/file-watcher.d.ts +13 -0
- package/dist/features/config/file-watcher.d.ts.map +1 -0
- package/dist/features/config/file-watcher.js +98 -0
- package/dist/features/config/file-watcher.js.map +1 -0
- package/dist/features/config/index.d.ts +21 -0
- package/dist/features/config/index.d.ts.map +1 -0
- package/dist/features/config/index.js +24 -0
- package/dist/features/config/index.js.map +1 -0
- package/dist/features/config/profile-service.d.ts +59 -0
- package/dist/features/config/profile-service.d.ts.map +1 -0
- package/dist/features/config/profile-service.js +114 -0
- package/dist/features/config/profile-service.js.map +1 -0
- package/dist/features/config/types.d.ts +38 -0
- package/dist/features/config/types.d.ts.map +1 -0
- package/dist/features/config/types.js +17 -0
- package/dist/features/config/types.js.map +1 -0
- package/dist/features/contract/contract.d.ts +264 -0
- package/dist/features/contract/contract.d.ts.map +1 -0
- package/dist/features/contract/contract.js +183 -0
- package/dist/features/contract/contract.js.map +1 -0
- package/dist/features/contract/index.d.ts +2 -0
- package/dist/features/contract/index.d.ts.map +1 -0
- package/dist/features/contract/index.js +2 -0
- package/dist/features/contract/index.js.map +1 -0
- package/dist/features/env/contribute.d.ts +70 -0
- package/dist/features/env/contribute.d.ts.map +1 -0
- package/dist/features/env/contribute.js +195 -0
- package/dist/features/env/contribute.js.map +1 -0
- package/dist/features/environment/create-environment.d.ts +58 -0
- package/dist/features/environment/create-environment.d.ts.map +1 -0
- package/dist/features/environment/create-environment.js +22 -0
- package/dist/features/environment/create-environment.js.map +1 -0
- package/dist/features/environment/index.d.ts +12 -0
- package/dist/features/environment/index.d.ts.map +1 -0
- package/dist/features/environment/index.js +10 -0
- package/dist/features/environment/index.js.map +1 -0
- package/dist/features/environment/load.d.ts +59 -0
- package/dist/features/environment/load.d.ts.map +1 -0
- package/dist/features/environment/load.js +117 -0
- package/dist/features/environment/load.js.map +1 -0
- package/dist/features/environment/types.d.ts +165 -0
- package/dist/features/environment/types.d.ts.map +1 -0
- package/dist/features/environment/types.js +18 -0
- package/dist/features/environment/types.js.map +1 -0
- package/dist/features/feature-flags/create-feature-flag-provider.d.ts +21 -0
- package/dist/features/feature-flags/create-feature-flag-provider.d.ts.map +1 -0
- package/dist/features/feature-flags/create-feature-flag-provider.js +16 -0
- package/dist/features/feature-flags/create-feature-flag-provider.js.map +1 -0
- package/dist/features/feature-flags/define-feature-flag-partial.d.ts +20 -0
- package/dist/features/feature-flags/define-feature-flag-partial.d.ts.map +1 -0
- package/dist/features/feature-flags/define-feature-flag-partial.js +26 -0
- package/dist/features/feature-flags/define-feature-flag-partial.js.map +1 -0
- package/dist/features/feature-flags/feature-flag-of.d.ts +16 -0
- package/dist/features/feature-flags/feature-flag-of.d.ts.map +1 -0
- package/dist/features/feature-flags/feature-flag-of.js +16 -0
- package/dist/features/feature-flags/feature-flag-of.js.map +1 -0
- package/dist/features/feature-flags/feature-flag-service.d.ts +22 -0
- package/dist/features/feature-flags/feature-flag-service.d.ts.map +1 -0
- package/dist/features/feature-flags/feature-flag-service.js +112 -0
- package/dist/features/feature-flags/feature-flag-service.js.map +1 -0
- package/dist/features/feature-flags/index.d.ts +15 -0
- package/dist/features/feature-flags/index.d.ts.map +1 -0
- package/dist/features/feature-flags/index.js +12 -0
- package/dist/features/feature-flags/index.js.map +1 -0
- package/dist/features/feature-flags/types.d.ts +30 -0
- package/dist/features/feature-flags/types.d.ts.map +1 -0
- package/dist/features/feature-flags/types.js +8 -0
- package/dist/features/feature-flags/types.js.map +1 -0
- package/dist/features/index.d.ts +6 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +7 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/lock/index.d.ts +4 -0
- package/dist/features/lock/index.d.ts.map +1 -0
- package/dist/features/lock/index.js +4 -0
- package/dist/features/lock/index.js.map +1 -0
- package/dist/features/lock/lock-service.d.ts +74 -0
- package/dist/features/lock/lock-service.d.ts.map +1 -0
- package/dist/features/lock/lock-service.js +210 -0
- package/dist/features/lock/lock-service.js.map +1 -0
- package/dist/features/lock/memory.d.ts +60 -0
- package/dist/features/lock/memory.d.ts.map +1 -0
- package/dist/features/lock/memory.js +194 -0
- package/dist/features/lock/memory.js.map +1 -0
- package/dist/features/lock/types.d.ts +151 -0
- package/dist/features/lock/types.d.ts.map +1 -0
- package/dist/features/lock/types.js +17 -0
- package/dist/features/lock/types.js.map +1 -0
- package/dist/features/memory/index.d.ts +18 -0
- package/dist/features/memory/index.d.ts.map +1 -0
- package/dist/features/memory/index.js +18 -0
- package/dist/features/memory/index.js.map +1 -0
- package/dist/features/memory/lock-feature.d.ts +21 -0
- package/dist/features/memory/lock-feature.d.ts.map +1 -0
- package/dist/features/memory/lock-feature.js +24 -0
- package/dist/features/memory/lock-feature.js.map +1 -0
- package/dist/features/secrets/create-secret-provider.d.ts +31 -0
- package/dist/features/secrets/create-secret-provider.d.ts.map +1 -0
- package/dist/features/secrets/create-secret-provider.js +26 -0
- package/dist/features/secrets/create-secret-provider.js.map +1 -0
- package/dist/features/secrets/define-secret-partial.d.ts +16 -0
- package/dist/features/secrets/define-secret-partial.d.ts.map +1 -0
- package/dist/features/secrets/define-secret-partial.js +26 -0
- package/dist/features/secrets/define-secret-partial.js.map +1 -0
- package/dist/features/secrets/index.d.ts +17 -0
- package/dist/features/secrets/index.d.ts.map +1 -0
- package/dist/features/secrets/index.js +14 -0
- package/dist/features/secrets/index.js.map +1 -0
- package/dist/features/secrets/secret-of.d.ts +19 -0
- package/dist/features/secrets/secret-of.d.ts.map +1 -0
- package/dist/features/secrets/secret-of.js +21 -0
- package/dist/features/secrets/secret-of.js.map +1 -0
- package/dist/features/secrets/secret-service.d.ts +21 -0
- package/dist/features/secrets/secret-service.d.ts.map +1 -0
- package/dist/features/secrets/secret-service.js +28 -0
- package/dist/features/secrets/secret-service.js.map +1 -0
- package/dist/features/secrets/types.d.ts +30 -0
- package/dist/features/secrets/types.d.ts.map +1 -0
- package/dist/features/secrets/types.js +8 -0
- package/dist/features/secrets/types.js.map +1 -0
- package/dist/features/vault/env-var-vault.d.ts +24 -0
- package/dist/features/vault/env-var-vault.d.ts.map +1 -0
- package/dist/features/vault/env-var-vault.js +43 -0
- package/dist/features/vault/env-var-vault.js.map +1 -0
- package/dist/features/vault/hardcoded-vault.d.ts +34 -0
- package/dist/features/vault/hardcoded-vault.d.ts.map +1 -0
- package/dist/features/vault/hardcoded-vault.js +46 -0
- package/dist/features/vault/hardcoded-vault.js.map +1 -0
- package/dist/features/vault/hashicorp-vault.d.ts +32 -0
- package/dist/features/vault/hashicorp-vault.d.ts.map +1 -0
- package/dist/features/vault/hashicorp-vault.js +69 -0
- package/dist/features/vault/hashicorp-vault.js.map +1 -0
- package/dist/features/vault/index.d.ts +13 -0
- package/dist/features/vault/index.d.ts.map +1 -0
- package/dist/features/vault/index.js +12 -0
- package/dist/features/vault/index.js.map +1 -0
- package/dist/features/vault/kubernetes-vault.d.ts +27 -0
- package/dist/features/vault/kubernetes-vault.d.ts.map +1 -0
- package/dist/features/vault/kubernetes-vault.js +51 -0
- package/dist/features/vault/kubernetes-vault.js.map +1 -0
- package/dist/features/vault/types.d.ts +41 -0
- package/dist/features/vault/types.d.ts.map +1 -0
- package/dist/features/vault/types.js +21 -0
- package/dist/features/vault/types.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/justscale.d.ts +63 -0
- package/dist/justscale.d.ts.map +1 -0
- package/dist/justscale.js +501 -0
- package/dist/justscale.js.map +1 -0
- package/dist/kernel/adapter.d.ts +9 -0
- package/dist/kernel/adapter.d.ts.map +1 -0
- package/dist/kernel/adapter.js +2 -0
- package/dist/kernel/adapter.js.map +1 -0
- package/dist/kernel/kernel.d.ts +15 -0
- package/dist/kernel/kernel.d.ts.map +1 -0
- package/dist/kernel/kernel.js +134 -0
- package/dist/kernel/kernel.js.map +1 -0
- package/dist/models/access.d.ts +26 -0
- package/dist/models/access.d.ts.map +1 -0
- package/dist/models/access.js +126 -0
- package/dist/models/access.js.map +1 -0
- package/dist/models/apply-types-config.d.ts +52 -0
- package/dist/models/apply-types-config.d.ts.map +1 -0
- package/dist/models/apply-types-config.js +47 -0
- package/dist/models/apply-types-config.js.map +1 -0
- package/dist/models/define-model.d.ts +249 -0
- package/dist/models/define-model.d.ts.map +1 -0
- package/dist/models/define-model.js +388 -0
- package/dist/models/define-model.js.map +1 -0
- package/dist/models/field.d.ts +309 -0
- package/dist/models/field.d.ts.map +1 -0
- package/dist/models/field.js +312 -0
- package/dist/models/field.js.map +1 -0
- package/dist/models/in-memory/condition-evaluator.d.ts +53 -0
- package/dist/models/in-memory/condition-evaluator.d.ts.map +1 -0
- package/dist/models/in-memory/condition-evaluator.js +593 -0
- package/dist/models/in-memory/condition-evaluator.js.map +1 -0
- package/dist/models/in-memory/in-memory-model.d.ts +89 -0
- package/dist/models/in-memory/in-memory-model.d.ts.map +1 -0
- package/dist/models/in-memory/in-memory-model.js +101 -0
- package/dist/models/in-memory/in-memory-model.js.map +1 -0
- package/dist/models/in-memory/in-memory-repository.d.ts +208 -0
- package/dist/models/in-memory/in-memory-repository.d.ts.map +1 -0
- package/dist/models/in-memory/in-memory-repository.js +618 -0
- package/dist/models/in-memory/in-memory-repository.js.map +1 -0
- package/dist/models/in-memory/in-memory-scheduled-task.repository.d.ts +92 -0
- package/dist/models/in-memory/in-memory-scheduled-task.repository.d.ts.map +1 -0
- package/dist/models/in-memory/in-memory-scheduled-task.repository.js +395 -0
- package/dist/models/in-memory/in-memory-scheduled-task.repository.js.map +1 -0
- package/dist/models/in-memory/index.d.ts +35 -0
- package/dist/models/in-memory/index.d.ts.map +1 -0
- package/dist/models/in-memory/index.js +36 -0
- package/dist/models/in-memory/index.js.map +1 -0
- package/dist/models/index.d.ts +52 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +86 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/model-name-registry.d.ts +16 -0
- package/dist/models/model-name-registry.d.ts.map +1 -0
- package/dist/models/model-name-registry.js +19 -0
- package/dist/models/model-name-registry.js.map +1 -0
- package/dist/models/model.d.ts +15 -0
- package/dist/models/model.d.ts.map +1 -0
- package/dist/models/model.js +114 -0
- package/dist/models/model.js.map +1 -0
- package/dist/models/model.repository.d.ts +318 -0
- package/dist/models/model.repository.d.ts.map +1 -0
- package/dist/models/model.repository.js +146 -0
- package/dist/models/model.repository.js.map +1 -0
- package/dist/models/observable.d.ts +15 -0
- package/dist/models/observable.d.ts.map +1 -0
- package/dist/models/observable.js +64 -0
- package/dist/models/observable.js.map +1 -0
- package/dist/models/proxy.d.ts +5 -0
- package/dist/models/proxy.d.ts.map +1 -0
- package/dist/models/proxy.js +407 -0
- package/dist/models/proxy.js.map +1 -0
- package/dist/models/query.d.ts +574 -0
- package/dist/models/query.d.ts.map +1 -0
- package/dist/models/query.js +701 -0
- package/dist/models/query.js.map +1 -0
- package/dist/models/reference/reference.d.ts +229 -0
- package/dist/models/reference/reference.d.ts.map +1 -0
- package/dist/models/reference/reference.js +331 -0
- package/dist/models/reference/reference.js.map +1 -0
- package/dist/models/reference/transient-ref.d.ts +123 -0
- package/dist/models/reference/transient-ref.d.ts.map +1 -0
- package/dist/models/reference/transient-ref.js +152 -0
- package/dist/models/reference/transient-ref.js.map +1 -0
- package/dist/models/repository.d.ts +53 -0
- package/dist/models/repository.d.ts.map +1 -0
- package/dist/models/repository.js +37 -0
- package/dist/models/repository.js.map +1 -0
- package/dist/models/scheduled-task/index.d.ts +13 -0
- package/dist/models/scheduled-task/index.d.ts.map +1 -0
- package/dist/models/scheduled-task/index.js +12 -0
- package/dist/models/scheduled-task/index.js.map +1 -0
- package/dist/models/scheduled-task/scheduled-task.d.ts +73 -0
- package/dist/models/scheduled-task/scheduled-task.d.ts.map +1 -0
- package/dist/models/scheduled-task/scheduled-task.js +95 -0
- package/dist/models/scheduled-task/scheduled-task.js.map +1 -0
- package/dist/models/scheduled-task/scheduled-task.repository.d.ts +150 -0
- package/dist/models/scheduled-task/scheduled-task.repository.d.ts.map +1 -0
- package/dist/models/scheduled-task/scheduled-task.repository.js +40 -0
- package/dist/models/scheduled-task/scheduled-task.repository.js.map +1 -0
- package/dist/models/stream.d.ts +139 -0
- package/dist/models/stream.d.ts.map +1 -0
- package/dist/models/stream.js +153 -0
- package/dist/models/stream.js.map +1 -0
- package/dist/models/symbols.d.ts +73 -0
- package/dist/models/symbols.d.ts.map +1 -0
- package/dist/models/symbols.js +97 -0
- package/dist/models/symbols.js.map +1 -0
- package/dist/models/types.d.ts +291 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +50 -0
- package/dist/models/types.js.map +1 -0
- package/dist/models/watch.d.ts +27 -0
- package/dist/models/watch.d.ts.map +1 -0
- package/dist/models/watch.js +124 -0
- package/dist/models/watch.js.map +1 -0
- package/dist/models/zod-ref.d.ts +46 -0
- package/dist/models/zod-ref.d.ts.map +1 -0
- package/dist/models/zod-ref.js +31 -0
- package/dist/models/zod-ref.js.map +1 -0
- package/dist/process/builtin-serializers.d.ts +19 -0
- package/dist/process/builtin-serializers.d.ts.map +1 -0
- package/dist/process/builtin-serializers.js +213 -0
- package/dist/process/builtin-serializers.js.map +1 -0
- package/dist/process/cluster-plugin.d.ts +129 -0
- package/dist/process/cluster-plugin.d.ts.map +1 -0
- package/dist/process/cluster-plugin.js +175 -0
- package/dist/process/cluster-plugin.js.map +1 -0
- package/dist/process/createProcess.d.ts +67 -0
- package/dist/process/createProcess.d.ts.map +1 -0
- package/dist/process/createProcess.js +111 -0
- package/dist/process/createProcess.js.map +1 -0
- package/dist/process/define-signals.d.ts +113 -0
- package/dist/process/define-signals.d.ts.map +1 -0
- package/dist/process/define-signals.js +222 -0
- package/dist/process/define-signals.js.map +1 -0
- package/dist/process/delay-controller.d.ts +35 -0
- package/dist/process/delay-controller.d.ts.map +1 -0
- package/dist/process/delay-controller.js +55 -0
- package/dist/process/delay-controller.js.map +1 -0
- package/dist/process/index.d.ts +38 -0
- package/dist/process/index.d.ts.map +1 -0
- package/dist/process/index.js +47 -0
- package/dist/process/index.js.map +1 -0
- package/dist/process/primitives.d.ts +393 -0
- package/dist/process/primitives.d.ts.map +1 -0
- package/dist/process/primitives.js +325 -0
- package/dist/process/primitives.js.map +1 -0
- package/dist/process/serialization.d.ts +58 -0
- package/dist/process/serialization.d.ts.map +1 -0
- package/dist/process/serialization.js +220 -0
- package/dist/process/serialization.js.map +1 -0
- package/dist/process/stream-utils.d.ts +123 -0
- package/dist/process/stream-utils.d.ts.map +1 -0
- package/dist/process/stream-utils.js +247 -0
- package/dist/process/stream-utils.js.map +1 -0
- package/dist/process/testing/clock.d.ts +115 -0
- package/dist/process/testing/clock.d.ts.map +1 -0
- package/dist/process/testing/clock.js +166 -0
- package/dist/process/testing/clock.js.map +1 -0
- package/dist/process/testing/index.d.ts +9 -0
- package/dist/process/testing/index.d.ts.map +1 -0
- package/dist/process/testing/index.js +9 -0
- package/dist/process/testing/index.js.map +1 -0
- package/dist/process/testing.d.ts +50 -0
- package/dist/process/testing.d.ts.map +1 -0
- package/dist/process/testing.js +59 -0
- package/dist/process/testing.js.map +1 -0
- package/dist/process/types.d.ts +540 -0
- package/dist/process/types.d.ts.map +1 -0
- package/dist/process/types.js +21 -0
- package/dist/process/types.js.map +1 -0
- package/dist/queue/index.d.ts +2 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +2 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.d.ts +34 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +108 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/runtime/process/compiled.d.ts +56 -0
- package/dist/runtime/process/compiled.d.ts.map +1 -0
- package/dist/runtime/process/compiled.js +221 -0
- package/dist/runtime/process/compiled.js.map +1 -0
- package/dist/runtime/process/executor.d.ts +279 -0
- package/dist/runtime/process/executor.d.ts.map +1 -0
- package/dist/runtime/process/executor.js +1941 -0
- package/dist/runtime/process/executor.js.map +1 -0
- package/dist/runtime/process/factory.d.ts +72 -0
- package/dist/runtime/process/factory.d.ts.map +1 -0
- package/dist/runtime/process/factory.js +78 -0
- package/dist/runtime/process/factory.js.map +1 -0
- package/dist/runtime/process/freeze.d.ts +5 -0
- package/dist/runtime/process/freeze.d.ts.map +1 -0
- package/dist/runtime/process/freeze.js +94 -0
- package/dist/runtime/process/freeze.js.map +1 -0
- package/dist/runtime/process/scheduled-task-timer.d.ts +52 -0
- package/dist/runtime/process/scheduled-task-timer.d.ts.map +1 -0
- package/dist/runtime/process/scheduled-task-timer.js +104 -0
- package/dist/runtime/process/scheduled-task-timer.js.map +1 -0
- package/dist/runtime/process/signal-bus.d.ts +186 -0
- package/dist/runtime/process/signal-bus.d.ts.map +1 -0
- package/dist/runtime/process/signal-bus.js +256 -0
- package/dist/runtime/process/signal-bus.js.map +1 -0
- package/dist/runtime/process/state-serializer.d.ts +30 -0
- package/dist/runtime/process/state-serializer.d.ts.map +1 -0
- package/dist/runtime/process/state-serializer.js +244 -0
- package/dist/runtime/process/state-serializer.js.map +1 -0
- package/dist/runtime/process/storage.d.ts +96 -0
- package/dist/runtime/process/storage.d.ts.map +1 -0
- package/dist/runtime/process/storage.js +165 -0
- package/dist/runtime/process/storage.js.map +1 -0
- package/dist/runtime/process/timer-scheduler.d.ts +115 -0
- package/dist/runtime/process/timer-scheduler.d.ts.map +1 -0
- package/dist/runtime/process/timer-scheduler.js +192 -0
- package/dist/runtime/process/timer-scheduler.js.map +1 -0
- package/dist/runtime/process/trace.d.ts +17 -0
- package/dist/runtime/process/trace.d.ts.map +1 -0
- package/dist/runtime/process/trace.js +26 -0
- package/dist/runtime/process/trace.js.map +1 -0
- package/dist/runtime/protobuf/encoding/index.d.ts +26 -0
- package/dist/runtime/protobuf/encoding/index.d.ts.map +1 -0
- package/dist/runtime/protobuf/encoding/index.js +30 -0
- package/dist/runtime/protobuf/encoding/index.js.map +1 -0
- package/dist/runtime/protobuf/encoding/reader.d.ts +182 -0
- package/dist/runtime/protobuf/encoding/reader.d.ts.map +1 -0
- package/dist/runtime/protobuf/encoding/reader.js +353 -0
- package/dist/runtime/protobuf/encoding/reader.js.map +1 -0
- package/dist/runtime/protobuf/encoding/varint.d.ts +67 -0
- package/dist/runtime/protobuf/encoding/varint.d.ts.map +1 -0
- package/dist/runtime/protobuf/encoding/varint.js +117 -0
- package/dist/runtime/protobuf/encoding/varint.js.map +1 -0
- package/dist/runtime/protobuf/encoding/wire-types.d.ts +62 -0
- package/dist/runtime/protobuf/encoding/wire-types.d.ts.map +1 -0
- package/dist/runtime/protobuf/encoding/wire-types.js +103 -0
- package/dist/runtime/protobuf/encoding/wire-types.js.map +1 -0
- package/dist/runtime/protobuf/encoding/writer.d.ts +147 -0
- package/dist/runtime/protobuf/encoding/writer.d.ts.map +1 -0
- package/dist/runtime/protobuf/encoding/writer.js +214 -0
- package/dist/runtime/protobuf/encoding/writer.js.map +1 -0
- package/dist/runtime/protobuf/index.d.ts +3 -0
- package/dist/runtime/protobuf/index.d.ts.map +1 -0
- package/dist/runtime/protobuf/index.js +3 -0
- package/dist/runtime/protobuf/index.js.map +1 -0
- package/dist/runtime/protobuf/serialized.d.ts +48 -0
- package/dist/runtime/protobuf/serialized.d.ts.map +1 -0
- package/dist/runtime/protobuf/serialized.js +517 -0
- package/dist/runtime/protobuf/serialized.js.map +1 -0
- package/package.json +209 -0
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observability System
|
|
3
|
+
*
|
|
4
|
+
* Provides logging, context propagation, and extensibility hooks for
|
|
5
|
+
* OpenTelemetry, Datadog, or other observability platforms.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Async context propagation via AsyncLocalStorage
|
|
9
|
+
* - Instrumentation hooks for traces, metrics, custom integrations
|
|
10
|
+
* - Structured logging with attributes
|
|
11
|
+
* - Automatic request context (requestId, route, etc.)
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Context data that propagates through the async tree.
|
|
15
|
+
* Used by loggers, traces, and metrics.
|
|
16
|
+
*
|
|
17
|
+
* Standard fields (set automatically by the framework):
|
|
18
|
+
* - requestId: Unique ID for the current request
|
|
19
|
+
* - route: Route name being handled
|
|
20
|
+
* - method: HTTP method
|
|
21
|
+
* - path: Request path
|
|
22
|
+
*
|
|
23
|
+
* Observability vendors (OpenTelemetry, Datadog, etc.) typically add their
|
|
24
|
+
* own fields like traceId, spanId via the string or symbol index signatures.
|
|
25
|
+
*
|
|
26
|
+
* You can add custom fields via runWithContext or logger.withContext.
|
|
27
|
+
*/
|
|
28
|
+
export interface ObservabilityContext {
|
|
29
|
+
/** Unique request identifier */
|
|
30
|
+
requestId?: string;
|
|
31
|
+
/** Custom string-keyed data */
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
/** Private data (symbol keys avoid naming conflicts between vendors) */
|
|
34
|
+
[key: symbol]: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the current observability context.
|
|
38
|
+
* Returns an empty object if no context is set.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getContext(): ObservabilityContext;
|
|
41
|
+
/**
|
|
42
|
+
* Capture the current context for later use in span linking.
|
|
43
|
+
* Use this when you need to link a new async tree back to the current one.
|
|
44
|
+
*
|
|
45
|
+
* @example Event publishing with trace linking
|
|
46
|
+
* ```typescript
|
|
47
|
+
* // In HTTP handler - capture context before publishing event
|
|
48
|
+
* const sourceContext = captureContext("caused_by");
|
|
49
|
+
*
|
|
50
|
+
* // Publish event with the captured context
|
|
51
|
+
* await eventBus.publish("order.created", {
|
|
52
|
+
* orderId: "123",
|
|
53
|
+
* _traceContext: sourceContext, // Pass along for linking
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* // In event handler - use captured context to link spans
|
|
57
|
+
* await runInScopeAsync(
|
|
58
|
+
* {
|
|
59
|
+
* type: "handler",
|
|
60
|
+
* name: "order.created",
|
|
61
|
+
* links: [event._traceContext], // Links back to HTTP request span
|
|
62
|
+
* },
|
|
63
|
+
* {},
|
|
64
|
+
* async () => { ... }
|
|
65
|
+
* );
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function captureContext(relationship?: LinkedContext['relationship']): LinkedContext;
|
|
69
|
+
/**
|
|
70
|
+
* Run a function with additional context.
|
|
71
|
+
* The context is merged with any existing context and propagates
|
|
72
|
+
* through the entire async tree.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // Add user context after authentication
|
|
77
|
+
* runWithContext({ userId: user.id, tenantId: user.tenantId }, async () => {
|
|
78
|
+
* // All logs, traces, metrics in this tree include userId + tenantId
|
|
79
|
+
* await processRequest();
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export declare function runWithContext<T>(context: ObservabilityContext, fn: () => T): T;
|
|
84
|
+
/**
|
|
85
|
+
* Enter a context scope using the `using` keyword.
|
|
86
|
+
* The context is merged with existing context and automatically
|
|
87
|
+
* restored when the scope exits.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* // Add user context after authentication
|
|
92
|
+
* using _ = withContext({ userId: user.id, tenantId: user.tenantId });
|
|
93
|
+
* // All logs, traces, metrics include userId + tenantId
|
|
94
|
+
* await processRequest();
|
|
95
|
+
* // Context automatically restored when scope exits
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* @example Nested contexts
|
|
99
|
+
* ```typescript
|
|
100
|
+
* using _ = withContext({ requestId: "req-123" });
|
|
101
|
+
* logger.info("Starting"); // has requestId
|
|
102
|
+
*
|
|
103
|
+
* {
|
|
104
|
+
* using _ = withContext({ userId: "user-456" });
|
|
105
|
+
* logger.info("Processing"); // has requestId AND userId
|
|
106
|
+
* }
|
|
107
|
+
*
|
|
108
|
+
* logger.info("Done"); // only has requestId
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function withContext(context: ObservabilityContext): Disposable;
|
|
112
|
+
/** Log levels (trace is most verbose, error is least) */
|
|
113
|
+
export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';
|
|
114
|
+
/** Current minimum log level. Read cheap, no allocation. */
|
|
115
|
+
export declare function getMinLogLevel(): LogLevel;
|
|
116
|
+
/** Override the minimum log level at runtime. Takes effect on the next log call. */
|
|
117
|
+
export declare function setMinLogLevel(level: LogLevel): void;
|
|
118
|
+
/**
|
|
119
|
+
* A captured trace context that can be used to link spans across async boundaries.
|
|
120
|
+
* Used when a new scope is spawned from another (e.g., event handler triggered by HTTP request).
|
|
121
|
+
*/
|
|
122
|
+
export interface LinkedContext {
|
|
123
|
+
/** The observability context from the originating scope */
|
|
124
|
+
context: ObservabilityContext;
|
|
125
|
+
/** Relationship type for the link */
|
|
126
|
+
relationship?: 'caused_by' | 'follows_from' | 'related';
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Information about the current scope (request, handler, etc.)
|
|
130
|
+
*/
|
|
131
|
+
export interface ScopeInfo {
|
|
132
|
+
/** Type of scope */
|
|
133
|
+
type: 'request' | 'middleware' | 'guard' | 'handler' | 'custom';
|
|
134
|
+
/** Name of the scope (route name, middleware name, etc.) */
|
|
135
|
+
name: string;
|
|
136
|
+
/** Additional attributes */
|
|
137
|
+
attributes?: Record<string, unknown>;
|
|
138
|
+
/**
|
|
139
|
+
* Links to related contexts from other async trees.
|
|
140
|
+
* Used for distributed tracing when a scope is spawned from another
|
|
141
|
+
* (e.g., event handler triggered by an HTTP request).
|
|
142
|
+
*/
|
|
143
|
+
links?: LinkedContext[];
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Instrumentation interface for observability extensions.
|
|
147
|
+
*
|
|
148
|
+
* Implement this to integrate with any observability system:
|
|
149
|
+
* metrics, tracing (OpenTelemetry, Datadog), custom logging, etc.
|
|
150
|
+
*
|
|
151
|
+
* @example Simple metrics instrumentation
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const metricsInstrumentation: Instrumentation = {
|
|
154
|
+
* name: "metrics",
|
|
155
|
+
*
|
|
156
|
+
* onScopeEnd(context, info, error) {
|
|
157
|
+
* if (info.type === "request") {
|
|
158
|
+
* metrics.increment("http.requests.total", {
|
|
159
|
+
* route: info.name,
|
|
160
|
+
* status: error ? "error" : "success",
|
|
161
|
+
* });
|
|
162
|
+
* }
|
|
163
|
+
* },
|
|
164
|
+
* };
|
|
165
|
+
*
|
|
166
|
+
* registerInstrumentation(metricsInstrumentation);
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @example OpenTelemetry integration (see @justscale/feature-otel)
|
|
170
|
+
* ```typescript
|
|
171
|
+
* import { otelFeature } from "@justscale/feature-otel";
|
|
172
|
+
*
|
|
173
|
+
* // Add to your app features for automatic tracing
|
|
174
|
+
* const app = createStandaloneApp({
|
|
175
|
+
* features: [otelFeature({ serviceName: "my-api" })],
|
|
176
|
+
* });
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export interface Instrumentation {
|
|
180
|
+
/** Unique name for this instrumentation */
|
|
181
|
+
name: string;
|
|
182
|
+
/**
|
|
183
|
+
* Called when a new scope starts (request, middleware, etc.)
|
|
184
|
+
* Can return modified context to add trace IDs, span references, etc.
|
|
185
|
+
*/
|
|
186
|
+
onScopeStart?(context: ObservabilityContext, info: ScopeInfo): ObservabilityContext | void;
|
|
187
|
+
/**
|
|
188
|
+
* Called when a scope ends.
|
|
189
|
+
* Use this to end spans, record metrics, etc.
|
|
190
|
+
*/
|
|
191
|
+
onScopeEnd?(context: ObservabilityContext, info: ScopeInfo, error?: Error): void;
|
|
192
|
+
/**
|
|
193
|
+
* Called on each log statement.
|
|
194
|
+
* Use this to forward logs to external systems or add to trace spans.
|
|
195
|
+
*/
|
|
196
|
+
onLog?(level: LogLevel, message: string, attributes: Record<string, unknown>, context: ObservabilityContext): void;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Register an instrumentation for observability hooks.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* registerInstrumentation({
|
|
204
|
+
* name: "custom-metrics",
|
|
205
|
+
* onScopeEnd(context, info) {
|
|
206
|
+
* if (info.type === "request") {
|
|
207
|
+
* metrics.recordRequestDuration(info.name, Date.now() - context.startTime);
|
|
208
|
+
* }
|
|
209
|
+
* },
|
|
210
|
+
* });
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
export declare function registerInstrumentation(instrumentation: Instrumentation): void;
|
|
214
|
+
/**
|
|
215
|
+
* Remove a registered instrumentation by name.
|
|
216
|
+
*/
|
|
217
|
+
export declare function unregisterInstrumentation(name: string): boolean;
|
|
218
|
+
/**
|
|
219
|
+
* Get all registered instrumentations (for testing).
|
|
220
|
+
*/
|
|
221
|
+
export declare function getInstrumentations(): readonly Instrumentation[];
|
|
222
|
+
/**
|
|
223
|
+
* Run a function within a named scope.
|
|
224
|
+
* Notifies all instrumentations and handles errors properly.
|
|
225
|
+
*
|
|
226
|
+
* @internal Used by app.ts for request/middleware/handler scopes
|
|
227
|
+
*/
|
|
228
|
+
export declare function runInScope<T>(info: ScopeInfo, baseContext: ObservabilityContext, fn: () => T): T;
|
|
229
|
+
/**
|
|
230
|
+
* Async version of runInScope.
|
|
231
|
+
* @internal
|
|
232
|
+
*/
|
|
233
|
+
export declare function runInScopeAsync<T>(info: ScopeInfo, baseContext: ObservabilityContext, fn: () => Promise<T>): Promise<T>;
|
|
234
|
+
/**
|
|
235
|
+
* Log attributes for structured logging.
|
|
236
|
+
*/
|
|
237
|
+
export type LogAttributes = Record<string, unknown>;
|
|
238
|
+
/**
|
|
239
|
+
* Abstract Logger - use as DI token. Built-in service automatically
|
|
240
|
+
* available to all services and handlers.
|
|
241
|
+
*/
|
|
242
|
+
export declare abstract class Logger {
|
|
243
|
+
abstract trace(message: string, attributes?: LogAttributes): void;
|
|
244
|
+
abstract debug(message: string, attributes?: LogAttributes): void;
|
|
245
|
+
abstract info(message: string, attributes?: LogAttributes): void;
|
|
246
|
+
abstract warn(message: string, attributes?: LogAttributes): void;
|
|
247
|
+
abstract error(message: string, attributes?: LogAttributes): void;
|
|
248
|
+
abstract child(name: string): Logger;
|
|
249
|
+
withContext<T>(context: ObservabilityContext, fn: () => T): T;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Factory for creating Logger instances with context.
|
|
253
|
+
* Implement this to use a custom logger (Pino, Winston, etc.)
|
|
254
|
+
*/
|
|
255
|
+
export interface LoggerFactory {
|
|
256
|
+
create(name: string): Logger;
|
|
257
|
+
}
|
|
258
|
+
export declare class ConsoleLogger extends Logger {
|
|
259
|
+
private readonly name;
|
|
260
|
+
constructor(name: string);
|
|
261
|
+
private log;
|
|
262
|
+
trace(message: string, attributes?: LogAttributes): void;
|
|
263
|
+
debug(message: string, attributes?: LogAttributes): void;
|
|
264
|
+
info(message: string, attributes?: LogAttributes): void;
|
|
265
|
+
warn(message: string, attributes?: LogAttributes): void;
|
|
266
|
+
error(message: string, attributes?: LogAttributes): void;
|
|
267
|
+
child(childName: string): Logger;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Default logger factory using ConsoleLogger.
|
|
271
|
+
*/
|
|
272
|
+
export declare class ConsoleLoggerFactory implements LoggerFactory {
|
|
273
|
+
create(name: string): Logger;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Symbol to identify Logger as a built-in service.
|
|
277
|
+
* Used by Container to detect and special-case Logger resolution.
|
|
278
|
+
*/
|
|
279
|
+
export declare const LOGGER_TOKEN: unique symbol;
|
|
280
|
+
/** @internal */
|
|
281
|
+
export declare function isLoggerToken(token: unknown): token is typeof Logger;
|
|
282
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observability System
|
|
3
|
+
*
|
|
4
|
+
* Provides logging, context propagation, and extensibility hooks for
|
|
5
|
+
* OpenTelemetry, Datadog, or other observability platforms.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Async context propagation via AsyncLocalStorage
|
|
9
|
+
* - Instrumentation hooks for traces, metrics, custom integrations
|
|
10
|
+
* - Structured logging with attributes
|
|
11
|
+
* - Automatic request context (requestId, route, etc.)
|
|
12
|
+
*/
|
|
13
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
14
|
+
/**
|
|
15
|
+
* Global async local storage for observability context.
|
|
16
|
+
* All loggers, traces, and metrics read from this.
|
|
17
|
+
*/
|
|
18
|
+
const asyncContext = new AsyncLocalStorage();
|
|
19
|
+
/**
|
|
20
|
+
* Get the current observability context.
|
|
21
|
+
* Returns an empty object if no context is set.
|
|
22
|
+
*/
|
|
23
|
+
export function getContext() {
|
|
24
|
+
return asyncContext.getStore() ?? {};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Capture the current context for later use in span linking.
|
|
28
|
+
* Use this when you need to link a new async tree back to the current one.
|
|
29
|
+
*
|
|
30
|
+
* @example Event publishing with trace linking
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // In HTTP handler - capture context before publishing event
|
|
33
|
+
* const sourceContext = captureContext("caused_by");
|
|
34
|
+
*
|
|
35
|
+
* // Publish event with the captured context
|
|
36
|
+
* await eventBus.publish("order.created", {
|
|
37
|
+
* orderId: "123",
|
|
38
|
+
* _traceContext: sourceContext, // Pass along for linking
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // In event handler - use captured context to link spans
|
|
42
|
+
* await runInScopeAsync(
|
|
43
|
+
* {
|
|
44
|
+
* type: "handler",
|
|
45
|
+
* name: "order.created",
|
|
46
|
+
* links: [event._traceContext], // Links back to HTTP request span
|
|
47
|
+
* },
|
|
48
|
+
* {},
|
|
49
|
+
* async () => { ... }
|
|
50
|
+
* );
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function captureContext(relationship = 'caused_by') {
|
|
54
|
+
return {
|
|
55
|
+
context: { ...getContext() }, // Clone to avoid mutations
|
|
56
|
+
relationship,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run a function with additional context.
|
|
61
|
+
* The context is merged with any existing context and propagates
|
|
62
|
+
* through the entire async tree.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* // Add user context after authentication
|
|
67
|
+
* runWithContext({ userId: user.id, tenantId: user.tenantId }, async () => {
|
|
68
|
+
* // All logs, traces, metrics in this tree include userId + tenantId
|
|
69
|
+
* await processRequest();
|
|
70
|
+
* });
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function runWithContext(context, fn) {
|
|
74
|
+
const currentContext = getContext();
|
|
75
|
+
const mergedContext = { ...currentContext, ...context };
|
|
76
|
+
// Notify instrumentations of scope start
|
|
77
|
+
const scopeInfo = { type: 'custom', name: 'context' };
|
|
78
|
+
for (const inst of instrumentations) {
|
|
79
|
+
inst.onScopeStart?.(mergedContext, scopeInfo);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return asyncContext.run(mergedContext, fn);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
// Notify instrumentations of scope end
|
|
86
|
+
for (const inst of instrumentations) {
|
|
87
|
+
inst.onScopeEnd?.(mergedContext, scopeInfo);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Enter a context scope using the `using` keyword.
|
|
93
|
+
* The context is merged with existing context and automatically
|
|
94
|
+
* restored when the scope exits.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* // Add user context after authentication
|
|
99
|
+
* using _ = withContext({ userId: user.id, tenantId: user.tenantId });
|
|
100
|
+
* // All logs, traces, metrics include userId + tenantId
|
|
101
|
+
* await processRequest();
|
|
102
|
+
* // Context automatically restored when scope exits
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* @example Nested contexts
|
|
106
|
+
* ```typescript
|
|
107
|
+
* using _ = withContext({ requestId: "req-123" });
|
|
108
|
+
* logger.info("Starting"); // has requestId
|
|
109
|
+
*
|
|
110
|
+
* {
|
|
111
|
+
* using _ = withContext({ userId: "user-456" });
|
|
112
|
+
* logger.info("Processing"); // has requestId AND userId
|
|
113
|
+
* }
|
|
114
|
+
*
|
|
115
|
+
* logger.info("Done"); // only has requestId
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
export function withContext(context) {
|
|
119
|
+
const previousContext = asyncContext.getStore() ?? {};
|
|
120
|
+
const mergedContext = { ...previousContext, ...context };
|
|
121
|
+
// Notify instrumentations of scope start
|
|
122
|
+
const scopeInfo = { type: 'custom', name: 'context' };
|
|
123
|
+
for (const inst of instrumentations) {
|
|
124
|
+
inst.onScopeStart?.(mergedContext, scopeInfo);
|
|
125
|
+
}
|
|
126
|
+
// Enter the new context
|
|
127
|
+
asyncContext.enterWith(mergedContext);
|
|
128
|
+
return {
|
|
129
|
+
[Symbol.dispose]() {
|
|
130
|
+
// Notify instrumentations of scope end
|
|
131
|
+
for (const inst of instrumentations) {
|
|
132
|
+
inst.onScopeEnd?.(mergedContext, scopeInfo);
|
|
133
|
+
}
|
|
134
|
+
// Restore previous context
|
|
135
|
+
asyncContext.enterWith(previousContext);
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Numeric order used to compare levels. `trace` is lowest (most
|
|
141
|
+
* verbose) - a log at level X is emitted when `LEVEL_ORDER[X]` is
|
|
142
|
+
* `>= LEVEL_ORDER[minLevel]`.
|
|
143
|
+
*/
|
|
144
|
+
const LEVEL_ORDER = {
|
|
145
|
+
trace: 0, debug: 1, info: 2, warn: 3, error: 4,
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Process-wide minimum log level. Seeded from `JUSTSCALE_LOG_LEVEL`
|
|
149
|
+
* (`trace|debug|info|warn|error`) or `JUSTSCALE_TRACE=1` for trace.
|
|
150
|
+
*/
|
|
151
|
+
let minLogLevel = resolveInitialLogLevel();
|
|
152
|
+
function resolveInitialLogLevel() {
|
|
153
|
+
const explicit = (process.env.JUSTSCALE_LOG_LEVEL ?? '').toLowerCase();
|
|
154
|
+
if (explicit === 'trace' || explicit === 'debug' || explicit === 'info' || explicit === 'warn' || explicit === 'error') {
|
|
155
|
+
return explicit;
|
|
156
|
+
}
|
|
157
|
+
if (process.env.JUSTSCALE_TRACE === '1' || process.env.JUSTSCALE_TRACE === 'true') {
|
|
158
|
+
return 'trace';
|
|
159
|
+
}
|
|
160
|
+
return 'info';
|
|
161
|
+
}
|
|
162
|
+
/** Current minimum log level. Read cheap, no allocation. */
|
|
163
|
+
export function getMinLogLevel() {
|
|
164
|
+
return minLogLevel;
|
|
165
|
+
}
|
|
166
|
+
/** Override the minimum log level at runtime. Takes effect on the next log call. */
|
|
167
|
+
export function setMinLogLevel(level) {
|
|
168
|
+
minLogLevel = level;
|
|
169
|
+
}
|
|
170
|
+
/** Registered instrumentations */
|
|
171
|
+
const instrumentations = [];
|
|
172
|
+
/**
|
|
173
|
+
* Register an instrumentation for observability hooks.
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* registerInstrumentation({
|
|
178
|
+
* name: "custom-metrics",
|
|
179
|
+
* onScopeEnd(context, info) {
|
|
180
|
+
* if (info.type === "request") {
|
|
181
|
+
* metrics.recordRequestDuration(info.name, Date.now() - context.startTime);
|
|
182
|
+
* }
|
|
183
|
+
* },
|
|
184
|
+
* });
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
export function registerInstrumentation(instrumentation) {
|
|
188
|
+
// Prevent duplicates
|
|
189
|
+
const existing = instrumentations.findIndex((i) => i.name === instrumentation.name);
|
|
190
|
+
if (existing >= 0) {
|
|
191
|
+
instrumentations[existing] = instrumentation;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
instrumentations.push(instrumentation);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Remove a registered instrumentation by name.
|
|
199
|
+
*/
|
|
200
|
+
export function unregisterInstrumentation(name) {
|
|
201
|
+
const index = instrumentations.findIndex((i) => i.name === name);
|
|
202
|
+
if (index >= 0) {
|
|
203
|
+
instrumentations.splice(index, 1);
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get all registered instrumentations (for testing).
|
|
210
|
+
*/
|
|
211
|
+
export function getInstrumentations() {
|
|
212
|
+
return instrumentations;
|
|
213
|
+
}
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// Scope Management (used internally by app.ts)
|
|
216
|
+
// ============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Run a function within a named scope.
|
|
219
|
+
* Notifies all instrumentations and handles errors properly.
|
|
220
|
+
*
|
|
221
|
+
* @internal Used by app.ts for request/middleware/handler scopes
|
|
222
|
+
*/
|
|
223
|
+
export function runInScope(info, baseContext, fn) {
|
|
224
|
+
let context = { ...getContext(), ...baseContext };
|
|
225
|
+
// Let instrumentations modify context (e.g., add span IDs)
|
|
226
|
+
for (const inst of instrumentations) {
|
|
227
|
+
const modified = inst.onScopeStart?.(context, info);
|
|
228
|
+
if (modified)
|
|
229
|
+
context = modified;
|
|
230
|
+
}
|
|
231
|
+
let error;
|
|
232
|
+
try {
|
|
233
|
+
return asyncContext.run(context, fn);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
error = e instanceof Error ? e : new Error(String(e));
|
|
237
|
+
throw e;
|
|
238
|
+
}
|
|
239
|
+
finally {
|
|
240
|
+
for (const inst of instrumentations) {
|
|
241
|
+
inst.onScopeEnd?.(context, info, error);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Async version of runInScope.
|
|
247
|
+
* @internal
|
|
248
|
+
*/
|
|
249
|
+
export async function runInScopeAsync(info, baseContext, fn) {
|
|
250
|
+
let context = { ...getContext(), ...baseContext };
|
|
251
|
+
// Let instrumentations modify context (e.g., add span IDs)
|
|
252
|
+
for (const inst of instrumentations) {
|
|
253
|
+
const modified = inst.onScopeStart?.(context, info);
|
|
254
|
+
if (modified)
|
|
255
|
+
context = modified;
|
|
256
|
+
}
|
|
257
|
+
let error;
|
|
258
|
+
try {
|
|
259
|
+
return await asyncContext.run(context, fn);
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
error = e instanceof Error ? e : new Error(String(e));
|
|
263
|
+
throw e;
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
for (const inst of instrumentations) {
|
|
267
|
+
inst.onScopeEnd?.(context, info, error);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Abstract Logger - use as DI token. Built-in service automatically
|
|
273
|
+
* available to all services and handlers.
|
|
274
|
+
*/
|
|
275
|
+
export class Logger {
|
|
276
|
+
withContext(context, fn) {
|
|
277
|
+
return runWithContext(context, fn);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// Default Console Logger
|
|
282
|
+
// ============================================================================
|
|
283
|
+
export class ConsoleLogger extends Logger {
|
|
284
|
+
name;
|
|
285
|
+
constructor(name) {
|
|
286
|
+
super();
|
|
287
|
+
this.name = name;
|
|
288
|
+
}
|
|
289
|
+
log(level, message, attributes) {
|
|
290
|
+
if (LEVEL_ORDER[level] < LEVEL_ORDER[minLogLevel]) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const ctx = getContext();
|
|
294
|
+
const timestamp = new Date().toISOString();
|
|
295
|
+
// Build context string from observability context
|
|
296
|
+
const ctxEntries = Object.entries(ctx)
|
|
297
|
+
.filter(([k]) => !k.startsWith('_')) // Skip internal fields
|
|
298
|
+
.map(([k, v]) => `${k}=${String(v)}`);
|
|
299
|
+
const ctxStr = ctxEntries.length > 0 ? ` [${ctxEntries.join(' ')}]` : '';
|
|
300
|
+
// Build attributes string
|
|
301
|
+
const attrStr = attributes
|
|
302
|
+
? ' ' + JSON.stringify(attributes)
|
|
303
|
+
: '';
|
|
304
|
+
const formatted = `[${timestamp}] [${level.toUpperCase()}] [${this.name}]${ctxStr} ${message}${attrStr}`;
|
|
305
|
+
// Output to console
|
|
306
|
+
switch (level) {
|
|
307
|
+
case 'trace':
|
|
308
|
+
console.debug(formatted); // trace goes to debug channel
|
|
309
|
+
break;
|
|
310
|
+
case 'debug':
|
|
311
|
+
console.debug(formatted);
|
|
312
|
+
break;
|
|
313
|
+
case 'info':
|
|
314
|
+
console.info(formatted);
|
|
315
|
+
break;
|
|
316
|
+
case 'warn':
|
|
317
|
+
console.warn(formatted);
|
|
318
|
+
break;
|
|
319
|
+
case 'error':
|
|
320
|
+
console.error(formatted);
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
// Notify instrumentations
|
|
324
|
+
for (const inst of instrumentations) {
|
|
325
|
+
inst.onLog?.(level, message, attributes ?? {}, ctx);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
trace(message, attributes) {
|
|
329
|
+
this.log('trace', message, attributes);
|
|
330
|
+
}
|
|
331
|
+
debug(message, attributes) {
|
|
332
|
+
this.log('debug', message, attributes);
|
|
333
|
+
}
|
|
334
|
+
info(message, attributes) {
|
|
335
|
+
this.log('info', message, attributes);
|
|
336
|
+
}
|
|
337
|
+
warn(message, attributes) {
|
|
338
|
+
this.log('warn', message, attributes);
|
|
339
|
+
}
|
|
340
|
+
error(message, attributes) {
|
|
341
|
+
this.log('error', message, attributes);
|
|
342
|
+
}
|
|
343
|
+
child(childName) {
|
|
344
|
+
return new ConsoleLogger(`${this.name}:${childName}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Default logger factory using ConsoleLogger.
|
|
349
|
+
*/
|
|
350
|
+
export class ConsoleLoggerFactory {
|
|
351
|
+
create(name) {
|
|
352
|
+
return new ConsoleLogger(name);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// ============================================================================
|
|
356
|
+
// Built-in Token Marker
|
|
357
|
+
// ============================================================================
|
|
358
|
+
/**
|
|
359
|
+
* Symbol to identify Logger as a built-in service.
|
|
360
|
+
* Used by Container to detect and special-case Logger resolution.
|
|
361
|
+
*/
|
|
362
|
+
export const LOGGER_TOKEN = Symbol('justscale:Logger');
|
|
363
|
+
Logger[LOGGER_TOKEN] = true;
|
|
364
|
+
/** @internal */
|
|
365
|
+
export function isLoggerToken(token) {
|
|
366
|
+
return token === Logger || token?.[LOGGER_TOKEN] === true;
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|