@zhin.js/console 1.0.11 → 1.0.13

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/lib/index.js CHANGED
@@ -1,168 +1,190 @@
1
- import { register, useContext, useLogger } from "@zhin.js/core";
2
- import mime from "mime";
3
- import connect from "koa-connect";
4
- import * as fs from "fs";
5
- import * as path from "path";
6
- import { createViteDevServer } from "./dev.js";
7
- import { setupWebSocket, notifyDataUpdate } from "./websocket.js";
8
- const logger = useLogger();
9
- const createSyncMsg = (key, value) => {
10
- return {
1
+ import { useLogger, useContext, register } from '@zhin.js/core';
2
+ import mime from 'mime';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import WebSocket from 'ws';
6
+
7
+ // src/index.ts
8
+ function setupWebSocket(webServer) {
9
+ webServer.ws.on("connection", (ws) => {
10
+ ws.send(
11
+ JSON.stringify({
11
12
  type: "sync",
12
13
  data: {
13
- key,
14
- value,
15
- },
16
- };
17
- };
18
- const createAddMsg = (key, value) => {
19
- return {
20
- type: "add",
21
- data: {
22
- key,
23
- value,
24
- },
25
- };
14
+ key: "entries",
15
+ value: Object.values(webServer.entries)
16
+ }
17
+ })
18
+ );
19
+ ws.send(
20
+ JSON.stringify({
21
+ type: "init-data",
22
+ timestamp: Date.now()
23
+ })
24
+ );
25
+ ws.on("message", async (data) => {
26
+ try {
27
+ const message = JSON.parse(data.toString());
28
+ await handleWebSocketMessage(ws, message, webServer);
29
+ } catch (error) {
30
+ console.error("WebSocket \u6D88\u606F\u5904\u7406\u9519\u8BEF:", error);
31
+ ws.send(
32
+ JSON.stringify({
33
+ error: "Invalid message format"
34
+ })
35
+ );
36
+ }
37
+ });
38
+ ws.on("close", () => {
39
+ });
40
+ ws.on("error", (error) => {
41
+ console.error("WebSocket \u9519\u8BEF:", error);
42
+ });
43
+ });
44
+ }
45
+ async function handleWebSocketMessage(ws, message, webServer) {
46
+ const { type, requestId } = message;
47
+ switch (type) {
48
+ case "ping":
49
+ ws.send(JSON.stringify({ type: "pong", requestId }));
50
+ break;
51
+ case "entries:get":
52
+ ws.send(
53
+ JSON.stringify({
54
+ requestId,
55
+ data: Object.values(webServer.entries)
56
+ })
57
+ );
58
+ break;
59
+ default:
60
+ ws.send(
61
+ JSON.stringify({
62
+ requestId,
63
+ error: `Unknown message type: ${type}`
64
+ })
65
+ );
66
+ }
67
+ }
68
+ function broadcastToAll(webServer, message) {
69
+ for (const ws of webServer.ws.clients || []) {
70
+ if (ws.readyState === WebSocket.OPEN) {
71
+ ws.send(JSON.stringify(message));
72
+ }
73
+ }
74
+ }
75
+ function notifyDataUpdate(webServer) {
76
+ broadcastToAll(webServer, {
77
+ type: "data-update",
78
+ timestamp: Date.now()
79
+ });
80
+ }
81
+ useLogger();
82
+ var createAddMsg = (key, value) => {
83
+ return {
84
+ type: "add",
85
+ data: {
86
+ key,
87
+ value
88
+ }
89
+ };
26
90
  };
