@mantajs/core 0.1.6 → 0.2.0-beta.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/dist/adapters/auth-mock.d.ts +44 -0
- package/dist/adapters/auth-mock.d.ts.map +1 -0
- package/dist/adapters/auth-mock.js +160 -0
- package/dist/adapters/auth-mock.js.map +1 -0
- package/dist/adapters/cache-memory.d.ts +11 -0
- package/dist/adapters/cache-memory.d.ts.map +1 -0
- package/dist/adapters/cache-memory.js +32 -0
- package/dist/adapters/cache-memory.js.map +1 -0
- package/dist/adapters/database-memory.d.ts +24 -0
- package/dist/adapters/database-memory.d.ts.map +1 -0
- package/dist/adapters/database-memory.js +141 -0
- package/dist/adapters/database-memory.js.map +1 -0
- package/dist/adapters/eventbus-memory.d.ts +37 -0
- package/dist/adapters/eventbus-memory.d.ts.map +1 -0
- package/dist/adapters/eventbus-memory.js +166 -0
- package/dist/adapters/eventbus-memory.js.map +1 -0
- package/dist/adapters/file-memory.d.ts +24 -0
- package/dist/adapters/file-memory.d.ts.map +1 -0
- package/dist/adapters/file-memory.js +77 -0
- package/dist/adapters/file-memory.js.map +1 -0
- package/dist/adapters/http-memory.d.ts +23 -0
- package/dist/adapters/http-memory.d.ts.map +1 -0
- package/dist/adapters/http-memory.js +149 -0
- package/dist/adapters/http-memory.js.map +1 -0
- package/dist/adapters/index.d.ts +14 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +15 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/job-scheduler-memory.d.ts +20 -0
- package/dist/adapters/job-scheduler-memory.d.ts.map +1 -0
- package/dist/adapters/job-scheduler-memory.js +103 -0
- package/dist/adapters/job-scheduler-memory.js.map +1 -0
- package/dist/adapters/locking-memory.d.ts +20 -0
- package/dist/adapters/locking-memory.d.ts.map +1 -0
- package/dist/adapters/locking-memory.js +85 -0
- package/dist/adapters/locking-memory.js.map +1 -0
- package/dist/adapters/logger-test.d.ts +30 -0
- package/dist/adapters/logger-test.d.ts.map +1 -0
- package/dist/adapters/logger-test.js +77 -0
- package/dist/adapters/logger-test.js.map +1 -0
- package/dist/adapters/notification-memory.d.ts +27 -0
- package/dist/adapters/notification-memory.d.ts.map +1 -0
- package/dist/adapters/notification-memory.js +69 -0
- package/dist/adapters/notification-memory.js.map +1 -0
- package/dist/adapters/relational-query-memory.d.ts +47 -0
- package/dist/adapters/relational-query-memory.d.ts.map +1 -0
- package/dist/adapters/relational-query-memory.js +263 -0
- package/dist/adapters/relational-query-memory.js.map +1 -0
- package/dist/adapters/repository-factory-memory.d.ts +17 -0
- package/dist/adapters/repository-factory-memory.d.ts.map +1 -0
- package/dist/adapters/repository-factory-memory.js +32 -0
- package/dist/adapters/repository-factory-memory.js.map +1 -0
- package/dist/adapters/repository-memory.d.ts +30 -0
- package/dist/adapters/repository-memory.d.ts.map +1 -0
- package/dist/adapters/repository-memory.js +183 -0
- package/dist/adapters/repository-memory.js.map +1 -0
- package/dist/ai/index.d.ts +53 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +48 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/app/index.d.ts +97 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +217 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/request-context.d.ts +35 -0
- package/dist/app/request-context.d.ts.map +1 -0
- package/dist/app/request-context.js +32 -0
- package/dist/app/request-context.js.map +1 -0
- package/dist/auth/auth-module-service.d.ts +62 -0
- package/dist/auth/auth-module-service.d.ts.map +1 -0
- package/dist/auth/auth-module-service.js +210 -0
- package/dist/auth/auth-module-service.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +19 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +61 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/models/auth-identity.d.ts +11 -0
- package/dist/auth/models/auth-identity.d.ts.map +1 -0
- package/dist/auth/models/auth-identity.js +12 -0
- package/dist/auth/models/auth-identity.js.map +1 -0
- package/dist/auth/providers/emailpass.d.ts +7 -0
- package/dist/auth/providers/emailpass.d.ts.map +1 -0
- package/dist/auth/providers/emailpass.js +94 -0
- package/dist/auth/providers/emailpass.js.map +1 -0
- package/dist/auth/providers/types.d.ts +66 -0
- package/dist/auth/providers/types.d.ts.map +1 -0
- package/dist/auth/providers/types.js +3 -0
- package/dist/auth/providers/types.js.map +1 -0
- package/dist/auth/types.d.ts +36 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +3 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/command/define-command-graph.d.ts +63 -0
- package/dist/command/define-command-graph.d.ts.map +1 -0
- package/dist/command/define-command-graph.js +80 -0
- package/dist/command/define-command-graph.js.map +1 -0
- package/dist/command/dml-to-zod.d.ts +34 -0
- package/dist/command/dml-to-zod.d.ts.map +1 -0
- package/dist/command/dml-to-zod.js +140 -0
- package/dist/command/dml-to-zod.js.map +1 -0
- package/dist/command/generate-entity-commands.d.ts +68 -0
- package/dist/command/generate-entity-commands.d.ts.map +1 -0
- package/dist/command/generate-entity-commands.js +350 -0
- package/dist/command/generate-entity-commands.js.map +1 -0
- package/dist/command/index.d.ts +54 -0
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +338 -0
- package/dist/command/index.js.map +1 -0
- package/dist/command/types.d.ts +131 -0
- package/dist/command/types.d.ts.map +1 -0
- package/dist/command/types.js +2 -0
- package/dist/command/types.js.map +1 -0
- package/dist/config/built-in-presets.d.ts +20 -0
- package/dist/config/built-in-presets.d.ts.map +1 -0
- package/dist/config/built-in-presets.js +70 -0
- package/dist/config/built-in-presets.js.map +1 -0
- package/dist/config/config-manager.d.ts +117 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +245 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/define-config.d.ts +20 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +64 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/feature-flags.d.ts +48 -0
- package/dist/config/feature-flags.d.ts.map +1 -0
- package/dist/config/feature-flags.js +97 -0
- package/dist/config/feature-flags.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +8 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/presets.d.ts +38 -0
- package/dist/config/presets.d.ts.map +1 -0
- package/dist/config/presets.js +29 -0
- package/dist/config/presets.js.map +1 -0
- package/dist/config/types.d.ts +707 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +112 -0
- package/dist/config/types.js.map +1 -0
- package/dist/context/index.d.ts +95 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +26 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/registry.d.ts +32 -0
- package/dist/context/registry.d.ts.map +1 -0
- package/dist/context/registry.js +142 -0
- package/dist/context/registry.js.map +1 -0
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +4 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +839 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +106 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/dml/entity.d.ts +132 -0
- package/dist/dml/entity.d.ts.map +1 -0
- package/dist/dml/entity.js +110 -0
- package/dist/dml/entity.js.map +1 -0
- package/dist/dml/from-zod.d.ts +13 -0
- package/dist/dml/from-zod.d.ts.map +1 -0
- package/dist/dml/from-zod.js +81 -0
- package/dist/dml/from-zod.js.map +1 -0
- package/dist/dml/generator/index.d.ts +62 -0
- package/dist/dml/generator/index.d.ts.map +1 -0
- package/dist/dml/generator/index.js +208 -0
- package/dist/dml/generator/index.js.map +1 -0
- package/dist/dml/index.d.ts +11 -0
- package/dist/dml/index.d.ts.map +1 -0
- package/dist/dml/index.js +13 -0
- package/dist/dml/index.js.map +1 -0
- package/dist/dml/infer.d.ts +36 -0
- package/dist/dml/infer.d.ts.map +1 -0
- package/dist/dml/infer.js +5 -0
- package/dist/dml/infer.js.map +1 -0
- package/dist/dml/model.d.ts +58 -0
- package/dist/dml/model.d.ts.map +1 -0
- package/dist/dml/model.js +95 -0
- package/dist/dml/model.js.map +1 -0
- package/dist/dml/modifiers.d.ts +9 -0
- package/dist/dml/modifiers.d.ts.map +1 -0
- package/dist/dml/modifiers.js +25 -0
- package/dist/dml/modifiers.js.map +1 -0
- package/dist/dml/properties/array.d.ts +7 -0
- package/dist/dml/properties/array.d.ts.map +1 -0
- package/dist/dml/properties/array.js +5 -0
- package/dist/dml/properties/array.js.map +1 -0
- package/dist/dml/properties/autoincrement.d.ts +7 -0
- package/dist/dml/properties/autoincrement.d.ts.map +1 -0
- package/dist/dml/properties/autoincrement.js +5 -0
- package/dist/dml/properties/autoincrement.js.map +1 -0
- package/dist/dml/properties/base.d.ts +124 -0
- package/dist/dml/properties/base.d.ts.map +1 -0
- package/dist/dml/properties/base.js +76 -0
- package/dist/dml/properties/base.js.map +1 -0
- package/dist/dml/properties/big-number.d.ts +7 -0
- package/dist/dml/properties/big-number.d.ts.map +1 -0
- package/dist/dml/properties/big-number.js +5 -0
- package/dist/dml/properties/big-number.js.map +1 -0
- package/dist/dml/properties/boolean.d.ts +7 -0
- package/dist/dml/properties/boolean.d.ts.map +1 -0
- package/dist/dml/properties/boolean.js +5 -0
- package/dist/dml/properties/boolean.js.map +1 -0
- package/dist/dml/properties/computed.d.ts +9 -0
- package/dist/dml/properties/computed.d.ts.map +1 -0
- package/dist/dml/properties/computed.js +22 -0
- package/dist/dml/properties/computed.js.map +1 -0
- package/dist/dml/properties/date-time.d.ts +7 -0
- package/dist/dml/properties/date-time.d.ts.map +1 -0
- package/dist/dml/properties/date-time.js +5 -0
- package/dist/dml/properties/date-time.js.map +1 -0
- package/dist/dml/properties/enum.d.ts +12 -0
- package/dist/dml/properties/enum.d.ts.map +1 -0
- package/dist/dml/properties/enum.js +14 -0
- package/dist/dml/properties/enum.js.map +1 -0
- package/dist/dml/properties/float.d.ts +7 -0
- package/dist/dml/properties/float.d.ts.map +1 -0
- package/dist/dml/properties/float.js +5 -0
- package/dist/dml/properties/float.js.map +1 -0
- package/dist/dml/properties/index.d.ts +15 -0
- package/dist/dml/properties/index.d.ts.map +1 -0
- package/dist/dml/properties/index.js +15 -0
- package/dist/dml/properties/index.js.map +1 -0
- package/dist/dml/properties/json.d.ts +7 -0
- package/dist/dml/properties/json.d.ts.map +1 -0
- package/dist/dml/properties/json.js +6 -0
- package/dist/dml/properties/json.js.map +1 -0
- package/dist/dml/properties/nullable.d.ts +23 -0
- package/dist/dml/properties/nullable.d.ts.map +1 -0
- package/dist/dml/properties/nullable.js +46 -0
- package/dist/dml/properties/nullable.js.map +1 -0
- package/dist/dml/properties/number.d.ts +10 -0
- package/dist/dml/properties/number.d.ts.map +1 -0
- package/dist/dml/properties/number.js +13 -0
- package/dist/dml/properties/number.js.map +1 -0
- package/dist/dml/properties/primary-key.d.ts +14 -0
- package/dist/dml/properties/primary-key.d.ts.map +1 -0
- package/dist/dml/properties/primary-key.js +23 -0
- package/dist/dml/properties/primary-key.js.map +1 -0
- package/dist/dml/properties/text.d.ts +15 -0
- package/dist/dml/properties/text.d.ts.map +1 -0
- package/dist/dml/properties/text.js +19 -0
- package/dist/dml/properties/text.js.map +1 -0
- package/dist/dml/relations/belongs-to.d.ts +20 -0
- package/dist/dml/relations/belongs-to.d.ts.map +1 -0
- package/dist/dml/relations/belongs-to.js +29 -0
- package/dist/dml/relations/belongs-to.js.map +1 -0
- package/dist/dml/relations/has-many.d.ts +16 -0
- package/dist/dml/relations/has-many.d.ts.map +1 -0
- package/dist/dml/relations/has-many.js +25 -0
- package/dist/dml/relations/has-many.js.map +1 -0
- package/dist/dml/relations/has-one.d.ts +26 -0
- package/dist/dml/relations/has-one.d.ts.map +1 -0
- package/dist/dml/relations/has-one.js +46 -0
- package/dist/dml/relations/has-one.js.map +1 -0
- package/dist/dml/relations/many-to-many.d.ts +9 -0
- package/dist/dml/relations/many-to-many.d.ts.map +1 -0
- package/dist/dml/relations/many-to-many.js +11 -0
- package/dist/dml/relations/many-to-many.js.map +1 -0
- package/dist/errors/manta-error.d.ts +68 -0
- package/dist/errors/manta-error.d.ts.map +1 -0
- package/dist/errors/manta-error.js +80 -0
- package/dist/errors/manta-error.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +3 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/message-aggregator.d.ts +25 -0
- package/dist/events/message-aggregator.d.ts.map +1 -0
- package/dist/events/message-aggregator.js +35 -0
- package/dist/events/message-aggregator.js.map +1 -0
- package/dist/events/types.d.ts +42 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +3 -0
- package/dist/events/types.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/job/index.d.ts +52 -0
- package/dist/job/index.d.ts.map +1 -0
- package/dist/job/index.js +31 -0
- package/dist/job/index.js.map +1 -0
- package/dist/link/index.d.ts +97 -0
- package/dist/link/index.d.ts.map +1 -0
- package/dist/link/index.js +185 -0
- package/dist/link/index.js.map +1 -0
- package/dist/middleware/define-middleware.d.ts +54 -0
- package/dist/middleware/define-middleware.d.ts.map +1 -0
- package/dist/middleware/define-middleware.js +40 -0
- package/dist/middleware/define-middleware.js.map +1 -0
- package/dist/middleware/index.d.ts +56 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +50 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/module/index.d.ts +56 -0
- package/dist/module/index.d.ts.map +1 -0
- package/dist/module/index.js +52 -0
- package/dist/module/index.js.map +1 -0
- package/dist/module/versioning.d.ts +27 -0
- package/dist/module/versioning.d.ts.map +1 -0
- package/dist/module/versioning.js +64 -0
- package/dist/module/versioning.js.map +1 -0
- package/dist/naming.d.ts +39 -0
- package/dist/naming.d.ts.map +1 -0
- package/dist/naming.js +95 -0
- package/dist/naming.js.map +1 -0
- package/dist/ports/analytics.d.ts +7 -0
- package/dist/ports/analytics.d.ts.map +1 -0
- package/dist/ports/analytics.js +3 -0
- package/dist/ports/analytics.js.map +1 -0
- package/dist/ports/auth.d.ts +27 -0
- package/dist/ports/auth.d.ts.map +1 -0
- package/dist/ports/auth.js +3 -0
- package/dist/ports/auth.js.map +1 -0
- package/dist/ports/cache.d.ts +35 -0
- package/dist/ports/cache.d.ts.map +1 -0
- package/dist/ports/cache.js +3 -0
- package/dist/ports/cache.js.map +1 -0
- package/dist/ports/database.d.ts +40 -0
- package/dist/ports/database.d.ts.map +1 -0
- package/dist/ports/database.js +3 -0
- package/dist/ports/database.js.map +1 -0
- package/dist/ports/event-bus.d.ts +85 -0
- package/dist/ports/event-bus.d.ts.map +1 -0
- package/dist/ports/event-bus.js +3 -0
- package/dist/ports/event-bus.js.map +1 -0
- package/dist/ports/file.d.ts +62 -0
- package/dist/ports/file.d.ts.map +1 -0
- package/dist/ports/file.js +3 -0
- package/dist/ports/file.js.map +1 -0
- package/dist/ports/http.d.ts +20 -0
- package/dist/ports/http.d.ts.map +1 -0
- package/dist/ports/http.js +3 -0
- package/dist/ports/http.js.map +1 -0
- package/dist/ports/in-memory-progress-channel.d.ts +9 -0
- package/dist/ports/in-memory-progress-channel.d.ts.map +1 -0
- package/dist/ports/in-memory-progress-channel.js +19 -0
- package/dist/ports/in-memory-progress-channel.js.map +1 -0
- package/dist/ports/in-memory-queue.d.ts +24 -0
- package/dist/ports/in-memory-queue.d.ts.map +1 -0
- package/dist/ports/in-memory-queue.js +63 -0
- package/dist/ports/in-memory-queue.js.map +1 -0
- package/dist/ports/index.d.ts +27 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +6 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/job-scheduler.d.ts +42 -0
- package/dist/ports/job-scheduler.d.ts.map +1 -0
- package/dist/ports/job-scheduler.js +3 -0
- package/dist/ports/job-scheduler.js.map +1 -0
- package/dist/ports/locking.d.ts +43 -0
- package/dist/ports/locking.d.ts.map +1 -0
- package/dist/ports/locking.js +3 -0
- package/dist/ports/locking.js.map +1 -0
- package/dist/ports/logger.d.ts +65 -0
- package/dist/ports/logger.d.ts.map +1 -0
- package/dist/ports/logger.js +3 -0
- package/dist/ports/logger.js.map +1 -0
- package/dist/ports/notification.d.ts +71 -0
- package/dist/ports/notification.d.ts.map +1 -0
- package/dist/ports/notification.js +3 -0
- package/dist/ports/notification.js.map +1 -0
- package/dist/ports/progress-channel.d.ts +46 -0
- package/dist/ports/progress-channel.d.ts.map +1 -0
- package/dist/ports/progress-channel.js +6 -0
- package/dist/ports/progress-channel.js.map +1 -0
- package/dist/ports/queue.d.ts +21 -0
- package/dist/ports/queue.d.ts.map +1 -0
- package/dist/ports/queue.js +15 -0
- package/dist/ports/queue.js.map +1 -0
- package/dist/ports/relational-query.d.ts +37 -0
- package/dist/ports/relational-query.d.ts.map +1 -0
- package/dist/ports/relational-query.js +3 -0
- package/dist/ports/relational-query.js.map +1 -0
- package/dist/ports/repository-factory.d.ts +21 -0
- package/dist/ports/repository-factory.d.ts.map +1 -0
- package/dist/ports/repository-factory.js +4 -0
- package/dist/ports/repository-factory.js.map +1 -0
- package/dist/ports/repository.d.ts +73 -0
- package/dist/ports/repository.d.ts.map +1 -0
- package/dist/ports/repository.js +3 -0
- package/dist/ports/repository.js.map +1 -0
- package/dist/ports/schema-generator.d.ts +15 -0
- package/dist/ports/schema-generator.d.ts.map +1 -0
- package/dist/ports/schema-generator.js +4 -0
- package/dist/ports/schema-generator.js.map +1 -0
- package/dist/ports/search.d.ts +7 -0
- package/dist/ports/search.d.ts.map +1 -0
- package/dist/ports/search.js +3 -0
- package/dist/ports/search.js.map +1 -0
- package/dist/ports/types.d.ts +112 -0
- package/dist/ports/types.d.ts.map +1 -0
- package/dist/ports/types.js +26 -0
- package/dist/ports/types.js.map +1 -0
- package/dist/ports/workflow-store.d.ts +111 -0
- package/dist/ports/workflow-store.d.ts.map +1 -0
- package/dist/ports/workflow-store.js +5 -0
- package/dist/ports/workflow-store.js.map +1 -0
- package/dist/query/define-query-graph.d.ts +55 -0
- package/dist/query/define-query-graph.d.ts.map +1 -0
- package/dist/query/define-query-graph.js +59 -0
- package/dist/query/define-query-graph.js.map +1 -0
- package/dist/query/define-query.d.ts +79 -0
- package/dist/query/define-query.d.ts.map +1 -0
- package/dist/query/define-query.js +77 -0
- package/dist/query/define-query.js.map +1 -0
- package/dist/query/extend-query-graph.d.ts +36 -0
- package/dist/query/extend-query-graph.d.ts.map +1 -0
- package/dist/query/extend-query-graph.js +34 -0
- package/dist/query/extend-query-graph.js.map +1 -0
- package/dist/query/index.d.ts +181 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +288 -0
- package/dist/query/index.js.map +1 -0
- package/dist/service/define.d.ts +97 -0
- package/dist/service/define.d.ts.map +1 -0
- package/dist/service/define.js +45 -0
- package/dist/service/define.js.map +1 -0
- package/dist/service/index.d.ts +52 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +281 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/instantiate.d.ts +15 -0
- package/dist/service/instantiate.d.ts.map +1 -0
- package/dist/service/instantiate.js +143 -0
- package/dist/service/instantiate.js.map +1 -0
- package/dist/service/snapshot-repository.d.ts +31 -0
- package/dist/service/snapshot-repository.d.ts.map +1 -0
- package/dist/service/snapshot-repository.js +114 -0
- package/dist/service/snapshot-repository.js.map +1 -0
- package/dist/service/types.d.ts +39 -0
- package/dist/service/types.d.ts.map +1 -0
- package/dist/service/types.js +3 -0
- package/dist/service/types.js.map +1 -0
- package/dist/strict-mode/index.d.ts +42 -0
- package/dist/strict-mode/index.d.ts.map +1 -0
- package/dist/strict-mode/index.js +84 -0
- package/dist/strict-mode/index.js.map +1 -0
- package/dist/subscriber/index.d.ts +117 -0
- package/dist/subscriber/index.d.ts.map +1 -0
- package/dist/subscriber/index.js +76 -0
- package/dist/subscriber/index.js.map +1 -0
- package/dist/testing/relational-query-suite.d.ts +22 -0
- package/dist/testing/relational-query-suite.d.ts.map +1 -0
- package/dist/testing/relational-query-suite.js +233 -0
- package/dist/testing/relational-query-suite.js.map +1 -0
- package/dist/user/auto-routes.d.ts +32 -0
- package/dist/user/auto-routes.d.ts.map +1 -0
- package/dist/user/auto-routes.js +424 -0
- package/dist/user/auto-routes.js.map +1 -0
- package/dist/user/define-user.d.ts +54 -0
- package/dist/user/define-user.d.ts.map +1 -0
- package/dist/user/define-user.js +103 -0
- package/dist/user/define-user.js.map +1 -0
- package/dist/user/index.d.ts +7 -0
- package/dist/user/index.d.ts.map +1 -0
- package/dist/user/index.js +5 -0
- package/dist/user/index.js.map +1 -0
- package/dist/user/models/user.d.ts +15 -0
- package/dist/user/models/user.d.ts.map +1 -0
- package/dist/user/models/user.js +16 -0
- package/dist/user/models/user.js.map +1 -0
- package/dist/user/user-module-service.d.ts +55 -0
- package/dist/user/user-module-service.d.ts.map +1 -0
- package/dist/user/user-module-service.js +100 -0
- package/dist/user/user-module-service.js.map +1 -0
- package/dist/workflows/ai-step.d.ts +2 -0
- package/dist/workflows/ai-step.d.ts.map +1 -0
- package/dist/workflows/ai-step.js +54 -0
- package/dist/workflows/ai-step.js.map +1 -0
- package/dist/workflows/create-step.d.ts +16 -0
- package/dist/workflows/create-step.d.ts.map +1 -0
- package/dist/workflows/create-step.js +194 -0
- package/dist/workflows/create-step.js.map +1 -0
- package/dist/workflows/create-workflow.d.ts +16 -0
- package/dist/workflows/create-workflow.d.ts.map +1 -0
- package/dist/workflows/create-workflow.js +21 -0
- package/dist/workflows/create-workflow.js.map +1 -0
- package/dist/workflows/define-workflow.d.ts +55 -0
- package/dist/workflows/define-workflow.d.ts.map +1 -0
- package/dist/workflows/define-workflow.js +72 -0
- package/dist/workflows/define-workflow.js.map +1 -0
- package/dist/workflows/emit-event-step.d.ts +17 -0
- package/dist/workflows/emit-event-step.d.ts.map +1 -0
- package/dist/workflows/emit-event-step.js +46 -0
- package/dist/workflows/emit-event-step.js.map +1 -0
- package/dist/workflows/for-each.d.ts +6 -0
- package/dist/workflows/for-each.d.ts.map +1 -0
- package/dist/workflows/for-each.js +79 -0
- package/dist/workflows/for-each.js.map +1 -0
- package/dist/workflows/index.d.ts +15 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/index.js +12 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/manager.d.ts +99 -0
- package/dist/workflows/manager.d.ts.map +1 -0
- package/dist/workflows/manager.js +450 -0
- package/dist/workflows/manager.js.map +1 -0
- package/dist/workflows/orphan-reaper.d.ts +50 -0
- package/dist/workflows/orphan-reaper.d.ts.map +1 -0
- package/dist/workflows/orphan-reaper.js +69 -0
- package/dist/workflows/orphan-reaper.js.map +1 -0
- package/dist/workflows/progress-helper.d.ts +20 -0
- package/dist/workflows/progress-helper.d.ts.map +1 -0
- package/dist/workflows/progress-helper.js +48 -0
- package/dist/workflows/progress-helper.js.map +1 -0
- package/dist/workflows/step.d.ts +103 -0
- package/dist/workflows/step.d.ts.map +1 -0
- package/dist/workflows/step.js +949 -0
- package/dist/workflows/step.js.map +1 -0
- package/dist/workflows/types.d.ts +215 -0
- package/dist/workflows/types.d.ts.map +1 -0
- package/dist/workflows/types.js +9 -0
- package/dist/workflows/types.js.map +1 -0
- package/dist/workflows/yield.d.ts +12 -0
- package/dist/workflows/yield.d.ts.map +1 -0
- package/dist/workflows/yield.js +29 -0
- package/dist/workflows/yield.js.map +1 -0
- package/docs/00-overview.md +254 -0
- package/docs/01-getting-started.md +224 -0
- package/docs/02-models.md +163 -0
- package/docs/03-services.md +208 -0
- package/docs/04-users.md +165 -0
- package/docs/05-commands.md +501 -0
- package/docs/06-queries.md +342 -0
- package/docs/07-events.md +248 -0
- package/docs/08-links.md +182 -0
- package/docs/09-agents.md +142 -0
- package/docs/10-spa.md +327 -0
- package/docs/11-config.md +481 -0
- package/docs/12-constraints.md +183 -0
- package/docs/13-testing.md +345 -0
- package/docs/14-adapters.md +204 -0
- package/docs/15-hosts.md +163 -0
- package/docs/16-reference.md +274 -0
- package/docs/17-dashboard.md +619 -0
- package/docs/AGENT.md +501 -0
- package/package.json +49 -52
- package/.medusa/server/src/admin/index.js +0 -5358
- package/.medusa/server/src/admin/index.mjs +0 -5356
- package/.medusa/server/src/api/admin/companies/[id]/route.js +0 -39
- package/.medusa/server/src/api/admin/companies/middlewares.js +0 -41
- package/.medusa/server/src/api/admin/companies/route.js +0 -37
- package/.medusa/server/src/api/admin/companies/validators.js +0 -29
- package/.medusa/server/src/api/middlewares.js +0 -8
- package/.medusa/server/src/index.js +0 -5
- package/.medusa/server/src/modules/company/index.js +0 -13
- package/.medusa/server/src/modules/company/migrations/Migration20260126141741.js +0 -26
- package/.medusa/server/src/modules/company/models/company.js +0 -24
- package/.medusa/server/src/modules/company/models/employee.js +0 -15
- package/.medusa/server/src/modules/company/models/index.js +0 -11
- package/.medusa/server/src/modules/company/service.js +0 -11
- package/.medusa/server/src/workflows/create-company.js +0 -10
- package/.medusa/server/src/workflows/delete-company.js +0 -10
- package/.medusa/server/src/workflows/steps/create-company.js +0 -16
- package/.medusa/server/src/workflows/steps/delete-company.js +0 -30
- package/.medusa/server/src/workflows/steps/update-company.js +0 -30
- package/.medusa/server/src/workflows/update-company.js +0 -10
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export type { QueryConfig, QueryDefinition, QueryHandlerContext } from './define-query';
|
|
2
|
+
export { defineQuery, QueryRegistry } from './define-query';
|
|
3
|
+
export type { EntityAccessMap, EntityAccessRule, QueryGraphDefinition } from './define-query-graph';
|
|
4
|
+
export { defineQueryGraph, getEntityFilter, isEntityAllowed } from './define-query-graph';
|
|
5
|
+
export type { QueryGraphExtensionContext, QueryGraphExtensionDefinition, QueryGraphExtensionResolver, } from './extend-query-graph';
|
|
6
|
+
export { extendQueryGraph } from './extend-query-graph';
|
|
7
|
+
import type { InferEntity } from '../dml/infer';
|
|
8
|
+
import type { ILoggerPort } from '../ports/logger';
|
|
9
|
+
import type { IRelationalQueryPort } from '../ports/relational-query';
|
|
10
|
+
import type { QueryGraphExtensionDefinition } from './extend-query-graph';
|
|
11
|
+
/**
|
|
12
|
+
* Entity registry — augmented by .manta/types/types.ts codegen.
|
|
13
|
+
* Unlike MantaEntities (which extends Record<string, DmlEntity>),
|
|
14
|
+
* this interface starts empty so keyof produces a strict union.
|
|
15
|
+
*/
|
|
16
|
+
export interface EntityRegistry extends MantaGeneratedEntityRegistry {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Entity name type — derived from EntityRegistry.
|
|
20
|
+
* When codegen runs, EntityName becomes a union of module names (e.g. 'catalog' | 'inventory').
|
|
21
|
+
* Without codegen, falls back to string for compatibility.
|
|
22
|
+
*/
|
|
23
|
+
export type EntityName = keyof EntityRegistry extends never ? string : Extract<keyof EntityRegistry, string>;
|
|
24
|
+
/**
|
|
25
|
+
* Inferred entity result type — resolves to the DML-inferred shape when codegen is available,
|
|
26
|
+
* falls back to Record<string, unknown> otherwise.
|
|
27
|
+
*/
|
|
28
|
+
export type InferEntityResult<E extends EntityName> = E extends keyof EntityRegistry ? InferEntity<EntityRegistry[E]> : Record<string, unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* Configuration for Query.graph().
|
|
31
|
+
*/
|
|
32
|
+
export interface GraphQueryConfig<E extends EntityName = EntityName> {
|
|
33
|
+
entity: E;
|
|
34
|
+
fields?: string[];
|
|
35
|
+
filters?: Record<string, unknown>;
|
|
36
|
+
sort?: Record<string, 'asc' | 'desc'>;
|
|
37
|
+
pagination?: {
|
|
38
|
+
limit?: number;
|
|
39
|
+
offset?: number;
|
|
40
|
+
};
|
|
41
|
+
relPagination?: RelationPagination;
|
|
42
|
+
withDeleted?: boolean;
|
|
43
|
+
dangerouslyUnboundedRelations?: boolean;
|
|
44
|
+
/** Full-text search query — searches across all searchable fields of the entity. */
|
|
45
|
+
q?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Per-relation pagination configuration.
|
|
49
|
+
*/
|
|
50
|
+
export type RelationPagination = Record<string, {
|
|
51
|
+
limit?: number;
|
|
52
|
+
offset?: number;
|
|
53
|
+
}>;
|
|
54
|
+
/**
|
|
55
|
+
* Configuration for Query.index().
|
|
56
|
+
*/
|
|
57
|
+
export interface IndexQueryConfig {
|
|
58
|
+
entity: EntityName;
|
|
59
|
+
fields?: string[];
|
|
60
|
+
filters?: Record<string, unknown>;
|
|
61
|
+
sort?: Record<string, 'asc' | 'desc'>;
|
|
62
|
+
pagination?: {
|
|
63
|
+
limit?: number;
|
|
64
|
+
offset?: number;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolver function type — provided by modules to resolve entities.
|
|
69
|
+
*/
|
|
70
|
+
export type EntityResolver = (config: {
|
|
71
|
+
fields?: string[];
|
|
72
|
+
filters?: Record<string, unknown>;
|
|
73
|
+
sort?: Record<string, 'asc' | 'desc'>;
|
|
74
|
+
pagination?: {
|
|
75
|
+
limit?: number;
|
|
76
|
+
offset?: number;
|
|
77
|
+
};
|
|
78
|
+
withDeleted?: boolean;
|
|
79
|
+
}) => Promise<Record<string, unknown>[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Query service — provides graph() and index() for cross-module data resolution.
|
|
82
|
+
*
|
|
83
|
+
* Modules register their entity resolvers. Query.graph() orchestrates joins
|
|
84
|
+
* across modules, applying pagination, filtering, and entity count protection.
|
|
85
|
+
*/
|
|
86
|
+
export declare class QueryService {
|
|
87
|
+
private _resolvers;
|
|
88
|
+
private _searchableFields;
|
|
89
|
+
private _indexModule;
|
|
90
|
+
private _relationalQuery;
|
|
91
|
+
private _maxTotalEntities;
|
|
92
|
+
private _beforeFetch;
|
|
93
|
+
/** Query graph extensions — modules that own external entities (PostHog, Stripe, etc.) */
|
|
94
|
+
private _extensions;
|
|
95
|
+
/** MantaApp reference — passed to extension resolvers. Set by bootstrap. */
|
|
96
|
+
private _app;
|
|
97
|
+
/** Logger — passed to extension resolvers. Set by bootstrap. */
|
|
98
|
+
private _logger;
|
|
99
|
+
constructor(options?: {
|
|
100
|
+
maxTotalEntities?: number;
|
|
101
|
+
});
|
|
102
|
+
/**
|
|
103
|
+
* Register a query graph extension — a module-level resolver for external entities.
|
|
104
|
+
* Called by the bootstrap once per discovered extension.
|
|
105
|
+
*/
|
|
106
|
+
registerExtension(extension: QueryGraphExtensionDefinition): void;
|
|
107
|
+
/**
|
|
108
|
+
* Provide the MantaApp + logger to extension resolvers. Called by bootstrap.
|
|
109
|
+
*/
|
|
110
|
+
setExtensionContext(app: any, logger: ILoggerPort): void;
|
|
111
|
+
/**
|
|
112
|
+
* Find the extension (if any) that owns the given normalized entity key.
|
|
113
|
+
*/
|
|
114
|
+
private _findExtensionFor;
|
|
115
|
+
/**
|
|
116
|
+
* Validate that a query's filters are supported by an extension.
|
|
117
|
+
* Throws MantaError with a clear message if any filter is not supported.
|
|
118
|
+
*/
|
|
119
|
+
private _validateExtensionFilters;
|
|
120
|
+
/**
|
|
121
|
+
* Normalize an entity name to canonical lookup key.
|
|
122
|
+
* Handles: 'CustomerGroup' → 'customergroup', 'customer_group' → 'customergroup', 'customerGroup' → 'customergroup'
|
|
123
|
+
* We strip all separators and lowercase for lookup so any format resolves.
|
|
124
|
+
*/
|
|
125
|
+
private _normalizeKey;
|
|
126
|
+
/**
|
|
127
|
+
* Register an entity resolver for a module.
|
|
128
|
+
*/
|
|
129
|
+
registerResolver(entityName: string, resolver: EntityResolver): void;
|
|
130
|
+
/**
|
|
131
|
+
* Register searchable fields for an entity (used for `q` parameter in graph queries).
|
|
132
|
+
*/
|
|
133
|
+
registerSearchableFields(entityName: string, fields: string[]): void;
|
|
134
|
+
/**
|
|
135
|
+
* Get searchable fields for an entity.
|
|
136
|
+
*/
|
|
137
|
+
getSearchableFields(entityName: string): string[];
|
|
138
|
+
/**
|
|
139
|
+
* Register a relational query port for native SQL JOINs.
|
|
140
|
+
* When registered, graph() delegates to this port for queries that include relations.
|
|
141
|
+
*/
|
|
142
|
+
registerRelationalQuery(rq: IRelationalQueryPort): void;
|
|
143
|
+
/**
|
|
144
|
+
* Register the Index module for Query.index().
|
|
145
|
+
*/
|
|
146
|
+
registerIndexModule(indexModule: {
|
|
147
|
+
query: (config: IndexQueryConfig) => Promise<Record<string, unknown>[]>;
|
|
148
|
+
}): void;
|
|
149
|
+
/**
|
|
150
|
+
* Set a beforeFetch hook for circuit breaker pattern.
|
|
151
|
+
*/
|
|
152
|
+
set beforeFetch(fn: (module: string, query: unknown) => Promise<Record<string, unknown>[] | null>);
|
|
153
|
+
/**
|
|
154
|
+
* Query.graph() — resolve entities with cross-module joins.
|
|
155
|
+
*
|
|
156
|
+
* Default limit: 100. Hard limit: 10,000 entities (configurable).
|
|
157
|
+
* Throws INVALID_DATA if entity count exceeds limit.
|
|
158
|
+
*/
|
|
159
|
+
graph<E extends EntityName>(config: GraphQueryConfig<E>): Promise<InferEntityResult<E>[]>;
|
|
160
|
+
/**
|
|
161
|
+
* Apply in-memory search filter on results using searchable fields.
|
|
162
|
+
* Filters rows where any searchable field contains the query string (case-insensitive).
|
|
163
|
+
*/
|
|
164
|
+
private _applySearch;
|
|
165
|
+
/**
|
|
166
|
+
* Query.index() — denormalized read via Index module.
|
|
167
|
+
* Requires Index module loaded + entity indexed.
|
|
168
|
+
*/
|
|
169
|
+
index(config: IndexQueryConfig): Promise<Record<string, unknown>[]>;
|
|
170
|
+
/**
|
|
171
|
+
* Query.graphAndCount() — like graph() but also returns total count for pagination.
|
|
172
|
+
* Delegates to IRelationalQueryPort.findAndCountWithRelations() when available.
|
|
173
|
+
*/
|
|
174
|
+
graphAndCount<E extends EntityName>(config: GraphQueryConfig<E>): Promise<[InferEntityResult<E>[], number]>;
|
|
175
|
+
/**
|
|
176
|
+
* Query.gql() — REMOVED per spec. Throws NOT_IMPLEMENTED.
|
|
177
|
+
*/
|
|
178
|
+
gql(): Promise<never>;
|
|
179
|
+
_reset(): void;
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
// SPEC-011 — Query system with graph() for cross-module joins
|
|
2
|
+
// SPEC-V2 — defineQuery() for CQRS read side
|
|
3
|
+
export { defineQuery, QueryRegistry } from './define-query';
|
|
4
|
+
export { defineQueryGraph, getEntityFilter, isEntityAllowed } from './define-query-graph';
|
|
5
|
+
export { extendQueryGraph } from './extend-query-graph';
|
|
6
|
+
import { MantaError } from '../errors/manta-error';
|
|
7
|
+
/**
|
|
8
|
+
* Query service — provides graph() and index() for cross-module data resolution.
|
|
9
|
+
*
|
|
10
|
+
* Modules register their entity resolvers. Query.graph() orchestrates joins
|
|
11
|
+
* across modules, applying pagination, filtering, and entity count protection.
|
|
12
|
+
*/
|
|
13
|
+
export class QueryService {
|
|
14
|
+
_resolvers = new Map();
|
|
15
|
+
_searchableFields = new Map();
|
|
16
|
+
_indexModule = null;
|
|
17
|
+
_relationalQuery = null;
|
|
18
|
+
_maxTotalEntities;
|
|
19
|
+
_beforeFetch = null;
|
|
20
|
+
/** Query graph extensions — modules that own external entities (PostHog, Stripe, etc.) */
|
|
21
|
+
_extensions = [];
|
|
22
|
+
/** MantaApp reference — passed to extension resolvers. Set by bootstrap. */
|
|
23
|
+
// biome-ignore lint/suspicious/noExplicitAny: avoid circular type dep
|
|
24
|
+
_app = null;
|
|
25
|
+
/** Logger — passed to extension resolvers. Set by bootstrap. */
|
|
26
|
+
_logger = null;
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this._maxTotalEntities = options?.maxTotalEntities ?? 10000;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register a query graph extension — a module-level resolver for external entities.
|
|
32
|
+
* Called by the bootstrap once per discovered extension.
|
|
33
|
+
*/
|
|
34
|
+
registerExtension(extension) {
|
|
35
|
+
this._extensions.push(extension);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Provide the MantaApp + logger to extension resolvers. Called by bootstrap.
|
|
39
|
+
*/
|
|
40
|
+
// biome-ignore lint/suspicious/noExplicitAny: avoid circular type dep
|
|
41
|
+
setExtensionContext(app, logger) {
|
|
42
|
+
this._app = app;
|
|
43
|
+
this._logger = logger;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Find the extension (if any) that owns the given normalized entity key.
|
|
47
|
+
*/
|
|
48
|
+
_findExtensionFor(entityKey) {
|
|
49
|
+
for (const ext of this._extensions) {
|
|
50
|
+
for (const owned of ext.owns) {
|
|
51
|
+
if (this._normalizeKey(owned) === entityKey)
|
|
52
|
+
return ext;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Validate that a query's filters are supported by an extension.
|
|
59
|
+
* Throws MantaError with a clear message if any filter is not supported.
|
|
60
|
+
*/
|
|
61
|
+
_validateExtensionFilters(ext, entity, filters) {
|
|
62
|
+
if (!filters || !ext.supportedFilters)
|
|
63
|
+
return;
|
|
64
|
+
const supported = ext.supportedFilters[entity];
|
|
65
|
+
if (!supported)
|
|
66
|
+
return;
|
|
67
|
+
const unsupported = Object.keys(filters).filter((k) => !supported.includes(k));
|
|
68
|
+
if (unsupported.length > 0) {
|
|
69
|
+
throw new MantaError('INVALID_DATA', `Entity "${entity}" does not support filter(s): ${unsupported.join(', ')}. Supported filters: ${supported.join(', ')}.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Normalize an entity name to canonical lookup key.
|
|
74
|
+
* Handles: 'CustomerGroup' → 'customergroup', 'customer_group' → 'customergroup', 'customerGroup' → 'customergroup'
|
|
75
|
+
* We strip all separators and lowercase for lookup so any format resolves.
|
|
76
|
+
*/
|
|
77
|
+
_normalizeKey(name) {
|
|
78
|
+
return name.replace(/[_\s-]/g, '').toLowerCase();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Register an entity resolver for a module.
|
|
82
|
+
*/
|
|
83
|
+
registerResolver(entityName, resolver) {
|
|
84
|
+
this._resolvers.set(this._normalizeKey(entityName), resolver);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Register searchable fields for an entity (used for `q` parameter in graph queries).
|
|
88
|
+
*/
|
|
89
|
+
registerSearchableFields(entityName, fields) {
|
|
90
|
+
this._searchableFields.set(this._normalizeKey(entityName), fields);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get searchable fields for an entity.
|
|
94
|
+
*/
|
|
95
|
+
getSearchableFields(entityName) {
|
|
96
|
+
return this._searchableFields.get(this._normalizeKey(entityName)) ?? [];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Register a relational query port for native SQL JOINs.
|
|
100
|
+
* When registered, graph() delegates to this port for queries that include relations.
|
|
101
|
+
*/
|
|
102
|
+
registerRelationalQuery(rq) {
|
|
103
|
+
this._relationalQuery = rq;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Register the Index module for Query.index().
|
|
107
|
+
*/
|
|
108
|
+
registerIndexModule(indexModule) {
|
|
109
|
+
this._indexModule = indexModule;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Set a beforeFetch hook for circuit breaker pattern.
|
|
113
|
+
*/
|
|
114
|
+
set beforeFetch(fn) {
|
|
115
|
+
this._beforeFetch = fn;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Query.graph() — resolve entities with cross-module joins.
|
|
119
|
+
*
|
|
120
|
+
* Default limit: 100. Hard limit: 10,000 entities (configurable).
|
|
121
|
+
* Throws INVALID_DATA if entity count exceeds limit.
|
|
122
|
+
*/
|
|
123
|
+
async graph(config) {
|
|
124
|
+
const entityKey = this._normalizeKey(config.entity);
|
|
125
|
+
// Apply default pagination
|
|
126
|
+
const pagination = config.pagination ?? { limit: 100, offset: 0 };
|
|
127
|
+
// Check circuit breaker hook
|
|
128
|
+
if (this._beforeFetch) {
|
|
129
|
+
const cached = await this._beforeFetch(entityKey, config);
|
|
130
|
+
if (cached !== null)
|
|
131
|
+
return cached;
|
|
132
|
+
}
|
|
133
|
+
// Route to query graph extension if an external module owns this entity.
|
|
134
|
+
// External entities are resolved by their module's extendQueryGraph() resolver,
|
|
135
|
+
// not by Drizzle (they have no local table).
|
|
136
|
+
const extension = this._findExtensionFor(entityKey);
|
|
137
|
+
if (extension) {
|
|
138
|
+
this._validateExtensionFilters(extension, config.entity, config.filters);
|
|
139
|
+
const rows = await extension.resolve({ ...config, pagination }, { app: this._app, logger: this._logger ?? console });
|
|
140
|
+
// Entity count protection
|
|
141
|
+
if (!config.dangerouslyUnboundedRelations && rows.length > this._maxTotalEntities) {
|
|
142
|
+
throw new MantaError('INVALID_DATA', `Query returned ${rows.length} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
143
|
+
}
|
|
144
|
+
return rows;
|
|
145
|
+
}
|
|
146
|
+
// Delegate to IRelationalQueryPort if available
|
|
147
|
+
// Always delegate when we have one — it handles alias resolution for relation fields
|
|
148
|
+
// (e.g. 'customers' → M:N relation via pivot table)
|
|
149
|
+
if (this._relationalQuery) {
|
|
150
|
+
const results = await this._relationalQuery.findWithRelations({
|
|
151
|
+
entity: config.entity,
|
|
152
|
+
fields: config.fields,
|
|
153
|
+
filters: config.filters,
|
|
154
|
+
sort: config.sort,
|
|
155
|
+
pagination,
|
|
156
|
+
relPagination: config.relPagination,
|
|
157
|
+
withDeleted: config.withDeleted,
|
|
158
|
+
});
|
|
159
|
+
// Entity count protection
|
|
160
|
+
if (!config.dangerouslyUnboundedRelations && results.length > this._maxTotalEntities) {
|
|
161
|
+
throw new MantaError('INVALID_DATA', `Query returned ${results.length} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
162
|
+
}
|
|
163
|
+
return this._applySearch(results, config.q, entityKey);
|
|
164
|
+
}
|
|
165
|
+
// Fallback to legacy resolver path
|
|
166
|
+
const resolver = this._resolvers.get(entityKey);
|
|
167
|
+
if (!resolver) {
|
|
168
|
+
throw new MantaError('UNKNOWN_MODULES', `No resolver registered for entity "${config.entity}"`);
|
|
169
|
+
}
|
|
170
|
+
// Resolve root entities
|
|
171
|
+
const results = await resolver({
|
|
172
|
+
fields: config.fields,
|
|
173
|
+
filters: config.filters,
|
|
174
|
+
sort: config.sort,
|
|
175
|
+
pagination,
|
|
176
|
+
withDeleted: config.withDeleted,
|
|
177
|
+
});
|
|
178
|
+
// Apply in-memory search filter
|
|
179
|
+
const filtered = this._applySearch(results, config.q, entityKey);
|
|
180
|
+
// Entity count protection
|
|
181
|
+
const total = filtered.length;
|
|
182
|
+
if (!config.dangerouslyUnboundedRelations && total > this._maxTotalEntities) {
|
|
183
|
+
throw new MantaError('INVALID_DATA', `Query returned ${total} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
184
|
+
}
|
|
185
|
+
return filtered;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Apply in-memory search filter on results using searchable fields.
|
|
189
|
+
* Filters rows where any searchable field contains the query string (case-insensitive).
|
|
190
|
+
*/
|
|
191
|
+
_applySearch(results, q, entityKey) {
|
|
192
|
+
if (!q || !q.trim() || !entityKey)
|
|
193
|
+
return results;
|
|
194
|
+
const searchableFields = this._searchableFields.get(entityKey);
|
|
195
|
+
if (!searchableFields || searchableFields.length === 0)
|
|
196
|
+
return results;
|
|
197
|
+
const needle = q.trim().toLowerCase();
|
|
198
|
+
return results.filter((row) => searchableFields.some((field) => {
|
|
199
|
+
const value = row[field];
|
|
200
|
+
return value != null && String(value).toLowerCase().includes(needle);
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Query.index() — denormalized read via Index module.
|
|
205
|
+
* Requires Index module loaded + entity indexed.
|
|
206
|
+
*/
|
|
207
|
+
async index(config) {
|
|
208
|
+
if (!this._indexModule) {
|
|
209
|
+
throw new MantaError('UNKNOWN_MODULES', 'Index module is not loaded. Use Query.graph() or enable the Index module.');
|
|
210
|
+
}
|
|
211
|
+
return this._indexModule.query(config);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Query.graphAndCount() — like graph() but also returns total count for pagination.
|
|
215
|
+
* Delegates to IRelationalQueryPort.findAndCountWithRelations() when available.
|
|
216
|
+
*/
|
|
217
|
+
async graphAndCount(config) {
|
|
218
|
+
const entityKey = this._normalizeKey(config.entity);
|
|
219
|
+
// Apply default pagination
|
|
220
|
+
const pagination = config.pagination ?? { limit: 100, offset: 0 };
|
|
221
|
+
// Check circuit breaker hook
|
|
222
|
+
if (this._beforeFetch) {
|
|
223
|
+
const cached = await this._beforeFetch(entityKey, config);
|
|
224
|
+
if (cached !== null)
|
|
225
|
+
return [cached, cached.length];
|
|
226
|
+
}
|
|
227
|
+
// Route to query graph extension if an external module owns this entity.
|
|
228
|
+
const extension = this._findExtensionFor(entityKey);
|
|
229
|
+
if (extension) {
|
|
230
|
+
this._validateExtensionFilters(extension, config.entity, config.filters);
|
|
231
|
+
const rows = await extension.resolve({ ...config, pagination }, { app: this._app, logger: this._logger ?? console });
|
|
232
|
+
if (!config.dangerouslyUnboundedRelations && rows.length > this._maxTotalEntities) {
|
|
233
|
+
throw new MantaError('INVALID_DATA', `Query returned ${rows.length} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
234
|
+
}
|
|
235
|
+
// External resolvers don't provide a separate count yet — return rows.length as approximation.
|
|
236
|
+
return [rows, rows.length];
|
|
237
|
+
}
|
|
238
|
+
if (this._relationalQuery) {
|
|
239
|
+
const [results, count] = await this._relationalQuery.findAndCountWithRelations({
|
|
240
|
+
entity: config.entity,
|
|
241
|
+
fields: config.fields,
|
|
242
|
+
filters: config.filters,
|
|
243
|
+
sort: config.sort,
|
|
244
|
+
pagination,
|
|
245
|
+
relPagination: config.relPagination,
|
|
246
|
+
withDeleted: config.withDeleted,
|
|
247
|
+
});
|
|
248
|
+
if (!config.dangerouslyUnboundedRelations && results.length > this._maxTotalEntities) {
|
|
249
|
+
throw new MantaError('INVALID_DATA', `Query returned ${results.length} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
250
|
+
}
|
|
251
|
+
return [results, count];
|
|
252
|
+
}
|
|
253
|
+
// Fallback to legacy resolver path — no native count support
|
|
254
|
+
const resolver = this._resolvers.get(entityKey);
|
|
255
|
+
if (!resolver) {
|
|
256
|
+
throw new MantaError('UNKNOWN_MODULES', `No resolver registered for entity "${config.entity}"`);
|
|
257
|
+
}
|
|
258
|
+
const results = await resolver({
|
|
259
|
+
fields: config.fields,
|
|
260
|
+
filters: config.filters,
|
|
261
|
+
sort: config.sort,
|
|
262
|
+
pagination,
|
|
263
|
+
withDeleted: config.withDeleted,
|
|
264
|
+
});
|
|
265
|
+
if (!config.dangerouslyUnboundedRelations && results.length > this._maxTotalEntities) {
|
|
266
|
+
throw new MantaError('INVALID_DATA', `Query returned ${results.length} entities, exceeding maximum of ${this._maxTotalEntities}. Use pagination or reduce scope.`);
|
|
267
|
+
}
|
|
268
|
+
// Legacy resolvers don't provide count — return results.length as approximation
|
|
269
|
+
return [results, results.length];
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Query.gql() — REMOVED per spec. Throws NOT_IMPLEMENTED.
|
|
273
|
+
*/
|
|
274
|
+
async gql() {
|
|
275
|
+
throw new MantaError('NOT_IMPLEMENTED', 'Query.gql() has been removed. Use Query.graph() instead.');
|
|
276
|
+
}
|
|
277
|
+
_reset() {
|
|
278
|
+
this._resolvers.clear();
|
|
279
|
+
this._searchableFields.clear();
|
|
280
|
+
this._indexModule = null;
|
|
281
|
+
this._relationalQuery = null;
|
|
282
|
+
this._beforeFetch = null;
|
|
283
|
+
this._extensions = [];
|
|
284
|
+
this._app = null;
|
|
285
|
+
this._logger = null;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { DmlEntity } from '../dml/entity';
|
|
2
|
+
import type { InferEntity } from '../dml/infer';
|
|
3
|
+
import type { ModelProxy, ModelRef } from '../link/index';
|
|
4
|
+
import type { ILoggerPort } from '../ports/logger';
|
|
5
|
+
import type { CursorPagination } from '../ports/types';
|
|
6
|
+
/**
|
|
7
|
+
* Typed repository — wraps IRepository with entity-typed methods.
|
|
8
|
+
* Mutations (update, delete, create) are auto-snapshotted for compensation.
|
|
9
|
+
*/
|
|
10
|
+
export interface TypedRepository<T> {
|
|
11
|
+
find(options?: {
|
|
12
|
+
where?: Partial<T>;
|
|
13
|
+
withDeleted?: boolean;
|
|
14
|
+
limit?: number;
|
|
15
|
+
offset?: number;
|
|
16
|
+
order?: Partial<Record<keyof T & string, 'ASC' | 'DESC'>>;
|
|
17
|
+
cursor?: CursorPagination;
|
|
18
|
+
}): Promise<T[]>;
|
|
19
|
+
findAndCount(options?: {
|
|
20
|
+
where?: Partial<T>;
|
|
21
|
+
withDeleted?: boolean;
|
|
22
|
+
limit?: number;
|
|
23
|
+
offset?: number;
|
|
24
|
+
order?: Partial<Record<keyof T & string, 'ASC' | 'DESC'>>;
|
|
25
|
+
}): Promise<[T[], number]>;
|
|
26
|
+
create(data: Partial<T> | Partial<T>[]): Promise<T | T[]>;
|
|
27
|
+
update(data: Partial<T> & {
|
|
28
|
+
id: string;
|
|
29
|
+
}): Promise<T>;
|
|
30
|
+
delete(ids: string | string[]): Promise<void>;
|
|
31
|
+
softDelete(ids: string | string[]): Promise<Record<string, string[]>>;
|
|
32
|
+
restore(ids: string | string[]): Promise<void>;
|
|
33
|
+
upsertWithReplace(data: Partial<T>[], replaceFields?: string[], conflictTarget?: string[]): Promise<T[]>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Service methods — plain async functions. No compensation wrapper needed.
|
|
37
|
+
* The framework auto-snapshots repo mutations for rollback.
|
|
38
|
+
*/
|
|
39
|
+
type ServiceMethods = Record<string, (...args: any[]) => Promise<any>>;
|
|
40
|
+
/**
|
|
41
|
+
* Context passed to the service factory.
|
|
42
|
+
* - `db` — typed repository for CRUD operations
|
|
43
|
+
* - `log` — logger instance
|
|
44
|
+
*/
|
|
45
|
+
export interface ServiceFactoryContext<T> {
|
|
46
|
+
db: TypedRepository<T>;
|
|
47
|
+
log: ILoggerPort;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Service descriptor — the output of defineService().
|
|
51
|
+
* Contains metadata for bootstrap to instantiate the service.
|
|
52
|
+
*/
|
|
53
|
+
export interface ServiceDescriptor<E extends DmlEntity<any> = DmlEntity<any>, Methods = ServiceMethods> {
|
|
54
|
+
__type: 'service';
|
|
55
|
+
entity: E;
|
|
56
|
+
factory: (ctx: ServiceFactoryContext<InferEntity<E>>) => Methods;
|
|
57
|
+
$modelObjects: Record<string, E>;
|
|
58
|
+
/** Methods exposed to other modules via app.modules.*. If undefined, all methods are public. */
|
|
59
|
+
publicMethods?: string[];
|
|
60
|
+
/** Entity name (resolved from string or callback). */
|
|
61
|
+
_entityName?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Type guard: is this value a ServiceDescriptor?
|
|
65
|
+
*/
|
|
66
|
+
export declare function isServiceDescriptor(value: unknown): value is ServiceDescriptor<any, any>;
|
|
67
|
+
/**
|
|
68
|
+
* Entity name type — autocompletes from MantaGeneratedEntities (codegen),
|
|
69
|
+
* but accepts any string before codegen has run.
|
|
70
|
+
*/
|
|
71
|
+
type EntityNameArg = keyof MantaGeneratedEntities | (string & {});
|
|
72
|
+
/**
|
|
73
|
+
* Define a service for a DML entity.
|
|
74
|
+
*
|
|
75
|
+
* ```ts
|
|
76
|
+
* export default defineService('product', ({ db, log }) => ({
|
|
77
|
+
* publish: async (id: string) => {
|
|
78
|
+
* await db.update({ id, status: 'published' })
|
|
79
|
+
* log.info(`Product ${id} published`)
|
|
80
|
+
* },
|
|
81
|
+
* }))
|
|
82
|
+
* ```
|
|
83
|
+
*
|
|
84
|
+
* Compensation is automatic — the repo snapshots state before every mutation.
|
|
85
|
+
*/
|
|
86
|
+
export declare function defineService<Methods extends ServiceMethods>(entity: EntityNameArg, factory: (ctx: ServiceFactoryContext<any>) => Methods, options?: {
|
|
87
|
+
publicMethods?: (keyof Methods & string)[];
|
|
88
|
+
}): ServiceDescriptor<any, Methods>;
|
|
89
|
+
/**
|
|
90
|
+
* @deprecated Use string form: `defineService('product', factory)`.
|
|
91
|
+
* Callback form kept for backward compatibility during migration.
|
|
92
|
+
*/
|
|
93
|
+
export declare function defineService<Methods extends ServiceMethods>(entitySelector: (model: ModelProxy) => ModelRef, factory: (ctx: ServiceFactoryContext<any>) => Methods, options?: {
|
|
94
|
+
publicMethods?: (keyof Methods & string)[];
|
|
95
|
+
}): ServiceDescriptor<any, Methods>;
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../src/service/define.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// service.define() — Functional, typed API for defining module services.
|
|
2
|
+
//
|
|
3
|
+
// Services = mutations only (CQRS). Reads go through the Query Graph.
|
|
4
|
+
// Compensation is automatic — the repo snapshots state before every mutation.
|
|
5
|
+
// No service.method() needed. Just write async functions.
|
|
6
|
+
//
|
|
7
|
+
// Usage:
|
|
8
|
+
// export default defineService('product', ({ db, log }) => ({
|
|
9
|
+
// publish: async (id: string) => {
|
|
10
|
+
// await db.update({ id, status: 'published' })
|
|
11
|
+
// log.info(`Product ${id} published`)
|
|
12
|
+
// },
|
|
13
|
+
// }))
|
|
14
|
+
import { createModelProxy } from '../link/index';
|
|
15
|
+
/**
|
|
16
|
+
* Type guard: is this value a ServiceDescriptor?
|
|
17
|
+
*/
|
|
18
|
+
// biome-ignore lint/suspicious/noExplicitAny: type guard
|
|
19
|
+
export function isServiceDescriptor(value) {
|
|
20
|
+
return typeof value === 'object' && value !== null && value.__type === 'service';
|
|
21
|
+
}
|
|
22
|
+
// ── Implementation ──────────────────────────────────────────────────
|
|
23
|
+
// biome-ignore lint/suspicious/noExplicitAny: generic constraint for any async method
|
|
24
|
+
export function defineService(entityOrSelector, factory, options) {
|
|
25
|
+
let entityName;
|
|
26
|
+
if (typeof entityOrSelector === 'string') {
|
|
27
|
+
entityName = entityOrSelector;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Legacy callback form
|
|
31
|
+
const proxy = createModelProxy();
|
|
32
|
+
const ref = entityOrSelector(proxy);
|
|
33
|
+
entityName = ref.entityName;
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
__type: 'service',
|
|
37
|
+
// biome-ignore lint/suspicious/noExplicitAny: entity is resolved at boot time from _entityName
|
|
38
|
+
entity: null,
|
|
39
|
+
factory,
|
|
40
|
+
$modelObjects: {},
|
|
41
|
+
publicMethods: options?.publicMethods,
|
|
42
|
+
_entityName: entityName,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.js","sourceRoot":"","sources":["../../src/service/define.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,sEAAsE;AACtE,8EAA8E;AAC9E,0DAA0D;AAC1D,EAAE;AACF,SAAS;AACT,gEAAgE;AAChE,uCAAuC;AACvC,qDAAqD;AACrD,4CAA4C;AAC5C,SAAS;AACT,QAAQ;AAKR,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAiEhD;;GAEG;AACH,yDAAyD;AACzD,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAAiC,CAAC,MAAM,KAAK,SAAS,CAAA;AAC/G,CAAC;AAwCD,uEAAuE;AACvE,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAC3B,gBAAmE,EACnE,OAAqD,EACrD,OAAwD;IAExD,IAAI,UAAkB,CAAA;IAEtB,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE,CAAC;QACzC,UAAU,GAAG,gBAAgB,CAAA;IAC/B,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAA;QAChC,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACnC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAA;IAC7B,CAAC;IAED,OAAO;QACL,MAAM,EAAE,SAAkB;QAC1B,+FAA+F;QAC/F,MAAM,EAAE,IAAiC;QACzC,OAAO;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,WAAW,EAAE,UAAU;KACxB,CAAA;AACH,CAAC"}
|