@innet/server 2.0.0-alpha.12 → 2.0.0-alpha.13

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 (37) hide show
  1. package/README.md +103 -6
  2. package/handler/handler.d.ts +3 -1
  3. package/handler/handler.es6.js +2 -0
  4. package/handler/handler.js +2 -0
  5. package/hooks/useRequest/index.es6.js +1 -1
  6. package/hooks/useRequest/index.js +0 -1
  7. package/hooks/useRequest/useRequest.d.ts +1 -4
  8. package/hooks/useRequest/useRequest.es6.js +4 -4
  9. package/hooks/useRequest/useRequest.js +3 -4
  10. package/hooks/useResponse/index.es6.js +1 -1
  11. package/hooks/useResponse/index.js +0 -1
  12. package/hooks/useResponse/useResponse.d.ts +1 -4
  13. package/hooks/useResponse/useResponse.es6.js +4 -4
  14. package/hooks/useResponse/useResponse.js +3 -4
  15. package/hooks/useServer/useServer.es6.js +3 -1
  16. package/hooks/useServer/useServer.js +3 -1
  17. package/index.es6.js +3 -2
  18. package/index.js +3 -2
  19. package/package.json +1 -1
  20. package/plugins/main/api/api.d.ts +2 -0
  21. package/plugins/main/api/api.es6.js +17 -11
  22. package/plugins/main/api/api.js +17 -11
  23. package/plugins/main/index.d.ts +1 -0
  24. package/plugins/main/index.es6.js +1 -0
  25. package/plugins/main/index.js +1 -0
  26. package/plugins/main/preset/index.d.ts +1 -0
  27. package/plugins/main/preset/index.es6.js +1 -0
  28. package/plugins/main/preset/index.js +10 -0
  29. package/plugins/main/preset/preset.d.ts +7 -0
  30. package/plugins/main/preset/preset.es6.js +26 -0
  31. package/plugins/main/preset/preset.js +35 -0
  32. package/plugins/utils/dts/dts.d.ts +2 -1
  33. package/plugins/utils/dts/dts.es6.js +2 -2
  34. package/plugins/utils/dts/dts.js +2 -2
  35. package/utils/generateTypes/generateTypes.d.ts +1 -1
  36. package/utils/generateTypes/generateTypes.es6.js +13 -2
  37. package/utils/generateTypes/generateTypes.js +13 -2
