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

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 (95) hide show
  1. package/README.md +457 -367
  2. package/handler/handler.d.ts +3 -3
  3. package/handler/handler.es6.js +2 -2
  4. package/handler/handler.js +2 -2
  5. package/hooks/index.d.ts +2 -1
  6. package/hooks/index.es6.js +2 -1
  7. package/hooks/index.js +2 -1
  8. package/hooks/useAction/useAction.es6.js +1 -1
  9. package/hooks/useAction/useAction.js +1 -1
  10. package/hooks/useApi/useApi.d.ts +1 -3
  11. package/hooks/useEndpoint/useEndpoint.es6.js +3 -1
  12. package/hooks/useEndpoint/useEndpoint.js +3 -1
  13. package/hooks/useRequest/index.es6.js +1 -1
  14. package/hooks/useRequest/index.js +0 -1
  15. package/hooks/useRequest/useRequest.d.ts +1 -4
  16. package/hooks/useRequest/useRequest.es6.js +4 -4
  17. package/hooks/useRequest/useRequest.js +3 -4
  18. package/hooks/useResponse/index.es6.js +1 -1
  19. package/hooks/useResponse/index.js +0 -1
  20. package/hooks/useResponse/useResponse.d.ts +1 -4
  21. package/hooks/useResponse/useResponse.es6.js +4 -4
  22. package/hooks/useResponse/useResponse.js +3 -4
  23. package/hooks/useServer/useServer.d.ts +1 -0
  24. package/hooks/useServer/useServer.es6.js +3 -1
  25. package/hooks/useServer/useServer.js +3 -1
  26. package/hooks/useServerPlugin/index.d.ts +1 -0
  27. package/hooks/useServerPlugin/index.es6.js +1 -0
  28. package/hooks/useServerPlugin/index.js +9 -0
  29. package/hooks/useServerPlugin/useServerPlugin.d.ts +2 -0
  30. package/hooks/useServerPlugin/useServerPlugin.es6.js +13 -0
  31. package/hooks/useServerPlugin/useServerPlugin.js +17 -0
  32. package/hooks/useServerPlugins/index.d.ts +1 -0
  33. package/hooks/useServerPlugins/index.es6.js +1 -0
  34. package/hooks/useServerPlugins/index.js +10 -0
  35. package/hooks/useServerPlugins/useServerPlugins.d.ts +4 -0
  36. package/hooks/useServerPlugins/useServerPlugins.es6.js +14 -0
  37. package/hooks/useServerPlugins/useServerPlugins.js +19 -0
  38. package/index.es6.js +5 -4
  39. package/index.js +7 -6
  40. package/package.json +1 -1
  41. package/plugins/main/api/api.d.ts +2 -0
  42. package/plugins/main/api/api.es6.js +44 -52
  43. package/plugins/main/api/api.js +43 -51
  44. package/plugins/main/endpoint/endpoint.es6.js +4 -1
  45. package/plugins/main/endpoint/endpoint.js +4 -1
  46. package/plugins/main/index.d.ts +1 -1
  47. package/plugins/main/index.es6.js +1 -1
  48. package/plugins/main/index.js +1 -1
  49. package/plugins/main/preset/index.d.ts +1 -0
  50. package/plugins/main/preset/index.es6.js +1 -0
  51. package/plugins/main/{fallback → preset}/index.js +2 -2
  52. package/plugins/main/preset/preset.d.ts +3 -0
  53. package/plugins/main/preset/preset.es6.js +13 -0
  54. package/plugins/main/preset/preset.js +21 -0
  55. package/plugins/main/request/request.es6.js +2 -13
  56. package/plugins/main/request/request.js +2 -13
  57. package/plugins/main/response/response.d.ts +1 -0
  58. package/plugins/main/response/response.es6.js +7 -7
  59. package/plugins/main/response/response.js +7 -7
  60. package/plugins/main/server/server.d.ts +3 -3
  61. package/plugins/main/server/server.es6.js +28 -6
  62. package/plugins/main/server/server.js +28 -6
  63. package/plugins/request/success/success.d.ts +1 -1
  64. package/plugins/request/success/success.es6.js +4 -4
  65. package/plugins/request/success/success.js +4 -4
  66. package/plugins/utils/blacklist/blacklist.es6.js +4 -3
  67. package/plugins/utils/blacklist/blacklist.js +4 -3
  68. package/plugins/utils/dts/dts.d.ts +2 -1
  69. package/plugins/utils/dts/dts.es6.js +2 -2
  70. package/plugins/utils/dts/dts.js +2 -2
  71. package/plugins/utils/protection/protection.es6.js +4 -2
  72. package/plugins/utils/protection/protection.js +4 -2
  73. package/plugins/utils/swagger/swagger.es6.js +5 -3
  74. package/plugins/utils/swagger/swagger.js +5 -3
  75. package/plugins/utils/whitelist/whitelist.es6.js +4 -2
  76. package/plugins/utils/whitelist/whitelist.js +4 -2
  77. package/types.d.ts +2 -9
  78. package/utils/action/Action.es6.js +12 -10
  79. package/utils/action/Action.js +12 -10
  80. package/utils/generateTypes/generateTypes.d.ts +2 -2
  81. package/utils/generateTypes/generateTypes.es6.js +40 -15
  82. package/utils/generateTypes/generateTypes.js +40 -15
  83. package/utils/getEndpoint/getEndpoint.es6.js +2 -2
  84. package/utils/getEndpoint/getEndpoint.js +2 -2
  85. package/hooks/useRequestPlugin/index.d.ts +0 -1
  86. package/hooks/useRequestPlugin/index.es6.js +0 -1
  87. package/hooks/useRequestPlugin/index.js +0 -9
  88. package/hooks/useRequestPlugin/useRequestPlugin.d.ts +0 -2
  89. package/hooks/useRequestPlugin/useRequestPlugin.es6.js +0 -13
  90. package/hooks/useRequestPlugin/useRequestPlugin.js +0 -17
  91. package/plugins/main/fallback/fallback.d.ts +0 -4
  92. package/plugins/main/fallback/fallback.es6.js +0 -19
  93. package/plugins/main/fallback/fallback.js +0 -23
  94. package/plugins/main/fallback/index.d.ts +0 -1
  95. package/plugins/main/fallback/index.es6.js +0 -1
