@effect-app/infra 0.13.0 → 0.14.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 +14 -0
- package/_cjs/api/codec.cjs +2 -4
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +18 -21
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +4 -4
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +5 -7
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +49 -49
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -22
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +6 -17
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +63 -63
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -4
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -8
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -13
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +1 -1
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -3
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +6 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +12 -18
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -7
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +23 -26
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -5
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +28 -28
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +56 -56
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +15 -16
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +14 -16
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +22 -23
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +7 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +2 -4
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +16 -17
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +23 -25
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +20 -21
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +10 -10
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +18 -18
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +23 -23
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +4 -6
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +15 -14
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/errors.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/dist/RequestContext.d.ts +12 -12
- package/dist/api/codec.js +3 -5
- package/dist/api/defaultErrorHandler.js +20 -21
- package/dist/api/express/makeJsonSchema.js +3 -5
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/requestHandler.d.ts +5 -5
- package/dist/api/express/schema/requestHandler.js +45 -45
- package/dist/api/express/schema/routing.js +21 -23
- package/dist/api/reportError.js +6 -18
- package/dist/api/routing.js +60 -60
- package/dist/api/setupRequest.js +3 -5
- package/dist/api/writeDocs.js +7 -9
- package/dist/errorReporter.js +10 -12
- package/dist/errors.js +2 -2
- package/dist/instrument.js +2 -4
- package/dist/rateLimit.js +7 -9
- package/dist/services/Emailer/Sendgrid.js +15 -22
- package/dist/services/Emailer/fake.js +5 -8
- package/dist/services/Emailer/service.d.ts +1 -1
- package/dist/services/Operations/live.js +24 -27
- package/dist/services/Operations/service.js +4 -6
- package/dist/services/Repository.d.ts +4 -4
- package/dist/services/Repository.js +22 -22
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +61 -61
- package/dist/services/Store/Disk.js +16 -19
- package/dist/services/Store/Memory.d.ts +1 -1
- package/dist/services/Store/Memory.js +16 -18
- package/dist/services/Store/Redis.d.ts +1 -1
- package/dist/services/Store/Redis.js +21 -24
- package/dist/services/Store/index.js +6 -8
- package/dist/services/Store/service.d.ts +1 -1
- package/dist/services/Store/service.js +3 -5
- package/dist/services/Store/utils.d.ts +2 -2
- package/dist/services/Store/utils.js +18 -19
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/cosmosdb.js +23 -25
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.js +18 -18
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +12 -11
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.js +18 -18
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.js +21 -21
- package/dist/services/simpledb/shared.d.ts +9 -9
- package/dist/services/simpledb/shared.js +5 -7
- package/dist/services/simpledb/simpledb.d.ts +1 -1
- package/dist/services/simpledb/simpledb.js +19 -17
- package/package.json +11 -11
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/Store/Redis.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
-
import * as tsplus_module_2 from "@fp-ts/
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/core/Option";
|
|
5
3
|
import * as tsplus_module_3 from "@effect-app/prelude/_ext/Prelude.ext";
|
|
6
4
|
import * as tsplus_module_4 from "@fp-ts/data/Chunk";
|
|
7
5
|
import * as tsplus_module_5 from "@effect-app/core/fluent/_ext/awesome/_files/Iterable";
|
|
8
|
-
import * as tsplus_module_6 from "@effect-app/core/Effect";
|
|
9
6
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
7
|
import * as RedisClient from "@effect-app/infra-adapters/redis-client";
|
|
11
8
|
import { NotFoundError } from "../../errors.js";
|
|
@@ -13,46 +10,46 @@ import { memFilter } from "./Memory.js";
|
|
|
13
10
|
import { StoreMaker } from "./service.js";
|
|
14
11
|
import { codeFilterJoinSelect, makeETag, makeUpdateETag } from "./utils.js";
|
|
15
12
|
export function makeRedisStore({ prefix }) {
|
|
16
|
-
return
|
|
13
|
+
return tsplus_module_1.gen(function* ($) {
|
|
17
14
|
const redis = yield* $(tsplus_module_1.service(RedisClient.RedisClient));
|
|
18
15
|
return {
|
|
19
|
-
make: (name, existing, _config) =>
|
|
16
|
+
make: (name, existing, _config) => tsplus_module_1.gen(function* ($) {
|
|
20
17
|
const updateETag = makeUpdateETag(name);
|
|
21
18
|
// Very naive implementation of course.
|
|
22
19
|
const key = `${prefix}${name}`;
|
|
23
|
-
const current = yield* $(
|
|
20
|
+
const current = yield* $(tsplus_module_1.provideService(tsplus_module_1.orDie(RedisClient.get(key)), RedisClient.RedisClient, redis));
|
|
24
21
|
if (!tsplus_module_2.isSome(current)) {
|
|
25
|
-
const m = yield* $(existing ??
|
|
26
|
-
yield* $(
|
|
22
|
+
const m = yield* $(existing ?? tsplus_module_1.sync(() => new Map()));
|
|
23
|
+
yield* $(tsplus_module_1.provideService(tsplus_module_1.orDie(RedisClient.set(key, JSON.stringify({ data: [...m.values()].map(e => makeETag(e)) }))), RedisClient.RedisClient, redis));
|
|
27
24
|
}
|
|
28
|
-
const get =
|
|
25
|
+
const get = tsplus_module_1.provideService(tsplus_module_1.map(tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.flatMap(RedisClient.get(key), x => tsplus_module_3.encaseMaybeInEffect_(x, () => new NotFoundError("data", "")))), x => JSON.parse(x)), _ => _.data), RedisClient.RedisClient, redis);
|
|
29
26
|
const set = (i) => tsplus_module_1.orDie(RedisClient.set(key, JSON.stringify({ data: [...i.values()] })));
|
|
30
27
|
const sem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
31
28
|
const withPermit = sem.withPermits(1);
|
|
32
|
-
const asMap =
|
|
33
|
-
const all =
|
|
34
|
-
const batchSet = (items) =>
|
|
29
|
+
const asMap = tsplus_module_1.map(get, x => new Map(x.map(x => [x.id, x])));
|
|
30
|
+
const all = tsplus_module_1.map(get, tsplus_module_4.fromIterable);
|
|
31
|
+
const batchSet = (items) => tsplus_module_1.provideService(withPermit(tsplus_module_1.map(tsplus_module_1.tap(tsplus_module_5.ext_forEach(items, e => tsplus_module_1.flatMap(s.find(e.id), current => updateETag(e, current))), items => tsplus_module_1.flatMap(tsplus_module_1.map(asMap, m => {
|
|
35
32
|
const mut = m;
|
|
36
33
|
items.forEach(e => mut.set(e.id, e));
|
|
37
34
|
return mut;
|
|
38
|
-
}))
|
|
35
|
+
}), set)), _ => _.toReadonlyArray())), RedisClient.RedisClient, redis);
|
|
39
36
|
const s = {
|
|
40
37
|
all,
|
|
41
|
-
filter: (filter, cursor) =>
|
|
42
|
-
filterJoinSelect: (filter) =>
|
|
43
|
-
find: id =>
|
|
44
|
-
set: e =>
|
|
45
|
-
.find(e.id))))),
|
|
38
|
+
filter: (filter, cursor) => tsplus_module_1.map(all, memFilter(filter, cursor)),
|
|
39
|
+
filterJoinSelect: (filter) => tsplus_module_1.map(all, c => c.flatMap(codeFilterJoinSelect(filter))),
|
|
40
|
+
find: id => tsplus_module_1.map(asMap, _ => tsplus_module_2.fromNullable(_.get(id))),
|
|
41
|
+
set: e => tsplus_module_1.provideService(withPermit(tsplus_module_1.tap(tsplus_module_1.flatMap(s
|
|
42
|
+
.find(e.id), current => updateETag(e, current)), e => tsplus_module_1.flatMap(tsplus_module_1.map(asMap, _ => new Map([..._, [e.id, e]])), set))), RedisClient.RedisClient, redis),
|
|
46
43
|
batchSet,
|
|
47
44
|
bulkSet: batchSet,
|
|
48
|
-
remove: (e) =>
|
|
45
|
+
remove: (e) => tsplus_module_1.provideService(withPermit(tsplus_module_1.flatMap(tsplus_module_1.map(asMap, _ => new Map([..._].filter(([_]) => _ !== e.id))), set)), RedisClient.RedisClient, redis)
|
|
49
46
|
};
|
|
50
47
|
return s;
|
|
51
|
-
})
|
|
48
|
+
})
|
|
52
49
|
};
|
|
53
|
-
})
|
|
50
|
+
});
|
|
54
51
|
}
|
|
55
52
|
export function RedisStoreLive(config) {
|
|
56
|
-
return
|
|
53
|
+
return tsplus_module_1.toLayer(tsplus_module_1.flatMap(tsplus_module_1.config(config), makeRedisStore), StoreMaker);
|
|
57
54
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1N0b3JlL1JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdURBQXVEO0FBQ3ZELE9BQU8sS0FBSyxXQUFXLE1BQU0seUNBQXlDLENBQUE7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHdkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUzRSxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQUUsTUFBTSxFQUFpQjtJQUN0RCxPQUFPLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx5QkFBQyxXQUFXLENBQUMsV0FBVyxFQUFRLENBQUE7UUFDdEQsT0FBTztZQUNMLElBQUksRUFBRSxDQUNKLElBQVksRUFDWixRQUFxRCxFQUNyRCxPQUF5QixFQUN6QixFQUFFLENBQ0Ysb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDcEIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN2Qyx1Q0FBdUM7Z0JBQ3ZDLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFBO2dCQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMscURBQUEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBc0IsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNuRyxJQUFJLENBQUMsdUJBQUEsT0FBTyxDQUFTLEVBQUU7b0JB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
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/Store/index.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Config/Secret";
|
|
4
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
5
3
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
@@ -16,11 +14,11 @@ import { StoreMaker } from "./service.js";
|
|
|
16
14
|
* @tsplus static StoreMaker.Ops Live
|
|
17
15
|
*/
|
|
18
16
|
export function StoreMakerLive(config) {
|
|
19
|
-
return tsplus_module_3.toScopedLayer(
|
|
17
|
+
return tsplus_module_3.toScopedLayer(tsplus_module_2.flatMap(tsplus_module_2.config(config), cfg => {
|
|
20
18
|
const storageUrl = tsplus_module_1.value(cfg.url);
|
|
21
19
|
if (storageUrl.startsWith("mem://")) {
|
|
22
20
|
console.log("Using in memory store");
|
|
23
|
-
return
|
|
21
|
+
return tsplus_module_2.sync(() => makeMemoryStore());
|
|
24
22
|
}
|
|
25
23
|
if (storageUrl.startsWith("disk://")) {
|
|
26
24
|
console.log("Using disk store at ./.data");
|
|
@@ -28,11 +26,11 @@ export function StoreMakerLive(config) {
|
|
|
28
26
|
}
|
|
29
27
|
if (storageUrl.startsWith("redis://")) {
|
|
30
28
|
console.log("Using Redis store");
|
|
31
|
-
return
|
|
29
|
+
return tsplus_module_2.flatMap(RedisClient.makeRedisClient(makeRedis(storageUrl)), client => tsplus_module_2.provideService(makeRedisStore(cfg), RedisClient.RedisClient, client));
|
|
32
30
|
}
|
|
33
31
|
console.log("Using Cosmos DB store");
|
|
34
|
-
return
|
|
35
|
-
})
|
|
32
|
+
return tsplus_module_2.flatMap(CosmosClient.makeCosmosClient(storageUrl, cfg.dbName), client => tsplus_module_2.provideService(makeCosmosStore(cfg), CosmosClient.CosmosClient, client));
|
|
33
|
+
}), StoreMaker);
|
|
36
34
|
}
|
|
37
35
|
function makeRedis(storageUrl) {
|
|
38
36
|
const url = new URL(storageUrl);
|
|
@@ -48,4 +46,4 @@ function makeRedis(storageUrl) {
|
|
|
48
46
|
: storageUrl);
|
|
49
47
|
}
|
|
50
48
|
export * from "./service.js";
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1N0b3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLDBDQUEwQyxDQUFBO0FBQ3hFLE9BQU8sS0FBSyxXQUFXLE1BQU0seUNBQXlDLENBQUE7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQTZCO0lBQzFELE9BQU8sOEJBQUEsK0NBQUEsTUFBTSxHQUFnQixHQUFHLENBQUMsRUFBRTtRQUNqQyxNQUFNLFVBQVUseUJBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBTSxDQUFBO1FBQ2hDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUE7WUFDcEMsT0FBTywyQkFBTyxlQUFlLEVBQUUsQ0FBQyxDQUFBO1NBQ2pDO1FBQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtZQUMxQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUMxQjtRQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFDaEMsT0FBTyx3QkFBQSxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFTLE1BQU0sQ0FBQyxFQUFFLENBQ3pFLCtCQUFBLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFDakIsV0FBVyxDQUFDLFdBQVcsRUFDdkIsTUFBTSxDQUNQLENBQ0YsQ0FBQTtTQUNGO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ3BDLE9BQU8sd0JBQUEsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQVMsTUFBTSxDQUFDLEVBQUUsQ0FDNUUsK0JBQUEsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFnQixZQUFZLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUN2RSxDQUFBO0lBQ0gsQ0FBQyxDQUFDLEVBQ2UsVUFBVSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLFVBQWtCO0lBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQy9CLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUE7SUFDN0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQTtJQUM3QixPQUFPLEdBQUcsRUFBRSxDQUNWLFlBQVksQ0FDVixVQUFVLEtBQUssVUFBVTtRQUN2QixDQUFDLENBQUU7WUFDRCxJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLFFBQVE7WUFDbkIsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtTQUN0QjtRQUNULENBQUMsQ0FBRSxVQUFrQixDQUN4QixDQUFBO0FBQ0wsQ0FBQztBQUVELGNBQWMsY0FBYyxDQUFBIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect } from "@effect/io/Effect";
|
|
2
2
|
import { Chunk } from "@fp-ts/data/Chunk";
|
|
3
3
|
import { Opt } from "@effect-app/core/Option";
|
|
4
|
-
import { NonEmptyReadonlyArray } from "@fp-ts/
|
|
4
|
+
import { NonEmptyReadonlyArray } from "@fp-ts/core/ReadonlyArray";
|
|
5
5
|
import { Tag } from "@fp-ts/data/Context";
|
|
6
6
|
import { ConfigSecret } from "@effect/io/Config/Secret";
|
|
7
7
|
import type { UniqueKey } from "@azure/cosmos";
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/Store/service.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@fp-ts/data/Context";
|
|
4
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
5
3
|
export const StoreMaker = tsplus_module_1.Tag();
|
|
6
4
|
/**
|
|
7
5
|
* @tsplus static ContextMap.Ops Make
|
|
8
6
|
*/
|
|
9
|
-
export const makeMap =
|
|
7
|
+
export const makeMap = tsplus_module_2.sync(() => {
|
|
10
8
|
const etags = new Map();
|
|
11
9
|
const getEtag = (id) => etags.get(id);
|
|
12
10
|
const setEtag = (id, eTag) => {
|
|
@@ -57,6 +55,6 @@ export const makeMap = tracer_1.withCallTrace(fileName_1 + ":94:24")(tsplus_modu
|
|
|
57
55
|
set: setEtag,
|
|
58
56
|
parserEnv
|
|
59
57
|
};
|
|
60
|
-
})
|
|
58
|
+
});
|
|
61
59
|
export const ContextMap = tsplus_module_1.Tag();
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvU3RvcmUvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdGQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLGdCQUFBLEdBQUcsRUFBYyxDQUFBO0FBRTFEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLHFCQUFPLEdBQUcsRUFBRTtJQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQTtJQUN2QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQVUsRUFBRSxJQUF3QixFQUFFLEVBQUU7UUFDdkQsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDN0QsQ0FBQyxDQUFBO0lBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBR3hCLENBQUE7SUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFHeEIsQ0FBQTtJQUVILE1BQU0sWUFBWSxHQUFHLENBQ25CLENBQWtCLEVBQ2xCLEVBQStCLEVBQy9CLEVBQUU7UUFDRixXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUN0QixPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUMsQ0FBQTtJQUVELE1BQU0sU0FBUyxHQUFjO1FBQzNCLCtFQUErRTtRQUMvRSwrSEFBK0g7UUFDL0gsR0FBRyxFQUFFLEtBQUs7UUFDVixLQUFLLEVBQUU7WUFDTCxjQUFjLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3JELElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDNUMsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFBO1lBQ2YsQ0FBQztZQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQU8sRUFBRTtnQkFDMUIsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDaEMsSUFBSSxDQUFDLEVBQUU7b0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDbEIsSUFBSSxDQUFDLEVBQUU7d0JBQ0wsa0NBQWtDO3dCQUNsQyxPQUFPLENBQUMsQ0FBQTtxQkFDVDt5QkFBTTt3QkFDTCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFBO3dCQUM5QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTt3QkFDWixPQUFPLEVBQUUsQ0FBQTtxQkFDVjtpQkFDRjtxQkFBTTtvQkFDTCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFBO29CQUM5QixXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUMxQyxPQUFPLEVBQUUsQ0FBQTtpQkFDVjtZQUNILENBQUM7U0FDRjtLQUNGLENBQUE7SUFFRCxPQUFPO1FBQ0wsR0FBRyxFQUFFLE9BQU87UUFDWixHQUFHLEVBQUUsT0FBTztRQUNaLFNBQVM7S0FDVixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFNRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLGdCQUFBLEdBQUcsRUFBYyxDQUFBIn0=
|
|
@@ -2,10 +2,10 @@ import { Opt } from "@effect-app/core/Option";
|
|
|
2
2
|
import { OptimisticConcurrencyException } from "../../errors.js";
|
|
3
3
|
import type { Filter, FilterJoinSelect, PersistenceModelType } from "./service.js";
|
|
4
4
|
export declare const makeETag: <E extends PersistenceModelType<Id>, Id extends string>({ _etag, ...e }: E) => E;
|
|
5
|
-
export declare const makeUpdateETag: (name: string) => <E extends PersistenceModelType<Id>, Id extends string>(e: E, current: import("@fp-ts/
|
|
5
|
+
export declare const makeUpdateETag: (name: string) => <E extends PersistenceModelType<Id>, Id extends string>(e: E, current: import("@fp-ts/core/Option").Option<E>) => import("@effect/io/Effect").Effect<never, OptimisticConcurrencyException, E>;
|
|
6
6
|
export declare function codeFilter<E extends {
|
|
7
7
|
id: string;
|
|
8
|
-
}, NE extends E>(filter: Filter<NE>): (x: E) => import("@fp-ts/
|
|
8
|
+
}, NE extends E>(filter: Filter<NE>): (x: E) => import("@fp-ts/core/Option").None | import("@fp-ts/core/Option").Some<NE>;
|
|
9
9
|
export declare function codeFilterJoinSelect<E extends {
|
|
10
10
|
id: string;
|
|
11
11
|
}, NE>(filter: FilterJoinSelect): (x: E) => import("@fp-ts/data/Chunk").Chunk<NE & {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/Store/utils.ts";
|
|
3
|
-
import * as tsplus_module_1 from "@fp-ts/data/Option";
|
|
1
|
+
import * as tsplus_module_1 from "@fp-ts/core/Option";
|
|
4
2
|
import * as tsplus_module_2 from "@effect/io/Effect";
|
|
5
|
-
import * as tsplus_module_3 from "@
|
|
6
|
-
import * as tsplus_module_4 from "@
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/Option";
|
|
4
|
+
import * as tsplus_module_4 from "@fp-ts/core/ReadonlyArray";
|
|
5
|
+
import * as tsplus_module_5 from "@effect-app/core/Array";
|
|
7
6
|
import { get } from "@effect-app/prelude/utils";
|
|
8
7
|
import { OptimisticConcurrencyException } from "../../errors.js";
|
|
9
8
|
import objectHash from "object-hash";
|
|
@@ -11,30 +10,30 @@ export const makeETag = ({ _etag, ...e }) => ({
|
|
|
11
10
|
...e,
|
|
12
11
|
_etag: objectHash(e)
|
|
13
12
|
});
|
|
14
|
-
export const makeUpdateETag = (name) => (e, current) =>
|
|
13
|
+
export const makeUpdateETag = (name) => (e, current) => tsplus_module_2.gen(function* ($) {
|
|
15
14
|
if (tsplus_module_1.isSome(current) && current.value._etag !== e._etag) {
|
|
16
|
-
return yield* $(
|
|
15
|
+
return yield* $(tsplus_module_2.fail(new OptimisticConcurrencyException(name, current.value.id, current.value._etag, e._etag)));
|
|
17
16
|
}
|
|
18
17
|
const newE = makeETag(e);
|
|
19
18
|
return newE;
|
|
20
|
-
})
|
|
19
|
+
});
|
|
21
20
|
export function codeFilter(filter) {
|
|
22
21
|
return (x) => filter.type === "startsWith"
|
|
23
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
23
|
? lowercaseIfString(x[filter.by]).startsWith(filter.value.toLowerCase())
|
|
25
24
|
? tsplus_module_1.some(x)
|
|
26
|
-
:
|
|
25
|
+
: tsplus_module_3.none
|
|
27
26
|
: filter.type === "endsWith"
|
|
28
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
28
|
? lowercaseIfString(x[filter.by]).endsWith(filter.value.toLowerCase())
|
|
30
29
|
? tsplus_module_1.some(x)
|
|
31
|
-
:
|
|
30
|
+
: tsplus_module_3.none
|
|
32
31
|
: filter.type === "contains"
|
|
33
32
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
33
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
35
34
|
? lowercaseIfString(x[filter.by]).includes(filter.value.toLowerCase())
|
|
36
35
|
? tsplus_module_1.some(x)
|
|
37
|
-
:
|
|
36
|
+
: tsplus_module_3.none
|
|
38
37
|
: filter.type === "join_find"
|
|
39
38
|
? filter.keys.some(k => {
|
|
40
39
|
const value = get(x, k);
|
|
@@ -43,7 +42,7 @@ export function codeFilter(filter) {
|
|
|
43
42
|
value.some(v => compareCaseInsensitive(v[filter.valueKey], filter.value)));
|
|
44
43
|
})
|
|
45
44
|
? tsplus_module_1.some(x)
|
|
46
|
-
:
|
|
45
|
+
: tsplus_module_3.none
|
|
47
46
|
// TODO: support mixed or/and
|
|
48
47
|
: filter.mode === "or"
|
|
49
48
|
? filter.where
|
|
@@ -55,7 +54,7 @@ export function codeFilter(filter) {
|
|
|
55
54
|
? !compareCaseInsensitive(get(x, p.key), p.value)
|
|
56
55
|
: compareCaseInsensitive(get(x, p.key), p.value))
|
|
57
56
|
? tsplus_module_1.some(x)
|
|
58
|
-
:
|
|
57
|
+
: tsplus_module_3.none
|
|
59
58
|
: filter.where
|
|
60
59
|
.every(p => p.t === "in"
|
|
61
60
|
? p.value.includes(get(x, p.key))
|
|
@@ -73,19 +72,19 @@ export function codeFilter(filter) {
|
|
|
73
72
|
.some(_ => compareCaseInsensitive(get(_, p.key.split(".-1.")[1]), p.value))
|
|
74
73
|
: compareCaseInsensitive(get(x, p.key), p.value))
|
|
75
74
|
? tsplus_module_1.some(x)
|
|
76
|
-
:
|
|
75
|
+
: tsplus_module_3.none;
|
|
77
76
|
}
|
|
78
77
|
export function codeFilterJoinSelect(filter) {
|
|
79
|
-
return (x) =>
|
|
78
|
+
return (x) => tsplus_module_5.ext_itToChunk(tsplus_module_4.filterMap(k => {
|
|
80
79
|
const value = get(x, k);
|
|
81
80
|
// we mimic the behavior of cosmosdb; if the shape in db does not match what we're looking for, we imagine false hit
|
|
82
81
|
return value
|
|
83
|
-
? tsplus_module_1.some(
|
|
82
|
+
? tsplus_module_1.some(tsplus_module_4.filterMap(v =>
|
|
84
83
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
84
|
compareCaseInsensitive(v[filter.valueKey], filter.value)
|
|
86
85
|
? tsplus_module_1.some({ ...v, _rootId: x.id })
|
|
87
|
-
:
|
|
88
|
-
:
|
|
86
|
+
: tsplus_module_3.none)(value))
|
|
87
|
+
: tsplus_module_3.none;
|
|
89
88
|
})(filter.keys)
|
|
90
89
|
.flatMap(_ => _));
|
|
91
90
|
}
|
|
@@ -100,4 +99,4 @@ function compareCaseInsensitive(valA, valB) {
|
|
|
100
99
|
? valA.toLowerCase() === valB.toLowerCase()
|
|
101
100
|
: valA === valB;
|
|
102
101
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1N0b3JlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRS9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBSWhFLE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQTtBQUVwQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FDdEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUssRUFDZixFQUFFLENBQ0wsQ0FBQztJQUNDLEdBQUcsQ0FBQztJQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0NBQ3JCLENBQVEsQ0FBQTtBQUNYLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FDekIsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQXdELENBQUksRUFBRSxPQUFlLEVBQUUsRUFBRSxDQUNqRyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO0lBQ3BCLElBQUksdUJBQUEsT0FBTyxDQUFTLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUN2RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDYixxQkFBWSxJQUFJLDhCQUE4QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDdEcsQ0FBQTtLQUNGO0lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFDLENBQUE7QUFFTixNQUFNLFVBQVUsVUFBVSxDQUF5QyxNQUFrQjtJQUNuRixPQUFPLENB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
|
|
@@ -6,8 +6,8 @@ import type { DBRecord } from "./shared.js";
|
|
|
6
6
|
import { OptimisticLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
8
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, indexes: IndexingPolicy) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache | RDecode, unknown, import("@fp-ts/
|
|
10
|
-
findBy: (parameters: Record<string, string>) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, import("@fp-ts/
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache | RDecode, unknown, import("@fp-ts/core/Option").Option<A>>;
|
|
10
|
+
findBy: (parameters: Record<string, string>) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient, unknown, import("@fp-ts/core/Option").Option<any>>;
|
|
11
11
|
save: (record: A) => import("@effect/io/Effect").Effect<Cosmos.CosmosClient | simpledb.RecordCache | REncode, OptimisticLockException, A>;
|
|
12
12
|
}>;
|
|
13
13
|
//# sourceMappingURL=cosmosdb.d.ts.map
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/cosmosdb.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
|
-
import * as tsplus_module_2 from "@fp-ts/
|
|
5
|
-
import * as tsplus_module_3 from "@fp-ts/
|
|
2
|
+
import * as tsplus_module_2 from "@fp-ts/core/Option";
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/core/ReadonlyArray";
|
|
6
4
|
import * as tsplus_module_4 from "@effect-app/core/Effect";
|
|
7
5
|
import { typedKeysOf } from "@effect-app/core/utils";
|
|
8
6
|
import * as Cosmos from "@effect-app/infra-adapters/cosmos-client";
|
|
@@ -13,25 +11,25 @@ class CosmosDbOperationError {
|
|
|
13
11
|
this.message = message;
|
|
14
12
|
}
|
|
15
13
|
}
|
|
16
|
-
const setup = (type, indexingPolicy) =>
|
|
14
|
+
const setup = (type, indexingPolicy) => tsplus_module_1.tap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.containers
|
|
17
15
|
.create({ id: type, indexingPolicy })
|
|
18
|
-
.catch(err => console.warn(err))))
|
|
16
|
+
.catch(err => console.warn(err))));
|
|
19
17
|
// TODO: Error if current indexingPolicy does not match
|
|
20
18
|
// Effect.flatMap((db) => Effect.tryPromise(() => db.container(type).(indexes)))
|
|
21
19
|
export function createContext() {
|
|
22
20
|
return (type, encode, decode,
|
|
23
21
|
// schemaVersion: string,
|
|
24
22
|
indexes) => {
|
|
25
|
-
return
|
|
23
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
26
24
|
find: simpledb.find(find, decode, type),
|
|
27
25
|
findBy,
|
|
28
26
|
save: simpledb.storeDirectly(store, type)
|
|
29
|
-
}))
|
|
27
|
+
}));
|
|
30
28
|
function find(id) {
|
|
31
|
-
return
|
|
29
|
+
return tsplus_module_1.map(tsplus_module_1.map(tsplus_module_1.flatMap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.container(type).item(id).read())), i => tsplus_module_2.fromNullable(i.resource)), _ => tsplus_module_2.map(({ _etag, data }) => ({ version: _etag, data }))(_));
|
|
32
30
|
}
|
|
33
31
|
function findBy(parameters) {
|
|
34
|
-
return
|
|
32
|
+
return tsplus_module_1.map(tsplus_module_1.map(tsplus_module_1.flatMap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db
|
|
35
33
|
.container(type)
|
|
36
34
|
.items.query({
|
|
37
35
|
query: `
|
|
@@ -48,26 +46,18 @@ WHERE (
|
|
|
48
46
|
value: parameters[p]
|
|
49
47
|
}))
|
|
50
48
|
})
|
|
51
|
-
.fetchAll()))))(
|
|
49
|
+
.fetchAll())), x => tsplus_module_3.head(x.resources)), _ => tsplus_module_2.map(_ => _.id)(_));
|
|
52
50
|
}
|
|
53
51
|
function store(record, currentVersion) {
|
|
54
|
-
return
|
|
52
|
+
return tsplus_module_1.gen(function* ($) {
|
|
55
53
|
const version = "_etag"; // we get this from the etag anyway.
|
|
56
54
|
const db = yield* $(Cosmos.db);
|
|
57
55
|
const data = yield* $(encode(record));
|
|
58
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(
|
|
56
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.container(type).items.create({
|
|
59
57
|
id: record.id,
|
|
60
58
|
timestamp: new Date(),
|
|
61
59
|
data
|
|
62
|
-
}))))
|
|
63
|
-
if (x.statusCode === 412) {
|
|
64
|
-
return tracer_1.withCallTrace(fileName_1 + ":117:33")(tsplus_module_1.fail(new OptimisticLockException(type, record.id)));
|
|
65
|
-
}
|
|
66
|
-
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
67
|
-
return tracer_1.withCallTrace(fileName_1 + ":120:33")(tsplus_module_1.die(new CosmosDbOperationError("not able to update record: " + x.statusCode)));
|
|
68
|
-
}
|
|
69
|
-
return tsplus_module_4.unit;
|
|
70
|
-
}))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":98:22")(tsplus_module_1.tryPromise(() => db
|
|
60
|
+
})))), currentVersion => tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => db
|
|
71
61
|
.container(type)
|
|
72
62
|
.item(record.id)
|
|
73
63
|
.replace({
|
|
@@ -79,10 +69,18 @@ WHERE (
|
|
|
79
69
|
type: "IfMatch",
|
|
80
70
|
condition: currentVersion
|
|
81
71
|
}
|
|
82
|
-
})))
|
|
72
|
+
}))), x => {
|
|
73
|
+
if (x.statusCode === 412) {
|
|
74
|
+
return tsplus_module_1.fail(new OptimisticLockException(type, record.id));
|
|
75
|
+
}
|
|
76
|
+
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
77
|
+
return tsplus_module_1.die(new CosmosDbOperationError("not able to update record: " + x.statusCode));
|
|
78
|
+
}
|
|
79
|
+
return tsplus_module_4.unit;
|
|
80
|
+
}))(currentVersion));
|
|
83
81
|
return { version, data: record };
|
|
84
|
-
})
|
|
82
|
+
});
|
|
85
83
|
}
|
|
86
84
|
};
|
|
87
85
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL2Nvc21vc2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFcEQsT0FBTyxLQUFLLE1BQU0sTUFBTSwwQ0FBMEMsQ0FBQTtBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFHekMsTUFBTSxzQkFBc0I7SUFDMUIsWUFBcUIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFBRyxDQUFDO0NBQ3pDO0FBRUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsY0FBOEIsRUFBRSxFQUFFLENBQzdELG9CQUFBLE1BQU0sQ0FBQyxFQUFFLEVBQUssRUFBRSxDQUFDLEVBQUUsQ0FDakIsMkJBQWtCLEdBQUcsRUFBRSxDQUNyQixFQUFFLENBQUMsVUFBVTtLQUNWLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUM7S0FDcEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuQyxDQUNGLENBQUE7QUFDSCx1REFBdUQ7QUFDdkQsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEM7SUFDOUMseUJBQXlCO0lBQ3pCLE9BQXVCLEVBQ3ZCLEVBQUU7UUFDRixPQUFPLG9CQUFBLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFB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
|
|
@@ -4,8 +4,8 @@ import type { DBRecord, Index } from "./shared.js";
|
|
|
4
4
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
5
5
|
import * as simpledb from "./simpledb.js";
|
|
6
6
|
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => import("@effect/io/Effect").Effect<REncode, never, EA>, decode: (d: EA) => import("@effect/io/Effect").Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index, dir?: string) => {
|
|
7
|
-
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/
|
|
8
|
-
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<never, never, import("@fp-ts/
|
|
7
|
+
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
8
|
+
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<never, never, import("@fp-ts/core/Option").Option<TKey & {}>>;
|
|
9
9
|
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
10
10
|
};
|
|
11
11
|
export declare function initialise(dir: string): void;
|