@effect-app/infra 0.24.3 → 0.25.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 +14 -0
- package/_cjs/_ext/Array.cjs +2 -3
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/codec.cjs +1 -1
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +17 -18
- 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 +2 -2
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/requestHandler.cjs +45 -45
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +19 -19
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +2 -2
- package/_cjs/api/reportError.cjs.map +1 -1
- package/_cjs/api/routing.cjs +54 -54
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +2 -2
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +6 -6
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +4 -4
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -1
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +8 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +7 -8
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -5
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +10 -10
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +3 -3
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +3 -3
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +10 -11
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +5 -5
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +21 -21
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +42 -42
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +20 -21
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +24 -24
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +14 -15
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +5 -5
- package/_cjs/services/Store/codeFilter.test.cjs.map +1 -1
- package/_cjs/services/Store/index.cjs +4 -4
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +4 -4
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +19 -19
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +18 -18
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +9 -9
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +16 -16
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +20 -20
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +9 -9
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/RequestContext.ts +2 -2
- package/_src/rateLimit.ts +4 -4
- package/dist/RequestContext.d.ts +2 -2
- package/dist/_ext/Array.js +3 -4
- package/dist/api/codec.js +2 -2
- package/dist/api/defaultErrorHandler.js +18 -18
- package/dist/api/express/makeJsonSchema.js +5 -5
- package/dist/api/express/makeOpenApiSpecs.js +2 -2
- package/dist/api/express/schema/requestHandler.js +41 -41
- package/dist/api/express/schema/routing.js +20 -20
- package/dist/api/reportError.js +4 -4
- package/dist/api/routing.js +63 -63
- package/dist/api/setupRequest.js +3 -3
- package/dist/api/writeDocs.js +7 -7
- package/dist/errorReporter.js +3 -3
- package/dist/instrument.js +2 -2
- package/dist/rateLimit.d.ts +3 -3
- package/dist/rateLimit.js +9 -9
- package/dist/services/Emailer/Sendgrid.js +8 -9
- package/dist/services/Emailer/fake.js +5 -6
- package/dist/services/Operations/live.js +12 -12
- package/dist/services/Operations/service.js +4 -4
- package/dist/services/QueueMaker/errors.js +4 -4
- package/dist/services/QueueMaker/memQueue.js +10 -10
- package/dist/services/QueueMaker/sbqueue.js +5 -5
- package/dist/services/Repository.d.ts +14 -14
- package/dist/services/Repository.js +15 -15
- package/dist/services/Store/Cosmos.js +44 -44
- package/dist/services/Store/Disk.js +22 -23
- package/dist/services/Store/Memory.js +26 -26
- package/dist/services/Store/Redis.js +15 -16
- package/dist/services/Store/index.js +5 -5
- package/dist/services/Store/utils.js +5 -5
- package/dist/services/simpledb/cosmosdb.js +19 -19
- package/dist/services/simpledb/diskdb.js +15 -15
- package/dist/services/simpledb/memdb.js +10 -10
- package/dist/services/simpledb/mongodb.js +15 -15
- package/dist/services/simpledb/redisdb.js +17 -17
- package/dist/services/simpledb/simpledb.js +12 -12
- package/package.json +8 -8
|
@@ -19,32 +19,32 @@ class CosmosDbOperationError {
|
|
|
19
19
|
this.message = message;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
const setup = (type, indexingPolicy) => tsplus_module_1.tap(db => tsplus_module_1.tryPromise(() => db.containers.create({
|
|
22
|
+
const setup = (type, indexingPolicy) => tsplus_module_1.tap(Cosmos.db, db => tsplus_module_1.tryPromise(() => db.containers.create({
|
|
23
23
|
id: type,
|
|
24
24
|
indexingPolicy
|
|
25
|
-
}).catch(err => console.warn(err))))
|
|
25
|
+
}).catch(err => console.warn(err))));
|
|
26
26
|
// TODO: Error if current indexingPolicy does not match
|
|
27
27
|
// Effect.flatMap((db) => Effect.tryPromise(() => db.container(type).(indexes)))
|
|
28
28
|
function createContext() {
|
|
29
29
|
return (type, encode, decode,
|
|
30
30
|
// schemaVersion: string,
|
|
31
31
|
indexes) => {
|
|
32
|
-
return tsplus_module_1.map(() => ({
|
|
32
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
33
33
|
find: simpledb.find(find, decode, type),
|
|
34
34
|
findBy,
|
|
35
35
|
save: simpledb.storeDirectly(store, type)
|
|
36
|
-
}))
|
|
36
|
+
}));
|
|
37
37
|
function find(id) {
|
|
38
|
-
return tsplus_module_1.map(_ => tsplus_module_2.map(({
|
|
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(_, ({
|
|
39
39
|
_etag,
|
|
40
40
|
data
|
|
41
41
|
}) => ({
|
|
42
42
|
version: _etag,
|
|
43
43
|
data
|
|
44
|
-
}))
|
|
44
|
+
})));
|
|
45
45
|
}
|
|
46
46
|
function findBy(parameters) {
|
|
47
|
-
return tsplus_module_1.map(
|
|
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({
|
|
48
48
|
query: `
|
|
49
49
|
SELECT TOP 1 ${type}.id
|
|
50
50
|
FROM ${type} i
|
|
@@ -56,26 +56,18 @@ WHERE (
|
|
|
56
56
|
name: `@${p}`,
|
|
57
57
|
value: parameters[p]
|
|
58
58
|
}))
|
|
59
|
-
}).fetchAll()))(
|
|
59
|
+
}).fetchAll())), x => tsplus_module_3.head(x.resources)), _ => tsplus_module_2.map(_, _ => _.id));
|
|
60
60
|
}
|
|
61
61
|
function store(record, currentVersion) {
|
|
62
62
|
return tsplus_module_1.gen(function* ($) {
|
|
63
63
|
const version = "_etag"; // we get this from the etag anyway.
|
|
64
64
|
const db = yield* $(Cosmos.db);
|
|
65
65
|
const data = yield* $(encode(record));
|
|
66
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.container(type).items.create({
|
|
66
|
+
yield* $(tsplus_module_2.match(currentVersion, () => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.container(type).items.create({
|
|
67
67
|
id: record.id,
|
|
68
68
|
timestamp: new Date(),
|
|
69
69
|
data
|
|
70
|
-
})))), currentVersion => tsplus_module_1.flatMap(
|
|
71
|
-
if (x.statusCode === 412) {
|
|
72
|
-
return tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id));
|
|
73
|
-
}
|
|
74
|
-
if (x.statusCode > 299 || x.statusCode < 200) {
|
|
75
|
-
return tsplus_module_1.die(new CosmosDbOperationError("not able to update record: " + x.statusCode));
|
|
76
|
-
}
|
|
77
|
-
return tsplus_module_4.unit;
|
|
78
|
-
})(tsplus_module_1.orDie(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({
|
|
79
71
|
id: record.id,
|
|
80
72
|
timestamp: new Date(),
|
|
81
73
|
data
|
|
@@ -84,7 +76,15 @@ WHERE (
|
|
|
84
76
|
type: "IfMatch",
|
|
85
77
|
condition: currentVersion
|
|
86
78
|
}
|
|
87
|
-
})))
|
|
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
|
+
})));
|
|
88
88
|
return {
|
|
89
89
|
version,
|
|
90
90
|
data: record
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmosdb.cjs","mappings":";;;;;;;;;;AACA;AAEA;AAEA;AACA;AAAyC;AAAA;AAGzC,MAAMA,sBAAsB;EAC1BC,YAAqBC,OAAe;IAAf,YAAO,GAAPA,OAAO;EAAW;;AAGzC,MAAMC,KAAK,GAAG,CAACC,IAAY,EAAEC,cAA8B,KACzDC,
|
|
1
|
+
{"version":3,"file":"cosmosdb.cjs","mappings":";;;;;;;;;;AACA;AAEA;AAEA;AACA;AAAyC;AAAA;AAGzC,MAAMA,sBAAsB;EAC1BC,YAAqBC,OAAe;IAAf,YAAO,GAAPA,OAAO;EAAW;;AAGzC,MAAMC,KAAK,GAAG,CAACC,IAAY,EAAEC,cAA8B,KACzDC,0BAAM,CAACC,EAAE,EAAKA,EAAE,IACdD,2BAAkB,MAChBC,EAAE,CAACC,UAAU,CACVC,MAAM,CAAC;EAAEC,EAAE,EAAEN,IAAI;EAAEC;AAAc,CAAE,CAAC,CACpCM,KAAK,CAACC,GAAG,IAAIC,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC,CACnC,CACF;AACH;AACA;AACM,SAAUG,aAAa;EAC3B,OAAO,CACLX,IAAY,EACZY,MAAiD,EACjDC,MAA8C;EAC9C;EACAC,OAAuB,KACrB;IACF,OAAOZ,yBAAK,CAACF,IAAI,EAAEc,OAAO,CAAC,EAAK,OAAO;MACrCC,IAAI,EAAEC,QAAQ,CAACD,IAAI,CAACA,IAAI,EAAEF,MAAM,EAAEb,IAAI,CAAC;MACvCiB,MAAM;MACNC,IAAI,EAAEF,QAAQ,CAACG,aAAa,CAACC,KAAK,EAAEpB,IAAI;KACzC,CAAC,CAAC;IAEH,SAASe,IAAI,CAACT,EAAU;MACtB,OAAOJ,sEAAM,CAACC,EAAE,EACLA,EAAE,IAAID,2BAAkB,MAAMC,EAAE,CAACkB,SAAS,CAACrB,IAAI,CAAC,CAACsB,IAAI,CAAChB,EAAE,CAAC,CAACiB,IAAI,EAAgB,CAAC,CAAC,EACpFC,CAAC,IAAIC,6BAAoBD,CAAC,CAACE,QAAQ,CAAC,CAAC,EAExCC,CAAC,IACCF,qBAAC,EACC,CAAC;QAAEG,KAAK;QAAEC;MAAI,CAAE,MAAM;QAAEC,OAAO,EAAEF,KAAK;QAAEC;MAAI,CAAuB,EACpE,CACJ;IACL;IAEA,SAASZ,MAAM,CAACc,UAAkC;MAChD,OAAO7B,sEAAM,CAACC,EAAE,EACLA,EAAE,IACTD,2BAAkB,MAChBC,EAAE,CACCkB,SAAS,CAACrB,IAAI,CAAC,CACfgC,KAAK,CAACC,KAAK,CAAC;QACXA,KAAK,EAAE;eACRjC,IAAI;OACZA,IAAI;;IAGO,sBAAW,EAAC+B,UAAU,CAAC,CACpBG,GAAG,CAACC,CAAC,IAAI,KAAKA,CAAC,OAAOA,CAAC,EAAE,CAAC,CAC1BC,IAAI,CAAC,OAAO,CACjB;;CAEf;QACeL,UAAU,EAAE,sBAAW,EAACA,UAAU,CAAC,CAACG,GAAG,CAACG,CAAC,KAAK;UAC5CC,IAAI,EAAE,IAAID,CAAC,EAAE;UACbE,KAAK,EAAER,UAAU,CAACM,CAAC;SACpB,CAAC;OACH,CAAC,CACDG,QAAQ,EAAE,CACd,CACF,EACIC,CAAC,IAAGC,qBAACD,CAAC,CAACE,SAAS,CAAK,CAAC,EACtBhB,CAAC,IAAIF,qBAAC,EAAKE,CAAC,IAAIA,CAAC,CAACrB,EAAE,CAAC,CAAC;IAC/B;IAEA,SAASc,KAAK,CAACwB,MAAS,EAAEC,cAA+B;MACvD,OAAO3C,oBAAW,WAAU4C,CAAC;QAC3B,MAAMhB,OAAO,GAAG,OAAO,EAAC;QAExB,MAAM3B,EAAE,GAAG,OAAO2C,CAAC,CAACC,MAAM,CAAC5C,EAAE,CAAC;QAC9B,MAAM0B,IAAI,GAAG,OAAOiB,CAAC,CAAClC,MAAM,CAACgC,MAAM,CAAC,CAAC;QAErC,OAAOE,CAAC,CACNrB,oCAAc,EACZ,MAAKvB,6CACHA,2BAAkB,MAChBC,EAAE,CAACkB,SAAS,CAACrB,IAAI,CAAC,CAACgC,KAAK,CAAC3B,MAAM,CAAC;UAC9BC,EAAE,EAAEsC,MAAM,CAACtC,EAAE;UACb0C,SAAS,EAAE,IAAIC,IAAI,EAAE;UACrBpB;SACD,CAAC,CACH,EAAa,EAChBgB,cAAc,IACZ3C,yEAAkB,MAChBC,EAAE,CACCkB,SAAS,CAACrB,IAAI,CAAC,CACfsB,IAAI,CAACsB,MAAM,CAACtC,EAAE,CAAC,CACf4C,OAAO,CACN;UACE5C,EAAE,EAAEsC,MAAM,CAACtC,EAAE;UACb0C,SAAS,EAAE,IAAIC,IAAI,EAAE;UACrBpB;SACD,EACD;UACEsB,eAAe,EAAE;YACfnD,IAAI,EAAE,SAAS;YACfoD,SAAS,EAAEP;;SAEd,CACF,CACJ,GAAeJ,CAAC,IAAG;UAClB,IAAIA,CAAC,CAACY,UAAU,KAAK,GAAG,EAAE;YACxB,OAAOnD,qBAAY,IAAIoD,+BAAuB,CAACtD,IAAI,EAAE4C,MAAM,CAACtC,EAAE,CAAC,CAAC;;UAElE,IAAImC,CAAC,CAACY,UAAU,GAAG,GAAG,IAAIZ,CAAC,CAACY,UAAU,GAAG,GAAG,EAAE;YAC5C,OAAOnD,oBACL,IAAIN,sBAAsB,CACxB,6BAA6B,GAAG6C,CAAC,CAACY,UAAU,CAC7C,CACF;;UAEH;QACF,CAAC,CAAC,CACL,CACF;QACD,OAAO;UAAEvB,OAAO;UAAED,IAAI,EAAEe;QAAM,CAAqB;MACrD,CAAC,CAAC;IACJ;EACF,CAAC;AACH","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]}
|
|
@@ -32,23 +32,23 @@ function createContext() {
|
|
|
32
32
|
save: simpledb.store(find(type), store, lockRecordOnDisk(type), type)
|
|
33
33
|
};
|
|
34
34
|
function store(record, currentVersion) {
|
|
35
|
-
const version = tsplus_module_1.getOrElse(
|
|
36
|
-
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(data => (0, _utils.pretty)({
|
|
35
|
+
const version = tsplus_module_1.getOrElse(tsplus_module_1.map(currentVersion, cv => (parseInt(cv) + 1).toString()), () => "1");
|
|
36
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(_, data => (0, _utils.pretty)({
|
|
37
37
|
version,
|
|
38
38
|
timestamp: new Date(),
|
|
39
39
|
data
|
|
40
|
-
}))
|
|
40
|
+
})));
|
|
41
41
|
const idx = makeIndexKey(record);
|
|
42
|
-
return tsplus_module_1.isSome(currentVersion) ? tsplus_module_2.map(() => ({
|
|
43
|
-
version,
|
|
44
|
-
data: record
|
|
45
|
-
}))(tsplus_module_2.scoped(tsplus_module_2.zipRight(tsplus_module_2.orDie(tsplus_module_2.flatMap(x => x[record.id] ? tsplus_module_2.fail(() => new Error("Combination already exists, abort")) : 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, {
|
|
46
43
|
...x,
|
|
47
44
|
[idx.key]: record.id
|
|
48
|
-
}))
|
|
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)), () => ({
|
|
49
49
|
version,
|
|
50
50
|
data: record
|
|
51
|
-
}))
|
|
51
|
+
}));
|
|
52
52
|
}
|
|
53
53
|
function lockIndex(record) {
|
|
54
54
|
const index = makeIndexKey(record);
|
|
@@ -63,34 +63,34 @@ function createContext() {
|
|
|
63
63
|
return lockIndexOnDisk(type)(lockKey);
|
|
64
64
|
}
|
|
65
65
|
function lockRecordOnDisk(type) {
|
|
66
|
-
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
66
|
+
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getFilename(type, id)), err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
67
67
|
release
|
|
68
|
-
}))
|
|
68
|
+
})), l => l.release);
|
|
69
69
|
}
|
|
70
70
|
function lockIndexOnDisk(type) {
|
|
71
|
-
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
71
|
+
return id => tsplus_module_2.acquireRelease(tsplus_module_2.mapBoth(lockFile(getIdxName(type, id)), err => new _shared.CouldNotAquireDbLockException(type, id, err), release => ({
|
|
72
72
|
release
|
|
73
|
-
}))
|
|
73
|
+
})), l => l.release);
|
|
74
74
|
}
|
|
75
75
|
function readFile(filePath) {
|
|
76
|
-
return tsplus_module_2.catchAll(err => tsplus_module_2.die(new _shared.ConnectionException(err)))
|
|
76
|
+
return tsplus_module_2.catchAll(fu.readTextFile(filePath), err => tsplus_module_2.die(new _shared.ConnectionException(err)));
|
|
77
77
|
}
|
|
78
78
|
function find(type) {
|
|
79
79
|
return id => {
|
|
80
|
-
return tsplus_module_2.map(_ => tsplus_module_1.map(s => JSON.parse(s))
|
|
80
|
+
return tsplus_module_2.map(tryRead(getFilename(type, id)), _ => tsplus_module_1.map(_, s => JSON.parse(s)));
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
function getIdx(index) {
|
|
84
|
-
return tsplus_module_2.map(idx => tsplus_module_1.fromNullable(idx[index.key]))
|
|
84
|
+
return tsplus_module_2.map(readIndex(index), idx => tsplus_module_1.fromNullable(idx[index.key]));
|
|
85
85
|
}
|
|
86
86
|
function readIndex(index) {
|
|
87
|
-
return tsplus_module_2.map(_ => tsplus_module_1.match(() => ({}), x => JSON.parse(x))
|
|
87
|
+
return tsplus_module_2.map(tryRead(getIdxName(type, index.doc)), _ => tsplus_module_1.match(_, () => ({}), x => JSON.parse(x)));
|
|
88
88
|
}
|
|
89
89
|
function writeIndex(index, content) {
|
|
90
90
|
return (0, _Function.pipe)(JSON.stringify(content), serialised => fu.writeTextFile(getIdxName(type, index.doc), serialised));
|
|
91
91
|
}
|
|
92
92
|
function tryRead(filePath) {
|
|
93
|
-
return tsplus_module_2.flatMap(exists => !exists ? tsplus_module_2.sync(() => tsplus_module_3.none) : tsplus_module_2.map(
|
|
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));
|
|
94
94
|
}
|
|
95
95
|
function getFilename(type, id) {
|
|
96
96
|
return `${dir}/v${schemaVersion}.${(0, _shared.getRecordName)(type, id)}.json`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diskdb.cjs","mappings":";;;;;;;;;;AAAA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAAyC;AAAA;AAAA;AAGnC,SAAUA,aAAa;EAC3B,OAAO,CACLC,IAAY,EACZC,MAAiD,EACjDC,MAA8C,EAC9CC,aAAqB,EACrBC,YAA6B,EAC7BC,GAAG,GAAG,WAAW,KACf;IACFC,UAAU,CAACD,GAAG,CAAC;IACf,MAAME,UAAU,GAAG,aAAa;IAChC,MAAMC,WAAW,GAAGC,UAAU,CAACT,IAAI,EAAEO,UAAU,CAAC;IAChD,IAAI,CAACG,WAAE,CAACC,UAAU,CAACH,WAAW,CAAC,EAAE;MAC/BE,WAAE,CAACE,aAAa,CAACJ,WAAW,EAAE,EAAE,EAAE,OAAO,CAAC;;IAG5C,OAAO;MACLK,IAAI,EAAEC,QAAQ,CAACD,IAAI,CAACA,IAAI,CAACb,IAAI,CAAC,EAAEE,MAAM,EAAEF,IAAI,CAAC;MAC7Ce,WAAW,EAAEC,MAAM;MACnBC,IAAI,EAAEH,QAAQ,CAACI,KAAK,CAACL,IAAI,CAACb,IAAI,CAAC,EAAEkB,KAAK,EAAEC,gBAAgB,CAACnB,IAAI,CAAC,EAAEA,IAAI;KACrE;IAED,SAASkB,KAAK,CAACE,MAAS,EAAEC,cAA+B;MACvD,MAAMC,OAAO,GAAGC,
|
|
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]}
|
|
@@ -26,7 +26,7 @@ function createContext() {
|
|
|
26
26
|
save: simpledb.store(find, store, bogusLock, type)
|
|
27
27
|
};
|
|
28
28
|
function find(id) {
|
|
29
|
-
return tsplus_module_3.mapOption(tsplus_module_3.flatMapOption(tsplus_module_2.map(_ => tsplus_module_1.map(s => JSON.parse(s))
|
|
29
|
+
return tsplus_module_3.mapOption(tsplus_module_3.flatMapOption(tsplus_module_2.map(storage.find((0, _shared.getRecordName)(type, id)), _ => tsplus_module_1.map(_, s => JSON.parse(s))), parseSDB), ({
|
|
30
30
|
data,
|
|
31
31
|
version
|
|
32
32
|
}) => ({
|
|
@@ -36,7 +36,7 @@ function createContext() {
|
|
|
36
36
|
}
|
|
37
37
|
function findBy(keys, eq) {
|
|
38
38
|
// Naive implementation, fine for in memory testing purposes.
|
|
39
|
-
return tsplus_module_2.map(
|
|
39
|
+
return tsplus_module_2.map(tsplus_module_2.gen(function* ($) {
|
|
40
40
|
for (const [, value] of storage) {
|
|
41
41
|
const sdb_ = JSON.parse(value);
|
|
42
42
|
const sdb = yield* $(parseSDB(sdb_));
|
|
@@ -44,25 +44,25 @@ function createContext() {
|
|
|
44
44
|
data: JSON.parse(sdb.data),
|
|
45
45
|
version: sdb.version
|
|
46
46
|
};
|
|
47
|
-
const r = yield* $(tsplus_module_2.exit(tsplus_module_2.flatMap(d => eq(keys, d) ? tsplus_module_2.sync(() => d) : tsplus_module_2.fail("not equals"))
|
|
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"))));
|
|
48
48
|
if (tsplus_module_4.isSuccess(r)) {
|
|
49
49
|
return r.value;
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
return null;
|
|
53
|
-
}));
|
|
53
|
+
}), tsplus_module_1.fromNullable);
|
|
54
54
|
}
|
|
55
55
|
function store(record, currentVersion) {
|
|
56
|
-
const version = tsplus_module_1.getOrElse(
|
|
57
|
-
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(data => JSON.stringify({
|
|
56
|
+
const version = tsplus_module_1.getOrElse(tsplus_module_1.map(currentVersion, cv => (parseInt(cv) + 1).toString()), () => "1");
|
|
57
|
+
const getData = (0, _Function.flow)(encode, _ => tsplus_module_2.map(tsplus_module_2.map(_, JSON.stringify), data => JSON.stringify({
|
|
58
58
|
version,
|
|
59
59
|
timestamp: new Date(),
|
|
60
60
|
data
|
|
61
|
-
}))
|
|
62
|
-
return tsplus_module_2.map(() => ({
|
|
61
|
+
})));
|
|
62
|
+
return tsplus_module_2.map(tsplus_module_2.flatMap(getData(record), serialised => storage.set((0, _shared.getRecordName)(type, record.id), serialised)), () => ({
|
|
63
63
|
version,
|
|
64
64
|
data: record
|
|
65
|
-
}))
|
|
65
|
+
}));
|
|
66
66
|
}
|
|
67
67
|
};
|
|
68
68
|
}
|
|
@@ -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,OAAOC,
|
|
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,OAAOC,mFAAO,CACXP,IAAI,CAAC,yBAAa,EAACH,IAAI,EAAES,EAAE,CAAC,CAAC,EACzBE,CAAC,IAAIC,qBAAC,EAAKC,CAAC,IAAIC,IAAI,CAACC,KAAK,CAACF,CAAC,CAAC,CAAC,CAAC,EACxBnB,QAAQ,CAAC,EACb,CAAC;QAAEsB,IAAI;QAAEC;MAAO,CAAE,MAAM;QAC9BD,IAAI,EAAEF,IAAI,CAACC,KAAK,CAACC,IAAI,CAAO;QAC5BC;OACD,CAAC,CAAC;IACP;IAEA,SAASZ,MAAM,CAAuBa,IAAO,EAAEC,EAAkB;MAC/D;MACA,OAAOC,wCAAW,WAAUC,CAAC;QAC3B,KAAK,MAAM,GAAGC,KAAK,CAAC,IAAI7B,OAAO,EAAE;UAC/B,MAAM8B,IAAI,GAAGT,IAAI,CAACC,KAAK,CAACO,KAAK,CAAC;UAC9B,MAAME,GAAG,GAAG,OAAOH,CAAC,CAAC3B,QAAQ,CAAC6B,IAAI,CAAC,CAAC;UACpC,MAAME,EAAE,GAAG;YAAET,IAAI,EAAEF,IAAI,CAACC,KAAK,CAACS,GAAG,CAACR,IAAI,CAAO;YAAEC,OAAO,EAAEO,GAAG,CAACP;UAAO,CAAE;UACrE,MAAMS,CAAC,GAAG,OAAOL,CAAC,sBAChBD,8BAAM,CAACK,EAAE,CAACT,IAAI,CAAC,EAASW,CAAC,IACvBR,EAAE,CAACD,IAAI,EAAES,CAAiB,CAAC,GACvBP,2BAAOO,CAAC,CAAC,GACTP,qBAAY,YAAY,CAAC,CAC9B,EACF;UACD,IAAIQ,2BAAC,CAAY,EAAE;YACjB,OAAOF,CAAC,CAACJ,KAAK;;;QAGlB,OAAO,IAAI;MACb,CAAC,CAAC,+BAAyB;IAC7B;IAEA,SAASf,KAAK,CAACsB,MAAS,EAAEC,cAA+B;MACvD,MAAMb,OAAO,GAAGL,4DAAc,EACvBmB,EAAE,IAAI,CAACC,QAAQ,CAACD,EAAE,CAAC,GAAG,CAAC,EAAEE,QAAQ,EAAE,CAAC,EAC9B,MAAM,GAAG,CAAC;MAEvB,MAAMC,OAAO,GAAG,kBAAI,EAClBjC,MAAM,EACNU,CAAC,IAAIS,yCAAC,EAAKN,IAAI,CAACqB,SAAS,CAAC,EAAKnB,IAAI,IAAIF,IAAI,CAACqB,SAAS,CAAC;QAAElB,OAAO;QAAEmB,SAAS,EAAE,IAAIC,IAAI,EAAE;QAAErB;MAAI,CAAE,CAAC,CAAC,CACjG;MACD,OAAOI,mDAAO,CAACS,MAAM,CAAC,EACXS,UAAU,IAAI7C,OAAO,CAAC8C,GAAG,CAAC,yBAAa,EAACvC,IAAI,EAAE6B,MAAM,CAACpB,EAAE,CAAC,EAAE6B,UAAU,CAAC,CAAC,EAC1E,OAAO;QAAErB,OAAO;QAAED,IAAI,EAAEa;MAAM,CAAsB,EAAC;IAC9D;EACF,CAAC;AACH;AAEA,SAASrB,SAAS;EAChB,OAAOY,qDAA2B,MAAKV,oBAAY,CAAC;AACtD","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]}
|
|
@@ -16,20 +16,20 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
16
16
|
// prev[cur] = 1
|
|
17
17
|
// return prev
|
|
18
18
|
// }, {} as Record<string, number>)
|
|
19
|
-
const setup = (type, indexes) => tsplus_module_1.flatMap(db => tsplus_module_1.tryPromise(() => db.
|
|
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)));
|
|
20
20
|
function createContext() {
|
|
21
21
|
return (type, encode, decode,
|
|
22
22
|
// schemaVersion: string,
|
|
23
23
|
indexes) => {
|
|
24
|
-
return tsplus_module_1.map(() => ({
|
|
24
|
+
return tsplus_module_1.map(setup(type, indexes), () => ({
|
|
25
25
|
find: simpledb.find(find, decode, type),
|
|
26
26
|
findBy,
|
|
27
27
|
save: simpledb.storeDirectly(store, type)
|
|
28
|
-
}))
|
|
28
|
+
}));
|
|
29
29
|
function find(id) {
|
|
30
|
-
return tsplus_module_3.mapOption(tsplus_module_1.map(
|
|
30
|
+
return tsplus_module_3.mapOption(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne({
|
|
31
31
|
_id: id
|
|
32
|
-
})))
|
|
32
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
33
33
|
data,
|
|
34
34
|
version
|
|
35
35
|
}) => ({
|
|
@@ -38,32 +38,27 @@ function createContext() {
|
|
|
38
38
|
}));
|
|
39
39
|
}
|
|
40
40
|
function findBy(keys) {
|
|
41
|
-
return tsplus_module_3.mapOption(tsplus_module_1.map(
|
|
41
|
+
return tsplus_module_3.mapOption(tsplus_module_1.map(tsplus_module_1.flatMap(Mongo.db, db => tsplus_module_1.tryPromise(() => db.collection(type).findOne(keys, {
|
|
42
42
|
projection: {
|
|
43
43
|
_id: 1
|
|
44
44
|
}
|
|
45
|
-
})))
|
|
45
|
+
}))), tsplus_module_2.fromNullable), ({
|
|
46
46
|
_id
|
|
47
47
|
}) => _id);
|
|
48
48
|
}
|
|
49
49
|
function store(record, currentVersion) {
|
|
50
50
|
return tsplus_module_1.gen(function* ($) {
|
|
51
|
-
const version = tsplus_module_2.getOrElse(
|
|
51
|
+
const version = tsplus_module_2.getOrElse(tsplus_module_2.map(currentVersion, cv => (parseInt(cv) + 1).toString()), () => "1");
|
|
52
52
|
const db = yield* $(Mongo.db);
|
|
53
53
|
const data = yield* $(encode(record));
|
|
54
|
-
yield* $(tsplus_module_2.match(() => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.collection(type).insertOne({
|
|
54
|
+
yield* $(tsplus_module_2.match(currentVersion, () => tsplus_module_1.orDie(tsplus_module_1.asUnit(tsplus_module_1.tryPromise(() => db.collection(type).insertOne({
|
|
55
55
|
_id: record.id,
|
|
56
56
|
version,
|
|
57
57
|
timestamp: new Date(),
|
|
58
58
|
data
|
|
59
59
|
}, {
|
|
60
60
|
checkKeys: false // support for keys with `.` and `$`. NOTE: you can write them, read them, but NOT query for them.
|
|
61
|
-
})))), currentVersion => tsplus_module_1.flatMap(
|
|
62
|
-
if (!x.modifiedCount) {
|
|
63
|
-
return tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id));
|
|
64
|
-
}
|
|
65
|
-
return tsplus_module_3.unit;
|
|
66
|
-
})(tsplus_module_1.orDie(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({
|
|
67
62
|
_id: record.id,
|
|
68
63
|
version: currentVersion
|
|
69
64
|
}, {
|
|
@@ -72,7 +67,12 @@ function createContext() {
|
|
|
72
67
|
data
|
|
73
68
|
}, {
|
|
74
69
|
upsert: false
|
|
75
|
-
})))
|
|
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
|
+
})));
|
|
76
76
|
return {
|
|
77
77
|
version,
|
|
78
78
|
data: record
|
|
@@ -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]}
|
|
@@ -20,40 +20,40 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
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, _ => tsplus_module_1.map(JSON.stringify)
|
|
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(tsplus_module_2.flatMapOption(RED.hmgetAll(getKey(id)), v => tsplus_module_1.mapError(
|
|
30
|
+
return tsplus_module_1.orDie(tsplus_module_2.flatMapOption(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
|
-
const version = tsplus_module_3.getOrElse(
|
|
40
|
-
return tsplus_module_3.match(() => tsplus_module_1.scoped(tsplus_module_1.zipRight(tsplus_module_1.map(() => (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}))(tsplus_module_1.orDie(tsplus_module_1.zipRight(setIndex(record))(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
39
|
+
const version = tsplus_module_3.getOrElse(tsplus_module_3.map(currentVersion, cv => (parseInt(cv) + 1).toString()), () => "1");
|
|
40
|
+
return tsplus_module_3.match(currentVersion, () => 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_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))), () => tsplus_module_1.map(() => ({
|
|
46
|
+
})), setIndex(record))), () => ({
|
|
50
47
|
version,
|
|
51
48
|
data: record
|
|
52
|
-
}))(tsplus_module_1.orDie(tsplus_module_1.flatMap(data => hmSetRec(getKey(record.id), {
|
|
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
|
+
})));
|
|
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 tsplus_module_1.map(_ => tsplus_module_3.map(i => i)
|
|
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 tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(err => new _shared.CouldNotAquireDbLockException(type, lockKey, err),
|
|
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
82
|
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
83
|
-
}))
|
|
83
|
+
})), l => l.release);
|
|
84
84
|
}
|
|
85
85
|
function lockRedisRecord(id) {
|
|
86
86
|
// acquire
|
|
87
|
-
return tsplus_module_1.acquireRelease(tsplus_module_1.mapBoth(err => new _shared.CouldNotAquireDbLockException(type, id, err),
|
|
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
91
|
release: tsplus_module_1.orDie(tsplus_module_1.tryPromise(() => lock.unlock()))
|
|
92
|
-
}))
|
|
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 tsplus_module_1.flatMap(client => tsplus_module_1.uninterruptible(tsplus_module_1.async(res => {
|
|
109
|
+
return tsplus_module_1.flatMap(RED.client, client => tsplus_module_1.uninterruptible(tsplus_module_1.async(res => {
|
|
110
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
|
-
})))
|
|
111
|
+
})));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
class RedisSerializedDBRecord extends MO.Model()({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redisdb.cjs","mappings":";;;;;;;;;;AAEA;AACA;AAGA;AAEA;AACA;AAAyC;AAAA;AATzC;;AAWA,MAAMA,GAAG,GAAG,EAAE,GAAG,IAAI;AAEf,SAAUC,aAAa;EAC3B,OAAO,CACLC,IAAY,EACZC,MAAiD,EACjDC,MAA8C,EAC9CC,aAAqB,EACrBC,YAA6B,KAC3B;IACF,MAAMC,OAAO,GAAG,kBAAI,EAACJ,MAAM,EAAEK,CAAC,IAAIC,
|
|
1
|
+
{"version":3,"file":"redisdb.cjs","mappings":"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","names":["ttl","createContext","type","encode","decode","schemaVersion","makeIndexKey","getData","_","tsplus_module_1","JSON","stringify","find","simpledb","findByIndex","getIdx","save","store","lockRedisRecord","id","tsplus_module_2","hmgetAll","getKey","v","RedisSerializedDBRecord","Parser","MO","condemnFail","data","version","parse","e","ConnectionException","Error","toString","record","currentVersion","tsplus_module_3","cv","parseInt","hmSetRec","timestamp","Date","setIndex","getIndex","index","setIdx","lockIndex","lockRedisIdx","hget","getIdxKey","key","i","r","RED","hset","lockKey","getIdxLockKey","lock","err","CouldNotAquireDbLockException","release","unlock","l","getLockKey","doc","val","enc","Encoder","client","res","hmset","Model","prop","string","date"],"sourceRoot":"","sources":["../../../_src/services/simpledb/redisdb.ts"],"sourcesContent":[null]}
|
|
@@ -41,36 +41,36 @@ function makeLiveRecordCache() {
|
|
|
41
41
|
// module tag
|
|
42
42
|
const RecordCache = tsplus_module_2.Tag();
|
|
43
43
|
exports.RecordCache = RecordCache;
|
|
44
|
-
const LiveRecordCache =
|
|
44
|
+
const LiveRecordCache = tsplus_module_1.toLayer(tsplus_module_1.sync(() => makeLiveRecordCache()), RecordCache);
|
|
45
45
|
exports.LiveRecordCache = LiveRecordCache;
|
|
46
46
|
const getM = type => eff => tsplus_module_1.gen(function* ($) {
|
|
47
47
|
const {
|
|
48
48
|
get
|
|
49
49
|
} = yield* $(tsplus_module_1.service(RecordCache));
|
|
50
|
-
return yield* $(tsplus_module_1.flatMap(
|
|
50
|
+
return yield* $(tsplus_module_1.flatMap(get(type), eff));
|
|
51
51
|
});
|
|
52
52
|
function find(tryRead, decode, type) {
|
|
53
53
|
const getCache = getM(type);
|
|
54
54
|
const read = id => tsplus_module_3.mapOption(tsplus_module_3.tapOption(tsplus_module_3.flatMapOption(tryRead(id), ({
|
|
55
55
|
data,
|
|
56
56
|
version
|
|
57
|
-
}) => tsplus_module_1.mapBoth(err => new InvalidStateError("DB serialisation Issue", err), data => ({
|
|
57
|
+
}) => tsplus_module_1.mapBoth(decode(data), err => new InvalidStateError("DB serialisation Issue", err), data => ({
|
|
58
58
|
data,
|
|
59
59
|
version
|
|
60
|
-
}))
|
|
61
|
-
return id => getCache(c => tsplus_module_1.orElse(
|
|
60
|
+
}))), r => getCache(c => c.set(id, r))), r => r.data);
|
|
61
|
+
return id => getCache(c => tsplus_module_1.orElse(tsplus_module_3.mapOption(c.find(id), existing => existing.data), () => read(id)));
|
|
62
62
|
}
|
|
63
63
|
function storeDirectly(save, type) {
|
|
64
64
|
const getCache = getM(type);
|
|
65
|
-
return record => getCache(c => tsplus_module_1.map(
|
|
65
|
+
return record => getCache(c => tsplus_module_1.map(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.mapOption(c.find(record.id), x => x.version), cv => save(record, cv)), r => c.set(record.id, r)), r => r.data));
|
|
66
66
|
}
|
|
67
67
|
function store(tryRead, save, lock, type) {
|
|
68
68
|
const getCache = getM(type);
|
|
69
|
-
return record => getCache(c => tsplus_module_1.map(
|
|
69
|
+
return record => getCache(c => tsplus_module_1.map(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.mapOption(c.find(record.id), x => x.version), _ => tsplus_module_5.match(_, () => save(record, tsplus_module_4.none), confirmVersionAndSave(record))), r => c.set(record.id, r)), r => r.data));
|
|
70
70
|
function confirmVersionAndSave(record) {
|
|
71
|
-
return cv => tsplus_module_1.scoped(tsplus_module_1.zipRight(tsplus_module_1.zipRight(
|
|
71
|
+
return cv => tsplus_module_1.scoped(tsplus_module_1.zipRight(lock(record.id), tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_1.flatMap(tryRead(record.id), _ => tsplus_module_5.match(_, () => tsplus_module_1.fail(new InvalidStateError("record is gone")), tsplus_module_1.succeed)), ({
|
|
72
72
|
version
|
|
73
|
-
}) => version !== cv ? tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id)) : tsplus_module_3.unit)
|
|
73
|
+
}) => version !== cv ? tsplus_module_1.fail(new _shared.OptimisticLockException(type, record.id)) : tsplus_module_3.unit), save(record, tsplus_module_5.some(cv)))));
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
//# sourceMappingURL=simpledb.cjs.map
|