@mml-io/networked-dom-document 0.2.0 → 0.3.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/build/EditableNetworkedDOM.d.ts +18 -0
- package/build/NetworkedDOM.d.ts +51 -0
- package/build/common.d.ts +19 -0
- package/build/diffing.d.ts +11 -0
- package/build/index.d.ts +2 -1
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +4 -5
- package/src/EditableNetworkedDOM.ts +0 -118
- package/src/NetworkedDOM.ts +0 -702
- package/src/common.ts +0 -23
- package/src/diffing.ts +0 -542
- package/src/index.ts +0 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { LogMessage } from "@mml-io/observable-dom-common";
|
|
2
|
+
import { ObservableDOMFactory } from "./NetworkedDOM";
|
|
3
|
+
export declare class EditableNetworkedDOM {
|
|
4
|
+
private htmlPath;
|
|
5
|
+
private params;
|
|
6
|
+
private websockets;
|
|
7
|
+
private loadedState;
|
|
8
|
+
private observableDOMFactory;
|
|
9
|
+
private ignoreTextNodes;
|
|
10
|
+
private logCallback?;
|
|
11
|
+
constructor(htmlPath: string, observableDOMFactory: ObservableDOMFactory, ignoreTextNodes?: boolean, logCallback?: (message: LogMessage) => void);
|
|
12
|
+
isLoaded(): boolean;
|
|
13
|
+
load(htmlContents: string, params?: object): void;
|
|
14
|
+
reload(): void;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
addWebSocket(webSocket: WebSocket): void;
|
|
17
|
+
removeWebSocket(webSocket: WebSocket): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ClientMessage, PongMessage } from "@mml-io/networked-dom-protocol";
|
|
2
|
+
import { LogMessage, ObservableDOMInterface, ObservableDOMMessage, ObservableDOMParameters, StaticVirtualDOMElement } from "@mml-io/observable-dom-common";
|
|
3
|
+
import { VirtualDOMDiffStruct } from "./common";
|
|
4
|
+
export declare const networkedDOMProtocolSubProtocol_v0_1 = "networked-dom-v0.1";
|
|
5
|
+
export declare const defaultWebsocketSubProtocol = "networked-dom-v0.1";
|
|
6
|
+
export type ObservableDOMFactory = (observableDOMParameters: ObservableDOMParameters, callback: (message: ObservableDOMMessage, observableDOM: ObservableDOMInterface) => void) => ObservableDOMInterface;
|
|
7
|
+
export declare class NetworkedDOM {
|
|
8
|
+
static SupportedWebsocketSubProtocolsPreferenceOrder: string[];
|
|
9
|
+
private internalNodeIdToClientNodeId;
|
|
10
|
+
private clientNodeIdToInternalNodeId;
|
|
11
|
+
private currentConnectionId;
|
|
12
|
+
private connectionIdToWebSocketContext;
|
|
13
|
+
private webSocketToConnectionId;
|
|
14
|
+
private visibleNodeIdsByConnectionId;
|
|
15
|
+
private initialLoad;
|
|
16
|
+
private readonly htmlPath;
|
|
17
|
+
private disposed;
|
|
18
|
+
private ignoreTextNodes;
|
|
19
|
+
private documentRoot;
|
|
20
|
+
private nodeIdToNode;
|
|
21
|
+
private nodeIdToParentNodeId;
|
|
22
|
+
private observableDOM;
|
|
23
|
+
private documentEffectiveStartTime;
|
|
24
|
+
private latestDocumentTime;
|
|
25
|
+
private pingCounter;
|
|
26
|
+
private maximumNodeId;
|
|
27
|
+
private logCallback?;
|
|
28
|
+
constructor(observableDOMFactory: ObservableDOMFactory, htmlPath: string, htmlContents: string, oldInstanceDocumentRoot: StaticVirtualDOMElement | null, onLoad: (domDiff: VirtualDOMDiffStruct | null, networkedDOM: NetworkedDOM) => void, params?: {}, ignoreTextNodes?: boolean, logCallback?: (message: LogMessage) => void);
|
|
29
|
+
private defaultLogCallback;
|
|
30
|
+
private addRemappedNodeId;
|
|
31
|
+
private sendPings;
|
|
32
|
+
private getInitialSnapshot;
|
|
33
|
+
getDocumentTime(): number;
|
|
34
|
+
addExistingWebsockets(websockets: Array<WebSocket>, existingWebsocketMap: Map<WebSocket, number> | null, domDiff: VirtualDOMDiffStruct | null): void;
|
|
35
|
+
private findParentNodeOfNodeId;
|
|
36
|
+
private registerWebsocket;
|
|
37
|
+
static handleWebsocketSubprotocol(protocols: Set<string> | Array<string>): string | false;
|
|
38
|
+
addWebSocket(webSocket: WebSocket): void;
|
|
39
|
+
removeWebSocket(webSocket: WebSocket): void;
|
|
40
|
+
dispose(): void;
|
|
41
|
+
private processModification;
|
|
42
|
+
private removeKnownNodesInMutation;
|
|
43
|
+
private removeVirtualDOMElement;
|
|
44
|
+
static IsPongMessage(message: ClientMessage): message is PongMessage;
|
|
45
|
+
private dispatchRemoteEvent;
|
|
46
|
+
private getStaticVirtualDOMElementByInternalNodeIdOrThrow;
|
|
47
|
+
private addKnownNodesInMutation;
|
|
48
|
+
getSnapshot(): StaticVirtualDOMElement;
|
|
49
|
+
private addAndRemapNodeFromInstance;
|
|
50
|
+
getWebsocketConnectionIdMap(): Map<WebSocket, number>;
|
|
51
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StaticVirtualDOMElement } from "@mml-io/observable-dom-common";
|
|
2
|
+
import * as rfc6902 from "rfc6902";
|
|
3
|
+
export type NodeMapping = {
|
|
4
|
+
clientFacingNodeId: number;
|
|
5
|
+
internalNodeId: number;
|
|
6
|
+
};
|
|
7
|
+
export type VirtualDOMDiffStruct = {
|
|
8
|
+
originalState: StaticVirtualDOMElement;
|
|
9
|
+
nodeIdRemappings: Array<NodeMapping>;
|
|
10
|
+
virtualDOMDiffs: Array<rfc6902.Operation>;
|
|
11
|
+
};
|
|
12
|
+
export type StaticVirtualDOMMutationRecord = {
|
|
13
|
+
type: "attributes" | "characterData" | "childList";
|
|
14
|
+
target: StaticVirtualDOMElement;
|
|
15
|
+
addedNodes: Array<StaticVirtualDOMElement>;
|
|
16
|
+
removedNodes: Array<StaticVirtualDOMElement>;
|
|
17
|
+
previousSibling: StaticVirtualDOMElement | null;
|
|
18
|
+
attributeName: string | null;
|
|
19
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Diff, NodeDescription } from "@mml-io/networked-dom-protocol";
|
|
2
|
+
import { StaticVirtualDOMElement } from "@mml-io/observable-dom-common";
|
|
3
|
+
import * as rfc6902 from "rfc6902";
|
|
4
|
+
import { StaticVirtualDOMMutationRecord, VirtualDOMDiffStruct } from "./common";
|
|
5
|
+
export declare const visibleToAttrName = "visible-to";
|
|
6
|
+
export declare const hiddenFromAttrName = "hidden-from";
|
|
7
|
+
export declare function diffFromApplicationOfStaticVirtualDOMMutationRecordToConnection(mutation: StaticVirtualDOMMutationRecord, parentNode: StaticVirtualDOMElement | null, connectionId: number, visibleNodesForConnection: Set<number>): Diff | null;
|
|
8
|
+
export declare function describeNodeWithChildrenForConnectionId(virtualDOMElement: StaticVirtualDOMElement, connectionId: number, visibleNodesForConnection: Set<number>): NodeDescription | null;
|
|
9
|
+
export declare function findParentNodeOfNodeId(virtualDOMElement: StaticVirtualDOMElement, targetNodeId: number): StaticVirtualDOMElement | null;
|
|
10
|
+
export declare function virtualDOMDiffToVirtualDOMMutationRecord(virtualStructure: StaticVirtualDOMElement, domDiff: rfc6902.Operation): Array<StaticVirtualDOMMutationRecord>;
|
|
11
|
+
export declare function calculateStaticVirtualDOMDiff(originalState: StaticVirtualDOMElement, latestState: StaticVirtualDOMElement): VirtualDOMDiffStruct;
|
package/build/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from "
|
|
1
|
+
export * from "./NetworkedDOM";
|
|
2
|
+
export * from "./EditableNetworkedDOM";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"program":{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../networked-dom-protocol/build/networked-dom-v0.1/from-client.d.ts","../../networked-dom-protocol/build/networked-dom-v0.1/from-server.d.ts","../../networked-dom-protocol/build/networked-dom-v0.1/index.d.ts","../../networked-dom-protocol/build/index.d.ts","../../observable-dom-common/build/observabledominterface.d.ts","../../observable-dom-common/build/messages.d.ts","../../observable-dom-common/build/index.d.ts","../../../node_modules/rfc6902/src/pointer.ts","../../../node_modules/rfc6902/src/util.ts","../../../node_modules/@types/deep-equal/index.d.ts","../../../node_modules/rfc6902/src/diff.ts","../../../node_modules/rfc6902/src/patch.ts","../../../node_modules/rfc6902/src/index.ts","../../../node_modules/rfc6902/build/index.d.ts","../src/common.ts","../src/diffing.ts","../src/networkeddom.ts","../src/editablenetworkeddom.ts","../src/index.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"6a6b471e7e43e15ef6f8fe617a22ce4ecb0e34efa6c3dfcfe7cebd392bcca9d2","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"fcd3ecc9f764f06f4d5c467677f4f117f6abf49dee6716283aa204ff1162498b","affectsGlobalScope":true},{"version":"f296963760430fb65b4e5d91f0ed770a91c6e77455bacf8fa23a1501654ede0e","affectsGlobalScope":true},{"version":"5114a95689b63f96b957e00216bc04baf9e1a1782aa4d8ee7e5e9acbf768e301","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"b7e9f95a7387e3f66be0ed6db43600c49cec33a3900437ce2fd350d9b7cb16f2","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"328c09d87a15cde5936230f085c6888e6dc5f31a7c600a8a222419e28ea02812","0e902771dd21ea683172d5b5dd5fb192a166a9e3071b674695ac9013edb4b4fc","660b97032e7c3a5a094b60e3de0bf602626931fe0167dbad07e9ada9f683161e","28e083d1a14be292588f05b70cf7852deb63a3e0da35a0156bcbe361b5072562","4e9e7984ad6e180c5c3363d3478d71558d7d3949c45685951aef7e06e4d6b6a4","ffe0e53edfbab16e0c9bacf0d61b8091d2cf46fbca310d2602036793fda5a058","a63268b15ba72e389b1eaf9752ca501a2965923096ea28c2c98a4db1ec0e8a22","470bca533c6d21326973461b547470d7499ea91ca8a34c2e940ed87a81197126","de355ee45c24981723e98415c331656000b5045895e34bee0423f60eb71a7ef7","2e345cb6511f4c4c60c274df6626c94f3182939034f06cdf414bfbccc584f822","36d82d79e5c2cff1f55302638e4986abbc110fad92910c5e765d73fdc1af2ce9","267fa352bafe9b69cbc35cf110e595c7aec48b80b7bafeb53eb4a07859c509e8","259b99a5b98db5d0bdb1c9743d00283ca45b4d5c06e6ae1ce3b98634237009f6","88c62c04db59e39dd5b82ddd9cb8d0b287255e8d9604b36a4139cabd0536fb9b","e8e52e6b37129b57e7f3859acae5bd9ab0263d201e87b902385583dd6435bb61","3f95729712e84aa7410b4eac36c89907b31e043f40ec33f2561fdcb0e0db4f27","535cdda01dfba007436fa0ef506aba10b48726a37e8e2e65e0dfc289bda2e774","ad644a4792116c657e122f7017191a9e822df9c35a4f50dc711a176d83020ae1","894eeb8ce9aaa37362d97f8a0f7dbc0feb4585ccdcc99d882a80c5e8a0c8062c","587f13f1e8157bd8cec0adda0de4ef558bb8573daa9d518d1e2af38e87ecc91f","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"bce910d9164785c9f0d4dcea4be359f5f92130c7c7833dea6138ab1db310a1f9","affectsGlobalScope":true},"7a435e0c814f58f23e9a0979045ec0ef5909aac95a70986e8bcce30c27dff228",{"version":"a7534271773a27ff7d136d550e86b41894d8090fa857ba4c02b5bb18d2eb1c8e","affectsGlobalScope":true},"db71be322f07f769200108aa19b79a75dd19a187c9dca2a30c4537b233aa2863","57135ce61976a8b1dadd01bb412406d1805b90db6e8ecb726d0d78e0b5f76050",{"version":"49479e21a040c0177d1b1bc05a124c0383df7a08a0726ad4d9457619642e875a","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","b8e431e9b9bb2dc832b23d4e3e02774e953d5537998923f215ea446169e9a61e","3690133deae19c8127c5505fcb67b04bdc9eb053796008538a9b9abbb70d85aa","5b1c0a23f464f894e7c2b2b6c56df7b9afa60ed48c5345f8618d389a636b2108","be2b092f2765222757c6441b86c53a5ea8dfed47bbc43eab4c5fe37942c866b3","8e6b05abc98adba15e1ac78e137c64576c74002e301d682e66feb77a23907ab8","1ca735bb3d407b2af4fbee7665f3a0a83be52168c728cc209755060ba7ed67bd",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"b85c02e14ecb2a873dad5a1de72319b265160ba48f1b83661aeb3bba1366c1bc","affectsGlobalScope":true},"7a2ba0c9af860ac3e77b35ed01fd96d15986f17aa22fe40f188ae556fb1070df","fc3764040518a1008dd04bdc80964591b566b896283e00df85c95851c1f46237","55709608060f77965c270ac10ac646286589f1bd1cb174fff1778a2dd9a7ef31","790623a47c5eda62910098884ecb154dc0e5f3a23fc36c1bfb3b5b9ed44e2c2d","42b40e40f2a358cda332456214fad311e1806a6abf3cebaaac72496e07556642","354612fe1d49ecc9551ea3a27d94eef2887b64ef4a71f72ca444efe0f2f0ba80",{"version":"125af9d85cb9d5e508353f10a8d52f01652d2d48b2cea54789a33e5b4d289c1c","affectsGlobalScope":true},"f5490f53d40291cc8607f5463434d1ac6c5564bc4fbb03abceb03a8f6b014457","5e2b91328a540a0933ab5c2203f4358918e6f0fe7505d22840a891a6117735f1","3abc3512fa04aa0230f59ea1019311fd8667bd935d28306311dccc8b17e79d5d",{"version":"14a50dafe3f45713f7f27cb6320dff07c6ac31678f07959c2134260061bf91ff","affectsGlobalScope":true},{"version":"19da7150ca062323b1db6311a6ef058c9b0a39cc64d836b5e9b75d301869653b","affectsGlobalScope":true},"1349077576abb41f0e9c78ec30762ff75b710208aff77f5fdcc6a8c8ce6289dd","e2ce82603102b5c0563f59fb40314cc1ff95a4d521a66ad14146e130ea80d89c","a3e0395220255a350aa9c6d56f882bfcb5b85c19fddf5419ec822cf22246a26d","c27b01e8ddff5cd280711af5e13aecd9a3228d1c256ea797dd64f8fdec5f7df5","898840e876dfd21843db9f2aa6ae38ba2eab550eb780ff62b894b9fbfebfae6b","0cab4d7d4edc40cd3af9eea7c3ed6d1016910c0954c49c4297e479bf3822a625","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","785e5be57d4f20f290a20e7b0c6263f6c57fd6e51283050756cef07d6d651c68","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","164deb2409ac5f4da3cd139dbcee7f7d66753d90363a4d7e2db8d8874f272270","1fb6c5ec52332a8b531a8d7a5300ac9301f98c4fe62f68e744e0841ccba65e7e",{"version":"ab294c4b7279318ee2a8fdf681305457ecc05970c94108d304933f18823eeac1","affectsGlobalScope":true},"ad08154d9602429522cac965a715fde27d421d69b24756c5d291877dda75353e","bbda6ea452a2386093a1eda18a6e26a989e98869f1b9f37e46f510a986d2e740","812b25f798033c202baedf386a1ccc41f9191b122f089bffd10fdccce99fba11","993325544790073f77e945bee046d53988c0bc3ac5695c9cf8098166feb82661",{"version":"75dd741ca6a6c8d2437a6ca8349b64b816421dbf9fe82dd026afaba965576962","affectsGlobalScope":true},{"version":"8799401a7ab57764f0d464513a7fa7c72e1d70a226b172ec60fff534ea94d108","affectsGlobalScope":true},"2ce2210032ccaff7710e2abf6a722e62c54960458e73e356b6a365c93ab6ca66","92db194ef7d208d5e4b6242a3434573fd142a621ff996d84cc9dbba3553277d0","16a3080e885ed52d4017c902227a8d0d8daf723d062bec9e45627c6fdcd6699b",{"version":"0bd9543cd8fc0959c76fb8f4f5a26626c2ed62ef4be98fd857bce268066db0a2","affectsGlobalScope":true},"1ca6858a0cbcd74d7db72d7b14c5360a928d1d16748a55ecfa6bfaff8b83071b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"247aa3419c98713231952b33801d4f46563fe542e03604acd8c63ac45a32409c"],"root":[[59,63]],"options":{"allowSyntheticDefaultImports":true,"downlevelIteration":true,"jsx":2,"module":99,"noImplicitAny":true,"outDir":"./","sourceMap":true,"strictNullChecks":true,"target":2},"fileIdsList":[[110],[64,110],[67,110],[68,73,101,110],[69,80,81,88,98,109,110],[69,70,80,88,110],[71,110],[72,73,81,89,110],[73,98,106,110],[74,76,80,88,110],[75,110],[76,77,110],[80,110],[78,80,110],[80,81,82,98,109,110],[80,81,82,95,98,101,110],[110,114],[76,80,83,88,98,109,110],[80,81,83,84,88,98,106,109,110],[83,85,98,106,109,110],[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],[80,86,110],[87,109,110],[76,80,88,98,110],[89,110],[90,110],[67,91,110],[92,108,110,114],[93,110],[94,110],[80,95,96,110],[95,97,110,112],[68,80,98,99,100,101,110],[68,98,100,110],[98,99,110],[101,110],[102,110],[98,110],[80,104,105,110],[104,105,110],[73,88,98,106,110],[107,110],[88,108,110],[68,83,94,109,110],[73,110],[98,110,111],[110,112],[110,113],[68,73,80,82,91,98,109,110,112,114],[98,110,115],[57,110],[52,53,54,110],[52,55,56,110],[52,53,55,110],[51,58,110],[48,51,58,59,110],[51,59,61,110],[61,62,110],[48,51,58,59,60,110],[47,110],[45,46,110],[48,49,50,110],[48,49,110],[48,110]],"referencedMap":[[54,1],[64,2],[65,2],[67,3],[68,4],[69,5],[70,6],[71,7],[72,8],[73,9],[74,10],[75,11],[76,12],[77,12],[79,13],[78,14],[80,13],[81,15],[82,16],[66,17],[116,1],[83,18],[84,19],[85,20],[117,21],[86,22],[87,23],[88,24],[89,25],[90,26],[91,27],[92,28],[93,29],[94,30],[95,31],[96,31],[97,32],[98,33],[100,34],[99,35],[101,36],[102,37],[103,38],[104,39],[105,40],[106,41],[107,42],[108,43],[109,44],[110,45],[111,46],[112,47],[113,48],[114,49],[115,50],[58,51],[55,52],[57,53],[56,54],[52,1],[53,1],[43,1],[44,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[59,55],[60,56],[62,57],[63,58],[61,59],[48,60],[45,1],[46,1],[47,61],[51,62],[50,63],[49,64]],"exportedModulesMap":[[54,1],[64,2],[65,2],[67,3],[68,4],[69,5],[70,6],[71,7],[72,8],[73,9],[74,10],[75,11],[76,12],[77,12],[79,13],[78,14],[80,13],[81,15],[82,16],[66,17],[116,1],[83,18],[84,19],[85,20],[117,21],[86,22],[87,23],[88,24],[89,25],[90,26],[91,27],[92,28],[93,29],[94,30],[95,31],[96,31],[97,32],[98,33],[100,34],[99,35],[101,36],[102,37],[103,38],[104,39],[105,40],[106,41],[107,42],[108,43],[109,44],[110,45],[111,46],[112,47],[113,48],[114,49],[115,50],[58,51],[55,52],[57,53],[56,54],[52,1],[53,1],[43,1],[44,1],[8,1],[10,1],[9,1],[2,1],[11,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[3,1],[4,1],[22,1],[19,1],[20,1],[21,1],[23,1],[24,1],[25,1],[5,1],[26,1],[27,1],[28,1],[29,1],[6,1],[33,1],[30,1],[31,1],[32,1],[34,1],[7,1],[35,1],[40,1],[41,1],[36,1],[37,1],[38,1],[39,1],[1,1],[42,1],[59,55],[60,56],[62,57],[63,58],[61,59],[48,60],[45,1],[46,1],[47,61],[51,62],[50,63],[49,64]],"semanticDiagnosticsPerFile":[54,64,65,67,68,69,70,71,72,73,74,75,76,77,79,78,80,81,82,66,116,83,84,85,117,86,87,88,89,90,91,92,93,94,95,96,97,98,100,99,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,58,55,57,56,52,53,43,44,8,10,9,2,11,12,13,14,15,16,17,18,3,4,22,19,20,21,23,24,25,5,26,27,28,29,6,33,30,31,32,34,7,35,40,41,36,37,38,39,1,42,59,60,62,63,61,48,45,46,47,51,50,49],"affectedFilesPendingEmit":[59,60,62,63,61]},"version":"5.0.4"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mml-io/networked-dom-document",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"main": "./build/index.js",
|
|
5
5
|
"types": "./build/index.d.ts",
|
|
6
6
|
"files": [
|
|
7
|
-
"/build"
|
|
8
|
-
"/src"
|
|
7
|
+
"/build"
|
|
9
8
|
],
|
|
10
9
|
"scripts": {
|
|
11
10
|
"type-check": "tsc --noEmit",
|
|
@@ -17,8 +16,8 @@
|
|
|
17
16
|
"test": "jest"
|
|
18
17
|
},
|
|
19
18
|
"dependencies": {
|
|
20
|
-
"@mml-io/networked-dom-protocol": "^0.
|
|
21
|
-
"@mml-io/observable-dom-common": "^0.
|
|
19
|
+
"@mml-io/networked-dom-protocol": "^0.3.0",
|
|
20
|
+
"@mml-io/observable-dom-common": "^0.3.0",
|
|
22
21
|
"rfc6902": "https://github.com/marcuslongmuir/rfc6902.git#7b81b044d7c2cd36f34f9f30d106e7f5db8a0589"
|
|
23
22
|
}
|
|
24
23
|
}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { LogMessage, StaticVirtualDOMElement } from "@mml-io/observable-dom-common";
|
|
2
|
-
|
|
3
|
-
import { VirtualDOMDiffStruct } from "./common";
|
|
4
|
-
import { NetworkedDOM, ObservableDOMFactory } from "./NetworkedDOM";
|
|
5
|
-
|
|
6
|
-
type LoadedState = {
|
|
7
|
-
htmlContents: string;
|
|
8
|
-
networkedDOM: NetworkedDOM;
|
|
9
|
-
loaded: boolean;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
// EditableNetworkedDOM wraps NetworkedDOM instances and presents them as a single document that can iterate through
|
|
13
|
-
// revisions by being loaded multiple times with different contents. The connected clients receive deltas between the
|
|
14
|
-
// revisions rather than a complete refresh.
|
|
15
|
-
export class EditableNetworkedDOM {
|
|
16
|
-
private htmlPath: string;
|
|
17
|
-
private params: object = {};
|
|
18
|
-
|
|
19
|
-
private websockets = new Set<WebSocket>();
|
|
20
|
-
private loadedState: LoadedState | null = null;
|
|
21
|
-
|
|
22
|
-
private observableDOMFactory: ObservableDOMFactory;
|
|
23
|
-
private ignoreTextNodes: boolean;
|
|
24
|
-
|
|
25
|
-
private logCallback?: (message: LogMessage) => void;
|
|
26
|
-
|
|
27
|
-
constructor(
|
|
28
|
-
htmlPath: string,
|
|
29
|
-
observableDOMFactory: ObservableDOMFactory,
|
|
30
|
-
ignoreTextNodes = true,
|
|
31
|
-
logCallback?: (message: LogMessage) => void,
|
|
32
|
-
) {
|
|
33
|
-
this.htmlPath = htmlPath;
|
|
34
|
-
this.observableDOMFactory = observableDOMFactory;
|
|
35
|
-
this.ignoreTextNodes = ignoreTextNodes;
|
|
36
|
-
this.logCallback = logCallback;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public isLoaded() {
|
|
40
|
-
return this.loadedState !== null;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
public load(htmlContents: string, params?: object) {
|
|
44
|
-
if (params !== undefined) {
|
|
45
|
-
this.params = params;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
let oldInstanceRoot: StaticVirtualDOMElement | null = null;
|
|
49
|
-
let existingWebsocketMap: Map<WebSocket, number> | null = null;
|
|
50
|
-
if (this.loadedState) {
|
|
51
|
-
const oldInstance = this.loadedState.networkedDOM;
|
|
52
|
-
existingWebsocketMap = oldInstance.getWebsocketConnectionIdMap();
|
|
53
|
-
oldInstance.dispose();
|
|
54
|
-
oldInstanceRoot = oldInstance.getSnapshot();
|
|
55
|
-
}
|
|
56
|
-
this.loadedState = null;
|
|
57
|
-
|
|
58
|
-
let didLoad = false;
|
|
59
|
-
const networkedDOM = new NetworkedDOM(
|
|
60
|
-
this.observableDOMFactory,
|
|
61
|
-
this.htmlPath,
|
|
62
|
-
htmlContents,
|
|
63
|
-
oldInstanceRoot,
|
|
64
|
-
(domDiff: VirtualDOMDiffStruct | null, networkedDOM: NetworkedDOM) => {
|
|
65
|
-
didLoad = true;
|
|
66
|
-
if (this.loadedState) {
|
|
67
|
-
this.loadedState.loaded = true;
|
|
68
|
-
}
|
|
69
|
-
networkedDOM.addExistingWebsockets(
|
|
70
|
-
Array.from(this.websockets),
|
|
71
|
-
existingWebsocketMap,
|
|
72
|
-
domDiff,
|
|
73
|
-
);
|
|
74
|
-
},
|
|
75
|
-
this.params,
|
|
76
|
-
this.ignoreTextNodes,
|
|
77
|
-
this.logCallback,
|
|
78
|
-
);
|
|
79
|
-
this.loadedState = {
|
|
80
|
-
htmlContents,
|
|
81
|
-
networkedDOM,
|
|
82
|
-
loaded: didLoad,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public reload() {
|
|
87
|
-
if (this.loadedState) {
|
|
88
|
-
this.load(this.loadedState.htmlContents, this.params);
|
|
89
|
-
} else {
|
|
90
|
-
console.warn("EditableNetworkedDOM.reload called whilst not loaded");
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
public dispose() {
|
|
95
|
-
for (const ws of this.websockets) {
|
|
96
|
-
ws.close();
|
|
97
|
-
}
|
|
98
|
-
this.websockets.clear();
|
|
99
|
-
if (this.loadedState) {
|
|
100
|
-
this.loadedState.networkedDOM.dispose();
|
|
101
|
-
}
|
|
102
|
-
this.loadedState = null;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
public addWebSocket(webSocket: WebSocket) {
|
|
106
|
-
this.websockets.add(webSocket);
|
|
107
|
-
if (this.loadedState && this.loadedState.loaded) {
|
|
108
|
-
this.loadedState.networkedDOM.addWebSocket(webSocket);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
public removeWebSocket(webSocket: WebSocket) {
|
|
113
|
-
this.websockets.delete(webSocket);
|
|
114
|
-
if (this.loadedState && this.loadedState.loaded) {
|
|
115
|
-
this.loadedState.networkedDOM.removeWebSocket(webSocket);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|