@innet/server 2.0.0-beta.16 → 2.0.0-beta.18

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/hooks/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './useBodyFile';
6
6
  export * from './useClientIp';
7
7
  export * from './useComponentName';
8
8
  export * from './useCookies';
9
+ export * from './useData';
9
10
  export * from './useEffect';
10
11
  export * from './useEndpoint';
11
12
  export * from './useHeaders';
@@ -6,6 +6,7 @@ import './useBodyFile/index.es6.js';
6
6
  import './useClientIp/index.es6.js';
7
7
  import './useComponentName/index.es6.js';
8
8
  import './useCookies/index.es6.js';
9
+ import './useData/index.es6.js';
9
10
  import './useEffect/index.es6.js';
10
11
  import './useEndpoint/index.es6.js';
11
12
  import './useHeaders/index.es6.js';
package/hooks/index.js CHANGED
@@ -8,6 +8,7 @@ require('./useBodyFile/index.js');
8
8
  require('./useClientIp/index.js');
9
9
  require('./useComponentName/index.js');
10
10
  require('./useCookies/index.js');
11
+ require('./useData/index.js');
11
12
  require('./useEffect/index.js');
12
13
  require('./useEndpoint/index.js');
13
14
  require('./useHeaders/index.js');
@@ -0,0 +1 @@
1
+ export * from './useData';
@@ -0,0 +1 @@
1
+ export { useData } from './useData.es6.js';
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var useData = require('./useData.js');
6
+
7
+
8
+
9
+ exports.useData = useData.useData;
@@ -0,0 +1,2 @@
1
+ import { type ApiEndpoints, type TEndpoint } from '../../types';
2
+ export declare function useData<F extends Exclude<keyof TEndpoint, 'response'>, D extends keyof ApiEndpoints>(from: F, path?: D): ApiEndpoints[D][F];
@@ -0,0 +1,23 @@
1
+ import '../useAction/index.es6.js';
2
+ import '../useEndpoint/index.es6.js';
3
+ import '../useThrow/index.es6.js';
4
+ import { useEndpoint } from '../useEndpoint/useEndpoint.es6.js';
5
+ import { useThrow } from '../useThrow/useThrow.es6.js';
6
+ import { useAction } from '../useAction/useAction.es6.js';
7
+
8
+ function useData(from, path) {
9
+ if (path) {
10
+ const endpoint = useEndpoint();
11
+ const endpointKey = `${endpoint.props.method.toUpperCase()}:${endpoint.props.path}`;
12
+ if (endpointKey !== path) {
13
+ useThrow(`<{type}> MUST be in <endpoint> of ${path}`);
14
+ }
15
+ }
16
+ const action = useAction();
17
+ if (!action) {
18
+ useThrow('<{type}> MUST be in <return> or <preset>');
19
+ }
20
+ return action[from];
21
+ }
22
+
23
+ export { useData };
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('../useAction/index.js');
6
+ require('../useEndpoint/index.js');
7
+ require('../useThrow/index.js');
8
+ var useEndpoint = require('../useEndpoint/useEndpoint.js');
9
+ var useThrow = require('../useThrow/useThrow.js');
10
+ var useAction = require('../useAction/useAction.js');
11
+
12
+ function useData(from, path) {
13
+ if (path) {
14
+ const endpoint = useEndpoint.useEndpoint();
15
+ const endpointKey = `${endpoint.props.method.toUpperCase()}:${endpoint.props.path}`;
16
+ if (endpointKey !== path) {
17
+ useThrow.useThrow(`<{type}> MUST be in <endpoint> of ${path}`);
18
+ }
19
+ }
20
+ const action = useAction.useAction();
21
+ if (!action) {
22
+ useThrow.useThrow('<{type}> MUST be in <return> or <preset>');
23
+ }
24
+ return action[from];
25
+ }
26
+
27
+ exports.useData = useData;
package/index.es6.js CHANGED
@@ -12,6 +12,7 @@ export { bodyFileContext, useBodyFile } from './hooks/useBodyFile/useBodyFile.es
12
12
  export { useClientIp } from './hooks/useClientIp/useClientIp.es6.js';
13
13
  export { useComponentName } from './hooks/useComponentName/useComponentName.es6.js';
14
14
  export { useCookies } from './hooks/useCookies/useCookies.es6.js';
15
+ export { useData } from './hooks/useData/useData.es6.js';
15
16
  export { useEffect } from './hooks/useEffect/useEffect.es6.js';
16
17
  export { endpointContext, useEndpoint } from './hooks/useEndpoint/useEndpoint.es6.js';
17
18
  export { useHeaders } from './hooks/useHeaders/useHeaders.es6.js';
