@effect-app/infra 0.23.0 → 0.24.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 +12 -0
- package/_cjs/services/Store/Disk.cjs +51 -21
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +44 -15
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_src/services/Store/Disk.ts +86 -45
- package/_src/services/Store/Memory.ts +76 -44
- package/_src/services/Store/service.ts +1 -1
- package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
- package/dist/api/routing.d.ts +1 -1
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/services/Store/Disk.d.ts +1 -1
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +57 -24
- package/dist/services/Store/Memory.d.ts +2 -1
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +45 -16
- package/dist/services/Store/service.d.ts +1 -1
- package/dist/services/Store/service.d.ts.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,9 +7,11 @@ exports.DiskStoreLive = DiskStoreLive;
|
|
|
7
7
|
exports.makeDiskStore = makeDiskStore;
|
|
8
8
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
9
9
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/core/Function"));
|
|
10
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@effect
|
|
10
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@effect/io/FiberRef"));
|
|
11
|
+
var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
11
12
|
var fu = _interopRequireWildcard(require("@effect-app/infra-adapters/fileUtil"));
|
|
12
13
|
var _fs = _interopRequireDefault(require("fs"));
|
|
14
|
+
var _console = require("console");
|
|
13
15
|
var _Memory = require("./Memory.cjs");
|
|
14
16
|
var _service = require("./service.cjs");
|
|
15
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -17,6 +19,27 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
17
19
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
20
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
19
21
|
|
|
22
|
+
function makeDiskStoreInt(prefix, namespace, name, existing) {
|
|
23
|
+
return tsplus_module_1.gen(function* ($) {
|
|
24
|
+
const file = _console.dir + "/" + prefix + name + (namespace === "primary" ? "" : "-" + namespace) + ".json";
|
|
25
|
+
const fsStore = {
|
|
26
|
+
get: tsplus_module_1.orDie(tsplus_module_1.map(x => JSON.parse(x))(fu.readTextFile(file))),
|
|
27
|
+
setRaw: v => JSON.stringify([...v], undefined, 2)["|>"](json => fu.writeTextFile(file, json))
|
|
28
|
+
};
|
|
29
|
+
const store = yield* $((0, _Memory.makeMemoryStoreInt)(name, !_fs.default.existsSync(file) ? existing ?? tsplus_module_1.sync(() => new Map()) : tsplus_module_1.map(x => new Map(x.map(x => [x.id, x])))(fsStore.get)));
|
|
30
|
+
yield* $(tsplus_module_1.flatMap(fsStore.setRaw)(store.all));
|
|
31
|
+
const sem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
32
|
+
const withPermit = sem.withPermits(1);
|
|
33
|
+
const flushToDisk = withPermit(tsplus_module_1.flatMap(fsStore.setRaw)(store.all));
|
|
34
|
+
return {
|
|
35
|
+
...store,
|
|
36
|
+
batchSet: tsplus_module_2.flow(store.batchSet, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
37
|
+
bulkSet: tsplus_module_2.flow(store.bulkSet, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
38
|
+
set: tsplus_module_2.flow(store.set, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
39
|
+
remove: tsplus_module_2.flow(store.remove, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t))
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
}
|
|
20
43
|
/**
|
|
21
44
|
* The Disk-backed store, flushes writes in background, but keeps the data in memory
|
|
22
45
|
* and should therefore be as fast as the Memory Store.
|
|
@@ -30,26 +53,33 @@ function makeDiskStore({
|
|
|
30
53
|
_fs.default.mkdirSync(dir);
|
|
31
54
|
}
|
|
32
55
|
return {
|
|
33
|
-
make: (name, existing,
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
make: (name, existing, config) => tsplus_module_1.gen(function* ($) {
|
|
57
|
+
const storesSem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
58
|
+
const primary = yield* $(makeDiskStoreInt(prefix, "primary", name, existing));
|
|
59
|
+
const stores = new Map([["primary", primary]]);
|
|
60
|
+
const getStore = !config?.allowNamespace ? tsplus_module_1.succeed(primary) : tsplus_module_1.flatMap(namespace => {
|
|
61
|
+
const store = stores.get(namespace);
|
|
62
|
+
if (store) {
|
|
63
|
+
return tsplus_module_1.succeed(store);
|
|
64
|
+
}
|
|
65
|
+
if (!config.allowNamespace(namespace)) {
|
|
66
|
+
throw new Error(`Namespace ${namespace} not allowed!`);
|
|
67
|
+
}
|
|
68
|
+
return storesSem.withPermits(1)(tsplus_module_1.suspendSucceed(() => {
|
|
69
|
+
const existing = stores.get(namespace);
|
|
70
|
+
if (existing) return tsplus_module_1.sync(() => existing);
|
|
71
|
+
return tsplus_module_1.tap(store => tsplus_module_1.sync(() => stores.set(namespace, store)))(makeDiskStoreInt(prefix, namespace, name, existing));
|
|
72
|
+
}));
|
|
73
|
+
})(tsplus_module_3.get(_Memory.storeId));
|
|
47
74
|
const s = {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
all: tsplus_module_1.flatMap(_ => _.all)(getStore),
|
|
76
|
+
find: (...args) => tsplus_module_1.flatMap(_ => _.find(...args))(getStore),
|
|
77
|
+
filter: (...args) => tsplus_module_1.flatMap(_ => _.filter(...args))(getStore),
|
|
78
|
+
filterJoinSelect: (...args) => tsplus_module_1.flatMap(_ => _.filterJoinSelect(...args))(getStore),
|
|
79
|
+
set: (...args) => tsplus_module_1.flatMap(_ => _.set(...args))(getStore),
|
|
80
|
+
batchSet: (...args) => tsplus_module_1.flatMap(_ => _.batchSet(...args))(getStore),
|
|
81
|
+
bulkSet: (...args) => tsplus_module_1.flatMap(_ => _.bulkSet(...args))(getStore),
|
|
82
|
+
remove: (...args) => tsplus_module_1.flatMap(_ => _.remove(...args))(getStore)
|
|
53
83
|
};
|
|
54
84
|
return s;
|
|
55
85
|
})
|
|
@@ -57,6 +87,6 @@ function makeDiskStore({
|
|
|
57
87
|
});
|
|
58
88
|
}
|
|
59
89
|
function DiskStoreLive(config) {
|
|
60
|
-
return
|
|
90
|
+
return tsplus_module_4.toLayer(tsplus_module_1.flatMap(makeDiskStore)(tsplus_module_1.config(config)), _service.StoreMaker);
|
|
61
91
|
}
|
|
62
92
|
//# sourceMappingURL=Disk.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disk.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"Disk.cjs","mappings":";;;;;;;;;;;AACA;AAEA;AAEA;AACA;AAEA;AAAyC;AAAA;AAAA;AARzC;;AAUA,SAASA,gBAAgB,CACvBC,MAAc,EACdC,SAAiB,EACjBC,IAAY,EACZC,QAAqD;EAErD,OAAOC,oBAAW,WAAUC,CAAC;IAC3B,MAAMC,IAAI,GAAGC,YAAG,GAAG,GAAG,GAAGP,MAAM,GAAGE,IAAI,IAAID,SAAS,KAAK,SAAS,GAAG,EAAE,GAAG,GAAG,GAAGA,SAAS,CAAC,GAAG,OAAO;IACnG,MAAMO,OAAO,GAAG;MACdC,GAAG,wBAAEL,oBAEEM,CAAC,IAAIC,IAAI,CAACC,KAAK,CAACF,CAAC,CAAS,EAF5BG,EAAE,CACJC,YAAY,CAACR,IAAI,CAAC,CACa,CAC1B;MACRS,MAAM,EAAGC,CAAe,IAAKL,IAAI,CAACM,SAAS,CAAC,CAAC,GAAGD,CAAC,CAAC,EAAEE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAACC,IAAI,IAAIN,EAAE,CAACO,aAAa,CAACd,IAAI,EAAEa,IAAI,CAAC;KAC7G;IAED,MAAME,KAAK,GAAG,OAAOhB,CAAC,CACpB,8BAAkB,EAChBH,IAAI,EACJ,CAACoB,WAAE,CAACC,UAAU,CAACjB,IAAI,CAAC,GAChBH,QAAQ,IAAIC,2BAAO,IAAIoB,GAAG,EAAE,CAAC,GAC7BpB,oBAAgBM,CAAC,IAAI,IAAIc,GAAG,CAACd,CAAC,CAACe,GAAG,CAACf,CAAC,IAAI,CAACA,CAAC,CAACgB,EAAE,EAAEhB,CAAC,CAAU,CAAC,CAAC,EAA5DF,OAAO,CAACC,GAAG,CAAkD,CAClE,CACF;IAED,OAAOJ,CAAC,CAACD,wBAAkBI,OAAO,CAACO,MAAM,EAAhCM,KAAK,CAACM,GAAG,CAAwB,CAAC;IAE3C,MAAMC,GAAG,GAAGxB,oCAAqB,CAAC,CAAC;IACnC,MAAMyB,UAAU,GAAGD,GAAG,CAACE,WAAW,CAAC,CAAC,CAAC;IACrC,MAAMC,WAAW,GAA2CF,UAAU,CAAlDzB,wBAAkBI,OAAO,CAACO,MAAM,EAAhCM,KAAK,CAACM,GAAG,CAAwB,CAAkB;IACvE,OAAO;MACL,GAAGN,KAAK;MACRW,QAAQ,EAAEC,oBAAI,CACZZ,KAAK,CAACW,QAAQ,EACdE,CAAC,IAAI9B,oBAAM,MAAKA,2BAACA,8BAA0B+B,GAAG,IAAI/B,2BAAOgC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAC,EAA3DJ,WAAW,CAAiD,CAAW,EAAnFG,CAAC,CAAmF,CAC1F;MACDI,OAAO,EAAEL,oBAAI,CACXZ,KAAK,CAACiB,OAAO,EACbJ,CAAC,IAAI9B,oBAAM,MAAKA,2BAACA,8BAA0B+B,GAAG,IAAI/B,2BAAOgC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAC,EAA3DJ,WAAW,CAAiD,CAAW,EAAnFG,CAAC,CAAmF,CAC1F;MACDK,GAAG,EAAEN,oBAAI,CACPZ,KAAK,CAACkB,GAAG,EACTL,CAAC,IAAI9B,oBAAM,MAAKA,2BAACA,8BAA0B+B,GAAG,IAAI/B,2BAAOgC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAC,EAA3DJ,WAAW,CAAiD,CAAW,EAAnFG,CAAC,CAAmF,CAC1F;MACDM,MAAM,EAAEP,oBAAI,CACVZ,KAAK,CAACmB,MAAM,EACZN,CAAC,IAAI9B,oBAAM,MAAKA,2BAACA,8BAA0B+B,GAAG,IAAI/B,2BAAOgC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAC,EAA3DJ,WAAW,CAAiD,CAAW,EAAnFG,CAAC,CAAmF;KAEpE;EAC3B,CAAC,CAAC;AACJ;AAEA;;;;AAIM,SAAUO,aAAa,CAAC;EAAEzC;AAAM,CAAiB;EACrD,OAAOI,qBAAY,MAAK;IACtB,MAAMG,GAAG,GAAG,SAAS;IACrB,IAAI,CAACe,WAAE,CAACC,UAAU,CAAChB,GAAG,CAAC,EAAE;MACvBe,WAAE,CAACoB,SAAS,CAACnC,GAAG,CAAC;;IAEnB,OAAO;MACLoC,IAAI,EAAE,CACJzC,IAAY,EACZC,QAAqD,EACrDyC,MAAwB,KAExBxC,oBAAW,WAAUC,CAAC;QACpB,MAAMwC,SAAS,GAAGzC,oCAAqB,CAAC,CAAC;QACzC,MAAM0C,OAAO,GAAG,OAAOzC,CAAC,CAACN,gBAAgB,CAACC,MAAM,EAAE,SAAS,EAAEE,IAAI,EAAEC,QAAQ,CAAC,CAAC;QAC7E,MAAM4C,MAAM,GAAG,IAAIvB,GAAG,CAAwB,CAAC,CAAC,SAAS,EAAEsB,OAAO,CAAC,CAAC,CAAC;QACrE,MAAME,QAAQ,GAAG,CAACJ,MAAM,EAAEK,cAAc,GAAG7C,wBAAe0C,OAAO,CAAC,GAAG1C,wBAAoBH,SAAS,IAAG;UACnG,MAAMoB,KAAK,GAAG0B,MAAM,CAACtC,GAAG,CAACR,SAAS,CAAC;UACnC,IAAIoB,KAAK,EAAE;YACT,OAAOjB,wBAAeiB,KAAK,CAAC;;UAE9B,IAAI,CAACuB,MAAM,CAACK,cAAe,CAAChD,SAAS,CAAC,EAAE;YACtC,MAAM,IAAIiD,KAAK,CAAC,aAAajD,SAAS,eAAe,CAAC;;UAExD,OAAO4C,SAAS,CAACf,WAAW,CAAC,CAAC,CAAC,CAC7B1B,+BAAsB,MAAK;YACzB,MAAMD,QAAQ,GAAG4C,MAAM,CAACtC,GAAG,CAACR,SAAS,CAAC;YACtC,IAAIE,QAAQ,EAAE,OAAOC,2BAAOD,QAAQ,CAAC;YACrC,OAAOC,oBAAqEiB,KAAK,IAC/EjB,qBAAY,MAAM2C,MAAM,CAACR,GAAG,CAACtC,SAAS,EAAEoB,KAAK,CAAC,CAAC,EAD1CtB,gBAAgB,CAAcC,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAEC,QAAQ,CAAC,CAEtE;UACH,CAAC,CAAC,CACH;QACH,CAAC,sBAjBoEgD,eAAO,EAiB1E;QAEF,MAAMC,CAAC,GAAkB;UACvBzB,GAAG,EAAEvB,wBAAiBiD,CAAC,IAAIA,CAAC,CAAC1B,GAAG,EAA3BqB,QAAQ,CAAoB;UACjCM,IAAI,EAAE,CAAC,GAAGC,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACC,IAAI,CAAC,GAAGC,IAAI,CAAC,EAArCP,QAAQ,CAA8B;UACzDQ,MAAM,EAAE,CAAC,GAAGD,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACG,MAAM,CAAC,GAAGD,IAAI,CAAC,EAAvCP,QAAQ,CAAgC;UAC7DS,gBAAgB,EAAE,CAAC,GAAGF,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACI,gBAAgB,CAAC,GAAGF,IAAI,CAAC,EAAjDP,QAAQ,CAA0C;UACjFT,GAAG,EAAE,CAAC,GAAGgB,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACd,GAAG,CAAC,GAAGgB,IAAI,CAAC,EAApCP,QAAQ,CAA6B;UACvDhB,QAAQ,EAAE,CAAC,GAAGuB,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACrB,QAAQ,CAAC,GAAGuB,IAAI,CAAC,EAAzCP,QAAQ,CAAkC;UACjEV,OAAO,EAAE,CAAC,GAAGiB,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACf,OAAO,CAAC,GAAGiB,IAAI,CAAC,EAAxCP,QAAQ,CAAiC;UAC/DR,MAAM,EAAE,CAAC,GAAGe,IAAI,KAAKnD,wBAAiBiD,CAAC,IAAIA,CAAC,CAACb,MAAM,CAAC,GAAGe,IAAI,CAAC,EAAvCP,QAAQ;SAC9B;QACD,OAAOI,CAAC;MACV,CAAC;KACJ;EACH,CAAC,CAAC;AACJ;AAEM,SAAUM,aAAa,CAACd,MAA6B;EACzD,OAAOe,gDACIlB,aAAa,yBADjBG,MAAM,EACY,EACdgB,mBAAU,CAAC;AACxB","names":["makeDiskStoreInt","prefix","namespace","name","existing","tsplus_module_1","$","file","dir","fsStore","get","x","JSON","parse","fu","readTextFile","setRaw","v","stringify","undefined","json","writeTextFile","store","fs","existsSync","Map","map","id","all","sem","withPermit","withPermits","flushToDisk","batchSet","tsplus_module_2","t","err","console","error","bulkSet","set","remove","makeDiskStore","mkdirSync","make","config","storesSem","primary","stores","getStore","allowNamespace","Error","storeId","s","_","find","args","filter","filterJoinSelect","DiskStoreLive","tsplus_module_4","StoreMaker"],"sourceRoot":"","sources":["../../../_src/services/Store/Disk.ts"],"sourcesContent":[null]}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.makeMemoryStore = exports.MemoryStoreLive = void 0;
|
|
7
|
+
exports.makeMemoryStoreInt = makeMemoryStoreInt;
|
|
7
8
|
exports.memFilter = memFilter;
|
|
8
9
|
exports.storeId = exports.restoreFromRequestContext = void 0;
|
|
9
10
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/data/Chunk"));
|
|
@@ -40,38 +41,66 @@ function memFilter(filter, cursor) {
|
|
|
40
41
|
return tsplus_module_4.ext_itToChunk(r);
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
|
-
const storeId = tsplus_module_5.unsafeMake("
|
|
44
|
+
const storeId = tsplus_module_5.unsafeMake("primary");
|
|
44
45
|
exports.storeId = storeId;
|
|
45
|
-
const restoreFromRequestContext = tsplus_module_7.serviceWithEffect(tsplus_module_6.tag, ctx => tsplus_module_5.set(ctx.parent?.namespace ?? ctx.namespace ?? "
|
|
46
|
-
// const stores = ["store-1", "store-2", "store-3", "store-4"]
|
|
46
|
+
const restoreFromRequestContext = tsplus_module_7.serviceWithEffect(tsplus_module_6.tag, ctx => tsplus_module_5.set(ctx.parent?.namespace ?? ctx.namespace ?? "primary")(storeId));
|
|
47
47
|
exports.restoreFromRequestContext = restoreFromRequestContext;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const namespaces = config?.namespaces ?? ["store-1"];
|
|
48
|
+
function makeMemoryStoreInt(name, existing) {
|
|
49
|
+
return tsplus_module_7.gen(function* ($) {
|
|
51
50
|
const updateETag = (0, _utils.makeUpdateETag)(name);
|
|
52
51
|
const items = yield* $(existing ?? tsplus_module_7.sync(() => new Map()));
|
|
53
52
|
const makeStore = () => new Map([...items.entries()].map(([id, e]) => [id, (0, _utils.makeETag)(e)]));
|
|
54
|
-
const
|
|
55
|
-
const getStore = tsplus_module_7.flatMap(namespace => tsplus_module_8.get(stores.get(namespace)))(tsplus_module_5.get(storeId));
|
|
56
|
-
const setStore = m => tsplus_module_7.flatMap(namespace => tsplus_module_8.set(m)(stores.get(namespace)))(tsplus_module_5.get(storeId));
|
|
53
|
+
const store = tsplus_module_8.unsafeMake(makeStore());
|
|
57
54
|
const sem = tsplus_module_7.unsafeMakeSemaphore(1);
|
|
58
55
|
const withPermit = sem.withPermits(1);
|
|
59
|
-
const values = tsplus_module_7.map(s => s.values())(
|
|
56
|
+
const values = tsplus_module_7.map(s => s.values())(tsplus_module_8.get(store));
|
|
60
57
|
const all = tsplus_module_7.map(tsplus_module_1.fromIterable)(values);
|
|
61
|
-
const batchSet = items => withPermit(tsplus_module_7.map(_ => _.toReadonlyArray())(tsplus_module_7.tap(items => tsplus_module_7.flatMap(_ =>
|
|
58
|
+
const batchSet = items => withPermit(tsplus_module_7.map(_ => _.toReadonlyArray())(tsplus_module_7.tap(items => tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(m => {
|
|
62
59
|
const mut = m;
|
|
63
60
|
items.forEach(e => mut.set(e.id, e));
|
|
64
61
|
return mut;
|
|
65
|
-
})(
|
|
62
|
+
})(tsplus_module_8.get(store))))(tsplus_module_9.ext_forEach(items, i => tsplus_module_7.flatMap(current => updateETag(i, current))(s.find(i.id))))));
|
|
66
63
|
const s = {
|
|
67
64
|
all,
|
|
68
|
-
find: id => tsplus_module_7.map(_ => tsplus_module_3.fromNullable(_.get(id)))(
|
|
65
|
+
find: id => tsplus_module_7.map(_ => tsplus_module_3.fromNullable(_.get(id)))(tsplus_module_8.get(store)),
|
|
69
66
|
filter: (filter, cursor) => tsplus_module_7.map(memFilter(filter, cursor))(all),
|
|
70
67
|
filterJoinSelect: filter => tsplus_module_7.map(c => c.flatMap((0, _utils.codeFilterJoinSelect)(filter)))(all),
|
|
71
|
-
set: e => withPermit(tsplus_module_7.tap(e => tsplus_module_7.flatMap(_ =>
|
|
68
|
+
set: e => withPermit(tsplus_module_7.tap(e => tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(_ => new Map([..._, [e.id, e]]))(tsplus_module_8.get(store))))(tsplus_module_7.flatMap(current => updateETag(e, current))(s.find(e.id)))),
|
|
72
69
|
batchSet,
|
|
73
70
|
bulkSet: batchSet,
|
|
74
|
-
remove: e => withPermit(tsplus_module_7.flatMap(_ =>
|
|
71
|
+
remove: e => withPermit(tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(_ => new Map([..._].filter(([_]) => _ !== e.id)))(tsplus_module_8.get(store))))
|
|
72
|
+
};
|
|
73
|
+
return s;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const makeMemoryStore = () => ({
|
|
77
|
+
make: (name, existing, config) => tsplus_module_7.gen(function* ($) {
|
|
78
|
+
const storesSem = tsplus_module_7.unsafeMakeSemaphore(1);
|
|
79
|
+
const primary = yield* $(makeMemoryStoreInt(name, existing));
|
|
80
|
+
const stores = new Map([["primary", primary]]);
|
|
81
|
+
const getStore = !config?.allowNamespace ? tsplus_module_7.succeed(primary) : tsplus_module_7.flatMap(namespace => {
|
|
82
|
+
const store = stores.get(namespace);
|
|
83
|
+
if (store) {
|
|
84
|
+
return tsplus_module_7.succeed(store);
|
|
85
|
+
}
|
|
86
|
+
if (!config.allowNamespace(namespace)) {
|
|
87
|
+
throw new Error(`Namespace ${namespace} not allowed!`);
|
|
88
|
+
}
|
|
89
|
+
return storesSem.withPermits(1)(tsplus_module_7.suspendSucceed(() => {
|
|
90
|
+
const store = stores.get(namespace);
|
|
91
|
+
if (store) return tsplus_module_7.sync(() => store);
|
|
92
|
+
return tsplus_module_7.tap(store => tsplus_module_7.sync(() => stores.set(namespace, store)))(makeMemoryStoreInt(name, existing));
|
|
93
|
+
}));
|
|
94
|
+
})(tsplus_module_5.get(storeId));
|
|
95
|
+
const s = {
|
|
96
|
+
all: tsplus_module_7.flatMap(_ => _.all)(getStore),
|
|
97
|
+
find: (...args) => tsplus_module_7.flatMap(_ => _.find(...args))(getStore),
|
|
98
|
+
filter: (...args) => tsplus_module_7.flatMap(_ => _.filter(...args))(getStore),
|
|
99
|
+
filterJoinSelect: (...args) => tsplus_module_7.flatMap(_ => _.filterJoinSelect(...args))(getStore),
|
|
100
|
+
set: (...args) => tsplus_module_7.flatMap(_ => _.set(...args))(getStore),
|
|
101
|
+
batchSet: (...args) => tsplus_module_7.flatMap(_ => _.batchSet(...args))(getStore),
|
|
102
|
+
bulkSet: (...args) => tsplus_module_7.flatMap(_ => _.bulkSet(...args))(getStore),
|
|
103
|
+
remove: (...args) => tsplus_module_7.flatMap(_ => _.remove(...args))(getStore)
|
|
75
104
|
};
|
|
76
105
|
return s;
|
|
77
106
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Memory.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"Memory.cjs","mappings":"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","names":["memFilter","filter","cursor","c","skip","limit","tsplus_module_3","tsplus_module_1","r","undefined","storeId","tsplus_module_5","restoreFromRequestContext","tsplus_module_7","ctx","parent","namespace","makeMemoryStoreInt","name","existing","$","updateETag","items","Map","makeStore","entries","map","id","e","store","tsplus_module_8","sem","withPermit","withPermits","values","s","all","batchSet","_","toReadonlyArray","m","mut","forEach","set","tsplus_module_9","i","current","find","get","filterJoinSelect","flatMap","bulkSet","remove","makeMemoryStore","make","config","storesSem","primary","stores","getStore","allowNamespace","Error","args","MemoryStoreLive","tsplus_module_10"],"sourceRoot":"","sources":["../../../_src/services/Store/Memory.ts"],"sourcesContent":[null]}
|
|
@@ -3,10 +3,63 @@ import * as fu from "@effect-app/infra-adapters/fileUtil"
|
|
|
3
3
|
|
|
4
4
|
import fs from "fs"
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { dir } from "console"
|
|
7
|
+
import { makeMemoryStoreInt, storeId } from "./Memory.js"
|
|
7
8
|
import type { PersistenceModelType, StorageConfig, Store, StoreConfig } from "./service.js"
|
|
8
9
|
import { StoreMaker } from "./service.js"
|
|
9
10
|
|
|
11
|
+
function makeDiskStoreInt<Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
12
|
+
prefix: string,
|
|
13
|
+
namespace: string,
|
|
14
|
+
name: string,
|
|
15
|
+
existing?: Effect<never, never, ReadonlyMap<Id2, PM>>
|
|
16
|
+
) {
|
|
17
|
+
return Effect.gen(function*($) {
|
|
18
|
+
const file = dir + "/" + prefix + name + (namespace === "primary" ? "" : "-" + namespace) + ".json"
|
|
19
|
+
const fsStore = {
|
|
20
|
+
get: fu
|
|
21
|
+
.readTextFile(file)
|
|
22
|
+
.map(x => JSON.parse(x) as PM[])
|
|
23
|
+
.orDie,
|
|
24
|
+
setRaw: (v: Iterable<PM>) => JSON.stringify([...v], undefined, 2)["|>"](json => fu.writeTextFile(file, json))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const store = yield* $(
|
|
28
|
+
makeMemoryStoreInt<Id, Id, PM>(
|
|
29
|
+
name,
|
|
30
|
+
!fs.existsSync(file)
|
|
31
|
+
? existing ?? Effect(new Map())
|
|
32
|
+
: fsStore.get.map(x => new Map(x.map(x => [x.id, x] as const)))
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
yield* $(store.all.flatMap(fsStore.setRaw))
|
|
37
|
+
|
|
38
|
+
const sem = Semaphore.unsafeMake(1)
|
|
39
|
+
const withPermit = sem.withPermits(1)
|
|
40
|
+
const flushToDisk = store.all.flatMap(fsStore.setRaw).apply(withPermit)
|
|
41
|
+
return {
|
|
42
|
+
...store,
|
|
43
|
+
batchSet: flow(
|
|
44
|
+
store.batchSet,
|
|
45
|
+
t => t.tap(() => flushToDisk.tapErrorCause(err => Effect(console.error(err))).forkDaemon)
|
|
46
|
+
),
|
|
47
|
+
bulkSet: flow(
|
|
48
|
+
store.bulkSet,
|
|
49
|
+
t => t.tap(() => flushToDisk.tapErrorCause(err => Effect(console.error(err))).forkDaemon)
|
|
50
|
+
),
|
|
51
|
+
set: flow(
|
|
52
|
+
store.set,
|
|
53
|
+
t => t.tap(() => flushToDisk.tapErrorCause(err => Effect(console.error(err))).forkDaemon)
|
|
54
|
+
),
|
|
55
|
+
remove: flow(
|
|
56
|
+
store.remove,
|
|
57
|
+
t => t.tap(() => flushToDisk.tapErrorCause(err => Effect(console.error(err))).forkDaemon)
|
|
58
|
+
)
|
|
59
|
+
} satisfies Store<PM, Id>
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
10
63
|
/**
|
|
11
64
|
* The Disk-backed store, flushes writes in background, but keeps the data in memory
|
|
12
65
|
* and should therefore be as fast as the Memory Store.
|
|
@@ -18,55 +71,43 @@ export function makeDiskStore({ prefix }: StorageConfig) {
|
|
|
18
71
|
fs.mkdirSync(dir)
|
|
19
72
|
}
|
|
20
73
|
return {
|
|
21
|
-
make: <Id extends string, Id2 extends Id,
|
|
74
|
+
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
22
75
|
name: string,
|
|
23
|
-
existing?: Effect<never, never, ReadonlyMap<Id2,
|
|
24
|
-
|
|
76
|
+
existing?: Effect<never, never, ReadonlyMap<Id2, PM>>,
|
|
77
|
+
config?: StoreConfig<PM>
|
|
25
78
|
) =>
|
|
26
79
|
Effect.gen(function*($) {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
80
|
+
const storesSem = Semaphore.unsafeMake(1)
|
|
81
|
+
const primary = yield* $(makeDiskStoreInt(prefix, "primary", name, existing))
|
|
82
|
+
const stores = new Map<string, Store<PM, Id>>([["primary", primary]])
|
|
83
|
+
const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap(namespace => {
|
|
84
|
+
const store = stores.get(namespace)
|
|
85
|
+
if (store) {
|
|
86
|
+
return Effect.succeed(store)
|
|
87
|
+
}
|
|
88
|
+
if (!config.allowNamespace!(namespace)) {
|
|
89
|
+
throw new Error(`Namespace ${namespace} not allowed!`)
|
|
90
|
+
}
|
|
91
|
+
return storesSem.withPermits(1)(
|
|
92
|
+
Effect.suspendSucceed(() => {
|
|
93
|
+
const existing = stores.get(namespace)
|
|
94
|
+
if (existing) return Effect(existing)
|
|
95
|
+
return makeDiskStoreInt<Id, Id2, PM>(prefix, namespace, name, existing).tap(store =>
|
|
96
|
+
Effect.sync(() => stores.set(namespace, store))
|
|
97
|
+
)
|
|
98
|
+
})
|
|
44
99
|
)
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
yield* $(store.all.flatMap(fsStore.setRaw))
|
|
100
|
+
})
|
|
48
101
|
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
...
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
bulkSet:
|
|
57
|
-
|
|
58
|
-
flushToDisk.tapErrorCause(err =>
|
|
59
|
-
Effect(console.error(err))
|
|
60
|
-
).forkDaemon
|
|
61
|
-
)),
|
|
62
|
-
set: flow(store.set, t =>
|
|
63
|
-
t.tap(() => flushToDisk.tapErrorCause(err => Effect(console.error(err))).forkDaemon)),
|
|
64
|
-
remove: flow(store.remove, t =>
|
|
65
|
-
t.tap(() =>
|
|
66
|
-
flushToDisk.tapErrorCause(err =>
|
|
67
|
-
Effect(console.error(err))
|
|
68
|
-
).forkDaemon
|
|
69
|
-
))
|
|
102
|
+
const s: Store<PM, Id> = {
|
|
103
|
+
all: getStore.flatMap(_ => _.all),
|
|
104
|
+
find: (...args) => getStore.flatMap(_ => _.find(...args)),
|
|
105
|
+
filter: (...args) => getStore.flatMap(_ => _.filter(...args)),
|
|
106
|
+
filterJoinSelect: (...args) => getStore.flatMap(_ => _.filterJoinSelect(...args)),
|
|
107
|
+
set: (...args) => getStore.flatMap(_ => _.set(...args)),
|
|
108
|
+
batchSet: (...args) => getStore.flatMap(_ => _.batchSet(...args)),
|
|
109
|
+
bulkSet: (...args) => getStore.flatMap(_ => _.bulkSet(...args)),
|
|
110
|
+
remove: (...args) => getStore.flatMap(_ => _.remove(...args))
|
|
70
111
|
}
|
|
71
112
|
return s
|
|
72
113
|
})
|
|
@@ -23,11 +23,59 @@ export function memFilter<T extends { id: string }>(filter: Filter<T>, cursor?:
|
|
|
23
23
|
})
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export const storeId = FiberRef.unsafeMake("
|
|
26
|
+
export const storeId = FiberRef.unsafeMake("primary")
|
|
27
27
|
export const restoreFromRequestContext = RequestContext.Tag.accessWithEffect(ctx =>
|
|
28
|
-
storeId.set(
|
|
28
|
+
storeId.set(ctx.parent?.namespace ?? ctx.namespace ?? "primary")
|
|
29
29
|
)
|
|
30
|
-
|
|
30
|
+
|
|
31
|
+
export function makeMemoryStoreInt<Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
32
|
+
name: string,
|
|
33
|
+
existing?: Effect<never, never, ReadonlyMap<Id2, PM>>
|
|
34
|
+
) {
|
|
35
|
+
return Effect.gen(function*($) {
|
|
36
|
+
const updateETag = makeUpdateETag(name)
|
|
37
|
+
const items: ReadonlyMap<Id, PM> = yield* $(existing ?? Effect(new Map<Id, PM>()))
|
|
38
|
+
const makeStore = (): ReadonlyMap<Id, PM> => new Map([...items.entries()].map(([id, e]) => [id, makeETag(e)]))
|
|
39
|
+
const store = Ref.unsafeMake(makeStore())
|
|
40
|
+
const sem = Semaphore.unsafeMake(1)
|
|
41
|
+
const withPermit = sem.withPermits(1)
|
|
42
|
+
const values = store.get.map(s => s.values())
|
|
43
|
+
const all = values.map(Chunk.fromIterable)
|
|
44
|
+
const batchSet = (items: NonEmptyReadonlyArray<PM>) =>
|
|
45
|
+
items
|
|
46
|
+
.forEachEffect(i => s.find(i.id).flatMap(current => updateETag(i, current)))
|
|
47
|
+
.tap(items =>
|
|
48
|
+
store.get
|
|
49
|
+
.map(m => {
|
|
50
|
+
const mut = m as Map<Id, PM>
|
|
51
|
+
items.forEach(e => mut.set(e.id, e))
|
|
52
|
+
return mut
|
|
53
|
+
})
|
|
54
|
+
.flatMap(_ => store.set(_))
|
|
55
|
+
)
|
|
56
|
+
.map(_ => _.toReadonlyArray() as NonEmptyReadonlyArray<PM>)
|
|
57
|
+
.apply(withPermit)
|
|
58
|
+
const s: Store<PM, Id> = {
|
|
59
|
+
all,
|
|
60
|
+
find: id => store.get.map(_ => Option.fromNullable(_.get(id))),
|
|
61
|
+
filter: (filter: Filter<PM>, cursor?: { skip?: number; limit?: number }) => all.map(memFilter(filter, cursor)),
|
|
62
|
+
filterJoinSelect: <T extends object>(filter: FilterJoinSelect) =>
|
|
63
|
+
all.map(c => c.flatMap(codeFilterJoinSelect<PM, T>(filter))),
|
|
64
|
+
set: e =>
|
|
65
|
+
s
|
|
66
|
+
.find(e.id)
|
|
67
|
+
.flatMap(current => updateETag(e, current))
|
|
68
|
+
.tap(e => store.get.map(_ => new Map([..._, [e.id, e]])).flatMap(_ => store.set(_)))
|
|
69
|
+
.apply(withPermit),
|
|
70
|
+
batchSet,
|
|
71
|
+
bulkSet: batchSet,
|
|
72
|
+
remove: (e: PM) =>
|
|
73
|
+
store.get.map(_ => new Map([..._].filter(([_]) => _ !== e.id)))
|
|
74
|
+
.flatMap(_ => store.set(_)).apply(withPermit)
|
|
75
|
+
}
|
|
76
|
+
return s
|
|
77
|
+
})
|
|
78
|
+
}
|
|
31
79
|
|
|
32
80
|
export const makeMemoryStore = () => ({
|
|
33
81
|
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(
|
|
@@ -36,48 +84,32 @@ export const makeMemoryStore = () => ({
|
|
|
36
84
|
config?: StoreConfig<PM>
|
|
37
85
|
) =>
|
|
38
86
|
Effect.gen(function*($) {
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.tap(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const mut = m as Map<Id, PM>
|
|
57
|
-
items.forEach(e => mut.set(e.id, e))
|
|
58
|
-
return mut
|
|
59
|
-
})
|
|
60
|
-
.flatMap(_ => setStore(_))
|
|
61
|
-
)
|
|
62
|
-
.map(_ => _.toReadonlyArray() as NonEmptyReadonlyArray<PM>)
|
|
63
|
-
.apply(withPermit)
|
|
87
|
+
const storesSem = Semaphore.unsafeMake(1)
|
|
88
|
+
const primary = yield* $(makeMemoryStoreInt<Id, Id2, PM>(name, existing))
|
|
89
|
+
const stores = new Map([["primary", primary]])
|
|
90
|
+
const getStore = !config?.allowNamespace ? Effect.succeed(primary) : storeId.get.flatMap(namespace => {
|
|
91
|
+
const store = stores.get(namespace)
|
|
92
|
+
if (store) {
|
|
93
|
+
return Effect.succeed(store)
|
|
94
|
+
}
|
|
95
|
+
if (!config.allowNamespace!(namespace)) {
|
|
96
|
+
throw new Error(`Namespace ${namespace} not allowed!`)
|
|
97
|
+
}
|
|
98
|
+
return storesSem.withPermits(1)(Effect.suspendSucceed(() => {
|
|
99
|
+
const store = stores.get(namespace)
|
|
100
|
+
if (store) return Effect(store)
|
|
101
|
+
return makeMemoryStoreInt(name, existing).tap(store => Effect.sync(() => stores.set(namespace, store)))
|
|
102
|
+
}))
|
|
103
|
+
})
|
|
64
104
|
const s: Store<PM, Id> = {
|
|
65
|
-
all,
|
|
66
|
-
find:
|
|
67
|
-
filter: (
|
|
68
|
-
filterJoinSelect:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.flatMap(current => updateETag(e, current))
|
|
74
|
-
.tap(e => getStore.map(_ => new Map([..._, [e.id, e]])).flatMap(_ => setStore(_)))
|
|
75
|
-
.apply(withPermit),
|
|
76
|
-
batchSet,
|
|
77
|
-
bulkSet: batchSet,
|
|
78
|
-
remove: (e: PM) =>
|
|
79
|
-
getStore.map(_ => new Map([..._].filter(([_]) => _ !== e.id)))
|
|
80
|
-
.flatMap(_ => setStore(_)).apply(withPermit)
|
|
105
|
+
all: getStore.flatMap(_ => _.all),
|
|
106
|
+
find: (...args) => getStore.flatMap(_ => _.find(...args)),
|
|
107
|
+
filter: (...args) => getStore.flatMap(_ => _.filter(...args)),
|
|
108
|
+
filterJoinSelect: (...args) => getStore.flatMap(_ => _.filterJoinSelect(...args)),
|
|
109
|
+
set: (...args) => getStore.flatMap(_ => _.set(...args)),
|
|
110
|
+
batchSet: (...args) => getStore.flatMap(_ => _.batchSet(...args)),
|
|
111
|
+
bulkSet: (...args) => getStore.flatMap(_ => _.bulkSet(...args)),
|
|
112
|
+
remove: (...args) => getStore.flatMap(_ => _.remove(...args))
|
|
81
113
|
}
|
|
82
114
|
return s
|
|
83
115
|
})
|
|
@@ -9,7 +9,7 @@ export type StoreConfig<E> = {
|
|
|
9
9
|
uniqueKeys?: UniqueKey[]
|
|
10
10
|
maxBulkSize?: number
|
|
11
11
|
partitionValue: (e: E) => string | undefined
|
|
12
|
-
|
|
12
|
+
allowNamespace?: (namespace: string) => boolean
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export type SupportedValues = string | boolean | number | null
|
|
@@ -18,7 +18,7 @@ export declare function makeOpenApiSpecs(rdescs: Iterable<RouteDescriptorAny>, i
|
|
|
18
18
|
version: string;
|
|
19
19
|
};
|
|
20
20
|
tags: never[];
|
|
21
|
-
paths: Record<string, Record<"
|
|
21
|
+
paths: Record<string, Record<"PATCH" | "GET" | "POST" | "PUT" | "DELETE", {
|
|
22
22
|
[x: string]: {
|
|
23
23
|
responses: any;
|
|
24
24
|
tags: readonly string[] | undefined;
|
package/dist/api/routing.d.ts
CHANGED
|
@@ -94,7 +94,7 @@ export interface ReqHandler<Req, R, E, Res, ReqSchema extends MO.SchemaAny, ResS
|
|
|
94
94
|
* })
|
|
95
95
|
* ```
|
|
96
96
|
*/
|
|
97
|
-
export declare function matchResource<TModules extends Record<string, Record<string, any>>>(mod: TModules): <THandlers extends { [K in keyof TModules]: (req: InstanceType<GetRequest<TModules[K]> extends infer T ? T extends GetRequest<TModules[K]> ? T extends new (...args: any[]) => any ? T : never : never : never>) => import("@effect/io/Effect").Effect<any, SupportedErrors, MO.ParsedShapeOf<Extr<GetResponse<TModules[K]>>>>; }>(handlers: THandlers) => { [K_1 in keyof TModules]: ReqHandler<InstanceType<GetRequest<TModules[K_1]> extends infer
|
|
97
|
+
export declare function matchResource<TModules extends Record<string, Record<string, any>>>(mod: TModules): <THandlers extends { [K in keyof TModules]: (req: InstanceType<GetRequest<TModules[K]> extends infer T ? T extends GetRequest<TModules[K]> ? T extends new (...args: any[]) => any ? T : never : never : never>) => import("@effect/io/Effect").Effect<any, SupportedErrors, MO.ParsedShapeOf<Extr<GetResponse<TModules[K]>>>>; }>(handlers: THandlers) => { [K_1 in keyof TModules]: ReqHandler<InstanceType<GetRequest<TModules[K_1]> extends infer T_1 ? T_1 extends GetRequest<TModules[K_1]> ? T_1 extends new (...args: any[]) => any ? T_1 : never : never : never>, _R<ReturnType<THandlers[K_1]>>, _E<ReturnType<THandlers[K_1]>>, MO.ParsedShapeOf<Extr<GetResponse<TModules[K_1]>>>, GetRequest<TModules[K_1]>, GetResponse<TModules[K_1]>, any>; };
|
|
98
98
|
export type ReqFromSchema<ReqSchema> = InstanceType<ReqSchema extends {
|
|
99
99
|
new (...args: any[]): any;
|
|
100
100
|
} ? ReqSchema : never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../_src/api/routing.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AACxD,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAEhD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAa,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAEtH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAKrE,eAAO,MAAM,eAAe;;EAE1B,CAAA;AAEF,wBAAgB,kBAAkB,CAChC,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,MAAM,EAEN,OAAO,EAAE,cAAc,CACrB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,MAAM,CACP,CAAC,SAAS,CAAC,GACX,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAgDxD;AAED,MAAM,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,IAAI,CAChE,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,OAAO,EAAE,cAAc,KACpB,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAElC,MAAM,MAAM,UAAU,CACpB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,IAAI,EACJ,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,IACR,CACF,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KACjF;IACH,OAAO,EAAE,OAAO,OAAO,CAAA;IACvB,WAAW,EAAE,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CACjD,CAAA;AAED,wBAAgB,KAAK,CACnB,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,IAAI,GAAG,KAAK,EAEZ,cAAc,EAAE,cAAc,CAC5B,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,CACF,EACD,YAAY,EAAE,CAAC,CAAC,EACd,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,cAAc,EAAE,cAAc,EAC9B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,IAAI,CAAC,KACrC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAC9B,UAAU,CAAC,EAAE,UAAU,CACrB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,EACD,EAAE,EACF,EAAE,CACH,yMAwBF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EACvC,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,SAE9B,IAAI,OAAO,gBAAgB,KAAK,CAAC,4DAU/C;AAED,wBAAgB,kBAAkB,CAChC,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,GAAG,IAAI,EACX,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,IAAI,GAAG,KAAK,EAEZ,OAAO,EAAE,oBAAoB,CAC3B,CAAC,GAAG,EAAE,EACN,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,CACF,EACD,YAAY,EAAE,CAAC,CAAC,EACd,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,cAAc,EAAE,cAAc,EAC9B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,IAAI,CAAC,KACrC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACvD,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CA6KrF;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;AAEzG,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE3F,KAAK,QAAQ,CAAC,CAAC,SAAS,eAAe,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,CACzC,MAAM,CAAC,EACP,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,cAAc;IACnB,eAAe,CAChB,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GACpB,KAAK;CACV,CAAA;AAED,MAAM,MAAM,UAAU,CACpB,CAAC,EAQD,EAAE,GAAG,KAAK,IACR,MAAM,CACN,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,UAAU,GACb,OAAO,CACP,CAAC,EACD,EAAE,CACH,EACD,KAAK,EACL,kBAAkB,CACnB,CAAA;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,eAAe,EAAE,QAAQ,EAAE,CAAC,eAO9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,mBAAmB,EAAE,QAAQ,EAAE,CAAC,4BAQrE;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,mBAAmB,IAAI;KACvD,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAA;AAID,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG;KACjE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAChB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzF,WAAW,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC;SAChC,CAAC,IAAI,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;KAC1F,CAAC,GACF,KAAK,GACP,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,KAAK,KACN,IAAI;CACV,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO,GAAiB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,GAClH,KAAK,CAAA;AAEP,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG;KAC9D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAChB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAMzF,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACZ,KAAK,GACL,KAAK,KACN,IAAI;CACV,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO,GAAiB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,GAClH,KAAK,CAAA;AAEP,wBAAgB,MAAM,CACpB,OAAO,SAAS,MAAM,CACpB,MAAM,EACN,GAAG,CACJ,EAED,CAAC,EAAE,OAAO,GAAG;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,EACtC,aAAa,CAAC,EAAE,GAAG,wEASgB,GAAG,EAAE,KAAG,GAAG,iMAAX,GAAG,EAAE,KAAG,GAAG,qIAqB/C;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAA;CAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAChE,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,CAAC,GAC1B,KAAK,CAAA;AAET,MAAM,WAAW,UAAU,CACzB,GAAG,EACH,CAAC,EACD,CAAC,EACD,GAAG,EACH,SAAS,SAAS,EAAE,CAAC,SAAS,EAC9B,SAAS,SAAS,EAAE,CAAC,SAAS,EAC9B,GAAG,GAAG,GAAG;IAET,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1C,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,eAAe,EAAE,GAAG,CAAA;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../_src/api/routing.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,EAAE,MAAM,oCAAoC,CAAA;AACxD,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAEzE,OAAO,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAEhD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAa,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAEtH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAKrE,eAAO,MAAM,eAAe;;EAE1B,CAAA;AAEF,wBAAgB,kBAAkB,CAChC,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,MAAM,EAEN,OAAO,EAAE,cAAc,CACrB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,MAAM,CACP,CAAC,SAAS,CAAC,GACX,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAgDxD;AAED,MAAM,MAAM,qBAAqB,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,IAAI,CAChE,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,OAAO,EAAE,cAAc,KACpB,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AAElC,MAAM,MAAM,UAAU,CACpB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,IAAI,EACJ,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,IACR,CACF,OAAO,EAAE,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KACjF;IACH,OAAO,EAAE,OAAO,OAAO,CAAA;IACvB,WAAW,EAAE,qBAAqB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;CACjD,CAAA;AAED,wBAAgB,KAAK,CACnB,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,EACJ,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,IAAI,GAAG,KAAK,EAEZ,cAAc,EAAE,cAAc,CAC5B,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,CACF,EACD,YAAY,EAAE,CAAC,CAAC,EACd,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,cAAc,EAAE,cAAc,EAC9B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,IAAI,CAAC,KACrC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAC9B,UAAU,CAAC,EAAE,UAAU,CACrB,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,EACD,EAAE,EACF,EAAE,CACH,yMAwBF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EACvC,cAAc,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,SAE9B,IAAI,OAAO,gBAAgB,KAAK,CAAC,4DAU/C;AAED,wBAAgB,kBAAkB,CAChC,CAAC,EACD,CAAC,EACD,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,SAAS,KAAK,GAAG,MAAM,GAAG,KAAK,EACnC,IAAI,GAAG,IAAI,EACX,EAAE,GAAG,KAAK,EACV,EAAE,GAAG,KAAK,EACV,IAAI,GAAG,KAAK,EAEZ,OAAO,EAAE,oBAAoB,CAC3B,CAAC,GAAG,EAAE,EACN,KAAK,EACL,OAAO,EACP,MAAM,EACN,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,CAAC,CACF,EACD,YAAY,EAAE,CAAC,CAAC,EACd,GAAG,EAAE,OAAO,CAAC,OAAO,EACpB,GAAG,EAAE,OAAO,CAAC,QAAQ,EACrB,cAAc,EAAE,cAAc,EAC9B,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,IAAI,CAAC,KACrC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GACvD,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CA6KrF;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAA;AAEzG,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAE3F,KAAK,QAAQ,CAAC,CAAC,SAAS,eAAe,IAAI;KACxC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,cAAc,CACzC,MAAM,CAAC,EACP,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,gBAAgB;IACrB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,cAAc;IACnB,eAAe,CAChB,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,GACpB,KAAK;CACV,CAAA;AAED,MAAM,MAAM,UAAU,CACpB,CAAC,EAQD,EAAE,GAAG,KAAK,IACR,MAAM,CACN,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,UAAU,GACb,OAAO,CACP,CAAC,EACD,EAAE,CACH,EACD,KAAK,EACL,kBAAkB,CACnB,CAAA;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,eAAe,EAAE,QAAQ,EAAE,CAAC,eAO9D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,mBAAmB,EAAE,QAAQ,EAAE,CAAC,4BAQrE;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CACnD,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,mBAAmB,IAAI;KACvD,CAAC,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/B,CAAA;AAID,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG;KACjE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAChB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACzF,WAAW,CAAC,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC;SAChC,CAAC,IAAI,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;KAC1F,CAAC,GACF,KAAK,GACP,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,KAAK,KACN,IAAI;CACV,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO,GAAiB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,GAClH,KAAK,CAAA;AAEP,KAAK,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,SAAS,CAAC,GAAG,MAAM,GAAG;KAC9D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAChB,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,CAAC,SAAS,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAMzF,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GACZ,KAAK,GACL,KAAK,KACN,IAAI;CACV,SAAS,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,OAAO,GAAiB;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,KAAK,GAClH,KAAK,CAAA;AAEP,wBAAgB,MAAM,CACpB,OAAO,SAAS,MAAM,CACpB,MAAM,EACN,GAAG,CACJ,EAED,CAAC,EAAE,OAAO,GAAG;IAAE,eAAe,CAAC,EAAE,GAAG,CAAA;CAAE,EACtC,aAAa,CAAC,EAAE,GAAG,wEASgB,GAAG,EAAE,KAAG,GAAG,iMAAX,GAAG,EAAE,KAAG,GAAG,qIAqB/C;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,KAAK,EAAE,EAAE,CAAC,SAAS,CAAA;CAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAChE,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,CAAC,GAC1B,KAAK,CAAA;AAET,MAAM,WAAW,UAAU,CACzB,GAAG,EACH,CAAC,EACD,CAAC,EACD,GAAG,EACH,SAAS,SAAS,EAAE,CAAC,SAAS,EAC9B,SAAS,SAAS,EAAE,CAAC,SAAS,EAC9B,GAAG,GAAG,GAAG;IAET,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC1C,OAAO,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,eAAe,EAAE,GAAG,CAAA;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,kuBA2BhG;AAED,MAAM,MAAM,aAAa,CAAC,SAAS,IAAI,YAAY,CACjD,SAAS,SAAS;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CAAE,GAAG,SAAS,GACtD,KAAK,CACV,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,SAAS,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA"}
|
|
@@ -7,7 +7,7 @@ import { StoreMaker } from "./service.js";
|
|
|
7
7
|
* and should therefore be as fast as the Memory Store.
|
|
8
8
|
*/
|
|
9
9
|
export declare function makeDiskStore({ prefix }: StorageConfig): import("@effect/io/Effect").Effect<never, never, {
|
|
10
|
-
make: <Id extends string, Id2 extends Id,
|
|
10
|
+
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(name: string, existing?: import("@effect/io/Effect").Effect<never, never, ReadonlyMap<Id2, PM>> | undefined, config?: StoreConfig<PM> | undefined) => import("@effect/io/Effect").Effect<never, never, Store<PM, Id>>;
|
|
11
11
|
}>;
|
|
12
12
|
export declare function DiskStoreLive(config: Config<StorageConfig>): import("@effect/io/Layer").Layer<never, import("@effect/io/Config/Error").ConfigError, StoreMaker>;
|
|
13
13
|
//# sourceMappingURL=Disk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Disk.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Disk.ts"],"names":[],"mappings":";;AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAsDzC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa;yFAQzC,MAAM;GAyCnB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,sGAI1D"}
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/core/Function";
|
|
3
|
-
import * as tsplus_module_3 from "@effect
|
|
3
|
+
import * as tsplus_module_3 from "@effect/io/FiberRef";
|
|
4
|
+
import * as tsplus_module_4 from "@effect-app/core/Effect";
|
|
4
5
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
6
|
import * as fu from "@effect-app/infra-adapters/fileUtil";
|
|
6
7
|
import fs from "fs";
|
|
7
|
-
import {
|
|
8
|
+
import { dir } from "console";
|
|
9
|
+
import { makeMemoryStoreInt, storeId } from "./Memory.js";
|
|
8
10
|
import { StoreMaker } from "./service.js";
|
|
11
|
+
function makeDiskStoreInt(prefix, namespace, name, existing) {
|
|
12
|
+
return tsplus_module_1.gen(function* ($) {
|
|
13
|
+
const file = dir + "/" + prefix + name + (namespace === "primary" ? "" : "-" + namespace) + ".json";
|
|
14
|
+
const fsStore = {
|
|
15
|
+
get: tsplus_module_1.orDie(tsplus_module_1.map(x => JSON.parse(x))(fu
|
|
16
|
+
.readTextFile(file))),
|
|
17
|
+
setRaw: (v) => JSON.stringify([...v], undefined, 2)["|>"](json => fu.writeTextFile(file, json))
|
|
18
|
+
};
|
|
19
|
+
const store = yield* $(makeMemoryStoreInt(name, !fs.existsSync(file)
|
|
20
|
+
? existing ?? tsplus_module_1.sync(() => new Map())
|
|
21
|
+
: tsplus_module_1.map(x => new Map(x.map(x => [x.id, x])))(fsStore.get)));
|
|
22
|
+
yield* $(tsplus_module_1.flatMap(fsStore.setRaw)(store.all));
|
|
23
|
+
const sem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
24
|
+
const withPermit = sem.withPermits(1);
|
|
25
|
+
const flushToDisk = withPermit(tsplus_module_1.flatMap(fsStore.setRaw)(store.all));
|
|
26
|
+
return {
|
|
27
|
+
...store,
|
|
28
|
+
batchSet: tsplus_module_2.flow(store.batchSet, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
29
|
+
bulkSet: tsplus_module_2.flow(store.bulkSet, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
30
|
+
set: tsplus_module_2.flow(store.set, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t)),
|
|
31
|
+
remove: tsplus_module_2.flow(store.remove, t => tsplus_module_1.tap(() => tsplus_module_1.forkDaemon(tsplus_module_1.tapErrorCause(err => tsplus_module_1.sync(() => console.error(err)))(flushToDisk)))(t))
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
}
|
|
9
35
|
/**
|
|
10
36
|
* The Disk-backed store, flushes writes in background, but keeps the data in memory
|
|
11
37
|
* and should therefore be as fast as the Memory Store.
|
|
@@ -17,27 +43,34 @@ export function makeDiskStore({ prefix }) {
|
|
|
17
43
|
fs.mkdirSync(dir);
|
|
18
44
|
}
|
|
19
45
|
return {
|
|
20
|
-
make: (name, existing,
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
46
|
+
make: (name, existing, config) => tsplus_module_1.gen(function* ($) {
|
|
47
|
+
const storesSem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
48
|
+
const primary = yield* $(makeDiskStoreInt(prefix, "primary", name, existing));
|
|
49
|
+
const stores = new Map([["primary", primary]]);
|
|
50
|
+
const getStore = !config?.allowNamespace ? tsplus_module_1.succeed(primary) : tsplus_module_1.flatMap(namespace => {
|
|
51
|
+
const store = stores.get(namespace);
|
|
52
|
+
if (store) {
|
|
53
|
+
return tsplus_module_1.succeed(store);
|
|
54
|
+
}
|
|
55
|
+
if (!config.allowNamespace(namespace)) {
|
|
56
|
+
throw new Error(`Namespace ${namespace} not allowed!`);
|
|
57
|
+
}
|
|
58
|
+
return storesSem.withPermits(1)(tsplus_module_1.suspendSucceed(() => {
|
|
59
|
+
const existing = stores.get(namespace);
|
|
60
|
+
if (existing)
|
|
61
|
+
return tsplus_module_1.sync(() => existing);
|
|
62
|
+
return tsplus_module_1.tap(store => tsplus_module_1.sync(() => stores.set(namespace, store)))(makeDiskStoreInt(prefix, namespace, name, existing));
|
|
63
|
+
}));
|
|
64
|
+
})(tsplus_module_3.get(storeId));
|
|
35
65
|
const s = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
66
|
+
all: tsplus_module_1.flatMap(_ => _.all)(getStore),
|
|
67
|
+
find: (...args) => tsplus_module_1.flatMap(_ => _.find(...args))(getStore),
|
|
68
|
+
filter: (...args) => tsplus_module_1.flatMap(_ => _.filter(...args))(getStore),
|
|
69
|
+
filterJoinSelect: (...args) => tsplus_module_1.flatMap(_ => _.filterJoinSelect(...args))(getStore),
|
|
70
|
+
set: (...args) => tsplus_module_1.flatMap(_ => _.set(...args))(getStore),
|
|
71
|
+
batchSet: (...args) => tsplus_module_1.flatMap(_ => _.batchSet(...args))(getStore),
|
|
72
|
+
bulkSet: (...args) => tsplus_module_1.flatMap(_ => _.bulkSet(...args))(getStore),
|
|
73
|
+
remove: (...args) => tsplus_module_1.flatMap(_ => _.remove(...args))(getStore)
|
|
41
74
|
};
|
|
42
75
|
return s;
|
|
43
76
|
})
|
|
@@ -45,6 +78,6 @@ export function makeDiskStore({ prefix }) {
|
|
|
45
78
|
});
|
|
46
79
|
}
|
|
47
80
|
export function DiskStoreLive(config) {
|
|
48
|
-
return
|
|
81
|
+
return tsplus_module_4.toLayer(tsplus_module_1.flatMap(makeDiskStore)(tsplus_module_1.config(config)), StoreMaker);
|
|
49
82
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvU3RvcmUvRGlzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsdURBQXVEO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFFekQsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBRW5CLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXpDLFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixJQUFZLEVBQ1osUUFBcUQ7SUFFckQsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQTtRQUNuRyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsd0JBQUUsb0JBRUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBUyxFQUY1QixFQUFFO2lCQUNKLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FDYSxDQUMxQjtZQUNSLE1BQU0sRUFBRSxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJ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
|
|
@@ -10,8 +10,9 @@ export declare function memFilter<T extends {
|
|
|
10
10
|
skip?: number;
|
|
11
11
|
limit?: number;
|
|
12
12
|
}): (c: Chunk<T>) => Chunk<T>;
|
|
13
|
-
export declare const storeId: import("@effect/io/FiberRef").FiberRef
|
|
13
|
+
export declare const storeId: import("@effect/io/FiberRef").FiberRef<string>;
|
|
14
14
|
export declare const restoreFromRequestContext: import("@effect/io/Effect").Effect<RequestContext, never, void>;
|
|
15
|
+
export declare function makeMemoryStoreInt<Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(name: string, existing?: Effect<never, never, ReadonlyMap<Id2, PM>>): import("@effect/io/Effect").Effect<never, never, Store<PM, Id>>;
|
|
15
16
|
export declare const makeMemoryStore: () => {
|
|
16
17
|
make: <Id extends string, Id2 extends Id, PM extends PersistenceModelType<Id>>(name: string, existing?: import("@effect/io/Effect").Effect<never, never, ReadonlyMap<Id2, PM>> | undefined, config?: StoreConfig<PM> | undefined) => import("@effect/io/Effect").Effect<never, never, Store<PM, Id>>;
|
|
17
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Memory.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAoB,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,OACnG,MAAM,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAehC;AAED,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"Memory.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Memory.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAoB,oBAAoB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,OACnG,MAAM,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAehC;AAED,eAAO,MAAM,OAAO,gDAAiC,CAAA;AACrD,eAAO,MAAM,yBAAyB,iEAErC,CAAA;AAED,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,SAAS,oBAAoB,CAAC,EAAE,CAAC,EACvG,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,mEA6CtD;AAED,eAAO,MAAM,eAAe;yFAElB,MAAM;CAkCd,CAAA;AAEF,eAAO,MAAM,eAAe,4DAA0C,CAAA"}
|
|
@@ -29,40 +29,69 @@ export function memFilter(filter, cursor) {
|
|
|
29
29
|
return tsplus_module_4.ext_itToChunk(r);
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
-
export const storeId = tsplus_module_5.unsafeMake("
|
|
33
|
-
export const restoreFromRequestContext = tsplus_module_7.serviceWithEffect(tsplus_module_6.tag, ctx => tsplus_module_5.set(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
make: (name, existing, config) => tsplus_module_7.gen(function* ($) {
|
|
37
|
-
const namespaces = config?.namespaces ?? ["store-1"];
|
|
32
|
+
export const storeId = tsplus_module_5.unsafeMake("primary");
|
|
33
|
+
export const restoreFromRequestContext = tsplus_module_7.serviceWithEffect(tsplus_module_6.tag, ctx => tsplus_module_5.set(ctx.parent?.namespace ?? ctx.namespace ?? "primary")(storeId));
|
|
34
|
+
export function makeMemoryStoreInt(name, existing) {
|
|
35
|
+
return tsplus_module_7.gen(function* ($) {
|
|
38
36
|
const updateETag = makeUpdateETag(name);
|
|
39
37
|
const items = yield* $(existing ?? tsplus_module_7.sync(() => new Map()));
|
|
40
38
|
const makeStore = () => new Map([...items.entries()].map(([id, e]) => [id, makeETag(e)]));
|
|
41
|
-
const
|
|
42
|
-
const getStore = tsplus_module_7.flatMap(namespace => tsplus_module_8.get(stores.get(namespace)))(tsplus_module_5.get(storeId));
|
|
43
|
-
const setStore = (m) => tsplus_module_7.flatMap(namespace => tsplus_module_8.set(m)(stores.get(namespace)))(tsplus_module_5.get(storeId));
|
|
39
|
+
const store = tsplus_module_8.unsafeMake(makeStore());
|
|
44
40
|
const sem = tsplus_module_7.unsafeMakeSemaphore(1);
|
|
45
41
|
const withPermit = sem.withPermits(1);
|
|
46
|
-
const values = tsplus_module_7.map(s => s.values())(
|
|
42
|
+
const values = tsplus_module_7.map(s => s.values())(tsplus_module_8.get(store));
|
|
47
43
|
const all = tsplus_module_7.map(tsplus_module_1.fromIterable)(values);
|
|
48
|
-
const batchSet = (items) => withPermit(tsplus_module_7.map(_ => _.toReadonlyArray())(tsplus_module_7.tap(items => tsplus_module_7.flatMap(_ =>
|
|
44
|
+
const batchSet = (items) => withPermit(tsplus_module_7.map(_ => _.toReadonlyArray())(tsplus_module_7.tap(items => tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(m => {
|
|
49
45
|
const mut = m;
|
|
50
46
|
items.forEach(e => mut.set(e.id, e));
|
|
51
47
|
return mut;
|
|
52
|
-
})(
|
|
48
|
+
})(tsplus_module_8.get(store))))(tsplus_module_9.ext_forEach(items, i => tsplus_module_7.flatMap(current => updateETag(i, current))(s.find(i.id))))));
|
|
53
49
|
const s = {
|
|
54
50
|
all,
|
|
55
|
-
find: id => tsplus_module_7.map(_ => tsplus_module_3.fromNullable(_.get(id)))(
|
|
51
|
+
find: id => tsplus_module_7.map(_ => tsplus_module_3.fromNullable(_.get(id)))(tsplus_module_8.get(store)),
|
|
56
52
|
filter: (filter, cursor) => tsplus_module_7.map(memFilter(filter, cursor))(all),
|
|
57
53
|
filterJoinSelect: (filter) => tsplus_module_7.map(c => c.flatMap(codeFilterJoinSelect(filter)))(all),
|
|
58
|
-
set: e => withPermit(tsplus_module_7.tap(e => tsplus_module_7.flatMap(_ =>
|
|
54
|
+
set: e => withPermit(tsplus_module_7.tap(e => tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(_ => new Map([..._, [e.id, e]]))(tsplus_module_8.get(store))))(tsplus_module_7.flatMap(current => updateETag(e, current))(s
|
|
59
55
|
.find(e.id)))),
|
|
60
56
|
batchSet,
|
|
61
57
|
bulkSet: batchSet,
|
|
62
|
-
remove: (e) => withPermit(tsplus_module_7.flatMap(_ =>
|
|
58
|
+
remove: (e) => withPermit(tsplus_module_7.flatMap(_ => tsplus_module_8.set(_)(store))(tsplus_module_7.map(_ => new Map([..._].filter(([_]) => _ !== e.id)))(tsplus_module_8.get(store))))
|
|
59
|
+
};
|
|
60
|
+
return s;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
export const makeMemoryStore = () => ({
|
|
64
|
+
make: (name, existing, config) => tsplus_module_7.gen(function* ($) {
|
|
65
|
+
const storesSem = tsplus_module_7.unsafeMakeSemaphore(1);
|
|
66
|
+
const primary = yield* $(makeMemoryStoreInt(name, existing));
|
|
67
|
+
const stores = new Map([["primary", primary]]);
|
|
68
|
+
const getStore = !config?.allowNamespace ? tsplus_module_7.succeed(primary) : tsplus_module_7.flatMap(namespace => {
|
|
69
|
+
const store = stores.get(namespace);
|
|
70
|
+
if (store) {
|
|
71
|
+
return tsplus_module_7.succeed(store);
|
|
72
|
+
}
|
|
73
|
+
if (!config.allowNamespace(namespace)) {
|
|
74
|
+
throw new Error(`Namespace ${namespace} not allowed!`);
|
|
75
|
+
}
|
|
76
|
+
return storesSem.withPermits(1)(tsplus_module_7.suspendSucceed(() => {
|
|
77
|
+
const store = stores.get(namespace);
|
|
78
|
+
if (store)
|
|
79
|
+
return tsplus_module_7.sync(() => store);
|
|
80
|
+
return tsplus_module_7.tap(store => tsplus_module_7.sync(() => stores.set(namespace, store)))(makeMemoryStoreInt(name, existing));
|
|
81
|
+
}));
|
|
82
|
+
})(tsplus_module_5.get(storeId));
|
|
83
|
+
const s = {
|
|
84
|
+
all: tsplus_module_7.flatMap(_ => _.all)(getStore),
|
|
85
|
+
find: (...args) => tsplus_module_7.flatMap(_ => _.find(...args))(getStore),
|
|
86
|
+
filter: (...args) => tsplus_module_7.flatMap(_ => _.filter(...args))(getStore),
|
|
87
|
+
filterJoinSelect: (...args) => tsplus_module_7.flatMap(_ => _.filterJoinSelect(...args))(getStore),
|
|
88
|
+
set: (...args) => tsplus_module_7.flatMap(_ => _.set(...args))(getStore),
|
|
89
|
+
batchSet: (...args) => tsplus_module_7.flatMap(_ => _.batchSet(...args))(getStore),
|
|
90
|
+
bulkSet: (...args) => tsplus_module_7.flatMap(_ => _.bulkSet(...args))(getStore),
|
|
91
|
+
remove: (...args) => tsplus_module_7.flatMap(_ => _.remove(...args))(getStore)
|
|
63
92
|
};
|
|
64
93
|
return s;
|
|
65
94
|
})
|
|
66
95
|
});
|
|
67
96
|
export const MemoryStoreLive = tsplus_module_10.makeLayer(StoreMaker, makeMemoryStore());
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9TdG9yZS9NZW1vcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUErQix5QkFBeUIsQ0FBQTtBQUV4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV2RixNQUFNLFVBQVUsU0FBUyxDQUEyQixNQUFpQixFQUFFLE1BQTBDO0lBQy9HLE9BQU8sQ0FBQyxDQUFDLENBQVcsRUFBWSxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUE7UUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQTtRQUMzQixJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDeEIsT0FBTywwQkFBNkQsR0FBRyxFQUFFLENBQUMsdUJBQWEsRUFBaEYsMENBQUEsNkJBQWUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFqQyxDQUFDLENBQWlDLENBQWdCLENBQStCLENBQUE7U0FDekY7UUFDRCxJQUFJLENBQUMsR0FBRywwQkFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQTlCLENBQUMsQ0FBOEIsQ0FBQTtRQUN2QyxJQUFJLElBQUksRUFBRTtZQUNSLENBQUMsR0FBRyxxQkFBTyxJQUFJLEVBQVgsQ0FBQyxDQUFXLENBQUE7U0FDakI7UUFDRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDdkIsQ0FBQyxHQUFHLHFCQUFPLEtBQUssRUFBWixDQUFDLENBQVksQ0FBQTtTQUNsQjtRQUNELHFDQUFPLENBQUMsRUFBUTtJQUNsQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMs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
|
|
@@ -11,7 +11,7 @@ export type StoreConfig<E> = {
|
|
|
11
11
|
uniqueKeys?: UniqueKey[];
|
|
12
12
|
maxBulkSize?: number;
|
|
13
13
|
partitionValue: (e: E) => string | undefined;
|
|
14
|
-
|
|
14
|
+
allowNamespace?: (namespace: string) => boolean;
|
|
15
15
|
};
|
|
16
16
|
export type SupportedValues = string | boolean | number | null;
|
|
17
17
|
export type Where = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/service.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAU,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAGzE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAA;AAErE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IAC5C,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"pure-rand": "^6.0.0",
|
|
22
22
|
"redlock": "^4.2.0",
|
|
23
23
|
"@effect-app/prelude": "0.20.3",
|
|
24
|
-
"@effect-app/schema": "0.17.3",
|
|
25
24
|
"@effect-app/core": "0.21.3",
|
|
26
|
-
"@effect-app/infra-adapters": "0.19.3"
|
|
25
|
+
"@effect-app/infra-adapters": "0.19.3",
|
|
26
|
+
"@effect-app/schema": "0.17.3"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@babel/cli": "^7.20.7",
|