Files
Sam Zhou cf664c65e2 Standardize subtyping error code into incompatible-type in react native and metro (#53312)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/53312

Changelog: [Internal]

Reviewed By: jbrown215

Differential Revision: D80400976

fbshipit-source-id: 196af69c0b9621b2a2675b232406639773e04933
2025-08-18 09:04:31 -07:00

113 lines
2.7 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
*/
'use strict';
/*::
import type {PackageJson} from '../shared/monorepoUtils';
*/
const {
getPackages,
getWorkspaceRoot,
updatePackageJson,
} = require('../shared/monorepoUtils');
const {updateReactNativeArtifacts} = require('./set-rn-artifacts-version');
const {parseArgs} = require('util');
const config = {
allowPositionals: true,
options: {
skipReactNativeVersion: {
type: 'boolean',
},
help: {type: 'boolean'},
},
};
async function main() {
const {
positionals: [version],
values: {help, skipReactNativeVersion},
/* $FlowFixMe[incompatible-type] Natural Inference rollout. See
* https://fburl.com/workplace/6291gfvu */
} = parseArgs(config);
if (help) {
console.log(`
Usage: node ./scripts/releases/set-version.js <version> [OPTIONS]
Bump the version of all packages.
- Updates package.json metadata for all workspaces and the project root.
- Updates relevant native files in the react-native package.
If --skipReactNativeVersion is passed, the react-native package version will
be left unmodified as "1000.0.0" (special static version on main), and native
files will not be touched.
Options:
--skipReactNativeVersion Don't update the version of the react-native
package (default: false).
`);
return;
}
if (version == null) {
throw new Error('Missing version argument');
}
await setVersion(version, skipReactNativeVersion);
}
async function setVersion(
version /*: string */,
skipReactNativeVersion /*: boolean */ = false,
) /*: Promise<void> */ {
const packages = await getPackages({
includePrivate: true,
includeReactNative: true,
});
const newPackageVersions = Object.fromEntries(
Object.entries(packages).map(([packageName, {packageJson}]) => {
let packageVersion = version;
if (packageName === 'react-native' && skipReactNativeVersion) {
packageVersion = '1000.0.0';
} else if (packageJson.private === true) {
packageVersion = packageJson.version ?? '0.0.0';
}
return [packageName, packageVersion];
}),
);
const packagesToUpdate = [
await getWorkspaceRoot(),
...Object.values(packages),
];
// Update all workspace packages
await Promise.all(
packagesToUpdate.map(pkg => updatePackageJson(pkg, newPackageVersions)),
);
// Update generated files in packages/react-native/
if (!skipReactNativeVersion) {
await updateReactNativeArtifacts(version);
}
}
module.exports = {
setVersion,
};
if (require.main === module) {
void main();
}