Skip to content

Commit d990590

Browse files
committed
refactor: version with fallback
1 parent 369575c commit d990590

File tree

2 files changed

+37
-23
lines changed

2 files changed

+37
-23
lines changed

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

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import { version } from '../package.json';
1717
import { addCodegenBuildScript } from './utils/addCodegenBuildScript';
1818
import { createInitialGitCommit } from './utils/initialCommit';
1919
import { assertNpx } from './utils/assert';
20+
import { resolveBobVersionWithFallback } from './utils/promiseWithFallback';
2021

21-
const FALLBACK_BOB_VERSION = '0.29.0';
22+
const FALLBACK_BOB_VERSION = '0.32.0';
2223

2324
const BINARIES = [
2425
/(gradlew|\.(jar|keystore|png|jpg|gif))$/,
@@ -276,12 +277,7 @@ async function create(_argv: yargs.Arguments<any>) {
276277
const { _, $0, ...argv } = _argv;
277278

278279
// Prefetch bob version in background while asking questions
279-
const bobVersionPromise = spawn('npm', [
280-
'view',
281-
'react-native-builder-bob',
282-
'dist-tags.latest',
283-
]);
284-
280+
const resolveBobVersion = resolveBobVersionWithFallback(FALLBACK_BOB_VERSION);
285281
let local = false;
286282

287283
if (typeof argv.local === 'boolean') {
@@ -531,21 +527,6 @@ async function create(_argv: yargs.Arguments<any>) {
531527
reactNativeVersion,
532528
} = answers;
533529

534-
// Get latest version of Bob from NPM
535-
let bobVersion: string;
536-
537-
try {
538-
bobVersion = await Promise.race([
539-
new Promise<string>((resolve) => {
540-
setTimeout(() => resolve(FALLBACK_BOB_VERSION), 1000);
541-
}),
542-
bobVersionPromise,
543-
]);
544-
} catch (e) {
545-
// Fallback to a known version if we couldn't fetch
546-
bobVersion = FALLBACK_BOB_VERSION;
547-
}
548-
549530
const moduleType = type.startsWith('view-') ? 'view' : 'module';
550531
const arch =
551532
type === 'module-new' || type === 'view-new'
@@ -570,9 +551,10 @@ async function create(_argv: yargs.Arguments<any>) {
570551
.replace(/[^a-z0-9]/g, '')
571552
.toLowerCase()}`;
572553

554+
const bobVersion = await resolveBobVersion();
573555
const options = {
574556
bob: {
575-
version: bobVersion || FALLBACK_BOB_VERSION,
557+
version: bobVersion,
576558
},
577559
project: {
578560
slug,
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { spawn } from './spawn';
2+
3+
export function promiseWithFallback<T>(
4+
promise: Promise<T>,
5+
fallback: T,
6+
timeout: number
7+
): () => Promise<T> {
8+
async function forceResolve() {
9+
let result: T;
10+
11+
try {
12+
result = await Promise.race([
13+
new Promise<T>((resolve) => {
14+
setTimeout(() => resolve(fallback), timeout);
15+
}),
16+
promise,
17+
]);
18+
} catch (e) {
19+
result = fallback;
20+
}
21+
return result;
22+
}
23+
24+
return forceResolve;
25+
}
26+
27+
export const resolveBobVersionWithFallback = (fallback: string) =>
28+
promiseWithFallback(
29+
spawn('npm', ['view', 'react-native-builder-bob', 'dist-tags.latest']),
30+
fallback,
31+
1000
32+
);

0 commit comments

Comments
 (0)