package/README.md CHANGED
@@ -107,7 +107,8 @@ You will see a base Open API JSON structure.
107
107
  [← back](#index)
108
108
 
109
109
  [\<server>](#server)
110
- [\<api>](#api)
110
+ [\<api>](#api)
111
+ [\<preset>](#preset)
111
112
 
112
113
  ---
113
114
 
@@ -309,6 +310,75 @@ export default (
309
310
  )
310
311
  ```
311
312
 
313
+ #### include
314
+
315
+ A regular expression scopes the API.
316
+
317
+ *src/app.tsx*
318
+ ```typescript jsx
319
+ export default (
320
+ <server>
321
+ <api
322
+ include={/$\/(api|openapi)/}
323
+ />
324
+ </server>
325
+ )
326
+ ```
327
+
328
+ #### exclude
329
+
330
+ A regular expression does not scope the API.
331
+
332
+ *src/app.tsx*
333
+ ```typescript jsx
334
+ export default (
335
+ <server>
336
+ <api prefix='/api' />
337
+ <api prefix='/openapi' />
338
+ <api exclude={/$\/(api|openapi)/} />
339
+ </server>
340
+ )
341
+ ```
342
+
343
+ ### \<preset>
344
+
345
+ [← back](#main)
346
+
347
+ `<preset>` element MUST be placed in `<server>` element.
348
+ This element adds handling of each request.
349
+
350
+ *src/app.tsx*
351
+ ```typescript jsx
352
+ export default (
353
+ <server>
354
+ <preset>
355
+ <header
356
+ key='Test'
357
+ value='Ok'
358
+ />
359
+ </preset>
360
+ </server>
361
+ )
362
+ ```
363
+
364
+ Place the element inside [\<api>](#api) to preset it on the api requests scope.
365
+
366
+ *src/app.tsx*
367
+ ```typescript jsx
368
+ export default (
369
+ <server>
370
+ <api prefix='/api'>
371
+ <preset>
372
+ <header
373
+ key='Cache-Control'
374
+ value='no-cache, no-store, must-revalidate'
375
+ />
376
+ </preset>
377
+ </api>
378
+ </server>
379
+ )
380
+ ```
381
+
312
382
  ## Utils
313
383
 
314
384
  This section contains elements of utils.
@@ -404,16 +474,12 @@ export default (
404
474
  Use `<dts>` element to add types generation.
405
475
  `<dts>` element MUST be placed in `<api>` element.
406
476
 
407
- `<dts>` has a required prop of `path`. This is a path of api TypeScript types file, `<dts>` generates it.
408
-
409
477
  *src/app.tsx*
410
478
  ```typescript jsx
411
479
  export default (
412
480
  <server>
413
481
  <api>
414
- <dev>
415
- <dts path='src/api.d.ts' />
416
- </dev>
482
+ <dts />
417
483
  </api>
418
484
  </server>
419
485
  )
@@ -442,6 +508,37 @@ export function DeleteTodo () {
442
508
  }
443
509
  ```
444
510
 
511
+ #### path
512
+
513
+ This is a path of api TypeScript types file, `<dts>` generates it.
514
+ `'src/api.d.ts'` by default.
515
+
516
+ *src/app.tsx*
517
+ ```typescript jsx
518
+ export default (
519
+ <server>
520
+ <api>
521
+ <dts path='src/types.d.ts' />
522
+ </api>
523
+ </server>
524
+ )
525
+ ```
526
+
527
+ #### namespace
528
+
529
+ This prop changes namespace for generated types. `'Api'` by default.
530
+
531
+ *src/app.tsx*
532
+ ```typescript jsx
533
+ export default (
534
+ <server>
535
+ <api>
536
+ <dts namespace='API' />
537
+ </api>
538
+ </server>
539
+ )
540
+ ```
541
+
445
542
  ### \<blacklist>
446
543
 
447
544
  This element MUST be placed in `<api>` element.
@@ -1,6 +1,6 @@
1
1
  import { context, type ContextProps, slot, type SlotProps, slots, type SlotsProps } from '@innet/jsx';
2
2
  import { arraySync, async } from '@innet/utils';
3
- import { type ApiProps, type ArrayProps, type BinaryProps, blacklist, type BlacklistProps, type BodyProps, type BooleanProps, cms, type CmsProps, type ContactProps, type CookieProps, type DateProps, type DevProps, type DtsProps, type EndpointProps, type ErrorProps, type FallbackProps, type FieldProps, file, type FileProps, type HeaderProps, type HostProps, type IntegerProps, type LicenseProps, type NullProps, type NumberProps, type ObjectProps, type ParamProps, type ProdProps, protection, type ProtectionProps, type ProxyProps, type RedirectProps, type RequestProps, type ResponseProps, type ServerProps, type StringProps, type SuccessProps, type SwaggerProps, type TagProps, type TupleProps, type UuidProps, type VariableProps, whitelist, type WhitelistProps } from '../plugins';
3
+ import { type ApiProps, type ArrayProps, type BinaryProps, blacklist, type BlacklistProps, type BodyProps, type BooleanProps, cms, type CmsProps, type ContactProps, type CookieProps, type DateProps, type DevProps, type DtsProps, type EndpointProps, type ErrorProps, type FallbackProps, type FieldProps, file, type FileProps, type HeaderProps, type HostProps, type IntegerProps, type LicenseProps, type NullProps, type NumberProps, type ObjectProps, type ParamProps, preset, type PresetProps, type ProdProps, protection, type ProtectionProps, type ProxyProps, type RedirectProps, type RequestProps, type ResponseProps, type ServerProps, type StringProps, type SuccessProps, type SwaggerProps, type TagProps, type TupleProps, type UuidProps, type VariableProps, whitelist, type WhitelistProps } from '../plugins';
4
4
  export declare const arrayPlugins: (typeof arraySync)[];
5
5
  export declare const JSXPlugins: {
6
6
  api: import("innet").HandlerPlugin;
@@ -29,6 +29,7 @@ export declare const JSXPlugins: {
29
29
  number: import("innet").HandlerPlugin;
30
30
  object: import("innet").HandlerPlugin;
31
31
  param: import("innet").HandlerPlugin;
32
+ preset: typeof preset;
32
33
  prod: import("innet").HandlerPlugin;
33
34
  protection: typeof protection;
34
35
  proxy: import("innet").HandlerPlugin;
@@ -80,6 +81,7 @@ declare global {
80
81
  number: NumberProps;
81
82
  object: ObjectProps;
82
83
  param: ParamProps;
84
+ preset: PresetProps;
83
85
  prod: ProdProps;
84
86
  protection: ProtectionProps;
85
87
  proxy: ProxyProps;
@@ -27,6 +27,7 @@ import { nullPlugin } from '../plugins/schema/null/null.es6.js';
27
27
  import { number } from '../plugins/schema/number/number.es6.js';
28
28
  import { object } from '../plugins/schema/object/object.es6.js';
29
29
  import { param } from '../plugins/main/param/param.es6.js';
30
+ import { preset } from '../plugins/main/preset/preset.es6.js';
30
31
  import { prod } from '../plugins/utils/prod/prod.es6.js';
31
32
  import { protection } from '../plugins/utils/protection/protection.es6.js';
32
33
  import { proxy } from '../plugins/request/proxy/proxy.es6.js';
@@ -74,6 +75,7 @@ const JSXPlugins = {
74
75
  number,
75
76
  object,
76
77
  param,
78
+ preset,
77
79
  prod,
78
80
  protection,
79
81
  proxy,
@@ -31,6 +31,7 @@ var _null = require('../plugins/schema/null/null.js');
31
31
  var number = require('../plugins/schema/number/number.js');
32
32
  var object = require('../plugins/schema/object/object.js');
33
33
  var param = require('../plugins/main/param/param.js');
34
+ var preset = require('../plugins/main/preset/preset.js');
34
35
  var prod = require('../plugins/utils/prod/prod.js');
35
36
  var protection = require('../plugins/utils/protection/protection.js');
36
37
  var proxy = require('../plugins/request/proxy/proxy.js');
@@ -78,6 +79,7 @@ const JSXPlugins = {
78
79
  number: number.number,
79
80
  object: object.object,
80
81
  param: param.param,
82
+ preset: preset.preset,
81
83
  prod: prod.prod,
82
84
  protection: protection.protection,
83
85
  proxy: proxy.proxy,
@@ -1 +1 @@
1
- export { requestContext, useRequest } from './useRequest.es6.js';
1
+ export { useRequest } from './useRequest.es6.js';
@@ -6,5 +6,4 @@ var useRequest = require('./useRequest.js');
6
6
 
7
7
 
8
8
 
9
- exports.requestContext = useRequest.requestContext;
10
9
  exports.useRequest = useRequest.useRequest;
@@ -1,5 +1,2 @@
1
1
  /// <reference types="node" />
2
- import { Context } from '@innet/jsx';
3
- import { type IncomingMessage } from 'http';
4
- export declare const requestContext: Context<IncomingMessage, IncomingMessage | undefined>;
5
- export declare function useRequest(): IncomingMessage | undefined;
2
+ export declare function useRequest(): import("http").IncomingMessage;
@@ -1,8 +1,8 @@
1
- import { Context, useContext } from '@innet/jsx';
1
+ import '../useAction/index.es6.js';
2
+ import { useAction } from '../useAction/useAction.es6.js';
2
3
 
3
- const requestContext = new Context();
4
4
  function useRequest() {
5
- return useContext(requestContext);
5
+ return useAction().req;
6
6
  }
7
7
 
8
- export { requestContext, useRequest };
8
+ export { useRequest };
@@ -2,12 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var jsx = require('@innet/jsx');
5
+ require('../useAction/index.js');
6
+ var useAction = require('../useAction/useAction.js');
6
7
 
7
- const requestContext = new jsx.Context();
8
8
  function useRequest() {
9
- return jsx.useContext(requestContext);
9
+ return useAction.useAction().req;
10
10
  }
11
11
 
12
- exports.requestContext = requestContext;
13
12
  exports.useRequest = useRequest;
@@ -1 +1 @@
1
- export { responseContext, useResponse } from './useResponse.es6.js';
1
+ export { useResponse } from './useResponse.es6.js';
@@ -6,5 +6,4 @@ var useResponse = require('./useResponse.js');
6
6
 
7
7
 
8
8
 
9
- exports.responseContext = useResponse.responseContext;
10
9
  exports.useResponse = useResponse.useResponse;
@@ -1,5 +1,2 @@
1
1
  /// <reference types="node" />
2
- import { Context } from '@innet/jsx';
3
- import { type ServerResponse } from 'http';
4
- export declare const responseContext: Context<ServerResponse<import("http").IncomingMessage>, ServerResponse<import("http").IncomingMessage> | undefined>;
5
- export declare function useResponse(): ServerResponse<import("http").IncomingMessage> | undefined;
2
+ export declare function useResponse(): import("http").ServerResponse<import("http").IncomingMessage>;
@@ -1,8 +1,8 @@
1
- import { Context, useContext } from '@innet/jsx';
1
+ import '../useAction/index.es6.js';
2
+ import { useAction } from '../useAction/useAction.es6.js';
2
3
 
3
- const responseContext = new Context();
4
4
  function useResponse() {
5
- return useContext(responseContext);
5
+ return useAction().res;
6
6
  }
7
7
 
8
- export { responseContext, useResponse };
8
+ export { useResponse };
@@ -2,12 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var jsx = require('@innet/jsx');
5
+ require('../useAction/index.js');
6
+ var useAction = require('../useAction/useAction.js');
6
7
 
7
- const responseContext = new jsx.Context();
8
8
  function useResponse() {
9
- return jsx.useContext(responseContext);
9
+ return useAction.useAction().res;
10
10
  }
11
11
 
12
- exports.responseContext = responseContext;
13
12
  exports.useResponse = useResponse;
@@ -1,10 +1,12 @@
1
1
  import { Context, useContext } from '@innet/jsx';
2
+ import '../useThrow/index.es6.js';
3
+ import { useThrow } from '../useThrow/useThrow.es6.js';
2
4
 
3
5
  const serverContext = new Context();
4
6
  function useServer() {
5
7
  const server = useContext(serverContext);
6
8
  if (!server) {
7
- throw Error('Use `useServer` in <server>');
9
+ useThrow('Use <{type}> in <server>');
8
10
  }
9
11
  return server;
10
12
  }
@@ -3,12 +3,14 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsx = require('@innet/jsx');
6
+ require('../useThrow/index.js');
7
+ var useThrow = require('../useThrow/useThrow.js');
6
8
 
7
9
  const serverContext = new jsx.Context();
8
10
  function useServer() {
9
11
  const server = jsx.useContext(serverContext);
10
12
  if (!server) {
11
- throw Error('Use `useServer` in <server>');
13
+ useThrow.useThrow('Use <{type}> in <server>');
12
14
  }
13
15
  return server;
14
16
  }
package/index.es6.js CHANGED
@@ -17,6 +17,7 @@ export { request } from './plugins/main/request/request.es6.js';
17
17
  export { param } from './plugins/main/param/param.es6.js';
18
18
  export { body } from './plugins/main/body/body.es6.js';
19
19
  export { fallback } from './plugins/main/fallback/fallback.es6.js';
20
+ export { preset, presetCondition } from './plugins/main/preset/preset.es6.js';
20
21
  export { object } from './plugins/schema/object/object.es6.js';
21
22
  export { field } from './plugins/schema/field/field.es6.js';
22
23
  export { number } from './plugins/schema/number/number.es6.js';
@@ -94,8 +95,8 @@ export { useOneElementError } from './hooks/useOneElementError/useOneElementErro
94
95
  export { schemaContext, useSchemaContext } from './hooks/useSchemaContext/useSchemaContext.es6.js';
95
96
  export { useSchemaType } from './hooks/useSchemaType/useSchemaType.es6.js';
96
97
  export { useNewSchema } from './hooks/useNewSchema/useNewSchema.es6.js';
97
- export { requestContext, useRequest } from './hooks/useRequest/useRequest.es6.js';
98
- export { responseContext, useResponse } from './hooks/useResponse/useResponse.es6.js';
98
+ export { useRequest } from './hooks/useRequest/useRequest.es6.js';
99
+ export { useResponse } from './hooks/useResponse/useResponse.es6.js';
99
100
  export { paramsContext, useParams } from './hooks/useParams/useParams.es6.js';
100
101
  export { useBody } from './hooks/useBody/useBody.es6.js';
101
102
  export { useSearch } from './hooks/useSearch/useSearch.es6.js';
package/index.js CHANGED
@@ -21,6 +21,7 @@ var request = require('./plugins/main/request/request.js');
21
21
  var param = require('./plugins/main/param/param.js');
22
22
  var body = require('./plugins/main/body/body.js');
23
23
  var fallback = require('./plugins/main/fallback/fallback.js');
24
+ var preset = require('./plugins/main/preset/preset.js');
24
25
  var object = require('./plugins/schema/object/object.js');
25
26
  var field = require('./plugins/schema/field/field.js');
26
27
  var number = require('./plugins/schema/number/number.js');
@@ -140,6 +141,8 @@ exports.request = request.request;
140
141
  exports.param = param.param;
141
142
  exports.body = body.body;
142
143
  exports.fallback = fallback.fallback;
144
+ exports.preset = preset.preset;
145
+ exports.presetCondition = preset.presetCondition;
143
146
  exports.object = object.object;
144
147
  exports.field = field.field;
145
148
  exports.number = number.number;
@@ -229,9 +232,7 @@ exports.schemaContext = useSchemaContext.schemaContext;
229
232
  exports.useSchemaContext = useSchemaContext.useSchemaContext;
230
233
  exports.useSchemaType = useSchemaType.useSchemaType;
231
234
  exports.useNewSchema = useNewSchema.useNewSchema;
232
- exports.requestContext = useRequest.requestContext;
233
235
  exports.useRequest = useRequest.useRequest;
234
- exports.responseContext = useResponse.responseContext;
235
236
  exports.useResponse = useResponse.useResponse;
236
237
  exports.paramsContext = useParams.paramsContext;
237
238
  exports.useParams = useParams.useParams;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innet/server",
3
- "version": "2.0.0-alpha.12",
3
+ "version": "2.0.0-alpha.13",
4
4
  "description": "Create server-side application with innet",
5
5
  "main": "index.js",
6
6
  "module": "index.es6.js",
@@ -18,5 +18,7 @@ export interface ApiProps {
18
18
  termsOfService?: string;
19
19
  /** URL path prefix scopes the API. */
20
20
  prefix?: string;
21
+ include?: RegExp;
22
+ exclude?: RegExp;
21
23
  }
22
24
  export declare const api: HandlerPlugin;
@@ -1,14 +1,14 @@
1
1
  import { __rest, __awaiter } from 'tslib';
2
2
  import innet, { useNewHandler, useApp } from 'innet';
3
3
  import { onDestroy } from 'watch-state';
4
+ import '../preset/index.es6.js';
4
5
  import '../../../hooks/index.es6.js';
5
6
  import '../../../utils/index.es6.js';
6
7
  import '../../../utils/rules/index.es6.js';
7
8
  import { useServer } from '../../../hooks/useServer/useServer.es6.js';
8
9
  import { apiContext } from '../../../hooks/useApi/useApi.es6.js';
10
+ import { presetCondition } from '../preset/preset.es6.js';
9
11
  import { Action } from '../../../utils/action/Action.es6.js';
10
- import { responseContext } from '../../../hooks/useResponse/useResponse.es6.js';
11
- import { requestContext } from '../../../hooks/useRequest/useRequest.es6.js';
12
12
  import { actionContext } from '../../../hooks/useAction/useAction.es6.js';
13
13
  import { JSONString } from '../../../utils/JSONString/JSONString.es6.js';
14
14
  import { RulesError } from '../../../utils/rules/helpers.es6.js';
@@ -19,7 +19,7 @@ const api = () => {
19
19
  const handler = useNewHandler();
20
20
  const { props = {}, children } = useApp();
21
21
  const { server } = useServer();
22
- const { prefix = '', title = '' } = props, rest = __rest(props, ["prefix", "title"]);
22
+ const { prefix = '', title = '', include, exclude } = props, rest = __rest(props, ["prefix", "title", "include", "exclude"]);
23
23
  const info = Object.assign(Object.assign({}, rest), { version: (_a = rest.version) !== null && _a !== void 0 ? _a : '0.0.0', title });
24
24
  const endpoints = {};
25
25
  const docs = {
@@ -29,7 +29,20 @@ const api = () => {
29
29
  };
30
30
  const requestPlugins = new Set();
31
31
  const context = { docs, endpoints, prefix, requestPlugins, refRules: {} };
32
+ const condition = action => {
33
+ const path = action.parsedUrl.path;
34
+ const url = path.endsWith('/') ? path.slice(0, -1) : path;
35
+ if (!url.startsWith(prefix) || (exclude === null || exclude === void 0 ? void 0 : exclude.test(url))) {
36
+ return false;
37
+ }
38
+ if (include && !include.test(url)) {
39
+ return false;
40
+ }
41
+ return true;
42
+ };
32
43
  apiContext.set(handler, context);
44
+ presetCondition.set(handler, condition);
45
+ innet(children, handler);
33
46
  const listener = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
34
47
  var _b, _c, _d, _e, _f, _g;
35
48
  if (res.writableEnded)
@@ -37,7 +50,7 @@ const api = () => {
37
50
  const action = new Action(req, res);
38
51
  const path = action.parsedUrl.path;
39
52
  const url = path.endsWith('/') ? path.slice(0, -1) : path;
40
- if (!url.startsWith(prefix)) {
53
+ if (!condition(action)) {
41
54
  return;
42
55
  }
43
56
  for (const requestPlugin of requestPlugins) {
@@ -45,8 +58,6 @@ const api = () => {
45
58
  if (!result)
46
59
  continue;
47
60
  const newHandler = Object.create(handler);
48
- responseContext.set(newHandler, res);
49
- requestContext.set(newHandler, req);
50
61
  actionContext.set(newHandler, action);
51
62
  innet(result, newHandler);
52
63
  return;
@@ -132,8 +143,6 @@ const api = () => {
132
143
  return true;
133
144
  }
134
145
  const newHandler = Object.create(runEndpoint.handler);
135
- responseContext.set(newHandler, res);
136
- requestContext.set(newHandler, req);
137
146
  paramsContext.set(newHandler, params);
138
147
  actionContext.set(newHandler, action);
139
148
  innet(runEndpoint.content, newHandler);
@@ -167,8 +176,6 @@ const api = () => {
167
176
  }
168
177
  if (context.fallback) {
169
178
  const newHandler = Object.create(context.fallback.handler);
170
- responseContext.set(newHandler, res);
171
- requestContext.set(newHandler, req);
172
179
  actionContext.set(newHandler, action);
173
180
  innet(context.fallback.children, newHandler);
174
181
  }
@@ -181,7 +188,6 @@ const api = () => {
181
188
  onDestroy(() => {
182
189
  server.off('request', listener);
183
190
  });
184
- innet(children, handler);
185
191
  };
186
192
 
187
193
  export { api };
@@ -5,14 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var tslib = require('tslib');
6
6
  var innet = require('innet');
7
7
  var watchState = require('watch-state');
8
+ require('../preset/index.js');
8
9
  require('../../../hooks/index.js');
9
10
  require('../../../utils/index.js');
10
11
  require('../../../utils/rules/index.js');
11
12
  var useServer = require('../../../hooks/useServer/useServer.js');
12
13
  var useApi = require('../../../hooks/useApi/useApi.js');
14
+ var preset = require('../preset/preset.js');
13
15
  var Action = require('../../../utils/action/Action.js');
14
- var useResponse = require('../../../hooks/useResponse/useResponse.js');
15
- var useRequest = require('../../../hooks/useRequest/useRequest.js');
16
16
  var useAction = require('../../../hooks/useAction/useAction.js');
17
17
  var JSONString = require('../../../utils/JSONString/JSONString.js');
18
18
  var helpers = require('../../../utils/rules/helpers.js');
@@ -27,7 +27,7 @@ const api = () => {
27
27
  const handler = innet.useNewHandler();
28
28
  const { props = {}, children } = innet.useApp();
29
29
  const { server } = useServer.useServer();
30
- const { prefix = '', title = '' } = props, rest = tslib.__rest(props, ["prefix", "title"]);
30
+ const { prefix = '', title = '', include, exclude } = props, rest = tslib.__rest(props, ["prefix", "title", "include", "exclude"]);
31
31
  const info = Object.assign(Object.assign({}, rest), { version: (_a = rest.version) !== null && _a !== void 0 ? _a : '0.0.0', title });
32
32
  const endpoints = {};
33
33
  const docs = {
@@ -37,7 +37,20 @@ const api = () => {
37
37
  };
38
38
  const requestPlugins = new Set();
39
39
  const context = { docs, endpoints, prefix, requestPlugins, refRules: {} };
40
+ const condition = action => {
41
+ const path = action.parsedUrl.path;
42
+ const url = path.endsWith('/') ? path.slice(0, -1) : path;
43
+ if (!url.startsWith(prefix) || (exclude === null || exclude === void 0 ? void 0 : exclude.test(url))) {
44
+ return false;
45
+ }
46
+ if (include && !include.test(url)) {
47
+ return false;
48
+ }
49
+ return true;
50
+ };
40
51
  useApi.apiContext.set(handler, context);
52
+ preset.presetCondition.set(handler, condition);
53
+ innet__default["default"](children, handler);
41
54
  const listener = (req, res) => tslib.__awaiter(void 0, void 0, void 0, function* () {
42
55
  var _b, _c, _d, _e, _f, _g;
43
56
  if (res.writableEnded)
@@ -45,7 +58,7 @@ const api = () => {
45
58
  const action = new Action.Action(req, res);
46
59
  const path = action.parsedUrl.path;
47
60
  const url = path.endsWith('/') ? path.slice(0, -1) : path;
48
- if (!url.startsWith(prefix)) {
61
+ if (!condition(action)) {
49
62
  return;
50
63
  }
51
64
  for (const requestPlugin of requestPlugins) {
@@ -53,8 +66,6 @@ const api = () => {
53
66
  if (!result)
54
67
  continue;
55
68
  const newHandler = Object.create(handler);
56
- useResponse.responseContext.set(newHandler, res);
57
- useRequest.requestContext.set(newHandler, req);
58
69
  useAction.actionContext.set(newHandler, action);
59
70
  innet__default["default"](result, newHandler);
60
71
  return;
@@ -140,8 +151,6 @@ const api = () => {
140
151
  return true;
141
152
  }
142
153
  const newHandler = Object.create(runEndpoint.handler);
143
- useResponse.responseContext.set(newHandler, res);
144
- useRequest.requestContext.set(newHandler, req);
145
154
  useParams.paramsContext.set(newHandler, params);
146
155
  useAction.actionContext.set(newHandler, action);
147
156
  innet__default["default"](runEndpoint.content, newHandler);
@@ -175,8 +184,6 @@ const api = () => {
175
184
  }
176
185
  if (context.fallback) {
177
186
  const newHandler = Object.create(context.fallback.handler);
178
- useResponse.responseContext.set(newHandler, res);
179
- useRequest.requestContext.set(newHandler, req);
180
187
  useAction.actionContext.set(newHandler, action);
181
188
  innet__default["default"](context.fallback.children, newHandler);
182
189
  }
@@ -189,7 +196,6 @@ const api = () => {
189
196
  watchState.onDestroy(() => {
190
197
  server.off('request', listener);
191
198
  });
192
- innet__default["default"](children, handler);
193
199
  };
194
200
 
195
201
  exports.api = api;
@@ -11,3 +11,4 @@ export * from './request';
11
11
  export * from './param';
12
12
  export * from './body';
13
13
  export * from './fallback';
14
+ export * from './preset';
@@ -11,3 +11,4 @@ import './request/index.es6.js';
11
11
  import './param/index.es6.js';
12
12
  import './body/index.es6.js';
13
13
  import './fallback/index.es6.js';
14
+ import './preset/index.es6.js';
@@ -13,4 +13,5 @@ require('./request/index.js');
13
13
  require('./param/index.js');
14
14
  require('./body/index.js');
15
15
  require('./fallback/index.js');
16
+ require('./preset/index.js');
16
17
 
@@ -0,0 +1 @@
1
+ export * from './preset';
@@ -0,0 +1 @@
1
+ export { preset, presetCondition } from './preset.es6.js';
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var preset = require('./preset.js');
6
+
7
+
8
+
9
+ exports.preset = preset.preset;
10
+ exports.presetCondition = preset.presetCondition;
@@ -0,0 +1,7 @@
1
+ import { Context } from '@innet/jsx';
2
+ import { Action } from '../../../utils';
3
+ export interface PresetProps {
4
+ }
5
+ export type PresetCondition = (action: Action) => boolean;
6
+ export declare const presetCondition: Context<PresetCondition, PresetCondition>;
7
+ export declare function preset(): void;
@@ -0,0 +1,26 @@
1
+ import innet, { useHandler } from 'innet';
2
+ import { Context, useChildren, useContext } from '@innet/jsx';
3
+ import '../../../hooks/index.es6.js';
4
+ import '../../../utils/index.es6.js';
5
+ import { useServer } from '../../../hooks/useServer/useServer.es6.js';
6
+ import { Action } from '../../../utils/action/Action.es6.js';
7
+ import { actionContext } from '../../../hooks/useAction/useAction.es6.js';
8
+
9
+ const presetCondition = new Context(() => true);
10
+ function preset() {
11
+ const { server } = useServer();
12
+ const handler = useHandler();
13
+ const children = useChildren();
14
+ const condition = useContext(presetCondition);
15
+ const listener = (req, res) => {
16
+ const action = new Action(req, res);
17
+ if (condition(action)) {
18
+ const newHandler = Object.create(handler);
19
+ actionContext.set(newHandler, action);
20
+ innet(children, newHandler);
21
+ }
22
+ };
23
+ server.addListener('request', listener);
24
+ }
25
+
26
+ export { preset, presetCondition };
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var innet = require('innet');
6
+ var jsx = require('@innet/jsx');
7
+ require('../../../hooks/index.js');
8
+ require('../../../utils/index.js');
9
+ var useServer = require('../../../hooks/useServer/useServer.js');
10
+ var Action = require('../../../utils/action/Action.js');
11
+ var useAction = require('../../../hooks/useAction/useAction.js');
12
+
13
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
+
15
+ var innet__default = /*#__PURE__*/_interopDefaultLegacy(innet);
16
+
17
+ const presetCondition = new jsx.Context(() => true);
18
+ function preset() {
19
+ const { server } = useServer.useServer();
20
+ const handler = innet.useHandler();
21
+ const children = jsx.useChildren();
22
+ const condition = jsx.useContext(presetCondition);
23
+ const listener = (req, res) => {
24
+ const action = new Action.Action(req, res);
25
+ if (condition(action)) {
26
+ const newHandler = Object.create(handler);
27
+ useAction.actionContext.set(newHandler, action);
28
+ innet__default["default"](children, newHandler);
29
+ }
30
+ };
31
+ server.addListener('request', listener);
32
+ }
33
+
34
+ exports.preset = preset;
35
+ exports.presetCondition = presetCondition;
@@ -1,5 +1,6 @@
1
1
  import { type HandlerPlugin } from 'innet';
2
2
  export interface DtsProps {
3
- path: string;
3
+ path?: string;
4
+ namespace?: string;
4
5
  }
5
6
  export declare const dts: HandlerPlugin;
@@ -6,9 +6,9 @@ import { useApi } from '../../../hooks/useApi/useApi.es6.js';
6
6
  import { generateTypes } from '../../../utils/generateTypes/generateTypes.es6.js';
7
7
 
8
8
  const dts = () => {
9
- const { path } = useProps();
9
+ const { path = 'src/api.d.ts', namespace } = useProps() || {};
10
10
  const { docs } = useApi();
11
- promises.writeFile(path, generateTypes(docs)).catch(e => {
11
+ promises.writeFile(path, generateTypes(docs, namespace)).catch(e => {
12
12
  console.error(e);
13
13
  });
14
14
  };
@@ -10,9 +10,9 @@ var useApi = require('../../../hooks/useApi/useApi.js');
10
10
  var generateTypes = require('../../../utils/generateTypes/generateTypes.js');
11
11
 
12
12
  const dts = () => {
13
- const { path } = jsx.useProps();
13
+ const { path = 'src/api.d.ts', namespace } = jsx.useProps() || {};
14
14
  const { docs } = useApi.useApi();
15
- fs.promises.writeFile(path, generateTypes.generateTypes(docs)).catch(e => {
15
+ fs.promises.writeFile(path, generateTypes.generateTypes(docs, namespace)).catch(e => {
16
16
  console.error(e);
17
17
  });
18
18
  };
@@ -1,3 +1,3 @@
1
1
  import { type Document, type SchemaObject } from '../../types';
2
2
  export declare function generateSchemaTypes(schema: SchemaObject, spaces?: number): string;
3
- export declare function generateTypes(docs: Document): string;
3
+ export declare function generateTypes(docs: Document, namespace?: string): string;
@@ -41,9 +41,20 @@ function generateSchemaTypes(schema, spaces = 2) {
41
41
  }
42
42
  return `${result}${space.slice(0, -2)}}\n`;
43
43
  }
44
- function generateTypes(docs) {
44
+ function generateTypes(docs, namespace = 'Api') {
45
45
  var _a;
46
- let result = 'declare namespace Api {\n export interface Bin {\n filename: string\n fieldName: string\n originalFilename: string\n path: string\n type: string\n disposition: string\n size: number\n extension?: string\n }\n';
46
+ let result = `declare namespace ${namespace} {
47
+ export interface Bin {
48
+ filename: string
49
+ fieldName: string
50
+ originalFilename: string
51
+ path: string
52
+ type: string
53
+ disposition: string
54
+ size: number
55
+ extension?: string
56
+ }
57
+ `;
47
58
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
48
59
  const paths = docs.paths;
49
60
  if (schemas) {
@@ -45,9 +45,20 @@ function generateSchemaTypes(schema, spaces = 2) {
45
45
  }
46
46
  return `${result}${space.slice(0, -2)}}\n`;
47
47
  }
48
- function generateTypes(docs) {
48
+ function generateTypes(docs, namespace = 'Api') {
49
49
  var _a;
50
- let result = 'declare namespace Api {\n export interface Bin {\n filename: string\n fieldName: string\n originalFilename: string\n path: string\n type: string\n disposition: string\n size: number\n extension?: string\n }\n';
50
+ let result = `declare namespace ${namespace} {
51
+ export interface Bin {
52
+ filename: string
53
+ fieldName: string
54
+ originalFilename: string
55
+ path: string
56
+ type: string
57
+ disposition: string
58
+ size: number
59
+ extension?: string
60
+ }
61
+ `;
51
62
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
52
63
  const paths = docs.paths;
53
64
  if (schemas) {