mirror of
				https://github.com/Qortal/qortal-ui.git
				synced 2025-11-04 06:37:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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 |