temba 0.18.0 → 0.21.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 +14 -2
- package/package.json +19 -21
- package/{config → src/config}/index.d.ts +7 -5
- package/src/config/index.d.ts.map +1 -0
- package/{config → src/config}/index.js +11 -39
- 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/{routes → src/queries}/types.js.map +1 -1
- 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/{schema → src/requestHandlers}/types.js.map +1 -1
- package/{routes → src/requestHandlers}/utils.d.ts +1 -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/{schema → src/schema}/types.d.ts +4 -14
- package/src/schema/types.d.ts.map +1 -0
- package/src/schema/types.js +2 -0
- package/{queries → src/schema}/types.js.map +1 -1
- package/{schema → src/schema}/validate.d.ts +1 -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/tsconfig.tsbuildinfo +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 -98
- package/index.js.map +0 -1
- package/queries/in-memory.d.ts +0 -20
- package/queries/in-memory.js +0 -88
- package/queries/in-memory.js.map +0 -1
- package/queries/mongo.d.ts +0 -19
- package/queries/mongo.js +0 -218
- package/queries/mongo.js.map +0 -1
- package/queries/queries.d.ts +0 -11
- package/queries/queries.js +0 -17
- package/queries/queries.js.map +0 -1
- package/queries/types.d.ts +0 -14
- package/queries/types.js +0 -3
- package/routes/delete.d.ts +0 -7
- package/routes/delete.js +0 -77
- package/routes/delete.js.map +0 -1
- package/routes/get.d.ts +0 -7
- package/routes/get.js +0 -115
- package/routes/get.js.map +0 -1
- package/routes/interceptRequestBody.d.ts +0 -3
- package/routes/interceptRequestBody.js +0 -19
- package/routes/interceptRequestBody.js.map +0 -1
- package/routes/patch.d.ts +0 -8
- package/routes/patch.js +0 -102
- package/routes/patch.js.map +0 -1
- package/routes/post.d.ts +0 -8
- package/routes/post.js +0 -87
- package/routes/post.js.map +0 -1
- package/routes/put.d.ts +0 -8
- package/routes/put.js +0 -102
- package/routes/put.js.map +0 -1
- package/routes/routes.d.ts +0 -8
- package/routes/routes.js +0 -90
- package/routes/routes.js.map +0 -1
- package/routes/types.d.ts +0 -23
- package/routes/types.js +0 -3
- package/routes/utils.js +0 -13
- package/routes/utils.js.map +0 -1
- package/schema/compile.d.ts +0 -2
- package/schema/compile.js +0 -41
- package/schema/compile.js.map +0 -1
- package/schema/transformConfig.d.ts +0 -2
- package/schema/transformConfig.js +0 -17
- package/schema/transformConfig.js.map +0 -1
- package/schema/types.js +0 -3
- package/schema/validate.js +0 -19
- package/schema/validate.js.map +0 -1
- package/urls/urlMiddleware.d.ts +0 -5
- package/urls/urlMiddleware.js +0 -41
- 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
package/README.md
CHANGED
|
@@ -277,7 +277,7 @@ Example:
|
|
|
277
277
|
const config = {
|
|
278
278
|
requestBodyInterceptor: {
|
|
279
279
|
post: ({ resource, body }) => {
|
|
280
|
-
// Do not allow Pokemons to be created: 400 Bad
|
|
280
|
+
// Do not allow Pokemons to be created: 400 Bad Request
|
|
281
281
|
if (resource === 'pokemons') return 'You are not allowed to create new Pokemons'
|
|
282
282
|
|
|
283
283
|
// Add a genre to Star Trek films:
|
|
@@ -424,6 +424,17 @@ const config = {
|
|
|
424
424
|
// Change the response body before it is sent to the client
|
|
425
425
|
},
|
|
426
426
|
returnNullFields: false,
|
|
427
|
+
schema: {
|
|
428
|
+
movies: {
|
|
429
|
+
post: {
|
|
430
|
+
type: 'object',
|
|
431
|
+
properties: {
|
|
432
|
+
title: { type: 'string' },
|
|
433
|
+
},
|
|
434
|
+
required: ['title'],
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
},
|
|
427
438
|
staticFolder: 'build',
|
|
428
439
|
}
|
|
429
440
|
const server = temba.create(config)
|
|
@@ -443,6 +454,7 @@ These are all the possible settings:
|
|
|
443
454
|
| `resources` | See [Allowing specific resources only](#allowing-specific-resources-only) | `[]` |
|
|
444
455
|
| `responseBodyInterceptor` | See [Response body interception](#request-body-validation-or-mutation) | `noop` |
|
|
445
456
|
| `returnNullFields` | Whether fields with a `null` value should be returned in responses. | `true` |
|
|
457
|
+
| `schema` | See [JSON Schema request body validation](#json-schema-request-body-validation) | `null` |
|
|
446
458
|
| `staticFolder` | See [Static assets](#static-assets) | `null` |
|
|
447
459
|
|
|
448
460
|
## Roadmap
|
|
@@ -461,7 +473,7 @@ Although I won't promise if and when, these are some things to consider for the
|
|
|
461
473
|
|
|
462
474
|
## Under the hood
|
|
463
475
|
|
|
464
|
-
Temba is built with JavaScript, [Node](https://nodejs.org), [Express](https://expressjs.com/), [
|
|
476
|
+
Temba is built with JavaScript, [Node](https://nodejs.org), [Express](https://expressjs.com/), [Vitest](https://vitest.dev/), [Supertest](https://www.npmjs.com/package/supertest), and [@rakered/mongo](https://www.npmjs.com/package/@rakered/mongo).
|
|
465
477
|
|
|
466
478
|
## Contributors ✨
|
|
467
479
|
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "temba",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Get a simple MongoDB REST API with zero coding in less than 30 seconds (seriously).",
|
|
5
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
6
7
|
"scripts": {
|
|
7
8
|
"build": "rm -rf dist && tsc && cp package.json README.md ./dist",
|
|
8
|
-
"test": "
|
|
9
|
-
"test:watch": "
|
|
9
|
+
"test": "vitest",
|
|
10
|
+
"test:watch": "vitest --watch",
|
|
10
11
|
"lint": "eslint --ignore-path .gitignore --ext .js,.ts .",
|
|
11
12
|
"format": "prettier --ignore-path .gitignore --write \"**/*.+(js|ts|json)\""
|
|
12
13
|
},
|
|
@@ -18,29 +19,26 @@
|
|
|
18
19
|
"author": "Bouwe (https://bouwe.io)",
|
|
19
20
|
"license": "ISC",
|
|
20
21
|
"devDependencies": {
|
|
21
|
-
"@types/cors": "^2.8.
|
|
22
|
-
"@types/express": "^4.17.
|
|
23
|
-
"@types/
|
|
24
|
-
"@types/
|
|
25
|
-
"@
|
|
26
|
-
"@typescript-eslint/
|
|
27
|
-
"
|
|
28
|
-
"eslint": "^
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"ts-jest": "^29.1.1",
|
|
35
|
-
"ts-node": "^10.9.1",
|
|
36
|
-
"typescript": "^5.2.2"
|
|
22
|
+
"@types/cors": "^2.8.17",
|
|
23
|
+
"@types/express": "^4.17.21",
|
|
24
|
+
"@types/morgan": "^1.9.9",
|
|
25
|
+
"@types/supertest": "^6.0.2",
|
|
26
|
+
"@typescript-eslint/eslint-plugin": "^7.2.0",
|
|
27
|
+
"@typescript-eslint/parser": "^7.2.0",
|
|
28
|
+
"eslint": "^8.57.0",
|
|
29
|
+
"eslint-config-prettier": "^9.1.0",
|
|
30
|
+
"prettier": "^3.2.5",
|
|
31
|
+
"supertest": "^6.3.4",
|
|
32
|
+
"ts-node": "^10.9.2",
|
|
33
|
+
"typescript": "^5.4.2",
|
|
34
|
+
"vitest": "^1.4.0"
|
|
37
35
|
},
|
|
38
36
|
"dependencies": {
|
|
39
37
|
"@rakered/mongo": "^1.6.0",
|
|
40
38
|
"ajv": "^8.12.0",
|
|
41
39
|
"connect-pause": "^0.1.0",
|
|
42
40
|
"cors": "^2.8.5",
|
|
43
|
-
"express": "^4.18.
|
|
41
|
+
"express": "^4.18.3",
|
|
44
42
|
"morgan": "^1.10.0"
|
|
45
43
|
}
|
|
46
44
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { ConfiguredSchemas } from '../schema/types';
|
|
3
|
+
import { RequestBodyInterceptor } from '../requestBodyInterceptor/types';
|
|
4
|
+
import { ResponseBodyInterceptor } from '../responseBodyInterceptor/types';
|
|
4
5
|
export type Config = {
|
|
5
6
|
validateResources: boolean;
|
|
6
7
|
resources: string[];
|
|
7
8
|
apiPrefix: string | null;
|
|
8
9
|
cacheControl: string;
|
|
9
|
-
requestBodyInterceptor: RequestBodyInterceptor;
|
|
10
|
-
responseBodyInterceptor: ResponseBodyInterceptor;
|
|
10
|
+
requestBodyInterceptor: RequestBodyInterceptor | null;
|
|
11
|
+
responseBodyInterceptor: ResponseBodyInterceptor | null;
|
|
11
12
|
staticFolder: string | null;
|
|
12
13
|
connectionString: string | null;
|
|
13
14
|
delay: number;
|
|
@@ -34,5 +35,6 @@ export type UserConfig = {
|
|
|
34
35
|
port?: number;
|
|
35
36
|
schemas?: ConfiguredSchemas;
|
|
36
37
|
};
|
|
37
|
-
export declare
|
|
38
|
+
export declare const initConfig: (userConfig?: UserConfig) => Config;
|
|
38
39
|
export declare const isUndefined: (value: unknown) => value is undefined;
|
|
40
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAE1E,MAAM,MAAM,MAAM,GAAG;IACnB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,sBAAsB,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACrD,uBAAuB,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACvD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,gBAAgB,EAAE,OAAO,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,MAAM,CAAA;AAEpC,MAAM,MAAM,YAAY,GAAG,IAAI,CAC7B,MAAM,EACJ,mBAAmB,GACnB,WAAW,GACX,WAAW,GACX,cAAc,GACd,wBAAwB,GACxB,yBAAyB,GACzB,kBAAkB,CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,uBAAuB,CAAC,EAAE,uBAAuB,CAAA;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B,CAAA;AAmBD,eAAO,MAAM,UAAU,gBAAiB,UAAU,KAAG,MAoFpD,CAAA;AAED,eAAO,MAAM,WAAW,UAAW,OAAO,uBAAqD,CAAA"}
|
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.isUndefined = exports.initConfig = void 0;
|
|
15
|
-
var defaultConfig = {
|
|
1
|
+
const defaultConfig = {
|
|
16
2
|
resources: [],
|
|
17
3
|
validateResources: false,
|
|
18
4
|
staticFolder: null,
|
|
@@ -20,31 +6,18 @@ var defaultConfig = {
|
|
|
20
6
|
connectionString: null,
|
|
21
7
|
cacheControl: 'no-store',
|
|
22
8
|
delay: 0,
|
|
23
|
-
requestBodyInterceptor:
|
|
24
|
-
|
|
25
|
-
// do nothing
|
|
26
|
-
},
|
|
27
|
-
patch: function () {
|
|
28
|
-
// do nothing
|
|
29
|
-
},
|
|
30
|
-
put: function () {
|
|
31
|
-
// do nothing
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
responseBodyInterceptor: function (_a) {
|
|
35
|
-
var body = _a.body;
|
|
36
|
-
return body;
|
|
37
|
-
},
|
|
9
|
+
requestBodyInterceptor: null,
|
|
10
|
+
responseBodyInterceptor: null,
|
|
38
11
|
customRouter: null,
|
|
39
12
|
returnNullFields: true,
|
|
40
13
|
isTesting: false,
|
|
41
14
|
port: 3000,
|
|
42
15
|
schemas: null,
|
|
43
16
|
};
|
|
44
|
-
|
|
17
|
+
export const initConfig = (userConfig) => {
|
|
45
18
|
if (!userConfig)
|
|
46
19
|
return defaultConfig;
|
|
47
|
-
|
|
20
|
+
const config = { ...defaultConfig };
|
|
48
21
|
if (userConfig.resources && userConfig.resources.length > 0) {
|
|
49
22
|
config.resources = userConfig.resources;
|
|
50
23
|
config.validateResources = true;
|
|
@@ -69,6 +42,7 @@ function initConfig(userConfig) {
|
|
|
69
42
|
config.delay = userConfig.delay;
|
|
70
43
|
}
|
|
71
44
|
if (userConfig.requestBodyInterceptor) {
|
|
45
|
+
config.requestBodyInterceptor = config.requestBodyInterceptor || {};
|
|
72
46
|
if (userConfig.requestBodyInterceptor.post &&
|
|
73
47
|
typeof userConfig.requestBodyInterceptor.post === 'function') {
|
|
74
48
|
config.requestBodyInterceptor.post = userConfig.requestBodyInterceptor.post;
|
|
@@ -88,21 +62,19 @@ function initConfig(userConfig) {
|
|
|
88
62
|
if (userConfig.customRouter) {
|
|
89
63
|
config.customRouter = userConfig.customRouter;
|
|
90
64
|
}
|
|
91
|
-
if (!
|
|
65
|
+
if (!isUndefined(userConfig.returnNullFields)) {
|
|
92
66
|
config.returnNullFields = userConfig.returnNullFields;
|
|
93
67
|
}
|
|
94
|
-
if (!
|
|
68
|
+
if (!isUndefined(userConfig.isTesting)) {
|
|
95
69
|
config.isTesting = userConfig.isTesting;
|
|
96
70
|
}
|
|
97
|
-
if (!
|
|
71
|
+
if (!isUndefined(userConfig.port)) {
|
|
98
72
|
config.port = userConfig.port;
|
|
99
73
|
}
|
|
100
74
|
if (userConfig.schemas) {
|
|
101
75
|
config.schemas = userConfig.schemas;
|
|
102
76
|
}
|
|
103
77
|
return config;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
var isUndefined = function (value) { return typeof value === 'undefined'; };
|
|
107
|
-
exports.isUndefined = isUndefined;
|
|
78
|
+
};
|
|
79
|
+
export const isUndefined = (value) => typeof value === 'undefined';
|
|
108
80
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delayMiddleware.d.ts","sourceRoot":"","sources":["../../../src/delay/delayMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQ9D,eAAO,MAAM,qBAAqB,UAAW,MAAM,WACpC,OAAO,OAAO,QAAQ,QAAQ,YAAY,SAKxD,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const pause = (delay) => {
|
|
2
|
+
return (req, res, next) => {
|
|
3
|
+
setTimeout(next, delay);
|
|
4
|
+
};
|
|
5
|
+
};
|
|
6
|
+
export const createDelayMiddleware = (delay) => {
|
|
7
|
+
return (req, res, next) => {
|
|
8
|
+
console.log('Start delay...');
|
|
9
|
+
pause(delay)(req, res, next);
|
|
10
|
+
console.log('Delay finished!');
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=delayMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delayMiddleware.js","sourceRoot":"","sources":["../../../src/delay/delayMiddleware.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QAC7B,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC5B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAChC,CAAC,CAAA;AACH,CAAC,CAAA"}
|
package/src/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAiG1C,eAAO,MAAM,MAAM,gBAAiB,UAAU;;;CAA6B,CAAA"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import express, { json } from 'express';
|
|
2
|
+
import morgan from 'morgan';
|
|
3
|
+
import { createQueries } from './queries/queries';
|
|
4
|
+
import { initConfig } from './config';
|
|
5
|
+
import cors from 'cors';
|
|
6
|
+
import { createDelayMiddleware } from './delay/delayMiddleware';
|
|
7
|
+
import { compileSchemas } from './schema/compile';
|
|
8
|
+
import { createResourceRouter } from './resourceRouter';
|
|
9
|
+
const createServer = (userConfig) => {
|
|
10
|
+
const config = initConfig(userConfig);
|
|
11
|
+
const queries = createQueries(config.connectionString);
|
|
12
|
+
const app = express();
|
|
13
|
+
app.use(json());
|
|
14
|
+
// Add HTTP request logging.
|
|
15
|
+
app.use(morgan('tiny'));
|
|
16
|
+
// Enable CORS for all requests.
|
|
17
|
+
app.use(cors({ origin: true, credentials: true }));
|
|
18
|
+
// Add a delay to every request, if configured.
|
|
19
|
+
if (config.delay > 0) {
|
|
20
|
+
const delayMiddleware = createDelayMiddleware(config.delay);
|
|
21
|
+
app.use(delayMiddleware);
|
|
22
|
+
}
|
|
23
|
+
// Serve a static folder, if configured.
|
|
24
|
+
if (config.staticFolder) {
|
|
25
|
+
app.use(express.static(config.staticFolder));
|
|
26
|
+
}
|
|
27
|
+
// On the root URL (with apiPrefix, if applicable) only a GET is allowed.
|
|
28
|
+
const rootRouter = express.Router();
|
|
29
|
+
const rootPath = config.apiPrefix ? `${config.apiPrefix}` : '/';
|
|
30
|
+
app.use(rootPath, rootRouter);
|
|
31
|
+
// Use a custom router, if configured.
|
|
32
|
+
if (config.customRouter) {
|
|
33
|
+
app.use(config.customRouter);
|
|
34
|
+
}
|
|
35
|
+
// Temba supports the GET, POST, PUT, PATCH, DELETE, and HEAD methods for resource URLs.
|
|
36
|
+
// HEAD is not implemented here, because Express supports it out of the box.
|
|
37
|
+
// Create a router on all other URLs, for all supported methods
|
|
38
|
+
const resourcePath = config.apiPrefix ? `${config.apiPrefix}*` : '*';
|
|
39
|
+
const schemas = compileSchemas(config.schemas);
|
|
40
|
+
const resourceRouter = createResourceRouter(queries, schemas, config);
|
|
41
|
+
app.use(resourcePath, resourceRouter);
|
|
42
|
+
// A GET to the root URL shows a default message.
|
|
43
|
+
rootRouter.get('/', async (_, res) => {
|
|
44
|
+
return res.send('It works! ツ');
|
|
45
|
+
});
|
|
46
|
+
// Route for handling not allowed methods.
|
|
47
|
+
const handleMethodNotAllowed = (_, res) => {
|
|
48
|
+
res.status(405).json({ message: 'Method Not Allowed' });
|
|
49
|
+
};
|
|
50
|
+
// Route for handling not found.
|
|
51
|
+
const handleNotFound = (_, res) => {
|
|
52
|
+
res.status(404).json({ message: 'Not Found' });
|
|
53
|
+
};
|
|
54
|
+
// All other requests to the root URL are not allowed.
|
|
55
|
+
rootRouter.all('/', handleMethodNotAllowed);
|
|
56
|
+
// In case of an API prefix, resource URLs outside of the API prefix return a 404 Not Found.
|
|
57
|
+
if (config.apiPrefix) {
|
|
58
|
+
app.get('*', handleNotFound);
|
|
59
|
+
app.post('*', handleNotFound);
|
|
60
|
+
app.put('*', handleNotFound);
|
|
61
|
+
app.delete('*', handleNotFound);
|
|
62
|
+
app.patch('*', handleNotFound);
|
|
63
|
+
}
|
|
64
|
+
// All other methods to any URL are not allowed.
|
|
65
|
+
app.all('*', handleMethodNotAllowed);
|
|
66
|
+
if (config.apiPrefix)
|
|
67
|
+
app.all(`${config.apiPrefix}*`, handleMethodNotAllowed);
|
|
68
|
+
return {
|
|
69
|
+
start: () => {
|
|
70
|
+
if (config.isTesting) {
|
|
71
|
+
console.log('⛔️ Server not started. Remove or disable isTesting from your config.');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
app.listen(config.port, () => {
|
|
75
|
+
console.log(`✅ Server listening on port ${config.port}`);
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
// Expose Express for testing purposes only, e.g. usage with supertest.
|
|
79
|
+
Express: config.isTesting ? app : undefined,
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export const create = (userConfig) => createServer(userConfig);
|
|
83
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAqB,IAAI,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,YAAY,GAAG,CAAC,UAAuB,EAAE,EAAE;IAC/C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAErC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAEtD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;IACrB,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAEf,4BAA4B;IAC5B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IAEvB,gCAAgC;IAChC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAElD,+CAA+C;IAC/C,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3D,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;IAC1B,CAAC;IAED,wCAAwC;IACxC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,yEAAyE;IACzE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;IAC/D,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IAE7B,sCAAsC;IACtC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IAC9B,CAAC;IAED,wFAAwF;IACxF,4EAA4E;IAE5E,+DAA+D;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IACpE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IACrE,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IAErC,iDAAiD;IACjD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE;QACnC,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,0CAA0C;IAC1C,MAAM,sBAAsB,GAAG,CAAC,CAAU,EAAE,GAAa,EAAE,EAAE;QAC3D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;IACzD,CAAC,CAAA;IAED,gCAAgC;IAChC,MAAM,cAAc,GAAG,CAAC,CAAU,EAAE,GAAa,EAAE,EAAE;QACnD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;IAChD,CAAC,CAAA;IAED,sDAAsD;IACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;IAE3C,4FAA4F;IAC5F,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC7B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC/B,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;IAChC,CAAC;IAED,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;IACpC,IAAI,MAAM,CAAC,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,SAAS,GAAG,EAAE,sBAAsB,CAAC,CAAA;IAE7E,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAA;gBACnF,OAAM;YACR,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,8BAA8B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;YAC1D,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,uEAAuE;QACvE,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAuB,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/queries/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,OAAO,EAAE,MAAM,SAAS,CAAA;AAqEtD,eAAO,MAAM,eAAe,EAAE,OAQ7B,CAAA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const data = {};
|
|
2
|
+
const getAll = (resource) => {
|
|
3
|
+
createResourceArrayIfNecessary(resource);
|
|
4
|
+
return new Promise((resolve) => {
|
|
5
|
+
resolve(data[resource] || []);
|
|
6
|
+
});
|
|
7
|
+
};
|
|
8
|
+
const getById = (resource, id) => {
|
|
9
|
+
createResourceArrayIfNecessary(resource);
|
|
10
|
+
const item = (data[resource] || []).find((item) => item.id === id) || null;
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
resolve(item);
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
const create = (resource, item) => {
|
|
16
|
+
createResourceArrayIfNecessary(resource);
|
|
17
|
+
const newItem = { ...item, id: String(new Date().getTime()) };
|
|
18
|
+
data[resource] = [...(data[resource] || []), newItem];
|
|
19
|
+
return new Promise((resolve) => {
|
|
20
|
+
resolve(newItem);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const update = (resource, item) => {
|
|
24
|
+
createResourceArrayIfNecessary(resource);
|
|
25
|
+
const updatedItem = { ...item };
|
|
26
|
+
data[resource] = [...(data[resource] || []).filter((r) => r.id !== item.id), updatedItem];
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
resolve(updatedItem);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const replace = (resource, item) => {
|
|
32
|
+
return update(resource, item);
|
|
33
|
+
};
|
|
34
|
+
const deleteById = (resource, id) => {
|
|
35
|
+
createResourceArrayIfNecessary(resource);
|
|
36
|
+
data[resource] = (data[resource] || []).filter((item) => item.id !== id);
|
|
37
|
+
return new Promise((resolve) => {
|
|
38
|
+
resolve();
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
const deleteAll = (resource) => {
|
|
42
|
+
createResourceArrayIfNecessary(resource);
|
|
43
|
+
data[resource] = [];
|
|
44
|
+
return new Promise((resolve) => {
|
|
45
|
+
resolve();
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const createResourceArrayIfNecessary = (resource) => {
|
|
49
|
+
if (!Object.hasOwn(data, resource))
|
|
50
|
+
data[resource] = [];
|
|
51
|
+
};
|
|
52
|
+
export const inMemoryQueries = {
|
|
53
|
+
getAll,
|
|
54
|
+
getById,
|
|
55
|
+
create,
|
|
56
|
+
update,
|
|
57
|
+
replace,
|
|
58
|
+
deleteById,
|
|
59
|
+
deleteAll,
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=in-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../../src/queries/in-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../../src/queries/mongo.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,OAAO,EAAE,MAAM,SAAS,CAAA;AA8FtD,eAAO,MAAM,kBAAkB,qBAAsB,MAAM,YAc1D,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { connect } from '@rakered/mongo';
|
|
2
|
+
let uri;
|
|
3
|
+
let db;
|
|
4
|
+
const connectToDatabase = async () => {
|
|
5
|
+
if (!db) {
|
|
6
|
+
console.log('Connecting to MongoDB...');
|
|
7
|
+
try {
|
|
8
|
+
db = await connect(uri);
|
|
9
|
+
console.log('Connected to MongoDB!');
|
|
10
|
+
}
|
|
11
|
+
catch (error) {
|
|
12
|
+
console.log('Error connecting to MongoDB:');
|
|
13
|
+
console.error(error);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const getAll = async (resource) => {
|
|
18
|
+
await connectToDatabase();
|
|
19
|
+
const items = (await db[resource].find({}));
|
|
20
|
+
if (!items)
|
|
21
|
+
return [];
|
|
22
|
+
return items.map((item) => removeUnderscoreFromId(item));
|
|
23
|
+
};
|
|
24
|
+
const getById = async (resource, id) => {
|
|
25
|
+
await connectToDatabase();
|
|
26
|
+
const item = await db[resource].findOne({ _id: id });
|
|
27
|
+
if (!item)
|
|
28
|
+
return null;
|
|
29
|
+
return removeUnderscoreFromId(item);
|
|
30
|
+
};
|
|
31
|
+
const create = async (resource, item) => {
|
|
32
|
+
await connectToDatabase();
|
|
33
|
+
const createdItem = await db[resource].insertOne(item);
|
|
34
|
+
return removeUnderscoreFromId(createdItem.ops[0]);
|
|
35
|
+
};
|
|
36
|
+
const update = async (resource, item) => {
|
|
37
|
+
await connectToDatabase();
|
|
38
|
+
const { id, ...itemWithoutId } = item;
|
|
39
|
+
const updatedItem = await db[resource].findOneAndUpdate({ _id: id }, { $set: itemWithoutId }, { returnOriginal: false });
|
|
40
|
+
return removeUnderscoreFromId(updatedItem.value);
|
|
41
|
+
};
|
|
42
|
+
const replace = async (resource, item) => {
|
|
43
|
+
await connectToDatabase();
|
|
44
|
+
const { id, ...itemWithoutId } = item;
|
|
45
|
+
const replacedItem = await db[resource].findOneAndReplace({ _id: id }, itemWithoutId, {
|
|
46
|
+
returnOriginal: false,
|
|
47
|
+
});
|
|
48
|
+
return removeUnderscoreFromId(replacedItem.value);
|
|
49
|
+
};
|
|
50
|
+
const deleteById = async (resource, id) => {
|
|
51
|
+
await connectToDatabase();
|
|
52
|
+
await db[resource].deleteOne({ _id: id });
|
|
53
|
+
};
|
|
54
|
+
const deleteAll = async (resource) => {
|
|
55
|
+
await connectToDatabase();
|
|
56
|
+
await db[resource].deleteMany({});
|
|
57
|
+
};
|
|
58
|
+
const removeUnderscoreFromId = (item) => {
|
|
59
|
+
const { _id, ...updatedItem } = item;
|
|
60
|
+
return updatedItem;
|
|
61
|
+
};
|
|
62
|
+
export const createMongoQueries = (connectionString) => {
|
|
63
|
+
uri = connectionString;
|
|
64
|
+
const mongoQueries = {
|
|
65
|
+
getAll,
|
|
66
|
+
getById,
|
|
67
|
+
create,
|
|
68
|
+
update,
|
|
69
|
+
replace,
|
|
70
|
+
deleteById,
|
|
71
|
+
deleteAll,
|
|
72
|
+
};
|
|
73
|
+
return mongoQueries;
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=mongo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../../src/queries/mongo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/queries/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,qBAAsB,MAAM,GAAG,IAAI,8BAO5D,CAAA"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["
|
|
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
|