diff --git a/npm-scripts.mjs b/npm-scripts.mjs index ecc3d078..af855dff 100644 --- a/npm-scripts.mjs +++ b/npm-scripts.mjs @@ -164,6 +164,7 @@ function buildTypescript(force = false) deleteLib(); executeCmd('tsc'); + executeCmd('rollup --config'); } function lint() diff --git a/package-lock.json b/package-lock.json index 06b6e955..9bac1176 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,10 +26,14 @@ "@types/sdp-transform": "^2.4.6", "@typescript-eslint/eslint-plugin": "^5.59.11", "@typescript-eslint/parser": "^5.59.11", + "esbuild": "^0.18.3", "eslint": "^8.42.0", "eslint-plugin-jest": "^27.2.1", "jest": "^29.5.0", "open-cli": "^7.2.0", + "rollup": "^3.25.1", + "rollup-plugin-dts": "^5.3.0", + "rollup-plugin-esbuild": "^5.0.0", "ts-jest": "^29.1.0", "tsc-watch": "^6.0.4", "typescript": "^5.1.3" @@ -644,6 +648,358 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.3.tgz", + "integrity": "sha512-QOn3VIlL6Qv1eHBpQB/s7simaZgGss2ASyxDOwYSLmc6vD0uuizZkuYawHmuLjWEm5wPwp0JQWhbpaYwwGevYw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.3.tgz", + "integrity": "sha512-PgabCsoaEEnnOiF6rUhOBXgYoLFIrHWP6mfLOzuQ1oZ1lwBdTL0hp5ivC4K3Kvz3BD8EipjeQo6l0aty3nr4qQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.3.tgz", + "integrity": "sha512-1OkJf8wNX1W5ucbp5HrK+z42b9DINb4ix59oJH/PIsh9cyFMqjgRKtCBXg0zEWhkmP1k3egdfrnS7cDTpLH43g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.3.tgz", + "integrity": "sha512-57aofORpY7wDAuMs6DeqpmgSnVfZ63RgGbR/BHdOSTqJgYvHDCMY7/o1myFntl3k0YxtLE3WAm56nMf4qy3UDw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.3.tgz", + "integrity": "sha512-NVBqMnxT9qvgu7Z322LUDlwjh4GDk6wEePyAQnHF9noxik/WvLFmr5v3Vgz5LSvqFducLCxsdmLztKhdpFW0Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.3.tgz", + "integrity": "sha512-XiLK1AsCk2wKxN7j8h9GXXCs8FPZhp07U0rnpwRkAVSVGgLaIWYSqpTRzKjAfqJiZlp+XKo1HwsmDdICEKB3Dg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.3.tgz", + "integrity": "sha512-xyITfrF0G3l1gwR79hvNCCWKQ/16uK14xNNPFgzjbIqF4EpBvhO6l3jrWxXFUW51z6dVIl2Szh3x3uIbBWzH1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.3.tgz", + "integrity": "sha512-fc/T0QHMzvmnlF+kfD6bHLB8u+17gg13260p/E86yYjVoKNFjonL/+Y0GGQjMbFUas9QijqOa7pcR00a9RNkwg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.3.tgz", + "integrity": "sha512-lsKUYVd8L/j2uNs8dhMjMsKC5MHYh77gR9EThu7YCeeFz1XpIkx1I4a7mhoVfPS2VPVD1pMCh+PgxuAHUcEmXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.3.tgz", + "integrity": "sha512-EyfGWeOwRqK5Xj18vok0qv8IFBZ1/+hKV+cqD44oVhGsxHo9TmPtoSiDrWn8Sa2swq/VuO5Aiog6YPDj81oIkA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.3.tgz", + "integrity": "sha512-PwXkcl3t0kSeYH5RuJIeh/fHOzKZd+ZdifAWzpVO+9TLWArutTFBJvOSkTZ3CcqQqNrTj1Qyo6nqE8MQj/a7cQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.3.tgz", + "integrity": "sha512-CRVkkSXf5GQcq7Am2a2tdIn85oqi/bkjuPvhNqcdeTgI0xgNbqLnEPRy2AEGkRuaJWB5uCX1IC4sqnY8ET14Yg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.3.tgz", + "integrity": "sha512-t7zK1Cheh0xvzfZbimztiE0wGnpV+YRsBg3tefcEBN3O4GzgLu6fFpA5HxEyVm3hHZW1jAC4OhoGEp7C5Ii6Eg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.3.tgz", + "integrity": "sha512-fUZPtyCYih6y4lDYdSM4Yoax4nS7aH0/XixJStys+9tfp5cAlIAZhEVKOOdeGXmQn0IEyiUtlIsPnfObbeDQfQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.3.tgz", + "integrity": "sha512-oIcK2LqHWqfMERqjvaKJ3QJmycHn723HsXIv5gH4iGfmePfSj+gi0ZQv2h4bHUg2bs2gJtV0DlIjGhEuvdgxLw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.3.tgz", + "integrity": "sha512-RW9lpfZ6XZ6f5to2DJPvt0f/4RXEW229Xf++quVoW+YbnPrcapIJChtD/AmZ8cK3hglO/hXxJjs21pV0/l7L5w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.3.tgz", + "integrity": "sha512-piZ2oBoaq58pKZvhgdV6PemlL30Uhd9GmmOkIGZYgChwNcyVSSl6iMEJxMzU7x44Lk9q+hJ6a343M/iVEMEvxA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.3.tgz", + "integrity": "sha512-vaMfouYTz/4tKdQsXDccqhV6wgPEr+hfuxdNU5Pl/vQxYTsqcXv5DYEa5Z1RAxCoua5aEB+Uj5V7VT/bM92wxw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.3.tgz", + "integrity": "sha512-Fa3rNQQ9q1qwy9u2cdDvuGKy3jmPnPPMDdyy/qbn5d395Pb9hjLYiPzX9BozXMPJDlCNofSY7jN3miM9gyAdHA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.3.tgz", + "integrity": "sha512-LPJC8ub+9uzyC6ygVmp00dAqet1q1DsZ/OldGIIBt+y+Ctd1OfnKNlzQgXK8nxwY1G8fAhklFSeSRRgAUJnR0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.3.tgz", + "integrity": "sha512-WtUyRspyxZR6NTc2HG4xd9Wvz8lP4C6OUY1gAqisrf151HvXIxsK0mfAacFJNS7EN2wvPTgjP+SM8vgBOx5+zA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.3.tgz", + "integrity": "sha512-Z8qCK4BkBm40j5KUM4NrkxYQS0R12cBO1NBVtI4vws6uwh1n/VaNu31Hm+n2cJUWdFbfH57PBghkhm9yLgmPfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", @@ -1201,6 +1557,28 @@ "node": ">= 8" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@sinclair/typebox": { "version": "0.25.23", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", @@ -1280,6 +1658,12 @@ "@types/ms": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "node_modules/@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -2423,6 +2807,49 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.3.tgz", + "integrity": "sha512-eadWJC4CRpj93+miO5ZBlvCv+m2x6pzyNBznTvUeLFObMmxs1IMd8cCf6qiDVEZuDL6W8W7u+ZNW3GKEfOdDsA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.3", + "@esbuild/android-arm64": "0.18.3", + "@esbuild/android-x64": "0.18.3", + "@esbuild/darwin-arm64": "0.18.3", + "@esbuild/darwin-x64": "0.18.3", + "@esbuild/freebsd-arm64": "0.18.3", + "@esbuild/freebsd-x64": "0.18.3", + "@esbuild/linux-arm": "0.18.3", + "@esbuild/linux-arm64": "0.18.3", + "@esbuild/linux-ia32": "0.18.3", + "@esbuild/linux-loong64": "0.18.3", + "@esbuild/linux-mips64el": "0.18.3", + "@esbuild/linux-ppc64": "0.18.3", + "@esbuild/linux-riscv64": "0.18.3", + "@esbuild/linux-s390x": "0.18.3", + "@esbuild/linux-x64": "0.18.3", + "@esbuild/netbsd-x64": "0.18.3", + "@esbuild/openbsd-x64": "0.18.3", + "@esbuild/sunos-x64": "0.18.3", + "@esbuild/win32-arm64": "0.18.3", + "@esbuild/win32-ia32": "0.18.3", + "@esbuild/win32-x64": "0.18.3" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2655,6 +3082,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4071,6 +4504,15 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4131,6 +4573,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4216,6 +4664,18 @@ "node": ">=10" } }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -5203,6 +5663,65 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rollup": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-dts": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.0.tgz", + "integrity": "sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.0" + }, + "engines": { + "node": ">=v14" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.18.6" + }, + "peerDependencies": { + "rollup": "^3.0.0", + "typescript": "^4.1 || ^5.0" + } + }, + "node_modules/rollup-plugin-esbuild": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-5.0.0.tgz", + "integrity": "sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "debug": "^4.3.4", + "es-module-lexer": "^1.0.5", + "joycon": "^3.1.1", + "jsonc-parser": "^3.2.0" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.1", + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" + } + }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -6577,6 +7096,160 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@esbuild/android-arm": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.3.tgz", + "integrity": "sha512-QOn3VIlL6Qv1eHBpQB/s7simaZgGss2ASyxDOwYSLmc6vD0uuizZkuYawHmuLjWEm5wPwp0JQWhbpaYwwGevYw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.3.tgz", + "integrity": "sha512-PgabCsoaEEnnOiF6rUhOBXgYoLFIrHWP6mfLOzuQ1oZ1lwBdTL0hp5ivC4K3Kvz3BD8EipjeQo6l0aty3nr4qQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.3.tgz", + "integrity": "sha512-1OkJf8wNX1W5ucbp5HrK+z42b9DINb4ix59oJH/PIsh9cyFMqjgRKtCBXg0zEWhkmP1k3egdfrnS7cDTpLH43g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.3.tgz", + "integrity": "sha512-57aofORpY7wDAuMs6DeqpmgSnVfZ63RgGbR/BHdOSTqJgYvHDCMY7/o1myFntl3k0YxtLE3WAm56nMf4qy3UDw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.3.tgz", + "integrity": "sha512-NVBqMnxT9qvgu7Z322LUDlwjh4GDk6wEePyAQnHF9noxik/WvLFmr5v3Vgz5LSvqFducLCxsdmLztKhdpFW0Gg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.3.tgz", + "integrity": "sha512-XiLK1AsCk2wKxN7j8h9GXXCs8FPZhp07U0rnpwRkAVSVGgLaIWYSqpTRzKjAfqJiZlp+XKo1HwsmDdICEKB3Dg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.3.tgz", + "integrity": "sha512-xyITfrF0G3l1gwR79hvNCCWKQ/16uK14xNNPFgzjbIqF4EpBvhO6l3jrWxXFUW51z6dVIl2Szh3x3uIbBWzH1Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.3.tgz", + "integrity": "sha512-fc/T0QHMzvmnlF+kfD6bHLB8u+17gg13260p/E86yYjVoKNFjonL/+Y0GGQjMbFUas9QijqOa7pcR00a9RNkwg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.3.tgz", + "integrity": "sha512-lsKUYVd8L/j2uNs8dhMjMsKC5MHYh77gR9EThu7YCeeFz1XpIkx1I4a7mhoVfPS2VPVD1pMCh+PgxuAHUcEmXw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.3.tgz", + "integrity": "sha512-EyfGWeOwRqK5Xj18vok0qv8IFBZ1/+hKV+cqD44oVhGsxHo9TmPtoSiDrWn8Sa2swq/VuO5Aiog6YPDj81oIkA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.3.tgz", + "integrity": "sha512-PwXkcl3t0kSeYH5RuJIeh/fHOzKZd+ZdifAWzpVO+9TLWArutTFBJvOSkTZ3CcqQqNrTj1Qyo6nqE8MQj/a7cQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.3.tgz", + "integrity": "sha512-CRVkkSXf5GQcq7Am2a2tdIn85oqi/bkjuPvhNqcdeTgI0xgNbqLnEPRy2AEGkRuaJWB5uCX1IC4sqnY8ET14Yg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.3.tgz", + "integrity": "sha512-t7zK1Cheh0xvzfZbimztiE0wGnpV+YRsBg3tefcEBN3O4GzgLu6fFpA5HxEyVm3hHZW1jAC4OhoGEp7C5Ii6Eg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.3.tgz", + "integrity": "sha512-fUZPtyCYih6y4lDYdSM4Yoax4nS7aH0/XixJStys+9tfp5cAlIAZhEVKOOdeGXmQn0IEyiUtlIsPnfObbeDQfQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.3.tgz", + "integrity": "sha512-oIcK2LqHWqfMERqjvaKJ3QJmycHn723HsXIv5gH4iGfmePfSj+gi0ZQv2h4bHUg2bs2gJtV0DlIjGhEuvdgxLw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.3.tgz", + "integrity": "sha512-RW9lpfZ6XZ6f5to2DJPvt0f/4RXEW229Xf++quVoW+YbnPrcapIJChtD/AmZ8cK3hglO/hXxJjs21pV0/l7L5w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.3.tgz", + "integrity": "sha512-piZ2oBoaq58pKZvhgdV6PemlL30Uhd9GmmOkIGZYgChwNcyVSSl6iMEJxMzU7x44Lk9q+hJ6a343M/iVEMEvxA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.3.tgz", + "integrity": "sha512-vaMfouYTz/4tKdQsXDccqhV6wgPEr+hfuxdNU5Pl/vQxYTsqcXv5DYEa5Z1RAxCoua5aEB+Uj5V7VT/bM92wxw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.3.tgz", + "integrity": "sha512-Fa3rNQQ9q1qwy9u2cdDvuGKy3jmPnPPMDdyy/qbn5d395Pb9hjLYiPzX9BozXMPJDlCNofSY7jN3miM9gyAdHA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.3.tgz", + "integrity": "sha512-LPJC8ub+9uzyC6ygVmp00dAqet1q1DsZ/OldGIIBt+y+Ctd1OfnKNlzQgXK8nxwY1G8fAhklFSeSRRgAUJnR0w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.3.tgz", + "integrity": "sha512-WtUyRspyxZR6NTc2HG4xd9Wvz8lP4C6OUY1gAqisrf151HvXIxsK0mfAacFJNS7EN2wvPTgjP+SM8vgBOx5+zA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.3.tgz", + "integrity": "sha512-Z8qCK4BkBm40j5KUM4NrkxYQS0R12cBO1NBVtI4vws6uwh1n/VaNu31Hm+n2cJUWdFbfH57PBghkhm9yLgmPfw==", + "dev": true, + "optional": true + }, "@eslint-community/eslint-utils": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.3.0.tgz", @@ -7005,6 +7678,17 @@ "fastq": "^1.6.0" } }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, "@sinclair/typebox": { "version": "0.25.23", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", @@ -7084,6 +7768,12 @@ "@types/ms": "*" } }, + "@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -7904,6 +8594,42 @@ "is-arrayish": "^0.2.1" } }, + "es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "esbuild": { + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.3.tgz", + "integrity": "sha512-eadWJC4CRpj93+miO5ZBlvCv+m2x6pzyNBznTvUeLFObMmxs1IMd8cCf6qiDVEZuDL6W8W7u+ZNW3GKEfOdDsA==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.3", + "@esbuild/android-arm64": "0.18.3", + "@esbuild/android-x64": "0.18.3", + "@esbuild/darwin-arm64": "0.18.3", + "@esbuild/darwin-x64": "0.18.3", + "@esbuild/freebsd-arm64": "0.18.3", + "@esbuild/freebsd-x64": "0.18.3", + "@esbuild/linux-arm": "0.18.3", + "@esbuild/linux-arm64": "0.18.3", + "@esbuild/linux-ia32": "0.18.3", + "@esbuild/linux-loong64": "0.18.3", + "@esbuild/linux-mips64el": "0.18.3", + "@esbuild/linux-ppc64": "0.18.3", + "@esbuild/linux-riscv64": "0.18.3", + "@esbuild/linux-s390x": "0.18.3", + "@esbuild/linux-x64": "0.18.3", + "@esbuild/netbsd-x64": "0.18.3", + "@esbuild/openbsd-x64": "0.18.3", + "@esbuild/sunos-x64": "0.18.3", + "@esbuild/win32-arm64": "0.18.3", + "@esbuild/win32-ia32": "0.18.3", + "@esbuild/win32-x64": "0.18.3" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -8063,6 +8789,12 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -9113,6 +9845,12 @@ } } }, + "joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -9158,6 +9896,12 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -9222,6 +9966,15 @@ "yallist": "^4.0.0" } }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -9908,6 +10661,38 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz", + "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-dts": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.0.tgz", + "integrity": "sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "magic-string": "^0.30.0" + } + }, + "rollup-plugin-esbuild": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-5.0.0.tgz", + "integrity": "sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "debug": "^4.3.4", + "es-module-lexer": "^1.0.5", + "joycon": "^3.1.1", + "jsonc-parser": "^3.2.0" + } + }, "run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", diff --git a/package.json b/package.json index ed6dc03c..3d6fcf70 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,27 @@ "url": "https://opencollective.com/mediasoup" }, "main": "lib/index.js", + "module": "lib/index.mjs", "types": "lib/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "types": "./lib/index.d.ts", + "import": { + "types": "./lib/index.d.mts", + "default": "./lib/index.mjs" + }, + "default": "./index.js" + }, + "./*": { + "types": "./lib/*.d.ts", + "import": { + "types": "./lib/*.d.mts", + "default": "./lib/*.mjs" + }, + "default": "./lib/*.js" + } + }, "files": [ "npm-scripts.mjs", "lib" @@ -78,10 +98,14 @@ "@types/sdp-transform": "^2.4.6", "@typescript-eslint/eslint-plugin": "^5.59.11", "@typescript-eslint/parser": "^5.59.11", + "esbuild": "^0.18.3", "eslint": "^8.42.0", "eslint-plugin-jest": "^27.2.1", "jest": "^29.5.0", "open-cli": "^7.2.0", + "rollup": "^3.25.1", + "rollup-plugin-dts": "^5.3.0", + "rollup-plugin-esbuild": "^5.0.0", "ts-jest": "^29.1.0", "tsc-watch": "^6.0.4", "typescript": "^5.1.3" diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 00000000..d2f3a2a8 --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,35 @@ +import dts from 'rollup-plugin-dts'; +import esbuild from 'rollup-plugin-esbuild'; + +const external = (id) => !/^[./]/.test(id); + +const createBundleConfig = (input, output) => [ + { // Create a bundle + input : input, + plugins : [ esbuild() ], + output : [ + { + file : `${output}.js`, + format : 'cjs', + sourcemap : true + }, + { + file : `${output}.mjs`, + format : 'es', + sourcemap : true + } + ], + external : external + }, + { // Create a bundle for types. + input : input, + plugins : [ dts() ], + output : { + file : `${output}.d.ts`, + format : 'es' + }, + external : external + } +]; + +export default [ ...createBundleConfig('src/index.ts', 'lib/index'), ...createBundleConfig('src/handlers/index.ts', 'lib/builtin-handlers') ]; diff --git a/src/BuiltinHandlerFactory.ts b/src/BuiltinHandlerFactory.ts new file mode 100644 index 00000000..7ba83d3f --- /dev/null +++ b/src/BuiltinHandlerFactory.ts @@ -0,0 +1,94 @@ +import { Chrome111 } from './handlers/Chrome111'; +import { Chrome74 } from './handlers/Chrome74'; +import { Chrome70 } from './handlers/Chrome70'; +import { Chrome67 } from './handlers/Chrome67'; +import { Chrome55 } from './handlers/Chrome55'; +import { Firefox60 } from './handlers/Firefox60'; +import { Safari12 } from './handlers/Safari12'; +import { Safari11 } from './handlers/Safari11'; +import { Edge11 } from './handlers/Edge11'; +import { ReactNativeUnifiedPlan } from './handlers/ReactNativeUnifiedPlan'; +import { ReactNative } from './handlers/ReactNative'; + +export type BuiltinHandlerName = + | 'Chrome111' + | 'Chrome74' + | 'Chrome70' + | 'Chrome67' + | 'Chrome55' + | 'Firefox60' + | 'Safari12' + | 'Safari11' + | 'Edge11' + | 'ReactNativeUnifiedPlan' + | 'ReactNative'; + +export const builtinHandlerFactory = (handlerName: BuiltinHandlerName) => +{ + switch (handlerName) + { + case 'Chrome111': + return Chrome111.createFactory(); + case 'Chrome74': + return Chrome74.createFactory(); + case 'Chrome70': + return Chrome70.createFactory(); + case 'Chrome67': + return Chrome67.createFactory(); + case 'Chrome55': + return Chrome55.createFactory(); + case 'Firefox60': + return Firefox60.createFactory(); + case 'Safari12': + return Safari12.createFactory(); + case 'Safari11': + return Safari11.createFactory(); + case 'Edge11': + return Edge11.createFactory(); + case 'ReactNativeUnifiedPlan': + return ReactNativeUnifiedPlan.createFactory(); + case 'ReactNative': + return ReactNative.createFactory(); + default: + throw new TypeError(`unknown handlerName "${handlerName}"`); + } +}; +export const browserHandlerFactory = (handlerName: Exclude) => +{ + switch (handlerName) + { + case 'Chrome111': + return Chrome111.createFactory(); + case 'Chrome74': + return Chrome74.createFactory(); + case 'Chrome70': + return Chrome70.createFactory(); + case 'Chrome67': + return Chrome67.createFactory(); + case 'Chrome55': + return Chrome55.createFactory(); + case 'Firefox60': + return Firefox60.createFactory(); + case 'Safari12': + return Safari12.createFactory(); + case 'Safari11': + return Safari11.createFactory(); + case 'Edge11': + return Edge11.createFactory(); + default: + throw new TypeError(`unknown handlerName "${handlerName}"`); + } +}; + +export const reactNativeHandlerFactory = (handlerName: 'ReactNative' | 'ReactNativeUnifiedPlan') => +{ + switch (handlerName) + { + case 'ReactNativeUnifiedPlan': + return ReactNativeUnifiedPlan.createFactory(); + case 'ReactNative': + return ReactNative.createFactory(); + default: + throw new TypeError(`unknown handlerName "${handlerName}"`); + } +}; \ No newline at end of file diff --git a/src/Device.ts b/src/Device.ts index 42d2379c..10112c17 100644 --- a/src/Device.ts +++ b/src/Device.ts @@ -6,36 +6,13 @@ import * as utils from './utils'; import * as ortc from './ortc'; import { Transport, TransportOptions, CanProduceByKind } from './Transport'; import { HandlerFactory, HandlerInterface } from './handlers/HandlerInterface'; -import { Chrome111 } from './handlers/Chrome111'; -import { Chrome74 } from './handlers/Chrome74'; -import { Chrome70 } from './handlers/Chrome70'; -import { Chrome67 } from './handlers/Chrome67'; -import { Chrome55 } from './handlers/Chrome55'; -import { Firefox60 } from './handlers/Firefox60'; -import { Safari12 } from './handlers/Safari12'; -import { Safari11 } from './handlers/Safari11'; -import { Edge11 } from './handlers/Edge11'; -import { ReactNativeUnifiedPlan } from './handlers/ReactNativeUnifiedPlan'; -import { ReactNative } from './handlers/ReactNative'; import { RtpCapabilities, MediaKind } from './RtpParameters'; import { SctpCapabilities } from './SctpParameters'; import { AppData } from './types'; +import { BuiltinHandlerName, builtinHandlerFactory } from './BuiltinHandlerFactory'; const logger = new Logger('Device'); -export type BuiltinHandlerName = - | 'Chrome111' - | 'Chrome74' - | 'Chrome70' - | 'Chrome67' - | 'Chrome55' - | 'Firefox60' - | 'Safari12' - | 'Safari11' - | 'Edge11' - | 'ReactNativeUnifiedPlan' - | 'ReactNative'; - export type DeviceOptions = { /** @@ -199,8 +176,7 @@ export type DeviceObserverEvents = { newtransport: [Transport]; }; - -export class Device +export class ManualDevice { // RTC handler factory. private readonly _handlerFactory: HandlerFactory; @@ -225,95 +201,11 @@ export class Device * * @throws {UnsupportedError} if device is not supported. */ - constructor({ handlerName, handlerFactory, Handler }: DeviceOptions = {}) + constructor({ handlerFactory }: Required>) { logger.debug('constructor()'); - // Handle deprecated option. - if (Handler) - { - logger.warn( - 'constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead'); - - if (typeof Handler === 'string') - { - handlerName = Handler as BuiltinHandlerName; - } - else - { - throw new TypeError( - 'non string Handler option no longer supported, use handlerFactory instead'); - } - } - - if (handlerName && handlerFactory) - { - throw new TypeError('just one of handlerName or handlerInterface can be given'); - } - - if (handlerFactory) - { - this._handlerFactory = handlerFactory; - } - else - { - if (handlerName) - { - logger.debug('constructor() | handler given: %s', handlerName); - } - else - { - handlerName = detectDevice(); - - if (handlerName) - { - logger.debug('constructor() | detected handler: %s', handlerName); - } - else - { - throw new UnsupportedError('device not supported'); - } - } - - switch (handlerName) - { - case 'Chrome111': - this._handlerFactory = Chrome111.createFactory(); - break; - case 'Chrome74': - this._handlerFactory = Chrome74.createFactory(); - break; - case 'Chrome70': - this._handlerFactory = Chrome70.createFactory(); - break; - case 'Chrome67': - this._handlerFactory = Chrome67.createFactory(); - break; - case 'Chrome55': - this._handlerFactory = Chrome55.createFactory(); - break; - case 'Firefox60': - this._handlerFactory = Firefox60.createFactory(); - break; - case 'Safari12': - this._handlerFactory = Safari12.createFactory(); - break; - case 'Safari11': - this._handlerFactory = Safari11.createFactory(); - break; - case 'Edge11': - this._handlerFactory = Edge11.createFactory(); - break; - case 'ReactNativeUnifiedPlan': - this._handlerFactory = ReactNativeUnifiedPlan.createFactory(); - break; - case 'ReactNative': - this._handlerFactory = ReactNative.createFactory(); - break; - default: - throw new TypeError(`unknown handlerName "${handlerName}"`); - } - } + this._handlerFactory = handlerFactory; // Create a temporal handler to get its name. const handler = this._handlerFactory(); @@ -640,3 +532,64 @@ export class Device return transport; } } + +export class Device extends ManualDevice +{ + + /** + * Create a new Device to connect to mediasoup server. + * + * @throws {UnsupportedError} if device is not supported. + */ + constructor({ handlerName, handlerFactory, Handler }: DeviceOptions = {}) + { + // Handle deprecated option. + if (Handler) + { + logger.warn( + 'constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead'); + + if (typeof Handler === 'string') + { + handlerName = Handler as BuiltinHandlerName; + } + else + { + throw new TypeError( + 'non string Handler option no longer supported, use handlerFactory instead'); + } + } + + if (handlerName && handlerFactory) + { + throw new TypeError('just one of handlerName or handlerInterface can be given'); + } + + if (handlerFactory) + { + super({ handlerFactory }); + } + else + { + if (handlerName) + { + logger.debug('constructor() | handler given: %s', handlerName); + } + else + { + handlerName = detectDevice(); + + if (handlerName) + { + logger.debug('constructor() | detected handler: %s', handlerName); + } + else + { + throw new UnsupportedError('device not supported'); + } + } + + super({ handlerFactory: builtinHandlerFactory(handlerName) }); + } + } +} diff --git a/src/handlers/index.ts b/src/handlers/index.ts new file mode 100644 index 00000000..18a0c418 --- /dev/null +++ b/src/handlers/index.ts @@ -0,0 +1,23 @@ +import { Chrome111 } from './Chrome111'; +import { Chrome74 } from './Chrome74'; +import { Chrome70 } from './Chrome70'; +import { Chrome67 } from './Chrome67'; +import { Chrome55 } from './Chrome55'; +import { Firefox60 } from './Firefox60'; +import { Safari12 } from './Safari12'; +import { Safari11 } from './Safari11'; +import { Edge11 } from './Edge11'; +import { ReactNativeUnifiedPlan } from './ReactNativeUnifiedPlan'; +import { ReactNative } from './ReactNative'; + +export { Chrome111 + , Chrome74 + , Chrome70 + , Chrome67 + , Chrome55 + , Firefox60 + , Safari12 + , Safari11 + , Edge11 + , ReactNativeUnifiedPlan + , ReactNative }; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 4c9817b5..bfb1f894 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,7 @@ import debug from 'debug'; -import { Device, detectDevice } from './Device'; +import { Device, detectDevice, ManualDevice } from './Device'; + + import * as types from './types'; /** @@ -15,7 +17,9 @@ export const version = '__MEDIASOUP_CLIENT_VERSION__'; /** * Expose Device class and detectDevice() helper. */ -export { Device, detectDevice }; +export { Device, detectDevice, ManualDevice }; + +export { builtinHandlerFactory, browserHandlerFactory, reactNativeHandlerFactory } from './BuiltinHandlerFactory'; /** * Expose parseScalabilityMode() function. diff --git a/tsconfig.json b/tsconfig.json index fd50eb63..c55e3911 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,11 +4,12 @@ { "lib": [ "es2018", "dom" ], "target": "es2018", - "module": "commonjs", + "module": "esnext", "moduleResolution": "node", "esModuleInterop": true, "isolatedModules": true, "strict": true, + "noEmit": true, "outDir": "lib", "declaration": true, "declarationMap": true