temba 0.13.0 → 0.14.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 +40 -31
- package/config/index.d.ts +3 -2
- package/config/index.js +3 -0
- package/config/index.js.map +1 -1
- package/package.json +1 -1
- package/queries/in-memory.d.ts +2 -0
- package/queries/in-memory.js +5 -4
- package/queries/in-memory.js.map +1 -1
- package/queries/mongo.d.ts +2 -0
- package/queries/mongo.js +12 -0
- package/queries/mongo.js.map +1 -1
- package/queries/queries.d.ts +2 -0
- package/routes/get.d.ts +1 -1
- package/routes/get.js +4 -3
- package/routes/get.js.map +1 -1
- package/routes/patch.d.ts +1 -1
- package/routes/patch.js +6 -2
- package/routes/patch.js.map +1 -1
- package/routes/post.d.ts +1 -1
- package/routes/post.js +3 -2
- package/routes/post.js.map +1 -1
- package/routes/put.d.ts +1 -1
- package/routes/put.js +7 -3
- package/routes/put.js.map +1 -1
- package/routes/routes.js +5 -5
- package/routes/routes.js.map +1 -1
- package/routes/utils.d.ts +3 -0
- package/routes/utils.js +8 -0
- package/routes/utils.js.map +1 -0
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Prerequisites you need to have:
|
|
|
52
52
|
Create your own Temba server with the following command and you are up and running!
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
npx create-temba-server my-rest-api
|
|
55
|
+
npx create-temba-server@latest my-rest-api
|
|
56
56
|
cd my-rest-api
|
|
57
57
|
npm start
|
|
58
58
|
```
|
|
@@ -137,7 +137,9 @@ For every resource you use in your requests, a collection is created in the data
|
|
|
137
137
|
If you only want to allow specific resource names, configure them by providing a `resourceNames` key in the config object when creating the Temba server:
|
|
138
138
|
|
|
139
139
|
```js
|
|
140
|
-
const config = {
|
|
140
|
+
const config = {
|
|
141
|
+
resourceNames: ['movies', 'actors'],
|
|
142
|
+
}
|
|
141
143
|
const server = temba.create(config)
|
|
142
144
|
```
|
|
143
145
|
|
|
@@ -148,7 +150,9 @@ Requests on these resources only give a `404 Not Found` if the ID does not exist
|
|
|
148
150
|
If you want to host static assets, next to the API, configure the `staticFolder`:
|
|
149
151
|
|
|
150
152
|
```js
|
|
151
|
-
const config = {
|
|
153
|
+
const config = {
|
|
154
|
+
staticFolder: 'build',
|
|
155
|
+
}
|
|
152
156
|
const server = temba.create(config)
|
|
153
157
|
```
|
|
154
158
|
|
|
@@ -167,7 +171,9 @@ To be able to still access the `/products` API resource, configure an `apiPrefix
|
|
|
167
171
|
With the `apiPrefix` config setting, all resources get an extra path segment in front of them. If the `apiPrefix` is `'api'`, then `/movies/12345` becomes `/api/movies/12345`:
|
|
168
172
|
|
|
169
173
|
```js
|
|
170
|
-
const config = {
|
|
174
|
+
const config = {
|
|
175
|
+
apiPrefix: 'api',
|
|
176
|
+
}
|
|
171
177
|
const server = temba.create(config)
|
|
172
178
|
```
|
|
173
179
|
|
|
@@ -348,10 +354,10 @@ router.get('api/stuff', (req, res) => {
|
|
|
348
354
|
})
|
|
349
355
|
|
|
350
356
|
const config = {
|
|
351
|
-
resourceNames: ['stuff'],
|
|
352
|
-
staticFolder: 'build',
|
|
353
357
|
apiPrefix: 'api',
|
|
354
358
|
customRouter: router,
|
|
359
|
+
resourceNames: ['stuff'],
|
|
360
|
+
staticFolder: 'build',
|
|
355
361
|
}
|
|
356
362
|
const server = temba.create(config)
|
|
357
363
|
```
|
|
@@ -369,12 +375,10 @@ Here is an example of the config settings for Temba, and how you define them:
|
|
|
369
375
|
|
|
370
376
|
```js
|
|
371
377
|
const config = {
|
|
372
|
-
resourceNames: ['movies', 'actors'],
|
|
373
|
-
connectionString: 'mongodb://localhost:27017',
|
|
374
|
-
staticFolder: 'build',
|
|
375
378
|
apiPrefix: 'api',
|
|
376
|
-
customRouter: router,
|
|
377
379
|
cacheControl: 'public, max-age=300',
|
|
380
|
+
connectionString: 'mongodb://localhost:27017',
|
|
381
|
+
customRouter: router,
|
|
378
382
|
delay: 500,
|
|
379
383
|
requestBodyInterceptor: {
|
|
380
384
|
post: ({ resourceName, requestBody }) => {
|
|
@@ -387,41 +391,46 @@ const config = {
|
|
|
387
391
|
// Validate, or even change the requestBody
|
|
388
392
|
},
|
|
389
393
|
},
|
|
394
|
+
resourceNames: ['movies', 'actors'],
|
|
395
|
+
responseBodyInterceptor: ({ resourceName, responseBody, id }) => {
|
|
396
|
+
// Change the response body before it is sent to the client
|
|
397
|
+
},
|
|
398
|
+
returnNullFields: false,
|
|
399
|
+
staticFolder: 'build',
|
|
390
400
|
}
|
|
391
401
|
const server = temba.create(config)
|
|
392
402
|
```
|
|
393
403
|
|
|
394
|
-
None of the settings are required, and only the settings you define are used.
|
|
395
|
-
|
|
396
404
|
These are all the possible settings:
|
|
397
405
|
|
|
398
|
-
| Config setting | Description |
|
|
399
|
-
| :------------------------ | :----------------------------------------------------------------------------------------- |
|
|
400
|
-
| `
|
|
401
|
-
| `
|
|
402
|
-
| `
|
|
403
|
-
| `
|
|
404
|
-
| `
|
|
405
|
-
| `
|
|
406
|
-
| `
|
|
407
|
-
| `
|
|
408
|
-
| `
|
|
406
|
+
| Config setting | Description | Default value |
|
|
407
|
+
| :------------------------ | :----------------------------------------------------------------------------------------- | :------------ |
|
|
408
|
+
| `apiPrefix` | See [API prefix](#api-prefix) | `null` |
|
|
409
|
+
| `cacheControl` | The `Cache-control` response header value for each GET request. | `'no-store'` |
|
|
410
|
+
| `connectionString` | See [MongoDB](#mongodb) | `null` |
|
|
411
|
+
| `customRouter` | See [Custom router](#custom-router) | `null` |
|
|
412
|
+
| `delay` | After processing the request, the delay in milliseconds before the request should be sent. | `0` |
|
|
413
|
+
| `requestBodyInterceptor` | See [Request body validation or mutation](#request-body-validation-or-mutation) | `noop` |
|
|
414
|
+
| `resourceNames` | See [Allowing specific resources only](#allowing-specific-resources-only) | `[]` |
|
|
415
|
+
| `responseBodyInterceptor` | See [Response body interception](#request-body-validation-or-mutation) | `noop` |
|
|
416
|
+
| `returnNullFields` | Whether fields with a `null` value should be returned in responses. | `true` |
|
|
417
|
+
| `staticFolder` | See [Static assets](#static-assets) | `null` |
|
|
409
418
|
|
|
410
|
-
##
|
|
419
|
+
## Roadmap
|
|
411
420
|
|
|
412
|
-
|
|
421
|
+
Although I won't promise if and when, these are some things to consider for the future:
|
|
413
422
|
|
|
414
|
-
|
|
423
|
+
- **Authorization bearer tokens**, probably by providing a callback function so you can check the token however you want.
|
|
415
424
|
|
|
416
|
-
|
|
425
|
+
- Better **security**, for example CORS, CSRF, etc.
|
|
417
426
|
|
|
418
|
-
|
|
427
|
+
- Connecting to a **SQLite** database
|
|
419
428
|
|
|
420
|
-
|
|
429
|
+
- 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`
|
|
421
430
|
|
|
422
|
-
|
|
431
|
+
- Intial data seed when using in-memory.
|
|
423
432
|
|
|
424
|
-
|
|
433
|
+
- Get rid of Express?
|
|
425
434
|
|
|
426
435
|
## Under the hood
|
|
427
436
|
|
package/config/index.d.ts
CHANGED
|
@@ -11,11 +11,11 @@ export type Config = {
|
|
|
11
11
|
connectionString: string;
|
|
12
12
|
delay: number;
|
|
13
13
|
customRouter: Router;
|
|
14
|
+
returnNullFields: boolean;
|
|
14
15
|
};
|
|
15
|
-
export type RouterConfig = Pick<Config, 'validateResources' | 'resourceNames' | 'apiPrefix' | 'cacheControl' | 'requestBodyInterceptor' | 'responseBodyInterceptor'>;
|
|
16
|
+
export type RouterConfig = Pick<Config, 'validateResources' | 'resourceNames' | 'apiPrefix' | 'cacheControl' | 'requestBodyInterceptor' | 'responseBodyInterceptor' | 'returnNullFields'>;
|
|
16
17
|
export type UserConfig = {
|
|
17
18
|
resourceNames?: string[];
|
|
18
|
-
validateResources?: boolean;
|
|
19
19
|
staticFolder?: string;
|
|
20
20
|
apiPrefix?: string;
|
|
21
21
|
connectionString?: string;
|
|
@@ -24,5 +24,6 @@ export type UserConfig = {
|
|
|
24
24
|
requestBodyInterceptor?: RequestBodyInterceptor;
|
|
25
25
|
responseBodyInterceptor?: ResponseBodyInterceptor;
|
|
26
26
|
customRouter?: Router;
|
|
27
|
+
returnNullFields?: boolean;
|
|
27
28
|
};
|
|
28
29
|
export declare function initConfig(userConfig: UserConfig): Config;
|
package/config/index.js
CHANGED
|
@@ -24,8 +24,10 @@ const defaultConfig = {
|
|
|
24
24
|
return responseBody;
|
|
25
25
|
},
|
|
26
26
|
customRouter: null,
|
|
27
|
+
returnNullFields: true,
|
|
27
28
|
};
|
|
28
29
|
function initConfig(userConfig) {
|
|
30
|
+
var _a;
|
|
29
31
|
if (!userConfig)
|
|
30
32
|
return defaultConfig;
|
|
31
33
|
const config = Object.assign({}, defaultConfig);
|
|
@@ -72,6 +74,7 @@ function initConfig(userConfig) {
|
|
|
72
74
|
if (userConfig.customRouter) {
|
|
73
75
|
config.customRouter = userConfig.customRouter;
|
|
74
76
|
}
|
|
77
|
+
config.returnNullFields = (_a = userConfig.returnNullFields) !== null && _a !== void 0 ? _a : true;
|
|
75
78
|
return config;
|
|
76
79
|
}
|
|
77
80
|
exports.initConfig = initConfig;
|
package/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/queries/in-memory.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ declare function getAll(resourceName: any): Promise<unknown>;
|
|
|
3
3
|
declare function getById(resourceName: any, id: any): Promise<unknown>;
|
|
4
4
|
declare function create(resourceName: any, item: any): Promise<unknown>;
|
|
5
5
|
declare function update(resourceName: any, item: any): Promise<unknown>;
|
|
6
|
+
declare function replace(resourceName: any, item: any): Promise<unknown>;
|
|
6
7
|
declare function deleteById(resourceName: any, id: any): Promise<void>;
|
|
7
8
|
declare function deleteAll(resourceName: any): Promise<unknown>;
|
|
8
9
|
declare const _default: {
|
|
@@ -11,6 +12,7 @@ declare const _default: {
|
|
|
11
12
|
getById: typeof getById;
|
|
12
13
|
create: typeof create;
|
|
13
14
|
update: typeof update;
|
|
15
|
+
replace: typeof replace;
|
|
14
16
|
deleteById: typeof deleteById;
|
|
15
17
|
deleteAll: typeof deleteAll;
|
|
16
18
|
};
|
package/queries/in-memory.js
CHANGED
|
@@ -27,14 +27,14 @@ function create(resourceName, item) {
|
|
|
27
27
|
function update(resourceName, item) {
|
|
28
28
|
createResourceArrayIfNecessary(resourceName);
|
|
29
29
|
const updatedItem = Object.assign({}, item);
|
|
30
|
-
data[resourceName] = [
|
|
31
|
-
...data[resourceName].filter((r) => r.id !== item.id),
|
|
32
|
-
updatedItem,
|
|
33
|
-
];
|
|
30
|
+
data[resourceName] = [...data[resourceName].filter((r) => r.id !== item.id), updatedItem];
|
|
34
31
|
return new Promise((resolve) => {
|
|
35
32
|
resolve(updatedItem);
|
|
36
33
|
});
|
|
37
34
|
}
|
|
35
|
+
function replace(resourceName, item) {
|
|
36
|
+
return update(resourceName, item);
|
|
37
|
+
}
|
|
38
38
|
function deleteById(resourceName, id) {
|
|
39
39
|
createResourceArrayIfNecessary(resourceName);
|
|
40
40
|
data[resourceName] = data[resourceName].filter((item) => item.id !== id);
|
|
@@ -59,6 +59,7 @@ exports.default = {
|
|
|
59
59
|
getById,
|
|
60
60
|
create,
|
|
61
61
|
update,
|
|
62
|
+
replace,
|
|
62
63
|
deleteById,
|
|
63
64
|
deleteAll,
|
|
64
65
|
};
|
package/queries/in-memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../src/queries/in-memory.ts"],"names":[],"mappings":";;AAAA,MAAM,IAAI,GAAG,EAAE,CAAA;AAEf,SAAS,iBAAiB;IACxB,aAAa;AACf,CAAC;AAED,SAAS,MAAM,CAAC,YAAY;IAC1B,8BAA8B,CAAC,YAAY,CAAC,CAAA;IAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,YAAY,EAAE,EAAE;IAC/B,8BAA8B,CAAC,YAAY,CAAC,CAAA;IAE5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,YAAY,EAAE,IAAI;IAChC,8BAA8B,CAAC,YAAY,CAAC,CAAA;IAE5C,MAAM,OAAO,mCAAQ,IAAI,KAAE,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,GAAE,CAAA;IAE7D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;IAErD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,YAAY,EAAE,IAAI;IAChC,8BAA8B,CAAC,YAAY,CAAC,CAAA;IAE5C,MAAM,WAAW,qBAAQ,IAAI,CAAE,CAAA;IAC/B,IAAI,CAAC,YAAY,CAAC,GAAG
|
|
1
|
+
{"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../src/queries/in-memory.ts"],"names":[],"mappings":"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"}
|
package/queries/mongo.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export default function createMongoQueries(connectionString: any): {
|
|
|
4
4
|
getById: typeof getById;
|
|
5
5
|
create: typeof create;
|
|
6
6
|
update: typeof update;
|
|
7
|
+
replace: typeof replace;
|
|
7
8
|
deleteById: typeof deleteById;
|
|
8
9
|
deleteAll: typeof deleteAll;
|
|
9
10
|
};
|
|
@@ -12,6 +13,7 @@ declare function getAll(resourceName: any): Promise<any>;
|
|
|
12
13
|
declare function getById(resourceName: any, id: any): Promise<any>;
|
|
13
14
|
declare function create(resourceName: any, item: any): Promise<any>;
|
|
14
15
|
declare function update(resourceName: any, item: any): Promise<any>;
|
|
16
|
+
declare function replace(resourceName: any, item: any): Promise<any>;
|
|
15
17
|
declare function deleteById(resourceName: any, id: any): Promise<void>;
|
|
16
18
|
declare function deleteAll(resourceName: any): Promise<void>;
|
|
17
19
|
export {};
|
package/queries/mongo.js
CHANGED
|
@@ -20,6 +20,7 @@ function createMongoQueries(connectionString) {
|
|
|
20
20
|
getById,
|
|
21
21
|
create,
|
|
22
22
|
update,
|
|
23
|
+
replace,
|
|
23
24
|
deleteById,
|
|
24
25
|
deleteAll,
|
|
25
26
|
};
|
|
@@ -67,6 +68,17 @@ function update(resourceName, item) {
|
|
|
67
68
|
return removeUnderscoreFromId(updatedItem.value);
|
|
68
69
|
});
|
|
69
70
|
}
|
|
71
|
+
function replace(resourceName, item) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
yield connectToDatabase();
|
|
74
|
+
const id = item.id;
|
|
75
|
+
delete item.id;
|
|
76
|
+
const replacedItem = yield db[resourceName].findOneAndReplace({ _id: id }, item, {
|
|
77
|
+
returnOriginal: false,
|
|
78
|
+
});
|
|
79
|
+
return removeUnderscoreFromId(replacedItem.value);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
70
82
|
function deleteById(resourceName, id) {
|
|
71
83
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
84
|
yield connectToDatabase();
|
package/queries/mongo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/queries/mongo.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,0CAAwC;AAExC,IAAI,GAAG,CAAA;AACP,IAAI,EAAE,CAAA;AAEN,SAAwB,kBAAkB,CAAC,gBAAgB;IACzD,GAAG,GAAG,gBAAgB,CAAA;IAEtB,OAAO;QACL,iBAAiB;QACjB,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/queries/mongo.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,0CAAwC;AAExC,IAAI,GAAG,CAAA;AACP,IAAI,EAAE,CAAA;AAEN,SAAwB,kBAAkB,CAAC,gBAAgB;IACzD,GAAG,GAAG,gBAAgB,CAAA;IAEtB,OAAO;QACL,iBAAiB;QACjB,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,OAAO;QACP,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;AAbD,qCAaC;AAED,SAAe,iBAAiB;;QAC9B,IAAI,CAAC,EAAE,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;YAC5B,EAAE,GAAG,MAAM,IAAA,eAAO,EAAC,GAAG,CAAC,CAAA;SACxB;IACH,CAAC;CAAA;AAED,SAAe,MAAM,CAAC,YAAY;;QAChC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAE7C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAA;QAErB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAA;IAC1D,CAAC;CAAA;AAED,SAAe,OAAO,CAAC,YAAY,EAAE,EAAE;;QACrC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;QAExD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QAEtB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;CAAA;AAED,SAAe,MAAM,CAAC,YAAY,EAAE,IAAI;;QACtC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAE1D,OAAO,sBAAsB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;CAAA;AAED,SAAe,MAAM,CAAC,YAAY,EAAE,IAAI;;QACtC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QAClB,OAAO,IAAI,CAAC,EAAE,CAAA;QAEd,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,gBAAgB,CACzD,EAAE,GAAG,EAAE,EAAE,EAAE,EACX,EAAE,IAAI,EAAE,IAAI,EAAE,EACd,EAAE,cAAc,EAAE,KAAK,EAAE,CAC1B,CAAA;QAED,OAAO,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAClD,CAAC;CAAA;AAED,SAAe,OAAO,CAAC,YAAY,EAAE,IAAI;;QACvC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QAClB,OAAO,IAAI,CAAC,EAAE,CAAA;QAEd,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE;YAC/E,cAAc,EAAE,KAAK;SACtB,CAAC,CAAA;QAEF,OAAO,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC;CAAA;AAED,SAAe,UAAU,CAAC,YAAY,EAAE,EAAE;;QACxC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;IAC/C,CAAC;CAAA;AAED,SAAe,SAAS,CAAC,YAAY;;QACnC,MAAM,iBAAiB,EAAE,CAAA;QAEzB,MAAM,EAAE,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACvC,CAAC;CAAA;AAED,SAAS,sBAAsB,CAAC,IAAI;IAClC,MAAM,WAAW,mCAAQ,IAAI,KAAE,EAAE,EAAE,IAAI,CAAC,GAAG,GAAE,CAAA;IAC7C,OAAO,WAAW,CAAC,GAAG,CAAA;IACtB,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
package/queries/queries.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ declare function createQueries(connectionString: any): {
|
|
|
4
4
|
getById: (resourceName: any, id: any) => Promise<any>;
|
|
5
5
|
create: (resourceName: any, item: any) => Promise<any>;
|
|
6
6
|
update: (resourceName: any, item: any) => Promise<any>;
|
|
7
|
+
replace: (resourceName: any, item: any) => Promise<any>;
|
|
7
8
|
deleteById: (resourceName: any, id: any) => Promise<void>;
|
|
8
9
|
deleteAll: (resourceName: any) => Promise<void>;
|
|
9
10
|
} | {
|
|
@@ -12,6 +13,7 @@ declare function createQueries(connectionString: any): {
|
|
|
12
13
|
getById: (resourceName: any, id: any) => Promise<unknown>;
|
|
13
14
|
create: (resourceName: any, item: any) => Promise<unknown>;
|
|
14
15
|
update: (resourceName: any, item: any) => Promise<unknown>;
|
|
16
|
+
replace: (resourceName: any, item: any) => Promise<unknown>;
|
|
15
17
|
deleteById: (resourceName: any, id: any) => Promise<void>;
|
|
16
18
|
deleteAll: (resourceName: any) => Promise<unknown>;
|
|
17
19
|
};
|
package/routes/get.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare function createGetRoutes(queries: any, cacheControl: any, responseBodyInterceptor: any): {
|
|
1
|
+
declare function createGetRoutes(queries: any, cacheControl: any, responseBodyInterceptor: any, returnNullFields: any): {
|
|
2
2
|
handleGetResource: (req: any, res: any) => Promise<any>;
|
|
3
3
|
};
|
|
4
4
|
export { createGetRoutes };
|
package/routes/get.js
CHANGED
|
@@ -10,7 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.createGetRoutes = void 0;
|
|
13
|
-
|
|
13
|
+
const utils_1 = require("./utils");
|
|
14
|
+
function createGetRoutes(queries, cacheControl, responseBodyInterceptor, returnNullFields) {
|
|
14
15
|
function handleGetResource(req, res) {
|
|
15
16
|
return __awaiter(this, void 0, void 0, function* () {
|
|
16
17
|
try {
|
|
@@ -36,7 +37,7 @@ function createGetRoutes(queries, cacheControl, responseBodyInterceptor) {
|
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
res.status(200);
|
|
39
|
-
res.json(theItem);
|
|
40
|
+
res.json(returnNullFields ? theItem : (0, utils_1.removeNullFields)(theItem));
|
|
40
41
|
return res.send();
|
|
41
42
|
}
|
|
42
43
|
const items = yield queries.getAll(resourceName);
|
|
@@ -54,7 +55,7 @@ function createGetRoutes(queries, cacheControl, responseBodyInterceptor) {
|
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
res.status(200);
|
|
57
|
-
res.json(theItems);
|
|
58
|
+
res.json(returnNullFields ? theItems : theItems.map((item) => (0, utils_1.removeNullFields)(item)));
|
|
58
59
|
return res.send();
|
|
59
60
|
}
|
|
60
61
|
catch (error) {
|
package/routes/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/routes/get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,SAAS,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/routes/get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA0C;AAE1C,SAAS,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,gBAAgB;IACvF,SAAe,iBAAiB,CAAC,GAAG,EAAE,GAAG;;YACvC,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;gBAE5C,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;gBAEtC,IAAI,EAAE,EAAE;oBACN,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;oBAEpD,IAAI,CAAC,IAAI,EAAE;wBACT,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;wBACf,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;qBAClB;oBAED,IAAI,OAAO,GAAG,IAAI,CAAA;oBAClB,IAAI,uBAAuB,EAAE;wBAC3B,IAAI;4BACF,OAAO,GAAG,uBAAuB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;4BAC3E,IAAI,CAAC,OAAO;gCAAE,OAAO,GAAG,IAAI,CAAA;yBAC7B;wBAAC,OAAO,KAAK,EAAE;4BACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gCAC1B,OAAO,EAAE,oCAAoC,GAAG,KAAK,CAAC,OAAO;6BAC9D,CAAC,CAAA;yBACH;qBACF;oBAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;oBACf,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC,CAAA;oBAChE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;iBAClB;gBAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;gBAEhD,IAAI,QAAQ,GAAG,KAAK,CAAA;gBACpB,IAAI,uBAAuB,EAAE;oBAC3B,IAAI;wBACF,QAAQ,GAAG,uBAAuB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAA;wBACzE,IAAI,CAAC,QAAQ;4BAAE,QAAQ,GAAG,KAAK,CAAA;qBAChC;oBAAC,OAAO,KAAK,EAAE;wBACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;4BAC1B,OAAO,EAAE,oCAAoC,GAAG,KAAK,CAAC,OAAO;yBAC9D,CAAC,CAAA;qBACH;iBACF;gBAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACf,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,wBAAgB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACtF,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;aAClB;YAAC,OAAO,KAAc,EAAE;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;aACnE;QACH,CAAC;KAAA;IAED,OAAO;QACL,iBAAiB;KAClB,CAAA;AACH,CAAC;AAEQ,0CAAe"}
|
package/routes/patch.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare function createPatchRoutes(queries: any, requestBodyInterceptor: any): {
|
|
1
|
+
declare function createPatchRoutes(queries: any, requestBodyInterceptor: any, returnNullFields: any): {
|
|
2
2
|
handlePatch: (req: any, res: any) => Promise<any>;
|
|
3
3
|
};
|
|
4
4
|
export { createPatchRoutes };
|
package/routes/patch.js
CHANGED
|
@@ -11,7 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.createPatchRoutes = void 0;
|
|
13
13
|
const interceptors_1 = require("./interceptors");
|
|
14
|
-
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
function createPatchRoutes(queries, requestBodyInterceptor, returnNullFields) {
|
|
15
16
|
function handlePatch(req, res) {
|
|
16
17
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
18
|
try {
|
|
@@ -28,7 +29,10 @@ function createPatchRoutes(queries, requestBodyInterceptor) {
|
|
|
28
29
|
});
|
|
29
30
|
item = Object.assign(Object.assign(Object.assign({}, item), requestBody), { id });
|
|
30
31
|
const updatedItem = yield queries.update(resourceName, item);
|
|
31
|
-
return res
|
|
32
|
+
return res
|
|
33
|
+
.status(200)
|
|
34
|
+
.json(returnNullFields ? updatedItem : (0, utils_1.removeNullFields)(updatedItem))
|
|
35
|
+
.send();
|
|
32
36
|
}
|
|
33
37
|
catch (error) {
|
|
34
38
|
return res.status(500).json({ message: error.message });
|
package/routes/patch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/routes/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAqD;
|
|
1
|
+
{"version":3,"file":"patch.js","sourceRoot":"","sources":["../../src/routes/patch.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAqD;AACrD,mCAA0C;AAE1C,SAAS,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB;IAC1E,SAAe,WAAW,CAAC,GAAG,EAAE,GAAG;;YACjC,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;gBAE5C,MAAM,WAAW,GAAG,IAAA,mCAAoB,EAAC,sBAAsB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;gBAE3E,IAAI,OAAO,WAAW,KAAK,QAAQ;oBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAE9D,IAAI,IAAI,GAAG,IAAI,CAAA;gBACf,IAAI,EAAE;oBAAE,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;gBAEtD,IAAI,CAAC,IAAI;oBACP,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC,CAAC,CAAA;gBAEJ,IAAI,iDAAQ,IAAI,GAAK,WAAW,KAAE,EAAE,GAAE,CAAA;gBAEtC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAE5D,OAAO,GAAG;qBACP,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,WAAW,CAAC,CAAC;qBACpE,IAAI,EAAE,CAAA;aACV;YAAC,OAAO,KAAc,EAAE;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;aACnE;QACH,CAAC;KAAA;IAED,OAAO;QACL,WAAW;KACZ,CAAA;AACH,CAAC;AAEQ,8CAAiB"}
|
package/routes/post.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare function createPostRoutes(queries: any, requestBodyInterceptor: any): {
|
|
1
|
+
declare function createPostRoutes(queries: any, requestBodyInterceptor: any, returnNullFields: any): {
|
|
2
2
|
handlePost: (req: any, res: any) => Promise<any>;
|
|
3
3
|
};
|
|
4
4
|
export { createPostRoutes };
|
package/routes/post.js
CHANGED
|
@@ -12,7 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.createPostRoutes = void 0;
|
|
13
13
|
const url_1 = require("url");
|
|
14
14
|
const interceptors_1 = require("./interceptors");
|
|
15
|
-
|
|
15
|
+
const utils_1 = require("./utils");
|
|
16
|
+
function createPostRoutes(queries, requestBodyInterceptor, returnNullFields) {
|
|
16
17
|
function handlePost(req, res) {
|
|
17
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18
19
|
try {
|
|
@@ -30,7 +31,7 @@ function createPostRoutes(queries, requestBodyInterceptor) {
|
|
|
30
31
|
}),
|
|
31
32
|
})
|
|
32
33
|
.status(201)
|
|
33
|
-
.json(newItem)
|
|
34
|
+
.json(returnNullFields ? newItem : (0, utils_1.removeNullFields)(newItem))
|
|
34
35
|
.send();
|
|
35
36
|
}
|
|
36
37
|
catch (error) {
|
package/routes/post.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/routes/post.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAA4B;AAC5B,iDAAqD;
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/routes/post.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6BAA4B;AAC5B,iDAAqD;AACrD,mCAA0C;AAE1C,SAAS,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB;IACzE,SAAe,UAAU,CAAC,GAAG,EAAE,GAAG;;YAChC,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;gBAExC,MAAM,WAAW,GAAG,IAAA,mCAAoB,EAAC,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;gBAE1E,IAAI,OAAO,WAAW,KAAK,QAAQ;oBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAE9D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;gBAE/D,OAAO,GAAG;qBACP,GAAG,CAAC;oBACH,QAAQ,EAAE,IAAA,YAAM,EAAC;wBACf,QAAQ,EAAE,GAAG,CAAC,QAAQ;wBACtB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;wBACrB,QAAQ,EAAE,GAAG,YAAY,IAAI,OAAO,CAAC,EAAE,EAAE;qBAC1C,CAAC;iBACH,CAAC;qBACD,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;qBAC5D,IAAI,EAAE,CAAA;aACV;YAAC,OAAO,KAAc,EAAE;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;aACnE;QACH,CAAC;KAAA;IAED,OAAO;QACL,UAAU;KACX,CAAA;AACH,CAAC;AAEQ,4CAAgB"}
|
package/routes/put.d.ts
CHANGED
package/routes/put.js
CHANGED
|
@@ -11,7 +11,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.createPutRoutes = void 0;
|
|
13
13
|
const interceptors_1 = require("./interceptors");
|
|
14
|
-
|
|
14
|
+
const utils_1 = require("./utils");
|
|
15
|
+
function createPutRoutes(queries, requestBodyInterceptor, returnNullFields) {
|
|
15
16
|
function handlePut(req, res) {
|
|
16
17
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
18
|
try {
|
|
@@ -27,8 +28,11 @@ function createPutRoutes(queries, requestBodyInterceptor) {
|
|
|
27
28
|
message: `ID '${id}' not found`,
|
|
28
29
|
});
|
|
29
30
|
item = Object.assign(Object.assign({}, requestBody), { id });
|
|
30
|
-
const replacedItem = yield queries.
|
|
31
|
-
return res
|
|
31
|
+
const replacedItem = yield queries.replace(resourceName, item);
|
|
32
|
+
return res
|
|
33
|
+
.status(200)
|
|
34
|
+
.json(returnNullFields ? replacedItem : (0, utils_1.removeNullFields)(replacedItem))
|
|
35
|
+
.send();
|
|
32
36
|
}
|
|
33
37
|
catch (error) {
|
|
34
38
|
return res.status(500).json({ message: error.message });
|
package/routes/put.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"put.js","sourceRoot":"","sources":["../../src/routes/put.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAqD;
|
|
1
|
+
{"version":3,"file":"put.js","sourceRoot":"","sources":["../../src/routes/put.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAAqD;AACrD,mCAA0C;AAE1C,SAAS,eAAe,CAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB;IACxE,SAAe,SAAS,CAAC,GAAG,EAAE,GAAG;;YAC/B,IAAI;gBACF,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAA;gBAE5C,MAAM,WAAW,GAAG,IAAA,mCAAoB,EAAC,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;gBAEzE,IAAI,OAAO,WAAW,KAAK,QAAQ;oBACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAE9D,IAAI,IAAI,GAAG,IAAI,CAAA;gBACf,IAAI,EAAE;oBAAE,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;gBAEtD,IAAI,CAAC,IAAI;oBACP,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,OAAO,EAAE,OAAO,EAAE,aAAa;qBAChC,CAAC,CAAA;gBAEJ,IAAI,mCAAQ,WAAW,KAAE,EAAE,GAAE,CAAA;gBAE7B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;gBAE9D,OAAO,GAAG;qBACP,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,YAAY,CAAC,CAAC;qBACtE,IAAI,EAAE,CAAA;aACV;YAAC,OAAO,KAAc,EAAE;gBACvB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAA;aACnE;QACH,CAAC;KAAA;IAED,OAAO;QACL,SAAS;KACV,CAAA;AACH,CAAC;AAEQ,0CAAe"}
|
package/routes/routes.js
CHANGED
|
@@ -21,11 +21,11 @@ const delete_1 = require("./delete");
|
|
|
21
21
|
const urlMiddleware_1 = require("../urls/urlMiddleware");
|
|
22
22
|
const express_1 = __importDefault(require("express"));
|
|
23
23
|
function createResourceRouter(queries, routerConfig) {
|
|
24
|
-
const { validateResources, resourceNames, apiPrefix, cacheControl, requestBodyInterceptor, responseBodyInterceptor, } = routerConfig;
|
|
25
|
-
const { handleGetResource } = (0, get_1.createGetRoutes)(queries, cacheControl, responseBodyInterceptor);
|
|
26
|
-
const { handlePost } = (0, post_1.createPostRoutes)(queries, requestBodyInterceptor);
|
|
27
|
-
const { handlePut } = (0, put_1.createPutRoutes)(queries, requestBodyInterceptor);
|
|
28
|
-
const { handlePatch } = (0, patch_1.createPatchRoutes)(queries, requestBodyInterceptor);
|
|
24
|
+
const { validateResources, resourceNames, apiPrefix, cacheControl, requestBodyInterceptor, responseBodyInterceptor, returnNullFields, } = routerConfig;
|
|
25
|
+
const { handleGetResource } = (0, get_1.createGetRoutes)(queries, cacheControl, responseBodyInterceptor, returnNullFields);
|
|
26
|
+
const { handlePost } = (0, post_1.createPostRoutes)(queries, requestBodyInterceptor, returnNullFields);
|
|
27
|
+
const { handlePut } = (0, put_1.createPutRoutes)(queries, requestBodyInterceptor, returnNullFields);
|
|
28
|
+
const { handlePatch } = (0, patch_1.createPatchRoutes)(queries, requestBodyInterceptor, returnNullFields);
|
|
29
29
|
const { handleDelete } = (0, delete_1.createDeleteRoutes)(queries);
|
|
30
30
|
const validateResource = (0, urlMiddleware_1.createValidateResourceMiddleware)(validateResources, resourceNames);
|
|
31
31
|
const getResourceAndId = (0, urlMiddleware_1.createResourceAndIdParser)(apiPrefix);
|
package/routes/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes/routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+BAAuC;AACvC,iCAAyC;AACzC,+BAAuC;AACvC,mCAA2C;AAC3C,qCAA6C;AAC7C,yDAAmG;AAEnG,sDAA6B;AAG7B,SAAS,oBAAoB,CAAC,OAAO,EAAE,YAA0B;IAC/D,MAAM,EACJ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes/routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,+BAAuC;AACvC,iCAAyC;AACzC,+BAAuC;AACvC,mCAA2C;AAC3C,qCAA6C;AAC7C,yDAAmG;AAEnG,sDAA6B;AAG7B,SAAS,oBAAoB,CAAC,OAAO,EAAE,YAA0B;IAC/D,MAAM,EACJ,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,GACjB,GAAG,YAAY,CAAA;IAEhB,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAA,qBAAe,EAC3C,OAAO,EACP,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,CACjB,CAAA;IACD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,uBAAgB,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IAC1F,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qBAAe,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IACxF,MAAM,EAAE,WAAW,EAAE,GAAG,IAAA,yBAAiB,EAAC,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAA;IAC5F,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAA;IAEpD,MAAM,gBAAgB,GAAG,IAAA,gDAAgC,EAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;IAC3F,MAAM,gBAAgB,GAAG,IAAA,yCAAyB,EAAC,SAAS,CAAC,CAAA;IAE7D,MAAM,cAAc,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;IAEvC,cAAc;QACZ,6GAA6G;SAC5G,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;SAC/D,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,CAAC;SACzD,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,CAAC;SACvD,KAAK,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,CAAC;SAC3D,MAAM,CAAC,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAA;IAEhE,OAAO,cAAc,CAAA;AACvB,CAAC;AAqBQ,oDAAoB;AAnB7B,iDAAiD;AACjD,MAAM,UAAU,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAA;AAkBJ,gCAAU;AAjBzC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAO,CAAC,EAAE,GAAG,EAAE,EAAE;IACnC,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAChC,CAAC,CAAA,CAAC,CAAA;AAEF,sDAAsD;AACtD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAA;AAE3C,0CAA0C;AAC1C,SAAS,sBAAsB,CAAC,CAAC,EAAE,GAAG;IACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;AACzD,CAAC;AAO0C,wDAAsB;AALjE,gCAAgC;AAChC,SAAS,cAAc,CAAC,CAAC,EAAE,GAAG;IAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;AAChD,CAAC;AAEkE,wCAAc"}
|
package/routes/utils.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.removeNullFields = void 0;
|
|
4
|
+
const removeNullFields = (obj) => {
|
|
5
|
+
return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== null));
|
|
6
|
+
};
|
|
7
|
+
exports.removeNullFields = removeNullFields;
|
|
8
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/routes/utils.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,GAA4B,EAAE,EAAE;IAC/D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAA;AACvF,CAAC,CAAA;AAFY,QAAA,gBAAgB,oBAE5B"}
|