@gjsify/ws 0.4.21 → 0.4.23

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.
@@ -1 +1 @@
1
- import"./_virtual/_rolldown/runtime.js";import{BINARY_TYPES as e}from"./constants.js";import{EventEmitter as t}from"@gjsify/events";import{Buffer as n}from"@gjsify/buffer";import{WebSocket as r}from"@gjsify/websocket";var WebSocket=class extends t{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;readyState=0;url=``;protocol=``;extensions=``;bufferedAmount=0;binaryType=`nodebuffer`;_native=null;constructor(e,t,n={}){if(super(),e===null){queueMicrotask(()=>this._fail(`Constructing ws.WebSocket with null address is not supported on Gjs`));return}this.url=typeof e==`string`?e:String(e);let r=this._resolveProtocols(t,n);this._openNative(this.url,r,n)}_resolveProtocols(e,t){if(e!==void 0)return Array.isArray(e)?e:[e];if(t.protocols!==void 0)return Array.isArray(t.protocols)?t.protocols:[t.protocols];if(t.protocol!==void 0)return[t.protocol]}_openNative(e,t,n){if(typeof r!=`function`){queueMicrotask(()=>this._fail("@gjsify/websocket provided no WebSocket constructor. On Node.js 22+ globalThis.WebSocket is native; on older Node install `ws` directly, or ensure globalThis.WebSocket is set before @gjsify/ws is imported."));return}let i={perMessageDeflate:n.perMessageDeflate!==!1,headers:n.headers,origin:n.origin,handshakeTimeout:n.handshakeTimeout};try{this._native=new r(e,t,i)}catch(e){queueMicrotask(()=>this._fail(e instanceof Error?e:Error(String(e))));return}this._native.binaryType=`arraybuffer`,this._native.addEventListener(`open`,()=>this._onOpen()),this._native.addEventListener(`message`,e=>this._onMessage(e)),this._native.addEventListener(`close`,e=>this._onClose(e)),this._native.addEventListener(`error`,e=>this._onError(e))}_fail(e){let t=typeof e==`string`?Error(e):e;this.readyState=3,this.emit(`error`,t),this._dispatchEvent(`error`,{error:t,message:t.message}),this.emit(`close`,1006,n.from(t.message)),this._dispatchEvent(`close`,{code:1006,reason:t.message,wasClean:!1})}_onOpen(){this.readyState=1,typeof this._native.protocol==`string`&&(this.protocol=this._native.protocol),typeof this._native.extensions==`string`&&(this.extensions=this._native.extensions),this.emit(`open`),this._dispatchEvent(`open`,{})}_onMessage(e){let t=e?.data,n,r=!1;typeof t==`string`?(n=t,r=!1):t instanceof ArrayBuffer?(r=!0,n=this._decodeBinary(t)):ArrayBuffer.isView(t)?(r=!0,n=this._decodeBinary(t.buffer)):(n=t,r=!1),this.emit(`message`,n,r),this._dispatchEvent(`message`,{data:n,type:r?`binary`:`text`})}_decodeBinary(e){switch(this.binaryType){case`arraybuffer`:return e;case`fragments`:return[n.from(e)];case`blob`:{let t=globalThis.Blob;return t?new t([new Uint8Array(e)]):n.from(e)}default:return n.from(e)}}_onClose(e){let t=typeof e?.code==`number`?e.code:1006,r=typeof e?.reason==`string`?e.reason:``;this.readyState=3,this.emit(`close`,t,n.from(r)),this._dispatchEvent(`close`,{code:t,reason:r,wasClean:!!e?.wasClean})}_onError(e){let t=e?.message||`WebSocket error`,n=e?.error instanceof Error?e.error:Error(t);this.emit(`error`,n),this._dispatchEvent(`error`,{error:n,message:t})}send(e,t,n){let r=typeof t==`function`?t:n;if(this.readyState===0)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(this.readyState!==1){let e=Error(`WebSocket is not open: readyState `+this.readyState);queueMicrotask(r?()=>r(e):()=>this.emit(`error`,e));return}this._nativeSend(e,r)}_nativeSend(e,t){try{let r=e;if(typeof e==`number`||typeof e==`boolean`)r=String(e);else if(n.isBuffer(e)){let t=e;r=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}this._native.send(r),t&&queueMicrotask(()=>t())}catch(e){let n=e instanceof Error?e:Error(String(e));queueMicrotask(t?()=>t(n):()=>this.emit(`error`,n))}}_sizeOf(e){return typeof e==`string`?e.length:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:0}close(e,t){if(this.readyState!==3&&this.readyState!==2){this.readyState=2;try{let r=t===void 0?void 0:n.isBuffer(t)?t.toString(`utf8`):String(t);e===void 0?this._native?.close():r===void 0?this._native?.close(e):this._native?.close(e,r)}catch(e){this.emit(`error`,e instanceof Error?e:Error(String(e)))}}}terminate(){if(this.readyState!==3){this.readyState=2;try{this._native?.close(1006,`terminated`)}catch{}}}get isPaused(){return this.readyState===2||this.readyState===3}_eventTargetListeners=new Map;addEventListener(e,t){let n=this._eventTargetListeners.get(e);n||(n=new Set,this._eventTargetListeners.set(e,n)),n.add(t)}removeEventListener(e,t){this._eventTargetListeners.get(e)?.delete(t)}_dispatchEvent(e,t){let n=this._eventTargetListeners.get(e);if(!n||n.size===0)return;let r=Object.assign({type:e,target:this},t);for(let e of n)try{e(r)}catch(e){queueMicrotask(()=>this.emit(`error`,e))}}static get BINARY_TYPES(){return e}};WebSocket.WebSocket=WebSocket;export{WebSocket};
1
+ import"./_virtual/_rolldown/runtime.js";import{BINARY_TYPES as e}from"./constants.js";import{EventEmitter as t}from"@gjsify/events";import{Buffer as n}from"@gjsify/buffer";import{WebSocket as r}from"@gjsify/websocket";var WebSocket=class extends t{static CONNECTING=0;static OPEN=1;static CLOSING=2;static CLOSED=3;CONNECTING=0;OPEN=1;CLOSING=2;CLOSED=3;readyState=0;url=``;protocol=``;extensions=``;bufferedAmount=0;binaryType=`nodebuffer`;_native=null;constructor(e,t,n={}){if(super(),e===null){queueMicrotask(()=>this._fail(`Constructing ws.WebSocket with null address is not supported on Gjs`));return}this.url=typeof e==`string`?e:String(e);let r=this._resolveProtocols(t,n);this._openNative(this.url,r,n)}_resolveProtocols(e,t){if(e!==void 0)return Array.isArray(e)?e:[e];if(t.protocols!==void 0)return Array.isArray(t.protocols)?t.protocols:[t.protocols];if(t.protocol!==void 0)return[t.protocol]}_openNative(e,t,n){if(typeof r!=`function`){queueMicrotask(()=>this._fail("@gjsify/websocket provided no WebSocket constructor. On Node.js 22+ globalThis.WebSocket is native; on older Node install `ws` directly, or ensure globalThis.WebSocket is set before @gjsify/ws is imported."));return}let i={perMessageDeflate:n.perMessageDeflate!==!1,headers:n.headers,origin:n.origin,handshakeTimeout:n.handshakeTimeout};try{this._native=new r(e,t,i)}catch(e){queueMicrotask(()=>this._fail(e instanceof Error?e:Error(String(e))));return}this._native.binaryType=`arraybuffer`,this._native.addEventListener(`open`,()=>this._onOpen()),this._native.addEventListener(`message`,e=>this._onMessage(e)),this._native.addEventListener(`close`,e=>this._onClose(e)),this._native.addEventListener(`error`,e=>this._onError(e))}_fail(e){let t=typeof e==`string`?Error(e):e;this.readyState=3,this.emit(`error`,t),this._dispatchEvent(`error`,{error:t,message:t.message}),this.emit(`close`,1006,n.from(t.message)),this._dispatchEvent(`close`,{code:1006,reason:t.message,wasClean:!1})}_onOpen(){this.readyState=1,typeof this._native.protocol==`string`&&(this.protocol=this._native.protocol),typeof this._native.extensions==`string`&&(this.extensions=this._native.extensions),this.emit(`open`),this._dispatchEvent(`open`,{})}_onMessage(e){let t=e?.data,n,r=!1;typeof t==`string`?(n=t,r=!1):t instanceof ArrayBuffer?(r=!0,n=this._decodeBinary(t)):ArrayBuffer.isView(t)?(r=!0,n=this._decodeBinary(t.buffer)):(n=t,r=!1),this.emit(`message`,n,r),this._dispatchEvent(`message`,{data:n,type:r?`binary`:`text`})}_decodeBinary(e){switch(this.binaryType){case`arraybuffer`:return e;case`fragments`:return[n.from(e)];case`blob`:{let t=globalThis.Blob;return t?new t([new Uint8Array(e)]):n.from(e)}default:return n.from(e)}}_onClose(e){let t=typeof e?.code==`number`?e.code:1006,r=typeof e?.reason==`string`?e.reason:``;this.readyState=3,this.emit(`close`,t,n.from(r)),this._dispatchEvent(`close`,{code:t,reason:r,wasClean:!!e?.wasClean})}_onError(e){let t=e?.message||`WebSocket error`,n=e?.error instanceof Error?e.error:Error(t);this.emit(`error`,n),this._dispatchEvent(`error`,{error:n,message:t})}send(e,t,n){let r=typeof t==`function`?t:n;if(this.readyState===0)throw Error(`WebSocket is not open: readyState 0 (CONNECTING)`);if(this.readyState!==1){let e=Error(`WebSocket is not open: readyState `+this.readyState);queueMicrotask(r?()=>r(e):()=>this.emit(`error`,e));return}this._nativeSend(e,r)}_nativeSend(e,t){try{let r=e;typeof e==`number`||typeof e==`boolean`?r=String(e):n.isBuffer(e)&&(r=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)),this._native.send(r),t&&queueMicrotask(()=>t())}catch(e){let n=e instanceof Error?e:Error(String(e));queueMicrotask(t?()=>t(n):()=>this.emit(`error`,n))}}_sizeOf(e){return typeof e==`string`?e.length:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:0}close(e,t){if(this.readyState!==3&&this.readyState!==2){this.readyState=2;try{let r=t===void 0?void 0:n.isBuffer(t)?t.toString(`utf8`):String(t);e===void 0?this._native?.close():r===void 0?this._native?.close(e):this._native?.close(e,r)}catch(e){this.emit(`error`,e instanceof Error?e:Error(String(e)))}}}terminate(){if(this.readyState!==3){this.readyState=2;try{this._native?.close(1006,`terminated`)}catch{}}}get isPaused(){return this.readyState===2||this.readyState===3}_eventTargetListeners=new Map;addEventListener(e,t){let n=this._eventTargetListeners.get(e);n||(n=new Set,this._eventTargetListeners.set(e,n)),n.add(t)}removeEventListener(e,t){this._eventTargetListeners.get(e)?.delete(t)}_dispatchEvent(e,t){let n=this._eventTargetListeners.get(e);if(!n||n.size===0)return;let r=Object.assign({type:e,target:this},t);for(let e of n)try{e(r)}catch(e){queueMicrotask(()=>this.emit(`error`,e))}}static get BINARY_TYPES(){return e}};WebSocket.WebSocket=WebSocket;export{WebSocket};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/ws",
3
- "version": "0.4.21",
3
+ "version": "0.4.23",
4
4
  "description": "Drop-in replacement for the `ws` npm package on Gjs — wraps globalThis.WebSocket (Soup.WebsocketConnection) and Soup.Server for the WebSocketServer side",
