temba 0.17.0 → 0.19.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/README.md +58 -10
- package/package.json +17 -17
- package/{config → src/config}/index.d.ts +15 -8
- package/src/config/index.d.ts.map +1 -0
- package/{config → src/config}/index.js +23 -28
- package/src/config/index.js.map +1 -0
- package/src/delay/delayMiddleware.d.ts +3 -0
- package/src/delay/delayMiddleware.d.ts.map +1 -0
- package/src/delay/delayMiddleware.js +13 -0
- package/src/delay/delayMiddleware.js.map +1 -0
- package/src/index.d.ts +6 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +83 -0
- package/src/index.js.map +1 -0
- package/src/queries/in-memory.d.ts +3 -0
- package/src/queries/in-memory.d.ts.map +1 -0
- package/src/queries/in-memory.js +61 -0
- package/src/queries/in-memory.js.map +1 -0
- package/src/queries/mongo.d.ts +3 -0
- package/src/queries/mongo.d.ts.map +1 -0
- package/src/queries/mongo.js +75 -0
- package/src/queries/mongo.js.map +1 -0
- package/src/queries/queries.d.ts +2 -0
- package/src/queries/queries.d.ts.map +1 -0
- package/src/queries/queries.js +10 -0
- package/src/queries/queries.js.map +1 -0
- package/src/queries/types.d.ts +15 -0
- package/src/queries/types.d.ts.map +1 -0
- package/src/queries/types.js +2 -0
- package/src/queries/types.js.map +1 -0
- package/src/requestBodyInterceptor/interceptRequestBody.d.ts +3 -0
- package/src/requestBodyInterceptor/interceptRequestBody.d.ts.map +1 -0
- package/src/requestBodyInterceptor/interceptRequestBody.js +14 -0
- package/src/requestBodyInterceptor/interceptRequestBody.js.map +1 -0
- package/src/requestBodyInterceptor/types.d.ts +12 -0
- package/src/requestBodyInterceptor/types.d.ts.map +1 -0
- package/src/requestBodyInterceptor/types.js +2 -0
- package/src/requestBodyInterceptor/types.js.map +1 -0
- package/src/requestHandlers/delete.d.ts +12 -0
- package/src/requestHandlers/delete.d.ts.map +1 -0
- package/src/requestHandlers/delete.js +22 -0
- package/src/requestHandlers/delete.js.map +1 -0
- package/src/requestHandlers/get.d.ts +22 -0
- package/src/requestHandlers/get.d.ts.map +1 -0
- package/src/requestHandlers/get.js +47 -0
- package/src/requestHandlers/get.js.map +1 -0
- package/src/requestHandlers/index.d.ts +54 -0
- package/src/requestHandlers/index.d.ts.map +1 -0
- package/src/requestHandlers/index.js +21 -0
- package/src/requestHandlers/index.js.map +1 -0
- package/src/requestHandlers/patch.d.ts +9 -0
- package/src/requestHandlers/patch.d.ts.map +1 -0
- package/src/requestHandlers/patch.js +35 -0
- package/src/requestHandlers/patch.js.map +1 -0
- package/src/requestHandlers/post.d.ts +18 -0
- package/src/requestHandlers/post.d.ts.map +1 -0
- package/src/requestHandlers/post.js +37 -0
- package/src/requestHandlers/post.js.map +1 -0
- package/src/requestHandlers/put.d.ts +9 -0
- package/src/requestHandlers/put.d.ts.map +1 -0
- package/src/requestHandlers/put.js +35 -0
- package/src/requestHandlers/put.js.map +1 -0
- package/src/requestHandlers/types.d.ts +38 -0
- package/src/requestHandlers/types.d.ts.map +1 -0
- package/src/requestHandlers/types.js +2 -0
- package/src/requestHandlers/types.js.map +1 -0
- package/src/requestHandlers/utils.d.ts +2 -0
- package/src/requestHandlers/utils.d.ts.map +1 -0
- package/src/requestHandlers/utils.js +6 -0
- package/src/requestHandlers/utils.js.map +1 -0
- package/src/resourceRouter.d.ts +5 -0
- package/src/resourceRouter.d.ts.map +1 -0
- package/src/resourceRouter.js +95 -0
- package/src/resourceRouter.js.map +1 -0
- package/src/responseBodyInterceptor/interceptResponseBody.d.ts +3 -0
- package/src/responseBodyInterceptor/interceptResponseBody.d.ts.map +1 -0
- package/src/responseBodyInterceptor/interceptResponseBody.js +7 -0
- package/src/responseBodyInterceptor/interceptResponseBody.js.map +1 -0
- package/src/responseBodyInterceptor/types.d.ts +11 -0
- package/src/responseBodyInterceptor/types.d.ts.map +1 -0
- package/src/responseBodyInterceptor/types.js +2 -0
- package/src/responseBodyInterceptor/types.js.map +1 -0
- package/src/schema/compile.d.ts +3 -0
- package/src/schema/compile.d.ts.map +1 -0
- package/src/schema/compile.js +26 -0
- package/src/schema/compile.js.map +1 -0
- package/src/schema/types.d.ts +25 -0
- package/src/schema/types.d.ts.map +1 -0
- package/src/schema/types.js +2 -0
- package/{routes → src/schema}/types.js.map +1 -1
- package/src/schema/validate.d.ts +4 -0
- package/src/schema/validate.d.ts.map +1 -0
- package/src/schema/validate.js +14 -0
- package/src/schema/validate.js.map +1 -0
- package/src/urls/urlParser.d.ts +5 -0
- package/src/urls/urlParser.d.ts.map +1 -0
- package/src/urls/urlParser.js +9 -0
- package/src/urls/urlParser.js.map +1 -0
- package/test/integration/api-prefix.test.d.ts +2 -0
- package/test/integration/api-prefix.test.d.ts.map +1 -0
- package/test/integration/api-prefix.test.js +69 -0
- package/test/integration/api-prefix.test.js.map +1 -0
- package/test/integration/createServer.d.ts +4 -0
- package/test/integration/createServer.d.ts.map +1 -0
- package/test/integration/createServer.js +4 -0
- package/test/integration/createServer.js.map +1 -0
- package/test/integration/crud.test.d.ts +2 -0
- package/test/integration/crud.test.d.ts.map +1 -0
- package/test/integration/crud.test.js +173 -0
- package/test/integration/crud.test.js.map +1 -0
- package/test/integration/custom-router.test.d.ts +2 -0
- package/test/integration/custom-router.test.d.ts.map +1 -0
- package/test/integration/custom-router.test.js +74 -0
- package/test/integration/custom-router.test.js.map +1 -0
- package/test/integration/head-method.test.d.ts +2 -0
- package/test/integration/head-method.test.d.ts.map +1 -0
- package/test/integration/head-method.test.js +38 -0
- package/test/integration/head-method.test.js.map +1 -0
- package/test/integration/options-method.test.d.ts +2 -0
- package/test/integration/options-method.test.d.ts.map +1 -0
- package/test/integration/options-method.test.js +30 -0
- package/test/integration/options-method.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js +76 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-change-requestBody.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js +60 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-error-string.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js +89 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-invalid-return-types.test.js.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts +2 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.d.ts.map +1 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js +47 -0
- package/test/integration/requestBodyInterceptor/requestBodyInterceptor-void.test.js.map +1 -0
- package/test/integration/responseBodyInterceptor.test.d.ts +2 -0
- package/test/integration/responseBodyInterceptor.test.d.ts.map +1 -0
- package/test/integration/responseBodyInterceptor.test.js +107 -0
- package/test/integration/responseBodyInterceptor.test.js.map +1 -0
- package/test/integration/returnNullFields.test.d.ts +2 -0
- package/test/integration/returnNullFields.test.d.ts.map +1 -0
- package/test/integration/returnNullFields.test.js +51 -0
- package/test/integration/returnNullFields.test.js.map +1 -0
- package/test/integration/root-url.test.d.ts +2 -0
- package/test/integration/root-url.test.d.ts.map +1 -0
- package/test/integration/root-url.test.js +29 -0
- package/test/integration/root-url.test.js.map +1 -0
- package/test/integration/schema-validation.test.d.ts +2 -0
- package/test/integration/schema-validation.test.d.ts.map +1 -0
- package/test/integration/schema-validation.test.js +169 -0
- package/test/integration/schema-validation.test.js.map +1 -0
- package/test/unit/config/config.test.d.ts +2 -0
- package/test/unit/config/config.test.d.ts.map +1 -0
- package/test/unit/config/config.test.js +121 -0
- package/test/unit/config/config.test.js.map +1 -0
- package/test/unit/urls/urlParser.test.d.ts +2 -0
- package/test/unit/urls/urlParser.test.d.ts.map +1 -0
- package/test/unit/urls/urlParser.test.js +43 -0
- package/test/unit/urls/urlParser.test.js.map +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.d.ts +3 -0
- package/vitest.config.d.ts.map +1 -0
- package/vitest.config.js +10 -0
- package/vitest.config.js.map +1 -0
- package/config/index.js.map +0 -1
- package/delay/delayMiddleware.d.ts +0 -2
- package/delay/delayMiddleware.js +0 -16
- package/delay/delayMiddleware.js.map +0 -1
- package/index.d.ts +0 -5
- package/index.js +0 -94
- package/index.js.map +0 -1
- package/queries/in-memory.d.ts +0 -19
- package/queries/in-memory.js +0 -66
- package/queries/in-memory.js.map +0 -1
- package/queries/mongo.d.ts +0 -19
- package/queries/mongo.js +0 -106
- package/queries/mongo.js.map +0 -1
- package/queries/queries.d.ts +0 -20
- package/queries/queries.js +0 -17
- package/queries/queries.js.map +0 -1
- package/routes/delete.d.ts +0 -4
- package/routes/delete.js +0 -39
- package/routes/delete.js.map +0 -1
- package/routes/get.d.ts +0 -4
- package/routes/get.js +0 -71
- package/routes/get.js.map +0 -1
- package/routes/interceptors.d.ts +0 -3
- package/routes/interceptors.js +0 -22
- package/routes/interceptors.js.map +0 -1
- package/routes/patch.d.ts +0 -4
- package/routes/patch.js +0 -47
- package/routes/patch.js.map +0 -1
- package/routes/post.d.ts +0 -4
- package/routes/post.js +0 -47
- package/routes/post.js.map +0 -1
- package/routes/put.d.ts +0 -4
- package/routes/put.js +0 -47
- package/routes/put.js.map +0 -1
- package/routes/routes.d.ts +0 -6
- package/routes/routes.js +0 -61
- package/routes/routes.js.map +0 -1
- package/routes/types.d.ts +0 -17
- package/routes/types.js +0 -3
- package/routes/utils.d.ts +0 -3
- package/routes/utils.js +0 -8
- package/routes/utils.js.map +0 -1
- package/urls/urlMiddleware.d.ts +0 -3
- package/urls/urlMiddleware.js +0 -30
- package/urls/urlMiddleware.js.map +0 -1
- package/urls/urlParser.d.ts +0 -5
- package/urls/urlParser.js +0 -13
- package/urls/urlParser.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { inMemoryQueries } from './in-memory';
|
|
2
|
+
import { createMongoQueries } from './mongo';
|
|
3
|
+
export const createQueries = (connectionString) => {
|
|
4
|
+
if (!connectionString) {
|
|
5
|
+
return inMemoryQueries;
|
|
6
|
+
}
|
|
7
|
+
const mongoQueries = createMongoQueries(connectionString);
|
|
8
|
+
return mongoQueries;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,gBAA+B,EAAE,EAAE;IAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IACzD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type Item = {
|
|
2
|
+
id: string;
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
};
|
|
5
|
+
export type ItemWithoutId = Omit<Item, 'id'>;
|
|
6
|
+
export type Queries = {
|
|
7
|
+
getAll: (resource: string) => Promise<Item[]>;
|
|
8
|
+
getById: (resource: string, id: string) => Promise<Item | null>;
|
|
9
|
+
create: (resource: string, item: ItemWithoutId) => Promise<Item>;
|
|
10
|
+
update: (resource: string, item: Item) => Promise<Item>;
|
|
11
|
+
replace: (resource: string, item: Item) => Promise<Item>;
|
|
12
|
+
deleteById: (resource: string, id: string) => Promise<void>;
|
|
13
|
+
deleteAll: (resource: string) => Promise<void>;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queries/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE5C,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/queries/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptRequestBody.d.ts","sourceRoot":"","sources":["../../../src/requestBodyInterceptor/interceptRequestBody.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAA;AAE7D,eAAO,MAAM,oBAAoB,cACpB,8BAA8B,YAC/B,MAAM,QACV,OAAO,YAed,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const interceptRequestBody = (intercept, resource, body) => {
|
|
2
|
+
const intercepted = intercept({ resource, body });
|
|
3
|
+
if (!intercepted && typeof body === 'object')
|
|
4
|
+
return body;
|
|
5
|
+
if (typeof intercepted === 'string')
|
|
6
|
+
return intercepted;
|
|
7
|
+
// The request body was replaced by an object
|
|
8
|
+
if (intercepted && typeof intercepted === 'object' && !Array.isArray(intercepted))
|
|
9
|
+
return intercepted;
|
|
10
|
+
// The request body was replaced by something else than an object or a string.
|
|
11
|
+
// This is not supported, so we return the original request body.
|
|
12
|
+
return body;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=interceptRequestBody.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptRequestBody.js","sourceRoot":"","sources":["../../../src/requestBodyInterceptor/interceptRequestBody.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAyC,EACzC,QAAgB,EAChB,IAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjD,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEzD,IAAI,OAAO,WAAW,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAA;IAEvD,6CAA6C;IAC7C,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/E,OAAO,WAAW,CAAA;IAEpB,8EAA8E;IAC9E,iEAAiE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type InterceptedRequest = {
|
|
2
|
+
resource: string;
|
|
3
|
+
body: unknown;
|
|
4
|
+
};
|
|
5
|
+
export type RequestBodyInterceptorCallback = (info: InterceptedRequest) => void | string | object;
|
|
6
|
+
export type RequestBodyInterceptor = {
|
|
7
|
+
post?: RequestBodyInterceptorCallback;
|
|
8
|
+
patch?: RequestBodyInterceptorCallback;
|
|
9
|
+
put?: RequestBodyInterceptorCallback;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestBodyInterceptor/types.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAEjG,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,8BAA8B,CAAA;IACrC,KAAK,CAAC,EAAE,8BAA8B,CAAA;IACtC,GAAG,CAAC,EAAE,8BAA8B,CAAA;CACrC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/requestBodyInterceptor/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Queries } from '../queries/types';
|
|
2
|
+
import type { DeleteRequest } from './types';
|
|
3
|
+
export declare const createDeleteRoutes: (queries: Queries) => (req: DeleteRequest) => Promise<{
|
|
4
|
+
status: number;
|
|
5
|
+
body?: undefined;
|
|
6
|
+
} | {
|
|
7
|
+
status: number;
|
|
8
|
+
body: {
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,kBAAkB,YAAa,OAAO,WAChB,aAAa;;;;;;;;EAoB/C,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const createDeleteRoutes = (queries) => {
|
|
2
|
+
const handleDelete = async (req) => {
|
|
3
|
+
try {
|
|
4
|
+
const { resource, id } = req;
|
|
5
|
+
if (id) {
|
|
6
|
+
const item = await queries.getById(resource, id);
|
|
7
|
+
if (item) {
|
|
8
|
+
await queries.deleteById(resource, id);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
await queries.deleteAll(resource);
|
|
13
|
+
}
|
|
14
|
+
return { status: 204 };
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return { status: 500, body: { message: error.message } };
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return handleDelete;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACrD,MAAM,YAAY,GAAG,KAAK,EAAE,GAAkB,EAAE,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAE5B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAChD,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Queries } from '../queries/types';
|
|
2
|
+
import type { ResponseBodyInterceptor } from '../responseBodyInterceptor/types';
|
|
3
|
+
import type { GetRequest } from './types';
|
|
4
|
+
export declare const createGetRoutes: (queries: Queries, cacheControl: string, responseBodyInterceptor: ResponseBodyInterceptor | null, returnNullFields: boolean) => (req: GetRequest) => Promise<{
|
|
5
|
+
status: number;
|
|
6
|
+
body: unknown;
|
|
7
|
+
headers: {
|
|
8
|
+
'Cache-control': string;
|
|
9
|
+
};
|
|
10
|
+
} | {
|
|
11
|
+
status: number;
|
|
12
|
+
headers: {
|
|
13
|
+
'Cache-control': string;
|
|
14
|
+
};
|
|
15
|
+
body?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
status: number;
|
|
18
|
+
body: {
|
|
19
|
+
message: string;
|
|
20
|
+
};
|
|
21
|
+
}>;
|
|
22
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,eAAO,MAAM,eAAe,YACjB,OAAO,gBACF,MAAM,2BACK,uBAAuB,GAAG,IAAI,oBACrC,OAAO,WAKK,UAAU;;;;;;;;;;;;;;;;;EAmDzC,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { interceptResponseBody } from '../responseBodyInterceptor/interceptResponseBody';
|
|
2
|
+
import { removeNullFields } from './utils';
|
|
3
|
+
export const createGetRoutes = (queries, cacheControl, responseBodyInterceptor, returnNullFields) => {
|
|
4
|
+
const defaultResponse = { headers: { 'Cache-control': cacheControl } };
|
|
5
|
+
const responseOk = (body) => ({ ...defaultResponse, status: 200, body });
|
|
6
|
+
const handleGet = async (req) => {
|
|
7
|
+
try {
|
|
8
|
+
const { resource, id } = req;
|
|
9
|
+
if (id) {
|
|
10
|
+
const item = await queries.getById(resource, id);
|
|
11
|
+
if (!item) {
|
|
12
|
+
return { ...defaultResponse, status: 404 };
|
|
13
|
+
}
|
|
14
|
+
const theItem = responseBodyInterceptor
|
|
15
|
+
? interceptResponseBody(responseBodyInterceptor, { resource, body: item, id })
|
|
16
|
+
: item;
|
|
17
|
+
if (!returnNullFields) {
|
|
18
|
+
if (Array.isArray(theItem)) {
|
|
19
|
+
return responseOk(theItem.map((item) => removeNullFields(item)));
|
|
20
|
+
}
|
|
21
|
+
if (typeof theItem === 'object') {
|
|
22
|
+
return responseOk(removeNullFields(theItem));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return responseOk(theItem);
|
|
26
|
+
}
|
|
27
|
+
const items = await queries.getAll(resource);
|
|
28
|
+
const theItems = responseBodyInterceptor
|
|
29
|
+
? interceptResponseBody(responseBodyInterceptor, { resource, body: items })
|
|
30
|
+
: items;
|
|
31
|
+
if (!returnNullFields) {
|
|
32
|
+
if (Array.isArray(theItems)) {
|
|
33
|
+
return responseOk(theItems.map((item) => removeNullFields(item)));
|
|
34
|
+
}
|
|
35
|
+
if (typeof theItems === 'object') {
|
|
36
|
+
return responseOk(removeNullFields(theItems));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return responseOk(theItems);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return { status: 500, body: { message: error.message } };
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return handleGet;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAA;AAGxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAgB,EAChB,YAAoB,EACpB,uBAAuD,EACvD,gBAAyB,EACzB,EAAE;IACF,MAAM,eAAe,GAAG,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,CAAA;IACtE,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAe,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAE5B,IAAI,EAAE,EAAE,CAAC;gBACP,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,EAAE,GAAG,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;gBAC5C,CAAC;gBAED,MAAM,OAAO,GAAG,uBAAuB;oBACrC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;oBAC9E,CAAC,CAAC,IAAI,CAAA;gBAER,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3B,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBAClE,CAAC;oBAED,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;oBAC9C,CAAC;gBACH,CAAC;gBAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAA;YAC5B,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAE5C,MAAM,QAAQ,GAAG,uBAAuB;gBACtC,CAAC,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC3E,CAAC,CAAC,KAAK,CAAA;YAET,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACnE,CAAC;gBAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,OAAO,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { RouterConfig } from '../config';
|
|
2
|
+
import type { CompiledSchemas } from '../schema/types';
|
|
3
|
+
import type { Queries } from '../queries/types';
|
|
4
|
+
export declare const getRequestHandler: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => {
|
|
5
|
+
handleGet: (req: import("./types").GetRequest) => Promise<{
|
|
6
|
+
status: number;
|
|
7
|
+
body: unknown;
|
|
8
|
+
headers: {
|
|
9
|
+
'Cache-control': string;
|
|
10
|
+
};
|
|
11
|
+
} | {
|
|
12
|
+
status: number;
|
|
13
|
+
headers: {
|
|
14
|
+
'Cache-control': string;
|
|
15
|
+
};
|
|
16
|
+
body?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
status: number;
|
|
19
|
+
body: {
|
|
20
|
+
message: string;
|
|
21
|
+
};
|
|
22
|
+
}>;
|
|
23
|
+
handlePost: (req: import("./types").PostRequest) => Promise<{
|
|
24
|
+
status: number;
|
|
25
|
+
body: {
|
|
26
|
+
message: string;
|
|
27
|
+
};
|
|
28
|
+
headers?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
headers: {
|
|
31
|
+
Location: string;
|
|
32
|
+
};
|
|
33
|
+
status: number;
|
|
34
|
+
body: unknown;
|
|
35
|
+
}>;
|
|
36
|
+
handlePut: (req: import("./types").PutRequest) => Promise<{
|
|
37
|
+
status: number;
|
|
38
|
+
body: unknown;
|
|
39
|
+
}>;
|
|
40
|
+
handlePatch: (req: import("./types").PutRequest) => Promise<{
|
|
41
|
+
status: number;
|
|
42
|
+
body: unknown;
|
|
43
|
+
}>;
|
|
44
|
+
handleDelete: (req: import("./types").DeleteRequest) => Promise<{
|
|
45
|
+
status: number;
|
|
46
|
+
body?: undefined;
|
|
47
|
+
} | {
|
|
48
|
+
status: number;
|
|
49
|
+
body: {
|
|
50
|
+
message: string;
|
|
51
|
+
};
|
|
52
|
+
}>;
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAE/C,eAAO,MAAM,iBAAiB,YACnB,OAAO,WACP,eAAe,gBACV,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC3B,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createGetRoutes } from './get';
|
|
2
|
+
import { createPostRoutes } from './post';
|
|
3
|
+
import { createPutRoutes } from './put';
|
|
4
|
+
import { createPatchRoutes } from './patch';
|
|
5
|
+
import { createDeleteRoutes } from './delete';
|
|
6
|
+
export const getRequestHandler = (queries, schemas, routerConfig) => {
|
|
7
|
+
const { cacheControl, requestBodyInterceptor, responseBodyInterceptor, returnNullFields } = routerConfig;
|
|
8
|
+
const handleGet = createGetRoutes(queries, cacheControl, responseBodyInterceptor, returnNullFields);
|
|
9
|
+
const handlePost = createPostRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.post);
|
|
10
|
+
const handlePut = createPutRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.put);
|
|
11
|
+
const handlePatch = createPatchRoutes(queries, requestBodyInterceptor, returnNullFields, schemas.patch);
|
|
12
|
+
const handleDelete = createDeleteRoutes(queries);
|
|
13
|
+
return {
|
|
14
|
+
handleGet,
|
|
15
|
+
handlePost,
|
|
16
|
+
handlePut,
|
|
17
|
+
handlePatch,
|
|
18
|
+
handleDelete,
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requestHandlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAM7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAgB,EAChB,OAAwB,EACxB,YAA0B,EAC1B,EAAE;IACF,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GACvF,YAAY,CAAA;IAEd,MAAM,SAAS,GAAG,eAAe,CAC/B,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,CAAA;IAED,MAAM,UAAU,GAAG,gBAAgB,CACjC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,IAAI,CACb,CAAA;IAED,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjG,MAAM,WAAW,GAAG,iBAAiB,CACnC,OAAO,EACP,sBAAsB,EACtB,gBAAgB,EAChB,OAAO,CAAC,KAAK,CACd,CAAA;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAEhD,OAAO;QACL,SAAS;QACT,UAAU;QACV,SAAS;QACT,WAAW;QACX,YAAY;KACb,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ValidateFunctionPerResource } from '../schema/types';
|
|
2
|
+
import type { PatchRequest } from './types';
|
|
3
|
+
import type { Queries } from '../queries/types';
|
|
4
|
+
import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
|
|
5
|
+
export declare const createPatchRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PatchRequest) => Promise<{
|
|
6
|
+
status: number;
|
|
7
|
+
body: unknown;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,iBAAiB,YACnB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEX,YAAY;;;EAoC7C,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
|
|
2
|
+
import { validate } from '../schema/validate';
|
|
3
|
+
import { removeNullFields } from './utils';
|
|
4
|
+
export const createPatchRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
|
|
5
|
+
const handlePatch = async (req) => {
|
|
6
|
+
try {
|
|
7
|
+
const { body, resource, id } = req;
|
|
8
|
+
const validationResult = validate(body, schemas?.[resource]);
|
|
9
|
+
if (validationResult.isValid === false) {
|
|
10
|
+
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
11
|
+
}
|
|
12
|
+
const body2 = requestBodyInterceptor?.patch
|
|
13
|
+
? interceptRequestBody(requestBodyInterceptor.patch, resource, body)
|
|
14
|
+
: body;
|
|
15
|
+
if (typeof body2 === 'string')
|
|
16
|
+
return { status: 400, body: { message: body2 } };
|
|
17
|
+
let item = await queries.getById(resource, id);
|
|
18
|
+
if (!item)
|
|
19
|
+
return {
|
|
20
|
+
status: 404,
|
|
21
|
+
body: {
|
|
22
|
+
message: `ID '${id}' not found`,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
item = { ...item, ...body2, id };
|
|
26
|
+
const updatedItem = await queries.update(resource, item);
|
|
27
|
+
return { status: 200, body: returnNullFields ? updatedItem : removeNullFields(updatedItem) };
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return { status: 500, body: { message: error.message } };
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return handlePatch;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAA2C,EAC3C,EAAE;IACF,MAAM,WAAW,GAAG,KAAK,EAAE,GAAiB,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC5D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,KAAK;gBACzC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;gBACpE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAE9C,IAAI,CAAC,IAAI;gBACP,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC;iBACF,CAAA;YAEH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAI,KAAgB,EAAE,EAAE,EAAE,CAAA;YAE5C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAExD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAA;QAC9F,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ValidateFunctionPerResource } from '../schema/types';
|
|
2
|
+
import type { PostRequest } from './types';
|
|
3
|
+
import type { Queries } from '../queries/types';
|
|
4
|
+
import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
|
|
5
|
+
export declare const createPostRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource) => (req: PostRequest) => Promise<{
|
|
6
|
+
status: number;
|
|
7
|
+
body: {
|
|
8
|
+
message: string;
|
|
9
|
+
};
|
|
10
|
+
headers?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
headers: {
|
|
13
|
+
Location: string;
|
|
14
|
+
};
|
|
15
|
+
status: number;
|
|
16
|
+
body: unknown;
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/post.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,KAAK,EAAiB,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,gBAAgB,YAClB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,WAEL,WAAW;;;;;;;;;;;;EAkC3C,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { format } from 'url';
|
|
2
|
+
import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
|
|
3
|
+
import { removeNullFields } from './utils';
|
|
4
|
+
import { validate } from '../schema/validate';
|
|
5
|
+
export const createPostRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
|
|
6
|
+
const handlePost = async (req) => {
|
|
7
|
+
try {
|
|
8
|
+
const { body, protocol, host, resource } = req;
|
|
9
|
+
const validationResult = validate(body, schemas[resource]);
|
|
10
|
+
if (validationResult.isValid === false) {
|
|
11
|
+
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
12
|
+
}
|
|
13
|
+
const body2 = requestBodyInterceptor?.post
|
|
14
|
+
? interceptRequestBody(requestBodyInterceptor.post, resource, body)
|
|
15
|
+
: body;
|
|
16
|
+
if (typeof body2 === 'string')
|
|
17
|
+
return { status: 400, body: { message: body2 } };
|
|
18
|
+
const newItem = await queries.create(resource, body2);
|
|
19
|
+
return {
|
|
20
|
+
headers: {
|
|
21
|
+
Location: format({
|
|
22
|
+
protocol: protocol,
|
|
23
|
+
host: host,
|
|
24
|
+
pathname: `${resource}/${newItem.id}`,
|
|
25
|
+
}),
|
|
26
|
+
},
|
|
27
|
+
status: 201,
|
|
28
|
+
body: returnNullFields ? newItem : removeNullFields(newItem),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
return { status: 500, body: { message: error.message } };
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return handlePost;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/requestHandlers/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAM7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAAoC,EACpC,EAAE;IACF,MAAM,UAAU,GAAG,KAAK,EAAE,GAAgB,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;YAE9C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC1D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,IAAI;gBACxC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAsB,CAAC,CAAA;YAEtE,OAAO;gBACL,OAAO,EAAE;oBACP,QAAQ,EAAE,MAAM,CAAC;wBACf,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,IAAI;wBACV,QAAQ,EAAE,GAAG,QAAQ,IAAI,OAAO,CAAC,EAAE,EAAE;qBACtC,CAAC;iBACH;gBACD,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC;aAC7D,CAAA;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ValidateFunctionPerResource } from '../schema/types';
|
|
2
|
+
import type { PutRequest } from './types';
|
|
3
|
+
import type { Queries } from '../queries/types';
|
|
4
|
+
import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
|
|
5
|
+
export declare const createPutRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PutRequest) => Promise<{
|
|
6
|
+
status: number;
|
|
7
|
+
body: unknown;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=put.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"put.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,eAAO,MAAM,eAAe,YACjB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEb,UAAU;;;EAoCzC,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { interceptRequestBody } from '../requestBodyInterceptor/interceptRequestBody';
|
|
2
|
+
import { validate } from '../schema/validate';
|
|
3
|
+
import { removeNullFields } from './utils';
|
|
4
|
+
export const createPutRoutes = (queries, requestBodyInterceptor, returnNullFields, schemas) => {
|
|
5
|
+
const handlePut = async (req) => {
|
|
6
|
+
try {
|
|
7
|
+
const { body, resource, id } = req;
|
|
8
|
+
const validationResult = validate(body, schemas?.[resource]);
|
|
9
|
+
if (validationResult.isValid === false) {
|
|
10
|
+
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
11
|
+
}
|
|
12
|
+
const body2 = requestBodyInterceptor?.put
|
|
13
|
+
? interceptRequestBody(requestBodyInterceptor.put, resource, body)
|
|
14
|
+
: body;
|
|
15
|
+
if (typeof body2 === 'string')
|
|
16
|
+
return { status: 400, body: { message: body2 } };
|
|
17
|
+
let item = await queries.getById(resource, id);
|
|
18
|
+
if (!item)
|
|
19
|
+
return {
|
|
20
|
+
status: 404,
|
|
21
|
+
body: {
|
|
22
|
+
message: `ID '${id}' not found`,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
item = { ...body2, id };
|
|
26
|
+
const replacedItem = await queries.replace(resource, item);
|
|
27
|
+
return { status: 200, body: returnNullFields ? replacedItem : removeNullFields(replacedItem) };
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return { status: 500, body: { message: error.message } };
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return handlePut;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=put.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAA;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAgB,EAChB,sBAAqD,EACrD,gBAAyB,EACzB,OAA2C,EAC3C,EAAE;IACF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAe,EAAE,EAAE;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;YAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC5D,IAAI,gBAAgB,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAA;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,GAAG;gBACvC,CAAC,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAClE,CAAC,CAAC,IAAI,CAAA;YAER,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAA;YAE/E,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAE9C,IAAI,CAAC,IAAI;gBACP,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC;iBACF,CAAA;YAEH,IAAI,GAAG,EAAE,GAAI,KAAgB,EAAE,EAAE,EAAE,CAAA;YAEnC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAE1D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAA;QAChG,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,EAAE,CAAA;QACrE,CAAC;IACH,CAAC,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type UrlInfo = {
|
|
2
|
+
resource: string | null;
|
|
3
|
+
id: string | null;
|
|
4
|
+
};
|
|
5
|
+
export type RequestInfo = {
|
|
6
|
+
resource: string;
|
|
7
|
+
id: string | null;
|
|
8
|
+
};
|
|
9
|
+
export type RequestInfoWithoutId = Omit<RequestInfo, 'id'>;
|
|
10
|
+
export type ErrorResponse = {
|
|
11
|
+
message: string;
|
|
12
|
+
status: number;
|
|
13
|
+
};
|
|
14
|
+
export interface TembaRequest {
|
|
15
|
+
resource: string;
|
|
16
|
+
}
|
|
17
|
+
export type GetRequest = TembaRequest & {
|
|
18
|
+
id: string | null;
|
|
19
|
+
};
|
|
20
|
+
export type PostRequest = TembaRequest & {
|
|
21
|
+
body: unknown;
|
|
22
|
+
protocol: string | null;
|
|
23
|
+
host: string | null;
|
|
24
|
+
};
|
|
25
|
+
export type PutRequest = TembaRequest & {
|
|
26
|
+
id: string;
|
|
27
|
+
body: unknown;
|
|
28
|
+
};
|
|
29
|
+
export type PatchRequest = PutRequest;
|
|
30
|
+
export type DeleteRequest = TembaRequest & {
|
|
31
|
+
id: string | null;
|
|
32
|
+
};
|
|
33
|
+
export type TembaResponse = {
|
|
34
|
+
status: number;
|
|
35
|
+
body?: unknown;
|
|
36
|
+
headers?: Record<string, string>;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAA;AAErC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAAS,OAAO,YAG5C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/requestHandlers/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAY,EAAE,EAAE;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAA;IACvD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAA;AACtF,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Queries } from './queries/types';
|
|
2
|
+
import { CompiledSchemas } from './schema/types';
|
|
3
|
+
import { RouterConfig } from './config';
|
|
4
|
+
export declare const createResourceRouter: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => import("express-serve-static-core").Router;
|
|
5
|
+
//# sourceMappingURL=resourceRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,eAAO,MAAM,oBAAoB,YACtB,OAAO,WACP,eAAe,gBACV,YAAY,+CAqH3B,CAAA"}
|