temba 0.43.0 → 0.45.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.
Files changed (86) hide show
  1. package/README.md +55 -32
  2. package/config/index.d.ts +0 -1
  3. package/config/index.d.ts.map +1 -1
  4. package/config/index.js +1 -1
  5. package/config/index.js.map +1 -1
  6. package/index.d.ts +2 -2
  7. package/index.d.ts.map +1 -1
  8. package/index.js +20 -32
  9. package/index.js.map +1 -1
  10. package/openapi/html.d.ts +2 -0
  11. package/openapi/html.d.ts.map +1 -0
  12. package/openapi/html.js +14 -0
  13. package/openapi/html.js.map +1 -0
  14. package/openapi/index.d.ts +5 -0
  15. package/openapi/index.d.ts.map +1 -0
  16. package/openapi/index.js +37 -0
  17. package/openapi/index.js.map +1 -0
  18. package/openapi/spec.d.ts +8 -0
  19. package/openapi/spec.d.ts.map +1 -0
  20. package/openapi/spec.js +518 -0
  21. package/openapi/spec.js.map +1 -0
  22. package/package.json +11 -11
  23. package/requestHandlers/delete.d.ts +2 -2
  24. package/requestHandlers/delete.js +8 -8
  25. package/requestHandlers/delete.js.map +1 -1
  26. package/requestHandlers/get.d.ts +13 -7
  27. package/requestHandlers/get.d.ts.map +1 -1
  28. package/requestHandlers/get.js +7 -7
  29. package/requestHandlers/get.js.map +1 -1
  30. package/requestHandlers/index.d.ts +40 -18
  31. package/requestHandlers/index.d.ts.map +1 -1
  32. package/requestHandlers/index.js +2 -2
  33. package/requestHandlers/index.js.map +1 -1
  34. package/requestHandlers/patch.d.ts +9 -2
  35. package/requestHandlers/patch.d.ts.map +1 -1
  36. package/requestHandlers/patch.js +10 -7
  37. package/requestHandlers/patch.js.map +1 -1
  38. package/requestHandlers/post.d.ts +5 -3
  39. package/requestHandlers/post.d.ts.map +1 -1
  40. package/requestHandlers/post.js +6 -6
  41. package/requestHandlers/post.js.map +1 -1
  42. package/requestHandlers/put.d.ts +9 -2
  43. package/requestHandlers/put.d.ts.map +1 -1
  44. package/requestHandlers/put.js +10 -7
  45. package/requestHandlers/put.js.map +1 -1
  46. package/requestHandlers/types.d.ts +4 -12
  47. package/requestHandlers/types.d.ts.map +1 -1
  48. package/requestHandlers/utils.d.ts +4 -1
  49. package/requestHandlers/utils.d.ts.map +1 -1
  50. package/requestHandlers/utils.js.map +1 -1
  51. package/requestInterceptor/interceptRequest.d.ts +6 -5
  52. package/requestInterceptor/interceptRequest.d.ts.map +1 -1
  53. package/requestInterceptor/interceptRequest.js +8 -8
  54. package/requestInterceptor/interceptRequest.js.map +1 -1
  55. package/requestInterceptor/types.d.ts +9 -7
  56. package/requestInterceptor/types.d.ts.map +1 -1
  57. package/resourceHandler.d.ts +2 -7
  58. package/resourceHandler.d.ts.map +1 -1
  59. package/resourceHandler.js +17 -48
  60. package/resourceHandler.js.map +1 -1
  61. package/responseHandler.d.ts +13 -0
  62. package/responseHandler.d.ts.map +1 -0
  63. package/responseHandler.js +39 -0
  64. package/responseHandler.js.map +1 -0
  65. package/root/html.d.ts +8 -0
  66. package/root/html.d.ts.map +1 -0
  67. package/root/html.js +48 -0
  68. package/root/html.js.map +1 -0
  69. package/root/root.d.ts +4 -0
  70. package/root/root.d.ts.map +1 -0
  71. package/root/root.js +37 -0
  72. package/root/root.js.map +1 -0
  73. package/schema/compile.js +10 -11
  74. package/schema/compile.js.map +1 -1
  75. package/schema/validate.d.ts +2 -1
  76. package/schema/validate.d.ts.map +1 -1
  77. package/schema/validate.js.map +1 -1
  78. package/staticFolder/staticFolder.d.ts +3 -5
  79. package/staticFolder/staticFolder.d.ts.map +1 -1
  80. package/staticFolder/staticFolder.js +15 -18
  81. package/staticFolder/staticFolder.js.map +1 -1
  82. package/version.js +1 -1
  83. package/openapi/openapi.d.ts +0 -6
  84. package/openapi/openapi.d.ts.map +0 -1
  85. package/openapi/openapi.js +0 -476
  86. package/openapi/openapi.js.map +0 -1
