@mantajs/core 0.1.7 → 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 -5493
- package/.medusa/server/src/admin/index.mjs +0 -5491
- 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/admin/employees/middlewares.js +0 -15
- package/.medusa/server/src/api/admin/employees/route.js +0 -21
- package/.medusa/server/src/api/middlewares.js +0 -9
- 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
package/docs/08-links.md
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Links — defineLink()
|
|
2
|
+
|
|
3
|
+
## Why links exist
|
|
4
|
+
|
|
5
|
+
Entities need relations. In Manta, relations are always defined with `defineLink()` — never in the model itself. There is no `field.relation()`, `belongsTo()`, `hasMany()`, or `hasOne()` API.
|
|
6
|
+
|
|
7
|
+
`defineLink()` is the ONE interface for all relations:
|
|
8
|
+
|
|
9
|
+
- **Intra-module** (`src/modules/{mod}/links/`): 1:1 and 1:N create a FK directly on the child table. M:N creates a pivot table.
|
|
10
|
+
- **Cross-module** (`src/links/`): always creates a pivot table (modules are isolated, no shared FK).
|
|
11
|
+
|
|
12
|
+
Same API in both cases.
|
|
13
|
+
|
|
14
|
+
## defineLink()
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
// src/links/product-inventory.ts — cross-module link
|
|
18
|
+
export default defineLink('product', many('inventory_item'))
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Signature:** `defineLink(left: string, right: string | many(string), extraColumns?)`
|
|
22
|
+
|
|
23
|
+
- `left` — Left entity name (string, autocompletes from codegen)
|
|
24
|
+
- `right` — Right entity name, optionally wrapped in `many()` for cardinality
|
|
25
|
+
- `extraColumns` — (optional) Additional columns on the pivot table using `field.*`
|
|
26
|
+
|
|
27
|
+
No imports needed — `defineLink`, `many`, and `field` are globals.
|
|
28
|
+
|
|
29
|
+
## Cardinality with `many()`
|
|
30
|
+
|
|
31
|
+
The `many()` modifier controls the relationship type and cascade behavior:
|
|
32
|
+
|
|
33
|
+
| Pattern | Cardinality | Cascade behavior |
|
|
34
|
+
|---------|-------------|-----------------|
|
|
35
|
+
| `defineLink('a', 'b')` | 1:1 | Symmetric — delete either side deletes the other |
|
|
36
|
+
| `defineLink('a', many('b'))` | 1:N | Delete parent (a) cascades to children (b) |
|
|
37
|
+
| `defineLink(many('a'), many('b'))` | M:N | Delete either side only cleans pivot |
|
|
38
|
+
|
|
39
|
+
Cascade is **automatic** — no configuration needed.
|
|
40
|
+
|
|
41
|
+
## Two locations, different storage
|
|
42
|
+
|
|
43
|
+
### Intra-module links (`src/modules/{mod}/links/`)
|
|
44
|
+
|
|
45
|
+
For entities within the **same module**. The storage strategy depends on cardinality:
|
|
46
|
+
|
|
47
|
+
**1:1 — FK on child table:**
|
|
48
|
+
```typescript
|
|
49
|
+
// src/modules/blog/links/post-seo.ts
|
|
50
|
+
// Creates seo.post_id FK (no pivot table)
|
|
51
|
+
export default defineLink('post', 'seo')
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**1:N — FK on child table:**
|
|
55
|
+
```typescript
|
|
56
|
+
// src/modules/catalog/links/product-variant.ts
|
|
57
|
+
// Creates variant.product_id FK (no pivot table)
|
|
58
|
+
export default defineLink('product', many('variant'))
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**M:N — Pivot table:**
|
|
62
|
+
```typescript
|
|
63
|
+
// src/modules/catalog/links/product-tag.ts
|
|
64
|
+
// Creates product_tag pivot table
|
|
65
|
+
export default defineLink(many('product'), many('tag'))
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Cross-module links (`src/links/`)
|
|
69
|
+
|
|
70
|
+
For entities in **different modules**. Always creates a pivot table (modules cannot share FK columns):
|
|
71
|
+
|
|
72
|
+
**1:1 — Pivot table:**
|
|
73
|
+
```typescript
|
|
74
|
+
// src/links/customer-profile.ts
|
|
75
|
+
// Creates customer_profile pivot table
|
|
76
|
+
export default defineLink('customer', 'profile')
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**1:N — Pivot table:**
|
|
80
|
+
```typescript
|
|
81
|
+
// src/links/product-inventory.ts
|
|
82
|
+
// Creates product_inventory_item pivot table
|
|
83
|
+
export default defineLink('product', many('inventory_item'))
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**M:N — Pivot table:**
|
|
87
|
+
```typescript
|
|
88
|
+
// src/links/product-collection.ts
|
|
89
|
+
// Creates product_collection pivot table
|
|
90
|
+
export default defineLink(many('product'), many('collection'))
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Summary: all 6 cases
|
|
94
|
+
|
|
95
|
+
| Location | Cardinality | Storage |
|
|
96
|
+
|----------|-------------|---------|
|
|
97
|
+
| Intra-module | 1:1 | FK on child |
|
|
98
|
+
| Intra-module | 1:N | FK on child |
|
|
99
|
+
| Intra-module | M:N | Pivot table |
|
|
100
|
+
| Cross-module | 1:1 | Pivot table |
|
|
101
|
+
| Cross-module | 1:N | Pivot table |
|
|
102
|
+
| Cross-module | M:N | Pivot table |
|
|
103
|
+
|
|
104
|
+
## Extra columns on pivot table
|
|
105
|
+
|
|
106
|
+
For M:N relations (or any cross-module link), you can add extra columns using `field.*`:
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
export default defineLink(many('product'), many('collection'), {
|
|
110
|
+
position: field.number().default(0),
|
|
111
|
+
})
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Extra columns are only supported on pivot tables — not on FK-based links.
|
|
115
|
+
|
|
116
|
+
### Syntax
|
|
117
|
+
|
|
118
|
+
The third argument to `defineLink()` is an object of `field.*` definitions, exactly like `defineModel` properties:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// src/links/customer-address.ts
|
|
122
|
+
export default defineLink('customer', many('address'), {
|
|
123
|
+
type: field.text(),
|
|
124
|
+
is_default: field.boolean().default(false),
|
|
125
|
+
})
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This creates a pivot table `customer_address` with columns: `customer_id`, `address_id`, `type`, `is_default`, plus the standard `id`, `created_at`, `updated_at`, `deleted_at`.
|
|
129
|
+
|
|
130
|
+
### Behavior
|
|
131
|
+
|
|
132
|
+
- **Schema generation**: Extra columns are added to the pivot table's Drizzle schema automatically.
|
|
133
|
+
- **Auto-generated link commands**: When `defineLink()` has extra columns, the auto-generated Zod schema for link commands includes the extra fields. `step.link(a, b, { type: 'shipping', is_default: true })` passes extra column values to the INSERT.
|
|
134
|
+
- **Query graph integration**: When using relation field syntax in `query.graph()` (e.g., `fields: ['*', 'addresses.*']`), extra columns from the pivot table are merged into each target entity in the result. For example, each address object will include `type` and `is_default` from the pivot row.
|
|
135
|
+
|
|
136
|
+
## Usage in workflows
|
|
137
|
+
|
|
138
|
+
After creating both entities in a command, link them:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
workflow: async (input, { step }) => {
|
|
142
|
+
const product = await step.service.catalog.create({ title: 'Widget' })
|
|
143
|
+
const inventory = await step.service.inventory.create({ quantity: 100 })
|
|
144
|
+
|
|
145
|
+
// Link them — IDs are auto-resolved from the creates above
|
|
146
|
+
await step.service.catalog.link.inventoryItem()
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
The framework tracks the last created ID per entity type. `link.inventoryItem()` automatically resolves the Product ID and InventoryItem ID.
|
|
151
|
+
|
|
152
|
+
## Cascade delete
|
|
153
|
+
|
|
154
|
+
With `many('inventory_item')`, deleting the parent (product) automatically cascades:
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
// Deleting a product also soft-deletes linked inventory items
|
|
158
|
+
await step.service.catalog.delete(productId)
|
|
159
|
+
// → Product soft-deleted
|
|
160
|
+
// → All linked InventoryItems soft-deleted
|
|
161
|
+
// → Pivot table entries soft-deleted (cross-module) or FK nulled (intra-module)
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The cascade is determined by `many()` placement — no manual configuration needed.
|
|
165
|
+
|
|
166
|
+
## File locations
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
src/links/{name}.ts # Cross-module links (always pivot)
|
|
170
|
+
src/modules/{mod}/links/{name}.ts # Intra-module links (FK or pivot)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Each file exports a single `defineLink()` as the default export.
|
|
174
|
+
|
|
175
|
+
## Validation errors
|
|
176
|
+
|
|
177
|
+
| Error | Cause | Fix |
|
|
178
|
+
|-------|-------|-----|
|
|
179
|
+
| `Link requires exactly two entities` | Missing second argument | Use `defineLink('a', 'b')` or `defineLink('a', many('b'))` |
|
|
180
|
+
| `Link between "X" and "Y" is already defined` | Duplicate link | Remove the duplicate file |
|
|
181
|
+
| `No link defined between "X" and "Y"` | Missing link definition | Create a file in `src/links/` with `defineLink()` |
|
|
182
|
+
| `Cannot link: no X created yet` | Link before create | Call `step.service.MODULE.create()` before linking |
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Agents — defineAgent()
|
|
2
|
+
|
|
3
|
+
## What is an agent
|
|
4
|
+
|
|
5
|
+
An agent is a **typed AI call** that you can use as a step in your workflows. It has a contract: typed input (Zod), typed output (Zod), and instructions. The LLM is forced to return the output schema via `generateObject()`.
|
|
6
|
+
|
|
7
|
+
In a workflow, the agent result is **checkpointed** — if the workflow crashes after the agent step, the result is recovered from checkpoint (no re-call to the LLM).
|
|
8
|
+
|
|
9
|
+
## defineAgent()
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// src/agents/categorize-product.ts
|
|
13
|
+
export default defineAgent({
|
|
14
|
+
name: 'categorize-product',
|
|
15
|
+
description: 'Categorize a product into a department',
|
|
16
|
+
input: z.object({
|
|
17
|
+
title: z.string(),
|
|
18
|
+
description: z.string().optional(),
|
|
19
|
+
}),
|
|
20
|
+
output: z.object({
|
|
21
|
+
category: z.enum(['electronics', 'clothing', 'food', 'home', 'other']),
|
|
22
|
+
confidence: z.number().min(0).max(1),
|
|
23
|
+
reasoning: z.string(),
|
|
24
|
+
}),
|
|
25
|
+
instructions: (input) =>
|
|
26
|
+
`Categorize this product: "${input.title}". Description: "${input.description ?? 'none'}".`,
|
|
27
|
+
system: 'You are a product categorization expert.',
|
|
28
|
+
temperature: 0,
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Required fields:**
|
|
33
|
+
- `name` — Unique agent identifier (kebab-case)
|
|
34
|
+
- `description` — What this agent does
|
|
35
|
+
- `input` — Zod schema for the input (validated before the LLM call)
|
|
36
|
+
- `output` — Zod schema for the output (the LLM is forced to return this shape)
|
|
37
|
+
- `instructions` — Function that receives `input` directly and returns the prompt string
|
|
38
|
+
|
|
39
|
+
**Optional:**
|
|
40
|
+
- `system` — System prompt
|
|
41
|
+
- `temperature` — 0 = deterministic (default), 1 = creative
|
|
42
|
+
- `maxTokens` — Max response tokens
|
|
43
|
+
- `model` — Override model (e.g., `'gpt-4o'`, `'claude-sonnet-4-20250514'`)
|
|
44
|
+
|
|
45
|
+
## Usage in commands
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
// src/commands/import-product.ts
|
|
49
|
+
export default defineCommand({
|
|
50
|
+
name: 'import-product',
|
|
51
|
+
description: 'Import and auto-categorize a product',
|
|
52
|
+
input: z.object({
|
|
53
|
+
title: z.string(),
|
|
54
|
+
description: z.string().optional(),
|
|
55
|
+
price: z.number(),
|
|
56
|
+
}),
|
|
57
|
+
workflow: async (input, { step }) => {
|
|
58
|
+
// Create the product
|
|
59
|
+
const product = await step.service.catalog.create({
|
|
60
|
+
title: input.title,
|
|
61
|
+
description: input.description,
|
|
62
|
+
price: input.price,
|
|
63
|
+
status: 'draft',
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
// AI categorization — typed input/output, checkpointed
|
|
67
|
+
const { category, confidence } = await step.agent.categorizeProduct({
|
|
68
|
+
title: input.title,
|
|
69
|
+
description: input.description,
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
// Use the AI result
|
|
73
|
+
if (confidence > 0.8) {
|
|
74
|
+
await step.service.catalog.update(product.id, { category })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return { product, category, confidence }
|
|
78
|
+
},
|
|
79
|
+
})
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`step.agent.categorizeProduct()` is:
|
|
83
|
+
- **Typed** — input and output are known by autocomplete (from the Zod schemas)
|
|
84
|
+
- **Checkpointed** — if the workflow crashes after this step, the LLM result is recovered
|
|
85
|
+
- **Validated** — input is Zod-checked before calling the LLM, output is forced by `generateObject()`
|
|
86
|
+
- **No compensation** — LLM calls are read-only, nothing to undo
|
|
87
|
+
|
|
88
|
+
## AI provider configuration
|
|
89
|
+
|
|
90
|
+
Set the provider via environment variable:
|
|
91
|
+
|
|
92
|
+
| Variable | Provider | Default model |
|
|
93
|
+
|----------|----------|--------------|
|
|
94
|
+
| `ANTHROPIC_API_KEY` | Anthropic | claude-sonnet-4-20250514 |
|
|
95
|
+
| `OPENAI_API_KEY` | OpenAI | gpt-4o |
|
|
96
|
+
| `GOOGLE_AI_API_KEY` | Google | gemini-2.0-flash |
|
|
97
|
+
| `MISTRAL_API_KEY` | Mistral | mistral-large-latest |
|
|
98
|
+
|
|
99
|
+
Set `MANTA_AI_PROVIDER` to choose which provider (default: `anthropic`).
|
|
100
|
+
|
|
101
|
+
## File location
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
src/agents/{name}.ts
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Each file exports a single `defineAgent()` as the default export. Auto-discovered at boot.
|
|
108
|
+
|
|
109
|
+
## How it works under the hood
|
|
110
|
+
|
|
111
|
+
1. `step.agent.categorizeProduct(input)` resolves the agent definition from the registry
|
|
112
|
+
2. Input is validated against the agent's Zod `input` schema
|
|
113
|
+
3. `instructions(input)` generates the prompt string
|
|
114
|
+
4. `generateObject()` from Vercel AI SDK calls the LLM with the `output` Zod schema
|
|
115
|
+
5. The LLM is forced to return valid JSON matching the schema
|
|
116
|
+
6. Result is checkpointed via `runStep()` (same as all other steps)
|
|
117
|
+
7. On workflow retry, the checkpoint is returned directly (no LLM re-call)
|
|
118
|
+
|
|
119
|
+
## Validation errors
|
|
120
|
+
|
|
121
|
+
| Error | Cause | Fix |
|
|
122
|
+
|-------|-------|-----|
|
|
123
|
+
| `Agent name is required` | Missing name | Add `name: 'my-agent'` |
|
|
124
|
+
| `Agent "X" requires an output Zod schema` | Missing output | Add `output: z.object({...})` |
|
|
125
|
+
| `Agent "X" instructions must be a function` | String instead of function | Change to `instructions: (input) => '...'` |
|
|
126
|
+
| `Agent "X" not found` | Typo or missing file | Create `src/agents/X.ts` with `defineAgent()` |
|
|
127
|
+
| `step.agent requires ANTHROPIC_API_KEY` | No API key set | Set the environment variable |
|
|
128
|
+
|
|
129
|
+
## The primitives (updated)
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
defineModel → Entity
|
|
133
|
+
defineService → Mutations (auto-compensated)
|
|
134
|
+
defineCommand → Workflow
|
|
135
|
+
defineQuery → Read endpoint (CQRS read side)
|
|
136
|
+
defineQueryGraph → Graph endpoint (flexible reads)
|
|
137
|
+
defineSubscriber → Event reaction
|
|
138
|
+
defineJob → Cron
|
|
139
|
+
defineLink → Relation
|
|
140
|
+
defineUser → Auth + CRUD + middleware (auto-generated)
|
|
141
|
+
defineAgent → AI
|
|
142
|
+
```
|
package/docs/10-spa.md
ADDED
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# SPA, Dashboard & SDK
|
|
2
|
+
|
|
3
|
+
## SPA — Auto-detected from filesystem
|
|
4
|
+
|
|
5
|
+
SPAs are auto-detected from `src/spa/{name}/`. No boilerplate — just pages.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
src/spa/admin/
|
|
9
|
+
├── config.ts # defineSpa() — navigation, title, branding
|
|
10
|
+
├── pages/
|
|
11
|
+
│ ├── page.tsx # → /admin/ (React page)
|
|
12
|
+
│ ├── products/
|
|
13
|
+
│ │ └── page.ts # → /admin/products (definePage spec)
|
|
14
|
+
│ ├── products/[id]/
|
|
15
|
+
│ │ └── page.ts # → /admin/products/:id (definePage spec)
|
|
16
|
+
│ │ └── edit/
|
|
17
|
+
│ │ └── page.ts # → /admin/products/:id/edit (defineForm spec)
|
|
18
|
+
│ ├── products/create/
|
|
19
|
+
│ │ └── page.ts # → /admin/products/create (defineForm spec)
|
|
20
|
+
│ └── settings/
|
|
21
|
+
│ └── page.tsx # → /admin/settings (React page)
|
|
22
|
+
├── blocks/ # Custom blocks (auto-discovered)
|
|
23
|
+
│ └── inventory-matrix.tsx
|
|
24
|
+
└── components/ # Local components (imported by blocks/pages)
|
|
25
|
+
└── product-card.tsx
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
**Auto-discovered:**
|
|
29
|
+
- `config.ts` → SPA configuration (navigation, branding, settings)
|
|
30
|
+
- `pages/` → file-based routing
|
|
31
|
+
- `blocks/` → custom blocks
|
|
32
|
+
|
|
33
|
+
**Two page formats:**
|
|
34
|
+
- **`.ts`** — exports `definePage()` or `defineForm()` spec (declarative, no React)
|
|
35
|
+
- **`.tsx`** — exports a React component (full control, for complex cases)
|
|
36
|
+
|
|
37
|
+
**Defaults**: `@mantajs/dashboard` shell + `@mantajs/ui` preset. Override in config if needed:
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
// manta.config.ts — optional, only for overrides
|
|
41
|
+
export default defineConfig({
|
|
42
|
+
spa: {
|
|
43
|
+
admin: { preset: '@mantajs/ui-preset-dark' },
|
|
44
|
+
vendor: { dashboard: null }, // no shell, custom SPA
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## SPA Configuration — defineSpa()
|
|
52
|
+
|
|
53
|
+
Define navigation, branding, and settings in `src/spa/{name}/config.ts`. See [Dashboard](./17-dashboard.md) for the full reference.
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
// src/spa/admin/config.ts
|
|
57
|
+
import { defineSpa } from '@mantajs/dashboard'
|
|
58
|
+
|
|
59
|
+
export default defineSpa({
|
|
60
|
+
title: 'Commerce Admin',
|
|
61
|
+
logo: '/logo.svg',
|
|
62
|
+
favicon: '/favicon.ico',
|
|
63
|
+
|
|
64
|
+
navigation: [
|
|
65
|
+
{ icon: 'Tag', label: 'Products', to: '/products' },
|
|
66
|
+
{ icon: 'Users', label: 'Customers', to: '/customers', items: [
|
|
67
|
+
{ label: 'Groups', to: '/customer-groups' },
|
|
68
|
+
]},
|
|
69
|
+
],
|
|
70
|
+
|
|
71
|
+
settings: [
|
|
72
|
+
{ icon: 'Store', label: 'Store Details', to: '/settings/store' },
|
|
73
|
+
{ icon: 'Key', label: 'API Keys', to: '/settings/api-keys' },
|
|
74
|
+
],
|
|
75
|
+
})
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Declarative Pages — definePage() & defineForm()
|
|
81
|
+
|
|
82
|
+
The preferred approach. Pages are pure data specs — no React, no JSX. See [Dashboard](./17-dashboard.md) for the full reference.
|
|
83
|
+
|
|
84
|
+
### Listing page
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
// src/spa/admin/pages/customers/page.ts
|
|
88
|
+
import { definePage } from '@mantajs/dashboard'
|
|
89
|
+
|
|
90
|
+
export default definePage({
|
|
91
|
+
header: { title: 'Customers', actions: ['create'] },
|
|
92
|
+
main: [
|
|
93
|
+
{
|
|
94
|
+
type: 'DataTable',
|
|
95
|
+
query: {
|
|
96
|
+
graph: {
|
|
97
|
+
entity: 'customer',
|
|
98
|
+
fields: ['email', 'first_name', 'last_name', 'created_at'],
|
|
99
|
+
pagination: { limit: 20 },
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
columns: [
|
|
103
|
+
{ key: 'email', label: 'Email' },
|
|
104
|
+
{ key: 'first_name', label: 'First Name' },
|
|
105
|
+
{ key: 'last_name', label: 'Last Name' },
|
|
106
|
+
{ key: 'created_at', label: 'Joined', format: 'date' },
|
|
107
|
+
],
|
|
108
|
+
searchable: true,
|
|
109
|
+
navigateTo: '/customers/:id',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
})
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Detail page
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
// src/spa/admin/pages/customers/[id]/page.ts
|
|
119
|
+
import { definePage } from '@mantajs/dashboard'
|
|
120
|
+
|
|
121
|
+
export default definePage({
|
|
122
|
+
header: { titleField: 'email', actions: ['edit', 'delete'] },
|
|
123
|
+
main: [
|
|
124
|
+
{
|
|
125
|
+
type: 'InfoCard',
|
|
126
|
+
title: 'General',
|
|
127
|
+
query: {
|
|
128
|
+
graph: {
|
|
129
|
+
entity: 'customer',
|
|
130
|
+
fields: ['first_name', 'last_name', 'email', 'phone'],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
sidebar: [
|
|
136
|
+
{
|
|
137
|
+
type: 'InfoCard',
|
|
138
|
+
title: 'Dates',
|
|
139
|
+
query: {
|
|
140
|
+
graph: {
|
|
141
|
+
entity: 'customer',
|
|
142
|
+
fields: ['created_at', 'updated_at'],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
fields: [
|
|
146
|
+
{ key: 'created_at', label: 'Created', display: 'date' },
|
|
147
|
+
{ key: 'updated_at', label: 'Updated', display: 'date' },
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
})
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Create form
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
// src/spa/admin/pages/customers/create/page.ts
|
|
158
|
+
import { defineForm } from '@mantajs/dashboard'
|
|
159
|
+
|
|
160
|
+
export default defineForm({
|
|
161
|
+
title: 'Create Customer',
|
|
162
|
+
command: 'create-customer',
|
|
163
|
+
fields: [
|
|
164
|
+
{ key: 'email', label: 'Email', type: 'text', required: true },
|
|
165
|
+
{ key: 'first_name', label: 'First Name', type: 'text' },
|
|
166
|
+
{ key: 'last_name', label: 'Last Name', type: 'text' },
|
|
167
|
+
{ key: 'phone', label: 'Phone', type: 'text' },
|
|
168
|
+
],
|
|
169
|
+
})
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Edit form
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
// src/spa/admin/pages/customers/[id]/edit/page.ts
|
|
176
|
+
import { defineForm } from '@mantajs/dashboard'
|
|
177
|
+
|
|
178
|
+
export default defineForm({
|
|
179
|
+
title: 'Edit Customer',
|
|
180
|
+
command: 'update-customer',
|
|
181
|
+
query: {
|
|
182
|
+
graph: {
|
|
183
|
+
entity: 'customer',
|
|
184
|
+
fields: ['first_name', 'last_name', 'email', 'phone'],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
fields: [
|
|
188
|
+
{ key: 'first_name', label: 'First Name', type: 'text' },
|
|
189
|
+
{ key: 'last_name', label: 'Last Name', type: 'text' },
|
|
190
|
+
{ key: 'email', label: 'Email', type: 'text', required: true },
|
|
191
|
+
{ key: 'phone', label: 'Phone', type: 'text' },
|
|
192
|
+
],
|
|
193
|
+
})
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## React Pages — Full Control
|
|
199
|
+
|
|
200
|
+
For complex pages that need full React control (custom interactions, animations, etc.), use `.tsx` files:
|
|
201
|
+
|
|
202
|
+
```tsx
|
|
203
|
+
// src/spa/admin/pages/dashboard/page.tsx
|
|
204
|
+
import { useGraphQuery, useCommand } from '@mantajs/sdk'
|
|
205
|
+
import { Button, Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Badge } from '@mantajs/ui'
|
|
206
|
+
import { useNavigate } from 'react-router-dom'
|
|
207
|
+
|
|
208
|
+
export default function DashboardPage() {
|
|
209
|
+
const { data: orders } = useGraphQuery({ entity: 'order', pagination: { limit: 5 } })
|
|
210
|
+
// ... full React control
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Custom Blocks
|
|
217
|
+
|
|
218
|
+
Blocks are standard React components in `src/spa/{name}/blocks/`. Auto-discovered, available in `definePage()` specs.
|
|
219
|
+
|
|
220
|
+
```tsx
|
|
221
|
+
// src/spa/admin/blocks/inventory-matrix.tsx
|
|
222
|
+
import { useGraphQuery } from '@mantajs/sdk'
|
|
223
|
+
|
|
224
|
+
interface InventoryMatrixProps {
|
|
225
|
+
query: Parameters<typeof useGraphQuery>[0]
|
|
226
|
+
warehouses?: string[]
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export default function InventoryMatrix({ query, warehouses = ['default'] }: InventoryMatrixProps) {
|
|
230
|
+
const { data } = useGraphQuery(query)
|
|
231
|
+
// ... render matrix
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Usage in a page spec:
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
main: [
|
|
239
|
+
{ type: 'InventoryMatrix', query: { graph: { entity: 'product', relations: ['variant'] } }, warehouses: ['paris'] },
|
|
240
|
+
]
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Override framework blocks**: Create a block with the same kebab-case filename as a framework block (e.g., `blocks/info-card.tsx` overrides the built-in `InfoCard`).
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Component Reference
|
|
248
|
+
|
|
249
|
+
### @mantajs/dashboard — blocks (used in definePage specs)
|
|
250
|
+
|
|
251
|
+
| Block | Purpose |
|
|
252
|
+
|-------|---------|
|
|
253
|
+
| `DataTable` | List with columns, search, sort, filter, pagination |
|
|
254
|
+
| `InfoCard` | Key-value card with fields |
|
|
255
|
+
| `RelationTable` | Related entities table |
|
|
256
|
+
| `MediaCard` | Image/file gallery |
|
|
257
|
+
| `StatsCard` | Metric cards |
|
|
258
|
+
| `PageHeader` | Title, status badge, actions (used via `header` shortcut) |
|
|
259
|
+
|
|
260
|
+
### @mantajs/dashboard — patterns (used in React pages)
|
|
261
|
+
|
|
262
|
+
| Component | Purpose |
|
|
263
|
+
|-----------|---------|
|
|
264
|
+
| `FocusModal` | Full-width modal with header/footer for forms |
|
|
265
|
+
| `EntitySelect` | Searchable selection table in a modal |
|
|
266
|
+
| `MultiStepForm` | Multi-step wizard with stepper |
|
|
267
|
+
| `EditableTable` | Inline editable table (Excel-like) |
|
|
268
|
+
| `BulkActionBar` | Floating action bar for multi-select |
|
|
269
|
+
| `ConfirmDialog` | Confirmation dialog for destructive actions |
|
|
270
|
+
|
|
271
|
+
### @mantajs/ui (shadcn/ui — 26 components)
|
|
272
|
+
|
|
273
|
+
| Category | Components |
|
|
274
|
+
|----------|-----------|
|
|
275
|
+
| **Form** | Input, Label, Select, Textarea, Checkbox, Switch, RadioGroup |
|
|
276
|
+
| **Layout** | Card, Separator, Tabs, ScrollArea |
|
|
277
|
+
| **Feedback** | Alert, Badge, Skeleton, Progress, Toaster/toast |
|
|
278
|
+
| **Overlay** | Dialog, Sheet, AlertDialog, Popover, Tooltip, DropdownMenu |
|
|
279
|
+
| **Data** | Table, Pagination |
|
|
280
|
+
| **Navigation** | Button, Command (Cmd+K) |
|
|
281
|
+
| **Display** | Avatar |
|
|
282
|
+
|
|
283
|
+
### @mantajs/sdk (hooks — 4 hooks + client)
|
|
284
|
+
|
|
285
|
+
| Hook | Purpose |
|
|
286
|
+
|------|---------|
|
|
287
|
+
| `useCommand('name')` | Execute a command (mutation) — autocomplete |
|
|
288
|
+
| `useQuery('name', params)` | Execute a named query — autocomplete |
|
|
289
|
+
| `useGraphQuery({ entity })` | Graph query (flexible reads) — autocomplete |
|
|
290
|
+
| `useAuth()` | Login, logout, me, isAuthenticated |
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## AI Agent — Setup & Configuration
|
|
295
|
+
|
|
296
|
+
The dashboard includes a built-in AI conversational agent that can create pages, modify components, and query data through the query graph.
|
|
297
|
+
|
|
298
|
+
### Setup
|
|
299
|
+
|
|
300
|
+
1. Set environment variables:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
# .env
|
|
304
|
+
MANTA_AI_PROVIDER=anthropic # or 'openai'
|
|
305
|
+
ANTHROPIC_API_KEY=sk-ant-... # your API key
|
|
306
|
+
# MANTA_AI_MODEL=claude-sonnet-4-20250514 # optional model override
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
2. The AI panel appears automatically in the dashboard shell (bottom-right sparkle icon). It's enabled when `ANTHROPIC_API_KEY` (or `OPENAI_API_KEY` for OpenAI) is set.
|
|
310
|
+
|
|
311
|
+
### What the AI can do
|
|
312
|
+
|
|
313
|
+
| Capability | How |
|
|
314
|
+
|-----------|-----|
|
|
315
|
+
| **Create pages** | AI generates `definePage()` / `defineForm()` specs |
|
|
316
|
+
| **Modify blocks** | AI updates block props (columns, filters, etc.) |
|
|
317
|
+
| **Query data** | AI uses the query graph to browse entities |
|
|
318
|
+
| **Navigate** | AI adds/removes navigation items in the sidebar |
|
|
319
|
+
|
|
320
|
+
### Providers
|
|
321
|
+
|
|
322
|
+
| Provider | Env var | Default model |
|
|
323
|
+
|----------|---------|--------------|
|
|
324
|
+
| Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` |
|
|
325
|
+
| OpenAI | `OPENAI_API_KEY` | `gpt-4o` |
|
|
326
|
+
|
|
327
|
+
Set `MANTA_AI_PROVIDER` to switch providers. Default: `anthropic`.
|