@effect-app/infra 0.15.2 → 0.16.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 +24 -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/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/services/Operations/live.ts +4 -4
- package/_src/services/Operations/service.ts +1 -1
- package/_src/services/Repository.ts +10 -10
- package/_src/services/Store/Cosmos.ts +5 -5
- 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/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/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 +11 -11
- 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 +1 -1
- package/dist/services/simpledb/cosmosdb.js +1 -1
- package/dist/services/simpledb/diskdb.d.ts +1 -1
- package/dist/services/simpledb/diskdb.js +1 -1
- package/dist/services/simpledb/memdb.d.ts +1 -1
- package/dist/services/simpledb/memdb.js +2 -2
- package/dist/services/simpledb/mongodb.d.ts +1 -1
- package/dist/services/simpledb/mongodb.js +3 -3
- package/dist/services/simpledb/redisdb.d.ts +1 -1
- 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":"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":"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","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)
|
|
@@ -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
|
})
|
|
@@ -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: {
|
|
@@ -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
|
|
|
@@ -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>
|
|
@@ -14,7 +14,7 @@ export const makeETag = <E extends PersistenceModelType<Id>, Id extends string>(
|
|
|
14
14
|
_etag: objectHash(e)
|
|
15
15
|
}) as any
|
|
16
16
|
export const makeUpdateETag =
|
|
17
|
-
(name: string) => <E extends PersistenceModelType<Id>, Id extends string>(e: E, current:
|
|
17
|
+
(name: string) => <E extends PersistenceModelType<Id>, Id extends string>(e: E, current: Option<E>) =>
|
|
18
18
|
Effect.gen(function*($) {
|
|
19
19
|
if (current.isSome() && current.value._etag !== e._etag) {
|
|
20
20
|
return yield* $(
|
|
@@ -30,19 +30,19 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
30
30
|
filter.type === "startsWith"
|
|
31
31
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
32
|
? lowercaseIfString((x as any)[filter.by]).startsWith(filter.value.toLowerCase())
|
|
33
|
-
?
|
|
34
|
-
:
|
|
33
|
+
? Option(x as unknown as NE)
|
|
34
|
+
: Option.none
|
|
35
35
|
: filter.type === "endsWith"
|
|
36
36
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
37
|
? lowercaseIfString((x as any)[filter.by]).endsWith(filter.value.toLowerCase())
|
|
38
|
-
?
|
|
39
|
-
:
|
|
38
|
+
? Option(x as unknown as NE)
|
|
39
|
+
: Option.none
|
|
40
40
|
: filter.type === "contains"
|
|
41
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
42
42
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
43
43
|
? lowercaseIfString((x as any)[filter.by]).includes(filter.value.toLowerCase())
|
|
44
|
-
?
|
|
45
|
-
:
|
|
44
|
+
? Option(x as unknown as NE)
|
|
45
|
+
: Option.none
|
|
46
46
|
: filter.type === "join_find"
|
|
47
47
|
? filter.keys.some(k => {
|
|
48
48
|
const value = get(x, k) as Record<string, unknown>[]
|
|
@@ -52,8 +52,8 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
52
52
|
value.some(v => compareCaseInsensitive(v[filter.valueKey], filter.value))
|
|
53
53
|
)
|
|
54
54
|
})
|
|
55
|
-
?
|
|
56
|
-
:
|
|
55
|
+
? Option(x as unknown as NE)
|
|
56
|
+
: Option.none
|
|
57
57
|
// TODO: support mixed or/and
|
|
58
58
|
: filter.mode === "or"
|
|
59
59
|
? filter.where
|
|
@@ -66,8 +66,8 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
66
66
|
? !compareCaseInsensitive(get(x, p.key), p.value)
|
|
67
67
|
: compareCaseInsensitive(get(x, p.key), p.value)
|
|
68
68
|
)
|
|
69
|
-
?
|
|
70
|
-
:
|
|
69
|
+
? Option(x as unknown as NE)
|
|
70
|
+
: Option.none
|
|
71
71
|
: filter.where
|
|
72
72
|
.every(p =>
|
|
73
73
|
p.t === "in"
|
|
@@ -86,8 +86,8 @@ export function codeFilter<E extends { id: string }, NE extends E>(filter: Filte
|
|
|
86
86
|
.some(_ => compareCaseInsensitive(get(_, p.key.split(".-1.")[1]!), p.value))
|
|
87
87
|
: compareCaseInsensitive(get(x, p.key), p.value)
|
|
88
88
|
)
|
|
89
|
-
?
|
|
90
|
-
:
|
|
89
|
+
? Option(x as unknown as NE)
|
|
90
|
+
: Option.none
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
export function codeFilterJoinSelect<E extends { id: string }, NE>(
|
|
@@ -98,15 +98,15 @@ export function codeFilterJoinSelect<E extends { id: string }, NE>(
|
|
|
98
98
|
const value = get(x, k)
|
|
99
99
|
// we mimic the behavior of cosmosdb; if the shape in db does not match what we're looking for, we imagine false hit
|
|
100
100
|
return value
|
|
101
|
-
?
|
|
101
|
+
? Option(
|
|
102
102
|
(value as readonly NE[]).filterMap(v =>
|
|
103
103
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
104
|
compareCaseInsensitive((v as any)[filter.valueKey], filter.value)
|
|
105
|
-
?
|
|
106
|
-
:
|
|
105
|
+
? Option({ ...v, _rootId: x.id })
|
|
106
|
+
: Option.none
|
|
107
107
|
)
|
|
108
108
|
)
|
|
109
|
-
:
|
|
109
|
+
: Option.none
|
|
110
110
|
})
|
|
111
111
|
.flatMap(_ => _)
|
|
112
112
|
.toChunk
|
|
@@ -38,7 +38,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
38
38
|
function find(id: string) {
|
|
39
39
|
return Cosmos.db
|
|
40
40
|
.flatMap(db => Effect.tryPromise(() => db.container(type).item(id).read<{ data: EA }>()))
|
|
41
|
-
.map(i =>
|
|
41
|
+
.map(i => Option.fromNullable(i.resource))
|
|
42
42
|
.map(
|
|
43
43
|
_ =>
|
|
44
44
|
_.map(
|
|
@@ -77,7 +77,7 @@ WHERE (
|
|
|
77
77
|
.map(_ => _.map(_ => _.id))
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function store(record: A, currentVersion:
|
|
80
|
+
function store(record: A, currentVersion: Option<Version>) {
|
|
81
81
|
return Effect.gen(function*($) {
|
|
82
82
|
const version = "_etag" // we get this from the etag anyway.
|
|
83
83
|
|
|
@@ -31,7 +31,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
31
31
|
save: simpledb.store(find(type), store, lockRecordOnDisk(type), type)
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
function store(record: A, currentVersion:
|
|
34
|
+
function store(record: A, currentVersion: Option<Version>) {
|
|
35
35
|
const version = currentVersion
|
|
36
36
|
.map(cv => (parseInt(cv) + 1).toString())
|
|
37
37
|
.getOrElse(() => "1")
|
|
@@ -107,7 +107,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
function getIdx(index: Index) {
|
|
110
|
-
return readIndex(index).map(idx =>
|
|
110
|
+
return readIndex(index).map(idx => Option.fromNullable(idx[index.key]))
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
function readIndex(index: Index) {
|
|
@@ -127,7 +127,7 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
127
127
|
function tryRead(filePath: string) {
|
|
128
128
|
return fu
|
|
129
129
|
.fileExists(filePath)
|
|
130
|
-
.flatMap(exists => !exists ? Effect(
|
|
130
|
+
.flatMap(exists => !exists ? Effect(Option.none) : readFile(filePath).map(Option.some))
|
|
131
131
|
}
|
|
132
132
|
|
|
133
133
|
function getFilename(type: string, id: string) {
|
|
@@ -54,10 +54,10 @@ export function createContext<TKey extends string, EA, A extends DBRecord<TKey>>
|
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
return null
|
|
57
|
-
}).map(
|
|
57
|
+
}).map(Option.fromNullable)
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
function store(record: A, currentVersion:
|
|
60
|
+
function store(record: A, currentVersion: Option<Version>) {
|
|
61
61
|
const version = currentVersion
|
|
62
62
|
.map(cv => (parseInt(cv) + 1).toString())
|
|
63
63
|
.getOrElse(() => "1")
|