Skip to content

Commit 18482a1

Browse files
authored
chore: convert dev scripts to ESM modules (#720)
[ci skip]
1 parent 45a6d8f commit 18482a1

23 files changed

+148
-104
lines changed

.eslint-imports.cjs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
extends: ['plugin:import/errors', 'plugin:import/warnings', 'plugin:import/typescript'],
3+
rules: {
4+
'@typescript-eslint/no-unused-vars': 0,
5+
'@typescript-eslint/ban-types': 0,
6+
'import/order': [
7+
'error',
8+
{
9+
'newlines-between': 'never',
10+
alphabetize: {
11+
order: 'asc',
12+
caseInsensitive: true
13+
}
14+
}
15+
],
16+
'import/no-duplicates': 2
17+
}
18+
};

.storybook/main.js renamed to .storybook/main.cjs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const path = require('path');
2-
const PATHS = require('../config/paths');
2+
3+
const root = path.resolve(__dirname, '..');
34
require('dotenv').config({
4-
path: path.join(PATHS.root, '.env')
5+
path: path.join(root, '.env')
56
});
67

78
const BUILD_FOR_IE11 = process.env.UI5_WEBCOMPONENTS_FOR_REACT_BUILD_IE11 === 'true';
@@ -77,12 +78,12 @@ module.exports = {
7778
}
7879
config.resolve.alias = {
7980
...config.resolve.alias,
80-
'@shared': path.join(PATHS.root, 'shared'),
81-
'@ui5/webcomponents-react/dist': path.join(PATHS.root, 'packages', 'main', 'dist'),
82-
'@ui5/webcomponents-react': path.join(PATHS.root, 'packages', 'main', 'src'),
83-
'@ui5/webcomponents-react-charts': path.join(PATHS.root, 'packages', 'charts', 'src'),
84-
'@ui5/webcomponents-react-base/types': path.join(PATHS.root, 'packages', 'base', 'types'),
85-
'@ui5/webcomponents-react-base': path.join(PATHS.root, 'packages', 'base', 'src')
81+
'@shared': path.join(root, 'shared'),
82+
'@ui5/webcomponents-react/dist': path.join(root, 'packages', 'main', 'dist'),
83+
'@ui5/webcomponents-react': path.join(root, 'packages', 'main', 'src'),
84+
'@ui5/webcomponents-react-charts': path.join(root, 'packages', 'charts', 'src'),
85+
'@ui5/webcomponents-react-base/types': path.join(root, 'packages', 'base', 'types'),
86+
'@ui5/webcomponents-react-base': path.join(root, 'packages', 'base', 'src')
8687
};
8788

8889
return config;
File renamed without changes.

config/jest.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const PATHS = require('./paths');
1+
import PATHS from './paths.js';
22

3-
module.exports = {
3+
export default {
44
rootDir: PATHS.root,
55
coverageDirectory: 'coverage',
66
coverageReporters: ['lcov', 'text'],

config/jestsetup.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import contentLoaderSerializer from '@shared/tests/serializer/content-loader-serializer.js';
2-
import jssSerializer from '@shared/tests/serializer/jss-snapshot-serializer';
1+
import contentLoaderSerializer from '@shared/tests/serializer/content-loader-serializer.cjs';
2+
import jssSerializer from '@shared/tests/serializer/jss-snapshot-serializer.cjs';
33
import '@testing-library/jest-dom';
44
import Enzyme from 'enzyme';
55
import Adapter from 'enzyme-adapter-react-16';
@@ -27,11 +27,17 @@ expect.addSnapshotSerializer(
2727
createSerializer({
2828
map: (el) => {
2929
// @ts-ignore
30-
el.node && el.node.attribs && el.node.attribs.theme && delete el.node.attribs.theme;
30+
el.node &&
31+
el.node.attribs &&
32+
el.node.attribs.theme &&
33+
delete el.node.attribs.theme;
3134
// @ts-ignore
32-
el.node && el.node.attribs && el.node.attribs.classes && delete el.node.attribs.classes;
35+
el.node &&
36+
el.node.attribs &&
37+
el.node.attribs.classes &&
38+
delete el.node.attribs.classes;
3339
return el;
34-
}
40+
},
3541
})
3642
);
3743
expect.addSnapshotSerializer(jssSerializer);
@@ -48,8 +54,8 @@ export const setupMatchMedia = () => {
4854
removeListener: jest.fn(), // deprecated
4955
addEventListener: jest.fn(),
5056
removeEventListener: jest.fn(),
51-
dispatchEvent: jest.fn()
52-
}))
57+
dispatchEvent: jest.fn(),
58+
})),
5359
});
5460
};
5561

