temba 0.25.0 → 0.26.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 +23 -29
- package/config/index.d.ts +4 -4
- package/config/index.d.ts.map +1 -1
- package/config/index.js +12 -12
- package/config/index.js.map +1 -1
- package/package.json +1 -1
- package/requestHandlers/index.d.ts.map +1 -1
- package/requestHandlers/index.js +4 -4
- package/requestHandlers/index.js.map +1 -1
- package/requestHandlers/patch.d.ts +2 -2
- package/requestHandlers/patch.d.ts.map +1 -1
- package/requestHandlers/patch.js +4 -4
- package/requestHandlers/patch.js.map +1 -1
- package/requestHandlers/post.d.ts +2 -2
- package/requestHandlers/post.d.ts.map +1 -1
- package/requestHandlers/post.js +4 -4
- package/requestHandlers/post.js.map +1 -1
- package/requestHandlers/put.d.ts +2 -2
- package/requestHandlers/put.d.ts.map +1 -1
- package/requestHandlers/put.js +4 -4
- package/requestHandlers/put.js.map +1 -1
- package/requestHandlers/types.d.ts +2 -2
- package/requestHandlers/types.d.ts.map +1 -1
- package/requestInterceptor/interceptRequest.d.ts +3 -0
- package/requestInterceptor/interceptRequest.d.ts.map +1 -0
- package/{requestBodyInterceptor/interceptRequestBody.js → requestInterceptor/interceptRequest.js} +2 -2
- package/requestInterceptor/interceptRequest.js.map +1 -0
- package/requestInterceptor/types.d.ts +12 -0
- package/requestInterceptor/types.d.ts.map +1 -0
- package/requestInterceptor/types.js.map +1 -0
- package/requestBodyInterceptor/interceptRequestBody.d.ts +0 -3
- package/requestBodyInterceptor/interceptRequestBody.d.ts.map +0 -1
- package/requestBodyInterceptor/interceptRequestBody.js.map +0 -1
- package/requestBodyInterceptor/types.d.ts +0 -12
- package/requestBodyInterceptor/types.d.ts.map +0 -1
- package/requestBodyInterceptor/types.js.map +0 -1
- /package/{requestBodyInterceptor → requestInterceptor}/types.js +0 -0
package/README.md
CHANGED
|
@@ -57,7 +57,13 @@ npm start
|
|
|
57
57
|
|
|
58
58
|
This command clones the [Temba-starter](https://github.com/bouwe77/temba-starter) repository, installs all dependencies, and starts the server.
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
In your console you'll see:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
✅ Server listening on port 3000
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Now you can issue any HTTP request, to any resource.
|
|
61
67
|
|
|
62
68
|
### Adding to an existing app
|
|
63
69
|
|
|
@@ -115,13 +121,13 @@ Temba supports JSON only.
|
|
|
115
121
|
|
|
116
122
|
Request bodies sent with a `POST`, `PATCH`, and `PUT` requests are valid when the request body is either empty, or when it's valid formatted JSON. Adding a `Content-Type: application/json` header is required. If you send a request with invalid formatted JSON, a `400 Bad Request` response is returned.
|
|
117
123
|
|
|
118
|
-
Any valid formatted JSON is accepted and stored. If you want to validate or even change the JSON in the request bodies, check out [JSON Schema request body validation](#json-schema-request-body-validation) and the [`
|
|
124
|
+
Any valid formatted JSON is accepted and stored. If you want to validate or even change the JSON in the request bodies, check out [JSON Schema request body validation](#json-schema-request-body-validation) and the [`requestInterceptor`](#request-validation-or-mutation).
|
|
119
125
|
|
|
120
126
|
IDs are auto generated when creating resources. IDs in the JSON request body are always ignored.
|
|
121
127
|
|
|
122
128
|
## Usage
|
|
123
129
|
|
|
124
|
-
###
|
|
130
|
+
### Data persistency
|
|
125
131
|
|
|
126
132
|
By default data is stored in memory. This means the data is flushed when the server restarts. To persist your data, provide the `connectionString` config setting for your JSON file or MongoDB database.
|
|
127
133
|
|
|
@@ -140,7 +146,7 @@ All resources are saved in a single JSON file. The file is not created or update
|
|
|
140
146
|
|
|
141
147
|
```js
|
|
142
148
|
const config = {
|
|
143
|
-
connectionString: 'mongodb://localhost:27017',
|
|
149
|
+
connectionString: 'mongodb://localhost:27017/myDatabase',
|
|
144
150
|
}
|
|
145
151
|
const server = temba.create(config)
|
|
146
152
|
```
|
|
@@ -250,13 +256,13 @@ If a request is not valid according to the schema, a `400 Bad Request` response
|
|
|
250
256
|
|
|
251
257
|
### Intercepting requests
|
|
252
258
|
|
|
253
|
-
In addition to (or instead of) validating the request using JSON Schema, you can also intercept the request
|
|
259
|
+
In addition to (or instead of) validating the request using JSON Schema, you can also intercept the request before it is persisted, using the `requestInterceptor` setting.
|
|
254
260
|
|
|
255
261
|
It allows you to implement your own validation, or even change the request body.
|
|
256
262
|
|
|
257
263
|
```js
|
|
258
264
|
const config = {
|
|
259
|
-
|
|
265
|
+
requestInterceptor: {
|
|
260
266
|
post: ({ resource, body }) => {
|
|
261
267
|
// Validate, or even change the request body
|
|
262
268
|
},
|
|
@@ -272,7 +278,9 @@ const config = {
|
|
|
272
278
|
const server = temba.create(config)
|
|
273
279
|
```
|
|
274
280
|
|
|
275
|
-
|
|
281
|
+
> At the moment, only `POST`, `PATCH`, and `PUT` requests can be intercepted.
|
|
282
|
+
|
|
283
|
+
The `requestInterceptor` is an object with a `post`, and/or `patch`, and/or `put` field, which contains the callback function you want Temba to call before the JSON is persisted.
|
|
276
284
|
|
|
277
285
|
The callback function receives an object containing the `resource`, which for example is `movies` if you request `POST /movies`, and the `body`, which is the JSON object of the request body.
|
|
278
286
|
|
|
@@ -286,7 +294,7 @@ Example:
|
|
|
286
294
|
|
|
287
295
|
```js
|
|
288
296
|
const config = {
|
|
289
|
-
|
|
297
|
+
requestInterceptor: {
|
|
290
298
|
post: ({ resource, body }) => {
|
|
291
299
|
// Do not allow Pokemons to be created: 400 Bad Request
|
|
292
300
|
if (resource === 'pokemons') return 'You are not allowed to create new Pokemons'
|
|
@@ -415,11 +423,11 @@ Here is an example of the config settings for Temba, and how you define them:
|
|
|
415
423
|
const config = {
|
|
416
424
|
apiPrefix: 'api',
|
|
417
425
|
cacheControl: 'public, max-age=300',
|
|
418
|
-
connectionString: 'mongodb://localhost:27017',
|
|
426
|
+
connectionString: 'mongodb://localhost:27017/myDatabase',
|
|
419
427
|
customRouter: router,
|
|
420
428
|
delay: 500,
|
|
421
429
|
port: 4321,
|
|
422
|
-
|
|
430
|
+
requestInterceptor: {
|
|
423
431
|
post: ({ resource, body }) => {
|
|
424
432
|
// Validate, or even change the request body
|
|
425
433
|
},
|
|
@@ -457,31 +465,17 @@ These are all the possible settings:
|
|
|
457
465
|
| :------------------------ | :----------------------------------------------------------------------------------------- | :------------ |
|
|
458
466
|
| `apiPrefix` | See [API prefix](#api-prefix) | `null` |
|
|
459
467
|
| `cacheControl` | The `Cache-control` response header value for each GET request. | `'no-store'` |
|
|
460
|
-
| `connectionString` | See [
|
|
468
|
+
| `connectionString` | See [Data persistency](#data-persistency) | `null` |
|
|
461
469
|
| `customRouter` | See [Custom router](#custom-router) | `null` |
|
|
462
|
-
| `delay` |
|
|
470
|
+
| `delay` | The delay, in milliseconds, after processing the request before sending the response. | `0` |
|
|
463
471
|
| `port` | The port your Temba server listens on | `3000` |
|
|
464
|
-
| `
|
|
472
|
+
| `requestInterceptor` | See [Request validation or mutation](#request-validation-or-mutation) | `noop` |
|
|
465
473
|
| `resources` | See [Allowing specific resources only](#allowing-specific-resources-only) | `[]` |
|
|
466
|
-
| `responseBodyInterceptor` | See [Response body interception](#
|
|
467
|
-
| `returnNullFields` |
|
|
474
|
+
| `responseBodyInterceptor` | See [Response body interception](#response-body-interception) | `noop` |
|
|
475
|
+
| `returnNullFields` | Determines whether fields with a null value should be returned in responses. | `true` |
|
|
468
476
|
| `schema` | See [JSON Schema request body validation](#json-schema-request-body-validation) | `null` |
|
|
469
477
|
| `staticFolder` | See [Static assets](#static-assets) | `null` |
|
|
470
478
|
|
|
471
|
-
## Roadmap
|
|
472
|
-
|
|
473
|
-
Although I won't promise if and when, these are some things to consider for the future:
|
|
474
|
-
|
|
475
|
-
- **Authorization bearer tokens**, probably by providing a callback function so you can check the token however you want.
|
|
476
|
-
|
|
477
|
-
- Better **security**, for example CORS, CSRF, etc.
|
|
478
|
-
|
|
479
|
-
- Opt-in logging with debug-js events
|
|
480
|
-
|
|
481
|
-
- Generic **filtering and sorting**, for example: `GET /api/movies?filter=releaseYear ge 1980 and releaseYear le 1989&sort=-releaseYear,title&page=2&limit=20&fields=title,releaseYear,genre`
|
|
482
|
-
|
|
483
|
-
- Intial data seed when using in-memory.
|
|
484
|
-
|
|
485
479
|
## Under the hood
|
|
486
480
|
|
|
487
481
|
Temba is built with TypeScript, [Node](https://nodejs.org), [Express](https://expressjs.com/), [Vitest](https://vitest.dev/), [Supertest](https://www.npmjs.com/package/supertest), [@rakered/mongo](https://www.npmjs.com/package/@rakered/mongo), and [lowdb](https://www.npmjs.com/package/lowdb).
|
package/config/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
2
|
import type { ConfiguredSchemas } from '../schema/types.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { RequestInterceptor } from '../requestInterceptor/types.js';
|
|
4
4
|
import type { ResponseBodyInterceptor } from '../responseBodyInterceptor/types.js';
|
|
5
5
|
export type Config = {
|
|
6
6
|
validateResources: boolean;
|
|
7
7
|
resources: string[];
|
|
8
8
|
apiPrefix: string | null;
|
|
9
9
|
cacheControl: string;
|
|
10
|
-
|
|
10
|
+
requestInterceptor: RequestInterceptor | null;
|
|
11
11
|
responseBodyInterceptor: ResponseBodyInterceptor | null;
|
|
12
12
|
staticFolder: string | null;
|
|
13
13
|
connectionString: string | null;
|
|
@@ -19,7 +19,7 @@ export type Config = {
|
|
|
19
19
|
schemas: ConfiguredSchemas | null;
|
|
20
20
|
};
|
|
21
21
|
export type ConfigKey = keyof Config;
|
|
22
|
-
export type RouterConfig = Pick<Config, 'validateResources' | 'resources' | 'apiPrefix' | 'cacheControl' | '
|
|
22
|
+
export type RouterConfig = Pick<Config, 'validateResources' | 'resources' | 'apiPrefix' | 'cacheControl' | 'requestInterceptor' | 'responseBodyInterceptor' | 'returnNullFields'>;
|
|
23
23
|
export type UserConfig = {
|
|
24
24
|
resources?: string[];
|
|
25
25
|
staticFolder?: string;
|
|
@@ -27,7 +27,7 @@ export type UserConfig = {
|
|
|
27
27
|
connectionString?: string;
|
|
28
28
|
cacheControl?: string;
|
|
29
29
|
delay?: number;
|
|
30
|
-
|
|
30
|
+
requestInterceptor?: RequestInterceptor;
|
|
31
31
|
responseBodyInterceptor?: ResponseBodyInterceptor;
|
|
32
32
|
customRouter?: Router;
|
|
33
33
|
returnNullFields?: boolean;
|
package/config/index.d.ts.map
CHANGED
|
@@ -1 +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,KAAK,EAAE,
|
|
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,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAE/E,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,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC7C,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,oBAAoB,GACpB,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,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,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"}
|
package/config/index.js
CHANGED
|
@@ -7,7 +7,7 @@ const defaultConfig = {
|
|
|
7
7
|
connectionString: null,
|
|
8
8
|
cacheControl: 'no-store',
|
|
9
9
|
delay: 0,
|
|
10
|
-
|
|
10
|
+
requestInterceptor: null,
|
|
11
11
|
responseBodyInterceptor: null,
|
|
12
12
|
customRouter: null,
|
|
13
13
|
returnNullFields: true,
|
|
@@ -42,19 +42,19 @@ export const initConfig = (userConfig) => {
|
|
|
42
42
|
Number(userConfig.delay) < 100000) {
|
|
43
43
|
config.delay = userConfig.delay;
|
|
44
44
|
}
|
|
45
|
-
if (userConfig.
|
|
46
|
-
config.
|
|
47
|
-
if (userConfig.
|
|
48
|
-
typeof userConfig.
|
|
49
|
-
config.
|
|
45
|
+
if (userConfig.requestInterceptor) {
|
|
46
|
+
config.requestInterceptor = config.requestInterceptor || {};
|
|
47
|
+
if (userConfig.requestInterceptor.post &&
|
|
48
|
+
typeof userConfig.requestInterceptor.post === 'function') {
|
|
49
|
+
config.requestInterceptor.post = userConfig.requestInterceptor.post;
|
|
50
50
|
}
|
|
51
|
-
if (userConfig.
|
|
52
|
-
typeof userConfig.
|
|
53
|
-
config.
|
|
51
|
+
if (userConfig.requestInterceptor.patch &&
|
|
52
|
+
typeof userConfig.requestInterceptor.patch === 'function') {
|
|
53
|
+
config.requestInterceptor.patch = userConfig.requestInterceptor.patch;
|
|
54
54
|
}
|
|
55
|
-
if (userConfig.
|
|
56
|
-
typeof userConfig.
|
|
57
|
-
config.
|
|
55
|
+
if (userConfig.requestInterceptor.put &&
|
|
56
|
+
typeof userConfig.requestInterceptor.put === 'function') {
|
|
57
|
+
config.requestInterceptor.put = userConfig.requestInterceptor.put;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
if (userConfig.responseBodyInterceptor) {
|
package/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAmDhC,MAAM,aAAa,GAAW;IAC5B,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,UAAU;IACxB,KAAK,EAAE,CAAC;IACR,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAmDhC,MAAM,aAAa,GAAW;IAC5B,SAAS,EAAE,EAAE;IACb,iBAAiB,EAAE,KAAK;IACxB,YAAY,EAAE,IAAI;IAClB,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,UAAU;IACxB,KAAK,EAAE,CAAC;IACR,kBAAkB,EAAE,IAAI;IACxB,uBAAuB,EAAE,IAAI;IAC7B,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,SAAS,EAAE,KAAK;IAChB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;CACd,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAuB,EAAU,EAAE;IAC5D,IAAI,CAAC,UAAU;QAAE,OAAO,aAAa,CAAA;IAErC,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAY,CAAA;IAE7C,IAAI,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACvC,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAA;IACjC,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QACzB,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,GAAG,CAAA;IAClF,CAAC;IAED,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAA;IACvD,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;IAC/C,CAAC;IAED,IACE,UAAU,CAAC,KAAK;QAChB,UAAU,CAAC,KAAK,KAAK,CAAC;QACtB,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ;QAC5C,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5B,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,EACjC,CAAC;QACD,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IACjC,CAAC;IAED,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC;QAClC,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAA;QAE3D,IACE,UAAU,CAAC,kBAAkB,CAAC,IAAI;YAClC,OAAO,UAAU,CAAC,kBAAkB,CAAC,IAAI,KAAK,UAAU,EACxD,CAAC;YACD,MAAM,CAAC,kBAAkB,CAAC,IAAI,GAAG,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAA;QACrE,CAAC;QACD,IACE,UAAU,CAAC,kBAAkB,CAAC,KAAK;YACnC,OAAO,UAAU,CAAC,kBAAkB,CAAC,KAAK,KAAK,UAAU,EACzD,CAAC;YACD,MAAM,CAAC,kBAAkB,CAAC,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAA;QACvE,CAAC;QACD,IACE,UAAU,CAAC,kBAAkB,CAAC,GAAG;YACjC,OAAO,UAAU,CAAC,kBAAkB,CAAC,GAAG,KAAK,UAAU,EACvD,CAAC;YACD,MAAM,CAAC,kBAAkB,CAAC,GAAG,GAAG,UAAU,CAAC,kBAAkB,CAAC,GAAG,CAAA;QACnE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,uBAAuB,EAAE,CAAC;QACvC,MAAM,CAAC,uBAAuB,GAAG,UAAU,CAAC,uBAAuB,CAAA;IACrE,CAAC;IAED,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAA;IAC/C,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAA;IACvD,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;IACzC,CAAC;IAED,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC/B,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;IACrC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAA"}
|
package/package.json
CHANGED
|
@@ -1 +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,eAAe,CAAA;AAE5C,eAAO,MAAM,iBAAiB,YACnB,OAAO,WACP,eAAe,gBACV,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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,eAAe,CAAA;AAE5C,eAAO,MAAM,iBAAiB,YACnB,OAAO,WACP,eAAe,gBACV,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC3B,CAAA"}
|
package/requestHandlers/index.js
CHANGED
|
@@ -4,11 +4,11 @@ import { createPutRoutes } from './put.js';
|
|
|
4
4
|
import { createPatchRoutes } from './patch.js';
|
|
5
5
|
import { createDeleteRoutes } from './delete.js';
|
|
6
6
|
export const getRequestHandler = (queries, schemas, routerConfig) => {
|
|
7
|
-
const { cacheControl,
|
|
7
|
+
const { cacheControl, requestInterceptor, responseBodyInterceptor, returnNullFields } = routerConfig;
|
|
8
8
|
const handleGet = createGetRoutes(queries, cacheControl, responseBodyInterceptor, returnNullFields);
|
|
9
|
-
const handlePost = createPostRoutes(queries,
|
|
10
|
-
const handlePut = createPutRoutes(queries,
|
|
11
|
-
const handlePatch = createPatchRoutes(queries,
|
|
9
|
+
const handlePost = createPostRoutes(queries, requestInterceptor, returnNullFields, schemas.post);
|
|
10
|
+
const handlePut = createPutRoutes(queries, requestInterceptor, returnNullFields, schemas.put);
|
|
11
|
+
const handlePatch = createPatchRoutes(queries, requestInterceptor, returnNullFields, schemas.patch);
|
|
12
12
|
const handleDelete = createDeleteRoutes(queries);
|
|
13
13
|
return {
|
|
14
14
|
handleGet,
|
|
@@ -1 +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,
|
|
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,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GACnF,YAAY,CAAA;IAEd,MAAM,SAAS,GAAG,eAAe,CAC/B,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,CAAA;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhG,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;IAE7F,MAAM,WAAW,GAAG,iBAAiB,CACnC,OAAO,EACP,kBAAkB,EAClB,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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PatchRequest } from './types.js';
|
|
3
3
|
import type { Queries } from '../data/types.js';
|
|
4
|
-
import type {
|
|
5
|
-
export declare const createPatchRoutes: (queries: Queries,
|
|
4
|
+
import type { RequestInterceptor } from '../requestInterceptor/types.js';
|
|
5
|
+
export declare const createPatchRoutes: (queries: Queries, requestInterceptor: RequestInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PatchRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
7
7
|
body: unknown;
|
|
8
8
|
}>;
|
|
@@ -1 +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,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,
|
|
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,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,eAAO,MAAM,iBAAiB,YACnB,OAAO,sBACI,kBAAkB,GAAG,IAAI,oBAC3B,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEX,YAAY;;;EAoC7C,CAAA"}
|
package/requestHandlers/patch.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { interceptRequest } from '../requestInterceptor/interceptRequest.js';
|
|
2
2
|
import { validate } from '../schema/validate.js';
|
|
3
3
|
import { removeNullFields } from './utils.js';
|
|
4
|
-
export const createPatchRoutes = (queries,
|
|
4
|
+
export const createPatchRoutes = (queries, requestInterceptor, returnNullFields, schemas) => {
|
|
5
5
|
const handlePatch = async (req) => {
|
|
6
6
|
try {
|
|
7
7
|
const { body, resource, id } = req;
|
|
@@ -9,8 +9,8 @@ export const createPatchRoutes = (queries, requestBodyInterceptor, returnNullFie
|
|
|
9
9
|
if (validationResult.isValid === false) {
|
|
10
10
|
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
11
11
|
}
|
|
12
|
-
const body2 =
|
|
13
|
-
?
|
|
12
|
+
const body2 = requestInterceptor?.patch
|
|
13
|
+
? interceptRequest(requestInterceptor.patch, resource, body)
|
|
14
14
|
: body;
|
|
15
15
|
if (typeof body2 === 'string')
|
|
16
16
|
return { status: 400, body: { message: body2 } };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../../src/requestHandlers/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,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,kBAA6C,EAC7C,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,kBAAkB,EAAE,KAAK;gBACrC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAC5D,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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PostRequest } from './types.js';
|
|
3
3
|
import type { Queries } from '../data/types.js';
|
|
4
|
-
import type {
|
|
5
|
-
export declare const createPostRoutes: (queries: Queries,
|
|
4
|
+
import type { RequestInterceptor } from '../requestInterceptor/types.js';
|
|
5
|
+
export declare const createPostRoutes: (queries: Queries, requestInterceptor: RequestInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource) => (req: PostRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
7
7
|
body: {
|
|
8
8
|
message: string;
|
|
@@ -1 +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,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,
|
|
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,eAAe,CAAA;AAC3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,eAAO,MAAM,gBAAgB,YAClB,OAAO,sBACI,kBAAkB,GAAG,IAAI,oBAC3B,OAAO,WAChB,2BAA2B,WAEL,WAAW;;;;;;;;;;;;EAkC3C,CAAA"}
|
package/requestHandlers/post.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { format } from 'url';
|
|
2
|
-
import {
|
|
2
|
+
import { interceptRequest } from '../requestInterceptor/interceptRequest.js';
|
|
3
3
|
import { removeNullFields } from './utils.js';
|
|
4
4
|
import { validate } from '../schema/validate.js';
|
|
5
|
-
export const createPostRoutes = (queries,
|
|
5
|
+
export const createPostRoutes = (queries, requestInterceptor, returnNullFields, schemas) => {
|
|
6
6
|
const handlePost = async (req) => {
|
|
7
7
|
try {
|
|
8
8
|
const { body, protocol, host, resource } = req;
|
|
@@ -10,8 +10,8 @@ export const createPostRoutes = (queries, requestBodyInterceptor, returnNullFiel
|
|
|
10
10
|
if (validationResult.isValid === false) {
|
|
11
11
|
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
12
12
|
}
|
|
13
|
-
const body2 =
|
|
14
|
-
?
|
|
13
|
+
const body2 = requestInterceptor?.post
|
|
14
|
+
? interceptRequest(requestInterceptor.post, resource, body)
|
|
15
15
|
: body;
|
|
16
16
|
if (typeof body2 === 'string')
|
|
17
17
|
return { status: 400, body: { message: body2 } };
|
|
@@ -1 +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,
|
|
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,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAM7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgB,EAChB,kBAA6C,EAC7C,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,kBAAkB,EAAE,IAAI;gBACpC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAC3D,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"}
|
package/requestHandlers/put.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PutRequest } from './types.js';
|
|
3
3
|
import type { Queries } from '../data/types.js';
|
|
4
|
-
import type {
|
|
5
|
-
export declare const createPutRoutes: (queries: Queries,
|
|
4
|
+
import type { RequestInterceptor } from '../requestInterceptor/types.js';
|
|
5
|
+
export declare const createPutRoutes: (queries: Queries, requestInterceptor: RequestInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PutRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
7
7
|
body: unknown;
|
|
8
8
|
}>;
|
|
@@ -1 +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,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,
|
|
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,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,eAAO,MAAM,eAAe,YACjB,OAAO,sBACI,kBAAkB,GAAG,IAAI,oBAC3B,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEb,UAAU;;;EAoCzC,CAAA"}
|
package/requestHandlers/put.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { interceptRequest } from '../requestInterceptor/interceptRequest.js';
|
|
2
2
|
import { validate } from '../schema/validate.js';
|
|
3
3
|
import { removeNullFields } from './utils.js';
|
|
4
|
-
export const createPutRoutes = (queries,
|
|
4
|
+
export const createPutRoutes = (queries, requestInterceptor, returnNullFields, schemas) => {
|
|
5
5
|
const handlePut = async (req) => {
|
|
6
6
|
try {
|
|
7
7
|
const { body, resource, id } = req;
|
|
@@ -9,8 +9,8 @@ export const createPutRoutes = (queries, requestBodyInterceptor, returnNullField
|
|
|
9
9
|
if (validationResult.isValid === false) {
|
|
10
10
|
return { status: 400, body: { message: validationResult.errorMessage } };
|
|
11
11
|
}
|
|
12
|
-
const body2 =
|
|
13
|
-
?
|
|
12
|
+
const body2 = requestInterceptor?.put
|
|
13
|
+
? interceptRequest(requestInterceptor.put, resource, body)
|
|
14
14
|
: body;
|
|
15
15
|
if (typeof body2 === 'string')
|
|
16
16
|
return { status: 400, body: { message: body2 } };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"put.js","sourceRoot":"","sources":["../../../src/requestHandlers/put.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAM1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAgB,EAChB,kBAA6C,EAC7C,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,kBAAkB,EAAE,GAAG;gBACnC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC;gBAC1D,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,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,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;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":"interceptRequest.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD,eAAO,MAAM,gBAAgB,cAChB,0BAA0B,YAC3B,MAAM,QACV,OAAO,YAed,CAAA"}
|
package/{requestBodyInterceptor/interceptRequestBody.js → requestInterceptor/interceptRequest.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const interceptRequest = (intercept, resource, body) => {
|
|
2
2
|
const intercepted = intercept({ resource, body });
|
|
3
3
|
if (!intercepted && typeof body === 'object')
|
|
4
4
|
return body;
|
|
@@ -11,4 +11,4 @@ export const interceptRequestBody = (intercept, resource, body) => {
|
|
|
11
11
|
// This is not supported, so we return the original request body.
|
|
12
12
|
return body;
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=
|
|
14
|
+
//# sourceMappingURL=interceptRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptRequest.js","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAAqC,EACrC,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 RequestInterceptorCallback = (info: InterceptedRequest) => void | string | object;
|
|
6
|
+
export type RequestInterceptor = {
|
|
7
|
+
post?: RequestInterceptorCallback;
|
|
8
|
+
patch?: RequestInterceptorCallback;
|
|
9
|
+
put?: RequestInterceptorCallback;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/types.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,EAAE,0BAA0B,CAAA;IACjC,KAAK,CAAC,EAAE,0BAA0B,CAAA;IAClC,GAAG,CAAC,EAAE,0BAA0B,CAAA;CACjC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/requestInterceptor/types.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/requestBodyInterceptor/types.ts"],"names":[],"mappings":""}
|
|
File without changes
|