@wcstack/websocket 1.8.1 → 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/auto.js CHANGED
@@ -1,3 +1,3 @@
1
- import { bootstrapWebSocket } from "./index.esm.js";
2
-
3
- bootstrapWebSocket();
1
+ import { bootstrapWebSocket } from "./index.esm.js";
2
+
3
+ bootstrapWebSocket();
package/dist/auto.min.js CHANGED
@@ -1,3 +1,3 @@
1
- import { bootstrapWebSocket } from "./index.esm.min.js";
2
-
3
- bootstrapWebSocket();
1
+ import { bootstrapWebSocket } from "./index.esm.min.js";
2
+
3
+ bootstrapWebSocket();
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/WebSocketCore.ts","../src/autoTrigger.ts","../src/components/WebSocket.ts","../src/registerComponents.ts","../src/bootstrapWebSocket.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n ws: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-wstarget\",\r\n tagNames: {\r\n ws: \"wcs-ws\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/websocket] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface WebSocketConnectOptions {\r\n protocols?: string | string[];\r\n autoReconnect?: boolean;\r\n reconnectInterval?: number;\r\n maxReconnects?: number;\r\n}\r\n\r\nexport class WebSocketCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"message\", event: \"wcs-ws:message\" },\r\n { name: \"connected\", event: \"wcs-ws:connected-changed\" },\r\n { name: \"loading\", event: \"wcs-ws:loading-changed\" },\r\n { name: \"error\", event: \"wcs-ws:error\" },\r\n { name: \"readyState\", event: \"wcs-ws:readystate-changed\" },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _ws: WebSocket | null = null;\r\n private _message: any = null;\r\n private _connected: boolean = false;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _readyState: number = WebSocket.CLOSED;\r\n\r\n // 自動再接続\r\n private _autoReconnect: boolean = false;\r\n private _reconnectInterval: number = 3000;\r\n private _maxReconnects: number = Infinity;\r\n private _reconnectCount: number = 0;\r\n private _reconnectTimer: ReturnType<typeof setTimeout> | null = null;\r\n private _url: string = \"\";\r\n private _protocols: string | string[] | undefined = undefined;\r\n private _intentionalClose: boolean = false;\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get message(): any {\r\n return this._message;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._connected;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get readyState(): number {\r\n return this._readyState;\r\n }\r\n\r\n // --- State setters with event dispatch ---\r\n\r\n private _setMessage(message: any): void {\r\n this._message = message;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:message\", {\r\n detail: message,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setConnected(connected: boolean): void {\r\n this._connected = connected;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:connected-changed\", {\r\n detail: connected,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setReadyState(readyState: number): void {\r\n this._readyState = readyState;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:readystate-changed\", {\r\n detail: readyState,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n // --- Public API ---\r\n\r\n connect(url: string, options: WebSocketConnectOptions = {}): void {\r\n if (!url) {\r\n raiseError(\"url is required.\");\r\n }\r\n\r\n // 既存の接続をクローズ\r\n this._intentionalClose = true;\r\n this._closeInternal();\r\n\r\n this._url = url;\r\n this._protocols = options.protocols;\r\n this._autoReconnect = options.autoReconnect ?? false;\r\n this._reconnectInterval = options.reconnectInterval ?? 3000;\r\n this._maxReconnects = options.maxReconnects ?? Infinity;\r\n this._reconnectCount = 0;\r\n this._intentionalClose = false;\r\n\r\n this._doConnect();\r\n }\r\n\r\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\r\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\r\n raiseError(\"WebSocket is not connected.\");\r\n }\r\n this._ws.send(data);\r\n }\r\n\r\n close(code?: number, reason?: string): void {\r\n this._intentionalClose = true;\r\n this._clearReconnectTimer();\r\n if (this._ws) {\r\n this._ws.close(code, reason);\r\n }\r\n }\r\n\r\n // --- Internal ---\r\n\r\n private _doConnect(): void {\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n this._ws = this._protocols\r\n ? new WebSocket(this._url, this._protocols)\r\n : new WebSocket(this._url);\r\n } catch (e) {\r\n this._setLoading(false);\r\n this._setError(e);\r\n return;\r\n }\r\n\r\n this._setReadyState(WebSocket.CONNECTING);\r\n\r\n this._ws.addEventListener(\"open\", this._onOpen);\r\n this._ws.addEventListener(\"message\", this._onMessage);\r\n this._ws.addEventListener(\"error\", this._onError);\r\n this._ws.addEventListener(\"close\", this._onClose);\r\n }\r\n\r\n private _onOpen = (): void => {\r\n this._reconnectCount = 0;\r\n this._setLoading(false);\r\n this._setConnected(true);\r\n this._setReadyState(WebSocket.OPEN);\r\n };\r\n\r\n private _onMessage = (event: MessageEvent): void => {\r\n let data = event.data;\r\n // JSONの自動パース\r\n if (typeof data === \"string\") {\r\n try {\r\n data = JSON.parse(data);\r\n } catch {\r\n // テキストのまま\r\n }\r\n }\r\n this._setMessage(data);\r\n };\r\n\r\n private _onError = (event: Event): void => {\r\n this._setError(event);\r\n };\r\n\r\n private _onClose = (event: CloseEvent): void => {\r\n this._removeListeners();\r\n this._ws = null;\r\n this._setConnected(false);\r\n this._setLoading(false);\r\n this._setReadyState(WebSocket.CLOSED);\r\n\r\n // 異常クローズ時の自動再接続(正常終了 1000 は除外)\r\n if (!this._intentionalClose && this._autoReconnect && event.code !== 1000 && this._reconnectCount < this._maxReconnects) {\r\n this._scheduleReconnect();\r\n }\r\n };\r\n\r\n private _scheduleReconnect(): void {\r\n this._clearReconnectTimer();\r\n this._reconnectTimer = setTimeout(() => {\r\n this._reconnectTimer = null;\r\n this._reconnectCount++;\r\n this._doConnect();\r\n }, this._reconnectInterval);\r\n }\r\n\r\n private _clearReconnectTimer(): void {\r\n if (this._reconnectTimer !== null) {\r\n clearTimeout(this._reconnectTimer);\r\n this._reconnectTimer = null;\r\n }\r\n }\r\n\r\n private _removeListeners(): void {\r\n this._ws!.removeEventListener(\"open\", this._onOpen);\r\n this._ws!.removeEventListener(\"message\", this._onMessage);\r\n this._ws!.removeEventListener(\"error\", this._onError);\r\n this._ws!.removeEventListener(\"close\", this._onClose);\r\n }\r\n\r\n private _closeInternal(): void {\r\n this._clearReconnectTimer();\r\n if (this._ws) {\r\n this._removeListeners();\r\n if (this._ws.readyState === WebSocket.OPEN || this._ws.readyState === WebSocket.CONNECTING) {\r\n this._ws.close();\r\n }\r\n this._ws = null;\r\n }\r\n // 旧接続の状態をリセット(コンストラクタ例外時に stale 状態が残るのを防止)\r\n if (this._connected) {\r\n this._setConnected(false);\r\n }\r\n if (this._readyState !== WebSocket.CLOSED) {\r\n this._setReadyState(WebSocket.CLOSED);\r\n }\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { WcsWebSocket } from \"./components/WebSocket.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const wsId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!wsId) return;\r\n\r\n const wsElement = document.getElementById(wsId) as WcsWebSocket | null;\r\n if (!wsElement || !(wsElement instanceof WcsWebSocket)) return;\r\n\r\n event.preventDefault();\r\n wsElement.connect();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { WebSocketCore } from \"../core/WebSocketCore.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class WcsWebSocket extends HTMLElement {\r\n static hasConnectedCallbackPromise = false;\r\n static wcBindable: IWcBindable = {\r\n ...WebSocketCore.wcBindable,\r\n properties: [\r\n ...WebSocketCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-ws:trigger-changed\" },\r\n { name: \"send\", event: \"wcs-ws:send-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: WebSocketCore;\r\n private _trigger: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._core = new WebSocketCore(this);\r\n }\r\n\r\n // --- Attribute accessors ---\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get protocols(): string {\r\n return this.getAttribute(\"protocols\") || \"\";\r\n }\r\n\r\n set protocols(value: string) {\r\n this.setAttribute(\"protocols\", value);\r\n }\r\n\r\n get autoReconnect(): boolean {\r\n return this.hasAttribute(\"auto-reconnect\");\r\n }\r\n\r\n set autoReconnect(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"auto-reconnect\", \"\");\r\n } else {\r\n this.removeAttribute(\"auto-reconnect\");\r\n }\r\n }\r\n\r\n get reconnectInterval(): number {\r\n const attr = this.getAttribute(\"reconnect-interval\");\r\n return attr ? parseInt(attr, 10) : 3000;\r\n }\r\n\r\n set reconnectInterval(value: number) {\r\n this.setAttribute(\"reconnect-interval\", String(value));\r\n }\r\n\r\n get maxReconnects(): number {\r\n const attr = this.getAttribute(\"max-reconnects\");\r\n return attr ? parseInt(attr, 10) : Infinity;\r\n }\r\n\r\n set maxReconnects(value: number) {\r\n this.setAttribute(\"max-reconnects\", String(value));\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n // --- Core delegated getters ---\r\n\r\n get message(): any {\r\n return this._core.message;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._core.connected;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get readyState(): number {\r\n return this._core.readyState;\r\n }\r\n\r\n // --- Command properties ---\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.connect();\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-ws:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n }\r\n }\r\n\r\n set send(data: any) {\r\n if (data === null || data === undefined) return;\r\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\r\n this._core.send(payload);\r\n this.dispatchEvent(new CustomEvent(\"wcs-ws:send-changed\", {\r\n detail: null,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n // --- Public methods ---\r\n\r\n connect(): void {\r\n const protocols = this.protocols\r\n ? this.protocols.split(\",\").map(p => p.trim()).filter(Boolean)\r\n : undefined;\r\n\r\n this._core.connect(this.url, {\r\n protocols: protocols && protocols.length === 1 ? protocols[0] : protocols,\r\n autoReconnect: this.autoReconnect,\r\n reconnectInterval: this.reconnectInterval,\r\n maxReconnects: this.maxReconnects,\r\n });\r\n }\r\n\r\n sendMessage(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\r\n this._core.send(data);\r\n }\r\n\r\n close(code?: number, reason?: string): void {\r\n this._core.close(code, reason);\r\n }\r\n\r\n // --- Lifecycle ---\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.connect();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.url) {\r\n this.connect();\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this._core.close();\r\n }\r\n}\r\n","import { WcsWebSocket } from \"./components/WebSocket.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.ws)) {\r\n customElements.define(config.tagNames.ws, WcsWebSocket);\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapWebSocket(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n"],"names":[],"mappings":"AAUA,MAAM,OAAO,GAAoB;AAC/B,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,gBAAgB,EAAE,eAAe;AACjC,IAAA,QAAQ,EAAE;AACR,QAAA,EAAE,EAAE,QAAQ;AACb,KAAA;CACF;AAED,SAAS,UAAU,CAAI,GAAM,EAAA;AAC3B,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,QAAA,OAAO,GAAG;AACvD,IAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AAClC,QAAA,UAAU,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC;IACnD;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,SAAS,SAAS,CAAI,GAAM,EAAA;AAC1B,IAAA,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAAE,QAAA,OAAO,GAAG;IACvD,MAAM,KAAK,GAA4B,EAAE;IACzC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAClC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAE,GAA+B,CAAC,GAAG,CAAC,CAAC;IAC/D;AACA,IAAA,OAAO,KAAU;AACnB;AAEA,IAAI,YAAY,GAAmB,IAAI;AAEhC,MAAM,MAAM,GAAY,OAAkB;SAEjC,SAAS,GAAA;IACvB,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C;AACA,IAAA,OAAO,YAAY;AACrB;AAEM,SAAU,SAAS,CAAC,aAA8B,EAAA;AACtD,IAAA,IAAI,OAAO,aAAa,CAAC,WAAW,KAAK,SAAS,EAAE;AAClD,QAAA,OAAO,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW;IACjD;AACA,IAAA,IAAI,OAAO,aAAa,CAAC,gBAAgB,KAAK,QAAQ,EAAE;AACtD,QAAA,OAAO,CAAC,gBAAgB,GAAG,aAAa,CAAC,gBAAgB;IAC3D;AACA,IAAA,IAAI,aAAa,CAAC,QAAQ,EAAE;QAC1B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC;IACzD;IACA,YAAY,GAAG,IAAI;AACrB;;AC1DM,SAAU,UAAU,CAAC,OAAe,EAAA;AACxC,IAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAA,CAAE,CAAC;AACpD;;ACQM,MAAO,aAAc,SAAQ,WAAW,CAAA;IAC5C,OAAO,UAAU,GAAgB;AAC/B,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,UAAU,EAAE;AACV,YAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAC5C,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE;AACxD,YAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE;AACpD,YAAA,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;AACxC,YAAA,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,2BAA2B,EAAE;AAC3D,SAAA;KACF;AAEO,IAAA,OAAO;IACP,GAAG,GAAqB,IAAI;IAC5B,QAAQ,GAAQ,IAAI;IACpB,UAAU,GAAY,KAAK;IAC3B,QAAQ,GAAY,KAAK;IACzB,MAAM,GAAQ,IAAI;AAClB,IAAA,WAAW,GAAW,SAAS,CAAC,MAAM;;IAGtC,cAAc,GAAY,KAAK;IAC/B,kBAAkB,GAAW,IAAI;IACjC,cAAc,GAAW,QAAQ;IACjC,eAAe,GAAW,CAAC;IAC3B,eAAe,GAAyC,IAAI;IAC5D,IAAI,GAAW,EAAE;IACjB,UAAU,GAAkC,SAAS;IACrD,iBAAiB,GAAY,KAAK;AAE1C,IAAA,WAAA,CAAY,MAAoB,EAAA;AAC9B,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,IAAI;IAC/B;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;;AAIQ,IAAA,WAAW,CAAC,OAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE;AAC3D,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,aAAa,CAAC,SAAkB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,0BAA0B,EAAE;AACrE,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,WAAW,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;QACvB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,EAAE;AACnE,YAAA,MAAM,EAAE,OAAO;AACf,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,SAAS,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,cAAc,EAAE;AACzD,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,cAAc,CAAC,UAAkB,EAAA;AACvC,QAAA,IAAI,CAAC,WAAW,GAAG,UAAU;QAC7B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,2BAA2B,EAAE;AACtE,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;;AAIA,IAAA,OAAO,CAAC,GAAW,EAAE,OAAA,GAAmC,EAAE,EAAA;QACxD,IAAI,CAAC,GAAG,EAAE;YACR,UAAU,CAAC,kBAAkB,CAAC;QAChC;;AAGA,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS;QACnC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK;QACpD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI;QAC3D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,IAAI,QAAQ;AACvD,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;QAE9B,IAAI,CAAC,UAAU,EAAE;IACnB;AAEA,IAAA,IAAI,CAAC,IAAuD,EAAA;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;YACvD,UAAU,CAAC,6BAA6B,CAAC;QAC3C;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB;IAEA,KAAK,CAAC,IAAa,EAAE,MAAe,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC7B,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;QAC9B;IACF;;IAIQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAEpB,QAAA,IAAI;AACF,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;kBACZ,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU;kBACxC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACjB;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC;QACrD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;IACnD;IAEQ,OAAO,GAAG,MAAW;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;AACrC,IAAA,CAAC;AAEO,IAAA,UAAU,GAAG,CAAC,KAAmB,KAAU;AACjD,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI;;AAErB,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,IAAI;AACF,gBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB;AAAE,YAAA,MAAM;;YAER;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,IAAA,CAAC;AAEO,IAAA,QAAQ,GAAG,CAAC,KAAY,KAAU;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACvB,IAAA,CAAC;AAEO,IAAA,QAAQ,GAAG,CAAC,KAAiB,KAAU;QAC7C,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;;QAGrC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE;YACvH,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AACF,IAAA,CAAC;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACrC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC3B,IAAI,CAAC,eAAe,EAAE;YACtB,IAAI,CAAC,UAAU,EAAE;AACnB,QAAA,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;IAC7B;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AACjC,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;IACF;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,GAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;QACnD,IAAI,CAAC,GAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC;QACzD,IAAI,CAAC,GAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,GAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC;IACvD;IAEQ,cAAc,GAAA;QACpB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,EAAE;AAC1F,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;YAClB;AACA,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACjB;;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAC3B;QACA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,MAAM,EAAE;AACzC,YAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;QACvC;IACF;;;AClPF,IAAI,UAAU,GAAG,KAAK;AAEtB,SAAS,WAAW,CAAC,KAAY,EAAA;AAC/B,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;AAC3B,IAAA,IAAI,EAAE,MAAM,YAAY,OAAO,CAAC;QAAE;AAElC,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAU,CAAA,CAAA,EAAI,MAAM,CAAC,gBAAgB,CAAA,CAAA,CAAG,CAAC;AAC9E,IAAA,IAAI,CAAC,cAAc;QAAE;IAErB,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC;AACjE,IAAA,IAAI,CAAC,IAAI;QAAE;IAEX,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAwB;IACtE,IAAI,CAAC,SAAS,IAAI,EAAE,SAAS,YAAY,YAAY,CAAC;QAAE;IAExD,KAAK,CAAC,cAAc,EAAE;IACtB,SAAS,CAAC,OAAO,EAAE;AACrB;SAEgB,mBAAmB,GAAA;AACjC,IAAA,IAAI,UAAU;QAAE;IAChB,UAAU,GAAG,IAAI;AACjB,IAAA,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;AACjD;;ACrBM,MAAO,YAAa,SAAQ,WAAW,CAAA;AAC3C,IAAA,OAAO,2BAA2B,GAAG,KAAK;IAC1C,OAAO,UAAU,GAAgB;QAC/B,GAAG,aAAa,CAAC,UAAU;AAC3B,QAAA,UAAU,EAAE;AACV,YAAA,GAAG,aAAa,CAAC,UAAU,CAAC,UAAU;AACtC,YAAA,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,wBAAwB,EAAE;AACpD,YAAA,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE;AAC/C,SAAA;KACF;IACD,WAAW,kBAAkB,GAAA,EAAe,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpD,IAAA,KAAK;IACL,QAAQ,GAAY,KAAK;AAEjC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;IACtC;;AAIA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;IACvC;IAEA,IAAI,GAAG,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;IAC7C;IAEA,IAAI,SAAS,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC;IACvC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;IAC5C;IAEA,IAAI,aAAa,CAAC,KAAc,EAAA;QAC9B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACzC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;QACxC;IACF;AAEA,IAAA,IAAI,iBAAiB,GAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;AACpD,QAAA,OAAO,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI;IACzC;IAEA,IAAI,iBAAiB,CAAC,KAAa,EAAA;QACjC,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC;AAChD,QAAA,OAAO,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ;IAC7C;IAEA,IAAI,aAAa,CAAC,KAAa,EAAA;QAC7B,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACpD;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IACpC;IAEA,IAAI,MAAM,CAAC,KAAc,EAAA;QACvB,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC;QACjC;aAAO;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;QAChC;IACF;;AAIA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;IAC3B;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS;IAC7B;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;IAC3B;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK;IACzB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU;IAC9B;;AAIA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,IAAI,OAAO,CAAC,KAAc,EAAA;AACxB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK;QACjB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACpB,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,EAAE;AAC3D,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC,CAAC;QACL;IACF;IAEA,IAAI,IAAI,CAAC,IAAS,EAAA;AAChB,QAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;YAAE;AACzC,QAAA,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACtE,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,qBAAqB,EAAE;AACxD,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,OAAO,EAAE,IAAI;AACd,SAAA,CAAC,CAAC;IACL;;IAIA,OAAO,GAAA;AACL,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC;cACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;cAC3D,SAAS;QAEb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAA,SAAS,EAAE,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS;YACzE,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,IAAuD,EAAA;AACjE,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACvB;IAEA,KAAK,CAAC,IAAa,EAAE,MAAe,EAAA;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC;;AAIA,IAAA,wBAAwB,CAAC,IAAY,EAAE,SAAwB,EAAE,QAAuB,EAAA;AACtF,QAAA,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE;YAClE,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC3B,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,YAAA,mBAAmB,EAAE;QACvB;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;;;SChLc,kBAAkB,GAAA;AAChC,IAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAC3C,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IACzD;AACF;;ACHM,SAAU,kBAAkB,CAAC,UAA4B,EAAA;IAC7D,IAAI,UAAU,EAAE;QACd,SAAS,CAAC,UAAU,CAAC;IACvB;AACA,IAAA,kBAAkB,EAAE;AACtB;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/WebSocketCore.ts","../src/autoTrigger.ts","../src/components/WebSocket.ts","../src/registerComponents.ts","../src/bootstrapWebSocket.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\ninterface IInternalConfig extends IConfig {\n autoTrigger: boolean;\n triggerAttribute: string;\n tagNames: {\n ws: string;\n };\n}\n\nconst _config: IInternalConfig = {\n autoTrigger: true,\n triggerAttribute: \"data-wstarget\",\n tagNames: {\n ws: \"wcs-ws\",\n },\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.autoTrigger === \"boolean\") {\n _config.autoTrigger = partialConfig.autoTrigger;\n }\n if (typeof partialConfig.triggerAttribute === \"string\") {\n _config.triggerAttribute = partialConfig.triggerAttribute;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","export function raiseError(message: string): never {\n throw new Error(`[@wcstack/websocket] ${message}`);\n}\n","import { raiseError } from \"../raiseError.js\";\nimport { IWcBindable } from \"../types.js\";\n\nexport interface WebSocketConnectOptions {\n protocols?: string | string[];\n autoReconnect?: boolean;\n reconnectInterval?: number;\n maxReconnects?: number;\n}\n\nexport class WebSocketCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"message\", event: \"wcs-ws:message\" },\n { name: \"connected\", event: \"wcs-ws:connected-changed\" },\n { name: \"loading\", event: \"wcs-ws:loading-changed\" },\n { name: \"error\", event: \"wcs-ws:error\" },\n { name: \"readyState\", event: \"wcs-ws:readystate-changed\" },\n ],\n };\n\n private _target: EventTarget;\n private _ws: WebSocket | null = null;\n private _message: any = null;\n private _connected: boolean = false;\n private _loading: boolean = false;\n private _error: any = null;\n private _readyState: number = WebSocket.CLOSED;\n\n // 自動再接続\n private _autoReconnect: boolean = false;\n private _reconnectInterval: number = 3000;\n private _maxReconnects: number = Infinity;\n private _reconnectCount: number = 0;\n private _reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private _url: string = \"\";\n private _protocols: string | string[] | undefined = undefined;\n private _intentionalClose: boolean = false;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get message(): any {\n return this._message;\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get error(): any {\n return this._error;\n }\n\n get readyState(): number {\n return this._readyState;\n }\n\n // --- State setters with event dispatch ---\n\n private _setMessage(message: any): void {\n this._message = message;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:message\", {\n detail: message,\n bubbles: true,\n }));\n }\n\n private _setConnected(connected: boolean): void {\n this._connected = connected;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:connected-changed\", {\n detail: connected,\n bubbles: true,\n }));\n }\n\n private _setLoading(loading: boolean): void {\n this._loading = loading;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:loading-changed\", {\n detail: loading,\n bubbles: true,\n }));\n }\n\n private _setError(error: any): void {\n this._error = error;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:error\", {\n detail: error,\n bubbles: true,\n }));\n }\n\n private _setReadyState(readyState: number): void {\n this._readyState = readyState;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:readystate-changed\", {\n detail: readyState,\n bubbles: true,\n }));\n }\n\n // --- Public API ---\n\n connect(url: string, options: WebSocketConnectOptions = {}): void {\n if (!url) {\n raiseError(\"url is required.\");\n }\n\n // 既存の接続をクローズ\n this._intentionalClose = true;\n this._closeInternal();\n\n this._url = url;\n this._protocols = options.protocols;\n this._autoReconnect = options.autoReconnect ?? false;\n this._reconnectInterval = options.reconnectInterval ?? 3000;\n this._maxReconnects = options.maxReconnects ?? Infinity;\n this._reconnectCount = 0;\n this._intentionalClose = false;\n\n this._doConnect();\n }\n\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\n raiseError(\"WebSocket is not connected.\");\n }\n this._ws.send(data);\n }\n\n close(code?: number, reason?: string): void {\n this._intentionalClose = true;\n this._clearReconnectTimer();\n if (this._ws) {\n this._ws.close(code, reason);\n }\n }\n\n // --- Internal ---\n\n private _doConnect(): void {\n this._setLoading(true);\n this._setError(null);\n\n try {\n this._ws = this._protocols\n ? new WebSocket(this._url, this._protocols)\n : new WebSocket(this._url);\n } catch (e) {\n this._setLoading(false);\n this._setError(e);\n return;\n }\n\n this._setReadyState(WebSocket.CONNECTING);\n\n this._ws.addEventListener(\"open\", this._onOpen);\n this._ws.addEventListener(\"message\", this._onMessage);\n this._ws.addEventListener(\"error\", this._onError);\n this._ws.addEventListener(\"close\", this._onClose);\n }\n\n private _onOpen = (): void => {\n this._reconnectCount = 0;\n this._setLoading(false);\n this._setConnected(true);\n this._setReadyState(WebSocket.OPEN);\n };\n\n private _onMessage = (event: MessageEvent): void => {\n let data = event.data;\n // JSONの自動パース\n if (typeof data === \"string\") {\n try {\n data = JSON.parse(data);\n } catch {\n // テキストのまま\n }\n }\n this._setMessage(data);\n };\n\n private _onError = (event: Event): void => {\n this._setError(event);\n };\n\n private _onClose = (event: CloseEvent): void => {\n this._removeListeners();\n this._ws = null;\n this._setConnected(false);\n this._setLoading(false);\n this._setReadyState(WebSocket.CLOSED);\n\n // 異常クローズ時の自動再接続(正常終了 1000 は除外)\n if (!this._intentionalClose && this._autoReconnect && event.code !== 1000 && this._reconnectCount < this._maxReconnects) {\n this._scheduleReconnect();\n }\n };\n\n private _scheduleReconnect(): void {\n this._clearReconnectTimer();\n this._reconnectTimer = setTimeout(() => {\n this._reconnectTimer = null;\n this._reconnectCount++;\n this._doConnect();\n }, this._reconnectInterval);\n }\n\n private _clearReconnectTimer(): void {\n if (this._reconnectTimer !== null) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = null;\n }\n }\n\n private _removeListeners(): void {\n this._ws!.removeEventListener(\"open\", this._onOpen);\n this._ws!.removeEventListener(\"message\", this._onMessage);\n this._ws!.removeEventListener(\"error\", this._onError);\n this._ws!.removeEventListener(\"close\", this._onClose);\n }\n\n private _closeInternal(): void {\n this._clearReconnectTimer();\n if (this._ws) {\n this._removeListeners();\n if (this._ws.readyState === WebSocket.OPEN || this._ws.readyState === WebSocket.CONNECTING) {\n this._ws.close();\n }\n this._ws = null;\n }\n // 旧接続の状態をリセット(コンストラクタ例外時に stale 状態が残るのを防止)\n if (this._connected) {\n this._setConnected(false);\n }\n if (this._readyState !== WebSocket.CLOSED) {\n this._setReadyState(WebSocket.CLOSED);\n }\n }\n}\n","import { config } from \"./config.js\";\nimport { WcsWebSocket } from \"./components/WebSocket.js\";\n\nlet registered = false;\n\nfunction handleClick(event: Event): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\n if (!triggerElement) return;\n\n const wsId = triggerElement.getAttribute(config.triggerAttribute);\n if (!wsId) return;\n\n const wsElement = document.getElementById(wsId) as WcsWebSocket | null;\n if (!wsElement || !(wsElement instanceof WcsWebSocket)) return;\n\n event.preventDefault();\n wsElement.connect();\n}\n\nexport function registerAutoTrigger(): void {\n if (registered) return;\n registered = true;\n document.addEventListener(\"click\", handleClick);\n}\n\nexport function unregisterAutoTrigger(): void {\n if (!registered) return;\n registered = false;\n document.removeEventListener(\"click\", handleClick);\n}\n","import { config } from \"../config.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { WebSocketCore } from \"../core/WebSocketCore.js\";\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\n\nexport class WcsWebSocket extends HTMLElement {\n static hasConnectedCallbackPromise = false;\n static wcBindable: IWcBindable = {\n ...WebSocketCore.wcBindable,\n properties: [\n ...WebSocketCore.wcBindable.properties,\n { name: \"trigger\", event: \"wcs-ws:trigger-changed\" },\n { name: \"send\", event: \"wcs-ws:send-changed\" },\n ],\n };\n static get observedAttributes(): string[] { return [\"url\"]; }\n\n private _core: WebSocketCore;\n private _trigger: boolean = false;\n\n constructor() {\n super();\n this._core = new WebSocketCore(this);\n }\n\n // --- Attribute accessors ---\n\n get url(): string {\n return this.getAttribute(\"url\") || \"\";\n }\n\n set url(value: string) {\n this.setAttribute(\"url\", value);\n }\n\n get protocols(): string {\n return this.getAttribute(\"protocols\") || \"\";\n }\n\n set protocols(value: string) {\n this.setAttribute(\"protocols\", value);\n }\n\n get autoReconnect(): boolean {\n return this.hasAttribute(\"auto-reconnect\");\n }\n\n set autoReconnect(value: boolean) {\n if (value) {\n this.setAttribute(\"auto-reconnect\", \"\");\n } else {\n this.removeAttribute(\"auto-reconnect\");\n }\n }\n\n get reconnectInterval(): number {\n const attr = this.getAttribute(\"reconnect-interval\");\n return attr ? parseInt(attr, 10) : 3000;\n }\n\n set reconnectInterval(value: number) {\n this.setAttribute(\"reconnect-interval\", String(value));\n }\n\n get maxReconnects(): number {\n const attr = this.getAttribute(\"max-reconnects\");\n return attr ? parseInt(attr, 10) : Infinity;\n }\n\n set maxReconnects(value: number) {\n this.setAttribute(\"max-reconnects\", String(value));\n }\n\n get manual(): boolean {\n return this.hasAttribute(\"manual\");\n }\n\n set manual(value: boolean) {\n if (value) {\n this.setAttribute(\"manual\", \"\");\n } else {\n this.removeAttribute(\"manual\");\n }\n }\n\n // --- Core delegated getters ---\n\n get message(): any {\n return this._core.message;\n }\n\n get connected(): boolean {\n return this._core.connected;\n }\n\n get loading(): boolean {\n return this._core.loading;\n }\n\n get error(): any {\n return this._core.error;\n }\n\n get readyState(): number {\n return this._core.readyState;\n }\n\n // --- Command properties ---\n\n get trigger(): boolean {\n return this._trigger;\n }\n\n set trigger(value: boolean) {\n const v = !!value;\n if (v) {\n this._trigger = true;\n this.connect();\n this._trigger = false;\n this.dispatchEvent(new CustomEvent(\"wcs-ws:trigger-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n set send(data: any) {\n if (data === null || data === undefined) return;\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\n this._core.send(payload);\n this.dispatchEvent(new CustomEvent(\"wcs-ws:send-changed\", {\n detail: null,\n bubbles: true,\n }));\n }\n\n // --- Public methods ---\n\n connect(): void {\n const protocols = this.protocols\n ? this.protocols.split(\",\").map(p => p.trim()).filter(Boolean)\n : undefined;\n\n this._core.connect(this.url, {\n protocols: protocols && protocols.length === 1 ? protocols[0] : protocols,\n autoReconnect: this.autoReconnect,\n reconnectInterval: this.reconnectInterval,\n maxReconnects: this.maxReconnects,\n });\n }\n\n sendMessage(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n this._core.send(data);\n }\n\n close(code?: number, reason?: string): void {\n this._core.close(code, reason);\n }\n\n // --- Lifecycle ---\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\n this.connect();\n }\n }\n\n connectedCallback(): void {\n this.style.display = \"none\";\n if (config.autoTrigger) {\n registerAutoTrigger();\n }\n if (!this.manual && this.url) {\n this.connect();\n }\n }\n\n disconnectedCallback(): void {\n this._core.close();\n }\n}\n","import { WcsWebSocket } from \"./components/WebSocket.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents(): void {\n if (!customElements.get(config.tagNames.ws)) {\n customElements.define(config.tagNames.ws, WcsWebSocket);\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapWebSocket(userConfig?: IWritableConfig): void {\n if (userConfig) {\n setConfig(userConfig);\n }\n registerComponents();\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/WebSocketCore.ts","../src/autoTrigger.ts","../src/components/WebSocket.ts","../src/bootstrapWebSocket.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n ws: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-wstarget\",\r\n tagNames: {\r\n ws: \"wcs-ws\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/websocket] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\n\r\nexport interface WebSocketConnectOptions {\r\n protocols?: string | string[];\r\n autoReconnect?: boolean;\r\n reconnectInterval?: number;\r\n maxReconnects?: number;\r\n}\r\n\r\nexport class WebSocketCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"message\", event: \"wcs-ws:message\" },\r\n { name: \"connected\", event: \"wcs-ws:connected-changed\" },\r\n { name: \"loading\", event: \"wcs-ws:loading-changed\" },\r\n { name: \"error\", event: \"wcs-ws:error\" },\r\n { name: \"readyState\", event: \"wcs-ws:readystate-changed\" },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _ws: WebSocket | null = null;\r\n private _message: any = null;\r\n private _connected: boolean = false;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _readyState: number = WebSocket.CLOSED;\r\n\r\n // 自動再接続\r\n private _autoReconnect: boolean = false;\r\n private _reconnectInterval: number = 3000;\r\n private _maxReconnects: number = Infinity;\r\n private _reconnectCount: number = 0;\r\n private _reconnectTimer: ReturnType<typeof setTimeout> | null = null;\r\n private _url: string = \"\";\r\n private _protocols: string | string[] | undefined = undefined;\r\n private _intentionalClose: boolean = false;\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get message(): any {\r\n return this._message;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._connected;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get readyState(): number {\r\n return this._readyState;\r\n }\r\n\r\n // --- State setters with event dispatch ---\r\n\r\n private _setMessage(message: any): void {\r\n this._message = message;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:message\", {\r\n detail: message,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setConnected(connected: boolean): void {\r\n this._connected = connected;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:connected-changed\", {\r\n detail: connected,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setReadyState(readyState: number): void {\r\n this._readyState = readyState;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:readystate-changed\", {\r\n detail: readyState,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n // --- Public API ---\r\n\r\n connect(url: string, options: WebSocketConnectOptions = {}): void {\r\n if (!url) {\r\n raiseError(\"url is required.\");\r\n }\r\n\r\n // 既存の接続をクローズ\r\n this._intentionalClose = true;\r\n this._closeInternal();\r\n\r\n this._url = url;\r\n this._protocols = options.protocols;\r\n this._autoReconnect = options.autoReconnect ?? false;\r\n this._reconnectInterval = options.reconnectInterval ?? 3000;\r\n this._maxReconnects = options.maxReconnects ?? Infinity;\r\n this._reconnectCount = 0;\r\n this._intentionalClose = false;\r\n\r\n this._doConnect();\r\n }\r\n\r\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\r\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\r\n raiseError(\"WebSocket is not connected.\");\r\n }\r\n this._ws.send(data);\r\n }\r\n\r\n close(code?: number, reason?: string): void {\r\n this._intentionalClose = true;\r\n this._clearReconnectTimer();\r\n if (this._ws) {\r\n this._ws.close(code, reason);\r\n }\r\n }\r\n\r\n // --- Internal ---\r\n\r\n private _doConnect(): void {\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n this._ws = this._protocols\r\n ? new WebSocket(this._url, this._protocols)\r\n : new WebSocket(this._url);\r\n } catch (e) {\r\n this._setLoading(false);\r\n this._setError(e);\r\n return;\r\n }\r\n\r\n this._setReadyState(WebSocket.CONNECTING);\r\n\r\n this._ws.addEventListener(\"open\", this._onOpen);\r\n this._ws.addEventListener(\"message\", this._onMessage);\r\n this._ws.addEventListener(\"error\", this._onError);\r\n this._ws.addEventListener(\"close\", this._onClose);\r\n }\r\n\r\n private _onOpen = (): void => {\r\n this._reconnectCount = 0;\r\n this._setLoading(false);\r\n this._setConnected(true);\r\n this._setReadyState(WebSocket.OPEN);\r\n };\r\n\r\n private _onMessage = (event: MessageEvent): void => {\r\n let data = event.data;\r\n // JSONの自動パース\r\n if (typeof data === \"string\") {\r\n try {\r\n data = JSON.parse(data);\r\n } catch {\r\n // テキストのまま\r\n }\r\n }\r\n this._setMessage(data);\r\n };\r\n\r\n private _onError = (event: Event): void => {\r\n this._setError(event);\r\n };\r\n\r\n private _onClose = (event: CloseEvent): void => {\r\n this._removeListeners();\r\n this._ws = null;\r\n this._setConnected(false);\r\n this._setLoading(false);\r\n this._setReadyState(WebSocket.CLOSED);\r\n\r\n // 異常クローズ時の自動再接続(正常終了 1000 は除外)\r\n if (!this._intentionalClose && this._autoReconnect && event.code !== 1000 && this._reconnectCount < this._maxReconnects) {\r\n this._scheduleReconnect();\r\n }\r\n };\r\n\r\n private _scheduleReconnect(): void {\r\n this._clearReconnectTimer();\r\n this._reconnectTimer = setTimeout(() => {\r\n this._reconnectTimer = null;\r\n this._reconnectCount++;\r\n this._doConnect();\r\n }, this._reconnectInterval);\r\n }\r\n\r\n private _clearReconnectTimer(): void {\r\n if (this._reconnectTimer !== null) {\r\n clearTimeout(this._reconnectTimer);\r\n this._reconnectTimer = null;\r\n }\r\n }\r\n\r\n private _removeListeners(): void {\r\n this._ws!.removeEventListener(\"open\", this._onOpen);\r\n this._ws!.removeEventListener(\"message\", this._onMessage);\r\n this._ws!.removeEventListener(\"error\", this._onError);\r\n this._ws!.removeEventListener(\"close\", this._onClose);\r\n }\r\n\r\n private _closeInternal(): void {\r\n this._clearReconnectTimer();\r\n if (this._ws) {\r\n this._removeListeners();\r\n if (this._ws.readyState === WebSocket.OPEN || this._ws.readyState === WebSocket.CONNECTING) {\r\n this._ws.close();\r\n }\r\n this._ws = null;\r\n }\r\n // 旧接続の状態をリセット(コンストラクタ例外時に stale 状態が残るのを防止)\r\n if (this._connected) {\r\n this._setConnected(false);\r\n }\r\n if (this._readyState !== WebSocket.CLOSED) {\r\n this._setReadyState(WebSocket.CLOSED);\r\n }\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { WcsWebSocket } from \"./components/WebSocket.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const wsId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!wsId) return;\r\n\r\n const wsElement = document.getElementById(wsId) as WcsWebSocket | null;\r\n if (!wsElement || !(wsElement instanceof WcsWebSocket)) return;\r\n\r\n event.preventDefault();\r\n wsElement.connect();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable } from \"../types.js\";\r\nimport { WebSocketCore } from \"../core/WebSocketCore.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class WcsWebSocket extends HTMLElement {\r\n static hasConnectedCallbackPromise = false;\r\n static wcBindable: IWcBindable = {\r\n ...WebSocketCore.wcBindable,\r\n properties: [\r\n ...WebSocketCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-ws:trigger-changed\" },\r\n { name: \"send\", event: \"wcs-ws:send-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"url\"]; }\r\n\r\n private _core: WebSocketCore;\r\n private _trigger: boolean = false;\r\n\r\n constructor() {\r\n super();\r\n this._core = new WebSocketCore(this);\r\n }\r\n\r\n // --- Attribute accessors ---\r\n\r\n get url(): string {\r\n return this.getAttribute(\"url\") || \"\";\r\n }\r\n\r\n set url(value: string) {\r\n this.setAttribute(\"url\", value);\r\n }\r\n\r\n get protocols(): string {\r\n return this.getAttribute(\"protocols\") || \"\";\r\n }\r\n\r\n set protocols(value: string) {\r\n this.setAttribute(\"protocols\", value);\r\n }\r\n\r\n get autoReconnect(): boolean {\r\n return this.hasAttribute(\"auto-reconnect\");\r\n }\r\n\r\n set autoReconnect(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"auto-reconnect\", \"\");\r\n } else {\r\n this.removeAttribute(\"auto-reconnect\");\r\n }\r\n }\r\n\r\n get reconnectInterval(): number {\r\n const attr = this.getAttribute(\"reconnect-interval\");\r\n return attr ? parseInt(attr, 10) : 3000;\r\n }\r\n\r\n set reconnectInterval(value: number) {\r\n this.setAttribute(\"reconnect-interval\", String(value));\r\n }\r\n\r\n get maxReconnects(): number {\r\n const attr = this.getAttribute(\"max-reconnects\");\r\n return attr ? parseInt(attr, 10) : Infinity;\r\n }\r\n\r\n set maxReconnects(value: number) {\r\n this.setAttribute(\"max-reconnects\", String(value));\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n // --- Core delegated getters ---\r\n\r\n get message(): any {\r\n return this._core.message;\r\n }\r\n\r\n get connected(): boolean {\r\n return this._core.connected;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get readyState(): number {\r\n return this._core.readyState;\r\n }\r\n\r\n // --- Command properties ---\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.connect();\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-ws:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n }\r\n }\r\n\r\n set send(data: any) {\r\n if (data === null || data === undefined) return;\r\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\r\n this._core.send(payload);\r\n this.dispatchEvent(new CustomEvent(\"wcs-ws:send-changed\", {\r\n detail: null,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n // --- Public methods ---\r\n\r\n connect(): void {\r\n const protocols = this.protocols\r\n ? this.protocols.split(\",\").map(p => p.trim()).filter(Boolean)\r\n : undefined;\r\n\r\n this._core.connect(this.url, {\r\n protocols: protocols && protocols.length === 1 ? protocols[0] : protocols,\r\n autoReconnect: this.autoReconnect,\r\n reconnectInterval: this.reconnectInterval,\r\n maxReconnects: this.maxReconnects,\r\n });\r\n }\r\n\r\n sendMessage(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\r\n this._core.send(data);\r\n }\r\n\r\n close(code?: number, reason?: string): void {\r\n this._core.close(code, reason);\r\n }\r\n\r\n // --- Lifecycle ---\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\r\n this.connect();\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.url) {\r\n this.connect();\r\n }\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this._core.close();\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapWebSocket(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n","import { WcsWebSocket } from \"./components/WebSocket.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.ws)) {\r\n customElements.define(config.tagNames.ws, WcsWebSocket);\r\n }\r\n}\r\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","ws","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","raiseError","message","Error","WebSocketCore","EventTarget","static","protocol","version","properties","name","event","_target","_ws","_message","_connected","_loading","_error","_readyState","WebSocket","CLOSED","_autoReconnect","_reconnectInterval","_maxReconnects","Infinity","_reconnectCount","_reconnectTimer","_url","_protocols","undefined","_intentionalClose","constructor","target","super","this","connected","loading","error","readyState","_setMessage","dispatchEvent","CustomEvent","detail","bubbles","_setConnected","_setLoading","_setError","_setReadyState","connect","url","options","_closeInternal","protocols","autoReconnect","reconnectInterval","maxReconnects","_doConnect","send","data","OPEN","close","code","reason","_clearReconnectTimer","e","CONNECTING","addEventListener","_onOpen","_onMessage","_onError","_onClose","JSON","parse","_removeListeners","_scheduleReconnect","setTimeout","clearTimeout","removeEventListener","registered","handleClick","Element","triggerElement","closest","wsId","getAttribute","wsElement","document","getElementById","WcsWebSocket","preventDefault","HTMLElement","wcBindable","observedAttributes","_core","_trigger","value","setAttribute","hasAttribute","removeAttribute","attr","parseInt","String","manual","trigger","payload","stringify","split","map","p","trim","filter","Boolean","length","sendMessage","attributeChangedCallback","_oldValue","newValue","isConnected","connectedCallback","style","display","disconnectedCallback","bootstrapWebSocket","userConfig","partialConfig","assign","customElements","get","define"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/WebSocketCore.ts","../src/autoTrigger.ts","../src/components/WebSocket.ts","../src/bootstrapWebSocket.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\ninterface IInternalConfig extends IConfig {\n autoTrigger: boolean;\n triggerAttribute: string;\n tagNames: {\n ws: string;\n };\n}\n\nconst _config: IInternalConfig = {\n autoTrigger: true,\n triggerAttribute: \"data-wstarget\",\n tagNames: {\n ws: \"wcs-ws\",\n },\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.autoTrigger === \"boolean\") {\n _config.autoTrigger = partialConfig.autoTrigger;\n }\n if (typeof partialConfig.triggerAttribute === \"string\") {\n _config.triggerAttribute = partialConfig.triggerAttribute;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","export function raiseError(message: string): never {\n throw new Error(`[@wcstack/websocket] ${message}`);\n}\n","import { raiseError } from \"../raiseError.js\";\nimport { IWcBindable } from \"../types.js\";\n\nexport interface WebSocketConnectOptions {\n protocols?: string | string[];\n autoReconnect?: boolean;\n reconnectInterval?: number;\n maxReconnects?: number;\n}\n\nexport class WebSocketCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"message\", event: \"wcs-ws:message\" },\n { name: \"connected\", event: \"wcs-ws:connected-changed\" },\n { name: \"loading\", event: \"wcs-ws:loading-changed\" },\n { name: \"error\", event: \"wcs-ws:error\" },\n { name: \"readyState\", event: \"wcs-ws:readystate-changed\" },\n ],\n };\n\n private _target: EventTarget;\n private _ws: WebSocket | null = null;\n private _message: any = null;\n private _connected: boolean = false;\n private _loading: boolean = false;\n private _error: any = null;\n private _readyState: number = WebSocket.CLOSED;\n\n // 自動再接続\n private _autoReconnect: boolean = false;\n private _reconnectInterval: number = 3000;\n private _maxReconnects: number = Infinity;\n private _reconnectCount: number = 0;\n private _reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private _url: string = \"\";\n private _protocols: string | string[] | undefined = undefined;\n private _intentionalClose: boolean = false;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get message(): any {\n return this._message;\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get error(): any {\n return this._error;\n }\n\n get readyState(): number {\n return this._readyState;\n }\n\n // --- State setters with event dispatch ---\n\n private _setMessage(message: any): void {\n this._message = message;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:message\", {\n detail: message,\n bubbles: true,\n }));\n }\n\n private _setConnected(connected: boolean): void {\n this._connected = connected;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:connected-changed\", {\n detail: connected,\n bubbles: true,\n }));\n }\n\n private _setLoading(loading: boolean): void {\n this._loading = loading;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:loading-changed\", {\n detail: loading,\n bubbles: true,\n }));\n }\n\n private _setError(error: any): void {\n this._error = error;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:error\", {\n detail: error,\n bubbles: true,\n }));\n }\n\n private _setReadyState(readyState: number): void {\n this._readyState = readyState;\n this._target.dispatchEvent(new CustomEvent(\"wcs-ws:readystate-changed\", {\n detail: readyState,\n bubbles: true,\n }));\n }\n\n // --- Public API ---\n\n connect(url: string, options: WebSocketConnectOptions = {}): void {\n if (!url) {\n raiseError(\"url is required.\");\n }\n\n // 既存の接続をクローズ\n this._intentionalClose = true;\n this._closeInternal();\n\n this._url = url;\n this._protocols = options.protocols;\n this._autoReconnect = options.autoReconnect ?? false;\n this._reconnectInterval = options.reconnectInterval ?? 3000;\n this._maxReconnects = options.maxReconnects ?? Infinity;\n this._reconnectCount = 0;\n this._intentionalClose = false;\n\n this._doConnect();\n }\n\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\n raiseError(\"WebSocket is not connected.\");\n }\n this._ws.send(data);\n }\n\n close(code?: number, reason?: string): void {\n this._intentionalClose = true;\n this._clearReconnectTimer();\n if (this._ws) {\n this._ws.close(code, reason);\n }\n }\n\n // --- Internal ---\n\n private _doConnect(): void {\n this._setLoading(true);\n this._setError(null);\n\n try {\n this._ws = this._protocols\n ? new WebSocket(this._url, this._protocols)\n : new WebSocket(this._url);\n } catch (e) {\n this._setLoading(false);\n this._setError(e);\n return;\n }\n\n this._setReadyState(WebSocket.CONNECTING);\n\n this._ws.addEventListener(\"open\", this._onOpen);\n this._ws.addEventListener(\"message\", this._onMessage);\n this._ws.addEventListener(\"error\", this._onError);\n this._ws.addEventListener(\"close\", this._onClose);\n }\n\n private _onOpen = (): void => {\n this._reconnectCount = 0;\n this._setLoading(false);\n this._setConnected(true);\n this._setReadyState(WebSocket.OPEN);\n };\n\n private _onMessage = (event: MessageEvent): void => {\n let data = event.data;\n // JSONの自動パース\n if (typeof data === \"string\") {\n try {\n data = JSON.parse(data);\n } catch {\n // テキストのまま\n }\n }\n this._setMessage(data);\n };\n\n private _onError = (event: Event): void => {\n this._setError(event);\n };\n\n private _onClose = (event: CloseEvent): void => {\n this._removeListeners();\n this._ws = null;\n this._setConnected(false);\n this._setLoading(false);\n this._setReadyState(WebSocket.CLOSED);\n\n // 異常クローズ時の自動再接続(正常終了 1000 は除外)\n if (!this._intentionalClose && this._autoReconnect && event.code !== 1000 && this._reconnectCount < this._maxReconnects) {\n this._scheduleReconnect();\n }\n };\n\n private _scheduleReconnect(): void {\n this._clearReconnectTimer();\n this._reconnectTimer = setTimeout(() => {\n this._reconnectTimer = null;\n this._reconnectCount++;\n this._doConnect();\n }, this._reconnectInterval);\n }\n\n private _clearReconnectTimer(): void {\n if (this._reconnectTimer !== null) {\n clearTimeout(this._reconnectTimer);\n this._reconnectTimer = null;\n }\n }\n\n private _removeListeners(): void {\n this._ws!.removeEventListener(\"open\", this._onOpen);\n this._ws!.removeEventListener(\"message\", this._onMessage);\n this._ws!.removeEventListener(\"error\", this._onError);\n this._ws!.removeEventListener(\"close\", this._onClose);\n }\n\n private _closeInternal(): void {\n this._clearReconnectTimer();\n if (this._ws) {\n this._removeListeners();\n if (this._ws.readyState === WebSocket.OPEN || this._ws.readyState === WebSocket.CONNECTING) {\n this._ws.close();\n }\n this._ws = null;\n }\n // 旧接続の状態をリセット(コンストラクタ例外時に stale 状態が残るのを防止)\n if (this._connected) {\n this._setConnected(false);\n }\n if (this._readyState !== WebSocket.CLOSED) {\n this._setReadyState(WebSocket.CLOSED);\n }\n }\n}\n","import { config } from \"./config.js\";\nimport { WcsWebSocket } from \"./components/WebSocket.js\";\n\nlet registered = false;\n\nfunction handleClick(event: Event): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\n if (!triggerElement) return;\n\n const wsId = triggerElement.getAttribute(config.triggerAttribute);\n if (!wsId) return;\n\n const wsElement = document.getElementById(wsId) as WcsWebSocket | null;\n if (!wsElement || !(wsElement instanceof WcsWebSocket)) return;\n\n event.preventDefault();\n wsElement.connect();\n}\n\nexport function registerAutoTrigger(): void {\n if (registered) return;\n registered = true;\n document.addEventListener(\"click\", handleClick);\n}\n\nexport function unregisterAutoTrigger(): void {\n if (!registered) return;\n registered = false;\n document.removeEventListener(\"click\", handleClick);\n}\n","import { config } from \"../config.js\";\nimport { IWcBindable } from \"../types.js\";\nimport { WebSocketCore } from \"../core/WebSocketCore.js\";\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\n\nexport class WcsWebSocket extends HTMLElement {\n static hasConnectedCallbackPromise = false;\n static wcBindable: IWcBindable = {\n ...WebSocketCore.wcBindable,\n properties: [\n ...WebSocketCore.wcBindable.properties,\n { name: \"trigger\", event: \"wcs-ws:trigger-changed\" },\n { name: \"send\", event: \"wcs-ws:send-changed\" },\n ],\n };\n static get observedAttributes(): string[] { return [\"url\"]; }\n\n private _core: WebSocketCore;\n private _trigger: boolean = false;\n\n constructor() {\n super();\n this._core = new WebSocketCore(this);\n }\n\n // --- Attribute accessors ---\n\n get url(): string {\n return this.getAttribute(\"url\") || \"\";\n }\n\n set url(value: string) {\n this.setAttribute(\"url\", value);\n }\n\n get protocols(): string {\n return this.getAttribute(\"protocols\") || \"\";\n }\n\n set protocols(value: string) {\n this.setAttribute(\"protocols\", value);\n }\n\n get autoReconnect(): boolean {\n return this.hasAttribute(\"auto-reconnect\");\n }\n\n set autoReconnect(value: boolean) {\n if (value) {\n this.setAttribute(\"auto-reconnect\", \"\");\n } else {\n this.removeAttribute(\"auto-reconnect\");\n }\n }\n\n get reconnectInterval(): number {\n const attr = this.getAttribute(\"reconnect-interval\");\n return attr ? parseInt(attr, 10) : 3000;\n }\n\n set reconnectInterval(value: number) {\n this.setAttribute(\"reconnect-interval\", String(value));\n }\n\n get maxReconnects(): number {\n const attr = this.getAttribute(\"max-reconnects\");\n return attr ? parseInt(attr, 10) : Infinity;\n }\n\n set maxReconnects(value: number) {\n this.setAttribute(\"max-reconnects\", String(value));\n }\n\n get manual(): boolean {\n return this.hasAttribute(\"manual\");\n }\n\n set manual(value: boolean) {\n if (value) {\n this.setAttribute(\"manual\", \"\");\n } else {\n this.removeAttribute(\"manual\");\n }\n }\n\n // --- Core delegated getters ---\n\n get message(): any {\n return this._core.message;\n }\n\n get connected(): boolean {\n return this._core.connected;\n }\n\n get loading(): boolean {\n return this._core.loading;\n }\n\n get error(): any {\n return this._core.error;\n }\n\n get readyState(): number {\n return this._core.readyState;\n }\n\n // --- Command properties ---\n\n get trigger(): boolean {\n return this._trigger;\n }\n\n set trigger(value: boolean) {\n const v = !!value;\n if (v) {\n this._trigger = true;\n this.connect();\n this._trigger = false;\n this.dispatchEvent(new CustomEvent(\"wcs-ws:trigger-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n set send(data: any) {\n if (data === null || data === undefined) return;\n const payload = typeof data === \"string\" ? data : JSON.stringify(data);\n this._core.send(payload);\n this.dispatchEvent(new CustomEvent(\"wcs-ws:send-changed\", {\n detail: null,\n bubbles: true,\n }));\n }\n\n // --- Public methods ---\n\n connect(): void {\n const protocols = this.protocols\n ? this.protocols.split(\",\").map(p => p.trim()).filter(Boolean)\n : undefined;\n\n this._core.connect(this.url, {\n protocols: protocols && protocols.length === 1 ? protocols[0] : protocols,\n autoReconnect: this.autoReconnect,\n reconnectInterval: this.reconnectInterval,\n maxReconnects: this.maxReconnects,\n });\n }\n\n sendMessage(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n this._core.send(data);\n }\n\n close(code?: number, reason?: string): void {\n this._core.close(code, reason);\n }\n\n // --- Lifecycle ---\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n if (name === \"url\" && this.isConnected && !this.manual && newValue) {\n this.connect();\n }\n }\n\n connectedCallback(): void {\n this.style.display = \"none\";\n if (config.autoTrigger) {\n registerAutoTrigger();\n }\n if (!this.manual && this.url) {\n this.connect();\n }\n }\n\n disconnectedCallback(): void {\n this._core.close();\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapWebSocket(userConfig?: IWritableConfig): void {\n if (userConfig) {\n setConfig(userConfig);\n }\n registerComponents();\n}\n","import { WcsWebSocket } from \"./components/WebSocket.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents(): void {\n if (!customElements.get(config.tagNames.ws)) {\n customElements.define(config.tagNames.ws, WcsWebSocket);\n }\n}\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","ws","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","raiseError","message","Error","WebSocketCore","EventTarget","static","protocol","version","properties","name","event","_target","_ws","_message","_connected","_loading","_error","_readyState","WebSocket","CLOSED","_autoReconnect","_reconnectInterval","_maxReconnects","Infinity","_reconnectCount","_reconnectTimer","_url","_protocols","undefined","_intentionalClose","constructor","target","super","this","connected","loading","error","readyState","_setMessage","dispatchEvent","CustomEvent","detail","bubbles","_setConnected","_setLoading","_setError","_setReadyState","connect","url","options","_closeInternal","protocols","autoReconnect","reconnectInterval","maxReconnects","_doConnect","send","data","OPEN","close","code","reason","_clearReconnectTimer","e","CONNECTING","addEventListener","_onOpen","_onMessage","_onError","_onClose","JSON","parse","_removeListeners","_scheduleReconnect","setTimeout","clearTimeout","removeEventListener","registered","handleClick","Element","triggerElement","closest","wsId","getAttribute","wsElement","document","getElementById","WcsWebSocket","preventDefault","HTMLElement","wcBindable","observedAttributes","_core","_trigger","value","setAttribute","hasAttribute","removeAttribute","attr","parseInt","String","manual","trigger","payload","stringify","split","map","p","trim","filter","Boolean","length","sendMessage","attributeChangedCallback","_oldValue","newValue","isConnected","connectedCallback","style","display","disconnectedCallback","bootstrapWebSocket","userConfig","partialConfig","assign","customElements","get","define"],"mappings":"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"}
package/package.json CHANGED
@@ -1,70 +1,70 @@
1
- {
2
- "name": "@wcstack/websocket",
3
- "version": "1.8.1",
4
- "description": "Declarative WebSocket component for Web Components. Framework-agnostic real-time communication via wc-bindable-protocol.",
5
- "type": "module",
6
- "main": "./dist/index.esm.js",
7
- "module": "./dist/index.esm.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.esm.js"
13
- },
14
- "./auto": "./dist/auto.min.js"
15
- },
16
- "files": [
17
- "dist"
18
- ],
19
- "scripts": {
20
- "clean": "rimraf dist .tsc-out",
21
- "build": "rimraf dist .tsc-out && tsc && rollup -c",
22
- "test": "vitest run",
23
- "test:watch": "vitest",
24
- "test:coverage": "vitest run --coverage",
25
- "lint": "eslint src",
26
- "version:patch": "npm version patch",
27
- "version:minor": "npm version minor",
28
- "version:major": "npm version major",
29
- "prepublishOnly": "npm run build && npm run test:coverage"
30
- },
31
- "keywords": [
32
- "web-components",
33
- "websocket",
34
- "custom-elements",
35
- "wc-bindable",
36
- "declarative",
37
- "real-time",
38
- "zero-dependencies",
39
- "framework-agnostic"
40
- ],
41
- "author": "mogera551",
42
- "homepage": "https://wcstack.github.io",
43
- "repository": {
44
- "type": "git",
45
- "url": "https://github.com/wcstack/wcstack.git",
46
- "directory": "packages/websocket"
47
- },
48
- "bugs": {
49
- "url": "https://github.com/wcstack/wcstack/issues"
50
- },
51
- "license": "MIT",
52
- "devDependencies": {
53
- "@eslint/js": "^9.39.1",
54
- "@rollup/plugin-terser": "^0.4.4",
55
- "@rollup/plugin-typescript": "^11.1.6",
56
- "@vitest/coverage-v8": "^4.0.15",
57
- "@vitest/ui": "^4.0.15",
58
- "eslint": "^9.39.1",
59
- "globals": "^16.5.0",
60
- "happy-dom": "^20.0.11",
61
- "rimraf": "^6.0.1",
62
- "rollup": "^4.22.4",
63
- "rollup-plugin-dts": "^6.1.1",
64
- "rollup-plugin-copy": "^3.5.0",
65
- "tslib": "^2.8.1",
66
- "typescript": "^5.9.3",
67
- "typescript-eslint": "^8.49.0",
68
- "vitest": "^4.0.15"
69
- }
70
- }
1
+ {
2
+ "name": "@wcstack/websocket",
3
+ "version": "1.8.5",
4
+ "description": "Declarative WebSocket component for Web Components. Framework-agnostic real-time communication via wc-bindable-protocol.",
5
+ "type": "module",
6
+ "main": "./dist/index.esm.js",
7
+ "module": "./dist/index.esm.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.esm.js"
13
+ },
14
+ "./auto": "./dist/auto.min.js"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "clean": "rimraf dist .tsc-out",
21
+ "build": "rimraf dist .tsc-out && tsc && rollup -c",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "test:coverage": "vitest run --coverage",
25
+ "lint": "eslint src",
26
+ "version:patch": "npm version patch",
27
+ "version:minor": "npm version minor",
28
+ "version:major": "npm version major",
29
+ "prepublishOnly": "npm run build && npm run test:coverage"
30
+ },
31
+ "keywords": [
32
+ "web-components",
33
+ "websocket",
34
+ "custom-elements",
35
+ "wc-bindable",
36
+ "declarative",
37
+ "real-time",
38
+ "zero-dependencies",
39
+ "framework-agnostic"
40
+ ],
41
+ "author": "mogera551",
42
+ "homepage": "https://wcstack.github.io",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/wcstack/wcstack.git",
46
+ "directory": "packages/websocket"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/wcstack/wcstack/issues"
50
+ },
51
+ "license": "MIT",
52
+ "devDependencies": {
53
+ "@eslint/js": "^9.39.1",
54
+ "@rollup/plugin-terser": "^0.4.4",
55
+ "@rollup/plugin-typescript": "^11.1.6",
56
+ "@vitest/coverage-v8": "^4.0.15",
57
+ "@vitest/ui": "^4.0.15",
58
+ "eslint": "^9.39.1",
59
+ "globals": "^16.5.0",
60
+ "happy-dom": "^20.0.11",
61
+ "rimraf": "^6.0.1",
62
+ "rollup": "^4.22.4",
63
+ "rollup-plugin-dts": "^6.1.1",
64
+ "rollup-plugin-copy": "^3.5.0",
65
+ "tslib": "^2.8.1",
66
+ "typescript": "^5.9.3",
67
+ "typescript-eslint": "^8.49.0",
68
+ "vitest": "^4.0.15"
69
+ }
70
+ }