diff --git a/plugins/css-blank-pseudo/package.json b/plugins/css-blank-pseudo/package.json index cace0b936..db93d2ffa 100644 --- a/plugins/css-blank-pseudo/package.json +++ b/plugins/css-blank-pseudo/package.json @@ -35,7 +35,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.js", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default-with-browser.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/css-has-pseudo/package.json b/plugins/css-has-pseudo/package.json index 9bd97c7f6..dd27f4723 100644 --- a/plugins/css-has-pseudo/package.json +++ b/plugins/css-has-pseudo/package.json @@ -35,7 +35,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.js", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default-with-browser.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/css-prefers-color-scheme/package.json b/plugins/css-prefers-color-scheme/package.json index f249ac6f8..8ff83578f 100644 --- a/plugins/css-prefers-color-scheme/package.json +++ b/plugins/css-prefers-color-scheme/package.json @@ -35,7 +35,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.js", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default-with-browser.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/postcss-base-plugin/package.json b/plugins/postcss-base-plugin/package.json index ebc97f273..aa044a9ee 100644 --- a/plugins/postcss-base-plugin/package.json +++ b/plugins/postcss-base-plugin/package.json @@ -26,7 +26,7 @@ "lint": "eslint src/**/*.ts", "test": "postcss-tape --ci", "test:cli": "bash ./test/cli/test.sh", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "devDependencies": { diff --git a/plugins/postcss-color-functional-notation/package.json b/plugins/postcss-color-functional-notation/package.json index d5981c56c..ec5fc42ac 100644 --- a/plugins/postcss-color-functional-notation/package.json +++ b/plugins/postcss-color-functional-notation/package.json @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.ts", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/postcss-focus-visible/package.json b/plugins/postcss-focus-visible/package.json index e86233d0a..94e30aba3 100644 --- a/plugins/postcss-focus-visible/package.json +++ b/plugins/postcss-focus-visible/package.json @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.ts", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/postcss-focus-within/package.json b/plugins/postcss-focus-within/package.json index 43c922404..7b8b80189 100644 --- a/plugins/postcss-focus-within/package.json +++ b/plugins/postcss-focus-within/package.json @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.ts", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/postcss-image-set-function/package.json b/plugins/postcss-image-set-function/package.json index 9ccdc824f..51531843f 100644 --- a/plugins/postcss-image-set-function/package.json +++ b/plugins/postcss-image-set-function/package.json @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build && npm run test", "lint": "eslint src/**/*.ts", "test": "postcss-tape --ci", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/plugins/postcss-lab-function/package.json b/plugins/postcss-lab-function/package.json index e7c60dc65..d6d10b593 100644 --- a/plugins/postcss-lab-function/package.json +++ b/plugins/postcss-lab-function/package.json @@ -23,7 +23,7 @@ "prepublishOnly": "npm run build --if-present && npm run test --if-present", "lint": "eslint src/**/*.ts", "test": "node ./test/color/test.mjs && postcss-tape --ci", - "build": "rollup -c ../../rollup/default.ts.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error", "generate-color-corpus": "python3 ./test/color/generate.py" }, diff --git a/plugins/postcss-nesting/package.json b/plugins/postcss-nesting/package.json index 0f4ed46b1..c3346c512 100644 --- a/plugins/postcss-nesting/package.json +++ b/plugins/postcss-nesting/package.json @@ -32,7 +32,7 @@ "lint": "eslint src/**/*.js", "test": "postcss-tape --ci", "test:deno": "deno run --unstable --allow-env --allow-read test/deno/test.js", - "build": "rollup -c ../../rollup/default-with-deno.js", + "build": "rollup -c ../../rollup/default.js", "stryker": "stryker run --logLevel error" }, "engines": { diff --git a/rollup/configs/babel-presets.js b/rollup/configs/babel-presets.js new file mode 100644 index 000000000..9e4f69d93 --- /dev/null +++ b/rollup/configs/babel-presets.js @@ -0,0 +1,9 @@ +export const packageBabelPreset = [ + ['@babel/preset-env', { + corejs: 3, + loose: true, + modules: false, + targets: { node: 12 }, + useBuiltIns: 'usage', + }], +]; diff --git a/rollup/configs/externals.js b/rollup/configs/externals.js new file mode 100644 index 000000000..14d058fbf --- /dev/null +++ b/rollup/configs/externals.js @@ -0,0 +1,92 @@ +export const externalsForCLI = [ + 'fs', + 'path', + + '@csstools/postcss-plugins-values-parser', + 'autoprefixer', + 'browserslist', + 'caniuse-lite', + 'css-blank-pseudo', + 'css-has-pseudo', + 'css-prefers-color-scheme', + 'cssdb', + 'postcss-attribute-case-insensitive', + 'postcss-color-functional-notation', + 'postcss-color-hex-alpha', + 'postcss-color-rebeccapurple', + 'postcss-custom-media', + 'postcss-custom-properties', + 'postcss-custom-selectors', + 'postcss-dir-pseudo-class', + 'postcss-double-position-gradients', + 'postcss-env-function', + 'postcss-focus-visible', + 'postcss-focus-within', + 'postcss-font-variant', + 'postcss-gap-properties', + 'postcss-image-set-function', + 'postcss-initial', + 'postcss-lab-function', + 'postcss-logical', + 'postcss-media-minmax', + 'postcss-nesting', + 'postcss-overflow-shorthand', + 'postcss-page-break', + 'postcss-place', + 'postcss-pseudo-class-any-link', + 'postcss-replace-overflow-wrap', + 'postcss-selector-not', + 'postcss-selector-parser', + 'postcss-value-parser', + 'postcss-values-parser', +]; + +export const externalsForPlugin = [ + 'fs', + 'path', + + 'postcss', + /^postcss\/lib\/*/, + + '@csstools/postcss-plugins-values-parser', + 'autoprefixer', + 'browserslist', + 'caniuse-lite', + 'css-blank-pseudo', + 'css-has-pseudo', + 'css-prefers-color-scheme', + 'cssdb', + 'postcss-attribute-case-insensitive', + 'postcss-color-functional-notation', + 'postcss-color-hex-alpha', + 'postcss-color-rebeccapurple', + 'postcss-custom-media', + 'postcss-custom-properties', + 'postcss-custom-selectors', + 'postcss-dir-pseudo-class', + 'postcss-double-position-gradients', + 'postcss-env-function', + 'postcss-focus-visible', + 'postcss-focus-within', + 'postcss-font-variant', + 'postcss-gap-properties', + 'postcss-image-set-function', + 'postcss-initial', + 'postcss-lab-function', + 'postcss-logical', + 'postcss-media-minmax', + 'postcss-nesting', + 'postcss-overflow-shorthand', + 'postcss-page-break', + 'postcss-place', + 'postcss-pseudo-class-any-link', + 'postcss-replace-overflow-wrap', + 'postcss-selector-not', + 'postcss-selector-parser', + 'postcss-value-parser', + 'postcss-values-parser', +]; + +export const externalsForBrowser = []; + +export const externalsForDeno = []; diff --git a/rollup/default-with-browser.js b/rollup/default-with-browser.js deleted file mode 100644 index 968f2f4d8..000000000 --- a/rollup/default-with-browser.js +++ /dev/null @@ -1,184 +0,0 @@ -import babel from '@rollup/plugin-babel'; -import commonjs from '@rollup/plugin-commonjs'; -import path from 'path'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { terser } from 'rollup-plugin-terser'; - -export default [ - { - input: 'src/index.js', - output: [ - { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, - { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, - ], - external: [ - 'fs', - 'path', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - plugins: [ - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - ], - }, - { - input: 'src/browser.js', - output: [ - { file: 'dist/browser.cjs', format: 'cjs', sourcemap: true, exports: 'auto', strict: false }, - ], - external: [ - 'fs', - 'path', - - 'autoprefixer', - 'browserslist', - 'caniuse-lite', - 'css-blank-pseudo', - 'css-has-pseudo', - 'css-prefers-color-scheme', - 'cssdb', - 'postcss-attribute-case-insensitive', - 'postcss-color-functional-notation', - 'postcss-color-hex-alpha', - 'postcss-color-rebeccapurple', - 'postcss-custom-media', - 'postcss-custom-properties', - 'postcss-custom-selectors', - 'postcss-dir-pseudo-class', - 'postcss-double-position-gradients', - 'postcss-env-function', - 'postcss-focus-visible', - 'postcss-focus-within', - 'postcss-font-variant', - 'postcss-gap-properties', - 'postcss-image-set-function', - 'postcss-initial', - 'postcss-lab-function', - 'postcss-logical', - 'postcss-media-minmax', - 'postcss-nesting', - 'postcss-overflow-shorthand', - 'postcss-page-break', - 'postcss-place', - 'postcss-pseudo-class-any-link', - 'postcss-replace-overflow-wrap', - 'postcss-selector-not', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - plugins: [ - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - loose: true, - modules: false, - targets: { - browsers: [ - 'IE >= 8', - 'Opera >= 12', - 'Safari >= 5.1', - 'Chrome >= 15', - 'Edge >= 12', - 'Firefox >= 4', - ], - }, - useBuiltIns: false, - }], - ], - }), - ], - }, - { - input: 'src/browser-global.js', - output: [ - { file: 'dist/browser-global.js', format: 'iife', sourcemap: true, exports: 'auto', strict: false }, - ], - plugins: [ - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - loose: true, - modules: false, - targets: { - browsers: [ - 'IE >= 8', - 'Opera >= 12', - 'Safari >= 5.1', - 'Chrome >= 15', - 'Edge >= 12', - 'Firefox >= 4', - ], - }, - useBuiltIns: false, - }], - ], - }), - ], - }, - { - input: 'src/cli.js', - output: [ - { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, - ], - onwarn: (warning) => { - // Silence circular dependency warning for postcss-values-parsers package - if ( - warning.code === 'CIRCULAR_DEPENDENCY' && - warning.importer.indexOf('node_modules/postcss-values-parser/lib') > -1 - ) { - return; - } - - console.warn(`(!) ${warning.message}`); - }, - plugins: [ - commonjs(), - nodeResolve({ - rootDir: path.join(process.cwd(), '..', '..'), - }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - addHashBang(), - ], - }, -]; - -function addHashBang () { - return { - name: 'add-hash-bang', - renderChunk (code) { - const updatedCode = `#!/usr/bin/env node\n\n${code}`; - - return updatedCode; - }, - }; -} diff --git a/rollup/default-with-deno.js b/rollup/default-with-deno.js deleted file mode 100644 index 01131802c..000000000 --- a/rollup/default-with-deno.js +++ /dev/null @@ -1,155 +0,0 @@ -import babel from '@rollup/plugin-babel'; -import commonjs from '@rollup/plugin-commonjs'; -import path from 'path'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { terser } from 'rollup-plugin-terser'; - -export default [ - { - input: 'src/index.js', - output: [ - { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, - { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, - ], - external: [ - 'postcss-values-parser', - 'postcss-selector-parser', - ], - plugins: [ - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - ], - }, - { - input: 'src/cli.js', - output: [ - { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, - ], - external: [ - 'fs', - 'path', - - 'autoprefixer', - 'browserslist', - 'caniuse-lite', - 'css-blank-pseudo', - 'css-has-pseudo', - 'css-prefers-color-scheme', - 'cssdb', - 'postcss-attribute-case-insensitive', - 'postcss-color-functional-notation', - 'postcss-color-hex-alpha', - 'postcss-color-rebeccapurple', - 'postcss-custom-media', - 'postcss-custom-properties', - 'postcss-custom-selectors', - 'postcss-dir-pseudo-class', - 'postcss-double-position-gradients', - 'postcss-env-function', - 'postcss-focus-visible', - 'postcss-focus-within', - 'postcss-font-variant', - 'postcss-gap-properties', - 'postcss-image-set-function', - 'postcss-initial', - 'postcss-lab-function', - 'postcss-logical', - 'postcss-media-minmax', - 'postcss-nesting', - 'postcss-overflow-shorthand', - 'postcss-page-break', - 'postcss-place', - 'postcss-pseudo-class-any-link', - 'postcss-replace-overflow-wrap', - 'postcss-selector-not', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - onwarn: (warning) => { - // Silence circular dependency warning for postcss-values-parsers package - if ( - warning.code === 'CIRCULAR_DEPENDENCY' && - warning.importer.indexOf('node_modules/postcss-values-parser/lib') > -1 - ) { - return; - } - - console.warn(`(!) ${warning.message}`); - }, - plugins: [ - commonjs(), - nodeResolve({ - rootDir: path.join(process.cwd(), '..', '..'), - }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - addHashBang(), - ], - }, - { - input: 'src/index.js', - output: [ - { file: 'dist/index.deno.mjs', format: 'esm', sourcemap: true, exports: 'default' }, - ], - plugins: [ - commonjs(), - nodeResolve({ - rootDir: path.join(process.cwd(), '..', '..'), - browser: true, - resolveOnly: [ - 'cssesc', - 'postcss-selector-parser', - 'util-deprecate', - ], - }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - ], - }, -]; - -function addHashBang () { - return { - name: 'add-hash-bang', - renderChunk (code) { - const updatedCode = `#!/usr/bin/env node\n\n${code}`; - - return updatedCode; - }, - }; -} diff --git a/rollup/default.js b/rollup/default.js index ff97dc6b2..b158559b5 100644 --- a/rollup/default.js +++ b/rollup/default.js @@ -1,126 +1,56 @@ -import babel from '@rollup/plugin-babel'; -import commonjs from '@rollup/plugin-commonjs'; -import path from 'path'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { terser } from 'rollup-plugin-terser'; +import fs from 'fs'; +import { browserJavascript } from './presets/browser.javascript'; +import { cliJavascript } from './presets/cli-javascript'; +import { cliTypescript } from './presets/cli-typescript'; +import { denoJavascript } from './presets/deno-javascript'; +import { packageJavascript } from './presets/package-javascript'; +import { packageTypescript } from './presets/package-typescript'; -export default [ - { - input: 'src/index.js', - output: [ - { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, - { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, - ], - external: [ - 'fs', - 'path', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - plugins: [ - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - ], - }, - { - input: 'src/cli.js', - output: [ - { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, - ], - external: [ - 'fs', - 'path', +const packageInfo = JSON.parse(fs.readFileSync('./package.json')); - 'autoprefixer', - 'browserslist', - 'caniuse-lite', - 'css-blank-pseudo', - 'css-has-pseudo', - 'css-prefers-color-scheme', - 'cssdb', - 'postcss-attribute-case-insensitive', - 'postcss-color-functional-notation', - 'postcss-color-hex-alpha', - 'postcss-color-rebeccapurple', - 'postcss-custom-media', - 'postcss-custom-properties', - 'postcss-custom-selectors', - 'postcss-dir-pseudo-class', - 'postcss-double-position-gradients', - 'postcss-env-function', - 'postcss-focus-visible', - 'postcss-focus-within', - 'postcss-font-variant', - 'postcss-gap-properties', - 'postcss-image-set-function', - 'postcss-initial', - 'postcss-lab-function', - 'postcss-logical', - 'postcss-media-minmax', - 'postcss-nesting', - 'postcss-overflow-shorthand', - 'postcss-page-break', - 'postcss-place', - 'postcss-pseudo-class-any-link', - 'postcss-replace-overflow-wrap', - 'postcss-selector-not', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - onwarn: (warning) => { - // Silence circular dependency warning for postcss-values-parsers package - if ( - warning.code === 'CIRCULAR_DEPENDENCY' && - warning.importer.indexOf('node_modules/postcss-values-parser/lib') > -1 - ) { - return; - } +const isTypescript = (() => { + if (packageInfo.types) { + try { + fs.statSync('./tsconfig.json').isFile(); + return true; + } catch (_) { + return false; + } + } + return false; +})(); - console.warn(`(!) ${warning.message}`); - }, - plugins: [ - commonjs(), - nodeResolve({ - rootDir: path.join(process.cwd(), '..', '..'), - }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - addHashBang(), - ], - }, -]; +const hasDenoOutput = (() => { + try { + fs.statSync('./mod.js').isFile(); + return true; + } catch (_) { + return false; + } +})(); -function addHashBang () { - return { - name: 'add-hash-bang', - renderChunk (code) { - const updatedCode = `#!/usr/bin/env node\n\n${code}`; +const presets = []; - return updatedCode; - }, - }; +if (isTypescript) { + presets.push(...packageTypescript()); + + if (packageInfo.bin) { + presets.push(...cliTypescript()); + } +} else { + presets.push(...packageJavascript()); + + if (packageInfo.bin) { + presets.push(...cliJavascript()); + } + + if (hasDenoOutput) { + presets.push(...denoJavascript()); + } + + if (packageInfo.exports && ('./browser' in packageInfo.exports)) { + presets.push(...browserJavascript()); + } } + +export default presets; diff --git a/rollup/default.ts.js b/rollup/default.ts.js deleted file mode 100644 index 2dbd49780..000000000 --- a/rollup/default.ts.js +++ /dev/null @@ -1,129 +0,0 @@ -import babel from '@rollup/plugin-babel'; -import commonjs from '@rollup/plugin-commonjs'; -import path from 'path'; -import typescript from '@rollup/plugin-typescript'; -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import { terser } from 'rollup-plugin-terser'; - -export default [ - { - input: 'src/index.ts', - output: [ - { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, - { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, - ], - external: [ - 'fs', - 'path', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - plugins: [ - typescript({ tsconfig: './tsconfig.json' }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - ], - }, - { - input: 'src/cli.ts', - output: [ - { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, - ], - external: [ - 'fs', - 'path', - - 'autoprefixer', - 'browserslist', - 'caniuse-lite', - 'css-blank-pseudo', - 'css-has-pseudo', - 'css-prefers-color-scheme', - 'cssdb', - 'postcss-attribute-case-insensitive', - 'postcss-color-functional-notation', - 'postcss-color-hex-alpha', - 'postcss-color-rebeccapurple', - 'postcss-custom-media', - 'postcss-custom-properties', - 'postcss-custom-selectors', - 'postcss-dir-pseudo-class', - 'postcss-double-position-gradients', - 'postcss-env-function', - 'postcss-focus-visible', - 'postcss-focus-within', - 'postcss-font-variant', - 'postcss-gap-properties', - 'postcss-image-set-function', - 'postcss-initial', - 'postcss-lab-function', - 'postcss-logical', - 'postcss-media-minmax', - 'postcss-nesting', - 'postcss-overflow-shorthand', - 'postcss-page-break', - 'postcss-place', - 'postcss-pseudo-class-any-link', - 'postcss-replace-overflow-wrap', - 'postcss-selector-not', - 'postcss-selector-parser', - 'postcss-values-parser', - ], - onwarn: (warning) => { - // Silence circular dependency warning for postcss-values-parsers package - if ( - warning.code === 'CIRCULAR_DEPENDENCY' && - warning.importer.indexOf('node_modules/postcss-values-parser/lib') > -1 - ) { - return; - } - - console.warn(`(!) ${warning.message}`); - }, - plugins: [ - typescript({ tsconfig: './tsconfig.json' }), - commonjs(), - nodeResolve({ - rootDir: path.join(process.cwd(), '..', '..'), - }), - babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - ['@babel/preset-env', { - corejs: 3, - loose: true, - modules: false, - targets: { node: 12 }, - useBuiltIns: 'usage', - }], - ], - }), - terser(), - addHashBang(), - ], - }, -]; - -function addHashBang () { - return { - name: 'add-hash-bang', - renderChunk (code) { - const updatedCode = `#!/usr/bin/env node\n\n${code}`; - - return updatedCode; - }, - }; -} diff --git a/rollup/presets/browser.javascript.js b/rollup/presets/browser.javascript.js new file mode 100644 index 000000000..bdbcc2cc4 --- /dev/null +++ b/rollup/presets/browser.javascript.js @@ -0,0 +1,49 @@ +import babel from '@rollup/plugin-babel'; +import { externalsForBrowser } from '../configs/externals'; + +export function browserJavascript() { + const babelConfig = { + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: [ + ['@babel/preset-env', { + loose: true, + modules: false, + targets: { + browsers: [ + 'IE >= 8', + 'Opera >= 12', + 'Safari >= 5.1', + 'Chrome >= 15', + 'Edge >= 12', + 'Firefox >= 4', + ], + }, + useBuiltIns: false, + }], + ], + }; + + return [ + { + input: 'src/browser.js', + output: [ + { file: 'dist/browser.cjs', format: 'cjs', sourcemap: true, exports: 'auto', strict: false }, + ], + external: externalsForBrowser, + plugins: [ + babel(babelConfig), + ], + }, + { + input: 'src/browser-global.js', + output: [ + { file: 'dist/browser-global.js', format: 'iife', sourcemap: true, exports: 'auto', strict: false }, + ], + external: externalsForBrowser, + plugins: [ + babel(babelConfig), + ], + }, + ]; +} diff --git a/rollup/presets/cli-javascript.js b/rollup/presets/cli-javascript.js new file mode 100644 index 000000000..0b78bb6c0 --- /dev/null +++ b/rollup/presets/cli-javascript.js @@ -0,0 +1,33 @@ +import babel from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; +import path from 'path'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { terser } from 'rollup-plugin-terser'; +import { externalsForCLI } from '../configs/externals'; +import { addHashBang } from '../transforms/cli-hash-bang'; +import { packageBabelPreset } from '../configs/babel-presets'; + +export function cliJavascript() { + return [ + { + input: 'src/cli.js', + output: [ + { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, + ], + external: externalsForCLI, + plugins: [ + commonjs(), + nodeResolve({ + rootDir: path.join(process.cwd(), '..', '..'), + }), + babel({ + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: packageBabelPreset, + }), + terser(), + addHashBang(), + ], + }, + ]; +} diff --git a/rollup/presets/cli-typescript.js b/rollup/presets/cli-typescript.js new file mode 100644 index 000000000..abf1536c3 --- /dev/null +++ b/rollup/presets/cli-typescript.js @@ -0,0 +1,35 @@ +import babel from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; +import path from 'path'; +import typescript from '@rollup/plugin-typescript'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { terser } from 'rollup-plugin-terser'; +import { externalsForCLI } from '../configs/externals'; +import { addHashBang } from '../transforms/cli-hash-bang'; +import { packageBabelPreset } from '../configs/babel-presets'; + +export function cliTypescript() { + return [ + { + input: 'src/cli.ts', + output: [ + { file: 'dist/cli.mjs', format: 'esm', sourcemap: false }, + ], + external: externalsForCLI, + plugins: [ + typescript({ tsconfig: './tsconfig.json' }), + commonjs(), + nodeResolve({ + rootDir: path.join(process.cwd(), '..', '..'), + }), + babel({ + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: packageBabelPreset, + }), + terser(), + addHashBang(), + ], + }, + ]; +} diff --git a/rollup/presets/deno-javascript.js b/rollup/presets/deno-javascript.js new file mode 100644 index 000000000..e4474bb88 --- /dev/null +++ b/rollup/presets/deno-javascript.js @@ -0,0 +1,35 @@ +import babel from '@rollup/plugin-babel'; +import commonjs from '@rollup/plugin-commonjs'; +import path from 'path'; +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { packageBabelPreset } from '../configs/babel-presets'; +import { externalsForDeno } from '../configs/externals'; + +export function denoJavascript() { + return [ + { + input: 'src/index.js', + output: [ + { file: 'dist/index.deno.mjs', format: 'esm', sourcemap: true, exports: 'default' }, + ], + external: externalsForDeno, + plugins: [ + commonjs(), + nodeResolve({ + rootDir: path.join(process.cwd(), '..', '..'), + browser: true, + resolveOnly: [ + 'cssesc', + 'postcss-selector-parser', + 'util-deprecate', + ], + }), + babel({ + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: packageBabelPreset, + }), + ], + }, + ]; +} diff --git a/rollup/presets/package-javascript.js b/rollup/presets/package-javascript.js new file mode 100644 index 000000000..012068e65 --- /dev/null +++ b/rollup/presets/package-javascript.js @@ -0,0 +1,25 @@ +import babel from '@rollup/plugin-babel'; +import { terser } from 'rollup-plugin-terser'; +import { packageBabelPreset } from '../configs/babel-presets'; +import { externalsForPlugin } from '../configs/externals'; + +export function packageJavascript() { + return [ + { + input: 'src/index.js', + output: [ + { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, + { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, + ], + external: externalsForPlugin, + plugins: [ + babel({ + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: packageBabelPreset, + }), + terser(), + ], + }, + ]; +} diff --git a/rollup/presets/package-typescript.js b/rollup/presets/package-typescript.js new file mode 100644 index 000000000..a332da241 --- /dev/null +++ b/rollup/presets/package-typescript.js @@ -0,0 +1,27 @@ +import babel from '@rollup/plugin-babel'; +import typescript from '@rollup/plugin-typescript'; +import { terser } from 'rollup-plugin-terser'; +import { packageBabelPreset } from '../configs/babel-presets'; +import { externalsForPlugin } from '../configs/externals'; + +export function packageTypescript() { + return [ + { + input: 'src/index.ts', + output: [ + { file: 'dist/index.cjs', format: 'cjs', sourcemap: true, exports: 'auto' }, + { file: 'dist/index.mjs', format: 'esm', sourcemap: true, exports: 'auto' }, + ], + external: externalsForPlugin, + plugins: [ + typescript({ tsconfig: './tsconfig.json' }), + babel({ + babelHelpers: 'bundled', + exclude: 'node_modules/**', + presets: packageBabelPreset, + }), + terser(), + ], + }, + ]; +} diff --git a/rollup/transforms/cli-hash-bang.js b/rollup/transforms/cli-hash-bang.js new file mode 100644 index 000000000..165787f89 --- /dev/null +++ b/rollup/transforms/cli-hash-bang.js @@ -0,0 +1,10 @@ +export function addHashBang () { + return { + name: 'add-hash-bang', + renderChunk (code) { + const updatedCode = `#!/usr/bin/env node\n\n${code}`; + + return updatedCode; + }, + }; +}