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

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.17",
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,14 @@ export interface ValuesSchemaProps<T> extends BaseSchemaProps<T> {
74
75
  value?: T;
75
76
  values?: SchemaValues<T>;
76
77
  }
78
+ export type TResponse = Record<ResponseStatus, unknown>;
79
+ export interface TEndpoint {
80
+ body?: unknown;
81
+ cookies?: Record<string, string>;
82
+ headers?: Record<string, string>;
83
+ params?: Record<string, unknown>;
84
+ response?: Record<string, TResponse>;
85
+ search?: Record<string, unknown>;
86
+ }
87
+ export type ApiEndpoints = Record<string, TEndpoint>;
88
+ export type ApiSchemas = Record<string, unknown>;
@@ -112,9 +112,9 @@ function generateTypes(docs, namespace = 'Api') {
112
112
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
113
113
  const paths = docs.paths;
114
114
  if (schemas) {
115
- result += ' namespace Schemas {\n';
115
+ result += ' export interface Schemas {\n';
116
116
  for (const name in schemas) {
117
- result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
117
+ result += ` ${name}: ${generateSchemaTypes(schemas[name], 6)}`;
118
118
  }
119
119
  result += ' }\n';
120
120
  }
@@ -143,23 +143,23 @@ function generateTypes(docs, namespace = 'Api') {
143
143
  params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
144
144
  }
145
145
  if (params.path) {
146
- result += ` Params: {\n${params.path} }\n`;
146
+ result += ` params: {\n${params.path} }\n`;
147
147
  }
148
148
  if (params.query) {
149
- result += ` Search: {\n${params.query} }\n`;
149
+ result += ` search: {\n${params.query} }\n`;
150
150
  }
151
151
  if (params.header) {
152
- result += ` Headers: {\n${params.header} }\n`;
152
+ result += ` headers: {\n${params.header} }\n`;
153
153
  }
154
154
  if (params.cookie) {
155
- result += ` Cookies: {\n${params.cookie} }\n`;
155
+ result += ` cookies: {\n${params.cookie} }\n`;
156
156
  }
157
157
  }
158
158
  if (requestBody) {
159
- result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
159
+ result += ` body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
160
160
  }
161
161
  if (responses) {
162
- result += ' Response: {\n';
162
+ result += ' response: {\n';
163
163
  for (const key in responses) {
164
164
  let multiple = false;
165
165
  const response = responses[key];
@@ -183,7 +183,14 @@ function generateTypes(docs, namespace = 'Api') {
183
183
  result += ' }\n';
184
184
  }
185
185
  }
186
- return result + ' }\n}';
186
+ const body = result + ' }\n}';
187
+ return `${body}
188
+
189
+ declare module '@innet/server' {
190
+ type ApiEndpoints = ${namespace}.Endpoints
191
+ type ApiSchemas = ${namespace}.Schemas
192
+ }
193
+ `;
187
194
  }
188
195
 
189
196
  export { generateSchemaTypes, generateTypes };
@@ -116,9 +116,9 @@ function generateTypes(docs, namespace = 'Api') {
116
116
  const schemas = (_a = docs.components) === null || _a === void 0 ? void 0 : _a.schemas;
117
117
  const paths = docs.paths;
118
118
  if (schemas) {
119
- result += ' namespace Schemas {\n';
119
+ result += ' export interface Schemas {\n';
120
120
  for (const name in schemas) {
121
- result += ` export type ${name} = ${generateSchemaTypes(schemas[name], 6)}`;
121
+ result += ` ${name}: ${generateSchemaTypes(schemas[name], 6)}`;
122
122
  }
123
123
  result += ' }\n';
124
124
  }
@@ -147,23 +147,23 @@ function generateTypes(docs, namespace = 'Api') {
147
147
  params[param.in] += ` ${param.name}${splitter} ${generateSchemaTypes(param.schema)}`;
148
148
  }
149
149
  if (params.path) {
150
- result += ` Params: {\n${params.path} }\n`;
150
+ result += ` params: {\n${params.path} }\n`;
151
151
  }
152
152
  if (params.query) {
153
- result += ` Search: {\n${params.query} }\n`;
153
+ result += ` search: {\n${params.query} }\n`;
154
154
  }
155
155
  if (params.header) {
156
- result += ` Headers: {\n${params.header} }\n`;
156
+ result += ` headers: {\n${params.header} }\n`;
157
157
  }
158
158
  if (params.cookie) {
159
- result += ` Cookies: {\n${params.cookie} }\n`;
159
+ result += ` cookies: {\n${params.cookie} }\n`;
160
160
  }
161
161
  }
162
162
  if (requestBody) {
163
- result += ` Body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
163
+ result += ` body: ${generateSchemaTypes(requestBody.content['multipart/form-data'].schema, 8)}`;
164
164
  }
165
165
  if (responses) {
166
- result += ' Response: {\n';
166
+ result += ' response: {\n';
167
167
  for (const key in responses) {
168
168
  let multiple = false;
169
169
  const response = responses[key];
@@ -187,7 +187,14 @@ function generateTypes(docs, namespace = 'Api') {
187
187
  result += ' }\n';
188
188
  }
189
189
  }
190
- return result + ' }\n}';
190
+ const body = result + ' }\n}';
191
+ return `${body}
192
+
193
+ declare module '@innet/server' {
194
+ type ApiEndpoints = ${namespace}.Endpoints
195
+ type ApiSchemas = ${namespace}.Schemas
196
+ }
197
+ `;
191
198
  }
192
199
 
193
200
  exports.generateSchemaTypes = generateSchemaTypes;