From d02fedfb2dcb3d1776792960869493997fac708e Mon Sep 17 00:00:00 2001 From: Daniel Silhavy Date: Mon, 5 Aug 2024 17:04:37 +0200 Subject: [PATCH 1/6] Output ESM via webpack build script --- build/webpack.base.cjs | 41 +++++++++++++++++++++++++++++------------ build/webpack.dev.cjs | 18 +++++++++++++++--- build/webpack.prod.cjs | 34 ++++++++++++++++++++++++++++++---- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/build/webpack.base.cjs b/build/webpack.base.cjs index b44781e4dc..5bf8451987 100644 --- a/build/webpack.base.cjs +++ b/build/webpack.base.cjs @@ -1,18 +1,9 @@ const path = require('path'); const pkg = require('../package.json'); -const out_dir = '../dist'; - -const config = { +const commonConfig = { devtool: 'source-map', target: ['web', 'es5'], - output: { - path: path.resolve(__dirname, out_dir), - publicPath: '/dist/', - library: 'dashjs', - libraryTarget: 'umd', - libraryExport: 'default' - }, module: { rules: [ { @@ -29,7 +20,7 @@ const config = { use: [ { loader: `babel-loader`, - options: {presets: ['@babel/env']} + options: { presets: ['@babel/env'] } } ] } @@ -43,4 +34,30 @@ const config = { }, } -module.exports = {config}; +const umdConfig = { + ...commonConfig, + output: { + path: path.resolve(__dirname, '../dist'), + publicPath: '/dist/', + library: 'dashjs', + libraryTarget: 'umd', + libraryExport: 'default' + }, +}; + +const esmConfig = { + ...commonConfig, + experiments: { + outputModule: true + }, + output: { + path: path.resolve(__dirname, '../dist/esm'), + publicPath: '/dist/esm/', + library: { + type: 'module', + }, + libraryExport: 'default', + }, +}; + +module.exports = { umdConfig, esmConfig }; diff --git a/build/webpack.dev.cjs b/build/webpack.dev.cjs index f80ead7b72..36e8f0fc16 100644 --- a/build/webpack.dev.cjs +++ b/build/webpack.dev.cjs @@ -1,8 +1,8 @@ const { merge } = require('webpack-merge'); -const common = require('./webpack.base.cjs').config; +const { umdConfig, esmConfig } = require('./webpack.base.cjs'); const path = require('path'); -const config = merge(common, { +const umdDevConfig = merge(umdConfig, { mode: 'development', entry: { 'dash.all': './index.js', @@ -23,4 +23,16 @@ const config = merge(common, { } }); -module.exports = config; +const esmDevConfig = merge(esmConfig, { + mode: 'development', + entry: { + 'dash.all': './index.js', + 'dash.mss': './src/mss/index.js', + 'dash.offline': './src/offline/index.js' + }, + output: { + filename: '[name].debug.esm.js', + }, +}); + +module.exports = [umdDevConfig, esmDevConfig]; diff --git a/build/webpack.prod.cjs b/build/webpack.prod.cjs index 5abccbdd4b..a98d808439 100644 --- a/build/webpack.prod.cjs +++ b/build/webpack.prod.cjs @@ -1,6 +1,6 @@ const { merge } = require('webpack-merge'); const ESLintPlugin = require('eslint-webpack-plugin'); -const common = require('./webpack.base.cjs').config; +const { umdConfig, esmConfig } = require('./webpack.base.cjs'); const entries = { 'dash.all': './index.js', @@ -11,7 +11,7 @@ const entries = { 'dash.offline': './src/offline/index.js' } -const configDev = merge(common, { +const configDevUmd = merge(umdConfig, { mode: 'development', entry: entries, output: { @@ -19,7 +19,7 @@ const configDev = merge(common, { } }); -const configProd = merge(common, { +const configProdUmd = merge(umdConfig, { mode: 'production', entry: entries, output: { @@ -37,4 +37,30 @@ const configProd = merge(common, { ] }); -module.exports = [configDev, configProd]; +const configDevEsm = merge(esmConfig, { + mode: 'development', + entry: entries, + output: { + filename: '[name].debug.esm.js' + } +}); + +const configProdEsm = merge(esmConfig, { + mode: 'production', + entry: entries, + output: { + filename: '[name].min.esm.js' + }, + performance: { hints: false }, + plugins: [ + new ESLintPlugin({ + files: [ + 'src/**/*.js', + 'test/unit/mocks/*.js', + 'test/unit/test/**/*.js' + ] + }) + ] +}); + +module.exports = [configDevUmd, configProdUmd, configDevEsm, configProdEsm]; From 40378856e9caac7d9757de2897590554a5b4599a Mon Sep 17 00:00:00 2001 From: Daniel Silhavy Date: Mon, 5 Aug 2024 17:08:32 +0200 Subject: [PATCH 2/6] Remove ESM output from dev config --- build/webpack.dev.cjs | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/build/webpack.dev.cjs b/build/webpack.dev.cjs index 36e8f0fc16..8df9695ee4 100644 --- a/build/webpack.dev.cjs +++ b/build/webpack.dev.cjs @@ -23,16 +23,5 @@ const umdDevConfig = merge(umdConfig, { } }); -const esmDevConfig = merge(esmConfig, { - mode: 'development', - entry: { - 'dash.all': './index.js', - 'dash.mss': './src/mss/index.js', - 'dash.offline': './src/offline/index.js' - }, - output: { - filename: '[name].debug.esm.js', - }, -}); -module.exports = [umdDevConfig, esmDevConfig]; +module.exports = [umdDevConfig]; From 2c90e3e6bf1640e0d6121ba2f734746c214193ae Mon Sep 17 00:00:00 2001 From: Daniel Silhavy Date: Mon, 5 Aug 2024 17:08:53 +0200 Subject: [PATCH 3/6] Remove unnecessary import --- build/webpack.dev.cjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/webpack.dev.cjs b/build/webpack.dev.cjs index 8df9695ee4..e9c605ac29 100644 --- a/build/webpack.dev.cjs +++ b/build/webpack.dev.cjs @@ -1,5 +1,5 @@ const { merge } = require('webpack-merge'); -const { umdConfig, esmConfig } = require('./webpack.base.cjs'); +const { umdConfig } = require('./webpack.base.cjs'); const path = require('path'); const umdDevConfig = merge(umdConfig, { From d6fa5451d9f132ea07f8d658b58e0fb8db007cbe Mon Sep 17 00:00:00 2001 From: Casey Occhialini <1508707+littlespex@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:53:41 -0700 Subject: [PATCH 4/6] fix: update package json export fields --- index.d.ts | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- package.json | 9 ++++++++- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/index.d.ts b/index.d.ts index 6d341a5123..e56083fb48 100644 --- a/index.d.ts +++ b/index.d.ts @@ -17,6 +17,15 @@ declare namespace dashjs { setCalleeNameVisible(flag: boolean): void; } + namespace Debug { + const LOG_LEVEL_NONE = 0; + const LOG_LEVEL_FATAL = 1; + const LOG_LEVEL_ERROR = 2; + const LOG_LEVEL_WARNING = 3; + const LOG_LEVEL_INFO = 4; + const LOG_LEVEL_DEBUG = 5; + } + interface EventBus { on(type: string, listener: any, scope: any, options?: object): void; @@ -1296,6 +1305,14 @@ declare namespace dashjs { export type TrackSelectionFunction = (tracks: MediaInfo[]) => MediaInfo[]; + export interface DvrWindow { + start: number; + end: number; + startAsUtc: number; + endAsUtc: number; + size: number; + } + export interface MediaPlayerClass { setConfig(config: object): void; @@ -1427,7 +1444,7 @@ declare namespace dashjs { timeInDvrWindow(): number; - getDvrWindow(): object; + getDvrWindow(): DvrWindow; duration(): number; @@ -1483,7 +1500,7 @@ declare namespace dashjs { setTextTrack(idx: number): void; - getRepresentationsFor(type: MediaType): Representation[]; + getRepresentationsByType(type: MediaType): Representation[]; getStreamsFromManifest(manifest: object): StreamInfo[]; @@ -3178,6 +3195,31 @@ declare namespace dashjs { MEDIA_KEY_MESSAGE_LICENSER_ERROR_MESSAGE: 'DRM: licenser error! --'; } + /** + * Streaming - Protection - Events + **/ + + export interface ProtectionEvents { + KEY_ADDED: 'public_keyAdded'; + KEY_ERROR: 'public_keyError'; + KEY_MESSAGE: 'public_keyMessage'; + KEY_SESSION_CLOSED: 'public_keySessionClosed'; + KEY_SESSION_CREATED: 'public_keySessionCreated'; + KEY_SESSION_REMOVED: 'public_keySessionRemoved'; + KEY_STATUSES_CHANGED: 'public_keyStatusesChanged'; + KEY_SYSTEM_ACCESS_COMPLETE: 'public_keySystemAccessComplete'; + KEY_SYSTEM_SELECTED: 'public_keySystemSelected'; + LICENSE_REQUEST_COMPLETE: 'public_licenseRequestComplete'; + LICENSE_REQUEST_SENDING: 'public_licenseRequestSending'; + NEED_KEY: 'needkey'; + PROTECTION_CREATED: 'public_protectioncreated'; + PROTECTION_DESTROYED: 'public_protectiondestroyed'; + SERVER_CERTIFICATE_UPDATED: 'serverCertificateUpdated'; + TEARDOWN_COMPLETE: 'protectionTeardownComplete'; + VIDEO_ELEMENT_SELECTED: 'videoElementSelected'; + KEY_SESSION_UPDATED: 'public_keySessionUpdated'; + } + /** * Streaming - Protection - Models **/ @@ -3511,6 +3553,11 @@ declare namespace dashjs { createProtectionSystem(config: object): void; } + export namespace Protection { + export const events: ProtectionEvents; + export const errors: ProtectionErrors; + } + /** * Streaming - Rules - ABR - LolP */ diff --git a/package.json b/package.json index 1cfedaa4a3..0ccc0503b9 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,14 @@ "description": "A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.", "author": "Dash Industry Forum", "license": "BSD-3-Clause", - "exports": "./dist/dash.all.min.js", + "exports": { + ".": { + "types": "./index.d.ts", + "import": "./dist/esm/dash.all.debug.esm.js", + "default": "./dist/esm/dash.all.debug.esm.js", + "script": "./dist/dash.all.min.js" + } + }, "type": "module", "types": "index.d.ts", "scripts": { From 0ab7fa633fe1c6ebfc6fccb18b269d9234d78f98 Mon Sep 17 00:00:00 2001 From: Casey Occhialini <1508707+littlespex@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:56:40 -0700 Subject: [PATCH 5/6] no message --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 0ccc0503b9..3a3d9f900a 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "types": "./index.d.ts", "import": "./dist/esm/dash.all.debug.esm.js", "default": "./dist/esm/dash.all.debug.esm.js", + "browser": "./dist/dash.all.min.js", "script": "./dist/dash.all.min.js" } }, From 596d82b06e664e8d207374fa573e71ccae9dd0c4 Mon Sep 17 00:00:00 2001 From: Casey Occhialini <1508707+littlespex@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:58:58 -0700 Subject: [PATCH 6/6] no message --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 3a3d9f900a..2d25e809f1 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ } }, "type": "module", - "types": "index.d.ts", "scripts": { "dev": "tsc && webpack --config build/webpack.dev.cjs --mode development --watch --progress", "start": "webpack serve --config build/webpack.dev.cjs",