@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 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
@@ -23,3 +23,4 @@ export * from './useRule';
23
23
  export * from './useObjectRule';
24
24
  export * from './useBodyFile';
25
25
  export * from './usePath';
26
+ export * from './useRequestPlugin';
@@ -23,3 +23,4 @@ import './useRule/index.es6.js';
23
23
  import './useObjectRule/index.es6.js';
24
24
  import './useBodyFile/index.es6.js';
25
25
  import './usePath/index.es6.js';
26
+ import './useRequestPlugin/index.es6.js';
package/hooks/index.js CHANGED
@@ -25,4 +25,5 @@ require('./useRule/index.js');
25
25
  require('./useObjectRule/index.js');
26
26
  require('./useBodyFile/index.js');
27
27
  require('./usePath/index.js');
28
+ require('./useRequestPlugin/index.js');
28
29
 
@@ -0,0 +1 @@
1
+ export * from './useRequestPlugin';
@@ -0,0 +1 @@
1
+ export { useRequestPlugin } from './useRequestPlugin.es6.js';
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var useRequestPlugin = require('./useRequestPlugin.js');
6
+
7
+
8
+
9
+ exports.useRequestPlugin = useRequestPlugin.useRequestPlugin;
@@ -0,0 +1,2 @@
1
+ import { type RequestPlugin } from '../../types';
2
+ export declare function useRequestPlugin(listener: RequestPlugin): void;
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innet/server",
3
- "version": "2.0.0-alpha.6",
3
+ "version": "2.0.0-alpha.7",
4
4
  "description": "Create server-side application with innet",
5
5
  "main": "index.js",
6
6
  "module": "index.es6.js",
@@ -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);
@@ -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, requestPlugins, prefix } = useApi();
9
+ const { docs, prefix } = useApi();
10
10
  let swaggerResponse;
11
- const listener = (req, res) => {
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, requestPlugins, prefix } = useApi.useApi();
13
+ const { docs, prefix } = useApi.useApi();
14
14
  let swaggerResponse;
15
- const listener = (req, res) => {
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