@openstax/ts-utils 1.25.1-pre2 → 1.25.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/dist/cjs/middleware/apiErrorHandler.d.ts +1 -1
- package/dist/cjs/middleware/apiErrorHandler.js +6 -5
- package/dist/cjs/routing/index.js +10 -4
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
- package/dist/esm/middleware/apiErrorHandler.d.ts +1 -1
- package/dist/esm/middleware/apiErrorHandler.js +6 -5
- package/dist/esm/routing/index.js +10 -4
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ export declare type DefaultErrors = {
|
|
|
10
10
|
SessionExpiredError: SessionExpiredError;
|
|
11
11
|
};
|
|
12
12
|
export declare type Handlers<E> = {
|
|
13
|
-
[T in keyof E]
|
|
13
|
+
[T in keyof E]?: (e: E[T], logger: Logger) => ApiResponse<number, any>;
|
|
14
14
|
};
|
|
15
15
|
export declare const defaultHandlers: Handlers<DefaultErrors>;
|
|
16
16
|
/**
|
|
@@ -22,16 +22,17 @@ export const createErrorHandler = (inputHandlers) => {
|
|
|
22
22
|
return async (e, logger) => {
|
|
23
23
|
const name = isAppError(e) ? e.constructor.TYPE : e.constructor.name;
|
|
24
24
|
const handler = handlers[name];
|
|
25
|
+
const logLevel = handler ? Level.Info : Level.Error;
|
|
26
|
+
logger.logEvent(logLevel, {
|
|
27
|
+
name: e.name,
|
|
28
|
+
message: e.message,
|
|
29
|
+
stack: e.stack,
|
|
30
|
+
});
|
|
25
31
|
if (handler) {
|
|
26
32
|
// convincing typescript that this error is the right kind for the handler
|
|
27
33
|
// we looked up based on the errors name is very annoying
|
|
28
34
|
return handler(e, logger);
|
|
29
35
|
}
|
|
30
|
-
logger.logEvent(Level.Error, {
|
|
31
|
-
name: e.name,
|
|
32
|
-
message: e.message,
|
|
33
|
-
stack: e.stack,
|
|
34
|
-
});
|
|
35
36
|
return apiTextResponse(500, '500 Error');
|
|
36
37
|
};
|
|
37
38
|
};
|
|
@@ -105,7 +105,10 @@ const bindRoute = (services, appBinder, pathExtractor, matcher) => (route) => {
|
|
|
105
105
|
const path = pathExtractor(request);
|
|
106
106
|
const match = getParamsFromPath(path);
|
|
107
107
|
if ((!matcher || matcher(request, route)) && match) {
|
|
108
|
-
return
|
|
108
|
+
return {
|
|
109
|
+
name: route.name,
|
|
110
|
+
executor: () => route.handler(match.params, boundServiceProvider ? boundServiceProvider({ request, logger }, { route, params: match.params }) : undefined)
|
|
111
|
+
};
|
|
109
112
|
}
|
|
110
113
|
};
|
|
111
114
|
};
|
|
@@ -158,11 +161,13 @@ export const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatc
|
|
|
158
161
|
if (logExtractor) {
|
|
159
162
|
logger.setContext(logExtractor(request));
|
|
160
163
|
}
|
|
164
|
+
logger.log('begin request');
|
|
161
165
|
try {
|
|
162
|
-
const
|
|
163
|
-
if (
|
|
166
|
+
const route = mapFind(boundRoutes, (route) => route(request, logger));
|
|
167
|
+
if (route) {
|
|
168
|
+
logger.log(`route matched ${route.name}`);
|
|
164
169
|
const result = boundResponseMiddleware ?
|
|
165
|
-
boundResponseMiddleware(executor(), { request, logger }) : executor();
|
|
170
|
+
boundResponseMiddleware(route.executor(), { request, logger }) : route.executor();
|
|
166
171
|
if (isPromise(result) && errorHandler) {
|
|
167
172
|
const errorHandlerWithMiddleware = (e) => boundResponseMiddleware ?
|
|
168
173
|
boundResponseMiddleware(errorHandler(e, logger), { request, logger }) : errorHandler(e, logger);
|
|
@@ -173,6 +178,7 @@ export const makeGetRequestResponder = () => ({ routes, pathExtractor, routeMatc
|
|
|
173
178
|
}
|
|
174
179
|
}
|
|
175
180
|
else if (boundResponseMiddleware) {
|
|
181
|
+
logger.log('no route matched, returning 404');
|
|
176
182
|
return boundResponseMiddleware(undefined, { request, logger });
|
|
177
183
|
}
|
|
178
184
|
}
|