@effect-app/infra 0.15.3 → 0.16.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/express/schema/requestHandler.cjs +5 -5
- package/_cjs/api/express/schema/requestHandler.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +1 -1
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/routing.cjs +5 -5
- package/_cjs/api/routing.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +1 -1
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +2 -2
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +1 -1
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +1 -1
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +2 -2
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +2 -2
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +4 -4
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/api/express/schema/requestHandler.ts +10 -10
- package/_src/api/express/schema/routing.ts +18 -18
- package/_src/api/routing.ts +5 -5
- package/_src/rateLimit.ts +2 -2
- package/_src/services/Operations/live.ts +5 -5
- package/_src/services/Operations/service.ts +1 -1
- package/_src/services/Repository.ts +10 -10
- package/_src/services/Store/Cosmos.ts +7 -7
- package/_src/services/Store/Memory.ts +1 -1
- package/_src/services/Store/Redis.ts +1 -1
- package/_src/services/Store/index.test.ts.bak +2 -2
- package/_src/services/Store/service.ts +1 -1
- package/_src/services/Store/utils.ts +17 -17
- package/_src/services/simpledb/cosmosdb.ts +2 -2
- package/_src/services/simpledb/diskdb.ts +3 -3
- package/_src/services/simpledb/memdb.ts +2 -2
- package/_src/services/simpledb/mongodb.ts +3 -3
- package/_src/services/simpledb/redisdb.ts +1 -1
- package/_src/services/simpledb/shared.ts +2 -2
- package/_src/services/simpledb/simpledb.ts +6 -6
- package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
- package/dist/api/express/schema/requestHandler.d.ts +6 -6
- package/dist/api/express/schema/requestHandler.d.ts.map +1 -1
- package/dist/api/express/schema/requestHandler.js +6 -6
- package/dist/api/express/schema/routing.d.ts +1 -1
- package/dist/api/express/schema/routing.js +2 -2
- package/dist/api/routing.js +6 -6
- package/dist/rateLimit.d.ts +2 -2
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +2 -2
- package/dist/services/Operations/live.js +1 -1
- package/dist/services/Operations/service.d.ts +2 -2
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Repository.d.ts +20 -20
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +3 -3
- package/dist/services/Store/Cosmos.js +2 -2
- package/dist/services/Store/Memory.js +1 -1
- package/dist/services/Store/Redis.js +1 -1
- package/dist/services/Store/service.d.ts +2 -2
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/utils.d.ts +1 -1
- package/dist/services/Store/utils.js +1 -1
- package/dist/services/simpledb/cosmosdb.d.ts +3 -3
- package/dist/services/simpledb/cosmosdb.js +1 -1
- package/dist/services/simpledb/diskdb.d.ts +3 -3
- package/dist/services/simpledb/diskdb.js +1 -1
- package/dist/services/simpledb/memdb.d.ts +3 -3
- package/dist/services/simpledb/memdb.js +2 -2
- package/dist/services/simpledb/mongodb.d.ts +3 -3
- package/dist/services/simpledb/mongodb.js +3 -3
- package/dist/services/simpledb/redisdb.d.ts +3 -3
- package/dist/services/simpledb/redisdb.js +3 -3
- package/dist/services/simpledb/shared.d.ts +2 -2
- package/dist/services/simpledb/shared.d.ts.map +1 -1
- package/dist/services/simpledb/shared.js +1 -1
- package/dist/services/simpledb/simpledb.d.ts +4 -4
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +5 -5
- package/package.json +6 -6
- package/tsconfig.json +1 -2
- package/tsconfig.json.bak +1 -2
|
@@ -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,iDAAK,CAACC,EAAE,EACDA,EAAE,IAAID,2BAAkB,MAAMC,EAAE,CAACC,gBAAgB,CAACJ,IAAI,CAAC,CAACK,KAAK,CAACC,GAAG,IAAIC,OAAO,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC,CAAC,CAAC,EACrFH,EAAE,IAAID,2BAAkB,MAAMC,EAAE,CAACM,UAAU,CAACT,IAAI,CAAC,CAACU,aAAa,CAACT,OAAO,CAAC,CAAC,CAAC;AAEjF,SAAUU,aAAa;EAC3B,OAAO,CACLX,IAAY,EACZY,MAAiD,EACjDC,MAA8C;EAC9C;EACAZ,OAA2B,KACzB;IACF,OAAOC,yBAAK,CAACF,IAAI,EAAEC,OAAO,CAAC,EAAK,OAAO;MACrCa,IAAI,EAAEC,QAAQ,CAACD,IAAI,CAACA,IAAI,EAAED,MAAM,EAAEb,IAAI,CAAC;MACvCgB,MAAM;MACNC,IAAI,EAAEF,QAAQ,CAACG,aAAa,CAACC,KAAK,EAAEnB,IAAI;KACzC,CAAC,CAAC;IAEH,SAASc,IAAI,CAACM,EAAU;MACtB,OAAOC,
|
|
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]}
|
|
@@ -27,7 +27,7 @@ function createContext() {
|
|
|
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.
|
|
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
|
}) => ({
|
|
@@ -37,7 +37,7 @@ function createContext() {
|
|
|
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(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.
|
|
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(tsplus_module_2.zipRightOption(getIndex(record), tsplus_module_1.fail(() => new Error("Combination already exists, abort"))), getData(record))
|
|
41
41
|
// TODO: instead use MULTI & EXEC to make it in one command?
|
|
42
42
|
, data => hmSetRec(getKey(record.id), {
|
|
43
43
|
version,
|
|
@@ -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,qBAAC,EAAKC,IAAI,CAACC,SAAS,CAAC,CAAC;IACxD,OAAO;MACLC,IAAI,EAAEC,QAAQ,CAACD,IAAI,CAACA,IAAI,EAAER,MAAM,EAAEF,IAAI,CAAC;MACvCY,WAAW,EAAEC,MAAM;MACnBC,IAAI,EAAEH,QAAQ,CAACI,KAAK,CAACL,IAAI,EAAEK,KAAK,EAAEC,eAAe,EAAEhB,IAAI;KACxD;IAED,SAASU,IAAI,CAACO,EAAU;MACtB,6BAAOC,
|
|
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]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.cjs","mappings":";;;;;;;;;;;;AAAA;AAAwC;AAAA;AAGxC,MAAMA,SAAS;EACbC,YAAmBC,OAAe;IAAf,YAAO,GAAPA,OAAO;EAAW;;AAEjC,MAAOC,6BAA8B,SAAQH,SAAS;EAE1DC,YAAqBG,IAAY,EAAWC,EAAU,EAAWC,KAAY;IAC3E,KAAK,CAAC,2BAA2BF,IAAI,KAAKC,EAAE,EAAE,CAAC;IAD5B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IAAmB,UAAK,GAALC,KAAK;IAD7D,cAAS,GAAG,+BAA+B;EAGpD;;AACD;AAEK,MAAOC,uBAAwB,SAAQC,KAAK;EAEhDP,YAAqBG,IAAY,EAAWC,EAAU;IACpD,KAAK,CAAC,YAAYD,IAAI,IAAIC,EAAE,iBAAiB,CAAC;IAD3B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IADrC,cAAS,GAAG,yBAAyB;EAG9C;;AACD;AAEK,MAAOI,mBAAoB,SAAQD,KAAK;EAE5CP,YAAqBK,KAAY;IAC/B,KAAK,CAAC,4BAA4B,CAAC;IADhB,UAAK,GAALA,KAAK;IADjB,cAAS,GAAG,qBAAqB;EAG1C;;AACD;AAMK,MAAOI,kBAAmB,SAAQC,EAAE,CAACC,KAAK,EAAsB,CAAC;EACrEC,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM,CAAC;EAC3BC,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;EAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM;CACxB,CAAC;AAEF;AAAA;AACM,SAAUI,sBAAsB,CAACC,CAAY;EACjD,OAAOT,EAAE,CAACU,KAAK,CAAC;IACdR,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACW,MAAM,CAAC;IAC3BN,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;IAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACM,CAAC;GAChB,CAAC;AACJ;AAYM,SAAUG,YAAY,CAACnB,IAAY,EAAEC,EAAU;EACnD,OAAO,GAAGD,IAAI,QAAQC,EAAE,EAAE;AAC5B;AAEM,SAAUmB,aAAa,CAACpB,IAAY,EAAEC,EAAU;EACpD,OAAO,GAAGD,IAAI,MAAMC,EAAE,EAAE;AAC1B;AAEM,SAAUoB,OAAO;EACrB,MAAMC,GAAG,GAAG,IAAIC,GAAG,EAAW;EAC9B,OAAO;IACLC,IAAI,EAAGC,CAAO,IAAKC,qBAAO,MAAMC,
|
|
1
|
+
{"version":3,"file":"shared.cjs","mappings":";;;;;;;;;;;;AAAA;AAAwC;AAAA;AAGxC,MAAMA,SAAS;EACbC,YAAmBC,OAAe;IAAf,YAAO,GAAPA,OAAO;EAAW;;AAEjC,MAAOC,6BAA8B,SAAQH,SAAS;EAE1DC,YAAqBG,IAAY,EAAWC,EAAU,EAAWC,KAAY;IAC3E,KAAK,CAAC,2BAA2BF,IAAI,KAAKC,EAAE,EAAE,CAAC;IAD5B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IAAmB,UAAK,GAALC,KAAK;IAD7D,cAAS,GAAG,+BAA+B;EAGpD;;AACD;AAEK,MAAOC,uBAAwB,SAAQC,KAAK;EAEhDP,YAAqBG,IAAY,EAAWC,EAAU;IACpD,KAAK,CAAC,YAAYD,IAAI,IAAIC,EAAE,iBAAiB,CAAC;IAD3B,SAAI,GAAJD,IAAI;IAAmB,OAAE,GAAFC,EAAE;IADrC,cAAS,GAAG,yBAAyB;EAG9C;;AACD;AAEK,MAAOI,mBAAoB,SAAQD,KAAK;EAE5CP,YAAqBK,KAAY;IAC/B,KAAK,CAAC,4BAA4B,CAAC;IADhB,UAAK,GAALA,KAAK;IADjB,cAAS,GAAG,qBAAqB;EAG1C;;AACD;AAMK,MAAOI,kBAAmB,SAAQC,EAAE,CAACC,KAAK,EAAsB,CAAC;EACrEC,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM,CAAC;EAC3BC,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;EAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACH,EAAE,CAACI,MAAM;CACxB,CAAC;AAEF;AAAA;AACM,SAAUI,sBAAsB,CAACC,CAAY;EACjD,OAAOT,EAAE,CAACU,KAAK,CAAC;IACdR,OAAO,EAAEF,EAAE,CAACG,IAAI,CAACH,EAAE,CAACW,MAAM,CAAC;IAC3BN,SAAS,EAAEL,EAAE,CAACG,IAAI,CAACH,EAAE,CAACM,IAAI,CAAC;IAC3BC,IAAI,EAAEP,EAAE,CAACG,IAAI,CAACM,CAAC;GAChB,CAAC;AACJ;AAYM,SAAUG,YAAY,CAACnB,IAAY,EAAEC,EAAU;EACnD,OAAO,GAAGD,IAAI,QAAQC,EAAE,EAAE;AAC5B;AAEM,SAAUmB,aAAa,CAACpB,IAAY,EAAEC,EAAU;EACpD,OAAO,GAAGD,IAAI,MAAMC,EAAE,EAAE;AAC1B;AAEM,SAAUoB,OAAO;EACrB,MAAMC,GAAG,GAAG,IAAIC,GAAG,EAAW;EAC9B,OAAO;IACLC,IAAI,EAAGC,CAAO,IAAKC,qBAAO,MAAMC,6BAAoBL,GAAG,CAACM,GAAG,CAACH,CAAC,CAAC,CAAC,CAAC;IAChE,CAACI,MAAM,CAACC,QAAQ,GAAG,MAAMR,GAAG,CAACO,MAAM,CAACC,QAAQ,CAAC,EAAE;IAC/CC,GAAG,EAAE,CAACN,CAAO,EAAEO,CAAI,KACjBN,qBAAO,MAAK;MACVJ,GAAG,CAACS,GAAG,CAACN,CAAC,EAAEO,CAAC,CAAC;IACf,CAAC;GACkB;AACzB","names":["BaseError","constructor","message","CouldNotAquireDbLockException","type","id","error","OptimisticLockException","Error","ConnectionException","SerializedDBRecord","MO","Model","version","prop","string","timestamp","date","data","makeSerialisedDBRecord","s","props","number","getIndexName","getRecordName","makeMap","map","Map","find","k","tsplus_module_2","tsplus_module_1","get","Symbol","iterator","set","v"],"sourceRoot":"","sources":["../../../_src/services/simpledb/shared.ts"],"sourcesContent":[null]}
|
|
@@ -51,22 +51,22 @@ const getM = type => eff => tsplus_module_1.gen(function* ($) {
|
|
|
51
51
|
});
|
|
52
52
|
function find(tryRead, decode, type) {
|
|
53
53
|
const getCache = getM(type);
|
|
54
|
-
const read = id => tsplus_module_3.
|
|
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
57
|
}) => tsplus_module_1.mapBoth(decode(data), err => new InvalidStateError("DB serialisation Issue", err), data => ({
|
|
58
58
|
data,
|
|
59
59
|
version
|
|
60
60
|
}))), r => getCache(c => c.set(id, r))), r => r.data);
|
|
61
|
-
return id => getCache(c => tsplus_module_1.orElse(tsplus_module_3.
|
|
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(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.
|
|
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(tsplus_module_1.tap(tsplus_module_1.flatMap(tsplus_module_3.
|
|
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
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simpledb.cjs","mappings":";;;;;;;;;;;;;;;AACA;AAA8D;AAAA;AAGxD,MAAOA,iBAAiB;EAE5BC,YAAqBC,OAAe,EAAWC,OAAiB;IAA3C,YAAO,GAAPD,OAAO;IAAmB,YAAO,GAAPC,OAAO;IAD7C,SAAI,GAAG,mBAAmB;EACgC;;AACpE;AAEK,SAAUC,mBAAmB;EACjC,MAAMC,CAAC,GAAG,IAAIC,GAAG,EAAsC;EACvD,OAAO;IACLC,GAAG,EAAMC,IAAY,IACnBC,qBAAO,MAAK;MACV,MAAMC,EAAE,GAAGL,CAAC,CAACE,GAAG,CAACC,IAAI,CAAC;MACtB,IAAI,CAACE,EAAE,EAAE;QACP,MAAMC,EAAE,GAAG,mBAAO,GAAmB;QACrCN,CAAC,CAACO,GAAG,CAACJ,IAAI,EAAEG,EAAE,CAAC;QACf,OAAOA,EAAwC;;MAEjD,OAAOD,EAAwC;IACjD,CAAC;GACJ;AACH;AAIA;AACO,MAAMG,WAAW,GAAGC,mBAAG,EAAe;AAAA;AAEtC,MAAMC,eAAe,GAAGN,mDAAOL,mBAAmB,EAAE,CAAC,EAASS,WAAW,CAAC;AAAA;AAEjF,MAAMG,IAAI,GAAOR,IAAY,IAAeS,GAA+D,IACzGR,oBAAW,WAAUS,CAAC;EACpB,MAAM;IAAEX;EAAG,CAAE,GAAG,OAAOW,CAAC,yBAACL,WAAW,EAAQ;EAC5C,OAAO,OAAOK,CAAC,CAACT,2BAAG,CAAID,IAAI,CAAC,EAASS,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEE,SAAUE,IAAI,CAClBC,
|
|
1
|
+
{"version":3,"file":"simpledb.cjs","mappings":";;;;;;;;;;;;;;;AACA;AAA8D;AAAA;AAGxD,MAAOA,iBAAiB;EAE5BC,YAAqBC,OAAe,EAAWC,OAAiB;IAA3C,YAAO,GAAPD,OAAO;IAAmB,YAAO,GAAPC,OAAO;IAD7C,SAAI,GAAG,mBAAmB;EACgC;;AACpE;AAEK,SAAUC,mBAAmB;EACjC,MAAMC,CAAC,GAAG,IAAIC,GAAG,EAAsC;EACvD,OAAO;IACLC,GAAG,EAAMC,IAAY,IACnBC,qBAAO,MAAK;MACV,MAAMC,EAAE,GAAGL,CAAC,CAACE,GAAG,CAACC,IAAI,CAAC;MACtB,IAAI,CAACE,EAAE,EAAE;QACP,MAAMC,EAAE,GAAG,mBAAO,GAAmB;QACrCN,CAAC,CAACO,GAAG,CAACJ,IAAI,EAAEG,EAAE,CAAC;QACf,OAAOA,EAAwC;;MAEjD,OAAOD,EAAwC;IACjD,CAAC;GACJ;AACH;AAIA;AACO,MAAMG,WAAW,GAAGC,mBAAG,EAAe;AAAA;AAEtC,MAAMC,eAAe,GAAGN,mDAAOL,mBAAmB,EAAE,CAAC,EAASS,WAAW,CAAC;AAAA;AAEjF,MAAMG,IAAI,GAAOR,IAAY,IAAeS,GAA+D,IACzGR,oBAAW,WAAUS,CAAC;EACpB,MAAM;IAAEX;EAAG,CAAE,GAAG,OAAOW,CAAC,yBAACL,WAAW,EAAQ;EAC5C,OAAO,OAAOK,CAAC,CAACT,2BAAG,CAAID,IAAI,CAAC,EAASS,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEE,SAAUE,IAAI,CAClBC,OAA+D,EAC/DC,MAA8C,EAC9Cb,IAAY;EAEZ,MAAMc,QAAQ,GAAGN,IAAI,CAAIR,IAAI,CAAC;EAC9B,MAAMe,IAAI,GAAIC,EAAU,IACtBC,yFAAO,CAACD,EAAE,CAAC,EACG,CAAC;IAAEE,IAAI;IAAEC;EAAO,CAAE,KAC5BlB,8BAAM,CAACiB,IAAI,CAAC,EACVE,GAAG,IAAI,IAAI5B,iBAAiB,CAAC,wBAAwB,EAAE4B,GAAG,CAAC,EAC3DF,IAAI,KAAK;IAAEA,IAAI;IAAEC;EAAO,CAAE,CAAC,CAC5B,CACF,EACOE,CAAC,IAAIP,QAAQ,CAACQ,CAAC,IAAIA,CAAC,CAAClB,GAAG,CAACY,EAAE,EAAEK,CAAC,CAAC,CAAC,CAAC,EACjCA,CAAC,IAAIA,CAAC,CAACH,IAAI,CAAC;EAExB,OAAQF,EAAU,IAChBF,QAAQ,CAACQ,CAAC,IACRrB,kDAAC,CACEU,IAAI,CAACK,EAAE,CAAC,EACDO,QAAQ,IAAIA,QAAQ,CAACL,IAAI,CAAC,EAC1B,MAAMH,IAAI,CAACC,EAAE,CAAC,CAAC,CAC1B;AACL;AAEM,SAAUQ,aAAa,CAC3BC,IAAuE,EACvEzB,IAAY;EAEZ,MAAMc,QAAQ,GAAGN,IAAI,CAAIR,IAAI,CAAC;EAC9B,OAAQ0B,MAAS,IACfZ,QAAQ,CAACQ,CAAC,IACRrB,2FAAC,CACEU,IAAI,CAACe,MAAM,CAACV,EAAE,CAAC,EACRW,CAAC,IAAIA,CAAC,CAACR,OAAO,CAAC,EACdS,EAAE,IAAIH,IAAI,CAACC,MAAM,EAAEE,EAAE,CAAC,CAAC,EAC3BP,CAAC,IAAIC,CAAC,CAAClB,GAAG,CAACsB,MAAM,CAACV,EAAE,EAAEK,CAAC,CAAC,CAAC,EACzBA,CAAC,IAAIA,CAAC,CAACH,IAAI,CAAC,CACpB;AACL;AAEM,SAAUW,KAAK,CACnBjB,OAA+D,EAC/Da,IAAuE,EACvEK,IAAqD,EACrD9B,IAAY;EAEZ,MAAMc,QAAQ,GAAGN,IAAI,CAAIR,IAAI,CAAC;EAC9B,OAAQ0B,MAAS,IACfZ,QAAQ,CAACQ,CAAC,IACRrB,2FAAC,CACEU,IAAI,CAACe,MAAM,CAACV,EAAE,CAAC,EACRW,CAAC,IAAIA,CAAC,CAACR,OAAO,CAAC,EACdY,CAAC,IAAIC,sBAAQ,MAAMP,IAAI,CAACC,MAAM,uBAAc,EAAEO,qBAAqB,CAACP,MAAM,CAAC,EAAtEK,CAAC,CAAsE,CAAC,EACjFV,CAAC,IAAIC,CAAC,CAAClB,GAAG,CAACsB,MAAM,CAACV,EAAE,EAAEK,CAAC,CAAC,CAAC,EACzBA,CAAC,IAAIA,CAAC,CAACH,IAAI,CAAC,CACpB;EAEH,SAASe,qBAAqB,CAACP,MAAS;IACtC,OAAQE,EAAW,IAAI3B,uBACrBA,6BAAI,CAACyB,MAAM,CAACV,EAAE,CAAC,EACbf,4EAAO,CAACyB,MAAM,CAACV,EAAE,CAAC,EACPe,CAAC,IACRC,sBACE,MAAM/B,qBAAY,IAAIT,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,2BAD5DuC,CAAC,CAGA,CACF,EACI,CAAC;MAAEZ;IAAO,CAAE,KACfA,OAAO,KAAKS,EAAE,GACV3B,qBAAY,IAAIiC,+BAAuB,CAAClC,IAAI,EAAE0B,MAAM,CAACV,EAAE,CAAC,CAAC,GAC1DC,oBAAY,CAChB,EACSQ,IAAI,CAACC,MAAM,EAAEM,qBAAOJ,EAAE,CAAC,CAAC,CAAC,CACtC,CAAO;EACZ;AACF","names":["InvalidStateError","constructor","message","details","makeLiveRecordCache","m","Map","get","type","tsplus_module_1","ex","nm","set","RecordCache","tsplus_module_2","LiveRecordCache","getM","eff","$","find","tryRead","decode","getCache","read","id","tsplus_module_3","data","version","err","r","c","existing","storeDirectly","save","record","x","cv","store","lock","_","tsplus_module_5","confirmVersionAndSave","OptimisticLockException"],"sourceRoot":"","sources":["../../../_src/services/simpledb/simpledb.ts"],"sourcesContent":[null]}
|
|
@@ -301,7 +301,7 @@ export function makeRequestParsers<
|
|
|
301
301
|
>["Request"]
|
|
302
302
|
): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
|
|
303
303
|
const ph = Effect(
|
|
304
|
-
|
|
304
|
+
Option.fromNullable(Request.Headers)
|
|
305
305
|
.map(s => s)
|
|
306
306
|
.map(Parser.for)
|
|
307
307
|
.map(MO.condemn)
|
|
@@ -309,7 +309,7 @@ export function makeRequestParsers<
|
|
|
309
309
|
const parseHeaders = (u: unknown) => ph.flatMapOpt(d => d(u))
|
|
310
310
|
|
|
311
311
|
const pq = Effect(
|
|
312
|
-
|
|
312
|
+
Option.fromNullable(Request.Query)
|
|
313
313
|
.map(s => s)
|
|
314
314
|
.map(Parser.for)
|
|
315
315
|
.map(MO.condemn)
|
|
@@ -317,7 +317,7 @@ export function makeRequestParsers<
|
|
|
317
317
|
const parseQuery = (u: unknown) => pq.flatMapOpt(d => d(u))
|
|
318
318
|
|
|
319
319
|
const pb = Effect(
|
|
320
|
-
|
|
320
|
+
Option.fromNullable(Request.Body)
|
|
321
321
|
.map(s => s)
|
|
322
322
|
.map(Parser.for)
|
|
323
323
|
.map(MO.condemn)
|
|
@@ -325,7 +325,7 @@ export function makeRequestParsers<
|
|
|
325
325
|
const parseBody = (u: unknown) => pb.flatMapOpt(d => d(u))
|
|
326
326
|
|
|
327
327
|
const pp = Effect(
|
|
328
|
-
|
|
328
|
+
Option.fromNullable(Request.Path)
|
|
329
329
|
.map(s => s)
|
|
330
330
|
.map(Parser.for)
|
|
331
331
|
.map(MO.condemn)
|
|
@@ -333,7 +333,7 @@ export function makeRequestParsers<
|
|
|
333
333
|
const parsePath = (u: unknown) => pp.flatMapOpt(d => d(u))
|
|
334
334
|
|
|
335
335
|
const pc = Effect(
|
|
336
|
-
|
|
336
|
+
Option.fromNullable(Request.Cookie)
|
|
337
337
|
.map(s => s)
|
|
338
338
|
.map(Parser.for)
|
|
339
339
|
.map(MO.condemn)
|
|
@@ -352,9 +352,9 @@ export function makeRequestParsers<
|
|
|
352
352
|
type Decode<A> = (u: unknown) => Effect<never, unknown, A>
|
|
353
353
|
|
|
354
354
|
export interface RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
|
|
355
|
-
parseHeaders: Decode<
|
|
356
|
-
parseQuery: Decode<
|
|
357
|
-
parseBody: Decode<
|
|
358
|
-
parsePath: Decode<
|
|
359
|
-
parseCookie: Decode<
|
|
355
|
+
parseHeaders: Decode<Option<HeaderA>>
|
|
356
|
+
parseQuery: Decode<Option<QueryA>>
|
|
357
|
+
parseBody: Decode<Option<BodyA>>
|
|
358
|
+
parsePath: Decode<Option<PathA>>
|
|
359
|
+
parseCookie: Decode<Option<CookieA>>
|
|
360
360
|
}
|
|
@@ -97,36 +97,36 @@ export function makeFromSchema<ResA>(
|
|
|
97
97
|
const { Request: Req, Response: Res_, ResponseOpenApi } = e.handler
|
|
98
98
|
const r = ResponseOpenApi ?? Res_
|
|
99
99
|
const Res = r ? MO.extractSchema(r) : MO.Void
|
|
100
|
-
// TODO
|
|
100
|
+
// TODO EffectOption.fromNullable(Req.Headers).flatMapOpt(jsonSchema)
|
|
101
101
|
// TODO: use the path vs body etc serialisation also in the Client.
|
|
102
|
-
const makeReqQuerySchema = Effect(
|
|
102
|
+
const makeReqQuerySchema = Effect(Option.fromNullable(Req.Query)).flatMap(_ =>
|
|
103
103
|
_.match(
|
|
104
|
-
() => Effect(
|
|
105
|
-
_ => jsonSchema(_).map(
|
|
104
|
+
() => Effect(Option.none),
|
|
105
|
+
_ => jsonSchema(_).map(Option.some)
|
|
106
106
|
)
|
|
107
107
|
)
|
|
108
|
-
const makeReqHeadersSchema = Effect(
|
|
108
|
+
const makeReqHeadersSchema = Effect(Option.fromNullable(Req.Headers)).flatMap(_ =>
|
|
109
109
|
_.match(
|
|
110
|
-
() => Effect(
|
|
111
|
-
_ => jsonSchema(_).map(
|
|
110
|
+
() => Effect(Option.none),
|
|
111
|
+
_ => jsonSchema(_).map(Option.some)
|
|
112
112
|
)
|
|
113
113
|
)
|
|
114
|
-
const makeReqCookieSchema = Effect(
|
|
114
|
+
const makeReqCookieSchema = Effect(Option.fromNullable(Req.Cookie)).flatMap(_ =>
|
|
115
115
|
_.match(
|
|
116
|
-
() => Effect(
|
|
117
|
-
_ => jsonSchema(_).map(
|
|
116
|
+
() => Effect(Option.none),
|
|
117
|
+
_ => jsonSchema(_).map(Option.some)
|
|
118
118
|
)
|
|
119
119
|
)
|
|
120
|
-
const makeReqPathSchema = Effect(
|
|
120
|
+
const makeReqPathSchema = Effect(Option.fromNullable(Req.Path)).flatMap(_ =>
|
|
121
121
|
_.match(
|
|
122
|
-
() => Effect(
|
|
123
|
-
_ => jsonSchema(_).map(
|
|
122
|
+
() => Effect(Option.none),
|
|
123
|
+
_ => jsonSchema(_).map(Option.some)
|
|
124
124
|
)
|
|
125
125
|
)
|
|
126
|
-
const makeReqBodySchema = Effect(
|
|
126
|
+
const makeReqBodySchema = Effect(Option.fromNullable(Req.Body)).flatMap(_ =>
|
|
127
127
|
_.match(
|
|
128
|
-
() => Effect(
|
|
129
|
-
_ => jsonSchema(_).map(
|
|
128
|
+
() => Effect(Option.none),
|
|
129
|
+
_ => jsonSchema(_).map(Option.some)
|
|
130
130
|
)
|
|
131
131
|
)
|
|
132
132
|
// const makeReqSchema = schema(Req)
|
|
@@ -134,9 +134,9 @@ export function makeFromSchema<ResA>(
|
|
|
134
134
|
const makeResSchema = jsonSchema_(Res)
|
|
135
135
|
|
|
136
136
|
function makeParameters(inn: ParameterLocation) {
|
|
137
|
-
return (a:
|
|
137
|
+
return (a: Option<JSONSchema | SubSchema>) => {
|
|
138
138
|
return a
|
|
139
|
-
.flatMap(o => (isObjectSchema(o) ?
|
|
139
|
+
.flatMap(o => (isObjectSchema(o) ? Option(o) : Option.none))
|
|
140
140
|
.map(x => {
|
|
141
141
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
142
142
|
return Object.keys(x.properties!).map(p => {
|
package/_src/api/routing.ts
CHANGED
|
@@ -41,7 +41,7 @@ export function makeRequestParsers<
|
|
|
41
41
|
>["Request"]
|
|
42
42
|
): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
|
|
43
43
|
const ph = Effect(
|
|
44
|
-
|
|
44
|
+
Option.fromNullable(Request.Headers)
|
|
45
45
|
.map(s => s)
|
|
46
46
|
.map(Parser.for)
|
|
47
47
|
.map(MO.condemnFail)
|
|
@@ -49,7 +49,7 @@ export function makeRequestParsers<
|
|
|
49
49
|
const parseHeaders = (u: unknown) => ph.flatMapOpt(d => d(u))
|
|
50
50
|
|
|
51
51
|
const pq = Effect(
|
|
52
|
-
|
|
52
|
+
Option.fromNullable(Request.Query)
|
|
53
53
|
.map(s => s)
|
|
54
54
|
.map(Parser.for)
|
|
55
55
|
.map(MO.condemnFail)
|
|
@@ -57,7 +57,7 @@ export function makeRequestParsers<
|
|
|
57
57
|
const parseQuery = (u: unknown) => pq.flatMapOpt(d => d(u))
|
|
58
58
|
|
|
59
59
|
const pb = Effect(
|
|
60
|
-
|
|
60
|
+
Option.fromNullable(Request.Body)
|
|
61
61
|
.map(s => s)
|
|
62
62
|
.map(Parser.for)
|
|
63
63
|
.map(MO.condemnFail)
|
|
@@ -65,7 +65,7 @@ export function makeRequestParsers<
|
|
|
65
65
|
const parseBody = (u: unknown) => pb.flatMapOpt(d => d(u))
|
|
66
66
|
|
|
67
67
|
const pp = Effect(
|
|
68
|
-
|
|
68
|
+
Option.fromNullable(Request.Path)
|
|
69
69
|
.map(s => s)
|
|
70
70
|
.map(Parser.for)
|
|
71
71
|
.map(MO.condemnFail)
|
|
@@ -73,7 +73,7 @@ export function makeRequestParsers<
|
|
|
73
73
|
const parsePath = (u: unknown) => pp.flatMapOpt(d => d(u))
|
|
74
74
|
|
|
75
75
|
const pc = Effect(
|
|
76
|
-
|
|
76
|
+
Option.fromNullable(Request.Cookie)
|
|
77
77
|
.map(s => s)
|
|
78
78
|
.map(Parser.for)
|
|
79
79
|
.map(MO.condemnFail)
|
package/_src/rateLimit.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// * @tsplus static effect/stm/TSemaphore.Ops withPermitsDuration
|
|
8
8
|
// * @tsplus pipeable effect/stm/TSemaphore withPermitsDuration
|
|
9
9
|
// */
|
|
10
|
-
// export function withPermitsDuration(permits: number, duration:
|
|
10
|
+
// export function withPermitsDuration(permits: number, duration: Duration) {
|
|
11
11
|
// return (self: TSemaphore): <R, E, A>(effect: Effect<R, E, A>) => Effect<R, E, A> => {
|
|
12
12
|
// return effect =>
|
|
13
13
|
// Effect.uninterruptibleMask(
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
* @tsplus static effect/io/Effect/Semaphore.Ops withPermitsDuration
|
|
33
33
|
* @tsplus pipeable effect/io/Effect/Semaphore withPermitsDuration
|
|
34
34
|
*/
|
|
35
|
-
export function SEM_withPermitsDuration(permits: number, duration:
|
|
35
|
+
export function SEM_withPermitsDuration(permits: number, duration: Duration) {
|
|
36
36
|
return (self: Semaphore): <R, E, A>(effect: Effect<R, E, A>) => Effect<R, E, A> => {
|
|
37
37
|
return effect =>
|
|
38
38
|
Effect.uninterruptibleMask(
|
|
@@ -15,7 +15,7 @@ const make = Effect(() => {
|
|
|
15
15
|
ops.entries()
|
|
16
16
|
.toChunk
|
|
17
17
|
.forEach(([id, op]) => {
|
|
18
|
-
const lastChanged =
|
|
18
|
+
const lastChanged = Option.fromNullable(op.updatedAt).getOrElse(() => op.createdAt)
|
|
19
19
|
if (lastChanged < before) {
|
|
20
20
|
ops.delete(id)
|
|
21
21
|
}
|
|
@@ -28,7 +28,7 @@ const make = Effect(() => {
|
|
|
28
28
|
})
|
|
29
29
|
}
|
|
30
30
|
function findOp(id: OperationId) {
|
|
31
|
-
return Effect(() =>
|
|
31
|
+
return Effect(() => Option.fromNullable(ops.get(id)))
|
|
32
32
|
}
|
|
33
33
|
function finishOp(id: OperationId, exit: Exit<unknown, unknown>) {
|
|
34
34
|
return findOp(id).flatMap(_ =>
|
|
@@ -48,8 +48,8 @@ const make = Effect(() => {
|
|
|
48
48
|
? LongString("Unknown error")
|
|
49
49
|
: exit.cause.failureOption.flatMap(_ =>
|
|
50
50
|
typeof _ === "object" && _ !== null && "message" in _ && LongString.Guard(_.message)
|
|
51
|
-
?
|
|
52
|
-
:
|
|
51
|
+
? Option(_.message)
|
|
52
|
+
: Option.none
|
|
53
53
|
)?.value ?? null
|
|
54
54
|
})
|
|
55
55
|
})
|
|
@@ -90,7 +90,7 @@ const cleanupLoop = Operations.accessWithEffect(_ => _.cleanup)
|
|
|
90
90
|
return reportAppError(_.cause)
|
|
91
91
|
}
|
|
92
92
|
})
|
|
93
|
-
.delay(
|
|
93
|
+
.delay(Duration.minutes(1))
|
|
94
94
|
.forever
|
|
95
95
|
.forkScoped
|
|
96
96
|
|
|
@@ -4,7 +4,7 @@ export const OperationsId = Symbol("OperationsId")
|
|
|
4
4
|
export interface Operations extends ServiceTagged<typeof OperationsId> {
|
|
5
5
|
register: Effect<Scope, never, OperationId>
|
|
6
6
|
update: (id: OperationId, progress: OperationProgress) => Effect<never, never, void>
|
|
7
|
-
find: (id: OperationId) => Effect<never, never,
|
|
7
|
+
find: (id: OperationId) => Effect<never, never, Option<Operation>>
|
|
8
8
|
cleanup: Effect<never, never, void>
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -20,7 +20,7 @@ export interface Repository<
|
|
|
20
20
|
ItemType extends string
|
|
21
21
|
> {
|
|
22
22
|
itemType: ItemType
|
|
23
|
-
find: (id: Id) => Effect<ContextMap | RequestContext, never,
|
|
23
|
+
find: (id: Id) => Effect<ContextMap | RequestContext, never, Option<T>>
|
|
24
24
|
all: Effect<ContextMap, never, Chunk<T>>
|
|
25
25
|
saveAndPublish: (
|
|
26
26
|
items: Iterable<T>,
|
|
@@ -102,7 +102,7 @@ export function collect<
|
|
|
102
102
|
Evt,
|
|
103
103
|
ItemType extends string,
|
|
104
104
|
S extends T
|
|
105
|
-
>(self: Repository<T, PM, Evt, Id, ItemType>, collect: (item: T) =>
|
|
105
|
+
>(self: Repository<T, PM, Evt, Id, ItemType>, collect: (item: T) => Option<S>) {
|
|
106
106
|
return self.all.map(_ => _.filterMap(collect))
|
|
107
107
|
}
|
|
108
108
|
|
|
@@ -134,7 +134,7 @@ export function projectEffect<
|
|
|
134
134
|
E
|
|
135
135
|
>(
|
|
136
136
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
137
|
-
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: PM) =>
|
|
137
|
+
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: PM) => Option<S>; limit?: number; skip?: number }>
|
|
138
138
|
) {
|
|
139
139
|
// TODO: a projection that gets sent to the db instead.
|
|
140
140
|
return map.flatMap(f =>
|
|
@@ -156,7 +156,7 @@ export function project<
|
|
|
156
156
|
S
|
|
157
157
|
>(
|
|
158
158
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
159
|
-
map: { filter?: Filter<PM>; collect: (t: PM) =>
|
|
159
|
+
map: { filter?: Filter<PM>; collect: (t: PM) => Option<S>; limit?: number; skip?: number }
|
|
160
160
|
) {
|
|
161
161
|
return self.projectEffect(Effect(map))
|
|
162
162
|
}
|
|
@@ -176,7 +176,7 @@ export function queryEffect<
|
|
|
176
176
|
>(
|
|
177
177
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
178
178
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
179
|
-
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: T) =>
|
|
179
|
+
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: T) => Option<S>; limit?: number; skip?: number }>
|
|
180
180
|
) {
|
|
181
181
|
return map.flatMap(f =>
|
|
182
182
|
(f.filter ? self.utils.filter(f.filter, { limit: f.limit, skip: f.skip }) : self.utils.all)
|
|
@@ -206,7 +206,7 @@ export function queryOneEffect<
|
|
|
206
206
|
>(
|
|
207
207
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
208
208
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
209
|
-
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: T) =>
|
|
209
|
+
map: Effect<R, E, { filter?: Filter<PM>; collect: (t: T) => Option<S> }>
|
|
210
210
|
) {
|
|
211
211
|
return map.flatMap(f =>
|
|
212
212
|
(f.filter ? self.utils.filter(f.filter, { limit: 1 }) : self.utils.all)
|
|
@@ -238,7 +238,7 @@ export function query<
|
|
|
238
238
|
>(
|
|
239
239
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
240
240
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
241
|
-
map: { filter?: Filter<PM>; collect: (t: T) =>
|
|
241
|
+
map: { filter?: Filter<PM>; collect: (t: T) => Option<S>; limit?: number; skip?: number }
|
|
242
242
|
) {
|
|
243
243
|
return self.queryEffect(Effect(map))
|
|
244
244
|
}
|
|
@@ -256,7 +256,7 @@ export function queryOne<
|
|
|
256
256
|
>(
|
|
257
257
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
258
258
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
259
|
-
map: { filter?: Filter<PM>; collect: (t: T) =>
|
|
259
|
+
map: { filter?: Filter<PM>; collect: (t: T) => Option<S> }
|
|
260
260
|
) {
|
|
261
261
|
return self.queryOneEffect(Effect(map))
|
|
262
262
|
}
|
|
@@ -276,7 +276,7 @@ export function queryAndSavePureEffect<
|
|
|
276
276
|
>(
|
|
277
277
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
278
278
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
279
|
-
map: Effect<R, E, { filter: Filter<PM>; collect: (t: T) =>
|
|
279
|
+
map: Effect<R, E, { filter: Filter<PM>; collect: (t: T) => Option<S>; limit?: number; skip?: number }>
|
|
280
280
|
) {
|
|
281
281
|
return <R2, A, E2, S2 extends T>(pure: Effect<FixEnv<R2, Evt, Chunk<S>, Iterable<S2>>, E2, A>) =>
|
|
282
282
|
queryEffect(self, map)
|
|
@@ -296,7 +296,7 @@ export function queryAndSavePure<
|
|
|
296
296
|
>(
|
|
297
297
|
self: Repository<T, PM, Evt, Id, ItemType>,
|
|
298
298
|
// TODO: think about collectPM, collectE, and collect(Parsed)
|
|
299
|
-
map: { filter: Filter<PM>; collect: (t: T) =>
|
|
299
|
+
map: { filter: Filter<PM>; collect: (t: T) => Option<S>; limit?: number; skip?: number }
|
|
300
300
|
) {
|
|
301
301
|
return self.queryAndSavePureEffect(Effect(map))
|
|
302
302
|
}
|
|
@@ -55,7 +55,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
55
55
|
x =>
|
|
56
56
|
[
|
|
57
57
|
x,
|
|
58
|
-
|
|
58
|
+
Option.fromNullable(x._etag).match(
|
|
59
59
|
() => ({
|
|
60
60
|
operationType: "Create" as const,
|
|
61
61
|
resourceBody: {
|
|
@@ -84,7 +84,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
84
84
|
.forEachEffect(
|
|
85
85
|
([i, batch]) =>
|
|
86
86
|
Effect.promise(() => bulk(batch.map(([, op]) => op)))
|
|
87
|
-
.delay(
|
|
87
|
+
.delay(Duration.makeMillis(i === 0 ? 0 : 1100))
|
|
88
88
|
.flatMap(responses =>
|
|
89
89
|
Effect.gen(function*($) {
|
|
90
90
|
const r = responses.find(x => x.statusCode === 412)
|
|
@@ -129,7 +129,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
129
129
|
x =>
|
|
130
130
|
[
|
|
131
131
|
x,
|
|
132
|
-
|
|
132
|
+
Option.fromNullable(x._etag).match(
|
|
133
133
|
() => ({
|
|
134
134
|
operationType: "Create" as const,
|
|
135
135
|
resourceBody: {
|
|
@@ -272,11 +272,11 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
272
272
|
container
|
|
273
273
|
.item(id, config?.partitionValue({ id } as PM))
|
|
274
274
|
.read<PM>()
|
|
275
|
-
.then(({ resource }) =>
|
|
275
|
+
.then(({ resource }) => Option.fromNullable(resource))
|
|
276
276
|
).instrument("cosmos.find")
|
|
277
277
|
.logAnnotate("cosmos.db", containerId),
|
|
278
278
|
set: e =>
|
|
279
|
-
|
|
279
|
+
Option.fromNullable(e._etag)
|
|
280
280
|
.match(
|
|
281
281
|
() =>
|
|
282
282
|
Effect.promise(() =>
|
|
@@ -330,7 +330,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
330
330
|
container
|
|
331
331
|
.item(importedMarkerId, importedMarkerId)
|
|
332
332
|
.read<{ id: string }>()
|
|
333
|
-
.then(({ resource }) =>
|
|
333
|
+
.then(({ resource }) => Option.fromNullable(resource))
|
|
334
334
|
)
|
|
335
335
|
)
|
|
336
336
|
|
|
@@ -345,7 +345,7 @@ export function makeCosmosStore({ prefix }: StorageConfig) {
|
|
|
345
345
|
.bulkSet(a)
|
|
346
346
|
.orDie
|
|
347
347
|
// we delay extra here, so that initial creation between Companies/POs also have an interval between them.
|
|
348
|
-
.delay(
|
|
348
|
+
.delay(Duration.makeMillis(1100))
|
|
349
349
|
)
|
|
350
350
|
)
|
|
351
351
|
}
|
|
@@ -56,7 +56,7 @@ export const makeMemoryStore = () => ({
|
|
|
56
56
|
.apply(withPermit)
|
|
57
57
|
const s: Store<PM, Id> = {
|
|
58
58
|
all,
|
|
59
|
-
find: id => store.get.map(_ =>
|
|
59
|
+
find: id => store.get.map(_ => Option.fromNullable(_.get(id))),
|
|
60
60
|
filter: (filter: Filter<PM>, cursor?: { skip?: number; limit?: number }) => all.map(memFilter(filter, cursor)),
|
|
61
61
|
filterJoinSelect: <T extends object>(filter: FilterJoinSelect) =>
|
|
62
62
|
all.map(c => c.flatMap(codeFilterJoinSelect<PM, T>(filter))),
|
|
@@ -64,7 +64,7 @@ export function makeRedisStore({ prefix }: StorageConfig) {
|
|
|
64
64
|
all.map(memFilter(filter, cursor)),
|
|
65
65
|
filterJoinSelect: <T extends object>(filter: FilterJoinSelect) =>
|
|
66
66
|
all.map(c => c.flatMap(codeFilterJoinSelect<PM, T>(filter))),
|
|
67
|
-
find: id => asMap.map(_ =>
|
|
67
|
+
find: id => asMap.map(_ => Option.fromNullable(_.get(id))),
|
|
68
68
|
set: e =>
|
|
69
69
|
s
|
|
70
70
|
.find(e.id)
|
|
@@ -102,8 +102,8 @@ describe("Optimistic Concurrency", () => {
|
|
|
102
102
|
const failResult = yield* $(
|
|
103
103
|
store.batchSet([{ id: "1", a: "another-string3", _etag: "abc" }]).result
|
|
104
104
|
)
|
|
105
|
-
expect(result1).toEqual(
|
|
106
|
-
expect(result2).toEqual(
|
|
105
|
+
expect(result1).toEqual(Option({ ...item1, _etag: expect.any(String) }))
|
|
106
|
+
expect(result2).toEqual(Option({ ...item2, _etag: expect.any(String) }))
|
|
107
107
|
expect(Exit.untraced(failResult)).toEqual(
|
|
108
108
|
Exit.fail(new OptimisticConcurrencyException("test", "1"))
|
|
109
109
|
)
|
|
@@ -60,7 +60,7 @@ export interface Store<PM extends PersistenceModelType<Id>, Id extends string> {
|
|
|
60
60
|
filterJoinSelect: <T extends object>(
|
|
61
61
|
filter: FilterJoinSelect
|
|
62
62
|
) => Effect<never, never, Chunk<T & { _rootId: string }>>
|
|
63
|
-
find: (id: Id) => Effect<never, never,
|
|
63
|
+
find: (id: Id) => Effect<never, never, Option<PM>>
|
|
64
64
|
set: (e: PM) => Effect<never, OptimisticConcurrencyException, PM>
|
|
65
65
|
batchSet: (
|
|
66
66
|
items: NonEmptyReadonlyArray<PM>
|