-
Notifications
You must be signed in to change notification settings - Fork 151
/
Messages.ts
125 lines (117 loc) · 4.07 KB
/
Messages.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* Copyright 2018 The AMP HTML Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS-IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import type { TransferrableEvent } from './TransferrableEvent';
import type { TransferrableSyncValue } from './TransferrableSyncValue';
import type { TransferrableKeys } from './TransferrableKeys';
import type { HydrateableNode, TransferredNode } from './TransferrableNodes';
import type { TransferrableBoundingClientRect } from './TransferrableBoundClientRect';
import type { Phase } from './Phase';
import type { StorageLocation } from './TransferrableStorage';
export const enum MessageType {
// INIT = 0,
EVENT = 1,
HYDRATE = 2,
MUTATE = 3,
SYNC = 4,
RESIZE = 5,
GET_BOUNDING_CLIENT_RECT = 6,
LONG_TASK_START = 7,
LONG_TASK_END = 8,
OFFSCREEN_CANVAS_INSTANCE = 9,
IMAGE_BITMAP_INSTANCE = 10,
GET_STORAGE = 11,
FUNCTION = 12,
// NAVIGATION_PUSH_STATE = 8,
// NAVIGATION_REPLACE_STATE = 9,
// NAVIGATION_POP_STATE = 10,
}
export interface MutationFromWorker {
readonly [TransferrableKeys.type]: MessageType;
readonly [TransferrableKeys.phase]: Phase;
readonly [TransferrableKeys.strings]: Array<string>;
readonly [TransferrableKeys.nodes]: ArrayBuffer;
readonly [TransferrableKeys.mutations]: ArrayBuffer;
}
export type MessageFromWorker = {
data: MutationFromWorker;
};
export interface HydrationToWorker {
readonly [TransferrableKeys.type]: MessageType.HYDRATE;
readonly [TransferrableKeys.strings]: Array<string>;
readonly [TransferrableKeys.nodes]: HydrateableNode;
}
export interface EventToWorker {
[TransferrableKeys.type]: MessageType.EVENT;
[TransferrableKeys.event]: TransferrableEvent;
}
export interface ValueSyncToWorker {
[TransferrableKeys.type]: MessageType.SYNC;
[TransferrableKeys.sync]: TransferrableSyncValue;
}
export interface BoundingClientRectToWorker {
[TransferrableKeys.type]: MessageType.GET_BOUNDING_CLIENT_RECT;
[TransferrableKeys.target]: TransferredNode;
[TransferrableKeys.data]: TransferrableBoundingClientRect;
}
export interface OffscreenCanvasToWorker {
[TransferrableKeys.type]: MessageType.OFFSCREEN_CANVAS_INSTANCE;
[TransferrableKeys.target]: TransferredNode;
[TransferrableKeys.data]: {}; // This will be an OffscreenCanvas
}
export interface ImageBitmapToWorker {
[TransferrableKeys.type]: MessageType.IMAGE_BITMAP_INSTANCE;
[TransferrableKeys.callIndex]: number; // number that indicates the number of the image bitmap call
[TransferrableKeys.data]: {}; // This will be an ImageBitmap object
}
export interface ResizeSyncToWorker {
[TransferrableKeys.type]: MessageType.RESIZE;
[TransferrableKeys.sync]: [number, number];
}
export interface StorageValueToWorker {
[TransferrableKeys.type]: MessageType.GET_STORAGE;
[TransferrableKeys.storageKey]: string;
[TransferrableKeys.storageLocation]: StorageLocation;
[TransferrableKeys.value]: { [key: string]: string };
}
export interface FunctionCallToWorker {
[TransferrableKeys.type]: MessageType.FUNCTION;
[TransferrableKeys.index]: number;
[TransferrableKeys.functionIdentifier]: string;
[TransferrableKeys.functionArguments]: string;
}
export type MessageToWorker =
| EventToWorker
| ValueSyncToWorker
| BoundingClientRectToWorker
| ResizeSyncToWorker
| OffscreenCanvasToWorker
| ImageBitmapToWorker
| StorageValueToWorker
| FunctionCallToWorker;
/**
* Can parameterize a method invocation message as a getter or setter.
*/
export const enum GetOrSet {
GET = 1,
SET = 2,
}
/**
* Can parameterize a method invocation value as a resolved or rejected.
*/
export const enum ResolveOrReject {
RESOLVE = 1,
REJECT = 2,
}