@effect-app/infra 0.85.0-next.4 → 0.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -36
- package/_cjs/_ext/Array.cjs +2 -3
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +10 -11
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +2 -3
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.test.cjs +2 -2
- package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +4 -6
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -23
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +2 -2
- package/_cjs/api/setupRequest.cjs +4 -5
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +4 -6
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -12
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +8 -8
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -2
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/logger/jsonLogger.cjs +10 -11
- package/_cjs/logger/jsonLogger.cjs.map +1 -1
- package/_cjs/logger/logFmtLogger.cjs +5 -5
- package/_cjs/logger/logFmtLogger.cjs.map +1 -1
- package/_cjs/logger/shared.cjs +4 -4
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +7 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +12 -14
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -5
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +29 -31
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +5 -6
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +6 -7
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +17 -18
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +15 -16
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +16 -17
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +33 -35
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +20 -15
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +46 -49
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +18 -19
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +39 -43
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +14 -16
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +6 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +13 -13
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +17 -19
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +8 -9
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +9 -11
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +18 -20
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +10 -11
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +5 -5
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +17 -18
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/api/authorization.jwt.ts +1 -1
- package/_src/api/defaultErrorHandler.ts +2 -2
- package/_src/api/express/routing.ts.bak +8 -8
- package/_src/api/express/schema/routing.ts +59 -37
- package/_src/api/setupRequest.ts +11 -10
- package/_src/errorReporter.ts +1 -1
- package/_src/services/Emailer/Sendgrid.ts +1 -1
- package/_src/services/Operations/live.ts +5 -5
- package/_src/services/QueueMaker/errors.ts +1 -1
- package/_src/services/QueueMaker/memQueue.ts +2 -2
- package/_src/services/QueueMaker/sbqueue.ts +1 -1
- package/_src/services/Repository.ts +9 -9
- package/_src/services/RepositoryBase.ts +6 -8
- package/_src/services/RequestContextContainer.ts +12 -7
- package/_src/services/Store/Cosmos.ts +12 -17
- package/_src/services/Store/Disk.ts +4 -4
- package/_src/services/Store/Memory.ts +4 -4
- package/_src/services/Store/Redis.ts +1 -1
- package/_src/services/Store/index.test.ts.bak +5 -5
- package/_src/services/Store/index.ts +1 -1
- package/_src/services/Store/utils.ts +16 -16
- package/_src/services/simpledb/diskdb.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/_src/services/simpledb/redisdb.ts +1 -1
- package/_src/services/simpledb/shared.ts +1 -1
- package/_src/services/simpledb/simpledb.ts +3 -3
- package/dist/RequestContext.d.ts +4 -4
- package/dist/_ext/Array.d.ts +1 -1
- package/dist/_ext/Array.d.ts.map +1 -1
- package/dist/_ext/Array.js +3 -4
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/codec.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.d.ts +2 -2
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +11 -13
- package/dist/api/express/makeJsonSchema.d.ts +2 -2
- package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
- package/dist/api/express/makeJsonSchema.js +3 -4
- package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/routing.d.ts +22 -7
- package/dist/api/express/schema/routing.d.ts.map +1 -1
- package/dist/api/express/schema/routing.js +23 -24
- package/dist/api/reportError.d.ts +5 -5
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +2 -2
- package/dist/api/setupRequest.d.ts +2 -2
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +7 -7
- package/dist/api/writeDocs.d.ts +1 -1
- package/dist/api/writeDocs.d.ts.map +1 -1
- package/dist/api/writeDocs.js +5 -7
- package/dist/errorReporter.d.ts +3 -3
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +12 -13
- package/dist/errors.d.ts +7 -7
- package/dist/errors.js +9 -9
- package/dist/instrument.d.ts +1 -1
- package/dist/instrument.d.ts.map +1 -1
- package/dist/instrument.js +2 -3
- package/dist/logger/jsonLogger.d.ts +2 -2
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +11 -12
- package/dist/logger/logFmtLogger.d.ts +2 -2
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +6 -6
- package/dist/logger/shared.d.ts +1 -1
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +5 -5
- package/dist/rateLimit.d.ts +3 -3
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +8 -9
- package/dist/services/Emailer/Sendgrid.d.ts +1 -1
- package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/services/Emailer/Sendgrid.js +15 -17
- package/dist/services/Emailer/fake.d.ts +1 -1
- package/dist/services/Emailer/fake.d.ts.map +1 -1
- package/dist/services/Emailer/fake.js +5 -6
- package/dist/services/Emailer/service.d.ts +3 -3
- package/dist/services/Operations/live.d.ts +1 -1
- package/dist/services/Operations/live.d.ts.map +1 -1
- package/dist/services/Operations/live.js +37 -39
- package/dist/services/Operations/service.d.ts +8 -8
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Operations/service.js +12 -13
- package/dist/services/QueueMaker/errors.d.ts +3 -3
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +6 -7
- package/dist/services/QueueMaker/memQueue.d.ts +3 -3
- package/dist/services/QueueMaker/memQueue.js +16 -17
- package/dist/services/QueueMaker/sbqueue.d.ts +4 -4
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +15 -16
- package/dist/services/Repository.d.ts +42 -42
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +17 -18
- package/dist/services/RepositoryBase.d.ts +12 -11
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +35 -37
- package/dist/services/RequestContextContainer.d.ts +14 -11
- package/dist/services/RequestContextContainer.d.ts.map +1 -1
- package/dist/services/RequestContextContainer.js +19 -18
- package/dist/services/Store/Cosmos.d.ts +3 -3
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +51 -54
- package/dist/services/Store/Disk.d.ts +3 -3
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +19 -20
- package/dist/services/Store/Memory.d.ts +5 -5
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +41 -45
- package/dist/services/Store/Redis.d.ts +3 -3
- package/dist/services/Store/Redis.d.ts.map +1 -1
- package/dist/services/Store/Redis.js +15 -17
- package/dist/services/Store/index.d.ts +1 -1
- package/dist/services/Store/index.d.ts.map +1 -1
- package/dist/services/Store/index.js +7 -8
- package/dist/services/Store/service.d.ts +8 -8
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +2 -2
- package/dist/services/Store/utils.d.ts +2 -2
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +21 -21
- package/dist/services/simpledb/cosmosdb.d.ts +5 -5
- package/dist/services/simpledb/cosmosdb.js +17 -19
- package/dist/services/simpledb/diskdb.d.ts +4 -4
- package/dist/services/simpledb/diskdb.js +9 -10
- package/dist/services/simpledb/memdb.d.ts +4 -4
- package/dist/services/simpledb/memdb.js +11 -13
- package/dist/services/simpledb/mongodb.d.ts +5 -5
- package/dist/services/simpledb/mongodb.js +14 -16
- package/dist/services/simpledb/redisdb.d.ts +4 -4
- package/dist/services/simpledb/redisdb.js +11 -12
- package/dist/services/simpledb/shared.d.ts +4 -4
- package/dist/services/simpledb/shared.js +6 -6
- package/dist/services/simpledb/simpledb.d.ts +6 -6
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +15 -16
- package/package.json +5 -25
- package/_cjs/api/express/schema/requestHandler.cjs +0 -172
- package/_cjs/api/express/schema/requestHandler.cjs.map +0 -1
- package/_cjs/api/routing.cjs +0 -278
- package/_cjs/api/routing.cjs.map +0 -1
- package/_src/api/express/schema/requestHandler.ts +0 -372
- package/_src/api/routing.ts +0 -660
- package/dist/api/express/schema/requestHandler.d.ts +0 -71
- package/dist/api/express/schema/requestHandler.d.ts.map +0 -1
- package/dist/api/express/schema/requestHandler.js +0 -140
- package/dist/api/routing.d.ts +0 -103
- package/dist/api/routing.d.ts.map +0 -1
- package/dist/api/routing.js +0 -265
package/_cjs/api/routing.cjs
DELETED
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.RequestSettings = void 0;
|
|
7
|
-
exports.handle = handle;
|
|
8
|
-
exports.makeRequestHandler = makeRequestHandler;
|
|
9
|
-
exports.makeRequestParsers = makeRequestParsers;
|
|
10
|
-
exports.match = match;
|
|
11
|
-
exports.matchAll = matchAll;
|
|
12
|
-
exports.matchAllAlt = matchAllAlt;
|
|
13
|
-
exports.matchResource = matchResource;
|
|
14
|
-
exports.respondSuccess = respondSuccess;
|
|
15
|
-
var tsplus_module_1 = _interopRequireWildcard(require("effect/FiberRef"));
|
|
16
|
-
var tsplus_module_2 = _interopRequireWildcard(require("effect/Option"));
|
|
17
|
-
var tsplus_module_3 = _interopRequireWildcard(require("effect/impl/Option"));
|
|
18
|
-
var tsplus_module_4 = _interopRequireWildcard(require("effect/Effect"));
|
|
19
|
-
var tsplus_module_5 = _interopRequireWildcard(require("@effect-app/core/EffectX"));
|
|
20
|
-
var tsplus_module_6 = _interopRequireWildcard(require("effect/impl/Effect"));
|
|
21
|
-
var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/schema/ext"));
|
|
22
|
-
var _utils = _interopRequireWildcard(require("@effect-app/prelude/utils"));
|
|
23
|
-
var tsplus_module_8 = _utils;
|
|
24
|
-
var tsplus_module_9 = _interopRequireWildcard(require("effect/impl/FiberRef"));
|
|
25
|
-
var tsplus_module_10 = _interopRequireWildcard(require("@effect-app/core/OptionX"));
|
|
26
|
-
var tsplus_module_11 = _interopRequireWildcard(require("@effect-app/infra/api/setupRequest"));
|
|
27
|
-
var Ex = _interopRequireWildcard(require("@effect-app/infra-adapters/express"));
|
|
28
|
-
var _ids = require("@effect-app/prelude/ids");
|
|
29
|
-
var _schema = _interopRequireWildcard(require("@effect-app/prelude/schema"));
|
|
30
|
-
var MO = _schema;
|
|
31
|
-
var _RequestContext = require("../RequestContext.cjs");
|
|
32
|
-
var _RequestContextContainer = require("../services/RequestContextContainer.cjs");
|
|
33
|
-
var _Memory = require("../services/Store/Memory.cjs");
|
|
34
|
-
var _defaultErrorHandler = require("./defaultErrorHandler.cjs");
|
|
35
|
-
var _requestHandler = require("./express/schema/requestHandler.cjs");
|
|
36
|
-
var _routing = require("./express/schema/routing.cjs");
|
|
37
|
-
var _reportError = require("./reportError.cjs");
|
|
38
|
-
var _util = require("./util.cjs");
|
|
39
|
-
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
40
|
-
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
41
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
42
|
-
|
|
43
|
-
const RequestSettings = exports.RequestSettings = tsplus_module_1.FiberRef.unsafeMake({
|
|
44
|
-
verbose: false
|
|
45
|
-
});
|
|
46
|
-
function makeRequestParsers(Request) {
|
|
47
|
-
const ph = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Headers), s => s), MO.Parser.for), MO.condemnFail));
|
|
48
|
-
const parseHeaders = u => tsplus_module_5.flatMapOption(ph, d => d(u));
|
|
49
|
-
const pq = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Query), s => s), MO.Parser.for), MO.condemnFail));
|
|
50
|
-
const parseQuery = u => tsplus_module_5.flatMapOption(pq, d => d(u));
|
|
51
|
-
const pb = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Body), s => s), MO.Parser.for), MO.condemnFail));
|
|
52
|
-
const parseBody = u => tsplus_module_5.flatMapOption(pb, d => d(u));
|
|
53
|
-
const pp = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Path), s => s), MO.Parser.for), MO.condemnFail));
|
|
54
|
-
const parsePath = u => tsplus_module_5.flatMapOption(pp, d => d(u));
|
|
55
|
-
const pc = tsplus_module_4.Effect.sync(() => tsplus_module_3.map(tsplus_module_3.map(tsplus_module_3.map(tsplus_module_2.Option.fromNullable(Request.Cookie), s => s), MO.Parser.for), MO.condemnFail));
|
|
56
|
-
const parseCookie = u => tsplus_module_5.flatMapOption(pc, d => d(u));
|
|
57
|
-
return {
|
|
58
|
-
parseBody,
|
|
59
|
-
parseCookie,
|
|
60
|
-
parseHeaders,
|
|
61
|
-
parsePath,
|
|
62
|
-
parseQuery
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
function match(requestHandler, errorHandler, middleware) {
|
|
66
|
-
let makeMiddlewareContext = undefined;
|
|
67
|
-
if (middleware) {
|
|
68
|
-
const {
|
|
69
|
-
handler,
|
|
70
|
-
makeContext
|
|
71
|
-
} = middleware(requestHandler);
|
|
72
|
-
requestHandler = handler;
|
|
73
|
-
makeMiddlewareContext = makeContext;
|
|
74
|
-
}
|
|
75
|
-
return tsplus_module_6.zipRight(Ex.match(requestHandler.Request.method.toLowerCase())(requestHandler.Request.path.split("?")[0], makeRequestHandler(requestHandler, errorHandler, makeMiddlewareContext)), tsplus_module_4.Effect.sync(() => (0, _routing.makeRouteDescriptor)(requestHandler.Request.path, requestHandler.Request.method, requestHandler)));
|
|
76
|
-
}
|
|
77
|
-
function respondSuccess(encodeResponse) {
|
|
78
|
-
return (req, res, a) => tsplus_module_6.flatMap(tsplus_module_4.Effect.sync(() => encodeResponse(req)(a)), r => tsplus_module_4.Effect.sync(() => {
|
|
79
|
-
r === undefined ? res.status(204).send() : res.status(200).send(JSON.stringify(r));
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
function makeRequestHandler(handler, errorHandler, makeMiddlewareContext) {
|
|
83
|
-
const {
|
|
84
|
-
Request,
|
|
85
|
-
Response,
|
|
86
|
-
adaptResponse,
|
|
87
|
-
h: handle
|
|
88
|
-
} = handler;
|
|
89
|
-
const response = Response ? (0, _schema.extractSchema)(Response) : MO.Void;
|
|
90
|
-
const encoder = MO.Encoder.for(response);
|
|
91
|
-
const encodeResponse = adaptResponse ? req => MO.Encoder.for(adaptResponse(req)) : () => encoder;
|
|
92
|
-
const requestParsers = makeRequestParsers(Request);
|
|
93
|
-
const parseRequest = (0, _requestHandler.parseRequestParams)(requestParsers);
|
|
94
|
-
const respond = respondSuccess(encodeResponse);
|
|
95
|
-
function getParams(req) {
|
|
96
|
-
return tsplus_module_4.Effect.sync(() => ({
|
|
97
|
-
path: req.params,
|
|
98
|
-
query: req.query,
|
|
99
|
-
body: req.body,
|
|
100
|
-
headers: req.headers,
|
|
101
|
-
cookies: req.cookies
|
|
102
|
-
}));
|
|
103
|
-
}
|
|
104
|
-
function makeContext(req) {
|
|
105
|
-
const start = new Date();
|
|
106
|
-
const supported = ["en", "de"];
|
|
107
|
-
const desiredLocale = req.headers["x-locale"];
|
|
108
|
-
const locale = desiredLocale && supported.includes(desiredLocale) ? desiredLocale : "en";
|
|
109
|
-
// const context = getAppInsightsContext()
|
|
110
|
-
// if (!context) {
|
|
111
|
-
// throw new Error("AI Context missing")
|
|
112
|
-
// }
|
|
113
|
-
const requestId = req.headers["request-id"];
|
|
114
|
-
const rootId = requestId ? tsplus_module_7.parseUnsafe(_ids.RequestId)(requestId) : _ids.RequestId.make();
|
|
115
|
-
const storeId = req.headers["x-store-id"];
|
|
116
|
-
const namespace = MO.ReasonableString(storeId && (Array.isArray(storeId) ? storeId[0] : storeId) || "primary");
|
|
117
|
-
const requestContext = new _RequestContext.RequestContext({
|
|
118
|
-
rootId,
|
|
119
|
-
name: MO.ReasonableString(Request.Model instanceof _schema.SchemaNamed ? Request.Model.name : Request.name),
|
|
120
|
-
locale,
|
|
121
|
-
createdAt: start,
|
|
122
|
-
namespace
|
|
123
|
-
// ...(context.operation.parentId
|
|
124
|
-
// ? {
|
|
125
|
-
// parent: new RequestContextParent({
|
|
126
|
-
// id: RequestId(context.operation.parentId),
|
|
127
|
-
// locale,
|
|
128
|
-
// name: ReasonableString("API Request")
|
|
129
|
-
// })
|
|
130
|
-
// }
|
|
131
|
-
// : {})
|
|
132
|
-
});
|
|
133
|
-
// context.requestContext = requestContext
|
|
134
|
-
return requestContext;
|
|
135
|
-
}
|
|
136
|
-
return (req, res) => {
|
|
137
|
-
return tsplus_module_6.flatMap(tsplus_module_4.Effect.all({
|
|
138
|
-
requestContext: tsplus_module_4.Effect.sync(() => {
|
|
139
|
-
const requestContext = makeContext(req);
|
|
140
|
-
if (req.method === "GET") {
|
|
141
|
-
res.setHeader("Cache-Control", "no-store");
|
|
142
|
-
}
|
|
143
|
-
res.setHeader("Content-Language", requestContext.locale);
|
|
144
|
-
return requestContext;
|
|
145
|
-
}),
|
|
146
|
-
pars: getParams(req)
|
|
147
|
-
}), ({
|
|
148
|
-
pars,
|
|
149
|
-
requestContext
|
|
150
|
-
}) => tsplus_module_6.provideService(tsplus_module_11.withRequestSpan(tsplus_module_6.tap(tsplus_module_6.tapErrorCause(tsplus_module_6.zipRight(tsplus_module_6.flatMap(tsplus_module_9.get(RequestSettings), s => tsplus_module_4.Effect.annotateLogs({
|
|
151
|
-
method: req.method,
|
|
152
|
-
path: req.originalUrl,
|
|
153
|
-
...(s.verbose ? {
|
|
154
|
-
reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
|
|
155
|
-
reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
|
|
156
|
-
reqBody: (0, _utils.pretty)(pars.body),
|
|
157
|
-
reqCookies: (0, _utils.pretty)(pars.cookies),
|
|
158
|
-
reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers))
|
|
159
|
-
} : undefined)
|
|
160
|
-
})(
|
|
161
|
-
// TODO: we don;t have access to user id here cause context is not yet created
|
|
162
|
-
tsplus_module_4.Effect.logInfo("Incoming request"))), tsplus_module_4.Effect.suspend(() => {
|
|
163
|
-
const handleRequest = tsplus_module_6.flatMap(tsplus_module_6.map(parseRequest(req), ({
|
|
164
|
-
body,
|
|
165
|
-
path,
|
|
166
|
-
query
|
|
167
|
-
}) => {
|
|
168
|
-
const hn = {
|
|
169
|
-
...tsplus_module_10.getOrUndefined(body),
|
|
170
|
-
...tsplus_module_10.getOrUndefined(query),
|
|
171
|
-
...tsplus_module_10.getOrUndefined(path)
|
|
172
|
-
};
|
|
173
|
-
return hn;
|
|
174
|
-
}), parsedReq => tsplus_module_6.flatMap(handle(parsedReq), r => respond(parsedReq, res, r)));
|
|
175
|
-
// Commands should not be interruptable.
|
|
176
|
-
const r = req.method !== "GET" ? tsplus_module_6.uninterruptible(handleRequest) : handleRequest; // .instrument("Performance.RequestResponse")
|
|
177
|
-
// the first log entry should be of the request start.
|
|
178
|
-
const r2 = makeMiddlewareContext ? tsplus_module_6.zipRight(_Memory.restoreFromRequestContext, tsplus_module_5.provideSomeContextEffect(makeMiddlewareContext(req, res))(r
|
|
179
|
-
// the db namespace must be restored, before calling provide here
|
|
180
|
-
)) : tsplus_module_6.zipRight(_Memory.restoreFromRequestContext
|
|
181
|
-
// PR is not relevant here
|
|
182
|
-
, r);
|
|
183
|
-
return errorHandler(req, res, r2);
|
|
184
|
-
})), cause => tsplus_module_6.tapErrorCause(tsplus_module_4.Effect.all([tsplus_module_4.Effect.sync(() => res.status(500).send()), tsplus_module_4.Effect.sync(() => (0, _reportError.reportRequestError)(cause, {
|
|
185
|
-
path: req.originalUrl,
|
|
186
|
-
method: req.method
|
|
187
|
-
})), tsplus_module_4.Effect.suspend(() => {
|
|
188
|
-
const headers = res.getHeaders();
|
|
189
|
-
return tsplus_module_4.Effect.annotateLogs({
|
|
190
|
-
method: req.method,
|
|
191
|
-
path: req.originalUrl,
|
|
192
|
-
statusCode: res.statusCode.toString(),
|
|
193
|
-
reqPath: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.path)),
|
|
194
|
-
reqQuery: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.query)),
|
|
195
|
-
reqBody: (0, _utils.pretty)(pars.body),
|
|
196
|
-
reqCookies: (0, _utils.pretty)(pars.cookies),
|
|
197
|
-
reqHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(pars.headers)),
|
|
198
|
-
resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(Object.entries(headers).reduce((prev, [key, value]) => {
|
|
199
|
-
prev[key] = value && typeof value === "string" ? (0, _util.snipString)(value) : value;
|
|
200
|
-
return prev;
|
|
201
|
-
}, {})))
|
|
202
|
-
})(tsplus_module_4.Effect.logError("Finished request", cause));
|
|
203
|
-
})], {
|
|
204
|
-
concurrency: "inherit"
|
|
205
|
-
}), cause => tsplus_module_4.Effect.sync(() => console.error("Error occurred while reporting error", cause)))), () => tsplus_module_6.flatMap(tsplus_module_9.get(RequestSettings), s => {
|
|
206
|
-
const headers = res.getHeaders();
|
|
207
|
-
return tsplus_module_4.Effect.annotateLogs({
|
|
208
|
-
method: req.method,
|
|
209
|
-
path: req.originalUrl,
|
|
210
|
-
statusCode: res.statusCode.toString(),
|
|
211
|
-
...(s.verbose ? {
|
|
212
|
-
resHeaders: tsplus_module_8.RecordPretty(tsplus_module_8.object$(headers))
|
|
213
|
-
} : undefined)
|
|
214
|
-
})(tsplus_module_4.Effect.logInfo("Finished request"));
|
|
215
|
-
}))), _RequestContextContainer.RequestContextContainer, new _RequestContextContainer.RequestContextContainerImpl(requestContext)) // otherwise external error reporter breaks.
|
|
216
|
-
);
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Gather all handlers of a module and attach them to the Server.
|
|
221
|
-
* Requires no login.
|
|
222
|
-
*/
|
|
223
|
-
function matchAll(handlers) {
|
|
224
|
-
const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
|
|
225
|
-
prev[cur] = match(handlers[cur], _defaultErrorHandler.defaultBasicErrorHandler);
|
|
226
|
-
return prev;
|
|
227
|
-
}, {});
|
|
228
|
-
return mapped;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Gather all handlers of a module and attach them to the Server.
|
|
232
|
-
* Requires no login.
|
|
233
|
-
*/
|
|
234
|
-
function matchAllAlt(handlers) {
|
|
235
|
-
const mapped = tsplus_module_8.RecordKeys(tsplus_module_8.object$(handlers)).reduce((prev, cur) => {
|
|
236
|
-
const matches = matchAll(handlers[cur]);
|
|
237
|
-
tsplus_module_8.RecordKeys(tsplus_module_8.object$(matches)).forEach(key => prev[`${cur}.${key}`] = matches[key]);
|
|
238
|
-
return prev;
|
|
239
|
-
}, {});
|
|
240
|
-
return mapped;
|
|
241
|
-
}
|
|
242
|
-
function handle(_, adaptResponse) {
|
|
243
|
-
// TODO: Prevent over providing // no strict/shrink yet.
|
|
244
|
-
const Request = MO.extractRequest(_);
|
|
245
|
-
const Response = MO.extractResponse(_);
|
|
246
|
-
return h => ({
|
|
247
|
-
adaptResponse,
|
|
248
|
-
h,
|
|
249
|
-
Request,
|
|
250
|
-
Response,
|
|
251
|
-
ResponseOpenApi: _.ResponseOpenApi ?? Response
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Provided a module with resources, and provided an Object with resource handlers, will prepare route handlers to be attached to server.
|
|
256
|
-
* @param mod The module with Resources you want to match.
|
|
257
|
-
* @returns A function that must be called with an Object with a handler "Request -> Effect<R, E, Response>" for each resource defined in the Module.
|
|
258
|
-
*
|
|
259
|
-
* Example:
|
|
260
|
-
* ```
|
|
261
|
-
* class SayHelloRequest extends Get("/say-hello")<SayHelloRequest>()({ name: prop(ReasonableString) }) {}
|
|
262
|
-
* class SayHelloResponse extends Model<SayHelloRequest>()({ message: prop(LongString) }) {}
|
|
263
|
-
*
|
|
264
|
-
* export const SayHelloControllers = matchResource({ SayHello: { SayHelloRequest, SayHelloResponse } })({
|
|
265
|
-
* SayHello: (req) => Effect.sync(() => { message: `Hi ${req.name}` })
|
|
266
|
-
* })
|
|
267
|
-
* ```
|
|
268
|
-
*/
|
|
269
|
-
function matchResource(mod) {
|
|
270
|
-
return handlers => {
|
|
271
|
-
const handler = tsplus_module_8.RecordKeys(tsplus_module_8.object$(mod)).reduce((prev, cur) => {
|
|
272
|
-
prev[cur] = handle(mod[cur])(handlers[cur]);
|
|
273
|
-
return prev;
|
|
274
|
-
}, {});
|
|
275
|
-
return handler;
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
//# sourceMappingURL=routing.cjs.map
|
package/_cjs/api/routing.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routing.cjs","names":["Ex","_interopRequireWildcard","require","_ids","_schema","MO","_RequestContext","_RequestContextContainer","_Memory","_defaultErrorHandler","_requestHandler","_routing","_reportError","_util","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","RequestSettings","exports","tsplus_module_1","FiberRef","unsafeMake","verbose","makeRequestParsers","Request","ph","tsplus_module_4","Effect","sync","tsplus_module_3","map","tsplus_module_2","Option","fromNullable","Headers","s","Parser","for","condemnFail","parseHeaders","tsplus_module_5","flatMapOption","d","pq","Query","parseQuery","pb","Body","parseBody","pp","Path","parsePath","pc","Cookie","parseCookie","match","requestHandler","errorHandler","middleware","makeMiddlewareContext","undefined","handler","makeContext","tsplus_module_6","zipRight","method","toLowerCase","path","split","makeRequestHandler","makeRouteDescriptor","respondSuccess","encodeResponse","req","res","flatMap","status","send","JSON","stringify","Response","adaptResponse","h","handle","response","extractSchema","Void","encoder","Encoder","requestParsers","parseRequest","parseRequestParams","respond","getParams","params","query","body","headers","cookies","start","Date","supported","desiredLocale","locale","includes","requestId","rootId","tsplus_module_7","parseUnsafe","RequestId","make","storeId","namespace","ReasonableString","Array","isArray","requestContext","RequestContext","name","Model","SchemaNamed","createdAt","all","setHeader","pars","provideService","tsplus_module_11","withRequestSpan","tap","tapErrorCause","tsplus_module_9","annotateLogs","originalUrl","reqPath","tsplus_module_8","RecordPretty","object$","reqQuery","reqBody","pretty","reqCookies","reqHeaders","logInfo","suspend","handleRequest","hn","tsplus_module_10","getOrUndefined","parsedReq","uninterruptible","r2","restoreFromRequestContext","provideSomeContextEffect","cause","reportRequestError","getHeaders","statusCode","toString","resHeaders","entries","reduce","prev","key","value","snipString","logError","concurrency","console","error","RequestContextContainer","RequestContextContainerImpl","matchAll","handlers","mapped","RecordKeys","cur","defaultBasicErrorHandler","matchAllAlt","matches","forEach","_","extractRequest","extractResponse","ResponseOpenApi","matchResource","mod"],"sources":["../../_src/api/routing.ts"],"sourcesContent":[null],"mappings":"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"}
|
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
/* eslint-disable @typescript-eslint/ban-types */
|
|
3
|
-
import * as MO from "@effect-app/schema"
|
|
4
|
-
import type { Methods } from "@effect-app/schema"
|
|
5
|
-
import { Parser } from "@effect-app/schema"
|
|
6
|
-
import type express from "express"
|
|
7
|
-
import { ValidationError } from "../../../errors.js"
|
|
8
|
-
|
|
9
|
-
export type _R<T extends Effect<any, any, any>> = [T] extends [
|
|
10
|
-
Effect<infer R, any, any>
|
|
11
|
-
] ? R
|
|
12
|
-
: never
|
|
13
|
-
|
|
14
|
-
export type _E<T extends Effect<any, any, any>> = [T] extends [
|
|
15
|
-
Effect<any, infer E, any>
|
|
16
|
-
] ? E
|
|
17
|
-
: never
|
|
18
|
-
|
|
19
|
-
export type Request<
|
|
20
|
-
PathA,
|
|
21
|
-
CookieA,
|
|
22
|
-
QueryA,
|
|
23
|
-
BodyA,
|
|
24
|
-
HeaderA,
|
|
25
|
-
ReqA extends PathA & QueryA & BodyA
|
|
26
|
-
> = MO.ReqResSchemed<unknown, ReqA> & {
|
|
27
|
-
method: Methods
|
|
28
|
-
path: string
|
|
29
|
-
Cookie?: MO.ReqRes<Record<string, string>, CookieA>
|
|
30
|
-
Path?: MO.ReqRes<Record<string, string>, PathA>
|
|
31
|
-
Body?: MO.ReqRes<unknown, BodyA>
|
|
32
|
-
Query?: MO.ReqRes<Record<string, string>, QueryA>
|
|
33
|
-
Headers?: MO.ReqRes<Record<string, string>, HeaderA>
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export type Request2<
|
|
37
|
-
Path extends string,
|
|
38
|
-
Method extends Methods,
|
|
39
|
-
ReqA
|
|
40
|
-
> = MO.ReqResSchemed<unknown, ReqA> & {
|
|
41
|
-
method: Method
|
|
42
|
-
path: Path
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type Encode<A, E> = (a: A) => E
|
|
46
|
-
|
|
47
|
-
// function getErrorMessage(current: ContextEntry) {
|
|
48
|
-
// switch (current.type.name) {
|
|
49
|
-
// case "NonEmptyString":
|
|
50
|
-
// return "Must not be empty"
|
|
51
|
-
// }
|
|
52
|
-
// if (current.type.name?.startsWith("NonEmptyReadonlyArray<")) {
|
|
53
|
-
// return "Must not be empty"
|
|
54
|
-
// }
|
|
55
|
-
// return `Invalid value specified`
|
|
56
|
-
// }
|
|
57
|
-
export function decodeErrors(x: unknown) {
|
|
58
|
-
return [x]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// const ValidationApplicative = Effect.getValidationApplicative(
|
|
62
|
-
// makeAssociative<ReadonlyArray<{ type: string; errors: ReturnType<typeof decodeErrors> }>>(
|
|
63
|
-
// (l, r) => l.concat(r)
|
|
64
|
-
// )
|
|
65
|
-
// )
|
|
66
|
-
|
|
67
|
-
// const structValidation = DSL.structF(ValidationApplicative)
|
|
68
|
-
export function parseRequestParams<PathA, CookieA, QueryA, BodyA, HeaderA>(
|
|
69
|
-
parsers: RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA>
|
|
70
|
-
) {
|
|
71
|
-
return ({ body, cookies, headers, params, query }: express.Request) =>
|
|
72
|
-
Effect
|
|
73
|
-
.all({
|
|
74
|
-
body: parsers
|
|
75
|
-
.parseBody(body)
|
|
76
|
-
.exit
|
|
77
|
-
.flatMap((_) =>
|
|
78
|
-
_.isFailure() && !_.cause.isFailure()
|
|
79
|
-
? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
|
|
80
|
-
: Effect.sync(() =>
|
|
81
|
-
_.isSuccess()
|
|
82
|
-
? { _tag: "Success" as const, value: _.value }
|
|
83
|
-
: { _tag: "Failure", errors: _.cause.failures }
|
|
84
|
-
)
|
|
85
|
-
),
|
|
86
|
-
cookie: parsers
|
|
87
|
-
.parseCookie(cookies)
|
|
88
|
-
.exit
|
|
89
|
-
.flatMap((_) =>
|
|
90
|
-
_.isFailure() && !_.cause.isFailure()
|
|
91
|
-
? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
|
|
92
|
-
: Effect.sync(() =>
|
|
93
|
-
_.isSuccess()
|
|
94
|
-
? { _tag: "Success" as const, value: _.value }
|
|
95
|
-
: { _tag: "Failure", errors: _.cause.failures }
|
|
96
|
-
)
|
|
97
|
-
),
|
|
98
|
-
headers: parsers
|
|
99
|
-
.parseHeaders(headers)
|
|
100
|
-
.exit
|
|
101
|
-
.flatMap((_) =>
|
|
102
|
-
_.isFailure() && !_.cause.isFailure()
|
|
103
|
-
? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
|
|
104
|
-
: Effect.sync(() =>
|
|
105
|
-
_.isSuccess()
|
|
106
|
-
? { _tag: "Success" as const, value: _.value }
|
|
107
|
-
: { _tag: "Failure", errors: _.cause.failures }
|
|
108
|
-
)
|
|
109
|
-
),
|
|
110
|
-
query: parsers
|
|
111
|
-
.parseQuery(query)
|
|
112
|
-
.exit
|
|
113
|
-
.flatMap((_) =>
|
|
114
|
-
_.isFailure() && !_.cause.isFailure()
|
|
115
|
-
? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
|
|
116
|
-
: Effect.sync(() =>
|
|
117
|
-
_.isSuccess()
|
|
118
|
-
? { _tag: "Success" as const, value: _.value }
|
|
119
|
-
: { _tag: "Failure", errors: _.cause.failures }
|
|
120
|
-
)
|
|
121
|
-
),
|
|
122
|
-
path: parsers
|
|
123
|
-
.parsePath(params)
|
|
124
|
-
.exit
|
|
125
|
-
.flatMap((_) =>
|
|
126
|
-
_.isFailure() && !_.cause.isFailure()
|
|
127
|
-
? (Effect.failCauseSync(() => _.cause) as Effect<never, ValidationError, never>)
|
|
128
|
-
: Effect.sync(() =>
|
|
129
|
-
_.isSuccess()
|
|
130
|
-
? { _tag: "Success" as const, value: _.value }
|
|
131
|
-
: { _tag: "Failure", errors: _.cause.failures }
|
|
132
|
-
)
|
|
133
|
-
)
|
|
134
|
-
})
|
|
135
|
-
.flatMap(({ body, cookie, headers, path, query }) => {
|
|
136
|
-
const errors: unknown[] = []
|
|
137
|
-
if (body._tag === "Failure") {
|
|
138
|
-
errors.push(makeError("body")(body.errors))
|
|
139
|
-
}
|
|
140
|
-
if (cookie._tag === "Failure") {
|
|
141
|
-
errors.push(makeError("cookie")(cookie.errors))
|
|
142
|
-
}
|
|
143
|
-
if (headers._tag === "Failure") {
|
|
144
|
-
errors.push(makeError("headers")(headers.errors))
|
|
145
|
-
}
|
|
146
|
-
if (path._tag === "Failure") {
|
|
147
|
-
errors.push(makeError("path")(path.errors))
|
|
148
|
-
}
|
|
149
|
-
if (query._tag === "Failure") {
|
|
150
|
-
errors.push(makeError("query")(query.errors))
|
|
151
|
-
}
|
|
152
|
-
if (errors.length) {
|
|
153
|
-
return new ValidationError({ errors })
|
|
154
|
-
}
|
|
155
|
-
return Effect.sync(() => ({
|
|
156
|
-
body: body.value!,
|
|
157
|
-
cookie: cookie.value!,
|
|
158
|
-
headers: headers.value!,
|
|
159
|
-
path: path.value!,
|
|
160
|
-
query: query.value!
|
|
161
|
-
}))
|
|
162
|
-
})
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
166
|
-
// function mapErrors_<E, NE, NER extends Record<string, Effect<any, E, any>>>(
|
|
167
|
-
// t: NER, // TODO: enforce non empty
|
|
168
|
-
// mapErrors: (k: keyof NER) => (err: E) => NE
|
|
169
|
-
// ): {
|
|
170
|
-
// [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
|
|
171
|
-
// } {
|
|
172
|
-
// return typedKeysOf(t).reduce(
|
|
173
|
-
// (prev, cur) => {
|
|
174
|
-
// prev[cur] = t[cur].mapError(mapErrors(cur))
|
|
175
|
-
// return prev
|
|
176
|
-
// },
|
|
177
|
-
// {} as {
|
|
178
|
-
// [K in keyof NER]: Effect<_R<NER[K]>, NE, Effect.Success<NER[K]>>
|
|
179
|
-
// }
|
|
180
|
-
// )
|
|
181
|
-
// }
|
|
182
|
-
|
|
183
|
-
function makeError(type: string) {
|
|
184
|
-
return (e: unknown) => [{ type, errors: decodeErrors(e) }]
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
export function respondSuccess<ReqA, A, E>(
|
|
188
|
-
encodeResponse: (req: ReqA) => Encode<A, E>
|
|
189
|
-
) {
|
|
190
|
-
return (req: ReqA, res: express.Response) =>
|
|
191
|
-
flow(encodeResponse(req), Effect.succeed, (_) =>
|
|
192
|
-
_.flatMap((r) =>
|
|
193
|
-
Effect.sync(() => {
|
|
194
|
-
r === undefined
|
|
195
|
-
? res.status(204).send()
|
|
196
|
-
: res.status(200).send(r === null ? JSON.stringify(null) : r)
|
|
197
|
-
})
|
|
198
|
-
))
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
export interface RequestHandlerOptRes<
|
|
202
|
-
R,
|
|
203
|
-
PathA,
|
|
204
|
-
CookieA,
|
|
205
|
-
QueryA,
|
|
206
|
-
BodyA,
|
|
207
|
-
HeaderA,
|
|
208
|
-
ReqA extends PathA & QueryA & BodyA,
|
|
209
|
-
ResA,
|
|
210
|
-
ResE
|
|
211
|
-
> {
|
|
212
|
-
adaptResponse?: any
|
|
213
|
-
h: (i: PathA & QueryA & BodyA & {}) => Effect<R, ResE, ResA>
|
|
214
|
-
Request: Request<PathA, CookieA, QueryA, BodyA, HeaderA, ReqA>
|
|
215
|
-
Response?: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
export interface RequestHandler<
|
|
219
|
-
R,
|
|
220
|
-
PathA,
|
|
221
|
-
CookieA,
|
|
222
|
-
QueryA,
|
|
223
|
-
BodyA,
|
|
224
|
-
HeaderA,
|
|
225
|
-
ReqA extends PathA & QueryA & BodyA,
|
|
226
|
-
ResA,
|
|
227
|
-
ResE
|
|
228
|
-
> {
|
|
229
|
-
adaptResponse?: any
|
|
230
|
-
h: (i: PathA & QueryA & BodyA & {}) => Effect<R, ResE, ResA>
|
|
231
|
-
Request: Request<PathA, CookieA, QueryA, BodyA, HeaderA, ReqA>
|
|
232
|
-
Response: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
|
|
233
|
-
ResponseOpenApi?: any
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export interface RequestHandler2<
|
|
237
|
-
R,
|
|
238
|
-
Path extends string,
|
|
239
|
-
Method extends Methods,
|
|
240
|
-
ReqA,
|
|
241
|
-
ResA,
|
|
242
|
-
ResE
|
|
243
|
-
> {
|
|
244
|
-
h: (i: ReqA) => Effect<R, ResE, ResA>
|
|
245
|
-
Request: Request2<Path, Method, ReqA>
|
|
246
|
-
Response: MO.ReqRes<unknown, ResA> | MO.ReqResSchemed<unknown, ResA>
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
export type MiddlewareHandler<ResE, R2 = never, PR = never> = (
|
|
250
|
-
req: express.Request,
|
|
251
|
-
res: express.Response
|
|
252
|
-
) => Layer<R2, ResE, PR>
|
|
253
|
-
|
|
254
|
-
export type Middleware<
|
|
255
|
-
R,
|
|
256
|
-
PathA,
|
|
257
|
-
CookieA,
|
|
258
|
-
QueryA,
|
|
259
|
-
BodyA,
|
|
260
|
-
HeaderA,
|
|
261
|
-
ReqA extends PathA & QueryA & BodyA,
|
|
262
|
-
ResA,
|
|
263
|
-
ResE,
|
|
264
|
-
R2 = never,
|
|
265
|
-
PR = never
|
|
266
|
-
> = (
|
|
267
|
-
handler: RequestHandler<R, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE>
|
|
268
|
-
) => {
|
|
269
|
-
handler: typeof handler
|
|
270
|
-
handle: MiddlewareHandler<ResE, R2, PR>
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export type Middleware2<R, ReqA, ResA, R2 = never, PR = never> = Middleware<
|
|
274
|
-
R,
|
|
275
|
-
any,
|
|
276
|
-
any,
|
|
277
|
-
any,
|
|
278
|
-
any,
|
|
279
|
-
any,
|
|
280
|
-
ReqA,
|
|
281
|
-
ResA,
|
|
282
|
-
any,
|
|
283
|
-
R2,
|
|
284
|
-
PR
|
|
285
|
-
>
|
|
286
|
-
|
|
287
|
-
export function makeRequestParsers<
|
|
288
|
-
R,
|
|
289
|
-
PathA,
|
|
290
|
-
CookieA,
|
|
291
|
-
QueryA,
|
|
292
|
-
BodyA,
|
|
293
|
-
HeaderA,
|
|
294
|
-
ReqA extends PathA & QueryA & BodyA,
|
|
295
|
-
ResA,
|
|
296
|
-
Errors
|
|
297
|
-
>(
|
|
298
|
-
Request: RequestHandler<
|
|
299
|
-
R,
|
|
300
|
-
PathA,
|
|
301
|
-
CookieA,
|
|
302
|
-
QueryA,
|
|
303
|
-
BodyA,
|
|
304
|
-
HeaderA,
|
|
305
|
-
ReqA,
|
|
306
|
-
ResA,
|
|
307
|
-
Errors
|
|
308
|
-
>["Request"]
|
|
309
|
-
): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
|
|
310
|
-
const ph = Effect.sync(() =>
|
|
311
|
-
Option
|
|
312
|
-
.fromNullable(Request.Headers)
|
|
313
|
-
.map((s) => s)
|
|
314
|
-
.map(Parser.for)
|
|
315
|
-
.map(MO.condemn)
|
|
316
|
-
)
|
|
317
|
-
const parseHeaders = (u: unknown) => ph.flatMapOpt((d) => d(u))
|
|
318
|
-
|
|
319
|
-
const pq = Effect.sync(() =>
|
|
320
|
-
Option
|
|
321
|
-
.fromNullable(Request.Query)
|
|
322
|
-
.map((s) => s)
|
|
323
|
-
.map(Parser.for)
|
|
324
|
-
.map(MO.condemn)
|
|
325
|
-
)
|
|
326
|
-
const parseQuery = (u: unknown) => pq.flatMapOpt((d) => d(u))
|
|
327
|
-
|
|
328
|
-
const pb = Effect.sync(() =>
|
|
329
|
-
Option
|
|
330
|
-
.fromNullable(Request.Body)
|
|
331
|
-
.map((s) => s)
|
|
332
|
-
.map(Parser.for)
|
|
333
|
-
.map(MO.condemn)
|
|
334
|
-
)
|
|
335
|
-
const parseBody = (u: unknown) => pb.flatMapOpt((d) => d(u))
|
|
336
|
-
|
|
337
|
-
const pp = Effect.sync(() =>
|
|
338
|
-
Option
|
|
339
|
-
.fromNullable(Request.Path)
|
|
340
|
-
.map((s) => s)
|
|
341
|
-
.map(Parser.for)
|
|
342
|
-
.map(MO.condemn)
|
|
343
|
-
)
|
|
344
|
-
const parsePath = (u: unknown) => pp.flatMapOpt((d) => d(u))
|
|
345
|
-
|
|
346
|
-
const pc = Effect.sync(() =>
|
|
347
|
-
Option
|
|
348
|
-
.fromNullable(Request.Cookie)
|
|
349
|
-
.map((s) => s)
|
|
350
|
-
.map(Parser.for)
|
|
351
|
-
.map(MO.condemn)
|
|
352
|
-
)
|
|
353
|
-
const parseCookie = (u: unknown) => pc.flatMapOpt((d) => d(u))
|
|
354
|
-
|
|
355
|
-
return {
|
|
356
|
-
parseBody,
|
|
357
|
-
parseCookie,
|
|
358
|
-
parseHeaders,
|
|
359
|
-
parsePath,
|
|
360
|
-
parseQuery
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
type Decode<A> = (u: unknown) => Effect<never, unknown, A>
|
|
365
|
-
|
|
366
|
-
export interface RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA> {
|
|
367
|
-
parseHeaders: Decode<Option<HeaderA>>
|
|
368
|
-
parseQuery: Decode<Option<QueryA>>
|
|
369
|
-
parseBody: Decode<Option<BodyA>>
|
|
370
|
-
parsePath: Decode<Option<PathA>>
|
|
371
|
-
parseCookie: Decode<Option<CookieA>>
|
|
372
|
-
}
|