@effect-app/infra 2.7.1 → 2.8.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/CHANGELOG.md +13 -0
- package/_cjs/{services/CUPS.cjs → CUPS.cjs} +1 -1
- package/_cjs/CUPS.cjs.map +1 -0
- package/_cjs/{services/Emailer → Emailer}/Sendgrid.cjs +1 -1
- package/_cjs/Emailer/Sendgrid.cjs.map +1 -0
- package/_cjs/{services/Emailer → Emailer}/fake.cjs +1 -1
- package/_cjs/Emailer/fake.cjs.map +1 -0
- package/_cjs/Emailer/service.cjs.map +1 -0
- package/_cjs/Emailer.cjs.map +1 -0
- package/_cjs/{services/MainFiberSet.cjs → MainFiberSet.cjs} +1 -1
- package/_cjs/MainFiberSet.cjs.map +1 -0
- package/_cjs/{services → Model}/Repository/ext.cjs +1 -1
- package/_cjs/Model/Repository/ext.cjs.map +1 -0
- package/_cjs/{services → Model}/Repository/legacy.cjs +2 -3
- package/_cjs/Model/Repository/legacy.cjs.map +1 -0
- package/_cjs/{services/RepositoryBase.cjs → Model/Repository/makeRepo.cjs} +10 -12
- package/_cjs/Model/Repository/makeRepo.cjs.map +1 -0
- package/_cjs/Model/Repository/service.cjs.map +1 -0
- package/_cjs/{services → Model}/Repository.cjs +12 -10
- package/_cjs/Model/Repository.cjs.map +1 -0
- package/_cjs/Model/dsl.cjs.map +1 -0
- package/_cjs/Model/filter/filterApi.cjs +6 -0
- package/_cjs/Model/filter/filterApi.cjs.map +1 -0
- package/_cjs/Model/filter/types/errors.cjs.map +1 -0
- package/_cjs/Model/filter/types/fields.cjs.map +1 -0
- package/_cjs/Model/filter/types/path/common.cjs.map +1 -0
- package/_cjs/Model/filter/types/path/eager.cjs.map +1 -0
- package/_cjs/Model/filter/types/path/index.cjs.map +1 -0
- package/_cjs/Model/filter/types/utils.cjs.map +1 -0
- package/_cjs/Model/filter/types/validator.cjs.map +1 -0
- package/_cjs/Model/filter/types.cjs.map +1 -0
- package/_cjs/Model/query/dsl.cjs.map +1 -0
- package/_cjs/Model/query/new-kid-interpreter.cjs.map +1 -0
- package/_cjs/Model/query.cjs.map +1 -0
- package/_cjs/Model.cjs +23 -2
- package/_cjs/Model.cjs.map +1 -1
- package/_cjs/{services/Operations.cjs → Operations.cjs} +3 -3
- package/_cjs/Operations.cjs.map +1 -0
- package/_cjs/{services/OperationsRepo.cjs → OperationsRepo.cjs} +2 -2
- package/_cjs/OperationsRepo.cjs.map +1 -0
- package/_cjs/{services/QueueMaker → QueueMaker}/SQLQueue.cjs +3 -3
- package/_cjs/QueueMaker/SQLQueue.cjs.map +1 -0
- package/_cjs/QueueMaker/errors.cjs.map +1 -0
- package/_cjs/{services/QueueMaker → QueueMaker}/memQueue.cjs +2 -2
- package/_cjs/QueueMaker/memQueue.cjs.map +1 -0
- package/_cjs/{services/QueueMaker → QueueMaker}/sbqueue.cjs +2 -2
- package/_cjs/QueueMaker/sbqueue.cjs.map +1 -0
- package/_cjs/{services/QueueMaker → QueueMaker}/service.cjs +1 -1
- package/_cjs/QueueMaker/service.cjs.map +1 -0
- package/_cjs/{services/RequestFiberSet.cjs → RequestFiberSet.cjs} +2 -2
- package/_cjs/RequestFiberSet.cjs.map +1 -0
- package/_cjs/Store/ContextMapContainer.cjs.map +1 -0
- package/_cjs/{services/Store → Store}/Cosmos/query.cjs +1 -1
- package/_cjs/Store/Cosmos/query.cjs.map +1 -0
- package/_cjs/{services/Store → Store}/Cosmos.cjs +2 -2
- package/_cjs/Store/Cosmos.cjs.map +1 -0
- package/_cjs/{services/Store → Store}/Disk.cjs +1 -1
- package/_cjs/Store/Disk.cjs.map +1 -0
- package/_cjs/{services/Store → Store}/Memory.cjs +1 -1
- package/_cjs/Store/Memory.cjs.map +1 -0
- package/_cjs/Store/codeFilter.cjs.map +1 -0
- package/_cjs/Store/index.cjs.map +1 -0
- package/_cjs/Store/service.cjs.map +1 -0
- package/_cjs/{services/Store → Store}/utils.cjs +1 -1
- package/_cjs/Store/utils.cjs.map +1 -0
- package/_cjs/Store.cjs.map +1 -0
- package/_cjs/adapters/SQL/Model.cjs.map +1 -0
- package/_cjs/adapters/SQL.cjs.map +1 -0
- package/_cjs/adapters/ServiceBus.cjs.map +1 -0
- package/_cjs/adapters/cosmos-client.cjs.map +1 -0
- package/_cjs/adapters/index.cjs.map +1 -0
- package/_cjs/adapters/logger.cjs.map +1 -0
- package/_cjs/adapters/memQueue.cjs.map +1 -0
- package/_cjs/adapters/mongo-client.cjs.map +1 -0
- package/_cjs/adapters/redis-client.cjs.map +1 -0
- package/_cjs/api/setupRequest.cjs +2 -2
- package/_cjs/arbs.cjs.map +1 -0
- package/_cjs/logger/shared.cjs +1 -1
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/test.cjs +1 -1
- package/dist/CUPS.d.ts.map +1 -0
- package/dist/CUPS.js +116 -0
- package/dist/Emailer/Sendgrid.d.ts.map +1 -0
- package/dist/Emailer/Sendgrid.js +99 -0
- package/dist/Emailer/fake.d.ts.map +1 -0
- package/dist/Emailer/fake.js +18 -0
- package/dist/{services/Emailer → Emailer}/service.d.ts +1 -1
- package/dist/Emailer/service.d.ts.map +1 -0
- package/dist/{services/Emailer → Emailer}/service.js +1 -1
- package/dist/Emailer.d.ts.map +1 -0
- package/dist/{services/Emailer.js → Emailer.js} +1 -1
- package/dist/MainFiberSet.d.ts.map +1 -0
- package/dist/MainFiberSet.js +54 -0
- package/dist/{services → Model}/Repository/ext.d.ts +12 -12
- package/dist/Model/Repository/ext.d.ts.map +1 -0
- package/dist/Model/Repository/ext.js +61 -0
- package/dist/{services → Model}/Repository/legacy.d.ts +54 -54
- package/dist/Model/Repository/legacy.d.ts.map +1 -0
- package/dist/Model/Repository/legacy.js +123 -0
- package/dist/{services/RepositoryBase.d.ts → Model/Repository/makeRepo.d.ts} +22 -22
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -0
- package/dist/Model/Repository/makeRepo.js +254 -0
- package/dist/{services → Model}/Repository/service.d.ts +8 -8
- package/dist/Model/Repository/service.d.ts.map +1 -0
- package/dist/{services → Model}/Repository/service.js +1 -1
- package/dist/{services → Model}/Repository.d.ts +1 -1
- package/dist/Model/Repository.d.ts.map +1 -0
- package/dist/Model/Repository.js +5 -0
- package/dist/Model/dsl.d.ts.map +1 -0
- package/dist/Model/dsl.js +46 -0
- package/dist/{services/Store/filterApi/query.d.ts → Model/filter/filterApi.d.ts} +1 -1
- package/dist/Model/filter/filterApi.d.ts.map +1 -0
- package/dist/Model/filter/filterApi.js +2 -0
- package/dist/Model/filter/types/errors.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/errors.js +1 -1
- package/dist/Model/filter/types/fields.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/fields.js +1 -1
- package/dist/Model/filter/types/path/common.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/path/common.js +1 -1
- package/dist/Model/filter/types/path/eager.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/path/eager.js +1 -1
- package/dist/Model/filter/types/path/index.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/path/index.js +1 -1
- package/dist/Model/filter/types/utils.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/utils.js +1 -1
- package/dist/Model/filter/types/validator.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types/validator.js +1 -1
- package/dist/Model/filter/types.d.ts.map +1 -0
- package/dist/{filter → Model/filter}/types.js +1 -1
- package/dist/{services → Model}/query/dsl.d.ts +6 -6
- package/dist/Model/query/dsl.d.ts.map +1 -0
- package/dist/Model/query/dsl.js +95 -0
- package/dist/{services → Model}/query/new-kid-interpreter.d.ts +4 -4
- package/dist/Model/query/new-kid-interpreter.d.ts.map +1 -0
- package/dist/Model/query/new-kid-interpreter.js +133 -0
- package/dist/Model/query.d.ts.map +1 -0
- package/dist/{services → Model}/query.js +1 -1
- package/dist/Model.d.ts +3 -1
- package/dist/Model.d.ts.map +1 -1
- package/dist/Model.js +4 -2
- package/dist/{services/Operations.d.ts → Operations.d.ts} +3 -3
- package/dist/Operations.d.ts.map +1 -0
- package/dist/Operations.js +102 -0
- package/dist/{services/OperationsRepo.d.ts → OperationsRepo.d.ts} +1 -1
- package/dist/OperationsRepo.d.ts.map +1 -0
- package/dist/OperationsRepo.js +14 -0
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -0
- package/dist/QueueMaker/SQLQueue.js +136 -0
- package/dist/QueueMaker/errors.d.ts.map +1 -0
- package/dist/QueueMaker/errors.js +20 -0
- package/dist/QueueMaker/memQueue.d.ts.map +1 -0
- package/dist/QueueMaker/memQueue.js +78 -0
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -0
- package/dist/QueueMaker/sbqueue.js +102 -0
- package/dist/{services/QueueMaker → QueueMaker}/service.d.ts +1 -1
- package/dist/QueueMaker/service.d.ts.map +1 -0
- package/dist/QueueMaker/service.js +4 -0
- package/dist/RequestFiberSet.d.ts.map +1 -0
- package/dist/RequestFiberSet.js +79 -0
- package/dist/Store/ContextMapContainer.d.ts.map +1 -0
- package/dist/{services/Store → Store}/ContextMapContainer.js +1 -1
- package/dist/{services/Store → Store}/Cosmos/query.d.ts +1 -1
- package/dist/Store/Cosmos/query.d.ts.map +1 -0
- package/dist/Store/Cosmos/query.js +164 -0
- package/dist/Store/Cosmos.d.ts.map +1 -0
- package/dist/Store/Cosmos.js +258 -0
- package/dist/Store/Disk.d.ts.map +1 -0
- package/dist/Store/Disk.js +109 -0
- package/dist/Store/Memory.d.ts.map +1 -0
- package/dist/Store/Memory.js +170 -0
- package/dist/{services/Store → Store}/codeFilter.d.ts +1 -1
- package/dist/Store/codeFilter.d.ts.map +1 -0
- package/dist/Store/codeFilter.js +117 -0
- package/dist/Store/index.d.ts.map +1 -0
- package/dist/Store/index.js +28 -0
- package/dist/{services/Store → Store}/service.d.ts +5 -5
- package/dist/Store/service.d.ts.map +1 -0
- package/dist/{services/Store → Store}/service.js +1 -1
- package/dist/{services/Store → Store}/utils.d.ts +1 -1
- package/dist/Store/utils.d.ts.map +1 -0
- package/dist/Store/utils.js +44 -0
- package/dist/Store.d.ts.map +1 -0
- package/dist/{services/Store.js → Store.js} +1 -1
- package/dist/{services/adapters → adapters}/SQL/Model.d.ts +23 -23
- package/dist/adapters/SQL/Model.d.ts.map +1 -0
- package/dist/adapters/SQL/Model.js +508 -0
- package/dist/adapters/SQL.d.ts.map +1 -0
- package/dist/{services/adapters → adapters}/SQL.js +1 -1
- package/dist/adapters/ServiceBus.d.ts.map +1 -0
- package/dist/adapters/ServiceBus.js +73 -0
- package/dist/adapters/cosmos-client.d.ts.map +1 -0
- package/dist/adapters/cosmos-client.js +8 -0
- package/dist/{services/adapters → adapters}/index.d.ts.map +1 -1
- package/dist/{services/adapters → adapters}/index.js +1 -1
- package/dist/adapters/logger.d.ts.map +1 -0
- package/dist/{services/adapters → adapters}/logger.js +1 -1
- package/dist/adapters/memQueue.d.ts.map +1 -0
- package/dist/adapters/memQueue.js +24 -0
- package/dist/adapters/mongo-client.d.ts.map +1 -0
- package/dist/adapters/mongo-client.js +12 -0
- package/dist/adapters/redis-client.d.ts.map +1 -0
- package/dist/adapters/redis-client.js +93 -0
- package/dist/api/setupRequest.js +3 -3
- package/dist/arbs.d.ts.map +1 -0
- package/dist/arbs.js +21 -0
- package/dist/logger/shared.js +2 -2
- package/dist/test.d.ts +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +3 -3
- package/examples/query.ts +3 -3
- package/package.json +352 -362
- package/src/{services/CUPS.ts → CUPS.ts} +1 -1
- package/src/{services/Emailer → Emailer}/Sendgrid.ts +1 -1
- package/src/{services/Emailer → Emailer}/fake.ts +1 -1
- package/src/{services/MainFiberSet.ts → MainFiberSet.ts} +1 -1
- package/src/{services → Model}/Repository/ext.ts +23 -11
- package/src/{services → Model}/Repository/legacy.ts +76 -49
- package/src/{services/RepositoryBase.ts → Model/Repository/makeRepo.ts} +40 -38
- package/src/{services → Model}/Repository/service.ts +9 -8
- package/src/{services → Model}/Repository.ts +1 -1
- package/src/{services → Model}/query/dsl.ts +24 -6
- package/src/{services → Model}/query/new-kid-interpreter.ts +3 -3
- package/src/Model.ts +3 -1
- package/src/{services/Operations.ts → Operations.ts} +3 -3
- package/src/{services/OperationsRepo.ts → OperationsRepo.ts} +1 -1
- package/src/{services/QueueMaker → QueueMaker}/SQLQueue.ts +4 -4
- package/src/{services/QueueMaker → QueueMaker}/memQueue.ts +2 -2
- package/src/{services/QueueMaker → QueueMaker}/sbqueue.ts +2 -2
- package/src/{services/QueueMaker → QueueMaker}/service.ts +1 -1
- package/src/{services/RequestFiberSet.ts → RequestFiberSet.ts} +2 -2
- package/src/{services/Store → Store}/Cosmos/query.ts +2 -2
- package/src/{services/Store → Store}/Cosmos.ts +2 -2
- package/src/{services/Store → Store}/Disk.ts +1 -1
- package/src/{services/Store → Store}/Memory.ts +1 -1
- package/src/{services/Store → Store}/codeFilter.ts +1 -1
- package/src/{services/Store → Store}/service.ts +4 -4
- package/src/{services/Store → Store}/utils.ts +1 -1
- package/src/api/setupRequest.ts +2 -2
- package/src/logger/shared.ts +1 -1
- package/src/test.ts +2 -2
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/query.test.ts +32 -5
- package/_cjs/_ext/Array.cjs +0 -22
- package/_cjs/_ext/Array.cjs.map +0 -1
- package/_cjs/filter/types/errors.cjs.map +0 -1
- package/_cjs/filter/types/fields.cjs.map +0 -1
- package/_cjs/filter/types/path/common.cjs.map +0 -1
- package/_cjs/filter/types/path/eager.cjs.map +0 -1
- package/_cjs/filter/types/path/index.cjs.map +0 -1
- package/_cjs/filter/types/utils.cjs.map +0 -1
- package/_cjs/filter/types/validator.cjs.map +0 -1
- package/_cjs/filter/types.cjs.map +0 -1
- package/_cjs/services/CUPS.cjs.map +0 -1
- package/_cjs/services/Emailer/Sendgrid.cjs.map +0 -1
- package/_cjs/services/Emailer/fake.cjs.map +0 -1
- package/_cjs/services/Emailer/service.cjs.map +0 -1
- package/_cjs/services/Emailer.cjs.map +0 -1
- package/_cjs/services/MainFiberSet.cjs.map +0 -1
- package/_cjs/services/Operations.cjs.map +0 -1
- package/_cjs/services/OperationsRepo.cjs.map +0 -1
- package/_cjs/services/QueueMaker/SQLQueue.cjs.map +0 -1
- package/_cjs/services/QueueMaker/errors.cjs.map +0 -1
- package/_cjs/services/QueueMaker/memQueue.cjs.map +0 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +0 -1
- package/_cjs/services/QueueMaker/service.cjs.map +0 -1
- package/_cjs/services/Repository/dsl.cjs.map +0 -1
- package/_cjs/services/Repository/ext.cjs.map +0 -1
- package/_cjs/services/Repository/legacy.cjs.map +0 -1
- package/_cjs/services/Repository/service.cjs.map +0 -1
- package/_cjs/services/Repository.cjs.map +0 -1
- package/_cjs/services/RepositoryBase.cjs.map +0 -1
- package/_cjs/services/RequestFiberSet.cjs.map +0 -1
- package/_cjs/services/Store/ContextMapContainer.cjs.map +0 -1
- package/_cjs/services/Store/Cosmos/query.cjs.map +0 -1
- package/_cjs/services/Store/Cosmos.cjs.map +0 -1
- package/_cjs/services/Store/Disk.cjs.map +0 -1
- package/_cjs/services/Store/Memory.cjs.map +0 -1
- package/_cjs/services/Store/codeFilter.cjs.map +0 -1
- package/_cjs/services/Store/filterApi/query.cjs +0 -6
- package/_cjs/services/Store/filterApi/query.cjs.map +0 -1
- package/_cjs/services/Store/index.cjs.map +0 -1
- package/_cjs/services/Store/service.cjs.map +0 -1
- package/_cjs/services/Store/utils.cjs.map +0 -1
- package/_cjs/services/Store.cjs.map +0 -1
- package/_cjs/services/adapters/SQL/Model.cjs.map +0 -1
- package/_cjs/services/adapters/SQL.cjs.map +0 -1
- package/_cjs/services/adapters/ServiceBus.cjs.map +0 -1
- package/_cjs/services/adapters/cosmos-client.cjs.map +0 -1
- package/_cjs/services/adapters/index.cjs.map +0 -1
- package/_cjs/services/adapters/logger.cjs.map +0 -1
- package/_cjs/services/adapters/memQueue.cjs.map +0 -1
- package/_cjs/services/adapters/mongo-client.cjs.map +0 -1
- package/_cjs/services/adapters/redis-client.cjs.map +0 -1
- package/_cjs/services/query/dsl.cjs.map +0 -1
- package/_cjs/services/query/new-kid-interpreter.cjs.map +0 -1
- package/_cjs/services/query.cjs.map +0 -1
- package/_cjs/test/arbs.cjs.map +0 -1
- package/dist/_ext/Array.d.ts +0 -13
- package/dist/_ext/Array.d.ts.map +0 -1
- package/dist/_ext/Array.js +0 -15
- package/dist/filter/types/errors.d.ts.map +0 -1
- package/dist/filter/types/fields.d.ts.map +0 -1
- package/dist/filter/types/path/common.d.ts.map +0 -1
- package/dist/filter/types/path/eager.d.ts.map +0 -1
- package/dist/filter/types/path/index.d.ts.map +0 -1
- package/dist/filter/types/utils.d.ts.map +0 -1
- package/dist/filter/types/validator.d.ts.map +0 -1
- package/dist/filter/types.d.ts.map +0 -1
- package/dist/services/CUPS.d.ts.map +0 -1
- package/dist/services/CUPS.js +0 -116
- package/dist/services/Emailer/Sendgrid.d.ts.map +0 -1
- package/dist/services/Emailer/Sendgrid.js +0 -99
- package/dist/services/Emailer/fake.d.ts.map +0 -1
- package/dist/services/Emailer/fake.js +0 -18
- package/dist/services/Emailer/service.d.ts.map +0 -1
- package/dist/services/Emailer.d.ts.map +0 -1
- package/dist/services/MainFiberSet.d.ts.map +0 -1
- package/dist/services/MainFiberSet.js +0 -54
- package/dist/services/Operations.d.ts.map +0 -1
- package/dist/services/Operations.js +0 -102
- package/dist/services/OperationsRepo.d.ts.map +0 -1
- package/dist/services/OperationsRepo.js +0 -14
- package/dist/services/QueueMaker/SQLQueue.d.ts.map +0 -1
- package/dist/services/QueueMaker/SQLQueue.js +0 -136
- package/dist/services/QueueMaker/errors.d.ts.map +0 -1
- package/dist/services/QueueMaker/errors.js +0 -20
- package/dist/services/QueueMaker/memQueue.d.ts.map +0 -1
- package/dist/services/QueueMaker/memQueue.js +0 -78
- package/dist/services/QueueMaker/sbqueue.d.ts.map +0 -1
- package/dist/services/QueueMaker/sbqueue.js +0 -102
- package/dist/services/QueueMaker/service.d.ts.map +0 -1
- package/dist/services/QueueMaker/service.js +0 -4
- package/dist/services/Repository/dsl.d.ts.map +0 -1
- package/dist/services/Repository/dsl.js +0 -46
- package/dist/services/Repository/ext.d.ts.map +0 -1
- package/dist/services/Repository/ext.js +0 -61
- package/dist/services/Repository/legacy.d.ts.map +0 -1
- package/dist/services/Repository/legacy.js +0 -124
- package/dist/services/Repository/service.d.ts.map +0 -1
- package/dist/services/Repository.d.ts.map +0 -1
- package/dist/services/Repository.js +0 -5
- package/dist/services/RepositoryBase.d.ts.map +0 -1
- package/dist/services/RepositoryBase.js +0 -256
- package/dist/services/RequestFiberSet.d.ts.map +0 -1
- package/dist/services/RequestFiberSet.js +0 -79
- package/dist/services/Store/ContextMapContainer.d.ts.map +0 -1
- package/dist/services/Store/Cosmos/query.d.ts.map +0 -1
- package/dist/services/Store/Cosmos/query.js +0 -164
- package/dist/services/Store/Cosmos.d.ts.map +0 -1
- package/dist/services/Store/Cosmos.js +0 -258
- package/dist/services/Store/Disk.d.ts.map +0 -1
- package/dist/services/Store/Disk.js +0 -109
- package/dist/services/Store/Memory.d.ts.map +0 -1
- package/dist/services/Store/Memory.js +0 -170
- package/dist/services/Store/codeFilter.d.ts.map +0 -1
- package/dist/services/Store/codeFilter.js +0 -117
- package/dist/services/Store/filterApi/query.d.ts.map +0 -1
- package/dist/services/Store/filterApi/query.js +0 -2
- package/dist/services/Store/index.d.ts.map +0 -1
- package/dist/services/Store/index.js +0 -28
- package/dist/services/Store/service.d.ts.map +0 -1
- package/dist/services/Store/utils.d.ts.map +0 -1
- package/dist/services/Store/utils.js +0 -44
- package/dist/services/Store.d.ts.map +0 -1
- package/dist/services/adapters/SQL/Model.d.ts.map +0 -1
- package/dist/services/adapters/SQL/Model.js +0 -508
- package/dist/services/adapters/SQL.d.ts.map +0 -1
- package/dist/services/adapters/ServiceBus.d.ts.map +0 -1
- package/dist/services/adapters/ServiceBus.js +0 -73
- package/dist/services/adapters/cosmos-client.d.ts.map +0 -1
- package/dist/services/adapters/cosmos-client.js +0 -8
- package/dist/services/adapters/logger.d.ts.map +0 -1
- package/dist/services/adapters/memQueue.d.ts.map +0 -1
- package/dist/services/adapters/memQueue.js +0 -24
- package/dist/services/adapters/mongo-client.d.ts.map +0 -1
- package/dist/services/adapters/mongo-client.js +0 -12
- package/dist/services/adapters/redis-client.d.ts.map +0 -1
- package/dist/services/adapters/redis-client.js +0 -93
- package/dist/services/query/dsl.d.ts.map +0 -1
- package/dist/services/query/dsl.js +0 -95
- package/dist/services/query/new-kid-interpreter.d.ts.map +0 -1
- package/dist/services/query/new-kid-interpreter.js +0 -133
- package/dist/services/query.d.ts.map +0 -1
- package/dist/test/arbs.d.ts.map +0 -1
- package/dist/test/arbs.js +0 -21
- package/src/_ext/Array.ts +0 -22
- /package/_cjs/{services/Emailer → Emailer}/service.cjs +0 -0
- /package/_cjs/{services/Emailer.cjs → Emailer.cjs} +0 -0
- /package/_cjs/{services → Model}/Repository/service.cjs +0 -0
- /package/_cjs/{services/Repository → Model}/dsl.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/errors.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/fields.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/path/common.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/path/eager.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/path/index.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/utils.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types/validator.cjs +0 -0
- /package/_cjs/{filter → Model/filter}/types.cjs +0 -0
- /package/_cjs/{services → Model}/query/dsl.cjs +0 -0
- /package/_cjs/{services → Model}/query/new-kid-interpreter.cjs +0 -0
- /package/_cjs/{services → Model}/query.cjs +0 -0
- /package/_cjs/{services/QueueMaker → QueueMaker}/errors.cjs +0 -0
- /package/_cjs/{services/Store → Store}/ContextMapContainer.cjs +0 -0
- /package/_cjs/{services/Store → Store}/codeFilter.cjs +0 -0
- /package/_cjs/{services/Store → Store}/index.cjs +0 -0
- /package/_cjs/{services/Store → Store}/service.cjs +0 -0
- /package/_cjs/{services/Store.cjs → Store.cjs} +0 -0
- /package/_cjs/{services/adapters → adapters}/SQL/Model.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/SQL.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/ServiceBus.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/cosmos-client.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/index.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/logger.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/memQueue.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/mongo-client.cjs +0 -0
- /package/_cjs/{services/adapters → adapters}/redis-client.cjs +0 -0
- /package/_cjs/{test/arbs.cjs → arbs.cjs} +0 -0
- /package/dist/{services/CUPS.d.ts → CUPS.d.ts} +0 -0
- /package/dist/{services/Emailer → Emailer}/Sendgrid.d.ts +0 -0
- /package/dist/{services/Emailer → Emailer}/fake.d.ts +0 -0
- /package/dist/{services/Emailer.d.ts → Emailer.d.ts} +0 -0
- /package/dist/{services/MainFiberSet.d.ts → MainFiberSet.d.ts} +0 -0
- /package/dist/{services/Repository → Model}/dsl.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/errors.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/fields.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/path/common.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/path/eager.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/path/index.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/utils.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types/validator.d.ts +0 -0
- /package/dist/{filter → Model/filter}/types.d.ts +0 -0
- /package/dist/{services → Model}/query.d.ts +0 -0
- /package/dist/{services/QueueMaker → QueueMaker}/SQLQueue.d.ts +0 -0
- /package/dist/{services/QueueMaker → QueueMaker}/errors.d.ts +0 -0
- /package/dist/{services/QueueMaker → QueueMaker}/memQueue.d.ts +0 -0
- /package/dist/{services/QueueMaker → QueueMaker}/sbqueue.d.ts +0 -0
- /package/dist/{services/RequestFiberSet.d.ts → RequestFiberSet.d.ts} +0 -0
- /package/dist/{services/Store → Store}/ContextMapContainer.d.ts +0 -0
- /package/dist/{services/Store → Store}/Cosmos.d.ts +0 -0
- /package/dist/{services/Store → Store}/Disk.d.ts +0 -0
- /package/dist/{services/Store → Store}/Memory.d.ts +0 -0
- /package/dist/{services/Store → Store}/index.d.ts +0 -0
- /package/dist/{services/Store.d.ts → Store.d.ts} +0 -0
- /package/dist/{services/adapters → adapters}/SQL.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/ServiceBus.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/cosmos-client.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/index.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/logger.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/memQueue.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/mongo-client.d.ts +0 -0
- /package/dist/{services/adapters → adapters}/redis-client.d.ts +0 -0
- /package/dist/{test/arbs.d.ts → arbs.d.ts} +0 -0
- /package/src/{services/Emailer → Emailer}/service.ts +0 -0
- /package/src/{services/Emailer.ts → Emailer.ts} +0 -0
- /package/src/{services/Repository → Model}/dsl.ts +0 -0
- /package/src/{services/Store/filterApi/query.ts → Model/filter/filterApi.ts} +0 -0
- /package/src/{filter → Model/filter}/types/errors.ts +0 -0
- /package/src/{filter → Model/filter}/types/fields.ts +0 -0
- /package/src/{filter → Model/filter}/types/path/common.ts +0 -0
- /package/src/{filter → Model/filter}/types/path/eager.ts +0 -0
- /package/src/{filter → Model/filter}/types/path/index.ts +0 -0
- /package/src/{filter → Model/filter}/types/utils.ts +0 -0
- /package/src/{filter → Model/filter}/types/validator.ts +0 -0
- /package/src/{filter → Model/filter}/types.ts +0 -0
- /package/src/{services → Model}/query.ts +0 -0
- /package/src/{services/QueueMaker → QueueMaker}/errors.ts +0 -0
- /package/src/{services/Store → Store}/ContextMapContainer.ts +0 -0
- /package/src/{services/Store → Store}/index.test.ts.bak +0 -0
- /package/src/{services/Store → Store}/index.ts +0 -0
- /package/src/{services/Store.ts → Store.ts} +0 -0
- /package/src/{services/adapters → adapters}/SQL/Model.ts +0 -0
- /package/src/{services/adapters → adapters}/SQL.ts +0 -0
- /package/src/{services/adapters → adapters}/ServiceBus.ts +0 -0
- /package/src/{services/adapters → adapters}/cosmos-client.ts +0 -0
- /package/src/{services/adapters → adapters}/index.ts +0 -0
- /package/src/{services/adapters → adapters}/logger.ts +0 -0
- /package/src/{services/adapters → adapters}/memQueue.ts +0 -0
- /package/src/{services/adapters → adapters}/mongo-client.ts +0 -0
- /package/src/{services/adapters → adapters}/redis-client.ts +0 -0
- /package/src/{test/arbs.ts → arbs.ts} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { getRequestContext, setupRequestContext } from "@effect-app/infra/api/setupRequest";
|
|
2
|
+
import { reportNonInterruptedFailure } from "@effect-app/infra/QueueMaker/errors";
|
|
3
|
+
import { QueueMeta } from "@effect-app/infra/QueueMaker/service";
|
|
4
|
+
import { SqlClient } from "@effect/sql";
|
|
5
|
+
import { randomUUID } from "crypto";
|
|
6
|
+
import { subMinutes } from "date-fns";
|
|
7
|
+
import { Effect, Fiber, Option, S, Tracer } from "effect-app";
|
|
8
|
+
import { pretty } from "effect-app/utils";
|
|
9
|
+
import { SQLModel } from "../adapters/SQL.js";
|
|
10
|
+
import { InfraLogger } from "../logger.js";
|
|
11
|
+
export const QueueId = S.Number.pipe(S.brand("QueueId"));
|
|
12
|
+
// TODO: let the model track and Auto Generate versionColumn on every update instead
|
|
13
|
+
export function makeSQLQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
14
|
+
return Effect.gen(function* () {
|
|
15
|
+
const base = {
|
|
16
|
+
id: SQLModel.Generated(QueueId),
|
|
17
|
+
meta: SQLModel.JsonFromString(QueueMeta),
|
|
18
|
+
name: S.NonEmptyString255,
|
|
19
|
+
createdAt: SQLModel.DateTimeInsert,
|
|
20
|
+
updatedAt: SQLModel.DateTimeUpdate,
|
|
21
|
+
// TODO: at+owner
|
|
22
|
+
processingAt: SQLModel.FieldOption(S.Date),
|
|
23
|
+
finishedAt: SQLModel.FieldOption(S.Date),
|
|
24
|
+
etag: S.String // TODO: use a SQLModel thing that auto updates it?
|
|
25
|
+
// TODO: record locking.. / optimistic locking
|
|
26
|
+
// rowVersion: SQLModel.DateTimeFromNumberWithNow
|
|
27
|
+
};
|
|
28
|
+
class Queue extends SQLModel.Class("Queue")({
|
|
29
|
+
body: SQLModel.JsonFromString(schema),
|
|
30
|
+
...base
|
|
31
|
+
}) {
|
|
32
|
+
}
|
|
33
|
+
class Drain extends SQLModel.Class("Drain")({
|
|
34
|
+
body: SQLModel.JsonFromString(drainSchema),
|
|
35
|
+
...base
|
|
36
|
+
}) {
|
|
37
|
+
}
|
|
38
|
+
const sql = yield* SqlClient.SqlClient;
|
|
39
|
+
const queueRepo = yield* SQLModel.makeRepository(Queue, {
|
|
40
|
+
tableName: "queue",
|
|
41
|
+
spanPrefix: "QueueRepo",
|
|
42
|
+
idColumn: "id",
|
|
43
|
+
versionColumn: "etag"
|
|
44
|
+
});
|
|
45
|
+
const drainRepo = yield* SQLModel.makeRepository(Drain, {
|
|
46
|
+
tableName: "queue",
|
|
47
|
+
spanPrefix: "DrainRepo",
|
|
48
|
+
idColumn: "id",
|
|
49
|
+
versionColumn: "etag"
|
|
50
|
+
});
|
|
51
|
+
const decodeDrain = S.decode(Drain);
|
|
52
|
+
const drain = Effect
|
|
53
|
+
.sync(() => subMinutes(new Date(), 15))
|
|
54
|
+
.pipe(Effect
|
|
55
|
+
.andThen((limit) => sql `SELECT *
|
|
56
|
+
FROM queue
|
|
57
|
+
WHERE name = ${queueDrainName} AND finishedAt IS NULL AND (processingAt IS NULL OR processingAt < ${limit.getTime()})
|
|
58
|
+
LIMIT 1`));
|
|
59
|
+
const q = {
|
|
60
|
+
offer: (body, meta) => Effect.gen(function* () {
|
|
61
|
+
yield* queueRepo.insertVoid(Queue.insert.make({
|
|
62
|
+
body,
|
|
63
|
+
meta,
|
|
64
|
+
name: queueName,
|
|
65
|
+
processingAt: Option.none(),
|
|
66
|
+
finishedAt: Option.none(),
|
|
67
|
+
etag: randomUUID()
|
|
68
|
+
}));
|
|
69
|
+
}),
|
|
70
|
+
take: Effect.gen(function* () {
|
|
71
|
+
while (true) {
|
|
72
|
+
const [first] = yield* drain.pipe(Effect.withTracerEnabled(false)); // disable sql tracer otherwise we spam it..
|
|
73
|
+
if (first) {
|
|
74
|
+
const dec = yield* decodeDrain(first);
|
|
75
|
+
const { createdAt, updatedAt, ...rest } = dec;
|
|
76
|
+
return yield* drainRepo.update(Drain.update.make({ ...rest, processingAt: Option.some(new Date()) }) // auto in lib , etag: randomUUID()
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
if (first)
|
|
80
|
+
return first;
|
|
81
|
+
yield* Effect.sleep(250);
|
|
82
|
+
}
|
|
83
|
+
}),
|
|
84
|
+
finish: ({ createdAt, updatedAt, ...q }) => drainRepo.updateVoid(Drain.update.make({ ...q, finishedAt: Option.some(new Date()) })) // auto in lib , etag: randomUUID()
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
publish: (...messages) => Effect
|
|
88
|
+
.gen(function* () {
|
|
89
|
+
const requestContext = yield* getRequestContext;
|
|
90
|
+
return yield* Effect
|
|
91
|
+
.forEach(messages, (m) => q.offer(m, requestContext), {
|
|
92
|
+
discard: true
|
|
93
|
+
});
|
|
94
|
+
})
|
|
95
|
+
.pipe(Effect.withSpan("queue.publish: " + queueName, {
|
|
96
|
+
captureStackTrace: false,
|
|
97
|
+
kind: "producer",
|
|
98
|
+
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
99
|
+
})),
|
|
100
|
+
drain: (handleEvent, sessionId) => Effect.gen(function* () {
|
|
101
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName });
|
|
102
|
+
const processMessage = (msg) => Effect
|
|
103
|
+
.succeed(msg)
|
|
104
|
+
.pipe(Effect
|
|
105
|
+
.flatMap(({ body, meta }) => {
|
|
106
|
+
let effect = InfraLogger
|
|
107
|
+
.logInfo(`[${queueDrainName}] Processing incoming message`)
|
|
108
|
+
.pipe(Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }), Effect.zipRight(handleEvent(body)), silenceAndReportError, (_) => setupRequestContext(_, meta), Effect
|
|
109
|
+
.withSpan(`queue.drain: ${queueDrainName}.${body._tag}`, {
|
|
110
|
+
captureStackTrace: false,
|
|
111
|
+
kind: "consumer",
|
|
112
|
+
attributes: {
|
|
113
|
+
"queue.name": queueDrainName,
|
|
114
|
+
"queue.sessionId": sessionId,
|
|
115
|
+
"queue.input": body
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
if (meta.span) {
|
|
119
|
+
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span));
|
|
120
|
+
}
|
|
121
|
+
return effect;
|
|
122
|
+
}));
|
|
123
|
+
return yield* q
|
|
124
|
+
.take
|
|
125
|
+
.pipe(Effect.flatMap((x) => processMessage(x).pipe(Effect.uninterruptible, Effect.fork, Effect.flatMap(Fiber.join), Effect.tap(q.finish(x)))), silenceAndReportError, Effect.withSpan(`queue.drain: ${queueDrainName}`, {
|
|
126
|
+
attributes: {
|
|
127
|
+
"queue.type": "sql",
|
|
128
|
+
"queue.name": queueDrainName,
|
|
129
|
+
"queue.sessionId": sessionId
|
|
130
|
+
}
|
|
131
|
+
}), Effect.forever);
|
|
132
|
+
})
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUXVldWVNYWtlci9TUUxRdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUVqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFN0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7QUFHeEQsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxZQUFZLENBTTFCLFNBQTRCLEVBQzVCLGNBQWlDLEVBQ2pDLE1BQTJCLEVBQzNCLFdBQTBDO0lBRTFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUc7WUFDWCxFQUFFLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDL0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ3hDLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCO1lBQ3pCLFNBQVMsRUFBRSxRQUFRLENBQUMsY0FBYztZQUNsQyxTQUFTLEVBQUUsUUFBUSxDQUFDLGNBQWM7WUFDbEMsaUJBQWlCO1lBQ2pCLFlBQVksRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtREFBbUQ7WUFDbEUsOENBQThDO1lBQzlDLGlEQUFpRDtTQUNsRCxDQUFBO1FBQ0QsTUFBTSxLQUFNLFNBQVEsUUFBUSxDQUFDLEtBQUssQ0FBUSxPQUFPLENBQUMsQ0FBQztZQUNqRCxJQUFJLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDckMsR0FBRyxJQUFJO1NBQ1IsQ0FBQztTQUFHO1FBQ0wsTUFBTSxLQUFNLFNBQVEsUUFBUSxDQUFDLEtBQUssQ0FBUSxPQUFPLENBQUMsQ0FBQztZQUNqRCxJQUFJLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7WUFDMUMsR0FBRyxJQUFJO1NBQ1IsQ0FBQztTQUFHO1FBQ0wsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQTtRQUV0QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtZQUN0RCxTQUFTLEVBQUUsT0FBTztZQUNsQixVQUFVLEVBQUUsV0FBVztZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLGFBQWEsRUFBRSxNQUFNO1NBQ3RCLENBQUMsQ0FBQTtRQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ3RELFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLE1BQU07U0FDdEIsQ0FBQyxDQUFBO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVuQyxNQUFNLEtBQUssR0FBRyxNQUFNO2FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUN0QyxJQUFJLENBQ0gsTUFBTTthQUNILE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2pCLEdBQUcsQ0FBc0I7O21CQUVsQixjQUFjLHVFQUF1RSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQzNHLENBQ0QsQ0FDSixDQUFBO1FBRUgsTUFBTSxDQUFDLEdBQUc7WUFDUixLQUFLLEVBQUUsQ0FBQyxJQUFTLEVBQUUsSUFBMkIsRUFBRSxFQUFFLENBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNsQixLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDaEIsSUFBSTtvQkFDSixJQUFJO29CQUNKLElBQUksRUFBRSxTQUFTO29CQUNmLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFO29CQUMzQixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtvQkFDekIsSUFBSSxFQUFFLFVBQVUsRUFBRTtpQkFDbkIsQ0FBQyxDQUNILENBQUE7WUFDSCxDQUFDLENBQUM7WUFDSixJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLE9BQU8sSUFBSSxFQUFFLENBQUM7b0JBQ1osTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUEsQ0FBQyw0Q0FBNEM7b0JBQy9HLElBQUksS0FBSyxFQUFFLENBQUM7d0JBQ1YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUNyQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQTt3QkFDN0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUM1QixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsbUNBQW1DO3lCQUMxRyxDQUFBO29CQUNILENBQUM7b0JBQ0QsSUFBSSxLQUFLO3dCQUFFLE9BQU8sS0FBSyxDQUFBO29CQUN2QixLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBRSxDQUNoRCxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztTQUM3SCxDQUFBO1FBQ0QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FDdkIsTUFBTTtpQkFDSCxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNaLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixDQUFBO2dCQUMvQyxPQUFPLEtBQUssQ0FBQyxDQUFDLE1BQU07cUJBQ2pCLE9BQU8sQ0FDTixRQUFRLEVBQ1IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUNqQztvQkFDRSxPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUNGLENBQUE7WUFDTCxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxFQUFFO2dCQUM3QyxpQkFBaUIsRUFBRSxLQUFLO2dCQUN4QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsVUFBVSxFQUFFLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTthQUM1RCxDQUFDLENBQ0g7WUFDTCxLQUFLLEVBQUUsQ0FDTCxXQUEyRCxFQUMzRCxTQUFrQixFQUNsQixFQUFFLENBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xCLE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQTtnQkFDdkcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFVLEVBQUUsRUFBRSxDQUNwQyxNQUFNO3FCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUM7cUJBQ1osSUFBSSxDQUFDLE1BQU07cUJBQ1QsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxNQUFNLEdBQUcsV0FBVzt5QkFDckIsT0FBTyxDQUFDLElBQUksY0FBYywrQkFBK0IsQ0FBQzt5QkFDMUQsSUFBSSxDQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUMvRCxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNsQyxxQkFBcUIsRUFDckIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLG1CQUFtQixDQUNqQixDQUFDLEVBQ0QsSUFBSSxDQUNMLEVBQ0gsTUFBTTt5QkFDSCxRQUFRLENBQUMsZ0JBQWdCLGNBQWMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3ZELGlCQUFpQixFQUFFLEtBQUs7d0JBQ3hCLElBQUksRUFBRSxVQUFVO3dCQUNoQixVQUFVLEVBQUU7NEJBQ1YsWUFBWSxFQUFFLGNBQWM7NEJBQzVCLGlCQUFpQixFQUFFLFNBQVM7NEJBQzVCLGFBQWEsRUFBRSxJQUFJO3lCQUNwQjtxQkFDRixDQUFDLENBQ0wsQ0FBQTtvQkFDSCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDZCxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtvQkFDeEUsQ0FBQztvQkFDRCxPQUFPLE1BQU0sQ0FBQTtnQkFDZixDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVULE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDWixJQUFJO3FCQUNKLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDcEIsTUFBTSxDQUFDLGVBQWUsRUFDdEIsTUFBTSxDQUFDLElBQUksRUFDWCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFDMUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hCLENBQ0YsRUFDRCxxQkFBcUIsRUFDckIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsY0FBYyxFQUFFLEVBQUU7b0JBQ2hELFVBQVUsRUFBRTt3QkFDVixZQUFZLEVBQUUsS0FBSzt3QkFDbkIsWUFBWSxFQUFFLGNBQWM7d0JBQzVCLGlCQUFpQixFQUFFLFNBQVM7cUJBQzdCO2lCQUNGLENBQUMsRUFDRixNQUFNLENBQUMsT0FBTyxDQUNmLENBQUE7WUFDTCxDQUFDLENBQUM7U0FDOEIsQ0FBQTtJQUN0QyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iGACnD,CAAA;AAElC,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAEnE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAUrE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACxE,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,IAAI,CAAC,CAM1C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { reportError } from "@effect-app/infra/errorReporter";
|
|
2
|
+
import { Cause, Effect, Exit } from "effect-app";
|
|
3
|
+
const reportQueueError_ = reportError("Queue");
|
|
4
|
+
export const reportQueueError = (cause, extras) => reportQueueError_(cause, extras);
|
|
5
|
+
export function reportNonInterruptedFailure(context) {
|
|
6
|
+
const report = reportNonInterruptedFailureCause(context);
|
|
7
|
+
return (inp) => inp.pipe(Effect.onExit(Exit.match({
|
|
8
|
+
onFailure: report,
|
|
9
|
+
onSuccess: () => Effect.void
|
|
10
|
+
})), Effect.exit);
|
|
11
|
+
}
|
|
12
|
+
export function reportNonInterruptedFailureCause(context) {
|
|
13
|
+
return (cause) => {
|
|
14
|
+
if (Cause.isInterrupted(cause)) {
|
|
15
|
+
return Effect.failCause(cause);
|
|
16
|
+
}
|
|
17
|
+
return reportQueueError(cause, context);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1F1ZXVlTWFrZXIvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFFOUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsTUFBZ0MsRUFBRSxFQUFFLENBQ3ZGLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUVsQyxNQUFNLFVBQVUsMkJBQTJCLENBQUMsT0FBaUM7SUFDM0UsTUFBTSxNQUFNLEdBQUcsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEQsT0FBTyxDQUFVLEdBQW9CLEVBQWdDLEVBQUUsQ0FDckUsR0FBRyxDQUFDLElBQUksQ0FDTixNQUFNLENBQUMsTUFBTSxDQUNYLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDVCxTQUFTLEVBQUUsTUFBTTtRQUNqQixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7S0FDN0IsQ0FBQyxDQUNILEVBQ0QsTUFBTSxDQUFDLElBQUksQ0FDWixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxPQUFpQztJQUNoRixPQUFPLENBQUksS0FBZSxFQUFnQixFQUFFO1FBQzFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFxQixDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/memQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAe,CAAC,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAMlD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,SAAS;IAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5C,QAAQ,SAAS;IAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;;YAkC9B,MAAM,EAAE,MAAM,eACP,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;oBA8DzB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Tracer } from "effect";
|
|
2
|
+
import { Effect, Fiber, flow, S } from "effect-app";
|
|
3
|
+
import { pretty } from "effect-app/utils";
|
|
4
|
+
import { MemQueue } from "../adapters/memQueue.js";
|
|
5
|
+
import { getRequestContext, setupRequestContext } from "../api/setupRequest.js";
|
|
6
|
+
import { InfraLogger } from "../logger.js";
|
|
7
|
+
import { reportNonInterruptedFailure } from "./errors.js";
|
|
8
|
+
import { QueueMeta } from "./service.js";
|
|
9
|
+
/**
|
|
10
|
+
* @tsplus static QueueMaker.Ops makeMem
|
|
11
|
+
*/
|
|
12
|
+
export function makeMemQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
13
|
+
return Effect.gen(function* () {
|
|
14
|
+
const mem = yield* MemQueue;
|
|
15
|
+
const q = yield* mem.getOrCreateQueue(queueName);
|
|
16
|
+
const qDrain = yield* mem.getOrCreateQueue(queueDrainName);
|
|
17
|
+
const wireSchema = S.Struct({ body: schema, meta: QueueMeta });
|
|
18
|
+
const drainW = S.Struct({ body: drainSchema, meta: QueueMeta });
|
|
19
|
+
const parseDrain = flow(S.decodeUnknown(drainW), Effect.orDie);
|
|
20
|
+
return {
|
|
21
|
+
publish: (...messages) => Effect
|
|
22
|
+
.gen(function* () {
|
|
23
|
+
const requestContext = yield* getRequestContext;
|
|
24
|
+
return yield* Effect
|
|
25
|
+
.forEach(messages, (m) =>
|
|
26
|
+
// we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
27
|
+
S.encode(wireSchema)({ body: m, meta: requestContext }).pipe(Effect.orDie, Effect
|
|
28
|
+
.andThen(JSON.stringify),
|
|
29
|
+
// .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
|
|
30
|
+
Effect.flatMap((_) => q.offer(_))), { discard: true });
|
|
31
|
+
})
|
|
32
|
+
.pipe(Effect.withSpan("queue.publish: " + queueName, {
|
|
33
|
+
captureStackTrace: false,
|
|
34
|
+
kind: "producer",
|
|
35
|
+
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
36
|
+
})),
|
|
37
|
+
drain: (handleEvent, sessionId) => Effect.gen(function* () {
|
|
38
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName });
|
|
39
|
+
const processMessage = (msg) =>
|
|
40
|
+
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
41
|
+
Effect
|
|
42
|
+
.sync(() => JSON.parse(msg))
|
|
43
|
+
.pipe(Effect.flatMap(parseDrain), Effect.orDie, Effect
|
|
44
|
+
.flatMap(({ body, meta }) => {
|
|
45
|
+
let effect = InfraLogger
|
|
46
|
+
.logInfo(`[${queueDrainName}] Processing incoming message`)
|
|
47
|
+
.pipe(Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }), Effect.zipRight(handleEvent(body)), silenceAndReportError, (_) => setupRequestContext(_, meta), Effect
|
|
48
|
+
.withSpan(`queue.drain: ${queueDrainName}.${body._tag}`, {
|
|
49
|
+
captureStackTrace: false,
|
|
50
|
+
kind: "consumer",
|
|
51
|
+
attributes: {
|
|
52
|
+
"queue.name": queueDrainName,
|
|
53
|
+
"queue.sessionId": sessionId,
|
|
54
|
+
"queue.input": body
|
|
55
|
+
}
|
|
56
|
+
}));
|
|
57
|
+
if (meta.span) {
|
|
58
|
+
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span));
|
|
59
|
+
}
|
|
60
|
+
return effect;
|
|
61
|
+
}));
|
|
62
|
+
return yield* qDrain
|
|
63
|
+
.take
|
|
64
|
+
.pipe(Effect.flatMap((x) => processMessage(x).pipe(Effect.uninterruptible, Effect.fork, Effect.flatMap(Fiber.join))),
|
|
65
|
+
// TODO: normally a failed item would be returned to the queue and retried up to X times.
|
|
66
|
+
// .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
|
|
67
|
+
silenceAndReportError, Effect.withSpan(`queue.drain: ${queueDrainName}`, {
|
|
68
|
+
attributes: {
|
|
69
|
+
"queue.type": "mem",
|
|
70
|
+
"queue.name": queueDrainName,
|
|
71
|
+
"queue.sessionId": sessionId
|
|
72
|
+
}
|
|
73
|
+
}), Effect.forever);
|
|
74
|
+
})
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUXVldWVNYWtlci9tZW1RdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN6RCxPQUFPLEVBQWtCLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV4RDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBTTFCLFNBQWlCLEVBQ2pCLGNBQXNCLEVBQ3RCLE1BQTJCLEVBQzNCLFdBQTBDO0lBRTFDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDekIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDOUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTlELE9BQU87WUFDTCxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLENBQ3ZCLE1BQU07aUJBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDWixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQTtnQkFDL0MsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNO3FCQUNqQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZCLHVIQUF1SDtnQkFDdkgsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMxRCxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU07cUJBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzFCLHVFQUF1RTtnQkFDdkUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDM0IsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FDSCxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsRUFBRTtnQkFDN0MsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7YUFDNUQsQ0FBQyxDQUNIO1lBQ0wsS0FBSyxFQUFFLENBQ0wsV0FBMkQsRUFDM0QsU0FBa0IsRUFDbEIsRUFBRSxDQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNsQixNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUE7Z0JBQ3ZHLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQ3JDLHNIQUFzSDtnQkFDdEgsTUFBTTtxQkFDSCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDM0IsSUFBSSxDQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQzFCLE1BQU0sQ0FBQyxLQUFLLEVBQ1osTUFBTTtxQkFDSCxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO29CQUMxQixJQUFJLE1BQU0sR0FBRyxXQUFXO3lCQUNyQixPQUFPLENBQUMsSUFBSSxjQUFjLCtCQUErQixDQUFDO3lCQUMxRCxJQUFJLENBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQy9ELE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ2xDLHFCQUFxQixFQUNyQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osbUJBQW1CLENBQ2pCLENBQUMsRUFDRCxJQUFJLENBQ0wsRUFDSCxNQUFNO3lCQUNILFFBQVEsQ0FBQyxnQkFBZ0IsY0FBYyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDdkQsaUJBQWlCLEVBQUUsS0FBSzt3QkFDeEIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLFVBQVUsRUFBRTs0QkFDVixZQUFZLEVBQUUsY0FBYzs0QkFDNUIsaUJBQWlCLEVBQUUsU0FBUzs0QkFDNUIsYUFBYSxFQUFFLElBQUk7eUJBQ3BCO3FCQUNGLENBQUMsQ0FDTCxDQUFBO29CQUNILElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNkLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO29CQUN4RSxDQUFDO29CQUNELE9BQU8sTUFBTSxDQUFBO2dCQUNmLENBQUMsQ0FBQyxDQUNMLENBQUE7Z0JBQ0wsT0FBTyxLQUFLLENBQUMsQ0FBQyxNQUFNO3FCQUNqQixJQUFJO3FCQUNKLElBQUksQ0FDSCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDeEY7Z0JBQ0QseUZBQXlGO2dCQUN6Rix1SUFBdUk7Z0JBQ3ZJLHFCQUFxQixFQUNyQixNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixjQUFjLEVBQUUsRUFBRTtvQkFDaEQsVUFBVSxFQUFFO3dCQUNWLFlBQVksRUFBRSxLQUFLO3dCQUNuQixZQUFZLEVBQUUsY0FBYzt3QkFDNUIsaUJBQWlCLEVBQUUsU0FBUztxQkFDN0I7aUJBQ0YsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxPQUFPLENBQ2YsQ0FBQTtZQUNMLENBQUMsQ0FBQztTQUM4QixDQUFBO0lBQ3RDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/sbqueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAS,MAAM,EAAQ,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAIL,yBAAyB,EAE1B,MAAM,2BAA2B,CAAA;AAMlC;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;YAoB9B,MAAM,EAAE,MAAM,eACP,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;;qFAqGzB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wGAI1F"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { Tracer } from "effect";
|
|
2
|
+
import { Cause, Effect, flow, Layer, S } from "effect-app";
|
|
3
|
+
import { pretty } from "effect-app/utils";
|
|
4
|
+
import { LiveSender, LiveServiceBusClient, Sender, ServiceBusReceiverFactory, subscribe } from "../adapters/ServiceBus.js";
|
|
5
|
+
import { getRequestContext, setupRequestContext } from "../api/setupRequest.js";
|
|
6
|
+
import { InfraLogger } from "../logger.js";
|
|
7
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause, reportQueueError } from "./errors.js";
|
|
8
|
+
import { QueueMeta } from "./service.js";
|
|
9
|
+
/**
|
|
10
|
+
* @tsplus static QueueMaker.Ops makeServiceBus
|
|
11
|
+
*/
|
|
12
|
+
export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
13
|
+
const wireSchema = S.Struct({
|
|
14
|
+
body: schema,
|
|
15
|
+
meta: QueueMeta
|
|
16
|
+
});
|
|
17
|
+
const drainW = S.Struct({ body: drainSchema, meta: QueueMeta });
|
|
18
|
+
const parseDrain = flow(S.decodeUnknown(drainW), Effect.orDie);
|
|
19
|
+
return Effect.gen(function* () {
|
|
20
|
+
const s = yield* Sender;
|
|
21
|
+
const receiver = yield* ServiceBusReceiverFactory;
|
|
22
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
23
|
+
const reportError = reportNonInterruptedFailureCause({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
24
|
+
// TODO: or do async?
|
|
25
|
+
// This will make sure that the host receives the error (MainFiberSet.join), who will then interrupt everything and commence a shutdown and restart of app
|
|
26
|
+
// const deferred = yield* Deferred.make<never, ServiceBusError | Error>()
|
|
27
|
+
return {
|
|
28
|
+
drain: (handleEvent, sessionId) => Effect
|
|
29
|
+
.gen(function* () {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
+
function processMessage(messageBody) {
|
|
32
|
+
return Effect
|
|
33
|
+
.sync(() => JSON.parse(messageBody))
|
|
34
|
+
.pipe(Effect.flatMap((x) => parseDrain(x)), Effect.orDie, Effect
|
|
35
|
+
.flatMap(({ body, meta }) => {
|
|
36
|
+
let effect = InfraLogger
|
|
37
|
+
.logInfo(`[${queueDrainName}] Processing incoming message`)
|
|
38
|
+
.pipe(Effect.annotateLogs({
|
|
39
|
+
body: pretty(body),
|
|
40
|
+
meta: pretty(meta)
|
|
41
|
+
}), Effect.zipRight(handleEvent(body)), Effect.orDie)
|
|
42
|
+
// we silenceAndReportError here, so that the error is reported, and moves into the Exit.
|
|
43
|
+
.pipe(silenceAndReportError, (_) => setupRequestContext(_, meta), Effect
|
|
44
|
+
.withSpan(`queue.drain: ${queueDrainName}${sessionId ? `#${sessionId}` : ""}.${body._tag}`, {
|
|
45
|
+
captureStackTrace: false,
|
|
46
|
+
kind: "consumer",
|
|
47
|
+
attributes: {
|
|
48
|
+
"queue.name": queueDrainName,
|
|
49
|
+
"queue.sessionId": sessionId,
|
|
50
|
+
"queue.input": body
|
|
51
|
+
}
|
|
52
|
+
}));
|
|
53
|
+
if (meta.span) {
|
|
54
|
+
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span));
|
|
55
|
+
}
|
|
56
|
+
return effect;
|
|
57
|
+
}), Effect
|
|
58
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
59
|
+
.tapErrorCause(reportError));
|
|
60
|
+
}
|
|
61
|
+
return yield* subscribe({
|
|
62
|
+
processMessage: (x) => processMessage(x.body).pipe(Effect.uninterruptible),
|
|
63
|
+
processError: (err) => reportQueueError(Cause.fail(err.error))
|
|
64
|
+
// Deferred.completeWith(
|
|
65
|
+
// deferred,
|
|
66
|
+
// reportFatalQueueError(Cause.fail(err.error))
|
|
67
|
+
// .pipe(Effect.andThen(Effect.fail(err.error)))
|
|
68
|
+
// )
|
|
69
|
+
}, sessionId)
|
|
70
|
+
.pipe(Effect.provideService(ServiceBusReceiverFactory, receiver));
|
|
71
|
+
})
|
|
72
|
+
// .pipe(Effect.andThen(Deferred.await(deferred).pipe(Effect.orDie))),
|
|
73
|
+
.pipe(Effect.andThen(Effect.never)),
|
|
74
|
+
publish: (...messages) => Effect
|
|
75
|
+
.gen(function* () {
|
|
76
|
+
const requestContext = yield* getRequestContext;
|
|
77
|
+
return yield* Effect
|
|
78
|
+
.promise((abortSignal) => s.sendMessages(messages.map((m) => ({
|
|
79
|
+
body: JSON.stringify(S.encodeSync(wireSchema)({
|
|
80
|
+
body: m,
|
|
81
|
+
meta: requestContext
|
|
82
|
+
})),
|
|
83
|
+
messageId: m.id, /* correllationid: requestId */
|
|
84
|
+
contentType: "application/json",
|
|
85
|
+
sessionId: "sessionId" in m ? m.sessionId : undefined
|
|
86
|
+
})), { abortSignal }));
|
|
87
|
+
})
|
|
88
|
+
.pipe(Effect.withSpan("queue.publish: " + queueName, {
|
|
89
|
+
captureStackTrace: false,
|
|
90
|
+
kind: "producer",
|
|
91
|
+
attributes: { "message_tags": messages.map((_) => _._tag) }
|
|
92
|
+
}))
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @tsplus static QueueMaker.Ops makeServiceBusLayers
|
|
98
|
+
*/
|
|
99
|
+
export function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
100
|
+
return Layer.merge(ServiceBusReceiverFactory.Live(queueDrainName), LiveSender(queueName)).pipe(Layer.provide(LiveServiceBusClient(url)));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9RdWV1ZU1ha2VyL3NicXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLHlCQUF5QixFQUN6QixTQUFTLEVBQ1YsTUFBTSwyQkFBMkIsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3RyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV4RDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FNakMsU0FBaUIsRUFDakIsY0FBc0IsRUFDdEIsTUFBMkIsRUFDM0IsV0FBMEM7SUFFMUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQTtJQUNGLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxD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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Effect, NonEmptyReadonlyArray, Scope } from "effect-app";
|
|
2
|
-
import { RequestContext } from "
|
|
2
|
+
import { RequestContext } from "../RequestContext.js";
|
|
3
3
|
export interface QueueBase<Evt, DrainEvt> {
|
|
4
4
|
drain: <DrainE, DrainR>(makeHandleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect<never, never, Scope | DrainR>;
|
|
5
5
|
publish: (...messages: NonEmptyReadonlyArray<Evt>) => Effect<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,WAAW,SAAS,CAAC,GAAG,EAAE,QAAQ;IACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EACpB,eAAe,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAC/D,SAAS,CAAC,EAAE,MAAM,KACf,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,CAAA;IACzC,OAAO,EAAE,CACP,GAAG,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC,KACpC,MAAM,CAAC,IAAI,CAAC,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;CAAG;AACjC,eAAO,MAAM,UAAU,EAAE,aAAkB,CAAA;AAE3C,eAAO,MAAM,SAAS,uBAAiB,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { RequestContext } from "../RequestContext.js";
|
|
2
|
+
export const QueueMaker = {};
|
|
3
|
+
export const QueueMeta = RequestContext;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9RdWV1ZU1ha2VyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBZ0JyRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQTtBQUUzQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestFiberSet.d.ts","sourceRoot":"","sources":["../src/RequestFiberSet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Context, Effect, Fiber, FiberSet, Option } from "effect-app";
|
|
2
|
+
import { reportRequestError, reportUnknownRequestError } from "./api/reportError.js";
|
|
3
|
+
import { InfraLogger } from "./logger.js";
|
|
4
|
+
const getRootParentSpan = Effect.gen(function* () {
|
|
5
|
+
let span = yield* Effect.currentSpan.pipe(Effect.catchTag("NoSuchElementException", () => Effect.succeed(null)));
|
|
6
|
+
if (!span)
|
|
7
|
+
return span;
|
|
8
|
+
while (span._tag === "Span" && Option.isSome(span.parent)) {
|
|
9
|
+
span = span.parent.value;
|
|
10
|
+
}
|
|
11
|
+
return span;
|
|
12
|
+
});
|
|
13
|
+
export const setRootParentSpan = (self) => getRootParentSpan.pipe(Effect.andThen((span) => span ? Effect.withParentSpan(self, span) : self));
|
|
14
|
+
const make = Effect.gen(function* () {
|
|
15
|
+
const set = yield* FiberSet.make();
|
|
16
|
+
const add = (...fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
17
|
+
const addAll = (fibers) => Effect.sync(() => fibers.forEach((_) => FiberSet.unsafeAdd(set, _)));
|
|
18
|
+
const join = FiberSet.size(set).pipe(Effect.andThen((count) => InfraLogger.logInfo(`Joining ${count} current fibers on the RequestFiberSet`)), Effect.andThen(FiberSet.join(set)));
|
|
19
|
+
const run = FiberSet.run(set);
|
|
20
|
+
const register = (self) => self.pipe(Effect.fork, Effect.tap(add), Effect.andThen(Fiber.join));
|
|
21
|
+
// const waitUntilEmpty = Effect.gen(function*() {
|
|
22
|
+
// const currentSize = yield* FiberSet.size(set)
|
|
23
|
+
// if (currentSize === 0) {
|
|
24
|
+
// return
|
|
25
|
+
// }
|
|
26
|
+
// yield* Effect.logInfo("Waiting RequestFiberSet to be empty: " + currentSize)
|
|
27
|
+
// while ((yield* FiberSet.size(set)) > 0) yield* Effect.sleep("250 millis")
|
|
28
|
+
// yield* Effect.logDebug("RequestFiberSet is empty")
|
|
29
|
+
// })
|
|
30
|
+
// TODO: loop and interrupt all fibers in the set continuously?
|
|
31
|
+
const interrupt = Fiber.interruptAll(set);
|
|
32
|
+
/**
|
|
33
|
+
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
34
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
35
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
36
|
+
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
37
|
+
*
|
|
38
|
+
* The parent span is set to the root span of the current fiber.
|
|
39
|
+
* Reports errors.
|
|
40
|
+
*/
|
|
41
|
+
function forkDaemonReport(self) {
|
|
42
|
+
return self.pipe(reportRequestError, setRootParentSpan, Effect.uninterruptible, run);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Forks the effect into a new fiber attached to the RequestFiberSet scope. Because the
|
|
46
|
+
* new fiber isn't attached to the parent, when the fiber executing the
|
|
47
|
+
* returned effect terminates, the forked fiber will continue running.
|
|
48
|
+
* The fiber will be interrupted when the RequestFiberSet scope is closed.
|
|
49
|
+
*
|
|
50
|
+
* The parent span is set to the root span of the current fiber.
|
|
51
|
+
* Reports unexpected errors.
|
|
52
|
+
*/
|
|
53
|
+
function forkDaemonReportUnexpected(self) {
|
|
54
|
+
return self
|
|
55
|
+
.pipe(reportUnknownRequestError, setRootParentSpan, Effect.uninterruptible, run);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
interrupt,
|
|
59
|
+
join,
|
|
60
|
+
run,
|
|
61
|
+
add,
|
|
62
|
+
addAll,
|
|
63
|
+
register,
|
|
64
|
+
forkDaemonReport,
|
|
65
|
+
forkDaemonReportUnexpected
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Whenever you fork a fiber for a Request, and you want to prevent dependent services to close prematurely on interruption,
|
|
70
|
+
* like the ServiceBus Sender, you should register these fibers in this FiberSet.
|
|
71
|
+
*/
|
|
72
|
+
export class RequestFiberSet extends Context.TagMakeId("RequestFiberSet", make)() {
|
|
73
|
+
static Live = this.toLayerScoped();
|
|
74
|
+
static register = (self) => this.use((_) => _.register(self));
|
|
75
|
+
static run = (self) => this.use((_) => _.run(self));
|
|
76
|
+
static forkDaemonReport = (self) => this.use((_) => _.forkDaemonReport(self));
|
|
77
|
+
static forkDaemonReportUnexpected = (self) => this.use((_) => _.forkDaemonReportUnexpected(self));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdEZpYmVyU2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JlcXVlc3RGaWJlclNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDNUMsSUFBSSxJQUFJLEdBQTBCLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM5RCxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDdEUsQ0FBQTtJQUNELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFELElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUMxQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUMsQ0FBQTtBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQVUsSUFBcUIsRUFBRSxFQUFFLENBQ2xFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFj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QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNoRyxNQUFNLENBQVUsR0FBRyxHQUFHLENBQVUsSUFBcUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3RGLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBRyxDQUFVLElBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2hILE1BQU0sQ0FBVSwwQkFBMEIsR0FBRyxDQUFVLElBQXFCLEVBQUUsRUFBRSxDQUM5RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextMapContainer.d.ts","sourceRoot":"","sources":["../../src/Store/ContextMapContainer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAY,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;;;;AAUzC,qBAAa,yBAA0B,SAAQ,8BAA6C;CAAG;AAE/F,eAAO,MAAM,aAAa,6DAEzB,CAAA;AAED,eAAO,MAAM,eAAe,mCAA+E,CAAA"}
|
|
@@ -10,4 +10,4 @@ export class ContextMapNotStartedError extends Data.TaggedError("ContextMapNotSt
|
|
|
10
10
|
}
|
|
11
11
|
export const getContextMap = FiberRef.get(ContextMapContainer).pipe(Effect.filterOrFail((_) => _ !== "root", () => new ContextMapNotStartedError()));
|
|
12
12
|
export const startContextMap = Effect.flatMap(ContextMap.make, (_) => FiberRef.set(ContextMapContainer, _));
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dE1hcENvbnRhaW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9Db250ZXh0TWFwQ29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXpDLDZEQUE2RDtBQUM3RCwwQ0FBMEM7QUFDMUMseUVBQXlFO0FBQ3pFLDRHQUE0RztBQUM1Ryx5RkFBeUY7QUFFekYsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFzQixNQUFNLENBQUMsQ0FBQTtBQUU1RSxNQUFNLE9BQU8seUJBQTBCLFNBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQztDQUFHO0FBRS9GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUNqRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUNoRixDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBIn0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect-app";
|
|
2
2
|
import type { NonEmptyReadonlyArray } from "effect-app";
|
|
3
|
-
import type { FilterResult } from "
|
|
3
|
+
import type { FilterResult } from "../../Model/filter/filterApi.js";
|
|
4
4
|
import type { SupportedValues } from "../service.js";
|
|
5
5
|
export declare function logQuery(q: {
|
|
6
6
|
query: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/Store/Cosmos/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,MAAM,EAAqB,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,wBAAgB,QAAQ,CAAC,CAAC,EAAE;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE,CAAA;KACpD,EAAE,CAAA;CACJ,qCAcA;AAKD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,MAAM,CAAC,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACtC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAAC,EACzE,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM;;;;;;EAyKf"}
|