@effect-app/infra 0.12.6 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/_cjs/api/codec.cjs +2 -4
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +18 -21
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +4 -4
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +5 -7
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +49 -49
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -22
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +6 -17
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +63 -63
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -4
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -8
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -13
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +1 -1
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/filter.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 +44 -29
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +56 -60
- 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/codeFilter.test.cjs.map +1 -1
- package/_cjs/services/Store/index.cjs +7 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +2 -4
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +16 -17
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +23 -25
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +20 -21
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +10 -10
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +18 -18
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +23 -23
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +4 -6
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +16 -15
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/api/defaultErrorHandler.ts +3 -5
- package/_src/api/routing.ts +12 -13
- package/_src/errors.ts +1 -1
- package/_src/filter/types/path/common.ts +9 -9
- package/_src/filter/types/path/eager.ts +12 -12
- package/_src/filter/types/utils.ts +1 -1
- package/_src/filter.ts +7 -11
- package/_src/services/Repository.ts +111 -50
- package/_src/services/Store/Cosmos.ts +14 -14
- package/_src/services/Store/codeFilter.test.ts +37 -30
- package/_src/services/Store/utils.ts +34 -34
- package/_src/services/simpledb/memdb.ts +1 -1
- package/_src/services/simpledb/simpledb.ts +5 -6
- package/dist/RequestContext.d.ts +12 -12
- package/dist/api/codec.js +3 -5
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +22 -23
- package/dist/api/express/makeJsonSchema.js +3 -5
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/requestHandler.d.ts +5 -5
- package/dist/api/express/schema/requestHandler.js +45 -45
- package/dist/api/express/schema/routing.js +21 -23
- package/dist/api/reportError.js +6 -18
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +60 -60
- package/dist/api/setupRequest.js +3 -5
- package/dist/api/writeDocs.js +7 -9
- package/dist/errorReporter.js +10 -12
- package/dist/errors.js +2 -2
- package/dist/filter/types/path/common.d.ts.map +1 -1
- package/dist/filter/types/path/eager.d.ts.map +1 -1
- package/dist/filter/types/utils.d.ts.map +1 -1
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.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 +26 -8
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +41 -25
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +66 -68
- 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/codeFilter.test.d.ts.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/services/Store/utils.js +45 -46
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/cosmosdb.js +23 -25
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.js +18 -18
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +12 -11
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.js +18 -18
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.js +21 -21
- package/dist/services/simpledb/shared.d.ts +9 -9
- package/dist/services/simpledb/shared.js +5 -7
- package/dist/services/simpledb/simpledb.d.ts +1 -1
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +19 -17
- package/package.json +11 -11
- package/.jest-cache/haste-map-369fa5ca2164cc35b19159bd76147276-e7a7ff05756c055cb63be97ba8537525-314902b6271c341511f7398a50469024 +0 -0
- package/.jest-cache/haste-map-369fa5ca2164cc35b19159bd76147276-e7a7ff05756c055cb63be97ba8537525-3f072cc7afa09b6adaead0527ab9df83 +0 -0
- package/.jest-cache/haste-map-369fa5ca2164cc35b19159bd76147276-e7a7ff05756c055cb63be97ba8537525-74c3c295c110fc861b6a4c673afc3e24 +0 -0
- package/.jest-cache/haste-map-369fa5ca2164cc35b19159bd76147276-e7a7ff05756c055cb63be97ba8537525-bf6dae8cb9ea9740ceb39aefaf12716c +0 -0
- package/.jest-cache/haste-map-369fa5ca2164cc35b19159bd76147276-e7a7ff05756c055cb63be97ba8537525-cf9d1486029526079a5f68f2041dea02 +0 -0
- package/.jest-cache/haste-map-4ca41cc04e60c616a19cbb483cbf487b-e2f1f4b6d87214e3c49442fed31f310c-b4710ed9fb3d0757c4bf23045c585670 +0 -0
- package/.jest-cache/haste-map-4ca41cc04e60c616a19cbb483cbf487b-e2f1f4b6d87214e3c49442fed31f310c-ee17e5395bb1b7b36a4e2e22a6ae1449 +0 -0
- package/.jest-cache/haste-map-7dc16d7fae8c072843ed1c69eae73100-a8a4225b317477b49bca31f54559afb3-c16136699bb7f463be85273162b447c3 +0 -0
- package/.jest-cache/haste-map-9aa1e395a82e108eb49698982c574272-e2f1f4b6d87214e3c49442fed31f310c-f7435f46fc41ac5a13d06a49cae9a650 +0 -0
- package/.jest-cache/haste-map-9d206b45d610536c9ec65eec263c6964-a8a4225b317477b49bca31f54559afb3-3510506a330b44f1ae629033aac8fbb3 +0 -0
- package/.jest-cache/haste-map-a00ab30d0d656f9d3990958a54b9ccfd-87603b0fc921b26b622a5859b4c92bed-17b550b450b18840c25861aa6e835f0c +0 -0
- package/.jest-cache/haste-map-a00ab30d0d656f9d3990958a54b9ccfd-87603b0fc921b26b622a5859b4c92bed-4dc31290b1efc98335eb4c89167d75c3 +0 -0
- package/.jest-cache/haste-map-ab843cb0ffbadfd0deea4adb182c7ecd-87603b0fc921b26b622a5859b4c92bed-997106edf4bbc31567a378146180e45e +0 -0
- package/.jest-cache/haste-map-ab843cb0ffbadfd0deea4adb182c7ecd-87603b0fc921b26b622a5859b4c92bed-f0cd25414f9ed16c446940ca3aa23c1b +0 -0
- package/.jest-cache/haste-map-cf17f2edf0e949eebfdfca561816457c-e7a7ff05756c055cb63be97ba8537525-2cac07d09e6384e2d37c49714edad0ba +0 -0
- package/.jest-cache/haste-map-cf17f2edf0e949eebfdfca561816457c-e7a7ff05756c055cb63be97ba8537525-d7967c2976c5feac7161c964f0aa442f +0 -0
- package/.jest-cache/haste-map-fb1a173276d25bbff02f815600059283-938122bdc1c8836874b6585d7acb2e99-f705929cca05ce95ceaa6d520b560ce8 +0 -0
|
@@ -4,10 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createContext = createContext;
|
|
7
|
-
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
8
7
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
9
|
-
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/
|
|
10
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/
|
|
8
|
+
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
9
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/core/ReadonlyArray"));
|
|
11
10
|
var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
12
11
|
var _utils = require("@effect-app/core/utils");
|
|
13
12
|
var Cosmos = _interopRequireWildcard(require("@effect-app/infra-adapters/cosmos-client"));
|
|
@@ -15,38 +14,37 @@ var _shared = require("./shared.cjs");
|
|
|
15
14
|
var simpledb = _interopRequireWildcard(require("./simpledb.cjs"));
|
|
16
15
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
16
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/cosmosdb.ts";
|
|
19
17
|
class CosmosDbOperationError {
|
|
20
18
|
constructor(message) {
|
|
21
19
|
this.message = message;
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
|
-
const setup = (type, indexingPolicy) =>
|
|
22
|
+
const setup = (type, indexingPolicy) => tsplus_module_1.tap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.containers.create({
|
|
25
23
|
id: type,
|
|
26
24
|
indexingPolicy
|
|
27
|
-
}).catch(err => console.warn(err))))
|
|
25
|
+
}).catch(err => console.warn(err))));
|
|
28
26
|
// TODO: Error if current indexingPolicy does not match
|
|
29
27
|
// Effect.flatMap((db) => Effect.tryPromise(() => db.container(type).(indexes)))
|
|
30
28
|
function createContext() {
|
|
31
29
|
return (type, encode, decode,
|
|
32
30
|
// schemaVersion: string,
|
|
33
31
|
indexes) => {
|
|
34
|
-
return
|
|
32
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
35
33
|
find: simpledb.find(find, decode, type),
|
|
36
34
|
findBy,
|
|
37
35
|
save: simpledb.storeDirectly(store, type)
|
|
38
|
-
}))
|
|
36
|
+
}));
|
|
39
37
|
function find(id) {
|
|
40
|
-
return
|
|
38
|
+
return tsplus_module_1.map(tsplus_module_1.map(tsplus_module_1.flatMap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.container(type).item(id).read())), i => tsplus_module_2.fromNullable(i.resource)), _ => tsplus_module_2.map(({
|
|
41
39
|
_etag,
|
|
42
40
|
data
|
|
43
41
|
}) => ({
|
|
44
42
|
version: _etag,
|
|
45
43
|
data
|
|
46
|
-
}))(_))
|
|
44
|
+
}))(_));
|
|
47
45
|
}
|
|
48
46
|
function findBy(parameters) {
|
|
49
|
-
return
|
|
47
|
+
return tsplus_module_1.map(tsplus_module_1.map(tsplus_module_1.flatMap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.container(type).items.query({
|
|
50
48
|
query: `
|
|
51
49
|
SELECT TOP 1 ${type}.id
|
|
52
50
|
FROM ${type} i
|
|
@@ -58,26 +56,18 @@ WHERE (
|
|
|
58
56
|
name: `@${p}`,
|
|
59
57
|
value: parameters[p]
|
|
60
58
|
}))
|
|
61
|
-
}).fetchAll()))))(
|
|
59
|
+
}).fetchAll())), x => tsplus_module_3.head(x.resources)), _ => tsplus_module_2.map(_ => _.id)(_));
|
|
62
60
|
}
|
|
63
61
|
function store(record, currentVersion) {
|
|
64
|
-
return
|
|
62
|
+
return tsplus_module_1.gen(function* ($) {
|
|
65
63
|
const version = "_etag"; // we get this from the etag anyway.
|
|
66
64
|
const db = yield* $(Cosmos.db);
|
|
67
65
|
const data = yield* $(encode(record));
|
|
68
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(
|
|
66
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.container(type).items.create({
|
|
69
67
|
id: record.id,
|
|
70
68
|
timestamp: new Date(),
|
|
71
69
|
data
|
|
72
|
-
}))))
|
|
73
|
-
if (x.statusCode === 412) {
|
|
74
|
-
return tracer_1.withCallTrace(fileName_1 + ":117:33")(tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id)));
|
|
75
|
-
}
|
|
76
|
-
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
77
|
-
return tracer_1.withCallTrace(fileName_1 + ":120:33")(tsplus_module_1.die(new CosmosDbOperationError("not able to update record: " + x.statusCode)));
|
|
78
|
-
}
|
|
79
|
-
return tsplus_module_4.unit;
|
|
80
|
-
}))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":98:22")(tsplus_module_1.tryPromise(() => db.container(type).item(record.id).replace({
|
|
70
|
+
})))), currentVersion => tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => db.container(type).item(record.id).replace({
|
|
81
71
|
id: record.id,
|
|
82
72
|
timestamp: new Date(),
|
|
83
73
|
data
|
|
@@ -86,12 +76,20 @@ WHERE (
|
|
|
86
76
|
type: "IfMatch",
|
|
87
77
|
condition: currentVersion
|
|
88
78
|
}
|
|
89
|
-
})))
|
|
79
|
+
}))), x => {
|
|
80
|
+
if (x.statusCode === 412) {
|
|
81
|
+
return tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id));
|
|
82
|
+
}
|
|
83
|
+
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
84
|
+
return tsplus_module_1.die(new CosmosDbOperationError("not able to update record: " + x.statusCode));
|
|
85
|
+
}
|
|
86
|
+
return tsplus_module_4.unit;
|
|
87
|
+
}))(currentVersion));
|
|
90
88
|
return {
|
|
91
89
|
version,
|
|
92
90
|
data: record
|
|
93
91
|
};
|
|
94
|
-
})
|
|
92
|
+
});
|
|
95
93
|
}
|
|
96
94
|
};
|
|
97
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmosdb.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"cosmosdb.cjs","mappings":"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","names":["CosmosDbOperationError","constructor","message","setup","type","indexingPolicy","tsplus_module_1","db","containers","create","id","catch","err","console","warn","createContext","encode","decode","indexes","find","simpledb","findBy","save","storeDirectly","store","container","item","read","i","tsplus_module_2","resource","_","_etag","data","version","parameters","items","query","map","k","join","p","name","value","fetchAll","x","tsplus_module_3","resources","record","currentVersion","$","Cosmos","timestamp","Date","replace","accessCondition","condition","statusCode","OptimisticLockException"],"sourceRoot":"","sources":["../../../_src/services/simpledb/cosmosdb.ts"],"sourcesContent":[null]}
|
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createContext = createContext;
|
|
7
7
|
exports.initialise = initialise;
|
|
8
|
-
var
|
|
9
|
-
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/data/Option"));
|
|
8
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
10
9
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
10
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Option"));
|
|
11
11
|
var _Function = require("@effect-app/core/Function");
|
|
12
12
|
var _fs = _interopRequireDefault(require("fs"));
|
|
13
13
|
var PLF = _interopRequireWildcard(require("proper-lockfile"));
|
|
@@ -18,7 +18,6 @@ var simpledb = _interopRequireWildcard(require("./simpledb.cjs"));
|
|
|
18
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/diskdb.ts";
|
|
22
21
|
function createContext() {
|
|
23
22
|
return (type, encode, decode, schemaVersion, makeIndexKey, dir = "./data.js") => {
|
|
24
23
|
initialise(dir);
|
|
@@ -34,22 +33,22 @@ function createContext() {
|
|
|
34
33
|
};
|
|
35
34
|
function store(record, currentVersion) {
|
|
36
35
|
const version = tsplus_module_1.getOrElse(() => "1")(tsplus_module_1.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
37
|
-
const getData = (0, _Function.flow)(encode, _ =>
|
|
36
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(_, data => (0, _utils.pretty)({
|
|
38
37
|
version,
|
|
39
38
|
timestamp: new Date(),
|
|
40
39
|
data
|
|
41
|
-
})))
|
|
40
|
+
})));
|
|
42
41
|
const idx = makeIndexKey(record);
|
|
43
|
-
return tsplus_module_1.isSome(currentVersion) ?
|
|
44
|
-
version,
|
|
45
|
-
data: record
|
|
46
|
-
})))(tsplus_module_2.scoped(tracer_1.withCallTrace(fileName_1 + ":46:12")(tsplus_module_2.zipRight(tsplus_module_2.orDie(tracer_1.withCallTrace(fileName_1 + ":47:28")(tsplus_module_2.flatMap(x => x[record.id] ? tracer_1.withCallTrace(fileName_1 + ":49:26")(tsplus_module_2.fail(() => new Error("Combination already exists, abort"))) : tracer_1.withCallTrace(fileName_1 + ":52:20")(tsplus_module_2.zipRight(writeIndex(idx, {
|
|
42
|
+
return tsplus_module_1.isSome(currentVersion) ? 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] ? tsplus_module_2.fail(() => new Error("Combination already exists, abort")) : tsplus_module_2.zipRight(tsplus_module_2.flatMap(getData(record), serialised => fu.writeTextFile(getFilename(type, record.id), serialised)), writeIndex(idx, {
|
|
47
43
|
...x,
|
|
48
44
|
[idx.key]: record.id
|
|
49
|
-
})))
|
|
45
|
+
})))))), () => ({
|
|
46
|
+
version,
|
|
47
|
+
data: record
|
|
48
|
+
})) : tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => fu.writeTextFile(getFilename(type, record.id), serialised)), () => ({
|
|
50
49
|
version,
|
|
51
50
|
data: record
|
|
52
|
-
}))
|
|
51
|
+
}));
|
|
53
52
|
}
|
|
54
53
|
function lockIndex(record) {
|
|
55
54
|
const index = makeIndexKey(record);
|
|
@@ -64,34 +63,34 @@ function createContext() {
|
|
|
64
63
|
return lockIndexOnDisk(type)(lockKey);
|
|
65
64
|
}
|
|
66
65
|
function lockRecordOnDisk(type) {
|
|
67
|
-
return id =>
|
|
66
|
+
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getFilename(type, id)), err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
68
67
|
release
|
|
69
|
-
}))
|
|
68
|
+
})), l => l.release);
|
|
70
69
|
}
|
|
71
70
|
function lockIndexOnDisk(type) {
|
|
72
|
-
return id =>
|
|
71
|
+
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getIdxName(type, id)), err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
73
72
|
release
|
|
74
|
-
}))
|
|
73
|
+
})), l => l.release);
|
|
75
74
|
}
|
|
76
75
|
function readFile(filePath) {
|
|
77
|
-
return
|
|
76
|
+
return tsplus_module_2.catchAll(fu.readTextFile(filePath), err => tsplus_module_2.die(new _shared.ConnectionException(err)));
|
|
78
77
|
}
|
|
79
78
|
function find(type) {
|
|
80
79
|
return id => {
|
|
81
|
-
return
|
|
80
|
+
return tsplus_module_2.map(tryRead(getFilename(type, id)), _ => tsplus_module_1.map(s => JSON.parse(s))(_));
|
|
82
81
|
};
|
|
83
82
|
}
|
|
84
83
|
function getIdx(index) {
|
|
85
|
-
return
|
|
84
|
+
return tsplus_module_2.map(readIndex(index), idx => tsplus_module_1.fromNullable(idx[index.key]));
|
|
86
85
|
}
|
|
87
86
|
function readIndex(index) {
|
|
88
|
-
return
|
|
87
|
+
return tsplus_module_2.map(tryRead(getIdxName(type, index.doc)), _ => tsplus_module_1.match(() => ({}), x => JSON.parse(x))(_));
|
|
89
88
|
}
|
|
90
89
|
function writeIndex(index, content) {
|
|
91
90
|
return (0, _Function.pipe)(JSON.stringify(content), serialised => fu.writeTextFile(getIdxName(type, index.doc), serialised));
|
|
92
91
|
}
|
|
93
92
|
function tryRead(filePath) {
|
|
94
|
-
return
|
|
93
|
+
return tsplus_module_2.flatMap(fu.fileExists(filePath), exists => !exists ? tsplus_module_2.sync(() => tsplus_module_3.none) : tsplus_module_2.map(readFile(filePath), tsplus_module_1.some));
|
|
95
94
|
}
|
|
96
95
|
function getFilename(type, id) {
|
|
97
96
|
return `${dir}/v${schemaVersion}.${(0, _shared.getRecordName)(type, id)}.json`;
|
|
@@ -102,7 +101,7 @@ function createContext() {
|
|
|
102
101
|
};
|
|
103
102
|
}
|
|
104
103
|
function lockFile(fileName) {
|
|
105
|
-
return
|
|
104
|
+
return tsplus_module_2.tryPromise(() => PLF.lock(fileName).then((0, _Function.flow)(tsplus_module_2.tryPromise, _ => tsplus_module_2.orDie(_))));
|
|
106
105
|
}
|
|
107
106
|
// TODO: ugh.
|
|
108
107
|
let initialised = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diskdb.cjs","mappings":";;;;;;;;;;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAyC;AAAA;AAAA
|
|
1
|
+
{"version":3,"file":"diskdb.cjs","mappings":"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","names":["createContext","type","encode","decode","schemaVersion","makeIndexKey","dir","initialise","globalLock","typeLockKey","getIdxName","fs","existsSync","writeFileSync","find","simpledb","findByIndex","getIdx","save","store","lockRecordOnDisk","record","currentVersion","version","tsplus_module_1","cv","parseInt","toString","getData","_","tsplus_module_2","data","timestamp","Date","idx","x","id","Error","serialised","fu","writeTextFile","getFilename","writeIndex","key","lockIndex","index","lockDiskIndex","lockKey","lockIndexOnDisk","err","CouldNotAquireDbLockException","release","l","readFile","filePath","readTextFile","ConnectionException","s","JSON","parse","readIndex","doc","content","stringify","tryRead","fileExists","exists","lockFile","fileName","PLF","lock","then","initialised","mkdirSync"],"sourceRoot":"","sources":["../../../_src/services/simpledb/diskdb.ts"],"sourcesContent":[null]}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createContext = createContext;
|
|
7
7
|
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
8
|
-
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/
|
|
8
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
9
9
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
10
10
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
11
|
var tsplus_module_4 = _interopRequireWildcard(require("@effect/io/Exit"));
|
|
@@ -28,7 +28,7 @@ function createContext() {
|
|
|
28
28
|
save: simpledb.store(find, store, bogusLock, type)
|
|
29
29
|
};
|
|
30
30
|
function find(id) {
|
|
31
|
-
return tracer_1.withCallTrace(fileName_1 + ":32:10")(tsplus_module_3.mapOpt(tracer_1.withCallTrace(fileName_1 + ":31:10")(tsplus_module_3.flatMapOpt(
|
|
31
|
+
return tracer_1.withCallTrace(fileName_1 + ":32:10")(tsplus_module_3.mapOpt(tracer_1.withCallTrace(fileName_1 + ":31:10")(tsplus_module_3.flatMapOpt(tsplus_module_2.map(storage.find((0, _shared.getRecordName)(type, id)), _ => tsplus_module_1.map(s => JSON.parse(s))(_)), parseSDB)), ({
|
|
32
32
|
data,
|
|
33
33
|
version
|
|
34
34
|
}) => ({
|
|
@@ -38,7 +38,7 @@ function createContext() {
|
|
|
38
38
|
}
|
|
39
39
|
function findBy(keys, eq) {
|
|
40
40
|
// Naive implementation, fine for in memory testing purposes.
|
|
41
|
-
return
|
|
41
|
+
return tsplus_module_2.map(tsplus_module_2.gen(function* ($) {
|
|
42
42
|
for (const [, value] of storage) {
|
|
43
43
|
const sdb_ = JSON.parse(value);
|
|
44
44
|
const sdb = yield* $(parseSDB(sdb_));
|
|
@@ -46,29 +46,29 @@ function createContext() {
|
|
|
46
46
|
data: JSON.parse(sdb.data),
|
|
47
47
|
version: sdb.version
|
|
48
48
|
};
|
|
49
|
-
const r = yield* $(tsplus_module_2.exit(
|
|
49
|
+
const r = yield* $(tsplus_module_2.exit(tsplus_module_2.flatMap(decode(cr.data), d => eq(keys, d) ? tsplus_module_2.sync(() => d) : tsplus_module_2.fail("not equals"))));
|
|
50
50
|
if (tsplus_module_4.isSuccess(r)) {
|
|
51
51
|
return r.value;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
return null;
|
|
55
|
-
}))
|
|
55
|
+
}), tsplus_module_1.fromNullable);
|
|
56
56
|
}
|
|
57
57
|
function store(record, currentVersion) {
|
|
58
58
|
const version = tsplus_module_1.getOrElse(() => "1")(tsplus_module_1.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
59
|
-
const getData = (0, _Function.flow)(encode, _ =>
|
|
59
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(tsplus_module_2.map(_, JSON.stringify), data => JSON.stringify({
|
|
60
60
|
version,
|
|
61
61
|
timestamp: new Date(),
|
|
62
62
|
data
|
|
63
|
-
})))
|
|
64
|
-
return
|
|
63
|
+
})));
|
|
64
|
+
return tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => storage.set((0, _shared.getRecordName)(type, record.id), serialised)), () => ({
|
|
65
65
|
version,
|
|
66
66
|
data: record
|
|
67
|
-
}))
|
|
67
|
+
}));
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
function bogusLock() {
|
|
72
|
-
return
|
|
72
|
+
return tsplus_module_2.acquireRelease(tsplus_module_3.unit, () => tsplus_module_3.unit);
|
|
73
73
|
}
|
|
74
74
|
//# sourceMappingURL=memdb.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memdb.cjs","mappings":";;;;;;;;;;;AAAA;AACA;AAGA;AACA;AAAyC;AAAA;;AAGzC;AACA;AACA,MAAMA,OAAO,GAAG,mBAAO,GAAkB;AAEzC,MAAMC,QAAQ,GAAgCC,EAAE,CAACC,WAAW,CAA3CC,0BAAkB,CAACC,MAAM,CAAkB;AAEtD,SAAUC,aAAa;EAC3B,OAAO,CACLC,IAAY,EACZC,MAAiD,EACjDC,MAA8C,KAC5C;IACF,OAAO;MACLC,IAAI,EAAEC,QAAQ,CAACD,IAAI,CAACA,IAAI,EAAED,MAAM,EAAEF,IAAI,CAAC;MACvCK,MAAM;MACNC,IAAI,EAAEF,QAAQ,CAACG,KAAK,CAACJ,IAAI,EAAEI,KAAK,EAAEC,SAAS,EAAER,IAAI;KAClD;IAED,SAASG,IAAI,CAACM,EAAU;MACtB,qDAAOC,
|
|
1
|
+
{"version":3,"file":"memdb.cjs","mappings":"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","names":["storage","parseSDB","MO","condemnFail","SerializedDBRecord","Parser","createContext","type","encode","decode","find","simpledb","findBy","save","store","bogusLock","id","tsplus_module_3","_","tsplus_module_1","s","JSON","parse","data","version","keys","eq","tsplus_module_2","$","value","sdb_","sdb","cr","r","d","tsplus_module_4","record","currentVersion","cv","parseInt","toString","getData","stringify","timestamp","Date","serialised","set"],"sourceRoot":"","sources":["../../../_src/services/simpledb/memdb.ts"],"sourcesContent":[null]}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.createContext = createContext;
|
|
7
7
|
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
8
8
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
9
|
-
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/
|
|
9
|
+
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
10
10
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
11
|
var Mongo = _interopRequireWildcard(require("@effect-app/infra-adapters/mongo-client"));
|
|
12
12
|
var _shared = require("./shared.cjs");
|
|
@@ -18,20 +18,20 @@ const fileName_1 = "packages/infra/_src/services/simpledb/mongodb.ts";
|
|
|
18
18
|
// prev[cur] = 1
|
|
19
19
|
// return prev
|
|
20
20
|
// }, {} as Record<string, number>)
|
|
21
|
-
const setup = (type, indexes) =>
|
|
21
|
+
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)));
|
|
22
22
|
function createContext() {
|
|
23
23
|
return (type, encode, decode,
|
|
24
24
|
// schemaVersion: string,
|
|
25
25
|
indexes) => {
|
|
26
|
-
return
|
|
26
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
27
27
|
find: simpledb.find(find, decode, type),
|
|
28
28
|
findBy,
|
|
29
29
|
save: simpledb.storeDirectly(store, type)
|
|
30
|
-
}))
|
|
30
|
+
}));
|
|
31
31
|
function find(id) {
|
|
32
|
-
return tracer_1.withCallTrace(fileName_1 + ":43:10")(tsplus_module_3.mapOpt(
|
|
32
|
+
return tracer_1.withCallTrace(fileName_1 + ":43:10")(tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne({
|
|
33
33
|
_id: id
|
|
34
|
-
})))
|
|
34
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
35
35
|
data,
|
|
36
36
|
version
|
|
37
37
|
}) => ({
|
|
@@ -40,32 +40,27 @@ function createContext() {
|
|
|
40
40
|
})));
|
|
41
41
|
}
|
|
42
42
|
function findBy(keys) {
|
|
43
|
-
return tracer_1.withCallTrace(fileName_1 + ":52:10")(tsplus_module_3.mapOpt(
|
|
43
|
+
return tracer_1.withCallTrace(fileName_1 + ":52:10")(tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, {
|
|
44
44
|
projection: {
|
|
45
45
|
_id: 1
|
|
46
46
|
}
|
|
47
|
-
})))
|
|
47
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
48
48
|
_id
|
|
49
49
|
}) => _id));
|
|
50
50
|
}
|
|
51
51
|
function store(record, currentVersion) {
|
|
52
|
-
return
|
|
52
|
+
return tsplus_module_1.gen(function* ($) {
|
|
53
53
|
const version = tsplus_module_2.getOrElse(() => "1")(tsplus_module_2.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
54
54
|
const db = yield* $(Mongo.db);
|
|
55
55
|
const data = yield* $(encode(record));
|
|
56
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(
|
|
56
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.collection(type).insertOne({
|
|
57
57
|
_id: record.id,
|
|
58
58
|
version,
|
|
59
59
|
timestamp: new Date(),
|
|
60
60
|
data
|
|
61
61
|
}, {
|
|
62
62
|
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
63
|
-
}))))
|
|
64
|
-
if (!x.modifiedCount) {
|
|
65
|
-
return tracer_1.withCallTrace(fileName_1 + ":89:33")(tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id)));
|
|
66
|
-
}
|
|
67
|
-
return tsplus_module_3.unit;
|
|
68
|
-
}))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":77:22")(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({
|
|
63
|
+
})))), currentVersion => tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({
|
|
69
64
|
_id: record.id,
|
|
70
65
|
version: currentVersion
|
|
71
66
|
}, {
|
|
@@ -74,12 +69,17 @@ function createContext() {
|
|
|
74
69
|
data
|
|
75
70
|
}, {
|
|
76
71
|
upsert: false
|
|
77
|
-
})))
|
|
72
|
+
}))), x => {
|
|
73
|
+
if (!x.modifiedCount) {
|
|
74
|
+
return tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id));
|
|
75
|
+
}
|
|
76
|
+
return tsplus_module_3.unit;
|
|
77
|
+
}))(currentVersion));
|
|
78
78
|
return {
|
|
79
79
|
version,
|
|
80
80
|
data: record
|
|
81
81
|
};
|
|
82
|
-
})
|
|
82
|
+
});
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.cjs","mappings":";;;;;;;;;;AAEA;AAEA;AACA;AAAyC;AAAA;;AAGzC;AACA;AACA;AACA;AAEA,MAAMA,KAAK,GAAG,CAACC,IAAY,EAAEC,OAA2B,KACtDC,
|
|
1
|
+
{"version":3,"file":"mongodb.cjs","mappings":"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","names":["setup","type","indexes","tsplus_module_1","db","createCollection","catch","err","console","warn","collection","createIndexes","createContext","encode","decode","find","simpledb","findBy","save","storeDirectly","store","id","tsplus_module_3","findOne","_id","data","version","keys","projection","record","currentVersion","$","tsplus_module_2","cv","parseInt","toString","Mongo","insertOne","timestamp","Date","checkKeys","replaceOne","upsert","x","modifiedCount","OptimisticLockException"],"sourceRoot":"","sources":["../../../_src/services/simpledb/mongodb.ts"],"sourcesContent":[null]}
|
|
@@ -8,7 +8,7 @@ exports.createContext = createContext;
|
|
|
8
8
|
var tracer_1 = _interopRequireWildcard(require("@effect/io/Debug"));
|
|
9
9
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
10
10
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/
|
|
11
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
12
12
|
var _Function = require("@effect-app/core/Function");
|
|
13
13
|
var MO = _interopRequireWildcard(require("@effect-app/schema"));
|
|
14
14
|
var RED = _interopRequireWildcard(require("@effect-app/infra-adapters/redis-client"));
|
|
@@ -20,40 +20,40 @@ const fileName_1 = "packages/infra/_src/services/simpledb/redisdb.ts";
|
|
|
20
20
|
const ttl = 10 * 1000;
|
|
21
21
|
function createContext() {
|
|
22
22
|
return (type, encode, decode, schemaVersion, makeIndexKey) => {
|
|
23
|
-
const getData = (0, _Function.flow)(encode, _ =>
|
|
23
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_1.map(_, JSON.stringify));
|
|
24
24
|
return {
|
|
25
25
|
find: simpledb.find(find, decode, type),
|
|
26
26
|
findByIndex: getIdx,
|
|
27
27
|
save: simpledb.store(find, store, lockRedisRecord, type)
|
|
28
28
|
};
|
|
29
29
|
function find(id) {
|
|
30
|
-
return tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":30:39")(tsplus_module_2.flatMapOpt(RED.hmgetAll(getKey(id)), v =>
|
|
30
|
+
return tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":30:39")(tsplus_module_2.flatMapOpt(RED.hmgetAll(getKey(id)), v => tsplus_module_1.mapError(tsplus_module_1.map((0, _Function.pipe)(RedisSerializedDBRecord.Parser, MO.condemnFail)(v), ({
|
|
31
31
|
data,
|
|
32
32
|
version
|
|
33
33
|
}) => ({
|
|
34
34
|
data: JSON.parse(data),
|
|
35
35
|
version
|
|
36
|
-
}))
|
|
36
|
+
})), e => new _shared.ConnectionException(new Error(e.toString()))))));
|
|
37
37
|
}
|
|
38
38
|
function store(record, currentVersion) {
|
|
39
39
|
const version = tsplus_module_3.getOrElse(() => "1")(tsplus_module_3.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
40
|
-
return tsplus_module_3.match(() => tsplus_module_1.scoped(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
})))(tsplus_module_1.orDie(tracer_1.withCallTrace(fileName_1 + ":62:16")(tsplus_module_1.zipRight(setIndex(record)))(tracer_1.withCallTrace(fileName_1 + ":55:16")(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
40
|
+
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(tracer_1.withCallTrace(fileName_1 + ":50:16")(tsplus_module_2.zipRightOpt(getIndex(record), tsplus_module_1.fail(() => new Error("Combination already exists, abort")))), getData(record))
|
|
41
|
+
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
42
|
+
, data => hmSetRec(getKey(record.id), {
|
|
44
43
|
version,
|
|
45
44
|
timestamp: new Date(),
|
|
46
45
|
data
|
|
47
|
-
}))
|
|
48
|
-
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
49
|
-
))))))(lockIndex(record))), () => tracer_1.withCallTrace(fileName_1 + ":74:20")(tsplus_module_1.map(() => ({
|
|
46
|
+
})), setIndex(record))), () => ({
|
|
50
47
|
version,
|
|
51
48
|
data: record
|
|
52
|
-
})))(tsplus_module_1.
|
|
49
|
+
})))), () => tsplus_module_1.map(tsplus_module_1.orDie(tsplus_module_1.flatMap(getData(record), data => hmSetRec(getKey(record.id), {
|
|
53
50
|
version,
|
|
54
51
|
timestamp: new Date(),
|
|
55
52
|
data
|
|
56
|
-
})))(
|
|
53
|
+
}))), () => ({
|
|
54
|
+
version,
|
|
55
|
+
data: record
|
|
56
|
+
})))(currentVersion);
|
|
57
57
|
}
|
|
58
58
|
function getIndex(record) {
|
|
59
59
|
const index = makeIndexKey(record);
|
|
@@ -68,7 +68,7 @@ function createContext() {
|
|
|
68
68
|
return lockRedisIdx(index);
|
|
69
69
|
}
|
|
70
70
|
function getIdx(index) {
|
|
71
|
-
return
|
|
71
|
+
return tsplus_module_1.map(RED.hget(getIdxKey(index), index.key), _ => tsplus_module_3.map(i => i)(_));
|
|
72
72
|
}
|
|
73
73
|
function setIdx(index, r) {
|
|
74
74
|
return RED.hset(getIdxKey(index), index.key, r.id);
|
|
@@ -76,20 +76,20 @@ function createContext() {
|
|
|
76
76
|
function lockRedisIdx(index) {
|
|
77
77
|
const lockKey = getIdxLockKey(index);
|
|
78
78
|
// acquire
|
|
79
|
-
return
|
|
79
|
+
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 _shared.CouldNotAquireDbLockException(type, lockKey, err),
|
|
80
80
|
// release
|
|
81
81
|
lock => ({
|
|
82
|
-
release: tsplus_module_1.orDie(
|
|
83
|
-
}))
|
|
82
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
83
|
+
})), l => l.release);
|
|
84
84
|
}
|
|
85
85
|
function lockRedisRecord(id) {
|
|
86
86
|
// acquire
|
|
87
|
-
return
|
|
87
|
+
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 _shared.CouldNotAquireDbLockException(type, id, err),
|
|
88
88
|
// release
|
|
89
89
|
lock => ({
|
|
90
90
|
// TODO
|
|
91
|
-
release: tsplus_module_1.orDie(
|
|
92
|
-
}))
|
|
91
|
+
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
92
|
+
})), l => l.release);
|
|
93
93
|
}
|
|
94
94
|
function getKey(id) {
|
|
95
95
|
return `v${schemaVersion}.${(0, _shared.getRecordName)(type, id)}`;
|
|
@@ -106,9 +106,9 @@ function createContext() {
|
|
|
106
106
|
};
|
|
107
107
|
function hmSetRec(key, val) {
|
|
108
108
|
const enc = RedisSerializedDBRecord.Encoder(val);
|
|
109
|
-
return
|
|
110
|
-
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err ? res(
|
|
111
|
-
})))
|
|
109
|
+
return tsplus_module_1.flatMap(RED.client, client => tsplus_module_1.uninterruptible(tsplus_module_1.async(res => {
|
|
110
|
+
client.hmset(key, "version", enc.version, "timestamp", enc.timestamp, "data", enc.data, err => err ? res(tsplus_module_1.fail(new _shared.ConnectionException(err))) : res(tsplus_module_1.sync(() => void 0)));
|
|
111
|
+
})));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
class RedisSerializedDBRecord extends MO.Model()({
|