@effect-app/infra 0.83.11 → 0.84.0-next.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/.cache/effect/095519d034161945a8d2616a506d3e7f35a9b3d868814f44c747429c60fc4e7f.content +2 -36
- package/.cache/effect/095519d034161945a8d2616a506d3e7f35a9b3d868814f44c747429c60fc4e7f.hash +1 -1
- package/.cache/effect/134218688132dfbdea493cbe1f26e73449f2759121df35ddd5448346b59c9a8d.content +6 -24
- package/.cache/effect/134218688132dfbdea493cbe1f26e73449f2759121df35ddd5448346b59c9a8d.hash +1 -1
- package/.cache/effect/14eb9da4ca6d22162888c7fdb7f39ab772d2a2dc6625db6031ecdb32ac89158f.content +40 -75
- package/.cache/effect/14eb9da4ca6d22162888c7fdb7f39ab772d2a2dc6625db6031ecdb32ac89158f.hash +1 -1
- package/.cache/effect/1bfd92946b11da4292f2ed99dc0e322462b60559148f9524abc20e26f70779e1.hash +1 -1
- package/.cache/effect/49c1bd9ec26e6df78b994d8df0bfe21b119803fa4aa46349bf4679fd0f1e7cda.content +1 -3
- package/.cache/effect/49c1bd9ec26e6df78b994d8df0bfe21b119803fa4aa46349bf4679fd0f1e7cda.hash +1 -1
- package/.cache/effect/58d4ccde8bd2db7829706db5bebd01b99900ee83f0f6a8413b53d17cbd69f510.content +1 -1
- package/.cache/effect/58d4ccde8bd2db7829706db5bebd01b99900ee83f0f6a8413b53d17cbd69f510.hash +1 -1
- package/.cache/effect/72a5a16a6b62b63cd71719c833091128207d7e6c823cb32293549b3dd58c451b.content +7 -15
- package/.cache/effect/72a5a16a6b62b63cd71719c833091128207d7e6c823cb32293549b3dd58c451b.hash +1 -1
- package/.cache/effect/7a9c33db6aedaf00093a132c1d4e48e9d043cef05e932b8a37da24d44e224248.hash +1 -1
- package/.cache/effect/8594f0f42afc0641b00e88998000cc47382a1d07da31f4a148f7976701ca22d5.hash +1 -1
- package/.cache/effect/c67d971634d2dc8118b40452b61c9a51620c35809be4a89982476aa80701d852.hash +1 -1
- package/.cache/effect/f38adf43700dab905456a534a0690eaf882cff2cd576c731f23d6d14a3c3d659.content +1 -5
- package/.cache/effect/f38adf43700dab905456a534a0690eaf882cff2cd576c731f23d6d14a3c3d659.hash +1 -1
- package/CHANGELOG.md +23 -0
- package/_cjs/_ext/Array.cjs +3 -2
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +11 -10
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +3 -2
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.test.cjs +2 -2
- package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +4 -3
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +24 -22
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -20
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +1 -1
- package/_cjs/api/routing.cjs +55 -53
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +3 -2
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +5 -4
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -10
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +8 -8
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +2 -1
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/logger/jsonLogger.cjs +4 -4
- package/_cjs/logger/jsonLogger.cjs.map +1 -1
- package/_cjs/logger/logFmtLogger.cjs +5 -5
- package/_cjs/logger/logFmtLogger.cjs.map +1 -1
- package/_cjs/logger/shared.cjs +4 -4
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +8 -7
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +13 -11
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +5 -4
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +31 -29
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +7 -6
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +18 -17
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +16 -15
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +17 -16
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +35 -33
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +11 -10
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +49 -46
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +19 -18
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +27 -25
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +16 -14
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +6 -5
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +13 -13
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +19 -17
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +9 -8
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +11 -9
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +20 -18
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +11 -10
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +5 -5
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +18 -17
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/api/authorization.jwt.ts +1 -1
- package/_src/api/defaultErrorHandler.ts +2 -2
- package/_src/api/express/routing.ts.bak +8 -8
- package/_src/api/express/schema/requestHandler.ts +12 -12
- package/_src/api/express/schema/routing.ts +11 -11
- package/_src/api/routing.ts +14 -13
- package/_src/errorReporter.ts +1 -1
- package/_src/services/Emailer/Sendgrid.ts +1 -1
- package/_src/services/Operations/live.ts +5 -5
- package/_src/services/QueueMaker/errors.ts +1 -1
- package/_src/services/QueueMaker/memQueue.ts +2 -2
- package/_src/services/QueueMaker/sbqueue.ts +1 -1
- package/_src/services/Repository.ts +9 -9
- package/_src/services/RepositoryBase.ts +8 -6
- package/_src/services/RequestContextContainer.ts +1 -1
- package/_src/services/Store/Cosmos.ts +17 -12
- package/_src/services/Store/Disk.ts +4 -4
- package/_src/services/Store/Memory.ts +4 -4
- package/_src/services/Store/Redis.ts +1 -1
- package/_src/services/Store/index.test.ts.bak +5 -5
- package/_src/services/Store/index.ts +1 -1
- package/_src/services/Store/utils.ts +16 -16
- package/_src/services/simpledb/diskdb.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/_src/services/simpledb/redisdb.ts +1 -1
- package/_src/services/simpledb/shared.ts +1 -1
- package/_src/services/simpledb/simpledb.ts +3 -3
- package/dist/RequestContext.d.ts +20 -20
- package/dist/_ext/Array.js +4 -3
- package/dist/api/defaultErrorHandler.js +12 -11
- package/dist/api/express/makeJsonSchema.js +4 -3
- package/dist/api/express/makeOpenApiSpecs.js +5 -4
- package/dist/api/express/schema/requestHandler.d.ts +1 -1
- package/dist/api/express/schema/requestHandler.js +35 -33
- package/dist/api/express/schema/routing.d.ts +1 -1
- package/dist/api/express/schema/routing.js +23 -21
- package/dist/api/reportError.d.ts +3 -3
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +1 -1
- package/dist/api/routing.d.ts +2 -2
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +59 -57
- package/dist/api/setupRequest.d.ts +1 -1
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +4 -3
- package/dist/api/writeDocs.js +6 -5
- package/dist/errorReporter.js +12 -11
- package/dist/errors.d.ts +7 -7
- package/dist/errors.js +9 -9
- package/dist/filter.d.ts.map +1 -1
- package/dist/instrument.js +3 -2
- package/dist/logger/jsonLogger.d.ts +2 -2
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +5 -5
- package/dist/logger/logFmtLogger.d.ts +2 -2
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +6 -6
- package/dist/logger/shared.js +5 -5
- package/dist/rateLimit.d.ts +2 -2
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +9 -8
- package/dist/services/Emailer/Sendgrid.d.ts +1 -1
- package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/services/Emailer/Sendgrid.js +16 -14
- package/dist/services/Emailer/fake.d.ts +1 -1
- package/dist/services/Emailer/fake.d.ts.map +1 -1
- package/dist/services/Emailer/fake.js +6 -5
- package/dist/services/Emailer/service.d.ts +2 -2
- package/dist/services/Operations/live.d.ts +1 -1
- package/dist/services/Operations/live.d.ts.map +1 -1
- package/dist/services/Operations/live.js +39 -37
- package/dist/services/Operations/service.d.ts +7 -7
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Operations/service.js +1 -1
- package/dist/services/QueueMaker/errors.d.ts +4 -4
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +7 -6
- package/dist/services/QueueMaker/memQueue.d.ts +1 -1
- package/dist/services/QueueMaker/memQueue.js +17 -16
- package/dist/services/QueueMaker/sbqueue.d.ts +2 -2
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +16 -15
- package/dist/services/Repository.d.ts +8 -8
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +18 -17
- package/dist/services/RepositoryBase.d.ts +24 -75
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +37 -35
- package/dist/services/RequestContextContainer.d.ts +4 -4
- package/dist/services/RequestContextContainer.d.ts.map +1 -1
- package/dist/services/RequestContextContainer.js +14 -13
- package/dist/services/Store/Cosmos.d.ts +2 -2
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +54 -51
- package/dist/services/Store/Disk.d.ts +2 -2
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +20 -19
- package/dist/services/Store/Memory.d.ts +3 -3
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +28 -26
- package/dist/services/Store/Redis.d.ts +2 -2
- package/dist/services/Store/Redis.d.ts.map +1 -1
- package/dist/services/Store/Redis.js +17 -15
- package/dist/services/Store/index.d.ts +1 -1
- package/dist/services/Store/index.d.ts.map +1 -1
- package/dist/services/Store/index.js +7 -6
- package/dist/services/Store/service.d.ts +5 -5
- package/dist/services/Store/service.js +2 -2
- package/dist/services/Store/utils.d.ts +3 -3
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +21 -21
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/cosmosdb.d.ts.map +1 -1
- package/dist/services/simpledb/cosmosdb.js +19 -17
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.d.ts.map +1 -1
- package/dist/services/simpledb/diskdb.js +10 -9
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.d.ts.map +1 -1
- package/dist/services/simpledb/memdb.js +13 -11
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.d.ts.map +1 -1
- package/dist/services/simpledb/mongodb.js +16 -14
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.d.ts.map +1 -1
- package/dist/services/simpledb/redisdb.js +12 -11
- package/dist/services/simpledb/shared.d.ts +13 -13
- package/dist/services/simpledb/shared.js +6 -6
- package/dist/services/simpledb/simpledb.d.ts +4 -4
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +16 -15
- package/package.json +5 -5
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "effect/Data";
|
|
2
2
|
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "effect/
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
3
|
+
import * as tsplus_module_3 from "effect/Effect.impl";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Option.impl";
|
|
5
|
+
import * as tsplus_module_5 from "effect/Option";
|
|
6
|
+
import * as tsplus_module_6 from "effect/ReadonlyArray.int";
|
|
5
7
|
import { typedKeysOf } from "@effect-app/core/utils";
|
|
6
8
|
import * as Cosmos from "@effect-app/infra-adapters/cosmos-client";
|
|
7
9
|
import { OptimisticLockException } from "./shared.js";
|
|
8
10
|
import * as simpledb from "./simpledb.js";
|
|
9
|
-
class CosmosDbOperationError extends tsplus_module_1.TaggedError("CosmosDbOperationError") {
|
|
11
|
+
class CosmosDbOperationError extends tsplus_module_1.Data.TaggedError("CosmosDbOperationError") {
|
|
10
12
|
constructor(message) {
|
|
11
13
|
super({ message });
|
|
12
14
|
}
|
|
13
15
|
}
|
|
14
|
-
const setup = (type, indexingPolicy) =>
|
|
16
|
+
const setup = (type, indexingPolicy) => tsplus_module_3.tap(Cosmos.CosmosClient, ({ db }) => tsplus_module_2.Effect.tryPromise(() => db
|
|
15
17
|
.containers
|
|
16
18
|
.create({ id: type, indexingPolicy })
|
|
17
19
|
.catch((err) => console.warn(err))));
|
|
@@ -21,18 +23,18 @@ export function createContext() {
|
|
|
21
23
|
return (type, encode, decode,
|
|
22
24
|
// schemaVersion: string,
|
|
23
25
|
indexes) => {
|
|
24
|
-
return
|
|
26
|
+
return tsplus_module_3.map(setup(type, indexes), () => ({
|
|
25
27
|
find: simpledb.find(find, decode, type),
|
|
26
28
|
findBy,
|
|
27
29
|
save: simpledb.storeDirectly(store, type)
|
|
28
30
|
}));
|
|
29
31
|
function find(id) {
|
|
30
|
-
return
|
|
31
|
-
.CosmosClient, ({ db }) => tsplus_module_2.tryPromise(() => db.container(type).item(id).read())), (i) =>
|
|
32
|
+
return tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.flatMap(Cosmos
|
|
33
|
+
.CosmosClient, ({ db }) => tsplus_module_2.Effect.tryPromise(() => db.container(type).item(id).read())), (i) => tsplus_module_5.Option.fromNullable(i.resource)), (_) => tsplus_module_4.map(_, ({ _etag, data }) => ({ version: _etag, data })));
|
|
32
34
|
}
|
|
33
35
|
function findBy(parameters) {
|
|
34
|
-
return
|
|
35
|
-
.CosmosClient, ({ db }) => tsplus_module_2.tryPromise(() => db
|
|
36
|
+
return tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.flatMap(Cosmos
|
|
37
|
+
.CosmosClient, ({ db }) => tsplus_module_2.Effect.tryPromise(() => db
|
|
36
38
|
.container(type)
|
|
37
39
|
.items
|
|
38
40
|
.query({
|
|
@@ -50,20 +52,20 @@ WHERE (
|
|
|
50
52
|
value: parameters[p]
|
|
51
53
|
}))
|
|
52
54
|
})
|
|
53
|
-
.fetchAll())), (x) =>
|
|
55
|
+
.fetchAll())), (x) => tsplus_module_6.head(x.resources)), (_) => tsplus_module_4.map(_, (_) => _.id));
|
|
54
56
|
}
|
|
55
57
|
function store(record, currentVersion) {
|
|
56
|
-
return tsplus_module_2.gen(function* ($) {
|
|
58
|
+
return tsplus_module_2.Effect.gen(function* ($) {
|
|
57
59
|
const version = "_etag"; // we get this from the etag anyway.
|
|
58
60
|
const { db } = yield* $(Cosmos.CosmosClient);
|
|
59
61
|
const data = yield* $(encode(record));
|
|
60
|
-
yield* $(
|
|
61
|
-
onNone: () =>
|
|
62
|
+
yield* $(tsplus_module_4.match(currentVersion, {
|
|
63
|
+
onNone: () => tsplus_module_3.orDie(tsplus_module_3.asUnit(tsplus_module_2.Effect.tryPromise(() => db.container(type).items.create({
|
|
62
64
|
id: record.id,
|
|
63
65
|
timestamp: new Date(),
|
|
64
66
|
data
|
|
65
67
|
})))),
|
|
66
|
-
onSome: (currentVersion) =>
|
|
68
|
+
onSome: (currentVersion) => tsplus_module_3.flatMap(tsplus_module_3.orDie(tsplus_module_2.Effect.tryPromise(() => db
|
|
67
69
|
.container(type)
|
|
68
70
|
.item(record.id)
|
|
69
71
|
.replace({
|
|
@@ -80,9 +82,9 @@ WHERE (
|
|
|
80
82
|
return new OptimisticLockException(type, record.id);
|
|
81
83
|
}
|
|
82
84
|
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
83
|
-
return tsplus_module_2.die(new CosmosDbOperationError("not able to update record: " + x.statusCode));
|
|
85
|
+
return tsplus_module_2.Effect.die(new CosmosDbOperationError("not able to update record: " + x.statusCode));
|
|
84
86
|
}
|
|
85
|
-
return tsplus_module_2.unit;
|
|
87
|
+
return tsplus_module_2.Effect.unit;
|
|
86
88
|
})
|
|
87
89
|
}));
|
|
88
90
|
return { version, data: record };
|
|
@@ -90,4 +92,4 @@ WHERE (
|
|
|
90
92
|
}
|
|
91
93
|
};
|
|
92
94
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL2Nvc21vc2RiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRCxPQUFPLEtBQUssTUFBTSxNQUFNLDBDQUEwQyxDQUFBO0FBRWxFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUd6QyxNQUFNLHNCQUF1QixTQUFRLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQXNCO0lBQ2xHLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7Q0FDRjtBQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLGNBQThCLEVBQUUsRUFBRSxDQUM3RCxvQkFBQSxNQUFNLENBQUMsWUFBWSxFQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQ2pDLGdCQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQ3JCLEVBQUU7S0FDQyxVQUFVO0tBQ1YsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztLQUNwQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDckMsQ0FDRixDQUFBO0FBQ0gsdURBQXVEO0FBQ3ZELGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDO0lBQzlDLHlCQUF5QjtJQUN6QixPQUF1QixFQUN2QixFQUFFO1FBQ0YsT0FBTyxvQkFBQSxLQUFL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
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect } from "effect/Effect";
|
|
2
|
-
import { Option } from "
|
|
2
|
+
import { Option } from "effect/Option";
|
|
3
3
|
import type { DBRecord, Index } from "./shared.js";
|
|
4
4
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
5
5
|
import * as simpledb from "./simpledb.js";
|
|
6
|
-
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) =>
|
|
6
|
+
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<REncode, never, EA>, decode: (d: EA) => Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index, dir?: string) => {
|
|
7
7
|
find: (id: string) => import("effect/Effect").Effect<simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("effect/Option").Option<A>>;
|
|
8
8
|
findByIndex: (index: Index) => import("effect/Effect").Effect<never, never, import("effect/Option").Option<TKey & {}>>;
|
|
9
9
|
save: (record: A) => import("effect/Effect").Effect<simpledb.RecordCache | REncode, CouldNotAquireDbLockException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diskdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/diskdb.ts"],"names":[],"mappings":";;AAMA,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,
|
|
1
|
+
{"version":3,"file":"diskdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/diskdb.ts"],"names":[],"mappings":";;AAMA,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,KAAK,OAAO,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,cACrC,EAAE,KAAK,OAAO,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,iBAC/B,MAAM,oBACH,CAAC,KAAK,KAAK;;yBAkGN,KAAK;;EA+B/B;AAQD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,QASrC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/Option";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "
|
|
1
|
+
import * as tsplus_module_1 from "effect/Option.impl";
|
|
2
|
+
import * as tsplus_module_2 from "effect/Effect.impl";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Option";
|
|
4
5
|
import { flow, pipe } from "@effect-app/core/Function";
|
|
5
6
|
import fs from "fs";
|
|
6
7
|
import * as PLF from "proper-lockfile";
|
|
@@ -27,7 +28,7 @@ export function createContext() {
|
|
|
27
28
|
const idx = makeIndexKey(record);
|
|
28
29
|
return tsplus_module_1.isSome(currentVersion)
|
|
29
30
|
? 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
|
-
?
|
|
31
|
+
? tsplus_module_3.Effect.fail(() => new Error("Combination already exists, abort"))
|
|
31
32
|
: 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
33
|
: tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), (serialised) => fu.writeTextFile(getFilename(type, record.id), serialised)), () => ({ version, data: record }));
|
|
33
34
|
}
|
|
@@ -57,7 +58,7 @@ export function createContext() {
|
|
|
57
58
|
}
|
|
58
59
|
function readFile(filePath) {
|
|
59
60
|
return tsplus_module_2.catchAll(fu
|
|
60
|
-
.readTextFile(filePath), (err) =>
|
|
61
|
+
.readTextFile(filePath), (err) => tsplus_module_3.Effect.die(new ConnectionException(err)));
|
|
61
62
|
}
|
|
62
63
|
function find(type) {
|
|
63
64
|
return (id) => {
|
|
@@ -65,7 +66,7 @@ export function createContext() {
|
|
|
65
66
|
};
|
|
66
67
|
}
|
|
67
68
|
function getIdx(index) {
|
|
68
|
-
return tsplus_module_2.map(readIndex(index), (idx) =>
|
|
69
|
+
return tsplus_module_2.map(readIndex(index), (idx) => tsplus_module_4.Option.fromNullable(idx[index.key]));
|
|
69
70
|
}
|
|
70
71
|
function readIndex(index) {
|
|
71
72
|
return tsplus_module_2.map(tryRead(getIdxName(type, index.doc)), (_) => tsplus_module_1.match(_, { onNone: () => ({}), onSome: (x) => JSON.parse(x) }));
|
|
@@ -75,7 +76,7 @@ export function createContext() {
|
|
|
75
76
|
}
|
|
76
77
|
function tryRead(filePath) {
|
|
77
78
|
return tsplus_module_2.flatMap(fu
|
|
78
|
-
.fileExists(filePath), (exists) => !exists ?
|
|
79
|
+
.fileExists(filePath), (exists) => !exists ? tsplus_module_3.Effect.sync(() => tsplus_module_4.Option.none()) : tsplus_module_2.map(readFile(filePath), tsplus_module_4.Option.some));
|
|
79
80
|
}
|
|
80
81
|
function getFilename(type, id) {
|
|
81
82
|
return `${dir}/v${schemaVersion}.${getRecordName(type, id)}.json`;
|
|
@@ -86,7 +87,7 @@ export function createContext() {
|
|
|
86
87
|
};
|
|
87
88
|
}
|
|
88
89
|
function lockFile(fileName) {
|
|
89
|
-
return
|
|
90
|
+
return tsplus_module_3.Effect.tryPromise(() => PLF.lock(fileName).then(flow(tsplus_module_3.Effect.tryPromise, (_) => tsplus_module_2.orDie(_))));
|
|
90
91
|
}
|
|
91
92
|
// TODO: ugh.
|
|
92
93
|
let initialised = false;
|
|
@@ -99,4 +100,4 @@ export function initialise(dir) {
|
|
|
99
100
|
}
|
|
100
101
|
initialised = true;
|
|
101
102
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlza2RiLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9zaW1wbGVkYi9kaXNrZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDdEQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sS0FBSyxHQUFHLE1BQU0saUJBQWlCLENBQUE7QUFFdEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQy9DLE9BQU8sS0FBSyxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFFekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFHekMsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QyxFQUM5QyxhQUFxQixFQUNyQixZQUE2QixFQUM3QixHQUFHLEdBQUcsV0FBVyxFQUNqQixFQUFFO1FBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2YsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFBO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDNUMsQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQztZ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
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Effect } from "effect/Effect";
|
|
2
2
|
import { Equivalence } from "effect/Equivalence";
|
|
3
|
-
import { Option } from "
|
|
3
|
+
import { Option } from "effect/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
|
-
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) =>
|
|
7
|
+
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<REncode, never, EA>, decode: (d: EA) => Effect<RDecode, EDecode, A>) => {
|
|
8
8
|
find: (id: string) => import("effect/Effect").Effect<simpledb.RecordCache | RDecode, MO.CondemnException | simpledb.InvalidStateError, import("effect/Option").Option<A>>;
|
|
9
|
-
findBy: <V extends Partial<A>>(keys: V, eq:
|
|
9
|
+
findBy: <V extends Partial<A>>(keys: V, eq: Equivalence<V>) => import("effect/Effect").Effect<RDecode, MO.CondemnException, import("effect/Option").Option<A & {}>>;
|
|
10
10
|
save: (record: A) => import("effect/Effect").Effect<simpledb.RecordCache | REncode, MO.CondemnException | import("./shared.js").OptimisticLockException | simpledb.InvalidStateError, A>;
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=memdb.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/memdb.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AASzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,
|
|
1
|
+
{"version":3,"file":"memdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/memdb.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AASzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,KAAK,OAAO,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,cACrC,EAAE,KAAK,OAAO,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;;yCAmBF,CAAC,MAAM,YAAY,CAAC,CAAC;;EAwCpE"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/Option";
|
|
2
|
-
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/core/
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
1
|
+
import * as tsplus_module_1 from "effect/Option.impl";
|
|
2
|
+
import * as tsplus_module_2 from "effect/Effect.impl";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/EffectX";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Option";
|
|
5
|
+
import * as tsplus_module_5 from "effect/Effect";
|
|
6
|
+
import * as tsplus_module_6 from "effect/Exit.int";
|
|
5
7
|
import { flow } from "@effect-app/core/Function";
|
|
6
8
|
import * as MO from "@effect-app/schema";
|
|
7
9
|
import { getRecordName, makeMap, SerializedDBRecord } from "./shared.js";
|
|
@@ -26,20 +28,20 @@ export function createContext() {
|
|
|
26
28
|
}
|
|
27
29
|
function findBy(keys, eq) {
|
|
28
30
|
// Naive implementation, fine for in memory testing purposes.
|
|
29
|
-
return tsplus_module_2.map(
|
|
31
|
+
return tsplus_module_2.map(tsplus_module_5.Effect.gen(function* ($) {
|
|
30
32
|
for (const [, value] of storage) {
|
|
31
33
|
const sdb_ = JSON.parse(value);
|
|
32
34
|
const sdb = yield* $(parseSDB(sdb_));
|
|
33
35
|
const cr = { data: JSON.parse(sdb.data), version: sdb.version };
|
|
34
36
|
const r = yield* $(tsplus_module_2.exit(tsplus_module_2.flatMap(decode(cr.data), (d) => eq(keys, d)
|
|
35
|
-
?
|
|
36
|
-
:
|
|
37
|
-
if (
|
|
37
|
+
? tsplus_module_5.Effect.sync(() => d)
|
|
38
|
+
: tsplus_module_5.Effect.fail("not equals"))));
|
|
39
|
+
if (tsplus_module_6.isSuccess(r)) {
|
|
38
40
|
return r.value;
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
return null;
|
|
42
|
-
}),
|
|
44
|
+
}), tsplus_module_4.Option.fromNullable);
|
|
43
45
|
}
|
|
44
46
|
function store(record, currentVersion) {
|
|
45
47
|
const version = tsplus_module_1.getOrElse(tsplus_module_1.map(currentVersion, (cv) => (parseInt(cv) + 1).toString()), () => "1");
|
|
@@ -49,6 +51,6 @@ export function createContext() {
|
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
function bogusLock() {
|
|
52
|
-
return tsplus_module_2.acquireRelease(
|
|
54
|
+
return tsplus_module_2.acquireRelease(tsplus_module_5.Effect.unit, () => tsplus_module_5.Effect.unit);
|
|
53
55
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL3NpbXBsZWRiL21lbWRiLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNoRCxPQUFPLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBR3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3hFLE9BQU8sS0FBSyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBR3pDLDREQUE0RDtBQUM1RCwyQkFBMkI7QUFDM0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFrQixDQUFBO0FBRXpDLE1BQU0sUUFBUSxHQUFnQyxFQUFFLENBQUMsV0FBVyxDQUEzQyxrQkFBa0IsQ0FBQyxNQUFNLENBQWtCLENBQUE7QUFFNUQsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QyxFQUM5QyxFQUFFO1FBQ0YsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3ZDLE1BQU07WUFDTixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUM7U0FDbkQsQ0FBQTtRQUVELFNBQVMsSUFBSSxDQUFDLEVBQVU7WUFDdEIsT0FBTywwQkFBQSw4QkFBQSxvQkFBQSxPQUFPO2lCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ3pCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBQSxDQUFDLEVBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxD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
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Effect } from "effect/Effect";
|
|
2
|
-
import { Option } from "
|
|
2
|
+
import { Option } from "effect/Option";
|
|
3
3
|
import { MongoClient } from "@effect-app/infra-adapters/mongo-client";
|
|
4
4
|
import type { IndexDescription } from "mongodb";
|
|
5
5
|
import type { DBRecord } from "./shared.js";
|
|
6
6
|
import { OptimisticLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
|
-
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) =>
|
|
8
|
+
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<REncode, never, EA>, decode: (d: EA) => Effect<RDecode, EDecode, A>, indexes: IndexDescription[]) => import("effect/Effect").Effect<MongoClient, unknown, {
|
|
9
9
|
find: (id: string) => import("effect/Effect").Effect<simpledb.RecordCache | RDecode | MongoClient, unknown, import("effect/Option").Option<A>>;
|
|
10
10
|
findBy: (keys: Record<string, string>) => import("effect/Effect").Effect<MongoClient, unknown, import("effect/Option").Option<TKey>>;
|
|
11
11
|
save: (record: A) => import("effect/Effect").Effect<simpledb.RecordCache | REncode | MongoClient, OptimisticLockException, A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/mongodb.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,SAAS,CAAA;AACjE,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAazC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/mongodb.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,SAAS,CAAA;AACjE,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAazC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,KAAK,OAAO,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,cACrC,EAAE,KAAK,OAAO,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,WAErC,gBAAgB,EAAE;;mBAqBL,OAAO,MAAM,EAAE,MAAM,CAAC;;GA6D/C"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "effect/
|
|
3
|
-
import * as tsplus_module_3 from "
|
|
2
|
+
import * as tsplus_module_2 from "effect/Effect.impl";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Option";
|
|
4
|
+
import * as tsplus_module_4 from "@effect-app/core/EffectX";
|
|
5
|
+
import * as tsplus_module_5 from "effect/Option.impl";
|
|
4
6
|
import { MongoClient } from "@effect-app/infra-adapters/mongo-client";
|
|
5
7
|
import { OptimisticLockException } from "./shared.js";
|
|
6
8
|
import * as simpledb from "./simpledb.js";
|
|
@@ -8,36 +10,36 @@ import * as simpledb from "./simpledb.js";
|
|
|
8
10
|
// prev[cur] = 1
|
|
9
11
|
// return prev
|
|
10
12
|
// }, {} as Record<string, number>)
|
|
11
|
-
const setup = (type, indexes) =>
|
|
13
|
+
const setup = (type, indexes) => tsplus_module_2.flatMap(tsplus_module_2.tap(MongoClient, ({ db }) => tsplus_module_1.Effect.tryPromise(() => db.createCollection(type).catch((err) => console.warn(err)))), ({ db }) => tsplus_module_1.Effect.tryPromise(() => db.collection(type).createIndexes(indexes)));
|
|
12
14
|
export function createContext() {
|
|
13
15
|
return (type, encode, decode,
|
|
14
16
|
// schemaVersion: string,
|
|
15
17
|
indexes) => {
|
|
16
|
-
return
|
|
18
|
+
return tsplus_module_2.map(setup(type, indexes), () => ({
|
|
17
19
|
find: simpledb.find(find, decode, type),
|
|
18
20
|
findBy,
|
|
19
21
|
save: simpledb.storeDirectly(store, type)
|
|
20
22
|
}));
|
|
21
23
|
function find(id) {
|
|
22
|
-
return
|
|
24
|
+
return tsplus_module_4.mapOption(tsplus_module_2.map(tsplus_module_2.flatMap(MongoClient, ({ db }) => tsplus_module_1.Effect.tryPromise(() => db
|
|
23
25
|
.collection(type)
|
|
24
|
-
.findOne({ _id: { equals: id } }))),
|
|
26
|
+
.findOne({ _id: { equals: id } }))), tsplus_module_3.Option.fromNullable), ({ data, version }) => ({ version, data }));
|
|
25
27
|
}
|
|
26
28
|
function findBy(keys) {
|
|
27
|
-
return
|
|
29
|
+
return tsplus_module_4.mapOption(tsplus_module_2.map(tsplus_module_2.flatMap(MongoClient, ({ db }) => tsplus_module_1.Effect.tryPromise(() => db.collection(type).findOne(keys, { projection: { _id: 1 } }))), tsplus_module_3.Option.fromNullable), ({ _id }) => _id);
|
|
28
30
|
}
|
|
29
31
|
function store(record, currentVersion) {
|
|
30
|
-
return tsplus_module_1.gen(function* ($) {
|
|
31
|
-
const version =
|
|
32
|
+
return tsplus_module_1.Effect.gen(function* ($) {
|
|
33
|
+
const version = tsplus_module_5.getOrElse(tsplus_module_5.map(currentVersion, (cv) => (parseInt(cv) + 1).toString()), () => "1");
|
|
32
34
|
const { db } = yield* $(MongoClient);
|
|
33
35
|
const data = yield* $(encode(record));
|
|
34
|
-
yield* $(
|
|
35
|
-
onNone: () =>
|
|
36
|
+
yield* $(tsplus_module_5.match(currentVersion, {
|
|
37
|
+
onNone: () => tsplus_module_2.orDie(tsplus_module_2.asUnit(tsplus_module_1.Effect.tryPromise(() => db
|
|
36
38
|
.collection(type)
|
|
37
39
|
.insertOne({ _id: record.id, version, timestamp: new Date(), data }, {
|
|
38
40
|
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
39
41
|
})))),
|
|
40
|
-
onSome: (currentVersion) =>
|
|
42
|
+
onSome: (currentVersion) => tsplus_module_2.flatMap(tsplus_module_2.orDie(tsplus_module_1.Effect.tryPromise(() => db.collection(type).replaceOne({ _id: record.id, version: currentVersion }, {
|
|
41
43
|
version,
|
|
42
44
|
timestamp: new Date(),
|
|
43
45
|
data
|
|
@@ -45,7 +47,7 @@ export function createContext() {
|
|
|
45
47
|
if (!x.modifiedCount) {
|
|
46
48
|
return new OptimisticLockException(type, record.id);
|
|
47
49
|
}
|
|
48
|
-
return tsplus_module_1.unit;
|
|
50
|
+
return tsplus_module_1.Effect.unit;
|
|
49
51
|
})
|
|
50
52
|
}));
|
|
51
53
|
return { version, data: record };
|
|
@@ -53,4 +55,4 @@ export function createContext() {
|
|
|
53
55
|
}
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29kYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvbW9uZ29kYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUdyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckQsT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFHekMsd0dBQXdHO0FBQ3hHLGtCQUFrQjtBQUNsQixnQkFBZ0I7QUFDaEIsbUNBQW1DO0FBRW5DLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLE9BQTJCLEVBQUUsRUFBRSxDQUMxRCx3QkFBQSxvQkFBQSxXQUFXLEVBQ0osQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBQSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQzdGLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFN0YsTUFBTSxVQUFVLGFBQWE7SUFDM0IsT0FBTyxDQUNMLElBQVksRUFDWixNQUFpRCxFQUNqRCxNQUE4QztJQUM5Qyx5QkFBeUI7SUFDekIsT0FBMkIsRUFDM0IsRUFBRTtRQUNGLE9BQU8sb0JBQUEsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBSyxHQUFHLEVBQUUsQ0FBQyxD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
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { Effect } from "effect/Effect";
|
|
2
|
-
import { Option } from "
|
|
2
|
+
import { Option } from "effect/Option";
|
|
3
3
|
import { RedisClient } from "@effect-app/infra-adapters/redis-client";
|
|
4
4
|
import * as MO from "@effect-app/schema";
|
|
5
5
|
import type { DBRecord, Index } from "./shared.js";
|
|
6
6
|
import { CouldNotAquireDbLockException } from "./shared.js";
|
|
7
7
|
import * as simpledb from "./simpledb.js";
|
|
8
|
-
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) =>
|
|
8
|
+
export declare function createContext<TKey extends string, EA, A extends DBRecord<TKey>>(): <REncode, RDecode, EDecode>(type: string, encode: (record: A) => Effect<REncode, never, EA>, decode: (d: EA) => Effect<RDecode, EDecode, A>, schemaVersion: string, makeIndexKey: (r: A) => Index) => {
|
|
9
9
|
find: (id: string) => import("effect/Effect").Effect<RedisClient | simpledb.RecordCache | RDecode, simpledb.InvalidStateError, import("effect/Option").Option<A>>;
|
|
10
10
|
findByIndex: (index: Index) => import("effect/Effect").Effect<RedisClient, import("@effect-app/infra-adapters/redis-client").ConnectionException, import("effect/Option").Option<TKey>>;
|
|
11
11
|
save: (record: A) => import("effect/Effect").Effect<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<MO.ToProps<{
|
|
14
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
15
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
16
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
14
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
15
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
16
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
17
17
|
}>>> & MO.PropsExtensions<MO.ToProps<{
|
|
18
|
-
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
19
|
-
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
20
|
-
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option").None<any>, import("effect/Option").None<any>>;
|
|
18
|
+
version: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
19
|
+
timestamp: MO.Property<MO.SchemaDefaultSchema<unknown, Date, Date, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
20
|
+
data: MO.Property<MO.SchemaDefaultSchema<unknown, string, string, string, {}>, "required", import("effect/Option.impl").None<any>, import("effect/Option.impl").None<any>>;
|
|
21
21
|
}>>;
|
|
22
22
|
export declare class RedisSerializedDBRecord extends RedisSerializedDBRecord_base {
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/redisdb.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,
|
|
1
|
+
{"version":3,"file":"redisdb.d.ts","sourceRoot":"","sources":["../../../_src/services/simpledb/redisdb.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAExC,OAAO,KAAK,EAAgB,QAAQ,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAuB,6BAA6B,EAA+B,MAAM,aAAa,CAAA;AAC7G,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAIzC,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,uCAErE,MAAM,mBACK,CAAC,KAAK,OAAO,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,cACrC,EAAE,KAAK,OAAO,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,iBAC/B,MAAM,oBACH,CAAC,KAAK,KAAK;;yBAkFN,KAAK;;EAwF/B;;;;;;;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAI3C;CAAG"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "@effect-app/core/
|
|
3
|
-
import * as tsplus_module_3 from "effect/Option";
|
|
1
|
+
import * as tsplus_module_1 from "effect/Effect.impl";
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/core/EffectX";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Option.impl";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Effect";
|
|
4
5
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
6
|
import { flow, pipe } from "@effect-app/core/Function";
|
|
6
7
|
import { RedisClient } from "@effect-app/infra-adapters/redis-client";
|
|
@@ -25,7 +26,7 @@ export function createContext() {
|
|
|
25
26
|
function store(record, currentVersion) {
|
|
26
27
|
const version = tsplus_module_3.getOrElse(tsplus_module_3.map(currentVersion, (cv) => (parseInt(cv) + 1).toString()), () => "1");
|
|
27
28
|
return tsplus_module_3.match(currentVersion, {
|
|
28
|
-
onNone: () => 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.zipRightOption(getIndex(record),
|
|
29
|
+
onNone: () => 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.zipRightOption(getIndex(record), tsplus_module_4.Effect.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
29
30
|
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
30
31
|
, (data) => hmSetRec(getKey(record.id), {
|
|
31
32
|
version,
|
|
@@ -60,22 +61,22 @@ export function createContext() {
|
|
|
60
61
|
function lockRedisIdx(index) {
|
|
61
62
|
const lockKey = getIdxLockKey(index);
|
|
62
63
|
// acquire
|
|
63
|
-
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RedisClient, ({ lock }) =>
|
|
64
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RedisClient, ({ lock }) => tsplus_module_4.Effect.tryPromise(() => lock.lock(lockKey, ttl))), {
|
|
64
65
|
onFailure: (err) => new CouldNotAquireDbLockException(type, lockKey, err),
|
|
65
66
|
// release
|
|
66
67
|
onSuccess: (lock) => ({
|
|
67
|
-
release: tsplus_module_1.orDie(
|
|
68
|
+
release: tsplus_module_1.orDie(tsplus_module_4.Effect.tryPromise(() => lock.unlock()))
|
|
68
69
|
})
|
|
69
70
|
}), (l) => l.release);
|
|
70
71
|
}
|
|
71
72
|
function lockRedisRecord(id) {
|
|
72
73
|
// acquire
|
|
73
|
-
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RedisClient, ({ lock }) =>
|
|
74
|
+
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(tsplus_module_1.flatMap(RedisClient, ({ lock }) => tsplus_module_4.Effect.tryPromise(() => lock.lock(getLockKey(id), ttl))), {
|
|
74
75
|
onFailure: (err) => new CouldNotAquireDbLockException(type, id, err),
|
|
75
76
|
// release
|
|
76
77
|
onSuccess: (lock) => ({
|
|
77
78
|
// TODO
|
|
78
|
-
release: tsplus_module_1.orDie(
|
|
79
|
+
release: tsplus_module_1.orDie(tsplus_module_4.Effect.tryPromise(() => lock.unlock()))
|
|
79
80
|
})
|
|
80
81
|
}), (l) => l.release);
|
|
81
82
|
}
|
|
@@ -94,10 +95,10 @@ export function createContext() {
|
|
|
94
95
|
};
|
|
95
96
|
function hmSetRec(key, val) {
|
|
96
97
|
const enc = RedisSerializedDBRecord.Encoder(val);
|
|
97
|
-
return tsplus_module_1.flatMap(RedisClient, ({ client }) => tsplus_module_1.uninterruptible(
|
|
98
|
+
return tsplus_module_1.flatMap(RedisClient, ({ client }) => tsplus_module_1.uninterruptible(tsplus_module_4.Effect.async((res) => {
|
|
98
99
|
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, (err) => err
|
|
99
100
|
? res(new ConnectionException(err))
|
|
100
|
-
: res(
|
|
101
|
+
: res(tsplus_module_4.Effect.sync(() => void 0)));
|
|
101
102
|
})));
|
|
102
103
|
}
|
|
103
104
|
}
|
|
@@ -107,4 +108,4 @@ export class RedisSerializedDBRecord extends MO.Model()({
|
|
|
107
108
|
data: MO.prop(MO.string)
|
|
108
109
|
}) {
|
|
109
110
|
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXNkYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvc2ltcGxlZGIvcmVkaXNkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsdURBQXVEO0FBRXZELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFHeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxLQUFLLFFBQVEsTUFBTSxlQUFlLENBQUE7QUFFekMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQTtBQUVyQixNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLENBQ0wsSUFBWSxFQUNaLE1BQWlELEVBQ2pELE1BQThDLEVBQzlDLGFBQXFCLEVBQ3JCLFlBQTZCLEVBQzdCLEVBQUU7UUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxvQkFBQSxDQUFDLEVBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDMUQsT0FBTztZQUNMLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3ZDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQztTQUN6RCxDQUFBO1FBRUQsU0FBUyxJQUFJLENBQUMsRUFBVTtZQUN0Qiw2QkFBTyw4QkFBQSx3QkFBQSxXQUFXLEVBQ1AsQ0FBQyxDQUFDLEVBQUUs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QzdELENBQUM7UUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFZO1lBQzdCLE9BQU8sSUFBSSxhQUFhLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQTtRQUM3RCxDQUFDO1FBQ0QsU0FBUyxhQUFhLENBQUMsS0FBWTtZQUNqQyxPQUFPLElBQUksYUFBYSxVQUFVLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNoRixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsU0FBUyxRQUFRLENBQUMsR0FBVyxFQUFFLEdBQTRCO1FBQ3pELE1BQU0sR0FBRyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxPQUFPLHdCQUFBLFdBQVcsRUFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQ0FDeEMsZ0JBQUEsTUFBTSxDQUNILEtBQUssQ0FBbUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQyxNQUFNLENBQUMsS0FBSyxDQUNWLEdBQUcsRUFDSCxTQUFTLEVBQ1QsR0FBRyxDQUFDLE9BQU8sRUFDWCxXQUFXLEVBQ1gsR0FBRyxDQUFDLFNBQVMsRUFDYixNQUFNLEVBQ04sR0FBRyxDQUFDLElBQUksRUFDUixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sR0FBRztnQkFDRCxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ3JDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FDYyxDQUNuQixDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsRUFBRSxDQUFDLEtBQUssRUFBMkIsQ0FBQztJQUMvRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzNCLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztDQUN6QixDQUFDO0NBQUcifQ==
|