@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,97 @@
|
|
|
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
|
+
// ============================================
|
|
10
|
+
// Observable & Model symbols (from @justscale/observable)
|
|
11
|
+
// ============================================
|
|
12
|
+
/** Symbol to access model internals (schema, dirty tracking, etc.) */
|
|
13
|
+
export const MODEL_INTERNALS = Symbol('model_internals');
|
|
14
|
+
/** Symbol to access observable internals (dirty tracking, etc.) */
|
|
15
|
+
export const OBSERVABLE_META = Symbol('observable_meta');
|
|
16
|
+
// ============================================
|
|
17
|
+
// Reference symbols (for Promise-like refs)
|
|
18
|
+
// ============================================
|
|
19
|
+
/** Symbol to mark an object as a Reference */
|
|
20
|
+
export const REFERENCE = Symbol('models:reference');
|
|
21
|
+
/** Symbol to mark an object as a References collection */
|
|
22
|
+
export const REFERENCES = Symbol('models:references');
|
|
23
|
+
/** Symbol for internal reference ID storage */
|
|
24
|
+
export const REF_ID = Symbol('models:ref:id');
|
|
25
|
+
/** Symbol for internal reference IDs storage (plural) */
|
|
26
|
+
export const REF_IDS = Symbol('models:refs:ids');
|
|
27
|
+
/** Symbol for cached resolved value */
|
|
28
|
+
export const REF_VALUE = Symbol('models:ref:value');
|
|
29
|
+
/** Symbol for cached resolved values (plural) */
|
|
30
|
+
export const REF_VALUES = Symbol('models:refs:values');
|
|
31
|
+
/** Symbol for resolver function */
|
|
32
|
+
export const REF_RESOLVER = Symbol('models:ref:resolver');
|
|
33
|
+
/** Symbol-keyed method to attach resolver (internal use) */
|
|
34
|
+
export const SET_RESOLVER = Symbol('models:ref:setResolver');
|
|
35
|
+
/** Symbol-keyed method to hydrate a reference with a pre-loaded value (internal use) */
|
|
36
|
+
export const HYDRATE = Symbol('models:ref:hydrate');
|
|
37
|
+
// ============================================
|
|
38
|
+
// Transient Reference symbols (for unsaved entities)
|
|
39
|
+
// ============================================
|
|
40
|
+
/** Symbol to mark an object as a TransientRef */
|
|
41
|
+
export const TRANSIENT_REF = Symbol('models:transientRef');
|
|
42
|
+
/** Symbol for internal transient target storage */
|
|
43
|
+
export const TRANSIENT_TARGET = Symbol('models:transientRef:target');
|
|
44
|
+
// ============================================
|
|
45
|
+
// Instance State symbols (for runtime type safety)
|
|
46
|
+
// ============================================
|
|
47
|
+
/** Symbol to mark an instance as persisted (stored by an adapter) */
|
|
48
|
+
export const PERSISTENT = Symbol('models:persistent');
|
|
49
|
+
/** Symbol for adapter-stored key on a persistent entity (non-enumerable) */
|
|
50
|
+
export const ADAPTER_KEY = Symbol('models:adapterKey');
|
|
51
|
+
/** Symbol to mark an instance as transient (not yet saved) */
|
|
52
|
+
export const TRANSIENT = Symbol('models:transient');
|
|
53
|
+
/** Symbol to mark an instance as locked (for safe mutations) */
|
|
54
|
+
export const LOCK = Symbol('models:lock');
|
|
55
|
+
// ============================================
|
|
56
|
+
// Internal Storage symbols (for field values on instances)
|
|
57
|
+
// ============================================
|
|
58
|
+
/** Symbol for internal field storage on model instances */
|
|
59
|
+
export const FIELD_STORAGE = Symbol('models:fieldStorage');
|
|
60
|
+
/** Symbol for model context (registry, resolvers, etc.) */
|
|
61
|
+
export const MODEL_CONTEXT = Symbol('models:modelContext');
|
|
62
|
+
/** Symbol for model methods (type-level only, for extraction by Persistent/Transient) */
|
|
63
|
+
export const MODEL_METHODS = Symbol('models:modelMethods');
|
|
64
|
+
// ============================================
|
|
65
|
+
// ModelRepository Token symbols (for DI)
|
|
66
|
+
// ============================================
|
|
67
|
+
/** Symbol to store the base model on a repository token */
|
|
68
|
+
export const MODEL_REPO_MODEL = Symbol('models:modelRepoModel');
|
|
69
|
+
/** Symbol for custom repository that links to base ModelRepository token */
|
|
70
|
+
export const MODEL_REPO_BASE_TOKEN = Symbol('models:modelRepoBaseToken');
|
|
71
|
+
/** Symbol for storage model factory (creates repository from deps) */
|
|
72
|
+
export const CREATE_MODEL_REPO = Symbol('models:createModelRepo');
|
|
73
|
+
/** Symbol to store custom repository contract type on a model */
|
|
74
|
+
export const MODEL_REPO_CONTRACT = Symbol('models:modelRepoContract');
|
|
75
|
+
// ============================================
|
|
76
|
+
// Access Control symbols
|
|
77
|
+
// ============================================
|
|
78
|
+
/** Symbol to store field-level access rules on a model class */
|
|
79
|
+
export const ACCESS_RULES = Symbol('models:accessRules');
|
|
80
|
+
/** Symbol to store the raw permission defs record on a model class (for access rule evaluation) */
|
|
81
|
+
export const PERMISSION_DEFS = Symbol('models:permissionDefs');
|
|
82
|
+
// ============================================
|
|
83
|
+
// Model DI Injection symbols
|
|
84
|
+
// ============================================
|
|
85
|
+
/**
|
|
86
|
+
* Symbol to store inject config on a model class.
|
|
87
|
+
* Contains the raw { key: ServiceToken } map from defineModel({ inject }).
|
|
88
|
+
* Symbol.for() for cross-module matching.
|
|
89
|
+
*/
|
|
90
|
+
export const MODEL_INJECT = Symbol.for('@justscale/core/models:modelInject');
|
|
91
|
+
/**
|
|
92
|
+
* Symbol to store the resolved model service on a model class.
|
|
93
|
+
* The model service is Object.create(ModelClass.prototype) with resolved inject deps.
|
|
94
|
+
* Set during boot by Container.wireModelPrototypes().
|
|
95
|
+
*/
|
|
96
|
+
export const MODEL_SERVICE = Symbol.for('@justscale/core/models:modelService');
|
|
97
|
+
//# sourceMappingURL=symbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/models/symbols.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { MODEL_INTERNALS, OBSERVABLE_META, MODEL_METHODS } from './symbols.js';
|
|
3
|
+
import { PERSISTENT, TRANSIENT, LOCK } from './symbols.js';
|
|
4
|
+
import { MODEL_DATA, MODEL_DEFAULTS } from './define-model.js';
|
|
5
|
+
import type { Lock, LockMetadata } from '../features/lock/types.js';
|
|
6
|
+
import type { Reference } from './reference/reference.js';
|
|
7
|
+
import type { Decimal } from './field.js';
|
|
8
|
+
/**
|
|
9
|
+
* Internal state for a model.
|
|
10
|
+
*/
|
|
11
|
+
export interface ModelInternals<T, S extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
12
|
+
schema: S;
|
|
13
|
+
dirty: Set<string>;
|
|
14
|
+
original: T;
|
|
15
|
+
markClean(): void;
|
|
16
|
+
isDirty(): boolean;
|
|
17
|
+
getDirtyPaths(): string[];
|
|
18
|
+
getDirtyData(): Partial<T>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A model with attached internals for dirty tracking.
|
|
22
|
+
*/
|
|
23
|
+
export type Model<T> = T & {
|
|
24
|
+
[MODEL_INTERNALS]: ModelInternals<T>;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Internal state for an observable.
|
|
28
|
+
*/
|
|
29
|
+
export interface ObservableInternals {
|
|
30
|
+
dirty: Set<string>;
|
|
31
|
+
markClean(): void;
|
|
32
|
+
isDirty(): boolean;
|
|
33
|
+
getDirtyPaths(): string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* An observable wrapper that tracks mutations.
|
|
37
|
+
*/
|
|
38
|
+
export type Observable<T> = T & {
|
|
39
|
+
[OBSERVABLE_META]: ObservableInternals;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Reference to a parent proxy.
|
|
43
|
+
*/
|
|
44
|
+
export interface ParentRef {
|
|
45
|
+
ref: WeakRef<ProxyMeta>;
|
|
46
|
+
key: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Internal metadata for tracked proxies.
|
|
50
|
+
*/
|
|
51
|
+
export interface ProxyMeta {
|
|
52
|
+
path: string[];
|
|
53
|
+
dirtySets: Set<Set<string>>;
|
|
54
|
+
parents: Set<ParentRef>;
|
|
55
|
+
children: Map<string | symbol, ProxyMeta>;
|
|
56
|
+
target: object;
|
|
57
|
+
proxy: object;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Base entity type - anything with an id.
|
|
61
|
+
*/
|
|
62
|
+
export interface Entity<TId = string> {
|
|
63
|
+
id: TId;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* System fields added by the persistence layer.
|
|
67
|
+
*
|
|
68
|
+
* These are ADAPTER concerns - they do NOT appear on Persistent<T>.
|
|
69
|
+
* Adapters store these internally via non-enumerable symbols.
|
|
70
|
+
* Domain code never sees or accesses system fields directly.
|
|
71
|
+
*
|
|
72
|
+
* @deprecated Import from your adapter package instead (e.g. @justscale/postgres).
|
|
73
|
+
* Kept temporarily for migration - will be removed from core.
|
|
74
|
+
*/
|
|
75
|
+
export interface SystemFields {
|
|
76
|
+
/** Unique identifier assigned by storage */
|
|
77
|
+
readonly id: string;
|
|
78
|
+
/** Creation timestamp */
|
|
79
|
+
readonly createdAt: Date;
|
|
80
|
+
/** Last update timestamp */
|
|
81
|
+
readonly updatedAt: Date;
|
|
82
|
+
/** Version for optimistic concurrency */
|
|
83
|
+
readonly version: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Keys of system fields (for type-level exclusion).
|
|
87
|
+
*
|
|
88
|
+
* @deprecated Adapter concern - will be removed from core.
|
|
89
|
+
*/
|
|
90
|
+
export type SystemFieldKeys = keyof SystemFields;
|
|
91
|
+
/**
|
|
92
|
+
* Extract domain fields, excluding system fields and internal symbols.
|
|
93
|
+
*
|
|
94
|
+
* @deprecated No longer needed - Persistent<T> is already pure domain fields.
|
|
95
|
+
*/
|
|
96
|
+
export type DomainFields<T> = Omit<T, SystemFieldKeys | typeof PERSISTENT | typeof LOCK>;
|
|
97
|
+
/**
|
|
98
|
+
* Resolve T to its model data type if T is a model class, otherwise use T directly.
|
|
99
|
+
*/
|
|
100
|
+
type ResolveModelType<T> = T extends abstract new (...args: any[]) => {
|
|
101
|
+
readonly [MODEL_DATA]: infer D;
|
|
102
|
+
} ? D : T extends {
|
|
103
|
+
readonly [MODEL_DATA]: infer D;
|
|
104
|
+
} ? D : T;
|
|
105
|
+
/** Domain fields: the model's data type. No system fields to exclude anymore. */
|
|
106
|
+
type DomainOf<T> = ResolveModelType<T>;
|
|
107
|
+
/**
|
|
108
|
+
* Extract the set of field names that have defaults from a model class.
|
|
109
|
+
* Returns `never` if T is not a model class.
|
|
110
|
+
*/
|
|
111
|
+
type ResolveDefaultKeys<T> = T extends abstract new (...args: any[]) => {
|
|
112
|
+
readonly [MODEL_DEFAULTS]: infer D;
|
|
113
|
+
} ? D extends string ? D : never : T extends {
|
|
114
|
+
readonly [MODEL_DEFAULTS]: infer D;
|
|
115
|
+
} ? D extends string ? D : never : never;
|
|
116
|
+
/** Keys of T whose type includes undefined */
|
|
117
|
+
type UndefinedKeys<T> = {
|
|
118
|
+
[K in keyof T]: undefined extends T[K] ? K : never;
|
|
119
|
+
}[keyof T];
|
|
120
|
+
/**
|
|
121
|
+
* Strip the internal `Decimal` brand recursively so callers can pass plain
|
|
122
|
+
* strings for nested-object decimal fields too. Leaves non-decimal types
|
|
123
|
+
* untouched.
|
|
124
|
+
*/
|
|
125
|
+
type StripDecimal<V> = [
|
|
126
|
+
NonNullable<V>
|
|
127
|
+
] extends [Decimal] ? string | (undefined extends V ? undefined : never) : V extends readonly (infer E)[] ? StripDecimal<E>[] : V extends Record<string, unknown> ? {
|
|
128
|
+
[K in keyof V]: StripDecimal<V[K]>;
|
|
129
|
+
} : V;
|
|
130
|
+
/** Widen Reference<X> fields to also accept Persistent<X> (i.e. Ref<X>) */
|
|
131
|
+
type AcceptRef<V> = [
|
|
132
|
+
NonNullable<V>
|
|
133
|
+
] extends [Reference<infer X>] ? Reference<X> | Persistent<X> | Lock<Persistent<X>> | (undefined extends V ? undefined : never) : StripDecimal<V>;
|
|
134
|
+
/**
|
|
135
|
+
* Insert data type - domain fields only.
|
|
136
|
+
*
|
|
137
|
+
* Handles both model classes (`InsertData<typeof User>`) and plain types.
|
|
138
|
+
* Fields that are optional (undefined) or have defaults become optional keys.
|
|
139
|
+
* Reference fields accept Ref<T> (Reference, Persistent, or Lock).
|
|
140
|
+
*/
|
|
141
|
+
export type InsertData<T> = {
|
|
142
|
+
-readonly [K in keyof DomainOf<T> as K extends (UndefinedKeys<DomainOf<T>> | ResolveDefaultKeys<T>) ? never : K]: AcceptRef<DomainOf<T>[K]>;
|
|
143
|
+
} & {
|
|
144
|
+
-readonly [K in keyof DomainOf<T> as K extends (UndefinedKeys<DomainOf<T>> | ResolveDefaultKeys<T>) ? K : never]?: AcceptRef<DomainOf<T>[K]>;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Update data type - partial domain fields.
|
|
148
|
+
*
|
|
149
|
+
* Handles both model classes (`UpdateData<typeof User>`) and plain types.
|
|
150
|
+
*/
|
|
151
|
+
export type UpdateData<T> = {
|
|
152
|
+
-readonly [K in keyof DomainOf<T>]?: AcceptRef<DomainOf<T>[K]>;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Make all fields mutable.
|
|
156
|
+
* Used by Lock<T> to enable writes on locked entities.
|
|
157
|
+
*/
|
|
158
|
+
export type Mutable<T> = {
|
|
159
|
+
-readonly [K in keyof T]: T[K];
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* @deprecated Use SystemFields instead. Alias for backwards compatibility.
|
|
163
|
+
*/
|
|
164
|
+
export type StorageMeta = SystemFields;
|
|
165
|
+
/**
|
|
166
|
+
* Extract the instance type from a ModelClass or use T directly.
|
|
167
|
+
* This allows `Persistent<typeof User>` where User is the defineModel result.
|
|
168
|
+
*
|
|
169
|
+
* For model constructors, extracts the instance type (which includes methods).
|
|
170
|
+
* For plain types, uses the type directly.
|
|
171
|
+
*/
|
|
172
|
+
export type ExtractModelType<T> = T extends abstract new (...args: any[]) => infer Instance ? Instance : T;
|
|
173
|
+
/**
|
|
174
|
+
* Extract the data type for Reference compatibility.
|
|
175
|
+
* Used by repository.get() to accept references created by Model.ref.
|
|
176
|
+
*
|
|
177
|
+
* Handles three cases:
|
|
178
|
+
* 1. Instance type with [MODEL_DATA] (User) - extract from the symbol
|
|
179
|
+
* 2. Constructor type (typeof User) - extract from constructor parameter
|
|
180
|
+
* 3. Plain type - use as-is
|
|
181
|
+
*/
|
|
182
|
+
export type ReferenceData<T> = T extends {
|
|
183
|
+
readonly [MODEL_DATA]: infer D;
|
|
184
|
+
} ? D : T extends abstract new (data: infer D) => unknown ? D : T;
|
|
185
|
+
/**
|
|
186
|
+
* Simplify a type by forcing TypeScript to resolve all mapped types.
|
|
187
|
+
* This produces cleaner type emissions in .d.ts files.
|
|
188
|
+
*
|
|
189
|
+
* Instead of: `Persistent<InferModelType<{email: FieldBuilder<string>}>>`
|
|
190
|
+
* Produces: `{id: string; email: string; ...}`
|
|
191
|
+
*/
|
|
192
|
+
export type Simplify<T> = {
|
|
193
|
+
[K in keyof T]: T[K];
|
|
194
|
+
} & {};
|
|
195
|
+
/**
|
|
196
|
+
* Extract methods from a ModelClass.
|
|
197
|
+
* Returns the properly typed methods (with `this` bound to model data) or empty object.
|
|
198
|
+
*/
|
|
199
|
+
type ExtractModelMethods<T> = T extends {
|
|
200
|
+
readonly [MODEL_METHODS]?: infer M;
|
|
201
|
+
} ? M extends undefined ? {} : M : {};
|
|
202
|
+
/**
|
|
203
|
+
* A persisted model instance - pure domain data + methods.
|
|
204
|
+
*
|
|
205
|
+
* No system fields (id, createdAt, etc.) - those are adapter concerns,
|
|
206
|
+
* stored internally via non-enumerable symbols. Domain code never sees them.
|
|
207
|
+
*
|
|
208
|
+
* To reference a persistent entity, use `Model.ref(entity)` or pass
|
|
209
|
+
* the entity directly where a `Reference<T>` is expected.
|
|
210
|
+
*/
|
|
211
|
+
export type Persistent<T> = ExtractModelType<T> & ExtractModelMethods<T> & Disposable & {
|
|
212
|
+
readonly [PERSISTENT]: true;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* A transient (not yet persisted) model instance.
|
|
216
|
+
*
|
|
217
|
+
* Used for creating new models before they have storage metadata.
|
|
218
|
+
* Methods defined on the model are preserved on transient instances.
|
|
219
|
+
*/
|
|
220
|
+
export type Transient<T> = ExtractModelType<T> & ExtractModelMethods<T> & {
|
|
221
|
+
readonly [TRANSIENT]: true;
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* Anything that refers to an entity of type T.
|
|
225
|
+
*
|
|
226
|
+
* Use `Ref<T>` in method signatures that accept "something pointing at a T":
|
|
227
|
+
* a Reference, a persistent entity, or a locked entity.
|
|
228
|
+
*
|
|
229
|
+
* @example
|
|
230
|
+
* ```typescript
|
|
231
|
+
* async transfer(from: Ref<Account>, to: Ref<Account>, amount: number) { ... }
|
|
232
|
+
* async update(ref: Ref<User>, data: UpdateData<User>) { ... }
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
export type Ref<T> = Reference<T> | Persistent<T> | Lock<Persistent<T>>;
|
|
236
|
+
/**
|
|
237
|
+
* Proves exclusive access to a persisted entity. Required for mutations.
|
|
238
|
+
*
|
|
239
|
+
* Use in service signatures to communicate "this method mutates":
|
|
240
|
+
* ```typescript
|
|
241
|
+
* async assignTicket(ticket: Locked<Ticket>, agent: Ref<Agent>) { ... }
|
|
242
|
+
* ```
|
|
243
|
+
*
|
|
244
|
+
* Acquire via repository:
|
|
245
|
+
* ```typescript
|
|
246
|
+
* using ticket = await tickets.lock(params.ticket);
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
export type Locked<T> = Lock<Persistent<T>>;
|
|
250
|
+
/**
|
|
251
|
+
* Disposable interface for resources that need cleanup.
|
|
252
|
+
*/
|
|
253
|
+
export interface Disposable {
|
|
254
|
+
/** Dispose of the resource (release lock, cleanup, etc.) */
|
|
255
|
+
[Symbol.dispose](): void;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Check if an object is a persisted entity.
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* ```typescript
|
|
262
|
+
* if (isPersistent(user)) {
|
|
263
|
+
* console.log(user.id); // TypeScript knows id exists
|
|
264
|
+
* }
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
267
|
+
export declare function isPersistent<T>(obj: unknown): obj is Persistent<T>;
|
|
268
|
+
/**
|
|
269
|
+
* Check if an object is a transient (not yet persisted) entity.
|
|
270
|
+
*
|
|
271
|
+
* @example
|
|
272
|
+
* ```typescript
|
|
273
|
+
* if (isTransient(user)) {
|
|
274
|
+
* console.log('User not yet saved');
|
|
275
|
+
* }
|
|
276
|
+
* ```
|
|
277
|
+
*/
|
|
278
|
+
export declare function isTransient<T>(obj: unknown): obj is Transient<T>;
|
|
279
|
+
/**
|
|
280
|
+
* Check if an object is a locked entity.
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* ```typescript
|
|
284
|
+
* if (isLocked(user)) {
|
|
285
|
+
* console.log(user.__lock.lockedAt); // Access lock metadata
|
|
286
|
+
* }
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
export declare function isLocked<T>(obj: unknown): obj is Lock<T>;
|
|
290
|
+
export type { Lock, LockMetadata };
|
|
291
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAM1C;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IACtE,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC;IACZ,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,IAAI,OAAO,CAAC;IACnB,aAAa,IAAI,MAAM,EAAE,CAAC;IAC1B,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG;IACzB,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;CACtC,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,IAAI,OAAO,CAAC;IACnB,aAAa,IAAI,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG;IAC9B,CAAC,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACxC,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;GAEG;AACH,MAAM,WAAW,MAAM,CAAC,GAAG,GAAG,MAAM;IAClC,EAAE,EAAE,GAAG,CAAC;CACT;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,yCAAyC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,UAAU,GAAG,OAAO,IAAI,CAAC,CAAC;AAEzF;;GAEG;AACH,KAAK,gBAAgB,CAAC,CAAC,IACrB,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GACzE,CAAC,GACD,CAAC,SAAS;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1C,CAAC,GACD,CAAC,CAAC;AAEV,iFAAiF;AACjF,KAAK,QAAQ,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEvC;;;GAGG;AACH,KAAK,kBAAkB,CAAC,CAAC,IACvB,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAC7E,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAC5B,CAAC,SAAS;IAAE,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAC9C,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAC5B,KAAK,CAAC;AAEd,8CAA8C;AAC9C,KAAK,aAAa,CAAC,CAAC,IAAI;KACrB,CAAC,IAAI,MAAM,CAAC,GAAG,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACnD,CAAC,MAAM,CAAC,CAAC,CAAC;AAEX;;;;GAIG;AACH,KAAK,YAAY,CAAC,CAAC,IACjB;IAAC,WAAW,CAAC,CAAC,CAAC;CAAC,SAAS,CAAC,OAAO,CAAC,GAC9B,MAAM,GAAG,CAAC,SAAS,SAAS,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GAClD,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5B,YAAY,CAAC,CAAC,CAAC,EAAE,GACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAEZ,2EAA2E;AAC3E,KAAK,SAAS,CAAC,CAAC,IACd;IAAC,WAAW,CAAC,CAAC,CAAC;CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GACzC,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC,GAC9F,YAAY,CAAC,CAAC,CAAC,CAAC;AAEtB;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAE1B,CAAC,UAAU,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,IACjC,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GACvE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7B,GAAG;IAEF,CAAC,UAAU,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,IACjC,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CACzE,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,CAAC,UAAU,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAE5B,CAAC,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,QAAQ,GACrD,QAAQ,GACR,CAAC,CAAC;AAER;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,IACzB,CAAC,SAAS;IAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GACxC,CAAC,GACD,CAAC,SAAS,QAAQ,MAAM,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,GAC/C,CAAC,GACD,CAAC,CAAC;AAEV;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,EAAE,CAAC;AAExD;;;GAGG;AACH,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAC1E,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,CAAC,GAC5B,EAAE,CAAC;AAEP;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG;IACtF,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG;IACxE,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;CAC5B,CAAC;AAMF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAExE;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAM5C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,4DAA4D;IAC5D,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B;AASD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAOxD;AAGD,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { PERSISTENT, TRANSIENT } from './symbols.js';
|
|
2
|
+
import { MODEL_DATA, MODEL_DEFAULTS } from './define-model.js'; // MODEL_DEFAULTS for InsertData
|
|
3
|
+
// Lock<T> and LockMetadata are defined in features/lock/types.ts
|
|
4
|
+
// Import from '@justscale/core' to use them
|
|
5
|
+
// ============================================
|
|
6
|
+
// Type Guards
|
|
7
|
+
// ============================================
|
|
8
|
+
/**
|
|
9
|
+
* Check if an object is a persisted entity.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* if (isPersistent(user)) {
|
|
14
|
+
* console.log(user.id); // TypeScript knows id exists
|
|
15
|
+
* }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function isPersistent(obj) {
|
|
19
|
+
return obj !== null && typeof obj === 'object' && PERSISTENT in obj;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if an object is a transient (not yet persisted) entity.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* if (isTransient(user)) {
|
|
27
|
+
* console.log('User not yet saved');
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function isTransient(obj) {
|
|
32
|
+
return obj !== null && typeof obj === 'object' && TRANSIENT in obj;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if an object is a locked entity.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* if (isLocked(user)) {
|
|
40
|
+
* console.log(user.__lock.lockedAt); // Access lock metadata
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function isLocked(obj) {
|
|
45
|
+
return (obj !== null &&
|
|
46
|
+
typeof obj === 'object' &&
|
|
47
|
+
'__lock' in obj &&
|
|
48
|
+
Symbol.dispose in obj);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAQ,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC,CAAC,gCAAgC;AAoUhG,iEAAiE;AACjE,4CAA4C;AAE5C,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAI,GAAY;IAC1C,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,GAAG,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAI,GAAY;IACzC,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,CAAC;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAI,GAAY;IACtC,OAAO,CACL,GAAG,KAAK,IAAI;QACZ,OAAO,GAAG,KAAK,QAAQ;QACvB,QAAQ,IAAI,GAAG;QACf,MAAM,CAAC,OAAO,IAAI,GAAG,CACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Model, Observable } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Internal: notify all watchers for a dirty set
|
|
4
|
+
*/
|
|
5
|
+
export declare function notifyWatchers(dirtySet: Set<string>): void;
|
|
6
|
+
export interface WatchHandle {
|
|
7
|
+
unsubscribe: () => void;
|
|
8
|
+
}
|
|
9
|
+
export interface WatchAsyncIteratorOptions {
|
|
10
|
+
/**
|
|
11
|
+
* If true, coalesce multiple changes into one if consumer is slow.
|
|
12
|
+
* Default: true
|
|
13
|
+
*/
|
|
14
|
+
coalesce?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export type Watcher = AsyncGenerator<string[], void, unknown> & Disposable & AsyncDisposable & {
|
|
17
|
+
unsubscribe: () => void;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Watch an observable or model for changes.
|
|
21
|
+
*
|
|
22
|
+
* With callback: invokes callback with dirty paths on each change, returns { unsubscribe }
|
|
23
|
+
* Without callback: returns async generator that yields dirty paths, with unsubscribe() method
|
|
24
|
+
*/
|
|
25
|
+
export declare function watch<T extends object>(target: Observable<T> | Model<T>, callback: (paths: string[]) => void): WatchHandle;
|
|
26
|
+
export declare function watch<T extends object>(target: Observable<T> | Model<T>, options?: WatchAsyncIteratorOptions): Watcher;
|
|
27
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/models/watch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAQ1D;AAgCD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAC3D,UAAU,GACV,eAAe,GAAG;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEJ;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,GAClC,WAAW,CAAC;AACf,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAChC,OAAO,CAAC,EAAE,yBAAyB,GAClC,OAAO,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { MODEL_INTERNALS, OBSERVABLE_META } from './symbols.js';
|
|
2
|
+
// Registry: dirty set -> Set of callbacks
|
|
3
|
+
const watcherRegistry = new WeakMap();
|
|
4
|
+
/**
|
|
5
|
+
* Internal: notify all watchers for a dirty set
|
|
6
|
+
*/
|
|
7
|
+
export function notifyWatchers(dirtySet) {
|
|
8
|
+
const watchers = watcherRegistry.get(dirtySet);
|
|
9
|
+
if (!watchers || watchers.size === 0)
|
|
10
|
+
return;
|
|
11
|
+
const paths = [...dirtySet];
|
|
12
|
+
for (const callback of watchers) {
|
|
13
|
+
callback(paths);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Internal: register a watcher for a dirty set
|
|
18
|
+
*/
|
|
19
|
+
function registerWatcher(dirtySet, callback) {
|
|
20
|
+
let watchers = watcherRegistry.get(dirtySet);
|
|
21
|
+
if (!watchers) {
|
|
22
|
+
watchers = new Set();
|
|
23
|
+
watcherRegistry.set(dirtySet, watchers);
|
|
24
|
+
}
|
|
25
|
+
watchers.add(callback);
|
|
26
|
+
// Return unsubscribe function
|
|
27
|
+
return () => {
|
|
28
|
+
watchers?.delete(callback);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the dirty set from an observable or model
|
|
33
|
+
*/
|
|
34
|
+
function getDirtySet(target) {
|
|
35
|
+
if (OBSERVABLE_META in target) {
|
|
36
|
+
return target[OBSERVABLE_META].dirty;
|
|
37
|
+
}
|
|
38
|
+
if (MODEL_INTERNALS in target) {
|
|
39
|
+
return target[MODEL_INTERNALS].dirty;
|
|
40
|
+
}
|
|
41
|
+
throw new Error('Target is not an observable or model');
|
|
42
|
+
}
|
|
43
|
+
export function watch(target, callbackOrOptions) {
|
|
44
|
+
// Callback mode
|
|
45
|
+
if (typeof callbackOrOptions === 'function') {
|
|
46
|
+
const dirtySet = getDirtySet(target);
|
|
47
|
+
const unsubscribe = registerWatcher(dirtySet, callbackOrOptions);
|
|
48
|
+
return { unsubscribe };
|
|
49
|
+
}
|
|
50
|
+
// Async generator mode
|
|
51
|
+
const options = callbackOrOptions ?? {};
|
|
52
|
+
const { coalesce = true } = options;
|
|
53
|
+
const dirtySet = getDirtySet(target);
|
|
54
|
+
let pendingResolve = null;
|
|
55
|
+
let pendingPaths = null;
|
|
56
|
+
let stopped = false;
|
|
57
|
+
let unsubscribeFn = null;
|
|
58
|
+
const callback = (paths) => {
|
|
59
|
+
if (stopped)
|
|
60
|
+
return;
|
|
61
|
+
if (pendingResolve) {
|
|
62
|
+
// Consumer is waiting, resolve immediately
|
|
63
|
+
pendingResolve({ value: paths, done: false });
|
|
64
|
+
pendingResolve = null;
|
|
65
|
+
}
|
|
66
|
+
else if (coalesce) {
|
|
67
|
+
// Not waiting, coalesce - just keep latest
|
|
68
|
+
pendingPaths = paths;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
pendingPaths = paths;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
unsubscribeFn = registerWatcher(dirtySet, callback);
|
|
75
|
+
const doUnsubscribe = () => {
|
|
76
|
+
stopped = true;
|
|
77
|
+
if (unsubscribeFn) {
|
|
78
|
+
unsubscribeFn();
|
|
79
|
+
unsubscribeFn = null;
|
|
80
|
+
}
|
|
81
|
+
if (pendingResolve) {
|
|
82
|
+
pendingResolve({ value: undefined, done: true });
|
|
83
|
+
pendingResolve = null;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const watcher = {
|
|
87
|
+
async next() {
|
|
88
|
+
if (stopped) {
|
|
89
|
+
return { value: undefined, done: true };
|
|
90
|
+
}
|
|
91
|
+
// If we have pending paths from while consumer was busy, return them
|
|
92
|
+
if (pendingPaths !== null) {
|
|
93
|
+
const paths = pendingPaths;
|
|
94
|
+
pendingPaths = null;
|
|
95
|
+
return { value: paths, done: false };
|
|
96
|
+
}
|
|
97
|
+
// Wait for next change
|
|
98
|
+
return new Promise((resolve) => {
|
|
99
|
+
pendingResolve = resolve;
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
async return() {
|
|
103
|
+
doUnsubscribe();
|
|
104
|
+
return { value: undefined, done: true };
|
|
105
|
+
},
|
|
106
|
+
async throw(error) {
|
|
107
|
+
doUnsubscribe();
|
|
108
|
+
throw error;
|
|
109
|
+
},
|
|
110
|
+
unsubscribe: doUnsubscribe,
|
|
111
|
+
[Symbol.asyncIterator]() {
|
|
112
|
+
return this;
|
|
113
|
+
},
|
|
114
|
+
[Symbol.dispose]() {
|
|
115
|
+
doUnsubscribe();
|
|
116
|
+
},
|
|
117
|
+
[Symbol.asyncDispose]() {
|
|
118
|
+
doUnsubscribe();
|
|
119
|
+
return Promise.resolve();
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
return watcher;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/models/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extends Zod with z.ref() for type-safe Ref<T> validation.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { z } from '@justscale/core/models'
|
|
7
|
+
*
|
|
8
|
+
* const EventSchema = z.object({
|
|
9
|
+
* user: z.ref(User),
|
|
10
|
+
* })
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
import { z as _z } from 'zod';
|
|
14
|
+
import { type Ref } from './types.js';
|
|
15
|
+
declare function ref<T>(_model: {
|
|
16
|
+
new (...args: any[]): T;
|
|
17
|
+
ref(id: string): unknown;
|
|
18
|
+
}): _z.ZodType<Ref<T>>;
|
|
19
|
+
/**
|
|
20
|
+
* Extended Zod with z.ref() for JustScale Ref<T> validation.
|
|
21
|
+
* Drop-in replacement for `import { z } from 'zod'`.
|
|
22
|
+
*/
|
|
23
|
+
export declare const z: typeof _z & {
|
|
24
|
+
ref: typeof ref;
|
|
25
|
+
};
|
|
26
|
+
/** Standalone export for direct usage */
|
|
27
|
+
export { ref as zRef };
|
|
28
|
+
/**
|
|
29
|
+
* Module augmentation - makes z.ref() visible in TypeScript
|
|
30
|
+
* even when importing from 'zod' directly. At runtime, only
|
|
31
|
+
* the z exported from '@justscale/core/models' has .ref().
|
|
32
|
+
*/
|
|
33
|
+
declare module 'zod' {
|
|
34
|
+
namespace z {
|
|
35
|
+
/**
|
|
36
|
+
* Create a Zod schema that validates a Ref<T>.
|
|
37
|
+
* Accepts Reference<T>, Persistent<T>, or Lock<Persistent<T>>.
|
|
38
|
+
*
|
|
39
|
+
* Note: import z from '@justscale/core/models' for runtime support.
|
|
40
|
+
*/
|
|
41
|
+
function ref<T>(_model: {
|
|
42
|
+
new (...args: any[]): T;
|
|
43
|
+
}): _z.ZodType<Ref<T>>;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=zod-ref.d.ts.map
|