From 3d095f747dfd07683ce4d7fdfaa91516e30222c8 Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Mon, 31 Oct 2022 11:00:33 +0100 Subject: [PATCH] add clean to build --- local/rollup/src/createRollupConfig.js | 32 ++++++++++++------- local/rollup/src/defaultOptions.js | 1 + local/rollup/src/plugins/clean.js | 24 ++++++++++++++ .../tsconfig.types.json | 2 +- packages/overlayscrollbars/rollup.config.js | 1 + 5 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 local/rollup/src/plugins/clean.js diff --git a/local/rollup/src/createRollupConfig.js b/local/rollup/src/createRollupConfig.js index 025619f..8a8940f 100644 --- a/local/rollup/src/createRollupConfig.js +++ b/local/rollup/src/createRollupConfig.js @@ -7,6 +7,7 @@ const glob = require('glob'); const resolve = require('@~local/config/resolve'); const defaultOptions = require('./defaultOptions'); const pipelineDefault = require('./pipeline.default'); +const rollupPluginClean = require('./plugins/clean'); const workspaceRoot = path.dirname(execSync('npm root').toString()); const pkg = require(`${workspaceRoot}/package.json`); @@ -30,6 +31,7 @@ const resolvePath = (basePath, pathToResolve, appendExt) => { const mergeAndResolveOptions = (userOptions) => { const { + clean: defaultClean, outDir: defaultOutDir, paths: defaultPaths, versions: defaultVersions, @@ -44,6 +46,7 @@ const mergeAndResolveOptions = (userOptions) => { } = defaultOptions; const { project, + clean: rawClean, outDir: rawOutDir, paths: rawPaths = {}, alias: rawAlias = {}, @@ -56,12 +59,13 @@ const mergeAndResolveOptions = (userOptions) => { banner: rawBanner, useEsbuild: rawUseEsbuild, } = userOptions; - const projectPath = process.cwd(); + const projectDir = process.cwd(); const workspaces = pkg.workspaces .map((pattern) => glob.sync(pattern, { cwd: workspaceRoot })) .flat(); const mergedOptions = { - project: project || path.basename(projectPath), + project: project || path.basename(projectDir), + projectDir, extractStyles: rawExtractStyles ?? defaultExtractStyles, extractTypes: rawExtractTypes ?? defaultExtractTypes, extractPackageJson: rawExtractPackageJson ?? defaultExtractPackageJson, @@ -69,6 +73,7 @@ const mergeAndResolveOptions = (userOptions) => { banner: rawBanner ?? defaultBanner, versions: rawVersions ?? defaultVersions, useEsbuild: rawUseEsbuild ?? defaultUseEsbuild, + clean: rawClean ?? defaultClean, outDir: rawOutDir ?? defaultOutDir, paths: { ...defaultPaths, @@ -94,12 +99,12 @@ const mergeAndResolveOptions = (userOptions) => { const pluginFromFn = (plugin) => typeof plugin === 'function' ? plugin(mergedOptions, workspaceRoot, workspaces) : plugin; - paths.js = resolvePath(projectPath, path.join(outDir, js)); - paths.types = resolvePath(projectPath, path.join(outDir, types)); - paths.styles = resolvePath(projectPath, path.join(outDir, styles)); + 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(projectPath, outDir); - mergedOptions.rollup.input = resolvePath(projectPath, mergedOptions.rollup.input, true); + 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, @@ -115,15 +120,15 @@ const mergeAndResolveOptions = (userOptions) => { const createConfig = (userOptions = {}) => { const options = mergeAndResolveOptions(userOptions); - const { project, useEsbuild, verbose } = options; + const { project, useEsbuild, verbose, clean, outDir, projectDir } = options; const result = pipelineDefault(resolve, options, useEsbuild); const resultArr = Array.isArray(result) ? result : [result]; + const prePlugins = !Array.isArray(resultArr[0].plugins) ? [] : resultArr[0].plugins; + + resultArr[0].plugins = prePlugins; if (verbose) { - if (!Array.isArray(resultArr[0].plugins)) { - resultArr[0].plugins = []; - } - resultArr[0].plugins.push({ + prePlugins.push({ name: 'PROJECT', buildStart() { console.log(''); @@ -132,6 +137,9 @@ const createConfig = (userOptions = {}) => { }, }); } + if (clean && outDir !== projectDir) { + prePlugins.push(rollupPluginClean({ paths: [outDir], verbose })); + } return resultArr; }; diff --git a/local/rollup/src/defaultOptions.js b/local/rollup/src/defaultOptions.js index 1c438d8..b1602df 100644 --- a/local/rollup/src/defaultOptions.js +++ b/local/rollup/src/defaultOptions.js @@ -4,6 +4,7 @@ module.exports = { banner: null, useEsbuild: false, outDir: './dist', + clean: false, paths: { js: '.', types: './types', diff --git a/local/rollup/src/plugins/clean.js b/local/rollup/src/plugins/clean.js new file mode 100644 index 0000000..cc4f84b --- /dev/null +++ b/local/rollup/src/plugins/clean.js @@ -0,0 +1,24 @@ +const path = require('path'); +const fs = require('fs'); + +module.exports = ({ paths = [], verbose = false } = {}) => { + let cleaned = false; + return { + name: 'clean', + async buildStart() { + if (!cleaned) { + paths.forEach((currPath) => { + const resolvedPath = path.resolve(currPath); + if (fs.existsSync(resolvedPath)) { + if (verbose) { + // eslint-disable-next-line no-console + console.log(`Clean: ${resolvedPath}`); + } + fs.rmSync(resolvedPath, { recursive: true }); + } + }); + cleaned = true; + } + }, + }; +}; diff --git a/packages/overlayscrollbars-react/tsconfig.types.json b/packages/overlayscrollbars-react/tsconfig.types.json index 5cd7898..275d1c1 100644 --- a/packages/overlayscrollbars-react/tsconfig.types.json +++ b/packages/overlayscrollbars-react/tsconfig.types.json @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "rootDir": "./src/", - "outDir": "dist", + "outDir": "./dist/types", "declaration": true, "types": ["react"] }, diff --git a/packages/overlayscrollbars/rollup.config.js b/packages/overlayscrollbars/rollup.config.js index 87236c9..ee37699 100644 --- a/packages/overlayscrollbars/rollup.config.js +++ b/packages/overlayscrollbars/rollup.config.js @@ -9,6 +9,7 @@ module.exports = createRollupConfig({ verbose: true, extractStyles: true, extractTypes: true, + clean: true, extractPackageJson: { json: ({ name,