@motiadev/core 0.13.2-beta.163 → 0.13.2-beta.164-562802
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/index.d.mts +38 -0
- package/dist/index.mjs +30 -0
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.mts +17 -0
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.mjs +51 -0
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.mjs.map +1 -0
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.mts +19 -0
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.mjs +54 -0
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.mjs.map +1 -0
- package/dist/src/adapters/defaults/index.d.mts +8 -0
- package/dist/src/adapters/defaults/index.mjs +10 -0
- package/dist/src/adapters/defaults/state/file-state-adapter.d.mts +27 -0
- package/dist/src/adapters/defaults/state/file-state-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/state/file-state-adapter.mjs +105 -0
- package/dist/src/adapters/defaults/state/file-state-adapter.mjs.map +1 -0
- package/dist/src/adapters/defaults/state/memory-state-adapter.d.mts +20 -0
- package/dist/src/adapters/defaults/state/memory-state-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/state/memory-state-adapter.mjs +58 -0
- package/dist/src/adapters/defaults/state/memory-state-adapter.mjs.map +1 -0
- package/dist/src/adapters/defaults/state/utils.mjs +40 -0
- package/dist/src/adapters/defaults/state/utils.mjs.map +1 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.mts +13 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.mts.map +1 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.mjs +16 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.mjs.map +1 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter.d.mts +24 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter.mjs +84 -0
- package/dist/src/adapters/defaults/stream/file-stream-adapter.mjs.map +1 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.mts +10 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.mts.map +1 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.mjs +12 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.mjs.map +1 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.mts +20 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.mts.map +1 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.mjs +58 -0
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.mjs.map +1 -0
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.mts +32 -0
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/event-adapter.interface.d.mts +19 -0
- package/dist/src/adapters/interfaces/event-adapter.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.mts +27 -0
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/state-adapter.interface.d.mts +28 -0
- package/dist/src/adapters/interfaces/state-adapter.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.mts +10 -0
- package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.mts +26 -0
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.mts.map +1 -0
- package/dist/src/adapters/interfaces/stream-adapter.interface.mjs +17 -0
- package/dist/src/adapters/interfaces/stream-adapter.interface.mjs.map +1 -0
- package/dist/src/analytics/utils.d.mts +9 -0
- package/dist/src/analytics/utils.d.mts.map +1 -0
- package/dist/src/analytics/utils.mjs +35 -0
- package/dist/src/analytics/utils.mjs.map +1 -0
- package/dist/src/call-step-file.mjs +213 -0
- package/dist/src/call-step-file.mjs.map +1 -0
- package/dist/src/config.d.mts +7 -0
- package/dist/src/config.d.mts.map +1 -0
- package/dist/src/config.mjs +6 -0
- package/dist/src/config.mjs.map +1 -0
- package/dist/src/cron-handler.d.mts +18 -0
- package/dist/src/cron-handler.d.mts.map +1 -0
- package/dist/src/cron-handler.mjs +103 -0
- package/dist/src/cron-handler.mjs.map +1 -0
- package/dist/src/endpoints/analytics-endpoint.mjs +29 -0
- package/dist/src/endpoints/analytics-endpoint.mjs.map +1 -0
- package/dist/src/endpoints/flows-config-endpoint.mjs +38 -0
- package/dist/src/endpoints/flows-config-endpoint.mjs.map +1 -0
- package/dist/src/endpoints/flows-endpoint.mjs +39 -0
- package/dist/src/endpoints/flows-endpoint.mjs.map +1 -0
- package/dist/src/endpoints/step-endpoint.mjs +41 -0
- package/dist/src/endpoints/step-endpoint.mjs.map +1 -0
- package/dist/src/generate-trace-id.mjs +13 -0
- package/dist/src/generate-trace-id.mjs.map +1 -0
- package/dist/src/get-step-config.d.mts +9 -0
- package/dist/src/get-step-config.d.mts.map +1 -0
- package/dist/src/get-step-config.mjs +63 -0
- package/dist/src/get-step-config.mjs.map +1 -0
- package/dist/src/get-step-language.mjs +14 -0
- package/dist/src/get-step-language.mjs.map +1 -0
- package/dist/src/guards.d.mts +10 -0
- package/dist/src/guards.d.mts.map +1 -0
- package/dist/src/guards.mjs +9 -0
- package/dist/src/guards.mjs.map +1 -0
- package/dist/src/helper/flows-helper.mjs +126 -0
- package/dist/src/helper/flows-helper.mjs.map +1 -0
- package/dist/src/infrastructure-validator/defaults.mjs +17 -0
- package/dist/src/infrastructure-validator/defaults.mjs.map +1 -0
- package/dist/src/infrastructure-validator/index.d.mts +3 -0
- package/dist/src/infrastructure-validator/index.mjs +4 -0
- package/dist/src/infrastructure-validator/schemas.d.mts +1 -0
- package/dist/src/infrastructure-validator/schemas.mjs +77 -0
- package/dist/src/infrastructure-validator/schemas.mjs.map +1 -0
- package/dist/src/infrastructure-validator/types.d.mts +14 -0
- package/dist/src/infrastructure-validator/types.d.mts.map +1 -0
- package/dist/src/infrastructure-validator/validations.d.mts +7 -0
- package/dist/src/infrastructure-validator/validations.d.mts.map +1 -0
- package/dist/src/infrastructure-validator/validations.mjs +29 -0
- package/dist/src/infrastructure-validator/validations.mjs.map +1 -0
- package/dist/src/language-runner.mjs +55 -0
- package/dist/src/language-runner.mjs.map +1 -0
- package/dist/src/locked-data.d.mts +81 -0
- package/dist/src/locked-data.d.mts.map +1 -0
- package/dist/src/locked-data.mjs +223 -0
- package/dist/src/locked-data.mjs.map +1 -0
- package/dist/src/logger-factory.d.mts +16 -0
- package/dist/src/logger-factory.d.mts.map +1 -0
- package/dist/src/logger-factory.mjs +33 -0
- package/dist/src/logger-factory.mjs.map +1 -0
- package/dist/src/logger.d.mts +28 -0
- package/dist/src/logger.d.mts.map +1 -0
- package/dist/src/logger.mjs +64 -0
- package/dist/src/logger.mjs.map +1 -0
- package/dist/src/mermaid-generator.d.mts +9 -0
- package/dist/src/mermaid-generator.d.mts.map +1 -0
- package/dist/src/mermaid-generator.mjs +126 -0
- package/dist/src/mermaid-generator.mjs.map +1 -0
- package/dist/src/motia.d.mts +36 -0
- package/dist/src/motia.d.mts.map +1 -0
- package/dist/src/motia.mjs +6 -0
- package/dist/src/motia.mjs.map +1 -0
- package/dist/src/node/can-access.d.mts +1 -0
- package/dist/src/node/can-access.mjs +36 -0
- package/dist/src/node/can-access.mjs.map +1 -0
- package/dist/src/node/get-config.d.mts +1 -0
- package/dist/src/node/get-config.mjs +49 -0
- package/dist/src/node/get-config.mjs.map +1 -0
- package/dist/src/node/logger.mjs +47 -0
- package/dist/src/node/logger.mjs.map +1 -0
- package/dist/src/node/middleware-compose.mjs +10 -0
- package/dist/src/node/middleware-compose.mjs.map +1 -0
- package/dist/src/node/node-runner.d.mts +1 -0
- package/dist/src/node/node-runner.mjs +94 -0
- package/dist/src/node/node-runner.mjs.map +1 -0
- package/dist/src/node/rpc-state-manager.mjs +35 -0
- package/dist/src/node/rpc-state-manager.mjs.map +1 -0
- package/dist/src/node/rpc.mjs +55 -0
- package/dist/src/node/rpc.mjs.map +1 -0
- package/dist/src/observability/create-trace.mjs +26 -0
- package/dist/src/observability/create-trace.mjs.map +1 -0
- package/dist/src/observability/index.d.mts +7 -0
- package/dist/src/observability/index.d.mts.map +1 -0
- package/dist/src/observability/no-tracer.d.mts +15 -0
- package/dist/src/observability/no-tracer.d.mts.map +1 -0
- package/dist/src/observability/no-tracer.mjs +15 -0
- package/dist/src/observability/no-tracer.mjs.map +1 -0
- package/dist/src/observability/redis-trace-stream-adapter.mjs +76 -0
- package/dist/src/observability/redis-trace-stream-adapter.mjs.map +1 -0
- package/dist/src/observability/stream-tracer.mjs +87 -0
- package/dist/src/observability/stream-tracer.mjs.map +1 -0
- package/dist/src/observability/trace-manager.mjs +24 -0
- package/dist/src/observability/trace-manager.mjs.map +1 -0
- package/dist/src/observability/tracer.mjs +87 -0
- package/dist/src/observability/tracer.mjs.map +1 -0
- package/dist/src/observability/types.d.mts +14 -0
- package/dist/src/observability/types.d.mts.map +1 -0
- package/dist/src/pretty-print.mjs +50 -0
- package/dist/src/pretty-print.mjs.map +1 -0
- package/dist/src/printer.d.mts +65 -0
- package/dist/src/printer.d.mts.map +1 -0
- package/dist/src/printer.mjs +147 -0
- package/dist/src/printer.mjs.map +1 -0
- package/dist/src/process-communication/communication-config.mjs +26 -0
- package/dist/src/process-communication/communication-config.mjs.map +1 -0
- package/dist/src/process-communication/process-manager.mjs +67 -0
- package/dist/src/process-communication/process-manager.mjs.map +1 -0
- package/dist/src/queue-manager.d.mts +37 -0
- package/dist/src/queue-manager.d.mts.map +1 -0
- package/dist/src/queue-manager.mjs +209 -0
- package/dist/src/queue-manager.mjs.map +1 -0
- package/dist/src/run-stream-can-access.mjs +59 -0
- package/dist/src/run-stream-can-access.mjs.map +1 -0
- package/dist/src/schema-utils.mjs +30 -0
- package/dist/src/schema-utils.mjs.map +1 -0
- package/dist/src/server.d.mts +40 -0
- package/dist/src/server.d.mts.map +1 -0
- package/dist/src/server.mjs +332 -0
- package/dist/src/server.mjs.map +1 -0
- package/dist/src/socket-server/helpers.mjs +35 -0
- package/dist/src/socket-server/helpers.mjs.map +1 -0
- package/dist/src/socket-server.mjs +127 -0
- package/dist/src/socket-server.mjs.map +1 -0
- package/dist/src/state/create-state-adapter.d.mts +11 -0
- package/dist/src/state/create-state-adapter.d.mts.map +1 -0
- package/dist/src/state/create-state-adapter.mjs +11 -0
- package/dist/src/state/create-state-adapter.mjs.map +1 -0
- package/dist/src/step-handler-rpc-processor.mjs +56 -0
- package/dist/src/step-handler-rpc-processor.mjs.map +1 -0
- package/dist/src/step-handler-rpc-stdin-processor.mjs +71 -0
- package/dist/src/step-handler-rpc-stdin-processor.mjs.map +1 -0
- package/dist/src/step-handlers.d.mts +13 -0
- package/dist/src/step-handlers.d.mts.map +1 -0
- package/dist/src/step-handlers.mjs +93 -0
- package/dist/src/step-handlers.mjs.map +1 -0
- package/dist/src/step-validator.d.mts +15 -0
- package/dist/src/step-validator.d.mts.map +1 -0
- package/dist/src/step-validator.mjs +118 -0
- package/dist/src/step-validator.mjs.map +1 -0
- package/dist/src/steps/emit.step.mjs +20 -0
- package/dist/src/steps/emit.step.mjs.map +1 -0
- package/dist/src/steps/index.mjs +14 -0
- package/dist/src/steps/index.mjs.map +1 -0
- package/dist/src/streams/flows-config-stream.mjs +46 -0
- package/dist/src/streams/flows-config-stream.mjs.map +1 -0
- package/dist/src/streams/flows-stream.mjs +33 -0
- package/dist/src/streams/flows-stream.mjs.map +1 -0
- package/dist/src/streams/redis-logs-stream.d.mts +3 -0
- package/dist/src/streams/redis-logs-stream.mjs +97 -0
- package/dist/src/streams/redis-logs-stream.mjs.map +1 -0
- package/dist/src/streams/stream-factory.d.mts +7 -0
- package/dist/src/streams/stream-factory.d.mts.map +1 -0
- package/dist/src/types/app-config-types.d.mts +48 -0
- package/dist/src/types/app-config-types.d.mts.map +1 -0
- package/dist/src/types/generate-type-from-schema.mjs +30 -0
- package/dist/src/types/generate-type-from-schema.mjs.map +1 -0
- package/dist/src/types/generate-types-from-response.mjs +12 -0
- package/dist/src/types/generate-types-from-response.mjs.map +1 -0
- package/dist/src/types/generate-types.mjs +101 -0
- package/dist/src/types/generate-types.mjs.map +1 -0
- package/dist/src/types/merge-schemas.mjs +102 -0
- package/dist/src/types/merge-schemas.mjs.map +1 -0
- package/dist/src/types/schema.types.d.mts +13 -0
- package/dist/src/types/schema.types.d.mts.map +1 -0
- package/dist/src/types/schema.types.mjs +14 -0
- package/dist/src/types/schema.types.mjs.map +1 -0
- package/dist/src/types-stream.d.mts +46 -0
- package/dist/src/types-stream.d.mts.map +1 -0
- package/dist/src/types.d.mts +188 -0
- package/dist/src/types.d.mts.map +1 -0
- package/dist/src/utils.mjs +13 -0
- package/dist/src/utils.mjs.map +1 -0
- package/dist/src/validate-event-input.mjs +76 -0
- package/dist/src/validate-event-input.mjs.map +1 -0
- package/jest.config.cjs +20 -0
- package/package.json +21 -8
- package/tsdown.config.ts +53 -0
- package/dist/index.d.ts +0 -30
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -72
- package/dist/jest.config.d.ts +0 -8
- package/dist/jest.config.d.ts.map +0 -1
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts +0 -13
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/cron/in-memory-cron-adapter.js +0 -53
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts +0 -15
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/event/in-memory-queue-event-adapter.js +0 -49
- package/dist/src/adapters/defaults/index.d.ts +0 -9
- package/dist/src/adapters/defaults/index.d.ts.map +0 -1
- package/dist/src/adapters/defaults/index.js +0 -19
- package/dist/src/adapters/defaults/state/file-state-adapter.d.ts +0 -23
- package/dist/src/adapters/defaults/state/file-state-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/state/file-state-adapter.js +0 -149
- package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts +0 -16
- package/dist/src/adapters/defaults/state/memory-state-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/state/memory-state-adapter.js +0 -69
- package/dist/src/adapters/defaults/state/utils.d.ts +0 -4
- package/dist/src/adapters/defaults/state/utils.d.ts.map +0 -1
- package/dist/src/adapters/defaults/state/utils.js +0 -66
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.ts +0 -9
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/file-stream-adapter-manager.js +0 -14
- package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts +0 -22
- package/dist/src/adapters/defaults/stream/file-stream-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/file-stream-adapter.js +0 -125
- package/dist/src/adapters/defaults/stream/index.d.ts +0 -5
- package/dist/src/adapters/defaults/stream/index.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/index.js +0 -11
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.ts +0 -6
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/memory-stream-adapter-manager.js +0 -10
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts +0 -16
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.d.ts.map +0 -1
- package/dist/src/adapters/defaults/stream/memory-stream-adapter.js +0 -55
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts +0 -29
- package/dist/src/adapters/interfaces/cron-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/cron-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/event-adapter.interface.d.ts +0 -15
- package/dist/src/adapters/interfaces/event-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/event-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/index.d.ts +0 -7
- package/dist/src/adapters/interfaces/index.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/index.js +0 -5
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts +0 -23
- package/dist/src/adapters/interfaces/observability-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/observability-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/state-adapter.interface.d.ts +0 -24
- package/dist/src/adapters/interfaces/state-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/state-adapter.interface.js +0 -2
- package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.ts +0 -6
- package/dist/src/adapters/interfaces/stream-adapter-manager.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/stream-adapter-manager.interface.js +0 -2
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts +0 -22
- package/dist/src/adapters/interfaces/stream-adapter.interface.d.ts.map +0 -1
- package/dist/src/adapters/interfaces/stream-adapter.interface.js +0 -16
- package/dist/src/analytics/utils.d.ts +0 -6
- package/dist/src/analytics/utils.d.ts.map +0 -1
- package/dist/src/analytics/utils.js +0 -51
- package/dist/src/call-step-file.d.ts +0 -16
- package/dist/src/call-step-file.d.ts.map +0 -1
- package/dist/src/call-step-file.js +0 -194
- package/dist/src/config.d.ts +0 -3
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -5
- package/dist/src/config.types.d.ts +0 -17
- package/dist/src/config.types.d.ts.map +0 -1
- package/dist/src/config.types.js +0 -2
- package/dist/src/cron-handler.d.ts +0 -14
- package/dist/src/cron-handler.d.ts.map +0 -1
- package/dist/src/cron-handler.js +0 -132
- package/dist/src/endpoints/analytics-endpoint.d.ts +0 -3
- package/dist/src/endpoints/analytics-endpoint.d.ts.map +0 -1
- package/dist/src/endpoints/analytics-endpoint.js +0 -28
- package/dist/src/endpoints/flows-config-endpoint.d.ts +0 -4
- package/dist/src/endpoints/flows-config-endpoint.d.ts.map +0 -1
- package/dist/src/endpoints/flows-config-endpoint.js +0 -34
- package/dist/src/endpoints/flows-endpoint.d.ts +0 -3
- package/dist/src/endpoints/flows-endpoint.d.ts.map +0 -1
- package/dist/src/endpoints/flows-endpoint.js +0 -29
- package/dist/src/endpoints/step-endpoint.d.ts +0 -4
- package/dist/src/endpoints/step-endpoint.d.ts.map +0 -1
- package/dist/src/endpoints/step-endpoint.js +0 -45
- package/dist/src/generate-trace-id.d.ts +0 -3
- package/dist/src/generate-trace-id.d.ts.map +0 -1
- package/dist/src/generate-trace-id.js +0 -14
- package/dist/src/get-step-config.d.ts +0 -5
- package/dist/src/get-step-config.d.ts.map +0 -1
- package/dist/src/get-step-config.js +0 -68
- package/dist/src/get-step-language.d.ts +0 -2
- package/dist/src/get-step-language.d.ts.map +0 -1
- package/dist/src/get-step-language.js +0 -27
- package/dist/src/guards.d.ts +0 -6
- package/dist/src/guards.d.ts.map +0 -1
- package/dist/src/guards.js +0 -11
- package/dist/src/helper/flows-helper.d.ts +0 -6
- package/dist/src/helper/flows-helper.d.ts.map +0 -1
- package/dist/src/helper/flows-helper.js +0 -143
- package/dist/src/infrastructure-validator/defaults.d.ts +0 -4
- package/dist/src/infrastructure-validator/defaults.d.ts.map +0 -1
- package/dist/src/infrastructure-validator/defaults.js +0 -16
- package/dist/src/infrastructure-validator/index.d.ts +0 -4
- package/dist/src/infrastructure-validator/index.d.ts.map +0 -1
- package/dist/src/infrastructure-validator/index.js +0 -13
- package/dist/src/infrastructure-validator/schemas.d.ts +0 -45
- package/dist/src/infrastructure-validator/schemas.d.ts.map +0 -1
- package/dist/src/infrastructure-validator/schemas.js +0 -100
- package/dist/src/infrastructure-validator/types.d.ts +0 -21
- package/dist/src/infrastructure-validator/types.d.ts.map +0 -1
- package/dist/src/infrastructure-validator/types.js +0 -2
- package/dist/src/infrastructure-validator/validations.d.ts +0 -4
- package/dist/src/infrastructure-validator/validations.d.ts.map +0 -1
- package/dist/src/infrastructure-validator/validations.js +0 -62
- package/dist/src/language-runner.d.ts +0 -15
- package/dist/src/language-runner.d.ts.map +0 -1
- package/dist/src/language-runner.js +0 -31
- package/dist/src/locked-data.d.ts +0 -78
- package/dist/src/locked-data.d.ts.map +0 -1
- package/dist/src/locked-data.js +0 -284
- package/dist/src/logger-factory.d.ts +0 -19
- package/dist/src/logger-factory.d.ts.map +0 -1
- package/dist/src/logger-factory.js +0 -27
- package/dist/src/logger.d.ts +0 -26
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -60
- package/dist/src/mermaid-generator.d.ts +0 -5
- package/dist/src/mermaid-generator.d.ts.map +0 -1
- package/dist/src/mermaid-generator.js +0 -203
- package/dist/src/motia.d.ts +0 -32
- package/dist/src/motia.d.ts.map +0 -1
- package/dist/src/motia.js +0 -4
- package/dist/src/node/can-access.d.ts +0 -2
- package/dist/src/node/can-access.d.ts.map +0 -1
- package/dist/src/node/can-access.js +0 -44
- package/dist/src/node/get-config.d.ts +0 -2
- package/dist/src/node/get-config.d.ts.map +0 -1
- package/dist/src/node/get-config.js +0 -64
- package/dist/src/node/logger.d.ts +0 -16
- package/dist/src/node/logger.d.ts.map +0 -1
- package/dist/src/node/logger.js +0 -48
- package/dist/src/node/middleware-compose.d.ts +0 -2
- package/dist/src/node/middleware-compose.d.ts.map +0 -1
- package/dist/src/node/middleware-compose.js +0 -10
- package/dist/src/node/node-runner.d.ts +0 -2
- package/dist/src/node/node-runner.d.ts.map +0 -1
- package/dist/src/node/node-runner.js +0 -83
- package/dist/src/node/rpc-state-manager.d.ts +0 -12
- package/dist/src/node/rpc-state-manager.d.ts.map +0 -1
- package/dist/src/node/rpc-state-manager.js +0 -24
- package/dist/src/node/rpc.d.ts +0 -10
- package/dist/src/node/rpc.d.ts.map +0 -1
- package/dist/src/node/rpc.js +0 -50
- package/dist/src/observability/create-trace.d.ts +0 -4
- package/dist/src/observability/create-trace.d.ts.map +0 -1
- package/dist/src/observability/create-trace.js +0 -22
- package/dist/src/observability/index.d.ts +0 -4
- package/dist/src/observability/index.d.ts.map +0 -1
- package/dist/src/observability/index.js +0 -2
- package/dist/src/observability/no-tracer.d.ts +0 -10
- package/dist/src/observability/no-tracer.d.ts.map +0 -1
- package/dist/src/observability/no-tracer.js +0 -14
- package/dist/src/observability/redis-trace-stream-adapter.d.ts +0 -17
- package/dist/src/observability/redis-trace-stream-adapter.d.ts.map +0 -1
- package/dist/src/observability/redis-trace-stream-adapter.js +0 -65
- package/dist/src/observability/stream-tracer.d.ts +0 -22
- package/dist/src/observability/stream-tracer.d.ts.map +0 -1
- package/dist/src/observability/stream-tracer.js +0 -97
- package/dist/src/observability/trace-manager.d.ts +0 -13
- package/dist/src/observability/trace-manager.d.ts.map +0 -1
- package/dist/src/observability/trace-manager.js +0 -23
- package/dist/src/observability/tracer.d.ts +0 -19
- package/dist/src/observability/tracer.d.ts.map +0 -1
- package/dist/src/observability/tracer.js +0 -95
- package/dist/src/observability/types.d.ts +0 -75
- package/dist/src/observability/types.d.ts.map +0 -1
- package/dist/src/observability/types.js +0 -2
- package/dist/src/pretty-print.d.ts +0 -2
- package/dist/src/pretty-print.d.ts.map +0 -1
- package/dist/src/pretty-print.js +0 -63
- package/dist/src/printer.d.ts +0 -61
- package/dist/src/printer.d.ts.map +0 -1
- package/dist/src/printer.js +0 -164
- package/dist/src/process-communication/communication-config.d.ts +0 -8
- package/dist/src/process-communication/communication-config.d.ts.map +0 -1
- package/dist/src/process-communication/communication-config.js +0 -18
- package/dist/src/process-communication/process-manager.d.ts +0 -32
- package/dist/src/process-communication/process-manager.d.ts.map +0 -1
- package/dist/src/process-communication/process-manager.js +0 -88
- package/dist/src/process-communication/rpc-processor-interface.d.ts +0 -10
- package/dist/src/process-communication/rpc-processor-interface.d.ts.map +0 -1
- package/dist/src/process-communication/rpc-processor-interface.js +0 -2
- package/dist/src/queue-manager.d.ts +0 -42
- package/dist/src/queue-manager.d.ts.map +0 -1
- package/dist/src/queue-manager.js +0 -252
- package/dist/src/ruby/get-ruby-config.d.ts +0 -3
- package/dist/src/ruby/get-ruby-config.d.ts.map +0 -1
- package/dist/src/ruby/get-ruby-config.js +0 -34
- package/dist/src/run-stream-can-access.d.ts +0 -10
- package/dist/src/run-stream-can-access.d.ts.map +0 -1
- package/dist/src/run-stream-can-access.js +0 -59
- package/dist/src/schema-utils.d.ts +0 -9
- package/dist/src/schema-utils.d.ts.map +0 -1
- package/dist/src/schema-utils.js +0 -80
- package/dist/src/server.d.ts +0 -37
- package/dist/src/server.d.ts.map +0 -1
- package/dist/src/server.js +0 -318
- package/dist/src/socket-server/helpers.d.ts +0 -53
- package/dist/src/socket-server/helpers.d.ts.map +0 -1
- package/dist/src/socket-server/helpers.js +0 -28
- package/dist/src/socket-server.d.ts +0 -21
- package/dist/src/socket-server.d.ts.map +0 -1
- package/dist/src/socket-server.js +0 -127
- package/dist/src/state/create-state-adapter.d.ts +0 -8
- package/dist/src/state/create-state-adapter.d.ts.map +0 -1
- package/dist/src/state/create-state-adapter.js +0 -8
- package/dist/src/step-handler-rpc-processor.d.ts +0 -22
- package/dist/src/step-handler-rpc-processor.d.ts.map +0 -1
- package/dist/src/step-handler-rpc-processor.js +0 -63
- package/dist/src/step-handler-rpc-stdin-processor.d.ts +0 -23
- package/dist/src/step-handler-rpc-stdin-processor.d.ts.map +0 -1
- package/dist/src/step-handler-rpc-stdin-processor.js +0 -83
- package/dist/src/step-handlers.d.ts +0 -9
- package/dist/src/step-handlers.d.ts.map +0 -1
- package/dist/src/step-handlers.js +0 -77
- package/dist/src/step-validator.d.ts +0 -15
- package/dist/src/step-validator.d.ts.map +0 -1
- package/dist/src/step-validator.js +0 -135
- package/dist/src/steps/emit.step.d.ts +0 -12
- package/dist/src/steps/emit.step.d.ts.map +0 -1
- package/dist/src/steps/emit.step.js +0 -27
- package/dist/src/steps/index.d.ts +0 -3
- package/dist/src/steps/index.d.ts.map +0 -1
- package/dist/src/steps/index.js +0 -16
- package/dist/src/streams/flows-config-stream.d.ts +0 -14
- package/dist/src/streams/flows-config-stream.d.ts.map +0 -1
- package/dist/src/streams/flows-config-stream.js +0 -49
- package/dist/src/streams/flows-stream.d.ts +0 -12
- package/dist/src/streams/flows-stream.d.ts.map +0 -1
- package/dist/src/streams/flows-stream.js +0 -35
- package/dist/src/streams/redis-logs-stream.d.ts +0 -31
- package/dist/src/streams/redis-logs-stream.d.ts.map +0 -1
- package/dist/src/streams/redis-logs-stream.js +0 -84
- package/dist/src/streams/stream-factory.d.ts +0 -3
- package/dist/src/streams/stream-factory.d.ts.map +0 -1
- package/dist/src/streams/stream-factory.js +0 -2
- package/dist/src/types/app-config-types.d.ts +0 -44
- package/dist/src/types/app-config-types.d.ts.map +0 -1
- package/dist/src/types/app-config-types.js +0 -2
- package/dist/src/types/flows-config-types.d.ts +0 -10
- package/dist/src/types/flows-config-types.d.ts.map +0 -1
- package/dist/src/types/flows-config-types.js +0 -2
- package/dist/src/types/flows-types.d.ts +0 -39
- package/dist/src/types/flows-types.d.ts.map +0 -1
- package/dist/src/types/flows-types.js +0 -2
- package/dist/src/types/generate-type-from-schema.d.ts +0 -3
- package/dist/src/types/generate-type-from-schema.d.ts.map +0 -1
- package/dist/src/types/generate-type-from-schema.js +0 -49
- package/dist/src/types/generate-types-from-response.d.ts +0 -3
- package/dist/src/types/generate-types-from-response.d.ts.map +0 -1
- package/dist/src/types/generate-types-from-response.js +0 -13
- package/dist/src/types/generate-types.d.ts +0 -13
- package/dist/src/types/generate-types.d.ts.map +0 -1
- package/dist/src/types/generate-types.js +0 -127
- package/dist/src/types/merge-schemas.d.ts +0 -5
- package/dist/src/types/merge-schemas.d.ts.map +0 -1
- package/dist/src/types/merge-schemas.js +0 -183
- package/dist/src/types/schema.types.d.ts +0 -9
- package/dist/src/types/schema.types.d.ts.map +0 -1
- package/dist/src/types/schema.types.js +0 -14
- package/dist/src/types-stream.d.ts +0 -42
- package/dist/src/types-stream.d.ts.map +0 -1
- package/dist/src/types-stream.js +0 -2
- package/dist/src/types.d.ts +0 -184
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -17
- package/dist/src/utils.d.ts +0 -3
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -12
- package/dist/src/validate-event-input.d.ts +0 -3
- package/dist/src/validate-event-input.d.ts.map +0 -1
- package/dist/src/validate-event-input.js +0 -74
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { isApiStep, isCronStep, isEventStep } from "./guards.mjs";
|
|
2
|
+
import { PLUGIN_FLOW_ID } from "./motia.mjs";
|
|
3
|
+
import { validateStep } from "./step-validator.mjs";
|
|
4
|
+
import { generateTypeFromSchema } from "./types/generate-type-from-schema.mjs";
|
|
5
|
+
import { generateTypesFromSteps, generateTypesFromStreams, generateTypesString } from "./types/generate-types.mjs";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
import path from "path";
|
|
8
|
+
|
|
9
|
+
//#region src/locked-data.ts
|
|
10
|
+
var LockedData = class {
|
|
11
|
+
constructor(baseDir, streamAdapter, printer, redisClient) {
|
|
12
|
+
this.baseDir = baseDir;
|
|
13
|
+
this.streamAdapter = streamAdapter;
|
|
14
|
+
this.printer = printer;
|
|
15
|
+
this.redisClient = redisClient;
|
|
16
|
+
this.flows = {};
|
|
17
|
+
this.activeSteps = [];
|
|
18
|
+
this.devSteps = [];
|
|
19
|
+
this.stepsMap = {};
|
|
20
|
+
this.handlers = {
|
|
21
|
+
"flow-created": [],
|
|
22
|
+
"flow-removed": [],
|
|
23
|
+
"flow-updated": []
|
|
24
|
+
};
|
|
25
|
+
this.stepHandlers = {
|
|
26
|
+
"step-created": [],
|
|
27
|
+
"step-removed": [],
|
|
28
|
+
"step-updated": []
|
|
29
|
+
};
|
|
30
|
+
this.streamHandlers = {
|
|
31
|
+
"stream-created": [],
|
|
32
|
+
"stream-removed": [],
|
|
33
|
+
"stream-updated": []
|
|
34
|
+
};
|
|
35
|
+
this.streams = {};
|
|
36
|
+
}
|
|
37
|
+
applyStreamWrapper(streamWrapper) {
|
|
38
|
+
this.streamWrapper = streamWrapper;
|
|
39
|
+
}
|
|
40
|
+
setStreamAuthConfig(config) {
|
|
41
|
+
this.streamAuthConfig = config ? { authenticate: config.authenticate } : void 0;
|
|
42
|
+
this.streamAuthContextType = config?.contextSchema ? generateTypeFromSchema(config.contextSchema) : void 0;
|
|
43
|
+
}
|
|
44
|
+
getStreamAuthConfig() {
|
|
45
|
+
return this.streamAuthConfig;
|
|
46
|
+
}
|
|
47
|
+
saveTypes() {
|
|
48
|
+
const typesString = generateTypesString(generateTypesFromSteps(this.activeSteps, this.printer), generateTypesFromStreams(this.streams), this.streamAuthContextType);
|
|
49
|
+
fs.writeFileSync(path.join(this.baseDir, "types.d.ts"), typesString);
|
|
50
|
+
}
|
|
51
|
+
on(event, handler) {
|
|
52
|
+
this.handlers[event].push(handler);
|
|
53
|
+
}
|
|
54
|
+
onStep(event, handler) {
|
|
55
|
+
this.stepHandlers[event].push(handler);
|
|
56
|
+
}
|
|
57
|
+
onStream(event, handler) {
|
|
58
|
+
this.streamHandlers[event].push(handler);
|
|
59
|
+
}
|
|
60
|
+
getActiveSteps() {
|
|
61
|
+
return this.activeSteps.filter((step) => !step.config.flows?.includes(PLUGIN_FLOW_ID));
|
|
62
|
+
}
|
|
63
|
+
eventSteps() {
|
|
64
|
+
return this.getActiveSteps().filter(isEventStep);
|
|
65
|
+
}
|
|
66
|
+
apiSteps() {
|
|
67
|
+
return this.getActiveSteps().filter(isApiStep);
|
|
68
|
+
}
|
|
69
|
+
cronSteps() {
|
|
70
|
+
return this.getActiveSteps().filter(isCronStep);
|
|
71
|
+
}
|
|
72
|
+
pythonSteps() {
|
|
73
|
+
return this.getActiveSteps().filter((step) => step.filePath.endsWith(".py"));
|
|
74
|
+
}
|
|
75
|
+
tsSteps() {
|
|
76
|
+
return this.getActiveSteps().filter((step) => step.filePath.endsWith(".ts"));
|
|
77
|
+
}
|
|
78
|
+
getStreams() {
|
|
79
|
+
const streams = {};
|
|
80
|
+
for (const [key, value] of Object.entries(this.streams)) streams[key] = value.factory;
|
|
81
|
+
return streams;
|
|
82
|
+
}
|
|
83
|
+
listStreams() {
|
|
84
|
+
return Object.values(this.streams);
|
|
85
|
+
}
|
|
86
|
+
getStreamByName(streamName) {
|
|
87
|
+
return this.streams[streamName];
|
|
88
|
+
}
|
|
89
|
+
findStream(path$1) {
|
|
90
|
+
return Object.values(this.streams).find((stream) => stream.filePath === path$1);
|
|
91
|
+
}
|
|
92
|
+
updateStep(oldStep, newStep, options = {}) {
|
|
93
|
+
if (!this.isValidStep(newStep)) {
|
|
94
|
+
this.deleteStep(oldStep);
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
if (oldStep.config.type !== newStep.config.type) {
|
|
98
|
+
this.activeSteps = this.activeSteps.filter((s) => s.filePath !== oldStep.filePath);
|
|
99
|
+
this.devSteps = this.devSteps.filter((s) => s.filePath !== oldStep.filePath);
|
|
100
|
+
if (newStep.config.type === "noop") this.devSteps.push(newStep);
|
|
101
|
+
else this.activeSteps.push(newStep);
|
|
102
|
+
}
|
|
103
|
+
const savedStep = this.stepsMap[newStep.filePath];
|
|
104
|
+
const addedFlows = newStep.config.flows?.filter((flowName) => !oldStep.config.flows?.includes(flowName)) ?? [];
|
|
105
|
+
const removedFlows = oldStep.config.flows?.filter((flowName) => !newStep.config.flows?.includes(flowName)) ?? [];
|
|
106
|
+
const untouchedFlows = oldStep.config.flows?.filter((flowName) => newStep.config.flows?.includes(flowName)) ?? [];
|
|
107
|
+
savedStep.config = newStep.config;
|
|
108
|
+
untouchedFlows.forEach((flowName) => this.onFlowUpdated(flowName));
|
|
109
|
+
for (const flowName of addedFlows) if (!this.flows[flowName]) this.createFlow(flowName).steps.push(savedStep);
|
|
110
|
+
else {
|
|
111
|
+
this.flows[flowName].steps.push(savedStep);
|
|
112
|
+
this.onFlowUpdated(flowName);
|
|
113
|
+
}
|
|
114
|
+
for (const flowName of removedFlows) {
|
|
115
|
+
const flowSteps = this.flows[flowName].steps;
|
|
116
|
+
this.flows[flowName].steps = flowSteps.filter(({ filePath }) => filePath !== newStep.filePath);
|
|
117
|
+
if (this.flows[flowName].steps.length === 0) this.removeFlow(flowName);
|
|
118
|
+
else this.onFlowUpdated(flowName);
|
|
119
|
+
}
|
|
120
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
121
|
+
this.stepHandlers["step-updated"].forEach((handler) => handler(newStep));
|
|
122
|
+
this.printer.printStepUpdated(newStep);
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
createStep(step, options = {}) {
|
|
126
|
+
if (!this.isValidStep(step)) return false;
|
|
127
|
+
this.stepsMap[step.filePath] = step;
|
|
128
|
+
if (step.config.type === "noop") this.devSteps.push(step);
|
|
129
|
+
else this.activeSteps.push(step);
|
|
130
|
+
for (const flowName of step.config.flows ?? []) if (!this.flows[flowName]) this.createFlow(flowName).steps.push(step);
|
|
131
|
+
else {
|
|
132
|
+
this.flows[flowName].steps.push(step);
|
|
133
|
+
this.onFlowUpdated(flowName);
|
|
134
|
+
}
|
|
135
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
136
|
+
this.stepHandlers["step-created"].forEach((handler) => handler(step));
|
|
137
|
+
this.printer.printStepCreated(step);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
deleteStep(step, options = {}) {
|
|
141
|
+
this.activeSteps = this.activeSteps.filter(({ filePath }) => filePath !== step.filePath);
|
|
142
|
+
this.devSteps = this.devSteps.filter(({ filePath }) => filePath !== step.filePath);
|
|
143
|
+
delete this.stepsMap[step.filePath];
|
|
144
|
+
for (const flowName of step.config.flows ?? []) {
|
|
145
|
+
const stepFlows = this.flows[flowName]?.steps;
|
|
146
|
+
if (stepFlows) this.flows[flowName].steps = stepFlows.filter(({ filePath }) => filePath !== step.filePath);
|
|
147
|
+
if (this.flows[flowName].steps.length === 0) this.removeFlow(flowName);
|
|
148
|
+
else this.onFlowUpdated(flowName);
|
|
149
|
+
}
|
|
150
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
151
|
+
this.stepHandlers["step-removed"].forEach((handler) => handler(step));
|
|
152
|
+
this.printer.printStepRemoved(step);
|
|
153
|
+
}
|
|
154
|
+
createFactoryWrapper(stream, factory) {
|
|
155
|
+
return () => {
|
|
156
|
+
return (this.streamWrapper ? this.streamWrapper(stream.config.name, factory) : factory)();
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
createStream(baseStream, options = {}) {
|
|
160
|
+
const stream = baseStream;
|
|
161
|
+
this.streams[stream.config.name] = stream;
|
|
162
|
+
this.streamHandlers["stream-created"].forEach((handler) => handler(stream));
|
|
163
|
+
if (stream.config.baseConfig.storageType === "default") stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name));
|
|
164
|
+
else stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory);
|
|
165
|
+
if (!stream.hidden) {
|
|
166
|
+
this.printer.printStreamCreated(stream);
|
|
167
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
168
|
+
}
|
|
169
|
+
return stream.factory;
|
|
170
|
+
}
|
|
171
|
+
deleteStream(stream, options = {}) {
|
|
172
|
+
Object.entries(this.streams).forEach(([streamName, { filePath }]) => {
|
|
173
|
+
if (stream.filePath === filePath) delete this.streams[streamName];
|
|
174
|
+
});
|
|
175
|
+
this.streamHandlers["stream-removed"].forEach((handler) => handler(stream));
|
|
176
|
+
if (!stream.hidden) {
|
|
177
|
+
this.printer.printStreamRemoved(stream);
|
|
178
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
updateStream(oldStream, stream, options = {}) {
|
|
182
|
+
if (oldStream.config.name !== stream.config.name) delete this.streams[oldStream.config.name];
|
|
183
|
+
if (stream.config.baseConfig.storageType === "default") stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name));
|
|
184
|
+
else stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory);
|
|
185
|
+
this.streams[stream.config.name] = stream;
|
|
186
|
+
this.streamHandlers["stream-updated"].forEach((handler) => handler(stream));
|
|
187
|
+
if (!stream.hidden) {
|
|
188
|
+
this.printer.printStreamUpdated(stream);
|
|
189
|
+
if (!options.disableTypeCreation) this.saveTypes();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
createFlow(flowName) {
|
|
193
|
+
const flow = {
|
|
194
|
+
name: flowName,
|
|
195
|
+
description: "",
|
|
196
|
+
steps: []
|
|
197
|
+
};
|
|
198
|
+
this.flows[flowName] = flow;
|
|
199
|
+
this.handlers["flow-created"].forEach((handler) => handler(flowName));
|
|
200
|
+
this.printer.printFlowCreated(flowName);
|
|
201
|
+
return flow;
|
|
202
|
+
}
|
|
203
|
+
removeFlow(flowName) {
|
|
204
|
+
delete this.flows[flowName];
|
|
205
|
+
this.handlers["flow-removed"].forEach((handler) => handler(flowName));
|
|
206
|
+
this.printer.printFlowRemoved(flowName);
|
|
207
|
+
}
|
|
208
|
+
onFlowUpdated(flowName) {
|
|
209
|
+
this.handlers["flow-updated"].forEach((handler) => handler(flowName));
|
|
210
|
+
}
|
|
211
|
+
isValidStep(step) {
|
|
212
|
+
const validationResult = validateStep(step);
|
|
213
|
+
if (!validationResult.success) this.printer.printValidationError(step.filePath, validationResult);
|
|
214
|
+
return validationResult.success;
|
|
215
|
+
}
|
|
216
|
+
createStreamAdapter(streamName) {
|
|
217
|
+
return this.streamAdapter.createStream(streamName);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
//#endregion
|
|
222
|
+
export { LockedData };
|
|
223
|
+
//# sourceMappingURL=locked-data.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locked-data.mjs","names":["baseDir: string","streamAdapter: StreamAdapterManager","printer: Printer","redisClient: RedisClientType","streams: Record<string, StreamFactory<unknown>>","path"],"sources":["../../src/locked-data.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport type { RedisClientType } from 'redis'\nimport type { StreamAdapter } from './adapters/interfaces/stream-adapter.interface'\nimport type { StreamAdapterManager } from './adapters/interfaces/stream-adapter-manager.interface'\nimport { isApiStep, isCronStep, isEventStep } from './guards'\nimport { PLUGIN_FLOW_ID } from './motia'\nimport type { Printer } from './printer'\nimport { validateStep } from './step-validator'\nimport type { StreamFactory } from './streams/stream-factory'\nimport type { ApiRouteConfig, CronConfig, EventConfig, Flow, Step } from './types'\nimport type { StreamAuthConfig } from './types/app-config-types'\nimport { generateTypeFromSchema } from './types/generate-type-from-schema'\nimport { generateTypesFromSteps, generateTypesFromStreams, generateTypesString } from './types/generate-types'\nimport type { JsonSchema } from './types/schema.types'\nimport type { Stream } from './types-stream'\n\ntype FlowEvent = 'flow-created' | 'flow-removed' | 'flow-updated'\ntype StepEvent = 'step-created' | 'step-removed' | 'step-updated'\ntype StreamEvent = 'stream-created' | 'stream-removed' | 'stream-updated'\n\ntype StreamWrapper<TData> = (streamName: string, factory: StreamFactory<TData>) => StreamFactory<TData>\n\nexport class LockedData {\n public flows: Record<string, Flow>\n public activeSteps: Step[]\n public devSteps: Step[]\n\n private stepsMap: Record<string, Step>\n private handlers: Record<FlowEvent, ((flowName: string) => void)[]>\n private stepHandlers: Record<StepEvent, ((step: Step) => void)[]>\n private streamHandlers: Record<StreamEvent, ((stream: Stream) => void)[]>\n private streams: Record<string, Stream>\n\n private streamWrapper?: StreamWrapper<any>\n private streamAuthContextType?: string\n private streamAuthConfig?: { authenticate: StreamAuthConfig['authenticate'] }\n\n constructor(\n public readonly baseDir: string,\n public readonly streamAdapter: StreamAdapterManager,\n private readonly printer: Printer,\n public readonly redisClient: RedisClientType,\n ) {\n this.flows = {}\n this.activeSteps = []\n this.devSteps = []\n this.stepsMap = {}\n\n this.handlers = {\n 'flow-created': [],\n 'flow-removed': [],\n 'flow-updated': [],\n }\n\n this.stepHandlers = {\n 'step-created': [],\n 'step-removed': [],\n 'step-updated': [],\n }\n\n this.streamHandlers = {\n 'stream-created': [],\n 'stream-removed': [],\n 'stream-updated': [],\n }\n\n this.streams = {}\n }\n\n applyStreamWrapper<TData>(streamWrapper: StreamWrapper<TData>): void {\n this.streamWrapper = streamWrapper\n }\n\n setStreamAuthConfig(config?: { authenticate: StreamAuthConfig['authenticate']; contextSchema?: JsonSchema }): void {\n this.streamAuthConfig = config ? { authenticate: config.authenticate } : undefined\n this.streamAuthContextType = config?.contextSchema ? generateTypeFromSchema(config.contextSchema) : undefined\n }\n\n getStreamAuthConfig() {\n return this.streamAuthConfig\n }\n\n saveTypes() {\n const types = generateTypesFromSteps(this.activeSteps, this.printer)\n const streams = generateTypesFromStreams(this.streams)\n const typesString = generateTypesString(types, streams, this.streamAuthContextType)\n fs.writeFileSync(path.join(this.baseDir, 'types.d.ts'), typesString)\n }\n\n on(event: FlowEvent, handler: (flowName: string) => void) {\n this.handlers[event].push(handler)\n }\n\n onStep(event: StepEvent, handler: (step: Step) => void) {\n this.stepHandlers[event].push(handler)\n }\n\n onStream(event: StreamEvent, handler: (stream: Stream) => void) {\n this.streamHandlers[event].push(handler)\n }\n\n getActiveSteps() {\n return this.activeSteps.filter((step) => !step.config.flows?.includes(PLUGIN_FLOW_ID))\n }\n\n eventSteps(): Step<EventConfig>[] {\n return this.getActiveSteps().filter(isEventStep)\n }\n\n apiSteps(): Step<ApiRouteConfig>[] {\n return this.getActiveSteps().filter(isApiStep)\n }\n\n cronSteps(): Step<CronConfig>[] {\n return this.getActiveSteps().filter(isCronStep)\n }\n\n pythonSteps(): Step[] {\n return this.getActiveSteps().filter((step) => step.filePath.endsWith('.py'))\n }\n\n tsSteps(): Step[] {\n return this.getActiveSteps().filter((step) => step.filePath.endsWith('.ts'))\n }\n\n getStreams(): Record<string, StreamFactory<any>> {\n const streams: Record<string, StreamFactory<unknown>> = {}\n\n for (const [key, value] of Object.entries(this.streams)) {\n streams[key] = value.factory\n }\n\n return streams\n }\n\n listStreams(): Stream[] {\n return Object.values(this.streams)\n }\n\n getStreamByName(streamName: string): Stream | undefined {\n return this.streams[streamName]\n }\n\n findStream(path: string): Stream | undefined {\n return Object.values(this.streams).find((stream) => stream.filePath === path)\n }\n\n updateStep(oldStep: Step, newStep: Step, options: { disableTypeCreation?: boolean } = {}): boolean {\n if (!this.isValidStep(newStep)) {\n this.deleteStep(oldStep)\n\n return false\n }\n\n if (oldStep.config.type !== newStep.config.type) {\n this.activeSteps = this.activeSteps.filter((s) => s.filePath !== oldStep.filePath)\n this.devSteps = this.devSteps.filter((s) => s.filePath !== oldStep.filePath)\n\n if (newStep.config.type === 'noop') {\n this.devSteps.push(newStep)\n } else {\n this.activeSteps.push(newStep)\n }\n }\n\n const savedStep = this.stepsMap[newStep.filePath]\n const addedFlows = newStep.config.flows?.filter((flowName) => !oldStep.config.flows?.includes(flowName)) ?? []\n const removedFlows = oldStep.config.flows?.filter((flowName) => !newStep.config.flows?.includes(flowName)) ?? []\n const untouchedFlows = oldStep.config.flows?.filter((flowName) => newStep.config.flows?.includes(flowName)) ?? []\n savedStep.config = newStep.config\n\n untouchedFlows.forEach((flowName) => this.onFlowUpdated(flowName))\n\n for (const flowName of addedFlows) {\n if (!this.flows[flowName]) {\n const flow = this.createFlow(flowName)\n flow.steps.push(savedStep)\n } else {\n this.flows[flowName].steps.push(savedStep)\n this.onFlowUpdated(flowName)\n }\n }\n\n for (const flowName of removedFlows) {\n const flowSteps = this.flows[flowName].steps\n this.flows[flowName].steps = flowSteps.filter(({ filePath }) => filePath !== newStep.filePath)\n\n if (this.flows[flowName].steps.length === 0) {\n this.removeFlow(flowName)\n } else {\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-updated'].forEach((handler) => handler(newStep))\n this.printer.printStepUpdated(newStep)\n\n return true\n }\n\n createStep(step: Step, options: { disableTypeCreation?: boolean } = {}): boolean {\n if (!this.isValidStep(step)) {\n return false\n }\n\n this.stepsMap[step.filePath] = step\n\n if (step.config.type === 'noop') {\n this.devSteps.push(step)\n } else {\n this.activeSteps.push(step)\n }\n\n for (const flowName of step.config.flows ?? []) {\n if (!this.flows[flowName]) {\n const flow = this.createFlow(flowName)\n flow.steps.push(step)\n } else {\n this.flows[flowName].steps.push(step)\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-created'].forEach((handler) => handler(step))\n this.printer.printStepCreated(step)\n\n return true\n }\n\n deleteStep(step: Step, options: { disableTypeCreation?: boolean } = {}): void {\n // Remove step from active and dev steps\n this.activeSteps = this.activeSteps.filter(({ filePath }) => filePath !== step.filePath)\n this.devSteps = this.devSteps.filter(({ filePath }) => filePath !== step.filePath)\n\n delete this.stepsMap[step.filePath]\n\n for (const flowName of step.config.flows ?? []) {\n const stepFlows = this.flows[flowName]?.steps\n\n if (stepFlows) {\n this.flows[flowName].steps = stepFlows.filter(({ filePath }) => filePath !== step.filePath)\n }\n\n if (this.flows[flowName].steps.length === 0) {\n this.removeFlow(flowName)\n } else {\n this.onFlowUpdated(flowName)\n }\n }\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n\n this.stepHandlers['step-removed'].forEach((handler) => handler(step))\n this.printer.printStepRemoved(step)\n }\n\n private createFactoryWrapper<TData>(stream: Stream, factory: StreamFactory<TData>): StreamFactory<TData> {\n return () => {\n const streamFactory = this.streamWrapper //\n ? this.streamWrapper(stream.config.name, factory)\n : factory\n return streamFactory()\n }\n }\n\n createStream<TData>(\n baseStream: Omit<Stream, 'factory'>,\n options: { disableTypeCreation?: boolean } = {},\n ): StreamFactory<TData> {\n const stream = baseStream as Stream\n\n this.streams[stream.config.name] = stream\n this.streamHandlers['stream-created'].forEach((handler) => handler(stream))\n\n if (stream.config.baseConfig.storageType === 'default') {\n stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name))\n } else {\n stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory)\n }\n\n if (!stream.hidden) {\n this.printer.printStreamCreated(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n\n return stream.factory as StreamFactory<TData>\n }\n\n deleteStream(stream: Stream, options: { disableTypeCreation?: boolean } = {}): void {\n Object.entries(this.streams).forEach(([streamName, { filePath }]) => {\n if (stream.filePath === filePath) {\n delete this.streams[streamName]\n }\n })\n\n this.streamHandlers['stream-removed'].forEach((handler) => handler(stream))\n\n if (!stream.hidden) {\n this.printer.printStreamRemoved(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n }\n\n updateStream(oldStream: Stream, stream: Stream, options: { disableTypeCreation?: boolean } = {}): void {\n if (oldStream.config.name !== stream.config.name) {\n delete this.streams[oldStream.config.name]\n }\n\n if (stream.config.baseConfig.storageType === 'default') {\n stream.factory = this.createFactoryWrapper(stream, () => this.createStreamAdapter(stream.config.name))\n } else {\n stream.factory = this.createFactoryWrapper(stream, stream.config.baseConfig.factory)\n }\n\n this.streams[stream.config.name] = stream\n this.streamHandlers['stream-updated'].forEach((handler) => handler(stream))\n\n if (!stream.hidden) {\n this.printer.printStreamUpdated(stream)\n\n if (!options.disableTypeCreation) {\n this.saveTypes()\n }\n }\n }\n\n private createFlow(flowName: string): Flow {\n const flow = { name: flowName, description: '', steps: [] }\n this.flows[flowName] = flow\n this.handlers['flow-created'].forEach((handler) => handler(flowName))\n this.printer.printFlowCreated(flowName)\n\n return flow\n }\n\n private removeFlow(flowName: string): void {\n delete this.flows[flowName]\n this.handlers['flow-removed'].forEach((handler) => handler(flowName))\n this.printer.printFlowRemoved(flowName)\n }\n\n private onFlowUpdated(flowName: string): void {\n this.handlers['flow-updated'].forEach((handler) => handler(flowName))\n }\n\n private isValidStep(step: Step): boolean {\n const validationResult = validateStep(step)\n\n if (!validationResult.success) {\n this.printer.printValidationError(step.filePath, validationResult)\n }\n\n return validationResult.success\n }\n\n private createStreamAdapter<TData>(streamName: string): StreamAdapter<TData> {\n return this.streamAdapter.createStream<TData>(streamName)\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Logger } from "./logger.mjs";
|
|
2
|
+
import "./types-stream.mjs";
|
|
3
|
+
import "./streams/redis-logs-stream.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/logger-factory.d.ts
|
|
6
|
+
type CreateLogger = {
|
|
7
|
+
traceId: string;
|
|
8
|
+
flows?: string[];
|
|
9
|
+
stepName: string;
|
|
10
|
+
};
|
|
11
|
+
interface LoggerFactory {
|
|
12
|
+
create: (args: CreateLogger) => Logger;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { LoggerFactory };
|
|
16
|
+
//# sourceMappingURL=logger-factory.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-factory.d.mts","names":[],"sources":["../../src/logger-factory.ts"],"sourcesContent":[],"mappings":";;;;;KAKK,YAAA;;EAAA,KAAA,CAAA,EAAA,MAAA,EAAY;EAMA,QAAA,EAAA,MAAa;;UAAb,aAAA;iBACA,iBAAiB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Logger } from "./logger.mjs";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
3
|
+
|
|
4
|
+
//#region src/logger-factory.ts
|
|
5
|
+
var BaseLoggerFactory = class {
|
|
6
|
+
constructor(isVerbose, logStream) {
|
|
7
|
+
this.isVerbose = isVerbose;
|
|
8
|
+
this.logStream = logStream;
|
|
9
|
+
}
|
|
10
|
+
create({ stepName, traceId, flows }) {
|
|
11
|
+
const streamListener = (level, msg, args) => {
|
|
12
|
+
const id = randomUUID();
|
|
13
|
+
this.logStream.set("default", id, {
|
|
14
|
+
id,
|
|
15
|
+
...args ?? {},
|
|
16
|
+
level,
|
|
17
|
+
time: Date.now(),
|
|
18
|
+
msg,
|
|
19
|
+
traceId,
|
|
20
|
+
flows: flows ?? []
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
return new Logger(this.isVerbose, {
|
|
24
|
+
traceId,
|
|
25
|
+
flows,
|
|
26
|
+
step: stepName
|
|
27
|
+
}, [streamListener]);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { BaseLoggerFactory };
|
|
33
|
+
//# sourceMappingURL=logger-factory.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-factory.mjs","names":["isVerbose: boolean","logStream: MotiaStream<Log>","streamListener: LogListener"],"sources":["../../src/logger-factory.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\nimport { Logger, type LogListener } from './logger'\nimport type { Log } from './streams/redis-logs-stream'\nimport type { MotiaStream } from './types-stream'\n\ntype CreateLogger = {\n traceId: string\n flows?: string[]\n stepName: string\n}\n\nexport interface LoggerFactory {\n create: (args: CreateLogger) => Logger\n}\n\nexport class BaseLoggerFactory implements LoggerFactory {\n constructor(\n private readonly isVerbose: boolean,\n private readonly logStream: MotiaStream<Log>,\n ) {}\n\n create({ stepName, traceId, flows }: CreateLogger): Logger {\n const streamListener: LogListener = (level, msg, args) => {\n const id = randomUUID()\n\n this.logStream.set('default', id, {\n id,\n ...(args ?? {}),\n level,\n time: Date.now(),\n msg,\n traceId,\n flows: flows ?? [],\n })\n }\n\n return new Logger(this.isVerbose, { traceId, flows, step: stepName }, [streamListener])\n }\n}\n"],"mappings":";;;;AAeA,IAAa,oBAAb,MAAwD;CACtD,YACE,AAAiBA,WACjB,AAAiBC,WACjB;EAFiB;EACA;;CAGnB,OAAO,EAAE,UAAU,SAAS,SAA+B;EACzD,MAAMC,kBAA+B,OAAO,KAAK,SAAS;GACxD,MAAM,KAAK,YAAY;AAEvB,QAAK,UAAU,IAAI,WAAW,IAAI;IAChC;IACA,GAAI,QAAQ,EAAE;IACd;IACA,MAAM,KAAK,KAAK;IAChB;IACA;IACA,OAAO,SAAS,EAAE;IACnB,CAAC;;AAGJ,SAAO,IAAI,OAAO,KAAK,WAAW;GAAE;GAAS;GAAO,MAAM;GAAU,EAAE,CAAC,eAAe,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/logger.d.ts
|
|
2
|
+
type LogListener = (level: string, msg: string, args?: unknown) => void;
|
|
3
|
+
declare class Logger {
|
|
4
|
+
readonly isVerbose: boolean;
|
|
5
|
+
private readonly meta;
|
|
6
|
+
private readonly coreListeners;
|
|
7
|
+
/**
|
|
8
|
+
* Why do we need two level of listeners?
|
|
9
|
+
*
|
|
10
|
+
* Core listeners pass along to children loggers.
|
|
11
|
+
*
|
|
12
|
+
* However, base listeners do not pass along to children loggers.
|
|
13
|
+
* Those are specific to each logger in the hierarchy.
|
|
14
|
+
*/
|
|
15
|
+
private readonly listeners;
|
|
16
|
+
constructor(isVerbose?: boolean, meta?: Record<string, unknown>, coreListeners?: LogListener[]);
|
|
17
|
+
child(meta: Record<string, unknown>): Logger;
|
|
18
|
+
private _log;
|
|
19
|
+
info(message: string, args?: unknown): void;
|
|
20
|
+
error(message: string, args?: unknown): void;
|
|
21
|
+
debug(message: string, args?: unknown): void;
|
|
22
|
+
warn(message: string, args?: unknown): void;
|
|
23
|
+
log(args: any): void;
|
|
24
|
+
addListener(listener: LogListener): void;
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { Logger };
|
|
28
|
+
//# sourceMappingURL=logger.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.mts","names":[],"sources":["../../src/logger.ts"],"sourcesContent":[],"mappings":";KAQY,WAAA;AAAA,cAEC,MAAA,CAFU;EAEV,SAAM,SAAA,EAAA,OAAA;EAaQ,iBAAA,IAAA;EACS,iBAAA,aAAA;EAGtB;;;;;;;;;0CAJa,yCACS;cAGtB,0BAA0B;;;;;;;wBAuChB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { prettyPrint } from "./pretty-print.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/logger.ts
|
|
4
|
+
const logLevel = process.env.LOG_LEVEL ?? "info";
|
|
5
|
+
const isDebugEnabled = logLevel === "debug";
|
|
6
|
+
const isInfoEnabled = ["info", "debug"].includes(logLevel);
|
|
7
|
+
const isWarnEnabled = [
|
|
8
|
+
"warn",
|
|
9
|
+
"info",
|
|
10
|
+
"debug",
|
|
11
|
+
"trace"
|
|
12
|
+
].includes(logLevel);
|
|
13
|
+
var Logger = class Logger {
|
|
14
|
+
constructor(isVerbose = false, meta = {}, coreListeners = []) {
|
|
15
|
+
this.isVerbose = isVerbose;
|
|
16
|
+
this.meta = meta;
|
|
17
|
+
this.coreListeners = coreListeners;
|
|
18
|
+
this.listeners = [];
|
|
19
|
+
}
|
|
20
|
+
child(meta) {
|
|
21
|
+
return new Logger(this.isVerbose, {
|
|
22
|
+
...this.meta,
|
|
23
|
+
...meta
|
|
24
|
+
}, this.coreListeners);
|
|
25
|
+
}
|
|
26
|
+
_log(level, msg, args) {
|
|
27
|
+
const time = Date.now();
|
|
28
|
+
const meta = {
|
|
29
|
+
...this.meta,
|
|
30
|
+
...args ?? {}
|
|
31
|
+
};
|
|
32
|
+
prettyPrint({
|
|
33
|
+
level,
|
|
34
|
+
time,
|
|
35
|
+
msg,
|
|
36
|
+
...meta
|
|
37
|
+
}, !this.isVerbose);
|
|
38
|
+
this.coreListeners.forEach((listener) => listener(level, msg, meta));
|
|
39
|
+
this.listeners.forEach((listener) => listener(level, msg, meta));
|
|
40
|
+
}
|
|
41
|
+
info(message, args) {
|
|
42
|
+
if (isInfoEnabled) this._log("info", message, args);
|
|
43
|
+
}
|
|
44
|
+
error(message, args) {
|
|
45
|
+
this._log("error", message, args);
|
|
46
|
+
}
|
|
47
|
+
debug(message, args) {
|
|
48
|
+
if (isDebugEnabled) this._log("debug", message, args);
|
|
49
|
+
}
|
|
50
|
+
warn(message, args) {
|
|
51
|
+
if (isWarnEnabled) this._log("warn", message, args);
|
|
52
|
+
}
|
|
53
|
+
log(args) {
|
|
54
|
+
this._log(args.level ?? "info", args.msg, args);
|
|
55
|
+
}
|
|
56
|
+
addListener(listener) {
|
|
57
|
+
this.listeners.push(listener);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const globalLogger = new Logger();
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { Logger, globalLogger };
|
|
64
|
+
//# sourceMappingURL=logger.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.mjs","names":["isVerbose: boolean","meta: Record<string, unknown>","coreListeners: LogListener[]"],"sources":["../../src/logger.ts"],"sourcesContent":["import { prettyPrint } from './pretty-print'\n\nconst logLevel = process.env.LOG_LEVEL ?? 'info'\n\nconst isDebugEnabled = logLevel === 'debug'\nconst isInfoEnabled = ['info', 'debug'].includes(logLevel)\nconst isWarnEnabled = ['warn', 'info', 'debug', 'trace'].includes(logLevel)\n\nexport type LogListener = (level: string, msg: string, args?: unknown) => void\n\nexport class Logger {\n /**\n * Why do we need two level of listeners?\n *\n * Core listeners pass along to children loggers.\n *\n * However, base listeners do not pass along to children loggers.\n * Those are specific to each logger in the hierarchy.\n */\n private readonly listeners: LogListener[] = []\n\n constructor(\n readonly isVerbose: boolean = false,\n private readonly meta: Record<string, unknown> = {},\n private readonly coreListeners: LogListener[] = [],\n ) {}\n\n child(meta: Record<string, unknown>): Logger {\n return new Logger(this.isVerbose, { ...this.meta, ...meta }, this.coreListeners)\n }\n\n private _log(level: string, msg: string, args?: any) {\n const time = Date.now()\n const meta = { ...this.meta, ...(args ?? {}) }\n prettyPrint({ level, time, msg, ...meta }, !this.isVerbose)\n\n this.coreListeners.forEach((listener) => listener(level, msg, meta))\n this.listeners.forEach((listener) => listener(level, msg, meta))\n }\n\n info(message: string, args?: unknown) {\n if (isInfoEnabled) {\n this._log('info', message, args)\n }\n }\n\n error(message: string, args?: unknown) {\n this._log('error', message, args)\n }\n\n debug(message: string, args?: unknown) {\n if (isDebugEnabled) {\n this._log('debug', message, args)\n }\n }\n\n warn(message: string, args?: unknown) {\n if (isWarnEnabled) {\n this._log('warn', message, args)\n }\n }\n\n log(args: any) {\n this._log(args.level ?? 'info', args.msg, args)\n }\n\n addListener(listener: LogListener) {\n this.listeners.push(listener)\n }\n}\n\nexport const globalLogger = new Logger()\n"],"mappings":";;;AAEA,MAAM,WAAW,QAAQ,IAAI,aAAa;AAE1C,MAAM,iBAAiB,aAAa;AACpC,MAAM,gBAAgB,CAAC,QAAQ,QAAQ,CAAC,SAAS,SAAS;AAC1D,MAAM,gBAAgB;CAAC;CAAQ;CAAQ;CAAS;CAAQ,CAAC,SAAS,SAAS;AAI3E,IAAa,SAAb,MAAa,OAAO;CAWlB,YACE,AAASA,YAAqB,OAC9B,AAAiBC,OAAgC,EAAE,EACnD,AAAiBC,gBAA+B,EAAE,EAClD;EAHS;EACQ;EACA;mBALyB,EAAE;;CAQ9C,MAAM,MAAuC;AAC3C,SAAO,IAAI,OAAO,KAAK,WAAW;GAAE,GAAG,KAAK;GAAM,GAAG;GAAM,EAAE,KAAK,cAAc;;CAGlF,AAAQ,KAAK,OAAe,KAAa,MAAY;EACnD,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO;GAAE,GAAG,KAAK;GAAM,GAAI,QAAQ,EAAE;GAAG;AAC9C,cAAY;GAAE;GAAO;GAAM;GAAK,GAAG;GAAM,EAAE,CAAC,KAAK,UAAU;AAE3D,OAAK,cAAc,SAAS,aAAa,SAAS,OAAO,KAAK,KAAK,CAAC;AACpE,OAAK,UAAU,SAAS,aAAa,SAAS,OAAO,KAAK,KAAK,CAAC;;CAGlE,KAAK,SAAiB,MAAgB;AACpC,MAAI,cACF,MAAK,KAAK,QAAQ,SAAS,KAAK;;CAIpC,MAAM,SAAiB,MAAgB;AACrC,OAAK,KAAK,SAAS,SAAS,KAAK;;CAGnC,MAAM,SAAiB,MAAgB;AACrC,MAAI,eACF,MAAK,KAAK,SAAS,SAAS,KAAK;;CAIrC,KAAK,SAAiB,MAAgB;AACpC,MAAI,cACF,MAAK,KAAK,QAAQ,SAAS,KAAK;;CAIpC,IAAI,MAAW;AACb,OAAK,KAAK,KAAK,SAAS,QAAQ,KAAK,KAAK,KAAK;;CAGjD,YAAY,UAAuB;AACjC,OAAK,UAAU,KAAK,SAAS;;;AAIjC,MAAa,eAAe,IAAI,QAAQ"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LockedData } from "./locked-data.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/mermaid-generator.d.ts
|
|
4
|
+
declare const createMermaidGenerator: (baseDir: string) => {
|
|
5
|
+
initialize: (lockedData: LockedData) => void;
|
|
6
|
+
};
|
|
7
|
+
//#endregion
|
|
8
|
+
export { createMermaidGenerator };
|
|
9
|
+
//# sourceMappingURL=mermaid-generator.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.d.mts","names":[],"sources":["../../src/mermaid-generator.ts"],"sourcesContent":[],"mappings":";;;cAwMa;2BAkBqB;AAlBlC,CAAA"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { isApiStep, isCronStep, isEventStep, isNoopStep } from "./guards.mjs";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
|
|
5
|
+
//#region src/mermaid-generator.ts
|
|
6
|
+
const ensureDiagramsDirectory = (diagramsDir) => {
|
|
7
|
+
if (!fs.existsSync(diagramsDir)) fs.mkdirSync(diagramsDir, { recursive: true });
|
|
8
|
+
};
|
|
9
|
+
const getNodeId = (step, baseDir) => {
|
|
10
|
+
return path.relative(baseDir, step.filePath).replace(/\.(ts|js|tsx|jsx)$/, "").replace(/[^a-zA-Z0-9]/g, "_");
|
|
11
|
+
};
|
|
12
|
+
const getNodeLabel = (step) => {
|
|
13
|
+
const displayName = step.config.name || path.basename(step.filePath, path.extname(step.filePath));
|
|
14
|
+
let prefix = "";
|
|
15
|
+
if (isApiStep(step)) prefix = "🌐 ";
|
|
16
|
+
else if (isEventStep(step)) prefix = "⚡ ";
|
|
17
|
+
else if (isCronStep(step)) prefix = "⏰ ";
|
|
18
|
+
else if (isNoopStep(step)) prefix = "⚙️ ";
|
|
19
|
+
return `["${prefix}${displayName}"]`;
|
|
20
|
+
};
|
|
21
|
+
const getNodeStyle = (step) => {
|
|
22
|
+
if (isApiStep(step)) return ":::apiStyle";
|
|
23
|
+
if (isEventStep(step)) return ":::eventStyle";
|
|
24
|
+
if (isCronStep(step)) return ":::cronStyle";
|
|
25
|
+
if (isNoopStep(step)) return ":::noopStyle";
|
|
26
|
+
return "";
|
|
27
|
+
};
|
|
28
|
+
const generateConnections = (emits, sourceStep, steps, sourceId, baseDir) => {
|
|
29
|
+
const connections = [];
|
|
30
|
+
if (!emits || !Array.isArray(emits) || emits.length === 0) return "";
|
|
31
|
+
const stepSubscribesToTopic = (step, topic) => {
|
|
32
|
+
if (isEventStep(step) && step.config.subscribes && Array.isArray(step.config.subscribes) && step.config.subscribes.includes(topic)) return true;
|
|
33
|
+
if ((isNoopStep(step) || isApiStep(step)) && step.config.virtualSubscribes && Array.isArray(step.config.virtualSubscribes) && step.config.virtualSubscribes.includes(topic)) return true;
|
|
34
|
+
return false;
|
|
35
|
+
};
|
|
36
|
+
emits.forEach((emit) => {
|
|
37
|
+
const topic = typeof emit === "string" ? emit : emit.topic;
|
|
38
|
+
const label = typeof emit === "string" ? topic : emit.label || topic;
|
|
39
|
+
steps.forEach((targetStep) => {
|
|
40
|
+
if (stepSubscribesToTopic(targetStep, topic)) {
|
|
41
|
+
const targetId = getNodeId(targetStep, baseDir);
|
|
42
|
+
connections.push(` ${sourceId} -->|${label}| ${targetId}`);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return connections.join("\n");
|
|
47
|
+
};
|
|
48
|
+
const generateFlowDiagram = (flowName, steps, baseDir) => {
|
|
49
|
+
let diagram = `flowchart TD\n`;
|
|
50
|
+
diagram += [
|
|
51
|
+
` classDef apiStyle fill:#f96,stroke:#333,stroke-width:2px,color:#fff`,
|
|
52
|
+
` classDef eventStyle fill:#69f,stroke:#333,stroke-width:2px,color:#fff`,
|
|
53
|
+
` classDef cronStyle fill:#9c6,stroke:#333,stroke-width:2px,color:#fff`,
|
|
54
|
+
` classDef noopStyle fill:#3f3a50,stroke:#333,stroke-width:2px,color:#fff`
|
|
55
|
+
].join("\n") + "\n";
|
|
56
|
+
if (!steps || steps.length === 0) return diagram + " empty[No steps in this flow]";
|
|
57
|
+
steps.forEach((step) => {
|
|
58
|
+
const nodeId = getNodeId(step, baseDir);
|
|
59
|
+
const nodeLabel = getNodeLabel(step);
|
|
60
|
+
const nodeStyle = getNodeStyle(step);
|
|
61
|
+
diagram += ` ${nodeId}${nodeLabel}${nodeStyle}\n`;
|
|
62
|
+
});
|
|
63
|
+
let connectionsStr = "";
|
|
64
|
+
steps.forEach((sourceStep) => {
|
|
65
|
+
const sourceId = getNodeId(sourceStep, baseDir);
|
|
66
|
+
function processEmissions(emissionsArray, stepSource, stepsCollection, sourceIdentifier) {
|
|
67
|
+
if (emissionsArray && Array.isArray(emissionsArray)) return generateConnections(emissionsArray, stepSource, stepsCollection, sourceIdentifier, baseDir);
|
|
68
|
+
return "";
|
|
69
|
+
}
|
|
70
|
+
const supportsEmits = isApiStep(sourceStep) || isEventStep(sourceStep) || isCronStep(sourceStep);
|
|
71
|
+
const supportsVirtualEmits = supportsEmits || isNoopStep(sourceStep);
|
|
72
|
+
if (supportsEmits) {
|
|
73
|
+
const emitConnections = processEmissions(sourceStep.config.emits, sourceStep, steps, sourceId);
|
|
74
|
+
if (emitConnections) connectionsStr += emitConnections + "\n";
|
|
75
|
+
}
|
|
76
|
+
if (supportsVirtualEmits) {
|
|
77
|
+
const virtualEmitConnections = processEmissions(sourceStep.config.virtualEmits, sourceStep, steps, sourceId);
|
|
78
|
+
if (virtualEmitConnections) connectionsStr += virtualEmitConnections + "\n";
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
diagram += connectionsStr;
|
|
82
|
+
return diagram;
|
|
83
|
+
};
|
|
84
|
+
const saveDiagram = (diagramsDir, flowName, diagram) => {
|
|
85
|
+
const filePath = path.join(diagramsDir, `${flowName}.mmd`);
|
|
86
|
+
fs.writeFileSync(filePath, diagram);
|
|
87
|
+
};
|
|
88
|
+
const removeDiagram = (diagramsDir, flowName) => {
|
|
89
|
+
const filePath = path.join(diagramsDir, `${flowName}.mmd`);
|
|
90
|
+
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
|
|
91
|
+
};
|
|
92
|
+
const generateAndSaveDiagram = (diagramsDir, flowName, flow, baseDir) => {
|
|
93
|
+
saveDiagram(diagramsDir, flowName, generateFlowDiagram(flowName, flow.steps, baseDir));
|
|
94
|
+
};
|
|
95
|
+
const createMermaidGenerator = (baseDir) => {
|
|
96
|
+
const diagramsDir = path.join(baseDir, ".mermaid");
|
|
97
|
+
ensureDiagramsDirectory(diagramsDir);
|
|
98
|
+
const handleFlowCreated = (flowName, flow) => {
|
|
99
|
+
generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
|
|
100
|
+
};
|
|
101
|
+
const handleFlowUpdated = (flowName, flow) => {
|
|
102
|
+
generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
|
|
103
|
+
};
|
|
104
|
+
const handleFlowRemoved = (flowName) => {
|
|
105
|
+
removeDiagram(diagramsDir, flowName);
|
|
106
|
+
};
|
|
107
|
+
const initialize = (lockedData) => {
|
|
108
|
+
lockedData.on("flow-created", (flowName) => {
|
|
109
|
+
handleFlowCreated(flowName, lockedData.flows[flowName]);
|
|
110
|
+
});
|
|
111
|
+
lockedData.on("flow-updated", (flowName) => {
|
|
112
|
+
handleFlowUpdated(flowName, lockedData.flows[flowName]);
|
|
113
|
+
});
|
|
114
|
+
lockedData.on("flow-removed", (flowName) => {
|
|
115
|
+
handleFlowRemoved(flowName);
|
|
116
|
+
});
|
|
117
|
+
if (lockedData.flows && typeof lockedData.flows === "object") Object.entries(lockedData.flows).forEach(([flowName, flow]) => {
|
|
118
|
+
generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir);
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
return { initialize };
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
//#endregion
|
|
125
|
+
export { createMermaidGenerator };
|
|
126
|
+
//# sourceMappingURL=mermaid-generator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-generator.mjs","names":["connections: string[]"],"sources":["../../src/mermaid-generator.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport { isApiStep, isCronStep, isEventStep, isNoopStep } from './guards'\nimport type { LockedData } from './locked-data'\nimport type { Flow, Step } from './types'\n\n// Pure function to ensure diagrams directory exists\nconst ensureDiagramsDirectory = (diagramsDir: string): void => {\n if (!fs.existsSync(diagramsDir)) {\n fs.mkdirSync(diagramsDir, { recursive: true })\n }\n}\n\n// Pure function to get node ID\nconst getNodeId = (step: Step, baseDir: string): string => {\n // Get relative path from the base directory\n const relativePath = path.relative(baseDir, step.filePath)\n\n // Remove common file extensions\n const pathWithoutExtension = relativePath.replace(/\\.(ts|js|tsx|jsx)$/, '')\n\n // Replace slashes with underscores and dots with underscores\n // Only keep alphanumeric characters and underscores\n return pathWithoutExtension.replace(/[^a-zA-Z0-9]/g, '_')\n}\n\n// Pure function to get node label\nconst getNodeLabel = (step: Step): string => {\n // Get display name for node\n const displayName = step.config.name || path.basename(step.filePath, path.extname(step.filePath))\n\n // Add node type prefix to help distinguish types\n let prefix = ''\n if (isApiStep(step)) prefix = '🌐 '\n else if (isEventStep(step)) prefix = '⚡ '\n else if (isCronStep(step)) prefix = '⏰ '\n else if (isNoopStep(step)) prefix = '⚙️ '\n\n // Create a node label with the step name\n return `[\"${prefix}${displayName}\"]`\n}\n\n// Pure function to get node style\nconst getNodeStyle = (step: Step): string => {\n // Apply style class based on step type\n if (isApiStep(step)) return ':::apiStyle'\n if (isEventStep(step)) return ':::eventStyle'\n if (isCronStep(step)) return ':::cronStyle'\n if (isNoopStep(step)) return ':::noopStyle'\n return ''\n}\n\n// Pure function to generate connections\nconst generateConnections = (\n emits: Array<string | { topic: string; label?: string }>,\n sourceStep: Step,\n steps: Step[],\n sourceId: string,\n baseDir: string,\n): string => {\n const connections: string[] = []\n\n if (!emits || !Array.isArray(emits) || emits.length === 0) {\n return ''\n }\n\n // Helper function to check if a step subscribes to a topic\n const stepSubscribesToTopic = (step: Step, topic: string): boolean => {\n // Event steps use regular subscribes\n if (\n isEventStep(step) &&\n step.config.subscribes &&\n Array.isArray(step.config.subscribes) &&\n step.config.subscribes.includes(topic)\n ) {\n return true\n }\n\n // Noop and API steps use virtualSubscribes\n if (\n (isNoopStep(step) || isApiStep(step)) &&\n step.config.virtualSubscribes &&\n Array.isArray(step.config.virtualSubscribes) &&\n step.config.virtualSubscribes.includes(topic)\n ) {\n return true\n }\n\n return false\n }\n\n emits.forEach((emit) => {\n const topic = typeof emit === 'string' ? emit : emit.topic\n const label = typeof emit === 'string' ? topic : emit.label || topic\n\n steps.forEach((targetStep) => {\n if (stepSubscribesToTopic(targetStep, topic)) {\n const targetId = getNodeId(targetStep, baseDir)\n connections.push(` ${sourceId} -->|${label}| ${targetId}`)\n }\n })\n })\n\n return connections.join('\\n')\n}\n\n// Pure function to generate flow diagram\nconst generateFlowDiagram = (flowName: string, steps: Step[], baseDir: string): string => {\n // Start mermaid flowchart with top-down direction\n let diagram = `flowchart TD\\n`\n\n // Add class definitions for styling with explicit text color\n const classDefinitions = [\n ` classDef apiStyle fill:#f96,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef eventStyle fill:#69f,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef cronStyle fill:#9c6,stroke:#333,stroke-width:2px,color:#fff`,\n ` classDef noopStyle fill:#3f3a50,stroke:#333,stroke-width:2px,color:#fff`,\n ]\n diagram += classDefinitions.join('\\n') + '\\n'\n\n // Check if we have any steps\n if (!steps || steps.length === 0) {\n return diagram + ' empty[No steps in this flow]'\n }\n\n // Create node definitions with proper format\n steps.forEach((step) => {\n const nodeId = getNodeId(step, baseDir)\n const nodeLabel = getNodeLabel(step)\n const nodeStyle = getNodeStyle(step)\n diagram += ` ${nodeId}${nodeLabel}${nodeStyle}\\n`\n })\n\n // Create connections between nodes\n let connectionsStr = ''\n\n steps.forEach((sourceStep) => {\n const sourceId = getNodeId(sourceStep, baseDir)\n\n // Helper function to process emissions if they exist\n function processEmissions(\n emissionsArray: Array<string | { topic: string; label?: string }> | undefined,\n stepSource: Step,\n stepsCollection: Step[],\n sourceIdentifier: string,\n ): string {\n if (emissionsArray && Array.isArray(emissionsArray)) {\n return generateConnections(emissionsArray, stepSource, stepsCollection, sourceIdentifier, baseDir)\n }\n return ''\n }\n\n // Semantic variables to clarify which step types support which emission types\n const supportsEmits = isApiStep(sourceStep) || isEventStep(sourceStep) || isCronStep(sourceStep)\n const supportsVirtualEmits = supportsEmits || isNoopStep(sourceStep)\n\n // Process regular emissions if supported\n if (supportsEmits) {\n const emitConnections = processEmissions(sourceStep.config.emits, sourceStep, steps, sourceId)\n if (emitConnections) {\n connectionsStr += emitConnections + '\\n'\n }\n }\n\n // Process virtual emissions if supported\n if (supportsVirtualEmits) {\n const virtualEmitConnections = processEmissions(sourceStep.config.virtualEmits, sourceStep, steps, sourceId)\n if (virtualEmitConnections) {\n connectionsStr += virtualEmitConnections + '\\n'\n }\n }\n })\n\n // Add connections to the diagram\n diagram += connectionsStr\n\n return diagram\n}\n\n// Function to save a diagram to a file\nconst saveDiagram = (diagramsDir: string, flowName: string, diagram: string): void => {\n const filePath = path.join(diagramsDir, `${flowName}.mmd`)\n fs.writeFileSync(filePath, diagram)\n}\n\n// Function to remove a diagram file\nconst removeDiagram = (diagramsDir: string, flowName: string): void => {\n const filePath = path.join(diagramsDir, `${flowName}.mmd`)\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath)\n }\n}\n\n// Function to generate and save a diagram\nconst generateAndSaveDiagram = (diagramsDir: string, flowName: string, flow: Flow, baseDir: string): void => {\n const diagram = generateFlowDiagram(flowName, flow.steps, baseDir)\n saveDiagram(diagramsDir, flowName, diagram)\n}\n\n// Main exported function that creates the mermaid generator\nexport const createMermaidGenerator = (baseDir: string) => {\n const diagramsDir = path.join(baseDir, '.mermaid')\n ensureDiagramsDirectory(diagramsDir)\n\n // Event handlers\n const handleFlowCreated = (flowName: string, flow: Flow): void => {\n generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir)\n }\n\n const handleFlowUpdated = (flowName: string, flow: Flow): void => {\n generateAndSaveDiagram(diagramsDir, flowName, flow, baseDir)\n }\n\n const handleFlowRemoved = (flowName: string): void => {\n removeDiagram(diagramsDir, flowName)\n }\n\n // Initialize function to hook into LockedData events\n const initialize = (lockedData: LockedData): void => {\n // Hook into flow events\n lockedData.on('flow-created', (flowName: string) => {\n handleFlowCreated(flowName, lockedData.flows[flowName])\n })\n\n lockedData.on('flow-updated', (flowName: string) => {\n handleFlowUpdated(flowName, lockedData.flows[flowName])\n })\n\n lockedData.on('flow-removed', (flowName: string) => {\n handleFlowRemoved(flowName)\n })\n\n // Generate diagrams for all existing flows\n if (lockedData.flows && typeof lockedData.flows === 'object') {\n Object.entries(lockedData.flows).forEach(([flowName, flow]) => {\n generateAndSaveDiagram(diagramsDir, flowName, flow as Flow, baseDir)\n })\n }\n }\n\n // Return the public API\n return {\n initialize,\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { TracerFactory } from "./observability/index.mjs";
|
|
2
|
+
import { EventAdapter } from "./adapters/interfaces/event-adapter.interface.mjs";
|
|
3
|
+
import { StateAdapter } from "./adapters/interfaces/state-adapter.interface.mjs";
|
|
4
|
+
import { Printer } from "./printer.mjs";
|
|
5
|
+
import { LockedData } from "./locked-data.mjs";
|
|
6
|
+
import { LoggerFactory } from "./logger-factory.mjs";
|
|
7
|
+
import { ApiResponse, ApiRouteConfig, ApiRouteHandler, InternalStateManager } from "./types.mjs";
|
|
8
|
+
import { Express } from "express";
|
|
9
|
+
|
|
10
|
+
//#region src/motia.d.ts
|
|
11
|
+
type Motia = {
|
|
12
|
+
loggerFactory: LoggerFactory;
|
|
13
|
+
eventAdapter: EventAdapter;
|
|
14
|
+
state: InternalStateManager;
|
|
15
|
+
lockedData: LockedData;
|
|
16
|
+
printer: Printer;
|
|
17
|
+
tracerFactory: TracerFactory;
|
|
18
|
+
app: Express;
|
|
19
|
+
stateAdapter: StateAdapter;
|
|
20
|
+
};
|
|
21
|
+
type PluginApiConfig = {
|
|
22
|
+
method: ApiRouteConfig['method'];
|
|
23
|
+
path: string;
|
|
24
|
+
};
|
|
25
|
+
type UnregisterMotiaPluginApi = () => void;
|
|
26
|
+
type MotiaPluginContext = {
|
|
27
|
+
printer: Printer;
|
|
28
|
+
state: StateAdapter;
|
|
29
|
+
lockedData: LockedData;
|
|
30
|
+
tracerFactory: TracerFactory;
|
|
31
|
+
registerApi: <TRequestBody = unknown, TResponseBody extends ApiResponse<number, unknown> = ApiResponse<number, unknown>, TEmitData = never>(config: PluginApiConfig, handler: ApiRouteHandler<TRequestBody, TResponseBody, TEmitData>) => UnregisterMotiaPluginApi;
|
|
32
|
+
};
|
|
33
|
+
declare const PLUGIN_FLOW_ID = "_plugin";
|
|
34
|
+
//#endregion
|
|
35
|
+
export { Motia, MotiaPluginContext, PLUGIN_FLOW_ID, PluginApiConfig, UnregisterMotiaPluginApi };
|
|
36
|
+
//# sourceMappingURL=motia.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motia.d.mts","names":[],"sources":["../../src/motia.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;KASY,KAAA;iBACK;EADL,YAAK,EAED,YAFC;EACA,KAAA,EAER,oBAFQ;EACD,UAAA,EAEF,UAFE;EACP,OAAA,EAEE,OAFF;EACK,aAAA,EAEG,aAFH;EACH,GAAA,EAGJ,OAHI;EACM,YAAA,EAGD,YAHC;CAEV;AACS,KAGJ,eAAA,GAHI;EAAY,MAAA,EAIlB,cAJkB,CAAA,QAAA,CAAA;EAGhB,IAAA,EAAA,MAAA;AAKZ,CAAA;AAEY,KAFA,wBAAA,GAEkB,GAAA,GAAA,IAAA;AACnB,KADC,kBAAA,GACD;EACF,OAAA,EADE,OACF;EACK,KAAA,EADL,YACK;EACG,UAAA,EADH,UACG;EAGS,aAAA,EAHT,aAGS;EAA+B,WAAA,EAAA,CAAA,eAAA,OAAA,EAAA,sBAA/B,WAA+B,CAAA,MAAA,EAAA,OAAA,CAAA,GAAA,WAAA,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,YAAA,KAAA,CAAA,CAAA,MAAA,EAG7C,eAH6C,EAAA,OAAA,EAI5C,eAJ4C,CAI5B,YAJ4B,EAId,aAJc,EAIC,SAJD,CAAA,EAAA,GAKlD,wBALkD;CAG7C;AACiB,cAIhB,cAAA,GAJgB,SAAA"}
|