@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,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScheduledTaskRepository
|
|
3
|
+
*
|
|
4
|
+
* Abstract repository for scheduled tasks. Extends ModelRepository with
|
|
5
|
+
* scheduling-specific methods.
|
|
6
|
+
*
|
|
7
|
+
* Implementations (PostgreSQL, Redis, in-memory) provide:
|
|
8
|
+
* - Durable storage of scheduled tasks
|
|
9
|
+
* - Exactly-once pickup semantics via locking
|
|
10
|
+
* - Subscription for task delivery via async iteration
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Schedule a task
|
|
15
|
+
* const task = await scheduler.schedule({
|
|
16
|
+
* dueAt: new Date(Date.now() + 60_000),
|
|
17
|
+
* namespace: 'process',
|
|
18
|
+
* type: 'delay',
|
|
19
|
+
* payload: { processId: 'abc' },
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Cancel if needed
|
|
23
|
+
* await scheduler.cancel(task.id)
|
|
24
|
+
*
|
|
25
|
+
* // Subscribe and process tasks
|
|
26
|
+
* for await (const task of scheduler.subscribe('process.delay')) {
|
|
27
|
+
* await handleTask(task)
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { ModelRepository } from '../model.repository.js';
|
|
32
|
+
import type { Persistent } from '../types.js';
|
|
33
|
+
import { ScheduledTask } from './scheduled-task.js';
|
|
34
|
+
/**
|
|
35
|
+
* Options for scheduling a task.
|
|
36
|
+
*/
|
|
37
|
+
export interface ScheduleOptions<TPayload = unknown> {
|
|
38
|
+
/** When the task should be executed */
|
|
39
|
+
dueAt: Date;
|
|
40
|
+
/** Task namespace (e.g., 'process', 'email') */
|
|
41
|
+
namespace: string;
|
|
42
|
+
/** Task type within namespace (e.g., 'delay', 'reminder') */
|
|
43
|
+
type: string;
|
|
44
|
+
/** Task payload data */
|
|
45
|
+
payload: TPayload;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Abstract repository for scheduled tasks.
|
|
49
|
+
*
|
|
50
|
+
* Extends ModelRepository<ScheduledTask> with scheduling-specific operations.
|
|
51
|
+
* Implementations handle the actual storage and delivery mechanism.
|
|
52
|
+
*/
|
|
53
|
+
export declare abstract class ScheduledTaskRepository extends ModelRepository<ScheduledTask> {
|
|
54
|
+
/**
|
|
55
|
+
* Schedule a new task.
|
|
56
|
+
*
|
|
57
|
+
* Creates a task that will be delivered to subscribers of the qualified name
|
|
58
|
+
* (namespace.type) when the dueAt time is reached.
|
|
59
|
+
*
|
|
60
|
+
* @param options - Task scheduling options
|
|
61
|
+
* @returns The created task with ID and metadata
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const task = await scheduler.schedule({
|
|
66
|
+
* dueAt: new Date(Date.now() + hours(24).ms),
|
|
67
|
+
* namespace: 'process',
|
|
68
|
+
* type: 'delay',
|
|
69
|
+
* payload: { processId: '123', instanceId: 'abc' },
|
|
70
|
+
* })
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
abstract schedule<TPayload = unknown>(options: ScheduleOptions<TPayload>): Promise<Persistent<ScheduledTask>>;
|
|
74
|
+
/**
|
|
75
|
+
* Cancel a scheduled task.
|
|
76
|
+
*
|
|
77
|
+
* Can only cancel tasks that are still pending (not yet picked up).
|
|
78
|
+
*
|
|
79
|
+
* @param taskId - The task ID to cancel
|
|
80
|
+
* @returns true if cancelled, false if not found or already processing
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const cancelled = await scheduler.cancel(task.id)
|
|
85
|
+
* if (!cancelled) {
|
|
86
|
+
* console.log('Task already started or not found')
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
abstract cancel(taskId: string): Promise<boolean>;
|
|
91
|
+
/**
|
|
92
|
+
* Subscribe to tasks by qualified name.
|
|
93
|
+
*
|
|
94
|
+
* Returns an async iterable that yields tasks as they become due.
|
|
95
|
+
* Each task is yielded to exactly one subscriber (exactly-once delivery).
|
|
96
|
+
*
|
|
97
|
+
* The implementation handles:
|
|
98
|
+
* - Polling or push-based delivery (implementation-specific)
|
|
99
|
+
* - Locking to ensure exactly-once pickup
|
|
100
|
+
* - Marking tasks as completed after successful processing
|
|
101
|
+
*
|
|
102
|
+
* To stop subscribing, break out of the loop or use AbortController.
|
|
103
|
+
*
|
|
104
|
+
* @param qualifiedName - The namespace.type to subscribe to (e.g., 'process.delay')
|
|
105
|
+
* @param options - Optional subscription options
|
|
106
|
+
* @returns Async iterable of tasks
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* // Basic subscription
|
|
111
|
+
* for await (const task of scheduler.subscribe('process.delay')) {
|
|
112
|
+
* await resumeProcess(task.payload as ProcessPayload)
|
|
113
|
+
* // Task is automatically marked completed after successful handling
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* // With abort controller for graceful shutdown
|
|
117
|
+
* const controller = new AbortController()
|
|
118
|
+
* process.on('SIGTERM', () => controller.abort())
|
|
119
|
+
*
|
|
120
|
+
* for await (const task of scheduler.subscribe('process.delay', {
|
|
121
|
+
* signal: controller.signal,
|
|
122
|
+
* })) {
|
|
123
|
+
* await handleTask(task)
|
|
124
|
+
* }
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
abstract subscribe(qualifiedName: string, options?: SubscribeOptions): AsyncIterable<Persistent<ScheduledTask>>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Options for subscribing to tasks.
|
|
131
|
+
*/
|
|
132
|
+
export interface SubscribeOptions {
|
|
133
|
+
/** AbortSignal for graceful shutdown */
|
|
134
|
+
signal?: AbortSignal;
|
|
135
|
+
/** Polling interval in ms (for polling-based implementations) */
|
|
136
|
+
pollInterval?: number;
|
|
137
|
+
/**
|
|
138
|
+
* Reset tasks stuck in Processing status longer than this many ms back
|
|
139
|
+
* to Pending so they can be re-delivered. Guards against worker crashes
|
|
140
|
+
* that leave rows claimed but never completed. Defaults to 10 minutes;
|
|
141
|
+
* pass a number to override or `false` to disable auto-recovery.
|
|
142
|
+
*/
|
|
143
|
+
stuckAfterMs?: number | false;
|
|
144
|
+
/**
|
|
145
|
+
* How often to check for stuck tasks (ms). Defaults to 60_000 (once per
|
|
146
|
+
* minute); ignored when `stuckAfterMs: false`.
|
|
147
|
+
*/
|
|
148
|
+
stuckCheckEveryMs?: number;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=scheduled-task.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-task.repository.d.ts","sourceRoot":"","sources":["../../../src/models/scheduled-task/scheduled-task.repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD,uCAAuC;IACvC,KAAK,EAAE,IAAI,CAAA;IACX,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAA;IACZ,wBAAwB;IACxB,OAAO,EAAE,QAAQ,CAAA;CAClB;AAED;;;;;GAKG;AACH,8BAAsB,uBAAwB,SAAQ,eAAe,CAAC,aAAa,CAAC;IAClF;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAClC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAErC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,iEAAiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC7B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScheduledTaskRepository
|
|
3
|
+
*
|
|
4
|
+
* Abstract repository for scheduled tasks. Extends ModelRepository with
|
|
5
|
+
* scheduling-specific methods.
|
|
6
|
+
*
|
|
7
|
+
* Implementations (PostgreSQL, Redis, in-memory) provide:
|
|
8
|
+
* - Durable storage of scheduled tasks
|
|
9
|
+
* - Exactly-once pickup semantics via locking
|
|
10
|
+
* - Subscription for task delivery via async iteration
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Schedule a task
|
|
15
|
+
* const task = await scheduler.schedule({
|
|
16
|
+
* dueAt: new Date(Date.now() + 60_000),
|
|
17
|
+
* namespace: 'process',
|
|
18
|
+
* type: 'delay',
|
|
19
|
+
* payload: { processId: 'abc' },
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Cancel if needed
|
|
23
|
+
* await scheduler.cancel(task.id)
|
|
24
|
+
*
|
|
25
|
+
* // Subscribe and process tasks
|
|
26
|
+
* for await (const task of scheduler.subscribe('process.delay')) {
|
|
27
|
+
* await handleTask(task)
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { ModelRepository } from '../model.repository.js';
|
|
32
|
+
/**
|
|
33
|
+
* Abstract repository for scheduled tasks.
|
|
34
|
+
*
|
|
35
|
+
* Extends ModelRepository<ScheduledTask> with scheduling-specific operations.
|
|
36
|
+
* Implementations handle the actual storage and delivery mechanism.
|
|
37
|
+
*/
|
|
38
|
+
export class ScheduledTaskRepository extends ModelRepository {
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=scheduled-task.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduled-task.repository.js","sourceRoot":"","sources":["../../../src/models/scheduled-task/scheduled-task.repository.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkBzD;;;;;GAKG;AACH,MAAM,OAAgB,uBAAwB,SAAQ,eAA8B;CAkFnF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream Field Implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides pub/sub streams as first-class model fields.
|
|
5
|
+
* Streams are AsyncIterable<T> for subscription and have a publish() method.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const Room = defineModel('Room', {
|
|
10
|
+
* name: field.string(),
|
|
11
|
+
* messages: field.stream(ChatMessage),
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* // Subscribe
|
|
15
|
+
* for await (const msg of room.messages) {
|
|
16
|
+
* console.log(msg.text)
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Publish
|
|
20
|
+
* room.messages.publish({ user: userRef, text: 'hello' })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import type { ChannelSubscription } from '../features/channel/types.js';
|
|
24
|
+
/** Symbol to mark an object as a Stream */
|
|
25
|
+
export declare const STREAM: unique symbol;
|
|
26
|
+
/** Symbol-keyed method to attach channel (internal use by repository) */
|
|
27
|
+
export declare const SET_STREAM_CHANNEL: unique symbol;
|
|
28
|
+
/** Symbol-keyed method to attach signal emitter for process wakeup */
|
|
29
|
+
export declare const SET_STREAM_SIGNAL_EMITTER: unique symbol;
|
|
30
|
+
/**
|
|
31
|
+
* A stream field that provides pub/sub messaging on a model.
|
|
32
|
+
*
|
|
33
|
+
* Implements AsyncIterable<T> for subscription via `for await...of`.
|
|
34
|
+
* Provides publish() method for broadcasting messages.
|
|
35
|
+
* Implements Disposable for cleanup via `using` syntax.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // Subscribe to messages
|
|
40
|
+
* for await (const msg of room.messages) {
|
|
41
|
+
* console.log(msg.text)
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* // Publish a message
|
|
45
|
+
* room.messages.publish({ user: userRef, text: 'hello' })
|
|
46
|
+
*
|
|
47
|
+
* // Manual cleanup (or use `using` on entity)
|
|
48
|
+
* room.messages.disconnect()
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export interface Stream<T> extends AsyncIterable<T>, Disposable {
|
|
52
|
+
readonly [STREAM]: true;
|
|
53
|
+
/**
|
|
54
|
+
* Async iterator - enables `for await (const msg of stream) { ... }`
|
|
55
|
+
* Delegates to underlying channel's async iterator.
|
|
56
|
+
*/
|
|
57
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
58
|
+
/**
|
|
59
|
+
* Publish a message to all subscribers.
|
|
60
|
+
*
|
|
61
|
+
* For protected streams, requires the entity to be locked.
|
|
62
|
+
*
|
|
63
|
+
* @throws Error if stream is not connected (entity not from repository)
|
|
64
|
+
* @throws Error if stream is protected and entity is not locked
|
|
65
|
+
*/
|
|
66
|
+
publish(message: T): void;
|
|
67
|
+
/** Check if stream has active channel connection */
|
|
68
|
+
readonly isConnected: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Disconnect from the channel and clean up resources.
|
|
71
|
+
* Safe to call multiple times.
|
|
72
|
+
*/
|
|
73
|
+
disconnect(): void;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Stream implementation that wraps a channel subscription.
|
|
77
|
+
* Created by repository during entity hydration.
|
|
78
|
+
*/
|
|
79
|
+
export declare class StreamImpl<T> implements Stream<T> {
|
|
80
|
+
readonly [STREAM]: true;
|
|
81
|
+
private channel;
|
|
82
|
+
private publishFn;
|
|
83
|
+
private readonly protectedMode;
|
|
84
|
+
private lockChecker;
|
|
85
|
+
/** Signal emitter for waking up processes waiting on stream() */
|
|
86
|
+
private signalEmitter;
|
|
87
|
+
/** Channel key for signal emission (tableName:entityId:fieldName) */
|
|
88
|
+
private channelKey;
|
|
89
|
+
constructor(isProtected: boolean);
|
|
90
|
+
/**
|
|
91
|
+
* Attach the channel subscription and publish function.
|
|
92
|
+
* Called by repository during entity hydration.
|
|
93
|
+
*
|
|
94
|
+
* @internal
|
|
95
|
+
*/
|
|
96
|
+
[SET_STREAM_CHANNEL](channel: ChannelSubscription<T>, publish: (msg: T) => void, lockChecker?: () => boolean): void;
|
|
97
|
+
/**
|
|
98
|
+
* Attach a signal emitter for process wakeup.
|
|
99
|
+
* When publish() is called, this emitter is invoked to wake up any
|
|
100
|
+
* processes that are suspended on stream(r, entity.field).
|
|
101
|
+
*
|
|
102
|
+
* Called by repository during entity hydration when SignalBus is available.
|
|
103
|
+
*
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
[SET_STREAM_SIGNAL_EMITTER](channelKey: string, emitter: (channelKey: string, message: T) => void): void;
|
|
107
|
+
/**
|
|
108
|
+
* Async generator that delegates to the channel's async iterator.
|
|
109
|
+
* Uses `yield*` to forward all messages from the underlying channel.
|
|
110
|
+
*/
|
|
111
|
+
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
112
|
+
publish(message: T): void;
|
|
113
|
+
get isConnected(): boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Disconnect from the channel and clean up resources.
|
|
116
|
+
* Unsubscribes from the underlying channel subscription.
|
|
117
|
+
* Safe to call multiple times.
|
|
118
|
+
*/
|
|
119
|
+
disconnect(): void;
|
|
120
|
+
/**
|
|
121
|
+
* Disposable implementation for `using` syntax.
|
|
122
|
+
* Automatically cleans up when the stream goes out of scope.
|
|
123
|
+
*/
|
|
124
|
+
[Symbol.dispose](): void;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if a value is a Stream.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* if (isStream(value)) {
|
|
132
|
+
* for await (const msg of value) {
|
|
133
|
+
* console.log(msg)
|
|
134
|
+
* }
|
|
135
|
+
* }
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
export declare function isStream(value: unknown): value is Stream<unknown>;
|
|
139
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/models/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAMxE,2CAA2C;AAC3C,eAAO,MAAM,MAAM,eAA0B,CAAC;AAE9C,yEAAyE;AACzE,eAAO,MAAM,kBAAkB,eAAqC,CAAC;AAErE,sEAAsE;AACtE,eAAO,MAAM,yBAAyB,eAA2C,CAAC;AAMlF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU;IAC7D,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAA;IAEvB;;;OAGG;IACH,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;IAE1C;;;;;;;OAOG;IACH,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;IAEzB,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAE7B;;;OAGG;IACH,UAAU,IAAI,IAAI,CAAA;CACnB;AAMD;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC7C,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAG,IAAI,CAAU;IAElC,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,WAAW,CAAgC;IAEnD,iEAAiE;IACjE,OAAO,CAAC,aAAa,CAA2D;IAChF,qEAAqE;IACrE,OAAO,CAAC,UAAU,CAAuB;gBAE7B,WAAW,EAAE,OAAO;IAIhC;;;;;OAKG;IACH,CAAC,kBAAkB,CAAC,CAClB,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EACzB,WAAW,CAAC,EAAE,MAAM,OAAO,GAC1B,IAAI;IAMP;;;;;;;;OAQG;IACH,CAAC,yBAAyB,CAAC,CACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,GAChD,IAAI;IAKP;;;OAGG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IASjD,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;IAuBzB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;OAIG;IACH,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGzB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAEjE"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stream Field Implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides pub/sub streams as first-class model fields.
|
|
5
|
+
* Streams are AsyncIterable<T> for subscription and have a publish() method.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const Room = defineModel('Room', {
|
|
10
|
+
* name: field.string(),
|
|
11
|
+
* messages: field.stream(ChatMessage),
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* // Subscribe
|
|
15
|
+
* for await (const msg of room.messages) {
|
|
16
|
+
* console.log(msg.text)
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Publish
|
|
20
|
+
* room.messages.publish({ user: userRef, text: 'hello' })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Symbols
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/** Symbol to mark an object as a Stream */
|
|
27
|
+
export const STREAM = Symbol('models:stream');
|
|
28
|
+
/** Symbol-keyed method to attach channel (internal use by repository) */
|
|
29
|
+
export const SET_STREAM_CHANNEL = Symbol('models:stream:setChannel');
|
|
30
|
+
/** Symbol-keyed method to attach signal emitter for process wakeup */
|
|
31
|
+
export const SET_STREAM_SIGNAL_EMITTER = Symbol('models:stream:setSignalEmitter');
|
|
32
|
+
// ============================================================================
|
|
33
|
+
// Stream Implementation
|
|
34
|
+
// ============================================================================
|
|
35
|
+
/**
|
|
36
|
+
* Stream implementation that wraps a channel subscription.
|
|
37
|
+
* Created by repository during entity hydration.
|
|
38
|
+
*/
|
|
39
|
+
export class StreamImpl {
|
|
40
|
+
[STREAM] = true;
|
|
41
|
+
channel = null;
|
|
42
|
+
publishFn = null;
|
|
43
|
+
protectedMode;
|
|
44
|
+
lockChecker = null;
|
|
45
|
+
/** Signal emitter for waking up processes waiting on stream() */
|
|
46
|
+
signalEmitter = null;
|
|
47
|
+
/** Channel key for signal emission (tableName:entityId:fieldName) */
|
|
48
|
+
channelKey = null;
|
|
49
|
+
constructor(isProtected) {
|
|
50
|
+
this.protectedMode = isProtected;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Attach the channel subscription and publish function.
|
|
54
|
+
* Called by repository during entity hydration.
|
|
55
|
+
*
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
[SET_STREAM_CHANNEL](channel, publish, lockChecker) {
|
|
59
|
+
this.channel = channel;
|
|
60
|
+
this.publishFn = publish;
|
|
61
|
+
this.lockChecker = lockChecker ?? null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Attach a signal emitter for process wakeup.
|
|
65
|
+
* When publish() is called, this emitter is invoked to wake up any
|
|
66
|
+
* processes that are suspended on stream(r, entity.field).
|
|
67
|
+
*
|
|
68
|
+
* Called by repository during entity hydration when SignalBus is available.
|
|
69
|
+
*
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
[SET_STREAM_SIGNAL_EMITTER](channelKey, emitter) {
|
|
73
|
+
this.channelKey = channelKey;
|
|
74
|
+
this.signalEmitter = emitter;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Async generator that delegates to the channel's async iterator.
|
|
78
|
+
* Uses `yield*` to forward all messages from the underlying channel.
|
|
79
|
+
*/
|
|
80
|
+
async *[Symbol.asyncIterator]() {
|
|
81
|
+
if (!this.channel) {
|
|
82
|
+
throw new Error('Stream not connected. Ensure entity is loaded via repository.');
|
|
83
|
+
}
|
|
84
|
+
// Delegate to channel's async iterator
|
|
85
|
+
// Channel's [Symbol.asyncIterator] yields messages as they arrive.
|
|
86
|
+
yield* this.channel;
|
|
87
|
+
}
|
|
88
|
+
publish(message) {
|
|
89
|
+
if (!this.publishFn) {
|
|
90
|
+
throw new Error('Stream not connected. Ensure entity is loaded via repository.');
|
|
91
|
+
}
|
|
92
|
+
if (this.protectedMode && this.lockChecker && !this.lockChecker()) {
|
|
93
|
+
throw new Error('Protected stream requires Lock<T> to publish.');
|
|
94
|
+
}
|
|
95
|
+
// Publish to local subscribers (channel)
|
|
96
|
+
this.publishFn(message);
|
|
97
|
+
// Emit signal for process wakeup (if configured)
|
|
98
|
+
// This wakes up any processes waiting on stream(r, entity.field)
|
|
99
|
+
if (this.signalEmitter && this.channelKey) {
|
|
100
|
+
try {
|
|
101
|
+
this.signalEmitter(this.channelKey, message);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
// Don't let signal emission failure break the publish
|
|
105
|
+
console.error('[Stream] Signal emission failed:', err);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
get isConnected() {
|
|
110
|
+
return this.channel !== null && this.publishFn !== null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Disconnect from the channel and clean up resources.
|
|
114
|
+
* Unsubscribes from the underlying channel subscription.
|
|
115
|
+
* Safe to call multiple times.
|
|
116
|
+
*/
|
|
117
|
+
disconnect() {
|
|
118
|
+
if (this.channel) {
|
|
119
|
+
this.channel.unsubscribe();
|
|
120
|
+
this.channel = null;
|
|
121
|
+
}
|
|
122
|
+
this.publishFn = null;
|
|
123
|
+
this.lockChecker = null;
|
|
124
|
+
this.signalEmitter = null;
|
|
125
|
+
this.channelKey = null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Disposable implementation for `using` syntax.
|
|
129
|
+
* Automatically cleans up when the stream goes out of scope.
|
|
130
|
+
*/
|
|
131
|
+
[Symbol.dispose]() {
|
|
132
|
+
this.disconnect();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Type Guards
|
|
137
|
+
// ============================================================================
|
|
138
|
+
/**
|
|
139
|
+
* Check if a value is a Stream.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* if (isStream(value)) {
|
|
144
|
+
* for await (const msg of value) {
|
|
145
|
+
* console.log(msg)
|
|
146
|
+
* }
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export function isStream(value) {
|
|
151
|
+
return typeof value === 'object' && value !== null && STREAM in value;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/models/stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,2CAA2C;AAC3C,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE9C,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAErE,sEAAsE;AACtE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;AAwDlF,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,UAAU;IACZ,CAAC,MAAM,CAAC,GAAG,IAAa,CAAC;IAE1B,OAAO,GAAkC,IAAI,CAAC;IAC9C,SAAS,GAA8B,IAAI,CAAC;IACnC,aAAa,CAAU;IAChC,WAAW,GAA2B,IAAI,CAAC;IAEnD,iEAAiE;IACzD,aAAa,GAAsD,IAAI,CAAC;IAChF,qEAAqE;IAC7D,UAAU,GAAkB,IAAI,CAAC;IAEzC,YAAY,WAAoB;QAC9B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,CAAC,kBAAkB,CAAC,CAClB,OAA+B,EAC/B,OAAyB,EACzB,WAA2B;QAE3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;IACzC,CAAC;IAED;;;;;;;;OAQG;IACH,CAAC,yBAAyB,CAAC,CACzB,UAAkB,EAClB,OAAiD;QAEjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,uCAAuC;QACvC,mEAAmE;QACnE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,OAAU;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,yCAAyC;QACzC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAExB,iDAAiD;QACjD,iEAAiE;QACjE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,sDAAsD;gBACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;CACF;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symbols for internal metadata on models.
|
|
3
|
+
*
|
|
4
|
+
* Most use plain Symbol() to avoid cross-version collisions - each
|
|
5
|
+
* package version has its own symbols, so mismatched metadata shapes
|
|
6
|
+
* never cause silent data corruption. Cross-module symbols that must
|
|
7
|
+
* survive HMR use Symbol.for() instead.
|
|
8
|
+
*/
|
|
9
|
+
/** Symbol to access model internals (schema, dirty tracking, etc.) */
|
|
10
|
+
export declare const MODEL_INTERNALS: unique symbol;
|
|
11
|
+
/** Symbol to access observable internals (dirty tracking, etc.) */
|
|
12
|
+
export declare const OBSERVABLE_META: unique symbol;
|
|
13
|
+
/** Symbol to mark an object as a Reference */
|
|
14
|
+
export declare const REFERENCE: unique symbol;
|
|
15
|
+
/** Symbol to mark an object as a References collection */
|
|
16
|
+
export declare const REFERENCES: unique symbol;
|
|
17
|
+
/** Symbol for internal reference ID storage */
|
|
18
|
+
export declare const REF_ID: unique symbol;
|
|
19
|
+
/** Symbol for internal reference IDs storage (plural) */
|
|
20
|
+
export declare const REF_IDS: unique symbol;
|
|
21
|
+
/** Symbol for cached resolved value */
|
|
22
|
+
export declare const REF_VALUE: unique symbol;
|
|
23
|
+
/** Symbol for cached resolved values (plural) */
|
|
24
|
+
export declare const REF_VALUES: unique symbol;
|
|
25
|
+
/** Symbol for resolver function */
|
|
26
|
+
export declare const REF_RESOLVER: unique symbol;
|
|
27
|
+
/** Symbol-keyed method to attach resolver (internal use) */
|
|
28
|
+
export declare const SET_RESOLVER: unique symbol;
|
|
29
|
+
/** Symbol-keyed method to hydrate a reference with a pre-loaded value (internal use) */
|
|
30
|
+
export declare const HYDRATE: unique symbol;
|
|
31
|
+
/** Symbol to mark an object as a TransientRef */
|
|
32
|
+
export declare const TRANSIENT_REF: unique symbol;
|
|
33
|
+
/** Symbol for internal transient target storage */
|
|
34
|
+
export declare const TRANSIENT_TARGET: unique symbol;
|
|
35
|
+
/** Symbol to mark an instance as persisted (stored by an adapter) */
|
|
36
|
+
export declare const PERSISTENT: unique symbol;
|
|
37
|
+
/** Symbol for adapter-stored key on a persistent entity (non-enumerable) */
|
|
38
|
+
export declare const ADAPTER_KEY: unique symbol;
|
|
39
|
+
/** Symbol to mark an instance as transient (not yet saved) */
|
|
40
|
+
export declare const TRANSIENT: unique symbol;
|
|
41
|
+
/** Symbol to mark an instance as locked (for safe mutations) */
|
|
42
|
+
export declare const LOCK: unique symbol;
|
|
43
|
+
/** Symbol for internal field storage on model instances */
|
|
44
|
+
export declare const FIELD_STORAGE: unique symbol;
|
|
45
|
+
/** Symbol for model context (registry, resolvers, etc.) */
|
|
46
|
+
export declare const MODEL_CONTEXT: unique symbol;
|
|
47
|
+
/** Symbol for model methods (type-level only, for extraction by Persistent/Transient) */
|
|
48
|
+
export declare const MODEL_METHODS: unique symbol;
|
|
49
|
+
/** Symbol to store the base model on a repository token */
|
|
50
|
+
export declare const MODEL_REPO_MODEL: unique symbol;
|
|
51
|
+
/** Symbol for custom repository that links to base ModelRepository token */
|
|
52
|
+
export declare const MODEL_REPO_BASE_TOKEN: unique symbol;
|
|
53
|
+
/** Symbol for storage model factory (creates repository from deps) */
|
|
54
|
+
export declare const CREATE_MODEL_REPO: unique symbol;
|
|
55
|
+
/** Symbol to store custom repository contract type on a model */
|
|
56
|
+
export declare const MODEL_REPO_CONTRACT: unique symbol;
|
|
57
|
+
/** Symbol to store field-level access rules on a model class */
|
|
58
|
+
export declare const ACCESS_RULES: unique symbol;
|
|
59
|
+
/** Symbol to store the raw permission defs record on a model class (for access rule evaluation) */
|
|
60
|
+
export declare const PERMISSION_DEFS: unique symbol;
|
|
61
|
+
/**
|
|
62
|
+
* Symbol to store inject config on a model class.
|
|
63
|
+
* Contains the raw { key: ServiceToken } map from defineModel({ inject }).
|
|
64
|
+
* Symbol.for() for cross-module matching.
|
|
65
|
+
*/
|
|
66
|
+
export declare const MODEL_INJECT: unique symbol;
|
|
67
|
+
/**
|
|
68
|
+
* Symbol to store the resolved model service on a model class.
|
|
69
|
+
* The model service is Object.create(ModelClass.prototype) with resolved inject deps.
|
|
70
|
+
* Set during boot by Container.wireModelPrototypes().
|
|
71
|
+
*/
|
|
72
|
+
export declare const MODEL_SERVICE: unique symbol;
|
|
73
|
+
//# sourceMappingURL=symbols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/models/symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,sEAAsE;AACtE,eAAO,MAAM,eAAe,eAA4B,CAAC;AAEzD,mEAAmE;AACnE,eAAO,MAAM,eAAe,eAA4B,CAAC;AAMzD,8CAA8C;AAC9C,eAAO,MAAM,SAAS,eAA6B,CAAC;AAEpD,0DAA0D;AAC1D,eAAO,MAAM,UAAU,eAA8B,CAAC;AAEtD,+CAA+C;AAC/C,eAAO,MAAM,MAAM,eAA0B,CAAC;AAE9C,yDAAyD;AACzD,eAAO,MAAM,OAAO,eAA4B,CAAC;AAEjD,uCAAuC;AACvC,eAAO,MAAM,SAAS,eAA6B,CAAC;AAEpD,iDAAiD;AACjD,eAAO,MAAM,UAAU,eAA+B,CAAC;AAEvD,mCAAmC;AACnC,eAAO,MAAM,YAAY,eAAgC,CAAC;AAE1D,4DAA4D;AAC5D,eAAO,MAAM,YAAY,eAAmC,CAAC;AAE7D,wFAAwF;AACxF,eAAO,MAAM,OAAO,eAA+B,CAAC;AAMpD,iDAAiD;AACjD,eAAO,MAAM,aAAa,eAAgC,CAAC;AAE3D,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,eAAuC,CAAC;AAMrE,qEAAqE;AACrE,eAAO,MAAM,UAAU,eAA8B,CAAC;AAEtD,4EAA4E;AAC5E,eAAO,MAAM,WAAW,eAA8B,CAAC;AAEvD,8DAA8D;AAC9D,eAAO,MAAM,SAAS,eAA6B,CAAC;AAEpD,gEAAgE;AAChE,eAAO,MAAM,IAAI,eAAwB,CAAC;AAM1C,2DAA2D;AAC3D,eAAO,MAAM,aAAa,eAAgC,CAAC;AAE3D,2DAA2D;AAC3D,eAAO,MAAM,aAAa,eAAgC,CAAC;AAE3D,yFAAyF;AACzF,eAAO,MAAM,aAAa,eAAgC,CAAC;AAM3D,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,eAAkC,CAAC;AAEhE,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,eAAsC,CAAC;AAEzE,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,eAAmC,CAAC;AAElE,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,eAAqC,CAAC;AAMtE,gEAAgE;AAChE,eAAO,MAAM,YAAY,eAA+B,CAAC;AAEzD,mGAAmG;AACnG,eAAO,MAAM,eAAe,eAAkC,CAAC;AAM/D;;;;GAIG;AACH,eAAO,MAAM,YAAY,eAAmD,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,aAAa,eAAoD,CAAC"}
|