Skip to content

Commit 8e15508

Browse files
Add preset-flow if .flowconfig is detected
1 parent 76adb41 commit 8e15508

File tree

5 files changed

+157
-46
lines changed

5 files changed

+157
-46
lines changed

__tests__/__snapshots__/packageData.test.js.snap

Lines changed: 73 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,78 @@ Object {
2626
}
2727
`;
2828

29-
exports[`packages - earlier v7 1`] = `
29+
exports[`scripts 1`] = `
30+
Object {
31+
"name": "mocha-scripts-test",
32+
"scripts": Object {
33+
"coverage": "NODE_ENV=test nyc --reporter=lcov --reporter=text _mocha --require @babel/register test/*.js",
34+
"prepublish": "npm run test",
35+
"test": "mocha --compilers js:@babel/register --require @babel/polyfill test/*Test.js",
36+
"test2": "mocha --compilers js:@babel/register --require @babel/polyfill test/*Test.js",
37+
},
38+
}
39+
`;
40+
41+
exports[`scripts 2`] = `
42+
Object {
43+
"devDependencies": Object {
44+
"@babel/cli": "7.0.0-beta.39",
45+
"@babel/node": "7.0.0-beta.39",
46+
},
47+
"name": "scripts-babel-node",
48+
"scripts": Object {
49+
"test": "babel-node",
50+
},
51+
}
52+
`;
53+
54+
exports[`upgradeDeps adds flow preset if user is upgrading from previous v7 1`] = `
55+
Object {
56+
"@babel/core": "7.0.0-beta.39",
57+
"@babel/preset-flow": "7.0.0-beta.39",
58+
"@babel/preset-react": "7.0.0-beta.39",
59+
}
60+
`;
61+
62+
exports[`upgradeDeps adds flow preset if user was using v6 preset-react 1`] = `
63+
Object {
64+
"@babel/core": "7.0.0-beta.39",
65+
"@babel/preset-flow": "7.0.0-beta.39",
66+
"@babel/preset-react": "7.0.0-beta.39",
67+
}
68+
`;
69+
70+
exports[`upgradeDeps does not add flow preset if user is upgrading from previous v7 but flow not detected 1`] = `
71+
Object {
72+
"@babel/core": "7.0.0-beta.39",
73+
"@babel/preset-react": "7.0.0-beta.39",
74+
}
75+
`;
76+
77+
exports[`upgradeDeps does not add flow preset if user was using v6 preset-react but flow not detected 1`] = `
78+
Object {
79+
"@babel/core": "7.0.0-beta.39",
80+
"@babel/preset-react": "7.0.0-beta.39",
81+
}
82+
`;
83+
84+
exports[`upgradeDeps handles flow preset if user had entry and is upgrading from previous v7 1`] = `
85+
Object {
86+
"@babel/core": "7.0.0-beta.39",
87+
"@babel/preset-flow": "7.0.0-beta.39",
88+
"@babel/preset-react": "7.0.0-beta.39",
89+
}
90+
`;
91+
92+
exports[`upgradeDeps handles flow preset if user had entry and is upgrading from previous v7 and flow not detected 1`] = `
93+
Object {
94+
"@babel/core": "7.0.0-beta.39",
95+
"@babel/preset-flow": "7.0.0-beta.39",
96+
"@babel/preset-react": "7.0.0-beta.39",
97+
}
98+
`;
99+
100+
exports[`upgradeDeps upgrades from earlier v7 version 1`] = `
30101
Object {
31102
"@babel/core": "7.0.0-beta.39",
32103
"@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.39",
@@ -38,7 +109,7 @@ Object {
38109
}
39110
`;
40111

