Skip to content

Commit

Permalink
Merge pull request #19 from Drevoed/feature/rollup-mjs-build
Browse files Browse the repository at this point in the history
  • Loading branch information
sergeysova authored Sep 16, 2021
2 parents e8e0e31 + 91cf7de commit 9840fa1
Show file tree
Hide file tree
Showing 8 changed files with 1,658 additions and 2,716 deletions.
10 changes: 8 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
Expand Down Expand Up @@ -139,4 +139,10 @@ Icon
!.vscode/tasks.json
.history
.idea/
.vscode/*
.vscode/*

# Built package artifacts
index.js
index.js.map
index.mjs
index.mjs.map
85 changes: 85 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
const { resolve: resolvePath } = require('path');

module.exports = (api) => {
api && api.cache && api.cache.never && api.cache.never();
// const env = api.cache(() => process.env.NODE_ENV)
return generateConfig(meta, babelConfig);
};

const meta = {
isEsm: true,
};

function generateConfig(meta, config = babelConfig) {
const result = {};
for (const key in config) {
const value = config[key];
result[key] = typeof value === 'function' ? value(meta) : value;
}
return result;
}

module.exports.generateConfig = generateConfig;

const aliases = {
effector: {
esm: 'effector/effector.mjs',
},
forest: {
esm: 'forest/forest.mjs',
},
stylis: {
esm: 'stylis/dist/stylis.mjs',
},
};

const babelConfig = {
presets: ['@babel/preset-env', '@babel/preset-typescript'],
plugins(meta) {
const alias = parseAliases(meta, aliases);
return [
[
require.resolve('./babel-plugin.js'),
{ allowedModules: '../foliage', debug: false },
],
['effector/babel-plugin', { addLoc: true }],
[
'babel-plugin-module-resolver',
{
alias,
loglevel: 'silent',
},
],
];
},
};

// eslint-disable-next-line sonarjs/cognitive-complexity
function parseAliases(meta, object) {
const result = {};
for (const key in object) {
const value = object[key];
if (typeof value === 'function') {
const name = value(meta);
if (name === undefined || name === null) continue;
result[key] = name;
} else if (typeof value === 'object' && value !== null) {
const name = applyPaths(value);
if (name === undefined || name === null) continue;
result[key] = name;
} else {
const name = value;
if (name === undefined || name === null) continue;
result[key] = name;
}
}
return result;

function applyPaths(paths) {
if (meta.isEsm) return paths.esm;
return paths.default;
}
}

module.exports.getAliases = (metadata = meta) =>
parseAliases(metadata, aliases);
29 changes: 21 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,24 @@
"name": "foliage",
"version": "0.200.0",
"description": "Styled Components for forest",
"main": "dist/index.js",
"main": "index.js",
"module": "index.mjs",
"exports": {
".": {
"import": "./index.mjs",
"require": "./index.js",
"default": "./index.mjs"
},
"./index.mjs": "./index.mjs"
},
"types": "dist/index.d.ts",
"homepage": "https://foliage.dev",
"sideEffects": false,
"scripts": {
"test": "jest",
"commit": "git-cz",
"lint": "eslint ./",
"build": "tsc --build ./tsconfig.build.json && webpack",
"build": "tsc --build ./tsconfig.build.json && rollup --config rollup.config.js",
"format": "prettier --write \"./src/**/**.{ts,tsx,js,jsx,json}\"",
"start": "parcel example/index.html --no-cache",
"prepublishOnly": "rm -rf dist && yarn build"
Expand All @@ -21,7 +30,7 @@
"repository": {
"url": "https://github.com/foliage-ui/foliage"
},
"files": ["dist"],
"files": ["index.js", "index.js.map", "index.mjs", "index.mjs.map", "dist"],
"keywords": [
"components",
"dom",
Expand Down Expand Up @@ -50,12 +59,17 @@
"@eslint-kit/eslint-config-node": "^2.0.0",
"@eslint-kit/eslint-config-prettier": "^2.0.0",
"@eslint-kit/eslint-config-typescript": "^3.2.0",
"@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-commonjs": "^20.0.0",
"@rollup/plugin-node-resolve": "^13.0.4",
"@rollup/plugin-typescript": "^8.2.5",
"@types/jest": "^25.2.1",
"@types/node": "^13.13.5",
"@types/react": "^17.0.20",
"@types/react-dom": "^17.0.9",
"@typescript-eslint/parser": "^4.4.1",
"babel-jest": "^26.6.3",
"babel-plugin-module-resolver": "^4.1.0",
"babel-plugin-tester": "^10.0.0",
"change-case": "^4.1.2",
"commitizen": "^4.1.2",
Expand All @@ -70,14 +84,13 @@
"prettier": "^2.0.5",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"rollup": "^2.56.3",
"rollup-plugin-terser": "^7.0.2",
"sharec-sova-config": "^0.1.0",
"terser-webpack-plugin": "^3.0.2",
"ts-loader": "^7.0.5",
"ts-node": "^9.1.1",
"typescript": "^4.4.2",
"typescript-styled-plugin": "^0.15.0",
"webpack": "^4.43.0",
"webpack-cli": "^3.3.11"
"typescript": "4.3.5",
"typescript-styled-plugin": "^0.15.0"
},
"sharec": {
"config": "sharec-sova-config",
Expand Down
52 changes: 52 additions & 0 deletions rollup.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { resolve } from 'path';
import pluginResolve from '@rollup/plugin-node-resolve';
import { terser } from 'rollup-plugin-terser';
import { babel } from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import typescript from '@rollup/plugin-typescript';
import Package from './package.json';

const extensions = ['.tsx', '.ts', '.js', '.json'];

function createBuild(input, format) {
return {
input: resolve(__dirname, `src/${input}.ts`),
output: {
file: `${input}.${format === 'esm' ? 'mjs' : 'js'}`,
format,
plugins: [terser()],
sourcemap: true,
},
plugins: [
commonjs(),
pluginResolve({ extensions }),
typescript({
tsconfig: './tsconfig.build.json',
}),
babel({
babelHelpers: 'bundled',
extensions,
skipPreflightCheck: true,
babelrc: false,
...require('./babel.config').generateConfig({
isEsm: format === 'esm',
}),
}),
],
external: [
'forest/forest.mjs',
'effector/effector.mjs',
'stylis/dist/stylis.mjs',
].concat(
Object.keys(Package.peerDependencies),
Object.keys(Package.dependencies),
),
};
}

const inputs = ['index'];
const formats = ['cjs', 'esm'];

const config = inputs.flatMap((i) => formats.map((f) => createBuild(i, f)));

export default config;
2 changes: 1 addition & 1 deletion tsconfig.build.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./dist",
"outDir": "dist",
"jsx": "react",
"declaration": true,
"emitDeclarationOnly": true
Expand Down
1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"jsx": "react",
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"resolveJsonModule": true,
"target": "es2016",
"types": ["jest", "node"],
"plugins": [
Expand Down
44 changes: 0 additions & 44 deletions webpack.config.js

This file was deleted.

Loading

0 comments on commit 9840fa1

Please sign in to comment.