27
- const createDeleteMsg = (key, value) => {
28
- return {
29
- type: "delete",
30
- data: {
31
- key,
32
- value,
33
- },
34
- };
91
+ var createDeleteMsg = (key, value) => {
92
+ return {
93
+ type: "delete",
94
+ data: {
95
+ key,
96
+ value
97
+ }
98
+ };
35
99
  };
36
100
  useContext("router", async (router) => {
37
- const base = "/vite/";
38
- const webServer = {
39
- entries: {},
40
- addEntry(entry) {
41
- const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
42
- const entryFile = typeof entry === "string"
43
- ? entry
44
- : entry[process.env.NODE_ENV ||
45
- "development"];
46
- this.entries[hash] = `/vite/@fs/${entryFile}`;
47
- for (const ws of this.ws.clients || []) {
48
- ws.send(JSON.stringify(createAddMsg("entries", this.entries[hash])));
49
- }
50
- return () => {
51
- for (const ws of this.ws.clients || []) {
52
- ws.send(JSON.stringify(createDeleteMsg("entries", this.entries[hash])));
53
- }
54
- delete this.entries[hash];
55
- };
56
- },
57
- ws: router.ws("/server"),
58
- };
59
- const isDev = process.env.NODE_ENV === "development";
60
- const root = isDev
61
- ? path.join(import.meta.dirname, "../client")
62
- : path.join(import.meta.dirname, "../dist");
63
- logger.info({ isDev, root });
64
- if (isDev) {
65
- webServer.vite = await await createViteDevServer({
66
- root,
67
- base,
68
- enableTailwind: true,
69
- });
70
- // Vite 中间件 - 必须在其他路由之前
71
- router.use((ctx, next) => {
72
- if (ctx.request.originalUrl.startsWith("/api"))
73
- return next();
74
- return connect(webServer.vite.middlewares)(ctx, next);
75
- });
76
- }
77
- else {
78
- router.use((ctx, next) => {
79
- if (ctx.request.originalUrl.startsWith("/api"))
80
- return next();
81
- if (!ctx.path.startsWith('/vite/@fs/'))
82
- return next();
83
- const filename = ctx.path.replace(`/vite/@fs/`, '');
84
- if (!fs.existsSync(filename))
85
- return next();
86
- ctx.type = mime.getType(filename) || path.extname(filename);
87
- ctx.body = fs.createReadStream(filename);
88
- });
89
- }
90
- // SPA 回退路由 - 处理所有未匹配的路由
91
- router.all("*all", async (ctx, next) => {
92
- const url = ctx.request.originalUrl.replace(base, "");
93
- const name = isDev ? ctx.path.slice(1) : ctx.path.slice(1);
94
- const sendFile = (filename) => {
95
- // 安全检查:确保是常规文件
96
- try {
97
- const stat = fs.statSync(filename);
98
- if (!stat.isFile()) {
99
- ctx.status = 404;
100
- return;
101
- }
102
- }
103
- catch (error) {
104
- ctx.status = 404;
105
- return;
106
- }
107
- ctx.type = path.extname(filename);
108
- ctx.type = mime.getType(filename) || ctx.type;
109
- return (ctx.body = fs.createReadStream(filename));
110
- };
111
- // 1. 检查是否是动态入口
112
- if (Object.keys(webServer.entries).includes(name)) {
113
- return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
101
+ const base = "/vite/";
102
+ const webServer = {
103
+ entries: {},
104
+ addEntry(entry) {
105
+ const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
106
+ const entryFile = typeof entry === "string" ? entry : entry["production"];
107
+ this.entries[hash] = `/vite/@fs/${entryFile}`;
108
+ for (const ws of this.ws.clients || []) {
109
+ ws.send(JSON.stringify(createAddMsg("entries", this.entries[hash])));
110
+ }
111
+ return () => {
112
+ for (const ws of this.ws.clients || []) {
113
+ ws.send(
114
+ JSON.stringify(createDeleteMsg("entries", this.entries[hash]))
115
+ );
114
116
  }
115
- // 2. 检查是否是静态文件
116
- const filename = path.resolve(root, name);
117
- if (filename.startsWith(root) || filename.includes("node_modules")) {
118
- try {
119
- if (fs.existsSync(filename)) {
120
- const fileState = fs.statSync(filename);
121
- // 只处理常规文件,忽略目录、socket、符号链接等
122
- if (fileState.isFile() &&
123
- !fileState.isSocket() &&
124
- !fileState.isFIFO()) {
125
- return sendFile(filename);
126
- }
127
- }
128
- }
129
- catch (error) {
130
- // 忽略文件系统错误,继续处理
131
- console.warn(`文件访问错误: ${filename}`, error.message);
132
- }
117
+ delete this.entries[hash];
118
+ };
119
+ },
120
+ ws: router.ws("/server")
121
+ };
122
+ const root = path.join(import.meta.dirname, "../dist");
123
+ {
124
+ router.use((ctx, next) => {
125
+ if (ctx.request.originalUrl.startsWith("/api")) return next();
126
+ if (!ctx.path.startsWith("/vite/@fs/")) return next();
127
+ const filename = ctx.path.replace(`/vite/@fs/`, "");
128
+ if (!fs.existsSync(filename)) return next();
129
+ ctx.type = mime.getType(filename) || path.extname(filename);
130
+ ctx.body = fs.createReadStream(filename);
131
+ });
132
+ }
133
+ router.all("*all", async (ctx, next) => {
134
+ ctx.request.originalUrl.replace(base, "");
135
+ const name = ctx.path.slice(1);
136
+ const sendFile = (filename2) => {
137
+ try {
138
+ const stat = fs.statSync(filename2);
139
+ if (!stat.isFile()) {
140
+ ctx.status = 404;
141
+ return;
133
142
  }
134
- else {
135
- // 安全检查:路径不在允许范围内
136
- return (ctx.status = 403);
143
+ } catch (error) {
144
+ ctx.status = 404;
145
+ return;
146
+ }
147
+ ctx.type = path.extname(filename2);
148
+ ctx.type = mime.getType(filename2) || ctx.type;
149
+ return ctx.body = fs.createReadStream(filename2);
150
+ };
151
+ if (Object.keys(webServer.entries).includes(name)) {
152
+ return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
153
+ }
154
+ const filename = path.resolve(root, name);
155
+ if (filename.startsWith(root) || filename.includes("node_modules")) {
156
+ try {
157
+ if (fs.existsSync(filename)) {
158
+ const fileState = fs.statSync(filename);
159
+ if (fileState.isFile() && !fileState.isSocket() && !fileState.isFIFO()) {
160
+ return sendFile(filename);
161
+ }
137
162
  }
138
- // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
139
- // 这样前端路由可以正确处理
140
- const indexFile = path.resolve(root, "index.html");
141
- if (!isDev)
142
- return sendFile(indexFile);
143
- const template = fs.readFileSync(indexFile, "utf8");
144
- ctx.type = "html";
145
- ctx.body = await webServer.vite.transformIndexHtml(url, template);
146
- });
147
- // 定时通知客户端更新数据
148
- const dataUpdateInterval = setInterval(() => {
149
- notifyDataUpdate(webServer);
150
- }, 5000); // 每5秒通知一次更新
151
- setupWebSocket(webServer);
152
- // 插件卸载时清理定时器
153
- process.on("exit", () => {
154
- clearInterval(dataUpdateInterval);
155
- });
156
- register({
157
- name: "web",
158
- description: "web服务",
159
- async mounted() {
160
- return webServer;
161
- },
162
- async dispose(server) {
163
- await server.vite?.close();
164
- server.ws.close();
165
- },
166
- });
163
+ } catch (error) {
164
+ console.warn(`\u6587\u4EF6\u8BBF\u95EE\u9519\u8BEF: ${filename}`, error.message);
165
+ }
166
+ } else {
167
+ return ctx.status = 403;
168
+ }
169
+ const indexFile = path.resolve(root, "index.html");
170
+ return sendFile(indexFile);
171
+ });
172
+ const dataUpdateInterval = setInterval(() => {
173
+ notifyDataUpdate(webServer);
174
+ }, 5e3);
175
+ setupWebSocket(webServer);
176
+ process.on("exit", () => {
177
+ clearInterval(dataUpdateInterval);
178
+ });
179
+ register({
180
+ name: "web",
181
+ description: "web\u670D\u52A1",
182
+ async mounted() {
183
+ return webServer;
184
+ },
185
+ async dispose(server) {
186
+ await server.vite?.close();
187
+ server.ws.close();
188
+ }
189
+ });
167
190
  });
168
- //# sourceMappingURL=index.js.map
@@ -1,14 +1,18 @@
1
- import type { WebServer } from "./index.js";
1
+ import { WebServer } from './index.js';
2
+ import 'ws';
3
+ import 'vite';
4
+
2
5
  /**
3
6
  * 设置 WebSocket 连接处理
4
7
  */
5
- export declare function setupWebSocket(webServer: WebServer): void;
8
+ declare function setupWebSocket(webServer: WebServer): void;
6
9
  /**
7
10
  * 广播消息给所有连接的客户端
8
11
  */
9
- export declare function broadcastToAll(webServer: WebServer, message: any): void;
12
+ declare function broadcastToAll(webServer: WebServer, message: any): void;
10
13
  /**
11
14
  * 通知数据更新
12
15
  */
13
- export declare function notifyDataUpdate(webServer: WebServer): void;
14
- //# sourceMappingURL=websocket.d.ts.map
16
+ declare function notifyDataUpdate(webServer: WebServer): void;
17
+
18
+ export { broadcastToAll, notifyDataUpdate, setupWebSocket };
package/lib/websocket.js CHANGED
@@ -1,85 +1,78 @@
1
- import WebSocket from "ws";
2
- /**
3
- * 设置 WebSocket 连接处理
4
- */
5
- export function setupWebSocket(webServer) {
6
- webServer.ws.on("connection", (ws) => {
7
- // 发送初始数据同步
8
- ws.send(JSON.stringify({
9
- type: "sync",
10
- data: {
11
- key: "entries",
12
- value: Object.values(webServer.entries),
13
- },
14
- }));
15
- // 通知客户端进行数据初始化
16
- ws.send(JSON.stringify({
17
- type: "init-data",
18
- timestamp: Date.now(),
19
- }));
20
- // 处理客户端消息
21
- ws.on("message", async (data) => {
22
- try {
23
- const message = JSON.parse(data.toString());
24
- await handleWebSocketMessage(ws, message, webServer);
25
- }
26
- catch (error) {
27
- console.error("WebSocket 消息处理错误:", error);
28
- ws.send(JSON.stringify({
29
- error: "Invalid message format",
30
- }));
31
- }
32
- });
33
- ws.on("close", () => {
34
- // 连接关闭时的清理工作
35
- });
36
- ws.on("error", (error) => {
37
- console.error("WebSocket 错误:", error);
38
- });
1
+ import WebSocket from 'ws';
2
+
3
+ // src/websocket.ts
4
+ function setupWebSocket(webServer) {
5
+ webServer.ws.on("connection", (ws) => {
6
+ ws.send(
7
+ JSON.stringify({
8
+ type: "sync",
9
+ data: {
10
+ key: "entries",
11
+ value: Object.values(webServer.entries)
12
+ }
13
+ })
14
+ );
15
+ ws.send(
16
+ JSON.stringify({
17
+ type: "init-data",
18
+ timestamp: Date.now()
19
+ })
20
+ );
21
+ ws.on("message", async (data) => {
22
+ try {
23
+ const message = JSON.parse(data.toString());
24
+ await handleWebSocketMessage(ws, message, webServer);
25
+ } catch (error) {
26
+ console.error("WebSocket \u6D88\u606F\u5904\u7406\u9519\u8BEF:", error);
27
+ ws.send(
28
+ JSON.stringify({
29
+ error: "Invalid message format"
30
+ })
31
+ );
32
+ }
33
+ });
34
+ ws.on("close", () => {
35
+ });
36
+ ws.on("error", (error) => {
37
+ console.error("WebSocket \u9519\u8BEF:", error);
39
38
  });
39
+ });
40
40
  }
41
- /**
42
- * 处理 WebSocket 消息
43
- */
44
41
  async function handleWebSocketMessage(ws, message, webServer) {
45
- const { type, requestId } = message;
46
- switch (type) {
47
- case "ping":
48
- // 心跳检测
49
- ws.send(JSON.stringify({ type: "pong", requestId }));
50
- break;
51
- case "entries:get":
52
- // 获取所有入口文件
53
- ws.send(JSON.stringify({
54
- requestId,
55
- data: Object.values(webServer.entries),
56
- }));
57
- break;
58
- default:
59
- // 未知消息类型
60
- ws.send(JSON.stringify({
61
- requestId,
62
- error: `Unknown message type: ${type}`,
63
- }));
64
- }
42
+ const { type, requestId } = message;
43
+ switch (type) {
44
+ case "ping":
45
+ ws.send(JSON.stringify({ type: "pong", requestId }));
46
+ break;
47
+ case "entries:get":
48
+ ws.send(
49
+ JSON.stringify({
50
+ requestId,
51
+ data: Object.values(webServer.entries)
52
+ })
53
+ );
54
+ break;
55
+ default:
56
+ ws.send(
57
+ JSON.stringify({
58
+ requestId,
59
+ error: `Unknown message type: ${type}`
60
+ })
61
+ );
62
+ }
65
63
  }
66
- /**
67
- * 广播消息给所有连接的客户端
68
- */
69
- export function broadcastToAll(webServer, message) {
70
- for (const ws of webServer.ws.clients || []) {
71
- if (ws.readyState === WebSocket.OPEN) {
72
- ws.send(JSON.stringify(message));
73
- }
64
+ function broadcastToAll(webServer, message) {
65
+ for (const ws of webServer.ws.clients || []) {
66
+ if (ws.readyState === WebSocket.OPEN) {
67
+ ws.send(JSON.stringify(message));
74
68
  }
69
+ }
75
70
  }
76
- /**
77
- * 通知数据更新
78
- */
79
- export function notifyDataUpdate(webServer) {
80
- broadcastToAll(webServer, {
81
- type: "data-update",
82
- timestamp: Date.now(),
83
- });
71
+ function notifyDataUpdate(webServer) {
72
+ broadcastToAll(webServer, {
73
+ type: "data-update",
74
+ timestamp: Date.now()
75
+ });
84
76
  }
85
- //# sourceMappingURL=websocket.js.map
77
+
78
+ export { broadcastToAll, notifyDataUpdate, setupWebSocket };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/console",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "Zhin 控制台",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -33,32 +33,32 @@
33
33
  "./node.tsconfig.json": "./node.tsconfig.json"
34
34
  },
35
35
  "dependencies": {
36
- "react": "19.2.0",
37
- "react-dom": "19.2.0",
38
- "mime": "^4.1.0",
39
- "@vitejs/plugin-react": "^4.3.4",
40
- "@tailwindcss/vite": "4.1.14",
41
- "radix-ui": "^1.4.3",
42
36
  "@radix-ui/themes": "^3.2.1",
37
+ "@reduxjs/toolkit": "^2.9.0",
43
38
  "@tailwindcss/postcss": "^4.1.11",
44
- "tailwindcss": "latest",
39
+ "@tailwindcss/vite": "4.1.14",
40
+ "@vitejs/plugin-react": "^4.3.4",
41
+ "clsx": "^2.1.1",
45
42
  "koa-connect": "^2.1.0",
46
- "@reduxjs/toolkit": "^2.9.0",
47
43
  "lucide-react": "^0.469.0",
48
- "clsx": "^2.1.1",
44
+ "mime": "^4.1.0",
45
+ "radix-ui": "^1.4.3",
46
+ "react": "19.2.0",
47
+ "react-dom": "19.2.0",
49
48
  "react-redux": "9.2.0",
50
49
  "react-router": "7.0.0",
51
50
  "redux-persist": "6.0.0",
52
51
  "tailwind-merge": "^3.3.1",
53
- "ws": "^8.18.3",
54
- "vite": "^7.0.6"
52
+ "tailwindcss": "latest",
53
+ "vite": "^7.0.6",
54
+ "ws": "^8.18.3"
55
55
  },
56
56
  "peerDependencies": {
57
57
  "@types/ws": "^8.18.1",
58
58
  "@zhin.js/client": "^1.0.5",
59
+ "@zhin.js/core": "^1.0.17",
59
60
  "@zhin.js/http": "^1.0.7",
60
- "@zhin.js/types": "^1.0.5",
61
- "@zhin.js/core": "^1.0.14"
61
+ "@zhin.js/types": "^1.0.5"
62
62
  },
63
63
  "peerDependenciesMeta": {
64
64
  "@zhin.js/types": {
@@ -73,10 +73,15 @@
73
73
  "client",
74
74
  "CHANGELOG.md"
75
75
  ],
76
+ "devDependencies": {
77
+ "tsup": "^8.5.1"
78
+ },
76
79
  "scripts": {
77
80
  "build": "pnpm build:node && pnpm build:client",
81
+ "build:prod": "NODE_ENV=production pnpm build",
82
+ "build:dev": "NODE_ENV=development pnpm build",
78
83
  "build:client": "node scripts/client.js",
79
84
  "clean": "rm -rf lib dist",
80
- "build:node": "tsc"
85
+ "build:node": "tsup"
81
86
  }
82
87
  }
package/lib/bin.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/lib/bin.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,iBAAiB;gBACjB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3B,MAAM;QACV,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAK5B,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,UAAe,iBAoFrE"}
package/lib/build.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
package/lib/dev.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAwC,MAAM,MAAM,CAAC;AAK3E,MAAM,WAAW,gBAAgB;IAC/B,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,aAAa,CAAC,CA8DxB"}
package/lib/dev.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,sBAAsB,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,KAAK,MAAM,sBAAsB,CAAC;AACzC,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AAWxB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAyB;IAEzB,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAEjE,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1B,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,MAAM,YAAY,CAAC;QAC9B,IAAI;QACJ,IAAI;QACJ,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC;QACjC,MAAM,EAAE;YACN,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,EAAE,EAAE;gBACF,MAAM,EAAE,KAAK;gBACb,oBAAoB;gBACpB,KAAK,EAAE;oBACL,UAAU;oBACV,IAAI;oBACJ,sBAAsB,CAAC,IAAI,CAAC;oBAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;oBAC3C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC;iBACnC;gBACD,aAAa;gBACb,IAAI,EAAE;oBACJ,YAAY;oBACZ,2BAA2B;oBAC3B,aAAa;oBACb,WAAW;oBACX,gBAAgB;oBAChB,UAAU;iBACX;aACF;SACF;QACD,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,OAAO;gBACP,WAAW;gBACX,MAAM;gBACN,gBAAgB;gBAChB,kBAAkB;gBAClB,cAAc;gBACd,aAAa;gBACb,eAAe;aAChB;YACD,KAAK,EAAE;gBACL,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,iCAAiC,CAAC;gBACxE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC;aACzC;SACF;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;SAChC;QACD,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,KAAK,EAAE,IAAI,GAAG,aAAa;aAC5B;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAQ,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAQrC,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,aAAa;QACrB,GAAG,EAAE,SAAS,CAAC;KAChB;CACF;AACD,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN;IACE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AACN,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC"}
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,QA4ClD;AAuCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAMhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,QAKpD"}