@openstax/ts-utils 1.25.1-pre1 → 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/services/documentStore/versioned/file-system.d.ts +3 -1
- package/dist/cjs/services/documentStore/versioned/file-system.js +3 -3
- 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/services/documentStore/versioned/file-system.d.ts +3 -1
- package/dist/esm/services/documentStore/versioned/file-system.js +3 -3
- 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
|
}
|
|
@@ -8,7 +8,9 @@ interface Initializer<C> {
|
|
|
8
8
|
}
|
|
9
9
|
export declare const fileSystemVersionedDocumentStore: <C extends string = "fileSystem">(initializer: Initializer<C>) => <T extends VersionedTDocument<T>>() => (configProvider: { [key in C]: {
|
|
10
10
|
tableName: import("../../../config").ConfigValueProvider<string>;
|
|
11
|
-
}; }) => <K extends keyof T, A extends ((...a: any[]) => Promise<VersionedDocumentAuthor>) | undefined>(_: {}, hashKey: K,
|
|
11
|
+
}; }) => <K extends keyof T, A extends ((...a: any[]) => Promise<VersionedDocumentAuthor>) | undefined>(_: {}, hashKey: K, options?: {
|
|
12
|
+
getAuthor?: A | undefined;
|
|
13
|
+
} | undefined) => {
|
|
12
14
|
loadAllDocumentsTheBadWay: () => Promise<T[]>;
|
|
13
15
|
getVersions: (id: T[K], startVersion?: number | undefined) => Promise<{
|
|
14
16
|
items: T[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fileSystemUnversionedDocumentStore } from '../unversioned/file-system';
|
|
2
2
|
const PAGE_LIMIT = 5;
|
|
3
|
-
export const fileSystemVersionedDocumentStore = (initializer) => () => (configProvider) => (_, hashKey,
|
|
3
|
+
export const fileSystemVersionedDocumentStore = (initializer) => () => (configProvider) => (_, hashKey, options) => {
|
|
4
4
|
const unversionedDocuments = fileSystemUnversionedDocumentStore(initializer)()(configProvider)({}, 'id');
|
|
5
5
|
return {
|
|
6
6
|
loadAllDocumentsTheBadWay: () => {
|
|
@@ -31,7 +31,7 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
31
31
|
},
|
|
32
32
|
prepareItem: async (item, ...authorArgs) => {
|
|
33
33
|
// this getAuthor type is terrible
|
|
34
|
-
const author = getAuthor ? await getAuthor(...authorArgs) : authorArgs[0];
|
|
34
|
+
const author = (options === null || options === void 0 ? void 0 : options.getAuthor) ? await options.getAuthor(...authorArgs) : authorArgs[0];
|
|
35
35
|
const timestamp = new Date().getTime();
|
|
36
36
|
return {
|
|
37
37
|
document: { ...item, timestamp, author },
|
|
@@ -47,7 +47,7 @@ export const fileSystemVersionedDocumentStore = (initializer) => () => (configPr
|
|
|
47
47
|
},
|
|
48
48
|
putItem: async (item, ...authorArgs) => {
|
|
49
49
|
var _a;
|
|
50
|
-
const author = getAuthor ? await getAuthor(...authorArgs) : authorArgs[0];
|
|
50
|
+
const author = (options === null || options === void 0 ? void 0 : options.getAuthor) ? await options.getAuthor(...authorArgs) : authorArgs[0];
|
|
51
51
|
const document = { ...item, timestamp: new Date().getTime(), author };
|
|
52
52
|
const container = (_a = await unversionedDocuments.getItem(document[hashKey])) !== null && _a !== void 0 ? _a : { id: document[hashKey], items: [] };
|
|
53
53
|
const updated = { ...container, items: [...container.items, document] };
|