@effect-app/infra 0.13.0 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/_cjs/api/codec.cjs +2 -4
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +18 -21
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +4 -4
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +5 -7
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +57 -56
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -22
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +6 -17
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +70 -70
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -4
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -8
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -13
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +1 -1
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -3
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +6 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +12 -18
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -7
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +23 -26
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -5
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +28 -30
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +58 -58
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +15 -16
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +14 -16
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +22 -23
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +7 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +2 -4
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +16 -17
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +23 -25
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +20 -21
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +11 -13
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +20 -22
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +25 -25
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +4 -6
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +16 -17
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/errors.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/dist/RequestContext.d.ts +12 -12
- package/dist/api/codec.js +3 -5
- package/dist/api/defaultErrorHandler.js +20 -21
- package/dist/api/express/makeJsonSchema.js +3 -5
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/requestHandler.d.ts +5 -5
- package/dist/api/express/schema/requestHandler.js +50 -52
- package/dist/api/express/schema/routing.js +21 -23
- package/dist/api/reportError.js +6 -18
- package/dist/api/routing.js +65 -67
- package/dist/api/setupRequest.js +3 -5
- package/dist/api/writeDocs.js +7 -9
- package/dist/errorReporter.js +10 -12
- package/dist/errors.js +2 -2
- package/dist/instrument.js +2 -4
- package/dist/rateLimit.js +7 -9
- package/dist/services/Emailer/Sendgrid.js +15 -22
- package/dist/services/Emailer/fake.js +5 -8
- package/dist/services/Emailer/service.d.ts +1 -1
- package/dist/services/Operations/live.js +24 -27
- package/dist/services/Operations/service.js +4 -6
- package/dist/services/Repository.d.ts +4 -4
- package/dist/services/Repository.js +22 -24
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +61 -63
- package/dist/services/Store/Disk.js +16 -19
- package/dist/services/Store/Memory.d.ts +1 -1
- package/dist/services/Store/Memory.js +16 -18
- package/dist/services/Store/Redis.d.ts +1 -1
- package/dist/services/Store/Redis.js +21 -24
- package/dist/services/Store/index.js +6 -8
- package/dist/services/Store/service.d.ts +1 -1
- package/dist/services/Store/service.js +3 -5
- package/dist/services/Store/utils.d.ts +2 -2
- package/dist/services/Store/utils.js +18 -19
- package/dist/services/simpledb/cosmosdb.d.ts +2 -2
- package/dist/services/simpledb/cosmosdb.js +23 -25
- package/dist/services/simpledb/diskdb.d.ts +2 -2
- package/dist/services/simpledb/diskdb.js +18 -18
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +13 -14
- package/dist/services/simpledb/mongodb.d.ts +2 -2
- package/dist/services/simpledb/mongodb.js +18 -20
- package/dist/services/simpledb/redisdb.d.ts +8 -8
- package/dist/services/simpledb/redisdb.js +21 -23
- package/dist/services/simpledb/shared.d.ts +9 -9
- package/dist/services/simpledb/shared.js +5 -7
- package/dist/services/simpledb/simpledb.d.ts +1 -1
- package/dist/services/simpledb/simpledb.js +19 -19
- package/package.json +12 -12
- package/tsconfig.json +5 -1
|
@@ -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]}
|
|
@@ -4,8 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createContext = createContext;
|
|
7
|
-
var
|
|
8
|
-
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/data/Option"));
|
|
7
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
9
8
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
10
9
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
10
|
var tsplus_module_4 = _interopRequireWildcard(require("@effect/io/Exit"));
|
|
@@ -15,7 +14,6 @@ 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/memdb.ts";
|
|
19
17
|
// When we are in-process, we want to share the same Storage
|
|
20
18
|
// Do not try this at home.
|
|
21
19
|
const storage = (0, _shared.makeMap)();
|
|
@@ -28,17 +26,17 @@ function createContext() {
|
|
|
28
26
|
save: simpledb.store(find, store, bogusLock, type)
|
|
29
27
|
};
|
|
30
28
|
function find(id) {
|
|
31
|
-
return
|
|
29
|
+
return tsplus_module_3.mapOpt(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
30
|
data,
|
|
33
31
|
version
|
|
34
32
|
}) => ({
|
|
35
33
|
data: JSON.parse(data),
|
|
36
34
|
version
|
|
37
|
-
}))
|
|
35
|
+
}));
|
|
38
36
|
}
|
|
39
37
|
function findBy(keys, eq) {
|
|
40
38
|
// Naive implementation, fine for in memory testing purposes.
|
|
41
|
-
return
|
|
39
|
+
return tsplus_module_2.map(tsplus_module_2.gen(function* ($) {
|
|
42
40
|
for (const [, value] of storage) {
|
|
43
41
|
const sdb_ = JSON.parse(value);
|
|
44
42
|
const sdb = yield* $(parseSDB(sdb_));
|
|
@@ -46,29 +44,29 @@ function createContext() {
|
|
|
46
44
|
data: JSON.parse(sdb.data),
|
|
47
45
|
version: sdb.version
|
|
48
46
|
};
|
|
49
|
-
const r = yield* $(tsplus_module_2.exit(
|
|
47
|
+
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
48
|
if (tsplus_module_4.isSuccess(r)) {
|
|
51
49
|
return r.value;
|
|
52
50
|
}
|
|
53
51
|
}
|
|
54
52
|
return null;
|
|
55
|
-
}))
|
|
53
|
+
}), tsplus_module_1.fromNullable);
|
|
56
54
|
}
|
|
57
55
|
function store(record, currentVersion) {
|
|
58
56
|
const version = tsplus_module_1.getOrElse(() => "1")(tsplus_module_1.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
59
|
-
const getData = (0, _Function.flow)(encode, _ =>
|
|
57
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(tsplus_module_2.map(_, JSON.stringify), data => JSON.stringify({
|
|
60
58
|
version,
|
|
61
59
|
timestamp: new Date(),
|
|
62
60
|
data
|
|
63
|
-
})))
|
|
64
|
-
return
|
|
61
|
+
})));
|
|
62
|
+
return tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => storage.set((0, _shared.getRecordName)(type, record.id), serialised)), () => ({
|
|
65
63
|
version,
|
|
66
64
|
data: record
|
|
67
|
-
}))
|
|
65
|
+
}));
|
|
68
66
|
}
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
69
|
function bogusLock() {
|
|
72
|
-
return
|
|
70
|
+
return tsplus_module_2.acquireRelease(tsplus_module_3.unit, () => tsplus_module_3.unit);
|
|
73
71
|
}
|
|
74
72
|
//# sourceMappingURL=memdb.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memdb.cjs","mappings":"
|
|
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]}
|
|
@@ -4,68 +4,61 @@ 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/
|
|
8
|
+
var tsplus_module_2 = _interopRequireWildcard(require("@fp-ts/core/Option"));
|
|
10
9
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
10
|
var Mongo = _interopRequireWildcard(require("@effect-app/infra-adapters/mongo-client"));
|
|
12
11
|
var _shared = require("./shared.cjs");
|
|
13
12
|
var simpledb = _interopRequireWildcard(require("./simpledb.cjs"));
|
|
14
13
|
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); }
|
|
15
14
|
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; }
|
|
16
|
-
const fileName_1 = "packages/infra/_src/services/simpledb/mongodb.ts";
|
|
17
15
|
// const makeFromIndexKeys = (indexKeys: string[], unique: boolean) => indexKeys.reduce((prev, cur) => {
|
|
18
16
|
// prev[cur] = 1
|
|
19
17
|
// return prev
|
|
20
18
|
// }, {} as Record<string, number>)
|
|
21
|
-
const setup = (type, indexes) =>
|
|
19
|
+
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
20
|
function createContext() {
|
|
23
21
|
return (type, encode, decode,
|
|
24
22
|
// schemaVersion: string,
|
|
25
23
|
indexes) => {
|
|
26
|
-
return
|
|
24
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
27
25
|
find: simpledb.find(find, decode, type),
|
|
28
26
|
findBy,
|
|
29
27
|
save: simpledb.storeDirectly(store, type)
|
|
30
|
-
}))
|
|
28
|
+
}));
|
|
31
29
|
function find(id) {
|
|
32
|
-
return
|
|
30
|
+
return tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne({
|
|
33
31
|
_id: id
|
|
34
|
-
})))
|
|
32
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
35
33
|
data,
|
|
36
34
|
version
|
|
37
35
|
}) => ({
|
|
38
36
|
version,
|
|
39
37
|
data
|
|
40
|
-
}))
|
|
38
|
+
}));
|
|
41
39
|
}
|
|
42
40
|
function findBy(keys) {
|
|
43
|
-
return
|
|
41
|
+
return tsplus_module_3.mapOpt(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, {
|
|
44
42
|
projection: {
|
|
45
43
|
_id: 1
|
|
46
44
|
}
|
|
47
|
-
})))
|
|
45
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
48
46
|
_id
|
|
49
|
-
}) => _id)
|
|
47
|
+
}) => _id);
|
|
50
48
|
}
|
|
51
49
|
function store(record, currentVersion) {
|
|
52
|
-
return
|
|
50
|
+
return tsplus_module_1.gen(function* ($) {
|
|
53
51
|
const version = tsplus_module_2.getOrElse(() => "1")(tsplus_module_2.map(cv => (parseInt(cv) + 1).toString())(currentVersion));
|
|
54
52
|
const db = yield* $(Mongo.db);
|
|
55
53
|
const data = yield* $(encode(record));
|
|
56
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(
|
|
54
|
+
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.collection(type).insertOne({
|
|
57
55
|
_id: record.id,
|
|
58
56
|
version,
|
|
59
57
|
timestamp: new Date(),
|
|
60
58
|
data
|
|
61
59
|
}, {
|
|
62
60
|
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({
|
|
61
|
+
})))), currentVersion => tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => db.collection(type).replaceOne({
|
|
69
62
|
_id: record.id,
|
|
70
63
|
version: currentVersion
|
|
71
64
|
}, {
|
|
@@ -74,12 +67,17 @@ function createContext() {
|
|
|
74
67
|
data
|
|
75
68
|
}, {
|
|
76
69
|
upsert: false
|
|
77
|
-
})))
|
|
70
|
+
}))), x => {
|
|
71
|
+
if (!x.modifiedCount) {
|
|
72
|
+
return tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id));
|
|
73
|
+
}
|
|
74
|
+
return tsplus_module_3.unit;
|
|
75
|
+
}))(currentVersion));
|
|
78
76
|
return {
|
|
79
77
|
version,
|
|
80
78
|
data: record
|
|
81
79
|
};
|
|
82
|
-
})
|
|
80
|
+
});
|
|
83
81
|
}
|
|
84
82
|
};
|
|
85
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.cjs","mappings":"
|
|
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]}
|