@graphql-box/worker-client 5.4.1 → 5.4.3
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/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/production.analysis.txt +15 -15
- package/dist/types/cjs/main.d.cts +2 -0
- package/dist/types/cjs/main.d.cts.map +1 -1
- package/dist/types/cjs/types.d.cts +1 -1
- package/dist/types/cjs/types.d.cts.map +1 -1
- package/dist/types/esm/main.d.ts +2 -0
- package/dist/types/esm/main.d.ts.map +1 -1
- package/dist/types/esm/types.d.ts +1 -1
- package/dist/types/esm/types.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/main.ts +66 -17
- package/src/types.ts +1 -4
package/package.json
CHANGED
package/src/main.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { logRequest } from './debug/logRequest.ts';
|
|
|
26
26
|
import { logSubscription } from './debug/logSubscription.ts';
|
|
27
27
|
import {
|
|
28
28
|
type MessageContext,
|
|
29
|
+
type MessageRequestPayload,
|
|
29
30
|
type MessageResponsePayload,
|
|
30
31
|
type PendingResolver,
|
|
31
32
|
type PendingTracker,
|
|
@@ -99,8 +100,9 @@ export class WorkerClient {
|
|
|
99
100
|
private _debugManager: DebugManagerDef | null;
|
|
100
101
|
private _eventEmitter: EventEmitter;
|
|
101
102
|
private _experimentalDeferStreamSupport: boolean;
|
|
103
|
+
private _messageQueue: MessageRequestPayload[] = [];
|
|
102
104
|
private _pending: PendingTracker = new Map();
|
|
103
|
-
private _worker: Worker;
|
|
105
|
+
private _worker: Worker | undefined;
|
|
104
106
|
|
|
105
107
|
constructor(options: UserOptions) {
|
|
106
108
|
const errors: ArgsError[] = [];
|
|
@@ -125,8 +127,21 @@ export class WorkerClient {
|
|
|
125
127
|
this._debugManager = options.debugManager ?? null;
|
|
126
128
|
this._eventEmitter = new EventEmitter();
|
|
127
129
|
this._experimentalDeferStreamSupport = options.experimentalDeferStreamSupport ?? false;
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
|
|
131
|
+
if (typeof options.worker === 'function') {
|
|
132
|
+
Promise.resolve(options.worker())
|
|
133
|
+
.then(worker => {
|
|
134
|
+
this._worker = worker;
|
|
135
|
+
this._addEventListener();
|
|
136
|
+
this._releaseMessageQueue();
|
|
137
|
+
})
|
|
138
|
+
.catch((error: unknown) => {
|
|
139
|
+
throw error;
|
|
140
|
+
});
|
|
141
|
+
} else {
|
|
142
|
+
this._worker = options.worker;
|
|
143
|
+
this._addEventListener();
|
|
144
|
+
}
|
|
130
145
|
}
|
|
131
146
|
|
|
132
147
|
get cache(): CoreWorker {
|
|
@@ -150,6 +165,10 @@ export class WorkerClient {
|
|
|
150
165
|
}
|
|
151
166
|
|
|
152
167
|
private _addEventListener(): void {
|
|
168
|
+
if (!this._worker) {
|
|
169
|
+
throw new Error('A worker is required for the WorkerClient to work correctly.');
|
|
170
|
+
}
|
|
171
|
+
|
|
153
172
|
this._worker.addEventListener(MESSAGE, this._onMessage);
|
|
154
173
|
}
|
|
155
174
|
|
|
@@ -176,6 +195,16 @@ export class WorkerClient {
|
|
|
176
195
|
};
|
|
177
196
|
}
|
|
178
197
|
|
|
198
|
+
private _releaseMessageQueue(): void {
|
|
199
|
+
if (!this._worker) {
|
|
200
|
+
throw new Error('A worker is required for the WorkerClient to work correctly.');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
for (const message of this._messageQueue) {
|
|
204
|
+
this._worker.postMessage(message);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
179
208
|
@logRequest()
|
|
180
209
|
private async _request(
|
|
181
210
|
request: string,
|
|
@@ -184,13 +213,23 @@ export class WorkerClient {
|
|
|
184
213
|
): Promise<PartialRequestResult | AsyncIterableIterator<PartialRequestResult | undefined>> {
|
|
185
214
|
try {
|
|
186
215
|
return await new Promise((resolve: PendingResolver) => {
|
|
187
|
-
this._worker
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
216
|
+
if (this._worker) {
|
|
217
|
+
this._worker.postMessage({
|
|
218
|
+
context: WorkerClient._getMessageContext(context),
|
|
219
|
+
method: REQUEST,
|
|
220
|
+
options,
|
|
221
|
+
request,
|
|
222
|
+
type: GRAPHQL_BOX,
|
|
223
|
+
});
|
|
224
|
+
} else {
|
|
225
|
+
this._messageQueue.push({
|
|
226
|
+
context: WorkerClient._getMessageContext(context),
|
|
227
|
+
method: REQUEST,
|
|
228
|
+
options,
|
|
229
|
+
request,
|
|
230
|
+
type: GRAPHQL_BOX,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
194
233
|
|
|
195
234
|
this._pending.set(context.requestID, { resolve });
|
|
196
235
|
});
|
|
@@ -210,13 +249,23 @@ export class WorkerClient {
|
|
|
210
249
|
context: RequestContext,
|
|
211
250
|
): Promise<PartialRequestResult | AsyncIterableIterator<PartialRequestResult | undefined>> {
|
|
212
251
|
try {
|
|
213
|
-
this._worker
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
252
|
+
if (this._worker) {
|
|
253
|
+
this._worker.postMessage({
|
|
254
|
+
context: WorkerClient._getMessageContext(context),
|
|
255
|
+
method: SUBSCRIBE,
|
|
256
|
+
options,
|
|
257
|
+
request,
|
|
258
|
+
type: GRAPHQL_BOX,
|
|
259
|
+
});
|
|
260
|
+
} else {
|
|
261
|
+
this._messageQueue.push({
|
|
262
|
+
context: WorkerClient._getMessageContext(context),
|
|
263
|
+
method: SUBSCRIBE,
|
|
264
|
+
options,
|
|
265
|
+
request,
|
|
266
|
+
type: GRAPHQL_BOX,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
220
269
|
|
|
221
270
|
const eventAsyncIterator = new EventAsyncIterator<PartialRequestResult>(this._eventEmitter, context.requestID);
|
|
222
271
|
return Promise.resolve(eventAsyncIterator.getIterator());
|
package/src/types.ts
CHANGED
|
@@ -12,22 +12,19 @@ export interface UserOptions {
|
|
|
12
12
|
* The cache.
|
|
13
13
|
*/
|
|
14
14
|
cache: CoreWorker;
|
|
15
|
-
|
|
16
15
|
/**
|
|
17
16
|
* The debug manager.
|
|
18
17
|
*/
|
|
19
18
|
debugManager?: DebugManagerDef;
|
|
20
|
-
|
|
21
19
|
/**
|
|
22
20
|
* Enable support for defer and stream directives. Based on version
|
|
23
21
|
* of spec in 16.1.0-experimental-stream-defer.6
|
|
24
22
|
*/
|
|
25
23
|
experimentalDeferStreamSupport?: boolean;
|
|
26
|
-
|
|
27
24
|
/**
|
|
28
25
|
* The web worker instance.
|
|
29
26
|
*/
|
|
30
|
-
worker: Worker;
|
|
27
|
+
worker: Worker | (() => Worker | Promise<Worker>);
|
|
31
28
|
}
|
|
32
29
|
|
|
33
30
|
export type MethodNames = 'request' | 'subscribe';
|