@next/codemod 15.0.0-canary.193 → 15.0.0-canary.195
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/upgrade.js +89 -27
- package/lib/handle-package.js +23 -0
- package/package.json +1 -1
package/bin/upgrade.js
CHANGED
|
@@ -123,6 +123,10 @@ async function runUpgrade(revision, options) {
|
|
|
123
123
|
fs_1.default.writeFileSync(appPackageJsonPath, JSON.stringify(appPackageJson, null, 2));
|
|
124
124
|
const dependenciesToInstall = [];
|
|
125
125
|
const devDependenciesToInstall = [];
|
|
126
|
+
const allDependencies = {
|
|
127
|
+
...appPackageJson.dependencies,
|
|
128
|
+
...appPackageJson.devDependencies,
|
|
129
|
+
};
|
|
126
130
|
const versionMapping = {
|
|
127
131
|
next: { version: targetNextVersion, required: true },
|
|
128
132
|
react: { version: targetReactVersion, required: true },
|
|
@@ -132,47 +136,68 @@ async function runUpgrade(revision, options) {
|
|
|
132
136
|
if (targetReactVersion.startsWith('19.0.0-canary') ||
|
|
133
137
|
targetReactVersion.startsWith('19.0.0-beta') ||
|
|
134
138
|
targetReactVersion.startsWith('19.0.0-rc')) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
139
|
+
const [targetReactTypesVersion, targetReactDOMTypesVersion] = await Promise.all([
|
|
140
|
+
loadHighestNPMVersionMatching(`types-react@rc`),
|
|
141
|
+
loadHighestNPMVersionMatching(`types-react-dom@rc`),
|
|
142
|
+
]);
|
|
143
|
+
if (allDependencies['@types/react']) {
|
|
144
|
+
versionMapping['@types/react'] = {
|
|
145
|
+
version: `npm:types-react@${targetReactTypesVersion}`,
|
|
146
|
+
required: false,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (allDependencies['@types/react-dom']) {
|
|
150
|
+
versionMapping['@types/react-dom'] = {
|
|
151
|
+
version: `npm:types-react-dom@${targetReactDOMTypesVersion}`,
|
|
152
|
+
required: false,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
143
155
|
}
|
|
144
156
|
else {
|
|
145
157
|
const [targetReactTypesVersion, targetReactDOMTypesVersion] = await Promise.all([
|
|
146
158
|
loadHighestNPMVersionMatching(`@types/react@${targetNextPackageJson.peerDependencies['react']}`),
|
|
147
159
|
loadHighestNPMVersionMatching(`@types/react-dom@${targetNextPackageJson.peerDependencies['react']}`),
|
|
148
160
|
]);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
161
|
+
if (allDependencies['@types/react']) {
|
|
162
|
+
versionMapping['@types/react'] = {
|
|
163
|
+
version: targetReactTypesVersion,
|
|
164
|
+
required: false,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (allDependencies['@types/react-dom']) {
|
|
168
|
+
versionMapping['@types/react-dom'] = {
|
|
169
|
+
version: targetReactDOMTypesVersion,
|
|
170
|
+
required: false,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Even though we only need those if we alias `@types/react` to types-react,
|
|
175
|
+
// we still do it out of safety due to https://github.com/microsoft/DefinitelyTyped-tools/issues/433.
|
|
176
|
+
const overrides = {};
|
|
177
|
+
if (allDependencies['@types/react']) {
|
|
178
|
+
overrides['@types/react'] = versionMapping['@types/react'].version;
|
|
157
179
|
}
|
|
180
|
+
if (allDependencies['@types/react-dom']) {
|
|
181
|
+
overrides['@types/react-dom'] = versionMapping['@types/react-dom'].version;
|
|
182
|
+
}
|
|
183
|
+
writeOverridesField(appPackageJson, packageManager, overrides);
|
|
158
184
|
for (const [packageName, { version, required }] of Object.entries(versionMapping)) {
|
|
159
185
|
if (appPackageJson.devDependencies?.[packageName]) {
|
|
160
|
-
devDependenciesToInstall.push(
|
|
186
|
+
devDependenciesToInstall.push([packageName, version]);
|
|
161
187
|
}
|
|
162
188
|
else if (required || appPackageJson.dependencies?.[packageName]) {
|
|
163
|
-
dependenciesToInstall.push(
|
|
189
|
+
dependenciesToInstall.push([packageName, version]);
|
|
164
190
|
}
|
|
165
191
|
}
|
|
166
192
|
console.log(`Upgrading your project to ${picocolors_1.default.blue('Next.js ' + targetNextVersion)}...\n`);
|
|
167
|
-
(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
});
|
|
193
|
+
for (const [dep, version] of dependenciesToInstall) {
|
|
194
|
+
(0, handle_package_1.addPackageDependency)(appPackageJson, dep, version, false);
|
|
195
|
+
}
|
|
196
|
+
for (const [dep, version] of devDependenciesToInstall) {
|
|
197
|
+
(0, handle_package_1.addPackageDependency)(appPackageJson, dep, version, true);
|
|
198
|
+
}
|
|
199
|
+
fs_1.default.writeFileSync(appPackageJsonPath, JSON.stringify(appPackageJson, null, 2));
|
|
200
|
+
(0, handle_package_1.runInstallation)(packageManager);
|
|
176
201
|
for (const codemod of codemods) {
|
|
177
202
|
await (0, transform_1.runTransform)(codemod, process.cwd(), { force: true, verbose });
|
|
178
203
|
}
|
|
@@ -325,4 +350,41 @@ async function suggestReactTypesCodemods() {
|
|
|
325
350
|
}, { onCancel: utils_1.onCancel });
|
|
326
351
|
return runReactTypesCodemod;
|
|
327
352
|
}
|
|
353
|
+
function writeOverridesField(packageJson, packageManager, overrides) {
|
|
354
|
+
if (packageManager === 'bun' || packageManager === 'npm') {
|
|
355
|
+
if (!packageJson.overrides) {
|
|
356
|
+
packageJson.overrides = {};
|
|
357
|
+
}
|
|
358
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
359
|
+
packageJson.overrides[key] = value;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
else if (packageManager === 'pnpm') {
|
|
363
|
+
// pnpm supports pnpm.overrides and pnpm.resolutions
|
|
364
|
+
if (packageJson.resolutions) {
|
|
365
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
366
|
+
packageJson.resolutions[key] = value;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
if (!packageJson.pnpm) {
|
|
371
|
+
packageJson.pnpm = {};
|
|
372
|
+
}
|
|
373
|
+
if (!packageJson.pnpm.overrides) {
|
|
374
|
+
packageJson.pnpm.overrides = {};
|
|
375
|
+
}
|
|
376
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
377
|
+
packageJson.pnpm.overrides[key] = value;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else if (packageManager === 'yarn') {
|
|
382
|
+
if (!packageJson.resolutions) {
|
|
383
|
+
packageJson.resolutions = {};
|
|
384
|
+
}
|
|
385
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
386
|
+
packageJson.resolutions[key] = value;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
328
390
|
//# sourceMappingURL=upgrade.js.map
|
package/lib/handle-package.js
CHANGED
|
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getPkgManager = getPkgManager;
|
|
7
7
|
exports.uninstallPackage = uninstallPackage;
|
|
8
8
|
exports.installPackages = installPackages;
|
|
9
|
+
exports.runInstallation = runInstallation;
|
|
10
|
+
exports.addPackageDependency = addPackageDependency;
|
|
9
11
|
const find_up_1 = __importDefault(require("find-up"));
|
|
10
12
|
const execa_1 = __importDefault(require("execa"));
|
|
11
13
|
const node_path_1 = require("node:path");
|
|
@@ -84,4 +86,25 @@ function installPackages(packageToInstall, options = {}) {
|
|
|
84
86
|
throw new Error(`Failed to install "${packageToInstall}". Please install it manually.`, { cause: error });
|
|
85
87
|
}
|
|
86
88
|
}
|
|
89
|
+
function runInstallation(packageManager) {
|
|
90
|
+
try {
|
|
91
|
+
execa_1.default.sync(packageManager, ['install'], {
|
|
92
|
+
stdio: 'inherit',
|
|
93
|
+
shell: true,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
throw new Error('Failed to install dependencies', { cause: error });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function addPackageDependency(packageJson, name, version, dev) {
|
|
101
|
+
if (dev) {
|
|
102
|
+
packageJson.devDependencies = packageJson.devDependencies || {};
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
packageJson.dependencies = packageJson.dependencies || {};
|
|
106
|
+
}
|
|
107
|
+
const deps = dev ? packageJson.devDependencies : packageJson.dependencies;
|
|
108
|
+
deps[name] = version;
|
|
109
|
+
}
|
|
87
110
|
//# sourceMappingURL=handle-package.js.map
|