@@ -0,0 +1,518 @@
1
+ // Creates the OpenAPI spec in JSON or YAML format
2
+ import { OpenApiBuilder, } from 'openapi3-ts/oas31';
3
+ import indefinite from 'indefinite';
4
+ import deepmerge from 'deepmerge';
5
+ const anyResource = '{resource}';
6
+ const defaultResourceInfos = [
7
+ {
8
+ resource: anyResource,
9
+ pluralResourceLowerCase: 'resources',
10
+ pluralResourceUpperCase: 'Resources',
11
+ singularResourceLowerCase: 'resource',
12
+ singularResourceUpperCase: 'Resource',
13
+ tag: {
14
+ name: 'Resources',
15
+ description: 'All resources',
16
+ },
17
+ },
18
+ ];
19
+ const getRequestBodySchema = (schema = { type: 'object' }) => ({
20
+ content: {
21
+ 'application/json': {
22
+ schema,
23
+ },
24
+ },
25
+ });
26
+ const getResponseBodySchema = (requestSchema) => {
27
+ const defaultSchema = {
28
+ type: 'object',
29
+ properties: {
30
+ id: {
31
+ type: 'string',
32
+ },
33
+ },
34
+ required: ['id'],
35
+ };
36
+ if (!requestSchema)
37
+ return defaultSchema;
38
+ return deepmerge(defaultSchema, requestSchema);
39
+ };
40
+ const defaultErrorResponseBodySchema = {
41
+ type: 'object',
42
+ properties: {
43
+ message: {
44
+ type: 'string',
45
+ },
46
+ },
47
+ required: ['message'],
48
+ };
49
+ const getPathParameters = (resourceInfo, id = false) => {
50
+ const { resource, singularResourceLowerCase } = resourceInfo;
51
+ const resourceParameter = {
52
+ name: 'resource',
53
+ in: 'path',
54
+ required: true,
55
+ schema: {
56
+ type: 'string',
57
+ },
58
+ description: 'The name of the resource.',
59
+ };
60
+ const idParameter = {
61
+ name: `${singularResourceLowerCase}Id`,
62
+ in: 'path',
63
+ required: true,
64
+ schema: {
65
+ type: 'string',
66
+ },
67
+ description: `The ID of the ${singularResourceLowerCase}.`,
68
+ };
69
+ let parameters = [];
70
+ if (resource === anyResource) {
71
+ parameters = [...parameters, resourceParameter];
72
+ }
73
+ if (id) {
74
+ parameters = [...parameters, idParameter];
75
+ }
76
+ return parameters;
77
+ };
78
+ const getServerUrl = (requestHost) => {
79
+ const hostname = requestHost.split(':')[0] || '';
80
+ const port = requestHost.split(':')[1] || '';
81
+ const protocol = ['localhost', '127.0.0.1'].includes(hostname) ? 'http' : 'https';
82
+ let server = `${protocol}://${hostname}`;
83
+ server += !['80', '443'].includes(port) ? `:${port}` : '';
84
+ return server;
85
+ };
86
+ const buildOpenApiSpec = (config, server, resourceInfos) => {
87
+ let apiDescription = 'This API has been generated using [Temba](https://github.com/bouwe77/temba).';
88
+ if (!config.returnNullFields) {
89
+ apiDescription += '\n\nAny fields with `null` values are omitted in all API responses.';
90
+ }
91
+ const builder = OpenApiBuilder.create()
92
+ .addOpenApiVersion('3.1.0')
93
+ .addInfo({
94
+ title: 'My API',
95
+ version: '1.0',
96
+ description: apiDescription,
97
+ })
98
+ .addLicense({
99
+ name: 'Apache 2.0',
100
+ url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
101
+ })
102
+ // For convenience, we use a generic server URL, relative to where the docs are served from.
103
+ .addServer({
104
+ url: server,
105
+ });
106
+ builder.addTag({
107
+ name: 'API',
108
+ description: 'Shows information about the API',
109
+ });
110
+ // GET on the root URL
111
+ builder.addPath('/', {
112
+ get: {
113
+ summary: 'API root',
114
+ description: 'Shows information about the API.',
115
+ operationId: 'getApiRoot',
116
+ responses: {
117
+ '200': {
118
+ description: 'The API is working.',
119
+ content: {
120
+ 'text/html': {
121
+ schema: {
122
+ type: 'string',
123
+ },
124
+ },
125
+ },
126
+ },
127
+ },
128
+ tags: ['API'],
129
+ },
130
+ });
131
+ resourceInfos.forEach((resourceInfo) => {
132
+ const { resource, pluralResourceLowerCase, pluralResourceUpperCase, singularResourceLowerCase, singularResourceUpperCase, } = resourceInfo;
133
+ // Add the tag for this resource
134
+ builder.addTag(resourceInfo.tag);
135
+ const nullFieldsRemark = () => config.returnNullFields
136
+ ? ''
137
+ : '\n\nAny fields with `null` values are omitted in all API responses.';
138
+ const postRequestSchema = config.schemas?.[resource]
139
+ ?.post;
140
+ const responseSchema = getResponseBodySchema(postRequestSchema);
141
+ // GET, HEAD, POST on a collection
142
+ builder.addPath(`/${resource}`, {
143
+ get: {
144
+ // description: `List all ${pluralResourceLowerCase}.`,
145
+ description: `List all ${pluralResourceLowerCase}.`,
146
+ summary: `List all ${pluralResourceLowerCase}`,
147
+ operationId: `getAll${pluralResourceUpperCase}`,
148
+ parameters: getPathParameters(resourceInfo),
149
+ responses: {
150
+ '200': {
151
+ description: `List of all ${pluralResourceLowerCase}.${nullFieldsRemark()}`,
152
+ content: {
153
+ 'application/json': {
154
+ schema: {
155
+ type: 'array',
156
+ items: responseSchema,
157
+ },
158
+ },
159
+ },
160
+ },
161
+ },
162
+ tags: [resourceInfo.tag.name],
163
+ },
164
+ head: {
165
+ summary: `HTTP headers for all ${pluralResourceLowerCase}`,
166
+ description: `Returns HTTP headers for all ${pluralResourceLowerCase}.`,
167
+ operationId: `getAll${pluralResourceUpperCase}Headers`,
168
+ parameters: getPathParameters(resourceInfo),
169
+ responses: {
170
+ '200': {
171
+ description: `HTTP headers for all ${pluralResourceLowerCase}.`,
172
+ },
173
+ },
174
+ tags: [resourceInfo.tag.name],
175
+ },
176
+ post: {
177
+ summary: `Create a new ${singularResourceLowerCase}`,
178
+ description: `Create a new ${singularResourceLowerCase}.`,
179
+ operationId: `create${singularResourceUpperCase}`,
180
+ parameters: getPathParameters(resourceInfo),
181
+ requestBody: getRequestBodySchema(postRequestSchema),
182
+ responses: {
183
+ '201': {
184
+ description: `The ${singularResourceLowerCase} was created. The created ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
185
+ content: {
186
+ 'application/json': {
187
+ schema: responseSchema,
188
+ },
189
+ },
190
+ },
191
+ '400': {
192
+ description: 'The request was invalid.',
193
+ content: {
194
+ 'application/json': {
195
+ schema: defaultErrorResponseBodySchema,
196
+ examples: {
197
+ IdNotAllowedInRequestBody: {
198
+ value: {
199
+ message: 'An id is not allowed in the request body',
200
+ },
201
+ },
202
+ },
203
+ },
204
+ },
205
+ },
206
+ },
207
+ tags: [resourceInfo.tag.name],
208
+ },
209
+ });
210
+ // DELETE on a collection if configured
211
+ if (config.allowDeleteCollection) {
212
+ builder.addPath(`/${resource}`, {
213
+ delete: {
214
+ summary: `Delete all ${pluralResourceLowerCase}`,
215
+ description: `Delete all ${pluralResourceLowerCase}.`,
216
+ operationId: `deleteAll${pluralResourceUpperCase}`,
217
+ parameters: getPathParameters(resourceInfo),
218
+ responses: {
219
+ '204': {
220
+ description: `All ${pluralResourceLowerCase} were deleted.`,
221
+ },
222
+ },
223
+ tags: [resourceInfo.tag.name],
224
+ },
225
+ });
226
+ }
227
+ else {
228
+ builder.addPath(`/${resource}`, {
229
+ delete: {
230
+ summary: `Delete all ${pluralResourceLowerCase}`,
231
+ description: 'Deleting whole collections is disabled. Enable by setting `allowDeleteCollection` to `true`.',
232
+ operationId: `deleteAll${pluralResourceUpperCase}`,
233
+ parameters: getPathParameters(resourceInfo),
234
+ responses: {
235
+ '405': {
236
+ description: `Method not allowed`,
237
+ },
238
+ },
239
+ tags: [resourceInfo.tag.name],
240
+ },
241
+ });
242
+ }
243
+ // GET, HEAD, POST, PUT, PATCH, DELETE on an ID
244
+ builder.addPath(`/${resource}/{${singularResourceLowerCase}Id}`, {
245
+ get: {
246
+ summary: `Find ${indefinite(singularResourceLowerCase)} by ID`,
247
+ description: `Find ${indefinite(singularResourceLowerCase)} by ID.`,
248
+ operationId: `get${singularResourceUpperCase}ById`,
249
+ parameters: getPathParameters(resourceInfo, true),
250
+ responses: {
251
+ '200': {
252
+ description: `The ${singularResourceLowerCase} with the ${singularResourceLowerCase}Id.${nullFieldsRemark()}`,
253
+ content: {
254
+ 'application/json': {
255
+ schema: responseSchema,
256
+ },
257
+ },
258
+ },
259
+ '404': {
260
+ description: `The ${singularResourceLowerCase}Id was not found.`,
261
+ content: {
262
+ 'application/json': {
263
+ schema: defaultErrorResponseBodySchema,
264
+ },
265
+ },
266
+ },
267
+ },
268
+ tags: [resourceInfo.tag.name],
269
+ },
270
+ head: {
271
+ summary: `HTTP headers for the ${singularResourceLowerCase} by ID`,
272
+ description: `Returns HTTP headers for the ${singularResourceLowerCase} by ID.`,
273
+ operationId: `get${singularResourceUpperCase}ByIdHeaders`,
274
+ parameters: getPathParameters(resourceInfo, true),
275
+ responses: {
276
+ '200': {
277
+ description: `HTTP headers for the ${singularResourceLowerCase} with the ${singularResourceLowerCase}Id.`,
278
+ },
279
+ '404': {
280
+ description: `The ${singularResourceLowerCase}Id was not found.`,
281
+ },
282
+ },
283
+ tags: [resourceInfo.tag.name],
284
+ },
285
+ post: {
286
+ summary: `Create a new ${singularResourceLowerCase} with id`,
287
+ description: `Create a new ${singularResourceLowerCase}, specifying your own id.`,
288
+ operationId: `create${singularResourceUpperCase}WithId`,
289
+ parameters: getPathParameters(resourceInfo, true),
290
+ requestBody: {
291
+ content: {
292
+ 'application/json': {
293
+ schema: {
294
+ type: 'object',
295
+ },
296
+ },
297
+ },
298
+ },
299
+ responses: {
300
+ '201': {
301
+ description: `The ${singularResourceLowerCase} was created. The created ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
302
+ content: {
303
+ 'application/json': {
304
+ schema: {
305
+ type: 'object',
306
+ },
307
+ },
308
+ },
309
+ },
310
+ '400': {
311
+ description: 'The request was invalid.',
312
+ content: {
313
+ 'application/json': {
314
+ schema: {
315
+ type: 'object',
316
+ properties: {
317
+ message: {
318
+ type: 'string',
319
+ },
320
+ },
321
+ },
322
+ examples: {
323
+ IdNotAllowedInRequestBody: {
324
+ value: {
325
+ message: 'An id is not allowed in the request body',
326
+ },
327
+ },
328
+ },
329
+ },
330
+ },
331
+ },
332
+ '409': {
333
+ description: 'The id already exists.',
334
+ content: {
335
+ 'application/json': {
336
+ schema: {
337
+ type: 'object',
338
+ properties: {
339
+ message: {
340
+ type: 'string',
341
+ },
342
+ },
343
+ },
344
+ examples: {
345
+ IdAlreadyExists: {
346
+ value: {
347
+ message: "ID '{resourceId}' already exists",
348
+ },
349
+ },
350
+ },
351
+ },
352
+ },
353
+ },
354
+ },
355
+ tags: [resourceInfo.tag.name],
356
+ },
357
+ put: {
358
+ summary: `Replace ${indefinite(singularResourceLowerCase)}`,
359
+ description: `Replace ${indefinite(singularResourceLowerCase)}.`,
360
+ operationId: `replace${singularResourceUpperCase}`,
361
+ parameters: getPathParameters(resourceInfo, true),
362
+ requestBody: getRequestBodySchema(config.schemas?.[resource]?.put),
363
+ responses: {
364
+ '200': {
365
+ description: `The ${singularResourceLowerCase} was replaced. The replaced ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
366
+ content: {
367
+ 'application/json': {
368
+ schema: responseSchema,
369
+ },
370
+ },
371
+ },
372
+ '404': {
373
+ description: `The ${singularResourceLowerCase}Id was not found.`,
374
+ content: {
375
+ 'application/json': {
376
+ schema: defaultErrorResponseBodySchema,
377
+ },
378
+ },
379
+ },
380
+ '400': {
381
+ description: 'The request was invalid.',
382
+ content: {
383
+ 'application/json': {
384
+ schema: defaultErrorResponseBodySchema,
385
+ examples: {
386
+ MissingIdInUrl: {
387
+ value: {
388
+ message: 'An id is required in the URL',
389
+ },
390
+ },
391
+ IdNotAllowedInRequestBody: {
392
+ value: {
393
+ message: 'An id is not allowed in the request body',
394
+ },
395
+ },
396
+ },
397
+ },
398
+ },
399
+ },
400
+ },
401
+ tags: [resourceInfo.tag.name],
402
+ },
403
+ patch: {
404
+ summary: `Update ${indefinite(singularResourceLowerCase)}`,
405
+ description: `Update ${indefinite(singularResourceLowerCase)}.`,
406
+ operationId: `update${singularResourceUpperCase}`,
407
+ parameters: getPathParameters(resourceInfo, true),
408
+ requestBody: getRequestBodySchema(config.schemas?.[resource]?.patch),
409
+ responses: {
410
+ '200': {
411
+ description: `The ${singularResourceLowerCase} was updated. The updated ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
412
+ content: {
413
+ 'application/json': {
414
+ schema: responseSchema,
415
+ },
416
+ },
417
+ },
418
+ '404': {
419
+ description: `The ${singularResourceLowerCase}Id was not found.`,
420
+ content: {
421
+ 'application/json': {
422
+ schema: defaultErrorResponseBodySchema,
423
+ },
424
+ },
425
+ },
426
+ '400': {
427
+ description: 'The request was invalid.',
428
+ content: {
429
+ 'application/json': {
430
+ schema: defaultErrorResponseBodySchema,
431
+ examples: {
432
+ MissingIdInUrl: {
433
+ value: {
434
+ message: 'An id is required in the URL',
435
+ },
436
+ },
437
+ IdNotAllowedInRequestBody: {
438
+ value: {
439
+ message: 'An id is not allowed in the request body',
440
+ },
441
+ },
442
+ },
443
+ },
444
+ },
445
+ },
446
+ },
447
+ tags: [resourceInfo.tag.name],
448
+ },
449
+ delete: {
450
+ summary: `Delete ${indefinite(singularResourceLowerCase)}`,
451
+ description: `Delete ${indefinite(singularResourceLowerCase)}.`,
452
+ operationId: `delete${singularResourceUpperCase}`,
453
+ parameters: getPathParameters(resourceInfo, true),
454
+ responses: {
455
+ '204': {
456
+ description: `The ${singularResourceLowerCase} was deleted.`,
457
+ },
458
+ },
459
+ tags: [resourceInfo.tag.name],
460
+ },
461
+ });
462
+ });
463
+ return builder.getSpec();
464
+ };
465
+ export const getSpec = (config, request) => {
466
+ let resourceInfos = defaultResourceInfos;
467
+ if (config.resources.length > 0) {
468
+ resourceInfos = config.resources.map((resource) => {
469
+ if (typeof resource === 'string') {
470
+ const pluralResourceLowerCase = resource.toLowerCase();
471
+ const pluralResourceUpperCase = pluralResourceLowerCase.charAt(0).toUpperCase() + pluralResourceLowerCase.slice(1);
472
+ let singularResourceLowerCase = pluralResourceLowerCase;
473
+ if (singularResourceLowerCase.endsWith('s')) {
474
+ singularResourceLowerCase = singularResourceLowerCase.slice(0, -1);
475
+ }
476
+ const singularResourceUpperCase = singularResourceLowerCase.charAt(0).toUpperCase() + singularResourceLowerCase.slice(1);
477
+ const tag = {
478
+ name: pluralResourceUpperCase,
479
+ description: `All ${pluralResourceLowerCase}`,
480
+ };
481
+ return {
482
+ resource,
483
+ pluralResourceLowerCase,
484
+ pluralResourceUpperCase,
485
+ singularResourceLowerCase,
486
+ singularResourceUpperCase,
487
+ tag,
488
+ };
489
+ }
490
+ else {
491
+ const pluralResourceLowerCase = resource.pluralName.toLowerCase();
492
+ const pluralResourceUpperCase = pluralResourceLowerCase.charAt(0).toUpperCase() + pluralResourceLowerCase.slice(1);
493
+ const singularResourceLowerCase = resource.singularName.toLowerCase();
494
+ const singularResourceUpperCase = singularResourceLowerCase.charAt(0).toUpperCase() + singularResourceLowerCase.slice(1);
495
+ const tag = {
496
+ name: pluralResourceUpperCase,
497
+ description: `All ${pluralResourceLowerCase}`,
498
+ };
499
+ return {
500
+ resource: resource.resourcePath,
501
+ pluralResourceLowerCase,
502
+ pluralResourceUpperCase,
503
+ singularResourceLowerCase,
504
+ singularResourceUpperCase,
505
+ tag,
506
+ };
507
+ }
508
+ });
509
+ }
510
+ let server = getServerUrl(request.host);
511
+ if (config.apiPrefix)
512
+ server += `/${config.apiPrefix}/`;
513
+ const spec = buildOpenApiSpec(config, server, resourceInfos);
514
+ const builder = new OpenApiBuilder(typeof config.openapi === 'object' ? deepmerge(spec, config.openapi) : spec);
515
+ const specje = request.format === 'json' ? builder.getSpecAsJson() : builder.getSpecAsYaml();
516
+ return specje;
517
+ };
518
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../src/openapi/spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "temba",
3
- "version": "0.43.0",
3
+ "version": "0.45.0",
4
4
  "description": "Get a simple REST API with zero coding in less than 30 seconds (seriously).",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -23,17 +23,17 @@
