Skip to content

Commit b3af70b

Browse files
committed
Update ESLint and Babel, add prettier
1 parent b0b8c97 commit b3af70b

8 files changed

Lines changed: 2087 additions & 850 deletions

File tree

.eslintignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
node_modules
2-
1+
node_modules/
2+
tmp/
3+
public/
34
client/app/libs/i18n/translations.js
45
client/app/libs/i18n/default.js
6+
postcss.config.js

.eslintrc

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
parser: "@babel/eslint-parser"
2+
3+
extends:
4+
- eslint-config-shakacode
5+
- prettier
6+
7+
plugins:
8+
- prettier
9+
10+
globals:
11+
__DEBUG_SERVER_ERRORS__: true
12+
__SERVER_ERRORS__: true
13+
14+
env:
15+
browser: true
16+
node: true
17+
jest: true
18+
19+
rules:
20+
no-shadow: 0
21+
no-console: 0
22+
function-paren-newline: 0
23+
object-curly-newline: 0
24+
no-restricted-syntax: ["error", "SequenceExpression"]
25+
# https://stackoverflow.com/a/59268871/5241481
26+
import/extensions: ['error', 'ignorePackages', {"js": 'never'}]
27+
28+
# https://github.com/benmosher/eslint-plugin-import/issues/340
29+
import/no-extraneous-dependencies: 0
30+
31+
settings:
32+
import/core-modules:
33+
- react-redux
34+
import/resolver:
35+
node:
36+
extensions: [".js"]

.eslintrc.yml

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

.prettierignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
node_modules/
2+
package.json
3+
tmp/
4+
public/
5+
coverage/
6+
spec/support/

.prettierrc.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
printWidth: 110
2+
tabWidth: 2
3+
useTabs: false
4+
semi: true
5+
singleQuote: true
6+
trailingComma: all
7+
bracketSpacing: true
8+
jsxBracketSameLine: false
9+
parser: flow
10+
11+
overrides:
12+
- files: "*.@(css|scss)"
13+
options:
14+
parser: css
15+
singleQuote: false
16+
printWidth: 120
17+
- files: "*.@(json)"
18+
options:
19+
parser: json
20+
printWidth: 100

babel.config.js

Lines changed: 81 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
1-
module.exports = function(api) {
2-
var validEnv = ['development', 'test', 'production']
3-
var currentEnv = api.env()
4-
var isDevelopmentEnv = api.env('development')
5-
var isProductionEnv = api.env('production')
6-
var isTestEnv = api.env('test')
7-
const isHMR = process.env.WEBPACK_DEV_SERVER
1+
// The source code including full typescript support is available at:
2+
// https://github.com/shakacode/react_on_rails_tutorial_with_ssr_and_hmr_fast_refresh/blob/master/babel.config.js
3+
4+
module.exports = (api) => {
5+
const validEnv = ['development', 'test', 'production'];
6+
const currentEnv = api.env();
7+
// https://babeljs.io/docs/en/config-files#apienv
8+
// api.env is almost the NODE_ENV
9+
const isDevelopmentEnv = api.env('development');
10+
const isProductionEnv = api.env('production');
11+
const isTestEnv = api.env('test');
812

913
if (!validEnv.includes(currentEnv)) {
1014
throw new Error(
11-
'Please specify a valid `NODE_ENV` or ' +
15+
`${
16+
'Please specify a valid `NODE_ENV` or ' +
1217
'`BABEL_ENV` environment variables. Valid values are "development", ' +
13-
'"test", and "production". Instead, received: ' +
14-
JSON.stringify(currentEnv) +
15-
'.'
16-
)
18+
'"test", and "production". Instead, received: '
19+
}${JSON.stringify(currentEnv)}.`,
20+
);
1721
}
1822

1923
return {
@@ -22,30 +26,81 @@ module.exports = function(api) {
2226
'@babel/preset-env',
2327
{
2428
targets: {
25-
node: 'current'
26-
}
27-
}
29+
node: 'current',
30+
},
31+
modules: 'commonjs',
32+
},
33+
'@babel/preset-react',
34+
],
35+
(isProductionEnv || isDevelopmentEnv) && [
36+
'@babel/preset-env',
37+
{
38+
forceAllTransforms: true,
39+
useBuiltIns: 'entry',
40+
corejs: 3,
41+
modules: false,
42+
exclude: ['transform-typeof-symbol'],
43+
},
44+
],
45+
[
46+
'@babel/preset-react',
47+
{
48+
development: isDevelopmentEnv || isTestEnv,
49+
useBuiltIns: true,
50+
},
2851
],
29-
(isProductionEnv || isDevelopmentEnv) && '@babel/preset-env',
30-
"@babel/preset-react",
52+
['@babel/preset-typescript', { allExtensions: true, isTSX: true }],
3153
].filter(Boolean),
3254
plugins: [
3355
'babel-plugin-macros',
34-
isDevelopmentEnv && isHMR && 'react-refresh/babel',
56+
'@babel/plugin-syntax-dynamic-import',
57+
isTestEnv && 'babel-plugin-dynamic-import-node',
58+
'@babel/plugin-transform-destructuring',
3559
[
3660
'@babel/plugin-proposal-class-properties',
3761
{
38-
loose: true
39-
}
62+
loose: true,
63+
},
64+
],
65+
[
66+
'@babel/plugin-proposal-object-rest-spread',
67+
{
68+
useBuiltIns: true,
69+
},
4070
],
4171
[
4272
'@babel/plugin-transform-runtime',
4373
{
4474
helpers: false,
4575
regenerator: true,
46-
corejs: false
47-
}
48-
]
49-
].filter(Boolean)
50-
}
51-
}
76+
corejs: false,
77+
},
78+
],
79+
[
80+
'@babel/plugin-transform-regenerator',
81+
{
82+
async: false,
83+
},
84+
],
85+
[
86+
'@babel/plugin-proposal-private-property-in-object',
87+
{
88+
loose: true,
89+
},
90+
],
91+
[
92+
'@babel/plugin-proposal-private-methods',
93+
{
94+
loose: true,
95+
},
96+
],
97+
process.env.WEBPACK_SERVE && 'react-refresh/babel',
98+
isProductionEnv && [
99+
'babel-plugin-transform-react-remove-prop-types',
100+
{
101+
removeImport: true,
102+
},
103+
],
104+
].filter(Boolean),
105+
};
106+
};

