Skip to content

Commit ad464c2

Browse files
committed
Small refactor to helpers
1 parent e97cd40 commit ad464c2

2 files changed

Lines changed: 38 additions & 39 deletions

File tree

packages/razzle-plugin-typescript/helpers.js

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,25 @@
11
'use strict';
22

3-
const eslintLoaderFinder = rule =>
4-
Array.isArray(rule.use) &&
5-
rule.use.find(
6-
loader =>
7-
typeof loader.loader === 'string' &&
8-
loader.loader.match(/[/\\]eslint-loader[/\\]/)
9-
);
3+
const loaderFinder = loaderName => rule => {
4+
// i.e.: /eslint-loader/
5+
const loaderRegex = new RegExp(`[/\\\\]${loaderName}[/\\\\]`);
106

11-
const babelLoaderFinder = rule =>
12-
Array.isArray(rule.use) &&
13-
rule.use.find(
14-
loader =>
15-
typeof loader.loader === 'string' &&
16-
loader.loader.match(/[/\\]babel-loader[/\\]/)
7+
// Checks if there is an object inside rule.use with loader matching loaderRegex, OR
8+
// If there's a loader string in rule.loader matching loaderRegex.
9+
return (
10+
(Array.isArray(rule.use) &&
11+
rule.use.find(
12+
loader =>
13+
typeof loader.loader === 'string' && loader.loader.match(loaderRegex)
14+
)) ||
15+
(typeof rule.loader === 'string' && rule.loader.match(loaderRegex))
1716
);
17+
};
1818

19-
const tslintLoaderFinder = rule =>
20-
typeof rule.loader === 'string' &&
21-
rule.loader.match(/[/\\]tslint-loader[/\\]/);
22-
23-
const tsLoaderFinder = rule =>
24-
Array.isArray(rule.use) &&
25-
rule.use.find(
26-
loader =>
27-
typeof loader.loader === 'string' &&
28-
loader.loader.match(/[/\\]ts-loader[/\\]/)
29-
);
19+
const eslintLoaderFinder = loaderFinder('eslint-loader');
20+
const babelLoaderFinder = loaderFinder('babel-loader');
21+
const tslintLoaderFinder = loaderFinder('tslint-loader');
22+
const tsLoaderFinder = loaderFinder('ts-loader');
3023

3124
module.exports = {
3225
eslintLoaderFinder,

packages/razzle-plugin-typescript/index.js

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ function modify(baseConfig, configOptions, webpack, userOptions = {}) {
2929
}
3030

3131
// Safely locate Babel-Loader in Razzle's webpack internals
32-
const babelLoaderIndex = config.module.rules.findIndex(babelLoaderFinder);
33-
if (babelLoaderIndex === -1) {
34-
throw new Error('babel-loader was erased from config');
32+
const babelLoader = config.module.rules.find(babelLoaderFinder);
33+
if (!babelLoader) {
34+
throw new Error(
35+
`'babel-loader' was erased from config, we need it to define 'include' option`
36+
);
3537
}
3638

37-
const babelLoader = config.module.rules[babelLoaderIndex];
38-
3939
// Get the correct `include` option, since that hasn't changed.
4040
// This tells Razzle which directories to transform.
4141
const { include } = babelLoader;
@@ -45,12 +45,16 @@ function modify(baseConfig, configOptions, webpack, userOptions = {}) {
4545
include,
4646
enforce: 'pre',
4747
test: /\.tsx?$/,
48-
loader: require.resolve('tslint-loader'),
49-
options: Object.assign(
50-
{},
51-
defaultOptions.tslintLoader,
52-
options.tslintLoader
53-
),
48+
use: [
49+
{
50+
loader: require.resolve('tslint-loader'),
51+
options: Object.assign(
52+
{},
53+
defaultOptions.tslintLoader,
54+
options.tslintLoader
55+
),
56+
},
57+
],
5458
};
5559
config.module.rules.push(tslintLoader);
5660

@@ -70,13 +74,15 @@ function modify(baseConfig, configOptions, webpack, userOptions = {}) {
7074
// If using babel, also add babel-loader to ts files,
7175
// so we can use babel plugins on tsx files too
7276
tsLoader.use = [babelLoader.use[1], ...tsLoader.use];
73-
74-
config.module.rules.push(tsLoader);
7577
} else {
76-
// If not using babel, override it with tsLoader
77-
config.module.rules[babelLoaderIndex] = tsLoader;
78+
// If not using babel, remove it
79+
config.module.rules = config.module.rules.filter(
80+
rule => !babelLoaderFinder(rule)
81+
);
7882
}
7983

84+
config.module.rules.push(tsLoader);
85+
8086
return config;
8187
}
8288

0 commit comments

Comments
 (0)