From fe6b43d586792026791bc3a1612a1d1b66a505ef Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Tue, 25 Mar 2025 15:36:32 -0400 Subject: [PATCH] Lookup themes dynamically --- package-lock.json | 2 +- package.json | 1 + webpack.common.js | 11 +++++++++++ webpack.dev.js | 17 +---------------- webpack.prod.js | 18 +++--------------- 5 files changed, 17 insertions(+), 32 deletions(-) diff --git a/package-lock.json b/package-lock.json index d44b8fe158..b7d157358d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -102,6 +102,7 @@ "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.1", + "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.0.2", "globals": "16.0.0", "html-loader": "5.1.0", @@ -11384,7 +11385,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", diff --git a/package.json b/package.json index 46cc20e457..5d4704690c 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-sonarjs": "3.0.2", "expose-loader": "5.0.1", + "fast-glob": "3.3.3", "fork-ts-checker-webpack-plugin": "9.0.2", "globals": "16.0.0", "html-loader": "5.1.0", diff --git a/webpack.common.js b/webpack.common.js index 39af742598..c93ca537e2 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -1,3 +1,4 @@ +const fg = require('fast-glob'); const path = require('path'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); @@ -33,9 +34,19 @@ try { const NODE_MODULES_REGEX = /[\\/]node_modules[\\/]/; +const THEMES = fg.globSync('themes/**/*.scss', { cwd: path.resolve(__dirname, 'src') }); +const THEMES_BY_ID = THEMES.reduce((acc, theme) => { + acc[theme.substring(0, theme.lastIndexOf('/'))] = `./${theme}`; + return acc; +}, {}); + const config = { context: path.resolve(__dirname, 'src'), target: 'browserslist', + entry: { + 'main.jellyfin': './index.jsx', + ...THEMES_BY_ID + }, resolve: { extensions: ['.tsx', '.ts', '.js'], modules: [ diff --git a/webpack.dev.js b/webpack.dev.js index 5721f54f76..58c5fbbd68 100644 --- a/webpack.dev.js +++ b/webpack.dev.js @@ -1,26 +1,11 @@ -const common = require('./webpack.common'); const { merge } = require('webpack-merge'); -const THEMES = [ - 'appletv', - 'blueradiance', - 'dark', - 'light', - 'purplehaze', - 'wmc' -]; +const common = require('./webpack.common'); module.exports = merge(common, { // In order for live reload to work we must use "web" as the target not "browserslist" target: process.env.WEBPACK_SERVE ? 'web' : 'browserslist', mode: 'development', - entry: { - 'main.jellyfin': './index.jsx', - ...THEMES.reduce((acc, theme) => { - acc[`themes/${theme}`] = `./themes/${theme}/theme.scss`; - return acc; - }, {}) - }, devtool: 'eval-cheap-module-source-map', module: { rules: [ diff --git a/webpack.prod.js b/webpack.prod.js index 4912329b3b..e45f83f19d 100644 --- a/webpack.prod.js +++ b/webpack.prod.js @@ -1,23 +1,11 @@ -const common = require('./webpack.common'); const { merge } = require('webpack-merge'); -const THEMES = [ - 'appletv', - 'blueradiance', - 'dark', - 'light', - 'purplehaze', - 'wmc' -]; +const common = require('./webpack.common'); module.exports = merge(common, { mode: 'production', entry: { - 'main.jellyfin': './index.jsx', - 'serviceworker': './serviceworker.js', - ...THEMES.reduce((acc, theme) => { - acc[`themes/${theme}`] = `./themes/${theme}/theme.scss`; - return acc; - }, {}) + ...common.entry, + 'serviceworker': './serviceworker.js' } });