ventiws 1.0.0-alpha.16 β 1.0.0-beta.2
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/README.md +19 -2
- package/dist/index.cjs +45 -1
- package/dist/index.mjs +45 -1
- package/dist/logging.cjs +57 -0
- package/dist/logging.d.cts +7 -0
- package/dist/logging.d.mts +7 -0
- package/dist/logging.mjs +51 -0
- package/package.json +10 -6
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@ observable behaviour rather than its source. ventiws is not affiliated with the
|
|
|
12
12
|
as the pinned contract, credited in
|
|
13
13
|
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
14
14
|
|
|
15
|
-
**ventiws is at `1.0.0-
|
|
16
|
-
releases. What "
|
|
15
|
+
**ventiws is at `1.0.0-beta.2`.** The surface may change between beta
|
|
16
|
+
releases. What "beta" means here is bounded: the `ws` compatibility
|
|
17
17
|
contract is tracked row by row in
|
|
18
18
|
[COMPATIBILITY.md](COMPATIBILITY.md), and the four places ventiws knowingly
|
|
19
19
|
differs from `ws` are listed in [CHANGELOG.md](CHANGELOG.md) under "Known
|
|
@@ -94,6 +94,22 @@ Both halves run against a real `ws` peer in this repository's suites, and the
|
|
|
94
94
|
constructors are plain functions returning state records: no `class`, no `this`,
|
|
95
95
|
no prototype.
|
|
96
96
|
|
|
97
|
+
### Dev logger
|
|
98
|
+
|
|
99
|
+
ventiws prints lifecycle records as they happen: the splash when a server starts
|
|
100
|
+
listening, then open, close, and error records for every connection, with no
|
|
101
|
+
callbacks to subscribe. It is a zero-dependency ANSI module outside the `ws`
|
|
102
|
+
surface, on by default, and silenced with one switch.
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { setLoggerEnabled } from "ventiws/logging";
|
|
106
|
+
|
|
107
|
+
setLoggerEnabled(false); // VENTIWS_LOG=0 does the same at load
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The record format, every recorded moment, and the manual API are in
|
|
111
|
+
[docs/logging.md](docs/logging.md).
|
|
112
|
+
|
|
97
113
|
## Status
|
|
98
114
|
|
|
99
115
|
Option defaults match `ws`: `maxPayload` 100 MiB, `maxFragments` 16384, and
|
|
@@ -152,6 +168,7 @@ pnpm format:check
|
|
|
152
168
|
- [CODEBASE.md](CODEBASE.md): repository layout, the two routes, the boundary, and the compiled capacities.
|
|
153
169
|
- [CODING_CONVENTION.md](CODING_CONVENTION.md): TypeScript and Zig style, the anti-OOP rules, and the module budget.
|
|
154
170
|
- [docs/migrating.md](docs/migrating.md): moving an existing `ws` application over.
|
|
171
|
+
- [docs/logging.md](docs/logging.md): the opt-in dev logger and startup splash.
|
|
155
172
|
- [CONTRIBUTE.md](CONTRIBUTE.md): environment setup, the script contract, and how to release.
|
|
156
173
|
|
|
157
174
|
MIT. See [LICENSE](LICENSE). `ws` is copyright Einar Otto Stangvik, Arnout
|
package/dist/index.cjs
CHANGED
|
@@ -2,6 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
+
const require_logging = require("./logging.cjs");
|
|
5
6
|
let node_http = require("node:http");
|
|
6
7
|
let node_fs = require("node:fs");
|
|
7
8
|
let node_module = require("node:module");
|
|
@@ -383,10 +384,42 @@ function trackClient(state, socket) {
|
|
|
383
384
|
});
|
|
384
385
|
}
|
|
385
386
|
//#endregion
|
|
387
|
+
//#region package.json
|
|
388
|
+
var version = "1.0.0-beta.2";
|
|
389
|
+
//#endregion
|
|
390
|
+
//#region src/logging/lifecycle.ts
|
|
391
|
+
const CONTROL = /\p{Cc}/gu;
|
|
392
|
+
function sideOf(state) {
|
|
393
|
+
return state.isServer ? "connection" : "client";
|
|
394
|
+
}
|
|
395
|
+
function logServerListening(port) {
|
|
396
|
+
require_logging.ready(version, Math.round(performance.now()), port);
|
|
397
|
+
}
|
|
398
|
+
function logServerPath(path) {
|
|
399
|
+
require_logging.info("server", `listening on ${path}`);
|
|
400
|
+
}
|
|
401
|
+
function logServerClosed() {
|
|
402
|
+
require_logging.info("server", "closed");
|
|
403
|
+
}
|
|
404
|
+
function logServerError(error) {
|
|
405
|
+
require_logging.fatal("server", error.message);
|
|
406
|
+
}
|
|
407
|
+
function logSocketOpen(state) {
|
|
408
|
+
require_logging.info(sideOf(state), "open");
|
|
409
|
+
}
|
|
410
|
+
function logSocketClose(state, code, reason) {
|
|
411
|
+
const text = reason.length === 0 ? "" : ` ${reason.toString("utf8").replace(CONTROL, "?")}`;
|
|
412
|
+
require_logging.warn(sideOf(state), `closed ${code}${text}`);
|
|
413
|
+
}
|
|
414
|
+
function logSocketError(state, error) {
|
|
415
|
+
require_logging.fatal(sideOf(state), error.message);
|
|
416
|
+
}
|
|
417
|
+
//#endregion
|
|
386
418
|
//#region src/compat/server/close.ts
|
|
387
419
|
function emitClose(state) {
|
|
388
420
|
if (state.lifecycle === "closed") return;
|
|
389
421
|
state.lifecycle = "closed";
|
|
422
|
+
logServerClosed();
|
|
390
423
|
emitEvent(state, "close");
|
|
391
424
|
}
|
|
392
425
|
function emitCloseAgain(state) {
|
|
@@ -1121,6 +1154,7 @@ function finishConnection(state, code, reason) {
|
|
|
1121
1154
|
state.closeCode = code;
|
|
1122
1155
|
state.closeReason = reason;
|
|
1123
1156
|
state.pendingInput = [];
|
|
1157
|
+
logSocketClose(state, code, reason);
|
|
1124
1158
|
emitEvent(state, "close", code, reason);
|
|
1125
1159
|
}
|
|
1126
1160
|
function failConnection(state, error) {
|
|
@@ -1128,6 +1162,7 @@ function failConnection(state, error) {
|
|
|
1128
1162
|
if (!state.errorEmitted) {
|
|
1129
1163
|
state.errorEmitted = true;
|
|
1130
1164
|
state.readyState = 2;
|
|
1165
|
+
logSocketError(state, error);
|
|
1131
1166
|
try {
|
|
1132
1167
|
emitEvent(state, "error", error);
|
|
1133
1168
|
} finally {
|
|
@@ -1141,6 +1176,7 @@ function reportWithoutClosing(state, error) {
|
|
|
1141
1176
|
if (state.errorEmitted) return;
|
|
1142
1177
|
if (state.readyState === 3) return;
|
|
1143
1178
|
state.errorEmitted = true;
|
|
1179
|
+
logSocketError(state, error);
|
|
1144
1180
|
emitEvent(state, "error", error);
|
|
1145
1181
|
}
|
|
1146
1182
|
function closeConnection(state, code, reason) {
|
|
@@ -1199,7 +1235,9 @@ function refuseFramed(state, refusal) {
|
|
|
1199
1235
|
try {
|
|
1200
1236
|
if (!state.errorEmitted) {
|
|
1201
1237
|
state.errorEmitted = true;
|
|
1202
|
-
|
|
1238
|
+
const error = createError(refusal.code, refusal.message, refusal.ctor);
|
|
1239
|
+
logSocketError(state, error);
|
|
1240
|
+
emitEvent(state, "error", error);
|
|
1203
1241
|
}
|
|
1204
1242
|
} finally {
|
|
1205
1243
|
finishConnection(state, refusal.closeCode, Buffer.from(refusal.reason, "utf8"));
|
|
@@ -1487,6 +1525,7 @@ const EMPTY = Buffer.alloc(0);
|
|
|
1487
1525
|
function failTransport(state, error) {
|
|
1488
1526
|
if (state.readyState === 3) return;
|
|
1489
1527
|
state.readyState = 2;
|
|
1528
|
+
logSocketError(state, error);
|
|
1490
1529
|
emitEvent(state, "error", error);
|
|
1491
1530
|
}
|
|
1492
1531
|
function terminateConnection(state) {
|
|
@@ -1538,6 +1577,7 @@ function attachSocket(socket, transport, role, pending) {
|
|
|
1538
1577
|
function openSocket(state) {
|
|
1539
1578
|
if (state.readyState === 1) return;
|
|
1540
1579
|
state.readyState = 1;
|
|
1580
|
+
logSocketOpen(state);
|
|
1541
1581
|
emitEvent(state, "open");
|
|
1542
1582
|
}
|
|
1543
1583
|
function asCodedError(error) {
|
|
@@ -1925,9 +1965,13 @@ function wireServer(state) {
|
|
|
1925
1965
|
if (httpServer === null) return;
|
|
1926
1966
|
const handlers = {
|
|
1927
1967
|
onListening: () => {
|
|
1968
|
+
const address = state.server?.address();
|
|
1969
|
+
if (typeof address === "string") logServerPath(address);
|
|
1970
|
+
else logServerListening(typeof address === "object" && address !== null ? address.port : 0);
|
|
1928
1971
|
emitEvent(state, "listening");
|
|
1929
1972
|
},
|
|
1930
1973
|
onError: (error) => {
|
|
1974
|
+
logServerError(error);
|
|
1931
1975
|
emitEvent(state, "error", error);
|
|
1932
1976
|
},
|
|
1933
1977
|
onUpgrade: (request, socket, head) => {
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { fatal, info, ready, warn } from "./logging.mjs";
|
|
1
2
|
import { createRequire } from "node:module";
|
|
2
3
|
import { STATUS_CODES, createServer, request } from "node:http";
|
|
3
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
@@ -379,10 +380,42 @@ function trackClient(state, socket) {
|
|
|
379
380
|
});
|
|
380
381
|
}
|
|
381
382
|
//#endregion
|
|
383
|
+
//#region package.json
|
|
384
|
+
var version = "1.0.0-beta.2";
|
|
385
|
+
//#endregion
|
|
386
|
+
//#region src/logging/lifecycle.ts
|
|
387
|
+
const CONTROL = /\p{Cc}/gu;
|
|
388
|
+
function sideOf(state) {
|
|
389
|
+
return state.isServer ? "connection" : "client";
|
|
390
|
+
}
|
|
391
|
+
function logServerListening(port) {
|
|
392
|
+
ready(version, Math.round(performance.now()), port);
|
|
393
|
+
}
|
|
394
|
+
function logServerPath(path) {
|
|
395
|
+
info("server", `listening on ${path}`);
|
|
396
|
+
}
|
|
397
|
+
function logServerClosed() {
|
|
398
|
+
info("server", "closed");
|
|
399
|
+
}
|
|
400
|
+
function logServerError(error) {
|
|
401
|
+
fatal("server", error.message);
|
|
402
|
+
}
|
|
403
|
+
function logSocketOpen(state) {
|
|
404
|
+
info(sideOf(state), "open");
|
|
405
|
+
}
|
|
406
|
+
function logSocketClose(state, code, reason) {
|
|
407
|
+
const text = reason.length === 0 ? "" : ` ${reason.toString("utf8").replace(CONTROL, "?")}`;
|
|
408
|
+
warn(sideOf(state), `closed ${code}${text}`);
|
|
409
|
+
}
|
|
410
|
+
function logSocketError(state, error) {
|
|
411
|
+
fatal(sideOf(state), error.message);
|
|
412
|
+
}
|
|
413
|
+
//#endregion
|
|
382
414
|
//#region src/compat/server/close.ts
|
|
383
415
|
function emitClose(state) {
|
|
384
416
|
if (state.lifecycle === "closed") return;
|
|
385
417
|
state.lifecycle = "closed";
|
|
418
|
+
logServerClosed();
|
|
386
419
|
emitEvent(state, "close");
|
|
387
420
|
}
|
|
388
421
|
function emitCloseAgain(state) {
|
|
@@ -1117,6 +1150,7 @@ function finishConnection(state, code, reason) {
|
|
|
1117
1150
|
state.closeCode = code;
|
|
1118
1151
|
state.closeReason = reason;
|
|
1119
1152
|
state.pendingInput = [];
|
|
1153
|
+
logSocketClose(state, code, reason);
|
|
1120
1154
|
emitEvent(state, "close", code, reason);
|
|
1121
1155
|
}
|
|
1122
1156
|
function failConnection(state, error) {
|
|
@@ -1124,6 +1158,7 @@ function failConnection(state, error) {
|
|
|
1124
1158
|
if (!state.errorEmitted) {
|
|
1125
1159
|
state.errorEmitted = true;
|
|
1126
1160
|
state.readyState = 2;
|
|
1161
|
+
logSocketError(state, error);
|
|
1127
1162
|
try {
|
|
1128
1163
|
emitEvent(state, "error", error);
|
|
1129
1164
|
} finally {
|
|
@@ -1137,6 +1172,7 @@ function reportWithoutClosing(state, error) {
|
|
|
1137
1172
|
if (state.errorEmitted) return;
|
|
1138
1173
|
if (state.readyState === 3) return;
|
|
1139
1174
|
state.errorEmitted = true;
|
|
1175
|
+
logSocketError(state, error);
|
|
1140
1176
|
emitEvent(state, "error", error);
|
|
1141
1177
|
}
|
|
1142
1178
|
function closeConnection(state, code, reason) {
|
|
@@ -1195,7 +1231,9 @@ function refuseFramed(state, refusal) {
|
|
|
1195
1231
|
try {
|
|
1196
1232
|
if (!state.errorEmitted) {
|
|
1197
1233
|
state.errorEmitted = true;
|
|
1198
|
-
|
|
1234
|
+
const error = createError(refusal.code, refusal.message, refusal.ctor);
|
|
1235
|
+
logSocketError(state, error);
|
|
1236
|
+
emitEvent(state, "error", error);
|
|
1199
1237
|
}
|
|
1200
1238
|
} finally {
|
|
1201
1239
|
finishConnection(state, refusal.closeCode, Buffer.from(refusal.reason, "utf8"));
|
|
@@ -1483,6 +1521,7 @@ const EMPTY = Buffer.alloc(0);
|
|
|
1483
1521
|
function failTransport(state, error) {
|
|
1484
1522
|
if (state.readyState === 3) return;
|
|
1485
1523
|
state.readyState = 2;
|
|
1524
|
+
logSocketError(state, error);
|
|
1486
1525
|
emitEvent(state, "error", error);
|
|
1487
1526
|
}
|
|
1488
1527
|
function terminateConnection(state) {
|
|
@@ -1534,6 +1573,7 @@ function attachSocket(socket, transport, role, pending) {
|
|
|
1534
1573
|
function openSocket(state) {
|
|
1535
1574
|
if (state.readyState === 1) return;
|
|
1536
1575
|
state.readyState = 1;
|
|
1576
|
+
logSocketOpen(state);
|
|
1537
1577
|
emitEvent(state, "open");
|
|
1538
1578
|
}
|
|
1539
1579
|
function asCodedError(error) {
|
|
@@ -1921,9 +1961,13 @@ function wireServer(state) {
|
|
|
1921
1961
|
if (httpServer === null) return;
|
|
1922
1962
|
const handlers = {
|
|
1923
1963
|
onListening: () => {
|
|
1964
|
+
const address = state.server?.address();
|
|
1965
|
+
if (typeof address === "string") logServerPath(address);
|
|
1966
|
+
else logServerListening(typeof address === "object" && address !== null ? address.port : 0);
|
|
1924
1967
|
emitEvent(state, "listening");
|
|
1925
1968
|
},
|
|
1926
1969
|
onError: (error) => {
|
|
1970
|
+
logServerError(error);
|
|
1927
1971
|
emitEvent(state, "error", error);
|
|
1928
1972
|
},
|
|
1929
1973
|
onUpgrade: (request, socket, head) => {
|
package/dist/logging.cjs
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region src/logging/logger.ts
|
|
3
|
+
const RESET = "\x1B[0m";
|
|
4
|
+
const BOLD = "\x1B[1m";
|
|
5
|
+
const DIM = "\x1B[2m";
|
|
6
|
+
const RED = "\x1B[31m";
|
|
7
|
+
const GREEN = "\x1B[32m";
|
|
8
|
+
const YELLOW = "\x1B[33m";
|
|
9
|
+
const CYAN = "\x1B[36m";
|
|
10
|
+
const SPLASH = `βββ βββββββββββββββ ββββββββββββββββββ βββββββββββ
|
|
11
|
+
βββ ββββββββββββββββ ββββββββββββββββββ βββββββββββ
|
|
12
|
+
βββ βββββββββ ββββββ βββ βββ ββββββ ββ βββββββββββ
|
|
13
|
+
ββββ ββββββββββ ββββββββββ βββ βββββββββββββββββββββ
|
|
14
|
+
βββββββ βββββββββββ ββββββ βββ βββββββββββββββββββββ
|
|
15
|
+
βββββ βββββββββββ βββββ βββ βββ ββββββββ ββββββββ`;
|
|
16
|
+
let isEnabled = process.env["VENTIWS_LOG"] !== "0";
|
|
17
|
+
function setLoggerEnabled(enabled) {
|
|
18
|
+
isEnabled = enabled;
|
|
19
|
+
}
|
|
20
|
+
function time() {
|
|
21
|
+
return (/* @__PURE__ */ new Date()).toTimeString().slice(0, 8);
|
|
22
|
+
}
|
|
23
|
+
function emit(line) {
|
|
24
|
+
process.stdout.write(`${line}\n`);
|
|
25
|
+
}
|
|
26
|
+
function record(color, command, status) {
|
|
27
|
+
emit(`${DIM}${time()}${RESET} | ${color}${command}${RESET} : ${status}`);
|
|
28
|
+
}
|
|
29
|
+
function info(command, status) {
|
|
30
|
+
if (!isEnabled) return;
|
|
31
|
+
record(CYAN, command, status);
|
|
32
|
+
}
|
|
33
|
+
function warn(command, status) {
|
|
34
|
+
if (!isEnabled) return;
|
|
35
|
+
record(YELLOW, command, status);
|
|
36
|
+
}
|
|
37
|
+
function fatal(command, status) {
|
|
38
|
+
if (!isEnabled) return;
|
|
39
|
+
record(RED, command, status);
|
|
40
|
+
}
|
|
41
|
+
function ready(version, timeMs, port) {
|
|
42
|
+
if (!isEnabled) return;
|
|
43
|
+
emit(`${CYAN}${SPLASH}${RESET}`);
|
|
44
|
+
emit("");
|
|
45
|
+
emit(`ventiws ${BOLD}${version}${RESET} ready in ${timeMs}`);
|
|
46
|
+
emit("");
|
|
47
|
+
emit(`${GREEN}\u279C${RESET} Local: localhost:${port}/`);
|
|
48
|
+
emit("");
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.fatal = fatal;
|
|
52
|
+
exports.info = info;
|
|
53
|
+
exports.ready = ready;
|
|
54
|
+
exports.setLoggerEnabled = setLoggerEnabled;
|
|
55
|
+
exports.warn = warn;
|
|
56
|
+
|
|
57
|
+
module.exports = Object.assign(module.exports.default ?? module.exports, module.exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/logging/logger.d.ts
|
|
2
|
+
export declare function setLoggerEnabled(enabled: boolean): void;
|
|
3
|
+
export declare function info(command: string, status: string): void;
|
|
4
|
+
export declare function warn(command: string, status: string): void;
|
|
5
|
+
export declare function fatal(command: string, status: string): void;
|
|
6
|
+
export declare function ready(version: string, timeMs: number, port: number): void;
|
|
7
|
+
//#endregion
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/logging/logger.d.ts
|
|
2
|
+
export declare function setLoggerEnabled(enabled: boolean): void;
|
|
3
|
+
export declare function info(command: string, status: string): void;
|
|
4
|
+
export declare function warn(command: string, status: string): void;
|
|
5
|
+
export declare function fatal(command: string, status: string): void;
|
|
6
|
+
export declare function ready(version: string, timeMs: number, port: number): void;
|
|
7
|
+
//#endregion
|
package/dist/logging.mjs
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/logging/logger.ts
|
|
2
|
+
const RESET = "\x1B[0m";
|
|
3
|
+
const BOLD = "\x1B[1m";
|
|
4
|
+
const DIM = "\x1B[2m";
|
|
5
|
+
const RED = "\x1B[31m";
|
|
6
|
+
const GREEN = "\x1B[32m";
|
|
7
|
+
const YELLOW = "\x1B[33m";
|
|
8
|
+
const CYAN = "\x1B[36m";
|
|
9
|
+
const SPLASH = `βββ βββββββββββββββ ββββββββββββββββββ βββββββββββ
|
|
10
|
+
βββ ββββββββββββββββ ββββββββββββββββββ βββββββββββ
|
|
11
|
+
βββ βββββββββ ββββββ βββ βββ ββββββ ββ βββββββββββ
|
|
12
|
+
ββββ ββββββββββ ββββββββββ βββ βββββββββββββββββββββ
|
|
13
|
+
βββββββ βββββββββββ ββββββ βββ βββββββββββββββββββββ
|
|
14
|
+
βββββ βββββββββββ βββββ βββ βββ ββββββββ ββββββββ`;
|
|
15
|
+
let isEnabled = process.env["VENTIWS_LOG"] !== "0";
|
|
16
|
+
function setLoggerEnabled(enabled) {
|
|
17
|
+
isEnabled = enabled;
|
|
18
|
+
}
|
|
19
|
+
function time() {
|
|
20
|
+
return (/* @__PURE__ */ new Date()).toTimeString().slice(0, 8);
|
|
21
|
+
}
|
|
22
|
+
function emit(line) {
|
|
23
|
+
process.stdout.write(`${line}\n`);
|
|
24
|
+
}
|
|
25
|
+
function record(color, command, status) {
|
|
26
|
+
emit(`${DIM}${time()}${RESET} | ${color}${command}${RESET} : ${status}`);
|
|
27
|
+
}
|
|
28
|
+
function info(command, status) {
|
|
29
|
+
if (!isEnabled) return;
|
|
30
|
+
record(CYAN, command, status);
|
|
31
|
+
}
|
|
32
|
+
function warn(command, status) {
|
|
33
|
+
if (!isEnabled) return;
|
|
34
|
+
record(YELLOW, command, status);
|
|
35
|
+
}
|
|
36
|
+
function fatal(command, status) {
|
|
37
|
+
if (!isEnabled) return;
|
|
38
|
+
record(RED, command, status);
|
|
39
|
+
}
|
|
40
|
+
function ready(version, timeMs, port) {
|
|
41
|
+
if (!isEnabled) return;
|
|
42
|
+
emit(`${CYAN}${SPLASH}${RESET}`);
|
|
43
|
+
emit("");
|
|
44
|
+
emit(`ventiws ${BOLD}${version}${RESET} ready in ${timeMs}`);
|
|
45
|
+
emit("");
|
|
46
|
+
emit(`${GREEN}\u279C${RESET} Local: localhost:${port}/`);
|
|
47
|
+
emit("");
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { fatal, info, ready, setLoggerEnabled, warn };
|
|
51
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ventiws",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-beta.2",
|
|
4
4
|
"description": "A drop-in replacement for ws for Node.js, built on the first-party Β΅WebZockets Zig engine via napi-zig.",
|
|
5
5
|
"homepage": "https://github.com/farbenbuilds/ventiws#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -24,16 +24,20 @@
|
|
|
24
24
|
"import": "./dist/index.mjs",
|
|
25
25
|
"require": "./dist/index.cjs"
|
|
26
26
|
},
|
|
27
|
+
"./logging": {
|
|
28
|
+
"import": "./dist/logging.mjs",
|
|
29
|
+
"require": "./dist/logging.cjs"
|
|
30
|
+
},
|
|
27
31
|
"./package.json": "./package.json"
|
|
28
32
|
},
|
|
29
33
|
"engines": {
|
|
30
34
|
"node": ">=22.12.0"
|
|
31
35
|
},
|
|
32
36
|
"optionalDependencies": {
|
|
33
|
-
"@ventiws/binding-darwin-arm64": "1.0.0-
|
|
34
|
-
"@ventiws/binding-darwin-x64": "1.0.0-
|
|
35
|
-
"@ventiws/binding-linux-arm64-gnu": "1.0.0-
|
|
36
|
-
"@ventiws/binding-linux-x64-gnu": "1.0.0-
|
|
37
|
-
"@ventiws/binding-linux-x64-musl": "1.0.0-
|
|
37
|
+
"@ventiws/binding-darwin-arm64": "1.0.0-beta.2",
|
|
38
|
+
"@ventiws/binding-darwin-x64": "1.0.0-beta.2",
|
|
39
|
+
"@ventiws/binding-linux-arm64-gnu": "1.0.0-beta.2",
|
|
40
|
+
"@ventiws/binding-linux-x64-gnu": "1.0.0-beta.2",
|
|
41
|
+
"@ventiws/binding-linux-x64-musl": "1.0.0-beta.2"
|
|
38
42
|
}
|
|
39
43
|
}
|