temba 0.7.5 → 0.7.9
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/dist/config/index.js +11 -1
- package/dist/delay/middleware.js +16 -0
- package/dist/routes/get.js +27 -21
- package/dist/routes/index.js +3 -2
- package/dist/server.js +12 -2
- package/package.json +2 -1
- package/readme.md +11 -7
package/dist/config/index.js
CHANGED
|
@@ -21,7 +21,9 @@ var defaultConfig = {
|
|
|
21
21
|
logLevel: _logging.logLevels.DEBUG,
|
|
22
22
|
staticFolder: null,
|
|
23
23
|
apiPrefix: '',
|
|
24
|
-
connectionString: null
|
|
24
|
+
connectionString: null,
|
|
25
|
+
cacheControl: 'no-store',
|
|
26
|
+
delay: 2000
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
function initConfig(userConfig) {
|
|
@@ -50,5 +52,13 @@ function initConfig(userConfig) {
|
|
|
50
52
|
config.connectionString = userConfig.connectionString;
|
|
51
53
|
}
|
|
52
54
|
|
|
55
|
+
if (userConfig.cacheControl && userConfig.cacheControl.length > 0) {
|
|
56
|
+
config.cacheControl = userConfig.cacheControl;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (userConfig.delay && userConfig.delay.length !== 0 && typeof Number(userConfig.delay) === 'number' && Number(userConfig.delay) > 0 && Number(userConfig.delay) < 10000) {
|
|
60
|
+
config.delay = Number(userConfig.delay);
|
|
61
|
+
}
|
|
62
|
+
|
|
53
63
|
return config;
|
|
54
64
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDelayMiddleware = createDelayMiddleware;
|
|
7
|
+
|
|
8
|
+
var pause = require('connect-pause');
|
|
9
|
+
|
|
10
|
+
function createDelayMiddleware(delay) {
|
|
11
|
+
return function (req, res, next) {
|
|
12
|
+
console.log('Start delay...');
|
|
13
|
+
pause(delay)(req, res, next);
|
|
14
|
+
console.log('Delay finished!');
|
|
15
|
+
};
|
|
16
|
+
}
|
package/dist/routes/get.js
CHANGED
|
@@ -11,7 +11,7 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
11
11
|
|
|
12
12
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
13
|
|
|
14
|
-
function createGetRoutes(queries) {
|
|
14
|
+
function createGetRoutes(queries, cacheControl) {
|
|
15
15
|
function handleGetResource(_x, _x2, _x3) {
|
|
16
16
|
return _handleGetResource.apply(this, arguments);
|
|
17
17
|
}
|
|
@@ -28,7 +28,7 @@ function createGetRoutes(queries) {
|
|
|
28
28
|
_req$requestInfo = req.requestInfo, resourceName = _req$requestInfo.resourceName, id = _req$requestInfo.id;
|
|
29
29
|
|
|
30
30
|
if (!id) {
|
|
31
|
-
_context.next =
|
|
31
|
+
_context.next = 14;
|
|
32
32
|
break;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -37,38 +37,44 @@ function createGetRoutes(queries) {
|
|
|
37
37
|
|
|
38
38
|
case 5:
|
|
39
39
|
item = _context.sent;
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
|
|
41
|
+
if (item) {
|
|
42
|
+
_context.next = 10;
|
|
43
|
+
break;
|
|
42
44
|
}
|
|
43
|
-
_context.next = 13;
|
|
44
|
-
break;
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
res.status(404);
|
|
47
|
+
res.set('Cache-control', cacheControl);
|
|
48
|
+
return _context.abrupt("return", res.send());
|
|
49
|
+
|
|
50
|
+
case 10:
|
|
51
|
+
res.status(200);
|
|
52
|
+
res.set('Cache-control', cacheControl);
|
|
53
|
+
res.json(item);
|
|
54
|
+
return _context.abrupt("return", res.send());
|
|
55
|
+
|
|
56
|
+
case 14:
|
|
57
|
+
_context.next = 16;
|
|
48
58
|
return queries.getAll(resourceName);
|
|
49
59
|
|
|
50
|
-
case
|
|
60
|
+
case 16:
|
|
51
61
|
items = _context.sent;
|
|
52
|
-
res.status(200)
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
_context.
|
|
56
|
-
break;
|
|
62
|
+
res.status(200);
|
|
63
|
+
res.set('Cache-control', cacheControl);
|
|
64
|
+
res.json(items);
|
|
65
|
+
return _context.abrupt("return", res.send());
|
|
57
66
|
|
|
58
|
-
case
|
|
59
|
-
_context.prev =
|
|
67
|
+
case 23:
|
|
68
|
+
_context.prev = 23;
|
|
60
69
|
_context.t0 = _context["catch"](0);
|
|
61
70
|
return _context.abrupt("return", next(_context.t0));
|
|
62
71
|
|
|
63
|
-
case
|
|
64
|
-
return _context.abrupt("return", res.send());
|
|
65
|
-
|
|
66
|
-
case 19:
|
|
72
|
+
case 26:
|
|
67
73
|
case "end":
|
|
68
74
|
return _context.stop();
|
|
69
75
|
}
|
|
70
76
|
}
|
|
71
|
-
}, _callee, null, [[0,
|
|
77
|
+
}, _callee, null, [[0, 23]]);
|
|
72
78
|
}));
|
|
73
79
|
return _handleGetResource.apply(this, arguments);
|
|
74
80
|
}
|
package/dist/routes/index.js
CHANGED
|
@@ -29,9 +29,10 @@ var _express = _interopRequireDefault(require("express"));
|
|
|
29
29
|
function createResourceRouter(queries, _ref) {
|
|
30
30
|
var validateResources = _ref.validateResources,
|
|
31
31
|
resourceNames = _ref.resourceNames,
|
|
32
|
-
apiPrefix = _ref.apiPrefix
|
|
32
|
+
apiPrefix = _ref.apiPrefix,
|
|
33
|
+
cacheControl = _ref.cacheControl;
|
|
33
34
|
|
|
34
|
-
var _createGetRoutes = (0, _get.createGetRoutes)(queries),
|
|
35
|
+
var _createGetRoutes = (0, _get.createGetRoutes)(queries, cacheControl),
|
|
35
36
|
handleGetResource = _createGetRoutes.handleGetResource;
|
|
36
37
|
|
|
37
38
|
var _createPostRoutes = (0, _post.createPostRoutes)(queries),
|
package/dist/server.js
CHANGED
|
@@ -23,6 +23,8 @@ var _config = require("./config");
|
|
|
23
23
|
|
|
24
24
|
var _cors = _interopRequireDefault(require("cors"));
|
|
25
25
|
|
|
26
|
+
var _middleware2 = require("./delay/middleware");
|
|
27
|
+
|
|
26
28
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
29
|
|
|
28
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -31,13 +33,21 @@ function createServer(userConfig) {
|
|
|
31
33
|
var config = (0, _config.initConfig)(userConfig);
|
|
32
34
|
var queries = (0, _queries.createQueries)(config.connectionString);
|
|
33
35
|
var app = (0, _express["default"])();
|
|
34
|
-
app.use((0, _express.json)());
|
|
35
|
-
|
|
36
|
+
app.use((0, _express.json)()); // Add HTTP request logging.
|
|
37
|
+
|
|
38
|
+
app.use((0, _morgan["default"])('tiny')); // Enable CORS for all requests.
|
|
39
|
+
|
|
36
40
|
app.use((0, _cors["default"])({
|
|
37
41
|
origin: true,
|
|
38
42
|
credentials: true
|
|
39
43
|
}));
|
|
40
44
|
|
|
45
|
+
if (config.delay > 0) {
|
|
46
|
+
var delayMiddleware = (0, _middleware2.createDelayMiddleware)(config.delay);
|
|
47
|
+
app.use(delayMiddleware);
|
|
48
|
+
} // Serve a static folder, if configured.
|
|
49
|
+
|
|
50
|
+
|
|
41
51
|
if (config.staticFolder) {
|
|
42
52
|
app.use(_express["default"]["static"](config.staticFolder));
|
|
43
53
|
} // On the root URL (with apiPrefix if applicable) only a GET is allowed.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "temba",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.9",
|
|
4
4
|
"description": "Get a simple MongoDB REST API with zero coding in less than 30 seconds (seriously).",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@babel/runtime": "^7.15.4",
|
|
33
33
|
"@rakered/mongo": "^1.6.0",
|
|
34
|
+
"connect-pause": "^0.1.0",
|
|
34
35
|
"cors": "^2.8.5",
|
|
35
36
|
"express": "^4.17.1",
|
|
36
37
|
"morgan": "^1.10.0"
|
package/readme.md
CHANGED
|
@@ -146,7 +146,7 @@ If you have configured both an `apiPrefix` and a `staticFolder`, a `GET` on the
|
|
|
146
146
|
|
|
147
147
|
### Config settings overview
|
|
148
148
|
|
|
149
|
-
Configuring Temba is optional, it already works out of the box. None of the settings are
|
|
149
|
+
Configuring Temba is optional, it already works out of the box. None of the settings are used until you configure them:
|
|
150
150
|
|
|
151
151
|
```js
|
|
152
152
|
const config = {
|
|
@@ -154,18 +154,22 @@ const config = {
|
|
|
154
154
|
connectionString: 'mongodb://localhost:27017',
|
|
155
155
|
staticFolder: 'build',
|
|
156
156
|
apiPrefix: 'api',
|
|
157
|
+
cacheControl: 'public, max-age=300',
|
|
158
|
+
delay: 500,
|
|
157
159
|
}
|
|
158
160
|
const server = temba.create(config)
|
|
159
161
|
```
|
|
160
162
|
|
|
161
163
|
These are all the possible settings:
|
|
162
164
|
|
|
163
|
-
| Config setting | Description
|
|
164
|
-
| :----------------- |
|
|
165
|
-
| `resourceNames` | See [Allowing specific resources only](#allowing-specific-resources-only)
|
|
166
|
-
| `connectionString` | See [MongoDB](#mongodb)
|
|
167
|
-
| `staticFolder` | See [Static assets](#static-assets)
|
|
168
|
-
| `apiPrefix` | See [REST URIs prefixes](#rest-uris-prefixes)
|
|
165
|
+
| Config setting | Description |
|
|
166
|
+
| :----------------- | :----------------------------------------------------------------------------------------- |
|
|
167
|
+
| `resourceNames` | See [Allowing specific resources only](#allowing-specific-resources-only) |
|
|
168
|
+
| `connectionString` | See [MongoDB](#mongodb) |
|
|
169
|
+
| `staticFolder` | See [Static assets](#static-assets) |
|
|
170
|
+
| `apiPrefix` | See [REST URIs prefixes](#rest-uris-prefixes) |
|
|
171
|
+
| `cacheControl` | The `Cache-control` response header value for each GET request. |
|
|
172
|
+
| `delay` | After processing the request, the delay in milliseconds before the request should be sent. |
|
|
169
173
|
|
|
170
174
|
## Not supported (yet?)
|
|
171
175
|
|