From b3d17461e4be8c9db4fad5d066d43c5f4c62844f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 28 May 2024 22:51:27 +0200 Subject: [PATCH] Fix light ESM build (#6307) ESM build needs a special empty file that exports an object to prevent property access of "undefined" (cherry picked from commit 474a10b68d1ed8d351b81cbac367cc1fcf104fc3) --- build-config.js | 34 ++++++++++++++++++---------------- src/empty-es.js | 5 +++++ 2 files changed, 23 insertions(+), 16 deletions(-) create mode 100644 src/empty-es.js diff --git a/build-config.js b/build-config.js index d0a3a233c2c..eae7431e1fa 100644 --- a/build-config.js +++ b/build-config.js @@ -202,59 +202,61 @@ const basePlugins = [ commonjs({ transformMixedEsModules: true }), ]; -function getAliasesForLightDist() { +function getAliasesForLightDist(format) { + const emptyFile = format === 'esm' ? 'empty-es.js' : 'empty.js'; + let aliases = {}; if (!addEMESupport) { aliases = { ...aliases, - './controller/eme-controller': './empty.js', - './utils/mediakeys-helper': './empty.js', - '../utils/mediakeys-helper': '../empty.js', + './controller/eme-controller': `./${emptyFile}`, + './utils/mediakeys-helper': `./${emptyFile}`, + '../utils/mediakeys-helper': `../${emptyFile}`, }; } if (!addCMCDSupport) { - aliases = { ...aliases, './controller/cmcd-controller': './empty.js' }; + aliases = { ...aliases, './controller/cmcd-controller': `./${emptyFile}` }; } if (!addSubtitleSupport) { aliases = { ...aliases, - './utils/cues': './empty.js', - './controller/timeline-controller': './empty.js', - './controller/subtitle-track-controller': './empty.js', - './controller/subtitle-stream-controller': './empty.js', + './utils/cues': `./${emptyFile}`, + './controller/timeline-controller': `./${emptyFile}`, + './controller/subtitle-track-controller': `./${emptyFile}`, + './controller/subtitle-stream-controller': `./${emptyFile}`, }; } if (!addAltAudioSupport) { aliases = { ...aliases, - './controller/audio-track-controller': './empty.js', - './controller/audio-stream-controller': './empty.js', + './controller/audio-track-controller': `./${emptyFile}`, + './controller/audio-stream-controller': `./${emptyFile}`, }; } if (!addVariableSubstitutionSupport) { aliases = { ...aliases, - './utils/variable-substitution': './empty.js', - '../utils/variable-substitution': '../empty.js', + './utils/variable-substitution': `./${emptyFile}`, + '../utils/variable-substitution': `../${emptyFile}`, }; } if (!addM2TSAdvancedCodecSupport) { aliases = { ...aliases, - './ac3-demuxer': '../empty.js', + './ac3-demuxer': `../${emptyFile}`, }; } if (!addMediaCapabilitiesSupport) { aliases = { ...aliases, - '../utils/mediacapabilities-helper': '../empty.js', + '../utils/mediacapabilities-helper': `../${emptyFile}`, }; } @@ -299,7 +301,7 @@ const buildRollupConfig = ({ ? [alias({ entries: { './transmuxer-worker': '../empty.js' } })] : []), ...(type === BUILD_TYPE.light - ? [alias({ entries: getAliasesForLightDist() })] + ? [alias({ entries: getAliasesForLightDist(format) })] : []), ...(format === 'esm' ? [buildBabelEsm({ stripConsole: true })] diff --git a/src/empty-es.js b/src/empty-es.js new file mode 100644 index 00000000000..2c3b40cbfed --- /dev/null +++ b/src/empty-es.js @@ -0,0 +1,5 @@ +// This file is inserted as a shim for modules which we do not want to include into the distro. +// This replacement is done in the "alias" plugin of the rollup config. +// Use a ES dedicated file as Rollup assigns an object in the output +// For example: "var KeySystemFormats = emptyEs.KeySystemFormats;" +module.exports = {};