package/README.md CHANGED
@@ -46,7 +46,7 @@ Customize
46
46
 
47
47
  [← back](#index)
48
48
 
49
- The simplest way to start working with `@innet/server`, it is `innetjs` usage.
49
+ The simplest way to start working with `@innet/server`, it is [innetjs](https://www.npmjs.com/package/innetjs) usage.
50
50
 
51
51
  ```shell
52
52
  npx innetjs init my-app -t api
@@ -77,6 +77,28 @@ innet(app, server)
77
77
 
78
78
  Here is a **Hello World** example:
79
79
 
80
+ *src/app.tsx*
81
+ ```typescript jsx
82
+ export default (
83
+ <server>
84
+ <request>
85
+ <success>
86
+ Hello World!
87
+ </success>
88
+ </request>
89
+ </server>
90
+ )
91
+ ```
92
+
93
+ *Use `npm start` to run this server.*
94
+
95
+ Open http://localhost:80
96
+ You will see the `Hello Word!` string.
97
+
98
+ ---
99
+
100
+ Here is the simplest [api](#api) example:
101
+
80
102
  *src/app.tsx*
81
103
  ```typescript jsx
82
104
  export default (
@@ -107,7 +129,9 @@ You will see a base Open API JSON structure.
107
129
  [← back](#index)
108
130
 
109
131
  [\<server>](#server)
110
- [\<api>](#api)
132
+ [\<api>](#api)
133
+ [\<request>](#request)
134
+ [\<preset>](#preset)
111
135
 
112
136
  ---
113
137
 
@@ -206,6 +230,19 @@ export default (
206
230
  )
207
231
  ```
208
232
 
233
+ #### onClose
234
+
235
+ Use `onClose` to handle server close action.
236
+
237
+ *src/app.tsx*
238
+ ```typescript jsx
239
+ export default (
240
+ <server
241
+ onClose={() => console.log('Close')}
242
+ />
243
+ )
244
+ ```
245
+
209
246
  ### \<api>
210
247
 
211
248
  [← back](#main)
@@ -309,6 +346,162 @@ export default (
309
346
  )
310
347
  ```
311
348
 
349
+ #### include
350
+
351
+ A regular expression scopes the API.
352
+
353
+ *src/app.tsx*
354
+ ```typescript jsx
355
+ export default (
356
+ <server>
357
+ <api
358
+ include={/^\/(api|openapi)/}
359
+ />
360
+ </server>
361
+ )
362
+ ```
363
+
364
+ #### exclude
365
+
366
+ A regular expression does not scope the API.
367
+
368
+ *src/app.tsx*
369
+ ```typescript jsx
370
+ export default (
371
+ <server>
372
+ <api prefix='/api' />
373
+ <api prefix='/openapi' />
374
+ <api exclude={/^\/(api|openapi)/} />
375
+ </server>
376
+ )
377
+ ```
378
+
379
+ ### \<request>
380
+
381
+ [← back](#main)
382
+
383
+ This element MUST be placed in [\<server>](#server) element.
384
+ It defines run-time call handler for parent element.
385
+
386
+ *src/app.tsx*
387
+ ```typescript jsx
388
+ export default (
389
+ <server>
390
+ <request>
391
+ <error status={404} />
392
+ </request>
393
+ </server>
394
+ )
395
+ ```
396
+ *Any request returns 404*
397
+
398
+ Place [\<request>](#request) in [\<api>](#api) to handle any unknown request in the [\<api>](#api).
399
+
400
+ *src/app.tsx*
401
+ ```typescript jsx
402
+ export default (
403
+ <server>
404
+ <api>
405
+ <request>
406
+ <error status={404} />
407
+ </request>
408
+ </api>
409
+ </server>
410
+ )
411
+ ```
412
+
413
+ Place [\<request>](#request) in [\<endpoint>](#endpoint) to handle the [\<endpoint>](#endpoint) request.
414
+
415
+ *src/app.tsx*
416
+ ```typescript jsx
417
+ export default (
418
+ <server>
419
+ <api>
420
+ <endpoint method='get' path='/my-endpoint'>
421
+ <request>
422
+ <success>
423
+ My Endpoint
424
+ </success>
425
+ </request>
426
+ </endpoint>
427
+ </api>
428
+ <request>
429
+ <success>
430
+ Any other request
431
+ </success>
432
+ </request>
433
+ </server>
434
+ )
435
+ ```
436
+
437
+ You can place a component inside [\<request>](#request).
438
+ The component will run when the request will be triggered.
439
+
440
+ *src/app.tsx*
441
+ ```typescript jsx
442
+ import { GetPartners } from './GetPartners'
443
+
444
+ export default (
445
+ <server>
446
+ <api>
447
+ <endpoint method='get' path='/partners'>
448
+ <request>
449
+ <GetPartners />
450
+ </request>
451
+ </endpoint>
452
+ </api>
453
+ </server>
454
+ )
455
+ ```
456
+
457
+ *src/GetPartners.tsx*
458
+ ```typescript jsx
459
+ export const GetPartners = () => (
460
+ <success>
461
+ {{partners: []}}
462
+ </success>
463
+ )
464
+ ```
465
+
466
+ ### \<preset>
467
+
468
+ [← back](#main)
469
+
470
+ `<preset>` element MUST be placed in `<server>` element.
471
+ This element adds handling of each request.
472
+
473
+ *src/app.tsx*
474
+ ```typescript jsx
475
+ export default (
476
+ <server>
477
+ <preset>
478
+ <header
479
+ key='Test'
480
+ value='Ok'
481
+ />
482
+ </preset>
483
+ </server>
484
+ )
485
+ ```
486
+
487
+ Place the element inside [\<api>](#api) to preset it on the api requests scope.
488
+
489
+ *src/app.tsx*
490
+ ```typescript jsx
491
+ export default (
492
+ <server>
493
+ <api prefix='/api'>
494
+ <preset>
495
+ <header
496
+ key='Cache-Control'
497
+ value='no-cache, no-store, must-revalidate'
498
+ />
499
+ </preset>
500
+ </api>
501
+ </server>
502
+ )
503
+ ```
504
+
312
505
  ## Utils
313
506
 
314
507
  This section contains elements of utils.
@@ -404,16 +597,12 @@ export default (
404
597
  Use `<dts>` element to add types generation.
405
598
  `<dts>` element MUST be placed in `<api>` element.
406
599
 
407
- `<dts>` has a required prop of `path`. This is a path of api TypeScript types file, `<dts>` generates it.
408
-
409
600
  *src/app.tsx*
410
601
  ```typescript jsx
411
602
  export default (
412
603
  <server>
413
604
  <api>
414
- <dev>
415
- <dts path='src/api.d.ts' />
416
- </dev>
605
+ <dts />
417
606
  </api>
418
607
  </server>
419
608
  )
@@ -442,6 +631,37 @@ export function DeleteTodo () {
442
631
  }
443
632
  ```
444
633
 
634
+ #### path
635
+
636
+ This is a path of api TypeScript types file, `<dts>` generates it.
637
+ `'src/api.d.ts'` by default.
638
+
639
+ *src/app.tsx*
640
+ ```typescript jsx
641
+ export default (
642
+ <server>
643
+ <api>
644
+ <dts path='src/types.d.ts' />
645
+ </api>
646
+ </server>
647
+ )
648
+ ```
649
+
650
+ #### namespace
651
+
652
+ This prop changes namespace for generated types. `'Api'` by default.
653
+
654
+ *src/app.tsx*
655
+ ```typescript jsx
656
+ export default (
657
+ <server>
658
+ <api>
659
+ <dts namespace='API' />
660
+ </api>
661
+ </server>
662
+ )
663
+ ```
664
+
445
665
  ### \<blacklist>
446
666
 
447
667
  This element MUST be placed in `<api>` element.
@@ -1375,6 +1595,26 @@ return (
1375
1595
  )
1376
1596
  ```
1377
1597
 
1598
+ #### type
1599
+ A media type of the `<response>`.
1600
+
1601
+ By default, `type` equals `'application/json'`.
1602
+
1603
+ *src/app.tsx*
1604
+ ```typescript jsx
1605
+ return (
1606
+ <server>
1607
+ <api>
1608
+ <endpoint method='get' path='/hello'>
1609
+ <response type='text/html'>
1610
+ Hello World!
1611
+ </response>
1612
+ </endpoint>
1613
+ </api>
1614
+ </server>
1615
+ )
1616
+ ```
1617
+
1378
1618
  ## Primitive Data
1379
1619
 
1380
1620
  [← back](#index)
@@ -2797,12 +3037,7 @@ Next elements relate to run-time action.
2797
3037
  This action calls on user request.
2798
3038
 
2799
3039
  [← back](#index)
2800
-
2801
- Parent
2802
- [\<fallback>](#fallback)
2803
- [\<request>](#request)
2804
-
2805
- Children
3040
+
2806
3041
  [\<success>](#success)
2807
3042
  [\<error>](#error)
2808
3043
  [\<proxy>](#proxy)
@@ -2814,94 +3049,6 @@ Children
2814
3049
 
2815
3050
  ---
2816
3051
 
2817
- ### \<fallback>
2818
-
2819
- [← back](#run-time)
2820
-
2821
- By default, `<api>` server returns 404 with empty body.
2822
- [\<fallback>](#fallback) element defines default server response.
2823
- This element MUST be placed in `<api>`.
2824
- You MUST use one [\<fallback>](#fallback) per `<api>`.
2825
- Can contain elements available inside [\<request>](#request).
2826
-
2827
- *src/app.tsx*
2828
- ```typescript jsx
2829
- export default (
2830
- <server>
2831
- <api>
2832
- <fallback>
2833
- <error
2834
- code='unknownEndpoint'
2835
- />
2836
- </fallback>
2837
- </api>
2838
- </server>
2839
- )
2840
- ```
2841
-
2842
- If you open the application on any URL except for `/`, you can see the next response.
2843
-
2844
- ```json
2845
- {
2846
- "error": "unknownEndpoint"
2847
- }
2848
- ```
2849
-
2850
- The next elements are placed in [\<request>](#request) or [\<fallback>](#fallback)
2851
-
2852
- ### \<request>
2853
-
2854
- [← back](#run-time)
2855
-
2856
- This element MUST be placed in `<endpoint>` element.
2857
- It defines run-time call handler for the endpoint.
2858
-
2859
- *src/app.tsx*
2860
- ```typescript jsx
2861
- export default (
2862
- <server>
2863
- <api>
2864
- <endpoint method='get' path='/partners'>
2865
- <request>
2866
- <success>
2867
- {{partners: []}}
2868
- </success>
2869
- </request>
2870
- </endpoint>
2871
- </api>
2872
- </server>
2873
- )
2874
- ```
2875
-
2876
- You can place a component inside it.
2877
- The component will run when the endpoint will be triggered.
2878
-
2879
- *src/app.tsx*
2880
- ```typescript jsx
2881
- import { GetPartners } from './GetPartners'
2882
-
2883
- export default (
2884
- <server>
2885
- <api>
2886
- <endpoint method='get' path='/partners'>
2887
- <request>
2888
- <GetPartners />
2889
- </request>
2890
- </endpoint>
2891
- </api>
2892
- </server>
2893
- )
2894
- ```
2895
-
2896
- *src/GetPartners.tsx*
2897
- ```typescript jsx
2898
- export const GetPartners = () => (
2899
- <success>
2900
- {{partners: []}}
2901
- </success>
2902
- )
2903
- ```
2904
-
2905
3052
  ### \<success>
2906
3053
 
2907
3054
  [← back](#run-time)
@@ -2912,11 +3059,9 @@ This is a base element to return a success data.
2912
3059
  ```typescript jsx
2913
3060
  export default (
2914
3061
  <server>
2915
- <api>
2916
- <fallback>
2917
- <success />
2918
- </fallback>
2919
- </api>
3062
+ <response>
3063
+ <success />
3064
+ </response>
2920
3065
  </server>
2921
3066
  )
2922
3067
  ```
@@ -2931,13 +3076,11 @@ const data = {...}
2931
3076
 
2932
3077
  export default (
2933
3078
  <server>
2934
- <api>
2935
- <fallback>
2936
- <success>
2937
- {data}
2938
- </success>
2939
- </fallback>
2940
- </api>
3079
+ <response>
3080
+ <success>
3081
+ {data}
3082
+ </success>
3083
+ </response>
2941
3084
  </server>
2942
3085
  )
2943
3086
  ```
@@ -2954,13 +3097,11 @@ const data = {...}
2954
3097
 
2955
3098
  export default (
2956
3099
  <server>
2957
- <api>
2958
- <fallback>
2959
- <success status='created'>
2960
- {data}
2961
- </success>
2962
- </fallback>
2963
- </api>
3100
+ <response>
3101
+ <success status='created'>
3102
+ {data}
3103
+ </success>
3104
+ </response>
2964
3105
  </server>
2965
3106
  )
2966
3107
  ```
@@ -2975,13 +3116,11 @@ const data = {...}
2975
3116
 
2976
3117
  export default (
2977
3118
  <server>
2978
- <api>
2979
- <fallback>
2980
- <success status={201}>
2981
- {data}
2982
- </success>
2983
- </fallback>
2984
- </api>
3119
+ <response>
3120
+ <success status={201}>
3121
+ {data}
3122
+ </success>
3123
+ </response>
2985
3124
  </server>
2986
3125
  )
2987
3126
  ```
@@ -2995,13 +3134,11 @@ By default, it checks children element to define the prop.
2995
3134
  ```typescript jsx
2996
3135
  export default (
2997
3136
  <server>
2998
- <api>
2999
- <fallback>
3000
- <success contentType='text/html'>
3001
- Hello World!
3002
- </success>
3003
- </fallback>
3004
- </api>
3137
+ <response>
3138
+ <success contentType='text/html'>
3139
+ Hello World!
3140
+ </success>
3141
+ </response>
3005
3142
  </server>
3006
3143
  )
3007
3144
  ```
@@ -3011,17 +3148,15 @@ export default (
3011
3148
  [← back](#run-time)
3012
3149
 
3013
3150
  Returns an error.
3014
- This element MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3151
+ This element MUST be placed in [\<request>](#request) or [\<response>](#response).
3015
3152
 
3016
3153
  *src/app.tsx*
3017
3154
  ```typescript jsx
3018
3155
  export default (
3019
3156
  <server>
3020
- <api>
3021
- <fallback>
3022
- <error />
3023
- </fallback>
3024
- </api>
3157
+ <response>
3158
+ <error />
3159
+ </response>
3025
3160
  </server>
3026
3161
  )
3027
3162
  ```
@@ -3034,13 +3169,11 @@ const data = {...}
3034
3169
 
3035
3170
  export default (
3036
3171
  <server>
3037
- <api>
3038
- <fallback>
3039
- <error>
3040
- {data}
3041
- </error>
3042
- </fallback>
3043
- </api>
3172
+ <response>
3173
+ <error>
3174
+ {data}
3175
+ </error>
3176
+ </response>
3044
3177
  </server>
3045
3178
  )
3046
3179
  ```
@@ -3056,13 +3189,11 @@ const data = {
3056
3189
 
3057
3190
  export default (
3058
3191
  <server>
3059
- <api>
3060
- <fallback>
3061
- <error status='notFound'>
3062
- {data}
3063
- </error>
3064
- </fallback>
3065
- </api>
3192
+ <response>
3193
+ <error status='notFound'>
3194
+ {data}
3195
+ </error>
3196
+ </response>
3066
3197
  </server>
3067
3198
  )
3068
3199
  ```
@@ -3077,13 +3208,11 @@ const data = {
3077
3208
 
3078
3209
  export default (
3079
3210
  <server>
3080
- <api>
3081
- <fallback>
3082
- <error status={404}>
3083
- {data}
3084
- </error>
3085
- </fallback>
3086
- </api>
3211
+ <response>
3212
+ <error status={404}>
3213
+ {data}
3214
+ </error>
3215
+ </response>
3087
3216
  </server>
3088
3217
  )
3089
3218
  ```
@@ -3111,15 +3240,13 @@ const data = {
3111
3240
 
3112
3241
  export default (
3113
3242
  <server>
3114
- <api>
3115
- <fallback>
3116
- <error
3117
- code='noUser'
3118
- status='notFound'>
3119
- {data}
3120
- </error>
3121
- </fallback>
3122
- </api>
3243
+ <response>
3244
+ <error
3245
+ code='noUser'
3246
+ status='notFound'>
3247
+ {data}
3248
+ </error>
3249
+ </response>
3123
3250
  </server>
3124
3251
  )
3125
3252
  ```
@@ -3147,7 +3274,7 @@ There are some default errors:
3147
3274
 
3148
3275
  [← back](#run-time)
3149
3276
 
3150
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3277
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3151
3278
 
3152
3279
  You can easy proxy endpoints to another server/service.
3153
3280
 
@@ -3163,10 +3290,10 @@ export default (
3163
3290
  <proxy to='https://...' />
3164
3291
  </request>
3165
3292
  </endpoint>
3166
- <fallback>
3167
- <proxy to='https://...' />
3168
- </fallback>
3169
3293
  </api>
3294
+ <response>
3295
+ <proxy to='https://...' />
3296
+ </response>
3170
3297
  </server>
3171
3298
  )
3172
3299
  ```
@@ -3175,7 +3302,7 @@ export default (
3175
3302
 
3176
3303
  [← back](#run-time)
3177
3304
 
3178
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3305
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3179
3306
 
3180
3307
  You can redirect users to another resource. It adds `Cache-Control` header by default.
3181
3308
 
@@ -3191,10 +3318,10 @@ export default (
3191
3318
  <redirect to='https://...' />
3192
3319
  </request>
3193
3320
  </endpoint>
3194
- <fallback>
3195
- <redirect to='https://...' />
3196
- </fallback>
3197
3321
  </api>
3322
+ <response>
3323
+ <redirect to='https://...' />
3324
+ </response>
3198
3325
  </server>
3199
3326
  )
3200
3327
  ```
@@ -3219,13 +3346,13 @@ export default (
3219
3346
  />
3220
3347
  </request>
3221
3348
  </endpoint>
3222
- <fallback>
3223
- <redirect
3224
- status={303}
3225
- to='https://...'
3226
- />
3227
- </fallback>
3228
3349
  </api>
3350
+ <response>
3351
+ <redirect
3352
+ status={303}
3353
+ to='https://...'
3354
+ />
3355
+ </response>
3229
3356
  </server>
3230
3357
  )
3231
3358
  ```
@@ -3234,7 +3361,7 @@ export default (
3234
3361
 
3235
3362
  [← back](#run-time)
3236
3363
 
3237
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3364
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3238
3365
 
3239
3366
  `<cms>` helps to return files from a folder by path. It checks files run-time on the server.
3240
3367
 
@@ -3242,11 +3369,9 @@ MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3242
3369
  ```typescript jsx
3243
3370
  export default (
3244
3371
  <server>
3245
- <api>
3246
- <fallback>
3247
- <cms />
3248
- </fallback>
3249
- </api>
3372
+ <response>
3373
+ <cms />
3374
+ </response>
3250
3375
  </server>
3251
3376
  )
3252
3377
  ```
@@ -3263,11 +3388,9 @@ You can change root folder by `dir` property.
3263
3388
  ```typescript jsx
3264
3389
  export default (
3265
3390
  <server>
3266
- <api>
3267
- <fallback>
3268
- <cms dir='src' />
3269
- </fallback>
3270
- </api>
3391
+ <response>
3392
+ <cms dir='src' />
3393
+ </response>
3271
3394
  </server>
3272
3395
  )
3273
3396
  ```
@@ -3284,9 +3407,9 @@ you get the index file in `src` folder.
3284
3407
  export default (
3285
3408
  <server>
3286
3409
  <api prefix='/src'>
3287
- <fallback>
3410
+ <response>
3288
3411
  <cms />
3289
- </fallback>
3412
+ </response>
3290
3413
  </api>
3291
3414
  </server>
3292
3415
  )
@@ -3302,9 +3425,9 @@ You can reduce the path for matching by prefix property of `<cms>`.
3302
3425
  export default (
3303
3426
  <server>
3304
3427
  <api prefix='/api'>
3305
- <fallback>
3428
+ <response>
3306
3429
  <cms prefix='/api' />
3307
- </fallback>
3430
+ </response>
3308
3431
  </api>
3309
3432
  </server>
3310
3433
  )
@@ -3320,13 +3443,11 @@ You can handle if a file was not found by children elements of `<cms>`.
3320
3443
  ```typescript jsx
3321
3444
  export default (
3322
3445
  <server>
3323
- <api prefix='/src'>
3324
- <fallback>
3325
- <cms>
3326
- <error status={404} />
3327
- </cms>
3328
- </fallback>
3329
- </api>
3446
+ <response>
3447
+ <cms>
3448
+ <error status={404} />
3449
+ </cms>
3450
+ </response>
3330
3451
  </server>
3331
3452
  )
3332
3453
  ```
@@ -3335,7 +3456,7 @@ export default (
3335
3456
 
3336
3457
  [← back](#run-time)
3337
3458
 
3338
- It returns a file. MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3459
+ It returns a file. MUST be placed in [\<request>](#request) or [\<response>](#response).
3339
3460
 
3340
3461
  It adds `Content-Length` and `Content-Type` automatically.
3341
3462
 
@@ -3345,13 +3466,9 @@ It has a REQUIRED property of `path`.
3345
3466
  ```typescript jsx
3346
3467
  export default (
3347
3468
  <server>
3348
- <api>
3349
- <fallback>
3350
- <file
3351
- path='package.json'
3352
- />
3353
- </fallback>
3354
- </api>
3469
+ <response>
3470
+ <file path='package.json' />
3471
+ </response>
3355
3472
  </server>
3356
3473
  )
3357
3474
  ```
@@ -3366,20 +3483,18 @@ You can handle if a file was not found by children elements of `<file>`.
3366
3483
  ```typescript jsx
3367
3484
  export default (
3368
3485
  <server>
3369
- <api prefix='/src'>
3370
- <fallback>
3371
- <file path='file_is_not_exist.txt'>
3372
- <error status={404} />
3373
- </file>
3374
- </fallback>
3375
- </api>
3486
+ <response>
3487
+ <file path='file_is_not_exist.txt'>
3488
+ <error status={404} />
3489
+ </file>
3490
+ </response>
3376
3491
  </server>
3377
3492
  )
3378
3493
  ```
3379
3494
 
3380
3495
  ### \<header>
3381
3496
 
3382
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3497
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3383
3498
 
3384
3499
  [← back](#run-time)
3385
3500
 
@@ -3389,22 +3504,20 @@ You can add an HTTP header into response by `<header>` element.
3389
3504
  ```typescript jsx
3390
3505
  export default (
3391
3506
  <server>
3392
- <api prefix='/src'>
3393
- <fallback>
3394
- <header
3395
- key='Cache-Control'
3396
- value='no-cache, no-store, must-revalidate'
3397
- />
3398
- <success />
3399
- </fallback>
3400
- </api>
3507
+ <response>
3508
+ <header
3509
+ key='Cache-Control'
3510
+ value='no-cache, no-store, must-revalidate'
3511
+ />
3512
+ <success />
3513
+ </response>
3401
3514
  </server>
3402
3515
  )
3403
3516
  ```
3404
3517
 
3405
3518
  ### \<cookie>
3406
3519
 
3407
- MUST be placed in [\<request>](#request) or [\<fallback>](#fallback).
3520
+ MUST be placed in [\<request>](#request) or [\<response>](#response).
3408
3521
 
3409
3522
  [← back](#run-time)
3410
3523
 
@@ -3414,18 +3527,16 @@ You can add/remove a cookie into response by `<cookie>` element.
3414
3527
  ```typescript jsx
3415
3528
  export default (
3416
3529
  <server>
3417
- <api prefix='/src'>
3418
- <fallback>
3419
- <cookie
3420
- key='token'
3421
- value='...'
3422
- />
3423
- <cookie
3424
- key='removedCookie'
3425
- />
3426
- <success />
3427
- </fallback>
3428
- </api>
3530
+ <response>
3531
+ <cookie
3532
+ key='token'
3533
+ value='...'
3534
+ />
3535
+ <cookie
3536
+ key='removedCookie'
3537
+ />
3538
+ <success />
3539
+ </response>
3429
3540
  </server>
3430
3541
  )
3431
3542
  ```
@@ -3439,16 +3550,14 @@ By default, no domain is set, and most clients will consider the cookie to apply
3439
3550
  ```typescript jsx
3440
3551
  export default (
3441
3552
  <server>
3442
- <api prefix='/src'>
3443
- <fallback>
3444
- <cookie
3445
- domain='.example.com'
3446
- key='token'
3447
- value='...'
3448
- />
3449
- <success />
3450
- </fallback>
3451
- </api>
3553
+ <response>
3554
+ <cookie
3555
+ domain='.example.com'
3556
+ key='token'
3557
+ value='...'
3558
+ />
3559
+ <success />
3560
+ </response>
3452
3561
  </server>
3453
3562
  )
3454
3563
  ```
@@ -3467,16 +3576,14 @@ Note the [cookie storage model specification](https://datatracker.ietf.org/doc/h
3467
3576
  ```typescript jsx
3468
3577
  export default (
3469
3578
  <server>
3470
- <api prefix='/src'>
3471
- <fallback>
3472
- <cookie
3473
- expires={new Date('2050-01-01')}
3474
- key='token'
3475
- value='...'
3476
- />
3477
- <success />
3478
- </fallback>
3479
- </api>
3579
+ <response>
3580
+ <cookie
3581
+ expires={new Date('2050-01-01')}
3582
+ key='token'
3583
+ value='...'
3584
+ />
3585
+ <success />
3586
+ </response>
3480
3587
  </server>
3481
3588
  )
3482
3589
  ```
@@ -3490,16 +3597,14 @@ Note be careful when setting this to true, as compliant clients will not allow c
3490
3597
  ```typescript jsx
3491
3598
  export default (
3492
3599
  <server>
3493
- <api prefix='/src'>
3494
- <fallback>
3495
- <cookie
3496
- httpOnly
3497
- key='token'
3498
- value='...'
3499
- />
3500
- <success />
3501
- </fallback>
3502
- </api>
3600
+ <response>
3601
+ <cookie
3602
+ httpOnly
3603
+ key='token'
3604
+ value='...'
3605
+ />
3606
+ <success />
3607
+ </response>
3503
3608
  </server>
3504
3609
  )
3505
3610
  ```
@@ -3513,17 +3618,15 @@ Note the [cookie storage model specification](https://datatracker.ietf.org/doc/h
3513
3618
  ```typescript jsx
3514
3619
  export default (
3515
3620
  <server>
3516
- <api prefix='/src'>
3517
- <fallback>
3518
- <cookie
3519
- httpOnly
3520
- maxAge={9999}
3521
- key='token'
3522
- value='...'
3523
- />
3524
- <success />
3525
- </fallback>
3526
- </api>
3621
+ <response>
3622
+ <cookie
3623
+ httpOnly
3624
+ maxAge={9999}
3625
+ key='token'
3626
+ value='...'
3627
+ />
3628
+ <success />
3629
+ </response>
3527
3630
  </server>
3528
3631
  )
3529
3632
  ```
@@ -3537,18 +3640,16 @@ By default, the path is considered the “default path”.
3537
3640
  ```typescript jsx
3538
3641
  export default (
3539
3642
  <server>
3540
- <api prefix='/src'>
3541
- <fallback>
3542
- <cookie
3543
- httpOnly
3544
- maxAge={9999}
3545
- path='/src'
3546
- key='token'
3547
- value='...'
3548
- />
3549
- <success />
3550
- </fallback>
3551
- </api>
3643
+ <response>
3644
+ <cookie
3645
+ httpOnly
3646
+ maxAge={9999}
3647
+ path='/src'
3648
+ key='token'
3649
+ value='...'
3650
+ />
3651
+ <success />
3652
+ </response>
3552
3653
  </server>
3553
3654
  )
3554
3655
  ```
@@ -3567,18 +3668,16 @@ note This is an attribute that has not yet been fully standardized, and may chan
3567
3668
  ```typescript jsx
3568
3669
  export default (
3569
3670
  <server>
3570
- <api prefix='/src'>
3571
- <fallback>
3572
- <cookie
3573
- httpOnly
3574
- priority='high'
3575
- path='/src'
3576
- key='token'
3577
- value='...'
3578
- />
3579
- <success />
3580
- </fallback>
3581
- </api>
3671
+ <response>
3672
+ <cookie
3673
+ httpOnly
3674
+ priority='high'
3675
+ path='/src'
3676
+ key='token'
3677
+ value='...'
3678
+ />
3679
+ <success />
3680
+ </response>
3582
3681
  </server>
3583
3682
  )
3584
3683
  ```
@@ -3600,19 +3699,17 @@ This also means many clients may ignore this attribute until they understand it.
3600
3699
  ```typescript jsx
3601
3700
  export default (
3602
3701
  <server>
3603
- <api prefix='/src'>
3604
- <fallback>
3605
- <cookie
3606
- httpOnly
3607
- sameSite
3608
- priority='high'
3609
- path='/src'
3610
- key='token'
3611
- value='...'
3612
- />
3613
- <success />
3614
- </fallback>
3615
- </api>
3702
+ <response>
3703
+ <cookie
3704
+ httpOnly
3705
+ sameSite
3706
+ priority='high'
3707
+ path='/src'
3708
+ key='token'
3709
+ value='...'
3710
+ />
3711
+ <success />
3712
+ </response>
3616
3713
  </server>
3617
3714
  )
3618
3715
  ```
@@ -3629,17 +3726,15 @@ Note be careful when setting this to true, as compliant clients will not send th
3629
3726
  ```typescript jsx
3630
3727
  export default (
3631
3728
  <server>
3632
- <api prefix='/src'>
3633
- <fallback>
3634
- <cookie
3635
- httpOnly
3636
- secure
3637
- key='token'
3638
- value='...'
3639
- />
3640
- <success />
3641
- </fallback>
3642
- </api>
3729
+ <response>
3730
+ <cookie
3731
+ httpOnly
3732
+ secure
3733
+ key='token'
3734
+ value='...'
3735
+ />
3736
+ <success />
3737
+ </response>
3643
3738
  </server>
3644
3739
  )
3645
3740
  ```
@@ -3672,14 +3767,12 @@ import { SetToken } from './SetToken'
3672
3767
 
3673
3768
  export default (
3674
3769
  <server>
3675
- <api prefix='/src'>
3676
- <fallback>
3677
- <SetToken
3678
- value='...'
3679
- />
3680
- <success />
3681
- </fallback>
3682
- </api>
3770
+ <response>
3771
+ <SetToken
3772
+ value='...'
3773
+ />
3774
+ <success />
3775
+ </response>
3683
3776
  </server>
3684
3777
  )
3685
3778
  ```
@@ -3704,7 +3797,7 @@ Real-time
3704
3797
  [useClientIp](#useclientip)
3705
3798
 
3706
3799
  Server start
3707
- [useRequestPlugin](#userequestplugin)
3800
+ [useServerPlugin](#useserverplugin)
3708
3801
 
3709
3802
  Both
3710
3803
  [useServer](#useserver)
@@ -3716,7 +3809,7 @@ Both
3716
3809
 
3717
3810
  [← back](#hooks)
3718
3811
 
3719
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3812
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3720
3813
  This hook returns current request instance.
3721
3814
 
3722
3815
  *src/Component.tsx*
@@ -3737,7 +3830,7 @@ export function Component () {
3737
3830
 
3738
3831
  [← back](#hooks)
3739
3832
 
3740
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3833
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3741
3834
  This hook returns current response instance.
3742
3835
 
3743
3836
  *src/Component.tsx*
@@ -3758,7 +3851,7 @@ export function Component () {
3758
3851
 
3759
3852
  [← back](#hooks)
3760
3853
 
3761
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3854
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3762
3855
  This hook returns current request headers object.
3763
3856
 
3764
3857
  *src/Component.tsx*
@@ -3777,7 +3870,7 @@ export function Component () {
3777
3870
 
3778
3871
  [← back](#hooks)
3779
3872
 
3780
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3873
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3781
3874
  This hook returns current request cookies object.
3782
3875
 
3783
3876
  *src/Component.tsx*
@@ -3796,7 +3889,7 @@ export function Component () {
3796
3889
 
3797
3890
  [← back](#hooks)
3798
3891
 
3799
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3892
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3800
3893
  This hook returns current request URL path as a `string`.
3801
3894
 
3802
3895
  *src/Component.tsx*
@@ -3815,7 +3908,7 @@ export function Component () {
3815
3908
 
3816
3909
  [← back](#hooks)
3817
3910
 
3818
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3911
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3819
3912
  This hook returns an object of URL params you set by [\<param>](#param).
3820
3913
 
3821
3914
  *src/Component.tsx*
@@ -3833,7 +3926,7 @@ export function Component () {
3833
3926
 
3834
3927
  [← back](#hooks)
3835
3928
 
3836
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3929
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3837
3930
  This hook returns an object of URL query params.
3838
3931
 
3839
3932
  *src/Component.tsx*
@@ -3851,7 +3944,7 @@ export function Component () {
3851
3944
 
3852
3945
  [← back](#hooks)
3853
3946
 
3854
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3947
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3855
3948
  This hook returns current request body.
3856
3949
 
3857
3950
  *src/Component.tsx*
@@ -3870,7 +3963,7 @@ export function Component () {
3870
3963
  [← back](#hooks)
3871
3964
 
3872
3965
  This hook returns request user IP.
3873
- This hook MUST be used in a component placed in [\<request>](#request) or [\<fallback>](#fallback).
3966
+ This hook MUST be used in a component placed in [\<request>](#request) or [\<response>](#response).
3874
3967
 
3875
3968
  *src/Component.tsx*
3876
3969
  ```typescript jsx
@@ -3883,7 +3976,7 @@ export function Component () {
3883
3976
  }
3884
3977
  ```
3885
3978
 
3886
- ### useRequestPlugin
3979
+ ### useServerPlugin
3887
3980
 
3888
3981
  [← back](#hooks)
3889
3982
 
@@ -3891,25 +3984,24 @@ This hook adds a request plugin function.
3891
3984
  The function runs before check endpoints.
3892
3985
  If the function returns `true` the request handling stops, and you get full control over the request.
3893
3986
 
3894
- This hook MUST be used in a component placed in [\<api>](#api).
3987
+ This hook MUST be used in a component placed in [\<server>](#server).
3895
3988
 
3896
3989
  *src/SecretEndpoint.tsx*
3897
3990
  ```typescript jsx
3898
- import { useRequestPlugin } from '@innet/sever'
3991
+ import { useRequestPlugin, useAction } from '@innet/sever'
3899
3992
 
3900
3993
  export function SecretEndpoint () {
3901
- useRequestPlugin((req, res) => {
3902
- if (req.url.startsWith('/secret-endpoint')) {
3903
- res.statusCode = 200
3904
- res.write('A secret message')
3905
- res.end()
3906
- return true
3994
+ useServerPlugin(() => {
3995
+ const action = useAction()
3996
+
3997
+ if (action.path.startsWith('/secret-endpoint')) {
3998
+ return <success>A secret message</success>
3907
3999
  }
3908
4000
  })
3909
4001
  }
3910
4002
  ```
3911
4003
 
3912
- Then use the plugin in [\<api>](#api).
4004
+ Then use the plugin in [\<server>](#server) or [\<api>](#api).
3913
4005
 
3914
4006
  *src/app.tsx*
3915
4007
  ```typescript jsx
@@ -3917,12 +4009,10 @@ import { SecretEndpoint } from './SecretEndpoint'
3917
4009
 
3918
4010
  export default (
3919
4011
  <server>
3920
- <api>
3921
- <fallback>
3922
- <error />
3923
- </fallback>
3924
- <SecretEndpoint />
3925
- </api>
4012
+ <SecretEndpoint />
4013
+ <response>
4014
+ <error />
4015
+ </response>
3926
4016
  </server>
3927
4017
  )
3928
4018
  ```