41-
exports[`packages 1`] = `
112+
exports[`upgradeDeps upgrades from v6 1`] = `
42113
Object {
43114
"@babel/cli": "7.0.0-beta.39",
44115
"@babel/code-frame": "7.0.0-beta.39",
@@ -173,28 +244,3 @@ Object {
173244
"babel-loader": "v8.0.0-beta.0",
174245
}
175246
`;
176-
177-
exports[`scripts 1`] = `
178-
Object {
179-
"name": "mocha-scripts-test",
180-
"scripts": Object {
181-
"coverage": "NODE_ENV=test nyc --reporter=lcov --reporter=text _mocha --require @babel/register test/*.js",
182-
"prepublish": "npm run test",
183-
"test": "mocha --compilers js:@babel/register --require @babel/polyfill test/*Test.js",
184-
"test2": "mocha --compilers js:@babel/register --require @babel/polyfill test/*Test.js",
185-
},
186-
}
187-
`;
188-
189-
exports[`scripts 2`] = `
190-
Object {
191-
"devDependencies": Object {
192-
"@babel/cli": "7.0.0-beta.39",
193-
"@babel/node": "7.0.0-beta.39",
194-
},
195-
"name": "scripts-babel-node",
196-
"scripts": Object {
197-
"test": "babel-node",
198-
},
199-
}
200-
`;

__tests__/packageData.test.js

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,65 @@ const depsFixtureEarlierBeta = require('../fixtures/deps-earlier-beta.json');
77
const scriptsMochaFixture = require('../fixtures/scripts-mocha');
88
const scriptsBabelNodeFixture = require('../fixtures/scripts-babel-node');
99

10-
test('packages', () => {
11-
expect(upgradeDeps(depsFixture, "7.0.0-beta.39")).toMatchSnapshot();
12-
});
10+
const VERSION = "7.0.0-beta.39";
11+
12+
describe('upgradeDeps', () => {
13+
test('upgrades from v6', () => {
14+
expect(upgradeDeps(depsFixture, VERSION)).toMatchSnapshot();
15+
});
16+
17+
test('upgrades from earlier v7 version', () => {
18+
expect(upgradeDeps(depsFixtureEarlierBeta, VERSION)).toMatchSnapshot();
19+
});
20+
21+
test('adds flow preset if user was using v6 preset-react', () => {
22+
expect(upgradeDeps({
23+
"babel-preset-react": "6.0.0"
24+
}, VERSION, { hasFlow: true })).toMatchSnapshot();
25+
});
26+
27+
test('does not add flow preset if user was using v6 preset-react but flow not detected', () => {
28+
expect(upgradeDeps({
29+
"babel-preset-react": "6.0.0"
30+
}, VERSION, { hasFlow: false })).toMatchSnapshot();
31+
});
32+
33+
test('adds flow preset if user is upgrading from previous v7', () => {
34+
expect(upgradeDeps({
35+
"@babel/preset-react": "7.0.0-alpha.0",
36+
}, VERSION, { hasFlow: true })).toMatchSnapshot();
37+
});
38+
39+
test('does not add flow preset if user is upgrading from previous v7 but flow not detected', () => {
40+
expect(upgradeDeps({
41+
"@babel/preset-react": "7.0.0-alpha.0",
42+
}, VERSION, { hasFlow: false })).toMatchSnapshot();
43+
});
44+
45+
test('handles flow preset if user had entry and is upgrading from previous v7', () => {
46+
expect(upgradeDeps({
47+
"@babel/preset-flow": "7.0.0-alpha.0",
48+
"@babel/preset-react": "7.0.0-alpha.0",
49+
}, VERSION, { hasFlow: true })).toMatchSnapshot();
50+
});
1351

14-
test('scripts', () => {
15-
expect(updatePackageJSON(scriptsMochaFixture)).toMatchSnapshot();
16-
expect(updatePackageJSON(scriptsBabelNodeFixture)).toMatchSnapshot();
52+
test('handles flow preset if user had entry and is upgrading from previous v7 and flow not detected', () => {
53+
expect(upgradeDeps({
54+
"@babel/preset-flow": "7.0.0-alpha.0",
55+
"@babel/preset-react": "7.0.0-alpha.0",
56+
}, VERSION, { hasFlow: false })).toMatchSnapshot();
57+
});
1758
});
1859

19-
test('@babel/core peerDep', () => {
20-
expect(updatePackageJSON(babelCoreFixture)).toMatchSnapshot();
60+
test('scripts', async () => {
61+
expect(await updatePackageJSON(scriptsMochaFixture)).toMatchSnapshot();
62+
expect(await updatePackageJSON(scriptsBabelNodeFixture)).toMatchSnapshot();
2163
});
2264

23-
test('jest babel-core bridge', () => {
24-
expect(updatePackageJSON(jestFixture)).toMatchSnapshot();
65+
test('@babel/core peerDep', async () => {
66+
expect(await updatePackageJSON(babelCoreFixture)).toMatchSnapshot();
2567
});
2668

27-
test('packages - earlier v7', () => {
28-
expect(upgradeDeps(depsFixtureEarlierBeta, "7.0.0-beta.39")).toMatchSnapshot();
69+
test('jest babel-core bridge', async () => {
70+
expect(await updatePackageJSON(jestFixture)).toMatchSnapshot();
2971
});

package-lock.json

Lines changed: 9 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const globby = require('globby');
12
const path = require('path');
23
const readPkgUp = require('read-pkg-up');
34
const sortKeys = require('sort-keys');
@@ -34,7 +35,7 @@ function upgradeScripts(scripts) {
3435
return scripts;
3536
}
3637

37-
function updatePackageJSON(pkg) {
38+
async function updatePackageJSON(pkg) {
3839
if (process.env.NODE_ENV !== 'test') {
3940
console.log("Updating closest package.json dependencies");
4041
}
@@ -54,10 +55,17 @@ function updatePackageJSON(pkg) {
5455
}
5556
}
5657

58+
const flowConfigs = await globby(['**/.flowconfig', '!./node_modules/**']);
59+
60+
const upgradeDepOptions = {
61+
hasFlow: flowConfigs.length > 0,
62+
};
63+
5764
if (pkg.devDependencies) {
5865
pkg.devDependencies = upgradeDeps(
5966
pkg.devDependencies,
60-
getLatestVersion()
67+
getLatestVersion(),
68+
upgradeDepOptions,
6169
);
6270

6371
const devDeps = Object.keys(pkg.devDependencies);
@@ -73,7 +81,8 @@ function updatePackageJSON(pkg) {
7381
if (pkg.dependencies) {
7482
pkg.dependencies = sortKeys(upgradeDeps(
7583
pkg.dependencies,
76-
getLatestVersion()
84+
getLatestVersion(),
85+
upgradeDepOptions,
7786
));
7887
}
7988

src/upgradeDeps.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ const otherPackages = {
55
'babel-loader': 'v8.0.0-beta.0',
66
};
77

8-
module.exports = function upgradeDeps(dependencies, version) {
8+
module.exports = function upgradeDeps(dependencies, version, options = {}) {
9+
const { hasFlow } = options;
10+
911
for (let pkg of Object.keys(dependencies)) {
1012
const depVersion = dependencies[pkg];
1113
if (Object.keys(oldPackages).includes(pkg)) {
@@ -50,5 +52,11 @@ module.exports = function upgradeDeps(dependencies, version) {
5052
dependencies['@babel/core'] = version;
5153
}
5254

55+
// Adds preset-flow if needed, especially since it was split out of
56+
// preset-react
57+
if (hasFlow && !dependencies['@babel/preset-flow']) {
58+
dependencies['@babel/preset-flow'] = version;
59+
}
60+
5361
return dependencies;
5462
}

0 commit comments

Comments
 (0)