package/index.js CHANGED
@@ -16,6 +16,7 @@ var useBodyFile = require('./hooks/useBodyFile/useBodyFile.js');
16
16
  var useClientIp = require('./hooks/useClientIp/useClientIp.js');
17
17
  var useComponentName = require('./hooks/useComponentName/useComponentName.js');
18
18
  var useCookies = require('./hooks/useCookies/useCookies.js');
19
+ var useData = require('./hooks/useData/useData.js');
19
20
  var useEffect = require('./hooks/useEffect/useEffect.js');
20
21
  var useEndpoint = require('./hooks/useEndpoint/useEndpoint.js');
21
22
  var useHeaders = require('./hooks/useHeaders/useHeaders.js');
@@ -144,6 +145,7 @@ exports.useBodyFile = useBodyFile.useBodyFile;
144
145
  exports.useClientIp = useClientIp.useClientIp;
145
146
  exports.useComponentName = useComponentName.useComponentName;
146
147
  exports.useCookies = useCookies.useCookies;
148
+ exports.useData = useData.useData;
147
149
  exports.useEffect = useEffect.useEffect;
148
150
  exports.endpointContext = useEndpoint.endpointContext;
149
151
  exports.useEndpoint = useEndpoint.useEndpoint;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@innet/server",
3
- "version": "2.0.0-beta.16",
3
+ "version": "2.0.0-beta.18",
4
4
  "description": "Create server-side application with innet",
5
5
  "main": "index.js",
6
6
  "module": "index.es6.js",
@@ -1,6 +1,7 @@
1
1
  import { type HandlerPlugin } from 'innet';
2
2
  import { type ErrorStatuses, type RedirectStatuses, type SuccessStatuses } from '../../request';
3
3
  export type StatusKey = ErrorStatuses | RedirectStatuses | SuccessStatuses;
4
+ export type ResponseStatus = 'default' | `${1 | 2 | 3 | 4 | 5}XX` | StatusKey | number;
4
5
  export interface ResponseProps {
5
6
  children?: any;
6
7
  /**
@@ -14,7 +15,7 @@ export interface ResponseProps {
14
15
  * For example, 2XX represents all response codes between [200-299].
15
16
  * Only the following range definitions are allowed: 1XX, 2XX, 3XX, 4XX, and 5XX.
16
17
  * */
17
- status?: 'default' | `${1 | 2 | 3 | 4 | 5}XX` | StatusKey | number;
18
+ status?: ResponseStatus;
18
19
  type?: string;
19
20
  }
20
21
  export declare const statuses: Record<StatusKey, number>;
package/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { OpenAPIV3_1 as API } from 'openapi-types';
2
2
  import type { ApiErrorValue } from './constants';
3
3
  import { type ServerPlugin } from './hooks';
4
+ import { type ResponseStatus } from './plugins';
4
5
  import { type Rule, type RulesErrors } from './utils/rules';
5
6
  export type TagObject = API.TagObject;
6
7
  export type Document = API.Document;
@@ -74,3 +75,28 @@ export interface ValuesSchemaProps<T> extends BaseSchemaProps<T> {
74
75
  value?: T;
75
76
  values?: SchemaValues<T>;
76
77
  }
78
+ export interface Bin {
79
+ disposition: string;
80
+ extension?: string;
81
+ fieldName: string;
82
+ filename: string;
83
+ originalFilename: string;
84
+ path: string;
85
+ size: number;
86
+ type: string;
87
+ }
88
+ export type TResponse = Record<ResponseStatus, unknown>;
89
+ export interface TEndpoint {
90
+ body?: unknown;
91
+ cookies?: Record<string, string>;
92
+ headers?: Record<string, string>;
93
+ params?: Record<string, unknown>;
94
+ response?: Record<string, TResponse>;
95
+ search?: Record<string, unknown>;
96
+ }
97
+ export interface ApiEndpoints {
98
+ [key: string]: TEndpoint;
99
+ }
100
+ export interface ApiSchemas {
101
+ [key: string]: unknown;
102
+ }
@@ -97,24 +97,15 @@ function generateSchemaTypes(schema, spaces = 2, lastChar = '\n') {
97
97
  }
