UNPKG

awesome-gadgets

Version:

Storage, management, compilation, and automatic deployment of MediaWiki gadgets.

73 lines (63 loc) 2.04 kB
import { buildFiles, cleanUpDist, findSourceFile, generateDefinitionItem, generateFileArray, generateFileNames, getLicense, saveDefinition, } from './utils/build-util'; import chalk from 'chalk'; /** * Compile scripts and styles and generate corresponding definitions */ const build = async () => { console.log(chalk.yellow('--- starting build...')); await cleanUpDist(); const definitions = await Promise.all( Object.entries(findSourceFile()).map( async ([gadgetName, {definition, license, script, scripts, style, styles}]) => { let gadgetFiles = '|'; const licenseText = getLicense(gadgetName, license); if (script || scripts?.length) { const hasVue = scripts?.some((fileName) => { return fileName.endsWith('.vue'); }); if (hasVue && !script) { console.log( chalk.red( `The ${chalk.bold(gadgetName)} uses Vue components but missing entry file, skipping it.` ) ); } else { const {dependencies, externalPackages} = definition; const builtScriptFileNames = await buildFiles(gadgetName, 'script', { dependencies, externalPackages, licenseText, files: generateFileArray(script, scripts), }); const scriptFileNames = generateFileNames(gadgetName, builtScriptFileNames); gadgetFiles += scriptFileNames ? `${scriptFileNames}|` : ''; } } else if (style || styles?.length) { const builtStyleFileNames = await buildFiles(gadgetName, 'style', { licenseText, files: generateFileArray(style, styles), }); const styleFileNames = generateFileNames(gadgetName, builtStyleFileNames); gadgetFiles += styleFileNames ? `${styleFileNames}|` : ''; } gadgetFiles = gadgetFiles.replace(/\|$/, ''); if (!gadgetFiles) { return null; } return generateDefinitionItem(gadgetName, definition, gadgetFiles); } ) ); saveDefinition(definitions.filter(Boolean) as string[]); console.log(chalk.green(' build completed.')); }; export {build};