Skip to content

Commit fcf4cb1

Browse files
committed
fix: simplify bail condition in previous fix and add test
1 parent be74623 commit fcf4cb1

File tree

2 files changed

+77
-5
lines changed

2 files changed

+77
-5
lines changed

src/util/canDefinitelyInvoke.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@ export default function canDefinitelyInvoke<T extends t.Node>(
1111
const nextTarget: NodePath<any> | undefined = target.scope.getBinding(
1212
target.node.name
1313
)?.path
14-
if (
15-
nextTarget === target ||
16-
(nextTarget && nextTarget.node === target.node)
17-
)
18-
break
14+
if (nextTarget === target) break
1915
target = nextTarget
2016
} else if (target.isVariableDeclarator()) {
2117
target = (target as NodePath<t.VariableDeclarator>).get('init')
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
export const input = `
2+
/**
3+
* Methods that runs all checks one by one and returns a result of checks
4+
* as an array of Requirement objects. This method intended to be used by cordova-lib check_reqs method
5+
*
6+
* @return Promise<Requirement[]> Array of requirements. Due to implementation, promise is always fulfilled.
7+
*/
8+
module.exports.check_all = function () {
9+
var requirements = [
10+
new Requirement('java', 'Java JDK'),
11+
new Requirement('androidSdk', 'Android SDK'),
12+
new Requirement('androidTarget', 'Android target'),
13+
new Requirement('gradle', 'Gradle')
14+
];
15+
16+
var checkFns = [
17+
this.check_java,
18+
this.check_android,
19+
this.check_android_target,
20+
this.check_gradle
21+
];
22+
23+
// Then execute requirement checks one-by-one
24+
return checkFns.reduce(function (promise, checkFn, idx) {
25+
// Update each requirement with results
26+
var requirement = requirements[idx];
27+
return promise.then(checkFn).then(function (version) {
28+
requirement.installed = true;
29+
requirement.metadata.version = version;
30+
}, function (err) {
31+
requirement.metadata.reason = err instanceof Error ? err.message : err;
32+
});
33+
}, Promise.resolve()).then(function () {
34+
// When chain is completed, return requirements array to upstream API
35+
return requirements;
36+
});
37+
};
38+
`
39+
40+
export const options = {}
41+
42+
export const expected = `
43+
/**
44+
* Methods that runs all checks one by one and returns a result of checks
45+
* as an array of Requirement objects. This method intended to be used by cordova-lib check_reqs method
46+
*
47+
* @return Promise<Requirement[]> Array of requirements. Due to implementation, promise is always fulfilled.
48+
*/
49+
module.exports.check_all = async function() {
50+
var requirements = [
51+
new Requirement('java', 'Java JDK'),
52+
new Requirement('androidSdk', 'Android SDK'),
53+
new Requirement('androidTarget', 'Android target'),
54+
new Requirement('gradle', 'Gradle'),
55+
]
56+
var checkFns = [
57+
this.check_java,
58+
this.check_android,
59+
this.check_android_target,
60+
this.check_gradle,
61+
]
62+
await checkFns.reduce(async function(promise, checkFn, idx) {
63+
// Update each requirement with results
64+
var requirement = requirements[idx]
65+
try {
66+
const version = await promise.then(checkFn)
67+
requirement.installed = true
68+
requirement.metadata.version = version
69+
} catch (err) {
70+
requirement.metadata.reason = err instanceof Error ? err.message : err
71+
}
72+
}, Promise.resolve())
73+
// Then execute requirement checks one-by-one
74+
return requirements
75+
}
76+
`

0 commit comments

Comments
 (0)