98
98
  function generateTypes(docs, namespace = 'Api') {
99
99
  var _a;
100
- let result = `declare namespace ${namespace} {
101
- export interface Bin {
102
- filename: string
103
- fieldName: string
104
- originalFilename: string
105
- path: string
106
- type: string
107
- disposition: string
108
- size: number
109
- extension?: string
110
- }
100
+ let result = `import { Bin } from '@innet/server'
101
+ declare namespace ${namespace} {
111
102
  `;
112
103
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
113
104
  const paths = docs.paths;
114
105
  if (schemas) {
115
- result += ' namespace Schemas {\n';
106
+ result += ' export interface Schemas {\n';
116
107
  for (const name in schemas) {
117
- result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
108
+ result += ` ${name}: ${generateSchemaTypes(schemas[name], 6)}`;
118
109
  }
119
110
  result += ' }\n';
120
111
  }
@@ -143,23 +134,23 @@ function generateTypes(docs, namespace = 'Api') {
143
134
  params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
144
135
  }
145
136
  if (params.path) {
146
- result += ` Params: {\n${params.path} }\n`;
137
+ result += ` params: {\n${params.path} }\n`;
147
138
  }
148
139
  if (params.query) {
149
- result += ` Search: {\n${params.query} }\n`;
140
+ result += ` search: {\n${params.query} }\n`;
150
141
  }
151
142
  if (params.header) {
152
- result += ` Headers: {\n${params.header} }\n`;
143
+ result += ` headers: {\n${params.header} }\n`;
153
144
  }
154
145
  if (params.cookie) {
155
- result += ` Cookies: {\n${params.cookie} }\n`;
146
+ result += ` cookies: {\n${params.cookie} }\n`;
156
147
  }
157
148
  }
158
149
  if (requestBody) {
159
- result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
150
+ result += ` body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
160
151
  }
161
152
  if (responses) {
162
- result += ' Response: {\n';
153
+ result += ' response: {\n';
163
154
  for (const key in responses) {
164
155
  let multiple = false;
165
156
  const response = responses[key];
@@ -183,7 +174,14 @@ function generateTypes(docs, namespace = 'Api') {
183
174
  result += ' }\n';
184
175
  }
185
176
  }
186
- return result + ' }\n}';
177
+ const body = result + ' }\n}';
178
+ return `${body}
179
+
180
+ declare module '@innet/server' {
181
+ interface ApiEndpoints extends ${namespace}.Endpoints {}
182
+ interface ApiSchemas extends ${namespace}.Schemas {}
183
+ }
184
+ `;
187
185
  }
188
186
 
189
187
  export { generateSchemaTypes, generateTypes };
@@ -101,24 +101,15 @@ function generateSchemaTypes(schema, spaces = 2, lastChar = '\n') {
101
101
  }
102
102
  function generateTypes(docs, namespace = 'Api') {
103
103
  var _a;
104
- let result = `declare namespace ${namespace} {
105
- export interface Bin {
106
- filename: string
107
- fieldName: string
108
- originalFilename: string
109
- path: string
110
- type: string
111
- disposition: string
112
- size: number
113
- extension?: string
114
- }
104
+ let result = `import { Bin } from '@innet/server'
105
+ declare namespace ${namespace} {
115
106
  `;
116
107
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
117
108
  const paths = docs.paths;
118
109
  if (schemas) {
119
- result += ' namespace Schemas {\n';
110
+ result += ' export interface Schemas {\n';
120
111
  for (const name in schemas) {
121
- result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
112
+ result += ` ${name}: ${generateSchemaTypes(schemas[name], 6)}`;
122
113
  }
123
114
  result += ' }\n';
124
115
  }
@@ -147,23 +138,23 @@ function generateTypes(docs, namespace = 'Api') {
147
138
  params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
148
139
  }
149
140
  if (params.path) {
150
- result += ` Params: {\n${params.path} }\n`;
141
+ result += ` params: {\n${params.path} }\n`;
151
142
  }
152
143
  if (params.query) {
153
- result += ` Search: {\n${params.query} }\n`;
144
+ result += ` search: {\n${params.query} }\n`;
154
145
  }
155
146
  if (params.header) {
156
- result += ` Headers: {\n${params.header} }\n`;
147
+ result += ` headers: {\n${params.header} }\n`;
157
148
  }
158
149
  if (params.cookie) {
159
- result += ` Cookies: {\n${params.cookie} }\n`;
150
+ result += ` cookies: {\n${params.cookie} }\n`;
160
151
  }
161
152
  }
162
153
  if (requestBody) {
163
- result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
154
+ result += ` body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
164
155
  }
165
156
  if (responses) {
166
- result += ' Response: {\n';
157
+ result += ' response: {\n';
167
158
  for (const key in responses) {
168
159
  let multiple = false;
169
160
  const response = responses[key];
@@ -187,7 +178,14 @@ function generateTypes(docs, namespace = 'Api') {
187
178
  result += ' }\n';
188
179
  }
189
180
  }
190
- return result + ' }\n}';
181
+ const body = result + ' }\n}';
182
+ return `${body}
183
+
184
+ declare module '@innet/server' {
185
+ interface ApiEndpoints extends ${namespace}.Endpoints {}
186
+ interface ApiSchemas extends ${namespace}.Schemas {}
187
+ }
188
+ `;
191
189
  }
192
190
 
193
191
  exports.generateSchemaTypes = generateSchemaTypes;