diff --git a/README.md b/README.md index b0cbd35..01bcc57 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ npm install rtp.js - All RTP and RTCP classes, types and packet related helpers are exported by the `packets` module. ```ts - import { packets } from 'rtp.js'; + import * as packets from 'rtp.js/packets'; const { isRtp, @@ -46,15 +46,16 @@ npm install rtp.js - The `utils` module exports some generic helpers and utilities. ```ts - import { utils } from 'rtp.js'; + import * as utils from 'rtp.js/packets'; - const view = utils.stringToDataView('foo'); + const view = utils.stringToDataView('fooœæ€ñ#¢∞Ω©bar'); ``` - CommonJS is also supported: ```ts - const { packets, utils } = require('rtp.js'); + const packets = require('rtp.js/packets'); + const utils = require('rtp.js/utils'); ``` ## Authors diff --git a/npm-scripts.mjs b/npm-scripts.mjs index ca65537..7667646 100644 --- a/npm-scripts.mjs +++ b/npm-scripts.mjs @@ -56,7 +56,6 @@ async function run() { } case 'typescript:build': { - installDeps(); buildTypescript({ force: true }); break; @@ -64,7 +63,7 @@ async function run() { case 'typescript:watch': { deleteLib(); - executeCmd('tsc --noEmit --watch'); + executeCmd('rollup --config --watch'); break; } @@ -82,7 +81,6 @@ async function run() { } case 'test': { - buildTypescript({ force: false }); test(); break; diff --git a/package-lock.json b/package-lock.json index ee339e7..95f9db3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.14.2", "license": "ISC", "dependencies": { + "@types/node": "^22.13.10", "debug": "^4.4.0", "supports-color": "^10.0.0" }, @@ -3692,10 +3693,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.4.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", - "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", - "dev": true + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } }, "node_modules/@types/stack-utils": { "version": "2.0.1", @@ -9045,6 +9049,12 @@ "dev": true, "license": "MIT" }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", @@ -11724,10 +11734,12 @@ "dev": true }, "@types/node": { - "version": "20.4.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", - "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", - "dev": true + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", + "requires": { + "undici-types": "~6.20.0" + } }, "@types/stack-utils": { "version": "2.0.1", @@ -15436,6 +15448,11 @@ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, + "undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", diff --git a/package.json b/package.json index a2b5937..433b461 100644 --- a/package.json +++ b/package.json @@ -12,12 +12,19 @@ "type": "git", "url": "git+https://github.com/versatica/rtp.js.git" }, - "main": "lib/rtp.js.bundle.cjs", - "module": "lib/rtp.js.bundle.mjs", - "types": "lib/rtp.js.bundle.d.ts", "exports": { - "import": "./lib/rtp.js.bundle.mjs", - "require": "./lib/rtp.js.bundle.cjs" + "./packets": { + "typedoc": "./src/packets/public.ts", + "types": "./lib/packets.d.ts", + "import": "./lib/packets.mjs", + "require": "./lib/packets.cjs" + }, + "./utils": { + "typedoc": "./src/utils/public.ts", + "types": "./lib/utils.d.ts", + "import": "./lib/utils.mjs", + "require": "./lib/utils.cjs" + } }, "files": [ "npm-scripts.mjs", @@ -49,21 +56,15 @@ "jest": { "verbose": true, "testEnvironment": "node", - "moduleFileExtensions": [ - "js", - "mjs", - "ts", - "mts" - ], "testRegex": "src/test/.*.test.ts", "coveragePathIgnorePatterns": [ "src/Logger.ts", - "src/utils", "src/test" ], "cacheDirectory": ".cache/jest" }, "dependencies": { + "@types/node": "^22.13.10", "debug": "^4.4.0", "supports-color": "^10.0.0" }, diff --git a/rollup.config.mjs b/rollup.config.mjs index 1a23236..ac6c533 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,41 +1,59 @@ import esbuild from 'rollup-plugin-esbuild'; import dts from 'rollup-plugin-dts'; -// Make it explicit that we don't want to include external deps in bundle -// files. -const external = id => !/^[./]/.test(id); +// Make it explicit that we don't want to include external dependencies in +// bundle files. +const external = ['debug']; export default [ /** - * Create ES and CJS bundle files and their source map files. + * Create ES and CJS bundles of packets and utils and also source map + * files. + * + * NOTE: We also need to bundle utils/helpers.ts because it's used by + * packets and, if not specified, rollup will generate two helpers-xxx.js + * files, ES and CJS, both with .js extension, and will make Node believe + * that both are CJS due to their .js extension. */ { - input: 'src/index.ts', - plugins: [esbuild({ include: /\.ts$/ })], + input: { + packets: 'src/packets/public.ts', + utils: 'src/utils/public.ts', + 'utils/helpers': 'src/utils/helpers.ts', + }, + plugins: [esbuild()], output: [ { format: 'es', - file: 'lib/rtp.js.bundle.mjs', + dir: 'lib', + entryFileNames: '[name].mjs', sourcemap: true, }, { format: 'cjs', - file: 'lib/rtp.js.bundle.cjs', + dir: 'lib', + entryFileNames: '[name].cjs', sourcemap: true, }, ], external: external, }, /** - * Create a .d.ts bundle file for TypeScript types. + * Create ES and CJS types bundles of packets and utils. */ { - input: 'src/index.ts', - plugins: [dts({ include: /\.ts$/ })], - output: { - format: 'es', - file: 'lib/rtp.js.bundle.d.ts', + input: { + packets: 'src/packets/public.ts', + utils: 'src/utils/public.ts', }, + plugins: [dts()], + output: [ + { + format: 'es', + dir: 'lib', + entryFileNames: '[name].d.ts', + }, + ], external: external, }, ]; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index a2d1d8f..0000000 --- a/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * as packets from './packets'; -export * as utils from './utils'; diff --git a/src/packets.ts b/src/packets.ts deleted file mode 100644 index ab4bf6c..0000000 --- a/src/packets.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * @module packets - */ - -// NOTE: We need to export Serializable, otherwise TypeDoc doesn't document -// inherited methods. -export { Serializable } from './packets/Serializable'; -export type { SerializableDump } from './packets/Serializable'; - -export { Packet } from './packets/Packet'; -export type { PacketDump } from './packets/Packet'; - -export { isRtp, RtpPacket } from './packets/RTP/RtpPacket'; -export type { RtpPacketDump } from './packets/RTP/RtpPacket'; - -export { - rtpExtensionUriToType, - timeMsToAbsSendTime, -} from './packets/RTP/rtpExtensions'; -export type { - RtpExtensionType, - RtpExtensionMapping, - SsrcAudioLevelExtension, - VideoOrientationExtension, -} from './packets/RTP/rtpExtensions'; - -export { isRtcp, RtcpPacket } from './packets/RTCP/RtcpPacket'; -export type { RtcpPacketType, RtcpPacketDump } from './packets/RTCP/RtcpPacket'; - -export { CompoundPacket } from './packets/RTCP/CompoundPacket'; -export type { CompoundPacketDump } from './packets/RTCP/CompoundPacket'; - -export { - ReceiverReportPacket, - ReceptionReport, -} from './packets/RTCP/ReceiverReportPacket'; -export type { - ReceiverReportPacketDump, - ReceptionReportDump, -} from './packets/RTCP/ReceiverReportPacket'; - -export { SenderReportPacket } from './packets/RTCP/SenderReportPacket'; -export type { SenderReportPacketDump } from './packets/RTCP/SenderReportPacket'; - -export { ByePacket } from './packets/RTCP/ByePacket'; -export type { ByePacketDump } from './packets/RTCP/ByePacket'; - -export { SdesPacket, SdesChunk } from './packets/RTCP/SdesPacket'; -export type { - SdesPacketDump, - SdesChunkDump, - SdesItemType, -} from './packets/RTCP/SdesPacket'; - -export { FeedbackPacket } from './packets/RTCP/FeedbackPacket'; -export type { - RtpFeedbackMessageType, - PsFeedbackMessageType, - FeedbackPacketDump, -} from './packets/RTCP/FeedbackPacket'; - -export { - NackPacket, - parseNackItem, - createNackItem, -} from './packets/RTCP/NackPacket'; -export type { NackPacketDump } from './packets/RTCP/NackPacket'; - -export { SrReqPacket } from './packets/RTCP/SrReqPacket'; -export type { SrReqPacketDump } from './packets/RTCP/SrReqPacket'; - -export { EcnPacket } from './packets/RTCP/EcnPacket'; -export type { EcnPacketDump } from './packets/RTCP/EcnPacket'; - -export { PliPacket } from './packets/RTCP/PliPacket'; -export type { PliPacketDump } from './packets/RTCP/PliPacket'; - -export { SliPacket } from './packets/RTCP/SliPacket'; -export type { SliPacketDump } from './packets/RTCP/SliPacket'; - -export { RpsiPacket } from './packets/RTCP/RpsiPacket'; -export type { RpsiPacketDump } from './packets/RTCP/RpsiPacket'; - -export { GenericFeedbackPacket } from './packets/RTCP/GenericFeedbackPacket'; -export type { GenericFeedbackPacketDump } from './packets/RTCP/GenericFeedbackPacket'; - -export { XrPacket } from './packets/RTCP/XrPacket'; -export type { XrPacketDump } from './packets/RTCP/XrPacket'; - -export { ExtendedReport } from './packets/RTCP/extendedReports/ExtendedReport'; -export type { - ExtendedReportType, - ExtendedReportDump, -} from './packets/RTCP/extendedReports/ExtendedReport'; - -export { LrleExtendedReport } from './packets/RTCP/extendedReports/LrleExtendedReport'; -export type { LrleExtendedReportDump } from './packets/RTCP/extendedReports/LrleExtendedReport'; - -export { DrleExtendedReport } from './packets/RTCP/extendedReports/DrleExtendedReport'; -export type { DrleExtendedReportDump } from './packets/RTCP/extendedReports/DrleExtendedReport'; - -export { PrtExtendedReport } from './packets/RTCP/extendedReports/PrtExtendedReport'; -export type { PrtExtendedReportDump } from './packets/RTCP/extendedReports/PrtExtendedReport'; - -export { RrtExtendedReport } from './packets/RTCP/extendedReports/RrtExtendedReport'; -export type { RrtExtendedReportDump } from './packets/RTCP/extendedReports/RrtExtendedReport'; - -export { DlrrExtendedReport } from './packets/RTCP/extendedReports/DlrrExtendedReport'; -export type { - DlrrExtendedReportDump, - DlrrSubReport, -} from './packets/RTCP/extendedReports/DlrrExtendedReport'; - -export { SsExtendedReport } from './packets/RTCP/extendedReports/SsExtendedReport'; -export type { SsExtendedReportDump } from './packets/RTCP/extendedReports/SsExtendedReport'; - -export { VmExtendedReport } from './packets/RTCP/extendedReports/VmExtendedReport'; -export type { VmExtendedReportDump } from './packets/RTCP/extendedReports/VmExtendedReport'; - -export { EcnExtendedReport } from './packets/RTCP/extendedReports/EcnExtendedReport'; -export type { EcnExtendedReportDump } from './packets/RTCP/extendedReports/EcnExtendedReport'; - -export { GenericExtendedReport } from './packets/RTCP/extendedReports/GenericExtendedReport'; -export type { GenericExtendedReportDump } from './packets/RTCP/extendedReports/GenericExtendedReport'; - -export { - parseExtendedReportChunk, - createExtendedReportRunLengthChunk, - createExtendedReportBitVectorChunk, -} from './packets/RTCP/extendedReports/chunks'; -export type { ExtendedReportChunk } from './packets/RTCP/extendedReports/chunks'; - -export { ExtendedJitterReportsPacket } from './packets/RTCP/ExtendedJitterReportsPacket'; -export type { ExtendedJitterReportsPacketDump } from './packets/RTCP/ExtendedJitterReportsPacket'; - -export { GenericPacket } from './packets/RTCP/GenericPacket'; -export type { GenericPacketDump } from './packets/RTCP/GenericPacket'; diff --git a/src/packets/RTCP/ByePacket.ts b/src/packets/RTCP/ByePacket.ts index 9df5314..ba443c2 100644 --- a/src/packets/RTCP/ByePacket.ts +++ b/src/packets/RTCP/ByePacket.ts @@ -148,7 +148,7 @@ export class ByePacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -206,9 +206,9 @@ export class ByePacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): ByePacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/CompoundPacket.ts b/src/packets/RTCP/CompoundPacket.ts index 83163bf..884fdba 100644 --- a/src/packets/RTCP/CompoundPacket.ts +++ b/src/packets/RTCP/CompoundPacket.ts @@ -257,7 +257,7 @@ export class CompoundPacket extends Packet { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -293,9 +293,9 @@ export class CompoundPacket extends Packet { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): CompoundPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/EcnPacket.ts b/src/packets/RTCP/EcnPacket.ts index 637037c..d4995ad 100644 --- a/src/packets/RTCP/EcnPacket.ts +++ b/src/packets/RTCP/EcnPacket.ts @@ -115,7 +115,7 @@ export class EcnPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -160,9 +160,9 @@ export class EcnPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): EcnPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/ExtendedJitterReportsPacket.ts b/src/packets/RTCP/ExtendedJitterReportsPacket.ts index afaec21..61bcba7 100644 --- a/src/packets/RTCP/ExtendedJitterReportsPacket.ts +++ b/src/packets/RTCP/ExtendedJitterReportsPacket.ts @@ -111,7 +111,7 @@ export class ExtendedJitterReportsPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -146,9 +146,9 @@ export class ExtendedJitterReportsPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): ExtendedJitterReportsPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/FeedbackPacket.ts b/src/packets/RTCP/FeedbackPacket.ts index cc62363..6cad820 100644 --- a/src/packets/RTCP/FeedbackPacket.ts +++ b/src/packets/RTCP/FeedbackPacket.ts @@ -246,7 +246,10 @@ export abstract class FeedbackPacket extends RtcpPacket { /** * Serialize base RTCP Feedback packet into a new buffer. */ - protected serializeBase(buffer?: ArrayBuffer, byteOffset?: number): DataView { + protected serializeBase( + buffer?: ArrayBufferLike, + byteOffset?: number + ): DataView { const view = super.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, diff --git a/src/packets/RTCP/GenericFeedbackPacket.ts b/src/packets/RTCP/GenericFeedbackPacket.ts index e633b0e..944ac8c 100644 --- a/src/packets/RTCP/GenericFeedbackPacket.ts +++ b/src/packets/RTCP/GenericFeedbackPacket.ts @@ -137,7 +137,7 @@ export class GenericFeedbackPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -192,9 +192,9 @@ export class GenericFeedbackPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): GenericFeedbackPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/GenericPacket.ts b/src/packets/RTCP/GenericPacket.ts index cd8181c..a217cb5 100644 --- a/src/packets/RTCP/GenericPacket.ts +++ b/src/packets/RTCP/GenericPacket.ts @@ -122,7 +122,7 @@ export class GenericPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -177,9 +177,9 @@ export class GenericPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): GenericPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/NackPacket.ts b/src/packets/RTCP/NackPacket.ts index 3e0a75d..528bc42 100644 --- a/src/packets/RTCP/NackPacket.ts +++ b/src/packets/RTCP/NackPacket.ts @@ -117,7 +117,7 @@ export class NackPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -156,9 +156,9 @@ export class NackPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): NackPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/PliPacket.ts b/src/packets/RTCP/PliPacket.ts index 98a1a99..de017a3 100644 --- a/src/packets/RTCP/PliPacket.ts +++ b/src/packets/RTCP/PliPacket.ts @@ -92,7 +92,7 @@ export class PliPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Nothing else to do. @@ -107,9 +107,9 @@ export class PliPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): PliPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/ReceiverReportPacket.ts b/src/packets/RTCP/ReceiverReportPacket.ts index dfc2b7c..42150be 100644 --- a/src/packets/RTCP/ReceiverReportPacket.ts +++ b/src/packets/RTCP/ReceiverReportPacket.ts @@ -169,7 +169,7 @@ export class ReceiverReportPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -222,9 +222,9 @@ export class ReceiverReportPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): ReceiverReportPacket { const view = this.cloneInternal( @@ -339,7 +339,7 @@ export class ReceptionReport extends Serializable { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -371,9 +371,9 @@ export class ReceptionReport extends Serializable { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): ReceptionReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/RpsiPacket.ts b/src/packets/RTCP/RpsiPacket.ts index 0f0161d..a0a99fd 100644 --- a/src/packets/RTCP/RpsiPacket.ts +++ b/src/packets/RTCP/RpsiPacket.ts @@ -151,7 +151,7 @@ export class RpsiPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -224,9 +224,9 @@ export class RpsiPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): RpsiPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/RtcpPacket.ts b/src/packets/RTCP/RtcpPacket.ts index 565cacd..8ef729a 100644 --- a/src/packets/RTCP/RtcpPacket.ts +++ b/src/packets/RTCP/RtcpPacket.ts @@ -297,7 +297,10 @@ export abstract class RtcpPacket extends Packet { /** * Serialize base RTCP packet into a new buffer. */ - protected serializeBase(buffer?: ArrayBuffer, byteOffset?: number): DataView { + protected serializeBase( + buffer?: ArrayBufferLike, + byteOffset?: number + ): DataView { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. diff --git a/src/packets/RTCP/SdesPacket.ts b/src/packets/RTCP/SdesPacket.ts index 4bb1c61..0522612 100644 --- a/src/packets/RTCP/SdesPacket.ts +++ b/src/packets/RTCP/SdesPacket.ts @@ -243,7 +243,7 @@ export class SdesPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -278,9 +278,9 @@ export class SdesPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SdesPacket { const view = this.cloneInternal( @@ -446,7 +446,7 @@ export class SdesChunk extends Serializable { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -495,9 +495,9 @@ export class SdesChunk extends Serializable { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SdesChunk { const view = this.cloneInternal( diff --git a/src/packets/RTCP/SenderReportPacket.ts b/src/packets/RTCP/SenderReportPacket.ts index 8d30033..864f9c9 100644 --- a/src/packets/RTCP/SenderReportPacket.ts +++ b/src/packets/RTCP/SenderReportPacket.ts @@ -176,7 +176,7 @@ export class SenderReportPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -229,9 +229,9 @@ export class SenderReportPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SenderReportPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/SliPacket.ts b/src/packets/RTCP/SliPacket.ts index 55c904b..ff0b7fd 100644 --- a/src/packets/RTCP/SliPacket.ts +++ b/src/packets/RTCP/SliPacket.ts @@ -117,7 +117,7 @@ export class SliPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -152,9 +152,9 @@ export class SliPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SliPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/SrReqPacket.ts b/src/packets/RTCP/SrReqPacket.ts index f4e9a10..17e826b 100644 --- a/src/packets/RTCP/SrReqPacket.ts +++ b/src/packets/RTCP/SrReqPacket.ts @@ -92,7 +92,7 @@ export class SrReqPacket extends FeedbackPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Nothing else to do. @@ -107,9 +107,9 @@ export class SrReqPacket extends FeedbackPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SrReqPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/XrPacket.ts b/src/packets/RTCP/XrPacket.ts index b62ad0b..2a5af00 100644 --- a/src/packets/RTCP/XrPacket.ts +++ b/src/packets/RTCP/XrPacket.ts @@ -210,7 +210,7 @@ export class XrPacket extends RtcpPacket { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -264,9 +264,9 @@ export class XrPacket extends RtcpPacket { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): XrPacket { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/DlrrExtendedReport.ts b/src/packets/RTCP/extendedReports/DlrrExtendedReport.ts index 2619f61..2b35622 100644 --- a/src/packets/RTCP/extendedReports/DlrrExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/DlrrExtendedReport.ts @@ -136,7 +136,7 @@ export class DlrrExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); // Position relative to the DataView byte offset. @@ -176,9 +176,9 @@ export class DlrrExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): DlrrExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/DrleExtendedReport.ts b/src/packets/RTCP/extendedReports/DrleExtendedReport.ts index a57684c..5528552 100644 --- a/src/packets/RTCP/extendedReports/DrleExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/DrleExtendedReport.ts @@ -134,7 +134,7 @@ export class DrleExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -187,9 +187,9 @@ export class DrleExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): DrleExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/EcnExtendedReport.ts b/src/packets/RTCP/extendedReports/EcnExtendedReport.ts index 89508ec..01c7171 100644 --- a/src/packets/RTCP/extendedReports/EcnExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/EcnExtendedReport.ts @@ -102,7 +102,7 @@ export class EcnExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -145,9 +145,9 @@ export class EcnExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): EcnExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/ExtendedReport.ts b/src/packets/RTCP/extendedReports/ExtendedReport.ts index 6d6177a..8bb14f0 100644 --- a/src/packets/RTCP/extendedReports/ExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/ExtendedReport.ts @@ -98,49 +98,6 @@ export function setExtendedReportLength( view.setUint16(2, length); } -/** - * @hidden - */ -export function reportTypeToString(reportType: ExtendedReportType): string { - switch (reportType) { - case ExtendedReportType.LRLE: { - return 'Loss RLE'; - } - - case ExtendedReportType.DRLE: { - return 'Duplicate RLE'; - } - - case ExtendedReportType.PRT: { - return 'Packet Receipt Times'; - } - - case ExtendedReportType.RRT: { - return 'Receiver Reference Time'; - } - - case ExtendedReportType.DLRR: { - return 'DLRR'; - } - - case ExtendedReportType.SS: { - return 'Statistics Summary'; - } - - case ExtendedReportType.VM: { - return 'VoIP Metrics'; - } - - case ExtendedReportType.ECN: { - return 'ECN Summary'; - } - - default: { - assertUnreachable(reportType); - } - } -} - /** * Parent class of all {@link XrPacket} Extended Reports. * @@ -220,7 +177,10 @@ export abstract class ExtendedReport extends Serializable { /** * Serialize base RTCP packet into a new buffer. */ - protected serializeBase(buffer?: ArrayBuffer, byteOffset?: number): DataView { + protected serializeBase( + buffer?: ArrayBufferLike, + byteOffset?: number + ): DataView { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -262,3 +222,43 @@ export abstract class ExtendedReport extends Serializable { this.view.setUint8(0, reportType); } } + +function reportTypeToString(reportType: ExtendedReportType): string { + switch (reportType) { + case ExtendedReportType.LRLE: { + return 'Loss RLE'; + } + + case ExtendedReportType.DRLE: { + return 'Duplicate RLE'; + } + + case ExtendedReportType.PRT: { + return 'Packet Receipt Times'; + } + + case ExtendedReportType.RRT: { + return 'Receiver Reference Time'; + } + + case ExtendedReportType.DLRR: { + return 'DLRR'; + } + + case ExtendedReportType.SS: { + return 'Statistics Summary'; + } + + case ExtendedReportType.VM: { + return 'VoIP Metrics'; + } + + case ExtendedReportType.ECN: { + return 'ECN Summary'; + } + + default: { + assertUnreachable(reportType); + } + } +} diff --git a/src/packets/RTCP/extendedReports/GenericExtendedReport.ts b/src/packets/RTCP/extendedReports/GenericExtendedReport.ts index c8f11db..fc06a93 100644 --- a/src/packets/RTCP/extendedReports/GenericExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/GenericExtendedReport.ts @@ -116,7 +116,7 @@ export class GenericExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -168,9 +168,9 @@ export class GenericExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): GenericExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/LrleExtendedReport.ts b/src/packets/RTCP/extendedReports/LrleExtendedReport.ts index e7d0811..7a4f6f5 100644 --- a/src/packets/RTCP/extendedReports/LrleExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/LrleExtendedReport.ts @@ -132,7 +132,7 @@ export class LrleExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -185,9 +185,9 @@ export class LrleExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): LrleExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/PrtExtendedReport.ts b/src/packets/RTCP/extendedReports/PrtExtendedReport.ts index d409949..73149ef 100644 --- a/src/packets/RTCP/extendedReports/PrtExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/PrtExtendedReport.ts @@ -125,7 +125,7 @@ export class PrtExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -175,9 +175,9 @@ export class PrtExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): PrtExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/RrtExtendedReport.ts b/src/packets/RTCP/extendedReports/RrtExtendedReport.ts index 2e8818f..3951f5e 100644 --- a/src/packets/RTCP/extendedReports/RrtExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/RrtExtendedReport.ts @@ -83,7 +83,7 @@ export class RrtExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -126,9 +126,9 @@ export class RrtExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): RrtExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/SsExtendedReport.ts b/src/packets/RTCP/extendedReports/SsExtendedReport.ts index 313681b..9e5c885 100644 --- a/src/packets/RTCP/extendedReports/SsExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/SsExtendedReport.ts @@ -126,7 +126,7 @@ export class SsExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -169,9 +169,9 @@ export class SsExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): SsExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTCP/extendedReports/VmExtendedReport.ts b/src/packets/RTCP/extendedReports/VmExtendedReport.ts index 9f0bca1..cd175ec 100644 --- a/src/packets/RTCP/extendedReports/VmExtendedReport.ts +++ b/src/packets/RTCP/extendedReports/VmExtendedReport.ts @@ -137,7 +137,7 @@ export class VmExtendedReport extends ExtendedReport { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const view = this.serializeBase(buffer, byteOffset); const uint8Array = new Uint8Array( view.buffer, @@ -180,9 +180,9 @@ export class VmExtendedReport extends ExtendedReport { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): VmExtendedReport { const view = this.cloneInternal( diff --git a/src/packets/RTP/RtpPacket.ts b/src/packets/RTP/RtpPacket.ts index 91342d1..4c4968f 100644 --- a/src/packets/RTP/RtpPacket.ts +++ b/src/packets/RTP/RtpPacket.ts @@ -419,7 +419,7 @@ export class RtpPacket extends Packet { /** * @inheritDoc */ - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -651,9 +651,9 @@ export class RtpPacket extends Packet { * @inheritDoc */ clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): RtpPacket { const view = this.cloneInternal( diff --git a/src/packets/Serializable.ts b/src/packets/Serializable.ts index bb29356..fd5cc5b 100644 --- a/src/packets/Serializable.ts +++ b/src/packets/Serializable.ts @@ -52,7 +52,7 @@ export abstract class Serializable { * content. */ getView( - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): DataView { if (this.needsSerialization()) { @@ -99,12 +99,12 @@ export abstract class Serializable { * @throws * - If serialization fails due to invalid content previously added. * - If given `buffer` doesn't have space enough to serialize the content. - * - If the `buffer` member of the given `ArrayBuffer` is the same than the + * - If the `buffer` member of the given `ArrayBufferLike` is the same than the * internal buffer in this packet and the given `byteOffset` would make * the serialization happen in bytes currently used by the packet (this would * corrupt the packet). */ - abstract serialize(buffer?: ArrayBuffer, byteOffset?: number): void; + abstract serialize(buffer?: ArrayBufferLike, byteOffset?: number): void; /** * Clone the packet or item. The cloned instance does not share any memory @@ -132,9 +132,9 @@ export abstract class Serializable { * the content. */ abstract clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): Serializable; @@ -148,10 +148,10 @@ export abstract class Serializable { * whether the serialized content can fit into it and will throw otherwise. */ protected getSerializationBuffer( - buffer: ArrayBuffer | undefined, + buffer: ArrayBufferLike | undefined, byteOffset: number = 0 ): { - buffer: ArrayBuffer; + buffer: ArrayBufferLike; byteOffset: number; byteLength: number; } { @@ -198,9 +198,9 @@ export abstract class Serializable { } protected cloneInternal( - buffer: ArrayBuffer | undefined, + buffer: ArrayBufferLike | undefined, byteOffset: number = 0, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): DataView { if (this.needsSerialization()) { diff --git a/src/packets/public.ts b/src/packets/public.ts new file mode 100644 index 0000000..bbb18f6 --- /dev/null +++ b/src/packets/public.ts @@ -0,0 +1,162 @@ +/** + * @module packets + * + * @example + * ```ts + * import * as packets from 'rtp.js/packets'; + * + * const { + * isRtp, + * isRtcp, + * RtpPacket, + * CompoundPacket, + * ReceiverReportPacket, + * SenderReportPacket, + * ReceptionReport, + * ByePacket, + * SdesPacket, + * NackPacket, + * SrReqPacket, + * EcnPacket, + * PliPacket, + * SliPacket, + * RpsiPacket, + * XrPacket, + * ExtendedJitterReportsPacket, + * GenericPacket, + * // etc. + * } = packets; + * ``` + */ + +// NOTE: We need to export Serializable, otherwise TypeDoc doesn't document +// inherited methods. +export { Serializable } from './Serializable'; +export type { SerializableDump } from './Serializable'; + +// NOTE: We need to export Packet, otherwise TypeDoc doesn't document inherited +// methods. +export { Packet } from './Packet'; +export type { PacketDump } from './Packet'; + +export { isRtp, RtpPacket } from './RTP/RtpPacket'; +export type { RtpPacketDump } from './RTP/RtpPacket'; + +export { + rtpExtensionUriToType, + timeMsToAbsSendTime, +} from './RTP/rtpExtensions'; +export type { + RtpExtensionType, + RtpExtensionMapping, + SsrcAudioLevelExtension, + VideoOrientationExtension, +} from './RTP/rtpExtensions'; + +export { isRtcp, RtcpPacket } from './RTCP/RtcpPacket'; +export type { RtcpPacketType, RtcpPacketDump } from './RTCP/RtcpPacket'; + +export { CompoundPacket } from './RTCP/CompoundPacket'; +export type { CompoundPacketDump } from './RTCP/CompoundPacket'; + +export { + ReceiverReportPacket, + ReceptionReport, +} from './RTCP/ReceiverReportPacket'; +export type { + ReceiverReportPacketDump, + ReceptionReportDump, +} from './RTCP/ReceiverReportPacket'; + +export { SenderReportPacket } from './RTCP/SenderReportPacket'; +export type { SenderReportPacketDump } from './RTCP/SenderReportPacket'; + +export { ByePacket } from './RTCP/ByePacket'; +export type { ByePacketDump } from './RTCP/ByePacket'; + +export { SdesPacket, SdesChunk } from './RTCP/SdesPacket'; +export type { + SdesPacketDump, + SdesChunkDump, + SdesItemType, +} from './RTCP/SdesPacket'; + +export { FeedbackPacket } from './RTCP/FeedbackPacket'; +export type { + RtpFeedbackMessageType, + PsFeedbackMessageType, + FeedbackPacketDump, +} from './RTCP/FeedbackPacket'; + +export { NackPacket, parseNackItem, createNackItem } from './RTCP/NackPacket'; +export type { NackPacketDump } from './RTCP/NackPacket'; + +export { SrReqPacket } from './RTCP/SrReqPacket'; +export type { SrReqPacketDump } from './RTCP/SrReqPacket'; + +export { EcnPacket } from './RTCP/EcnPacket'; +export type { EcnPacketDump } from './RTCP/EcnPacket'; + +export { PliPacket } from './RTCP/PliPacket'; +export type { PliPacketDump } from './RTCP/PliPacket'; + +export { SliPacket } from './RTCP/SliPacket'; +export type { SliPacketDump } from './RTCP/SliPacket'; + +export { RpsiPacket } from './RTCP/RpsiPacket'; +export type { RpsiPacketDump } from './RTCP/RpsiPacket'; + +export { GenericFeedbackPacket } from './RTCP/GenericFeedbackPacket'; +export type { GenericFeedbackPacketDump } from './RTCP/GenericFeedbackPacket'; + +export { XrPacket } from './RTCP/XrPacket'; +export type { XrPacketDump } from './RTCP/XrPacket'; + +export { ExtendedReport } from './RTCP/extendedReports/ExtendedReport'; +export type { + ExtendedReportType, + ExtendedReportDump, +} from './RTCP/extendedReports/ExtendedReport'; + +export { LrleExtendedReport } from './RTCP/extendedReports/LrleExtendedReport'; +export type { LrleExtendedReportDump } from './RTCP/extendedReports/LrleExtendedReport'; + +export { DrleExtendedReport } from './RTCP/extendedReports/DrleExtendedReport'; +export type { DrleExtendedReportDump } from './RTCP/extendedReports/DrleExtendedReport'; + +export { PrtExtendedReport } from './RTCP/extendedReports/PrtExtendedReport'; +export type { PrtExtendedReportDump } from './RTCP/extendedReports/PrtExtendedReport'; + +export { RrtExtendedReport } from './RTCP/extendedReports/RrtExtendedReport'; +export type { RrtExtendedReportDump } from './RTCP/extendedReports/RrtExtendedReport'; + +export { DlrrExtendedReport } from './RTCP/extendedReports/DlrrExtendedReport'; +export type { + DlrrExtendedReportDump, + DlrrSubReport, +} from './RTCP/extendedReports/DlrrExtendedReport'; + +export { SsExtendedReport } from './RTCP/extendedReports/SsExtendedReport'; +export type { SsExtendedReportDump } from './RTCP/extendedReports/SsExtendedReport'; + +export { VmExtendedReport } from './RTCP/extendedReports/VmExtendedReport'; +export type { VmExtendedReportDump } from './RTCP/extendedReports/VmExtendedReport'; + +export { EcnExtendedReport } from './RTCP/extendedReports/EcnExtendedReport'; +export type { EcnExtendedReportDump } from './RTCP/extendedReports/EcnExtendedReport'; + +export { GenericExtendedReport } from './RTCP/extendedReports/GenericExtendedReport'; +export type { GenericExtendedReportDump } from './RTCP/extendedReports/GenericExtendedReport'; + +export { + parseExtendedReportChunk, + createExtendedReportRunLengthChunk, + createExtendedReportBitVectorChunk, +} from './RTCP/extendedReports/chunks'; +export type { ExtendedReportChunk } from './RTCP/extendedReports/chunks'; + +export { ExtendedJitterReportsPacket } from './RTCP/ExtendedJitterReportsPacket'; +export type { ExtendedJitterReportsPacketDump } from './RTCP/ExtendedJitterReportsPacket'; + +export { GenericPacket } from './RTCP/GenericPacket'; +export type { GenericPacketDump } from './RTCP/GenericPacket'; diff --git a/src/test/packets/Serializable.test.ts b/src/test/packets/Serializable.test.ts index a7e935d..ae97470 100644 --- a/src/test/packets/Serializable.test.ts +++ b/src/test/packets/Serializable.test.ts @@ -10,7 +10,7 @@ class Foo extends Serializable { return this.view.byteLength; } - serialize(buffer?: ArrayBuffer, byteOffset?: number): void { + serialize(buffer?: ArrayBufferLike, byteOffset?: number): void { const bufferData = this.getSerializationBuffer(buffer, byteOffset); // Create new DataView with new buffer. @@ -42,9 +42,9 @@ class Foo extends Serializable { } clone( - buffer?: ArrayBuffer, + buffer?: ArrayBufferLike, byteOffset?: number, - serializationBuffer?: ArrayBuffer, + serializationBuffer?: ArrayBufferLike, serializationByteOffset?: number ): Foo { const view = this.cloneInternal( diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index f993b44..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @module utils - */ - -export { - padTo4Bytes, - nodeBufferToDataView, - dataViewToNodeBuffer, - nodeBufferToArrayBuffer, - arrayBufferToNodeBuffer, - numericArrayToDataView, - numberToDataView, - dataViewToString, - arrayBufferToString, - stringToDataView, - getStringByteLength, -} from './utils/helpers'; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 49aac49..c1eecb1 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -9,7 +9,11 @@ const logger = new Logger('utils/helpers'); * @hidden */ export function clone(data: T): T { - if (data instanceof ArrayBuffer) { + if ( + data instanceof ArrayBuffer || + (typeof SharedArrayBuffer !== 'undefined' && + data instanceof SharedArrayBuffer) + ) { return data.slice(0) as unknown as T; } else if (data instanceof DataView) { return new DataView( @@ -129,13 +133,13 @@ export function dataViewToNodeBuffer(view: DataView): Buffer { } /** - * Convert Node.js Buffer to a new allocated ArrayBuffer. + * Convert Node.js Buffer to a new allocated ArrayBufferLike. * * @category Utils * @remarks * - Just for Node.js. */ -export function nodeBufferToArrayBuffer(nodeBuffer: Buffer): ArrayBuffer { +export function nodeBufferToArrayBuffer(nodeBuffer: Buffer): ArrayBufferLike { return nodeBuffer.buffer.slice( nodeBuffer.byteOffset, nodeBuffer.byteOffset + nodeBuffer.byteLength @@ -143,13 +147,13 @@ export function nodeBufferToArrayBuffer(nodeBuffer: Buffer): ArrayBuffer { } /** - * Convert ArrayBuffer to Node.js Buffer. + * Convert ArrayBufferLike to Node.js Buffer. * * @category Utils * @remarks * - Just for Node.js. */ -export function arrayBufferToNodeBuffer(arrayBuffer: ArrayBuffer): Buffer { +export function arrayBufferToNodeBuffer(arrayBuffer: ArrayBufferLike): Buffer { return Buffer.from(arrayBuffer, 0, arrayBuffer.byteLength); } @@ -226,12 +230,12 @@ export function stringToDataView(string: string): DataView { } /** - * Convert string to ArrayBuffer. + * Convert string to ArrayBufferLike. * * @category Utils * @hidden */ -export function stringToArrayBuffer(string: string): ArrayBuffer { +export function stringToArrayBuffer(string: string): ArrayBufferLike { const encoder = new TextEncoder(); return encoder.encode(string).buffer; diff --git a/src/utils/public.ts b/src/utils/public.ts new file mode 100644 index 0000000..c140d20 --- /dev/null +++ b/src/utils/public.ts @@ -0,0 +1,37 @@ +/** + * @module utils + * + * @example + * ```ts + * import * as utils from 'rtp.js/utils'; + * + * const { + * padTo4Bytes, + * nodeBufferToDataView, + * dataViewToNodeBuffer, + * nodeBufferToArrayBuffer, + * arrayBufferToNodeBuffer, + * numericArrayToDataView, + * numberToDataView, + * dataViewToString, + * arrayBufferToString, + * stringToDataView, + * getStringByteLength, + * // etc. + * } = utils; + * ``` + */ + +export { + padTo4Bytes, + nodeBufferToDataView, + dataViewToNodeBuffer, + nodeBufferToArrayBuffer, + arrayBufferToNodeBuffer, + numericArrayToDataView, + numberToDataView, + dataViewToString, + arrayBufferToString, + stringToDataView, + getStringByteLength, +} from './helpers'; diff --git a/tsconfig.json b/tsconfig.json index a3714a2..2aaadcd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,12 @@ { "compileOnSave": true, "compilerOptions": { - "lib": ["es2022"], - "target": "es2024", + "lib": ["es2024"], + "target": "esnext", "module": "NodeNext", "moduleResolution": "NodeNext", - "allowImportingTsExtensions": true, - "rewriteRelativeImportExtensions": true, "strict": true, - "outDir": "lib", - "declaration": true, - "declarationMap": true + "outDir": "lib" }, "include": ["src"] } diff --git a/typedoc.config.mjs b/typedoc.config.mjs index d4e714d..d7ecaa4 100644 --- a/typedoc.config.mjs +++ b/typedoc.config.mjs @@ -1,6 +1,5 @@ /** @type {Partial} */ const config = { - entryPoints: ['src/packets.ts', 'src/utils.ts'], out: 'docs', skipErrorChecking: false, excludePrivate: true,