vovk 3.0.0-draft.6 → 3.0.0-draft.60
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/README.md +8 -95
- package/{HttpException.d.ts → dist/HttpException.d.ts} +2 -2
- package/{HttpException.js → dist/HttpException.js} +3 -3
- package/{StreamResponse.d.ts → dist/StreamJSONResponse.d.ts} +3 -3
- package/{StreamResponse.js → dist/StreamJSONResponse.js} +5 -5
- package/{Segment.d.ts → dist/VovkApp.d.ts} +3 -3
- package/{Segment.js → dist/VovkApp.js} +26 -23
- package/dist/client/createRPC.d.ts +4 -0
- package/{client/clientizeController.js → dist/client/createRPC.js} +21 -39
- package/dist/client/defaultFetcher.d.ts +4 -0
- package/{client → dist/client}/defaultFetcher.js +11 -10
- package/{client → dist/client}/defaultHandler.d.ts +1 -1
- package/dist/client/defaultHandler.js +22 -0
- package/dist/client/defaultStreamHandler.d.ts +4 -0
- package/{client → dist/client}/defaultStreamHandler.js +5 -5
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +8 -0
- package/dist/client/types.d.ts +103 -0
- package/dist/createDecorator.d.ts +4 -0
- package/{createDecorator.js → dist/createDecorator.js} +4 -4
- package/{createSegment.d.ts → dist/createVovkApp.d.ts} +2 -3
- package/{createSegment.js → dist/createVovkApp.js} +25 -25
- package/dist/index.d.ts +59 -0
- package/dist/index.js +22 -0
- package/dist/types.d.ts +145 -0
- package/dist/types.js +65 -0
- package/dist/utils/generateStaticAPI.d.ts +4 -0
- package/{generateStaticAPI.js → dist/utils/generateStaticAPI.js} +3 -3
- package/{utils → dist/utils}/getSchema.d.ts +1 -2
- package/{utils → dist/utils}/getSchema.js +5 -16
- package/dist/utils/parseQuery.d.ts +25 -0
- package/dist/utils/parseQuery.js +156 -0
- package/dist/utils/reqForm.d.ts +2 -0
- package/dist/utils/reqForm.js +13 -0
- package/{utils → dist/utils}/reqMeta.d.ts +1 -2
- package/{utils → dist/utils}/reqQuery.d.ts +1 -2
- package/dist/utils/reqQuery.js +10 -0
- package/dist/utils/serializeQuery.d.ts +13 -0
- package/dist/utils/serializeQuery.js +65 -0
- package/dist/utils/setClientValidatorsForHandler.d.ts +5 -0
- package/{utils → dist/utils}/setClientValidatorsForHandler.js +4 -6
- package/package.json +5 -2
- package/src/HttpException.ts +16 -0
- package/src/StreamJSONResponse.ts +61 -0
- package/src/VovkApp.ts +242 -0
- package/src/client/createRPC.ts +119 -0
- package/src/client/defaultFetcher.ts +59 -0
- package/src/client/defaultHandler.ts +23 -0
- package/src/client/defaultStreamHandler.ts +88 -0
- package/src/client/index.ts +9 -0
- package/src/client/types.ts +120 -0
- package/src/createDecorator.ts +60 -0
- package/src/createVovkApp.ts +167 -0
- package/src/index.ts +69 -0
- package/src/types.ts +198 -0
- package/src/utils/generateStaticAPI.ts +18 -0
- package/src/utils/getSchema.ts +35 -0
- package/src/utils/parseQuery.ts +160 -0
- package/src/utils/reqForm.ts +16 -0
- package/src/utils/reqMeta.ts +16 -0
- package/src/utils/reqQuery.ts +6 -0
- package/src/utils/serializeQuery.ts +69 -0
- package/src/utils/setClientValidatorsForHandler.ts +45 -0
- package/src/utils/shim.ts +17 -0
- package/.npmignore +0 -2
- package/client/clientizeController.d.ts +0 -4
- package/client/defaultFetcher.d.ts +0 -4
- package/client/defaultHandler.js +0 -21
- package/client/defaultStreamHandler.d.ts +0 -4
- package/client/index.d.ts +0 -4
- package/client/index.js +0 -5
- package/client/types.d.ts +0 -102
- package/createDecorator.d.ts +0 -4
- package/generateStaticAPI.d.ts +0 -4
- package/index.d.ts +0 -60
- package/index.js +0 -20
- package/types.d.ts +0 -191
- package/types.js +0 -65
- package/utils/reqQuery.js +0 -25
- package/utils/setClientValidatorsForHandler.d.ts +0 -5
- package/worker/index.d.ts +0 -3
- package/worker/index.js +0 -7
- package/worker/promisifyWorker.d.ts +0 -2
- package/worker/promisifyWorker.js +0 -143
- package/worker/types.d.ts +0 -31
- package/worker/types.js +0 -2
- package/worker/worker.d.ts +0 -1
- package/worker/worker.js +0 -44
- /package/{client → dist/client}/types.js +0 -0
- /package/{utils → dist/utils}/reqMeta.js +0 -0
- /package/{utils → dist/utils}/shim.d.ts +0 -0
- /package/{utils → dist/utils}/shim.js +0 -0
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports._promisifyWorker = _promisifyWorker;
|
|
4
|
-
function _promisifyWorker(currentWorker, givenWorkerService) {
|
|
5
|
-
if (!givenWorkerService)
|
|
6
|
-
throw new Error('Worker schema is not provided');
|
|
7
|
-
const workerService = givenWorkerService;
|
|
8
|
-
const instance = {
|
|
9
|
-
worker: currentWorker,
|
|
10
|
-
};
|
|
11
|
-
let callsKey = 0;
|
|
12
|
-
instance.terminate = () => {
|
|
13
|
-
if (instance._isTerminated)
|
|
14
|
-
return;
|
|
15
|
-
instance._isTerminated = true;
|
|
16
|
-
instance.worker?.terminate();
|
|
17
|
-
instance.worker = null;
|
|
18
|
-
};
|
|
19
|
-
instance.employ = (worker) => {
|
|
20
|
-
if (instance._isTerminated)
|
|
21
|
-
return instance;
|
|
22
|
-
instance._isTerminated = true;
|
|
23
|
-
instance.worker = worker;
|
|
24
|
-
return instance;
|
|
25
|
-
};
|
|
26
|
-
instance.fork = (worker) => {
|
|
27
|
-
return _promisifyWorker(worker, givenWorkerService);
|
|
28
|
-
};
|
|
29
|
-
for (const methodName of Object.keys(workerService._handlers)) {
|
|
30
|
-
const { isGenerator } = workerService._handlers[methodName];
|
|
31
|
-
if (isGenerator) {
|
|
32
|
-
const method = (...args) => {
|
|
33
|
-
const key = callsKey;
|
|
34
|
-
callsKey += 1;
|
|
35
|
-
return {
|
|
36
|
-
async *[Symbol.asyncIterator]() {
|
|
37
|
-
if (!instance.worker) {
|
|
38
|
-
throw new Error('Worker is not provided or terminated');
|
|
39
|
-
}
|
|
40
|
-
const w = instance.worker;
|
|
41
|
-
const messageQueue = [];
|
|
42
|
-
let messageResolver = null;
|
|
43
|
-
const onMessage = (e) => {
|
|
44
|
-
const { methodName: m, key: k } = e.data;
|
|
45
|
-
if (k !== key || m !== methodName) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
if (messageResolver) {
|
|
49
|
-
messageResolver(e.data);
|
|
50
|
-
messageResolver = null;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
messageQueue.push(e.data);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const onError = (e) => {
|
|
57
|
-
if (messageResolver) {
|
|
58
|
-
messageResolver({ error: e.error });
|
|
59
|
-
messageResolver = null;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
messageQueue.push({ error: e.error });
|
|
63
|
-
}
|
|
64
|
-
w.removeEventListener('message', onMessage);
|
|
65
|
-
w.removeEventListener('error', onError);
|
|
66
|
-
throw e.error;
|
|
67
|
-
};
|
|
68
|
-
w.addEventListener('message', onMessage);
|
|
69
|
-
w.addEventListener('error', onError);
|
|
70
|
-
w.postMessage({ key, args, methodName });
|
|
71
|
-
try {
|
|
72
|
-
while (true) {
|
|
73
|
-
let message = null;
|
|
74
|
-
if (messageQueue.length > 0) {
|
|
75
|
-
message = messageQueue.shift();
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
message = await new Promise((resolve) => {
|
|
79
|
-
messageResolver = resolve;
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
const { result, error, done } = message;
|
|
83
|
-
if (error) {
|
|
84
|
-
throw error;
|
|
85
|
-
}
|
|
86
|
-
if (done) {
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
yield result;
|
|
90
|
-
}
|
|
91
|
-
w.removeEventListener('message', onMessage);
|
|
92
|
-
w.removeEventListener('error', onError);
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
w.removeEventListener('message', onMessage);
|
|
96
|
-
w.removeEventListener('error', onError);
|
|
97
|
-
throw e;
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
// @ts-expect-error TODO
|
|
103
|
-
instance[methodName] = method;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
const method = (...args) => {
|
|
107
|
-
if (!instance.worker) {
|
|
108
|
-
throw new Error('Worker is not provided or terminated');
|
|
109
|
-
}
|
|
110
|
-
const w = instance.worker;
|
|
111
|
-
return new Promise((resolve, reject) => {
|
|
112
|
-
const key = callsKey;
|
|
113
|
-
callsKey += 1;
|
|
114
|
-
const onError = (e) => {
|
|
115
|
-
w.removeEventListener('message', onMessage);
|
|
116
|
-
w.removeEventListener('error', onError);
|
|
117
|
-
reject(e);
|
|
118
|
-
};
|
|
119
|
-
const onMessage = (e) => {
|
|
120
|
-
const { result, error, key: k, methodName: m } = e.data;
|
|
121
|
-
if (k !== key || m !== methodName) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
w.removeEventListener('message', onMessage);
|
|
125
|
-
w.removeEventListener('error', onError);
|
|
126
|
-
if (error) {
|
|
127
|
-
reject(error);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
resolve(result);
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
w.addEventListener('message', onMessage);
|
|
134
|
-
w.addEventListener('error', onError);
|
|
135
|
-
w.postMessage({ key, args, methodName });
|
|
136
|
-
});
|
|
137
|
-
};
|
|
138
|
-
// @ts-expect-error TODO
|
|
139
|
-
instance[methodName] = method;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return instance;
|
|
143
|
-
}
|
package/worker/types.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { _KnownAny as KnownAny } from '../types';
|
|
2
|
-
type ToPromise<T> = T extends PromiseLike<unknown> ? T : Promise<T>;
|
|
3
|
-
type ToAsyncGenerator<T> = T extends AsyncGenerator<unknown, unknown, unknown> ? T : T extends Generator<infer U, unknown, unknown> ? AsyncGenerator<U, unknown, unknown> : AsyncGenerator<T, unknown, unknown>;
|
|
4
|
-
type ToProperReturnType<T> = T extends Generator<unknown, unknown, unknown> | AsyncGenerator<unknown, unknown, unknown> ? ToAsyncGenerator<T> : ToPromise<T>;
|
|
5
|
-
type OmitNever<T> = {
|
|
6
|
-
[K in keyof T as T[K] extends never ? never : K]: T[K];
|
|
7
|
-
};
|
|
8
|
-
export type _WorkerPromiseInstanceWithNever<T> = {
|
|
9
|
-
[K in keyof T]: T[K] extends (...args: KnownAny[]) => KnownAny ? (...args: Parameters<T[K]>) => ToProperReturnType<ReturnType<T[K]>> : never;
|
|
10
|
-
};
|
|
11
|
-
export type _WorkerPromiseInstance<T> = OmitNever<_WorkerPromiseInstanceWithNever<T>> & {
|
|
12
|
-
terminate: () => void;
|
|
13
|
-
employ: (w: Worker) => _WorkerPromiseInstance<T>;
|
|
14
|
-
fork: (w: Worker) => _WorkerPromiseInstance<T>;
|
|
15
|
-
worker: Worker | null;
|
|
16
|
-
_isTerminated?: true;
|
|
17
|
-
[Symbol.dispose]: () => void;
|
|
18
|
-
};
|
|
19
|
-
export interface _WorkerInput {
|
|
20
|
-
methodName: string;
|
|
21
|
-
args: unknown[];
|
|
22
|
-
key: number;
|
|
23
|
-
}
|
|
24
|
-
export interface _WorkerOutput {
|
|
25
|
-
methodName: string;
|
|
26
|
-
result?: unknown;
|
|
27
|
-
error?: unknown;
|
|
28
|
-
done?: true;
|
|
29
|
-
key: number;
|
|
30
|
-
}
|
|
31
|
-
export {};
|
package/worker/types.js
DELETED
package/worker/worker.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function _worker(): (t: object) => void;
|
package/worker/worker.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports._worker = _worker;
|
|
4
|
-
function _worker() {
|
|
5
|
-
return (t) => {
|
|
6
|
-
const target = t;
|
|
7
|
-
target._handlers = {};
|
|
8
|
-
// TODO: Experimental: You can pass Worker Service instead of schema to prommisify worker
|
|
9
|
-
for (const key of Object.getOwnPropertyNames(target)) {
|
|
10
|
-
const member = target[key];
|
|
11
|
-
if (typeof member === 'function') {
|
|
12
|
-
const prototype = Object.getPrototypeOf(member);
|
|
13
|
-
const isGenerator = prototype === Object.getPrototypeOf(function* () { }) ||
|
|
14
|
-
prototype === Object.getPrototypeOf(async function* () { });
|
|
15
|
-
target._handlers[key] = {};
|
|
16
|
-
if (isGenerator) {
|
|
17
|
-
target._handlers[key].isGenerator = true;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (typeof self === 'undefined')
|
|
22
|
-
return; // no-op in non-worker environment
|
|
23
|
-
const w = self;
|
|
24
|
-
w.onmessage = async (evt) => {
|
|
25
|
-
const { methodName, args, key } = evt.data;
|
|
26
|
-
try {
|
|
27
|
-
const result = await target[methodName](...args);
|
|
28
|
-
if (result && typeof result === 'object' && 'next' in result && typeof result.next === 'function') {
|
|
29
|
-
const iterable = result;
|
|
30
|
-
for await (const result of iterable) {
|
|
31
|
-
w.postMessage({ result, key, methodName });
|
|
32
|
-
}
|
|
33
|
-
w.postMessage({ done: true, key, methodName });
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
w.postMessage({ result, key, methodName });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
w.postMessage({ error: e, key, methodName });
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|