@innet/server 2.0.0-alpha.6 → 2.0.0-alpha.7
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 +46 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.es6.js +1 -0
- package/hooks/index.js +1 -0
- package/hooks/useRequestPlugin/index.d.ts +1 -0
- package/hooks/useRequestPlugin/index.es6.js +1 -0
- package/hooks/useRequestPlugin/index.js +9 -0
- package/hooks/useRequestPlugin/useRequestPlugin.d.ts +2 -0
- package/hooks/useRequestPlugin/useRequestPlugin.es6.js +13 -0
- package/hooks/useRequestPlugin/useRequestPlugin.js +17 -0
- package/index.es6.js +1 -0
- package/index.js +2 -0
- package/package.json +1 -1
- package/plugins/main/api/api.es6.js +4 -4
- package/plugins/main/api/api.js +4 -4
- package/plugins/utils/swagger/swagger.es6.js +3 -7
- package/plugins/utils/swagger/swagger.js +3 -7
package/README.md
CHANGED
|
@@ -3327,6 +3327,7 @@ Hook functions give you all features to control parent element functionality.
|
|
|
3327
3327
|
[useSearch](#usesearch)
|
|
3328
3328
|
[useBody](#usebody)
|
|
3329
3329
|
[useComponentName](#usecomponentname)
|
|
3330
|
+
[useRequestPlugin](#userequestplugin)
|
|
3330
3331
|
|
|
3331
3332
|
---
|
|
3332
3333
|
|
|
@@ -3522,6 +3523,51 @@ export function Component () {
|
|
|
3522
3523
|
}
|
|
3523
3524
|
```
|
|
3524
3525
|
|
|
3526
|
+
### useRequestPlugin
|
|
3527
|
+
|
|
3528
|
+
[← back](#hooks)
|
|
3529
|
+
|
|
3530
|
+
This hook adds a request plugin function.
|
|
3531
|
+
The function runs before check endpoints.
|
|
3532
|
+
If the function returns `true` the request handling stops, and you get full control over the request.
|
|
3533
|
+
|
|
3534
|
+
*src/SecretEndpoint.tsx*
|
|
3535
|
+
```typescript jsx
|
|
3536
|
+
import { useRequestPlugin } from '@innet/sever'
|
|
3537
|
+
|
|
3538
|
+
export function SecretEndpoint () {
|
|
3539
|
+
useRequestPlugin((req, res) => {
|
|
3540
|
+
if (req.url.startsWith('/secret-endpoint')) {
|
|
3541
|
+
res.statusCode = 200
|
|
3542
|
+
res.write('A secret message')
|
|
3543
|
+
res.end()
|
|
3544
|
+
return true
|
|
3545
|
+
}
|
|
3546
|
+
})
|
|
3547
|
+
}
|
|
3548
|
+
```
|
|
3549
|
+
|
|
3550
|
+
Then use the plugin in [\<api>](#api).
|
|
3551
|
+
|
|
3552
|
+
*src/app.tsx*
|
|
3553
|
+
```typescript jsx
|
|
3554
|
+
import { SecretEndpoint } from './SecretEndpoint'
|
|
3555
|
+
|
|
3556
|
+
export default (
|
|
3557
|
+
<server>
|
|
3558
|
+
<api>
|
|
3559
|
+
<fallback>
|
|
3560
|
+
<error />
|
|
3561
|
+
</fallback>
|
|
3562
|
+
<SecretEndpoint />
|
|
3563
|
+
</api>
|
|
3564
|
+
</server>
|
|
3565
|
+
)
|
|
3566
|
+
```
|
|
3567
|
+
|
|
3568
|
+
Any endpoint returns an error except for `/secret-endpoint`.
|
|
3569
|
+
Elements order does not matter.
|
|
3570
|
+
|
|
3525
3571
|
## Issues
|
|
3526
3572
|
If you find a bug or have a suggestion, please file an issue on [GitHub](https://github.com/d8corp/innet-server/issues).
|
|
3527
3573
|
|
package/hooks/index.d.ts
CHANGED
package/hooks/index.es6.js
CHANGED
package/hooks/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useRequestPlugin';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useRequestPlugin } from './useRequestPlugin.es6.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { onDestroy } from 'watch-state';
|
|
2
|
+
import '../useApi/index.es6.js';
|
|
3
|
+
import { useApi } from '../useApi/useApi.es6.js';
|
|
4
|
+
|
|
5
|
+
function useRequestPlugin(listener) {
|
|
6
|
+
const { requestPlugins } = useApi();
|
|
7
|
+
requestPlugins.add(listener);
|
|
8
|
+
onDestroy(() => {
|
|
9
|
+
requestPlugins.delete(listener);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { useRequestPlugin };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var watchState = require('watch-state');
|
|
6
|
+
require('../useApi/index.js');
|
|
7
|
+
var useApi = require('../useApi/useApi.js');
|
|
8
|
+
|
|
9
|
+
function useRequestPlugin(listener) {
|
|
10
|
+
const { requestPlugins } = useApi.useApi();
|
|
11
|
+
requestPlugins.add(listener);
|
|
12
|
+
watchState.onDestroy(() => {
|
|
13
|
+
requestPlugins.delete(listener);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.useRequestPlugin = useRequestPlugin;
|
package/index.es6.js
CHANGED
|
@@ -107,3 +107,4 @@ export { ruleContext, useRule, useSetRule } from './hooks/useRule/useRule.es6.js
|
|
|
107
107
|
export { objectRuleContext, useObjectRule } from './hooks/useObjectRule/useObjectRule.es6.js';
|
|
108
108
|
export { bodyFileContext, useBodyFile } from './hooks/useBodyFile/useBodyFile.es6.js';
|
|
109
109
|
export { usePath } from './hooks/usePath/usePath.es6.js';
|
|
110
|
+
export { useRequestPlugin } from './hooks/useRequestPlugin/useRequestPlugin.es6.js';
|
package/index.js
CHANGED
|
@@ -111,6 +111,7 @@ var useRule = require('./hooks/useRule/useRule.js');
|
|
|
111
111
|
var useObjectRule = require('./hooks/useObjectRule/useObjectRule.js');
|
|
112
112
|
var useBodyFile = require('./hooks/useBodyFile/useBodyFile.js');
|
|
113
113
|
var usePath = require('./hooks/usePath/usePath.js');
|
|
114
|
+
var useRequestPlugin = require('./hooks/useRequestPlugin/useRequestPlugin.js');
|
|
114
115
|
|
|
115
116
|
|
|
116
117
|
|
|
@@ -246,3 +247,4 @@ exports.useObjectRule = useObjectRule.useObjectRule;
|
|
|
246
247
|
exports.bodyFileContext = useBodyFile.bodyFileContext;
|
|
247
248
|
exports.useBodyFile = useBodyFile.useBodyFile;
|
|
248
249
|
exports.usePath = usePath.usePath;
|
|
250
|
+
exports.useRequestPlugin = useRequestPlugin.useRequestPlugin;
|
package/package.json
CHANGED
|
@@ -46,6 +46,10 @@ const api = () => {
|
|
|
46
46
|
if (!url.startsWith(prefix)) {
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
+
for (const requestPlugin of requestPlugins) {
|
|
50
|
+
if (requestPlugin(req, res))
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
49
53
|
const method = ((_c = (_b = req.method) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : 'get');
|
|
50
54
|
const rawSplitPath = url.slice(prefix.length).split('/').slice(1);
|
|
51
55
|
const splitPath = rawSplitPath.at(-1) ? rawSplitPath : rawSplitPath.slice(0, -1);
|
|
@@ -154,10 +158,6 @@ const api = () => {
|
|
|
154
158
|
}
|
|
155
159
|
}
|
|
156
160
|
}
|
|
157
|
-
for (const requestPlugin of requestPlugins) {
|
|
158
|
-
if (requestPlugin(req, res))
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
161
|
if (context.fallback) {
|
|
162
162
|
const newHandler = Object.create(context.fallback.handler);
|
|
163
163
|
responseContext.set(newHandler, res);
|
package/plugins/main/api/api.js
CHANGED
|
@@ -54,6 +54,10 @@ const api = () => {
|
|
|
54
54
|
if (!url.startsWith(prefix)) {
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
+
for (const requestPlugin of requestPlugins) {
|
|
58
|
+
if (requestPlugin(req, res))
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
57
61
|
const method = ((_c = (_b = req.method) === null || _b === void 0 ? void 0 : _b.toLowerCase()) !== null && _c !== void 0 ? _c : 'get');
|
|
58
62
|
const rawSplitPath = url.slice(prefix.length).split('/').slice(1);
|
|
59
63
|
const splitPath = rawSplitPath.at(-1) ? rawSplitPath : rawSplitPath.slice(0, -1);
|
|
@@ -162,10 +166,6 @@ const api = () => {
|
|
|
162
166
|
}
|
|
163
167
|
}
|
|
164
168
|
}
|
|
165
|
-
for (const requestPlugin of requestPlugins) {
|
|
166
|
-
if (requestPlugin(req, res))
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
169
|
if (context.fallback) {
|
|
170
170
|
const newHandler = Object.create(context.fallback.handler);
|
|
171
171
|
useResponse.responseContext.set(newHandler, res);
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { useProps } from '@innet/jsx';
|
|
2
|
-
import { onDestroy } from 'watch-state';
|
|
3
2
|
import '../../../hooks/index.es6.js';
|
|
4
3
|
import html from './swagger.html.es6.js';
|
|
5
4
|
import { useApi } from '../../../hooks/useApi/useApi.es6.js';
|
|
5
|
+
import { useRequestPlugin } from '../../../hooks/useRequestPlugin/useRequestPlugin.es6.js';
|
|
6
6
|
|
|
7
7
|
const swagger = () => {
|
|
8
8
|
const { path = '/swagger-ui' } = useProps() || {};
|
|
9
|
-
const { docs,
|
|
9
|
+
const { docs, prefix } = useApi();
|
|
10
10
|
let swaggerResponse;
|
|
11
|
-
|
|
11
|
+
useRequestPlugin((req, res) => {
|
|
12
12
|
if (req.url === prefix + path) {
|
|
13
13
|
if (!swaggerResponse) {
|
|
14
14
|
swaggerResponse = html.replace('spec: {},', `spec: ${JSON.stringify(docs)},`);
|
|
@@ -18,10 +18,6 @@ const swagger = () => {
|
|
|
18
18
|
res.end();
|
|
19
19
|
return true;
|
|
20
20
|
}
|
|
21
|
-
};
|
|
22
|
-
requestPlugins.add(listener);
|
|
23
|
-
onDestroy(() => {
|
|
24
|
-
requestPlugins.delete(listener);
|
|
25
21
|
});
|
|
26
22
|
};
|
|
27
23
|
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsx = require('@innet/jsx');
|
|
6
|
-
var watchState = require('watch-state');
|
|
7
6
|
require('../../../hooks/index.js');
|
|
8
7
|
var swagger$1 = require('./swagger.html.js');
|
|
9
8
|
var useApi = require('../../../hooks/useApi/useApi.js');
|
|
9
|
+
var useRequestPlugin = require('../../../hooks/useRequestPlugin/useRequestPlugin.js');
|
|
10
10
|
|
|
11
11
|
const swagger = () => {
|
|
12
12
|
const { path = '/swagger-ui' } = jsx.useProps() || {};
|
|
13
|
-
const { docs,
|
|
13
|
+
const { docs, prefix } = useApi.useApi();
|
|
14
14
|
let swaggerResponse;
|
|
15
|
-
|
|
15
|
+
useRequestPlugin.useRequestPlugin((req, res) => {
|
|
16
16
|
if (req.url === prefix + path) {
|
|
17
17
|
if (!swaggerResponse) {
|
|
18
18
|
swaggerResponse = swagger$1["default"].replace('spec: {},', `spec: ${JSON.stringify(docs)},`);
|
|
@@ -22,10 +22,6 @@ const swagger = () => {
|
|
|
22
22
|
res.end();
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
25
|
-
};
|
|
26
|
-
requestPlugins.add(listener);
|
|
27
|
-
watchState.onDestroy(() => {
|
|
28
|
-
requestPlugins.delete(listener);
|
|
29
25
|
});
|
|
30
26
|
};
|
|
31
27
|
|