From 663a2a9c5d8fdc7d66f69cff4063a9fc3a33c086 Mon Sep 17 00:00:00 2001 From: Sam Lanning Date: Tue, 10 Feb 2026 23:27:55 +0800 Subject: [PATCH 1/3] Allow simpler logger implementations --- .changeset/new-ads-smell.md | 5 ++ package-lock.json | 147 +----------------------------------- package.json | 9 --- src/tcnet.ts | 19 +++-- 4 files changed, 20 insertions(+), 160 deletions(-) create mode 100644 .changeset/new-ads-smell.md diff --git a/.changeset/new-ads-smell.md b/.changeset/new-ads-smell.md new file mode 100644 index 0000000..1526800 --- /dev/null +++ b/.changeset/new-ads-smell.md @@ -0,0 +1,5 @@ +--- +"@s0/node-tcnet": patch +--- + +Allow simpler logger implementations diff --git a/package-lock.json b/package-lock.json index 0377756..b71d6c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@s0/node-tcnet", - "version": "0.4.0", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@s0/node-tcnet", - "version": "0.4.0", + "version": "0.5.0", "license": "MIT", "dependencies": { "broadcast-address": "^1.0.2" @@ -18,20 +18,11 @@ "@typescript-eslint/parser": "^4.22.1", "check-export-map": "^1.3.1", "eslint": "^7.30.0", - "pino": "^9.5.0", "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "tsup": "^8.3.5", "tsx": "^4.19.2", "typescript": "^4.2.4" - }, - "peerDependencies": { - "pino": "^9.5.0" - }, - "peerDependenciesMeta": { - "pino": { - "optional": true - } } }, "node_modules/@babel/code-frame": { @@ -1693,16 +1684,6 @@ "node": ">=8" } }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2356,16 +2337,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", @@ -3090,16 +3061,6 @@ "node": ">=0.10.0" } }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3332,46 +3293,6 @@ "node": ">=6" } }, - "node_modules/pino": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", - "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", - "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^4.0.1", - "thread-stream": "^3.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", - "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "split2": "^4.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", - "dev": true, - "license": "MIT" - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -3495,13 +3416,6 @@ "node": ">= 4" } }, - "node_modules/process-warning": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", - "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", - "dev": true, - "license": "MIT" - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -3557,13 +3471,6 @@ } ] }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "dev": true, - "license": "MIT" - }, "node_modules/read-yaml-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", @@ -3594,16 +3501,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -3739,16 +3636,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -3822,16 +3709,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/sonic-boom": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", - "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", - "dev": true, - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, "node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -3904,16 +3781,6 @@ "which": "bin/which" } }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -4203,16 +4070,6 @@ "node": ">=0.8" } }, - "node_modules/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "real-require": "^0.2.0" - } - }, "node_modules/tinyexec": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", diff --git a/package.json b/package.json index e9589fd..174ed44 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "@typescript-eslint/parser": "^4.22.1", "check-export-map": "^1.3.1", "eslint": "^7.30.0", - "pino": "^9.5.0", "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "tsup": "^8.3.5", @@ -46,14 +45,6 @@ "dependencies": { "broadcast-address": "^1.0.2" }, - "peerDependencies": { - "pino": "^9.5.0" - }, - "peerDependenciesMeta": { - "pino": { - "optional": true - } - }, "publishConfig": { "access": "public", "provenance": true diff --git a/src/tcnet.ts b/src/tcnet.ts index fe30d79..6024fd5 100644 --- a/src/tcnet.ts +++ b/src/tcnet.ts @@ -1,6 +1,5 @@ import { Socket, createSocket, RemoteInfo } from "dgram"; import EventEmitter = require("events"); -import type { Logger } from "pino"; import * as nw from "./network"; import { interfaceAddress } from "./utils"; @@ -9,8 +8,13 @@ const TCNET_TIMESTAMP_PORT = 60001; type STORED_RESOLVE = (value?: nw.TCNetDataPacket | PromiseLike | undefined) => void; +export type TCNetLogger = { + error: (error: Error) => void; + debug: (message: string) => void; +}; + export class TCNetConfiguration { - logger: Logger | null = null; + logger: TCNetLogger | null = null; unicastPort = 65032; applicationCode = 0xffff; nodeId = Math.floor(Math.random() * 0xffff); @@ -63,7 +67,7 @@ export class TCNetClient extends EventEmitter { this.config.brodcastListeningAddress ||= this.config.broadcastAddress; } - public get log(): Logger | null { + public get log(): TCNetLogger | null { return this.config.logger; } @@ -118,7 +122,9 @@ export class TCNetClient extends EventEmitter { promisifyBasicFunction(() => this.unicastSocket.close()), ]) .catch((err) => { - this.log?.error(err); + const error = new Error("Error disconnecting from TCNet"); + error.cause = err instanceof Error ? err : new Error(String(err)); + this.log?.error(error); }) .then(() => void 0); } @@ -156,8 +162,9 @@ export class TCNetClient extends EventEmitter { if (packet.length() !== -1 && packet.length() !== header.buffer.length) { this.log?.debug( - `Packet has the wrong length (expected: ${packet.length()}, received: ${header.buffer.length})`, - header, + `${ + nw.TCNetMessageType[header.messageType] + } packet has the wrong length (expected: ${packet.length()}, received: ${header.buffer.length})`, ); return null; } From a3eec0b8d717e85f5556940228fada3a69793b3c Mon Sep 17 00:00:00 2001 From: Sam Lanning Date: Tue, 10 Feb 2026 23:28:13 +0800 Subject: [PATCH 2/3] Run changeset version --- .changeset/new-ads-smell.md | 5 ----- CHANGELOG.md | 6 ++++++ package.json | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 .changeset/new-ads-smell.md diff --git a/.changeset/new-ads-smell.md b/.changeset/new-ads-smell.md deleted file mode 100644 index 1526800..0000000 --- a/.changeset/new-ads-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@s0/node-tcnet": patch ---- - -Allow simpler logger implementations diff --git a/CHANGELOG.md b/CHANGELOG.md index 48db2fd..318df94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @s0/node-tcnet +## 0.5.1 + +### Patch Changes + +- 663a2a9: Allow simpler logger implementations + ## 0.5.0 ### Minor Changes diff --git a/package.json b/package.json index 174ed44..94903be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@s0/node-tcnet", - "version": "0.5.0", + "version": "0.5.1", "description": "Implements the TC-Supply TCNet protocol used by ShowKontrol and ProDJLink Bridge app from Pioneer", "exports": { ".": { From b280ea7a11c08fb57b7c30a22138adac64e1696e Mon Sep 17 00:00:00 2001 From: Sam Lanning Date: Tue, 10 Feb 2026 23:30:23 +0800 Subject: [PATCH 3/3] Prepare repo for trusted publishing --- .github/workflows/ci.yaml | 4 ++-- .github/workflows/release-and-publish.yaml | 8 ++------ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ad577f0..fd8ad5e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,9 +16,9 @@ jobs: with: fetch-depth: 2 - name: Use Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: - node-version: 20.x + node-version: 24.x cache: 'npm' - run: npm install --frozen-lockfile - run: npm run build diff --git a/.github/workflows/release-and-publish.yaml b/.github/workflows/release-and-publish.yaml index e501482..725d125 100644 --- a/.github/workflows/release-and-publish.yaml +++ b/.github/workflows/release-and-publish.yaml @@ -20,20 +20,16 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} - name: Use Node.js - uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 with: - node-version: 20.x + node-version: 24.x cache: 'npm' - run: npm install --frozen-lockfile - run: npm run build - - name: Configure NPM to use token - run: - echo "//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}" >> .npmrc - name: Run Changeset Workflow uses: s0/changesets-action@63d3e3fda2c00696414ca2d6683e046289c13fd8 # v2.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }} with: publish: npm run changeset publish createGithubReleases: true