@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,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware & Guard Definitions
|
|
3
|
+
*
|
|
4
|
+
* Provides middleware and guard types with dependency injection support.
|
|
5
|
+
*/
|
|
6
|
+
import type { ServiceToken, ResolvedDeps } from './service.js';
|
|
7
|
+
/**
|
|
8
|
+
* Middleware function that can add properties to the context.
|
|
9
|
+
* Returns an object that will be merged into the context.
|
|
10
|
+
*/
|
|
11
|
+
export type Middleware<TIn, TOut> = (ctx: TIn) => TOut | Promise<TOut>;
|
|
12
|
+
/**
|
|
13
|
+
* Guard function that gates access to a route.
|
|
14
|
+
* Returns true to allow, false to block (short-circuit).
|
|
15
|
+
* Can also throw an error for custom error handling.
|
|
16
|
+
*/
|
|
17
|
+
export type Guard<TContext> = (ctx: TContext) => boolean | Promise<boolean>;
|
|
18
|
+
/** Runtime marker for middleware definitions */
|
|
19
|
+
export declare const MIDDLEWARE_DEF_MARKER: unique symbol;
|
|
20
|
+
/** Runtime marker for guard definitions */
|
|
21
|
+
export declare const GUARD_DEF_MARKER: unique symbol;
|
|
22
|
+
/**
|
|
23
|
+
* Middleware definition with dependency injection.
|
|
24
|
+
* Like ServiceDef, but produces a middleware function.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const AuthMiddleware = createMiddleware({
|
|
29
|
+
* inject: { users: UserService, tokens: TokenService },
|
|
30
|
+
* handler: ({ users, tokens }) => async (ctx) => {
|
|
31
|
+
* const user = await tokens.validate(ctx.signals.token);
|
|
32
|
+
* return { user }; // Adds { user: User } to context
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export interface MiddlewareDef<TAdded extends object = object, TDeps extends Record<string, ServiceToken> = Record<string, ServiceToken>> {
|
|
38
|
+
readonly __kind: typeof MIDDLEWARE_DEF_MARKER;
|
|
39
|
+
readonly deps: TDeps;
|
|
40
|
+
readonly factory: (deps: ResolvedDeps<TDeps>) => Middleware<any, TAdded>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Guard definition with dependency injection.
|
|
44
|
+
* Like ServiceDef, but produces a guard function.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const IsAdmin = createGuard({
|
|
49
|
+
* inject: { permissions: PermissionService },
|
|
50
|
+
* check: ({ permissions }) => async (ctx) => {
|
|
51
|
+
* return permissions.isAdmin(ctx.user);
|
|
52
|
+
* }
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export interface GuardDef<TDeps extends Record<string, ServiceToken> = Record<string, ServiceToken>> {
|
|
57
|
+
readonly __kind: typeof GUARD_DEF_MARKER;
|
|
58
|
+
readonly deps: TDeps;
|
|
59
|
+
readonly factory: (deps: ResolvedDeps<TDeps>) => Guard<any>;
|
|
60
|
+
}
|
|
61
|
+
/** Check if value is a MiddlewareDef */
|
|
62
|
+
export declare function isMiddlewareDef(value: unknown): value is MiddlewareDef<any, any>;
|
|
63
|
+
/** Check if value is a GuardDef */
|
|
64
|
+
export declare function isGuardDef(value: unknown): value is GuardDef<any>;
|
|
65
|
+
/**
|
|
66
|
+
* Create a middleware with typed dependencies.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const AuthMiddleware = createMiddleware({
|
|
71
|
+
* inject: { tokens: TokenService },
|
|
72
|
+
* handler: ({ tokens }) => async (ctx) => {
|
|
73
|
+
* const user = await tokens.validate(ctx.signals.token);
|
|
74
|
+
* return { user };
|
|
75
|
+
* }
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export declare function createMiddleware<const TDeps extends Record<string, ServiceToken>, TAdded extends object>(config: {
|
|
80
|
+
inject: TDeps;
|
|
81
|
+
handler: (deps: ResolvedDeps<TDeps>) => Middleware<any, TAdded>;
|
|
82
|
+
}): MiddlewareDef<TAdded, TDeps>;
|
|
83
|
+
/**
|
|
84
|
+
* Create a guard with typed dependencies.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const IsAdmin = createGuard({
|
|
89
|
+
* inject: { perms: PermissionService },
|
|
90
|
+
* check: ({ perms }) => (ctx) => perms.isAdmin(ctx.user)
|
|
91
|
+
* });
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function createGuard<const TDeps extends Record<string, ServiceToken>>(config: {
|
|
95
|
+
inject: TDeps;
|
|
96
|
+
check: (deps: ResolvedDeps<TDeps>) => Guard<any>;
|
|
97
|
+
}): GuardDef<TDeps>;
|
|
98
|
+
/** Unresolved middleware - can be a function or a definition */
|
|
99
|
+
export type UnresolvedMiddleware = Middleware<any, any> | MiddlewareDef<any, any>;
|
|
100
|
+
/** Unresolved guard - can be a function or a definition */
|
|
101
|
+
export type UnresolvedGuard = Guard<any> | GuardDef<any>;
|
|
102
|
+
/** Extract the "added" type from a MiddlewareDef */
|
|
103
|
+
export type MiddlewareAdded<T> = T extends MiddlewareDef<infer A, any> ? A : never;
|
|
104
|
+
/** Input to .use() - either a function or a definition */
|
|
105
|
+
export type MiddlewareInput<TContext, TAdded extends object> = Middleware<TContext, TAdded> | MiddlewareDef<TAdded, any>;
|
|
106
|
+
/** Input to .guard() - either a function or a definition */
|
|
107
|
+
export type GuardInput<TContext> = Guard<TContext> | GuardDef<any>;
|
|
108
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/core/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware & Guard Definitions
|
|
3
|
+
*
|
|
4
|
+
* Provides middleware and guard types with dependency injection support.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Runtime Markers (declared first so interface __kind types can reference them)
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/** Runtime marker for middleware definitions */
|
|
10
|
+
export const MIDDLEWARE_DEF_MARKER = Symbol('@justscale/middleware');
|
|
11
|
+
/** Runtime marker for guard definitions */
|
|
12
|
+
export const GUARD_DEF_MARKER = Symbol('@justscale/guard');
|
|
13
|
+
/** Check if value is a MiddlewareDef */
|
|
14
|
+
export function isMiddlewareDef(value) {
|
|
15
|
+
return typeof value === 'object' && value !== null && value.__kind === MIDDLEWARE_DEF_MARKER;
|
|
16
|
+
}
|
|
17
|
+
/** Check if value is a GuardDef */
|
|
18
|
+
export function isGuardDef(value) {
|
|
19
|
+
return typeof value === 'object' && value !== null && value.__kind === GUARD_DEF_MARKER;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a middleware with typed dependencies.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const AuthMiddleware = createMiddleware({
|
|
27
|
+
* inject: { tokens: TokenService },
|
|
28
|
+
* handler: ({ tokens }) => async (ctx) => {
|
|
29
|
+
* const user = await tokens.validate(ctx.signals.token);
|
|
30
|
+
* return { user };
|
|
31
|
+
* }
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export function createMiddleware(config) {
|
|
36
|
+
return {
|
|
37
|
+
__kind: MIDDLEWARE_DEF_MARKER,
|
|
38
|
+
deps: config.inject,
|
|
39
|
+
factory: config.handler,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a guard with typed dependencies.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const IsAdmin = createGuard({
|
|
48
|
+
* inject: { perms: PermissionService },
|
|
49
|
+
* check: ({ perms }) => (ctx) => perms.isAdmin(ctx.user)
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function createGuard(config) {
|
|
54
|
+
return {
|
|
55
|
+
__kind: GUARD_DEF_MARKER,
|
|
56
|
+
deps: config.inject,
|
|
57
|
+
factory: config.check,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/core/middleware.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,+EAA+E;AAC/E,gFAAgF;AAChF,+EAA+E;AAE/E,gDAAgD;AAChD,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAErE,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAoD3D,wCAAwC;AACxC,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAa,CAAC,MAAM,KAAK,qBAAqB,CAAC;AACxG,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAa,CAAC,MAAM,KAAK,gBAAgB,CAAC;AACnG,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAG9B,MAGD;IACC,OAAO;QACL,MAAM,EAAE,qBAAqB;QAC7B,IAAI,EAAE,MAAM,CAAC,MAAM;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAEzB,MAGD;IACC,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,IAAI,EAAE,MAAM,CAAC,MAAM;QACnB,OAAO,EAAE,MAAM,CAAC,KAAK;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI method registry - protocols self-describe how their route
|
|
3
|
+
* methods surface in an OpenAPI 3.1 document.
|
|
4
|
+
*
|
|
5
|
+
* Each protocol package that wants to appear in OpenAPI specs registers
|
|
6
|
+
* its method names on module load:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // @justscale/http
|
|
10
|
+
* import { registerOpenApiMethod } from '@justscale/core';
|
|
11
|
+
* for (const m of ['GET', 'POST', 'PUT', ...]) {
|
|
12
|
+
* registerOpenApiMethod(m, { httpMethod: m.toLowerCase() });
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // @justscale/sse
|
|
16
|
+
* registerOpenApiMethod('SSE', {
|
|
17
|
+
* httpMethod: 'get',
|
|
18
|
+
* responseContentType: 'text/event-stream',
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* The OpenAPI generator (`@justscale/feature-openapi`) consults this
|
|
23
|
+
* registry to decide (a) whether a route is documentable at all -
|
|
24
|
+
* CLI / WebSocket / Event routes have no standard OpenAPI
|
|
25
|
+
* representation, so they register nothing and get filtered out; and
|
|
26
|
+
* (b) what HTTP method to emit under `paths` and which response
|
|
27
|
+
* content type to advertise.
|
|
28
|
+
*
|
|
29
|
+
* Core knows nothing about HTTP or SSE directly - it just holds a
|
|
30
|
+
* registry. Protocol packages own their own entries.
|
|
31
|
+
*/
|
|
32
|
+
/**
|
|
33
|
+
* How a protocol's runtime method value maps onto OpenAPI 3.1 shape.
|
|
34
|
+
*/
|
|
35
|
+
export interface OpenApiMethodMapping {
|
|
36
|
+
/**
|
|
37
|
+
* OpenAPI operation verb - one of `get`, `post`, `put`, `patch`,
|
|
38
|
+
* `delete`, `head`, `options`, `trace`. SSE-style protocols can
|
|
39
|
+
* declare `httpMethod: 'get'` to be emitted as a GET with a custom
|
|
40
|
+
* response content type.
|
|
41
|
+
*/
|
|
42
|
+
readonly httpMethod: string;
|
|
43
|
+
/**
|
|
44
|
+
* Optional content type for the emitted response. Defaults to
|
|
45
|
+
* `application/json` when unset. SSE sets this to
|
|
46
|
+
* `text/event-stream`; future streaming-newline protocols might
|
|
47
|
+
* use `application/x-ndjson`.
|
|
48
|
+
*/
|
|
49
|
+
readonly responseContentType?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Register a protocol method name as OpenAPI-visible.
|
|
53
|
+
* Duplicate registrations for the same method are ignored (first-win)
|
|
54
|
+
* so two protocols claiming the same name can't step on each other.
|
|
55
|
+
*/
|
|
56
|
+
export declare function registerOpenApiMethod(method: string, mapping: OpenApiMethodMapping): void;
|
|
57
|
+
/** Resolve a runtime method value to its OpenAPI emission shape. */
|
|
58
|
+
export declare function getOpenApiMethodMapping(method: unknown): OpenApiMethodMapping | undefined;
|
|
59
|
+
/** Snapshot of every registered method (for tests / debug). */
|
|
60
|
+
export declare function getRegisteredOpenApiMethods(): ReadonlyMap<string, OpenApiMethodMapping>;
|
|
61
|
+
//# sourceMappingURL=openapi-methods.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-methods.d.ts","sourceRoot":"","sources":["../../src/core/openapi-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAIN;AAED,oEAAoE;AACpE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,GACd,oBAAoB,GAAG,SAAS,CAGlC;AAED,+DAA+D;AAC/D,wBAAgB,2BAA2B,IAAI,WAAW,CACxD,MAAM,EACN,oBAAoB,CACrB,CAEA"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI method registry - protocols self-describe how their route
|
|
3
|
+
* methods surface in an OpenAPI 3.1 document.
|
|
4
|
+
*
|
|
5
|
+
* Each protocol package that wants to appear in OpenAPI specs registers
|
|
6
|
+
* its method names on module load:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* // @justscale/http
|
|
10
|
+
* import { registerOpenApiMethod } from '@justscale/core';
|
|
11
|
+
* for (const m of ['GET', 'POST', 'PUT', ...]) {
|
|
12
|
+
* registerOpenApiMethod(m, { httpMethod: m.toLowerCase() });
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* // @justscale/sse
|
|
16
|
+
* registerOpenApiMethod('SSE', {
|
|
17
|
+
* httpMethod: 'get',
|
|
18
|
+
* responseContentType: 'text/event-stream',
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* The OpenAPI generator (`@justscale/feature-openapi`) consults this
|
|
23
|
+
* registry to decide (a) whether a route is documentable at all -
|
|
24
|
+
* CLI / WebSocket / Event routes have no standard OpenAPI
|
|
25
|
+
* representation, so they register nothing and get filtered out; and
|
|
26
|
+
* (b) what HTTP method to emit under `paths` and which response
|
|
27
|
+
* content type to advertise.
|
|
28
|
+
*
|
|
29
|
+
* Core knows nothing about HTTP or SSE directly - it just holds a
|
|
30
|
+
* registry. Protocol packages own their own entries.
|
|
31
|
+
*/
|
|
32
|
+
const registry = new Map();
|
|
33
|
+
/**
|
|
34
|
+
* Register a protocol method name as OpenAPI-visible.
|
|
35
|
+
* Duplicate registrations for the same method are ignored (first-win)
|
|
36
|
+
* so two protocols claiming the same name can't step on each other.
|
|
37
|
+
*/
|
|
38
|
+
export function registerOpenApiMethod(method, mapping) {
|
|
39
|
+
if (!registry.has(method)) {
|
|
40
|
+
registry.set(method, mapping);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Resolve a runtime method value to its OpenAPI emission shape. */
|
|
44
|
+
export function getOpenApiMethodMapping(method) {
|
|
45
|
+
if (typeof method !== 'string')
|
|
46
|
+
return undefined;
|
|
47
|
+
return registry.get(method);
|
|
48
|
+
}
|
|
49
|
+
/** Snapshot of every registered method (for tests / debug). */
|
|
50
|
+
export function getRegisteredOpenApiMethods() {
|
|
51
|
+
return registry;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=openapi-methods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi-methods.js","sourceRoot":"","sources":["../../src/core/openapi-methods.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAsBH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,OAA6B;IAE7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,uBAAuB,CACrC,MAAe;IAEf,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,2BAA2B;IAIzC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/plugin
|
|
3
|
+
*
|
|
4
|
+
* Base route factory system. This module provides the extensible
|
|
5
|
+
* infrastructure for route factories. HTTP methods, Datastar routes,
|
|
6
|
+
* and other route types are implemented as plugins.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import type { RouteHandler, RouteDef } from "@justscale/core/plugin";
|
|
11
|
+
*
|
|
12
|
+
* declare module "@justscale/core/plugin" {
|
|
13
|
+
* interface RouteFactories<TDeps> {
|
|
14
|
+
* MyRoute(path: string, handler: RouteHandler<TDeps>): RouteDef<TDeps>;
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* import { registerRouteFactory } from "@justscale/core/plugin";
|
|
19
|
+
* registerRouteFactory("MyRoute", MyRoute);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
import type { CliFactory } from '../cli/types.js';
|
|
23
|
+
import type { Middleware, Guard, MiddlewareDef, GuardDef } from './middleware.js';
|
|
24
|
+
/**
|
|
25
|
+
* Extract parameter names from a path pattern.
|
|
26
|
+
* "/users/:id" → { id: string }
|
|
27
|
+
* "/users/:userId/posts/:postId" → { userId: string; postId: string }
|
|
28
|
+
*/
|
|
29
|
+
export type ExtractParams<Path extends string> = Path extends `${string}:${infer Param}/${infer Rest}` ? {
|
|
30
|
+
[K in Param]: string;
|
|
31
|
+
} & ExtractParams<`/${Rest}`> : Path extends `${string}:${infer Param}` ? {
|
|
32
|
+
[K in Param]: string;
|
|
33
|
+
} : {};
|
|
34
|
+
/** Flatten intersection types for cleaner display */
|
|
35
|
+
export type Prettify<T> = {
|
|
36
|
+
[K in keyof T]: T[K];
|
|
37
|
+
} & {};
|
|
38
|
+
/**
|
|
39
|
+
* Method metadata - describes characteristics of a route method.
|
|
40
|
+
* Used by testing utilities, OpenAPI generation, etc.
|
|
41
|
+
*/
|
|
42
|
+
export interface MethodMetadata {
|
|
43
|
+
/** Transport type (e.g., 'http', 'cli', 'event') */
|
|
44
|
+
transport: string;
|
|
45
|
+
/** Whether this method typically has a request body */
|
|
46
|
+
hasBody?: boolean;
|
|
47
|
+
/** Whether this method is idempotent */
|
|
48
|
+
idempotent?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extensible route method interface.
|
|
52
|
+
* Transports extend this via module augmentation with metadata:
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* // In @justscale/http
|
|
57
|
+
* declare module "@justscale/core" {
|
|
58
|
+
* interface SupportedMethods {
|
|
59
|
+
* GET: { transport: 'http'; hasBody: false; idempotent: true };
|
|
60
|
+
* POST: { transport: 'http'; hasBody: true; idempotent: false };
|
|
61
|
+
* }
|
|
62
|
+
* }
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export interface SupportedMethods {
|
|
66
|
+
CLI: {
|
|
67
|
+
transport: 'cli';
|
|
68
|
+
hasBody: false;
|
|
69
|
+
};
|
|
70
|
+
GET: {
|
|
71
|
+
transport: 'http';
|
|
72
|
+
hasBody: false;
|
|
73
|
+
idempotent: true;
|
|
74
|
+
};
|
|
75
|
+
POST: {
|
|
76
|
+
transport: 'http';
|
|
77
|
+
hasBody: true;
|
|
78
|
+
idempotent: false;
|
|
79
|
+
};
|
|
80
|
+
PUT: {
|
|
81
|
+
transport: 'http';
|
|
82
|
+
hasBody: true;
|
|
83
|
+
idempotent: true;
|
|
84
|
+
};
|
|
85
|
+
DELETE: {
|
|
86
|
+
transport: 'http';
|
|
87
|
+
hasBody: false;
|
|
88
|
+
idempotent: true;
|
|
89
|
+
};
|
|
90
|
+
PATCH: {
|
|
91
|
+
transport: 'http';
|
|
92
|
+
hasBody: true;
|
|
93
|
+
idempotent: false;
|
|
94
|
+
};
|
|
95
|
+
EVENT: {
|
|
96
|
+
transport: 'event';
|
|
97
|
+
};
|
|
98
|
+
SUBSCRIBE: {
|
|
99
|
+
transport: 'subscribe';
|
|
100
|
+
};
|
|
101
|
+
WS: {
|
|
102
|
+
transport: 'websocket';
|
|
103
|
+
hasBody: false;
|
|
104
|
+
idempotent: false;
|
|
105
|
+
};
|
|
106
|
+
PROCEDURE: {
|
|
107
|
+
transport: 'procedure';
|
|
108
|
+
hasBody: true;
|
|
109
|
+
idempotent: false;
|
|
110
|
+
};
|
|
111
|
+
SCHEDULED_TASK: {
|
|
112
|
+
transport: 'scheduled-task';
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get metadata for a specific method.
|
|
117
|
+
* @example
|
|
118
|
+
* type PostMeta = GetMethodMetadata<'POST'>; // { transport: 'http'; hasBody: true; ... }
|
|
119
|
+
*/
|
|
120
|
+
export type GetMethodMetadata<M extends RouteMethod> = SupportedMethods[M];
|
|
121
|
+
/**
|
|
122
|
+
* Check if a method has a request body.
|
|
123
|
+
* @example
|
|
124
|
+
* type PostHasBody = MethodHasBody<'POST'>; // true
|
|
125
|
+
* type GetHasBody = MethodHasBody<'GET'>; // false
|
|
126
|
+
*/
|
|
127
|
+
export type MethodHasBody<M extends RouteMethod> = SupportedMethods[M] extends {
|
|
128
|
+
hasBody: infer H;
|
|
129
|
+
} ? H : false;
|
|
130
|
+
/**
|
|
131
|
+
* Get all methods for a specific transport.
|
|
132
|
+
* @example
|
|
133
|
+
* type HttpMethods = MethodsForTransport<'http'>; // 'GET' | 'POST' | 'PUT' | ...
|
|
134
|
+
*/
|
|
135
|
+
export type MethodsForTransport<T extends string> = {
|
|
136
|
+
[K in RouteMethod]: SupportedMethods[K] extends {
|
|
137
|
+
transport: T;
|
|
138
|
+
} ? K : never;
|
|
139
|
+
}[RouteMethod];
|
|
140
|
+
/**
|
|
141
|
+
* All registered route methods.
|
|
142
|
+
* Transports add methods via module augmentation on SupportedMethods.
|
|
143
|
+
*/
|
|
144
|
+
export type RouteMethod = keyof SupportedMethods;
|
|
145
|
+
/** Base context available to all routes before middleware */
|
|
146
|
+
export interface BaseContext<TDeps = Record<string, unknown>, TParams = Record<string, string>> {
|
|
147
|
+
deps: TDeps;
|
|
148
|
+
params: Prettify<TParams>;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Route context interface - extensible by plugins.
|
|
152
|
+
* Plugins can augment this interface to add transport-specific properties.
|
|
153
|
+
*/
|
|
154
|
+
export interface RouteContext<TDeps = Record<string, unknown>, TParams = Record<string, string>> extends BaseContext<TDeps, TParams> {
|
|
155
|
+
}
|
|
156
|
+
/** A route handler function */
|
|
157
|
+
export type RouteHandler<TDeps = Record<string, unknown>, TParams = Record<string, string>> = (ctx: RouteContext<TDeps, TParams>) => void | Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Builder for composing routes with middleware and guards.
|
|
160
|
+
* Each .use() call accumulates the context type.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* // With raw functions
|
|
165
|
+
* Get("/users/:id")
|
|
166
|
+
* .use(authMiddleware)
|
|
167
|
+
* .guard(isAuthenticated)
|
|
168
|
+
* .handle(({ params, user, stream }) => { ... })
|
|
169
|
+
*
|
|
170
|
+
* // With DI-enabled definitions
|
|
171
|
+
* Get("/users/:id")
|
|
172
|
+
* .use(AuthMiddleware) // MiddlewareDef
|
|
173
|
+
* .guard(IsAdmin) // GuardDef
|
|
174
|
+
* .handle(({ params, user, stream }) => { ... })
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export interface RouteBuilder<TDeps, TParams, TContext, TPath extends string = string, TBody = unknown, TResponse = unknown> {
|
|
178
|
+
/**
|
|
179
|
+
* Add middleware that extends the context.
|
|
180
|
+
* Accepts either a middleware function or a MiddlewareDef (with DI).
|
|
181
|
+
*/
|
|
182
|
+
use<TAdded extends object>(middleware: Middleware<TContext, TAdded>): RouteBuilder<TDeps, TParams, Prettify<TContext & TAdded>, TPath, TBody, TResponse>;
|
|
183
|
+
use<TAdded extends object>(middleware: MiddlewareDef<TAdded, any>): RouteBuilder<TDeps, TParams, Prettify<TContext & TAdded>, TPath, TBody, TResponse>;
|
|
184
|
+
/**
|
|
185
|
+
* Add a guard that gates access to the route.
|
|
186
|
+
* Accepts either a guard function or a GuardDef (with DI).
|
|
187
|
+
*/
|
|
188
|
+
guard(check: Guard<TContext>): RouteBuilder<TDeps, TParams, TContext, TPath, TBody, TResponse>;
|
|
189
|
+
guard(check: GuardDef<any>): RouteBuilder<TDeps, TParams, TContext, TPath, TBody, TResponse>;
|
|
190
|
+
/**
|
|
191
|
+
* Set the final handler for the route.
|
|
192
|
+
* Receives the accumulated context from all middleware.
|
|
193
|
+
*/
|
|
194
|
+
handle(handler: (ctx: TContext) => void | Promise<void>): any;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Extensible interface for route factories.
|
|
198
|
+
* Plugins extend via declaration merging on "@justscale/core/plugin".
|
|
199
|
+
*/
|
|
200
|
+
export interface RouteFactories<TDeps> {
|
|
201
|
+
/** CLI route factory - built-in since CLI is part of core */
|
|
202
|
+
Cli: CliFactory<TDeps>;
|
|
203
|
+
}
|
|
204
|
+
/** Register a route factory (for plugins) */
|
|
205
|
+
export declare function registerRouteFactory(name: string, factory: Function): void;
|
|
206
|
+
/** Create all registered route factories with proper typing */
|
|
207
|
+
export declare function createRouteFactories<TDeps>(): RouteFactories<TDeps>;
|
|
208
|
+
export type { Middleware, Guard, MiddlewareDef, GuardDef, UnresolvedMiddleware, UnresolvedGuard, } from './middleware.js';
|
|
209
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/plugin
|
|
3
|
+
*
|
|
4
|
+
* Base route factory system. This module provides the extensible
|
|
5
|
+
* infrastructure for route factories. HTTP methods, Datastar routes,
|
|
6
|
+
* and other route types are implemented as plugins.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import type { RouteHandler, RouteDef } from "@justscale/core/plugin";
|
|
11
|
+
*
|
|
12
|
+
* declare module "@justscale/core/plugin" {
|
|
13
|
+
* interface RouteFactories<TDeps> {
|
|
14
|
+
* MyRoute(path: string, handler: RouteHandler<TDeps>): RouteDef<TDeps>;
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
*
|
|
18
|
+
* import { registerRouteFactory } from "@justscale/core/plugin";
|
|
19
|
+
* registerRouteFactory("MyRoute", MyRoute);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
/** Registry for route factory implementations */
|
|
23
|
+
const routeFactoryRegistry = new Map();
|
|
24
|
+
/** Register a route factory (for plugins) */
|
|
25
|
+
export function registerRouteFactory(name, factory) {
|
|
26
|
+
routeFactoryRegistry.set(name, factory);
|
|
27
|
+
}
|
|
28
|
+
/** Create all registered route factories with proper typing */
|
|
29
|
+
export function createRouteFactories() {
|
|
30
|
+
const factories = {};
|
|
31
|
+
for (const [name, factory] of routeFactoryRegistry) {
|
|
32
|
+
factories[name] = factory;
|
|
33
|
+
}
|
|
34
|
+
return factories;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAwMH,iDAAiD;AACjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEzD,6CAA6C;AAC7C,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,OAAiB;IAClE,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAA6B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC;QACnD,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;IAC5B,CAAC;IACD,OAAO,SAA6C,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-switching bridge - wraps a service resolved in a parent scope so
|
|
3
|
+
* every method call re-enters that parent scope via `runWithContainer`.
|
|
4
|
+
* Used by sub-app composition to share services across container boundaries
|
|
5
|
+
* without leaking async context.
|
|
6
|
+
*/
|
|
7
|
+
import { Container, type ServiceToken } from './service.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve `token` from `parentContainer` and wrap it so every method call
|
|
10
|
+
* runs inside the parent's async scope. The returned proxy shares state
|
|
11
|
+
* with the original instance.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createScopedBridge<T extends object>(parentContainer: Container, token: ServiceToken<T>): Promise<T>;
|
|
14
|
+
/**
|
|
15
|
+
* Synchronous variant for cases where you've already resolved the
|
|
16
|
+
* instance and just need scope switching on top.
|
|
17
|
+
*/
|
|
18
|
+
export declare function wrapWithScope<T extends object>(target: T, parentContainer: Container): T;
|
|
19
|
+
//# sourceMappingURL=scope-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-bridge.d.ts","sourceRoot":"","sources":["../../src/core/scope-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5D;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EACvD,eAAe,EAAE,SAAS,EAC1B,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GACrB,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAC5C,MAAM,EAAE,CAAC,EACT,eAAe,EAAE,SAAS,GACzB,CAAC,CAaH"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope-switching bridge - wraps a service resolved in a parent scope so
|
|
3
|
+
* every method call re-enters that parent scope via `runWithContainer`.
|
|
4
|
+
* Used by sub-app composition to share services across container boundaries
|
|
5
|
+
* without leaking async context.
|
|
6
|
+
*/
|
|
7
|
+
import { runWithContainer } from './context.js';
|
|
8
|
+
/**
|
|
9
|
+
* Resolve `token` from `parentContainer` and wrap it so every method call
|
|
10
|
+
* runs inside the parent's async scope. The returned proxy shares state
|
|
11
|
+
* with the original instance.
|
|
12
|
+
*/
|
|
13
|
+
export async function createScopedBridge(parentContainer, token) {
|
|
14
|
+
const target = (await parentContainer.resolve(token));
|
|
15
|
+
return wrapWithScope(target, parentContainer);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Synchronous variant for cases where you've already resolved the
|
|
19
|
+
* instance and just need scope switching on top.
|
|
20
|
+
*/
|
|
21
|
+
export function wrapWithScope(target, parentContainer) {
|
|
22
|
+
return new Proxy(target, {
|
|
23
|
+
get(obj, prop, receiver) {
|
|
24
|
+
const value = Reflect.get(obj, prop, receiver);
|
|
25
|
+
if (typeof value !== 'function')
|
|
26
|
+
return value;
|
|
27
|
+
// Preserve the original function reference identity; only the call is wrapped.
|
|
28
|
+
return function (...args) {
|
|
29
|
+
return runWithContainer(parentContainer, () => value.apply(obj, args));
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=scope-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-bridge.js","sourceRoot":"","sources":["../../src/core/scope-bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,eAA0B,EAC1B,KAAsB;IAEtB,MAAM,MAAM,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAM,CAAC;IAC3D,OAAO,aAAa,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAS,EACT,eAA0B;IAE1B,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ;YACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YAC9C,+EAA+E;YAC/E,OAAO,UAAyB,GAAG,IAAe;gBAChD,OAAO,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE,CAC3C,KAAsC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CACzD,CAAC;YACJ,CAAC,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|