@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
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// SnapshotRepository — auto-snapshot wrapper for TypedRepository.
|
|
2
|
+
// Intercepts mutations (update, delete, softDelete, create) and captures
|
|
3
|
+
// state before each operation. On rollback(), reverses all operations.
|
|
4
|
+
//
|
|
5
|
+
// This eliminates manual compensation in service methods — the framework
|
|
6
|
+
// handles undo automatically.
|
|
7
|
+
/**
|
|
8
|
+
* Wraps a TypedRepository with automatic snapshotting of mutations.
|
|
9
|
+
* Every update/delete/softDelete captures the entity state before mutation.
|
|
10
|
+
* Every create captures the created ID for deletion on rollback.
|
|
11
|
+
*
|
|
12
|
+
* Call `rollback()` to undo all mutations in reverse order.
|
|
13
|
+
* Call `clearSnapshots()` after a successful operation.
|
|
14
|
+
*/
|
|
15
|
+
export class SnapshotRepository {
|
|
16
|
+
_inner;
|
|
17
|
+
_snapshots = [];
|
|
18
|
+
constructor(_inner) {
|
|
19
|
+
this._inner = _inner;
|
|
20
|
+
}
|
|
21
|
+
// ── Reads — passthrough ─────────────────────────────────────────────
|
|
22
|
+
find(options) {
|
|
23
|
+
return this._inner.find(options);
|
|
24
|
+
}
|
|
25
|
+
findAndCount(options) {
|
|
26
|
+
return this._inner.findAndCount(options);
|
|
27
|
+
}
|
|
28
|
+
// ── Mutations — auto-snapshot before execution ──────────────────────
|
|
29
|
+
async create(data) {
|
|
30
|
+
const result = await this._inner.create(data);
|
|
31
|
+
// Track created IDs for rollback (delete on compensation)
|
|
32
|
+
const items = Array.isArray(result) ? result : [result];
|
|
33
|
+
for (const item of items) {
|
|
34
|
+
this._snapshots.push({ type: 'create', id: item.id });
|
|
35
|
+
}
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
async update(data) {
|
|
39
|
+
// Snapshot: fetch entity before mutation
|
|
40
|
+
const [before] = await this._inner.find({ where: { id: data.id } });
|
|
41
|
+
if (before) {
|
|
42
|
+
this._snapshots.push({ type: 'update', before: before, id: data.id });
|
|
43
|
+
}
|
|
44
|
+
return this._inner.update(data);
|
|
45
|
+
}
|
|
46
|
+
async delete(ids) {
|
|
47
|
+
// Snapshot: fetch all entities before deletion
|
|
48
|
+
const idArray = Array.isArray(ids) ? ids : [ids];
|
|
49
|
+
for (const id of idArray) {
|
|
50
|
+
const [before] = await this._inner.find({ where: { id }, withDeleted: true });
|
|
51
|
+
if (before) {
|
|
52
|
+
this._snapshots.push({ type: 'delete', before: before, id });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return this._inner.delete(ids);
|
|
56
|
+
}
|
|
57
|
+
async softDelete(ids) {
|
|
58
|
+
// Snapshot: fetch all entities before soft-deletion
|
|
59
|
+
const idArray = Array.isArray(ids) ? ids : [ids];
|
|
60
|
+
for (const id of idArray) {
|
|
61
|
+
const [before] = await this._inner.find({ where: { id } });
|
|
62
|
+
if (before) {
|
|
63
|
+
this._snapshots.push({ type: 'softDelete', before: before, id });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return this._inner.softDelete(ids);
|
|
67
|
+
}
|
|
68
|
+
async restore(ids) {
|
|
69
|
+
return this._inner.restore(ids);
|
|
70
|
+
}
|
|
71
|
+
// Bulk upsert — bypasses compensation tracking (mixed create/update not compensable)
|
|
72
|
+
async upsertWithReplace(data, replaceFields, conflictTarget) {
|
|
73
|
+
return this._inner.upsertWithReplace(data, replaceFields, conflictTarget);
|
|
74
|
+
}
|
|
75
|
+
// ── Compensation ────────────────────────────────────────────────────
|
|
76
|
+
/** Undo all mutations in reverse order. */
|
|
77
|
+
async rollback() {
|
|
78
|
+
const reversed = [...this._snapshots].reverse();
|
|
79
|
+
for (const snap of reversed) {
|
|
80
|
+
switch (snap.type) {
|
|
81
|
+
case 'update':
|
|
82
|
+
if (snap.before) {
|
|
83
|
+
await this._inner.update(snap.before);
|
|
84
|
+
}
|
|
85
|
+
break;
|
|
86
|
+
case 'delete':
|
|
87
|
+
if (snap.before) {
|
|
88
|
+
await this._inner.create(snap.before);
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
case 'softDelete':
|
|
92
|
+
if (snap.id) {
|
|
93
|
+
await this._inner.restore(snap.id);
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
case 'create':
|
|
97
|
+
if (snap.id) {
|
|
98
|
+
await this._inner.delete(snap.id);
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this._snapshots = [];
|
|
104
|
+
}
|
|
105
|
+
/** Clear snapshots after successful completion (no rollback needed). */
|
|
106
|
+
clearSnapshots() {
|
|
107
|
+
this._snapshots = [];
|
|
108
|
+
}
|
|
109
|
+
/** Check if there are pending snapshots. */
|
|
110
|
+
get hasSnapshots() {
|
|
111
|
+
return this._snapshots.length > 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=snapshot-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-repository.js","sourceRoot":"","sources":["../../src/service/snapshot-repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { IMessageAggregator } from '../events/types';
|
|
2
|
+
/**
|
|
3
|
+
* A service class constructor with model introspection data.
|
|
4
|
+
* Used by createService() to attach $modelObjects to the class.
|
|
5
|
+
*/
|
|
6
|
+
export interface IntrospectableServiceConstructor {
|
|
7
|
+
$modelObjects?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Prototype extensions added by createService() for Medusa compatibility.
|
|
11
|
+
* These methods are dynamically attached to GeneratedService.prototype.
|
|
12
|
+
*/
|
|
13
|
+
export interface GeneratedServicePrototype {
|
|
14
|
+
emitEvents_?: (groupedEvents: Record<string, unknown[]>) => Promise<void>;
|
|
15
|
+
aggregatedEvents?: (args: {
|
|
16
|
+
action?: unknown;
|
|
17
|
+
object?: unknown;
|
|
18
|
+
eventName?: unknown;
|
|
19
|
+
source?: unknown;
|
|
20
|
+
data?: unknown;
|
|
21
|
+
context?: {
|
|
22
|
+
messageAggregator?: IMessageAggregator;
|
|
23
|
+
};
|
|
24
|
+
}) => void;
|
|
25
|
+
interceptEntityMutationEvents?: (event: string, args: OrmEventArgs, context: unknown) => void;
|
|
26
|
+
MedusaContextIndex_?: Record<string, number>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ORM event arguments — structured type for MikroORM/Drizzle afterCreate/afterUpdate/afterDelete hooks.
|
|
30
|
+
*/
|
|
31
|
+
export interface OrmEventArgs {
|
|
32
|
+
entity?: Record<string, unknown>;
|
|
33
|
+
changeSet?: {
|
|
34
|
+
entity?: Record<string, unknown>;
|
|
35
|
+
originalEntity?: Record<string, unknown>;
|
|
36
|
+
name?: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD;;;GAGG;AACH,MAAM,WAAW,gCAAgC;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE;QACxB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE;YAAE,iBAAiB,CAAC,EAAE,kBAAkB,CAAA;SAAE,CAAA;KACrD,KAAK,IAAI,CAAA;IACV,6BAA6B,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7F,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACxC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/service/types.ts"],"names":[],"mappings":"AAAA,6DAA6D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface StrictModeContext {
|
|
2
|
+
strict: boolean;
|
|
3
|
+
}
|
|
4
|
+
export interface RouteConflictInfo {
|
|
5
|
+
path: string;
|
|
6
|
+
method: string;
|
|
7
|
+
source1: string;
|
|
8
|
+
source2: string;
|
|
9
|
+
}
|
|
10
|
+
export interface LinkLocation {
|
|
11
|
+
id: string;
|
|
12
|
+
path: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function checkRouteConflicts(routes: Array<{
|
|
15
|
+
method: string;
|
|
16
|
+
path: string;
|
|
17
|
+
source: string;
|
|
18
|
+
}>, strict: boolean): {
|
|
19
|
+
conflicts: RouteConflictInfo[];
|
|
20
|
+
warnings: string[];
|
|
21
|
+
};
|
|
22
|
+
export declare function checkUnboundedRelations(opts: {
|
|
23
|
+
dangerouslyUnboundedRelations?: boolean;
|
|
24
|
+
}, strict: boolean): {
|
|
25
|
+
allowed: boolean;
|
|
26
|
+
warning?: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function getEntityThreshold(strict: boolean, configuredMax?: number): number;
|
|
29
|
+
export declare function checkLinkLocations(links: LinkLocation[], strict: boolean): {
|
|
30
|
+
valid: LinkLocation[];
|
|
31
|
+
invalid: LinkLocation[];
|
|
32
|
+
warnings: string[];
|
|
33
|
+
};
|
|
34
|
+
export declare function checkAutoDiscovery(strict: boolean, hasManifest: boolean): {
|
|
35
|
+
useAutoDiscovery: boolean;
|
|
36
|
+
warning?: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function checkEventNameAutoGeneration(strict: boolean, hasExplicitEvents: boolean): {
|
|
39
|
+
autoGenerate: boolean;
|
|
40
|
+
warning?: string;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/strict-mode/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAGD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC/D,MAAM,EAAE,OAAO,GACd;IAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA8BxD;AAGD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,6BAA6B,CAAC,EAAE,OAAO,CAAA;CAAE,EACjD,MAAM,EAAE,OAAO,GACd;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAQxC;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAGlF;AAGD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EAAE,EACrB,MAAM,EAAE,OAAO,GACd;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAwBxE;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,WAAW,EAAE,OAAO,GACnB;IAAE,gBAAgB,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAQjD;AAGD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,OAAO,EACf,iBAAiB,EAAE,OAAO,GACzB;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAQ7C"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// SPEC-140 — Strict mode validation
|
|
2
|
+
// Disables implicit conventions and enforces explicit declarations
|
|
3
|
+
import { MantaError } from '../errors/manta-error';
|
|
4
|
+
// SM-01 -- Route conflict detection
|
|
5
|
+
export function checkRouteConflicts(routes, strict) {
|
|
6
|
+
const conflicts = [];
|
|
7
|
+
const warnings = [];
|
|
8
|
+
const seen = new Map(); // "METHOD /path" -> source
|
|
9
|
+
for (const route of routes) {
|
|
10
|
+
const key = `${route.method} ${route.path}`;
|
|
11
|
+
const existing = seen.get(key);
|
|
12
|
+
if (existing) {
|
|
13
|
+
const conflict = {
|
|
14
|
+
path: route.path,
|
|
15
|
+
method: route.method,
|
|
16
|
+
source1: existing,
|
|
17
|
+
source2: route.source,
|
|
18
|
+
};
|
|
19
|
+
conflicts.push(conflict);
|
|
20
|
+
if (strict) {
|
|
21
|
+
throw new MantaError('INVALID_STATE', `Route conflict: ${key} registered by both "${existing}" and "${route.source}". Strict mode forbids route conflicts.`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
warnings.push(`Route conflict: ${key} — "${route.source}" overrides "${existing}" (last-wins)`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
seen.set(key, route.source); // last-wins in normal mode
|
|
28
|
+
}
|
|
29
|
+
return { conflicts, warnings };
|
|
30
|
+
}
|
|
31
|
+
// SM-02 -- dangerouslyUnboundedRelations
|
|
32
|
+
export function checkUnboundedRelations(opts, strict) {
|
|
33
|
+
if (opts.dangerouslyUnboundedRelations) {
|
|
34
|
+
if (strict) {
|
|
35
|
+
throw new MantaError('INVALID_STATE', 'dangerouslyUnboundedRelations is forbidden in strict mode');
|
|
36
|
+
}
|
|
37
|
+
return { allowed: true, warning: 'dangerouslyUnboundedRelations is enabled — nested relations are unbounded' };
|
|
38
|
+
}
|
|
39
|
+
return { allowed: false };
|
|
40
|
+
}
|
|
41
|
+
// SM-03 -- Entity threshold
|
|
42
|
+
export function getEntityThreshold(strict, configuredMax) {
|
|
43
|
+
if (configuredMax !== undefined)
|
|
44
|
+
return configuredMax;
|
|
45
|
+
return strict ? 5000 : 10000;
|
|
46
|
+
}
|
|
47
|
+
// SM-04 -- Link outside src/links/
|
|
48
|
+
export function checkLinkLocations(links, strict) {
|
|
49
|
+
const valid = [];
|
|
50
|
+
const invalid = [];
|
|
51
|
+
const warnings = [];
|
|
52
|
+
for (const link of links) {
|
|
53
|
+
// Links must be in src/links/ directory
|
|
54
|
+
const normalized = link.path.replace(/\\/g, '/');
|
|
55
|
+
if (normalized.includes('/src/links/') || normalized.includes('/links/')) {
|
|
56
|
+
valid.push(link);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
invalid.push(link);
|
|
60
|
+
if (strict) {
|
|
61
|
+
throw new MantaError('INVALID_STATE', `Link "${link.id}" at "${link.path}" is outside src/links/. Strict mode requires all links in src/links/.`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
warnings.push(`Link "${link.id}" at "${link.path}" is outside src/links/ — silently ignored`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { valid, invalid, warnings };
|
|
69
|
+
}
|
|
70
|
+
// SM-05 -- Auto-discovery vs manifest
|
|
71
|
+
export function checkAutoDiscovery(strict, hasManifest) {
|
|
72
|
+
if (strict && !hasManifest) {
|
|
73
|
+
throw new MantaError('INVALID_STATE', 'Strict mode requires a build manifest. Auto-discovery is disabled in strict mode. Run `manta build` first.');
|
|
74
|
+
}
|
|
75
|
+
return { useAutoDiscovery: !strict };
|
|
76
|
+
}
|
|
77
|
+
// SM-06 -- Event name auto-generation
|
|
78
|
+
export function checkEventNameAutoGeneration(strict, hasExplicitEvents) {
|
|
79
|
+
if (strict && !hasExplicitEvents) {
|
|
80
|
+
throw new MantaError('INVALID_STATE', 'Strict mode requires explicit event name declarations. Auto-generation is disabled.');
|
|
81
|
+
}
|
|
82
|
+
return { autoGenerate: !strict };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strict-mode/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { MantaCommands } from '../command/types';
|
|
2
|
+
import type { MantaEventMap, Message } from '../events/types';
|
|
3
|
+
import type { ICachePort } from '../ports/cache';
|
|
4
|
+
import type { IEventBusPort } from '../ports/event-bus';
|
|
5
|
+
import type { ILoggerPort } from '../ports/logger';
|
|
6
|
+
/**
|
|
7
|
+
* Subscriber handler function type (legacy — receives raw Message).
|
|
8
|
+
*/
|
|
9
|
+
export type SubscriberHandler<T = unknown> = (event: Message<T>) => Promise<void> | void;
|
|
10
|
+
/**
|
|
11
|
+
* Subscriber configuration for auto-discovery.
|
|
12
|
+
*/
|
|
13
|
+
export interface SubscriberConfig {
|
|
14
|
+
event: string | string[];
|
|
15
|
+
subscriberId?: string;
|
|
16
|
+
context?: {
|
|
17
|
+
subscriberId?: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Subscriber module default export shape.
|
|
22
|
+
*/
|
|
23
|
+
export interface SubscriberExport {
|
|
24
|
+
config: SubscriberConfig;
|
|
25
|
+
handler: SubscriberHandler;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Scoped context passed as arg 2 to subscriber handlers.
|
|
29
|
+
* - `command` — CQRS command callables
|
|
30
|
+
* - `log` — logger instance
|
|
31
|
+
*/
|
|
32
|
+
export interface SubscriberScope {
|
|
33
|
+
command: MantaCommands;
|
|
34
|
+
log: ILoggerPort;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Use SubscriberScope instead. Kept for backward compat.
|
|
38
|
+
*/
|
|
39
|
+
export interface SubscriberContext<T = unknown> {
|
|
40
|
+
event: Message<T>;
|
|
41
|
+
command: MantaCommands;
|
|
42
|
+
log: ILoggerPort;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Typed subscriber definition.
|
|
46
|
+
*
|
|
47
|
+
* Handler receives: (event, { command, log })
|
|
48
|
+
* - arg 1: the incoming Message
|
|
49
|
+
* - arg 2: scoped methods from the framework
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* export default defineSubscriber({
|
|
53
|
+
* event: 'order.placed',
|
|
54
|
+
* handler: async (event, { command }) => {
|
|
55
|
+
* await command.reserveStock({ itemId: event.data.itemId })
|
|
56
|
+
* },
|
|
57
|
+
* })
|
|
58
|
+
*/
|
|
59
|
+
export interface SubscriberDefinition<T = unknown> {
|
|
60
|
+
event: string | string[];
|
|
61
|
+
subscriberId?: string;
|
|
62
|
+
handler: (event: Message<T>, scope: SubscriberScope) => Promise<void> | void;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Define a typed subscriber.
|
|
66
|
+
* When event matches a key in MantaEventMap (populated by codegen), event.data is auto-typed.
|
|
67
|
+
* Handler receives (event, { command, log }) — can only dispatch commands, not access modules directly.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* // String form (preferred) — event name autocompletes from MantaEventMap
|
|
71
|
+
* export default defineSubscriber('order.placed', async (event, { command }) => {
|
|
72
|
+
* await command.reserveStock({ itemId: event.data.itemId })
|
|
73
|
+
* })
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* // Object form — for subscriberId or multi-event
|
|
77
|
+
* export default defineSubscriber({
|
|
78
|
+
* event: ['order.created', 'order.updated'],
|
|
79
|
+
* subscriberId: 'order-sync',
|
|
80
|
+
* handler: async (event, { command }) => { ... },
|
|
81
|
+
* })
|
|
82
|
+
*/
|
|
83
|
+
/** Typed overload — event name from MantaEventMap, data auto-typed. */
|
|
84
|
+
export declare function defineSubscriber<E extends keyof MantaEventMap>(event: E, handler: (event: Message<MantaEventMap[E]>, scope: SubscriberScope) => Promise<void> | void): SubscriberDefinition<MantaEventMap[E]> & {
|
|
85
|
+
__type: 'subscriber';
|
|
86
|
+
};
|
|
87
|
+
/** Typed object overload — event name from MantaEventMap. */
|
|
88
|
+
export declare function defineSubscriber<E extends keyof MantaEventMap>(config: {
|
|
89
|
+
event: E;
|
|
90
|
+
subscriberId?: string;
|
|
91
|
+
handler: (event: Message<MantaEventMap[E]>, scope: SubscriberScope) => Promise<void> | void;
|
|
92
|
+
}): SubscriberDefinition<MantaEventMap[E]> & {
|
|
93
|
+
__type: 'subscriber';
|
|
94
|
+
};
|
|
95
|
+
/** Fallback object overload for unknown events or multi-event subscribers. */
|
|
96
|
+
export declare function defineSubscriber<T = unknown>(config: SubscriberDefinition<T>): SubscriberDefinition<T> & {
|
|
97
|
+
__type: 'subscriber';
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Register a subscriber with the event bus.
|
|
101
|
+
* Convenience wrapper around IEventBusPort.subscribe().
|
|
102
|
+
*/
|
|
103
|
+
export declare function registerSubscriber(eventBus: IEventBusPort, config: SubscriberConfig, handler: SubscriberHandler): void;
|
|
104
|
+
/**
|
|
105
|
+
* makeIdempotent() — wraps a subscriber handler for at-least-once deduplication.
|
|
106
|
+
*
|
|
107
|
+
* Uses ICachePort to track processed events. Default key: `${eventName}:${data.id}`.
|
|
108
|
+
* Default TTL: 24 hours.
|
|
109
|
+
*
|
|
110
|
+
* Usage:
|
|
111
|
+
* const handler = makeIdempotent(cache, async (event) => { ... })
|
|
112
|
+
*/
|
|
113
|
+
export declare function makeIdempotent<T = unknown>(cache: ICachePort, handler: SubscriberHandler<T>, options?: {
|
|
114
|
+
keyFn?: (event: Message<T>) => string;
|
|
115
|
+
ttl?: number;
|
|
116
|
+
}): SubscriberHandler<T>;
|
|
117
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/subscriber/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;AAExF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAA;IACtB,GAAG,EAAE,WAAW,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IACjB,OAAO,EAAE,aAAa,CAAA;IACtB,GAAG,EAAE,WAAW,CAAA;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC/C,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC7E;AAED;;;;;;;;;;;;;;;;;;GAkBG;AAMH,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,aAAa,EAC5D,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAC1F,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAA;AAIpE,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,aAAa,EAAE,MAAM,EAAE;IACtE,KAAK,EAAE,CAAC,CAAA;IACR,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC5F,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAA;AAErE,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,OAAO,EAC1C,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC9B,oBAAoB,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,CAAA;AAgCrD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,IAAI,CAON;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAA;IACrC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GACA,iBAAiB,CAAC,CAAC,CAAC,CA8BtB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// SPEC-034/035 — Subscriber system utilities
|
|
2
|
+
// Subscribers receive (event, { command, log }) — they can ONLY dispatch commands.
|
|
3
|
+
// No direct module access. Every mutation goes through a workflow.
|
|
4
|
+
import { MantaError } from '../errors/manta-error';
|
|
5
|
+
// ── Implementation ───────────────────────────────────────────────────
|
|
6
|
+
export function defineSubscriber(eventOrConfig, handler) {
|
|
7
|
+
// String form: defineSubscriber('event.name', handler)
|
|
8
|
+
if (typeof eventOrConfig === 'string') {
|
|
9
|
+
if (!eventOrConfig) {
|
|
10
|
+
throw new MantaError('INVALID_DATA', 'Subscriber event must be a non-empty string');
|
|
11
|
+
}
|
|
12
|
+
if (typeof handler !== 'function') {
|
|
13
|
+
throw new MantaError('INVALID_DATA', 'Subscriber handler must be a function');
|
|
14
|
+
}
|
|
15
|
+
return { event: eventOrConfig, handler, __type: 'subscriber' };
|
|
16
|
+
}
|
|
17
|
+
// Object form: defineSubscriber({ event, handler })
|
|
18
|
+
const config = eventOrConfig;
|
|
19
|
+
if (!config.event || (Array.isArray(config.event) && config.event.length === 0)) {
|
|
20
|
+
throw new MantaError('INVALID_DATA', 'Subscriber event must be a non-empty string or array');
|
|
21
|
+
}
|
|
22
|
+
if (typeof config.handler !== 'function') {
|
|
23
|
+
throw new MantaError('INVALID_DATA', 'Subscriber handler must be a function');
|
|
24
|
+
}
|
|
25
|
+
return Object.assign(config, { __type: 'subscriber' });
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Register a subscriber with the event bus.
|
|
29
|
+
* Convenience wrapper around IEventBusPort.subscribe().
|
|
30
|
+
*/
|
|
31
|
+
export function registerSubscriber(eventBus, config, handler) {
|
|
32
|
+
const events = Array.isArray(config.event) ? config.event : [config.event];
|
|
33
|
+
const subscriberId = config.subscriberId ?? config.context?.subscriberId;
|
|
34
|
+
for (const eventName of events) {
|
|
35
|
+
eventBus.subscribe(eventName, handler, subscriberId ? { subscriberId } : undefined);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* makeIdempotent() — wraps a subscriber handler for at-least-once deduplication.
|
|
40
|
+
*
|
|
41
|
+
* Uses ICachePort to track processed events. Default key: `${eventName}:${data.id}`.
|
|
42
|
+
* Default TTL: 24 hours.
|
|
43
|
+
*
|
|
44
|
+
* Usage:
|
|
45
|
+
* const handler = makeIdempotent(cache, async (event) => { ... })
|
|
46
|
+
*/
|
|
47
|
+
export function makeIdempotent(cache, handler, options) {
|
|
48
|
+
const ttl = options?.ttl ?? 86400; // 24 hours
|
|
49
|
+
const keyFn = options?.keyFn ??
|
|
50
|
+
((event) => {
|
|
51
|
+
const data = event.data;
|
|
52
|
+
const id = data?.id ?? 'unknown';
|
|
53
|
+
return `idempotent:${event.eventName}:${id}`;
|
|
54
|
+
});
|
|
55
|
+
return async (event) => {
|
|
56
|
+
const key = keyFn(event);
|
|
57
|
+
try {
|
|
58
|
+
const existing = await cache.get(key);
|
|
59
|
+
if (existing !== null && existing !== undefined) {
|
|
60
|
+
return; // Already processed — skip
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Cache unavailable — proceed without dedup (at-least-once guarantee)
|
|
65
|
+
}
|
|
66
|
+
await handler(event);
|
|
67
|
+
try {
|
|
68
|
+
// Mark as processed
|
|
69
|
+
await cache.set(key, '1', ttl);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Cache unavailable — next invocation may re-process
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subscriber/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { IRelationalQueryPort } from '../ports/relational-query';
|
|
2
|
+
export interface SeedEntity {
|
|
3
|
+
rows: Record<string, unknown>[];
|
|
4
|
+
}
|
|
5
|
+
export interface SeedData {
|
|
6
|
+
products: SeedEntity;
|
|
7
|
+
variants: SeedEntity;
|
|
8
|
+
categories: SeedEntity;
|
|
9
|
+
product_categories: SeedEntity;
|
|
10
|
+
}
|
|
11
|
+
export declare function buildDefaultSeed(): SeedData;
|
|
12
|
+
export interface RelationalQueryTestFactoryInstance {
|
|
13
|
+
rq: IRelationalQueryPort;
|
|
14
|
+
seed: (data: SeedData) => Promise<void>;
|
|
15
|
+
teardown: () => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export interface RelationalQueryTestFactory {
|
|
18
|
+
name: string;
|
|
19
|
+
create: () => Promise<RelationalQueryTestFactoryInstance>;
|
|
20
|
+
}
|
|
21
|
+
export declare function runRelationalQueryConformance(factory: RelationalQueryTestFactory): void;
|
|
22
|
+
//# sourceMappingURL=relational-query-suite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relational-query-suite.d.ts","sourceRoot":"","sources":["../../src/testing/relational-query-suite.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAIrE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,UAAU,CAAA;IACpB,QAAQ,EAAE,UAAU,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,kBAAkB,EAAE,UAAU,CAAA;CAC/B;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CA8B3C;AAID,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE,oBAAoB,CAAA;IACxB,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,CAAC,kCAAkC,CAAC,CAAA;CAC1D;AAID,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAuNvF"}
|