From 51a553183bfae863b3a88172580eb3864d3b0bef Mon Sep 17 00:00:00 2001 From: MattIPv4 Date: Fri, 5 May 2023 19:10:54 +0100 Subject: [PATCH] Cleanup logic for ensuring values are arrays --- util/prism_util.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/util/prism_util.js b/util/prism_util.js index 534dca6..c6a8dcd 100644 --- a/util/prism_util.js +++ b/util/prism_util.js @@ -32,6 +32,15 @@ const { languages: languagesData } = require('../vendor/prismjs/components'); */ const dedupe = arr => Array.from(new Set(arr)); +/** + * Ensure a value is an array, wrapping it if it is not. + * + * @param {any|any[]} val Value to ensure is an array. + * @returns {any[]} + * @private + */ +const array = val => (Array.isArray(val) ? val : [ val ]); + /** * All languages that Prism supports. * @@ -45,7 +54,7 @@ const languages = Object.freeze(new Set(Object.keys(languagesData).filter(lang = * @type {Readonly>} */ const languageAliases = Object.freeze(Object.entries(languagesData).reduce((aliases, [ lang, { alias } ]) => { - if (alias) (Array.isArray(alias) ? alias : [ alias ]).forEach(a => { aliases.set(a, lang); }); + if (alias) array(alias).forEach(a => { aliases.set(a, lang); }); return aliases; }, new Map())); @@ -58,16 +67,7 @@ const languageAliases = Object.freeze(Object.entries(languagesData).reduce((alia const getDependencies = lang => { if (!languages.has(lang)) throw new Error(`Unknown Prism language: ${lang}`); - const required = languagesData[lang].require || []; - const modify = languagesData[lang].modify || []; - const dependencies = [ - ...(Array.isArray(required) - ? required - : [ required ]), - ...(Array.isArray(modify) - ? modify - : [ modify ]), - ]; + const dependencies = [ ...array(languagesData[lang].require || []), ...array(languagesData[lang].modify || []) ]; return dedupe([ ...dependencies, ...dependencies.map(dep => getDependencies(dep)).flat(), @@ -77,6 +77,7 @@ const getDependencies = lang => { /** * Plugin to restrict the languages that are bundled for Prism. * + * Automatically resolves and includes all dependencies for the given languages. * This plugin requires that Webpack is installed as a dependency with `ContextReplacementPlugin` available. * * @param {string[]} langs Prism languages to restrict to.