Files
OverlayScrollbars/local/rollup/src/createRollupConfig.js
T
2022-10-31 14:27:42 +01:00

133 lines
4.4 KiB
JavaScript

/* eslint-disable no-console */
/* eslint-disable import/no-dynamic-require */
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const glob = require('glob');
const resolve = require('@~local/config/resolve');
const defaultOptions = require('./defaultOptions');
const pipelineDefault = require('./pipeline.default');
const workspaceRoot = path.dirname(execSync('npm root').toString());
const pkg = require(`${workspaceRoot}/package.json`);
const appendExtension = (file) =>
path.extname(file) === ''
? file + (resolve.extensions.find((ext) => fs.existsSync(path.resolve(`${file}${ext}`))) || '')
: file;
const normalizePath = (pathName) =>
pathName ? pathName.split(path.sep).join(path.posix.sep) : pathName;
const resolvePath = (basePath, pathToResolve, appendExt) => {
const result = pathToResolve
? path.isAbsolute(pathToResolve)
? pathToResolve
: path.resolve(basePath, pathToResolve)
: null;
return normalizePath(result && appendExt ? appendExtension(result) : result);
};
const mergeAndResolveOptions = (userOptions) => {
const {
clean: defaultClean,
copy: defaultCopy,
outDir: defaultOutDir,
paths: defaultPaths,
versions: defaultVersions,
alias: defaultAlias,
rollup: defaultRollup,
extractStyles: defaultExtractStyles,
extractTypes: defaultExtractTypes,
extractPackageJson: defaultExtractPackageJson,
verbose: defaultVerbose,
banner: defaultBanner,
useEsbuild: defaultUseEsbuild,
} = defaultOptions;
const {
project,
clean: rawClean,
copy: rawCopy,
outDir: rawOutDir,
paths: rawPaths = {},
alias: rawAlias = {},
rollup: rawRollup = {},
versions: rawVersions,
extractStyles: rawExtractStyles,
extractTypes: rawExtractTypes,
extractPackageJson: rawExtractPackageJson,
verbose: rawVerbose,
banner: rawBanner,
useEsbuild: rawUseEsbuild,
} = userOptions;
const projectDir = process.cwd();
const workspaces = pkg.workspaces
.map((pattern) => glob.sync(pattern, { cwd: workspaceRoot }))
.flat();
const mergedOptions = {
project: project || path.basename(projectDir),
projectDir,
extractStyles: rawExtractStyles ?? defaultExtractStyles,
extractTypes: rawExtractTypes ?? defaultExtractTypes,
extractPackageJson: rawExtractPackageJson ?? defaultExtractPackageJson,
verbose: rawVerbose ?? defaultVerbose,
banner: rawBanner ?? defaultBanner,
versions: rawVersions ?? defaultVersions,
useEsbuild: rawUseEsbuild ?? defaultUseEsbuild,
clean: rawClean ?? defaultClean,
copy: rawCopy ?? defaultCopy,
outDir: rawOutDir ?? defaultOutDir,
paths: {
...defaultPaths,
...rawPaths,
},
alias: {
...defaultAlias,
...(typeof rawAlias === 'function'
? rawAlias(workspaceRoot, workspaces, resolvePath)
: rawAlias),
},
rollup: {
...defaultRollup,
...rawRollup,
output: {
...defaultRollup.output,
...(rawRollup.output || {}),
},
},
};
const { outDir, paths } = mergedOptions;
const { js, types, styles } = paths;
const pluginFromFn = (plugin) =>
typeof plugin === 'function' ? plugin(mergedOptions, workspaceRoot, workspaces) : plugin;
paths.js = resolvePath(projectDir, path.join(outDir, js));
paths.types = resolvePath(projectDir, path.join(outDir, types));
paths.styles = resolvePath(projectDir, path.join(outDir, styles));
mergedOptions.outDir = resolvePath(projectDir, outDir);
mergedOptions.rollup.input = resolvePath(projectDir, mergedOptions.rollup.input, true);
mergedOptions.rollup.output = {
...(mergedOptions.rollup.output || {}),
name: mergedOptions.rollup.output?.name || mergedOptions.project,
file: mergedOptions.rollup.output?.file || mergedOptions.project.toLocaleLowerCase(),
};
mergedOptions.rollup.plugins =
mergedOptions.rollup.plugins?.map(pluginFromFn).filter(Boolean) || [];
mergedOptions.rollup.output.plugins =
mergedOptions.rollup.output?.plugins?.map(pluginFromFn).filter(Boolean) || [];
return mergedOptions;
};
const createConfig = (userOptions = {}) => {
const options = mergeAndResolveOptions(userOptions);
const { useEsbuild } = options;
const result = pipelineDefault(resolve, options, useEsbuild);
const resultArr = Array.isArray(result) ? result : [result];
return resultArr;
};
module.exports = createConfig;