Replace hand-written .d.ts with JSDoc + tsc auto-generation

- Delete hand-written index.d.ts that drifted from source
- Add JSDoc type annotations to all source files
- Create src/types.js with shared typedefs (SelfInfo, Contact,
  ContactMessage, ChannelInfo, RepeaterStats, etc.)
- Add tsconfig.json for declaration generation
- Add build:types script and prepublishOnly hook
- Add GitHub Actions CI workflow for type checking
- Use Uint8Array everywhere (no Buffer references)
- Add semantic type aliases (EpochSeconds, Milliseconds, MilliVolts)
- Add typed event overloads on Connection (on/once/off)
- All 11 PR #15 review comments addressed
This commit is contained in:
Manuel Bahamóndez-Honores 2026-02-18 05:49:46 -03:00
parent de31939a28
commit 2d4cb35e51
23 changed files with 988 additions and 212 deletions

View file

@ -3,24 +3,31 @@ import Connection from "./connection.js";
class WebBleConnection extends Connection {
/** @param {any} bleDevice */
constructor(bleDevice) {
super();
this.bleDevice = bleDevice;
/** @type {any} */
this.gattServer = null;
/** @type {any} */
this.rxCharacteristic = null;
/** @type {any} */
this.txCharacteristic = null;
this.init();
}
/** @returns {Promise<WebBleConnection | null | undefined>} */
static async open() {
// ensure browser supports web bluetooth
// @ts-ignore - Web Bluetooth API
if(!navigator.bluetooth){
alert("Web Bluetooth is not supported in this browser");
return;
}
// ask user to select device
// @ts-ignore - Web Bluetooth API
const device = await navigator.bluetooth.requestDevice({
filters: [
{
@ -76,6 +83,7 @@ class WebBleConnection extends Connection {
}
/** @returns {Promise<void>} */
async close() {
try {
this.gattServer?.disconnect();
@ -85,6 +93,10 @@ class WebBleConnection extends Connection {
}
}
/**
* @param {Uint8Array} bytes
* @returns {Promise<void>}
*/
async write(bytes) {
try {
// fixme: NetworkError: GATT operation already in progress.
@ -96,6 +108,10 @@ class WebBleConnection extends Connection {
}
}
/**
* @param {Uint8Array} frame
* @returns {Promise<void>}
*/
async sendToRadioFrame(frame) {
this.emit("tx", frame);
await this.write(frame);