qortal-ui/core/tooling/generateBuildConfig.js
AlphaX-Projects fa29ff4c43 Update UI
Refactor and added new functioms
2024-05-08 13:16:23 +02:00

98 lines
2.3 KiB
JavaScript

const path = require('path')
const { nodeResolve } = require('@rollup/plugin-node-resolve')
const progress = require('rollup-plugin-progress')
const replace = require('@rollup/plugin-replace')
const globals = require('rollup-plugin-node-globals')
const commonjs = require('@rollup/plugin-commonjs')
const alias = require('@rollup/plugin-alias')
const terser = require('@rollup/plugin-terser');
const scss = require('rollup-plugin-scss')
const webWorkerLoader = require('@qortal/rollup-plugin-web-worker-loader')
const generateES5BuildConfig = require('./generateES5BuildConfig')
const generateInputs = (tree, inputs = {}) => {
for (const file of Object.values(tree)) {
inputs[file.file.split('.')[0]] = file.source
if (file.children) generateInputs(file.children, inputs)
}
return inputs
}
const generateBuildConfig = ({ elementComponents, functionalComponents, otherOutputs, apiComponents, aliases, options, inlineComponents }) => {
const buildConfig = {
outputs: [
{
dir: 'es6',
format: 'esm'
}
],
outputOptions: {
sourcemap: false
},
inputOptions: {
onwarn: (warning, rollupWarn) => {
if (warning.code !== 'CIRCULAR_DEPENDENCY') {
rollupWarn(warning)
}
},
input: {
main: options.inputFile,
...generateInputs(elementComponents)
},
plugins: [
alias({
entries: Object.keys(aliases).map(find => {
return {
find,
replacement: aliases[find]
}
})
}),
nodeResolve({
preferBuiltins: false,
mainFields: ['module', 'browser']
}),
replace({
preventAssignment: true,
"process.env.NODE_ENV": JSON.stringify("production"),
}),
commonjs(),
globals(),
progress(),
webWorkerLoader(),
scss({
output: options.sassOutputDir
}),
terser({
compress: true,
output: {
comments: false
}
})
],
preserveEntrySignatures: false,
external: ['crypto'],
context: 'window'
},
options: {
outputDir: options.outputDir
}
}
for (const output of buildConfig.outputs) {
output.dir = path.join(options.outputDir, output.dir)
}
const inlineConfigs = generateES5BuildConfig(inlineComponents, {
outputDir: options.outputDir,
aliases
})
return {
buildConfig,
inlineConfigs
}
}
module.exports = generateBuildConfig