@effect-app/infra 4.0.0-beta.9 → 4.0.0-beta.91
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 +596 -0
- package/dist/CUPS.d.ts +3 -3
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +3 -3
- package/dist/Emailer/Sendgrid.js +1 -1
- package/dist/Emailer/service.d.ts +3 -3
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +3 -3
- package/dist/MainFiberSet.d.ts +2 -2
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +3 -3
- package/dist/Model/Repository/internal/internal.d.ts +3 -3
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +11 -7
- package/dist/Model/Repository/makeRepo.d.ts +2 -2
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +1 -1
- package/dist/Model/Repository/validation.d.ts +7 -6
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/query/dsl.d.ts +9 -9
- package/dist/Operations.d.ts +2 -2
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Operations.js +3 -3
- package/dist/OperationsRepo.d.ts +2 -2
- package/dist/OperationsRepo.d.ts.map +1 -1
- package/dist/OperationsRepo.js +3 -3
- package/dist/QueueMaker/SQLQueue.d.ts +3 -5
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +9 -7
- package/dist/QueueMaker/errors.d.ts +1 -1
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +10 -9
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +11 -9
- package/dist/RequestContext.d.ts +41 -21
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +5 -5
- package/dist/RequestFiberSet.d.ts +2 -2
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +5 -5
- package/dist/Store/ContextMapContainer.d.ts +14 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +64 -3
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +91 -56
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +3 -4
- package/dist/Store/Memory.d.ts +2 -2
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +4 -4
- package/dist/Store/SQL/Pg.d.ts +4 -0
- package/dist/Store/SQL/Pg.d.ts.map +1 -0
- package/dist/Store/SQL/Pg.js +186 -0
- package/dist/Store/SQL/query.d.ts +36 -0
- package/dist/Store/SQL/query.d.ts.map +1 -0
- package/dist/Store/SQL/query.js +385 -0
- package/dist/Store/SQL.d.ts +11 -0
- package/dist/Store/SQL.d.ts.map +1 -0
- package/dist/Store/SQL.js +212 -0
- package/dist/Store/index.d.ts +1 -1
- package/dist/Store/index.d.ts.map +1 -1
- package/dist/Store/index.js +11 -1
- package/dist/Store/service.d.ts +8 -5
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +14 -6
- package/dist/adapters/SQL/Model.d.ts +2 -5
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +21 -13
- package/dist/adapters/ServiceBus.d.ts +6 -6
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +9 -9
- package/dist/adapters/cosmos-client.d.ts +2 -2
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +3 -3
- package/dist/adapters/logger.d.ts.map +1 -1
- package/dist/adapters/memQueue.d.ts +2 -2
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +3 -3
- package/dist/adapters/mongo-client.d.ts +2 -2
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +3 -3
- package/dist/adapters/redis-client.d.ts +3 -3
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +3 -3
- package/dist/api/ContextProvider.d.ts +6 -6
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +6 -6
- package/dist/api/internal/auth.d.ts +1 -1
- package/dist/api/internal/events.d.ts +2 -2
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +7 -5
- package/dist/api/layerUtils.d.ts +5 -5
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +5 -5
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +3 -3
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.d.ts +35 -1
- package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
- package/dist/api/routing/middleware/middleware.js +39 -1
- package/dist/api/routing/schema/jwt.d.ts +1 -1
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +1 -1
- package/dist/api/routing.d.ts +1 -5
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +3 -2
- package/dist/api/setupRequest.d.ts +6 -3
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +11 -6
- package/dist/errorReporter.d.ts +1 -1
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +1 -1
- package/dist/fileUtil.js +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/rateLimit.js +1 -1
- package/examples/query.ts +29 -25
- package/package.json +32 -18
- package/src/CUPS.ts +2 -2
- package/src/Emailer/Sendgrid.ts +1 -1
- package/src/Emailer/service.ts +2 -2
- package/src/MainFiberSet.ts +2 -2
- package/src/Model/Repository/internal/internal.ts +11 -8
- package/src/Model/Repository/makeRepo.ts +2 -2
- package/src/Operations.ts +2 -2
- package/src/OperationsRepo.ts +2 -2
- package/src/QueueMaker/SQLQueue.ts +10 -10
- package/src/QueueMaker/memQueue.ts +41 -42
- package/src/QueueMaker/sbqueue.ts +65 -62
- package/src/RequestContext.ts +4 -4
- package/src/RequestFiberSet.ts +4 -4
- package/src/Store/ContextMapContainer.ts +98 -2
- package/src/Store/Cosmos.ts +273 -207
- package/src/Store/Disk.ts +2 -3
- package/src/Store/Memory.ts +4 -6
- package/src/Store/SQL/Pg.ts +328 -0
- package/src/Store/SQL/query.ts +430 -0
- package/src/Store/SQL.ts +357 -0
- package/src/Store/index.ts +10 -0
- package/src/Store/service.ts +16 -7
- package/src/adapters/SQL/Model.ts +76 -71
- package/src/adapters/ServiceBus.ts +8 -8
- package/src/adapters/cosmos-client.ts +2 -2
- package/src/adapters/memQueue.ts +2 -2
- package/src/adapters/mongo-client.ts +2 -2
- package/src/adapters/redis-client.ts +2 -2
- package/src/api/ContextProvider.ts +11 -11
- package/src/api/internal/events.ts +7 -6
- package/src/api/layerUtils.ts +8 -8
- package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
- package/src/api/routing/middleware/middleware.ts +43 -0
- package/src/api/routing/schema/jwt.ts +2 -3
- package/src/api/routing.ts +7 -6
- package/src/api/setupRequest.ts +27 -7
- package/src/errorReporter.ts +1 -1
- package/src/fileUtil.ts +1 -1
- package/src/rateLimit.ts +2 -2
- package/test/contextProvider.test.ts +5 -5
- package/test/controller.test.ts +12 -9
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/fixtures.d.ts +19 -9
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +11 -9
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
- package/test/dist/sql-store.test.d.ts.map +1 -0
- package/test/fixtures.ts +10 -8
- package/test/query.test.ts +160 -14
- package/test/rawQuery.test.ts +19 -17
- package/test/requires.test.ts +6 -5
- package/test/rpc-multi-middleware.test.ts +73 -4
- package/test/sql-store.test.ts +776 -0
- package/test/validateSample.test.ts +1 -1
- package/tsconfig.json +0 -1
package/dist/errorReporter.js
CHANGED
|
@@ -76,4 +76,4 @@ export function reportMessage(message, extras) {
|
|
|
76
76
|
console.warn(message, extras);
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JSZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvclJlcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFpQixNQUFNLFlBQVksQ0FBQTtBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLE1BQU0saUJBQWlCLEdBQUcsQ0FBSSxLQUFxQixFQUFFLElBQVksRUFBcUIsRUFBRTtJQUN0RixJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBWTtJQUVaLE9BQU8sQ0FDTCxLQUEyQixFQUMzQixNQUFnQyxFQUNoQyxRQUEyQixPQUFPLEVBQ2xDLEVBQUUsQ0FDRixNQUFNO1NBQ0gsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUNaLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENB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
|
package/dist/fileUtil.js
CHANGED
|
@@ -73,4 +73,4 @@ export function withFileLock(filePath, action) {
|
|
|
73
73
|
})
|
|
74
74
|
.pipe(Effect.scoped);
|
|
75
75
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZVV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmlsZVV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBO0FBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFHbkMsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzVCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNuQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxRQUFRLE1BQU0saUJBQWlCLENBQUE7QUFHdEMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxRQUFnQjtJQUN2QyxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsUUFBZ0I7SUFDbkQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxRQUFnQjtJQUN2QyxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUNsSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBYztJQUVkLE9BQU8sQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLENB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
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;iBACiO,GAAG;eAAkF,GAAG;eAAkF,GAAG;cAAiF,GAAG;eAAkF,GAAG;8DAA+G,GAAI;CADnoB,CAAA"}
|
package/dist/rateLimit.js
CHANGED
|
@@ -66,4 +66,4 @@ export function naiveRateLimit(n, d) {
|
|
|
66
66
|
.forEach(batch, forEachItem, { concurrency: n })
|
|
67
67
|
.pipe(Effect.flatMap(forEachBatch))))));
|
|
68
68
|
}
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JhdGVMaW1pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNO0FBQ04sOEVBQThFO0FBQzlFLHVFQUF1RTtBQUN2RSxtRkFBbUY7QUFDbkYsK0JBQStCO0FBQy9CLE1BQU07QUFDTiw2RUFBNkU7QUFDN0Usd0dBQXdHO0FBQ3hHLHVCQUF1QjtBQUN2QixvQ0FBb0M7QUFDcEMscUJBQXFCO0FBQ3JCLG1EQUFtRDtBQUNuRCxnQ0FBZ0M7QUFDaEMsMkJBQTJCO0FBQzNCLHlDQUF5QztBQUN6Qyw0QkFBNEI7QUFDNUIscUNBQXFDO0FBQ3JDLGtCQUFrQjtBQUNsQixVQUFVO0FBQ1YsTUFBTTtBQUNOLElBQUk7QUFFSixPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLEVBQXNCLE1BQU0sWUFBWSxDQUFBO0FBRzdFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQWUsRUFBRSxRQUEyQjtJQUNsRixPQUFPLENBQUMsSUFBZSxFQUF1RSxFQUFFO1FBQzlGLE9BQU8sQ0FBVSxNQUE4QixFQUFFLEVBQUUsQ0FDakQsTUFBTSxDQUFDLG1CQUFtQixDQUN4QixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLE9BQU8sQ0FBQyxNQUFNLENBQUM7YUFDWixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUM5QyxDQUFDLENBQ0wsQ0FBQyxDQUNQLENBQUE7SUFDTCxDQUFDLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsQ0FBUyxFQUNULFdBQXNGLEVBQ3RGLFlBQTJFO0lBRTNFLE9BQU8sQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxNQUFNO1NBQ0gsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEQsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQzNCLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FDbkIsQ0FBUyxFQUNULFdBQXNGLEVBQ3RGLFlBQTJFO0lBRTNFLE9BQU8sQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FDWixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDeEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxNQUFNO1NBQ0gsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO1NBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckQsQ0FBQTtBQUNMLENBQUM7QUFFRCw2QkFBNkI7QUFDN0IsZUFBZTtBQUNmLFdBQVc7QUFDWCxNQUFNO0FBQ04sc0NBQXNDO0FBQ3RDLDZCQUE2QjtBQUM3Qix1REFBdUQ7QUFDdkQsaUVBQWlFO0FBQ2pFLFdBQVc7QUFDWCxxQ0FBcUM7QUFDckMsc0JBQXNCO0FBQ3RCLHdDQUF3QztBQUN4QyxtRkFBbUY7QUFDbkYsc0JBQXNCO0FBQ3RCLElBQUk7QUFFSixNQUFNLFVBQVUsY0FBYyxDQUM1QixDQUFTLEVBQ1QsQ0FBb0I7SUFFcEIsT0FBTyxDQUFJLEtBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDakMsV0FBNkMsRUFDN0MsWUFBbUQsRUFDbkQsRUFBRSxDQUNGLE1BQU0sQ0FBQyxPQUFPLENBQ1osS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQ3hCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ1gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDYixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDbEIsTUFBTTtTQUNILE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQ3RDLENBQUMsQ0FDUCxDQUFDLENBQUE7QUFDTixDQUFDIn0=
|
package/examples/query.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { expectTypeOf } from "@effect/vitest"
|
|
2
|
+
import { Effect, Layer, ManagedRuntime, S } from "effect-app"
|
|
2
3
|
import { makeRepo } from "../src/Model.js"
|
|
3
|
-
import { and, make, one, or, order, page, project, QueryWhere, where } from "../src/Model/query.js"
|
|
4
|
+
import { and, make, one, or, order, page, project, type QueryWhere, where } from "../src/Model/query.js"
|
|
4
5
|
import { MemoryStoreLive } from "../src/Store/Memory.js"
|
|
5
|
-
import { expectTypeOf } from "@effect/vitest"
|
|
6
6
|
|
|
7
7
|
const str = S.Struct({ _tag: S.Literal("string"), value: S.String })
|
|
8
|
-
const num = S.Struct({ _tag: S.Literal("number"), value: S.
|
|
8
|
+
const num = S.Struct({ _tag: S.Literal("number"), value: S.Finite })
|
|
9
9
|
const someUnion = S.Union(str, num)
|
|
10
10
|
|
|
11
11
|
export class Something extends S.TaggedClass<Something>()("Something", {
|
|
12
12
|
id: S.StringId.withDefault,
|
|
13
13
|
displayName: S.NonEmptyString255,
|
|
14
14
|
n: S.Date.withDefault,
|
|
15
|
-
union: someUnion.pipe(S.
|
|
15
|
+
union: someUnion.pipe(S.withConstructorDefault(Effect.succeed({ _tag: "string" as const, value: "hi" })))
|
|
16
16
|
}) {}
|
|
17
17
|
|
|
18
18
|
export class SomethingElse extends S.TaggedClass<SomethingElse>()("SomethingElse", {
|
|
@@ -100,31 +100,35 @@ const rt = ManagedRuntime.make(SomethingRepo.Test)
|
|
|
100
100
|
rt.runFork(program)
|
|
101
101
|
|
|
102
102
|
const test1 = make<Union.Encoded>().pipe(
|
|
103
|
-
where("union._tag", "string")
|
|
103
|
+
where("union._tag", "string")
|
|
104
104
|
)
|
|
105
105
|
|
|
106
|
-
expectTypeOf(test1).toEqualTypeOf<
|
|
107
|
-
|
|
108
|
-
readonly
|
|
109
|
-
readonly
|
|
110
|
-
readonly
|
|
106
|
+
expectTypeOf(test1).toEqualTypeOf<
|
|
107
|
+
QueryWhere<Union.Encoded, {
|
|
108
|
+
readonly _tag: "Something"
|
|
109
|
+
readonly id: string
|
|
110
|
+
readonly displayName: string
|
|
111
|
+
readonly n: string
|
|
111
112
|
readonly union: {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
}
|
|
113
|
+
readonly _tag: "string"
|
|
114
|
+
readonly value: string
|
|
115
|
+
}
|
|
116
|
+
}>
|
|
117
|
+
>()
|
|
116
118
|
|
|
117
119
|
const testneq1 = make<Union.Encoded>().pipe(
|
|
118
|
-
where("union._tag", "neq", "string")
|
|
120
|
+
where("union._tag", "neq", "string")
|
|
119
121
|
)
|
|
120
122
|
|
|
121
|
-
expectTypeOf(testneq1).toEqualTypeOf<
|
|
122
|
-
|
|
123
|
-
readonly
|
|
124
|
-
readonly
|
|
125
|
-
readonly
|
|
123
|
+
expectTypeOf(testneq1).toEqualTypeOf<
|
|
124
|
+
QueryWhere<Union.Encoded, {
|
|
125
|
+
readonly _tag: "Something"
|
|
126
|
+
readonly id: string
|
|
127
|
+
readonly displayName: string
|
|
128
|
+
readonly n: string
|
|
126
129
|
readonly union: {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
}
|
|
130
|
-
}
|
|
130
|
+
readonly _tag: "number"
|
|
131
|
+
readonly value: number
|
|
132
|
+
}
|
|
133
|
+
}>
|
|
134
|
+
>()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.91",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -8,47 +8,49 @@
|
|
|
8
8
|
"change-case": "^5.4.4",
|
|
9
9
|
"cross-fetch": "^4.1.0",
|
|
10
10
|
"express-oauth2-jwt-bearer": "^1.7.4",
|
|
11
|
-
"fast-check": "~4.
|
|
11
|
+
"fast-check": "~4.6.0",
|
|
12
12
|
"path-parser": "^6.1.0",
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.3.1",
|
|
16
|
-
"effect-app": "4.0.0-beta.
|
|
16
|
+
"effect-app": "4.0.0-beta.91"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@azure/cosmos": "^4.9.
|
|
19
|
+
"@azure/cosmos": "^4.9.2",
|
|
20
20
|
"@azure/service-bus": "^7.9.5",
|
|
21
|
-
"@sentry/node": "10.
|
|
22
|
-
"@sentry/opentelemetry": "10.
|
|
21
|
+
"@sentry/node": "10.47.0",
|
|
22
|
+
"@sentry/opentelemetry": "10.47.0",
|
|
23
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
23
24
|
"@types/express": "^5.0.6",
|
|
24
|
-
"@types/node": "25.
|
|
25
|
+
"@types/node": "25.5.2",
|
|
25
26
|
"@types/proper-lockfile": "^4.1.4",
|
|
26
27
|
"@types/redis": "^2.8.32",
|
|
27
28
|
"@types/redlock": "^4.0.8",
|
|
29
|
+
"better-sqlite3": "^12.9.0",
|
|
28
30
|
"express": "^5.2.1",
|
|
29
31
|
"jwks-rsa": "2.1.4",
|
|
30
32
|
"jwt-decode": "^4.0.0",
|
|
31
|
-
"mongodb": "7.1.
|
|
33
|
+
"mongodb": "7.1.1",
|
|
32
34
|
"redis": "^3.1.2",
|
|
33
35
|
"redlock": "^4.2.0",
|
|
34
36
|
"strip-ansi": "^7.2.0",
|
|
35
|
-
"typescript": "~
|
|
36
|
-
"vitest": "^4.
|
|
37
|
-
"@effect-app/eslint-shared-config": "0.5.7-beta.
|
|
37
|
+
"typescript": "~6.0.2",
|
|
38
|
+
"vitest": "^4.1.3",
|
|
39
|
+
"@effect-app/eslint-shared-config": "0.5.7-beta.9"
|
|
38
40
|
},
|
|
39
41
|
"peerDependencies": {
|
|
40
|
-
"@azure/cosmos": "^4.9.
|
|
42
|
+
"@azure/cosmos": "^4.9.2",
|
|
41
43
|
"@azure/service-bus": "^7.9.5",
|
|
42
|
-
"@effect/vitest": "^4.0.0-beta.
|
|
44
|
+
"@effect/vitest": "^4.0.0-beta.47",
|
|
43
45
|
"@sendgrid/helpers": "^8.0.0",
|
|
44
46
|
"@sendgrid/mail": "^8.1.6",
|
|
45
|
-
"@sentry/node": "10.
|
|
46
|
-
"@sentry/opentelemetry": "10.
|
|
47
|
+
"@sentry/node": "10.47.0",
|
|
48
|
+
"@sentry/opentelemetry": "10.47.0",
|
|
49
|
+
"effect": "^4.0.0-beta.47",
|
|
50
|
+
"express": "^5.2.1",
|
|
47
51
|
"jwt-decode": "^4.0.0",
|
|
48
52
|
"redis": "^3.1.2",
|
|
49
|
-
"redlock": "^4.2.0"
|
|
50
|
-
"effect": "^4.0.0-beta.25",
|
|
51
|
-
"express": "^5.2.1"
|
|
53
|
+
"redlock": "^4.2.0"
|
|
52
54
|
},
|
|
53
55
|
"typesVersions": {
|
|
54
56
|
"*": {
|
|
@@ -226,6 +228,18 @@
|
|
|
226
228
|
"types": "./dist/Store/Memory.d.ts",
|
|
227
229
|
"default": "./dist/Store/Memory.js"
|
|
228
230
|
},
|
|
231
|
+
"./Store/SQL": {
|
|
232
|
+
"types": "./dist/Store/SQL.d.ts",
|
|
233
|
+
"default": "./dist/Store/SQL.js"
|
|
234
|
+
},
|
|
235
|
+
"./Store/SQL/Pg": {
|
|
236
|
+
"types": "./dist/Store/SQL/Pg.d.ts",
|
|
237
|
+
"default": "./dist/Store/SQL/Pg.js"
|
|
238
|
+
},
|
|
239
|
+
"./Store/SQL/query": {
|
|
240
|
+
"types": "./dist/Store/SQL/query.d.ts",
|
|
241
|
+
"default": "./dist/Store/SQL/query.js"
|
|
242
|
+
},
|
|
229
243
|
"./Store/codeFilter": {
|
|
230
244
|
"types": "./dist/Store/codeFilter.d.ts",
|
|
231
245
|
"default": "./dist/Store/codeFilter.js"
|
package/src/CUPS.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type FileOptions, tempFile } from "@effect-app/infra/fileUtil"
|
|
2
2
|
import cp from "child_process"
|
|
3
|
-
import { Config, Effect, Layer, Option, Predicate, S
|
|
3
|
+
import { Config, Context, Effect, Layer, Option, Predicate, S } from "effect-app"
|
|
4
4
|
import { pretty } from "effect-app/utils"
|
|
5
5
|
import fs from "fs"
|
|
6
6
|
import os from "os"
|
|
@@ -100,7 +100,7 @@ export const CUPSConfig = Config.all({
|
|
|
100
100
|
)
|
|
101
101
|
})
|
|
102
102
|
|
|
103
|
-
export class CUPS extends
|
|
103
|
+
export class CUPS extends Context.Service<CUPS>()("effect-app/CUPS", {
|
|
104
104
|
make: Effect.gen(function*() {
|
|
105
105
|
const config = yield* CUPSConfig
|
|
106
106
|
const serverUrl = Option.getOrUndefined(config.server)
|
package/src/Emailer/Sendgrid.ts
CHANGED
|
@@ -42,7 +42,7 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
|
|
|
42
42
|
(err, result) =>
|
|
43
43
|
err
|
|
44
44
|
? resume(Effect.fail(err))
|
|
45
|
-
: resume(Effect.sync(() => result
|
|
45
|
+
: resume(Effect.sync(() => result))
|
|
46
46
|
)
|
|
47
47
|
)
|
|
48
48
|
.pipe(Effect.mapError((raw) => new SendMailError({ raw })))
|
package/src/Emailer/service.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js"
|
|
2
2
|
import type { ResponseError } from "@sendgrid/mail"
|
|
3
|
-
import { Data, type Effect, type NonEmptyReadonlyArray, type Redacted
|
|
3
|
+
import { Context, Data, type Effect, type NonEmptyReadonlyArray, type Redacted } from "effect-app"
|
|
4
4
|
import type { Email } from "effect-app/Schema"
|
|
5
5
|
|
|
6
6
|
export class SendMailError extends Data.TaggedError("SendMailError")<{
|
|
7
7
|
readonly raw: Error | ResponseError
|
|
8
8
|
}> {}
|
|
9
9
|
|
|
10
|
-
export class Emailer extends
|
|
10
|
+
export class Emailer extends Context.Opaque<Emailer, {
|
|
11
11
|
sendMail: (msg: EmailMsgOptionalFrom) => Effect.Effect<void, SendMailError>
|
|
12
12
|
}>()("effect-app/Emailer") {}
|
|
13
13
|
|
package/src/MainFiberSet.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Effect, Fiber, FiberSet, Layer
|
|
1
|
+
import { Context, Effect, Fiber, FiberSet, Layer } from "effect-app"
|
|
2
2
|
import type {} from "effect/Scope"
|
|
3
3
|
import { InfraLogger } from "./logger.js"
|
|
4
4
|
import { reportNonInterruptedFailureCause } from "./QueueMaker/errors.js"
|
|
@@ -62,7 +62,7 @@ const make = Effect.gen(function*() {
|
|
|
62
62
|
* you should register these long running fibers in a FiberSet, and join them at the end of your main program.
|
|
63
63
|
* This way any errors will blow up the main program instead of fibers dying unknowingly.
|
|
64
64
|
*/
|
|
65
|
-
export class MainFiberSet extends
|
|
65
|
+
export class MainFiberSet extends Context.Service<MainFiberSet>()("MainFiberSet", { make }) {
|
|
66
66
|
static readonly Live = Layer.effect(this, this.make)
|
|
67
67
|
static readonly JoinLive = this.asEffect().pipe(
|
|
68
68
|
Effect.andThen((_) => _.join),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import type {} from "effect/Equal"
|
|
3
3
|
import type {} from "effect/Hash"
|
|
4
|
-
import { Array, Chunk, Effect, Equivalence, flow, type NonEmptyReadonlyArray, Option, pipe, Pipeable, PubSub, Result, S, SchemaAST,
|
|
4
|
+
import { Array, Chunk, Context, Effect, Equivalence, flow, type NonEmptyReadonlyArray, Option, pipe, Pipeable, PubSub, Result, S, SchemaAST, Unify } from "effect-app"
|
|
5
5
|
import { toNonEmptyArray } from "effect-app/Array"
|
|
6
6
|
import { NotFoundError } from "effect-app/client/errors"
|
|
7
7
|
import { flatMapOption } from "effect-app/Effect"
|
|
@@ -55,14 +55,14 @@ export function makeRepoInternal<
|
|
|
55
55
|
|
|
56
56
|
function make<RInitial = never, E = never, RPublish = never, RCtx = never>(
|
|
57
57
|
args: [Evt] extends [never] ? {
|
|
58
|
-
schemaContext?:
|
|
58
|
+
schemaContext?: Context.Context<RCtx>
|
|
59
59
|
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
60
60
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
61
61
|
partitionValue?: (e?: Encoded) => string
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
: {
|
|
65
|
-
schemaContext?:
|
|
65
|
+
schemaContext?: Context.Context<RCtx>
|
|
66
66
|
publishEvents: (evt: NonEmptyReadonlyArray<Evt>) => Effect.Effect<void, never, RPublish>
|
|
67
67
|
makeInitial?: Effect.Effect<readonly T[], E, RInitial> | undefined
|
|
68
68
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
@@ -72,7 +72,7 @@ export function makeRepoInternal<
|
|
|
72
72
|
) {
|
|
73
73
|
return Effect
|
|
74
74
|
.gen(function*() {
|
|
75
|
-
const rctx:
|
|
75
|
+
const rctx: Context.Context<RCtx> = args.schemaContext ?? Context.empty() as any
|
|
76
76
|
const provideRctx = Effect.provide(rctx)
|
|
77
77
|
const encodeMany = flow(
|
|
78
78
|
S.encodeEffect(S.Array(schema)),
|
|
@@ -113,11 +113,14 @@ export function makeRepoInternal<
|
|
|
113
113
|
let ast = _.ast
|
|
114
114
|
if (ast._tag === "Declaration") ast = ast.typeParameters[0]!
|
|
115
115
|
|
|
116
|
-
// In v4, to get the encoded (from) side of a schema, use SchemaAST.toEncoded
|
|
117
116
|
const pickIdFromAst = (a: SchemaAST.AST) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
// Unwrap Declaration (e.g. TaggedClass) to get the underlying Objects AST
|
|
118
|
+
let inner = a
|
|
119
|
+
if (inner._tag === "Declaration") inner = inner.typeParameters[0]!
|
|
120
|
+
// Pick from the original AST to preserve the full encoding chain (e.g. decodeTo transformations).
|
|
121
|
+
// Using toEncoded would lose transformation info needed to encode Type -> Encoded.
|
|
122
|
+
if (SchemaAST.isObjects(inner)) {
|
|
123
|
+
const field = inner.propertySignatures.find((_) => _.name === idKey)
|
|
121
124
|
if (field) {
|
|
122
125
|
return S.Struct({ [idKey]: S.make(field.type) }) as unknown as Codec<T, Encoded>
|
|
123
126
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// import type { ParserEnv } from "effect-app/Schema/custom/Parser"
|
|
8
8
|
import type {} from "effect/Equal"
|
|
9
9
|
import type {} from "effect/Hash"
|
|
10
|
-
import { Effect, type NonEmptyReadonlyArray, type S
|
|
10
|
+
import { type Context, Effect, type NonEmptyReadonlyArray, type S } from "effect-app"
|
|
11
11
|
import type { StoreConfig, StoreMaker } from "../../Store.js"
|
|
12
12
|
import type { FieldValues } from "../filter/types.js"
|
|
13
13
|
import { type ExtendedRepository, extendRepo } from "./ext.js"
|
|
@@ -52,7 +52,7 @@ export interface RepositoryOptions<
|
|
|
52
52
|
* Optional context to be provided to Schema decode/encode.
|
|
53
53
|
* Useful for effectful transformations like XWithItems, where items is a transformation retrieving elements from another database table or other source.
|
|
54
54
|
*/
|
|
55
|
-
schemaContext?:
|
|
55
|
+
schemaContext?: Context.Context<RCtx>
|
|
56
56
|
|
|
57
57
|
overrides?: (
|
|
58
58
|
repo: Repository<T, Encoded, Evt, ItemType, IdKey, Exclude<RSchema, RCtx>, RPublish>
|
package/src/Operations.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { reportError } from "@effect-app/infra/errorReporter"
|
|
2
2
|
import { subHours } from "date-fns"
|
|
3
|
-
import { Cause, copy, Duration, Effect, Exit, type Fiber, Layer, Option, S, Schedule
|
|
3
|
+
import { Cause, Context, copy, Duration, Effect, Exit, type Fiber, Layer, Option, S, Schedule } from "effect-app"
|
|
4
4
|
import { annotateLogscoped } from "effect-app/Effect"
|
|
5
5
|
import { dual, pipe } from "effect-app/Function"
|
|
6
6
|
import { Operation, OperationFailure, OperationId, type OperationProgress, OperationSuccess } from "effect-app/Operations"
|
|
@@ -189,7 +189,7 @@ const make = Effect.gen(function*() {
|
|
|
189
189
|
}
|
|
190
190
|
})
|
|
191
191
|
|
|
192
|
-
export class Operations extends
|
|
192
|
+
export class Operations extends Context.Opaque<Operations>()("effect-app/Operations", { make }) {
|
|
193
193
|
private static readonly CleanupLive = this
|
|
194
194
|
.use((_) =>
|
|
195
195
|
_.cleanup.pipe(
|
package/src/OperationsRepo.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Context, Effect } from "effect-app"
|
|
2
2
|
import { Operation } from "effect-app/Operations"
|
|
3
3
|
import { makeRepo } from "./Model.js"
|
|
4
4
|
|
|
5
|
-
export class OperationsRepo extends
|
|
5
|
+
export class OperationsRepo extends Context.Service<OperationsRepo>()(
|
|
6
6
|
"OperationRepo",
|
|
7
7
|
{
|
|
8
8
|
make: Effect.gen(function*() {
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "@effect-app/infra/api/setupRequest"
|
|
2
2
|
import { reportNonInterruptedFailure } from "@effect-app/infra/QueueMaker/errors"
|
|
3
3
|
import { type QueueBase, QueueMeta } from "@effect-app/infra/QueueMaker/service"
|
|
4
|
-
import { SqlClient } from "effect/unstable/sql"
|
|
5
4
|
import { subMinutes } from "date-fns"
|
|
6
|
-
import { Effect, Fiber, Option, S, Tracer } from "effect-app"
|
|
7
|
-
import type
|
|
5
|
+
import { Effect, Fiber, type NonEmptyReadonlyArray, Option, S, Tracer } from "effect-app"
|
|
6
|
+
import { type NonEmptyString255 } from "effect-app/Schema"
|
|
8
7
|
import { pretty } from "effect-app/utils"
|
|
9
|
-
import
|
|
8
|
+
import { SqlClient } from "effect/unstable/sql"
|
|
10
9
|
import { SQLModel } from "../adapters/SQL.js"
|
|
11
10
|
import { InfraLogger } from "../logger.js"
|
|
12
11
|
|
|
13
|
-
export const QueueId = S.
|
|
12
|
+
export const QueueId = S.Finite.pipe(S.brand("QueueId"))
|
|
14
13
|
export type QueueId = typeof QueueId.Type
|
|
15
14
|
|
|
16
15
|
// TODO: let the model track and Auto Generate versionColumn on every update instead
|
|
@@ -79,14 +78,14 @@ export function makeSQLQueue<
|
|
|
79
78
|
|
|
80
79
|
const q = {
|
|
81
80
|
offer: Effect.fnUntraced(function*(body: Evt, meta: typeof QueueMeta.Type) {
|
|
82
|
-
yield* queueRepo.insertVoid({
|
|
81
|
+
yield* queueRepo.insertVoid(Queue.insert.make({
|
|
83
82
|
body,
|
|
84
83
|
meta,
|
|
85
84
|
name: queueName,
|
|
86
85
|
processingAt: Option.none(),
|
|
87
86
|
finishedAt: Option.none(),
|
|
88
87
|
etag: crypto.randomUUID()
|
|
89
|
-
})
|
|
88
|
+
}))
|
|
90
89
|
}),
|
|
91
90
|
take: Effect.gen(function*() {
|
|
92
91
|
while (true) {
|
|
@@ -95,15 +94,16 @@ export function makeSQLQueue<
|
|
|
95
94
|
const dec = yield* decodeDrain(first)
|
|
96
95
|
const { createdAt, updatedAt, ...rest } = dec
|
|
97
96
|
return yield* drainRepo.update(
|
|
98
|
-
{ ...rest, processingAt: Option.some(new Date()) } // auto in lib , etag: crypto.randomUUID()
|
|
97
|
+
Drain.update.make({ ...rest, processingAt: Option.some(new Date()) }) // auto in lib , etag: crypto.randomUUID()
|
|
99
98
|
)
|
|
100
99
|
}
|
|
101
100
|
if (first) return first
|
|
102
101
|
yield* Effect.sleep(250)
|
|
103
102
|
}
|
|
104
103
|
}),
|
|
105
|
-
finish: ({ createdAt, updatedAt, ...q }: Drain)
|
|
106
|
-
drainRepo.updateVoid({ ...q, finishedAt: Option.some(new Date()) }) // auto in lib , etag: crypto.randomUUID()
|
|
104
|
+
finish: Effect.fn(function*({ createdAt, updatedAt, ...q }: Drain) {
|
|
105
|
+
return yield* drainRepo.updateVoid(Drain.update.make({ ...q, finishedAt: Option.some(new Date()) })) // auto in lib , etag: crypto.randomUUID()
|
|
106
|
+
})
|
|
107
107
|
}
|
|
108
108
|
const queue = {
|
|
109
109
|
publish: (...messages: NonEmptyReadonlyArray<Evt>) =>
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { Cause, Tracer } from "effect"
|
|
2
|
-
import { Effect, Fiber, flow, S } from "effect-app"
|
|
3
|
-
import * as Q from "effect/Queue"
|
|
2
|
+
import { Effect, Fiber, flow, type NonEmptyReadonlyArray, S } from "effect-app"
|
|
4
3
|
import { pretty } from "effect-app/utils"
|
|
4
|
+
import * as Q from "effect/Queue"
|
|
5
5
|
import { MemQueue } from "../adapters/memQueue.js"
|
|
6
6
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "../api/setupRequest.js"
|
|
7
7
|
import { InfraLogger } from "../logger.js"
|
|
8
8
|
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js"
|
|
9
|
-
import type { NonEmptyReadonlyArray } from "effect-app"
|
|
10
9
|
import { type QueueBase, QueueMeta } from "./service.js"
|
|
11
10
|
|
|
12
11
|
export function makeMemQueue<
|
|
@@ -26,8 +25,12 @@ export function makeMemQueue<
|
|
|
26
25
|
const qDrain = yield* mem.getOrCreateQueue(queueDrainName)
|
|
27
26
|
|
|
28
27
|
const wireSchema = S.Struct({ body: schema, meta: QueueMeta })
|
|
28
|
+
const wireSchemaJson = S.fromJsonString(S.toCodecJson(wireSchema))
|
|
29
|
+
const encodePublish = S.encodeEffect(wireSchemaJson)
|
|
29
30
|
const drainW = S.Struct({ body: drainSchema, meta: QueueMeta })
|
|
30
|
-
const
|
|
31
|
+
const drainWJson = S.fromJsonString(S.toCodecJson(drainW))
|
|
32
|
+
|
|
33
|
+
const parseDrain = flow(S.decodeUnknownEffect(drainWJson), Effect.orDie)
|
|
31
34
|
|
|
32
35
|
const queue = {
|
|
33
36
|
publish: (...messages: NonEmptyReadonlyArray<Evt>) =>
|
|
@@ -37,10 +40,8 @@ export function makeMemQueue<
|
|
|
37
40
|
Effect
|
|
38
41
|
.forEach(messages, (m) =>
|
|
39
42
|
// we JSON encode, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
40
|
-
|
|
43
|
+
encodePublish({ body: m, meta: requestContext }).pipe(
|
|
41
44
|
Effect.orDie,
|
|
42
|
-
Effect
|
|
43
|
-
.map(JSON.stringify),
|
|
44
45
|
// .tap((msg) => info("Publishing Mem Message: " + utils.inspect(msg)))
|
|
45
46
|
Effect.flatMap((_) => Q.offer(q, _))
|
|
46
47
|
), { discard: true })
|
|
@@ -58,42 +59,40 @@ export function makeMemQueue<
|
|
|
58
59
|
const reportError = reportNonInterruptedFailureCause({ name: "MemQueue.drain." + queueDrainName })
|
|
59
60
|
const processMessage = (msg: string) =>
|
|
60
61
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
61
|
-
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
{
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"queue.name": queueDrainName,
|
|
84
|
-
"queue.sessionId": sessionId,
|
|
85
|
-
"queue.input": body
|
|
86
|
-
}
|
|
62
|
+
parseDrain(msg).pipe(
|
|
63
|
+
Effect.orDie,
|
|
64
|
+
Effect
|
|
65
|
+
.flatMap(({ body, meta }) => {
|
|
66
|
+
let effect = InfraLogger
|
|
67
|
+
.logDebug(`[${queueDrainName}] Processing incoming message`)
|
|
68
|
+
.pipe(
|
|
69
|
+
Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }),
|
|
70
|
+
Effect.andThen(handleEvent(body)),
|
|
71
|
+
silenceAndReportError,
|
|
72
|
+
(_) =>
|
|
73
|
+
setupRequestContextWithCustomSpan(
|
|
74
|
+
_,
|
|
75
|
+
meta,
|
|
76
|
+
`queue.drain: ${queueDrainName}.${body._tag}`,
|
|
77
|
+
{
|
|
78
|
+
captureStackTrace: false,
|
|
79
|
+
kind: "consumer",
|
|
80
|
+
attributes: {
|
|
81
|
+
"queue.name": queueDrainName,
|
|
82
|
+
"queue.sessionId": sessionId,
|
|
83
|
+
"queue.input": body
|
|
87
84
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
if (meta.span) {
|
|
89
|
+
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span))
|
|
90
|
+
}
|
|
91
|
+
return effect
|
|
92
|
+
})
|
|
93
|
+
)
|
|
94
|
+
return Q
|
|
95
|
+
.take(qDrain)
|
|
97
96
|
.pipe(
|
|
98
97
|
Effect
|
|
99
98
|
.flatMap((x) =>
|