config/paths.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
const path = require('path');
1+
import path from 'path';
2+
import { fileURLToPath } from 'url';
3+
import { dirname } from 'path';
4+
5+
const __filename = fileURLToPath(import.meta.url);
6+
const __dirname = dirname(__filename);
27

38
const root = path.resolve(__dirname, '..');
49
const PATHS = {
@@ -10,7 +15,7 @@ const PATHS = {
1015
coverage: path.join(root, 'coverage'),
1116
nycOutput: path.join(root, '.nyc_output'),
1217
nodeModules: path.join(root, 'node_modules'),
13-
packages: path.join(root, 'packages')
18+
packages: path.join(root, 'packages'),
1419
};
1520

16-
module.exports = PATHS;
21+
export default PATHS;

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"pretest": "rimraf coverage && lerna run build:i18n",
1414
"test": "jest --config=config/jest.config.js --coverage",
1515
"clean": "lerna run clean --stream && rimraf coverage",
16-
"prettier:all": "prettier --write --config ./prettier.config.js \"packages/**/*.{ts,tsx,mdx}\"",
16+
"prettier:all": "prettier --write --config ./prettier.config.cjs \"packages/**/*.{ts,tsx,mdx}\"",
1717
"lint": "eslint packages",
1818
"lerna:version-dryrun": "lerna version --conventional-graduate --no-git-tag-version --no-push",
1919
"deploy:storybook": "lerna run build:i18n && storybook-to-ghpages --ci"
@@ -108,7 +108,8 @@
108108
},
109109
"lint-staged": {
110110
"*.{js,jsx,ts,tsx,mdx}": [
111-
"prettier -config ./prettier.config.js --write"
111+
"prettier -config ./prettier.config.cjs --write"
112112
]
113-
}
113+
},
114+
"type": "module"
114115
}

