@effect-app/infra 0.67.0 → 0.68.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 +21 -0
- package/_cjs/api/express/makeJsonSchema.cjs +63 -4
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.test.cjs +27 -0
- package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -0
- package/_cjs/services/Store/Disk.cjs +5 -4
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_src/api/express/makeJsonSchema.test.ts +35 -0
- package/_src/api/express/makeJsonSchema.ts +60 -0
- package/_src/services/Store/Disk.ts +9 -4
- package/dist/api/express/makeJsonSchema.d.ts +7 -1
- package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
- package/dist/api/express/makeJsonSchema.js +52 -5
- package/dist/api/express/makeJsonSchema.test.d.ts.map +1 -0
- package/dist/api/express/makeOpenApiSpecs.d.ts +2 -2
- package/dist/api/writeDocs.d.ts +1 -1
- package/dist/api/writeDocs.d.ts.map +1 -1
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +6 -5
- package/package.json +12 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 0.68.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Flush should be uninterruptible
|
|
8
|
+
|
|
9
|
+
## 0.68.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 4856c46c: add duplicated paths detection
|
|
14
|
+
- update packages
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies
|
|
19
|
+
- @effect-app/core@0.54.0
|
|
20
|
+
- @effect-app/infra-adapters@0.47.0
|
|
21
|
+
- @effect-app/prelude@0.55.0
|
|
22
|
+
- @effect-app/schema@0.48.0
|
|
23
|
+
|
|
3
24
|
## 0.67.0
|
|
4
25
|
|
|
5
26
|
### Minor Changes
|
|
@@ -3,21 +3,80 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.checkDuplicatePaths = checkDuplicatePaths;
|
|
6
7
|
exports.makeJsonSchema = makeJsonSchema;
|
|
7
|
-
var tsplus_module_1 = _interopRequireWildcard(require("@effect/
|
|
8
|
-
var tsplus_module_2 = _interopRequireWildcard(require("@effect
|
|
9
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@effect/
|
|
8
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
9
|
+
var tsplus_module_2 = _interopRequireWildcard(require("@effect/data/Chunk"));
|
|
10
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/_ext/Iterable"));
|
|
11
|
+
var _errors = require("../../errors.cjs");
|
|
10
12
|
var RS = _interopRequireWildcard(require("./schema/routing.cjs"));
|
|
11
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
14
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
15
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
14
16
|
|
|
15
17
|
const rx = /:(\w+)/g;
|
|
18
|
+
function checkDuplicatePaths(paths) {
|
|
19
|
+
const methods = Symbol("methods");
|
|
20
|
+
const pathMethods = {
|
|
21
|
+
[methods]: []
|
|
22
|
+
};
|
|
23
|
+
const regex = /(?:^|\/)([^/:\n]+)|:(\w+)/g;
|
|
24
|
+
for (const path of paths) {
|
|
25
|
+
const matches = [...path.path.matchAll(regex)].map(match => match[1] ? {
|
|
26
|
+
_tag: "resource",
|
|
27
|
+
value: match[1]
|
|
28
|
+
} : {
|
|
29
|
+
_tag: "param",
|
|
30
|
+
value: match[2]
|
|
31
|
+
});
|
|
32
|
+
let pathNavigator = pathMethods;
|
|
33
|
+
for (let i = 0; i < matches.length;) {
|
|
34
|
+
const match = matches[i];
|
|
35
|
+
switch (match._tag) {
|
|
36
|
+
case "resource":
|
|
37
|
+
{
|
|
38
|
+
if (!(match.value in pathNavigator)) {
|
|
39
|
+
;
|
|
40
|
+
pathNavigator[match.value] = {
|
|
41
|
+
[methods]: []
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
pathNavigator = pathNavigator[match.value];
|
|
45
|
+
i++;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
case "param":
|
|
49
|
+
{
|
|
50
|
+
let numberOfParams = 1;
|
|
51
|
+
while (i < matches.length && matches[i + 1]?._tag === "param") {
|
|
52
|
+
numberOfParams++;
|
|
53
|
+
i++;
|
|
54
|
+
}
|
|
55
|
+
if (!(numberOfParams in pathNavigator)) {
|
|
56
|
+
;
|
|
57
|
+
pathNavigator[numberOfParams] = {
|
|
58
|
+
[methods]: []
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
pathNavigator = pathNavigator[numberOfParams];
|
|
62
|
+
i++;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (pathNavigator[methods].includes(path.method)) {
|
|
68
|
+
// throw duplicate path-method error
|
|
69
|
+
return tsplus_module_1.fail(new _errors.InvalidStateError(`Duplicate method ${path.method} for path ${path.path}`));
|
|
70
|
+
}
|
|
71
|
+
pathNavigator[methods].push(path.method);
|
|
72
|
+
}
|
|
73
|
+
return tsplus_module_1.succeed(paths);
|
|
74
|
+
}
|
|
16
75
|
/**
|
|
17
76
|
* Work in progress JSONSchema generator.
|
|
18
77
|
*/
|
|
19
78
|
function makeJsonSchema(r) {
|
|
20
|
-
return
|
|
79
|
+
return tsplus_module_1.map(tsplus_module_1.flatMap(tsplus_module_3.ext_forEach(tsplus_module_2.fromIterable(r), RS.makeFromSchema), checkDuplicatePaths), e => {
|
|
21
80
|
const map = ({
|
|
22
81
|
method,
|
|
23
82
|
path,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeJsonSchema.cjs","names":["
|
|
1
|
+
{"version":3,"file":"makeJsonSchema.cjs","names":["_errors","require","RS","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","rx","checkDuplicatePaths","paths","methods","Symbol","pathMethods","regex","path","matches","matchAll","map","match","_tag","value","pathNavigator","i","length","numberOfParams","includes","method","tsplus_module_1","fail","InvalidStateError","push","succeed","makeJsonSchema","r","flatMap","tsplus_module_3","ext_forEach","tsplus_module_2","fromIterable","makeFromSchema","e","responses","rest","reduce","prev","cur","statusCode","type","split","replace","_a","b","Response","constructor"],"sources":["../../../_src/api/express/makeJsonSchema.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
4
|
+
var _errors = require("../../errors.cjs");
|
|
5
|
+
var _makeJsonSchema = require("./makeJsonSchema.cjs");
|
|
6
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
7
|
+
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; }
|
|
8
|
+
const path = {
|
|
9
|
+
path: "/securities/:id/search/:id2",
|
|
10
|
+
method: "get"
|
|
11
|
+
};
|
|
12
|
+
const equalPaths = ["/securities/:idt/search/:id2", "/securities/:id/search/:id2t", "/securities/:idt/search/:id2t"].map(path => ({
|
|
13
|
+
path,
|
|
14
|
+
method: "get"
|
|
15
|
+
}));
|
|
16
|
+
const differentPaths = ["/securities/:id/search/", "/securities/search/:id2", "/securities/:id/:id2/search/:id3"].map(path => ({
|
|
17
|
+
path,
|
|
18
|
+
method: "get"
|
|
19
|
+
})).concat(["/securities/:idt/search/:id2"].map(path => ({
|
|
20
|
+
path,
|
|
21
|
+
method: "post"
|
|
22
|
+
})));
|
|
23
|
+
test("works", () => {
|
|
24
|
+
expect((0, _makeJsonSchema.checkDuplicatePaths)([path, ...differentPaths])).toStrictEqual(tsplus_module_1.succeed([path, ...differentPaths]));
|
|
25
|
+
equalPaths.forEach(p => expect((0, _makeJsonSchema.checkDuplicatePaths)([path, p])).toStrictEqual(tsplus_module_1.fail(new _errors.InvalidStateError(`Duplicate method ${p.method} for path ${p.path}`))));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=makeJsonSchema.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeJsonSchema.test.cjs","names":["_errors","require","_makeJsonSchema","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","path","method","equalPaths","map","differentPaths","concat","test","expect","checkDuplicatePaths","toStrictEqual","tsplus_module_1","succeed","forEach","p","fail","InvalidStateError"],"sources":["../../../_src/api/express/makeJsonSchema.test.ts"],"sourcesContent":[null],"mappings":";;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAAyD,SAAAE,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAI,wBAAAC,GAAA,EAAAL,WAAA,SAAAA,WAAA,IAAAK,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAT,wBAAA,CAAAC,WAAA,OAAAQ,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAEzD,MAAMW,IAAI,GAAG;EAAEA,IAAI,EAAE,6BAA6B;EAAEC,MAAM,EAAE;AAAK,CAAE;AAEnE,MAAMC,UAAU,GAAG,CACjB,8BAA8B,EAC9B,8BAA8B,EAC9B,+BAA+B,CAChC,CACEC,GAAG,CAAEH,IAAI,KAAM;EAAEA,IAAI;EAAEC,MAAM,EAAE;AAAK,CAAE,CAAC,CAAC;AAE3C,MAAMG,cAAc,GAGd,CACJ,yBAAyB,EACzB,yBAAyB,EACzB,kCAAkC,CACnC,CACED,GAAG,CAAEH,IAAI,KAAM;EAAEA,IAAI;EAAEC,MAAM,EAAE;AAAK,CAAE,CAAC,CAAC,CACxCI,MAAM,CAAC,CACN,8BAA8B,CAC/B,CACEF,GAAG,CAAEH,IAAI,KAAM;EAAEA,IAAI;EAAEC,MAAM,EAAE;AAAM,CAAE,CAAC,CAAC,CAAC;AAE/CK,IAAI,CAAC,OAAO,EAAE,MAAK;EACjBC,MAAM,CAAC,IAAAC,mCAAmB,EAAC,CAACR,IAAI,EAAE,GAAGI,cAAc,CAAC,CAAC,CAAC,CAACK,aAAa,CAACC,eAAA,CAAAC,OAAA,CAAe,CAACX,IAAI,EAAE,GAAGI,cAAc,CAAC,CAAC,CAAC;EAE/GF,UAAU,CAACU,OAAO,CAAEC,CAAC,IACnBN,MAAM,CAAC,IAAAC,mCAAmB,EAAC,CAACR,IAAI,EAAEa,CAAC,CAAC,CAAC,CAAC,CAACJ,aAAa,CAClDC,eAAA,CAAAI,IAAA,CAAY,IAAIC,yBAAiB,CAAC,oBAAoBF,CAAC,CAACZ,MAAM,aAAaY,CAAC,CAACb,IAAI,EAAE,CAAC,CAAC,CACtF,CACF;AACH,CAAC,CAAC"}
|
|
@@ -29,12 +29,13 @@ function makeDiskStoreInt(prefix, namespace, dir, name, seed) {
|
|
|
29
29
|
const sem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
30
30
|
const withPermit = sem.withPermits(1);
|
|
31
31
|
const flushToDisk = withPermit(tsplus_module_1.flatMap(store.all, fsStore.setRaw));
|
|
32
|
+
const flushToDiskInBackground = tsplus_module_1.forkDaemon(tsplus_module_1.uninterruptible(tsplus_module_1.tapErrorCause(flushToDisk, err => tsplus_module_1.sync(() => console.error(err)))));
|
|
32
33
|
return {
|
|
33
34
|
...store,
|
|
34
|
-
batchSet: tsplus_module_2.flow(store.batchSet, t => tsplus_module_1.tap(t, () =>
|
|
35
|
-
bulkSet: tsplus_module_2.flow(store.bulkSet, t => tsplus_module_1.tap(t, () =>
|
|
36
|
-
set: tsplus_module_2.flow(store.set, t => tsplus_module_1.tap(t, () =>
|
|
37
|
-
remove: tsplus_module_2.flow(store.remove, t => tsplus_module_1.tap(t, () =>
|
|
35
|
+
batchSet: tsplus_module_2.flow(store.batchSet, t => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
36
|
+
bulkSet: tsplus_module_2.flow(store.bulkSet, t => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
37
|
+
set: tsplus_module_2.flow(store.set, t => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
38
|
+
remove: tsplus_module_2.flow(store.remove, t => tsplus_module_1.tap(t, () => flushToDiskInBackground))
|
|
38
39
|
};
|
|
39
40
|
});
|
|
40
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disk.cjs","names":["fu","_interopRequireWildcard","require","_fs","_interopRequireDefault","_Memory","_service","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","makeDiskStoreInt","prefix","namespace","dir","name","seed","tsplus_module_1","gen","$","file","fsStore","orDie","map","readTextFile","x","JSON","parse","setRaw","v","stringify","undefined","json","writeTextFile","store","makeMemoryStoreInt","fs","existsSync","flatMap","all","sem","unsafeMakeSemaphore","withPermit","withPermits","flushToDisk","
|
|
1
|
+
{"version":3,"file":"Disk.cjs","names":["fu","_interopRequireWildcard","require","_fs","_interopRequireDefault","_Memory","_service","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","makeDiskStoreInt","prefix","namespace","dir","name","seed","tsplus_module_1","gen","$","file","fsStore","orDie","map","readTextFile","x","JSON","parse","setRaw","v","stringify","undefined","json","writeTextFile","store","makeMemoryStoreInt","fs","existsSync","flatMap","all","sem","unsafeMakeSemaphore","withPermit","withPermits","flushToDisk","flushToDiskInBackground","forkDaemon","uninterruptible","tapErrorCause","err","sync","console","error","batchSet","tsplus_module_2","flow","t","tap","bulkSet","remove","makeDiskStore","mkdirSync","make","config","storesSem","primary","stores","Map","getStore","allowNamespace","succeed","tsplus_module_3","storeId","Error","suspend","existing","s","_","find","args","filter","filterJoinSelect","DiskStoreLive","toLayer","StoreMaker"],"sources":["../../../_src/services/Store/Disk.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { InvalidStateError } from "../../errors.js"
|
|
2
|
+
import { checkDuplicatePaths } from "./makeJsonSchema.js"
|
|
3
|
+
|
|
4
|
+
const path = { path: "/securities/:id/search/:id2", method: "get" }
|
|
5
|
+
|
|
6
|
+
const equalPaths = [
|
|
7
|
+
"/securities/:idt/search/:id2",
|
|
8
|
+
"/securities/:id/search/:id2t",
|
|
9
|
+
"/securities/:idt/search/:id2t"
|
|
10
|
+
]
|
|
11
|
+
.map((path) => ({ path, method: "get" }))
|
|
12
|
+
|
|
13
|
+
const differentPaths: {
|
|
14
|
+
path: string
|
|
15
|
+
method: string
|
|
16
|
+
}[] = [
|
|
17
|
+
"/securities/:id/search/",
|
|
18
|
+
"/securities/search/:id2",
|
|
19
|
+
"/securities/:id/:id2/search/:id3"
|
|
20
|
+
]
|
|
21
|
+
.map((path) => ({ path, method: "get" }))
|
|
22
|
+
.concat([
|
|
23
|
+
"/securities/:idt/search/:id2"
|
|
24
|
+
]
|
|
25
|
+
.map((path) => ({ path, method: "post" })))
|
|
26
|
+
|
|
27
|
+
test("works", () => {
|
|
28
|
+
expect(checkDuplicatePaths([path, ...differentPaths])).toStrictEqual(Effect.succeed([path, ...differentPaths]))
|
|
29
|
+
|
|
30
|
+
equalPaths.forEach((p) =>
|
|
31
|
+
expect(checkDuplicatePaths([path, p])).toStrictEqual(
|
|
32
|
+
Effect.fail(new InvalidStateError(`Duplicate method ${p.method} for path ${p.path}`))
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
})
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
|
|
3
|
+
import { InvalidStateError } from "../../errors.js"
|
|
3
4
|
import * as RS from "./schema/routing.js"
|
|
4
5
|
|
|
5
6
|
type Methods = "GET" | "PUT" | "POST" | "PATCH" | "DELETE"
|
|
@@ -8,6 +9,64 @@ const rx = /:(\w+)/g
|
|
|
8
9
|
|
|
9
10
|
type _A<C> = C extends ReadonlyArray<infer A> ? A : never
|
|
10
11
|
|
|
12
|
+
export function checkDuplicatePaths<T extends { path: string; method: string }>(
|
|
13
|
+
paths: readonly T[]
|
|
14
|
+
): Effect<never, InvalidStateError, readonly T[]> {
|
|
15
|
+
const methods = Symbol("methods")
|
|
16
|
+
interface PathMethods {
|
|
17
|
+
[key: string | number]: this | undefined
|
|
18
|
+
[methods]: string[]
|
|
19
|
+
}
|
|
20
|
+
const pathMethods: PathMethods = { [methods]: [] }
|
|
21
|
+
const regex = /(?:^|\/)([^/:\n]+)|:(\w+)/g
|
|
22
|
+
|
|
23
|
+
for (const path of paths) {
|
|
24
|
+
const matches = [...path.path.matchAll(regex)]
|
|
25
|
+
.map((match) =>
|
|
26
|
+
match[1]
|
|
27
|
+
? { _tag: "resource", value: match[1] } as const
|
|
28
|
+
: { _tag: "param", value: match[2]! } as const
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
let pathNavigator: PathMethods | string[] = pathMethods
|
|
32
|
+
for (let i = 0; i < matches.length;) {
|
|
33
|
+
const match = matches[i]!
|
|
34
|
+
switch (match._tag) {
|
|
35
|
+
case "resource": {
|
|
36
|
+
if (!(match.value in (pathNavigator))) {
|
|
37
|
+
;(pathNavigator)[match.value] = { [methods]: [] }
|
|
38
|
+
}
|
|
39
|
+
pathNavigator = (pathNavigator)[match.value]!
|
|
40
|
+
i++
|
|
41
|
+
break
|
|
42
|
+
}
|
|
43
|
+
case "param": {
|
|
44
|
+
let numberOfParams = 1
|
|
45
|
+
while (i < matches.length && matches[i + 1]?._tag === "param") {
|
|
46
|
+
numberOfParams++
|
|
47
|
+
i++
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (!(numberOfParams in pathNavigator)) {
|
|
51
|
+
;(pathNavigator)[numberOfParams] = { [methods]: [] }
|
|
52
|
+
}
|
|
53
|
+
pathNavigator = (pathNavigator)[numberOfParams]!
|
|
54
|
+
i++
|
|
55
|
+
break
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (pathNavigator[methods].includes(path.method)) {
|
|
61
|
+
// throw duplicate path-method error
|
|
62
|
+
return Effect.fail(new InvalidStateError(`Duplicate method ${path.method} for path ${path.path}`))
|
|
63
|
+
}
|
|
64
|
+
pathNavigator[methods].push(path.method)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return Effect.succeed(paths)
|
|
68
|
+
}
|
|
69
|
+
|
|
11
70
|
/**
|
|
12
71
|
* Work in progress JSONSchema generator.
|
|
13
72
|
*/
|
|
@@ -15,6 +74,7 @@ export function makeJsonSchema(r: Iterable<RS.RouteDescriptorAny>) {
|
|
|
15
74
|
return Chunk
|
|
16
75
|
.fromIterable(r)
|
|
17
76
|
.forEachEffect(RS.makeFromSchema)
|
|
77
|
+
.flatMap(checkDuplicatePaths)
|
|
18
78
|
.map((e) => {
|
|
19
79
|
const map = ({ method, path, responses, ...rest }: _A<typeof e>) => ({
|
|
20
80
|
[method]: {
|
|
@@ -38,23 +38,28 @@ function makeDiskStoreInt<Id extends string, PM extends PersistenceModelType<Id>
|
|
|
38
38
|
const sem = Semaphore.unsafeMake(1)
|
|
39
39
|
const withPermit = sem.withPermits(1)
|
|
40
40
|
const flushToDisk = store.all.flatMap(fsStore.setRaw).apply(withPermit)
|
|
41
|
+
const flushToDiskInBackground = flushToDisk
|
|
42
|
+
.tapErrorCause((err) => Effect(console.error(err)))
|
|
43
|
+
.uninterruptible
|
|
44
|
+
.forkDaemon
|
|
45
|
+
|
|
41
46
|
return {
|
|
42
47
|
...store,
|
|
43
48
|
batchSet: flow(
|
|
44
49
|
store.batchSet,
|
|
45
|
-
(t) => t.tap(() =>
|
|
50
|
+
(t) => t.tap(() => flushToDiskInBackground)
|
|
46
51
|
),
|
|
47
52
|
bulkSet: flow(
|
|
48
53
|
store.bulkSet,
|
|
49
|
-
(t) => t.tap(() =>
|
|
54
|
+
(t) => t.tap(() => flushToDiskInBackground)
|
|
50
55
|
),
|
|
51
56
|
set: flow(
|
|
52
57
|
store.set,
|
|
53
|
-
(t) => t.tap(() =>
|
|
58
|
+
(t) => t.tap(() => flushToDiskInBackground)
|
|
54
59
|
),
|
|
55
60
|
remove: flow(
|
|
56
61
|
store.remove,
|
|
57
|
-
(t) => t.tap(() =>
|
|
62
|
+
(t) => t.tap(() => flushToDiskInBackground)
|
|
58
63
|
)
|
|
59
64
|
} satisfies Store<PM, Id>
|
|
60
65
|
})
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { Effect } from "@effect/io/Effect";
|
|
2
|
+
import { InvalidStateError } from "../../errors.js";
|
|
1
3
|
import * as RS from "./schema/routing.js";
|
|
2
4
|
type Methods = "GET" | "PUT" | "POST" | "PATCH" | "DELETE";
|
|
5
|
+
export declare function checkDuplicatePaths<T extends {
|
|
6
|
+
path: string;
|
|
7
|
+
method: string;
|
|
8
|
+
}>(paths: readonly T[]): Effect<never, InvalidStateError, readonly T[]>;
|
|
3
9
|
/**
|
|
4
10
|
* Work in progress JSONSchema generator.
|
|
5
11
|
*/
|
|
6
|
-
export declare function makeJsonSchema(r: Iterable<RS.RouteDescriptorAny>): import("@effect/io/Effect").Effect<never,
|
|
12
|
+
export declare function makeJsonSchema(r: Iterable<RS.RouteDescriptorAny>): import("@effect/io/Effect").Effect<never, InvalidStateError, Record<string, Record<Methods, {
|
|
7
13
|
[x: string]: {
|
|
8
14
|
responses: any;
|
|
9
15
|
tags: readonly string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeJsonSchema.d.ts","sourceRoot":"","sources":["../../../_src/api/express/makeJsonSchema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzC,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAM1D;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"makeJsonSchema.d.ts","sourceRoot":"","sources":["../../../_src/api/express/makeJsonSchema.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAEzC,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;AAM1D,wBAAgB,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5E,KAAK,EAAE,SAAS,CAAC,EAAE,GAClB,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,CAAC,EAAE,CAAC,CAsDhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;KA8BhE"}
|
|
@@ -1,14 +1,61 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@effect/
|
|
2
|
-
import * as tsplus_module_2 from "@effect
|
|
3
|
-
import * as tsplus_module_3 from "@effect/
|
|
1
|
+
import * as tsplus_module_1 from "@effect/io/Effect";
|
|
2
|
+
import * as tsplus_module_2 from "@effect/data/Chunk";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/_ext/Iterable";
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
import { InvalidStateError } from "../../errors.js";
|
|
5
6
|
import * as RS from "./schema/routing.js";
|
|
6
7
|
const rx = /:(\w+)/g;
|
|
8
|
+
export function checkDuplicatePaths(paths) {
|
|
9
|
+
const methods = Symbol("methods");
|
|
10
|
+
const pathMethods = { [methods]: [] };
|
|
11
|
+
const regex = /(?:^|\/)([^/:\n]+)|:(\w+)/g;
|
|
12
|
+
for (const path of paths) {
|
|
13
|
+
const matches = [...path.path.matchAll(regex)]
|
|
14
|
+
.map((match) => match[1]
|
|
15
|
+
? { _tag: "resource", value: match[1] }
|
|
16
|
+
: { _tag: "param", value: match[2] });
|
|
17
|
+
let pathNavigator = pathMethods;
|
|
18
|
+
for (let i = 0; i < matches.length;) {
|
|
19
|
+
const match = matches[i];
|
|
20
|
+
switch (match._tag) {
|
|
21
|
+
case "resource": {
|
|
22
|
+
if (!(match.value in (pathNavigator))) {
|
|
23
|
+
;
|
|
24
|
+
(pathNavigator)[match.value] = { [methods]: [] };
|
|
25
|
+
}
|
|
26
|
+
pathNavigator = (pathNavigator)[match.value];
|
|
27
|
+
i++;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
case "param": {
|
|
31
|
+
let numberOfParams = 1;
|
|
32
|
+
while (i < matches.length && matches[i + 1]?._tag === "param") {
|
|
33
|
+
numberOfParams++;
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
if (!(numberOfParams in pathNavigator)) {
|
|
37
|
+
;
|
|
38
|
+
(pathNavigator)[numberOfParams] = { [methods]: [] };
|
|
39
|
+
}
|
|
40
|
+
pathNavigator = (pathNavigator)[numberOfParams];
|
|
41
|
+
i++;
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (pathNavigator[methods].includes(path.method)) {
|
|
47
|
+
// throw duplicate path-method error
|
|
48
|
+
return tsplus_module_1.fail(new InvalidStateError(`Duplicate method ${path.method} for path ${path.path}`));
|
|
49
|
+
}
|
|
50
|
+
pathNavigator[methods].push(path.method);
|
|
51
|
+
}
|
|
52
|
+
return tsplus_module_1.succeed(paths);
|
|
53
|
+
}
|
|
7
54
|
/**
|
|
8
55
|
* Work in progress JSONSchema generator.
|
|
9
56
|
*/
|
|
10
57
|
export function makeJsonSchema(r) {
|
|
11
|
-
return
|
|
58
|
+
return tsplus_module_1.map(tsplus_module_1.flatMap(tsplus_module_3.ext_forEach(tsplus_module_2.fromIterable(r), RS.makeFromSchema), checkDuplicatePaths), (e) => {
|
|
12
59
|
const map = ({ method, path, responses, ...rest }) => ({
|
|
13
60
|
[method]: {
|
|
14
61
|
...rest,
|
|
@@ -35,4 +82,4 @@ class Response {
|
|
|
35
82
|
this.type = type;
|
|
36
83
|
}
|
|
37
84
|
}
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZUpzb25TY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL2FwaS9leHByZXNzL21ha2VKc29uU2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNuRCxPQUFPLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBSXpDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQTtBQUlwQixNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLEtBQW1CO0lBRW5CLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUtqQyxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFBO0lBQ2xELE1BQU0sS0FBSyxHQUFHLDRCQUE0QixDQUFBO0lBRTFDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMzQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQVc7WUFDaEQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBRSxFQUFXLENBQ2pELENBQUE7UUFFSCxJQUFJLGFBQWEsR0FBMkIsV0FBVyxDQUFBO1FBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHO1lBQ25DLE1BQU0sS0FBSyxHQUFHLE9BQU8s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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeJsonSchema.test.d.ts","sourceRoot":"","sources":["../../../_src/api/express/makeJsonSchema.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as Plutus from "@effect-app/infra-adapters/Openapi/atlas-plutus";
|
|
2
2
|
import type { RouteDescriptorAny } from "./schema/routing.js";
|
|
3
|
-
export declare function makeOpenApiSpecs(rdescs: Iterable<RouteDescriptorAny>, info: Plutus.Info): import("@effect/io/Effect").Effect<never,
|
|
3
|
+
export declare function makeOpenApiSpecs(rdescs: Iterable<RouteDescriptorAny>, info: Plutus.Info): import("@effect/io/Effect").Effect<never, import("../../errors.js").InvalidStateError, {
|
|
4
4
|
openapi: string;
|
|
5
5
|
info: {
|
|
6
6
|
title: string;
|
|
@@ -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<"GET" | "
|
|
21
|
+
paths: Record<string, Record<"GET" | "PUT" | "POST" | "PATCH" | "DELETE", {
|
|
22
22
|
[x: string]: {
|
|
23
23
|
responses: any;
|
|
24
24
|
tags: readonly string[] | undefined;
|
package/dist/api/writeDocs.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { RouteDescriptorAny } from "./express/schema/routing.js";
|
|
2
|
-
export declare function writeOpenapiDocs(rdescs: Record<string, Record<string, RouteDescriptorAny>>): import("@effect/io/Effect").Effect<never,
|
|
2
|
+
export declare function writeOpenapiDocs(rdescs: Record<string, Record<string, RouteDescriptorAny>>): import("@effect/io/Effect").Effect<never, import("../errors.js").InvalidStateError, void>;
|
|
3
3
|
//# sourceMappingURL=writeDocs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writeDocs.d.ts","sourceRoot":"","sources":["../../_src/api/writeDocs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"writeDocs.d.ts","sourceRoot":"","sources":["../../_src/api/writeDocs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,6FAmB1F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Disk.ts"],"names":[],"mappings":";;AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../../_src/services/Store/Disk.ts"],"names":[],"mappings":";;AAMA,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AA4DzC;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;yEAOtD,MAAM;GAyCnB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,MAAM,sGAKvE"}
|
|
@@ -21,12 +21,13 @@ function makeDiskStoreInt(prefix, namespace, dir, name, seed) {
|
|
|
21
21
|
const sem = tsplus_module_1.unsafeMakeSemaphore(1);
|
|
22
22
|
const withPermit = sem.withPermits(1);
|
|
23
23
|
const flushToDisk = withPermit(tsplus_module_1.flatMap(store.all, fsStore.setRaw));
|
|
24
|
+
const flushToDiskInBackground = tsplus_module_1.forkDaemon(tsplus_module_1.uninterruptible(tsplus_module_1.tapErrorCause(flushToDisk, (err) => tsplus_module_1.sync(() => console.error(err)))));
|
|
24
25
|
return {
|
|
25
26
|
...store,
|
|
26
|
-
batchSet: tsplus_module_2.flow(store.batchSet, (t) => tsplus_module_1.tap(t, () =>
|
|
27
|
-
bulkSet: tsplus_module_2.flow(store.bulkSet, (t) => tsplus_module_1.tap(t, () =>
|
|
28
|
-
set: tsplus_module_2.flow(store.set, (t) => tsplus_module_1.tap(t, () =>
|
|
29
|
-
remove: tsplus_module_2.flow(store.remove, (t) => tsplus_module_1.tap(t, () =>
|
|
27
|
+
batchSet: tsplus_module_2.flow(store.batchSet, (t) => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
28
|
+
bulkSet: tsplus_module_2.flow(store.bulkSet, (t) => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
29
|
+
set: tsplus_module_2.flow(store.set, (t) => tsplus_module_1.tap(t, () => flushToDiskInBackground)),
|
|
30
|
+
remove: tsplus_module_2.flow(store.remove, (t) => tsplus_module_1.tap(t, () => flushToDiskInBackground))
|
|
30
31
|
};
|
|
31
32
|
});
|
|
32
33
|
}
|
|
@@ -77,4 +78,4 @@ export function makeDiskStore({ prefix }, dir) {
|
|
|
77
78
|
export function DiskStoreLive(config, dir) {
|
|
78
79
|
return tsplus_module_1.toLayer(tsplus_module_1.flatMap(tsplus_module_1.config(config), (_) => makeDiskStore(_, dir)), StoreMaker);
|
|
79
80
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvU3RvcmUvRGlzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFFbkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXpDLFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQWMsRUFDZCxTQUFpQixFQUNqQixHQUFXLEVBQ1gsSUFBWSxFQUNaLElBQXlDO0lBRXpDLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUE7UUFDbkcsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLHdCQUFFLG9CQUFBLEVBQUU7aUJBQ0osWUFBWSxDQUFDLElBQUksQ0FBQyxFQUNkLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBUyxDQUFDLENBQzVCO1lBQ1IsTUFBTSxFQUFFLENBQUMsQ0FBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NB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
|
package/package.json
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.68.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@azure/cosmos": "^3.17.3",
|
|
8
8
|
"@azure/service-bus": "^7.9.0",
|
|
9
9
|
"@effect/data": "^0.12.2",
|
|
10
|
-
"@effect/io": "^0.25.
|
|
10
|
+
"@effect/io": "^0.25.12",
|
|
11
11
|
"@sendgrid/helpers": "^7.7.0",
|
|
12
12
|
"@sendgrid/mail": "^7.7.0",
|
|
13
13
|
"change-case": "^4.1.2",
|
|
14
|
-
"cross-fetch": "^3.1.
|
|
14
|
+
"cross-fetch": "^3.1.6",
|
|
15
15
|
"faker": "^5.5.3",
|
|
16
|
-
"fast-check": "^3.
|
|
16
|
+
"fast-check": "^3.9.0",
|
|
17
17
|
"object-hash": "^3.0.0",
|
|
18
18
|
"path-parser": "^6.1.0",
|
|
19
19
|
"proper-lockfile": "^4.1.2",
|
|
20
20
|
"pure-rand": "^6.0.2",
|
|
21
21
|
"redlock": "^4.2.0",
|
|
22
|
-
"@effect-app/prelude": "0.
|
|
23
|
-
"@effect-app/infra-adapters": "0.
|
|
24
|
-
"@effect-app/schema": "0.
|
|
25
|
-
"@effect-app/core": "0.
|
|
22
|
+
"@effect-app/prelude": "0.55.0",
|
|
23
|
+
"@effect-app/infra-adapters": "0.47.0",
|
|
24
|
+
"@effect-app/schema": "0.48.0",
|
|
25
|
+
"@effect-app/core": "0.54.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/cli": "^7.21.5",
|
|
29
|
-
"@sentry/node": "^7.
|
|
29
|
+
"@sentry/node": "^7.52.1",
|
|
30
30
|
"@types/express": "^4.17.17",
|
|
31
|
-
"@types/node": "~20.1
|
|
31
|
+
"@types/node": "~20.2.1",
|
|
32
32
|
"@types/proper-lockfile": "^4.1.2",
|
|
33
33
|
"@types/redis": "^2.8.32",
|
|
34
34
|
"@types/redlock": "^4.0.4",
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"express-jwt-authz": "^2.4.1",
|
|
38
38
|
"jwks-rsa": "2.1.4",
|
|
39
39
|
"jwt-decode": "^3.1.2",
|
|
40
|
-
"mongodb": "5.
|
|
40
|
+
"mongodb": "5.5.0",
|
|
41
41
|
"redis": "^3.1.2",
|
|
42
42
|
"ts-node": "^10.9.1",
|
|
43
43
|
"typescript": "https://cdn.jsdelivr.net/npm/@tsplus/installer@0.0.176/compiler/typescript.tgz",
|
|
44
|
-
"vitest": "^0.31.
|
|
44
|
+
"vitest": "^0.31.1",
|
|
45
45
|
"@effect-app/compiler": "0.26.0"
|
|
46
46
|
},
|
|
47
47
|
"typesVersions": {
|