Skip to content

Commit bba7b74

Browse files
committed
update dependencies and wrapper logic
1 parent 4dc1b37 commit bba7b74

File tree

5 files changed

+56
-27
lines changed

5 files changed

+56
-27
lines changed

.vscode/launch.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,26 @@
1212
"cwd": "${workspaceFolder}/example",
1313
"console": "integratedTerminal",
1414
"internalConsoleOptions": "neverOpen"
15+
},
16+
{
17+
"type": "node",
18+
"request": "launch",
19+
"name": "Build example",
20+
"program": "${workspaceFolder}/bin/index.js",
21+
"args": ["build", "--stats"],
22+
"cwd": "${workspaceFolder}/example",
23+
"console": "integratedTerminal",
24+
"internalConsoleOptions": "neverOpen"
25+
},
26+
{
27+
"type": "node",
28+
"request": "launch",
29+
"name": "Test example",
30+
"program": "${workspaceFolder}/bin/index.js",
31+
"args": ["test"],
32+
"cwd": "${workspaceFolder}/example",
33+
"console": "integratedTerminal",
34+
"internalConsoleOptions": "neverOpen"
1535
}
1636
]
1737
}

bin/dummyTransform.js

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

bin/index.js

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ const getLoadersFromRules = (rules, path, loaderName) =>
99
.reduce(flatten, [])
1010
.filter(get("loader"))
1111
.filter(({ loader }) => loader.includes(loaderName));
12+
const getRulesByTest = (rules, path, testPart) =>
13+
rules
14+
.filter(get(path))
15+
.map(get(path))
16+
.reduce(flatten, [])
17+
.filter(get("test"))
18+
.filter(({ test }) => test.toString().includes(testPart));
1219

1320
const script = process.argv[2] || "start";
1421
process.env.NODE_ENV = script === "build" ? "production" : "development";
@@ -21,23 +28,23 @@ const webpackConfig = require(webpackConfigPath)(process.env.NODE_ENV);
2128
if (!webpackConfig) {
2229
throw new Error(`no Webpack config found for: ${webpackConfigPath}`);
2330
}
31+
32+
webpackConfig.plugins = (webpackConfig.plugins || []).filter(
33+
plugin => !(plugin?.constructor?.name || "").toLowerCase().includes("react")
34+
);
2435
const { module: { rules = [] } = {} } = webpackConfig;
2536

2637
// use for unminified prod builds
2738
// webpackConfig.optimization.minimize = false;
2839

29-
const eslintLoaders = getLoadersFromRules(rules, "use", "eslint");
30-
if (!eslintLoaders.length) {
31-
throw new Error(
32-
`missing ESLint config in webpack config: ${webpackConfigPath}`
33-
);
40+
const svgRules = getRulesByTest(rules, "oneOf", ".svg");
41+
if (!svgRules.length) {
42+
throw new Error(`missing SVG rules in webpack config: ${webpackConfigPath}`);
3443
}
35-
const eslintConfig = eslintLoaders[0].options.baseConfig;
36-
eslintConfig.settings = { react: { version: "latest" } };
37-
// override ESLint rules to allow using JSX with Hyperapp
38-
eslintConfig.rules = Object.assign(eslintConfig.rules || {}, {
39-
"react/react-in-jsx-scope": "off"
40-
});
44+
// this rule brings in a copy of react
45+
svgRules[0].use = svgRules[0].use.filter(
46+
ruleUse => !ruleUse.loader.includes("@svgr")
47+
);
4148

4249
const babelLoaders = getLoadersFromRules(rules, "oneOf", "babel");
4350
if (!babelLoaders.length) {
@@ -46,8 +53,12 @@ if (!babelLoaders.length) {
4653
);
4754
}
4855
const babelOptions = babelLoaders[0].options;
56+
57+
// disable babel caching for testing
58+
// babelOptions.cacheDirectory = false;
59+
4960
// configure babel to allow using JSX with Hyperapp
50-
babelOptions.plugins = (babelOptions.plugins || []).concat([
61+
babelOptions.plugins = [
5162
[
5263
"@babel/transform-react-jsx",
5364
{
@@ -56,20 +67,18 @@ babelOptions.plugins = (babelOptions.plugins || []).concat([
5667
}
5768
],
5869
require.resolve("./injectHtmlImportPlugin")
59-
]);
70+
];
6071

6172
// override config in cache
6273
require.cache[require.resolve(webpackConfigPath)].exports = () => webpackConfig;
6374

6475
const createJestConfig = require(createJestConfigPath);
6576
require.cache[require.resolve(createJestConfigPath)].exports = (...args) => {
6677
const jestConfig = createJestConfig(...args);
67-
for (let key in jestConfig.transform) {
68-
if (jestConfig.transform[key].includes("fileTransform")) {
69-
jestConfig.transform[key] = require.resolve("./dummyTransform");
70-
}
71-
}
72-
jestConfig.transformIgnorePatterns = ["node_modules/(?!hyperapp)/"];
78+
jestConfig.transformIgnorePatterns = jestConfig.transformIgnorePatterns.map(
79+
pattern =>
80+
pattern.includes("node_modules") ? "/node_modules/(?!hyperapp)/" : pattern
81+
);
7382
return jestConfig;
7483
};
7584

example/.npmrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
package-lock = false
2+
save-prefix = =

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "hyperapp-scripts",
3-
"version": "0.5.0",
3+
"version": "0.6.0",
44
"description": "Hyperapp expansion pack for create-react-app",
55
"bin": {
66
"hyperapp-scripts": "./bin/index.js"
77
},
88
"main": "index.js",
99
"scripts": {
10-
"clean": "npx --ignore-existing --quiet rimraf node_modules example/{node_modules,build}",
10+
"clean": "npx --quiet rimraf node_modules example/{node_modules,build}",
1111
"format": "npx prettier --write *.js bin/*.js example/src/**/*.{css,js}",
1212
"format:check": "npx prettier --list-different *.js bin/*.js example/src/**/*.{css,js}",
1313
"setup": "npm i && cd example && npm i",
@@ -18,11 +18,12 @@
1818
"release": "node release"
1919
},
2020
"dependencies": {
21-
"react-scripts": "=3.0.0"
21+
"react-scripts": "=5.0.1"
2222
},
2323
"devDependencies": {
24-
"cross-env": "=7.0.2",
25-
"hyperapp": "=2.0.8"
24+
"@babel/plugin-proposal-private-property-in-object": "=7.21.11",
25+
"cross-env": "=7.0.3",
26+
"hyperapp": "=2.0.22"
2627
},
2728
"peerDependencies": {
2829
"hyperapp": "*"

0 commit comments

Comments
 (0)