temba 0.24.1 → 0.25.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 +25 -14
- package/data/json/index.d.ts +7 -0
- package/data/json/index.d.ts.map +1 -0
- package/data/json/index.js +72 -0
- package/data/json/index.js.map +1 -0
- package/{queries/mongo.d.ts → data/mongo/index.d.ts} +2 -2
- package/data/mongo/index.d.ts.map +1 -0
- package/{queries/mongo.js → data/mongo/index.js} +1 -1
- package/data/mongo/index.js.map +1 -0
- package/data/queries.d.ts.map +1 -0
- package/data/queries.js +12 -0
- package/data/queries.js.map +1 -0
- package/data/types.d.ts.map +1 -0
- package/{queries → data}/types.js.map +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/package.json +3 -2
- package/requestHandlers/delete.d.ts +1 -1
- package/requestHandlers/delete.d.ts.map +1 -1
- package/requestHandlers/get.d.ts +1 -1
- package/requestHandlers/get.d.ts.map +1 -1
- package/requestHandlers/index.d.ts +1 -1
- package/requestHandlers/index.d.ts.map +1 -1
- package/requestHandlers/patch.d.ts +1 -1
- package/requestHandlers/patch.d.ts.map +1 -1
- package/requestHandlers/post.d.ts +1 -1
- package/requestHandlers/post.d.ts.map +1 -1
- package/requestHandlers/put.d.ts +1 -1
- package/requestHandlers/put.d.ts.map +1 -1
- package/resourceRouter.d.ts +1 -1
- package/resourceRouter.d.ts.map +1 -1
- package/responseBodyInterceptor/types.d.ts +1 -1
- package/responseBodyInterceptor/types.d.ts.map +1 -1
- package/queries/in-memory.d.ts +0 -3
- package/queries/in-memory.d.ts.map +0 -1
- package/queries/in-memory.js +0 -61
- package/queries/in-memory.js.map +0 -1
- package/queries/mongo.d.ts.map +0 -1
- package/queries/mongo.js.map +0 -1
- package/queries/queries.d.ts.map +0 -1
- package/queries/queries.js +0 -10
- package/queries/queries.js.map +0 -1
- package/queries/types.d.ts.map +0 -1
- /package/{queries → data}/queries.d.ts +0 -0
- /package/{queries → data}/types.d.ts +0 -0
- /package/{queries → data}/types.js +0 -0
package/README.md
CHANGED
|
@@ -8,16 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
10
10
|
|
|
11
|
-
**Get a simple
|
|
11
|
+
**Get a simple REST API with zero coding in less than 30 seconds (seriously).**
|
|
12
12
|
|
|
13
|
-
For developers
|
|
14
|
-
|
|
15
|
-
Powered by NodeJS, Express and MongoDB.
|
|
16
|
-
|
|
17
|
-
This project is inspired by the fantastic [json-server](https://github.com/typicode/json-server) project, but instead of a JSON file Temba uses a real database. The goal, however, is the same: Get you started with a REST API very quickly.
|
|
13
|
+
For developers that need a quick NodeJS backend for small projects.
|
|
18
14
|
|
|
19
15
|
No need for any coding, unless you want to opt-out of the defaults, or want to do more customization.
|
|
20
16
|
|
|
17
|
+
Data is kept in memory, but you can also store it in a JSON file or MongoDB database.
|
|
18
|
+
|
|
21
19
|
## Table of contents
|
|
22
20
|
|
|
23
21
|
[Temba?](#temba-1)
|
|
@@ -42,10 +40,10 @@ In the fictional Tamarian language the word _"Temba"_ means something like _"gif
|
|
|
42
40
|
|
|
43
41
|
Prerequisites you need to have:
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
* Node
|
|
44
|
+
* NPM
|
|
47
45
|
|
|
48
|
-
|
|
46
|
+
- Optional: A MongoDB database, either locally or in the cloud
|
|
49
47
|
|
|
50
48
|
### Use the starter with `npx`
|
|
51
49
|
|
|
@@ -125,7 +123,20 @@ IDs are auto generated when creating resources. IDs in the JSON request body are
|
|
|
125
123
|
|
|
126
124
|
### In-memory or MongoDB
|
|
127
125
|
|
|
128
|
-
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 MongoDB database
|
|
126
|
+
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
|
+
|
|
128
|
+
#### JSON file
|
|
129
|
+
|
|
130
|
+
```js
|
|
131
|
+
const config = {
|
|
132
|
+
connectionString: 'data.json',
|
|
133
|
+
}
|
|
134
|
+
const server = temba.create(config)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
All resources are saved in a single JSON file. The file is not created or updated unless you create, update, or delete resources.
|
|
138
|
+
|
|
139
|
+
#### MongoDB
|
|
129
140
|
|
|
130
141
|
```js
|
|
131
142
|
const config = {
|
|
@@ -134,7 +145,7 @@ const config = {
|
|
|
134
145
|
const server = temba.create(config)
|
|
135
146
|
```
|
|
136
147
|
|
|
137
|
-
For every resource you use in your requests, a collection is created in the database. However, not until you actually
|
|
148
|
+
For every resource you use in your requests, a collection is created in the database. However, not until you actually create a resource with a `POST`.
|
|
138
149
|
|
|
139
150
|
### Allowing specific resources only
|
|
140
151
|
|
|
@@ -239,7 +250,7 @@ If a request is not valid according to the schema, a `400 Bad Request` response
|
|
|
239
250
|
|
|
240
251
|
### Intercepting requests
|
|
241
252
|
|
|
242
|
-
In addition to (or instead of) validating the request using JSON Schema, you can also intercept the request body before it
|
|
253
|
+
In addition to (or instead of) validating the request using JSON Schema, you can also intercept the request body before it is persisted, using the `requestBodyInterceptor` setting.
|
|
243
254
|
|
|
244
255
|
It allows you to implement your own validation, or even change the request body.
|
|
245
256
|
|
|
@@ -261,7 +272,7 @@ const config = {
|
|
|
261
272
|
const server = temba.create(config)
|
|
262
273
|
```
|
|
263
274
|
|
|
264
|
-
The `requestBodyInterceptor` 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
|
|
275
|
+
The `requestBodyInterceptor` 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.
|
|
265
276
|
|
|
266
277
|
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.
|
|
267
278
|
|
|
@@ -473,7 +484,7 @@ Although I won't promise if and when, these are some things to consider for the
|
|
|
473
484
|
|
|
474
485
|
## Under the hood
|
|
475
486
|
|
|
476
|
-
Temba is built with TypeScript, [Node](https://nodejs.org), [Express](https://expressjs.com/), [Vitest](https://vitest.dev/), [Supertest](https://www.npmjs.com/package/supertest),
|
|
487
|
+
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).
|
|
477
488
|
|
|
478
489
|
## Contributors ✨
|
|
479
490
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,UAAU,CAAA;AAmB5D,KAAK,UAAU,GAAG;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,WAsEjE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Low, Memory } from 'lowdb';
|
|
2
|
+
import { JSONFile } from 'lowdb/node';
|
|
3
|
+
const getInMemoryDb = (defaultData) => {
|
|
4
|
+
return getJsonDb(new Memory(), defaultData);
|
|
5
|
+
};
|
|
6
|
+
const getFileDb = async (filename, defaultData) => {
|
|
7
|
+
return await getJsonDb(new JSONFile(filename), defaultData);
|
|
8
|
+
};
|
|
9
|
+
const getJsonDb = async (adapter, defaultData) => {
|
|
10
|
+
const db = new Low(adapter, defaultData);
|
|
11
|
+
await db.read();
|
|
12
|
+
return db;
|
|
13
|
+
};
|
|
14
|
+
export default function createJsonQueries({ filename }) {
|
|
15
|
+
const defaultData = {};
|
|
16
|
+
async function getDb() {
|
|
17
|
+
const db = filename ? await getFileDb(filename, defaultData) : await getInMemoryDb(defaultData);
|
|
18
|
+
return db;
|
|
19
|
+
}
|
|
20
|
+
async function getAll(resource) {
|
|
21
|
+
const db = await getDb();
|
|
22
|
+
const data = db.data[resource] || [];
|
|
23
|
+
return data;
|
|
24
|
+
}
|
|
25
|
+
async function getById(resource, id) {
|
|
26
|
+
const db = await getDb();
|
|
27
|
+
const data = db.data[resource] || [];
|
|
28
|
+
return (data || []).find((x) => x.id === id) || null;
|
|
29
|
+
}
|
|
30
|
+
async function create(resource, item) {
|
|
31
|
+
const db = await getDb();
|
|
32
|
+
const itemWithId = { ...item, id: String(new Date().getTime()) };
|
|
33
|
+
await db.update((data) => {
|
|
34
|
+
data[resource] = [...(data[resource] || []), itemWithId];
|
|
35
|
+
});
|
|
36
|
+
return itemWithId;
|
|
37
|
+
}
|
|
38
|
+
async function update(resource, item) {
|
|
39
|
+
const updatedItem = { ...item };
|
|
40
|
+
const db = await getDb();
|
|
41
|
+
await db.update((data) => {
|
|
42
|
+
data[resource] = [...(data[resource] || []).filter((r) => r.id !== item.id), updatedItem];
|
|
43
|
+
});
|
|
44
|
+
return updatedItem;
|
|
45
|
+
}
|
|
46
|
+
async function replace(resource, item) {
|
|
47
|
+
return update(resource, item);
|
|
48
|
+
}
|
|
49
|
+
async function deleteById(resource, id) {
|
|
50
|
+
const db = await getDb();
|
|
51
|
+
await db.update((data) => {
|
|
52
|
+
data[resource] = [...(data[resource] || []).filter((r) => r.id !== id)];
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async function deleteAll(resource) {
|
|
56
|
+
const db = await getDb();
|
|
57
|
+
await db.update((data) => {
|
|
58
|
+
data[resource] = [];
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const fileQueries = {
|
|
62
|
+
getAll,
|
|
63
|
+
getById,
|
|
64
|
+
create,
|
|
65
|
+
update,
|
|
66
|
+
replace,
|
|
67
|
+
deleteById,
|
|
68
|
+
deleteAll,
|
|
69
|
+
};
|
|
70
|
+
return fileQueries;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/json/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { Queries } from '
|
|
1
|
+
import type { Queries } from '../types.js';
|
|
2
2
|
export declare const createMongoQueries: (connectionString: string) => Queries;
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/data/mongo/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,UAAU,CAAA;AA8F5D,eAAO,MAAM,kBAAkB,qBAAsB,MAAM,YAc1D,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/data/mongo/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,qBAAsB,MAAM,GAAG,IAAI,8BAS5D,CAAA"}
|
package/data/queries.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import createJsonQueries from './json/index.js';
|
|
2
|
+
import { createMongoQueries } from './mongo/index.js';
|
|
3
|
+
export const createQueries = (connectionString) => {
|
|
4
|
+
if (process.env.NODE_ENV === 'test' || !connectionString)
|
|
5
|
+
return createJsonQueries({ filename: null });
|
|
6
|
+
if (connectionString.endsWith('.json'))
|
|
7
|
+
return createJsonQueries({ filename: connectionString });
|
|
8
|
+
if (connectionString.startsWith('mongodb://'))
|
|
9
|
+
return createMongoQueries(connectionString);
|
|
10
|
+
return createJsonQueries({ filename: null });
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/data/queries.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,gBAA+B,EAAE,EAAE;IAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,CAAC,gBAAgB;QACtD,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAEhG,IAAI,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IAE1F,OAAO,iBAAiB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9C,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/data/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE5C,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/data/types.ts"],"names":[],"mappings":""}
|
package/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express, { json } from 'express';
|
|
2
2
|
import morgan from 'morgan';
|
|
3
|
-
import { createQueries } from './
|
|
3
|
+
import { createQueries } from './data/queries.js';
|
|
4
4
|
import { initConfig } from './config/index.js';
|
|
5
5
|
import cors from 'cors';
|
|
6
6
|
import { createDelayMiddleware } from './delay/delayMiddleware.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAEvC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "temba",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Get a simple
|
|
3
|
+
"version": "0.25.0",
|
|
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",
|
|
7
7
|
"scripts": {
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"connect-pause": "^0.1.0",
|
|
41
41
|
"cors": "^2.8.5",
|
|
42
42
|
"express": "^4.18.3",
|
|
43
|
+
"lowdb": "^7.0.1",
|
|
43
44
|
"morgan": "^1.10.0"
|
|
44
45
|
}
|
|
45
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,kBAAkB,YAAa,OAAO,WAChB,aAAa;;;;;;;;EAoB/C,CAAA"}
|
package/requestHandlers/get.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Queries } from '../
|
|
1
|
+
import type { Queries } from '../data/types.js';
|
|
2
2
|
import type { ResponseBodyInterceptor } from '../responseBodyInterceptor/types.js';
|
|
3
3
|
import type { GetRequest } from './types.js';
|
|
4
4
|
export declare const createGetRoutes: (queries: Queries, cacheControl: string, responseBodyInterceptor: ResponseBodyInterceptor | null, returnNullFields: boolean) => (req: GetRequest) => Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/get.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAGzC,eAAO,MAAM,eAAe,YACjB,OAAO,gBACF,MAAM,2BACK,uBAAuB,GAAG,IAAI,oBACrC,OAAO,WAKK,UAAU;;;;;;;;;;;;;;;;;EAmDzC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RouterConfig } from '../config/index.js';
|
|
2
2
|
import type { CompiledSchemas } from '../schema/types.js';
|
|
3
|
-
import type { Queries } from '../
|
|
3
|
+
import type { Queries } from '../data/types.js';
|
|
4
4
|
export declare const getRequestHandler: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => {
|
|
5
5
|
handleGet: (req: import("./types.js").GetRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
@@ -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,
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqC3B,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PatchRequest } from './types.js';
|
|
3
|
-
import type { Queries } from '../
|
|
3
|
+
import type { Queries } from '../data/types.js';
|
|
4
4
|
import type { RequestBodyInterceptor } from '../requestBodyInterceptor/types.js';
|
|
5
5
|
export declare const createPatchRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PatchRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
@@ -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,
|
|
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,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAE7E,eAAO,MAAM,iBAAiB,YACnB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEX,YAAY;;;EAoC7C,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PostRequest } from './types.js';
|
|
3
|
-
import type { Queries } from '../
|
|
3
|
+
import type { Queries } from '../data/types.js';
|
|
4
4
|
import type { RequestBodyInterceptor } from '../requestBodyInterceptor/types.js';
|
|
5
5
|
export declare const createPostRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource) => (req: PostRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
@@ -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,
|
|
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,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAE7E,eAAO,MAAM,gBAAgB,YAClB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,WAEL,WAAW;;;;;;;;;;;;EAkC3C,CAAA"}
|
package/requestHandlers/put.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ValidateFunctionPerResource } from '../schema/types.js';
|
|
2
2
|
import type { PutRequest } from './types.js';
|
|
3
|
-
import type { Queries } from '../
|
|
3
|
+
import type { Queries } from '../data/types.js';
|
|
4
4
|
import type { RequestBodyInterceptor } from '../requestBodyInterceptor/types.js';
|
|
5
5
|
export declare const createPutRoutes: (queries: Queries, requestBodyInterceptor: RequestBodyInterceptor | null, returnNullFields: boolean, schemas: ValidateFunctionPerResource | null) => (req: PutRequest) => Promise<{
|
|
6
6
|
status: number;
|
|
@@ -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,
|
|
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,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAE7E,eAAO,MAAM,eAAe,YACjB,OAAO,0BACQ,sBAAsB,GAAG,IAAI,oBACnC,OAAO,WAChB,2BAA2B,GAAG,IAAI,WAEb,UAAU;;;EAoCzC,CAAA"}
|
package/resourceRouter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Queries } from './
|
|
1
|
+
import type { Queries } from './data/types.js';
|
|
2
2
|
import type { CompiledSchemas } from './schema/types.js';
|
|
3
3
|
import type { RouterConfig } from './config/index.js';
|
|
4
4
|
export declare const createResourceRouter: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => import("express-serve-static-core").Router;
|
package/resourceRouter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,eAAO,MAAM,oBAAoB,YACtB,OAAO,WACP,eAAe,gBACV,YAAY,+CAqH3B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/responseBodyInterceptor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,MAAM,mBAAmB,GAC3B;IACE,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;CACX,GACD;IACE,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAEL,MAAM,MAAM,uBAAuB,GAAG,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAA"}
|
package/queries/in-memory.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/queries/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,SAAS,CAAA;AAqE3D,eAAO,MAAM,eAAe,EAAE,OAQ7B,CAAA"}
|
package/queries/in-memory.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
const data = {};
|
|
2
|
-
const getAll = (resource) => {
|
|
3
|
-
createResourceArrayIfNecessary(resource);
|
|
4
|
-
return new Promise((resolve) => {
|
|
5
|
-
resolve(data[resource] || []);
|
|
6
|
-
});
|
|
7
|
-
};
|
|
8
|
-
const getById = (resource, id) => {
|
|
9
|
-
createResourceArrayIfNecessary(resource);
|
|
10
|
-
const item = (data[resource] || []).find((item) => item.id === id) || null;
|
|
11
|
-
return new Promise((resolve) => {
|
|
12
|
-
resolve(item);
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
|
-
const create = (resource, item) => {
|
|
16
|
-
createResourceArrayIfNecessary(resource);
|
|
17
|
-
const newItem = { ...item, id: String(new Date().getTime()) };
|
|
18
|
-
data[resource] = [...(data[resource] || []), newItem];
|
|
19
|
-
return new Promise((resolve) => {
|
|
20
|
-
resolve(newItem);
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
const update = (resource, item) => {
|
|
24
|
-
createResourceArrayIfNecessary(resource);
|
|
25
|
-
const updatedItem = { ...item };
|
|
26
|
-
data[resource] = [...(data[resource] || []).filter((r) => r.id !== item.id), updatedItem];
|
|
27
|
-
return new Promise((resolve) => {
|
|
28
|
-
resolve(updatedItem);
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
const replace = (resource, item) => {
|
|
32
|
-
return update(resource, item);
|
|
33
|
-
};
|
|
34
|
-
const deleteById = (resource, id) => {
|
|
35
|
-
createResourceArrayIfNecessary(resource);
|
|
36
|
-
data[resource] = (data[resource] || []).filter((item) => item.id !== id);
|
|
37
|
-
return new Promise((resolve) => {
|
|
38
|
-
resolve();
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
const deleteAll = (resource) => {
|
|
42
|
-
createResourceArrayIfNecessary(resource);
|
|
43
|
-
data[resource] = [];
|
|
44
|
-
return new Promise((resolve) => {
|
|
45
|
-
resolve();
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
const createResourceArrayIfNecessary = (resource) => {
|
|
49
|
-
if (!Object.hasOwn(data, resource))
|
|
50
|
-
data[resource] = [];
|
|
51
|
-
};
|
|
52
|
-
export const inMemoryQueries = {
|
|
53
|
-
getAll,
|
|
54
|
-
getById,
|
|
55
|
-
create,
|
|
56
|
-
update,
|
|
57
|
-
replace,
|
|
58
|
-
deleteById,
|
|
59
|
-
deleteAll,
|
|
60
|
-
};
|
|
61
|
-
//# sourceMappingURL=in-memory.js.map
|
package/queries/in-memory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../../src/queries/in-memory.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAA8B,EAAE,CAAA;AAE1C,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,EAAE;IAClC,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,EAAU,EAAE,EAAE;IAC/C,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAA;IAC1E,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,EAAE;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,IAAmB,EAAE,EAAE;IACvD,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;IAE7D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;IAErD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,CAAC,OAAO,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,IAAU,EAAE,EAAE;IAC9C,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA;IAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAA;IACzF,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,CAAC,WAAW,CAAC,CAAA;IACtB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,QAAgB,EAAE,IAAU,EAAE,EAAE;IAC/C,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,EAAU,EAAE,EAAE;IAClD,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACxE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;IACrC,8BAA8B,CAAC,QAAQ,CAAC,CAAA;IAExC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IACnB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,8BAA8B,GAAG,CAAC,QAAgB,EAAE,EAAE;IAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,UAAU;IACV,SAAS;CACV,CAAA"}
|
package/queries/mongo.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../../src/queries/mongo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,OAAO,EAAE,MAAM,SAAS,CAAA;AA8F3D,eAAO,MAAM,kBAAkB,qBAAsB,MAAM,YAc1D,CAAA"}
|
package/queries/mongo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../../src/queries/mongo.ts"],"names":[],"mappings":"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"}
|
package/queries/queries.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/queries/queries.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,qBAAsB,MAAM,GAAG,IAAI,8BAO5D,CAAA"}
|
package/queries/queries.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { inMemoryQueries } from './in-memory.js';
|
|
2
|
-
import { createMongoQueries } from './mongo.js';
|
|
3
|
-
export const createQueries = (connectionString) => {
|
|
4
|
-
if (!connectionString) {
|
|
5
|
-
return inMemoryQueries;
|
|
6
|
-
}
|
|
7
|
-
const mongoQueries = createMongoQueries(connectionString);
|
|
8
|
-
return mongoQueries;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=queries.js.map
|
package/queries/queries.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../src/queries/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,gBAA+B,EAAE,EAAE;IAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;IACzD,OAAO,YAAY,CAAA;AACrB,CAAC,CAAA"}
|
package/queries/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/queries/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AAE5C,MAAM,MAAM,OAAO,GAAG;IACpB,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC/D,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C,CAAA"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|