5
5
  "type": "module",
6
6
  "module": "lib/esm/index.js",
@@ -34,19 +34,19 @@
34
34
  "websocket"
35
35
  ],
36
36
  "dependencies": {
37
- "@girs/gio-2.0": "2.88.0-4.0.0-rc.15",
38
- "@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
39
- "@girs/soup-3.0": "3.6.6-4.0.0-rc.15",
40
- "@gjsify/buffer": "^0.4.21",
41
- "@gjsify/crypto": "^0.4.21",
42
- "@gjsify/events": "^0.4.21",
43
- "@gjsify/utils": "^0.4.21",
44
- "@gjsify/websocket": "^0.4.21"
37
+ "@girs/gio-2.0": "2.88.0-4.0.1",
38
+ "@girs/glib-2.0": "2.88.0-4.0.1",
39
+ "@girs/soup-3.0": "3.6.6-4.0.1",
40
+ "@gjsify/buffer": "^0.4.23",
41
+ "@gjsify/crypto": "^0.4.23",
42
+ "@gjsify/events": "^0.4.23",
43
+ "@gjsify/utils": "^0.4.23",
44
+ "@gjsify/websocket": "^0.4.23"
45
45
  },
46
46
  "devDependencies": {
47
- "@gjsify/cli": "^0.4.21",
48
- "@gjsify/unit": "^0.4.21",
49
- "@types/node": "^25.6.2",
47
+ "@gjsify/cli": "^0.4.23",
48
+ "@gjsify/unit": "^0.4.23",
49
+ "@types/node": "^25.9.1",
50
50
  "typescript": "^6.0.3"
51
51
  }
52
52
  }