23
23
  "@types/etag": "^1.8.3",
24
24
  "@types/indefinite": "^2.3.4",
25
25
  "@types/morgan": "^1.9.9",
26
- "@types/supertest": "^6.0.2",
27
- "@typescript-eslint/eslint-plugin": "^8.24.0",
28
- "@typescript-eslint/parser": "^8.24.0",
26
+ "@types/supertest": "^6.0.3",
27
+ "@typescript-eslint/eslint-plugin": "^8.29.1",
28
+ "@typescript-eslint/parser": "^8.29.1",
29
29
  "eslint": "8.57.0",
30
- "eslint-config-prettier": "^10.0.1",
31
- "prettier": "^3.5.1",
32
- "supertest": "^7.0.0",
30
+ "eslint-config-prettier": "^10.1.1",
31
+ "prettier": "^3.5.3",
32
+ "supertest": "^7.1.0",
33
33
  "ts-node": "^10.9.2",
34
- "tsc-alias": "^1.8.10",
35
- "typescript": "^5.7.3",
36
- "vitest": "^3.0.5"
34
+ "tsc-alias": "^1.8.14",
35
+ "typescript": "^5.8.3",
36
+ "vitest": "^3.1.1"
37
37
  },
38
38
  "dependencies": {
39
39
  "@rakered/mongo": "^1.6.0",
@@ -45,7 +45,7 @@
45
45
  "etag": "^1.8.1",
46
46
  "indefinite": "^2.5.1",
47
47
  "lowdb": "^7.0.1",
48
- "mime": "^4.0.6",
48
+ "mime": "^4.0.7",
49
49
  "morgan": "^1.10.0",
50
50
  "openapi3-ts": "^4.4.0"
51
51
  }