packages/base/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
],
2121
"scripts": {
2222
"clean": "rimraf cjs Device hooks lib polyfill styling utils index.esm.js index.d.ts",
23-
"build:rollup": "rollup -c rollup.config.js",
23+
"build:rollup": "rollup -c rollup.config.mjs",
2424
"build:polyfills": "tsc ./src/polyfill/*.ts --outDir ./polyfill --skipLibCheck",
2525
"build": "npm-run-all -s build:rollup build:polyfills",
2626
"build:types": "tsc --declaration --emitDeclarationOnly --declarationDir . --removeComments false"

packages/base/rollup.config.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/base/rollup.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import rollupConfigFactory from '../../scripts/rollup/configFactory.js';
2+
3+
const config = rollupConfigFactory('base');
4+
export default config;

packages/charts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"sideEffects": false,
1717
"scripts": {
1818
"clean": "rimraf cjs components interfaces internal lib util index.esm.js index.d.ts config.d.ts hooks",
19-
"build": "rollup -c rollup.config.js",
19+
"build": "rollup -c rollup.config.mjs",
2020
"build:types": "tsc --declaration --emitDeclarationOnly --declarationDir . --removeComments false || exit 0"
2121
},
2222
"dependencies": {

packages/charts/rollup.config.js

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/charts/rollup.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import rollupConfigFactory from '../../scripts/rollup/configFactory.js';
2+
3+
const config = rollupConfigFactory('charts', ['@ui5/webcomponents', '@ui5/webcomponents-base']);
4+
export default config;

packages/main/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"scripts": {
2424
"clean": "rimraf cjs components enums interfaces internal lib webComponents index.esm.js index.d.ts dist",
2525
"build": "npm-run-all -s build:i18n build:rollup",
26-
"build:rollup": "rollup -c rollup.config.js",
26+
"build:rollup": "rollup -c rollup.config.mjs",
2727
"build:i18n": "npm-run-all -s build:i18n-bundles build:i18n-default build:i18n-imports build:assets",
2828
"build:i18n-bundles": "mkdirp dist/assets/i18n && node ../../node_modules/@ui5/webcomponents-tools/lib/i18n/toJSON.js src/i18n dist/assets/i18n",
2929
"build:i18n-default": "node ../../node_modules/@ui5/webcomponents-tools/lib/i18n/defaults.js src/i18n dist/assets/i18n && tsc dist/assets/i18n/i18n-defaults.js --allowJs --declaration --emitDeclarationOnly --declarationDir dist/assets/i18n",

packages/main/rollup.config.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

packages/main/rollup.config.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import rollupConfigFactory from '../../scripts/rollup/configFactory.js';
2+
3+
export default rollupConfigFactory('main', ['@ui5/webcomponents-base']);

packages/main/scripts/create-library-export.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const path = require('path');
2-
const fs = require('fs');
3-
const PATHS = require('../../../config/paths');
1+
import path from 'path';
2+
import fs from 'fs';
3+
import PATHS from '../../../config/paths.js';
44

55
const LIB_BASE_PATH = path.resolve(PATHS.packages, 'main', 'src', 'lib');
66
const INTERNAL_COMPONENTS = ['ScrollContext'];
@@ -33,4 +33,7 @@ fileContent += `
3333
};
3434
`;
3535

36-
fs.writeFileSync(path.join(PATHS.packages, 'main', 'src', 'index.ts'), fileContent);
36+
fs.writeFileSync(
37+
path.join(PATHS.packages, 'main', 'src', 'index.ts'),
38+
fileContent
39+
);
File renamed without changes.

scripts/generate-assets/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const fs = require('fs');
2-
const prettier = require('prettier');
3-
const prettierConfig = require('../../prettier.config');
1+
import fs from 'fs';
2+
import prettier from 'prettier';
3+
import prettierConfig from '../../prettier.config.cjs';
44
// All languages present in the file system
55
const files = fs.readdirSync('dist/json-imports');
66

scripts/rollup/configFactory.js

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
const { nodeResolve } = require('@rollup/plugin-node-resolve');
2-
const commonjs = require('@rollup/plugin-commonjs');
3-
const { babel } = require('@rollup/plugin-babel');
4-
const path = require('path');
5-
const fs = require('fs');
6-
const json = require('@rollup/plugin-json');
7-
const micromatch = require('micromatch');
8-
const PATHS = require('../../config/paths');
9-
const { asyncCopyTo, highlightLog } = require('../utils');
10-
const replace = require('@rollup/plugin-replace');
11-
const glob = require('glob');
12-
const { terser } = require('rollup-plugin-terser');
13-
const { spawnSync } = require('child_process');
1+
import { nodeResolve } from '@rollup/plugin-node-resolve';
2+
import commonjs from '@rollup/plugin-commonjs';
3+
import Babel from '@rollup/plugin-babel';
4+
import path from 'path';
5+
import fs from 'fs';
6+
import json from '@rollup/plugin-json';
7+
import micromatch from 'micromatch';
8+
import PATHS from '../../config/paths.js';
9+
import { asyncCopyTo, highlightLog } from '../utils.js';
10+
import replace from '@rollup/plugin-replace';
11+
import glob from 'glob';
12+
import { terser } from 'rollup-plugin-terser';
13+
14+
const { babel } = Babel;
1415

1516
process.env.BABEL_ENV = 'production';
1617
process.env.NODE_ENV = 'production';
@@ -21,30 +22,33 @@ const rollupConfigFactory = (pkgName, externals = []) => {
2122

2223
const allFilesAndFolders = glob.sync(`${LIB_BASE_PATH}/**/*`);
2324

24-
const allLibFiles = allFilesAndFolders.filter((file) => fs.statSync(file).isFile());
25-
25+
const allLibFiles = allFilesAndFolders.filter((file) =>
26+
fs.statSync(file).isFile()
27+
);
2628
const plugins = [
2729
nodeResolve({
28-
extensions: ['.mjs', '.js', '.json', '.node', '.jsx', '.ts', '.tsx']
30+
extensions: ['.mjs', '.js', '.json', '.node', '.jsx', '.ts', '.tsx'],
2931
}),
3032
commonjs(),
3133
json(),
3234
babel({
3335
extensions: ['.js', '.jsx', '.ts', '.tsx'],
3436
babelHelpers: 'runtime',
35-
configFile: path.resolve(PATHS.root, 'babel.config.js')
37+
configFile: path.resolve(PATHS.root, 'babel.config.cjs'),
3638
}),
3739
// Turn __DEV__ and process.env checks into constants.
3840
replace({
3941
exclude: 'node_modules/**',
4042
values: {
4143
__DEV__: 'false',
42-
'process.env.NODE_ENV': "'production'"
43-
}
44-
})
44+
'process.env.NODE_ENV': "'production'",
45+
},
46+
}),
4547
];
4648

47-
const packageJson = require(path.resolve(PKG_BASE_PATH, 'package.json'));
49+
const packageJson = JSON.parse(
50+
fs.readFileSync(path.resolve(PKG_BASE_PATH, 'package.json'), 'utf8')
51+
);
4852
const externalModules = Array.from(
4953
new Set([
5054
'react',
@@ -53,25 +57,33 @@ const rollupConfigFactory = (pkgName, externals = []) => {
5357
packageJson.name,
5458
...Object.keys(packageJson.dependencies || {}),
5559
...Object.keys(packageJson.peerDependencies || {}),
56-
...externals
60+
...externals,
5761
])
5862
);
5963

6064
highlightLog(`Build lib folder for ${pkgName}`);
6165

6266
console.info('Copy License');
63-
fs.copyFileSync(path.resolve(PATHS.root, 'LICENSE'), path.resolve(PKG_BASE_PATH, `LICENSE`));
67+
fs.copyFileSync(
68+
path.resolve(PATHS.root, 'LICENSE'),
69+
path.resolve(PKG_BASE_PATH, `LICENSE`)
70+
);
6471

6572
console.info('Copy index file');
66-
asyncCopyTo(path.resolve(PKG_BASE_PATH, 'src', 'index.ts'), path.resolve(PKG_BASE_PATH, `index.esm.js`));
73+
asyncCopyTo(
74+
path.resolve(PKG_BASE_PATH, 'src', 'index.ts'),
75+
path.resolve(PKG_BASE_PATH, `index.esm.js`)
76+
);
6777

6878
const external = (id) => {
6979
const containsThisModule = (pkg) => id === pkg || id.startsWith(pkg + '/');
7080
return externalModules.some(containsThisModule);
7181
};
7282
const treeshake = {
7383
moduleSideEffects:
74-
packageJson.sideEffects === false ? false : (id) => micromatch.isMatch(id, packageJson.sideEffects)
84+
packageJson.sideEffects === false
85+
? false
86+
: (id) => micromatch.isMatch(id, packageJson.sideEffects),
7587
};
7688
return [
7789
...allLibFiles.map((file) => ({
@@ -83,13 +95,15 @@ const rollupConfigFactory = (pkgName, externals = []) => {
8395
file: path.resolve(
8496
PKG_BASE_PATH,
8597
'lib',
86-
file.replace(`${LIB_BASE_PATH}${path.sep}`, '').replace(/\.ts$/, '.js')
98+
file
99+
.replace(`${LIB_BASE_PATH}${path.sep}`, '')
100+
.replace(/\.ts$/, '.js')
87101
),
88102
format: 'es',
89-
sourcemap: true
90-
}
103+
sourcemap: true,
104+
},
91105
],
92-
plugins
106+
plugins,
93107
})),
94108
{
95109
input: path.resolve(PKG_BASE_PATH, 'src', 'index.ts'),
@@ -99,16 +113,20 @@ const rollupConfigFactory = (pkgName, externals = []) => {
99113
output: [
100114
{
101115
file: path.resolve(PKG_BASE_PATH, 'cjs', `${pkgName}.development.js`),
102-
format: 'cjs'
116+
format: 'cjs',
103117
},
104118
{
105-
file: path.resolve(PKG_BASE_PATH, 'cjs', `${pkgName}.production.min.js`),
119+
file: path.resolve(
120+
PKG_BASE_PATH,
121+
'cjs',
122+
`${pkgName}.production.min.js`
123+
),
106124
format: 'cjs',
107-
plugins: [terser()]
108-
}
109-
]
110-
}
125+
plugins: [terser()],
126+
},
127+
],
128+
},
111129
];
112130
};
113131

114-
module.exports = rollupConfigFactory;
132+
export default rollupConfigFactory;

0 commit comments

Comments
 (0)