ventiws 1.0.0-alpha.16 β†’ 1.0.0-beta.1

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 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-alpha.16`.** The surface may change between alpha
16
- releases. What "alpha" means here is bounded: the `ws` compatibility
15
+ **ventiws is at `1.0.0-beta.1`.** 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.1";
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
- emitEvent(state, "error", createError(refusal.code, refusal.message, refusal.ctor));
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.1";
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
- emitEvent(state, "error", createError(refusal.code, refusal.message, refusal.ctor));
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) => {
@@ -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
@@ -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-alpha.16",
3
+ "version": "1.0.0-beta.1",
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-alpha.16",
34
- "@ventiws/binding-darwin-x64": "1.0.0-alpha.16",
35
- "@ventiws/binding-linux-arm64-gnu": "1.0.0-alpha.16",
36
- "@ventiws/binding-linux-x64-gnu": "1.0.0-alpha.16",
37
- "@ventiws/binding-linux-x64-musl": "1.0.0-alpha.16"
37
+ "@ventiws/binding-darwin-arm64": "1.0.0-beta.1",
38
+ "@ventiws/binding-darwin-x64": "1.0.0-beta.1",
39
+ "@ventiws/binding-linux-arm64-gnu": "1.0.0-beta.1",
40
+ "@ventiws/binding-linux-x64-gnu": "1.0.0-beta.1",
41
+ "@ventiws/binding-linux-x64-musl": "1.0.0-beta.1"
38
42
  }
39
43
  }