mirror of
https://github.com/godotengine/godot-interactive-changelog.git
synced 2025-12-31 01:49:28 +03:00
117 lines
3.5 KiB
JavaScript
117 lines
3.5 KiB
JavaScript
import { promises as fs } from 'fs';
|
|
import path from 'path';
|
|
|
|
import nodeResolve from 'rollup-plugin-node-resolve';
|
|
import includePaths from 'rollup-plugin-includepaths'
|
|
import commonjs from 'rollup-plugin-commonjs';
|
|
import copy from 'rollup-plugin-copy';
|
|
import posthtmlTemplate from './build/rollup-posthtml-template';
|
|
import babel from 'rollup-plugin-babel';
|
|
|
|
const INPUT_ROOT = 'src';
|
|
const INPUT_PATHS_ROOT = path.join(INPUT_ROOT, 'paths');
|
|
const INPUT_SHARED_ROOT = path.join(INPUT_ROOT, 'shared');
|
|
const INPUT_STATIC_ROOT = path.join(INPUT_ROOT, 'static');
|
|
|
|
const ENTRY_FILE_NAME = 'entry.js';
|
|
const TEMPLATE_FILE_NAME = 'template.html';
|
|
const GLOBAL_FILE_NAME = 'global.js';
|
|
|
|
const OUTPUT_ROOT = 'out';
|
|
const OUTPUT_STYLES = path.join(OUTPUT_ROOT, 'styles');
|
|
const OUTPUT_STYLES_SHARED = path.join(OUTPUT_STYLES, 'shared');
|
|
const OUTPUT_SCRIPTS = path.join(OUTPUT_ROOT, 'scripts');
|
|
const OUTPUT_SCRIPTS_SHARED = path.join(OUTPUT_SCRIPTS, 'shared');
|
|
|
|
const generateConfig = async () => {
|
|
let configs = [];
|
|
|
|
getGlobalConfig(configs);
|
|
await getPathsConfigs(configs);
|
|
|
|
return configs;
|
|
};
|
|
const getGlobalConfig = (configs) => {
|
|
const globalScriptPath = path.join(INPUT_SHARED_ROOT, 'scripts', GLOBAL_FILE_NAME);
|
|
const outputPath = path.join(OUTPUT_SCRIPTS_SHARED, GLOBAL_FILE_NAME);
|
|
|
|
const sharedStylesGlob = path.join(INPUT_SHARED_ROOT, 'styles/**/*.css').replace(/\\/g, '/'); // Windows path not supported by copy plugin
|
|
const staticGlob = path.join(INPUT_STATIC_ROOT, '/**/*.*').replace(/\\/g, '/'); // Windows path not supported by copy plugin
|
|
|
|
configs.push({
|
|
input: globalScriptPath,
|
|
output: {
|
|
name: 'global',
|
|
file: outputPath,
|
|
format: 'iife'
|
|
},
|
|
plugins: [
|
|
nodeResolve(),
|
|
copy({
|
|
targets: [
|
|
{ src: sharedStylesGlob, dest: OUTPUT_STYLES_SHARED },
|
|
{ src: staticGlob, dest: OUTPUT_ROOT },
|
|
],
|
|
verbose: true
|
|
})
|
|
]
|
|
})
|
|
|
|
};
|
|
const getPathsConfigs = async (configs) => {
|
|
try {
|
|
// Collect paths to process
|
|
const paths = await fs.readdir(INPUT_PATHS_ROOT);
|
|
|
|
for (const itemPath of paths) {
|
|
const itemRoot = path.join(INPUT_PATHS_ROOT, itemPath);
|
|
const itemFiles = await fs.readdir(itemRoot);
|
|
|
|
if (itemFiles.indexOf(ENTRY_FILE_NAME) < 0) {
|
|
throw Error(`Missing entry script for "${itemPath}" path`);
|
|
}
|
|
if (itemFiles.indexOf(TEMPLATE_FILE_NAME) < 0) {
|
|
throw Error(`Missing HTML template for "${itemPath}" path`);
|
|
}
|
|
|
|
const entryPath = path.join(itemRoot, ENTRY_FILE_NAME);
|
|
const templatePath = path.join(itemRoot, TEMPLATE_FILE_NAME).replace(/\\/g, '/'); // Windows path not supported by copy plugin
|
|
const bundlePath = path.join(OUTPUT_ROOT, 'scripts', `${itemPath}.js`);
|
|
const htmlPath = path.join(OUTPUT_ROOT, `${itemPath}.html`);
|
|
|
|
configs.push({
|
|
input: entryPath,
|
|
output: {
|
|
name: itemPath,
|
|
file: bundlePath,
|
|
format: 'iife'
|
|
},
|
|
plugins: [
|
|
babel({
|
|
exclude: 'node_modules/**',
|
|
plugins: [
|
|
[ '@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true } ],
|
|
'@babel/plugin-proposal-class-properties'
|
|
]
|
|
}),
|
|
includePaths({
|
|
paths: [ './' ]
|
|
}),
|
|
nodeResolve(),
|
|
commonjs({
|
|
sourceMap: false
|
|
}),
|
|
posthtmlTemplate({
|
|
src: templatePath,
|
|
dest: htmlPath
|
|
})
|
|
]
|
|
})
|
|
}
|
|
} catch (exc) {
|
|
console.error(exc);
|
|
}
|
|
};
|
|
|
|
export default generateConfig();
|