@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,165 @@
|
|
|
1
|
+
import type { Component } from '../../builder/index.js';
|
|
2
|
+
import type { VaultKind } from '../vault/types.js';
|
|
3
|
+
import type { ConfigPartial, ConfigComponent } from '../config/types.js';
|
|
4
|
+
import type { SecretPartial, SecretComponent } from '../secrets/types.js';
|
|
5
|
+
import type { FeatureFlagPartial, FeatureFlagComponent } from '../feature-flags/types.js';
|
|
6
|
+
/** All valid environment types. */
|
|
7
|
+
export declare const ENVIRONMENT_TYPES: readonly ["production", "test", "development", "ci"];
|
|
8
|
+
export type EnvironmentType = typeof ENVIRONMENT_TYPES[number];
|
|
9
|
+
/**
|
|
10
|
+
* Vault-policy rules applied at build time.
|
|
11
|
+
* `disallow` throws on matching VAULT_KIND brands; `warn` logs and permits.
|
|
12
|
+
*/
|
|
13
|
+
export interface VaultPolicyRules {
|
|
14
|
+
disallow?: VaultKind[];
|
|
15
|
+
warn?: VaultKind[];
|
|
16
|
+
}
|
|
17
|
+
/** Vault-policy option on `createEnvironment`. `extend` merges additional rules. */
|
|
18
|
+
export interface VaultPolicy {
|
|
19
|
+
extend?: VaultPolicyRules;
|
|
20
|
+
}
|
|
21
|
+
export declare const DEFAULT_VAULT_POLICY: Record<EnvironmentType, VaultPolicyRules>;
|
|
22
|
+
/**
|
|
23
|
+
* Marker brand for Environment values. Cross-realm: env files loaded from
|
|
24
|
+
* /tmp paths may resolve @justscale/core to a different module instance,
|
|
25
|
+
* so the marker must be globally interned for the identity check to match.
|
|
26
|
+
*/
|
|
27
|
+
export declare const ENVIRONMENT: unique symbol;
|
|
28
|
+
export interface Environment<S extends readonly Component[] = readonly Component[], P extends readonly Component[] = readonly Component[]> {
|
|
29
|
+
readonly [ENVIRONMENT]: true;
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly type: EnvironmentType;
|
|
32
|
+
readonly public: Record<string, unknown>;
|
|
33
|
+
readonly services: S;
|
|
34
|
+
readonly providers: P;
|
|
35
|
+
readonly vaultPolicy: VaultPolicyRules;
|
|
36
|
+
}
|
|
37
|
+
export declare function isEnvironment(value: unknown): value is Environment;
|
|
38
|
+
/**
|
|
39
|
+
* Declarative contract describing the partials a specific app's env
|
|
40
|
+
* supplies. Used with `loadEnvironment<T>()`, `createEnvironment<T>()`,
|
|
41
|
+
* and `defineApp<T>()` so the builder's feature-requirement type checks
|
|
42
|
+
* don't lose information when the env is loaded dynamically.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* // src/env-contract.ts
|
|
47
|
+
* export type AppEnv = EnvContract<{
|
|
48
|
+
* config: [typeof AppConfig, typeof HttpConfig, typeof PostgresProcessConfig],
|
|
49
|
+
* secrets: [typeof PostgresSecrets],
|
|
50
|
+
* flags: [typeof UserFlags],
|
|
51
|
+
* }>;
|
|
52
|
+
*
|
|
53
|
+
* // src/app.ts
|
|
54
|
+
* export default defineApp<AppEnv>(import.meta, (env) =>
|
|
55
|
+
* JustScale().add(env).add(PostgresFeature) // TS: env provides PostgresSecrets ✓
|
|
56
|
+
* );
|
|
57
|
+
*
|
|
58
|
+
* // env/development.ts
|
|
59
|
+
* export default createEnvironment<AppEnv>({ ... });
|
|
60
|
+
* // ^ providers[] must cover every partial in AppEnv or TS errors.
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export type EnvContract<T extends {
|
|
64
|
+
readonly config?: readonly ConfigPartial<any>[];
|
|
65
|
+
readonly secrets?: readonly SecretPartial<any>[];
|
|
66
|
+
readonly flags?: readonly FeatureFlagPartial<any>[];
|
|
67
|
+
readonly services?: readonly Component[];
|
|
68
|
+
}> = Environment<T['services'] extends readonly Component[] ? T['services'] : readonly [], readonly [
|
|
69
|
+
...(T['config'] extends readonly ConfigPartial<any>[] ? [ConfigComponent<T['config']>] : []),
|
|
70
|
+
...(T['secrets'] extends readonly SecretPartial<any>[] ? [SecretComponent<T['secrets']>] : []),
|
|
71
|
+
...(T['flags'] extends readonly FeatureFlagPartial<any>[] ? [FeatureFlagComponent<T['flags']>] : [])
|
|
72
|
+
]>;
|
|
73
|
+
/**
|
|
74
|
+
* Registry of config partials that the app's imports make visible.
|
|
75
|
+
* Each feature augments this interface via `declare module '@justscale/core'`;
|
|
76
|
+
* the app then derives its `Env` type directly from the merged shape
|
|
77
|
+
* instead of re-listing every partial by hand.
|
|
78
|
+
*
|
|
79
|
+
* @example Feature-side augmentation
|
|
80
|
+
* ```ts
|
|
81
|
+
* // @justscale/http
|
|
82
|
+
* declare module '@justscale/core' {
|
|
83
|
+
* interface RegisteredConfigPartials {
|
|
84
|
+
* http: typeof HttpConfig;
|
|
85
|
+
* }
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* @example App-side usage
|
|
90
|
+
* ```ts
|
|
91
|
+
* // simple-app/src/env-contract.ts
|
|
92
|
+
* export type AppEnv = Env; // all registered partials, no manual list
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* Augmentations are scoped per-compilation: only features actually
|
|
96
|
+
* imported from the app's compile graph contribute.
|
|
97
|
+
*/
|
|
98
|
+
export interface RegisteredConfigPartials {
|
|
99
|
+
}
|
|
100
|
+
export interface RegisteredSecretPartials {
|
|
101
|
+
}
|
|
102
|
+
export interface RegisteredFlagPartials {
|
|
103
|
+
}
|
|
104
|
+
type UnionToIntersection<U> = (U extends unknown ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
|
|
105
|
+
type LastOf<T> = UnionToIntersection<T extends unknown ? () => T : never> extends () => infer R ? R : never;
|
|
106
|
+
type UnionToTuple<T, Last = LastOf<T>> = [
|
|
107
|
+
T
|
|
108
|
+
] extends [never] ? [] : [...UnionToTuple<Exclude<T, Last>>, Last];
|
|
109
|
+
type TupleFromInterfaceValues<T> = [
|
|
110
|
+
T[keyof T]
|
|
111
|
+
] extends [never] ? readonly [] : Readonly<UnionToTuple<T[keyof T]>>;
|
|
112
|
+
type RegisteredConfigTuple = TupleFromInterfaceValues<RegisteredConfigPartials> extends readonly ConfigPartial<any>[] ? TupleFromInterfaceValues<RegisteredConfigPartials> : readonly [];
|
|
113
|
+
type RegisteredSecretTuple = TupleFromInterfaceValues<RegisteredSecretPartials> extends readonly SecretPartial<any>[] ? TupleFromInterfaceValues<RegisteredSecretPartials> : readonly [];
|
|
114
|
+
type RegisteredFlagTuple = TupleFromInterfaceValues<RegisteredFlagPartials> extends readonly FeatureFlagPartial<any>[] ? TupleFromInterfaceValues<RegisteredFlagPartials> : readonly [];
|
|
115
|
+
/**
|
|
116
|
+
* Env contract combining feature-registered partials with app-specific extras.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```ts
|
|
120
|
+
* export type AppEnv = Env<{
|
|
121
|
+
* config: [typeof AppConfig],
|
|
122
|
+
* flags: [typeof UserFlags],
|
|
123
|
+
* }>;
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export type Env<Extras extends {
|
|
127
|
+
readonly config?: readonly ConfigPartial<any>[];
|
|
128
|
+
readonly secrets?: readonly SecretPartial<any>[];
|
|
129
|
+
readonly flags?: readonly FeatureFlagPartial<any>[];
|
|
130
|
+
readonly services?: readonly Component[];
|
|
131
|
+
} = {}> = EnvContract<{
|
|
132
|
+
services: Extras['services'] extends readonly Component[] ? Extras['services'] : readonly [];
|
|
133
|
+
config: readonly [
|
|
134
|
+
...RegisteredConfigTuple,
|
|
135
|
+
...(Extras['config'] extends readonly ConfigPartial<any>[] ? Extras['config'] : readonly [])
|
|
136
|
+
];
|
|
137
|
+
secrets: readonly [
|
|
138
|
+
...RegisteredSecretTuple,
|
|
139
|
+
...(Extras['secrets'] extends readonly SecretPartial<any>[] ? Extras['secrets'] : readonly [])
|
|
140
|
+
];
|
|
141
|
+
flags: readonly [
|
|
142
|
+
...RegisteredFlagTuple,
|
|
143
|
+
...(Extras['flags'] extends readonly FeatureFlagPartial<any>[] ? Extras['flags'] : readonly [])
|
|
144
|
+
];
|
|
145
|
+
}>;
|
|
146
|
+
/**
|
|
147
|
+
* Type-level vault compatibility brand. A concrete vault service can be
|
|
148
|
+
* tagged with the set of EnvironmentTypes it is permitted in. When passed
|
|
149
|
+
* into `createEnvironment`, the env's `type` is checked against this brand
|
|
150
|
+
* and incompatible combinations become a TS type error.
|
|
151
|
+
*
|
|
152
|
+
* Services without the brand are treated as env-neutral (allowed anywhere).
|
|
153
|
+
*/
|
|
154
|
+
declare const VAULT_ALLOWED_IN: unique symbol;
|
|
155
|
+
export interface VaultAllowedIn<T extends EnvironmentType> {
|
|
156
|
+
readonly [VAULT_ALLOWED_IN]?: T;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Given a service token type S and an environment type T, resolve to S if
|
|
160
|
+
* S is either un-branded (any env) or allows T - otherwise resolve to
|
|
161
|
+
* `never` so a TS assignment error fires at the incompatible position.
|
|
162
|
+
*/
|
|
163
|
+
export type ServiceCompatibleWithEnv<S, T extends EnvironmentType> = S extends VaultAllowedIn<infer Allowed> ? T extends Allowed ? S : never : S;
|
|
164
|
+
export {};
|
|
165
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/environment/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** All valid environment types. */
|
|
2
|
+
export const ENVIRONMENT_TYPES = ['production', 'test', 'development', 'ci'];
|
|
3
|
+
export const DEFAULT_VAULT_POLICY = {
|
|
4
|
+
production: { disallow: ['hardcoded'] },
|
|
5
|
+
ci: { disallow: ['hardcoded'] },
|
|
6
|
+
test: {},
|
|
7
|
+
development: {},
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Marker brand for Environment values. Cross-realm: env files loaded from
|
|
11
|
+
* /tmp paths may resolve @justscale/core to a different module instance,
|
|
12
|
+
* so the marker must be globally interned for the identity check to match.
|
|
13
|
+
*/
|
|
14
|
+
export const ENVIRONMENT = Symbol.for('justscale.environment');
|
|
15
|
+
export function isEnvironment(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && ENVIRONMENT in value;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/features/environment/types.ts"],"names":[],"mappings":"AAMA,mCAAmC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAU,CAAC;AAiBtF,MAAM,CAAC,MAAM,oBAAoB,GAA8C;IAC7E,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IACvC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;IAC/B,IAAI,EAAE,EAAE;IACR,WAAW,EAAE,EAAE;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAe/D,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ServiceToken, InstanceOf } from '../../core/service.js';
|
|
2
|
+
import type { FeatureFlagPartial, FeatureFlagComponent } from './types.js';
|
|
3
|
+
type InferDeps<T extends Record<string, ServiceToken<any>>> = {
|
|
4
|
+
[K in keyof T]: InstanceOf<T[K]>;
|
|
5
|
+
};
|
|
6
|
+
type FlagFactory<TInject extends Record<string, ServiceToken<any>>> = (deps: InferDeps<TInject>) => Record<symbol, any> | Promise<Record<symbol, any>>;
|
|
7
|
+
interface CreateFeatureFlagProviderOptions<TInject extends Record<string, ServiceToken<any>>, P extends readonly FeatureFlagPartial<any>[]> {
|
|
8
|
+
provides?: P;
|
|
9
|
+
inject?: TInject;
|
|
10
|
+
factory: FlagFactory<TInject>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a FeatureFlagProvider - loads initial flag values at boot.
|
|
14
|
+
*
|
|
15
|
+
* For reactive updates (external flag system changed a value), an injected
|
|
16
|
+
* adapter subscribes to the source and calls FeatureFlagService.update()
|
|
17
|
+
* to push new values into the container.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createFeatureFlagProvider<const TInject extends Record<string, ServiceToken<any>> = {}, const P extends readonly FeatureFlagPartial<any>[] = readonly []>(options: CreateFeatureFlagProviderOptions<TInject, P>): FeatureFlagComponent<P>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=create-feature-flag-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-feature-flag-provider.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/create-feature-flag-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE3E,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI;KAC3D,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAChE,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEnF,UAAU,gCAAgC,CACxC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EACjD,CAAC,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAE5C,QAAQ,CAAC,EAAE,CAAC,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAC5D,KAAK,CAAC,CAAC,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,EAChE,OAAO,EAAE,gCAAgC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAOhF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a FeatureFlagProvider - loads initial flag values at boot.
|
|
3
|
+
*
|
|
4
|
+
* For reactive updates (external flag system changed a value), an injected
|
|
5
|
+
* adapter subscribes to the source and calls FeatureFlagService.update()
|
|
6
|
+
* to push new values into the container.
|
|
7
|
+
*/
|
|
8
|
+
export function createFeatureFlagProvider(options) {
|
|
9
|
+
return {
|
|
10
|
+
__featureFlagComponent: true,
|
|
11
|
+
provides: (options.provides ?? []),
|
|
12
|
+
inject: (options.inject ?? {}),
|
|
13
|
+
factory: options.factory,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=create-feature-flag-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-feature-flag-provider.js","sourceRoot":"","sources":["../../../src/features/feature-flags/create-feature-flag-provider.ts"],"names":[],"mappings":"AAoBA;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CAGvC,OAAqD;IACrD,OAAO;QACL,sBAAsB,EAAE,IAAI;QAC5B,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAM;QACvC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAA+B;QAC5D,OAAO,EAAE,OAAO,CAAC,OAAyD;KAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import { type FeatureFlagPartial } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Define a feature-flag partial with a Zod schema.
|
|
5
|
+
*
|
|
6
|
+
* The returned object carries a fresh `Symbol('featureFlag:<name>')` on
|
|
7
|
+
* `.key`. Plain `Symbol()` (not `Symbol.for`) so two features that happen
|
|
8
|
+
* to pick the same name get distinct tokens and do not silently share a
|
|
9
|
+
* container slot. Consumers import the token object from the declaring
|
|
10
|
+
* module and inject it via `FeatureFlag.of(partial)`; no string-keyed
|
|
11
|
+
* lookup is involved.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* const CheckoutFlags = defineFeatureFlagPartial('checkout', z.object({
|
|
15
|
+
* newPayment: z.boolean(),
|
|
16
|
+
* cohort: z.enum(['a', 'b']),
|
|
17
|
+
* }))
|
|
18
|
+
*/
|
|
19
|
+
export declare function defineFeatureFlagPartial<T extends z.ZodType>(name: string, schema: T): FeatureFlagPartial<z.infer<T>>;
|
|
20
|
+
//# sourceMappingURL=define-feature-flag-partial.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-feature-flag-partial.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/define-feature-flag-partial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC1D,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,GACR,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAOhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { FEATURE_FLAG_PARTIAL } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Define a feature-flag partial with a Zod schema.
|
|
4
|
+
*
|
|
5
|
+
* The returned object carries a fresh `Symbol('featureFlag:<name>')` on
|
|
6
|
+
* `.key`. Plain `Symbol()` (not `Symbol.for`) so two features that happen
|
|
7
|
+
* to pick the same name get distinct tokens and do not silently share a
|
|
8
|
+
* container slot. Consumers import the token object from the declaring
|
|
9
|
+
* module and inject it via `FeatureFlag.of(partial)`; no string-keyed
|
|
10
|
+
* lookup is involved.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const CheckoutFlags = defineFeatureFlagPartial('checkout', z.object({
|
|
14
|
+
* newPayment: z.boolean(),
|
|
15
|
+
* cohort: z.enum(['a', 'b']),
|
|
16
|
+
* }))
|
|
17
|
+
*/
|
|
18
|
+
export function defineFeatureFlagPartial(name, schema) {
|
|
19
|
+
return {
|
|
20
|
+
[FEATURE_FLAG_PARTIAL]: true,
|
|
21
|
+
key: Symbol(`featureFlag:${name}`),
|
|
22
|
+
name,
|
|
23
|
+
schema: schema,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=define-feature-flag-partial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-feature-flag-partial.js","sourceRoot":"","sources":["../../../src/features/feature-flags/define-feature-flag-partial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,MAAS;IAET,OAAO;QACL,CAAC,oBAAoB,CAAC,EAAE,IAAI;QAC5B,GAAG,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;QAClC,IAAI;QACJ,MAAM,EAAE,MAA+B;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Token } from '../../builder/index.js';
|
|
2
|
+
import type { FeatureFlagPartial } from './types.js';
|
|
3
|
+
declare const FEATURE_FLAG_TOKEN_BRAND: unique symbol;
|
|
4
|
+
export interface FeatureFlagToken<T> extends Token<T> {
|
|
5
|
+
readonly [FEATURE_FLAG_TOKEN_BRAND]?: T;
|
|
6
|
+
readonly description: string;
|
|
7
|
+
readonly key: symbol;
|
|
8
|
+
resolve(container: {
|
|
9
|
+
get(key: symbol): T;
|
|
10
|
+
}): T;
|
|
11
|
+
}
|
|
12
|
+
export declare const FeatureFlag: {
|
|
13
|
+
of<T>(partial: FeatureFlagPartial<T>): FeatureFlagToken<T>;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=feature-flag-of.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flag-of.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/feature-flag-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,CAAC,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC;AAEtD,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAA;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,SAAS,EAAE;QAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAA;KAAE,GAAG,CAAC,CAAA;CAC/C;AAID,eAAO,MAAM,WAAW;OACnB,CAAC,WAAW,kBAAkB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;CAW3D,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const tokenCache = new WeakMap();
|
|
2
|
+
export const FeatureFlag = {
|
|
3
|
+
of(partial) {
|
|
4
|
+
const cached = tokenCache.get(partial);
|
|
5
|
+
if (cached)
|
|
6
|
+
return cached;
|
|
7
|
+
const token = {
|
|
8
|
+
description: `FeatureFlag.of(${partial.name})`,
|
|
9
|
+
key: partial.key,
|
|
10
|
+
resolve: (container) => container.get(partial.key),
|
|
11
|
+
};
|
|
12
|
+
tokenCache.set(partial, token);
|
|
13
|
+
return token;
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=feature-flag-of.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flag-of.js","sourceRoot":"","sources":["../../../src/features/feature-flags/feature-flag-of.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,GAAG,IAAI,OAAO,EAAkD,CAAC;AAEjF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,EAAE,CAAI,OAA8B;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,MAAM;YAAE,OAAO,MAA6B,CAAC;QACjD,MAAM,KAAK,GAAwB;YACjC,WAAW,EAAE,kBAAkB,OAAO,CAAC,IAAI,GAAG;YAC9C,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,CAAC,SAAsC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;SACzD,CAAC;QACzB,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FeatureFlagPartial } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Feature flag access with reactive updates.
|
|
4
|
+
*
|
|
5
|
+
* - `.read(partial)` - current value.
|
|
6
|
+
* - `.update(partial, value)` - push a new value (used by external flag
|
|
7
|
+
* adapters when the upstream source changes).
|
|
8
|
+
* - `.watch(partial)` - async-iterable of [old, new] pairs.
|
|
9
|
+
*
|
|
10
|
+
* No disk persistence - runtime-only. Providers supply initial values at
|
|
11
|
+
* boot; adapters call `.update()` to push subsequent changes.
|
|
12
|
+
*/
|
|
13
|
+
export interface FeatureFlagService {
|
|
14
|
+
read<T>(partial: FeatureFlagPartial<T>): Promise<T>;
|
|
15
|
+
update<T>(partial: FeatureFlagPartial<T>, value: T): Promise<number>;
|
|
16
|
+
watch<T>(partial: FeatureFlagPartial<T>): AsyncIterable<[T, T]>;
|
|
17
|
+
}
|
|
18
|
+
declare const FeatureFlagServiceDef_base: import("../../core/service.js").Service<FeatureFlagService, {}>;
|
|
19
|
+
export declare class FeatureFlagServiceDef extends FeatureFlagServiceDef_base {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=feature-flag-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flag-service.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/feature-flag-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAqBrD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACpE,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAChE;;AA4FD,qBAAa,qBAAsB,SAAQ,0BAGzC;CAAG"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { defineService } from '../../core/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structural equality for flag values (plain JSON-ish shapes from providers).
|
|
4
|
+
* Cheap enough for the update() hot path; objects are small and shallow.
|
|
5
|
+
*/
|
|
6
|
+
function deepEqual(a, b) {
|
|
7
|
+
if (a === b)
|
|
8
|
+
return true;
|
|
9
|
+
if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
|
|
10
|
+
return false;
|
|
11
|
+
if (Array.isArray(a) !== Array.isArray(b))
|
|
12
|
+
return false;
|
|
13
|
+
const aKeys = Object.keys(a);
|
|
14
|
+
const bKeys = Object.keys(b);
|
|
15
|
+
if (aKeys.length !== bKeys.length)
|
|
16
|
+
return false;
|
|
17
|
+
for (const k of aKeys) {
|
|
18
|
+
if (!deepEqual(a[k], b[k]))
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
class FeatureFlagServiceImpl {
|
|
24
|
+
resolver;
|
|
25
|
+
watchers = new Map();
|
|
26
|
+
constructor(resolver) {
|
|
27
|
+
this.resolver = resolver;
|
|
28
|
+
}
|
|
29
|
+
async read(partial) {
|
|
30
|
+
const value = await this.resolver(partial.key);
|
|
31
|
+
if (value === undefined) {
|
|
32
|
+
throw new Error(`FeatureFlagService.read: no provider registered a value for feature-flag partial '${partial.name}'.`);
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
async update(partial, value) {
|
|
37
|
+
partial.schema.parse(value);
|
|
38
|
+
const oldValue = await this.resolver(partial.key).catch(() => undefined);
|
|
39
|
+
// Skip the notify loop when nothing actually changed. External
|
|
40
|
+
// adapters (LaunchDarkly, Unleash) poll and call update() on every
|
|
41
|
+
// tick; without this every watcher wakes for no reason.
|
|
42
|
+
if (oldValue !== undefined && deepEqual(oldValue, value)) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
this.resolver.registerInstance(partial.key, value);
|
|
46
|
+
const callbacks = this.watchers.get(partial.key) ?? new Set();
|
|
47
|
+
let notified = 0;
|
|
48
|
+
for (const cb of callbacks) {
|
|
49
|
+
try {
|
|
50
|
+
cb(oldValue, value);
|
|
51
|
+
notified++;
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// Don't silently unsubscribe - a buggy callback shouldn't drop
|
|
55
|
+
// the watcher. Log and continue; callers remove via `return()`.
|
|
56
|
+
console.error('[FeatureFlagService] watcher threw, continuing:', err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return notified;
|
|
60
|
+
}
|
|
61
|
+
watch(partial) {
|
|
62
|
+
const watchers = this.watchers;
|
|
63
|
+
const key = partial.key;
|
|
64
|
+
return {
|
|
65
|
+
[Symbol.asyncIterator]() {
|
|
66
|
+
const queue = [];
|
|
67
|
+
let pending = null;
|
|
68
|
+
let done = false;
|
|
69
|
+
const cb = (oldVal, newVal) => {
|
|
70
|
+
if (done)
|
|
71
|
+
return;
|
|
72
|
+
const pair = [oldVal, newVal];
|
|
73
|
+
if (pending) {
|
|
74
|
+
pending({ value: pair, done: false });
|
|
75
|
+
pending = null;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
queue.push(pair);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
if (!watchers.has(key))
|
|
82
|
+
watchers.set(key, new Set());
|
|
83
|
+
watchers.get(key).add(cb);
|
|
84
|
+
return {
|
|
85
|
+
async next() {
|
|
86
|
+
if (queue.length)
|
|
87
|
+
return { value: queue.shift(), done: false };
|
|
88
|
+
if (done)
|
|
89
|
+
return { value: undefined, done: true };
|
|
90
|
+
return new Promise((r) => { pending = r; });
|
|
91
|
+
},
|
|
92
|
+
async return() {
|
|
93
|
+
done = true;
|
|
94
|
+
watchers.get(key)?.delete(cb);
|
|
95
|
+
return { value: undefined, done: true };
|
|
96
|
+
},
|
|
97
|
+
async throw(e) {
|
|
98
|
+
done = true;
|
|
99
|
+
watchers.get(key)?.delete(cb);
|
|
100
|
+
throw e;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export class FeatureFlagServiceDef extends defineService({
|
|
108
|
+
inject: {},
|
|
109
|
+
factory: (_deps, resolver) => new FeatureFlagServiceImpl(resolver),
|
|
110
|
+
}) {
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=feature-flag-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-flag-service.js","sourceRoot":"","sources":["../../../src/features/feature-flags/feature-flag-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/feature-flags
|
|
3
|
+
*
|
|
4
|
+
* Reactive feature-flag management. Values live in memory, update via
|
|
5
|
+
* external adapters, observable via `.watch()`.
|
|
6
|
+
*/
|
|
7
|
+
export { FEATURE_FLAG_PARTIAL, isFeatureFlagPartial, isFeatureFlagComponent, } from './types.js';
|
|
8
|
+
export type { FeatureFlagPartial, FeatureFlagComponent, } from './types.js';
|
|
9
|
+
export { defineFeatureFlagPartial } from './define-feature-flag-partial.js';
|
|
10
|
+
export { FeatureFlag } from './feature-flag-of.js';
|
|
11
|
+
export type { FeatureFlagToken } from './feature-flag-of.js';
|
|
12
|
+
export { createFeatureFlagProvider } from './create-feature-flag-provider.js';
|
|
13
|
+
export { FeatureFlagServiceDef } from './feature-flag-service.js';
|
|
14
|
+
export type { FeatureFlagService } from './feature-flag-service.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @justscale/core/feature-flags
|
|
3
|
+
*
|
|
4
|
+
* Reactive feature-flag management. Values live in memory, update via
|
|
5
|
+
* external adapters, observable via `.watch()`.
|
|
6
|
+
*/
|
|
7
|
+
export { FEATURE_FLAG_PARTIAL, isFeatureFlagPartial, isFeatureFlagComponent, } from './types.js';
|
|
8
|
+
export { defineFeatureFlagPartial } from './define-feature-flag-partial.js';
|
|
9
|
+
export { FeatureFlag } from './feature-flag-of.js';
|
|
10
|
+
export { createFeatureFlagProvider } from './create-feature-flag-provider.js';
|
|
11
|
+
export { FeatureFlagServiceDef } from './feature-flag-service.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { Token } from '../../builder/index.js';
|
|
3
|
+
export declare const FEATURE_FLAG_PARTIAL: unique symbol;
|
|
4
|
+
/**
|
|
5
|
+
* A feature-flag partial - shape and validation for a flag slice.
|
|
6
|
+
*
|
|
7
|
+
* Parallel to ConfigPartial/SecretPartial. Flag values live in memory and
|
|
8
|
+
* may change at runtime: external adapters (LaunchDarkly, Unleash) call
|
|
9
|
+
* FeatureFlagService.update() when they observe a change, which notifies
|
|
10
|
+
* watchers.
|
|
11
|
+
*/
|
|
12
|
+
export interface FeatureFlagPartial<T> {
|
|
13
|
+
readonly [FEATURE_FLAG_PARTIAL]: true;
|
|
14
|
+
readonly key: symbol;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly schema: z.ZodType<T>;
|
|
17
|
+
}
|
|
18
|
+
export declare function isFeatureFlagPartial(value: unknown): value is FeatureFlagPartial<unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Component returned by createFeatureFlagProvider().
|
|
21
|
+
* Builder runs its factory at boot for initial values.
|
|
22
|
+
*/
|
|
23
|
+
export interface FeatureFlagComponent<P extends readonly FeatureFlagPartial<any>[] = readonly FeatureFlagPartial<any>[]> {
|
|
24
|
+
readonly __featureFlagComponent: true;
|
|
25
|
+
readonly provides: P;
|
|
26
|
+
readonly inject: Record<string, Token<any>>;
|
|
27
|
+
readonly factory: (deps: Record<string, any>) => Record<symbol, any> | Promise<Record<symbol, any>>;
|
|
28
|
+
}
|
|
29
|
+
export declare function isFeatureFlagComponent(value: unknown): value is FeatureFlagComponent;
|
|
30
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/features/feature-flags/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD,eAAO,MAAM,oBAAoB,eAAgC,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAA;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;CAC9B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAEzF;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE;IACrH,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAA;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;CACpG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const FEATURE_FLAG_PARTIAL = Symbol('featureFlag:partial');
|
|
2
|
+
export function isFeatureFlagPartial(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null && FEATURE_FLAG_PARTIAL in value;
|
|
4
|
+
}
|
|
5
|
+
export function isFeatureFlagComponent(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && '__featureFlagComponent' in value;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/features/feature-flags/types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAiBlE,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,oBAAoB,IAAI,KAAK,CAAC;AACtF,CAAC;AAaD,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,wBAAwB,IAAI,KAAK,CAAC;AAC1F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { Lock, LockMetadata, LockOptions, LockProvider, LockService, } from './types.js';
|
|
2
|
+
export { isLocked } from './types.js';
|
|
3
|
+
export { LockServiceDef, AbstractLockProvider, LockAcquisitionError, DoubleLockError, LockReleasedError, InvalidLockKeyError, runWithLockTracking, getHeldLocks, _registerHeldLock, _unregisterHeldLock, } from './lock-service.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/features/lock/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { isLocked } from './types.js';
|
|
2
|
+
// Service
|
|
3
|
+
export { LockServiceDef, AbstractLockProvider, LockAcquisitionError, DoubleLockError, LockReleasedError, InvalidLockKeyError, runWithLockTracking, getHeldLocks, _registerHeldLock, _unregisterHeldLock, } from './lock-service.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/features/lock/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,UAAU;AACV,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC"}
|