vovk 3.0.0-draft.21 → 3.0.0-draft.210

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 (169) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +8 -96
  3. package/bin/index.mjs +8 -0
  4. package/{HttpException.d.ts → cjs/HttpException.d.ts} +2 -2
  5. package/{HttpException.js → cjs/HttpException.js} +3 -3
  6. package/cjs/JSONLinesResponse.d.ts +14 -0
  7. package/{StreamJSONResponse.js → cjs/JSONLinesResponse.js} +15 -10
  8. package/{Segment.d.ts → cjs/VovkApp.d.ts} +11 -10
  9. package/cjs/VovkApp.js +189 -0
  10. package/cjs/client/createRPC.d.ts +3 -0
  11. package/cjs/client/createRPC.js +87 -0
  12. package/{client → cjs/client}/defaultHandler.d.ts +1 -1
  13. package/cjs/client/defaultHandler.js +22 -0
  14. package/cjs/client/defaultStreamHandler.d.ts +4 -0
  15. package/{client → cjs/client}/defaultStreamHandler.js +11 -12
  16. package/cjs/client/fetcher.d.ts +13 -0
  17. package/cjs/client/fetcher.js +90 -0
  18. package/cjs/client/index.d.ts +3 -0
  19. package/cjs/client/index.js +8 -0
  20. package/cjs/client/types.d.ts +111 -0
  21. package/{createSegment.d.ts → cjs/createVovkApp.d.ts} +11 -10
  22. package/cjs/createVovkApp.js +132 -0
  23. package/cjs/index.d.ts +65 -0
  24. package/cjs/index.js +37 -0
  25. package/cjs/openapi/error.d.ts +2 -0
  26. package/cjs/openapi/error.js +100 -0
  27. package/cjs/openapi/generateFnName.d.ts +23 -0
  28. package/cjs/openapi/generateFnName.js +81 -0
  29. package/cjs/openapi/index.d.ts +12 -0
  30. package/cjs/openapi/index.js +21 -0
  31. package/cjs/openapi/openAPIToVovkSchema.d.ts +2 -0
  32. package/cjs/openapi/openAPIToVovkSchema.js +197 -0
  33. package/cjs/openapi/vovkSchemaToOpenAPI.d.ts +9 -0
  34. package/cjs/openapi/vovkSchemaToOpenAPI.js +237 -0
  35. package/cjs/types.d.ts +364 -0
  36. package/cjs/types.js +74 -0
  37. package/cjs/utils/camelCase.d.ts +6 -0
  38. package/cjs/utils/camelCase.js +37 -0
  39. package/cjs/utils/createCodeExamples.d.ts +19 -0
  40. package/cjs/utils/createCodeExamples.js +114 -0
  41. package/cjs/utils/createDecorator.d.ts +6 -0
  42. package/{createDecorator.js → cjs/utils/createDecorator.js} +22 -15
  43. package/cjs/utils/createLLMFunctions.d.ts +20 -0
  44. package/cjs/utils/createLLMFunctions.js +100 -0
  45. package/cjs/utils/generateStaticAPI.d.ts +4 -0
  46. package/cjs/utils/generateStaticAPI.js +30 -0
  47. package/cjs/utils/getSchema.d.ts +21 -0
  48. package/cjs/utils/getSchema.js +43 -0
  49. package/cjs/utils/multitenant.d.ts +24 -0
  50. package/cjs/utils/multitenant.js +170 -0
  51. package/cjs/utils/parseQuery.d.ts +25 -0
  52. package/cjs/utils/parseQuery.js +156 -0
  53. package/cjs/utils/reqForm.d.ts +2 -0
  54. package/cjs/utils/reqForm.js +33 -0
  55. package/{utils → cjs/utils}/reqMeta.d.ts +1 -2
  56. package/cjs/utils/reqQuery.d.ts +2 -0
  57. package/cjs/utils/reqQuery.js +10 -0
  58. package/cjs/utils/serializeQuery.d.ts +13 -0
  59. package/cjs/utils/serializeQuery.js +65 -0
  60. package/cjs/utils/setHandlerSchema.d.ts +4 -0
  61. package/cjs/utils/setHandlerSchema.js +15 -0
  62. package/cjs/utils/withStandard.d.ts +51 -0
  63. package/cjs/utils/withStandard.js +30 -0
  64. package/cjs/utils/withValidationLibrary.d.ts +49 -0
  65. package/cjs/utils/withValidationLibrary.js +123 -0
  66. package/mjs/HttpException.d.ts +7 -0
  67. package/mjs/HttpException.js +15 -0
  68. package/mjs/JSONLinesResponse.d.ts +14 -0
  69. package/mjs/JSONLinesResponse.js +59 -0
  70. package/mjs/VovkApp.d.ts +29 -0
  71. package/mjs/VovkApp.js +189 -0
  72. package/mjs/client/createRPC.d.ts +3 -0
  73. package/mjs/client/createRPC.js +87 -0
  74. package/mjs/client/defaultHandler.d.ts +2 -0
  75. package/mjs/client/defaultHandler.js +22 -0
  76. package/mjs/client/defaultStreamHandler.d.ts +4 -0
  77. package/mjs/client/defaultStreamHandler.js +81 -0
  78. package/mjs/client/fetcher.d.ts +13 -0
  79. package/mjs/client/fetcher.js +90 -0
  80. package/mjs/client/index.d.ts +3 -0
  81. package/mjs/client/index.js +8 -0
  82. package/mjs/client/types.d.ts +111 -0
  83. package/mjs/createVovkApp.d.ts +63 -0
  84. package/mjs/createVovkApp.js +132 -0
  85. package/mjs/index.d.ts +65 -0
  86. package/mjs/index.js +37 -0
  87. package/mjs/openapi/error.d.ts +2 -0
  88. package/mjs/openapi/error.js +100 -0
  89. package/mjs/openapi/generateFnName.d.ts +23 -0
  90. package/mjs/openapi/generateFnName.js +81 -0
  91. package/mjs/openapi/index.d.ts +12 -0
  92. package/mjs/openapi/index.js +21 -0
  93. package/mjs/openapi/openAPIToVovkSchema.d.ts +2 -0
  94. package/mjs/openapi/openAPIToVovkSchema.js +197 -0
  95. package/mjs/openapi/vovkSchemaToOpenAPI.d.ts +9 -0
  96. package/mjs/openapi/vovkSchemaToOpenAPI.js +237 -0
  97. package/mjs/types.d.ts +364 -0
  98. package/mjs/types.js +74 -0
  99. package/mjs/utils/camelCase.d.ts +6 -0
  100. package/mjs/utils/camelCase.js +37 -0
  101. package/mjs/utils/createCodeExamples.d.ts +19 -0
  102. package/mjs/utils/createCodeExamples.js +114 -0
  103. package/mjs/utils/createDecorator.d.ts +6 -0
  104. package/mjs/utils/createDecorator.js +45 -0
  105. package/mjs/utils/createLLMFunctions.d.ts +20 -0
  106. package/mjs/utils/createLLMFunctions.js +100 -0
  107. package/mjs/utils/generateStaticAPI.d.ts +4 -0
  108. package/mjs/utils/generateStaticAPI.js +30 -0
  109. package/mjs/utils/getSchema.d.ts +21 -0
  110. package/mjs/utils/getSchema.js +43 -0
  111. package/mjs/utils/multitenant.d.ts +24 -0
  112. package/mjs/utils/multitenant.js +170 -0
  113. package/mjs/utils/parseQuery.d.ts +25 -0
  114. package/mjs/utils/parseQuery.js +156 -0
  115. package/mjs/utils/reqForm.d.ts +2 -0
  116. package/mjs/utils/reqForm.js +33 -0
  117. package/mjs/utils/reqMeta.d.ts +2 -0
  118. package/mjs/utils/reqMeta.js +13 -0
  119. package/mjs/utils/reqQuery.d.ts +2 -0
  120. package/mjs/utils/reqQuery.js +10 -0
  121. package/mjs/utils/serializeQuery.d.ts +13 -0
  122. package/mjs/utils/serializeQuery.js +65 -0
  123. package/mjs/utils/setHandlerSchema.d.ts +4 -0
  124. package/mjs/utils/setHandlerSchema.js +15 -0
  125. package/mjs/utils/shim.d.ts +1 -0
  126. package/mjs/utils/shim.js +18 -0
  127. package/mjs/utils/withStandard.d.ts +51 -0
  128. package/mjs/utils/withStandard.js +30 -0
  129. package/mjs/utils/withValidationLibrary.d.ts +49 -0
  130. package/mjs/utils/withValidationLibrary.js +123 -0
  131. package/package.json +30 -5
  132. package/.npmignore +0 -2
  133. package/Segment.js +0 -182
  134. package/StreamJSONResponse.d.ts +0 -17
  135. package/client/clientizeController.d.ts +0 -4
  136. package/client/clientizeController.js +0 -92
  137. package/client/defaultFetcher.d.ts +0 -4
  138. package/client/defaultFetcher.js +0 -49
  139. package/client/defaultHandler.js +0 -21
  140. package/client/defaultStreamHandler.d.ts +0 -4
  141. package/client/index.d.ts +0 -4
  142. package/client/index.js +0 -5
  143. package/client/types.d.ts +0 -100
  144. package/createDecorator.d.ts +0 -4
  145. package/createSegment.js +0 -118
  146. package/generateStaticAPI.d.ts +0 -4
  147. package/generateStaticAPI.js +0 -18
  148. package/index.d.ts +0 -60
  149. package/index.js +0 -20
  150. package/types.d.ts +0 -155
  151. package/types.js +0 -65
  152. package/utils/getSchema.d.ts +0 -8
  153. package/utils/getSchema.js +0 -38
  154. package/utils/reqQuery.d.ts +0 -3
  155. package/utils/reqQuery.js +0 -25
  156. package/utils/setClientValidatorsForHandler.d.ts +0 -5
  157. package/utils/setClientValidatorsForHandler.js +0 -28
  158. package/worker/index.d.ts +0 -3
  159. package/worker/index.js +0 -7
  160. package/worker/promisifyWorker.d.ts +0 -2
  161. package/worker/promisifyWorker.js +0 -141
  162. package/worker/types.d.ts +0 -31
  163. package/worker/worker.d.ts +0 -1
  164. package/worker/worker.js +0 -43
  165. /package/{client → cjs/client}/types.js +0 -0
  166. /package/{utils → cjs/utils}/reqMeta.js +0 -0
  167. /package/{utils → cjs/utils}/shim.d.ts +0 -0
  168. /package/{utils → cjs/utils}/shim.js +0 -0
  169. /package/{worker → mjs/client}/types.js +0 -0
