@effect-app/infra 0.13.0 → 0.14.1
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 +25 -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 +57 -56
- 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 +70 -70
- 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 -30
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +58 -58
- 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 +11 -13
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +20 -22
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +25 -25
- 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 +16 -17
- 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 +50 -52
- package/dist/api/express/schema/routing.js +21 -23
- package/dist/api/reportError.js +6 -18
- package/dist/api/routing.js +65 -67
- 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 -24
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +61 -63
- 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 +13 -14
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.js +18 -20
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.js +21 -23
- 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 -19
- package/package.json +12 -12
- package/tsconfig.json +5 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/diskdb.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";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/Option";
|
|
5
4
|
import { flow, pipe } from "@effect-app/core/Function";
|
|
6
5
|
import fs from "fs";
|
|
7
6
|
import * as PLF from "proper-lockfile";
|
|
@@ -24,12 +23,13 @@ export function createContext() {
|
|
|
24
23
|
};
|
|
25
24
|
function store(record, currentVersion) {
|
|
26
25
|
const version = tsplus_module_1.getOrElse(() => "1")(tsplus_module_1.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
27
|
-
const getData = flow(encode, _ =>
|
|
26
|
+
const getData = flow(encode, _ => tsplus_module_2.map(_, data => pretty({ version, timestamp: new Date(), data })));
|
|
28
27
|
const idx = makeIndexKey(record);
|
|
29
28
|
return tsplus_module_1.isSome(currentVersion)
|
|
30
|
-
?
|
|
31
|
-
?
|
|
32
|
-
|
|
29
|
+
? tsplus_module_2.map(tsplus_module_2.scoped(tsplus_module_2.zipRight(lockIndex(record), tsplus_module_2.orDie(tsplus_module_2.flatMap(readIndex(idx), x => x[record.id]
|
|
30
|
+
? tsplus_module_2.fail(() => new Error("Combination already exists, abort"))
|
|
31
|
+
: tsplus_module_2.zipRight(tsplus_module_2.flatMap(getData(record), serialised => fu.writeTextFile(getFilename(type, record.id), serialised)), writeIndex(idx, { ...x, [idx.key]: record.id })))))), () => ({ version, data: record }))
|
|
32
|
+
: tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => fu.writeTextFile(getFilename(type, record.id), serialised)), () => ({ version, data: record }));
|
|
33
33
|
}
|
|
34
34
|
function lockIndex(record) {
|
|
35
35
|
const index = makeIndexKey(record);
|
|
@@ -44,32 +44,32 @@ export function createContext() {
|
|
|
44
44
|
return lockIndexOnDisk(type)(lockKey);
|
|
45
45
|
}
|
|
46
46
|
function lockRecordOnDisk(type) {
|
|
47
|
-
return (id) =>
|
|
47
|
+
return (id) => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getFilename(type, id)), err => new CouldNotAquireDbLockException(type, id, err), release => ({ release })), l => l.release);
|
|
48
48
|
}
|
|
49
49
|
function lockIndexOnDisk(type) {
|
|
50
|
-
return (id) =>
|
|
50
|
+
return (id) => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getIdxName(type, id)), err => new CouldNotAquireDbLockException(type, id, err), release => ({ release })), l => l.release);
|
|
51
51
|
}
|
|
52
52
|
function readFile(filePath) {
|
|
53
|
-
return
|
|
54
|
-
.readTextFile(filePath));
|
|
53
|
+
return tsplus_module_2.catchAll(fu
|
|
54
|
+
.readTextFile(filePath), err => tsplus_module_2.die(new ConnectionException(err)));
|
|
55
55
|
}
|
|
56
56
|
function find(type) {
|
|
57
57
|
return (id) => {
|
|
58
|
-
return
|
|
58
|
+
return tsplus_module_2.map(tryRead(getFilename(type, id)), _ => tsplus_module_1.map(s => JSON.parse(s))(_));
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
function getIdx(index) {
|
|
62
|
-
return
|
|
62
|
+
return tsplus_module_2.map(readIndex(index), idx => tsplus_module_1.fromNullable(idx[index.key]));
|
|
63
63
|
}
|
|
64
64
|
function readIndex(index) {
|
|
65
|
-
return
|
|
65
|
+
return tsplus_module_2.map(tryRead(getIdxName(type, index.doc)), _ => tsplus_module_1.match(() => ({}), x => JSON.parse(x))(_));
|
|
66
66
|
}
|
|
67
67
|
function writeIndex(index, content) {
|
|
68
68
|
return pipe(JSON.stringify(content), serialised => fu.writeTextFile(getIdxName(type, index.doc), serialised));
|
|
69
69
|
}
|
|
70
70
|
function tryRead(filePath) {
|
|
71
|
-
return
|
|
72
|
-
.fileExists(filePath));
|
|
71
|
+
return tsplus_module_2.flatMap(fu
|
|
72
|
+
.fileExists(filePath), exists => !exists ? tsplus_module_2.sync(() => tsplus_module_3.none) : tsplus_module_2.map(readFile(filePath), tsplus_module_1.some));
|
|
73
73
|
}
|
|
74
74
|
function getFilename(type, id) {
|
|
75
75
|
return `${dir}/v${schemaVersion}.${getRecordName(type, id)}.json`;
|
|
@@ -80,7 +80,7 @@ export function createContext() {
|
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
function lockFile(fileName) {
|
|
83
|
-
return
|
|
83
|
+
return tsplus_module_2.tryPromise(() => PLF.lock(fileName).then(flow(tsplus_module_2.tryPromise, _ => tsplus_module_2.orDie(_))));
|
|
84
84
|
}
|
|
85
85
|
// TODO: ugh.
|
|
86
86
|
let initialised = false;
|
|
@@ -93,4 +93,4 @@ export function initialise(dir) {
|
|
|
93
93
|
}
|
|
94
94
|
initialised = true;
|
|
95
95
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlza2RiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9kaXNrZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQTtBQUV0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDL0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM3RyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUd6QyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDLEVBQzlDLGFBQXFCLEVBQ3JCLFlBQTZCLEVBQzdCLEdBQUcsR0FBRyxXQUFXLEVBQ2pCLEVBQUU7UUFDRixVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDZixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUE7UUFDaEMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNoRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQixFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDM0M7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7WUFDN0MsV0FBVyxF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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Effect } from "@effect/io/Effect";
|
|
2
|
-
import { Equivalence } from "@fp-ts/
|
|
2
|
+
import { Equivalence } from "@fp-ts/core/typeclass/Equivalence";
|
|
3
3
|
import { Opt } from "@effect-app/core/Option";
|
|
4
4
|
import * as MO from "@effect-app/schema";
|
|
5
5
|
import type { DBRecord } from "./shared.js";
|
|
6
6
|
import * as simpledb from "./simpledb.js";
|
|
7
7
|
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>) => {
|
|
8
|
-
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, MO.CondemnException | simpledb.InvalidStateError, import("@fp-ts/
|
|
9
|
-
findBy: <V extends Partial<A>>(keys: V, eq: import("@fp-ts/
|
|
8
|
+
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode, MO.CondemnException | simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
9
|
+
findBy: <V extends Partial<A>>(keys: V, eq: import("@fp-ts/core/typeclass/Equivalence").Equivalence<V>) => import("@effect/io/Effect").Effect<RDecode, MO.CondemnException, import("@fp-ts/core/Option").Option<A & {}>>;
|
|
10
10
|
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode, MO.CondemnException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=memdb.d.ts.map
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/memdb.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
3
|
import * as tsplus_module_3 from "@effect-app/core/Effect";
|
|
6
4
|
import * as tsplus_module_4 from "@effect/io/Exit";
|
|
@@ -20,36 +18,37 @@ export function createContext() {
|
|
|
20
18
|
save: simpledb.store(find, store, bogusLock, type)
|
|
21
19
|
};
|
|
22
20
|
function find(id) {
|
|
23
|
-
return
|
|
24
|
-
.find(getRecordName(type, id))), parseSDB)
|
|
21
|
+
return tsplus_module_3.mapOpt(tsplus_module_3.flatMapOpt(tsplus_module_2.map(storage
|
|
22
|
+
.find(getRecordName(type, id)), _ => tsplus_module_1.map(s => JSON.parse(s))(_)), parseSDB), ({ data, version }) => ({
|
|
25
23
|
data: JSON.parse(data),
|
|
26
24
|
version
|
|
27
|
-
}))
|
|
25
|
+
}));
|
|
28
26
|
}
|
|
29
27
|
function findBy(keys, eq) {
|
|
30
28
|
// Naive implementation, fine for in memory testing purposes.
|
|
31
|
-
return
|
|
29
|
+
return tsplus_module_2.map(tsplus_module_2.gen(function* ($) {
|
|
32
30
|
for (const [, value] of storage) {
|
|
33
31
|
const sdb_ = JSON.parse(value);
|
|
34
32
|
const sdb = yield* $(parseSDB(sdb_));
|
|
35
33
|
const cr = { data: JSON.parse(sdb.data), version: sdb.version };
|
|
36
|
-
const r = yield* $(tsplus_module_2.exit(
|
|
37
|
-
?
|
|
34
|
+
const r = yield* $(tsplus_module_2.exit(tsplus_module_2.flatMap(decode(cr.data), d => eq(keys, d)
|
|
35
|
+
? tsplus_module_2.sync(() => d)
|
|
36
|
+
: tsplus_module_2.fail("not equals"))));
|
|
38
37
|
if (tsplus_module_4.isSuccess(r)) {
|
|
39
38
|
return r.value;
|
|
40
39
|
}
|
|
41
40
|
}
|
|
42
41
|
return null;
|
|
43
|
-
}))
|
|
42
|
+
}), tsplus_module_1.fromNullable);
|
|
44
43
|
}
|
|
45
44
|
function store(record, currentVersion) {
|
|
46
45
|
const version = tsplus_module_1.getOrElse(() => "1")(tsplus_module_1.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
47
|
-
const getData = flow(encode, _ =>
|
|
48
|
-
return
|
|
46
|
+
const getData = flow(encode, _ => tsplus_module_2.map(tsplus_module_2.map(_, JSON.stringify), data => JSON.stringify({ version, timestamp: new Date(), data })));
|
|
47
|
+
return tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => storage.set(getRecordName(type, record.id), serialised)), () => ({ version, data: record }));
|
|
49
48
|
}
|
|
50
49
|
};
|
|
51
50
|
}
|
|
52
51
|
function bogusLock() {
|
|
53
|
-
return
|
|
52
|
+
return tsplus_module_2.acquireRelease(tsplus_module_3.unit, () => tsplus_module_3.unit);
|
|
54
53
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL21lbWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDaEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUd4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN4RSxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUd6Qyw0REFBNEQ7QUFDNUQsMkJBQTJCO0FBQzNCLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBa0IsQ0FBQTtBQUV6QyxNQUFNLFFBQVEsR0FBZ0MsRUFBRSxDQUFDLFdBQVcsQ0FBM0Msa0JBQWtCLENBQUMsTUFBTSxDQUFrQixDQUFBO0FBRTVELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE9BQU8sQ0FDTCxJQUFZLEVBQ1osTUFBaUQsRUFDakQsTUFBOEMsRUFDOUMsRUFBRTtRQUNGLE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN2QyxNQUFNO1lBQ04sSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDO1NBQ25ELENBQUE7UUFFRCxTQUFTLElBQUksQ0FBQyxFQUFVO1lBQ3RCLE9BQU8sdUJBQUEsMkJBQUEsb0JBQUEsT0FBTztpQkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUN6QixDQUFDLENBQUMsRUFBRSxDQUFDLG9CQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBeEIsQ0FBQyxDQUF3QixD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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: IndexDescription[]) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode | Mongo.MongoClient, unknown, import("@fp-ts/
|
|
10
|
-
findBy: (keys: Record<string, string>) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, import("@fp-ts/
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<simpledb.RecordCache | RDecode | Mongo.MongoClient, unknown, import("@fp-ts/core/Option").Option<A>>;
|
|
10
|
+
findBy: (keys: Record<string, string>) => import("@effect/io/Effect").Effect<Mongo.MongoClient, unknown, import("@fp-ts/core/Option").Option<TKey>>;
|
|
11
11
|
save: (record: A) => import("@effect/io/Effect").Effect<simpledb.RecordCache | REncode | Mongo.MongoClient, OptimisticLockException, A>;
|
|
12
12
|
}>;
|
|
13
13
|
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/mongodb.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/core/Effect";
|
|
6
4
|
import * as Mongo from "@effect-app/infra-adapters/mongo-client";
|
|
7
5
|
import { OptimisticLockException } from "./shared.js";
|
|
@@ -10,46 +8,46 @@ import * as simpledb from "./simpledb.js";
|
|
|
10
8
|
// prev[cur] = 1
|
|
11
9
|
// return prev
|
|
12
10
|
// }, {} as Record<string, number>)
|
|
13
|
-
const setup = (type, indexes) =>
|
|
11
|
+
const setup = (type, indexes) => tsplus_module_1.flatMap(tsplus_module_1.tap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.createCollection(type).catch(err => console.warn(err)))), db => tsplus_module_1.tryPromise(() => db.collection(type).createIndexes(indexes)));
|
|
14
12
|
export function createContext() {
|
|
15
13
|
return (type, encode, decode,
|
|
16
14
|
// schemaVersion: string,
|
|
17
15
|
indexes) => {
|
|
18
|
-
return
|
|
16
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
19
17
|
find: simpledb.find(find, decode, type),
|
|
20
18
|
findBy,
|
|
21
19
|
save: simpledb.storeDirectly(store, type)
|
|
22
|
-
}))
|
|
20
|
+
}));
|
|
23
21
|
function find(id) {
|
|
24
|
-
return
|
|
22
|
+
return tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db
|
|
25
23
|
.collection(type)
|
|
26
|
-
.findOne({ _id: id })))
|
|
24
|
+
.findOne({ _id: id }))), tsplus_module_2.fromNullable), ({ data, version }) => ({ version, data }));
|
|
27
25
|
}
|
|
28
26
|
function findBy(keys) {
|
|
29
|
-
return
|
|
27
|
+
return tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } }))), tsplus_module_2.fromNullable), ({ _id }) => _id);
|
|
30
28
|
}
|
|
31
29
|
function store(record, currentVersion) {
|
|
32
|
-
return
|
|
30
|
+
return tsplus_module_1.gen(function* ($) {
|
|
33
31
|
const version = tsplus_module_2.getOrElse(() => "1")(tsplus_module_2.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
34
32
|
const db = yield* $(Mongo.db);
|
|
35
33
|
const data = yield* $(encode(record));
|
|
36
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(
|
|
34
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db
|
|
37
35
|
.collection(type)
|
|
38
36
|
.insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
|
|
39
37
|
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
40
|
-
}))))
|
|
41
|
-
if (!x.modifiedCount) {
|
|
42
|
-
return tracer_1.withCallTrace(fileName_1 + ":89:33")(tsplus_module_1.fail(new OptimisticLockException(type, record.id)));
|
|
43
|
-
}
|
|
44
|
-
return tsplus_module_3.unit;
|
|
45
|
-
}))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":77:22")(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
38
|
+
})))), currentVersion => tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
46
39
|
version,
|
|
47
40
|
timestamp: new Date(),
|
|
48
41
|
data
|
|
49
|
-
}, { upsert: false })))
|
|
42
|
+
}, { upsert: false }))), x => {
|
|
43
|
+
if (!x.modifiedCount) {
|
|
44
|
+
return tsplus_module_1.fail(new OptimisticLockException(type, record.id));
|
|
45
|
+
}
|
|
46
|
+
return tsplus_module_3.unit;
|
|
47
|
+
}))(currentVersion));
|
|
50
48
|
return { version, data: record };
|
|
51
|
-
})
|
|
49
|
+
});
|
|
52
50
|
}
|
|
53
51
|
};
|
|
54
52
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvbW9uZ29kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxPQUFPLEtBQUssS0FBSyxNQUFNLHlDQUF5QyxDQUFBO0FBRWhFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUd6Qyx3R0FBd0c7QUFDeEcsa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixtQ0FBbUM7QUFFbkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBMkIsRUFBRSxFQUFFLENBQzFELHdCQUFBLG9CQUFBLEtBQUssQ0FBQyxFQUFFLEVBQ0QsRUFBRSxDQUFDLEVBQUUsQ0FBQywyQkFBa0IsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3JGLEVBQUUsQ0FBQyxFQUFFLENBQUMsMkJBQWtCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUV2RixNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDO0lBQzlDLHlCQUF5QjtJQUN6QixPQUEyQixFQUMzQixFQUFFO1FBQ0YsT0FBTyxvQkFBQSxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUM7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
|
|
@@ -6,18 +6,18 @@ import type { DBRecord, Index } from "./shared.js";
|
|
|
6
6
|
import { CouldNotAquireDbLockException } 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>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
|
-
find: (id: string) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/
|
|
10
|
-
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<RED.RedisClient, RED.ConnectionException, import("@fp-ts/
|
|
9
|
+
find: (id: string) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("@fp-ts/core/Option").Option<A>>;
|
|
10
|
+
findByIndex: (index: Index) => import("@effect/io/Effect").Effect<RED.RedisClient, RED.ConnectionException, import("@fp-ts/core/Option").Option<TKey>>;
|
|
11
11
|
save: (record: A) => import("@effect/io/Effect").Effect<RED.RedisClient | simpledb.RecordCache | REncode, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
12
12
|
};
|
|
13
13
|
declare const RedisSerializedDBRecord_base: MO.Model<RedisSerializedDBRecord, MO.SchemaProperties<{
|
|
14
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
15
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
16
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
14
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
15
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
16
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
17
17
|
}>> & MO.PropsExtensions<{
|
|
18
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
19
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
20
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
18
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
19
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
20
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
21
21
|
}>;
|
|
22
22
|
export declare class RedisSerializedDBRecord extends RedisSerializedDBRecord_base {
|
|
23
23
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import * as tracer_1 from "@effect/io/Debug";
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/redisdb.ts";
|
|
3
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
4
2
|
import * as tsplus_module_2 from "@effect-app/core/Effect";
|
|
5
|
-
import * as tsplus_module_3 from "@fp-ts/
|
|
3
|
+
import * as tsplus_module_3 from "@fp-ts/core/Option";
|
|
6
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
5
|
import { flow, pipe } from "@effect-app/core/Function";
|
|
8
6
|
import * as MO from "@effect-app/schema";
|
|
@@ -12,31 +10,31 @@ import * as simpledb from "./simpledb.js";
|
|
|
12
10
|
const ttl = 10 * 1000;
|
|
13
11
|
export function createContext() {
|
|
14
12
|
return (type, encode, decode, schemaVersion, makeIndexKey) => {
|
|
15
|
-
const getData = flow(encode, _ =>
|
|
13
|
+
const getData = flow(encode, _ => tsplus_module_1.map(_, JSON.stringify));
|
|
16
14
|
return {
|
|
17
15
|
find: simpledb.find(find, decode, type),
|
|
18
16
|
findByIndex: getIdx,
|
|
19
17
|
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
20
18
|
};
|
|
21
19
|
function find(id) {
|
|
22
|
-
return tsplus_module_1.orDie(
|
|
20
|
+
return tsplus_module_1.orDie(tsplus_module_2.flatMapOpt(RED.hmgetAll(getKey(id)), v => tsplus_module_1.mapError(tsplus_module_1.map(pipe(RedisSerializedDBRecord.Parser, MO.condemnFail)(v), ({ data, version }) => ({
|
|
23
21
|
data: JSON.parse(data),
|
|
24
22
|
version
|
|
25
|
-
}))
|
|
23
|
+
})), e => new ConnectionException(new Error(e.toString())))));
|
|
26
24
|
}
|
|
27
25
|
function store(record, currentVersion) {
|
|
28
26
|
const version = tsplus_module_3.getOrElse(() => "1")(tsplus_module_3.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
29
|
-
return tsplus_module_3.match(() => tsplus_module_1.scoped(
|
|
27
|
+
return tsplus_module_3.match(() => tsplus_module_1.scoped(tsplus_module_1.zipRight(lockIndex(record), tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.zipRight(tsplus_module_1.flatMap(tsplus_module_1.zipRight(tsplus_module_2.zipRightOpt(getIndex(record), tsplus_module_1.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
28
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
29
|
+
, data => hmSetRec(getKey(record.id), {
|
|
30
30
|
version,
|
|
31
31
|
timestamp: new Date(),
|
|
32
32
|
data
|
|
33
|
-
}))
|
|
34
|
-
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
35
|
-
))))))(lockIndex(record))), () => tracer_1.withCallTrace(fileName_1 + ":74:20")(tsplus_module_1.map(() => ({ version, data: record })))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":67:14")(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
33
|
+
})), setIndex(record))), () => ({ version, data: record })))), () => tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.flatMap(getData(record), data => hmSetRec(getKey(record.id), {
|
|
36
34
|
version,
|
|
37
35
|
timestamp: new Date(),
|
|
38
36
|
data
|
|
39
|
-
})))(
|
|
37
|
+
}))), () => ({ version, data: record })))(currentVersion);
|
|
40
38
|
}
|
|
41
39
|
function getIndex(record) {
|
|
42
40
|
const index = makeIndexKey(record);
|
|
@@ -51,7 +49,7 @@ export function createContext() {
|
|
|
51
49
|
return lockRedisIdx(index);
|
|
52
50
|
}
|
|
53
51
|
function getIdx(index) {
|
|
54
|
-
return
|
|
52
|
+
return tsplus_module_1.map(RED.hget(getIdxKey(index), index.key), _ => tsplus_module_3.map(i => i)(_));
|
|
55
53
|
}
|
|
56
54
|
function setIdx(index, r) {
|
|
57
55
|
return RED.hset(getIdxKey(index), index.key, r.id);
|
|
@@ -59,20 +57,20 @@ export function createContext() {
|
|
|
59
57
|
function lockRedisIdx(index) {
|
|
60
58
|
const lockKey = getIdxLockKey(index);
|
|
61
59
|
// acquire
|
|
62
|
-
return
|
|
60
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RED.lock, lock => tsplus_module_1.tryPromise(() => lock.lock(lockKey, ttl))), err => new CouldNotAquireDbLockException(type, lockKey, err),
|
|
63
61
|
// release
|
|
64
62
|
lock => ({
|
|
65
|
-
release: tsplus_module_1.orDie(
|
|
66
|
-
}))
|
|
63
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
64
|
+
})), l => l.release);
|
|
67
65
|
}
|
|
68
66
|
function lockRedisRecord(id) {
|
|
69
67
|
// acquire
|
|
70
|
-
return
|
|
68
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RED.lock, lock => tsplus_module_1.tryPromise(() => lock.lock(getLockKey(id), ttl))), err => new CouldNotAquireDbLockException(type, id, err),
|
|
71
69
|
// release
|
|
72
70
|
lock => ({
|
|
73
71
|
// TODO
|
|
74
|
-
release: tsplus_module_1.orDie(
|
|
75
|
-
}))
|
|
72
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
73
|
+
})), l => l.release);
|
|
76
74
|
}
|
|
77
75
|
function getKey(id) {
|
|
78
76
|
return `v${schemaVersion}.${getRecordName(type, id)}`;
|
|
@@ -89,11 +87,11 @@ export function createContext() {
|
|
|
89
87
|
};
|
|
90
88
|
function hmSetRec(key, val) {
|
|
91
89
|
const enc = RedisSerializedDBRecord.Encoder(val);
|
|
92
|
-
return
|
|
90
|
+
return tsplus_module_1.flatMap(RED.client, client => tsplus_module_1.uninterruptible(tsplus_module_1.async(res => {
|
|
93
91
|
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err
|
|
94
|
-
? res(
|
|
95
|
-
: res(
|
|
96
|
-
})))
|
|
92
|
+
? res(tsplus_module_1.fail(new ConnectionException(err)))
|
|
93
|
+
: res(tsplus_module_1.sync(() => void 0)));
|
|
94
|
+
})));
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
97
|
export class RedisSerializedDBRecord extends MO.Model()({
|
|
@@ -102,4 +100,4 @@ export class RedisSerializedDBRecord extends MO.Model()({
|
|
|
102
100
|
data: MO.prop(MO.string)
|
|
103
101
|
}) {
|
|
104
102
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvcmVkaXNkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUN0RCxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0seUNBQXlDLENBQUE7QUFFOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFekMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQTtBQUVyQixNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDLEVBQzlDLGFBQXFCLEVBQ3JCLFlBQTZCLEVBQzdCLEVBQUU7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsb0JBQUEsQ0FBQyxFQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ3hELE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZQUN2QyxXQUFXLEVBQUUsTUFBTTtZQUNuQixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUM7U0FDekQsQ0FBQTtRQUVELFNBQVMsSUFBSSxDQUFDLEVBQVU7WUFDdEIsNkJBQU8sMkJBQUEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENB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
|
|
@@ -28,20 +28,20 @@ export interface DBRecord<TKey extends string> {
|
|
|
28
28
|
id: TKey;
|
|
29
29
|
}
|
|
30
30
|
declare const SerializedDBRecord_base: MO.Model<SerializedDBRecord, MO.SchemaProperties<{
|
|
31
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
32
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
33
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
31
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
32
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
33
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
34
34
|
}>> & MO.PropsExtensions<{
|
|
35
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
36
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
37
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/
|
|
35
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
36
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
37
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
38
38
|
}>;
|
|
39
39
|
export declare class SerializedDBRecord extends SerializedDBRecord_base {
|
|
40
40
|
}
|
|
41
41
|
export declare function makeSerialisedDBRecord(s: SchemaAny): MO.SchemaProperties<{
|
|
42
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, number, number, number, {}>, "required", import("@fp-ts/
|
|
43
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/
|
|
44
|
-
data: MO.Property<MO.SchemaAny, "required", import("@fp-ts/
|
|
42
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, number, number, number, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
43
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
44
|
+
data: MO.Property<MO.SchemaAny, "required", import("@fp-ts/core/Option").None, import("@fp-ts/core/Option").None>;
|
|
45
45
|
}>;
|
|
46
46
|
export interface CachedRecord<T> {
|
|
47
47
|
version: string;
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/shared.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
3
|
import * as MO from "@effect-app/schema";
|
|
6
4
|
class BaseError {
|
|
@@ -55,11 +53,11 @@ export function getRecordName(type, id) {
|
|
|
55
53
|
export function makeMap() {
|
|
56
54
|
const map = new Map();
|
|
57
55
|
return {
|
|
58
|
-
find: (k) =>
|
|
56
|
+
find: (k) => tsplus_module_2.sync(() => tsplus_module_1.fromNullable(map.get(k))),
|
|
59
57
|
[Symbol.iterator]: () => map[Symbol.iterator](),
|
|
60
|
-
set: (k, v) =>
|
|
58
|
+
set: (k, v) => tsplus_module_2.sync(() => {
|
|
61
59
|
map.set(k, v);
|
|
62
|
-
})
|
|
60
|
+
})
|
|
63
61
|
};
|
|
64
62
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9zaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3hDLE1BQU0sU0FBUztJQUNiLFlBQW1CLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQUcsQ0FBQztDQUN2QztBQUNELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxTQUFTO0lBRTFELFlBQXFCLElBQVksRUFBVyxFQUFVLEVBQVcsS0FBWTtRQUMzRSxLQUFLLENBQUMsMkJBQTJCLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVyxPQUFFLEdBQUYsRUFBRSxDQUFRO1FBQVcsVUFBSyxHQUFMLEtBQUssQ0FBTztRQURwRSxjQUFTLEdBQUcsK0JBQStCLENBQUE7SUFHcEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHVCQUF3QixTQUFRLEtBQUs7SUFFaEQsWUFBcUIsSUFBWSxFQUFXLEVBQVU7UUFDcEQsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUQzQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVcsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUQ3QyxjQUFTLEdBQUcseUJBQXlCLENBQUE7SUFHOUMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFFNUMsWUFBcUIsS0FBWTtRQUMvQixLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtRQURoQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBRHhCLGNBQVMsR0FBRyxxQkFBcUIsQ0FBQTtJQUcxQyxDQUFDO0NBQ0Y7QUFNRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsRUFBRSxDQUFDLEtBQUssRUFBc0IsQ0FBQztJQUNyRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzNCLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUN6QixDQUFDO0NBQUc7QUFFTCw0QkFBNEI7QUFDNUIsTUFBTSxVQUFVLHNCQUFzQixDQUFDLENBQVk7SUFDakQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBQ2QsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUMzQixTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUNqQixDQUFDLENBQUE7QUFDSixDQUFDO0FBWUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZLEVBQUUsRUFBVTtJQUNuRCxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFBO0FBQzVCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVksRUFBRSxFQUFVO0lBQ3BELE9BQU8sR0FBRyxJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUE7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPO0lBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFXLENBQUE7SUFDOUIsT0FBTztRQUNMLElBQUksRUFBRSxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMscUJBQU8sR0FBRyxFQUFFLENBQUMsNkJBQWlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQy9DLEdBQUcsRUFBRSxDQUFDLENBQU8sRUFBRSxDQUFJLEVBQUUsRUFBRSxDQUNyQixxQkFBTyxHQUFHLEVBQUU7WUFDVixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNmLENBQUMsQ0FBQztLQUNpQixDQUFBO0FBQ3pCLENBQUMifQ==
|
|
@@ -17,7 +17,7 @@ export interface RecordCache extends ReturnType<typeof makeLiveRecordCache> {
|
|
|
17
17
|
}
|
|
18
18
|
export declare const RecordCache: import("@fp-ts/data/Context").Tag<RecordCache>;
|
|
19
19
|
export declare const LiveRecordCache: import("@effect/io/Layer").Layer<never, never, RecordCache>;
|
|
20
|
-
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<RecordCache | R | RDecode, InvalidStateError | E, import("@fp-ts/
|
|
20
|
+
export declare function find<R, RDecode, EDecode, E, EA, A>(tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>, decode: (d: EA) => Effect<RDecode, EDecode, A>, type: string): (id: string) => import("@effect/io/Effect").Effect<RecordCache | R | RDecode, InvalidStateError | E, import("@fp-ts/core/Option").Option<A>>;
|
|
21
21
|
export declare function storeDirectly<R, E, TKey extends string, A extends DBRecord<TKey>>(save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>, type: string): (record: A) => import("@effect/io/Effect").Effect<RecordCache | R, E, A>;
|
|
22
22
|
export declare function store<R, E, R2, E2, TKey extends string, EA, A extends DBRecord<TKey>>(tryRead: (id: string) => Effect<R, E, Opt<CachedRecord<EA>>>, save: (r: A, version: Opt<Version>) => Effect<R, E, CachedRecord<A>>, lock: (id: string) => Effect<R2 | Scope, E2, unknown>, type: string): (record: A) => import("@effect/io/Effect").Effect<RecordCache | R | Exclude<R2, import("@effect/io/Scope").Scope>, OptimisticLockException | InvalidStateError | E | E2, A>;
|
|
23
23
|
//# sourceMappingURL=simpledb.d.ts.map
|