@gjsify/websocket 0.3.21 → 0.4.3

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.
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});export{__name};
package/lib/esm/index.js CHANGED
@@ -1 +1 @@
1
- import e from"@girs/glib-2.0";import t from"@girs/soup-3.0";import n from"@girs/gio-2.0";import{CloseEvent as r,Event as i,EventTarget as a,MessageEvent as o}from"@gjsify/dom-events";function extensionName(e){return e instanceof t.WebsocketExtensionDeflate?`permessage-deflate`:(e.constructor.$gtype?.name??``).replace(/^SoupWebsocketExtension/,``).toLowerCase()}function serializeExtensions(e){return!e||e.length===0?``:e.map(e=>{let t=e.get_response_params();return t?`${extensionName(e)}${t}`:extensionName(e)}).join(`, `)}var WebSocket=class extends a{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;url;readyState=0;bufferedAmount=0;extensions=``;protocol=``;binaryType=`blob`;onopen=null;onmessage=null;onerror=null;onclose=null;_connection=null;_session;_protocols;_cancellable=null;_handshakeTimedOut=!1;_handshakeTimer=null;constructor(e,n,r){super(),this.url=typeof e==`string`?e:e.toString(),this._protocols=typeof n==`string`?[n]:n??[],this._session=new t.Session,r?.perMessageDeflate&&(this._session.add_feature_by_type(t.WebsocketExtensionManager.$gtype),this._session.add_feature_by_type(t.WebsocketExtensionDeflate.$gtype)),this._connect(r)}_connect(a){let o=e.Uri.parse(this.url,e.UriFlags.NONE),s=new t.Message({method:`GET`,uri:o});if(a?.headers){let e=s.get_request_headers();for(let[t,n]of Object.entries(a.headers))Array.isArray(n)?n.forEach(n=>e.append(t,n)):e.replace(t,n)}if(a?.handshakeTimeout){this._cancellable=new n.Cancellable;let e=this._cancellable;this._handshakeTimer=setTimeout(()=>{this._handshakeTimedOut=!0,this._handshakeTimer=null,e.cancel()},a.handshakeTimeout)}this._session.websocket_connect_async(s,a?.origin??null,this._protocols.length>0?this._protocols:null,e.PRIORITY_DEFAULT,this._cancellable,(e,t)=>{this._handshakeTimer!==null&&(clearTimeout(this._handshakeTimer),this._handshakeTimer=null);try{this._connection=this._session.websocket_connect_finish(t),this._connection.max_incoming_payload_size=100*1024*1024,this.readyState=1,this.protocol=this._connection.get_protocol()??``,this.extensions=serializeExtensions(this._connection.get_extensions()),this._connection.connect(`message`,(e,t,n)=>{this._onMessage(t,n)}),this._connection.connect(`closed`,()=>{this._onClosed()}),this._connection.connect(`error`,(e,t)=>{this._onError(t)});let e=new i(`open`);this.dispatchEvent(e),this.onopen&&this.onopen.call(this,e)}catch(e){this.readyState=3;let t=this._handshakeTimedOut?`Opening handshake has timed out`:e instanceof Error?e.message:String(e),n=Error(t),a=new i(`error`);a.error=n,a.message=t,this.dispatchEvent(a),this.onerror&&this.onerror.call(this,a);let o=new r(`close`,{code:1006,reason:t,wasClean:!1});this.dispatchEvent(o),this.onclose&&this.onclose.call(this,o)}})}_onMessage(e,n){let r;if(e===t.WebsocketDataType.TEXT)r=new TextDecoder().decode(n.toArray());else{let e=n.toArray();r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}let i=new o(`message`,{data:r,origin:this.url});this.dispatchEvent(i),this.onmessage&&this.onmessage.call(this,i)}_onError(e){let t=new i(`error`);this.dispatchEvent(t),this.onerror&&this.onerror.call(this,t)}_onClosed(){let e=this._connection?.get_close_code()??1006,t=this._connection?.get_close_data()??``,n=e===1e3;this.readyState=3,this._connection=null;let i=new r(`close`,{code:e,reason:t,wasClean:n});this.dispatchEvent(i),this.onclose&&this.onclose.call(this,i)}send(n){if(this.readyState!==1)throw new DOMException(`WebSocket is not open`,`InvalidStateError`);if(this._connection)if(typeof n==`string`){let r=new TextEncoder().encode(n);this._connection.send_message(t.WebsocketDataType.TEXT,new e.Bytes(r))}else{let r;r=n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength),this._connection.send_message(t.WebsocketDataType.BINARY,new e.Bytes(r))}}close(e,t){if(!(this.readyState===3||this.readyState===2)){if(e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException(`The code must be either 1000, or between 3000 and 4999. ${e} is neither.`,`InvalidAccessError`);if(this.readyState=2,this._connection)this._connection.close(e??1e3,t??null);else{this.readyState=3;let e=new r(`close`,{code:1006,wasClean:!1});this.dispatchEvent(e),this.onclose&&this.onclose.call(this,e)}}}};export{r as CloseEvent,o as MessageEvent,WebSocket,WebSocket as default};
1
+ import"./_virtual/_rolldown/runtime.js";import e from"@girs/glib-2.0";import t from"@girs/soup-3.0";import n from"@girs/gio-2.0";import{CloseEvent as r,Event as i,EventTarget as a,MessageEvent as o}from"@gjsify/dom-events";function extensionName(e){return e instanceof t.WebsocketExtensionDeflate?`permessage-deflate`:(e.constructor.$gtype?.name??``).replace(/^SoupWebsocketExtension/,``).toLowerCase()}function serializeExtensions(e){return!e||e.length===0?``:e.map(e=>{let t=e.get_response_params();return t?`${extensionName(e)}${t}`:extensionName(e)}).join(`, `)}var WebSocket=class extends a{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;url;readyState=0;bufferedAmount=0;extensions=``;protocol=``;binaryType=`blob`;onopen=null;onmessage=null;onerror=null;onclose=null;_connection=null;_session;_protocols;_cancellable=null;_handshakeTimedOut=!1;_handshakeTimer=null;constructor(e,n,r){super(),this.url=typeof e==`string`?e:e.toString(),this._protocols=typeof n==`string`?[n]:n??[],this._session=new t.Session,r?.perMessageDeflate&&(this._session.add_feature_by_type(t.WebsocketExtensionManager.$gtype),this._session.add_feature_by_type(t.WebsocketExtensionDeflate.$gtype)),this._connect(r)}_connect(a){let o=e.Uri.parse(this.url,e.UriFlags.NONE),s=new t.Message({method:`GET`,uri:o});if(a?.headers){let e=s.get_request_headers();for(let[t,n]of Object.entries(a.headers))Array.isArray(n)?n.forEach(n=>e.append(t,n)):e.replace(t,n)}if(a?.handshakeTimeout){this._cancellable=new n.Cancellable;let e=this._cancellable;this._handshakeTimer=setTimeout(()=>{this._handshakeTimedOut=!0,this._handshakeTimer=null,e.cancel()},a.handshakeTimeout)}this._session.websocket_connect_async(s,a?.origin??null,this._protocols.length>0?this._protocols:null,e.PRIORITY_DEFAULT,this._cancellable,(e,t)=>{this._handshakeTimer!==null&&(clearTimeout(this._handshakeTimer),this._handshakeTimer=null);try{this._connection=this._session.websocket_connect_finish(t),this._connection.max_incoming_payload_size=100*1024*1024,this.readyState=1,this.protocol=this._connection.get_protocol()??``,this.extensions=serializeExtensions(this._connection.get_extensions()),this._connection.connect(`message`,(e,t,n)=>{this._onMessage(t,n)}),this._connection.connect(`closed`,()=>{this._onClosed()}),this._connection.connect(`error`,(e,t)=>{this._onError(t)});let e=new i(`open`);this.dispatchEvent(e),this.onopen&&this.onopen.call(this,e)}catch(e){this.readyState=3;let t=this._handshakeTimedOut?`Opening handshake has timed out`:e instanceof Error?e.message:String(e),n=Error(t),a=new i(`error`);a.error=n,a.message=t,this.dispatchEvent(a),this.onerror&&this.onerror.call(this,a);let o=new r(`close`,{code:1006,reason:t,wasClean:!1});this.dispatchEvent(o),this.onclose&&this.onclose.call(this,o)}})}_onMessage(e,n){let r;if(e===t.WebsocketDataType.TEXT)r=new TextDecoder().decode(n.toArray());else{let e=n.toArray();r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}let i=new o(`message`,{data:r,origin:this.url});this.dispatchEvent(i),this.onmessage&&this.onmessage.call(this,i)}_onError(e){let t=new i(`error`);this.dispatchEvent(t),this.onerror&&this.onerror.call(this,t)}_onClosed(){let e=this._connection?.get_close_code()??1006,t=this._connection?.get_close_data()??``,n=e===1e3;this.readyState=3,this._connection=null;let i=new r(`close`,{code:e,reason:t,wasClean:n});this.dispatchEvent(i),this.onclose&&this.onclose.call(this,i)}send(n){if(this.readyState!==1)throw new DOMException(`WebSocket is not open`,`InvalidStateError`);if(this._connection)if(typeof n==`string`){let r=new TextEncoder().encode(n);this._connection.send_message(t.WebsocketDataType.TEXT,new e.Bytes(r))}else{let r;r=n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(n.buffer,n.byteOffset,n.byteLength),this._connection.send_message(t.WebsocketDataType.BINARY,new e.Bytes(r))}}close(e,t){if(!(this.readyState===3||this.readyState===2)){if(e!==void 0&&e!==1e3&&(e<3e3||e>4999))throw new DOMException(`The code must be either 1000, or between 3000 and 4999. ${e} is neither.`,`InvalidAccessError`);if(this.readyState=2,this._connection)this._connection.close(e??1e3,t??null);else{this.readyState=3;let e=new r(`close`,{code:1006,wasClean:!1});this.dispatchEvent(e),this.onclose&&this.onclose.call(this,e)}}}};export{r as CloseEvent,o as MessageEvent,WebSocket,WebSocket as default};
package/package.json CHANGED
@@ -1,53 +1,57 @@
1
1
  {
2
- "name": "@gjsify/websocket",
3
- "version": "0.3.21",
4
- "description": "W3C WebSocket API for GJS using Soup 3.0",
5
- "type": "module",
6
- "module": "lib/esm/index.js",
7
- "types": "lib/types/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/types/index.d.ts",
11
- "default": "./lib/esm/index.js"
2
+ "name": "@gjsify/websocket",
3
+ "version": "0.4.3",
4
+ "description": "W3C WebSocket API for GJS using Soup 3.0",
5
+ "type": "module",
6
+ "module": "lib/esm/index.js",
7
+ "types": "lib/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/types/index.d.ts",
11
+ "default": "./lib/esm/index.js"
12
+ },
13
+ "./register": {
14
+ "types": "./lib/types/register.d.ts",
15
+ "default": "./lib/esm/register.js"
16
+ },
17
+ "./globals": "./globals.mjs"
12
18
  },
