From 8b984012852ff57824524146d3ebd4c4fdfa60a4 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Wed, 15 Jan 2025 08:09:13 +0100 Subject: [PATCH] fix: convert enums to types In #40 enums had `const` added to them. [const enums](https://www.typescriptlang.org/docs/handbook/enums.html#const-enums) are removed at compile time and replaced with numbers. Here we require strings to be passed to `libdatachannel`, so in #259 we exported objects with values that correspond to the enums so consuming code can import something they can use in `PeerConnection` method invocations, e.g.: ```js import { DescriptionType, PeerConnection } from 'node-datachannel' const pc = new PeerConnection() pc.setLocalDescription(DescriptionType.Offer, { // ... }) ``` In #278 the codebase was converted to TypeScript and a non-const enum crept back in. Now all the enums live in `types.ts` and since Rollup was introduced as part of #278, but if you check the `esm` and `cjs` output dirs, `tests.ts` is not being transpiled to `tests.js` (`types/lib/types.d.ts` is present though, so `tsc` is doing it's job) and the re-export of the exports from `tests.ts` is being removed so enums are broken again at runtime. The fix here is to give up on enums since they are a constant source of pain for consumers and change them to be types: ```js import { PeerConnection } from 'node-datachannel' const pc = new PeerConnection() pc.setLocalDescription('offer', { // ... }) ``` --- src/lib/types.ts | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/lib/types.ts b/src/lib/types.ts index 75541e3d..72d543c5 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -47,11 +47,7 @@ export interface ProxyServer { password?: string; } -export const enum RelayType { - TurnUdp = 'TurnUdp', - TurnTcp = 'TurnTcp', - TurnTls = 'TurnTls', -} +export type RelayType = 'TurnUdp' | 'TurnTcp' | 'TurnTls' export interface IceServer { hostname: string; @@ -80,13 +76,7 @@ export interface RtcConfig { } // Lowercase to match the description type string from libdatachannel -export enum DescriptionType { - Unspec = 'unspec', - Offer = 'offer', - Answer = 'answer', - Pranswer = 'pranswer', - Rollback = 'rollback', -} +export type DescriptionType = 'unspec' | 'offer' | 'answer' | 'pranswer' | 'rollback' export type RTCSdpType = 'answer' | 'offer' | 'pranswer' | 'rollback'; @@ -118,10 +108,4 @@ export interface SelectedCandidateInfo { } // Must be same as rtc enum class Direction -export const enum Direction { - SendOnly = 'SendOnly', - RecvOnly = 'RecvOnly', - SendRecv = 'SendRecv', - Inactive = 'Inactive', - Unknown = 'Unknown', -} +export type Direction = 'SendOnly' | 'RecvOnly' | 'SendRecv' | 'Inactive' | 'Unknown'