@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JustScale
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# @justscale/core
|
|
2
|
+
|
|
3
|
+
The foundation every JustScale app sits on. `@justscale/core` is the DI container, the service/controller/feature primitives, the composition builder (`JustScale()`), the durable-process runtime, the model layer, and the distributed primitives (locks + channels). It also ships the `just` binary.
|
|
4
|
+
|
|
5
|
+
The distinguishing idea: **composition is validated at compile time.** A missing dependency is a type error, not a runtime crash. You get that by describing services, controllers, and features as values with typed dependency tokens and letting `build()` check the graph.
|
|
6
|
+
|
|
7
|
+
Full docs: [justscale.sh](https://justscale.sh) — start at [overview/philosophy](https://justscale.sh/overview/philosophy).
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add @justscale/core
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Peer deps: `zod` (required for schemas), `@justscale/typescript` (optional; installs `ptsc` for the durable-process compiler), `esbuild` (optional; used by parts of the CLI).
|
|
16
|
+
|
|
17
|
+
## Hello world
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import JustScale, { defineService, createController } from '@justscale/core';
|
|
21
|
+
import { Get } from '@justscale/http';
|
|
22
|
+
|
|
23
|
+
class Greeter extends defineService({
|
|
24
|
+
factory: () => ({ hello: (name: string) => `Hello, ${name}!` }),
|
|
25
|
+
}) {}
|
|
26
|
+
|
|
27
|
+
const GreetController = createController({
|
|
28
|
+
inject: { greeter: Greeter },
|
|
29
|
+
routes: ({ greeter }) => ({
|
|
30
|
+
greet: Get('/greet/:name').handle(({ params, res }) =>
|
|
31
|
+
res.json({ message: greeter.hello(params.name) }),
|
|
32
|
+
),
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const app = JustScale()
|
|
37
|
+
.add(Greeter)
|
|
38
|
+
.add(GreetController)
|
|
39
|
+
.build();
|
|
40
|
+
|
|
41
|
+
await app.serve();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`.add(...)` composes services, controllers, and features into a scope. `build()` type-checks the DI graph — forget `.add(Greeter)` and `GreetController` won't compile. `serve()` pulls `HttpConfig` from the scope (default port `6142`) and opens the sockets.
|
|
45
|
+
|
|
46
|
+
Real apps usually declare per-environment config through `createEnvironment` + an env contract and boot via `just dev` / `just test`; see [examples/simple-app](https://github.com/justscale/justscale/tree/main/examples/simple-app) for the canonical shape.
|
|
47
|
+
|
|
48
|
+
## Primitives
|
|
49
|
+
|
|
50
|
+
### Services — [justscale.sh/fundamentals/services](https://justscale.sh/fundamentals/services)
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
class UserService extends defineService({
|
|
54
|
+
inject: { users: UserRepository },
|
|
55
|
+
factory: ({ users }) => ({
|
|
56
|
+
findByEmail: (email: string) =>
|
|
57
|
+
users.findOne(User.fields.email.eq(email)),
|
|
58
|
+
}),
|
|
59
|
+
}) {}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`defineService({ inject, factory })` returns a class you extend. `inject` lists the DI tokens you need; `factory` receives the resolved instances and returns your service. The returned class is itself the DI token — pass `UserService` to `.add(UserService)` or inject it elsewhere.
|
|
63
|
+
|
|
64
|
+
Abstract tokens (`defineAbstract`) let services declare "I need _something_ that implements this interface" without naming a concrete class. Bind a concrete implementation at compose time with `bindService(AbstractToken, ConcreteService)`. Same pattern for repositories via `bindRepository(ModelRepository.of(User), UserRepository)`.
|
|
65
|
+
|
|
66
|
+
### Controllers — [justscale.sh/fundamentals/controllers](https://justscale.sh/fundamentals/controllers)
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
createController({
|
|
70
|
+
inject: { svc: MyService },
|
|
71
|
+
routes: ({ svc }) => ({
|
|
72
|
+
foo: Get('/foo').use(middleware).guard(check).handle(ctx => svc.foo(ctx)),
|
|
73
|
+
bar: Cli('bar').input(z.object({...})).handle(ctx => svc.bar(ctx)),
|
|
74
|
+
}),
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Controllers are DI units that hold routes. Route factories come from transport packages — `Get`/`Post`/... from `@justscale/http`, `Ws` from `@justscale/websocket`, `SSE` from `@justscale/sse`, `Cli` from `@justscale/core/cli`, `Procedure` from contracts — and all flow through the same `.use(middleware).guard(...).handle(...)` pipeline with per-route typing.
|
|
79
|
+
|
|
80
|
+
### Features — [justscale.sh/fundamentals/features](https://justscale.sh/fundamentals/features)
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
export const AuthFeature = createFeatureBuilder()
|
|
84
|
+
.name('auth')
|
|
85
|
+
.requires(Config.of(AuthConfig))
|
|
86
|
+
.provides(b => b.add(AuthService).add(AuthEndpointsController));
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Features are shippable capability bundles: a named package of services + controllers + config requirements that other apps consume via `.add(AuthFeature)`. `.requires(...)` bubbles DI requirements up to whoever adds the feature — the requirement is checked at their `build()`, not yours.
|
|
90
|
+
|
|
91
|
+
### Contracts — [justscale.sh/rpc](https://justscale.sh/rpc/overview)
|
|
92
|
+
|
|
93
|
+
```ts
|
|
94
|
+
import { defineContract, rpc } from '@justscale/core/contract';
|
|
95
|
+
|
|
96
|
+
class UserContract extends defineContract({
|
|
97
|
+
protocol: 'grpc',
|
|
98
|
+
serviceName: 'user.UserService',
|
|
99
|
+
methods: {
|
|
100
|
+
getUser: rpc(GetUserRequestSchema, UserSchema),
|
|
101
|
+
},
|
|
102
|
+
}) {}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Contracts describe a typed set of methods independent of transport. A controller implements a contract via `createController.implements(UserContract, ...)`; the same implementation can be served over gRPC (`@justscale/rpc`), in-process, or routed across cluster nodes. Contracts also act as DI tokens — injecting `UserContract` gets you a client that resolves locally when bound, remotely otherwise.
|
|
106
|
+
|
|
107
|
+
## Composition
|
|
108
|
+
|
|
109
|
+
### `JustScale()`
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
JustScale()
|
|
113
|
+
.add(ServiceA)
|
|
114
|
+
.add(ControllerB)
|
|
115
|
+
.add(FeatureC)
|
|
116
|
+
.build();
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The builder is the unit of composition. Every `.add()` contributes services, controllers, features, or bindings into a scope. `.build()` returns a validated `BuiltApp` with `.serve()`, `.match()`, `.run()`, and friends.
|
|
120
|
+
|
|
121
|
+
### Sub-apps — [justscale.sh/advanced/plugins](https://justscale.sh/advanced/plugins)
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
const AdminSubApp = JustScale()
|
|
125
|
+
.requires(CatalogService)
|
|
126
|
+
.requires(InventoryService)
|
|
127
|
+
.add(AdminController)
|
|
128
|
+
.add(OpenApiFeature)
|
|
129
|
+
.build();
|
|
130
|
+
|
|
131
|
+
const Shop = JustScale()
|
|
132
|
+
.add(CatalogService)
|
|
133
|
+
.add(InventoryService)
|
|
134
|
+
.add(ShopController)
|
|
135
|
+
.add(AdminSubApp)
|
|
136
|
+
.build();
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
A `JustScale()` compilation unit with `.requires(...)` is a sub-app. Mounting it into a parent (`parent.add(SubApp)`) bridges the required services in via scope-switched proxies — calls from inside the sub-app still execute under the parent's container, locks, and observability context. Admin-only services live in their own scope without polluting the host.
|
|
140
|
+
|
|
141
|
+
### `AbstractContainer`
|
|
142
|
+
|
|
143
|
+
Reflection on a scope. Inject `AbstractContainer` into a service or controller and you get a typed view of the controllers/services/features bound to that scope. `@justscale/feature-openapi` uses it to emit a per-scope OpenAPI spec — add the feature to a sub-app and the spec covers just that sub-app.
|
|
144
|
+
|
|
145
|
+
## Durable processes — [justscale.sh/processes/signals](https://justscale.sh/processes/signals)
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import { createProcess, signal, race, delay } from '@justscale/core/process';
|
|
149
|
+
import { defineSignals } from '@justscale/core/process';
|
|
150
|
+
|
|
151
|
+
class OrderSignals extends defineSignals(signal => ({
|
|
152
|
+
paid: signal('/order/:order/paid').data<{ txId: string }>().types({ Order }),
|
|
153
|
+
})) {}
|
|
154
|
+
|
|
155
|
+
const orderFulfillment = createProcess({
|
|
156
|
+
path: '/order/:order/fulfillment',
|
|
157
|
+
inject: { signals: OrderSignals },
|
|
158
|
+
async handler({ signals }, { order }) {
|
|
159
|
+
const r = race();
|
|
160
|
+
switch (true) {
|
|
161
|
+
case signal(r, signals.paid):
|
|
162
|
+
return { status: 'paid', txId: r.txId };
|
|
163
|
+
case delay.days(r, 3):
|
|
164
|
+
return { status: 'timeout' };
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Durable processes survive restarts. Their state is serialized through the `Processable` protocol, timers and signals resume transparently, and the compiler (via `@justscale/typescript`'s `ptsc`) rewrites the handler into a safely resumable shape. The runtime is transport-agnostic — signals can fire from HTTP, CLI, WS, cluster, anywhere.
|
|
171
|
+
|
|
172
|
+
## Models — [justscale.sh/models/overview](https://justscale.sh/models/overview)
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
import { defineModel, field } from '@justscale/core/models';
|
|
176
|
+
|
|
177
|
+
class User extends defineModel({
|
|
178
|
+
name: 'User',
|
|
179
|
+
fields: {
|
|
180
|
+
email: field.string().max(255).unique(),
|
|
181
|
+
balance: field.decimal(10, 2).default('0.00'),
|
|
182
|
+
},
|
|
183
|
+
}) {}
|
|
184
|
+
|
|
185
|
+
repo.find({ where: User.fields.email.eq('test@example.com') });
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Field builders, not Zod — `field.*` gives you typed queryable field expressions (`.eq`, `.gt`, `.ilike`, composed with `and`/`or`). Services inject the abstract `ModelRepository.of(User)` token and stay storage-agnostic; the concrete implementation (e.g. `createPgRepository` from `@justscale/postgres`) is bound at compose time.
|
|
189
|
+
|
|
190
|
+
References (`field.ref(OtherModel)`) are first-class values, not string IDs. Controllers receive `Reference<T>` in their params and services take `Locked<T>` for mutations; the framework keeps the domain ID-free.
|
|
191
|
+
|
|
192
|
+
## Distributed primitives
|
|
193
|
+
|
|
194
|
+
### Locks — [justscale.sh/fundamentals/locks](https://justscale.sh/fundamentals/locks)
|
|
195
|
+
|
|
196
|
+
Abstract lock API with an `acquire(key, opts)` signature that returns a disposable guard — integrates with the `using` statement for auto-release. The default provider is in-memory (good for tests). `@justscale/postgres` provides a Postgres advisory-lock backend that coordinates across instances, so locks survive being held from different processes hitting the same database.
|
|
197
|
+
|
|
198
|
+
### Channels — [justscale.sh/fundamentals/channels](https://justscale.sh/fundamentals/channels)
|
|
199
|
+
|
|
200
|
+
Typed pub/sub with async iterables. `createChannels({ ... })` declares a set of named channels with per-message schemas; subscribers consume via `for await` on a subscription. The default `MemoryChannelBackend` works for a single process; `@justscale/postgres`'s `createPostgresChannelBackend` fans messages out over `LISTEN/NOTIFY` so multiple app instances pointed at the same database all see each publish. Message encoding goes through the `Processable` protocol so domain values (model refs, dates, decimals) survive the round-trip.
|
|
201
|
+
|
|
202
|
+
## Configuration — [justscale.sh/configuration/overview](https://justscale.sh/configuration/overview)
|
|
203
|
+
|
|
204
|
+
```ts
|
|
205
|
+
import { defineConfigPartial, createConfig, Config } from '@justscale/core';
|
|
206
|
+
|
|
207
|
+
export const AppConfig = defineConfigPartial('app', z.object({
|
|
208
|
+
siteUrl: z.string(),
|
|
209
|
+
logLevel: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
|
|
210
|
+
}));
|
|
211
|
+
|
|
212
|
+
.add(createConfig({
|
|
213
|
+
provides: [AppConfig],
|
|
214
|
+
factory: () => ({ [AppConfig.key]: { siteUrl: 'https://example.com' } }),
|
|
215
|
+
}));
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Config is a first-class primitive, not an env-var dip. Features declare the `Config.of(...)` partials they need; the app satisfies them with `createConfig(...)`. Zod schemas validate at startup and defaults feed through (e.g. `HttpConfig.port` defaults to `6142`).
|
|
219
|
+
|
|
220
|
+
## Subpath exports
|
|
221
|
+
|
|
222
|
+
Everything beyond the bare `@justscale/core` import lives behind a subpath so you pay only for what you load:
|
|
223
|
+
|
|
224
|
+
- `@justscale/core/models` — `defineModel`, `field`, `ModelRepository`, references
|
|
225
|
+
- `@justscale/core/process` — durable `createProcess`, `defineSignals`, `race`, `signal`, `delay`
|
|
226
|
+
- `@justscale/core/cluster` — multi-node transport, routing, scheduled tasks
|
|
227
|
+
- `@justscale/core/cli` — `Cli` route factory for `just`-discovered commands
|
|
228
|
+
- `@justscale/core/channel` — typed pub/sub async iterables
|
|
229
|
+
- `@justscale/core/lock` — abstract lock API with an in-memory default
|
|
230
|
+
- `@justscale/core/config` — config service, `defineConfigPartial`, `createConfig`
|
|
231
|
+
- `@justscale/core/contract` — `defineContract` for cross-transport controllers
|
|
232
|
+
- `@justscale/core/feature` — `createFeatureBuilder`
|
|
233
|
+
- `@justscale/core/memory` — in-memory adapter implementations (tests / prototyping)
|
|
234
|
+
- `@justscale/core/middleware`, `/logger`, `/lifecycle`, `/plugin` — narrower slices of the bare surface
|
|
235
|
+
|
|
236
|
+
## `just` CLI — [justscale.sh/cli/usage](https://justscale.sh/cli/usage)
|
|
237
|
+
|
|
238
|
+
Installing this package installs the `just` binary:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
just dev # boot the app in dev mode with HMR
|
|
242
|
+
just build # build the workspace
|
|
243
|
+
just test # run tests (filterable via flags)
|
|
244
|
+
just init # initialize project / IDE / AI config
|
|
245
|
+
just install <plugin> # install a JustScale plugin package
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
`just` also discovers commands exported by any installed `@justscale/*` plugin — adding `@justscale/postgres` gives you `just migrate`, for example. Tab-completion installs itself on first invocation; `just __complete` is the internal back-channel, not a user-facing command.
|
|
249
|
+
|
|
250
|
+
## Observability
|
|
251
|
+
|
|
252
|
+
Services and controllers run under an async context with request tracing, scope management, and pluggable instrumentation. `registerInstrumentation` lets OpenTelemetry / Datadog / custom collectors subscribe without the app code having to know; `@justscale/feature-otel` is a ready-made wiring.
|
|
253
|
+
|
|
254
|
+
## More
|
|
255
|
+
|
|
256
|
+
- [Quick start](https://justscale.sh/overview/quick-start)
|
|
257
|
+
- [Core philosophy](https://justscale.sh/overview/philosophy)
|
|
258
|
+
- [Repository pattern](https://justscale.sh/repositories/overview)
|
|
259
|
+
- [Cluster overview](https://justscale.sh/cluster/overview)
|
|
260
|
+
- [Permissions](https://justscale.sh/features/permissions)
|
|
261
|
+
- [OpenAPI](https://justscale.sh/techniques/openapi)
|
package/bin/just.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
|
|
4
|
+
// Register tsx (if available in the user's project) so `just` can directly
|
|
5
|
+
// import TypeScript source — including .ts files referenced as .js, which
|
|
6
|
+
// Node's native type-stripping does not resolve. Without this, simple
|
|
7
|
+
// cases like `justscale.config.ts` → `./src/cli.mode.js` → `./app.js`
|
|
8
|
+
// chains fail with ERR_MODULE_NOT_FOUND.
|
|
9
|
+
try {
|
|
10
|
+
const require = createRequire(`${process.cwd()}/`);
|
|
11
|
+
const { register } = require('tsx/esm/api');
|
|
12
|
+
register();
|
|
13
|
+
} catch {
|
|
14
|
+
// tsx isn't installed in the user's project — Node still handles plain .ts
|
|
15
|
+
// files via type stripping; .js→.ts rewriting just won't work. Users hit
|
|
16
|
+
// that edge case get a clear ERR_MODULE_NOT_FOUND pointing at the missing
|
|
17
|
+
// file, which is a decent nudge to install tsx or compile first.
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Await `main()` and drive an explicit exit code. Without this, if `main()`
|
|
21
|
+
// rejects under load, the process exits non-zero with no error message and
|
|
22
|
+
// any pending stdio may be lost — which manifested as flaky e2e tests that
|
|
23
|
+
// saw exitCode 1 despite correct help output reaching stdout. The explicit
|
|
24
|
+
// exit also closes lingering handles (readline, etc.) deterministically.
|
|
25
|
+
try {
|
|
26
|
+
const { main } = await import('../dist/cli/bin/main.js');
|
|
27
|
+
await main();
|
|
28
|
+
process.exit(0);
|
|
29
|
+
} catch (err) {
|
|
30
|
+
// Dump full diagnostic — the test harness captures stderr and this
|
|
31
|
+
// makes intermittent failures debuggable in CI logs.
|
|
32
|
+
console.error('[just] fatal:', err && err.stack ? err.stack : err);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Bootstrap
|
|
3
|
+
*
|
|
4
|
+
* Creates and configures the application. Transport-agnostic - plugins provide protocol handling.
|
|
5
|
+
*/
|
|
6
|
+
import { Container, type ServiceToken } from './core/service.js';
|
|
7
|
+
import { type RequestType } from './core/context.js';
|
|
8
|
+
import { type ControllerDef, type ControllerInstance, type CompiledRoute } from './core/controller.js';
|
|
9
|
+
import { type BuildContext } from './builder/build-context.js';
|
|
10
|
+
import type { Adapter } from './kernel/adapter.js';
|
|
11
|
+
/** Matched route with extracted params */
|
|
12
|
+
export interface MatchedRoute {
|
|
13
|
+
route: CompiledRoute<any>;
|
|
14
|
+
deps: Record<string, unknown>;
|
|
15
|
+
params: Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* The container the matched route belongs to. Set when the match
|
|
18
|
+
* came from a sub-app - `execute()` uses this to run the request
|
|
19
|
+
* scope in the owning container, so sub-app handlers see their own
|
|
20
|
+
* `getContainer()` / `getRequestContext()`.
|
|
21
|
+
*
|
|
22
|
+
* Undefined for routes matched in the parent's own controllers list;
|
|
23
|
+
* `execute()` falls back to the parent container in that case.
|
|
24
|
+
*/
|
|
25
|
+
owningContainer?: Container;
|
|
26
|
+
}
|
|
27
|
+
/** Options for route execution */
|
|
28
|
+
export interface ExecuteOptions {
|
|
29
|
+
/** Defaults to 'http'. */
|
|
30
|
+
requestType?: RequestType;
|
|
31
|
+
}
|
|
32
|
+
export interface App<TControllers extends ControllerDef<any>[] = ControllerDef<any>[]> {
|
|
33
|
+
readonly container: Container;
|
|
34
|
+
readonly controllers: ControllerInstance<any>[];
|
|
35
|
+
readonly adapters: readonly Adapter[];
|
|
36
|
+
/** @internal */
|
|
37
|
+
readonly __buildContext?: BuildContext;
|
|
38
|
+
/** Resolves when all controllers are resolved and the app is ready to handle requests. */
|
|
39
|
+
readonly ready: Promise<void>;
|
|
40
|
+
readonly subApps: readonly App<any>[];
|
|
41
|
+
match(method: string, pathname: string): MatchedRoute | null;
|
|
42
|
+
execute(matched: MatchedRoute, contextAdditions: Record<string, unknown>, options?: ExecuteOptions): Promise<unknown>;
|
|
43
|
+
}
|
|
44
|
+
/** @internal */
|
|
45
|
+
interface AppCoreConfig {
|
|
46
|
+
services?: ServiceToken[];
|
|
47
|
+
controllers?: ControllerDef<any>[];
|
|
48
|
+
_beforeControllerResolution?: (container: Container, controllers: ControllerDef<any>[]) => void;
|
|
49
|
+
_asyncBeforeControllerResolution?: (container: Container, controllers: ControllerDef<any>[]) => Promise<void>;
|
|
50
|
+
_getMatchDelegates?: () => ReadonlyArray<App<any>>;
|
|
51
|
+
_parentBuildContext?: BuildContext;
|
|
52
|
+
}
|
|
53
|
+
/** @internal */
|
|
54
|
+
export declare function createAppInternal(config: AppCoreConfig): App;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=app.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EACT,KAAK,YAAY,EAKlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAGnB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAQnD,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,GAAG,CAAC,YAAY,SAAS,aAAa,CAAC,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE;IACnF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAEhD,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAEtC,gBAAgB;IAChB,QAAQ,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC;IAEvC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;IAEtC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IAE7D,OAAO,CACL,OAAO,EAAE,YAAY,EACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,gBAAgB;AAChB,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAA;IAClC,2BAA2B,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAA;IAC/F,gCAAgC,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7G,kBAAkB,CAAC,EAAE,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAClD,mBAAmB,CAAC,EAAE,YAAY,CAAA;CACnC;AAkMD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAE5D"}
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Bootstrap
|
|
3
|
+
*
|
|
4
|
+
* Creates and configures the application. Transport-agnostic - plugins provide protocol handling.
|
|
5
|
+
*/
|
|
6
|
+
import { Container, SERVICE_ID, getServiceProvides, } from './core/service.js';
|
|
7
|
+
import { runInFullRequestScope } from './core/context.js';
|
|
8
|
+
import { collectBuiltins, registerBuiltinProvider, } from './core/controller.js';
|
|
9
|
+
import { AbstractContainer, createContainerReflection, } from './core/container-reflection.js';
|
|
10
|
+
import { _buildContext } from './builder/build-context.js';
|
|
11
|
+
import { getRegisteredTransports } from './cluster/cluster.js';
|
|
12
|
+
import { executeSteps } from './builder/execute.js';
|
|
13
|
+
registerBuiltinProvider(({ route, createLogger }) => ({
|
|
14
|
+
logger: createLogger(route.name || 'handler'),
|
|
15
|
+
}));
|
|
16
|
+
function createAppCore(config) {
|
|
17
|
+
const container = new Container();
|
|
18
|
+
const controllers = [];
|
|
19
|
+
const installedAdapters = new Set();
|
|
20
|
+
const buildCtx = config._parentBuildContext ?? {
|
|
21
|
+
installAdapter: (a) => installedAdapters.add(a),
|
|
22
|
+
};
|
|
23
|
+
for (const service of config.services ?? []) {
|
|
24
|
+
const isDefinedService = typeof service === 'function' && SERVICE_ID in service;
|
|
25
|
+
if (typeof service === 'function' && !isDefinedService) {
|
|
26
|
+
container.registerClass(service);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const serviceDef = service;
|
|
30
|
+
container.register(serviceDef);
|
|
31
|
+
const provides = getServiceProvides(serviceDef);
|
|
32
|
+
if (provides) {
|
|
33
|
+
for (const providedToken of provides) {
|
|
34
|
+
container.registerFor(providedToken, serviceDef);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const allControllers = config.controllers ?? [];
|
|
40
|
+
if (config._beforeControllerResolution) {
|
|
41
|
+
config._beforeControllerResolution(container, allControllers);
|
|
42
|
+
}
|
|
43
|
+
for (const transport of getRegisteredTransports()) {
|
|
44
|
+
if (transport.beforeControllerResolution) {
|
|
45
|
+
transport.beforeControllerResolution(container, allControllers);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
container.registerInstance(AbstractContainer, createContainerReflection({
|
|
49
|
+
controllers,
|
|
50
|
+
resolve: (token) => container.resolve(token),
|
|
51
|
+
}));
|
|
52
|
+
const ready = _buildContext.run(buildCtx, () => (async () => {
|
|
53
|
+
if (config._asyncBeforeControllerResolution) {
|
|
54
|
+
await config._asyncBeforeControllerResolution(container, allControllers);
|
|
55
|
+
}
|
|
56
|
+
const controllerPromises = (config.controllers ?? []).map(async (controllerDef) => {
|
|
57
|
+
container.register(controllerDef);
|
|
58
|
+
const instance = await container.resolve(controllerDef);
|
|
59
|
+
instance.__def = controllerDef;
|
|
60
|
+
return instance;
|
|
61
|
+
});
|
|
62
|
+
const resolved = await Promise.all(controllerPromises);
|
|
63
|
+
controllers.push(...resolved);
|
|
64
|
+
await container.resolveAll();
|
|
65
|
+
await container.wireModelPrototypes();
|
|
66
|
+
})());
|
|
67
|
+
function match(method, pathname) {
|
|
68
|
+
for (const controller of controllers) {
|
|
69
|
+
for (const route of controller.routes) {
|
|
70
|
+
if (route.method !== method)
|
|
71
|
+
continue;
|
|
72
|
+
const routeMatch = pathname.match(route.pattern);
|
|
73
|
+
if (!routeMatch)
|
|
74
|
+
continue;
|
|
75
|
+
const params = {};
|
|
76
|
+
route.paramNames.forEach((name, i) => {
|
|
77
|
+
params[name] = routeMatch[i + 1] ?? '';
|
|
78
|
+
});
|
|
79
|
+
return { route, deps: controller.deps, params };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (config._getMatchDelegates) {
|
|
83
|
+
for (const delegate of config._getMatchDelegates()) {
|
|
84
|
+
const sub = delegate.match(method, pathname);
|
|
85
|
+
if (sub) {
|
|
86
|
+
return {
|
|
87
|
+
...sub,
|
|
88
|
+
owningContainer: sub.owningContainer ?? delegate.container,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
async function execute(matched, contextAdditions, options) {
|
|
96
|
+
const { route, deps } = matched;
|
|
97
|
+
const requestType = options?.requestType ?? 'http';
|
|
98
|
+
const scopeContainer = matched.owningContainer ?? container;
|
|
99
|
+
return runInFullRequestScope({
|
|
100
|
+
container: scopeContainer,
|
|
101
|
+
type: requestType,
|
|
102
|
+
name: `${route.method} ${route.path}`,
|
|
103
|
+
metadata: {
|
|
104
|
+
[`${requestType}.method`]: route.method,
|
|
105
|
+
[`${requestType}.route`]: route.path,
|
|
106
|
+
'route.name': route.name,
|
|
107
|
+
},
|
|
108
|
+
observability: {
|
|
109
|
+
route: route.name,
|
|
110
|
+
method: route.method,
|
|
111
|
+
path: route.path,
|
|
112
|
+
},
|
|
113
|
+
}, async () => {
|
|
114
|
+
const cleanupFns = [];
|
|
115
|
+
const onCleanup = (fn) => {
|
|
116
|
+
cleanupFns.push(fn);
|
|
117
|
+
};
|
|
118
|
+
const builtins = collectBuiltins({
|
|
119
|
+
route,
|
|
120
|
+
deps,
|
|
121
|
+
createLogger: (context) => scopeContainer.createLogger(context),
|
|
122
|
+
});
|
|
123
|
+
// Build handler context - transport context + builtins only
|
|
124
|
+
// Dependencies are accessed via closure capture from the routes function
|
|
125
|
+
// Transport provides: params, body, query, res (for HTTP) via contextAdditions
|
|
126
|
+
// Builtins (like logger) are always available via registered providers
|
|
127
|
+
const ctx = {
|
|
128
|
+
...contextAdditions, // Transport-specific: params, res, body, query, etc.
|
|
129
|
+
...builtins, // Builtin providers (logger, etc.)
|
|
130
|
+
onCleanup, // Cleanup registration
|
|
131
|
+
};
|
|
132
|
+
try {
|
|
133
|
+
// Run steps (middleware + guards) via the canonical path that reads
|
|
134
|
+
// route.steps, identical to how HTTP and CLI dispatch works.
|
|
135
|
+
// route.middlewares / route.guards are always [] after compilation.
|
|
136
|
+
const passed = await executeSteps(route, ctx);
|
|
137
|
+
if (!passed) {
|
|
138
|
+
return undefined; // Guard denied
|
|
139
|
+
}
|
|
140
|
+
// Call handler with full context
|
|
141
|
+
return route.handler(ctx);
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
for (let i = cleanupFns.length - 1; i >= 0; i--) {
|
|
145
|
+
try {
|
|
146
|
+
await cleanupFns[i]();
|
|
147
|
+
}
|
|
148
|
+
catch (cleanupError) {
|
|
149
|
+
const logger = builtins.logger;
|
|
150
|
+
logger?.error?.('Cleanup function threw', { error: cleanupError });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const app = {
|
|
157
|
+
container,
|
|
158
|
+
controllers,
|
|
159
|
+
get adapters() {
|
|
160
|
+
return Array.from(installedAdapters);
|
|
161
|
+
},
|
|
162
|
+
__buildContext: buildCtx,
|
|
163
|
+
get subApps() {
|
|
164
|
+
return config._getMatchDelegates?.() ?? [];
|
|
165
|
+
},
|
|
166
|
+
ready: ready.then(() => {
|
|
167
|
+
for (const transport of getRegisteredTransports()) {
|
|
168
|
+
if (transport.onAppCreated) {
|
|
169
|
+
transport.onAppCreated(app);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}),
|
|
173
|
+
match,
|
|
174
|
+
execute,
|
|
175
|
+
};
|
|
176
|
+
return app;
|
|
177
|
+
}
|
|
178
|
+
/** @internal */
|
|
179
|
+
export function createAppInternal(config) {
|
|
180
|
+
return createAppCore(config);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import type { Adapter } from '../kernel/adapter.js';
|
|
3
|
+
export interface BuildContext {
|
|
4
|
+
installAdapter(a: Adapter): void;
|
|
5
|
+
}
|
|
6
|
+
export declare const _buildContext: AsyncLocalStorage<BuildContext>;
|
|
7
|
+
export declare const currentBuilder: () => BuildContext | undefined;
|
|
8
|
+
//# sourceMappingURL=build-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-context.d.ts","sourceRoot":"","sources":["../../src/builder/build-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,aAAa,iCAAwC,CAAC;AAEnE,eAAO,MAAM,cAAc,QAAO,YAAY,GAAG,SAAqC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-context.js","sourceRoot":"","sources":["../../src/builder/build-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,iBAAiB,EAAgB,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG,GAA6B,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builder Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for creating bindings in the DI system.
|
|
5
|
+
*/
|
|
6
|
+
import type { RepositoryBinding, ServiceBinding, InstanceBinding } from './types.js';
|
|
7
|
+
import type { RepositoryToken } from '../models/repository.js';
|
|
8
|
+
import type { ServiceToken } from '../core/service.js';
|
|
9
|
+
import { Logger } from '../core/logger.js';
|
|
10
|
+
import { Lifecycle } from '../core/lifecycle.js';
|
|
11
|
+
/**
|
|
12
|
+
* Built-in tokens that are always available.
|
|
13
|
+
* Logger and Lifecycle are auto-provided by the container/cluster builder.
|
|
14
|
+
*/
|
|
15
|
+
export type BuiltInTokens = [typeof Logger, typeof Lifecycle];
|
|
16
|
+
/**
|
|
17
|
+
* Bind a repository token to an implementation.
|
|
18
|
+
*
|
|
19
|
+
* This creates a binding for the DI system to wire up repositories.
|
|
20
|
+
*/
|
|
21
|
+
export declare function bindRepository<T>(token: RepositoryToken<T>, implementation: unknown): RepositoryBinding<T>;
|
|
22
|
+
/**
|
|
23
|
+
* Bind an abstract service token to a concrete implementation.
|
|
24
|
+
*
|
|
25
|
+
* This creates a binding for the DI system to wire up abstract services.
|
|
26
|
+
* Use this when you have an abstract class and want to specify which
|
|
27
|
+
* concrete implementation should be used.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import JustScale, { bindService } from '@justscale/core'
|
|
32
|
+
*
|
|
33
|
+
* JustScale()
|
|
34
|
+
* .add(MemoryChannelBackend)
|
|
35
|
+
* .add(bindService(AbstractChannelBackend, MemoryChannelBackend))
|
|
36
|
+
* .build()
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function bindService<TAbstract, TImpl extends TAbstract = TAbstract>(abstractToken: ServiceToken<TAbstract>, implementation: ServiceToken<TImpl>): ServiceBinding<TAbstract>;
|
|
40
|
+
/**
|
|
41
|
+
* Bind an abstract service token to a pre-created instance.
|
|
42
|
+
*
|
|
43
|
+
* This creates a binding for the DI system to wire up abstract services
|
|
44
|
+
* to specific instances. Use this when you have an instance you want to
|
|
45
|
+
* share across the app.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* import JustScale, { bindInstance } from '@justscale/core'
|
|
50
|
+
*
|
|
51
|
+
* const taskRepo = new InMemoryScheduledTaskRepository()
|
|
52
|
+
*
|
|
53
|
+
* JustScale()
|
|
54
|
+
* .add(bindInstance(ScheduledTaskRepository, taskRepo))
|
|
55
|
+
* .add(TaskController)
|
|
56
|
+
* .build()
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function bindInstance<T>(abstractToken: ServiceToken<T>, instance: T): InstanceBinding<T>;
|
|
60
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder/builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC;AAM9D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,EACzB,cAAc,EAAE,OAAO,GACtB,iBAAiB,CAAC,CAAC,CAAC,CAMtB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,KAAK,SAAS,SAAS,GAAG,SAAS,EACxE,aAAa,EAAE,YAAY,CAAC,SAAS,CAAC,EACtC,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,GAClC,cAAc,CAAC,SAAS,CAAC,CAM3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,EAC9B,QAAQ,EAAE,CAAC,GACV,eAAe,CAAC,CAAC,CAAC,CAMpB"}
|