@@ -2,12 +2,12 @@ import type { Queries } from '../data/types.js';
2
2
  import type { RequestInterceptor } from '../requestInterceptor/types.js';
3
3
  import type { DeleteRequest } from './types.js';
4
4
  export declare const createDeleteRoutes: (queries: Queries, allowDeleteCollection: boolean, requestInterceptor: RequestInterceptor | null, etagsEnabled: boolean) => (req: DeleteRequest) => Promise<{
5
- status: number;
5
+ statusCode: number;
6
6
  body: {
7
7
  message: string;
8
8
  };
9
9
  } | {
10
- status: number;
10
+ statusCode: number;
11
11
  body?: undefined;
12
12
  }>;
13
13
  //# sourceMappingURL=delete.d.ts.map
@@ -7,11 +7,11 @@ export const createDeleteRoutes = (queries, allowDeleteCollection, requestInterc
7
7
  const { headers, resource, id } = req;
8
8
  if (requestInterceptor?.delete) {
9
9
  try {
10
- interceptDeleteRequest(requestInterceptor.delete, headers, resource, id);
10
+ await interceptDeleteRequest(requestInterceptor.delete, headers, resource, id);
11
11
  }
12
12
  catch (error) {
13
13
  return {
14
- status: error instanceof TembaError ? error.statusCode : 500,
14
+ statusCode: error instanceof TembaError ? error.statusCode : 500,
15
15
  body: { message: error.message },
16
16
  };
17
17
  }
@@ -23,7 +23,7 @@ export const createDeleteRoutes = (queries, allowDeleteCollection, requestInterc
23
23
  const itemEtag = etag(JSON.stringify(item));
24
24
  if (req.etag !== itemEtag) {
25
25
  return {
26
- status: 412,
26
+ statusCode: 412,
27
27
  body: {
28
28
  message: 'Precondition failed',
29
29
  },
@@ -37,7 +37,7 @@ export const createDeleteRoutes = (queries, allowDeleteCollection, requestInterc
37
37
  // The client needs to do a GET to determine it, after which it finds out the item is gone.
38
38
  if (etagsEnabled && !req.etag) {
39
39
  return {
40
- status: 412,
40
+ statusCode: 412,
41
41
  body: {
42
42
  message: 'Precondition failed',
43
43
  },
@@ -47,14 +47,14 @@ export const createDeleteRoutes = (queries, allowDeleteCollection, requestInterc
47
47
  }
48
48
  else {
49
49
  if (!allowDeleteCollection) {
50
- return { status: 405 };
50
+ return { statusCode: 405 };
51
51
  }
52
52
  if (etagsEnabled) {
53
53
  const items = await queries.getAll(resource);
54
54
  const etagValue = etag(JSON.stringify(items));
55
55
  if (req.etag !== etagValue) {
56
56
  return {
57
- status: 412,
57
+ statusCode: 412,
58
58
  body: {
59
59
  message: 'Precondition failed',
60
60
  },
@@ -63,10 +63,10 @@ export const createDeleteRoutes = (queries, allowDeleteCollection, requestInterc
63
63
  }
64
64
  await queries.deleteAll(resource);
65
65
  }
66
- return { status: 204 };
66
+ return { statusCode: 204 };
67
67
  }
68
68
  catch (error) {
69
- return { status: 500, body: { message: error.message } };
69
+ return { statusCode: 500, body: { message: error.message } };
70
70
  }
71
71
  };
72
72
  return handleDelete;