@@ -1,92 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports._clientizeController = exports.ARRAY_QUERY_KEY = void 0;
7
- const defaultFetcher_1 = __importDefault(require("./defaultFetcher"));
8
- const defaultHandler_1 = require("./defaultHandler");
9
- const defaultStreamHandler_1 = require("./defaultStreamHandler");
10
- exports.ARRAY_QUERY_KEY = '_vovkarr';
11
- const trimPath = (path) => path.trim().replace(/^\/|\/$/g, '');
12
- const getHandlerPath = (endpoint, params, query) => {
13
- let result = endpoint;
14
- for (const [key, value] of Object.entries(params ?? {})) {
15
- result = result.replace(`:${key}`, value);
16
- }
17
- const searchParams = new URLSearchParams();
18
- let hasQuery = false;
19
- const arrayKeys = [];
20
- for (const [key, value] of Object.entries(query ?? {})) {
21
- if (typeof value === 'undefined')
22
- continue;
23
- if (value instanceof Array) {
24
- arrayKeys.push(key);
25
- for (const val of value) {
26
- searchParams.append(key, val);
27
- }
28
- }
29
- else {
30
- searchParams.set(key, value);
31
- }
32
- hasQuery = true;
33
- }
34
- if (arrayKeys.length) {
35
- searchParams.set(exports.ARRAY_QUERY_KEY, arrayKeys.join(','));
36
- }
37
- return `${result}${hasQuery ? '?' : ''}${searchParams.toString()}`;
38
- };
39
- const _clientizeController = (controllerSchema, segmentName, options) => {
40
- const schema = controllerSchema;
41
- const client = {};
42
- if (!schema)
43
- throw new Error(`Unable to clientize. Controller schema is not provided`);
44
- if (!schema.handlers)
45
- throw new Error(`Unable to clientize. No schema for controller ${String(schema?.controllerName)}`);
46
- const controllerPrefix = trimPath(schema.prefix ?? '');
47
- const { fetcher: settingsFetcher = defaultFetcher_1.default } = options ?? {};
48
- for (const [staticMethodName, { path, httpMethod, validation }] of Object.entries(schema.handlers)) {
49
- const getEndpoint = ({ apiRoot, params, query, }) => {
50
- const mainPrefix = (apiRoot.startsWith('http://') || apiRoot.startsWith('https://') || apiRoot.startsWith('/') ? '' : '/') +
51
- (apiRoot.endsWith('/') ? apiRoot : `${apiRoot}/`) +
52
- (segmentName ? `${segmentName}/` : '');
53
- return mainPrefix + getHandlerPath([controllerPrefix, path].filter(Boolean).join('/'), params, query);
54
- };
55
- const handler = (input = {}) => {
56
- const fetcher = input.fetcher ?? settingsFetcher;
57
- const validate = async ({ body, query, endpoint }) => {
58
- await (input.validateOnClient ?? options?.validateOnClient)?.({ body, query, endpoint }, validation ?? {});
59
- };
60
- const internalOptions = {
61
- name: staticMethodName,
62
- httpMethod,
63
- getEndpoint,
64
- validate,
65
- defaultHandler: defaultHandler_1._defaultHandler,
66
- defaultStreamHandler: defaultStreamHandler_1._defaultStreamHandler,
67
- };
68
- const internalInput = {
69
- ...options?.defaultOptions,
70
- ...input,
71
- body: input.body ?? null,
72
- query: input.query ?? {},
73
- params: input.params ?? {},
74
- // TS workaround
75
- fetcher: undefined,
76
- validateOnClient: undefined,
77
- };
78
- delete internalInput.fetcher;
79
- delete internalInput.validateOnClient;
80
- if (!fetcher)
81
- throw new Error('Fetcher is not provided');
82
- const fetcherPromise = fetcher(internalOptions, internalInput);
83
- if (!(fetcherPromise instanceof Promise))
84
- return Promise.resolve(fetcherPromise);
85
- return input.transform ? fetcherPromise.then(input.transform) : fetcherPromise;
86
- };
87
- // @ts-expect-error TODO: Fix this
88
- client[staticMethodName] = handler;
89
- }
90
- return client;
91
- };
92
- exports._clientizeController = _clientizeController;
@@ -1,4 +0,0 @@
1
- import type { _VovkDefaultFetcherOptions as VovkDefaultFetcherOptions, _VovkClientFetcher as VovkClientFetcher } from './types';
2
- export declare const DEFAULT_ERROR_MESSAGE = "Unknown error at defaultFetcher";
3
- declare const defaultFetcher: VovkClientFetcher<VovkDefaultFetcherOptions>;
4
- export default defaultFetcher;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_ERROR_MESSAGE = void 0;
4
- const types_1 = require("../types");
5
- const HttpException_1 = require("../HttpException");
6
- exports.DEFAULT_ERROR_MESSAGE = 'Unknown error at defaultFetcher';
7
- // defaultFetcher uses HttpException class to throw errors of fake HTTP status 0 if client-side error occurs
8
- // For normal HTTP errors, it uses message and status code from the response of VovkErrorResponse type
9
- const defaultFetcher = async ({ httpMethod, getEndpoint, validate, defaultHandler, defaultStreamHandler }, { params, query, body, apiRoot = '/api', ...options }) => {
10
- const endpoint = getEndpoint({ apiRoot, params, query });
11
- if (!options.disableClientValidation) {
12
- try {
13
- await validate({ body, query, endpoint });
14
- }
15
- catch (e) {
16
- // if HttpException is thrown, rethrow it
17
- if (e instanceof HttpException_1._HttpException)
18
- throw e;
19
- // otherwise, throw HttpException with status 0
20
- throw new HttpException_1._HttpException(types_1._HttpStatus.NULL, e.message ?? exports.DEFAULT_ERROR_MESSAGE);
21
- }
22
- }
23
- const init = {
24
- method: httpMethod,
25
- ...options,
26
- };
27
- if (body instanceof FormData) {
28
- init.body = body;
29
- }
30
- else if (body) {
31
- init.body = JSON.stringify(body);
32
- }
33
- let response;
34
- try {
35
- response = await fetch(endpoint, init);
36
- }
37
- catch (e) {
38
- // handle network errors
39
- throw new HttpException_1._HttpException(types_1._HttpStatus.NULL, e?.message ?? exports.DEFAULT_ERROR_MESSAGE);
40
- }
41
- if (response.headers.get('content-type')?.includes('application/json')) {
42
- return defaultHandler(response);
43
- }
44
- if (response.headers.get('x-vovk-stream') === 'true') {
45
- return defaultStreamHandler(response);
46
- }
47
- return response;
48
- };
49
- exports.default = defaultFetcher;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._defaultHandler = exports.DEFAULT_ERROR_MESSAGE = void 0;
4
- const HttpException_1 = require("../HttpException");
5
- exports.DEFAULT_ERROR_MESSAGE = 'Unknown error at defaultHandler';
6
- const _defaultHandler = async (response) => {
7
- let result;
8
- try {
9
- result = await response.json();
10
- }
11
- catch (e) {
12
- // handle parsing errors
13
- throw new HttpException_1._HttpException(response.status, e?.message ?? exports.DEFAULT_ERROR_MESSAGE);
14
- }
15
- if (!response.ok) {
16
- // handle server errors
17
- throw new HttpException_1._HttpException(response.status, result?.message ?? exports.DEFAULT_ERROR_MESSAGE);
18
- }
19
- return result;
20
- };
21
- exports._defaultHandler = _defaultHandler;
@@ -1,4 +0,0 @@
1
- import type { _StreamAsyncIterator as StreamAsyncIterator } from './types';
2
- import '../utils/shim';
3
- export declare const DEFAULT_ERROR_MESSAGE = "Unknown error at defaultStreamHandler";
4
- export declare const _defaultStreamHandler: (response: Response) => Promise<StreamAsyncIterator<unknown>>;
package/client/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { _clientizeController as clientizeController } from './clientizeController';
2
- import type { _VovkClientFetcher as VovkClientFetcher, _VovkClientOptions as VovkClientOptions, _VovkDefaultFetcherOptions as VovkDefaultFetcherOptions } from './types';
3
- export { clientizeController };
4
- export type { VovkClientFetcher, VovkClientOptions, VovkDefaultFetcherOptions };
package/client/index.js DELETED
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.clientizeController = void 0;
4
- const clientizeController_1 = require("./clientizeController");
5
- Object.defineProperty(exports, "clientizeController", { enumerable: true, get: function () { return clientizeController_1._clientizeController; } });
package/client/types.d.ts DELETED
@@ -1,100 +0,0 @@
1
- import type { _KnownAny as KnownAny, _HttpMethod as HttpMethod, _ControllerStaticMethod, _VovkControllerBody, _VovkControllerQuery, _VovkControllerParams } from '../types';
2
- import { _StreamJSONResponse as StreamJSONResponse } from '../StreamJSONResponse';
3
- import type { NextResponse } from 'next/server';
4
- export type _StaticMethodInput<T extends _ControllerStaticMethod> = (_VovkControllerBody<T> extends undefined | void ? {
5
- body?: undefined;
6
- } : _VovkControllerBody<T> extends null ? {
7
- body?: null;
8
- } : {
9
- body: _VovkControllerBody<T>;
10
- }) & (_VovkControllerQuery<T> extends undefined | void ? {
11
- query?: undefined;
12
- } : {
13
- query: _VovkControllerQuery<T>;
14
- }) & (_VovkControllerParams<T> extends undefined | void ? {
15
- params?: undefined;
16
- } : {
17
- params: _VovkControllerParams<T>;
18
- });
19
- type ToPromise<T> = T extends PromiseLike<unknown> ? T : Promise<T>;
20
- export type _StreamAsyncIterator<T> = {
21
- status: number;
22
- [Symbol.dispose](): Promise<void> | void;
23
- [Symbol.asyncDispose](): Promise<void> | void;
24
- [Symbol.asyncIterator](): AsyncIterator<T>;
25
- cancel: () => Promise<void> | void;
26
- };
27
- type StaticMethodReturn<T extends _ControllerStaticMethod> = ReturnType<T> extends NextResponse<infer U> | Promise<NextResponse<infer U>> ? U : ReturnType<T> extends Response | Promise<Response> ? unknown : ReturnType<T>;
28
- type StaticMethodReturnPromise<T extends _ControllerStaticMethod> = ToPromise<StaticMethodReturn<T>>;
29
- type ClientMethod<T extends (...args: KnownAny[]) => void | object | StreamJSONResponse<STREAM> | Promise<StreamJSONResponse<STREAM>>, OPTS extends Record<string, KnownAny>, STREAM extends KnownAny = unknown> = <R>(options: (_StaticMethodInput<T> extends {
30
- body?: undefined | null;
31
- query?: undefined;
32
- params?: undefined;
33
- } ? unknown : Parameters<T>[0] extends void ? _StaticMethodInput<T>['params'] extends object ? {
34
- params: _StaticMethodInput<T>['params'];
35
- } : unknown : _StaticMethodInput<T>) & (Partial<OPTS & {
36
- transform: (staticMethodReturn: Awaited<StaticMethodReturn<T>>) => R;
37
- }> | void)) => ReturnType<T> extends Promise<StreamJSONResponse<infer U>> | StreamJSONResponse<infer U> | Iterator<infer U> | AsyncIterator<infer U> ? Promise<_StreamAsyncIterator<U>> : R extends object ? Promise<R> : StaticMethodReturnPromise<T>;
38
- type OmitNever<T> = {
39
- [K in keyof T as T[K] extends never ? never : K]: T[K];
40
- };
41
- type _VovkClientWithNever<T, OPTS extends {
42
- [key: string]: KnownAny;
43
- }> = {
44
- [K in keyof T]: T[K] extends (...args: KnownAny) => KnownAny ? ClientMethod<T[K], OPTS> : never;
45
- };
46
- export type _VovkClient<T, OPTS extends {
47
- [key: string]: KnownAny;
48
- }> = OmitNever<_VovkClientWithNever<T, OPTS>>;
49
- export type _VovkClientFetcher<OPTS extends Record<string, KnownAny> = Record<string, never>, T = KnownAny> = (options: {
50
- name: keyof T;
51
- httpMethod: HttpMethod;
52
- getEndpoint: (data: {
53
- apiRoot: string;
54
- params: {
55
- [key: string]: string;
56
- };
57
- query: {
58
- [key: string]: string;
59
- };
60
- }) => string;
61
- validate: (input: {
62
- body?: unknown;
63
- query?: unknown;
64
- endpoint: string;
65
- }) => void | Promise<void>;
66
- defaultStreamHandler: (response: Response) => Promise<_StreamAsyncIterator<unknown>>;
67
- defaultHandler: (response: Response) => Promise<unknown>;
68
- }, input: {
69
- body: unknown;
70
- query: {
71
- [key: string]: string;
72
- };
73
- params: {
74
- [key: string]: string;
75
- };
76
- } & OPTS) => KnownAny;
77
- export interface _VovkDefaultFetcherOptions extends Omit<RequestInit, 'body' | 'method'> {
78
- reactNative?: {
79
- textStreaming: boolean;
80
- };
81
- apiRoot?: string;
82
- segmentName?: string;
83
- disableClientValidation?: boolean;
84
- validateOnClient?: _VovkValidateOnClient;
85
- fetcher?: _VovkClientFetcher;
86
- }
87
- export type _VovkValidateOnClient = (input: {
88
- body?: unknown;
89
- query?: unknown;
90
- endpoint: string;
91
- }, validators: {
92
- body?: unknown;
93
- query?: unknown;
94
- }) => void | Promise<void>;
95
- export type _VovkClientOptions<OPTS extends Record<string, KnownAny> = Record<string, never>> = {
96
- fetcher?: _VovkClientFetcher<OPTS>;
97
- validateOnClient?: _VovkValidateOnClient;
98
- defaultOptions?: Partial<OPTS>;
99
- };
100
- export {};
@@ -1,4 +0,0 @@
1
- import type { _HandlerSchema as HandlerSchema, _KnownAny as KnownAny, _VovkController as VovkController, _VovkRequest as VovkRequest } from './types';
2
- type Next = () => Promise<unknown>;
3
- export declare function _createDecorator<ARGS extends unknown[], REQUEST = VovkRequest>(handler: null | ((this: VovkController, req: REQUEST, next: Next, ...args: ARGS) => unknown), initHandler?: (this: VovkController, ...args: ARGS) => Omit<HandlerSchema, 'path' | 'httpMethod'> | ((handlerSchema: HandlerSchema | null) => Omit<HandlerSchema, 'path' | 'httpMethod'>) | null | undefined): (...args: ARGS) => (target: KnownAny, propertyKey: string) => void;
4
- export {};
package/createSegment.js DELETED
@@ -1,118 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports._createSegment = _createSegment;
7
- const Segment_1 = require("./Segment");
8
- const types_1 = require("./types");
9
- const getSchema_1 = __importDefault(require("./utils/getSchema"));
10
- const trimPath = (path) => path.trim().replace(/^\/|\/$/g, '');
11
- const isClass = (func) => typeof func === 'function' && /class/.test(func.toString());
12
- const toKebabCase = (str) => str
13
- .replace(/([A-Z])/g, '-$1')
14
- .toLowerCase()
15
- .replace(/^-/, '');
16
- function _createSegment() {
17
- const segment = new Segment_1._Segment();
18
- const getDecoratorCreator = (httpMethod) => {
19
- const assignSchema = (controller, propertyKey, path, options) => {
20
- if (typeof window !== 'undefined') {
21
- throw new Error('Decorators are intended for server-side use only. You have probably imported a controller on the client-side.');
22
- }
23
- if (!isClass(controller)) {
24
- let decoratorName = httpMethod.toLowerCase();
25
- if (decoratorName === 'delete')
26
- decoratorName = 'del';
27
- throw new Error(`Decorator must be used on a static class method. Check the controller method named "${propertyKey}" used with @${decoratorName}.`);
28
- }
29
- const methods = segment._routes[httpMethod].get(controller) ?? {};
30
- segment._routes[httpMethod].set(controller, methods);
31
- controller._handlers = {
32
- ...controller._handlers,
33
- [propertyKey]: {
34
- ...(controller._handlers ?? {})[propertyKey],
35
- path,
36
- httpMethod,
37
- },
38
- };
39
- const originalMethod = controller[propertyKey];
40
- originalMethod._controller = controller;
41
- originalMethod._sourceMethod = originalMethod._sourceMethod ?? originalMethod;
42
- methods[path] = controller[propertyKey];
43
- methods[path]._options = options;
44
- };
45
- function decoratorCreator(givenPath = '', options) {
46
- const path = trimPath(givenPath);
47
- function decorator(givenTarget, propertyKey) {
48
- const target = givenTarget;
49
- assignSchema(target, propertyKey, path, options);
50
- }
51
- return decorator;
52
- }
53
- const auto = (options) => {
54
- function decorator(givenTarget, propertyKey) {
55
- const controller = givenTarget;
56
- const methods = segment._routes[httpMethod].get(controller) ?? {};
57
- segment._routes[httpMethod].set(controller, methods);
58
- controller._handlers = {
59
- ...controller._handlers,
60
- [propertyKey]: {
61
- ...(controller._handlers ?? {})[propertyKey],
62
- httpMethod,
63
- },
64
- };
65
- assignSchema(controller, propertyKey, toKebabCase(propertyKey), options);
66
- }
67
- return decorator;
68
- };
69
- const enhancedDecoratorCreator = decoratorCreator;
70
- enhancedDecoratorCreator.auto = auto;
71
- return enhancedDecoratorCreator;
72
- };
73
- const prefix = (givenPath = '') => {
74
- const path = trimPath(givenPath);
75
- return (givenTarget) => {
76
- const controller = givenTarget;
77
- controller._prefix = path;
78
- return givenTarget;
79
- };
80
- };
81
- const initVovk = (options) => {
82
- for (const [controllerName, controller] of Object.entries(options.controllers)) {
83
- controller._controllerName = controllerName;
84
- controller._activated = true;
85
- controller._onError = options?.onError;
86
- }
87
- async function GET_DEV(req, data) {
88
- const params = await data.params;
89
- if (params[Object.keys(params)[0]]?.[0] === '_schema_') {
90
- // Wait for schema to be set (it can be set after decorators are called with another setTimeout)
91
- await new Promise((resolve) => setTimeout(resolve, 10));
92
- const schema = (0, getSchema_1.default)(options);
93
- return segment.respond(200, { schema });
94
- }
95
- return segment.GET(req, data);
96
- }
97
- return {
98
- GET: process.env.NODE_ENV === 'development' ? GET_DEV : segment.GET,
99
- POST: segment.POST,
100
- PUT: segment.PUT,
101
- PATCH: segment.PATCH,
102
- DELETE: segment.DELETE,
103
- HEAD: segment.HEAD,
104
- OPTIONS: segment.OPTIONS,
105
- };
106
- };
107
- return {
108
- get: getDecoratorCreator(types_1._HttpMethod.GET),
109
- post: getDecoratorCreator(types_1._HttpMethod.POST),
110
- put: getDecoratorCreator(types_1._HttpMethod.PUT),
111
- patch: getDecoratorCreator(types_1._HttpMethod.PATCH),
112
- del: getDecoratorCreator(types_1._HttpMethod.DELETE),
113
- head: getDecoratorCreator(types_1._HttpMethod.HEAD),
114
- options: getDecoratorCreator(types_1._HttpMethod.OPTIONS),
115
- prefix,
116
- initVovk,
117
- };
118
- }
@@ -1,4 +0,0 @@
1
- import { _StaticClass as StaticClass } from './types';
2
- export declare function _generateStaticAPI(c: Record<string, StaticClass>, slug?: string): {
3
- [x: string]: string[];
4
- }[];
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports._generateStaticAPI = _generateStaticAPI;
4
- function _generateStaticAPI(c, slug = 'vovk') {
5
- const controllers = c;
6
- return [
7
- { [slug]: ['_vovk-ping_'] },
8
- ...Object.values(controllers)
9
- .map((controller) => {
10
- const handlers = controller._handlers;
11
- const splitPrefix = controller._prefix?.split('/') ?? [];
12
- return Object.values(handlers).map((handler) => {
13
- return { [slug]: [...splitPrefix, ...handler.path.split('/')].filter(Boolean) };
14
- });
15
- })
16
- .flat(),
17
- ];
18
- }
package/index.d.ts DELETED
@@ -1,60 +0,0 @@
1
- import { _createSegment as createSegment } from './createSegment';
2
- import { type _VovkErrorResponse as VovkErrorResponse, type _VovkRequest as VovkRequest, type _VovkBody as VovkBody, type _VovkQuery as VovkQuery, type _VovkParams as VovkParams, type _VovkReturnType as VovkReturnType, type _VovkYieldType as VovkYieldType, type _VovkControllerBody as VovkControllerBody, type _VovkControllerQuery as VovkControllerQuery, type _VovkControllerParams as VovkControllerParams, type _VovkControllerYieldType as VovkControllerYieldType, type _VovkSchema as VovkSchema, _HttpStatus as HttpStatus, _HttpMethod as HttpMethod } from './types';
3
- import type { _VovkClientOptions as VovkClientOptions, _VovkClientFetcher as VovkClientFetcher, _VovkDefaultFetcherOptions as VovkDefaultFetcherOptions, _VovkValidateOnClient as VovkValidateOnClient } from './client/types';
4
- import { _HttpException as HttpException } from './HttpException';
5
- import { _createDecorator as createDecorator } from './createDecorator';
6
- import { _StreamJSONResponse as StreamJSONResponse } from './StreamJSONResponse';
7
- import { worker } from './worker';
8
- import { _generateStaticAPI as generateStaticAPI } from './generateStaticAPI';
9
- export { type VovkClientFetcher, type VovkDefaultFetcherOptions, type VovkValidateOnClient, type VovkSchema, type VovkErrorResponse, type VovkRequest, type VovkControllerBody, type VovkControllerQuery, type VovkControllerParams, type VovkControllerYieldType, type VovkBody, type VovkQuery, type VovkParams, type VovkYieldType, type VovkReturnType, type VovkClientOptions, StreamJSONResponse, HttpException, HttpStatus, HttpMethod, createSegment, createDecorator, worker, generateStaticAPI, };
10
- export declare const get: {
11
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
12
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
13
- }, post: {
14
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
15
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
16
- }, put: {
17
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
18
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
19
- }, patch: {
20
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
21
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
22
- }, del: {
23
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
24
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
25
- }, head: {
26
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
27
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
28
- }, options: {
29
- (givenPath?: string | undefined, options?: import("./types")._DecoratorOptions | undefined): ReturnType<(givenPath?: string, options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void>;
30
- auto: (options?: import("./types")._DecoratorOptions) => (givenTarget: import("./types")._KnownAny, propertyKey: string) => void;
31
- }, prefix: (givenPath?: string) => (givenTarget: import("./types")._KnownAny) => any, initVovk: (options: {
32
- segmentName?: string;
33
- controllers: Record<string, import("./types")._StaticClass>;
34
- workers?: Record<string, import("./types")._StaticClass>;
35
- exposeValidation?: boolean;
36
- emitSchema?: boolean;
37
- onError?: (err: Error, req: VovkRequest) => void | Promise<void>;
38
- }) => {
39
- GET: (req: VovkRequest, data: {
40
- params: Promise<Record<string, string[]>>;
41
- }) => Promise<Response>;
42
- POST: (req: VovkRequest, data: {
43
- params: Promise<Record<string, string[]>>;
44
- }) => Promise<Response>;
45
- PUT: (req: VovkRequest, data: {
46
- params: Promise<Record<string, string[]>>;
47
- }) => Promise<Response>;
48
- PATCH: (req: VovkRequest, data: {
49
- params: Promise<Record<string, string[]>>;
50
- }) => Promise<Response>;
51
- DELETE: (req: VovkRequest, data: {
52
- params: Promise<Record<string, string[]>>;
53
- }) => Promise<Response>;
54
- HEAD: (req: VovkRequest, data: {
55
- params: Promise<Record<string, string[]>>;
56
- }) => Promise<Response>;
57
- OPTIONS: (req: VovkRequest, data: {
58
- params: Promise<Record<string, string[]>>;
59
- }) => Promise<Response>;
60
- };
package/index.js DELETED
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.initVovk = exports.prefix = exports.options = exports.head = exports.del = exports.patch = exports.put = exports.post = exports.get = exports.generateStaticAPI = exports.worker = exports.createDecorator = exports.createSegment = exports.HttpMethod = exports.HttpStatus = exports.HttpException = exports.StreamJSONResponse = void 0;
5
- const createSegment_1 = require("./createSegment");
6
- Object.defineProperty(exports, "createSegment", { enumerable: true, get: function () { return createSegment_1._createSegment; } });
7
- const types_1 = require("./types");
8
- Object.defineProperty(exports, "HttpStatus", { enumerable: true, get: function () { return types_1._HttpStatus; } });
9
- Object.defineProperty(exports, "HttpMethod", { enumerable: true, get: function () { return types_1._HttpMethod; } });
10
- const HttpException_1 = require("./HttpException");
11
- Object.defineProperty(exports, "HttpException", { enumerable: true, get: function () { return HttpException_1._HttpException; } });
12
- const createDecorator_1 = require("./createDecorator");
13
- Object.defineProperty(exports, "createDecorator", { enumerable: true, get: function () { return createDecorator_1._createDecorator; } });
14
- const StreamJSONResponse_1 = require("./StreamJSONResponse");
15
- Object.defineProperty(exports, "StreamJSONResponse", { enumerable: true, get: function () { return StreamJSONResponse_1._StreamJSONResponse; } });
16
- const worker_1 = require("./worker");
17
- Object.defineProperty(exports, "worker", { enumerable: true, get: function () { return worker_1.worker; } });
18
- const generateStaticAPI_1 = require("./generateStaticAPI");
19
- Object.defineProperty(exports, "generateStaticAPI", { enumerable: true, get: function () { return generateStaticAPI_1._generateStaticAPI; } });
20
- _a = (0, createSegment_1._createSegment)(), exports.get = _a.get, exports.post = _a.post, exports.put = _a.put, exports.patch = _a.patch, exports.del = _a.del, exports.head = _a.head, exports.options = _a.options, exports.prefix = _a.prefix, exports.initVovk = _a.initVovk;