@prismicio/simulator 0.1.4 → 0.2.0
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 +7 -18
- package/dist/SimulatorAPI.cjs +38 -46
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts +18 -0
- package/dist/SimulatorAPI.d.ts +16 -10
- package/dist/SimulatorAPI.js +37 -46
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +41 -51
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts +16 -0
- package/dist/SimulatorClient.d.ts +15 -9
- package/dist/SimulatorClient.js +40 -51
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +112 -143
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +38 -0
- package/dist/channel/ChannelEmitter.d.ts +36 -36
- package/dist/channel/ChannelEmitter.js +110 -141
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +81 -109
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts +28 -0
- package/dist/channel/ChannelNetwork.d.ts +25 -21
- package/dist/channel/ChannelNetwork.js +81 -109
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +69 -92
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts +20 -0
- package/dist/channel/ChannelReceiver.d.ts +18 -18
- package/dist/channel/ChannelReceiver.js +67 -90
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +41 -46
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts +28 -0
- package/dist/channel/errors.d.ts +22 -19
- package/dist/channel/errors.js +40 -52
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +48 -43
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +12 -0
- package/dist/channel/messages.d.ts +12 -10
- package/dist/channel/messages.js +50 -53
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +15 -11
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +53 -0
- package/dist/channel/types.d.ts +42 -50
- package/dist/channel/types.js +13 -13
- package/dist/channel/types.js.map +1 -1
- package/dist/globalExtensions.d.cts +15 -0
- package/dist/globalExtensions.d.ts +13 -10
- package/dist/index.cjs +24 -33
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.js +5 -25
- package/dist/kit/SimulatorManager.cjs +106 -137
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts +19 -0
- package/dist/kit/SimulatorManager.d.ts +16 -12
- package/dist/kit/SimulatorManager.js +103 -134
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +82 -80
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts +29 -0
- package/dist/kit/State.d.ts +26 -22
- package/dist/kit/State.js +80 -78
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +25 -37
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts +11 -0
- package/dist/kit/domHelpers.d.ts +10 -8
- package/dist/kit/domHelpers.js +25 -43
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +11 -9
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts +8 -0
- package/dist/kit/eventHandlers.d.ts +7 -3
- package/dist/kit/eventHandlers.js +11 -11
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +9 -7
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts +10 -0
- package/dist/kit/getDefault.d.ts +10 -8
- package/dist/kit/getDefault.js +9 -10
- package/dist/kit/getDefault.js.map +1 -1
- package/dist/kit/messages.cjs +8 -22
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts +5 -0
- package/dist/kit/messages.d.ts +5 -1
- package/dist/kit/messages.js +8 -23
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +12 -9
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +28 -0
- package/dist/kit/types.d.ts +24 -19
- package/dist/kit/types.js +11 -10
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +21 -26
- package/dist/kit.d.cts +8 -0
- package/dist/kit.d.ts +8 -0
- package/dist/kit.js +7 -21
- package/dist/lib/EventEmitter.cjs +16 -25
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts +12 -0
- package/dist/lib/EventEmitter.d.ts +11 -9
- package/dist/lib/EventEmitter.js +16 -26
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +21 -21
- package/dist/lib/throttle.cjs.map +1 -1
- package/dist/lib/throttle.js +21 -22
- package/dist/lib/throttle.js.map +1 -1
- package/dist/types.cjs +18 -14
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +39 -0
- package/dist/types.d.ts +32 -27
- package/dist/types.js +16 -16
- package/dist/types.js.map +1 -1
- package/package.json +27 -68
- package/src/SimulatorAPI.ts +24 -22
- package/src/SimulatorClient.ts +24 -25
- package/src/channel/ChannelEmitter.ts +71 -74
- package/src/channel/ChannelNetwork.ts +53 -55
- package/src/channel/ChannelReceiver.ts +46 -48
- package/src/channel/errors.ts +14 -14
- package/src/channel/index.ts +10 -10
- package/src/channel/messages.ts +39 -31
- package/src/channel/types.ts +40 -40
- package/src/globalExtensions.ts +6 -6
- package/src/index.ts +8 -8
- package/src/kit/SimulatorManager.ts +64 -63
- package/src/kit/State.ts +45 -44
- package/src/kit/domHelpers.ts +24 -24
- package/src/kit/eventHandlers.ts +6 -6
- package/src/kit/getDefault.ts +8 -8
- package/src/kit/index.ts +8 -8
- package/src/kit/messages.ts +5 -5
- package/src/kit/types.ts +13 -13
- package/src/lib/EventEmitter.ts +8 -8
- package/src/lib/__PRODUCTION__.ts +2 -2
- package/src/lib/throttle.ts +12 -12
- package/src/types.ts +20 -20
- package/dist/channel/index.d.ts +0 -10
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kit/index.d.ts +0 -8
- package/dist/kit.cjs.map +0 -1
- package/dist/kit.js.map +0 -1
- package/dist/lib/__PRODUCTION__.d.ts +0 -7
- package/dist/lib/throttle.d.ts +0 -1
|
@@ -1,43 +1,45 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
2
|
ExtractSuccessResponseMessage,
|
|
3
|
-
InternalEmitterRequestType,
|
|
4
3
|
InternalEmitterTransactions,
|
|
5
|
-
InternalReceiverRequestType,
|
|
6
4
|
RequestMessage,
|
|
7
5
|
ResponseMessage,
|
|
8
6
|
SuccessResponseMessage,
|
|
9
7
|
TransactionsHandlers,
|
|
10
8
|
UnknownRequestMessage,
|
|
11
9
|
UnknownResponseMessage,
|
|
12
|
-
UnknownTransaction
|
|
13
|
-
|
|
10
|
+
UnknownTransaction} from "./types";
|
|
11
|
+
import {
|
|
12
|
+
InternalEmitterRequestType,
|
|
13
|
+
InternalReceiverRequestType
|
|
14
|
+
} from "./types"
|
|
14
15
|
|
|
15
|
-
import { NotReadyError } from "./errors"
|
|
16
|
+
import { NotReadyError } from "./errors"
|
|
16
17
|
|
|
17
|
-
import {
|
|
18
|
-
ChannelNetwork,
|
|
18
|
+
import type {
|
|
19
19
|
ChannelNetworkOptions,
|
|
20
|
-
PostRequestOptions
|
|
21
|
-
|
|
20
|
+
PostRequestOptions} from "./ChannelNetwork";
|
|
21
|
+
import {
|
|
22
|
+
ChannelNetwork
|
|
23
|
+
} from "./ChannelNetwork"
|
|
22
24
|
import {
|
|
23
25
|
createErrorResponseMessage,
|
|
24
26
|
createSuccessResponseMessage,
|
|
25
27
|
isRequestMessage,
|
|
26
28
|
validateMessage,
|
|
27
|
-
} from "./messages"
|
|
29
|
+
} from "./messages"
|
|
28
30
|
|
|
29
31
|
export type ChannelReceiverOptions = {
|
|
30
|
-
readyTimeout: number
|
|
31
|
-
}
|
|
32
|
+
readyTimeout: number
|
|
33
|
+
}
|
|
32
34
|
|
|
33
35
|
export const channelReceiverDefaultOptions: ChannelReceiverOptions &
|
|
34
36
|
Partial<ChannelNetworkOptions> = {
|
|
35
37
|
readyTimeout: 20000,
|
|
36
38
|
requestIDPrefix: "receiver-",
|
|
37
|
-
}
|
|
39
|
+
}
|
|
38
40
|
|
|
39
41
|
export type AllChannelReceiverOptions = ChannelReceiverOptions &
|
|
40
|
-
ChannelNetworkOptions
|
|
42
|
+
ChannelNetworkOptions
|
|
41
43
|
|
|
42
44
|
export abstract class ChannelReceiver<
|
|
43
45
|
TEmitterTransactions extends Record<string, UnknownTransaction> = Record<
|
|
@@ -49,33 +51,31 @@ export abstract class ChannelReceiver<
|
|
|
49
51
|
TEmitterTransactions,
|
|
50
52
|
ChannelReceiverOptions & TOptions
|
|
51
53
|
> {
|
|
52
|
-
private _ready = false
|
|
54
|
+
private _ready = false
|
|
53
55
|
|
|
54
56
|
constructor(
|
|
55
57
|
requestHandlers: TransactionsHandlers<TEmitterTransactions>,
|
|
56
58
|
options: Partial<AllChannelReceiverOptions> & TOptions,
|
|
57
59
|
) {
|
|
58
|
-
super(requestHandlers, { ...channelReceiverDefaultOptions, ...options })
|
|
60
|
+
super(requestHandlers, { ...channelReceiverDefaultOptions, ...options })
|
|
59
61
|
|
|
60
62
|
window.addEventListener("message", (event) => {
|
|
61
|
-
this._onPublicMessage(event)
|
|
62
|
-
})
|
|
63
|
+
this._onPublicMessage(event)
|
|
64
|
+
})
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
/**
|
|
66
|
-
* Tells the emitter that receiver is ready
|
|
67
|
-
*/
|
|
67
|
+
/** Tells the emitter that receiver is ready */
|
|
68
68
|
public async ready(): Promise<SuccessResponseMessage> {
|
|
69
69
|
if (window.parent === window) {
|
|
70
|
-
throw new Error("Receiver is currently not embedded as an iframe")
|
|
70
|
+
throw new Error("Receiver is currently not embedded as an iframe")
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
this._ready = false
|
|
73
|
+
this._ready = false
|
|
74
74
|
|
|
75
75
|
const request = this.createRequestMessage(
|
|
76
76
|
InternalReceiverRequestType.Ready,
|
|
77
77
|
undefined,
|
|
78
|
-
)
|
|
78
|
+
)
|
|
79
79
|
|
|
80
80
|
const response = await this.postRequest<
|
|
81
81
|
RequestMessage<InternalReceiverRequestType.Ready>,
|
|
@@ -83,39 +83,37 @@ export abstract class ChannelReceiver<
|
|
|
83
83
|
>(
|
|
84
84
|
request,
|
|
85
85
|
(request) => {
|
|
86
|
-
window.parent.postMessage(request, "*")
|
|
86
|
+
window.parent.postMessage(request, "*")
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
timeout: this.options.readyTimeout,
|
|
90
90
|
},
|
|
91
|
-
)
|
|
91
|
+
)
|
|
92
92
|
|
|
93
|
-
this._ready = true
|
|
93
|
+
this._ready = true
|
|
94
94
|
|
|
95
|
-
return response
|
|
95
|
+
return response
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
/**
|
|
99
|
-
* Handles public messages
|
|
100
|
-
*/
|
|
98
|
+
/** Handles public messages */
|
|
101
99
|
private _onPublicMessage(event: MessageEvent<unknown>): void {
|
|
102
100
|
try {
|
|
103
|
-
const message = validateMessage(event.data)
|
|
101
|
+
const message = validateMessage(event.data)
|
|
104
102
|
|
|
105
103
|
if (isRequestMessage(message)) {
|
|
106
104
|
if (this.options.debug) {
|
|
107
105
|
// eslint-disable-next-line no-console
|
|
108
|
-
console.debug(event.data)
|
|
106
|
+
console.debug(event.data)
|
|
109
107
|
}
|
|
110
108
|
|
|
111
109
|
switch (message.type) {
|
|
112
110
|
case InternalEmitterRequestType.Connect:
|
|
113
111
|
// Set port
|
|
114
|
-
this.port = event.ports[0]
|
|
112
|
+
this.port = event.ports[0]
|
|
115
113
|
|
|
116
114
|
// Update options
|
|
117
115
|
const { data } =
|
|
118
|
-
message as InternalEmitterTransactions["connect"]["request"]
|
|
116
|
+
message as InternalEmitterTransactions["connect"]["request"]
|
|
119
117
|
this.options = {
|
|
120
118
|
...this.options,
|
|
121
119
|
...data,
|
|
@@ -123,32 +121,32 @@ export abstract class ChannelReceiver<
|
|
|
123
121
|
debug: this.options.debug,
|
|
124
122
|
requestIDPrefix: this.options.requestIDPrefix,
|
|
125
123
|
readyTimeout: this.options.readyTimeout,
|
|
126
|
-
}
|
|
124
|
+
}
|
|
127
125
|
|
|
128
126
|
const response = createSuccessResponseMessage(
|
|
129
127
|
message.requestID,
|
|
130
128
|
undefined,
|
|
131
|
-
)
|
|
129
|
+
)
|
|
132
130
|
|
|
133
|
-
this.postResponse(response)
|
|
134
|
-
break
|
|
131
|
+
this.postResponse(response)
|
|
132
|
+
break
|
|
135
133
|
|
|
136
134
|
default:
|
|
137
135
|
this.postResponse(
|
|
138
136
|
createErrorResponseMessage(message.requestID, undefined),
|
|
139
137
|
(response) => {
|
|
140
|
-
(event.source as WindowProxy).postMessage(
|
|
138
|
+
;(event.source as WindowProxy).postMessage(
|
|
141
139
|
response,
|
|
142
140
|
event.origin,
|
|
143
|
-
)
|
|
141
|
+
)
|
|
144
142
|
},
|
|
145
|
-
)
|
|
146
|
-
break
|
|
143
|
+
)
|
|
144
|
+
break
|
|
147
145
|
}
|
|
148
146
|
} else {
|
|
149
147
|
// Forward response messages to default message handler if necessary
|
|
150
148
|
if (!this._ready) {
|
|
151
|
-
this.onMessage(event)
|
|
149
|
+
this.onMessage(event)
|
|
152
150
|
}
|
|
153
151
|
}
|
|
154
152
|
} catch (error) {
|
|
@@ -156,7 +154,7 @@ export abstract class ChannelReceiver<
|
|
|
156
154
|
// Ignore unknown messages
|
|
157
155
|
} else {
|
|
158
156
|
// Should not be possible, but who knows :shrug:
|
|
159
|
-
throw error
|
|
157
|
+
throw error
|
|
160
158
|
}
|
|
161
159
|
}
|
|
162
160
|
}
|
|
@@ -172,13 +170,13 @@ export abstract class ChannelReceiver<
|
|
|
172
170
|
if (!this._ready) {
|
|
173
171
|
throw new NotReadyError(
|
|
174
172
|
"Receiver is not ready, use `ChannelReceiver.ready()` first",
|
|
175
|
-
)
|
|
173
|
+
)
|
|
176
174
|
}
|
|
177
175
|
|
|
178
176
|
return this.postRequest(
|
|
179
177
|
this.createRequestMessage(type, data),
|
|
180
178
|
undefined,
|
|
181
179
|
options,
|
|
182
|
-
)
|
|
180
|
+
)
|
|
183
181
|
}
|
|
184
182
|
}
|
package/src/channel/errors.ts
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
import { UnknownErrorResponseMessage } from "."
|
|
1
|
+
import type { UnknownErrorResponseMessage } from "."
|
|
2
2
|
|
|
3
|
-
import { UnknownRequestMessage } from "./types"
|
|
3
|
+
import type { UnknownRequestMessage } from "./types"
|
|
4
4
|
|
|
5
5
|
export class ResponseError<
|
|
6
6
|
TErrorResponse extends UnknownErrorResponseMessage,
|
|
7
7
|
> extends Error {
|
|
8
|
-
public response: TErrorResponse
|
|
8
|
+
public response: TErrorResponse
|
|
9
9
|
|
|
10
10
|
constructor(errorResponse: TErrorResponse) {
|
|
11
|
-
super(errorResponse.msg)
|
|
11
|
+
super(errorResponse.msg)
|
|
12
12
|
|
|
13
|
-
this.response = errorResponse
|
|
13
|
+
this.response = errorResponse
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export class ConnectionTimeoutError extends Error {
|
|
18
18
|
constructor() {
|
|
19
|
-
super("Connection timed out")
|
|
19
|
+
super("Connection timed out")
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
export class TooManyConcurrentRequestsError extends Error {
|
|
23
|
-
public request: UnknownRequestMessage
|
|
23
|
+
public request: UnknownRequestMessage
|
|
24
24
|
|
|
25
25
|
constructor(request: UnknownRequestMessage) {
|
|
26
|
-
super(`Too many concurrent requests`)
|
|
26
|
+
super(`Too many concurrent requests`)
|
|
27
27
|
|
|
28
|
-
this.request = request
|
|
28
|
+
this.request = request
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
export class RequestTimeoutError<
|
|
32
32
|
TRequest extends UnknownRequestMessage,
|
|
33
33
|
> extends Error {
|
|
34
|
-
public request: UnknownRequestMessage
|
|
34
|
+
public request: UnknownRequestMessage
|
|
35
35
|
|
|
36
36
|
constructor(request: TRequest) {
|
|
37
|
-
super(`Request \`${request.requestID}\` timed out`)
|
|
37
|
+
super(`Request \`${request.requestID}\` timed out`)
|
|
38
38
|
|
|
39
|
-
this.request = request
|
|
39
|
+
this.request = request
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
export class NotReadyError extends Error {}
|
|
44
44
|
export class PortNotSetError extends Error {
|
|
45
45
|
constructor() {
|
|
46
|
-
super("Port is not set")
|
|
46
|
+
super("Port is not set")
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
export class ChannelNotSetError extends Error {
|
|
50
50
|
constructor() {
|
|
51
|
-
super("Channel is not set")
|
|
51
|
+
super("Channel is not set")
|
|
52
52
|
}
|
|
53
53
|
}
|
package/src/channel/index.ts
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
1
|
+
export { ChannelNetwork, channelNetworkDefaultOptions } from "./ChannelNetwork"
|
|
2
2
|
export type {
|
|
3
3
|
PostRequestOptions,
|
|
4
4
|
ChannelNetworkOptions,
|
|
5
|
-
} from "./ChannelNetwork"
|
|
5
|
+
} from "./ChannelNetwork"
|
|
6
6
|
|
|
7
|
-
export { ChannelEmitter, channelEmitterDefaultOptions } from "./ChannelEmitter"
|
|
7
|
+
export { ChannelEmitter, channelEmitterDefaultOptions } from "./ChannelEmitter"
|
|
8
8
|
export type {
|
|
9
9
|
ChannelEmitterOptions,
|
|
10
10
|
AllChannelEmitterOptions,
|
|
11
|
-
} from "./ChannelEmitter"
|
|
11
|
+
} from "./ChannelEmitter"
|
|
12
12
|
|
|
13
13
|
export {
|
|
14
14
|
ChannelReceiver,
|
|
15
15
|
channelReceiverDefaultOptions,
|
|
16
|
-
} from "./ChannelReceiver"
|
|
16
|
+
} from "./ChannelReceiver"
|
|
17
17
|
export type {
|
|
18
18
|
ChannelReceiverOptions,
|
|
19
19
|
AllChannelReceiverOptions,
|
|
20
|
-
} from "./ChannelReceiver"
|
|
20
|
+
} from "./ChannelReceiver"
|
|
21
21
|
|
|
22
22
|
export {
|
|
23
23
|
createRequestMessage,
|
|
@@ -28,7 +28,7 @@ export {
|
|
|
28
28
|
isResponseMessage,
|
|
29
29
|
isSuccessResponseMessage,
|
|
30
30
|
isErrorResponseMessage,
|
|
31
|
-
} from "./messages"
|
|
31
|
+
} from "./messages"
|
|
32
32
|
|
|
33
33
|
export {
|
|
34
34
|
ResponseError,
|
|
@@ -38,12 +38,12 @@ export {
|
|
|
38
38
|
NotReadyError,
|
|
39
39
|
PortNotSetError,
|
|
40
40
|
ChannelNotSetError,
|
|
41
|
-
} from "./errors"
|
|
41
|
+
} from "./errors"
|
|
42
42
|
|
|
43
43
|
export {
|
|
44
44
|
InternalEmitterRequestType,
|
|
45
45
|
InternalReceiverRequestType,
|
|
46
|
-
} from "./types"
|
|
46
|
+
} from "./types"
|
|
47
47
|
export type {
|
|
48
48
|
// Messages
|
|
49
49
|
RequestMessage,
|
|
@@ -72,4 +72,4 @@ export type {
|
|
|
72
72
|
InternalEmitterTransactions,
|
|
73
73
|
// Receiver
|
|
74
74
|
InternalReceiverTransactions,
|
|
75
|
-
} from "./types"
|
|
75
|
+
} from "./types"
|
package/src/channel/messages.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import {
|
|
1
|
+
import type {
|
|
4
2
|
ErrorResponseMessage,
|
|
5
3
|
RequestMessage,
|
|
6
4
|
SuccessResponseMessage,
|
|
@@ -9,9 +7,19 @@ import {
|
|
|
9
7
|
UnknownRequestMessage,
|
|
10
8
|
UnknownResponseMessage,
|
|
11
9
|
UnknownSuccessResponseMessage,
|
|
12
|
-
} from "./types"
|
|
10
|
+
} from "./types"
|
|
11
|
+
|
|
12
|
+
// Adapted from https://github.com/jshttp/statuses/blob/770a97d931c1bb40ebbfefdbb77f0419601890b5/codes.json
|
|
13
|
+
const statuses = {
|
|
14
|
+
200: "ok",
|
|
15
|
+
201: "created",
|
|
16
|
+
|
|
17
|
+
400: "bad request",
|
|
18
|
+
500: "internal server error",
|
|
19
|
+
501: "not implemented",
|
|
20
|
+
}
|
|
13
21
|
|
|
14
|
-
let requestID = 0
|
|
22
|
+
let requestID = 0
|
|
15
23
|
|
|
16
24
|
export const createRequestMessage = <
|
|
17
25
|
TType extends string = string,
|
|
@@ -25,58 +33,58 @@ export const createRequestMessage = <
|
|
|
25
33
|
requestID: `${prefix}${requestID++}`,
|
|
26
34
|
type,
|
|
27
35
|
data,
|
|
28
|
-
}
|
|
29
|
-
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
30
38
|
|
|
31
39
|
export const createSuccessResponseMessage = <TData = undefined>(
|
|
32
40
|
requestID: string,
|
|
33
41
|
data: TData,
|
|
34
|
-
status: keyof typeof statuses
|
|
42
|
+
status: keyof typeof statuses = 200,
|
|
35
43
|
): SuccessResponseMessage<TData> => {
|
|
36
44
|
if (status >= 400) {
|
|
37
45
|
throw new TypeError(
|
|
38
46
|
`Invalid success status code, expected status to be within \`[100;400[\`, got \`${status}\``,
|
|
39
|
-
)
|
|
47
|
+
)
|
|
40
48
|
}
|
|
41
49
|
|
|
42
50
|
return {
|
|
43
51
|
requestID,
|
|
44
52
|
status,
|
|
45
|
-
msg: statuses
|
|
53
|
+
msg: statuses[status] ?? "",
|
|
46
54
|
data,
|
|
47
|
-
}
|
|
48
|
-
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
49
57
|
|
|
50
58
|
export const createErrorResponseMessage = <TError = undefined>(
|
|
51
59
|
requestID: string,
|
|
52
60
|
error: TError,
|
|
53
|
-
status: keyof typeof statuses
|
|
61
|
+
status: keyof typeof statuses = 400,
|
|
54
62
|
): ErrorResponseMessage<TError> => {
|
|
55
63
|
if (status < 400) {
|
|
56
64
|
throw new TypeError(
|
|
57
|
-
`Invalid error status code, expected status to be within \`[
|
|
58
|
-
)
|
|
65
|
+
`Invalid error status code, expected status to be within \`[400;600[\`, got \`${status}\``,
|
|
66
|
+
)
|
|
59
67
|
}
|
|
60
68
|
|
|
61
69
|
return {
|
|
62
70
|
requestID,
|
|
63
71
|
status,
|
|
64
|
-
msg: statuses
|
|
72
|
+
msg: statuses[status] ?? "",
|
|
65
73
|
error,
|
|
66
|
-
}
|
|
67
|
-
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
68
76
|
|
|
69
77
|
export const validateMessage = (message: unknown): UnknownMessage => {
|
|
70
78
|
if (typeof message !== "object" || message === null) {
|
|
71
79
|
throw new TypeError(
|
|
72
80
|
`Invalid message received, expected message to be of type \`object\`, got \`${typeof message}\``,
|
|
73
|
-
)
|
|
81
|
+
)
|
|
74
82
|
} else if (
|
|
75
83
|
!Object.keys(message).every((key) =>
|
|
76
84
|
["requestID", "type", "data", "status", "msg", "error"].includes(key),
|
|
77
85
|
)
|
|
78
86
|
) {
|
|
79
|
-
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
87
|
+
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
80
88
|
} else if (
|
|
81
89
|
typeof (message as Record<string, unknown>).requestID !== "string"
|
|
82
90
|
) {
|
|
@@ -84,32 +92,32 @@ export const validateMessage = (message: unknown): UnknownMessage => {
|
|
|
84
92
|
`Invalid message received, expected \`message.requestID\` to be of type \`string\`, got \`${typeof (
|
|
85
93
|
message as Record<string, unknown>
|
|
86
94
|
).id}\``,
|
|
87
|
-
)
|
|
95
|
+
)
|
|
88
96
|
}
|
|
89
97
|
|
|
90
|
-
return message as UnknownMessage
|
|
91
|
-
}
|
|
98
|
+
return message as UnknownMessage
|
|
99
|
+
}
|
|
92
100
|
|
|
93
101
|
export const isRequestMessage = (
|
|
94
102
|
message: UnknownMessage,
|
|
95
103
|
): message is UnknownRequestMessage => {
|
|
96
|
-
return "type" in message
|
|
97
|
-
}
|
|
104
|
+
return "type" in message
|
|
105
|
+
}
|
|
98
106
|
|
|
99
107
|
export const isResponseMessage = (
|
|
100
108
|
message: UnknownMessage,
|
|
101
109
|
): message is UnknownResponseMessage => {
|
|
102
|
-
return !("type" in message)
|
|
103
|
-
}
|
|
110
|
+
return !("type" in message)
|
|
111
|
+
}
|
|
104
112
|
|
|
105
113
|
export const isSuccessResponseMessage = (
|
|
106
114
|
message: UnknownMessage,
|
|
107
115
|
): message is UnknownSuccessResponseMessage => {
|
|
108
|
-
return isResponseMessage(message) && !("error" in message)
|
|
109
|
-
}
|
|
116
|
+
return isResponseMessage(message) && !("error" in message)
|
|
117
|
+
}
|
|
110
118
|
|
|
111
119
|
export const isErrorResponseMessage = (
|
|
112
120
|
message: UnknownMessage,
|
|
113
121
|
): message is UnknownErrorResponseMessage => {
|
|
114
|
-
return isResponseMessage(message) && !("data" in message)
|
|
115
|
-
}
|
|
122
|
+
return isResponseMessage(message) && !("data" in message)
|
|
123
|
+
}
|
package/src/channel/types.ts
CHANGED
|
@@ -1,61 +1,61 @@
|
|
|
1
1
|
// Messages
|
|
2
2
|
export type MessageBase = {
|
|
3
|
-
requestID: string
|
|
4
|
-
}
|
|
3
|
+
requestID: string
|
|
4
|
+
}
|
|
5
5
|
|
|
6
6
|
export type RequestMessage<TType extends string = string, TData = void> = {
|
|
7
|
-
type: TType
|
|
8
|
-
data: TData
|
|
9
|
-
} & MessageBase
|
|
7
|
+
type: TType
|
|
8
|
+
data: TData
|
|
9
|
+
} & MessageBase
|
|
10
10
|
|
|
11
11
|
export type ResponseMessageBase = {
|
|
12
|
-
status: number
|
|
13
|
-
msg: string
|
|
14
|
-
} & MessageBase
|
|
12
|
+
status: number
|
|
13
|
+
msg: string
|
|
14
|
+
} & MessageBase
|
|
15
15
|
|
|
16
16
|
export type SuccessResponseMessage<TData = void> = {
|
|
17
|
-
data: TData
|
|
18
|
-
error?: never
|
|
19
|
-
} & ResponseMessageBase
|
|
17
|
+
data: TData
|
|
18
|
+
error?: never
|
|
19
|
+
} & ResponseMessageBase
|
|
20
20
|
|
|
21
21
|
export type ErrorResponseMessage<TError = unknown> = {
|
|
22
|
-
data?: never
|
|
23
|
-
error: unknown | TError
|
|
24
|
-
} & ResponseMessageBase
|
|
22
|
+
data?: never
|
|
23
|
+
error: unknown | TError
|
|
24
|
+
} & ResponseMessageBase
|
|
25
25
|
|
|
26
26
|
export type ResponseMessage<TData = void, TError = unknown> =
|
|
27
27
|
| SuccessResponseMessage<TData>
|
|
28
|
-
| ErrorResponseMessage<TError
|
|
28
|
+
| ErrorResponseMessage<TError>
|
|
29
29
|
|
|
30
30
|
export type ExtractSuccessResponseMessage<
|
|
31
31
|
TResponse extends UnknownResponseMessage,
|
|
32
|
-
> = Extract<TResponse, { error?: never }
|
|
32
|
+
> = Extract<TResponse, { error?: never }>
|
|
33
33
|
|
|
34
34
|
export type ExtractErrorResponseMessage<
|
|
35
35
|
TResponse extends UnknownResponseMessage,
|
|
36
|
-
> = Extract<TResponse, { data?: never }
|
|
36
|
+
> = Extract<TResponse, { data?: never }>
|
|
37
37
|
|
|
38
38
|
// Unknown messages
|
|
39
|
-
export type UnknownRequestMessage = RequestMessage<string, unknown
|
|
39
|
+
export type UnknownRequestMessage = RequestMessage<string, unknown>
|
|
40
40
|
|
|
41
|
-
export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown
|
|
41
|
+
export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>
|
|
42
42
|
|
|
43
|
-
export type UnknownErrorResponseMessage = ErrorResponseMessage<unknown
|
|
43
|
+
export type UnknownErrorResponseMessage = ErrorResponseMessage<unknown>
|
|
44
44
|
|
|
45
45
|
export type UnknownResponseMessage =
|
|
46
46
|
| UnknownSuccessResponseMessage
|
|
47
|
-
| UnknownErrorResponseMessage
|
|
47
|
+
| UnknownErrorResponseMessage
|
|
48
48
|
|
|
49
|
-
export type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage
|
|
49
|
+
export type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage
|
|
50
50
|
|
|
51
51
|
// Transactions
|
|
52
52
|
export type Transaction<
|
|
53
53
|
TRequest extends UnknownRequestMessage,
|
|
54
54
|
TResponse extends UnknownResponseMessage = ResponseMessage<void>,
|
|
55
55
|
> = {
|
|
56
|
-
request: TRequest
|
|
57
|
-
response: TResponse
|
|
58
|
-
}
|
|
56
|
+
request: TRequest
|
|
57
|
+
response: TResponse
|
|
58
|
+
}
|
|
59
59
|
|
|
60
60
|
export type TransactionMethod<
|
|
61
61
|
TTransaction extends Transaction<
|
|
@@ -64,7 +64,7 @@ export type TransactionMethod<
|
|
|
64
64
|
>,
|
|
65
65
|
> = (
|
|
66
66
|
data: TTransaction["request"]["data"],
|
|
67
|
-
) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]
|
|
67
|
+
) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]>>
|
|
68
68
|
|
|
69
69
|
export type TransactionHandler<
|
|
70
70
|
TTransaction extends Transaction<
|
|
@@ -77,35 +77,35 @@ export type TransactionHandler<
|
|
|
77
77
|
success: (
|
|
78
78
|
data: ExtractSuccessResponseMessage<TTransaction["response"]>["data"],
|
|
79
79
|
status?: number,
|
|
80
|
-
) => ExtractSuccessResponseMessage<TTransaction["response"]
|
|
80
|
+
) => ExtractSuccessResponseMessage<TTransaction["response"]>
|
|
81
81
|
error: (
|
|
82
82
|
error: ExtractErrorResponseMessage<TTransaction["response"]>["error"],
|
|
83
83
|
status?: number,
|
|
84
|
-
) => ExtractErrorResponseMessage<TTransaction["response"]
|
|
84
|
+
) => ExtractErrorResponseMessage<TTransaction["response"]>
|
|
85
85
|
},
|
|
86
|
-
) => Promise<TTransaction["response"]> | TTransaction["response"]
|
|
86
|
+
) => Promise<TTransaction["response"]> | TTransaction["response"]
|
|
87
87
|
|
|
88
88
|
export type TransactionsMethods<
|
|
89
89
|
TTransactions extends Record<string, UnknownTransaction>,
|
|
90
90
|
> = {
|
|
91
|
-
[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]
|
|
92
|
-
}
|
|
91
|
+
[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>
|
|
92
|
+
}
|
|
93
93
|
|
|
94
94
|
export type TransactionsHandlers<
|
|
95
95
|
TTransactions extends Record<string, UnknownTransaction>,
|
|
96
96
|
> = {
|
|
97
|
-
[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]
|
|
98
|
-
}
|
|
97
|
+
[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>
|
|
98
|
+
}
|
|
99
99
|
|
|
100
100
|
// Unknown transactions
|
|
101
101
|
export type UnknownTransaction = Transaction<
|
|
102
102
|
UnknownRequestMessage,
|
|
103
103
|
UnknownResponseMessage
|
|
104
|
-
|
|
104
|
+
>
|
|
105
105
|
|
|
106
|
-
export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction
|
|
106
|
+
export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction>
|
|
107
107
|
|
|
108
|
-
export type UnknownTransactionHandler = TransactionHandler<UnknownTransaction
|
|
108
|
+
export type UnknownTransactionHandler = TransactionHandler<UnknownTransaction>
|
|
109
109
|
|
|
110
110
|
// Emitter
|
|
111
111
|
export enum InternalEmitterRequestType {
|
|
@@ -123,8 +123,8 @@ export type InternalEmitterTransactions<
|
|
|
123
123
|
>
|
|
124
124
|
| undefined
|
|
125
125
|
>
|
|
126
|
-
|
|
127
|
-
}
|
|
126
|
+
>
|
|
127
|
+
}
|
|
128
128
|
|
|
129
129
|
// Receiver
|
|
130
130
|
export enum InternalReceiverRequestType {
|
|
@@ -134,5 +134,5 @@ export enum InternalReceiverRequestType {
|
|
|
134
134
|
export type InternalReceiverTransactions = {
|
|
135
135
|
[InternalReceiverRequestType.Ready]: Transaction<
|
|
136
136
|
RequestMessage<InternalReceiverRequestType.Ready>
|
|
137
|
-
|
|
138
|
-
}
|
|
137
|
+
>
|
|
138
|
+
}
|
package/src/globalExtensions.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { SimulatorAPI } from "./SimulatorAPI"
|
|
2
|
-
import { SimulatorClient } from "./SimulatorClient"
|
|
1
|
+
import type { SimulatorAPI } from "./SimulatorAPI"
|
|
2
|
+
import type { SimulatorClient } from "./SimulatorClient"
|
|
3
3
|
|
|
4
4
|
declare global {
|
|
5
5
|
interface Window {
|
|
6
6
|
prismic?: {
|
|
7
7
|
sliceSimulator?: {
|
|
8
|
-
api?: SimulatorAPI[]
|
|
9
|
-
client?: SimulatorClient[]
|
|
10
|
-
}
|
|
11
|
-
}
|
|
8
|
+
api?: SimulatorAPI[]
|
|
9
|
+
client?: SimulatorClient[]
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
12
|
}
|
|
13
13
|
}
|