@prismicio/simulator 0.2.0 → 0.2.1
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/SimulatorAPI.cjs +7 -9
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts.map +1 -0
- package/dist/SimulatorAPI.d.ts.map +1 -0
- package/dist/SimulatorAPI.js +6 -8
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +7 -9
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts.map +1 -0
- package/dist/SimulatorClient.d.ts.map +1 -0
- package/dist/SimulatorClient.js +6 -8
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +10 -13
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +1 -3
- package/dist/channel/ChannelEmitter.d.cts.map +1 -0
- package/dist/channel/ChannelEmitter.d.ts +1 -3
- package/dist/channel/ChannelEmitter.d.ts.map +1 -0
- package/dist/channel/ChannelEmitter.js +6 -9
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +5 -6
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts.map +1 -0
- package/dist/channel/ChannelNetwork.d.ts.map +1 -0
- package/dist/channel/ChannelNetwork.js +3 -4
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +9 -10
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts.map +1 -0
- package/dist/channel/ChannelReceiver.d.ts.map +1 -0
- package/dist/channel/ChannelReceiver.js +5 -6
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +1 -2
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts.map +1 -0
- package/dist/channel/errors.d.ts.map +1 -0
- package/dist/channel/errors.js +1 -1
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +5 -6
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +0 -1
- package/dist/channel/messages.d.cts.map +1 -0
- package/dist/channel/messages.d.ts +0 -1
- package/dist/channel/messages.d.ts.map +1 -0
- package/dist/channel/messages.js +5 -5
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +7 -8
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +1 -1
- package/dist/channel/types.d.cts.map +1 -0
- package/dist/channel/types.d.ts +1 -1
- package/dist/channel/types.d.ts.map +1 -0
- package/dist/channel/types.js +7 -7
- package/dist/channel/types.js.map +1 -1
- package/dist/globalExtensions.d.cts +1 -1
- package/dist/globalExtensions.d.cts.map +1 -0
- package/dist/globalExtensions.d.ts +1 -1
- package/dist/globalExtensions.d.ts.map +1 -0
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -3
- package/dist/kit/SimulatorManager.cjs +12 -15
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts.map +1 -0
- package/dist/kit/SimulatorManager.d.ts.map +1 -0
- package/dist/kit/SimulatorManager.js +7 -10
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +7 -8
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts.map +1 -0
- package/dist/kit/State.d.ts.map +1 -0
- package/dist/kit/State.js +4 -5
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +1 -2
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts.map +1 -0
- package/dist/kit/domHelpers.d.ts.map +1 -0
- package/dist/kit/domHelpers.js +1 -1
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +1 -2
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts.map +1 -0
- package/dist/kit/eventHandlers.d.ts.map +1 -0
- package/dist/kit/eventHandlers.js +1 -1
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +1 -2
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts.map +1 -0
- package/dist/kit/getDefault.d.ts.map +1 -0
- package/dist/kit/getDefault.js +1 -1
- package/dist/kit/messages.cjs +3 -6
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts.map +1 -0
- package/dist/kit/messages.d.ts.map +1 -0
- package/dist/kit/messages.js +3 -5
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +6 -7
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +1 -1
- package/dist/kit/types.d.cts.map +1 -0
- package/dist/kit/types.d.ts +1 -1
- package/dist/kit/types.d.ts.map +1 -0
- package/dist/kit/types.js +6 -6
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +9 -9
- package/dist/kit.js +3 -4
- package/dist/lib/EventEmitter.cjs +1 -2
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts.map +1 -0
- package/dist/lib/EventEmitter.d.ts.map +1 -0
- package/dist/lib/EventEmitter.js +1 -1
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +1 -2
- package/dist/lib/throttle.cjs.map +1 -1
- package/dist/lib/throttle.js +1 -1
- package/dist/types.cjs +10 -11
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -10
- package/dist/types.js.map +1 -1
- package/package.json +33 -35
- package/src/SimulatorAPI.ts +14 -30
- package/src/SimulatorClient.ts +15 -32
- package/src/channel/ChannelEmitter.ts +25 -57
- package/src/channel/ChannelNetwork.ts +36 -61
- package/src/channel/ChannelReceiver.ts +20 -51
- package/src/channel/errors.ts +2 -7
- package/src/channel/index.ts +5 -20
- package/src/channel/messages.ts +4 -13
- package/src/channel/types.ts +15 -31
- package/src/index.ts +2 -10
- package/src/kit/SimulatorManager.ts +7 -20
- package/src/kit/State.ts +4 -9
- package/src/kit/domHelpers.ts +1 -3
- package/src/kit/eventHandlers.ts +2 -7
- package/src/kit/index.ts +1 -5
- package/src/kit/messages.ts +1 -2
- package/src/kit/types.ts +0 -1
- package/src/lib/EventEmitter.ts +3 -9
- package/src/lib/__PRODUCTION__.ts +1 -2
package/src/SimulatorClient.ts
CHANGED
|
@@ -1,32 +1,20 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
APITransactions,
|
|
3
|
-
ClientTransactions} from "./types";
|
|
4
|
-
import {
|
|
5
|
-
APIRequestType,
|
|
6
|
-
ClientRequestType
|
|
7
|
-
} from "./types"
|
|
8
|
-
|
|
9
|
-
import type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
10
1
|
import type {
|
|
11
2
|
AllChannelEmitterOptions,
|
|
12
3
|
TransactionMethod,
|
|
13
4
|
TransactionsHandlers,
|
|
14
|
-
TransactionsMethods
|
|
15
|
-
import {
|
|
16
|
-
ChannelEmitter
|
|
5
|
+
TransactionsMethods,
|
|
17
6
|
} from "./channel"
|
|
7
|
+
import { ChannelEmitter } from "./channel"
|
|
8
|
+
import type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
9
|
+
import type { APITransactions, ClientTransactions } from "./types"
|
|
10
|
+
import { APIRequestType, ClientRequestType } from "./types"
|
|
18
11
|
|
|
19
|
-
export const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
12
|
+
export const simulatorClientDefaultOptions: Partial<AllChannelEmitterOptions> = {
|
|
13
|
+
requestIDPrefix: "client-",
|
|
14
|
+
}
|
|
23
15
|
|
|
24
16
|
export class SimulatorClient
|
|
25
|
-
extends ChannelEmitter<
|
|
26
|
-
APITransactions,
|
|
27
|
-
Partial<AllChannelEmitterOptions>,
|
|
28
|
-
SimulatorAPIOptions
|
|
29
|
-
>
|
|
17
|
+
extends ChannelEmitter<APITransactions, Partial<AllChannelEmitterOptions>, SimulatorAPIOptions>
|
|
30
18
|
implements TransactionsMethods<ClientTransactions>
|
|
31
19
|
{
|
|
32
20
|
constructor(
|
|
@@ -36,8 +24,7 @@ export class SimulatorClient
|
|
|
36
24
|
) {
|
|
37
25
|
// True if `options.debug` is true or `debug=true` is among query parameters
|
|
38
26
|
const debug =
|
|
39
|
-
options?.debug ||
|
|
40
|
-
/[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
27
|
+
options?.debug || /[?&]debug=true/i.test(decodeURIComponent(window.location.search))
|
|
41
28
|
|
|
42
29
|
super(
|
|
43
30
|
target,
|
|
@@ -66,11 +53,10 @@ export class SimulatorClient
|
|
|
66
53
|
}
|
|
67
54
|
}
|
|
68
55
|
|
|
69
|
-
[ClientRequestType.Ping]: TransactionMethod<
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
56
|
+
[ClientRequestType.Ping]: TransactionMethod<ClientTransactions[ClientRequestType.Ping]> =
|
|
57
|
+
async () => {
|
|
58
|
+
return await this.postFormattedRequest(ClientRequestType.Ping)
|
|
59
|
+
};
|
|
74
60
|
|
|
75
61
|
[ClientRequestType.SetSliceZone]: TransactionMethod<
|
|
76
62
|
ClientTransactions[ClientRequestType.SetSliceZone]
|
|
@@ -81,9 +67,6 @@ export class SimulatorClient
|
|
|
81
67
|
[ClientRequestType.ScrollToSlice]: TransactionMethod<
|
|
82
68
|
ClientTransactions[ClientRequestType.ScrollToSlice]
|
|
83
69
|
> = async (data) => {
|
|
84
|
-
return await this.postFormattedRequest(
|
|
85
|
-
ClientRequestType.ScrollToSlice,
|
|
86
|
-
data,
|
|
87
|
-
)
|
|
70
|
+
return await this.postFormattedRequest(ClientRequestType.ScrollToSlice, data)
|
|
88
71
|
}
|
|
89
72
|
}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
import type { ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork"
|
|
2
|
+
import { ChannelNetwork } from "./ChannelNetwork"
|
|
3
|
+
import type { AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
4
|
+
import { ChannelNotSetError, ConnectionTimeoutError, NotReadyError } from "./errors"
|
|
5
|
+
import {
|
|
6
|
+
createErrorResponseMessage,
|
|
7
|
+
createSuccessResponseMessage,
|
|
8
|
+
isRequestMessage,
|
|
9
|
+
validateMessage,
|
|
10
|
+
} from "./messages"
|
|
1
11
|
import type {
|
|
2
12
|
ExtractSuccessResponseMessage,
|
|
3
13
|
InternalEmitterTransactions,
|
|
@@ -5,56 +15,27 @@ import type {
|
|
|
5
15
|
TransactionsHandlers,
|
|
6
16
|
UnknownRequestMessage,
|
|
7
17
|
UnknownResponseMessage,
|
|
8
|
-
UnknownTransaction
|
|
9
|
-
import {
|
|
10
|
-
InternalEmitterRequestType,
|
|
11
|
-
InternalReceiverRequestType
|
|
18
|
+
UnknownTransaction,
|
|
12
19
|
} from "./types"
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
ChannelNotSetError,
|
|
16
|
-
ConnectionTimeoutError,
|
|
17
|
-
NotReadyError,
|
|
18
|
-
} from "./errors"
|
|
19
|
-
|
|
20
|
-
import type {
|
|
21
|
-
ChannelNetworkOptions,
|
|
22
|
-
PostRequestOptions} from "./ChannelNetwork";
|
|
23
|
-
import {
|
|
24
|
-
ChannelNetwork
|
|
25
|
-
} from "./ChannelNetwork"
|
|
26
|
-
import type { AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
27
|
-
import {
|
|
28
|
-
createErrorResponseMessage,
|
|
29
|
-
createSuccessResponseMessage,
|
|
30
|
-
isRequestMessage,
|
|
31
|
-
validateMessage,
|
|
32
|
-
} from "./messages"
|
|
20
|
+
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
33
21
|
|
|
34
22
|
export type ChannelEmitterOptions = {
|
|
35
23
|
connectTimeout: number
|
|
36
24
|
}
|
|
37
25
|
|
|
38
|
-
export const channelEmitterDefaultOptions: ChannelEmitterOptions &
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
26
|
+
export const channelEmitterDefaultOptions: ChannelEmitterOptions & Partial<ChannelNetworkOptions> =
|
|
27
|
+
{
|
|
28
|
+
connectTimeout: 20000,
|
|
29
|
+
requestIDPrefix: "emitter-",
|
|
30
|
+
}
|
|
43
31
|
|
|
44
|
-
export type AllChannelEmitterOptions = ChannelEmitterOptions &
|
|
45
|
-
ChannelNetworkOptions
|
|
32
|
+
export type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions
|
|
46
33
|
|
|
47
34
|
export abstract class ChannelEmitter<
|
|
48
|
-
TReceiverTransactions extends Record<string, UnknownTransaction> = Record<
|
|
49
|
-
string,
|
|
50
|
-
never
|
|
51
|
-
>,
|
|
35
|
+
TReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
52
36
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
53
37
|
TReceiverOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
54
|
-
> extends ChannelNetwork<
|
|
55
|
-
TReceiverTransactions,
|
|
56
|
-
ChannelEmitterOptions & TOptions
|
|
57
|
-
> {
|
|
38
|
+
> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {
|
|
58
39
|
private _target: HTMLIFrameElement
|
|
59
40
|
private _channel: MessageChannel | null = null
|
|
60
41
|
protected get channel(): MessageChannel {
|
|
@@ -99,9 +80,7 @@ export abstract class ChannelEmitter<
|
|
|
99
80
|
* Initiates connection to receiver
|
|
100
81
|
*
|
|
101
82
|
* @param receiverOptions - Options to configure the receiver with
|
|
102
|
-
* @param newOrigin - Indicates to the emitter that we're connecting to a new
|
|
103
|
-
* origin
|
|
104
|
-
*
|
|
83
|
+
* @param newOrigin - Indicates to the emitter that we're connecting to a new origin
|
|
105
84
|
* @returns Success connect message
|
|
106
85
|
*/
|
|
107
86
|
connect(
|
|
@@ -157,9 +136,7 @@ export abstract class ChannelEmitter<
|
|
|
157
136
|
>(request, (request) => {
|
|
158
137
|
// Target content window is checked in previous statement
|
|
159
138
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
160
|
-
this._target.contentWindow!.postMessage(request, "*", [
|
|
161
|
-
this.channel.port2,
|
|
162
|
-
])
|
|
139
|
+
this._target.contentWindow!.postMessage(request, "*", [this.channel.port2])
|
|
163
140
|
})
|
|
164
141
|
|
|
165
142
|
// Finish by aknowledging ready
|
|
@@ -232,10 +209,7 @@ export abstract class ChannelEmitter<
|
|
|
232
209
|
this.postResponse(
|
|
233
210
|
createErrorResponseMessage(message.requestID, undefined),
|
|
234
211
|
(response) => {
|
|
235
|
-
;(event.source as WindowProxy).postMessage(
|
|
236
|
-
response,
|
|
237
|
-
event.origin,
|
|
238
|
-
)
|
|
212
|
+
;(event.source as WindowProxy).postMessage(response, event.origin)
|
|
239
213
|
},
|
|
240
214
|
)
|
|
241
215
|
break
|
|
@@ -261,15 +235,9 @@ export abstract class ChannelEmitter<
|
|
|
261
235
|
options: PostRequestOptions = {},
|
|
262
236
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
263
237
|
if (!this._connected) {
|
|
264
|
-
throw new NotReadyError(
|
|
265
|
-
"Emitter is not connected, use `ChannelEmitter.connect()` first",
|
|
266
|
-
)
|
|
238
|
+
throw new NotReadyError("Emitter is not connected, use `ChannelEmitter.connect()` first")
|
|
267
239
|
}
|
|
268
240
|
|
|
269
|
-
return this.postRequest(
|
|
270
|
-
this.createRequestMessage(type, data),
|
|
271
|
-
undefined,
|
|
272
|
-
options,
|
|
273
|
-
)
|
|
241
|
+
return this.postRequest(this.createRequestMessage(type, data), undefined, options)
|
|
274
242
|
}
|
|
275
243
|
}
|
|
@@ -1,20 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ExtractErrorResponseMessage,
|
|
3
|
-
ExtractSuccessResponseMessage,
|
|
4
|
-
RequestMessage,
|
|
5
|
-
TransactionsHandlers,
|
|
6
|
-
UnknownRequestMessage,
|
|
7
|
-
UnknownResponseMessage,
|
|
8
|
-
UnknownTransaction,
|
|
9
|
-
} from "./types"
|
|
10
|
-
|
|
11
1
|
import {
|
|
12
2
|
PortNotSetError,
|
|
13
3
|
RequestTimeoutError,
|
|
14
4
|
ResponseError,
|
|
15
5
|
TooManyConcurrentRequestsError,
|
|
16
6
|
} from "./errors"
|
|
17
|
-
|
|
18
7
|
import {
|
|
19
8
|
createErrorResponseMessage,
|
|
20
9
|
createRequestMessage,
|
|
@@ -23,6 +12,15 @@ import {
|
|
|
23
12
|
isSuccessResponseMessage,
|
|
24
13
|
validateMessage,
|
|
25
14
|
} from "./messages"
|
|
15
|
+
import type {
|
|
16
|
+
ExtractErrorResponseMessage,
|
|
17
|
+
ExtractSuccessResponseMessage,
|
|
18
|
+
RequestMessage,
|
|
19
|
+
TransactionsHandlers,
|
|
20
|
+
UnknownRequestMessage,
|
|
21
|
+
UnknownResponseMessage,
|
|
22
|
+
UnknownTransaction,
|
|
23
|
+
} from "./types"
|
|
26
24
|
|
|
27
25
|
export type PostRequestOptions = {
|
|
28
26
|
timeout?: number
|
|
@@ -43,10 +41,7 @@ export const channelNetworkDefaultOptions: ChannelNetworkOptions = {
|
|
|
43
41
|
}
|
|
44
42
|
|
|
45
43
|
export abstract class ChannelNetwork<
|
|
46
|
-
TPartnerTransactions extends Record<string, UnknownTransaction> = Record<
|
|
47
|
-
string,
|
|
48
|
-
never
|
|
49
|
-
>,
|
|
44
|
+
TPartnerTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
50
45
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
51
46
|
> {
|
|
52
47
|
public requestHandlers: TransactionsHandlers<TPartnerTransactions>
|
|
@@ -101,41 +96,27 @@ export abstract class ChannelNetwork<
|
|
|
101
96
|
|
|
102
97
|
if (isRequestMessage(message)) {
|
|
103
98
|
if (!this.requestHandlers[message.type]) {
|
|
104
|
-
this.postResponse(
|
|
105
|
-
createErrorResponseMessage(message.requestID, undefined, 501),
|
|
106
|
-
)
|
|
99
|
+
this.postResponse(createErrorResponseMessage(message.requestID, undefined, 501))
|
|
107
100
|
} else {
|
|
108
101
|
try {
|
|
109
102
|
// TODO: Figure out why type cannot be inferred on its own anymore
|
|
110
103
|
const response = await this.requestHandlers[message.type](message, {
|
|
111
|
-
success: createSuccessResponseMessage.bind(
|
|
112
|
-
this,
|
|
113
|
-
message.requestID,
|
|
114
|
-
) as Parameters<
|
|
104
|
+
success: createSuccessResponseMessage.bind(this, message.requestID) as Parameters<
|
|
115
105
|
(typeof this.requestHandlers)[string]
|
|
116
106
|
>[1]["success"],
|
|
117
|
-
error: createErrorResponseMessage.bind(
|
|
118
|
-
this,
|
|
119
|
-
message.requestID,
|
|
120
|
-
) as Parameters<
|
|
107
|
+
error: createErrorResponseMessage.bind(this, message.requestID) as Parameters<
|
|
121
108
|
(typeof this.requestHandlers)[string]
|
|
122
109
|
>[1]["error"],
|
|
123
110
|
})
|
|
124
111
|
|
|
125
112
|
this.postResponse(response)
|
|
126
113
|
} catch (error) {
|
|
127
|
-
this.postResponse(
|
|
128
|
-
createErrorResponseMessage(message.requestID, error, 500),
|
|
129
|
-
)
|
|
114
|
+
this.postResponse(createErrorResponseMessage(message.requestID, error, 500))
|
|
130
115
|
}
|
|
131
116
|
}
|
|
132
117
|
} else {
|
|
133
118
|
if (!this._pendingRequests.has(message.requestID)) {
|
|
134
|
-
console.error(
|
|
135
|
-
`Unknown request ID received in response: ${JSON.stringify(
|
|
136
|
-
message,
|
|
137
|
-
)}`,
|
|
138
|
-
)
|
|
119
|
+
console.error(`Unknown request ID received in response: ${JSON.stringify(message)}`)
|
|
139
120
|
} else {
|
|
140
121
|
// Pending requests are checked in previous statement
|
|
141
122
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -170,37 +151,31 @@ export abstract class ChannelNetwork<
|
|
|
170
151
|
throw new TooManyConcurrentRequestsError(request)
|
|
171
152
|
}
|
|
172
153
|
|
|
173
|
-
return new Promise<ExtractSuccessResponseMessage<TResponse>>(
|
|
174
|
-
(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
postMessage(request)
|
|
196
|
-
},
|
|
197
|
-
)
|
|
154
|
+
return new Promise<ExtractSuccessResponseMessage<TResponse>>((resolve, reject) => {
|
|
155
|
+
const requestTimeout = setTimeout(() => {
|
|
156
|
+
if (this._pendingRequests.has(request.requestID)) {
|
|
157
|
+
this._pendingRequests.delete(request.requestID)
|
|
158
|
+
}
|
|
159
|
+
reject(new RequestTimeoutError(request))
|
|
160
|
+
}, options.timeout || this.options.defaultTimeout)
|
|
161
|
+
|
|
162
|
+
this._pendingRequests.set(request.requestID, (response: TResponse): void => {
|
|
163
|
+
clearTimeout(requestTimeout)
|
|
164
|
+
|
|
165
|
+
if (isSuccessResponseMessage(response)) {
|
|
166
|
+
resolve(response as ExtractSuccessResponseMessage<TResponse>)
|
|
167
|
+
} else {
|
|
168
|
+
reject(new ResponseError(response as ExtractErrorResponseMessage<TResponse>))
|
|
169
|
+
}
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
postMessage(request)
|
|
173
|
+
})
|
|
198
174
|
}
|
|
199
175
|
|
|
200
176
|
protected postResponse<TResponse extends UnknownResponseMessage>(
|
|
201
177
|
response: TResponse,
|
|
202
|
-
postMessage = (response: TResponse): void =>
|
|
203
|
-
this.port.postMessage(response),
|
|
178
|
+
postMessage = (response: TResponse): void => this.port.postMessage(response),
|
|
204
179
|
): TResponse {
|
|
205
180
|
if (this.options.debug) {
|
|
206
181
|
// eslint-disable-next-line no-console
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork"
|
|
2
|
+
import { ChannelNetwork } from "./ChannelNetwork"
|
|
3
|
+
import { NotReadyError } from "./errors"
|
|
4
|
+
import {
|
|
5
|
+
createErrorResponseMessage,
|
|
6
|
+
createSuccessResponseMessage,
|
|
7
|
+
isRequestMessage,
|
|
8
|
+
validateMessage,
|
|
9
|
+
} from "./messages"
|
|
1
10
|
import type {
|
|
2
11
|
ExtractSuccessResponseMessage,
|
|
3
12
|
InternalEmitterTransactions,
|
|
@@ -7,26 +16,9 @@ import type {
|
|
|
7
16
|
TransactionsHandlers,
|
|
8
17
|
UnknownRequestMessage,
|
|
9
18
|
UnknownResponseMessage,
|
|
10
|
-
UnknownTransaction
|
|
11
|
-
import {
|
|
12
|
-
InternalEmitterRequestType,
|
|
13
|
-
InternalReceiverRequestType
|
|
19
|
+
UnknownTransaction,
|
|
14
20
|
} from "./types"
|
|
15
|
-
|
|
16
|
-
import { NotReadyError } from "./errors"
|
|
17
|
-
|
|
18
|
-
import type {
|
|
19
|
-
ChannelNetworkOptions,
|
|
20
|
-
PostRequestOptions} from "./ChannelNetwork";
|
|
21
|
-
import {
|
|
22
|
-
ChannelNetwork
|
|
23
|
-
} from "./ChannelNetwork"
|
|
24
|
-
import {
|
|
25
|
-
createErrorResponseMessage,
|
|
26
|
-
createSuccessResponseMessage,
|
|
27
|
-
isRequestMessage,
|
|
28
|
-
validateMessage,
|
|
29
|
-
} from "./messages"
|
|
21
|
+
import { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
30
22
|
|
|
31
23
|
export type ChannelReceiverOptions = {
|
|
32
24
|
readyTimeout: number
|
|
@@ -38,19 +30,12 @@ export const channelReceiverDefaultOptions: ChannelReceiverOptions &
|
|
|
38
30
|
requestIDPrefix: "receiver-",
|
|
39
31
|
}
|
|
40
32
|
|
|
41
|
-
export type AllChannelReceiverOptions = ChannelReceiverOptions &
|
|
42
|
-
ChannelNetworkOptions
|
|
33
|
+
export type AllChannelReceiverOptions = ChannelReceiverOptions & ChannelNetworkOptions
|
|
43
34
|
|
|
44
35
|
export abstract class ChannelReceiver<
|
|
45
|
-
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<
|
|
46
|
-
string,
|
|
47
|
-
never
|
|
48
|
-
>,
|
|
36
|
+
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<string, never>,
|
|
49
37
|
TOptions extends Record<string, unknown> = Record<string, unknown>,
|
|
50
|
-
> extends ChannelNetwork<
|
|
51
|
-
TEmitterTransactions,
|
|
52
|
-
ChannelReceiverOptions & TOptions
|
|
53
|
-
> {
|
|
38
|
+
> extends ChannelNetwork<TEmitterTransactions, ChannelReceiverOptions & TOptions> {
|
|
54
39
|
private _ready = false
|
|
55
40
|
|
|
56
41
|
constructor(
|
|
@@ -72,10 +57,7 @@ export abstract class ChannelReceiver<
|
|
|
72
57
|
|
|
73
58
|
this._ready = false
|
|
74
59
|
|
|
75
|
-
const request = this.createRequestMessage(
|
|
76
|
-
InternalReceiverRequestType.Ready,
|
|
77
|
-
undefined,
|
|
78
|
-
)
|
|
60
|
+
const request = this.createRequestMessage(InternalReceiverRequestType.Ready, undefined)
|
|
79
61
|
|
|
80
62
|
const response = await this.postRequest<
|
|
81
63
|
RequestMessage<InternalReceiverRequestType.Ready>,
|
|
@@ -112,8 +94,7 @@ export abstract class ChannelReceiver<
|
|
|
112
94
|
this.port = event.ports[0]
|
|
113
95
|
|
|
114
96
|
// Update options
|
|
115
|
-
const { data } =
|
|
116
|
-
message as InternalEmitterTransactions["connect"]["request"]
|
|
97
|
+
const { data } = message as InternalEmitterTransactions["connect"]["request"]
|
|
117
98
|
this.options = {
|
|
118
99
|
...this.options,
|
|
119
100
|
...data,
|
|
@@ -123,10 +104,7 @@ export abstract class ChannelReceiver<
|
|
|
123
104
|
readyTimeout: this.options.readyTimeout,
|
|
124
105
|
}
|
|
125
106
|
|
|
126
|
-
const response = createSuccessResponseMessage(
|
|
127
|
-
message.requestID,
|
|
128
|
-
undefined,
|
|
129
|
-
)
|
|
107
|
+
const response = createSuccessResponseMessage(message.requestID, undefined)
|
|
130
108
|
|
|
131
109
|
this.postResponse(response)
|
|
132
110
|
break
|
|
@@ -135,10 +113,7 @@ export abstract class ChannelReceiver<
|
|
|
135
113
|
this.postResponse(
|
|
136
114
|
createErrorResponseMessage(message.requestID, undefined),
|
|
137
115
|
(response) => {
|
|
138
|
-
;(event.source as WindowProxy).postMessage(
|
|
139
|
-
response,
|
|
140
|
-
event.origin,
|
|
141
|
-
)
|
|
116
|
+
;(event.source as WindowProxy).postMessage(response, event.origin)
|
|
142
117
|
},
|
|
143
118
|
)
|
|
144
119
|
break
|
|
@@ -168,15 +143,9 @@ export abstract class ChannelReceiver<
|
|
|
168
143
|
options: PostRequestOptions = {},
|
|
169
144
|
): Promise<ExtractSuccessResponseMessage<TResponse>> {
|
|
170
145
|
if (!this._ready) {
|
|
171
|
-
throw new NotReadyError(
|
|
172
|
-
"Receiver is not ready, use `ChannelReceiver.ready()` first",
|
|
173
|
-
)
|
|
146
|
+
throw new NotReadyError("Receiver is not ready, use `ChannelReceiver.ready()` first")
|
|
174
147
|
}
|
|
175
148
|
|
|
176
|
-
return this.postRequest(
|
|
177
|
-
this.createRequestMessage(type, data),
|
|
178
|
-
undefined,
|
|
179
|
-
options,
|
|
180
|
-
)
|
|
149
|
+
return this.postRequest(this.createRequestMessage(type, data), undefined, options)
|
|
181
150
|
}
|
|
182
151
|
}
|
package/src/channel/errors.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { UnknownErrorResponseMessage } from "."
|
|
2
|
-
|
|
3
2
|
import type { UnknownRequestMessage } from "./types"
|
|
4
3
|
|
|
5
|
-
export class ResponseError<
|
|
6
|
-
TErrorResponse extends UnknownErrorResponseMessage,
|
|
7
|
-
> extends Error {
|
|
4
|
+
export class ResponseError<TErrorResponse extends UnknownErrorResponseMessage> extends Error {
|
|
8
5
|
public response: TErrorResponse
|
|
9
6
|
|
|
10
7
|
constructor(errorResponse: TErrorResponse) {
|
|
@@ -28,9 +25,7 @@ export class TooManyConcurrentRequestsError extends Error {
|
|
|
28
25
|
this.request = request
|
|
29
26
|
}
|
|
30
27
|
}
|
|
31
|
-
export class RequestTimeoutError<
|
|
32
|
-
TRequest extends UnknownRequestMessage,
|
|
33
|
-
> extends Error {
|
|
28
|
+
export class RequestTimeoutError<TRequest extends UnknownRequestMessage> extends Error {
|
|
34
29
|
public request: UnknownRequestMessage
|
|
35
30
|
|
|
36
31
|
constructor(request: TRequest) {
|
package/src/channel/index.ts
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
1
|
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
2
|
-
export type {
|
|
3
|
-
PostRequestOptions,
|
|
4
|
-
ChannelNetworkOptions,
|
|
5
|
-
} from "./ChannelNetwork"
|
|
2
|
+
export type { PostRequestOptions, ChannelNetworkOptions } from "./ChannelNetwork"
|
|
6
3
|
|
|
7
4
|
export { ChannelEmitter, channelEmitterDefaultOptions } from "./ChannelEmitter"
|
|
8
|
-
export type {
|
|
9
|
-
ChannelEmitterOptions,
|
|
10
|
-
AllChannelEmitterOptions,
|
|
11
|
-
} from "./ChannelEmitter"
|
|
5
|
+
export type { ChannelEmitterOptions, AllChannelEmitterOptions } from "./ChannelEmitter"
|
|
12
6
|
|
|
13
|
-
export {
|
|
14
|
-
|
|
15
|
-
channelReceiverDefaultOptions,
|
|
16
|
-
} from "./ChannelReceiver"
|
|
17
|
-
export type {
|
|
18
|
-
ChannelReceiverOptions,
|
|
19
|
-
AllChannelReceiverOptions,
|
|
20
|
-
} from "./ChannelReceiver"
|
|
7
|
+
export { ChannelReceiver, channelReceiverDefaultOptions } from "./ChannelReceiver"
|
|
8
|
+
export type { ChannelReceiverOptions, AllChannelReceiverOptions } from "./ChannelReceiver"
|
|
21
9
|
|
|
22
10
|
export {
|
|
23
11
|
createRequestMessage,
|
|
@@ -40,10 +28,7 @@ export {
|
|
|
40
28
|
ChannelNotSetError,
|
|
41
29
|
} from "./errors"
|
|
42
30
|
|
|
43
|
-
export {
|
|
44
|
-
InternalEmitterRequestType,
|
|
45
|
-
InternalReceiverRequestType,
|
|
46
|
-
} from "./types"
|
|
31
|
+
export { InternalEmitterRequestType, InternalReceiverRequestType } from "./types"
|
|
47
32
|
export type {
|
|
48
33
|
// Messages
|
|
49
34
|
RequestMessage,
|
package/src/channel/messages.ts
CHANGED
|
@@ -21,10 +21,7 @@ const statuses = {
|
|
|
21
21
|
|
|
22
22
|
let requestID = 0
|
|
23
23
|
|
|
24
|
-
export const createRequestMessage = <
|
|
25
|
-
TType extends string = string,
|
|
26
|
-
TData = undefined,
|
|
27
|
-
>(
|
|
24
|
+
export const createRequestMessage = <TType extends string = string, TData = undefined>(
|
|
28
25
|
type: TType,
|
|
29
26
|
data: TData,
|
|
30
27
|
prefix = "",
|
|
@@ -85,9 +82,7 @@ export const validateMessage = (message: unknown): UnknownMessage => {
|
|
|
85
82
|
)
|
|
86
83
|
) {
|
|
87
84
|
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
88
|
-
} else if (
|
|
89
|
-
typeof (message as Record<string, unknown>).requestID !== "string"
|
|
90
|
-
) {
|
|
85
|
+
} else if (typeof (message as Record<string, unknown>).requestID !== "string") {
|
|
91
86
|
throw new TypeError(
|
|
92
87
|
`Invalid message received, expected \`message.requestID\` to be of type \`string\`, got \`${typeof (
|
|
93
88
|
message as Record<string, unknown>
|
|
@@ -98,15 +93,11 @@ export const validateMessage = (message: unknown): UnknownMessage => {
|
|
|
98
93
|
return message as UnknownMessage
|
|
99
94
|
}
|
|
100
95
|
|
|
101
|
-
export const isRequestMessage = (
|
|
102
|
-
message: UnknownMessage,
|
|
103
|
-
): message is UnknownRequestMessage => {
|
|
96
|
+
export const isRequestMessage = (message: UnknownMessage): message is UnknownRequestMessage => {
|
|
104
97
|
return "type" in message
|
|
105
98
|
}
|
|
106
99
|
|
|
107
|
-
export const isResponseMessage = (
|
|
108
|
-
message: UnknownMessage,
|
|
109
|
-
): message is UnknownResponseMessage => {
|
|
100
|
+
export const isResponseMessage = (message: UnknownMessage): message is UnknownResponseMessage => {
|
|
110
101
|
return !("type" in message)
|
|
111
102
|
}
|
|
112
103
|
|
package/src/channel/types.ts
CHANGED
|
@@ -27,13 +27,15 @@ export type ResponseMessage<TData = void, TError = unknown> =
|
|
|
27
27
|
| SuccessResponseMessage<TData>
|
|
28
28
|
| ErrorResponseMessage<TError>
|
|
29
29
|
|
|
30
|
-
export type ExtractSuccessResponseMessage<
|
|
31
|
-
TResponse
|
|
32
|
-
|
|
30
|
+
export type ExtractSuccessResponseMessage<TResponse extends UnknownResponseMessage> = Extract<
|
|
31
|
+
TResponse,
|
|
32
|
+
{ error?: never }
|
|
33
|
+
>
|
|
33
34
|
|
|
34
|
-
export type ExtractErrorResponseMessage<
|
|
35
|
-
TResponse
|
|
36
|
-
|
|
35
|
+
export type ExtractErrorResponseMessage<TResponse extends UnknownResponseMessage> = Extract<
|
|
36
|
+
TResponse,
|
|
37
|
+
{ data?: never }
|
|
38
|
+
>
|
|
37
39
|
|
|
38
40
|
// Unknown messages
|
|
39
41
|
export type UnknownRequestMessage = RequestMessage<string, unknown>
|
|
@@ -42,9 +44,7 @@ export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>
|
|
|
42
44
|
|
|
43
45
|
export type UnknownErrorResponseMessage = ErrorResponseMessage<unknown>
|
|
44
46
|
|
|
45
|
-
export type UnknownResponseMessage =
|
|
46
|
-
| UnknownSuccessResponseMessage
|
|
47
|
-
| UnknownErrorResponseMessage
|
|
47
|
+
export type UnknownResponseMessage = UnknownSuccessResponseMessage | UnknownErrorResponseMessage
|
|
48
48
|
|
|
49
49
|
export type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage
|
|
50
50
|
|
|
@@ -58,19 +58,13 @@ export type Transaction<
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export type TransactionMethod<
|
|
61
|
-
TTransaction extends Transaction<
|
|
62
|
-
UnknownRequestMessage,
|
|
63
|
-
UnknownResponseMessage
|
|
64
|
-
>,
|
|
61
|
+
TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>,
|
|
65
62
|
> = (
|
|
66
63
|
data: TTransaction["request"]["data"],
|
|
67
64
|
) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]>>
|
|
68
65
|
|
|
69
66
|
export type TransactionHandler<
|
|
70
|
-
TTransaction extends Transaction<
|
|
71
|
-
UnknownRequestMessage,
|
|
72
|
-
UnknownResponseMessage
|
|
73
|
-
>,
|
|
67
|
+
TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>,
|
|
74
68
|
> = (
|
|
75
69
|
request: TTransaction["request"],
|
|
76
70
|
response: {
|
|
@@ -85,23 +79,16 @@ export type TransactionHandler<
|
|
|
85
79
|
},
|
|
86
80
|
) => Promise<TTransaction["response"]> | TTransaction["response"]
|
|
87
81
|
|
|
88
|
-
export type TransactionsMethods<
|
|
89
|
-
TTransactions extends Record<string, UnknownTransaction>,
|
|
90
|
-
> = {
|
|
82
|
+
export type TransactionsMethods<TTransactions extends Record<string, UnknownTransaction>> = {
|
|
91
83
|
[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>
|
|
92
84
|
}
|
|
93
85
|
|
|
94
|
-
export type TransactionsHandlers<
|
|
95
|
-
TTransactions extends Record<string, UnknownTransaction>,
|
|
96
|
-
> = {
|
|
86
|
+
export type TransactionsHandlers<TTransactions extends Record<string, UnknownTransaction>> = {
|
|
97
87
|
[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>
|
|
98
88
|
}
|
|
99
89
|
|
|
100
90
|
// Unknown transactions
|
|
101
|
-
export type UnknownTransaction = Transaction<
|
|
102
|
-
UnknownRequestMessage,
|
|
103
|
-
UnknownResponseMessage
|
|
104
|
-
>
|
|
91
|
+
export type UnknownTransaction = Transaction<UnknownRequestMessage, UnknownResponseMessage>
|
|
105
92
|
|
|
106
93
|
export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction>
|
|
107
94
|
|
|
@@ -118,10 +105,7 @@ export type InternalEmitterTransactions<
|
|
|
118
105
|
[InternalEmitterRequestType.Connect]: Transaction<
|
|
119
106
|
RequestMessage<
|
|
120
107
|
InternalEmitterRequestType.Connect,
|
|
121
|
-
|
|
|
122
|
-
Omit<TReceiverOptions, "debug" | "requestIDPrefix" | "readyTimeout">
|
|
123
|
-
>
|
|
124
|
-
| undefined
|
|
108
|
+
Partial<Omit<TReceiverOptions, "debug" | "requestIDPrefix" | "readyTimeout">> | undefined
|
|
125
109
|
>
|
|
126
110
|
>
|
|
127
111
|
}
|