@vuu-ui/vuu-data-remote 0.0.26 → 0.8.12

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.
Files changed (77) hide show
  1. package/cjs/ConnectionManager.js +169 -0
  2. package/cjs/ConnectionManager.js.map +1 -0
  3. package/cjs/DedicatedWorker.js +61 -0
  4. package/cjs/DedicatedWorker.js.map +1 -0
  5. package/cjs/VuuDataSource.js +447 -0
  6. package/cjs/VuuDataSource.js.map +1 -0
  7. package/cjs/WebSocketConnection.js +23 -0
  8. package/cjs/WebSocketConnection.js.map +1 -0
  9. package/cjs/authenticate.js.map +1 -1
  10. package/cjs/constants.js.map +1 -1
  11. package/cjs/data-source.js +2 -12
  12. package/cjs/data-source.js.map +1 -1
  13. package/cjs/index.js +7 -10
  14. package/cjs/index.js.map +1 -1
  15. package/cjs/inlined-worker.js +2738 -5
  16. package/cjs/inlined-worker.js.map +1 -1
  17. package/cjs/message-utils.js +39 -15
  18. package/cjs/message-utils.js.map +1 -1
  19. package/cjs/rest-data/RestDataSource.js +172 -0
  20. package/cjs/rest-data/RestDataSource.js.map +1 -0
  21. package/cjs/rest-data/moving-window.js +66 -0
  22. package/cjs/rest-data/moving-window.js.map +1 -0
  23. package/cjs/rest-data/rest-utils.js +60 -0
  24. package/cjs/rest-data/rest-utils.js.map +1 -0
  25. package/esm/ConnectionManager.js +167 -0
  26. package/esm/ConnectionManager.js.map +1 -0
  27. package/esm/DedicatedWorker.js +59 -0
  28. package/esm/DedicatedWorker.js.map +1 -0
  29. package/esm/VuuDataSource.js +445 -0
  30. package/esm/VuuDataSource.js.map +1 -0
  31. package/esm/WebSocketConnection.js +21 -0
  32. package/esm/WebSocketConnection.js.map +1 -0
  33. package/esm/authenticate.js.map +1 -1
  34. package/esm/constants.js.map +1 -1
  35. package/esm/data-source.js +3 -11
  36. package/esm/data-source.js.map +1 -1
  37. package/esm/index.js +5 -4
  38. package/esm/index.js.map +1 -1
  39. package/esm/inlined-worker.js +2738 -5
  40. package/esm/inlined-worker.js.map +1 -1
  41. package/esm/message-utils.js +39 -15
  42. package/esm/message-utils.js.map +1 -1
  43. package/esm/rest-data/RestDataSource.js +170 -0
  44. package/esm/rest-data/RestDataSource.js.map +1 -0
  45. package/esm/rest-data/moving-window.js +64 -0
  46. package/esm/rest-data/moving-window.js.map +1 -0
  47. package/esm/rest-data/rest-utils.js +55 -0
  48. package/esm/rest-data/rest-utils.js.map +1 -0
  49. package/package.json +10 -13
  50. package/cjs/connection-manager.js +0 -228
  51. package/cjs/connection-manager.js.map +0 -1
  52. package/cjs/server-proxy/messages.js +0 -6
  53. package/cjs/server-proxy/messages.js.map +0 -1
  54. package/cjs/vuu-data-source.js +0 -574
  55. package/cjs/vuu-data-source.js.map +0 -1
  56. package/esm/connection-manager.js +0 -223
  57. package/esm/connection-manager.js.map +0 -1
  58. package/esm/server-proxy/messages.js +0 -4
  59. package/esm/server-proxy/messages.js.map +0 -1
  60. package/esm/vuu-data-source.js +0 -572
  61. package/esm/vuu-data-source.js.map +0 -1
  62. package/types/authenticate.d.ts +0 -1
  63. package/types/connection-manager.d.ts +0 -52
  64. package/types/connectionTypes.d.ts +0 -5
  65. package/types/constants.d.ts +0 -41
  66. package/types/data-source.d.ts +0 -8
  67. package/types/index.d.ts +0 -7
  68. package/types/inlined-worker.d.ts +0 -1
  69. package/types/message-utils.d.ts +0 -14
  70. package/types/server-proxy/array-backed-moving-window.d.ts +0 -28
  71. package/types/server-proxy/messages.d.ts +0 -38
  72. package/types/server-proxy/rpc-services.d.ts +0 -2
  73. package/types/server-proxy/server-proxy.d.ts +0 -62
  74. package/types/server-proxy/viewport.d.ts +0 -141
  75. package/types/vuu-data-source.d.ts +0 -63
  76. package/types/websocket-connection.d.ts +0 -24
  77. package/types/worker.d.ts +0 -1
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var WebSocketConnection = require('./WebSocketConnection.js');
5
+ var DedicatedWorker = require('./DedicatedWorker.js');
6
+ var dataSource = require('./data-source.js');
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __typeError = (msg) => {
10
+ throw TypeError(msg);
11
+ };
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
14
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
15
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
16
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
17
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
18
+ var _connectionState, _instance, _deferredServerAPI, _pendingRequests, _viewports, _worker;
19
+ const _ConnectionManager = class _ConnectionManager extends vuuUtils.EventEmitter {
20
+ constructor() {
21
+ super();
22
+ __privateAdd(this, _connectionState, {
23
+ connectionPhase: "connecting",
24
+ connectionStatus: "closed",
25
+ retryAttemptsTotal: -1,
26
+ retryAttemptsRemaining: -1,
27
+ secondsToNextRetry: -1
28
+ });
29
+ __privateAdd(this, _deferredServerAPI, new vuuUtils.DeferredPromise());
30
+ __privateAdd(this, _pendingRequests, /* @__PURE__ */ new Map());
31
+ __privateAdd(this, _viewports, /* @__PURE__ */ new Map());
32
+ // #worker?: Worker;
33
+ __privateAdd(this, _worker);
34
+ __publicField(this, "handleMessageFromWorker", (message) => {
35
+ if (dataSource.shouldMessageBeRoutedToDataSource(message)) {
36
+ const viewport = __privateGet(this, _viewports).get(message.clientViewportId);
37
+ if (viewport) {
38
+ viewport.postMessageToClientDataSource(message);
39
+ } else {
40
+ console.error(
41
+ `[ConnectionManager] ${message.type} message received, viewport not found`
42
+ );
43
+ }
44
+ } else if (WebSocketConnection.isWebSocketConnectionMessage(message)) {
45
+ __privateSet(this, _connectionState, message);
46
+ this.emit("connection-status", message);
47
+ } else if (vuuUtils.isConnectionQualityMetrics(message)) {
48
+ this.emit("connection-metrics", message);
49
+ } else if (vuuUtils.isRequestResponse(message)) {
50
+ const { requestId } = message;
51
+ if (__privateGet(this, _pendingRequests).has(requestId)) {
52
+ const { resolve } = __privateGet(this, _pendingRequests).get(requestId);
53
+ __privateGet(this, _pendingRequests).delete(requestId);
54
+ const { requestId: _, ...messageWithoutRequestId } = message;
55
+ if (vuuUtils.messageHasResult(message)) {
56
+ resolve(message.result);
57
+ } else if (message.type === "VP_EDIT_RPC_RESPONSE" || message.type === "VP_EDIT_RPC_REJECT") {
58
+ resolve(message);
59
+ } else if (vuuUtils.isTableSchemaMessage(message)) {
60
+ resolve(message.tableSchema);
61
+ } else {
62
+ resolve(messageWithoutRequestId);
63
+ }
64
+ } else {
65
+ console.warn(
66
+ "%cConnectionManager Unexpected message from the worker",
67
+ "color:red;font-weight:bold;"
68
+ );
69
+ }
70
+ }
71
+ });
72
+ __publicField(this, "connectedServerAPI", {
73
+ subscribe: (message, callback) => {
74
+ if (__privateGet(this, _viewports).get(message.viewport)) {
75
+ throw Error(
76
+ `ConnectionManager attempting to subscribe with an existing viewport id`
77
+ );
78
+ }
79
+ __privateGet(this, _viewports).set(message.viewport, {
80
+ status: "subscribing",
81
+ request: message,
82
+ postMessageToClientDataSource: callback
83
+ });
84
+ __privateGet(this, _worker).send({ type: "subscribe", ...message });
85
+ },
86
+ unsubscribe: (viewport) => {
87
+ __privateGet(this, _worker).send({ type: "unsubscribe", viewport });
88
+ },
89
+ send: (message) => {
90
+ __privateGet(this, _worker).send(message);
91
+ },
92
+ destroy: (viewportId) => {
93
+ if (viewportId && __privateGet(this, _viewports).has(viewportId)) {
94
+ __privateGet(this, _viewports).delete(viewportId);
95
+ }
96
+ },
97
+ rpcCall: async (message) => this.asyncRequest(message),
98
+ getTableList: async () => this.asyncRequest({ type: "GET_TABLE_LIST" }),
99
+ getTableSchema: async (table) => this.asyncRequest({
100
+ type: "GET_TABLE_META",
101
+ table
102
+ })
103
+ });
104
+ __publicField(this, "asyncRequest", (msg) => {
105
+ const requestId = vuuUtils.uuid();
106
+ __privateGet(this, _worker).send({
107
+ requestId,
108
+ ...msg
109
+ });
110
+ return new Promise((resolve, reject) => {
111
+ __privateGet(this, _pendingRequests).set(requestId, { resolve, reject });
112
+ });
113
+ });
114
+ __privateSet(this, _worker, new DedicatedWorker.DedicatedWorker(this.handleMessageFromWorker));
115
+ }
116
+ static get instance() {
117
+ if (!__privateGet(_ConnectionManager, _instance)) {
118
+ __privateSet(_ConnectionManager, _instance, new _ConnectionManager());
119
+ }
120
+ return __privateGet(_ConnectionManager, _instance);
121
+ }
122
+ /**
123
+ * Open a connection to the VuuServer. This method opens the websocket connection
124
+ * and logs in. It can be called from whichever client code has access to the auth
125
+ * token (eg. the login page, or just a hardcoded login script in a sample).
126
+ * This will unblock any DataSources which may have already tried to subscribe to data,
127
+ * but lacked access to the auth token.
128
+ *
129
+ * @param serverUrl
130
+ * @param token
131
+ */
132
+ async connect(options) {
133
+ const result = await __privateGet(this, _worker).connect(options);
134
+ if (result === "connected") {
135
+ __privateGet(this, _deferredServerAPI).resolve(this.connectedServerAPI);
136
+ }
137
+ return result;
138
+ }
139
+ get connectionStatus() {
140
+ return __privateGet(this, _connectionState).connectionStatus;
141
+ }
142
+ get serverAPI() {
143
+ return __privateGet(this, _deferredServerAPI).promise;
144
+ }
145
+ async disconnect() {
146
+ try {
147
+ __privateGet(this, _worker).send({ type: "disconnect" });
148
+ __privateSet(this, _deferredServerAPI, new vuuUtils.DeferredPromise());
149
+ return "disconnected";
150
+ } catch (err) {
151
+ return "rejected";
152
+ }
153
+ }
154
+ destroy() {
155
+ __privateGet(this, _worker).terminate();
156
+ }
157
+ };
158
+ _connectionState = new WeakMap();
159
+ _instance = new WeakMap();
160
+ _deferredServerAPI = new WeakMap();
161
+ _pendingRequests = new WeakMap();
162
+ _viewports = new WeakMap();
163
+ _worker = new WeakMap();
164
+ __privateAdd(_ConnectionManager, _instance);
165
+ let ConnectionManager = _ConnectionManager;
166
+ var ConnectionManager$1 = ConnectionManager.instance;
167
+
168
+ module.exports = ConnectionManager$1;
169
+ //# sourceMappingURL=ConnectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionManager.js","sources":["../src/ConnectionManager.ts"],"sourcesContent":["import {\n ConnectOptions,\n DataSourceCallbackMessage,\n ServerAPI,\n ServerProxySubscribeMessage,\n TableSchema,\n VuuUIMessageIn,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuRpcViewportRequest,\n VuuTableList,\n VuuTableListRequest,\n VuuTableMetaRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n DeferredPromise,\n EventEmitter,\n isConnectionQualityMetrics,\n isRequestResponse,\n isTableSchemaMessage,\n messageHasResult,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n WebSocketConnectionEvents,\n WebSocketConnectionState,\n isWebSocketConnectionMessage,\n} from \"./WebSocketConnection\";\nimport { DedicatedWorker } from \"./DedicatedWorker\";\nimport { shouldMessageBeRoutedToDataSource } from \"./data-source\";\n\nimport { ConnectionQualityMetrics } from \"@vuu-ui/vuu-data-types\";\n\nexport type PostMessageToClientCallback = (\n msg: DataSourceCallbackMessage,\n) => void;\n\nexport type ConnectionEvents = WebSocketConnectionEvents & {\n \"connection-metrics\": (message: ConnectionQualityMetrics) => void;\n};\n\ntype RegisteredViewport = {\n postMessageToClientDataSource: PostMessageToClientCallback;\n request: ServerProxySubscribeMessage;\n status: \"subscribing\";\n};\n\nclass ConnectionManager extends EventEmitter<ConnectionEvents> {\n #connectionState: WebSocketConnectionState = {\n connectionPhase: \"connecting\",\n connectionStatus: \"closed\",\n retryAttemptsTotal: -1,\n retryAttemptsRemaining: -1,\n secondsToNextRetry: -1,\n };\n static #instance: ConnectionManager;\n #deferredServerAPI = new DeferredPromise<ServerAPI>();\n #pendingRequests = new Map();\n #viewports = new Map<string, RegisteredViewport>();\n // #worker?: Worker;\n #worker: DedicatedWorker;\n\n private constructor() {\n super();\n this.#worker = new DedicatedWorker(this.handleMessageFromWorker);\n }\n\n public static get instance(): ConnectionManager {\n if (!ConnectionManager.#instance) {\n ConnectionManager.#instance = new ConnectionManager();\n }\n return ConnectionManager.#instance;\n }\n\n /**\n * Open a connection to the VuuServer. This method opens the websocket connection\n * and logs in. It can be called from whichever client code has access to the auth\n * token (eg. the login page, or just a hardcoded login script in a sample).\n * This will unblock any DataSources which may have already tried to subscribe to data,\n * but lacked access to the auth token.\n *\n * @param serverUrl\n * @param token\n */\n async connect(options: ConnectOptions) {\n const result = await this.#worker.connect(options);\n if (result === \"connected\") {\n this.#deferredServerAPI.resolve(this.connectedServerAPI);\n }\n return result;\n }\n\n private handleMessageFromWorker = (\n message: VuuUIMessageIn | DataSourceCallbackMessage,\n ) => {\n if (shouldMessageBeRoutedToDataSource(message)) {\n const viewport = this.#viewports.get(message.clientViewportId);\n if (viewport) {\n viewport.postMessageToClientDataSource(message);\n } else {\n console.error(\n `[ConnectionManager] ${message.type} message received, viewport not found`,\n );\n }\n } else if (isWebSocketConnectionMessage(message)) {\n this.#connectionState = message;\n this.emit(\"connection-status\", message);\n } else if (isConnectionQualityMetrics(message)) {\n this.emit(\"connection-metrics\", message);\n } else if (isRequestResponse(message)) {\n const { requestId } = message;\n if (this.#pendingRequests.has(requestId)) {\n const { resolve } = this.#pendingRequests.get(requestId);\n this.#pendingRequests.delete(requestId);\n const { requestId: _, ...messageWithoutRequestId } = message;\n\n if (messageHasResult(message)) {\n resolve(message.result);\n } else if (\n message.type === \"VP_EDIT_RPC_RESPONSE\" ||\n message.type === \"VP_EDIT_RPC_REJECT\"\n ) {\n resolve(message);\n } else if (isTableSchemaMessage(message)) {\n resolve(message.tableSchema);\n } else {\n resolve(messageWithoutRequestId);\n }\n } else {\n console.warn(\n \"%cConnectionManager Unexpected message from the worker\",\n \"color:red;font-weight:bold;\",\n );\n }\n }\n };\n\n get connectionStatus() {\n return this.#connectionState.connectionStatus;\n }\n\n get serverAPI() {\n return this.#deferredServerAPI.promise;\n }\n\n private connectedServerAPI: ServerAPI = {\n subscribe: (message, callback) => {\n if (this.#viewports.get(message.viewport)) {\n throw Error(\n `ConnectionManager attempting to subscribe with an existing viewport id`,\n );\n }\n // TODO we never use this status\n this.#viewports.set(message.viewport, {\n status: \"subscribing\",\n request: message,\n postMessageToClientDataSource: callback,\n });\n this.#worker.send({ type: \"subscribe\", ...message });\n },\n\n unsubscribe: (viewport) => {\n this.#worker.send({ type: \"unsubscribe\", viewport });\n },\n\n send: (message) => {\n this.#worker.send(message);\n },\n\n destroy: (viewportId?: string) => {\n if (viewportId && this.#viewports.has(viewportId)) {\n this.#viewports.delete(viewportId);\n }\n },\n\n rpcCall: async <T = unknown>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => this.asyncRequest<T>(message),\n\n getTableList: async () =>\n this.asyncRequest<VuuTableList>({ type: \"GET_TABLE_LIST\" }),\n\n getTableSchema: async (table) =>\n this.asyncRequest<TableSchema>({\n type: \"GET_TABLE_META\",\n table,\n }),\n };\n\n private asyncRequest = <T = unknown>(\n msg:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuTableListRequest\n | VuuTableMetaRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ): Promise<T> => {\n const requestId = uuid();\n this.#worker.send({\n requestId,\n ...msg,\n });\n return new Promise((resolve, reject) => {\n this.#pendingRequests.set(requestId, { resolve, reject });\n });\n };\n\n async disconnect() {\n try {\n this.#worker.send({ type: \"disconnect\" });\n this.#deferredServerAPI = new DeferredPromise<ServerAPI>();\n return \"disconnected\";\n } catch (err: unknown) {\n return \"rejected\";\n }\n }\n\n destroy() {\n this.#worker.terminate();\n }\n}\n\nexport default ConnectionManager.instance;\n"],"names":["EventEmitter","DeferredPromise","shouldMessageBeRoutedToDataSource","isWebSocketConnectionMessage","isConnectionQualityMetrics","isRequestResponse","messageHasResult","isTableSchemaMessage","uuid","DedicatedWorker"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ var vuuUtils = require('@vuu-ui/vuu-utils');
4
+ var inlinedWorker = require('./inlined-worker.js');
5
+
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
10
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
11
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
12
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
13
+ var _deferredConnection, _worker;
14
+ const workerBlob = new Blob([vuuUtils.getLoggingConfigForWorker() + inlinedWorker.workerSourceCode], {
15
+ type: "text/javascript"
16
+ });
17
+ const workerBlobUrl = URL.createObjectURL(workerBlob);
18
+ class DedicatedWorker {
19
+ constructor(onMessage) {
20
+ __privateAdd(this, _deferredConnection);
21
+ __privateAdd(this, _worker);
22
+ const deferredWorker = new vuuUtils.DeferredPromise();
23
+ __privateSet(this, _worker, deferredWorker.promise);
24
+ const worker = new Worker(workerBlobUrl);
25
+ const timer = window.setTimeout(() => {
26
+ deferredWorker.reject(Error("timed out waiting for worker to load"));
27
+ }, 1e3);
28
+ worker.onmessage = (msg) => {
29
+ const { data: message } = msg;
30
+ if (message.type === "ready") {
31
+ window.clearTimeout(timer);
32
+ deferredWorker.resolve(worker);
33
+ } else if (message.type === "connected") {
34
+ __privateGet(this, _deferredConnection)?.resolve("connected");
35
+ } else if (message.type === "connection-failed") {
36
+ __privateGet(this, _deferredConnection)?.resolve("rejected");
37
+ } else {
38
+ onMessage(message);
39
+ }
40
+ };
41
+ }
42
+ async connect(options) {
43
+ __privateSet(this, _deferredConnection, new vuuUtils.DeferredPromise());
44
+ this.send({
45
+ ...options,
46
+ type: "connect"
47
+ });
48
+ return __privateGet(this, _deferredConnection).promise;
49
+ }
50
+ async send(message) {
51
+ (await __privateGet(this, _worker)).postMessage(message);
52
+ }
53
+ async terminate() {
54
+ (await __privateGet(this, _worker)).terminate();
55
+ }
56
+ }
57
+ _deferredConnection = new WeakMap();
58
+ _worker = new WeakMap();
59
+
60
+ exports.DedicatedWorker = DedicatedWorker;
61
+ //# sourceMappingURL=DedicatedWorker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DedicatedWorker.js","sources":["../src/DedicatedWorker.ts"],"sourcesContent":["import {\n ConnectOptions,\n VuuUIMessageIn,\n VuuUIMessageOut,\n WithRequestId,\n} from \"@vuu-ui/vuu-data-types\";\nimport { DeferredPromise, getLoggingConfigForWorker } from \"@vuu-ui/vuu-utils\";\n\n// Note: inlined-worker is a generated file, it must be built\nimport { workerSourceCode } from \"./inlined-worker\";\nimport {\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuRpcViewportRequest,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nconst workerBlob = new Blob([getLoggingConfigForWorker() + workerSourceCode], {\n type: \"text/javascript\",\n});\nconst workerBlobUrl = URL.createObjectURL(workerBlob);\n\nexport class DedicatedWorker {\n #deferredConnection?: DeferredPromise<\n \"connected\" | \"reconnected\" | \"rejected\"\n >;\n #worker: Promise<Worker>;\n\n constructor(onMessage: (msg: VuuUIMessageIn) => void) {\n const deferredWorker = new DeferredPromise<Worker>();\n this.#worker = deferredWorker.promise;\n const worker = new Worker(workerBlobUrl);\n const timer: number | null = window.setTimeout(() => {\n deferredWorker.reject(Error(\"timed out waiting for worker to load\"));\n }, 1000);\n worker.onmessage = (msg: MessageEvent<VuuUIMessageIn>) => {\n const { data: message } = msg;\n if (message.type === \"ready\") {\n window.clearTimeout(timer);\n deferredWorker.resolve(worker);\n } else if (message.type === \"connected\") {\n // how do we detect reconnected\n this.#deferredConnection?.resolve(\"connected\");\n } else if (message.type === \"connection-failed\") {\n this.#deferredConnection?.resolve(\"rejected\");\n // this.#deferredConnection?.reject(message.reason);\n } else {\n onMessage(message);\n }\n };\n }\n\n async connect(options: ConnectOptions) {\n this.#deferredConnection = new DeferredPromise<\n \"connected\" | \"reconnected\" | \"rejected\"\n >();\n this.send({\n ...options,\n type: \"connect\",\n });\n return this.#deferredConnection.promise;\n }\n\n async send(\n message:\n | VuuUIMessageOut\n | WithRequestId<\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n >,\n ) {\n (await this.#worker).postMessage(message);\n }\n\n async terminate() {\n (await this.#worker).terminate();\n }\n}\n"],"names":["getLoggingConfigForWorker","workerSourceCode","DeferredPromise"],"mappings":";;;;;;;;;;;;AAAA,IAAA,mBAAA,EAAA,OAAA;AAkBA,MAAM,aAAa,IAAI,IAAA,CAAK,CAACA,kCAA0B,EAAA,GAAIC,8BAAgB,CAAG,EAAA;AAAA,EAC5E,IAAM,EAAA;AACR,CAAC,CAAA;AACD,MAAM,aAAA,GAAgB,GAAI,CAAA,eAAA,CAAgB,UAAU,CAAA;AAE7C,MAAM,eAAgB,CAAA;AAAA,EAM3B,YAAY,SAA0C,EAAA;AALtD,IAAA,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;AAGA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAGE,IAAM,MAAA,cAAA,GAAiB,IAAIC,wBAAwB,EAAA;AACnD,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,cAAe,CAAA,OAAA,CAAA;AAC9B,IAAM,MAAA,MAAA,GAAS,IAAI,MAAA,CAAO,aAAa,CAAA;AACvC,IAAM,MAAA,KAAA,GAAuB,MAAO,CAAA,UAAA,CAAW,MAAM;AACnD,MAAe,cAAA,CAAA,MAAA,CAAO,KAAM,CAAA,sCAAsC,CAAC,CAAA;AAAA,OAClE,GAAI,CAAA;AACP,IAAO,MAAA,CAAA,SAAA,GAAY,CAAC,GAAsC,KAAA;AACxD,MAAM,MAAA,EAAE,IAAM,EAAA,OAAA,EAAY,GAAA,GAAA;AAC1B,MAAI,IAAA,OAAA,CAAQ,SAAS,OAAS,EAAA;AAC5B,QAAA,MAAA,CAAO,aAAa,KAAK,CAAA;AACzB,QAAA,cAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,OAC/B,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,WAAa,EAAA;AAEvC,QAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAqB,QAAQ,WAAW,CAAA;AAAA,OAC/C,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,mBAAqB,EAAA;AAC/C,QAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,EAAqB,QAAQ,UAAU,CAAA;AAAA,OAEvC,MAAA;AACL,QAAA,SAAA,CAAU,OAAO,CAAA;AAAA;AACnB,KACF;AAAA;AACF,EAEA,MAAM,QAAQ,OAAyB,EAAA;AACrC,IAAK,YAAA,CAAA,IAAA,EAAA,mBAAA,EAAsB,IAAIA,wBAE7B,EAAA,CAAA;AACF,IAAA,IAAA,CAAK,IAAK,CAAA;AAAA,MACR,GAAG,OAAA;AAAA,MACH,IAAM,EAAA;AAAA,KACP,CAAA;AACD,IAAA,OAAO,mBAAK,mBAAoB,CAAA,CAAA,OAAA;AAAA;AAClC,EAEA,MAAM,KACJ,OASA,EAAA;AACA,IAAA,CAAC,MAAM,YAAA,CAAA,IAAA,EAAK,OAAS,CAAA,EAAA,WAAA,CAAY,OAAO,CAAA;AAAA;AAC1C,EAEA,MAAM,SAAY,GAAA;AAChB,IAAC,CAAA,MAAM,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,EAAS,SAAU,EAAA;AAAA;AAEnC;AAzDE,mBAAA,GAAA,IAAA,OAAA,EAAA;AAGA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}