package.json

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@
2525
"build:clean": "rm -rf public/webpack || true"
2626
},
2727
"dependencies": {
28-
"@babel/preset-react": "^7.0.0",
28+
"@babel/cli": "^7.12.10",
29+
"@babel/core": "^7.12.10",
30+
"@babel/plugin-transform-runtime": "^7.12.10",
31+
"@babel/plugin-transform-typescript": "^7.12.1",
32+
"@babel/preset-env": "^7.12.10",
33+
"@babel/preset-react": "^7.12.10",
2934
"@rails/webpacker": "^5.1.1",
3035
"actioncable": "5.0.x",
3136
"autoprefixer": "^7.1.5",
@@ -67,25 +72,29 @@
6772
"webpack-merge": "^4.1.1"
6873
},
6974
"devDependencies": {
75+
"@babel/eslint-parser": "^7.16.5",
76+
"@babel/preset-typescript": "^7.16.7",
7077
"@pmmmwh/react-refresh-webpack-plugin": "^0.3.3",
71-
"babel-eslint": "^8.0.2",
7278
"babel-jest": "^23.4.2",
79+
"babel-loader": "^8.2.3",
7380
"body-parser": "^1.18.2",
74-
"eslint": "^7.4.0",
81+
"eslint": "^8.6.0",
82+
"eslint-config-prettier": "^8.3.0",
7583
"eslint-config-shakacode": "^16.0.0",
7684
"eslint-import-resolver-webpack": "^0.8.3",
77-
"eslint-plugin-import": "^2.8.0",
85+
"eslint-plugin-import": "^2.25.4",
7886
"eslint-plugin-jest": "^21.22.0",
7987
"eslint-plugin-jsx-a11y": "^6.0.2",
80-
"eslint-plugin-react": "^7.5.1",
88+
"eslint-plugin-prettier": "^4.0.0",
89+
"eslint-plugin-react": "^7.28.0",
8190
"estraverse-fb": "^1.3.2",
8291
"express": "^4.16.2",
8392
"identity-obj-proxy": "^3.0.0",
8493
"jest": "^23.5.0",
8594
"mini-css-extract-plugin": "^0.7.0",
8695
"preload-webpack-plugin": "^3.0.0-alpha.1",
87-
"prettier": "^1.14.3",
88-
"prettier-eslint-cli": "^4.7.1",
96+
"prettier": "^2.2.1",
97+
"prettier-eslint-cli": "^5.0.1",
8998
"react-transform-hmr": "^1.0.4",
9099
"regenerator-runtime": "^0.12.1",
91100
"sleep": "^6.2.0",

0 commit comments

Comments
 (0)