13
- "./register": {
14
- "types": "./lib/types/register.d.ts",
15
- "default": "./lib/esm/register.js"
19
+ "files": [
20
+ "lib",
21
+ "globals.mjs"
22
+ ],
23
+ "sideEffects": [
24
+ "./lib/esm/register.js",
25
+ "./globals.mjs"
26
+ ],
27
+ "scripts": {
28
+ "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
29
+ "check": "tsc --noEmit",
30
+ "build": "gjsify run build:gjsify && gjsify run build:types",
31
+ "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
32
+ "build:types": "tsc",
33
+ "build:test": "gjsify run build:test:gjs",
34
+ "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
35
+ "build:test:browser": "gjsify build src/test.browser.mts --app browser --outfile dist/test.browser.mjs",
36
+ "test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:gjs",
37
+ "test:gjs": "gjsify run test.gjs.mjs"
16
38
  },
17
- "./globals": "./globals.mjs"
18
- },
19
- "sideEffects": [
20
- "./lib/esm/register.js",
21
- "./globals.mjs"
22
- ],
23
- "scripts": {
24
- "clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
25
- "check": "tsc --noEmit",
26
- "build": "yarn build:gjsify && yarn build:types",
27
- "build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
28
- "build:types": "tsc",
29
- "build:test": "yarn build:test:gjs",
30
- "build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
31
- "build:test:browser": "gjsify build src/test.browser.mts --app browser --outfile dist/test.browser.mjs",
32
- "test": "yarn build:gjsify && yarn build:test && yarn test:gjs",
33
- "test:gjs": "gjsify run test.gjs.mjs"
34
- },
35
- "keywords": [
36
- "gjs",
37
- "websocket",
38
- "soup"
39
- ],
40
- "devDependencies": {
41
- "@gjsify/cli": "^0.3.21",
42
- "@gjsify/unit": "^0.3.21",
43
- "@types/node": "^25.6.2",
44
- "typescript": "^6.0.3"
45
- },
46
- "dependencies": {
47
- "@girs/gio-2.0": "2.88.0-4.0.0-rc.14",
48
- "@girs/gjs": "4.0.0-rc.14",
49
- "@girs/glib-2.0": "2.88.0-4.0.0-rc.14",
50
- "@girs/soup-3.0": "3.6.6-4.0.0-rc.14",
51
- "@gjsify/dom-events": "^0.3.21"
52
- }
53
- }
39
+ "keywords": [
40
+ "gjs",
41
+ "websocket",
42
+ "soup"
43
+ ],
44
+ "devDependencies": {
45
+ "@gjsify/cli": "workspace:^",
46
+ "@gjsify/unit": "workspace:^",
47
+ "@types/node": "^25.6.2",
48
+ "typescript": "^6.0.3"
49
+ },
50
+ "dependencies": {
51
+ "@girs/gio-2.0": "2.88.0-4.0.0-rc.15",
52
+ "@girs/gjs": "4.0.0-rc.15",
53
+ "@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
54
+ "@girs/soup-3.0": "3.6.6-4.0.0-rc.15",
55
+ "@gjsify/dom-events": "workspace:^"
56
+ }
57
+ }
package/src/index.spec.ts DELETED
@@ -1,261 +0,0 @@
1
- // Tests for W3C WebSocket API
2
- // Ported from WHATWG WebSocket spec requirements
3
- // Note: @gjsify/websocket uses Soup 3.0 — tests run only on GJS
4
-
5
- import { describe, it, expect } from '@gjsify/unit';
6
- import GLib from '@girs/glib-2.0';
7
- import Gio from '@girs/gio-2.0';
8
- import Soup from '@girs/soup-3.0';
9
- import { WebSocket, MessageEvent, CloseEvent } from 'websocket';
10
-
11
- export default async () => {
12
-
13
- // --- WebSocket class ---
14
- await describe('WebSocket', async () => {
15
- await it('should be a constructor', async () => {
16
- expect(typeof WebSocket).toBe('function');
17
- });
18
-
19
- await it('should have readyState constants', async () => {
20
- expect(WebSocket.CONNECTING).toBe(0);
21
- expect(WebSocket.OPEN).toBe(1);
22
- expect(WebSocket.CLOSING).toBe(2);
23
- expect(WebSocket.CLOSED).toBe(3);
24
- });
25
- });
26
-
27
- // --- MessageEvent ---
28
- await describe('MessageEvent', async () => {
29
- await it('should be constructable', async () => {
30
- const event = new MessageEvent('message', { data: 'hello' });
31
- expect(event.type).toBe('message');
32
- expect(event.data).toBe('hello');
33
- });
34
-
35
- await it('should have origin and lastEventId', async () => {
36
- const event = new MessageEvent('message', {
37
- data: 'test',
38
- origin: 'ws://example.com',
39
- lastEventId: '42',
40
- });
41
- expect(event.origin).toBe('ws://example.com');
42
- expect(event.lastEventId).toBe('42');
43
- });
44
-
45
- await it('should default origin and lastEventId to empty string', async () => {
46
- const event = new MessageEvent('message', { data: 'x' });
47
- expect(event.origin).toBe('');
48
- expect(event.lastEventId).toBe('');
49
- });
50
-
51
- await it('should support ArrayBuffer data', async () => {
52
- const buffer = new ArrayBuffer(4);
53
- const event = new MessageEvent('message', { data: buffer });
54
- expect(event.data).toBe(buffer);
55
- });
56
- });
57
-
58
- // --- CloseEvent ---
59
- await describe('CloseEvent', async () => {
60
- await it('should be constructable', async () => {
61
- const event = new CloseEvent('close');
62
- expect(event.type).toBe('close');
63
- });
64
-
65
- await it('should have code, reason, wasClean', async () => {
66
- const event = new CloseEvent('close', {
67
- code: 1000,
68
- reason: 'normal',
69
- wasClean: true,
70
- });
71
- expect(event.code).toBe(1000);
72
- expect(event.reason).toBe('normal');
73
- expect(event.wasClean).toBe(true);
74
- });
75
-
76
- await it('should default to 0, empty reason, wasClean=false', async () => {
77
- const event = new CloseEvent('close');
78
- expect(event.code).toBe(0);
79
- expect(event.reason).toBe('');
80
- expect(event.wasClean).toBe(false);
81
- });
82
- });
83
-
84
- // --- WebSocket round-trip ---
85
- await describe('WebSocket round-trip', async () => {
86
- await it('should connect, send, receive, and close', async () => {
87
- const server = new Soup.Server({});
88
- server.add_websocket_handler('/ws', null, null,
89
- (_srv: Soup.Server, _msg: Soup.ServerMessage, _path: string, connection: Soup.WebsocketConnection) => {
90
- connection.connect('message', (_conn: Soup.WebsocketConnection, _type: number, message: GLib.Bytes) => {
91
- const text = new TextDecoder().decode(message.toArray());
92
- connection.send_text(text);
93
- });
94
- },
95
- );
96
- server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY);
97
- const port = (server.get_listeners()[0].get_local_address() as any).get_port();
98
-
99
- const result = await new Promise<string>((resolve, reject) => {
100
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`);
101
- ws.onopen = () => ws.send('hello websocket');
102
- ws.onmessage = (event: any) => { ws.close(); resolve(event.data); };
103
- ws.onerror = () => reject(new Error('WebSocket error'));
104
- setTimeout(() => reject(new Error('Timeout')), 5000);
105
- });
106
-
107
- expect(result).toBe('hello websocket');
108
- server.disconnect();
109
- });
110
-
111
- await it('should handle binary data', async () => {
112
- const server = new Soup.Server({});
113
- server.add_websocket_handler('/ws', null, null,
114
- (_srv: Soup.Server, _msg: Soup.ServerMessage, _path: string, connection: Soup.WebsocketConnection) => {
115
- connection.connect('message', (_conn: Soup.WebsocketConnection, _type: number, message: GLib.Bytes) => {
116
- connection.send_binary(message.toArray());
117
- });
118
- },
119
- );
120
- server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY);
121
- const port = (server.get_listeners()[0].get_local_address() as any).get_port();
122
-
123
- const result = await new Promise<ArrayBuffer>((resolve, reject) => {
124
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`);
125
- ws.binaryType = 'arraybuffer';
126
- ws.onopen = () => ws.send(new Uint8Array([1, 2, 3, 4, 5]).buffer);
127
- ws.onmessage = (event: any) => { ws.close(); resolve(event.data); };
128
- ws.onerror = () => reject(new Error('WebSocket error'));
129
- setTimeout(() => reject(new Error('Timeout')), 5000);
130
- });
131
-
132
- const arr = new Uint8Array(result);
133
- expect(arr.length).toBe(5);
134
- expect(arr[0]).toBe(1);
135
- expect(arr[4]).toBe(5);
136
- server.disconnect();
137
- });
138
-
139
- await it('should report close code', async () => {
140
- const server = new Soup.Server({});
141
- server.add_websocket_handler('/ws', null, null,
142
- (_srv: Soup.Server, _msg: Soup.ServerMessage, _path: string, connection: Soup.WebsocketConnection) => {
143
- connection.close(1000, 'server done');
144
- },
145
- );
146
- server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY);
147
- const port = (server.get_listeners()[0].get_local_address() as any).get_port();
148
-
149
- const result = await new Promise<number>((resolve, reject) => {
150
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`);
151
- ws.onclose = (event: any) => resolve(event.code);
152
- ws.onerror = () => reject(new Error('WebSocket error'));
153
- setTimeout(() => reject(new Error('Timeout')), 5000);
154
- });
155
-
156
- expect(result).toBe(1000);
157
- server.disconnect();
158
- });
159
- });
160
-
161
- // --- WebSocket client options ---
162
- // Ref: refs/ws/test/websocket.test.js §"options" (headers, origin, handshakeTimeout)
163
- await describe('WebSocket client options', async () => {
164
- await it('should send custom headers with the upgrade request', async () => {
165
- const server = new Soup.Server({});
166
- let receivedCookieHeader: string | null = null;
167
-
168
- server.add_websocket_handler('/ws', null, null,
169
- (_srv: Soup.Server, msg: Soup.ServerMessage, _path: string, connection: Soup.WebsocketConnection) => {
170
- receivedCookieHeader = msg.get_request_headers().get_one('Cookie') ?? null;
171
- connection.close(1000, 'done');
172
- },
173
- );
174
- server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY);
175
- const port = (server.get_listeners()[0].get_local_address() as any).get_port();
176
-
177
- await new Promise<void>((resolve, reject) => {
178
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`, undefined, {
179
- headers: { Cookie: 'foo=bar' },
180
- });
181
- ws.addEventListener('close', () => resolve(), { once: true });
182
- ws.addEventListener('error', () => reject(new Error('WebSocket error')), { once: true });
183
- setTimeout(() => reject(new Error('Timeout')), 5000);
184
- });
185
-
186
- expect(receivedCookieHeader).toBe('foo=bar');
187
- server.disconnect();
188
- });
189
-
190
- await it('should set the Origin header when the origin option is given', async () => {
191
- const server = new Soup.Server({});
192
- let receivedOrigin: string | null = null;
193
-
194
- server.add_websocket_handler('/ws', null, null,
195
- (_srv: Soup.Server, msg: Soup.ServerMessage, _path: string, connection: Soup.WebsocketConnection) => {
196
- receivedOrigin = msg.get_request_headers().get_one('Origin') ?? null;
197
- connection.close(1000, 'done');
198
- },
199
- );
200
- server.listen_local(0, Soup.ServerListenOptions.IPV4_ONLY);
201
- const port = (server.get_listeners()[0].get_local_address() as any).get_port();
202
-
203
- await new Promise<void>((resolve, reject) => {
204
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`, undefined, {
205
- origin: 'https://example.com:8000',
206
- });
207
- ws.addEventListener('close', () => resolve(), { once: true });
208
- ws.addEventListener('error', () => reject(new Error('WebSocket error')), { once: true });
209
- setTimeout(() => reject(new Error('Timeout')), 5000);
210
- });
211
-
212
- expect(receivedOrigin).toBe('https://example.com:8000');
213
- server.disconnect();
214
- });
215
-
216
- await it('should fire error with "Opening handshake has timed out" when handshakeTimeout expires', async () => {
217
- // Use a raw TCP listener that accepts connections but never sends a 101.
218
- // Soup's websocket_connect_async will wait for the upgrade response; after
219
- // handshakeTimeout ms we cancel via Gio.Cancellable.
220
- const service = new Gio.SocketService();
221
- const port = service.add_any_inet_port(null);
222
- const heldConns: Gio.SocketConnection[] = [];
223
- service.connect('incoming', (_svc: Gio.SocketService, conn: Gio.SocketConnection) => {
224
- heldConns.push(conn); // Hold reference — never write back
225
- return true;
226
- });
227
- service.start();
228
-
229
- const error = await new Promise<Error>((resolve, reject) => {
230
- const ws = new WebSocket(`ws://127.0.0.1:${port}/ws`, undefined, {
231
- handshakeTimeout: 200,
232
- });
233
- ws.addEventListener('error', (ev: any) => {
234
- resolve(ev.error instanceof Error ? ev.error : new Error(ev.message ?? 'unknown'));
235
- }, { once: true });
236
- ws.addEventListener('open', () => reject(new Error('Unexpected open')), { once: true });
237
- setTimeout(() => reject(new Error('Test timeout')), 5000);
238
- });
239
-
240
- expect(error instanceof Error).toBe(true);
241
- expect(error.message).toBe('Opening handshake has timed out');
242
-
243
- service.stop();
244
- });
245
- });
246
-
247
- // --- Module exports ---
248
- await describe('WebSocket module exports', async () => {
249
- await it('should export WebSocket class', async () => {
250
- expect(typeof WebSocket).toBe('function');
251
- });
252
-
253
- await it('should export MessageEvent class', async () => {
254
- expect(typeof MessageEvent).toBe('function');
255
- });
256
-
257
- await it('should export CloseEvent class', async () => {
258
- expect(typeof CloseEvent).toBe('function');
259
- });
260
- });
261
- };
package/src/index.ts DELETED
@@ -1,324 +0,0 @@
1
- // W3C WebSocket API for GJS
2
- // Reimplemented for GJS using Soup 3.0 (Soup.WebsocketConnection)
3
- // Reference: WHATWG WebSocket API (https://websockets.spec.whatwg.org/)
4
-
5
- import GLib from '@girs/glib-2.0';
6
- import Soup from '@girs/soup-3.0';
7
- import Gio from '@girs/gio-2.0';
8
- import { Event, EventTarget, CustomEvent, MessageEvent, CloseEvent } from '@gjsify/dom-events';
9
-
10
- export { MessageEvent, CloseEvent };
11
-
12
- // WebSocket readyState constants
13
- const CONNECTING = 0;
14
- const OPEN = 1;
15
- const CLOSING = 2;
16
- const CLOSED = 3;
17
-
18
- // libsoup exposes an extension's spec name only as a class-level C field that
19
- // GI doesn't surface on the JS object. Map by constructor for the one
20
- // extension Soup ships today; fall back to the stripped GType name for any
21
- // third-party extension registered against the session.
22
- function extensionName(ext: Soup.WebsocketExtension): string {
23
- if (ext instanceof Soup.WebsocketExtensionDeflate) return 'permessage-deflate';
24
- const gtype = (ext.constructor as { $gtype?: { name?: string } }).$gtype?.name ?? '';
25
- return gtype.replace(/^SoupWebsocketExtension/, '').toLowerCase();
26
- }
27
-
28
- function serializeExtensions(exts: Soup.WebsocketExtension[] | null): string {
29
- if (!exts || exts.length === 0) return '';
30
- return exts
31
- .map((ext) => {
32
- const params = ext.get_response_params();
33
- return params ? `${extensionName(ext)}${params}` : extensionName(ext);
34
- })
35
- .join(', ');
36
- }
37
-
38
- /** Options for the WebSocket constructor. Extends the W3C spec with Soup-level knobs. */
39
- export interface WebSocketOptions {
40
- /** Offer permessage-deflate (RFC 7692) during the WebSocket handshake.
41
- * Defaults to false — Soup's loopback server behaviour with deflate enabled
42
- * diverges across Fedora Soup 3.x builds (the server may accept but not
43
- * decompress, surfacing compressed bytes to the message signal). Enable
44
- * explicitly for servers known to handle deflate correctly (e.g. the
45
- * Autobahn fuzzingserver). @gjsify/ws enables it by default, matching the
46
- * real ws npm package. */
47
- perMessageDeflate?: boolean;
48
- /** Extra HTTP headers to send with the WebSocket upgrade request.
49
- * Useful for authentication cookies, Authorization, or custom
50
- * application-level headers. Array values are sent as repeated headers. */
51
- headers?: Record<string, string | string[]>;
52
- /** Value for the HTTP `Origin` header sent during the upgrade handshake.
53
- * Passed directly as the `origin` argument to Soup's
54
- * `websocket_connect_async`. `null` omits the header (default). */
55
- origin?: string | null;
56
- /** Abort the opening handshake after this many milliseconds. Fires an
57
- * 'error' event with message "Opening handshake has timed out". */
58
- handshakeTimeout?: number;
59
- }
60
-
61
- /**
62
- * W3C WebSocket API implementation using Soup 3.0.
63
- *
64
- * Usage:
65
- * const ws = new WebSocket('ws://localhost:8080/');
66
- * ws.onopen = () => ws.send('hello');
67
- * ws.onmessage = (e) => console.log(e.data);
68
- * ws.onclose = (e) => console.log('closed', e.code);
69
- */
70
- export class WebSocket extends EventTarget {
71
- // readyState constants
72
- static readonly CONNECTING = CONNECTING;
73
- static readonly OPEN = OPEN;
74
- static readonly CLOSING = CLOSING;
75
- static readonly CLOSED = CLOSED;
76
-
77
- readonly CONNECTING = CONNECTING;
78
- readonly OPEN = OPEN;
79
- readonly CLOSING = CLOSING;
80
- readonly CLOSED = CLOSED;
81
-
82
- readonly url: string;
83
- readyState: number = CONNECTING;
84
- bufferedAmount = 0;
85
- extensions = '';
86
- protocol = '';
87
- binaryType: 'blob' | 'arraybuffer' = 'blob';
88
-
89
- // Event handlers (attribute-style)
90
- onopen: ((this: WebSocket, ev: Event) => void) | null = null;
91
- onmessage: ((this: WebSocket, ev: MessageEvent) => void) | null = null;
92
- onerror: ((this: WebSocket, ev: Event) => void) | null = null;
93
- onclose: ((this: WebSocket, ev: CloseEvent) => void) | null = null;
94
-
95
- private _connection: Soup.WebsocketConnection | null = null;
96
- private _session: Soup.Session;
97
- private _protocols: string[];
98
- private _cancellable: Gio.Cancellable | null = null;
99
- private _handshakeTimedOut = false;
100
- private _handshakeTimer: ReturnType<typeof setTimeout> | null = null;
101
-
102
- constructor(url: string | URL, protocols?: string | string[], options?: WebSocketOptions) {
103
- super();
104
- this.url = typeof url === 'string' ? url : url.toString();
105
- this._protocols = typeof protocols === 'string' ? [protocols] : (protocols ?? []);
106
- this._session = new Soup.Session();
107
-
108
- // Opt-in permessage-deflate (RFC 7692). Soup's loopback WebSocket server
109
- // may accept the extension in the HTTP handshake but then pass compressed
110
- // bytes through to the 'message' signal without decompressing, which
111
- // produces wrong data in round-trip tests. Enable only when the caller
112
- // knows the remote server handles deflate correctly (e.g. Autobahn suite).
113
- // @gjsify/ws enables it by default, matching real ws npm-package behaviour.
114
- //
115
- // Soup requires: (1) add WebsocketExtensionManager to the session first,
116
- // then (2) register the deflate extension type with the manager via
117
- // add_feature_by_type. Adding deflate without the manager first yields the
118
- // runtime warning "No feature manager for feature of type ...".
119
- if (options?.perMessageDeflate) {
120
- this._session.add_feature_by_type(Soup.WebsocketExtensionManager.$gtype);
121
- this._session.add_feature_by_type(Soup.WebsocketExtensionDeflate.$gtype);
122
- }
123
-
124
- // Connect asynchronously
125
- this._connect(options);
126
- }
127
-
128
- private _connect(options?: WebSocketOptions): void {
129
- const uri = GLib.Uri.parse(this.url, GLib.UriFlags.NONE);
130
- const msg = new Soup.Message({ method: 'GET', uri });
131
-
132
- // Apply custom upgrade-request headers (e.g. Cookie, Authorization).
133
- if (options?.headers) {
134
- const reqHeaders = msg.get_request_headers();
135
- for (const [name, value] of Object.entries(options.headers)) {
136
- if (Array.isArray(value)) {
137
- value.forEach(v => reqHeaders.append(name, v));
138
- } else {
139
- reqHeaders.replace(name, value);
140
- }
141
- }
142
- }
143
-
144
- // Set up handshake timeout via Gio.Cancellable so we can abort the async
145
- // connect operation after the caller-specified deadline.
146
- if (options?.handshakeTimeout) {
147
- this._cancellable = new Gio.Cancellable();
148
- const cancellable = this._cancellable;
149
- this._handshakeTimer = setTimeout(() => {
150
- this._handshakeTimedOut = true;
151
- this._handshakeTimer = null;
152
- cancellable.cancel();
153
- }, options.handshakeTimeout);
154
- }
155
-
156
- this._session.websocket_connect_async(
157
- msg,
158
- options?.origin ?? null,
159
- this._protocols.length > 0 ? this._protocols : null,
160
- GLib.PRIORITY_DEFAULT,
161
- this._cancellable,
162
- (_self: unknown, asyncRes: Gio.AsyncResult) => {
163
- if (this._handshakeTimer !== null) {
164
- clearTimeout(this._handshakeTimer);
165
- this._handshakeTimer = null;
166
- }
167
-
168
- try {
169
- this._connection = this._session.websocket_connect_finish(asyncRes);
170
- // Soup's built-in default is 128 KB — too low for large frames
171
- // (Autobahn 9.1.* sends single frames up to 16 MB; npm ws defaults
172
- // to 100 MB). Set before wiring signals so the limit is in place
173
- // before the first frame arrives. 0 = unlimited.
174
- this._connection.max_incoming_payload_size = 100 * 1024 * 1024;
175
- this.readyState = OPEN;
176
- this.protocol = this._connection.get_protocol() ?? '';
177
- this.extensions = serializeExtensions(this._connection.get_extensions());
178
-
179
- // Wire up Soup signals
180
- this._connection.connect('message', (_conn: Soup.WebsocketConnection, type: number, message: GLib.Bytes) => {
181
- this._onMessage(type, message);
182
- });
183
-
184
- this._connection.connect('closed', () => {
185
- this._onClosed();
186
- });
187
-
188
- this._connection.connect('error', (_conn: Soup.WebsocketConnection, error: GLib.Error) => {
189
- this._onError(error);
190
- });
191
-
192
- // Fire 'open' event
193
- const openEvent = new Event('open');
194
- this.dispatchEvent(openEvent);
195
- if (this.onopen) this.onopen.call(this, openEvent);
196
- } catch (error: unknown) {
197
- this.readyState = CLOSED;
198
-
199
- const errorMessage = this._handshakeTimedOut
200
- ? 'Opening handshake has timed out'
201
- : (error instanceof Error ? error.message : String(error));
202
- const err = new Error(errorMessage);
203
-
204
- // Attach error info to the event so wrapper layers (e.g. @gjsify/ws)
205
- // can surface a typed Error to their own 'error' listeners.
206
- const errorEvent = new Event('error');
207
- (errorEvent as any).error = err;
208
- (errorEvent as any).message = errorMessage;
209
- this.dispatchEvent(errorEvent);
210
- if (this.onerror) this.onerror.call(this, errorEvent);
211
-
212
- const closeEvent = new CloseEvent('close', {
213
- code: 1006,
214
- reason: errorMessage,
215
- wasClean: false,
216
- });
217
- this.dispatchEvent(closeEvent);
218
- if (this.onclose) this.onclose.call(this, closeEvent);
219
- }
220
- },
221
- );
222
- }
223
-
224
- private _onMessage(type: number, message: GLib.Bytes): void {
225
- let data: string | ArrayBuffer;
226
-
227
- if (type === Soup.WebsocketDataType.TEXT) {
228
- const decoder = new TextDecoder();
229
- data = decoder.decode(message.toArray());
230
- } else {
231
- // Binary data
232
- const arr = message.toArray();
233
- data = arr.buffer.slice(arr.byteOffset, arr.byteOffset + arr.byteLength) as ArrayBuffer;
234
- }
235
-
236
- const event = new MessageEvent('message', { data, origin: this.url });
237
- this.dispatchEvent(event);
238
- if (this.onmessage) this.onmessage.call(this, event);
239
- }
240
-
241
- private _onError(error: GLib.Error): void {
242
- const event = new Event('error');
243
- this.dispatchEvent(event);
244
- if (this.onerror) this.onerror.call(this, event);
245
- }
246
-
247
- private _onClosed(): void {
248
- const code = this._connection?.get_close_code() ?? 1006;
249
- const reason = this._connection?.get_close_data() ?? '';
250
- const wasClean = code === 1000;
251
-
252
- this.readyState = CLOSED;
253
- this._connection = null;
254
-
255
- const event = new CloseEvent('close', { code, reason, wasClean });
256
- this.dispatchEvent(event);
257
- if (this.onclose) this.onclose.call(this, event);
258
- }
259
-
260
- /**
261
- * Send data through the WebSocket connection.
262
- *
263
- * For strings, we intentionally route through `send_message(TEXT, bytes)`
264
- * rather than the simpler `send_text(str)` API. Reason: `send_text()`
265
- * takes a C `const char*` (null-terminated), so any embedded `\x00` in
266
- * the JS string gets truncated at the first NUL at the GI boundary —
267
- * Autobahn case 6.7.1 (single NUL in a text frame) was returned as an
268
- * empty string. Going through `GLib.Bytes` preserves the exact byte
269
- * sequence; Soup still sets the text-frame opcode because we pass
270
- * `Soup.WebsocketDataType.TEXT` explicitly.
271
- */
272
- send(data: string | ArrayBuffer | ArrayBufferView): void {
273
- if (this.readyState !== OPEN) {
274
- throw new DOMException('WebSocket is not open', 'InvalidStateError');
275
- }
276
- if (!this._connection) return;
277
-
278
- if (typeof data === 'string') {
279
- // Encode the JS string as UTF-8 bytes and ship as a text-framed
280
- // message. TextEncoder has been a SpiderMonkey built-in since
281
- // SM52 — same rationale as the TextDecoder usage in _onMessage
282
- // above; no explicit register import needed.
283
- const bytes = new TextEncoder().encode(data);
284
- this._connection.send_message(Soup.WebsocketDataType.TEXT, new GLib.Bytes(bytes));
285
- } else {
286
- let bytes: Uint8Array;
287
- if (data instanceof ArrayBuffer) {
288
- bytes = new Uint8Array(data);
289
- } else {
290
- // ArrayBufferView (TypedArray or DataView)
291
- bytes = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
292
- }
293
- this._connection.send_message(Soup.WebsocketDataType.BINARY, new GLib.Bytes(bytes));
294
- }
295
- }
296
-
297
- /**
298
- * Close the WebSocket connection.
299
- */
300
- close(code?: number, reason?: string): void {
301
- if (this.readyState === CLOSED || this.readyState === CLOSING) return;
302
-
303
- if (code !== undefined && code !== 1000 && (code < 3000 || code > 4999)) {
304
- throw new DOMException(
305
- `The code must be either 1000, or between 3000 and 4999. ${code} is neither.`,
306
- 'InvalidAccessError',
307
- );
308
- }
309
-
310
- this.readyState = CLOSING;
311
-
312
- if (this._connection) {
313
- this._connection.close(code ?? 1000, reason ?? null);
314
- } else {
315
- // Connection never established
316
- this.readyState = CLOSED;
317
- const event = new CloseEvent('close', { code: 1006, wasClean: false });
318
- this.dispatchEvent(event);
319
- if (this.onclose) this.onclose.call(this, event);
320
- }
321
- }
322
- }
323
-
324
- export default WebSocket;
package/src/register.ts DELETED
@@ -1,23 +0,0 @@
1
- // Side-effect module: registers the W3C WebSocket constructor (and its
2
- // MessageEvent / CloseEvent companions) on globalThis.
3
- //
4
- // Imported by the `--globals auto` detector via the GJS_GLOBALS_MAP entries
5
- // for "WebSocket" / "MessageEvent" / "CloseEvent" (see
6
- // packages/infra/resolve-npm/lib/globals-map.mjs). Also importable
7
- // directly as `import '@gjsify/websocket/register'`.
8
- //
9
- // Follows the existence-guard pattern from AGENTS.md Rule 2: only register
10
- // when the global is not already defined, so a consumer who polyfilled a
11
- // different WebSocket implementation first wins.
12
-
13
- import { WebSocket, MessageEvent, CloseEvent } from './index.js';
14
-
15
- if (typeof (globalThis as any).WebSocket === 'undefined') {
16
- (globalThis as any).WebSocket = WebSocket;
17
- }
18
- if (typeof (globalThis as any).MessageEvent === 'undefined') {
19
- (globalThis as any).MessageEvent = MessageEvent;
20
- }
21
- if (typeof (globalThis as any).CloseEvent === 'undefined') {
22
- (globalThis as any).CloseEvent = CloseEvent;
23
- }
@@ -1,76 +0,0 @@
1
- // Browser test entry for @gjsify/websocket.
2
- // Uses the browser's native WebSocket, MessageEvent, and CloseEvent —
3
- // no Soup server required. The round-trip and client-options tests
4
- // (which spin up a Soup.Server) are GJS-only and not included here.
5
- import { run, describe, it, expect } from '@gjsify/unit';
6
-
7
- const testSuite = async () => {
8
-
9
- await describe('WebSocket (static)', async () => {
10
- await it('should be a constructor', async () => {
11
- expect(typeof WebSocket).toBe('function');
12
- });
13
-
14
- await it('should have readyState constants', async () => {
15
- expect(WebSocket.CONNECTING).toBe(0);
16
- expect(WebSocket.OPEN).toBe(1);
17
- expect(WebSocket.CLOSING).toBe(2);
18
- expect(WebSocket.CLOSED).toBe(3);
19
- });
20
- });
21
-
22
- await describe('MessageEvent', async () => {
23
- await it('should create with string data', async () => {
24
- const event = new MessageEvent('message', { data: 'hello' });
25
- expect(event.type).toBe('message');
26
- expect(event.data).toBe('hello');
27
- });
28
-
29
- await it('should create with object data', async () => {
30
- const event = new MessageEvent('message', {
31
- data: { key: 'value' },
32
- origin: 'ws://example.com',
33
- });
34
- expect(event.data).toStrictEqual({ key: 'value' });
35
- expect(event.origin).toBe('ws://example.com');
36
- });
37
-
38
- await it('should have bubbles false by default', async () => {
39
- const event = new MessageEvent('message', { data: 'x' });
40
- expect(event.bubbles).toBe(false);
41
- });
42
- });
43
-
44
- await describe('CloseEvent', async () => {
45
- await it('should create with defaults', async () => {
46
- const event = new CloseEvent('close');
47
- expect(event.type).toBe('close');
48
- expect(event.code).toBe(0);
49
- expect(event.reason).toBe('');
50
- expect(event.wasClean).toBe(false);
51
- });
52
-
53
- await it('should create with options', async () => {
54
- const event = new CloseEvent('close', { code: 1000, reason: 'done', wasClean: true });
55
- expect(event.code).toBe(1000);
56
- expect(event.reason).toBe('done');
57
- expect(event.wasClean).toBe(true);
58
- });
59
- });
60
-
61
- await describe('WebSocket module exports', async () => {
62
- await it('should export WebSocket class', async () => {
63
- expect(typeof WebSocket).toBe('function');
64
- });
65
-
66
- await it('should export MessageEvent class', async () => {
67
- expect(typeof MessageEvent).toBe('function');
68
- });
69
-
70
- await it('should export CloseEvent class', async () => {
71
- expect(typeof CloseEvent).toBe('function');
72
- });
73
- });
74
- };
75
-
76
- run({ testSuite });
package/src/test.mts DELETED
@@ -1,4 +0,0 @@
1
- import { run } from '@gjsify/unit';
2
- import testSuite from './index.spec.js';
3
-
4
- run({ testSuite });
package/tsconfig.json DELETED
@@ -1,33 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "module": "ESNext",
4
- "types": [
5
- "node"
6
- ],
7
- "target": "ESNext",
8
- "experimentalDecorators": true,
9
- "emitDeclarationOnly": true,
10
- "declaration": true,
11
- "outDir": "lib",
12
- "rootDir": "src",
13
- "declarationDir": "lib/types",
14
- "composite": true,
15
- "moduleResolution": "bundler",
16
- "allowImportingTsExtensions": true,
17
- "skipLibCheck": true,
18
- "allowJs": true,
19
- "checkJs": false,
20
- "strict": false,
21
- "paths": {
22
- "websocket": ["./src/index.ts"]
23
- }
24
- },
25
- "reflection": false,
26
- "include": [
27
- "src/**/*.ts"
28
- ],
29
- "exclude": [
30
- "src/test.ts",
31
- "src/test.mts"
32
- ]
33
- }
@@ -1 +0,0 @@
1
- {"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.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/typescript/lib/lib.es2025.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.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.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.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.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.date.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.esnext.full.d.ts","../../../node_modules/@girs/gjs/gettext.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0-ambient.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0-import.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0-ambient.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0-import.d.ts","../../../node_modules/@girs/glib-2.0/glib-2.0.d.ts","../../../node_modules/@girs/glib-2.0/index.d.ts","../../../node_modules/@girs/gobject-2.0/gobject-2.0.d.ts","../../../node_modules/@girs/gobject-2.0/index.d.ts","../../../node_modules/@girs/gjs/system.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0-ambient.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0-import.d.ts","../../../node_modules/@girs/cairo-1.0/cairo-1.0.d.ts","../../../node_modules/@girs/cairo-1.0/index.d.ts","../../../node_modules/@girs/gjs/cairo.d.ts","../../../node_modules/@girs/gjs/console.d.ts","../../../node_modules/@girs/gjs/gi.d.ts","../../../node_modules/@girs/gjs/gjs-ambient.d.ts","../../../node_modules/@girs/gjs/gjs.d.ts","../../../node_modules/@girs/gjs/index.d.ts","../../gjs/unit/lib/types/spy.d.ts","../../gjs/unit/lib/types/index.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0-ambient.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0-import.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0-ambient.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0-import.d.ts","../../../node_modules/@girs/gmodule-2.0/gmodule-2.0.d.ts","../../../node_modules/@girs/gmodule-2.0/index.d.ts","../../../node_modules/@girs/gio-2.0/gio-2.0.d.ts","../../../node_modules/@girs/gio-2.0/index.d.ts","../../../node_modules/@girs/soup-3.0/soup-3.0-ambient.d.ts","../../../node_modules/@girs/soup-3.0/soup-3.0-import.d.ts","../../../node_modules/@girs/soup-3.0/soup-3.0.d.ts","../../../node_modules/@girs/soup-3.0/index.d.ts","../dom-exception/lib/types/index.d.ts","../dom-events/lib/types/index.d.ts","./src/index.ts","./src/index.spec.ts","./src/register.ts","../../../node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/@types/node/web-globals/blob.d.ts","../../../node_modules/@types/node/web-globals/console.d.ts","../../../node_modules/@types/node/web-globals/crypto.d.ts","../../../node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/@types/node/web-globals/encoding.d.ts","../../../node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/undici-types/utility.d.ts","../../../node_modules/undici-types/header.d.ts","../../../node_modules/undici-types/readable.d.ts","../../../node_modules/undici-types/fetch.d.ts","../../../node_modules/undici-types/formdata.d.ts","../../../node_modules/undici-types/connector.d.ts","../../../node_modules/undici-types/client-stats.d.ts","../../../node_modules/undici-types/client.d.ts","../../../node_modules/undici-types/errors.d.ts","../../../node_modules/undici-types/dispatcher.d.ts","../../../node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/undici-types/global-origin.d.ts","../../../node_modules/undici-types/pool-stats.d.ts","../../../node_modules/undici-types/pool.d.ts","../../../node_modules/undici-types/handlers.d.ts","../../../node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/undici-types/round-robin-pool.d.ts","../../../node_modules/undici-types/h2c-client.d.ts","../../../node_modules/undici-types/agent.d.ts","../../../node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/undici-types/mock-call-history.d.ts","../../../node_modules/undici-types/mock-agent.d.ts","../../../node_modules/undici-types/mock-client.d.ts","../../../node_modules/undici-types/mock-pool.d.ts","../../../node_modules/undici-types/snapshot-agent.d.ts","../../../node_modules/undici-types/mock-errors.d.ts","../../../node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/undici-types/retry-handler.d.ts","../../../node_modules/undici-types/retry-agent.d.ts","../../../node_modules/undici-types/api.d.ts","../../../node_modules/undici-types/cache-interceptor.d.ts","../../../node_modules/undici-types/interceptors.d.ts","../../../node_modules/undici-types/util.d.ts","../../../node_modules/undici-types/cookies.d.ts","../../../node_modules/undici-types/patch.d.ts","../../../node_modules/undici-types/websocket.d.ts","../../../node_modules/undici-types/eventsource.d.ts","../../../node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/undici-types/content-type.d.ts","../../../node_modules/undici-types/cache.d.ts","../../../node_modules/undici-types/index.d.ts","../../../node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/@types/node/web-globals/importmeta.d.ts","../../../node_modules/@types/node/web-globals/messaging.d.ts","../../../node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/@types/node/web-globals/performance.d.ts","../../../node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/@types/node/web-globals/timers.d.ts","../../../node_modules/@types/node/web-globals/url.d.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.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/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/inspector.generated.d.ts","../../../node_modules/@types/node/inspector/promises.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/buffer/index.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/path/posix.d.ts","../../../node_modules/@types/node/path/win32.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/quic.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/sea.d.ts","../../../node_modules/@types/node/sqlite.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/promises.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/test/reporters.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/util/types.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/index.d.ts"],"fileIdsList":[[104,107,111,135,198,201,206,210,213,215,216,217,230],[107,111,135,198,201,206,210,213,215,216,217,230],[100,102,111,113,135,198,201,206,210,213,215,216,217,230],[105,106,111,135,198,201,206,210,213,215,216,217,230],[111,116,123,135,198,201,206,210,213,215,216,217,230],[111,123,135,198,201,206,210,213,215,216,217,230],[100,102,111,113,121,135,198,201,206,210,213,215,216,217,230],[111,117,122,135,198,201,206,210,213,215,216,217,230],[102,107,111,135,198,201,206,210,213,215,216,217,230],[111,135,198,201,206,210,213,215,216,217,230],[94,103,108,109,110,135,198,201,206,210,213,215,216,217,230],[94,100,102,103,108,111,135,198,201,206,210,213,215,216,217,230],[111,112,135,198,201,206,210,213,215,216,217,230],[102,111,135,198,201,206,210,213,215,216,217,230],[97,100,111,135,198,201,206,210,213,215,216,217,230],[100,111,135,198,201,206,210,213,215,216,217,230],[102,111,113,135,198,201,206,210,213,215,216,217,230],[98,99,111,135,198,201,206,210,213,215,216,217,230],[111,118,121,135,198,201,206,210,213,215,216,217,230],[111,121,135,198,201,206,210,213,215,216,217,230],[111,119,120,135,198,201,206,210,213,215,216,217,230],[95,102,111,135,198,201,206,210,213,215,216,217,230],[100,111,113,135,198,201,206,210,213,215,216,217,230],[96,101,111,135,198,201,206,210,213,215,216,217,230],[111,125,126,135,198,201,206,210,213,215,216,217,230],[111,124,127,135,198,201,206,210,213,215,216,217,230],[111,127,135,198,201,206,210,213,215,216,217,230],[100,102,111,113,121,123,135,198,201,206,210,213,215,216,217,230],[111,135,195,196,198,201,206,210,213,215,216,217,230],[111,135,197,198,201,206,210,213,215,216,217,230],[111,198,201,206,210,213,215,216,217,230],[111,135,198,201,206,210,213,215,216,217,230,238],[111,135,198,199,201,204,206,209,210,213,215,216,217,219,230,235,247],[111,135,198,199,200,201,206,209,210,213,215,216,217,230],[111,135,198,201,206,210,213,215,216,217,230,248],[111,135,198,201,202,203,206,210,213,215,216,217,221,230],[111,135,198,201,203,206,210,213,215,216,217,230,235,244],[111,135,198,201,204,206,209,210,213,215,216,217,219,230],[111,135,197,198,201,205,206,210,213,215,216,217,230],[111,135,198,201,206,207,210,213,215,216,217,230],[111,135,198,201,206,208,209,210,213,215,216,217,230],[111,135,197,198,201,206,209,210,213,215,216,217,230],[111,135,198,201,206,209,210,211,213,215,216,217,230,235,247],[111,135,198,201,206,209,210,211,213,215,216,217,230,235,238],[111,135,185,198,201,206,209,210,212,213,215,216,217,219,230,235,247],[111,135,198,201,206,209,210,212,213,215,216,217,219,230,235,244,247],[111,135,198,201,206,210,212,213,214,215,216,217,230,235,244,247],[111,133,134,135,136,137,138,139,140,141,142,143,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254],[111,135,198,201,206,209,210,213,215,216,217,230],[111,135,198,201,206,210,213,215,217,230],[111,135,198,201,206,210,213,215,216,217,218,230,247],[111,135,198,201,206,209,210,213,215,216,217,219,230,235],[111,135,198,201,206,210,213,215,216,217,221,230],[111,135,198,201,206,210,213,215,216,217,222,230],[111,135,198,201,206,209,210,213,215,216,217,225,230],[111,135,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254],[111,135,198,201,206,210,213,215,216,217,227,230],[111,135,198,201,206,210,213,215,216,217,228,230],[111,135,198,201,203,206,210,213,215,216,217,219,230,238],[111,135,198,201,206,209,210,213,215,216,217,230,231],[111,135,198,201,206,210,213,215,216,217,230,232,248,251],[111,135,198,201,206,209,210,213,215,216,217,230,235,237,238],[111,135,198,201,206,210,213,215,216,217,230,236,238],[111,135,198,201,206,210,213,215,216,217,230,238,248],[111,135,198,201,206,210,213,215,216,217,230,239],[111,135,195,198,201,206,210,213,215,216,217,230,235,241,247],[111,135,198,201,206,210,213,215,216,217,230,235,240],[111,135,198,201,206,209,210,213,215,216,217,230,242,243],[111,135,198,201,206,210,213,215,216,217,230,242,243],[111,135,198,201,203,206,210,213,215,216,217,219,230,235,244],[111,135,198,201,206,210,213,215,216,217,230,245],[111,135,198,201,206,210,213,215,216,217,219,230,246],[111,135,198,201,206,210,212,213,215,216,217,228,230,247],[111,135,198,201,206,210,213,215,216,217,230,248,249],[111,135,198,201,203,206,210,213,215,216,217,230,249],[111,135,198,201,206,210,213,215,216,217,230,235,250],[111,135,198,201,206,210,213,215,216,217,218,230,251],[111,135,198,201,206,210,213,215,216,217,230,252],[111,135,198,201,203,206,210,213,215,216,217,230],[111,135,185,198,201,206,210,213,215,216,217,230],[111,135,198,201,206,210,213,215,216,217,230,247],[111,135,198,201,206,210,213,215,216,217,230,253],[111,135,198,201,206,210,213,215,216,217,225,230],[111,135,198,201,206,210,213,215,216,217,230,243],[111,135,185,198,201,206,209,210,211,213,215,216,217,225,230,235,238,247,250,251,253],[111,135,198,201,206,210,213,215,216,217,230,235,254],[111,135,150,153,156,157,198,201,206,210,213,215,216,217,230,247],[111,135,153,198,201,206,210,213,215,216,217,230,235,247],[111,135,153,157,198,201,206,210,213,215,216,217,230,247],[111,135,198,201,206,210,213,215,216,217,230,235],[111,135,147,198,201,206,210,213,215,216,217,230],[111,135,151,198,201,206,210,213,215,216,217,230],[111,135,149,150,153,198,201,206,210,213,215,216,217,230,247],[111,135,198,201,206,210,213,215,216,217,219,230,244],[111,135,198,201,206,210,213,215,216,217,230,255],[111,135,147,198,201,206,210,213,215,216,217,230,255],[111,135,149,153,198,201,206,210,213,215,216,217,219,230,247],[111,135,144,145,146,148,152,198,201,206,209,210,213,215,216,217,230,235,247],[111,135,153,162,170,198,201,206,210,213,215,216,217,230],[111,135,145,151,198,201,206,210,213,215,216,217,230],[111,135,153,179,180,198,201,206,210,213,215,216,217,230],[111,135,145,148,153,198,201,206,210,213,215,216,217,230,238,247,255],[111,135,153,198,201,206,210,213,215,216,217,230],[111,135,149,153,198,201,206,210,213,215,216,217,230,247],[111,135,144,198,201,206,210,213,215,216,217,230],[111,135,147,148,149,151,152,153,154,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,180,181,182,183,184,198,201,206,210,213,215,216,217,230],[111,135,153,172,175,198,201,206,210,213,215,216,217,230],[111,135,153,162,163,164,198,201,206,210,213,215,216,217,230],[111,135,151,153,163,165,198,201,206,210,213,215,216,217,230],[111,135,152,198,201,206,210,213,215,216,217,230],[111,135,145,147,153,198,201,206,210,213,215,216,217,230],[111,135,153,157,163,165,198,201,206,210,213,215,216,217,230],[111,135,157,198,201,206,210,213,215,216,217,230],[111,135,151,153,156,198,201,206,210,213,215,216,217,230,247],[111,135,145,149,153,162,198,201,206,210,213,215,216,217,230],[111,135,153,172,198,201,206,210,213,215,216,217,230],[111,135,165,198,201,206,210,213,215,216,217,230],[111,135,147,153,179,198,201,206,210,213,215,216,217,230,238,253,255],[111,113,114,135,198,201,206,210,213,215,216,217,230],[111,128,135,198,201,206,210,213,215,216,217,230],[100,111,115,123,127,130,135,198,201,206,210,213,215,216,217,230],[100,111,123,127,129,135,198,201,206,210,213,215,216,217,230],[111,130,135,198,201,206,210,213,215,216,217,230]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef4a897cd2a3f91000c10264e400b3667c7e51e1b7365f03b62e8081dc53bde6","impliedFormat":1},{"version":"4936d25ba31379ce4e3d4289f6c0ea936510e111f823ec377015de6ba7047adf","impliedFormat":99},{"version":"1ffa53902f87f288dbaebc1dd9c754a0f0f1c4af2733fc7e173022209e7d4ef8","impliedFormat":99},{"version":"d7801240a49920afb07e1a83597b05a26e5e3758163a70448ba14df3f7ab5286","affectsGlobalScope":true,"impliedFormat":99},{"version":"2aed5de224f5094280addfaf59e82b362b3680083917cfa7f066c4b89cc58b74","impliedFormat":99},{"version":"86ecf772256f9205f72c768dc9b47d27b4254a64a1dd94f61c8c2f29219c24e1","affectsGlobalScope":true,"impliedFormat":99},{"version":"f62bcd0d626998f4b14a5e4bf6c65abf4dfeaa042243dd57e4e92125fd602ed6","impliedFormat":99},{"version":"9462f849ff8d50a61639f09a8e369f7584c623a8cbcf9d99c6b81aacbca91fd2","impliedFormat":99},{"version":"6da820ee582c593971e71a933dbf54d72b47984bb11f888d225c7a8476e74790","impliedFormat":99},{"version":"048a292f9fb06d0aab8c52cabd81bc820c70d68500530afe1867c08e431d4e46","impliedFormat":99},{"version":"e2f9944677cba1c7f636dde67d7ca77982da3b52134c617bd86d3a4d8607b498","impliedFormat":99},{"version":"ceaf67c6cb2df4f38f466bd3709a72199d1d98377dcf215bf760b2a383fc73a8","impliedFormat":99},{"version":"c5f89dedf8e238012d580d16ee2286bf0681f1389f14d419c87711070430995c","affectsGlobalScope":true,"impliedFormat":99},{"version":"dc996a90baa100126e6014b2f55022930e1a44621ec68eb163f322714b7596bc","impliedFormat":99},{"version":"cdd5245a59183386c7b465ad56e2353a0a1b49c32733520ec5c0eeb718781012","impliedFormat":99},{"version":"35c6737b37a2c92e67a14ba7692f3216df6c140c28133835768f7c66cb15fa88","impliedFormat":99},{"version":"7b607f4711c496c7c4f57abddfc7b9912059e1f264417ff8f4280b65f756bf4d","impliedFormat":99},{"version":"17122ddf1e2ff9f0538a06af6edc8d2666d7e1a428239e86358afc09ac7a8779","impliedFormat":99},{"version":"2cc6a5c34041442caa16aff0686d41595296248c7c33bfac5b94cd4fe8ae20de","impliedFormat":99},{"version":"8384e3ab082eecd9d0faa07ddf7e9ff3879bfac60216e47328f799600e47ea80","affectsGlobalScope":true,"impliedFormat":99},{"version":"715e7c015d2f3f4de0da107d9be2db02b52cea3d2d446ad11d2e732848d8e3e7","impliedFormat":99},"cda120f78df4c624c7fb1bd8e17343a39bfbede803f38312fb8e51fa818e1a7a","d9e135cc1dcf9f798edb9665b777dcad812d980a467b6ed11ce1d1bb9f017176",{"version":"1a7eec8977d21e8bf216ea62b836bdda1768c2a49ee689e5e09fb2f56a7837e4","impliedFormat":99},{"version":"8deb0c1eae578bb83a0056727ddec6be752d015acebfdd90f53797f8a035e57d","affectsGlobalScope":true,"impliedFormat":99},{"version":"d0b90b2c22bda9b6a7dabfb505a7fd3896e0267ab791d63a4a37098d0829e1b0","impliedFormat":99},{"version":"d26efa37b7cbdcc391dc201683de609900869d285213abf1dcbfb5275427142f","affectsGlobalScope":true,"impliedFormat":99},{"version":"0fe0f52d9ee15bf4fbeef129a5841a706720641554be2220df52c994f343a2f1","impliedFormat":99},{"version":"586cc6c492134b4680582124d2cd7d20efe0993917871647e0000dbf670bc0da","impliedFormat":99},{"version":"eaac6969d2a0d853a8870b9ba9591b429b80f99308cc97c3fe223b54bfc4127f","impliedFormat":99},{"version":"4b8b7197750fcbfe01b0c3b0e42a18367763e07eb937e0a278a27c69489a2575","impliedFormat":99},{"version":"fa22bf350c00837e7cd23ca4327724e3248ec6ca7c4bf949327ec8c9027ea7d2","impliedFormat":99},{"version":"19974de001206d85ec8ca8db8b9fd7123d37cf377b3982c844056d6cc45a6f9d","affectsGlobalScope":true,"impliedFormat":99},{"version":"592213f35160abb2069476cea9d3df3848ef61fee54200d596485506a4b9ddca","impliedFormat":99},{"version":"1827dd471f0ed68561b335a146db0d7ac8f56d00c612a028f98d351f768c4325","impliedFormat":99},"e176cbd59020ce3184e68f10e5f286e027dd444e66d490fe3836118e17babf9c","8ff24dc5ca7e7ad39d6af837d4fb84abd2d0c5e4772422db4ede1bfd5ee5408b",{"version":"2b0ef381ae812634cb1eb72e37041f3e27e06cb5c192acf9bef994a565bdd95e","signature":"107e5c5036c39cda0b1b9390efd23941b5556120d3032dc61398ae215dccedae"},{"version":"6bbc1f961faf0d93800808afa4dbd83bde85a08ea2e8065a9d897aa631318d5b","signature":"fefaf643ad02c05059e06244a8291c4cb3a2693ec928c843599c25d00ee9f574"},{"version":"631b9591718ef73ee194eefda79a57e9a4e0768a2326f45c88ea87c021579190","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"10deca769dfed888051b1808d6746f8883a490a707f8bdf9367079146987d6d0","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"016b29bf4926b80255a108c53a1451717350059da04fcae64d1075f5e93bbb39","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[[130,132]],"options":{"allowImportingTsExtensions":true,"allowJs":true,"checkJs":false,"composite":true,"declaration":true,"declarationDir":"./lib/types","emitDeclarationOnly":true,"experimentalDecorators":true,"module":99,"outDir":"./lib","rootDir":"./src","skipLibCheck":true,"strict":false,"target":99},"referencedMap":[[104,1],[105,2],[106,3],[107,4],[116,5],[117,6],[122,7],[123,8],[108,9],[109,10],[94,10],[110,10],[111,11],[112,12],[113,13],[103,14],[97,15],[98,16],[99,17],[100,18],[118,19],[119,20],[120,3],[121,21],[95,22],[96,14],[101,23],[102,24],[127,25],[124,26],[125,27],[126,28],[195,29],[196,29],[197,30],[135,31],[198,32],[199,33],[200,34],[133,10],[201,35],[202,36],[203,37],[204,38],[205,39],[206,40],[207,40],[208,41],[209,42],[210,43],[211,44],[136,10],[134,10],[212,45],[213,46],[214,47],[255,48],[215,49],[216,50],[217,49],[218,51],[219,52],[221,53],[222,54],[223,54],[224,54],[225,55],[226,56],[227,57],[228,58],[229,59],[230,60],[231,60],[232,61],[233,10],[234,10],[235,62],[236,63],[237,62],[238,64],[239,65],[240,66],[241,67],[242,68],[243,69],[244,70],[245,71],[246,72],[247,73],[248,74],[249,75],[250,76],[251,77],[252,78],[137,49],[138,10],[139,10],[140,79],[141,10],[142,35],[143,10],[186,80],[187,81],[188,82],[189,82],[190,83],[191,10],[192,32],[193,84],[194,81],[253,85],[254,86],[220,10],[91,10],[92,10],[16,10],[14,10],[15,10],[20,10],[19,10],[2,10],[21,10],[22,10],[23,10],[24,10],[25,10],[26,10],[27,10],[28,10],[3,10],[29,10],[30,10],[4,10],[31,10],[35,10],[32,10],[33,10],[34,10],[36,10],[37,10],[38,10],[5,10],[39,10],[40,10],[41,10],[42,10],[6,10],[46,10],[43,10],[44,10],[45,10],[47,10],[7,10],[48,10],[53,10],[54,10],[49,10],[50,10],[51,10],[52,10],[8,10],[58,10],[55,10],[56,10],[57,10],[59,10],[9,10],[60,10],[61,10],[62,10],[64,10],[63,10],[65,10],[66,10],[10,10],[67,10],[68,10],[69,10],[11,10],[70,10],[71,10],[72,10],[73,10],[74,10],[75,10],[12,10],[76,10],[77,10],[78,10],[79,10],[80,10],[1,10],[81,10],[82,10],[13,10],[83,10],[84,10],[85,10],[86,10],[93,10],[87,10],[88,10],[89,10],[90,10],[18,10],[17,10],[162,87],[174,88],[159,89],[175,90],[184,91],[150,92],[151,93],[149,94],[183,95],[178,96],[182,97],[153,98],[171,99],[152,100],[181,101],[147,102],[148,96],[154,103],[155,10],[161,104],[158,103],[145,105],[185,106],[176,107],[165,108],[164,103],[166,109],[169,110],[163,111],[167,112],[179,95],[156,113],[157,114],[170,115],[146,90],[173,116],[172,103],[160,114],[168,117],[177,10],[144,10],[180,118],[115,119],[114,10],[129,120],[128,10],[131,121],[130,122],[132,123]],"latestChangedDtsFile":"./lib/types/register.d.ts","version":"6.0.3"}