@prismicio/simulator 0.1.4 → 0.2.0-canary.a0bdcb9
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 +36 -46
- package/dist/SimulatorAPI.cjs.map +1 -1
- package/dist/SimulatorAPI.d.cts +18 -0
- package/dist/SimulatorAPI.d.cts.map +1 -0
- package/dist/SimulatorAPI.d.ts +16 -10
- package/dist/SimulatorAPI.d.ts.map +1 -0
- package/dist/SimulatorAPI.js +35 -46
- package/dist/SimulatorAPI.js.map +1 -1
- package/dist/SimulatorClient.cjs +39 -51
- package/dist/SimulatorClient.cjs.map +1 -1
- package/dist/SimulatorClient.d.cts +16 -0
- package/dist/SimulatorClient.d.cts.map +1 -0
- package/dist/SimulatorClient.d.ts +15 -9
- package/dist/SimulatorClient.d.ts.map +1 -0
- package/dist/SimulatorClient.js +39 -52
- package/dist/SimulatorClient.js.map +1 -1
- package/dist/channel/ChannelEmitter.cjs +109 -143
- package/dist/channel/ChannelEmitter.cjs.map +1 -1
- package/dist/channel/ChannelEmitter.d.cts +36 -0
- package/dist/channel/ChannelEmitter.d.cts.map +1 -0
- package/dist/channel/ChannelEmitter.d.ts +34 -36
- package/dist/channel/ChannelEmitter.d.ts.map +1 -0
- package/dist/channel/ChannelEmitter.js +107 -141
- package/dist/channel/ChannelEmitter.js.map +1 -1
- package/dist/channel/ChannelNetwork.cjs +80 -109
- package/dist/channel/ChannelNetwork.cjs.map +1 -1
- package/dist/channel/ChannelNetwork.d.cts +28 -0
- package/dist/channel/ChannelNetwork.d.cts.map +1 -0
- package/dist/channel/ChannelNetwork.d.ts +25 -21
- package/dist/channel/ChannelNetwork.d.ts.map +1 -0
- package/dist/channel/ChannelNetwork.js +80 -109
- package/dist/channel/ChannelNetwork.js.map +1 -1
- package/dist/channel/ChannelReceiver.cjs +68 -92
- package/dist/channel/ChannelReceiver.cjs.map +1 -1
- package/dist/channel/ChannelReceiver.d.cts +20 -0
- package/dist/channel/ChannelReceiver.d.cts.map +1 -0
- package/dist/channel/ChannelReceiver.d.ts +18 -18
- package/dist/channel/ChannelReceiver.d.ts.map +1 -0
- package/dist/channel/ChannelReceiver.js +66 -90
- package/dist/channel/ChannelReceiver.js.map +1 -1
- package/dist/channel/errors.cjs +40 -46
- package/dist/channel/errors.cjs.map +1 -1
- package/dist/channel/errors.d.cts +28 -0
- package/dist/channel/errors.d.cts.map +1 -0
- package/dist/channel/errors.d.ts +22 -19
- package/dist/channel/errors.d.ts.map +1 -0
- package/dist/channel/errors.js +40 -52
- package/dist/channel/errors.js.map +1 -1
- package/dist/channel/messages.cjs +47 -43
- package/dist/channel/messages.cjs.map +1 -1
- package/dist/channel/messages.d.cts +11 -0
- package/dist/channel/messages.d.cts.map +1 -0
- package/dist/channel/messages.d.ts +11 -10
- package/dist/channel/messages.d.ts.map +1 -0
- package/dist/channel/messages.js +50 -53
- package/dist/channel/messages.js.map +1 -1
- package/dist/channel/types.cjs +14 -11
- package/dist/channel/types.cjs.map +1 -1
- package/dist/channel/types.d.cts +53 -0
- package/dist/channel/types.d.cts.map +1 -0
- package/dist/channel/types.d.ts +42 -50
- package/dist/channel/types.d.ts.map +1 -0
- 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.cts.map +1 -0
- package/dist/globalExtensions.d.ts +14 -11
- package/dist/globalExtensions.d.ts.map +1 -0
- package/dist/index.cjs +23 -32
- package/dist/index.d.cts +9 -0
- package/dist/index.d.ts +9 -8
- package/dist/index.js +3 -24
- package/dist/kit/SimulatorManager.cjs +103 -137
- package/dist/kit/SimulatorManager.cjs.map +1 -1
- package/dist/kit/SimulatorManager.d.cts +19 -0
- package/dist/kit/SimulatorManager.d.cts.map +1 -0
- package/dist/kit/SimulatorManager.d.ts +16 -12
- package/dist/kit/SimulatorManager.d.ts.map +1 -0
- package/dist/kit/SimulatorManager.js +101 -135
- package/dist/kit/SimulatorManager.js.map +1 -1
- package/dist/kit/State.cjs +81 -80
- package/dist/kit/State.cjs.map +1 -1
- package/dist/kit/State.d.cts +29 -0
- package/dist/kit/State.d.cts.map +1 -0
- package/dist/kit/State.d.ts +26 -22
- package/dist/kit/State.d.ts.map +1 -0
- package/dist/kit/State.js +80 -79
- package/dist/kit/State.js.map +1 -1
- package/dist/kit/domHelpers.cjs +24 -37
- package/dist/kit/domHelpers.cjs.map +1 -1
- package/dist/kit/domHelpers.d.cts +11 -0
- package/dist/kit/domHelpers.d.cts.map +1 -0
- package/dist/kit/domHelpers.d.ts +10 -8
- package/dist/kit/domHelpers.d.ts.map +1 -0
- package/dist/kit/domHelpers.js +25 -43
- package/dist/kit/domHelpers.js.map +1 -1
- package/dist/kit/eventHandlers.cjs +10 -9
- package/dist/kit/eventHandlers.cjs.map +1 -1
- package/dist/kit/eventHandlers.d.cts +8 -0
- package/dist/kit/eventHandlers.d.cts.map +1 -0
- package/dist/kit/eventHandlers.d.ts +7 -3
- package/dist/kit/eventHandlers.d.ts.map +1 -0
- package/dist/kit/eventHandlers.js +11 -11
- package/dist/kit/eventHandlers.js.map +1 -1
- package/dist/kit/getDefault.cjs +8 -7
- package/dist/kit/getDefault.cjs.map +1 -1
- package/dist/kit/getDefault.d.cts +10 -0
- package/dist/kit/getDefault.d.cts.map +1 -0
- package/dist/kit/getDefault.d.ts +10 -8
- package/dist/kit/getDefault.d.ts.map +1 -0
- package/dist/kit/getDefault.js +9 -10
- package/dist/kit/getDefault.js.map +1 -1
- package/dist/kit/messages.cjs +7 -24
- package/dist/kit/messages.cjs.map +1 -1
- package/dist/kit/messages.d.cts +5 -0
- package/dist/kit/messages.d.cts.map +1 -0
- package/dist/kit/messages.d.ts +5 -1
- package/dist/kit/messages.d.ts.map +1 -0
- package/dist/kit/messages.js +8 -25
- package/dist/kit/messages.js.map +1 -1
- package/dist/kit/types.cjs +11 -9
- package/dist/kit/types.cjs.map +1 -1
- package/dist/kit/types.d.cts +28 -0
- package/dist/kit/types.d.cts.map +1 -0
- package/dist/kit/types.d.ts +24 -19
- package/dist/kit/types.d.ts.map +1 -0
- package/dist/kit/types.js +11 -10
- package/dist/kit/types.js.map +1 -1
- package/dist/kit.cjs +20 -25
- package/dist/kit.d.cts +8 -0
- package/dist/kit.d.ts +8 -0
- package/dist/kit.js +5 -20
- package/dist/lib/EventEmitter.cjs +15 -25
- package/dist/lib/EventEmitter.cjs.map +1 -1
- package/dist/lib/EventEmitter.d.cts +12 -0
- package/dist/lib/EventEmitter.d.cts.map +1 -0
- package/dist/lib/EventEmitter.d.ts +11 -9
- package/dist/lib/EventEmitter.d.ts.map +1 -0
- package/dist/lib/EventEmitter.js +16 -26
- package/dist/lib/EventEmitter.js.map +1 -1
- package/dist/lib/throttle.cjs +20 -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 +17 -14
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +39 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.ts +32 -27
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -16
- package/dist/types.js.map +1 -1
- package/package.json +44 -87
- package/src/SimulatorAPI.ts +26 -40
- package/src/SimulatorClient.ts +25 -43
- package/src/channel/ChannelEmitter.ts +75 -110
- package/src/channel/ChannelNetwork.ts +71 -98
- package/src/channel/ChannelReceiver.ts +45 -78
- package/src/channel/errors.ts +16 -21
- package/src/channel/index.ts +10 -25
- package/src/channel/messages.ts +43 -44
- package/src/channel/types.ts +51 -67
- package/src/globalExtensions.ts +6 -6
- package/src/index.ts +8 -16
- package/src/kit/SimulatorManager.ts +66 -78
- package/src/kit/State.ts +45 -49
- package/src/kit/domHelpers.ts +25 -27
- package/src/kit/eventHandlers.ts +8 -13
- package/src/kit/getDefault.ts +8 -8
- package/src/kit/index.ts +8 -12
- package/src/kit/messages.ts +5 -6
- package/src/kit/types.ts +13 -14
- package/src/lib/EventEmitter.ts +10 -16
- package/src/lib/__PRODUCTION__.ts +3 -4
- 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
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,14 +7,21 @@ 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",
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
400: "bad request",
|
|
18
|
+
500: "internal server error",
|
|
19
|
+
501: "not implemented",
|
|
20
|
+
}
|
|
15
21
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
>(
|
|
22
|
+
let requestID = 0
|
|
23
|
+
|
|
24
|
+
export const createRequestMessage = <TType extends string = string, TData = undefined>(
|
|
20
25
|
type: TType,
|
|
21
26
|
data: TData,
|
|
22
27
|
prefix = "",
|
|
@@ -25,91 +30,85 @@ export const createRequestMessage = <
|
|
|
25
30
|
requestID: `${prefix}${requestID++}`,
|
|
26
31
|
type,
|
|
27
32
|
data,
|
|
28
|
-
}
|
|
29
|
-
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
30
35
|
|
|
31
36
|
export const createSuccessResponseMessage = <TData = undefined>(
|
|
32
37
|
requestID: string,
|
|
33
38
|
data: TData,
|
|
34
|
-
status: keyof typeof statuses
|
|
39
|
+
status: keyof typeof statuses = 200,
|
|
35
40
|
): SuccessResponseMessage<TData> => {
|
|
36
41
|
if (status >= 400) {
|
|
37
42
|
throw new TypeError(
|
|
38
43
|
`Invalid success status code, expected status to be within \`[100;400[\`, got \`${status}\``,
|
|
39
|
-
)
|
|
44
|
+
)
|
|
40
45
|
}
|
|
41
46
|
|
|
42
47
|
return {
|
|
43
48
|
requestID,
|
|
44
49
|
status,
|
|
45
|
-
msg: statuses
|
|
50
|
+
msg: statuses[status] ?? "",
|
|
46
51
|
data,
|
|
47
|
-
}
|
|
48
|
-
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
49
54
|
|
|
50
55
|
export const createErrorResponseMessage = <TError = undefined>(
|
|
51
56
|
requestID: string,
|
|
52
57
|
error: TError,
|
|
53
|
-
status: keyof typeof statuses
|
|
58
|
+
status: keyof typeof statuses = 400,
|
|
54
59
|
): ErrorResponseMessage<TError> => {
|
|
55
60
|
if (status < 400) {
|
|
56
61
|
throw new TypeError(
|
|
57
|
-
`Invalid error status code, expected status to be within \`[
|
|
58
|
-
)
|
|
62
|
+
`Invalid error status code, expected status to be within \`[400;600[\`, got \`${status}\``,
|
|
63
|
+
)
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
return {
|
|
62
67
|
requestID,
|
|
63
68
|
status,
|
|
64
|
-
msg: statuses
|
|
69
|
+
msg: statuses[status] ?? "",
|
|
65
70
|
error,
|
|
66
|
-
}
|
|
67
|
-
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
68
73
|
|
|
69
74
|
export const validateMessage = (message: unknown): UnknownMessage => {
|
|
70
75
|
if (typeof message !== "object" || message === null) {
|
|
71
76
|
throw new TypeError(
|
|
72
77
|
`Invalid message received, expected message to be of type \`object\`, got \`${typeof message}\``,
|
|
73
|
-
)
|
|
78
|
+
)
|
|
74
79
|
} else if (
|
|
75
80
|
!Object.keys(message).every((key) =>
|
|
76
81
|
["requestID", "type", "data", "status", "msg", "error"].includes(key),
|
|
77
82
|
)
|
|
78
83
|
) {
|
|
79
|
-
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
80
|
-
} else if (
|
|
81
|
-
typeof (message as Record<string, unknown>).requestID !== "string"
|
|
82
|
-
) {
|
|
84
|
+
throw new TypeError(`Invalid message received: ${JSON.stringify(message)}`)
|
|
85
|
+
} else if (typeof (message as Record<string, unknown>).requestID !== "string") {
|
|
83
86
|
throw new TypeError(
|
|
84
87
|
`Invalid message received, expected \`message.requestID\` to be of type \`string\`, got \`${typeof (
|
|
85
88
|
message as Record<string, unknown>
|
|
86
89
|
).id}\``,
|
|
87
|
-
)
|
|
90
|
+
)
|
|
88
91
|
}
|
|
89
92
|
|
|
90
|
-
return message as UnknownMessage
|
|
91
|
-
}
|
|
93
|
+
return message as UnknownMessage
|
|
94
|
+
}
|
|
92
95
|
|
|
93
|
-
export const isRequestMessage = (
|
|
94
|
-
message
|
|
95
|
-
|
|
96
|
-
return "type" in message;
|
|
97
|
-
};
|
|
96
|
+
export const isRequestMessage = (message: UnknownMessage): message is UnknownRequestMessage => {
|
|
97
|
+
return "type" in message
|
|
98
|
+
}
|
|
98
99
|
|
|
99
|
-
export const isResponseMessage = (
|
|
100
|
-
message
|
|
101
|
-
|
|
102
|
-
return !("type" in message);
|
|
103
|
-
};
|
|
100
|
+
export const isResponseMessage = (message: UnknownMessage): message is UnknownResponseMessage => {
|
|
101
|
+
return !("type" in message)
|
|
102
|
+
}
|
|
104
103
|
|
|
105
104
|
export const isSuccessResponseMessage = (
|
|
106
105
|
message: UnknownMessage,
|
|
107
106
|
): message is UnknownSuccessResponseMessage => {
|
|
108
|
-
return isResponseMessage(message) && !("error" in message)
|
|
109
|
-
}
|
|
107
|
+
return isResponseMessage(message) && !("error" in message)
|
|
108
|
+
}
|
|
110
109
|
|
|
111
110
|
export const isErrorResponseMessage = (
|
|
112
111
|
message: UnknownMessage,
|
|
113
112
|
): message is UnknownErrorResponseMessage => {
|
|
114
|
-
return isResponseMessage(message) && !("data" in message)
|
|
115
|
-
}
|
|
113
|
+
return isResponseMessage(message) && !("data" in message)
|
|
114
|
+
}
|
package/src/channel/types.ts
CHANGED
|
@@ -1,111 +1,98 @@
|
|
|
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
|
-
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
|
-
export type UnknownRequestMessage = RequestMessage<string, unknown
|
|
41
|
+
export type UnknownRequestMessage = RequestMessage<string, unknown>
|
|
40
42
|
|
|
41
|
-
export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown
|
|
43
|
+
export type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>
|
|
42
44
|
|
|
43
|
-
export type UnknownErrorResponseMessage = ErrorResponseMessage<unknown
|
|
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
|
-
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
|
-
TTransaction extends Transaction<
|
|
62
|
-
UnknownRequestMessage,
|
|
63
|
-
UnknownResponseMessage
|
|
64
|
-
>,
|
|
61
|
+
TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>,
|
|
65
62
|
> = (
|
|
66
63
|
data: TTransaction["request"]["data"],
|
|
67
|
-
) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]
|
|
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: {
|
|
77
71
|
success: (
|
|
78
72
|
data: ExtractSuccessResponseMessage<TTransaction["response"]>["data"],
|
|
79
73
|
status?: number,
|
|
80
|
-
) => ExtractSuccessResponseMessage<TTransaction["response"]
|
|
74
|
+
) => ExtractSuccessResponseMessage<TTransaction["response"]>
|
|
81
75
|
error: (
|
|
82
76
|
error: ExtractErrorResponseMessage<TTransaction["response"]>["error"],
|
|
83
77
|
status?: number,
|
|
84
|
-
) => ExtractErrorResponseMessage<TTransaction["response"]
|
|
78
|
+
) => ExtractErrorResponseMessage<TTransaction["response"]>
|
|
85
79
|
},
|
|
86
|
-
) => Promise<TTransaction["response"]> | TTransaction["response"]
|
|
80
|
+
) => Promise<TTransaction["response"]> | TTransaction["response"]
|
|
87
81
|
|
|
88
|
-
export type TransactionsMethods<
|
|
89
|
-
TTransactions
|
|
90
|
-
|
|
91
|
-
[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>;
|
|
92
|
-
};
|
|
82
|
+
export type TransactionsMethods<TTransactions extends Record<string, UnknownTransaction>> = {
|
|
83
|
+
[Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]>
|
|
84
|
+
}
|
|
93
85
|
|
|
94
|
-
export type TransactionsHandlers<
|
|
95
|
-
TTransactions
|
|
96
|
-
|
|
97
|
-
[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>;
|
|
98
|
-
};
|
|
86
|
+
export type TransactionsHandlers<TTransactions extends Record<string, UnknownTransaction>> = {
|
|
87
|
+
[Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]>
|
|
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
|
-
export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction
|
|
93
|
+
export type UnknownTransactionMethod = TransactionMethod<UnknownTransaction>
|
|
107
94
|
|
|
108
|
-
export type UnknownTransactionHandler = TransactionHandler<UnknownTransaction
|
|
95
|
+
export type UnknownTransactionHandler = TransactionHandler<UnknownTransaction>
|
|
109
96
|
|
|
110
97
|
// Emitter
|
|
111
98
|
export enum InternalEmitterRequestType {
|
|
@@ -118,13 +105,10 @@ 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
|
-
|
|
127
|
-
}
|
|
110
|
+
>
|
|
111
|
+
}
|
|
128
112
|
|
|
129
113
|
// Receiver
|
|
130
114
|
export enum InternalReceiverRequestType {
|
|
@@ -134,5 +118,5 @@ export enum InternalReceiverRequestType {
|
|
|
134
118
|
export type InternalReceiverTransactions = {
|
|
135
119
|
[InternalReceiverRequestType.Ready]: Transaction<
|
|
136
120
|
RequestMessage<InternalReceiverRequestType.Ready>
|
|
137
|
-
|
|
138
|
-
}
|
|
121
|
+
>
|
|
122
|
+
}
|
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
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
SimulatorClient,
|
|
3
|
-
simulatorClientDefaultOptions,
|
|
4
|
-
} from "./SimulatorClient";
|
|
1
|
+
export { SimulatorClient, simulatorClientDefaultOptions } from "./SimulatorClient"
|
|
5
2
|
|
|
6
|
-
export { SimulatorAPI, simulatorAPIDefaultOptions } from "./SimulatorAPI"
|
|
7
|
-
export type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
3
|
+
export { SimulatorAPI, simulatorAPIDefaultOptions } from "./SimulatorAPI"
|
|
4
|
+
export type { SimulatorAPIOptions } from "./SimulatorAPI"
|
|
8
5
|
|
|
9
6
|
export {
|
|
10
7
|
// Validators
|
|
@@ -21,7 +18,7 @@ export {
|
|
|
21
18
|
NotReadyError,
|
|
22
19
|
PortNotSetError,
|
|
23
20
|
ChannelNotSetError,
|
|
24
|
-
} from "./channel"
|
|
21
|
+
} from "./channel"
|
|
25
22
|
export type {
|
|
26
23
|
RequestMessage,
|
|
27
24
|
ResponseMessage,
|
|
@@ -29,14 +26,9 @@ export type {
|
|
|
29
26
|
SuccessResponseMessage,
|
|
30
27
|
AllChannelEmitterOptions,
|
|
31
28
|
AllChannelReceiverOptions,
|
|
32
|
-
} from "./channel"
|
|
29
|
+
} from "./channel"
|
|
33
30
|
|
|
34
|
-
export { APIRequestType, ClientRequestType } from "./types"
|
|
35
|
-
export type {
|
|
36
|
-
ActiveSlice,
|
|
37
|
-
SliceZoneSize,
|
|
38
|
-
APITransactions,
|
|
39
|
-
ClientTransactions,
|
|
40
|
-
} from "./types";
|
|
31
|
+
export { APIRequestType, ClientRequestType } from "./types"
|
|
32
|
+
export type { ActiveSlice, SliceZoneSize, APITransactions, ClientTransactions } from "./types"
|
|
41
33
|
|
|
42
|
-
export * from "./globalExtensions"
|
|
34
|
+
export * from "./globalExtensions"
|
|
@@ -1,49 +1,42 @@
|
|
|
1
|
-
import type { SliceZone } from "@prismicio/client"
|
|
1
|
+
import type { SliceZone } from "@prismicio/client"
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
import { State } from "./State";
|
|
12
|
-
import {
|
|
13
|
-
getSimulatorDOM,
|
|
14
|
-
getSimulatorRootDOM,
|
|
15
|
-
getSliceZoneDOM,
|
|
16
|
-
} from "./domHelpers";
|
|
17
|
-
import { sliceSimulatorAccessedDirectly } from "./messages";
|
|
3
|
+
import { ResponseError } from "../channel"
|
|
4
|
+
import { throttle } from "../lib/throttle"
|
|
5
|
+
import { SimulatorAPI } from "../SimulatorAPI"
|
|
6
|
+
import { ClientRequestType } from "../types"
|
|
7
|
+
import { getSimulatorDOM, getSimulatorRootDOM, getSliceZoneDOM } from "./domHelpers"
|
|
8
|
+
import { sliceSimulatorAccessedDirectly } from "./messages"
|
|
9
|
+
import { State } from "./State"
|
|
10
|
+
import { StateEventType } from "./types"
|
|
18
11
|
|
|
19
12
|
type ManagerConstructorArgs = {
|
|
20
|
-
slices?: SliceZone
|
|
21
|
-
}
|
|
13
|
+
slices?: SliceZone
|
|
14
|
+
}
|
|
22
15
|
|
|
23
16
|
export class SimulatorManager {
|
|
24
|
-
public state: State
|
|
25
|
-
private _api: SimulatorAPI | null
|
|
26
|
-
private _initialized: boolean
|
|
17
|
+
public state: State
|
|
18
|
+
private _api: SimulatorAPI | null
|
|
19
|
+
private _initialized: boolean
|
|
27
20
|
|
|
28
21
|
constructor(args?: ManagerConstructorArgs) {
|
|
29
|
-
this.state = new State(args)
|
|
30
|
-
this._api = null
|
|
31
|
-
this._initialized = false
|
|
22
|
+
this.state = new State(args)
|
|
23
|
+
this._api = null
|
|
24
|
+
this._initialized = false
|
|
32
25
|
}
|
|
33
26
|
|
|
34
27
|
async init(): Promise<void> {
|
|
35
28
|
if (this._initialized) {
|
|
36
|
-
return
|
|
29
|
+
return
|
|
37
30
|
} else {
|
|
38
|
-
this._initialized = true
|
|
31
|
+
this._initialized = true
|
|
39
32
|
}
|
|
40
33
|
|
|
41
34
|
// Init state manager
|
|
42
|
-
await this.state.init()
|
|
35
|
+
await this.state.init()
|
|
43
36
|
|
|
44
37
|
// Init API
|
|
45
38
|
try {
|
|
46
|
-
await this._initAPI()
|
|
39
|
+
await this._initAPI()
|
|
47
40
|
} catch (error) {
|
|
48
41
|
if (
|
|
49
42
|
error instanceof Error &&
|
|
@@ -51,50 +44,50 @@ export class SimulatorManager {
|
|
|
51
44
|
!this.state.slices.length
|
|
52
45
|
) {
|
|
53
46
|
// Catch not embedded error and display message
|
|
54
|
-
this.state.message = sliceSimulatorAccessedDirectly
|
|
47
|
+
this.state.message = sliceSimulatorAccessedDirectly
|
|
55
48
|
}
|
|
56
|
-
console.error(error)
|
|
49
|
+
console.error(error)
|
|
57
50
|
|
|
58
|
-
return
|
|
51
|
+
return
|
|
59
52
|
}
|
|
60
53
|
|
|
61
54
|
// Init listeners
|
|
62
|
-
this._initListeners()
|
|
55
|
+
this._initListeners()
|
|
63
56
|
}
|
|
64
57
|
|
|
65
58
|
private async _initAPI(): Promise<void> {
|
|
66
59
|
// Register SimulatorAPI request handlers
|
|
67
60
|
this._api = new SimulatorAPI({
|
|
68
61
|
[ClientRequestType.SetSliceZone]: (req, res) => {
|
|
69
|
-
this.state.setSliceZone(req.data)
|
|
62
|
+
this.state.setSliceZone(req.data)
|
|
70
63
|
|
|
71
|
-
return res.success()
|
|
64
|
+
return res.success()
|
|
72
65
|
},
|
|
73
66
|
[ClientRequestType.ScrollToSlice]: (req, res) => {
|
|
74
67
|
// Error if `sliceIndex` is invalid
|
|
75
68
|
if (req.data.sliceIndex < 0) {
|
|
76
|
-
return res.error("`sliceIndex` must be > 0", 400)
|
|
69
|
+
return res.error("`sliceIndex` must be > 0", 400)
|
|
77
70
|
} else if (req.data.sliceIndex >= this.state.slices.length) {
|
|
78
71
|
return res.error(
|
|
79
72
|
`\`sliceIndex\` must be < ${this.state.slices.length} (\`<SliceZone />\` current length)`,
|
|
80
73
|
400,
|
|
81
|
-
)
|
|
74
|
+
)
|
|
82
75
|
}
|
|
83
76
|
|
|
84
|
-
const $sliceZone = getSliceZoneDOM(this.state.slices.length)
|
|
77
|
+
const $sliceZone = getSliceZoneDOM(this.state.slices.length)
|
|
85
78
|
if (!$sliceZone) {
|
|
86
|
-
return res.error("Failed to find `<SliceZone />`", 500)
|
|
79
|
+
return res.error("Failed to find `<SliceZone />`", 500)
|
|
87
80
|
}
|
|
88
81
|
|
|
89
82
|
// Destroy existing active slice as we're about to scroll
|
|
90
|
-
this.state.activeSlice = null
|
|
83
|
+
this.state.activeSlice = null
|
|
91
84
|
|
|
92
|
-
const $slice = $sliceZone.children[req.data.sliceIndex]
|
|
85
|
+
const $slice = $sliceZone.children[req.data.sliceIndex]
|
|
93
86
|
if (!$slice) {
|
|
94
87
|
return res.error(
|
|
95
88
|
`Failed fo find slice at index $\`{req.data.sliceIndex}\` in \`<SliceZone />\``,
|
|
96
89
|
500,
|
|
97
|
-
)
|
|
90
|
+
)
|
|
98
91
|
}
|
|
99
92
|
|
|
100
93
|
// Scroll to Slice
|
|
@@ -102,97 +95,92 @@ export class SimulatorManager {
|
|
|
102
95
|
behavior: req.data.behavior,
|
|
103
96
|
block: req.data.block,
|
|
104
97
|
inline: req.data.inline,
|
|
105
|
-
})
|
|
98
|
+
})
|
|
106
99
|
|
|
107
100
|
// Update active slice after scrolling
|
|
108
|
-
this._api?.options.activeSliceAPI
|
|
109
|
-
setTimeout(this.state.setActiveSlice, 750)
|
|
101
|
+
if (this._api?.options.activeSliceAPI) {
|
|
102
|
+
setTimeout(this.state.setActiveSlice, 750)
|
|
103
|
+
}
|
|
110
104
|
|
|
111
|
-
return res.success()
|
|
105
|
+
return res.success()
|
|
112
106
|
},
|
|
113
|
-
})
|
|
107
|
+
})
|
|
114
108
|
|
|
115
109
|
// Mark API as ready
|
|
116
|
-
await this._api.ready()
|
|
110
|
+
await this._api.ready()
|
|
117
111
|
}
|
|
118
112
|
|
|
119
113
|
private _initListeners(): void {
|
|
120
114
|
if (this._api?.options.activeSliceAPI) {
|
|
121
115
|
// Update active slice on mouse move
|
|
122
116
|
window.addEventListener("mousemove", () => {
|
|
123
|
-
this.state.setActiveSlice()
|
|
124
|
-
})
|
|
117
|
+
this.state.setActiveSlice()
|
|
118
|
+
})
|
|
125
119
|
// Update active slice on events impacting slices rendering
|
|
126
120
|
window.addEventListener("resize", () => {
|
|
127
|
-
this.state.setActiveSlice()
|
|
128
|
-
})
|
|
121
|
+
this.state.setActiveSlice()
|
|
122
|
+
})
|
|
129
123
|
window.addEventListener("mousewheel", () => {
|
|
130
|
-
setTimeout(this.state.setActiveSlice, 200)
|
|
131
|
-
})
|
|
124
|
+
setTimeout(this.state.setActiveSlice, 200)
|
|
125
|
+
})
|
|
132
126
|
|
|
133
127
|
// Update active slice when slices are set
|
|
134
128
|
this.state.on(StateEventType.Slices, () => {
|
|
135
|
-
this.state.setActiveSlice()
|
|
136
|
-
})
|
|
129
|
+
this.state.setActiveSlice()
|
|
130
|
+
})
|
|
137
131
|
// Send active slices to renderer
|
|
138
132
|
this.state.on(StateEventType.ActiveSlice, async (activeSlice) => {
|
|
139
133
|
if (this._api) {
|
|
140
134
|
try {
|
|
141
|
-
await this._api.setActiveSlice(activeSlice)
|
|
135
|
+
await this._api.setActiveSlice(activeSlice)
|
|
142
136
|
} catch (error) {
|
|
143
137
|
// Just log bad requests, throw everything else
|
|
144
|
-
if (
|
|
145
|
-
error
|
|
146
|
-
error.response.status === 400
|
|
147
|
-
) {
|
|
148
|
-
console.error(error.response);
|
|
138
|
+
if (error instanceof ResponseError && error.response.status === 400) {
|
|
139
|
+
console.error(error.response)
|
|
149
140
|
} else {
|
|
150
|
-
throw error
|
|
141
|
+
throw error
|
|
151
142
|
}
|
|
152
143
|
}
|
|
153
144
|
}
|
|
154
|
-
})
|
|
145
|
+
})
|
|
155
146
|
}
|
|
156
147
|
|
|
157
148
|
if (this._api?.options.sliceZoneSizeAPI) {
|
|
158
149
|
// Monitor Simulator root node size
|
|
159
150
|
const resizeObserver = new ResizeObserver(
|
|
160
151
|
throttle(async (entries) => {
|
|
161
|
-
const [entry] = entries
|
|
152
|
+
const [entry] = entries
|
|
162
153
|
|
|
163
154
|
if (this._api && entry) {
|
|
164
155
|
try {
|
|
165
|
-
await this._api.setSliceZoneSize({ rect: entry.contentRect })
|
|
156
|
+
await this._api.setSliceZoneSize({ rect: entry.contentRect })
|
|
166
157
|
} catch (error) {
|
|
167
158
|
// Just log bad requests, throw everything else
|
|
168
|
-
if (
|
|
169
|
-
error
|
|
170
|
-
error.response.status === 400
|
|
171
|
-
) {
|
|
172
|
-
console.error(error.response);
|
|
159
|
+
if (error instanceof ResponseError && error.response.status === 400) {
|
|
160
|
+
console.error(error.response)
|
|
173
161
|
} else {
|
|
174
|
-
throw error
|
|
162
|
+
throw error
|
|
175
163
|
}
|
|
176
164
|
}
|
|
177
165
|
}
|
|
178
166
|
}, 16),
|
|
179
|
-
)
|
|
167
|
+
)
|
|
180
168
|
const observeSimulatorRoot = () => {
|
|
181
|
-
const simulatorRootDOM = getSimulatorRootDOM()
|
|
182
|
-
resizeObserver.disconnect()
|
|
169
|
+
const simulatorRootDOM = getSimulatorRootDOM()
|
|
170
|
+
resizeObserver.disconnect()
|
|
183
171
|
if (simulatorRootDOM) {
|
|
184
|
-
resizeObserver.observe(simulatorRootDOM)
|
|
172
|
+
resizeObserver.observe(simulatorRootDOM)
|
|
185
173
|
}
|
|
186
|
-
}
|
|
174
|
+
}
|
|
187
175
|
|
|
188
176
|
// Monitor Simulator root node in DOM
|
|
189
|
-
const mutationObserver = new MutationObserver(observeSimulatorRoot)
|
|
177
|
+
const mutationObserver = new MutationObserver(observeSimulatorRoot)
|
|
190
178
|
// We want it to fail if not found
|
|
191
179
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
192
180
|
mutationObserver.observe(getSimulatorDOM()!, {
|
|
193
181
|
subtree: false,
|
|
194
182
|
childList: true,
|
|
195
|
-
})
|
|
183
|
+
})
|
|
196
184
|
}
|
|
197
185
|
}
|
|
198
186
|
}
|