@effect-app/infra 0.181.4 → 0.182.2
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 +34 -0
- package/_cjs/api/defaultErrorHandler.cjs +2 -2
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/routing/base.cjs +8 -8
- package/_cjs/api/routing/base.cjs.map +1 -1
- package/_cjs/api/routing/defaultErrorHandler.cjs +3 -3
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/routing/makeRequestHandler.cjs +5 -5
- package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +1 -1
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +6 -6
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +1 -1
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +4 -4
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -3
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +2 -2
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +4 -4
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository/dsl.cjs +2 -2
- package/_cjs/services/Repository/dsl.cjs.map +1 -1
- package/_cjs/services/Repository/ext.cjs +14 -14
- package/_cjs/services/Repository/ext.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +26 -26
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +7 -7
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/ContextMapContainer.cjs +6 -6
- package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +14 -12
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +15 -15
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +19 -19
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +23 -23
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +9 -9
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +14 -14
- 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 +11 -11
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +21 -21
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +5 -5
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/dist/api/defaultErrorHandler.js +7 -3
- package/dist/api/routing/base.js +15 -14
- package/dist/api/routing/defaultErrorHandler.js +10 -4
- package/dist/api/routing/makeRequestHandler.js +11 -6
- package/dist/errorReporter.js +2 -2
- package/dist/rateLimit.js +10 -7
- package/dist/services/Emailer/fake.js +3 -2
- package/dist/services/Operations/live.js +7 -6
- package/dist/services/Operations/service.js +10 -7
- package/dist/services/QueueMaker/errors.js +3 -3
- package/dist/services/QueueMaker/memQueue.js +11 -8
- package/dist/services/QueueMaker/sbqueue.js +5 -3
- package/dist/services/Repository/dsl.js +3 -3
- package/dist/services/Repository/ext.js +28 -15
- package/dist/services/RepositoryBase.js +46 -29
- package/dist/services/RequestContextContainer.js +12 -10
- package/dist/services/Store/ContextMapContainer.js +12 -9
- package/dist/services/Store/Cosmos.js +34 -21
- package/dist/services/Store/Disk.js +20 -16
- package/dist/services/Store/Memory.js +32 -25
- package/dist/services/Store/Redis.js +38 -27
- package/dist/services/simpledb/cosmosdb.js +20 -11
- package/dist/services/simpledb/diskdb.js +25 -19
- package/dist/services/simpledb/memdb.js +16 -12
- package/dist/services/simpledb/mongodb.js +19 -11
- package/dist/services/simpledb/redisdb.d.ts +3 -3
- package/dist/services/simpledb/redisdb.js +32 -20
- package/dist/services/simpledb/shared.d.ts +5 -5
- package/dist/services/simpledb/simpledb.js +14 -9
- package/package.json +10 -10
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/schema/Schema";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/core/Effect";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Option";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Effect";
|
|
5
5
|
import * as tsplus_module_5 from "effect/Exit";
|
|
6
6
|
import { flow } from "@effect-app/core/Function";
|
|
7
7
|
import { getRecordName, makeMap, SerializedDBRecord } from "./shared.js";
|
|
@@ -18,37 +18,41 @@ export function createContext() {
|
|
|
18
18
|
save: simpledb.store(find, store, bogusLock, type)
|
|
19
19
|
};
|
|
20
20
|
function find(id) {
|
|
21
|
-
return
|
|
22
|
-
.find(getRecordName(type, id))
|
|
21
|
+
return tsplus_module_2.mapOption(tsplus_module_2.flatMapOption(storage
|
|
22
|
+
.find(getRecordName(type, id))
|
|
23
|
+
.map((_) => _.map((s) => JSON.parse(s))), parseSDB), ({ data, version }) => ({
|
|
23
24
|
data: JSON.parse(data),
|
|
24
25
|
version
|
|
25
26
|
}));
|
|
26
27
|
}
|
|
27
28
|
function findBy(keys, eq) {
|
|
28
29
|
// Naive implementation, fine for in memory testing purposes.
|
|
29
|
-
return
|
|
30
|
+
return tsplus_module_4.gen(function* ($) {
|
|
30
31
|
for (const [, value] of storage) {
|
|
31
32
|
const sdb_ = JSON.parse(value);
|
|
32
33
|
const sdb = yield* $(parseSDB(sdb_));
|
|
33
34
|
const cr = { data: JSON.parse(sdb.data), version: sdb.version };
|
|
34
|
-
const r = yield* $(
|
|
35
|
+
const r = yield* $(tsplus_module_4.exit(tsplus_module_4.filterOrFail(decode(cr.data), (d) => eq(keys, d), () => "not equals")));
|
|
35
36
|
if (tsplus_module_5.isSuccess(r)) {
|
|
36
37
|
return r.value;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
return null;
|
|
40
|
-
})
|
|
41
|
+
})
|
|
42
|
+
.map(tsplus_module_3.fromNullable);
|
|
41
43
|
}
|
|
42
44
|
function store(record, currentVersion) {
|
|
43
45
|
const version = currentVersion
|
|
44
46
|
.map((cv) => (parseInt(cv) + 1).toString())
|
|
45
47
|
.getOrElse(() => "1");
|
|
46
|
-
const getData = flow(encode, (_) =>
|
|
47
|
-
return
|
|
48
|
+
const getData = flow(encode, (_) => _.map(JSON.stringify).map((data) => JSON.stringify({ version, timestamp: new Date(), data })));
|
|
49
|
+
return getData(record)
|
|
50
|
+
.flatMap((serialised) => storage.set(getRecordName(type, record.id), serialised))
|
|
51
|
+
.map(() => ({ version, data: record }));
|
|
48
52
|
}
|
|
49
53
|
};
|
|
50
54
|
}
|
|
51
55
|
function bogusLock() {
|
|
52
|
-
return
|
|
56
|
+
return tsplus_module_4.acquireRelease(tsplus_module_4.unit, () => tsplus_module_4.unit);
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL21lbWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBR2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hFLE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBR3pDLDREQUE0RDtBQUM1RCwyQkFBMkI7QUFDM0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFrQixDQUFBO0FBRXpDLE1BQU0sUUFBUSxpQ0FBRyxrQkFBa0IsQ0FBYyxDQUFBO0FBRWpELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEMsRUFDOUMsRUFBRTtRQUNGLE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN2QyxNQUFNO1lBQ04sSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1NBQ25ELENBQUE7UUFFRCxTQUFTLElBQUksQ0FBQyxFQUFVO1lBQ3RCLE9BQU8sMEJBQUEsOEJBQUEsT0FBTztpQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUIsUUFBUSxDQUFDLEVBQ2IsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVB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
|
|
@@ -8,24 +8,29 @@ import * as simpledb from "./simpledb.js";
|
|
|
8
8
|
// prev[cur] = 1
|
|
9
9
|
// return prev
|
|
10
10
|
// }, {} as Record<string, number>)
|
|
11
|
-
const setup = (type, indexes) =>
|
|
12
|
-
.tap(({ db }) => tsplus_module_1.tryPromise(() => db.createCollection(type).catch((err) => console.warn(err))))
|
|
11
|
+
const setup = (type, indexes) => MongoClient
|
|
12
|
+
.tap(({ db }) => tsplus_module_1.tryPromise(() => db.createCollection(type).catch((err) => console.warn(err))))
|
|
13
|
+
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).createIndexes(indexes)));
|
|
13
14
|
export function createContext() {
|
|
14
15
|
return (type, encode, decode,
|
|
15
16
|
// schemaVersion: string,
|
|
16
17
|
indexes) => {
|
|
17
|
-
return
|
|
18
|
+
return setup(type, indexes).map(() => ({
|
|
18
19
|
find: simpledb.find(find, decode, type),
|
|
19
20
|
findBy,
|
|
20
21
|
save: simpledb.storeDirectly(store, type)
|
|
21
22
|
}));
|
|
22
23
|
function find(id) {
|
|
23
|
-
return tsplus_module_3.mapOption(
|
|
24
|
+
return tsplus_module_3.mapOption(MongoClient
|
|
25
|
+
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db
|
|
24
26
|
.collection(type)
|
|
25
|
-
.findOne({ _id: { equals: id } })))
|
|
27
|
+
.findOne({ _id: { equals: id } })))
|
|
28
|
+
.map(tsplus_module_2.fromNullable), ({ data, version }) => ({ version, data }));
|
|
26
29
|
}
|
|
27
30
|
function findBy(keys) {
|
|
28
|
-
return tsplus_module_3.mapOption(
|
|
31
|
+
return tsplus_module_3.mapOption(MongoClient
|
|
32
|
+
.flatMap(({ db }) => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } })))
|
|
33
|
+
.map(tsplus_module_2.fromNullable), ({ _id }) => _id);
|
|
29
34
|
}
|
|
30
35
|
function store(record, currentVersion) {
|
|
31
36
|
return tsplus_module_1.gen(function* ($) {
|
|
@@ -35,17 +40,20 @@ export function createContext() {
|
|
|
35
40
|
const { db } = yield* $(MongoClient);
|
|
36
41
|
const data = yield* $(encode(record));
|
|
37
42
|
yield* $(tsplus_module_2.match(currentVersion, {
|
|
38
|
-
onNone: () => tsplus_module_1.
|
|
43
|
+
onNone: () => tsplus_module_1.tryPromise(() => db
|
|
39
44
|
.collection(type)
|
|
40
45
|
.insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
|
|
41
46
|
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
42
47
|
}))
|
|
43
|
-
.asUnit
|
|
44
|
-
|
|
48
|
+
.asUnit
|
|
49
|
+
.orDie,
|
|
50
|
+
onSome: (currentVersion) => tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
45
51
|
version,
|
|
46
52
|
timestamp: new Date(),
|
|
47
53
|
data
|
|
48
|
-
}, { upsert: false }))
|
|
54
|
+
}, { upsert: false }))
|
|
55
|
+
.orDie
|
|
56
|
+
.flatMap((x) => {
|
|
49
57
|
if (!x.modifiedCount) {
|
|
50
58
|
return new OptimisticLockException(type, record.id);
|
|
51
59
|
}
|
|
@@ -57,4 +65,4 @@ export function createContext() {
|
|
|
57
65
|
}
|
|
58
66
|
};
|
|
59
67
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvbW9uZ29kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFHckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JELE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBR3pDLHdHQUF3RztBQUN4RyxrQkFBa0I7QUFDbEIsZ0JBQWdCO0FBQ2hCLG1DQUFtQztBQUVuQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxPQUEyQixFQUFFLEVBQUUsQ0FDMUQsV0FBVztLQUNSLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLDJCQUFrQixHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyRyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQywyQkFBa0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTdGLE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEM7SUFDOUMseUJBQXlCO0lBQ3pCLE9BQTJCLEVBQzNCLEVBQUU7UUFDRixPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLFFBQVEsQ0FB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
|
|
@@ -12,16 +12,16 @@ export declare function createContext<TKey extends string, EA, A extends DBRecor
|
|
|
12
12
|
};
|
|
13
13
|
declare const RedisSerializedDBRecord_base: S.EnhancedClass<{
|
|
14
14
|
readonly data: string;
|
|
15
|
-
readonly timestamp: Date;
|
|
16
15
|
readonly version: string;
|
|
16
|
+
readonly timestamp: Date;
|
|
17
17
|
}, {
|
|
18
18
|
readonly data: string;
|
|
19
|
-
readonly timestamp: string;
|
|
20
19
|
readonly version: string;
|
|
20
|
+
readonly timestamp: string;
|
|
21
21
|
}, never, {
|
|
22
22
|
readonly data: string;
|
|
23
|
-
readonly timestamp: Date;
|
|
24
23
|
readonly version: string;
|
|
24
|
+
readonly timestamp: Date;
|
|
25
25
|
}, RedisSerializedDBRecord, {
|
|
26
26
|
version: S.Schema<string, string, never>;
|
|
27
27
|
timestamp: S.Schema<Date, string, never> & {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/
|
|
2
|
-
import * as tsplus_module_2 from "
|
|
1
|
+
import * as tsplus_module_1 from "@effect/schema/Schema";
|
|
2
|
+
import * as tsplus_module_2 from "effect/Effect";
|
|
3
3
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
4
4
|
import * as tsplus_module_4 from "effect/Option";
|
|
5
5
|
import * as tsplus_module_5 from "@effect/schema/Parser";
|
|
@@ -12,35 +12,43 @@ import * as simpledb from "./simpledb.js";
|
|
|
12
12
|
const ttl = 10 * 1000;
|
|
13
13
|
export function createContext() {
|
|
14
14
|
return (type, encode, decode, schemaVersion, makeIndexKey) => {
|
|
15
|
-
const getData = flow(encode, (_) =>
|
|
15
|
+
const getData = flow(encode, (_) => _.map(JSON.stringify));
|
|
16
16
|
return {
|
|
17
17
|
find: simpledb.find(find, decode, type),
|
|
18
18
|
findByIndex: getIdx,
|
|
19
19
|
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
20
20
|
};
|
|
21
21
|
function find(id) {
|
|
22
|
-
return
|
|
22
|
+
return tsplus_module_3.flatMapOption(RedisClient
|
|
23
|
+
.flatMap((_) => _.hmgetAll(getKey(id))), (v) => tsplus_module_2.mapError(tsplus_module_1.decodeUnknown(RedisSerializedDBRecord)(v)
|
|
24
|
+
.map(({ data, version }) => ({
|
|
23
25
|
data: JSON.parse(data),
|
|
24
26
|
version
|
|
25
|
-
})), (e) => new ConnectionException(new Error(e.toString()))))
|
|
27
|
+
})), (e) => new ConnectionException(new Error(e.toString()))))
|
|
28
|
+
.orDie;
|
|
26
29
|
}
|
|
27
30
|
function store(record, currentVersion) {
|
|
28
31
|
const version = currentVersion
|
|
29
32
|
.map((cv) => (parseInt(cv) + 1).toString())
|
|
30
33
|
.getOrElse(() => "1");
|
|
31
34
|
return tsplus_module_4.match(currentVersion, {
|
|
32
|
-
onNone: () =>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
onNone: () => tsplus_module_2.scoped(tsplus_module_2.zipRight(lockIndex(record), tsplus_module_2.zipRight(tsplus_module_2.zipRight(tsplus_module_3.zipRightOption(getIndex(record), tsplus_module_2.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
36
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
37
|
+
.flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
|
|
35
38
|
version,
|
|
36
39
|
timestamp: new Date(),
|
|
37
40
|
data
|
|
38
|
-
}))), setIndex(record))
|
|
39
|
-
|
|
41
|
+
}))), setIndex(record))
|
|
42
|
+
.orDie
|
|
43
|
+
.map(() => ({ version, data: record })))),
|
|
44
|
+
onSome: () => getData(record)
|
|
45
|
+
.flatMap((data) => hmSetRec(getKey(record.id), new RedisSerializedDBRecord({
|
|
40
46
|
version,
|
|
41
47
|
timestamp: new Date(),
|
|
42
48
|
data
|
|
43
|
-
})))
|
|
49
|
+
})))
|
|
50
|
+
.orDie
|
|
51
|
+
.map(() => ({ version, data: record }))
|
|
44
52
|
});
|
|
45
53
|
}
|
|
46
54
|
function getIndex(record) {
|
|
@@ -56,30 +64,34 @@ export function createContext() {
|
|
|
56
64
|
return lockRedisIdx(index);
|
|
57
65
|
}
|
|
58
66
|
function getIdx(index) {
|
|
59
|
-
return
|
|
67
|
+
return RedisClient.flatMap((_) => _.hget(getIdxKey(index), index.key).map((_) => _.map((i) => i)));
|
|
60
68
|
}
|
|
61
69
|
function setIdx(index, r) {
|
|
62
|
-
return
|
|
70
|
+
return RedisClient.flatMap((_) => _.hset(getIdxKey(index), index.key, r.id));
|
|
63
71
|
}
|
|
64
72
|
function lockRedisIdx(index) {
|
|
65
73
|
const lockKey = getIdxLockKey(index);
|
|
66
74
|
// acquire
|
|
67
|
-
return
|
|
75
|
+
return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
|
|
76
|
+
.flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(lockKey, ttl))), {
|
|
68
77
|
onFailure: (err) => new CouldNotAquireDbLockException(type, lockKey, err),
|
|
69
78
|
// release
|
|
70
79
|
onSuccess: (lock) => ({
|
|
71
|
-
release:
|
|
80
|
+
release: tsplus_module_2.tryPromise(() => lock.unlock())
|
|
81
|
+
.orDie
|
|
72
82
|
})
|
|
73
83
|
}), (l) => l.release);
|
|
74
84
|
}
|
|
75
85
|
function lockRedisRecord(id) {
|
|
76
86
|
// acquire
|
|
77
|
-
return
|
|
87
|
+
return tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(RedisClient
|
|
88
|
+
.flatMap(({ lock }) => tsplus_module_2.tryPromise(() => lock.lock(getLockKey(id), ttl))), {
|
|
78
89
|
onFailure: (err) => new CouldNotAquireDbLockException(type, id, err),
|
|
79
90
|
// release
|
|
80
91
|
onSuccess: (lock) => ({
|
|
81
92
|
// TODO
|
|
82
|
-
release:
|
|
93
|
+
release: tsplus_module_2.tryPromise(() => lock.unlock())
|
|
94
|
+
.orDie
|
|
83
95
|
})
|
|
84
96
|
}), (l) => l.release);
|
|
85
97
|
}
|
|
@@ -98,10 +110,10 @@ export function createContext() {
|
|
|
98
110
|
};
|
|
99
111
|
function hmSetRec(key, val) {
|
|
100
112
|
const enc = tsplus_module_5.encodeSync(RedisSerializedDBRecord)(val);
|
|
101
|
-
return
|
|
113
|
+
return RedisClient.flatMap(({ client }) => tsplus_module_2.uninterruptible(tsplus_module_2.async((res) => {
|
|
102
114
|
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, (err) => err
|
|
103
115
|
? res(new ConnectionException(err))
|
|
104
|
-
: res(
|
|
116
|
+
: res(tsplus_module_2.sync(() => void 0)));
|
|
105
117
|
})));
|
|
106
118
|
}
|
|
107
119
|
}
|
|
@@ -111,4 +123,4 @@ export class RedisSerializedDBRecord extends S.Class()({
|
|
|
111
123
|
data: S.string
|
|
112
124
|
}) {
|
|
113
125
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvcmVkaXNkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3JFLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFHdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFekMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQTtBQUVyQixNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDLEVBQzlDLGFBQXFCLEVBQ3JCLFlBQTZCLEVBQzdCLEVBQUU7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQzFELE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN2QyxXQUFXLEVBQUUsTUFBTTtZQUNuQixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUM7U0FDekQsQ0FBQTtRQUVELFNBQVMsSUFBSSxDQUFDLEVBQVU7WUFDdEIsT0FBTyw4QkFBQSxXQUFXO2lCQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxF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
|
|
@@ -39,16 +39,16 @@ export interface DBRecord<TKey extends string> {
|
|
|
39
39
|
}
|
|
40
40
|
declare const SerializedDBRecord_base: S.EnhancedClass<{
|
|
41
41
|
readonly data: string;
|
|
42
|
-
readonly timestamp: Date;
|
|
43
42
|
readonly version: string;
|
|
43
|
+
readonly timestamp: Date;
|
|
44
44
|
}, {
|
|
45
45
|
readonly data: string;
|
|
46
|
-
readonly timestamp: string;
|
|
47
46
|
readonly version: string;
|
|
47
|
+
readonly timestamp: string;
|
|
48
48
|
}, never, {
|
|
49
49
|
readonly data: string;
|
|
50
|
-
readonly timestamp: Date;
|
|
51
50
|
readonly version: string;
|
|
51
|
+
readonly timestamp: Date;
|
|
52
52
|
}, SerializedDBRecord, {
|
|
53
53
|
version: S.Schema<string, string, never>;
|
|
54
54
|
timestamp: S.Schema<Date, string, never> & {
|
|
@@ -60,12 +60,12 @@ export declare class SerializedDBRecord extends SerializedDBRecord_base {
|
|
|
60
60
|
}
|
|
61
61
|
export declare function makeSerialisedDBRecord(s: Schema<any>): S.Schema<{
|
|
62
62
|
readonly data: any;
|
|
63
|
-
readonly timestamp: Date;
|
|
64
63
|
readonly version: number;
|
|
64
|
+
readonly timestamp: Date;
|
|
65
65
|
}, {
|
|
66
66
|
readonly data: any;
|
|
67
|
-
readonly timestamp: string;
|
|
68
67
|
readonly version: number;
|
|
68
|
+
readonly timestamp: string;
|
|
69
69
|
}, never>;
|
|
70
70
|
export interface CachedRecord<T> {
|
|
71
71
|
version: string;
|
|
@@ -30,7 +30,7 @@ export const RecordCache = tsplus_module_2.GenericTag("@services/RecordCache");
|
|
|
30
30
|
export const LiveRecordCache = tsplus_module_3.effect(RecordCache)(tsplus_module_1.sync(() => makeLiveRecordCache()));
|
|
31
31
|
const getM = (type) => (eff) => tsplus_module_1.gen(function* ($) {
|
|
32
32
|
const { get } = yield* $(RecordCache);
|
|
33
|
-
return yield* $(
|
|
33
|
+
return yield* $(get(type).flatMap(eff));
|
|
34
34
|
});
|
|
35
35
|
export function find(tryRead, decode, type) {
|
|
36
36
|
const getCache = getM(type);
|
|
@@ -43,20 +43,25 @@ export function find(tryRead, decode, type) {
|
|
|
43
43
|
}
|
|
44
44
|
export function storeDirectly(save, type) {
|
|
45
45
|
const getCache = getM(type);
|
|
46
|
-
return (record) => getCache((c) =>
|
|
47
|
-
.find(record.id), (x) => x.version)
|
|
48
|
-
.
|
|
46
|
+
return (record) => getCache((c) => tsplus_module_4.mapOption(c
|
|
47
|
+
.find(record.id), (x) => x.version)
|
|
48
|
+
.flatMap((cv) => save(record, cv))
|
|
49
|
+
.tap((r) => c.set(record.id, r))
|
|
50
|
+
.map((r) => r.data));
|
|
49
51
|
}
|
|
50
52
|
export function store(tryRead, save, lock, type) {
|
|
51
53
|
const getCache = getM(type);
|
|
52
|
-
return (record) => getCache((c) =>
|
|
53
|
-
.find(record.id), (x) => x.version)
|
|
54
|
-
.
|
|
54
|
+
return (record) => getCache((c) => tsplus_module_4.mapOption(c
|
|
55
|
+
.find(record.id), (x) => x.version)
|
|
56
|
+
.flatMap((_) => tsplus_module_5.match(_, { onNone: () => save(record, tsplus_module_5.none()), onSome: confirmVersionAndSave(record) }))
|
|
57
|
+
.tap((r) => c.set(record.id, r))
|
|
58
|
+
.map((r) => r.data));
|
|
55
59
|
function confirmVersionAndSave(record) {
|
|
56
|
-
return (cv) => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(
|
|
60
|
+
return (cv) => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(tryRead(record.id)
|
|
61
|
+
.flatMap((_) => tsplus_module_5.match(_, { onNone: () => tsplus_module_1.fail(new InvalidStateError("record is gone")), onSome: tsplus_module_1.succeed }))
|
|
57
62
|
.tap(({ version }) => version !== cv
|
|
58
63
|
? new OptimisticLockException(type, record.id)
|
|
59
64
|
: tsplus_module_1.unit), save(record, tsplus_module_5.some(cv)))));
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL3NpbXBsZWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUc5RCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLFlBQXFCLE9BQWUsRUFBVyxPQUFpQjtRQUEzQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQVcsWUFBTyxHQUFQLE9BQU8sQ0FBVTtRQUR2RCxTQUFJLEdBQUcsbUJBQW1CLENBQUE7SUFDZ0MsQ0FBQztDQUNyRTtBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsTUFBTSxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQXNDLENBQUE7SUFDdkQsT0FBTztRQUNMLEdBQUcsRUFBRSxDQUFJLElBQVksRUFBRSxFQUFFLENBQ3ZCLHFCQUFZLEdBQUcsRUFBRTtZQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBbUIsQ0FBQTtnQkFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7Z0JBQ2YsT0FBTyxFQUF3QyxDQUFBO1lBQ2pELENBQUM7WUFDRCxPQUFPLEVBQXdDLENBQUE7UUFDakQsQ0FBQyxDQUFDO0tBQ0wsQ0FBQTtBQUNILENBQUM7QUFJRCxhQUFhO0FBQ2IsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLGdCQUFBLFVBQVUsQ0FBYyx1QkFBdUIsQ0FBQyxDQUFBO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyx1QkFBaUQsV0FBVyxFQUE1RCxxQkFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQXFCLENB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
|
package/package.json
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.182.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@azure/cosmos": "^4.0.0",
|
|
8
8
|
"@azure/service-bus": "^7.9.4",
|
|
9
|
-
"@effect/platform": "^0.44.
|
|
10
|
-
"@effect/schema": "^0.62.
|
|
9
|
+
"@effect/platform": "^0.44.7",
|
|
10
|
+
"@effect/schema": "^0.62.6",
|
|
11
11
|
"express-oauth2-jwt-bearer": "^1.6.0",
|
|
12
12
|
"@faker-js/faker": "^8.4.1",
|
|
13
13
|
"@sendgrid/helpers": "^8.0.0",
|
|
14
14
|
"@sendgrid/mail": "^8.1.0",
|
|
15
15
|
"change-case": "^5.4.2",
|
|
16
16
|
"cross-fetch": "^4.0.0",
|
|
17
|
-
"effect": "^2.3.
|
|
17
|
+
"effect": "^2.3.5",
|
|
18
18
|
"fast-check": "~3.15.1",
|
|
19
19
|
"object-hash": "^3.0.0",
|
|
20
20
|
"path-parser": "^6.1.0",
|
|
21
21
|
"proper-lockfile": "^4.1.2",
|
|
22
22
|
"pure-rand": "6.0.4",
|
|
23
23
|
"redlock": "^4.2.0",
|
|
24
|
-
"@effect-app/core": "0.
|
|
25
|
-
"
|
|
26
|
-
"@effect-app/
|
|
27
|
-
"effect-app": "0.
|
|
28
|
-
"@effect-app/schema": "0.
|
|
24
|
+
"@effect-app/core": "0.136.0",
|
|
25
|
+
"effect-app": "0.158.2",
|
|
26
|
+
"@effect-app/fluent-extensions": "0.130.2",
|
|
27
|
+
"@effect-app/infra-adapters": "0.123.2",
|
|
28
|
+
"@effect-app/schema": "0.189.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@babel/cli": "^7.23.9",
|
|
32
|
-
"@sentry/node": "^7.
|
|
32
|
+
"@sentry/node": "^7.101.0",
|
|
33
33
|
"@types/express": "^4.17.21",
|
|
34
34
|
"@types/node": "~20.11.17",
|
|
35
35
|
"@types/proper-lockfile": "^4.1.4",
|