mirror of
				https://github.com/Qortal/qortal-ui.git
				synced 2025-11-03 22:27:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.0 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
 |