Skip to content

Commit a403f14

Browse files
committed
fix: don't crash if resolving version fails
when creating a new library, it fails if resolving the version failed for some reason. this is because the promise is created earlier, but the code with try catch is run way later. this moves the promise into try/catch so it's properly handled.
1 parent 9c5638a commit a403f14

File tree

3 files changed

+30
-35
lines changed

3 files changed

+30
-35
lines changed

packages/create-react-native-library/src/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import generateExampleApp from './exampleApp/generateExampleApp';
88
import { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';
99
import { createInitialGitCommit } from './utils/initialCommit';
1010
import { assertUserInput, assertNpxExists } from './utils/assert';
11-
import { resolveBobVersionWithFallback } from './utils/promiseWithFallback';
11+
import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';
1212
import { applyTemplates, generateTemplateConfiguration } from './template';
1313
import {
1414
createQuestions,
@@ -44,7 +44,10 @@ async function create(_argv: yargs.Arguments<Args>) {
4444
const { _, $0, ...argv } = _argv;
4545

4646
// Prefetch bob version in background while asking questions
47-
const resolveBobVersion = resolveBobVersionWithFallback(FALLBACK_BOB_VERSION);
47+
const bobVersionPromise = resolveNpmPackageVersion(
48+
'react-native-builder-bob',
49+
FALLBACK_BOB_VERSION
50+
);
4851

4952
const local = await promptLocalLibrary(argv);
5053
const folder = await promptPath(argv, local);
@@ -72,7 +75,7 @@ async function create(_argv: yargs.Arguments<Args>) {
7275

7376
assertUserInput(questions, answers);
7477

75-
const bobVersion = await resolveBobVersion();
78+
const bobVersion = await bobVersionPromise;
7679

7780
const config = generateTemplateConfiguration({
7881
bobVersion,

packages/create-react-native-library/src/utils/promiseWithFallback.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { spawn } from './spawn';
2+
3+
export async function resolveNpmPackageVersion(
4+
name: string,
5+
fallback: string,
6+
timeout: number = 1000
7+
): Promise<string> {
8+
let result: string;
9+
10+
try {
11+
const promise = spawn('npm', ['view', name, 'dist-tags.latest']);
12+
13+
result = await Promise.race([
14+
new Promise<string>((resolve) => {
15+
setTimeout(() => resolve(fallback), timeout);
16+
}),
17+
promise,
18+
]);
19+
} catch (e) {
20+
result = fallback;
21+
}
22+
23+
return result;
24+
}

0 commit comments

Comments
 (0)