@mml-io/networked-dom-web 0.18.1 → 0.19.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 +34 -0
- package/build/DOMSanitizer.d.ts +6 -1
- package/build/NetworkedDOMWebsocket.d.ts +24 -21
- package/build/NetworkedDOMWebsocketV01Adapter.d.ts +24 -0
- package/build/NetworkedDOMWebsocketV02Adapter.d.ts +32 -0
- package/build/index.js +664 -176
- package/build/index.js.map +4 -4
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Networked DOM Web
|
|
2
|
+
#### `@mml-io/networked-dom-web`
|
|
3
|
+
|
|
4
|
+
[](https://www.npmjs.com/package/@mml-io/networked-dom-web)
|
|
5
|
+
|
|
6
|
+
This package contains the `NetworkedDOMWebsocket` class which can connect to a WebSocket server using the `networked-dom-v0.1` protocol and interact with a `NetworkedDOM` document.
|
|
7
|
+
|
|
8
|
+
## Example Usage
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
// Create an element to contain the remote document's elements
|
|
12
|
+
const targetElement = document.createElement("div");
|
|
13
|
+
|
|
14
|
+
const networkedDOMWebsocket = new NetworkedDOMWebsocket(
|
|
15
|
+
"wss://example.com/some-networked-dom-websocket",
|
|
16
|
+
NetworkedDOMWebsocket.createWebSocket, // Use the default websocket creator function
|
|
17
|
+
targetElement,
|
|
18
|
+
(time: number) => {
|
|
19
|
+
// The time of the remote document has updated
|
|
20
|
+
},
|
|
21
|
+
(status: NetworkedDOMWebsocketStatus) => {
|
|
22
|
+
// Handle status changes
|
|
23
|
+
},
|
|
24
|
+
{ // Optional configuration
|
|
25
|
+
tagPrefix: "m-",// Limit which elements can be created
|
|
26
|
+
replacementTagPrefix: "mml-", // If elements do not have the tagPrefix, prepend this prefix
|
|
27
|
+
},
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
// Events for elements from the remote document can be sent to the remote document
|
|
31
|
+
function sendEventToRemoteDocument(element: HTMLElement, event: CustomEvent<{ element: HTMLElement }>) {
|
|
32
|
+
networkedDOMWebsocket.handleEvent(element, event);
|
|
33
|
+
}
|
|
34
|
+
```
|
package/build/DOMSanitizer.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
export type DOMSanitizerOptions = {
|
|
2
|
+
tagPrefix?: string;
|
|
3
|
+
replacementTagPrefix?: string;
|
|
4
|
+
};
|
|
1
5
|
export declare class DOMSanitizer {
|
|
2
|
-
static sanitise(node: HTMLElement):
|
|
6
|
+
static sanitise(node: HTMLElement, options?: DOMSanitizerOptions): HTMLElement;
|
|
7
|
+
static replaceNodeTagName(node: HTMLElement, newTagName: string): HTMLElement;
|
|
3
8
|
static stripAllAttributes(node: HTMLElement): void;
|
|
4
9
|
static IsASCIIDigit(c: string): boolean;
|
|
5
10
|
static IsASCIIAlpha(c: string): boolean;
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
export type NetworkedDOMWebsocketFactory = (url: string) => WebSocket;
|
|
2
2
|
export declare enum NetworkedDOMWebsocketStatus {
|
|
3
3
|
Connecting = 0,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
ConnectionOpen = 1,// The websocket is open and connected, but no messages have been received yet
|
|
5
|
+
Connected = 2,// The websocket is open and connected, and messages are being received
|
|
6
|
+
Reconnecting = 3,
|
|
7
|
+
Disconnected = 4
|
|
7
8
|
}
|
|
9
|
+
export declare function NetworkedDOMWebsocketStatusToString(status: NetworkedDOMWebsocketStatus): string;
|
|
10
|
+
export type NetworkedDOMWebsocketOptions = {
|
|
11
|
+
tagPrefix?: string;
|
|
12
|
+
replacementTagPrefix?: string;
|
|
13
|
+
};
|
|
14
|
+
export type NetworkedDOMWebsocketAdapter = {
|
|
15
|
+
receiveMessage: (message: MessageEvent) => void;
|
|
16
|
+
handleEvent: (element: HTMLElement, event: CustomEvent<{
|
|
17
|
+
element: HTMLElement;
|
|
18
|
+
}>) => void;
|
|
19
|
+
clearContents: () => boolean;
|
|
20
|
+
};
|
|
8
21
|
/**
|
|
9
22
|
* NetworkedDOMWebsocket is a client for a NetworkedDOMServer. It connects to a server on the provided url and receives
|
|
10
23
|
* updates to the DOM. It also sends events to the server for interactions with the DOM.
|
|
@@ -12,37 +25,27 @@ export declare enum NetworkedDOMWebsocketStatus {
|
|
|
12
25
|
* The NetworkedDOMWebsocket is attached to a parentElement and synchronizes the received DOM under that element.
|
|
13
26
|
*/
|
|
14
27
|
export declare class NetworkedDOMWebsocket {
|
|
15
|
-
private idToElement;
|
|
16
|
-
private elementToId;
|
|
17
|
-
private websocket;
|
|
18
|
-
private currentRoot;
|
|
19
28
|
private url;
|
|
20
29
|
private websocketFactory;
|
|
21
30
|
private parentElement;
|
|
22
|
-
private timeCallback
|
|
23
|
-
private statusUpdateCallback
|
|
31
|
+
private timeCallback?;
|
|
32
|
+
private statusUpdateCallback?;
|
|
33
|
+
private options;
|
|
34
|
+
private websocket;
|
|
35
|
+
private websocketAdapter;
|
|
24
36
|
private stopped;
|
|
25
37
|
private backoffTime;
|
|
26
38
|
private status;
|
|
27
39
|
static createWebSocket(url: string): WebSocket;
|
|
28
|
-
constructor(url: string, websocketFactory: NetworkedDOMWebsocketFactory, parentElement: HTMLElement, timeCallback?: (time: number) => void, statusUpdateCallback?: (status: NetworkedDOMWebsocketStatus) => void);
|
|
40
|
+
constructor(url: string, websocketFactory: NetworkedDOMWebsocketFactory, parentElement: HTMLElement, timeCallback?: ((time: number) => void) | undefined, statusUpdateCallback?: ((status: NetworkedDOMWebsocketStatus) => void) | undefined, options?: NetworkedDOMWebsocketOptions);
|
|
29
41
|
private setStatus;
|
|
30
|
-
private isHTMLElement;
|
|
31
|
-
private isText;
|
|
32
42
|
private createWebsocketWithTimeout;
|
|
33
43
|
private waitBackoffTime;
|
|
34
44
|
private startWebSocketConnectionAttempt;
|
|
35
|
-
private handleIncomingWebsocketMessage;
|
|
36
45
|
stop(): void;
|
|
37
46
|
handleEvent(element: HTMLElement, event: CustomEvent<{
|
|
38
47
|
element: HTMLElement;
|
|
39
48
|
}>): void;
|
|
40
|
-
private send;
|
|
41
|
-
private handleTextChanged;
|
|
42
|
-
private handleChildrenChanged;
|
|
43
|
-
private removeChildElementIds;
|
|
44
|
-
private handleSnapshot;
|
|
45
|
-
private handleAttributeChange;
|
|
46
|
-
private handleNewElement;
|
|
47
|
-
private clearContents;
|
|
48
49
|
}
|
|
50
|
+
export declare function isHTMLElement(node: unknown, rootNode: HTMLElement): node is HTMLElement;
|
|
51
|
+
export declare function isText(node: unknown, rootNode: HTMLElement): node is Text;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { NetworkedDOMWebsocketAdapter, NetworkedDOMWebsocketOptions } from "./NetworkedDOMWebsocket";
|
|
2
|
+
export declare class NetworkedDOMWebsocketV01Adapter implements NetworkedDOMWebsocketAdapter {
|
|
3
|
+
private websocket;
|
|
4
|
+
private parentElement;
|
|
5
|
+
private connectedCallback;
|
|
6
|
+
private timeCallback?;
|
|
7
|
+
private options;
|
|
8
|
+
private idToElement;
|
|
9
|
+
private elementToId;
|
|
10
|
+
private currentRoot;
|
|
11
|
+
constructor(websocket: WebSocket, parentElement: HTMLElement, connectedCallback: () => void, timeCallback?: ((time: number) => void) | undefined, options?: NetworkedDOMWebsocketOptions);
|
|
12
|
+
handleEvent(element: HTMLElement, event: CustomEvent<{
|
|
13
|
+
element: HTMLElement;
|
|
14
|
+
}>): void;
|
|
15
|
+
private send;
|
|
16
|
+
clearContents(): boolean;
|
|
17
|
+
receiveMessage(event: MessageEvent): void;
|
|
18
|
+
private handleTextChanged;
|
|
19
|
+
private handleChildrenChanged;
|
|
20
|
+
private removeChildElementIds;
|
|
21
|
+
private handleSnapshot;
|
|
22
|
+
private handleAttributeChange;
|
|
23
|
+
private handleNewElement;
|
|
24
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { NetworkedDOMWebsocketAdapter, NetworkedDOMWebsocketOptions } from "./NetworkedDOMWebsocket";
|
|
2
|
+
export declare class NetworkedDOMWebsocketV02Adapter implements NetworkedDOMWebsocketAdapter {
|
|
3
|
+
private websocket;
|
|
4
|
+
private parentElement;
|
|
5
|
+
private connectedCallback;
|
|
6
|
+
private timeCallback?;
|
|
7
|
+
private options;
|
|
8
|
+
private idToElement;
|
|
9
|
+
private elementToId;
|
|
10
|
+
private hiddenPlaceholderElements;
|
|
11
|
+
private currentRoot;
|
|
12
|
+
private batchMode;
|
|
13
|
+
private batchMessages;
|
|
14
|
+
constructor(websocket: WebSocket, parentElement: HTMLElement, connectedCallback: () => void, timeCallback?: ((time: number) => void) | undefined, options?: NetworkedDOMWebsocketOptions);
|
|
15
|
+
handleEvent(element: HTMLElement, event: CustomEvent<{
|
|
16
|
+
element: HTMLElement;
|
|
17
|
+
}>): void;
|
|
18
|
+
private send;
|
|
19
|
+
clearContents(): boolean;
|
|
20
|
+
receiveMessage(event: MessageEvent): void;
|
|
21
|
+
private applyMessage;
|
|
22
|
+
private handleTextChanged;
|
|
23
|
+
private handleChangeHiddenFrom;
|
|
24
|
+
private handleChildrenAdded;
|
|
25
|
+
private handleChildrenRemoved;
|
|
26
|
+
private removeChildElementIds;
|
|
27
|
+
private handleSnapshot;
|
|
28
|
+
private handleDocumentTime;
|
|
29
|
+
private handleAttributeChange;
|
|
30
|
+
private handleNewElement;
|
|
31
|
+
private handlePing;
|
|
32
|
+
}
|