Skip to content

Commit 49a5777

Browse files
committed
fix: align @types/react version between example and root project
fixes #782
1 parent 72a579c commit 49a5777

File tree

4 files changed

+45
-50
lines changed

4 files changed

+45
-50
lines changed

packages/create-react-native-library/src/exampleApp/dependencies.ts

+21-24
Original file line numberDiff line numberDiff line change
@@ -11,40 +11,37 @@ export async function getDependencyVersionsFromExampleApp(
1111
path.join(folder, 'example', 'package.json')
1212
);
1313

14-
const react: string = examplePackageJson.dependencies?.react;
15-
assert(
16-
react !== undefined,
17-
"The generated example app doesn't have React installed."
18-
);
19-
const reactNative: string = examplePackageJson.dependencies?.['react-native'];
20-
assert(
21-
reactNative !== undefined,
22-
"The generated example app doesn't have React Native installed."
23-
);
24-
25-
const devDependencies: Record<string, string> = {
26-
react,
27-
'react-native': reactNative,
28-
};
14+
const PACKAGES_TO_COPY = ['react', 'react-native', '@types/react'];
2915

3016
if (
3117
config.example === 'vanilla' &&
3218
(config.project.moduleConfig === 'turbo-modules' ||
3319
config.project.viewConfig === 'fabric-view')
3420
) {
3521
// React Native doesn't provide the community CLI as a dependency.
36-
// We have to get read the version from the example app and put to the root package json
37-
const exampleCommunityCLIVersion =
38-
examplePackageJson.devDependencies['@react-native-community/cli'];
39-
assert(
40-
exampleCommunityCLIVersion !== undefined,
41-
"The generated example app doesn't have community CLI installed"
42-
);
43-
44-
devDependencies['@react-native-community/cli'] = exampleCommunityCLIVersion;
22+
// We have to read the version from the example app and put to the root package json
23+
PACKAGES_TO_COPY.push('@react-native-community/cli');
4524
}
4625

26+
const devDependencies: Record<string, string> = {};
27+
28+
PACKAGES_TO_COPY.forEach((name) => {
29+
if (name) {
30+
const version =
31+
examplePackageJson.dependencies?.[name] ??
32+
examplePackageJson.devDependencies?.[name];
33+
34+
assert(
35+
version != null,
36+
`Couldn't find the package "${name}" in the example app.`
37+
);
38+
39+
devDependencies[name] = version;
40+
}
41+
});
42+
4743
return {
44+
dependencies: {},
4845
devDependencies,
4946
};
5047
}

packages/create-react-native-library/src/exampleApp/generateExampleApp.ts

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ const PACKAGES_TO_REMOVE = [
2323
'@react-native/eslint-config',
2424
'@tsconfig/react-native',
2525
'@types/jest',
26-
'@types/react',
2726
'@types/react-test-renderer',
2827
'@typescript-eslint/eslint-plugin',
2928
'@typescript-eslint/parser',

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

+24-22
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
1-
import path from 'path';
21
import fs from 'fs-extra';
32
import kleur from 'kleur';
4-
import yargs from 'yargs';
53
import ora from 'ora';
6-
import { prompt } from './utils/prompt';
7-
import generateExampleApp from './exampleApp/generateExampleApp';
4+
import path from 'path';
5+
import yargs from 'yargs';
86
import { addCodegenBuildScript } from './exampleApp/addCodegenBuildScript';
9-
import { createInitialGitCommit } from './utils/initialCommit';
10-
import { assertUserInput, assertNpxExists } from './utils/assert';
11-
import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';
12-
import { applyTemplates, generateTemplateConfiguration } from './template';
7+
import { getDependencyVersionsFromExampleApp } from './exampleApp/dependencies';
8+
import generateExampleApp from './exampleApp/generateExampleApp';
9+
import { printErrorHelp, printNextSteps, printUsedRNVersion } from './inform';
1310
import {
14-
createQuestions,
11+
acceptedArgs,
1512
createMetadata,
13+
createQuestions,
1614
type Answers,
17-
acceptedArgs,
1815
type Args,
1916
} from './input';
20-
import { getDependencyVersionsFromExampleApp } from './exampleApp/dependencies';
21-
import { printErrorHelp, printNextSteps, printUsedRNVersion } from './inform';
17+
import { applyTemplates, generateTemplateConfiguration } from './template';
18+
import { assertNpxExists, assertUserInput } from './utils/assert';
19+
import { createInitialGitCommit } from './utils/initialCommit';
20+
import { prompt } from './utils/prompt';
21+
import { resolveNpmPackageVersion } from './utils/resolveNpmPackageVersion';
22+
import sortObjectKeys from './utils/sortObjectKeys';
2223

2324
const FALLBACK_BOB_VERSION = '0.38.3';
2425
const FALLBACK_NITRO_MODULES_VERSION = '0.22.1';
@@ -116,17 +117,18 @@ async function create(_argv: yargs.Arguments<Args>) {
116117
const rootPackageJson = await fs.readJson(path.join(folder, 'package.json'));
117118

118119
if (config.example !== 'none') {
119-
const { devDependencies } = await getDependencyVersionsFromExampleApp(
120-
folder,
121-
config
122-
);
120+
const { dependencies, devDependencies } =
121+
await getDependencyVersionsFromExampleApp(folder, config);
123122

124-
rootPackageJson.devDependencies = rootPackageJson.devDependencies
125-
? {
126-
...rootPackageJson.devDependencies,
127-
...devDependencies,
128-
}
129-
: devDependencies;
123+
rootPackageJson.dependencies = sortObjectKeys({
124+
...rootPackageJson.dependencies,
125+
...dependencies,
126+
});
127+
128+
rootPackageJson.devDependencies = sortObjectKeys({
129+
...rootPackageJson.devDependencies,
130+
...devDependencies,
131+
});
130132
}
131133

132134
if (

packages/create-react-native-library/templates/common/$package.json

-3
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,6 @@
108108
<% } -%>
109109
"typescript": "^5.2.2"
110110
},
111-
"resolutions": {
112-
"@types/react": "^18.2.44"
113-
},
114111
"peerDependencies": {
115112
"react": "*",
116113
<% if (project.moduleConfig === 'nitro-modules') { -%>

0 commit comments

Comments
 (0)