Skip to content

Commit d155065

Browse files
authored
chore(set-react-version): support overrides (#2298)
1 parent e4cefd5 commit d155065

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

scripts/internal/set-react-version.mjs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import { promises as fs } from "node:fs";
88
import * as os from "node:os";
99
import * as path from "node:path";
10+
import * as util from "node:util";
1011
import {
1112
isMain,
1213
readJSONFile,
@@ -16,8 +17,10 @@ import {
1617
} from "../helpers.js";
1718
import { fetchPackageMetadata, npmRegistryBaseURL } from "../utils/npm.mjs";
1819

20+
/** @typedef {import("../types.js").Manifest} Manifest */
1921
/**
20-
* @typedef {import("../types.js").Manifest} Manifest
22+
* @template T
23+
* @typedef {{ [P in keyof T]: Required<NonNullable<T[P]>> }} RequiredObject<T>
2124
*/
2225

2326
const VALID_TAGS = ["canary-macos", "canary-windows", "nightly"];
@@ -343,13 +346,14 @@ async function getProfile(v, coreOnly) {
343346
* Sets specified React Native version.
344347
* @param {string} version
345348
* @param {boolean} coreOnly
349+
* @param {Record<string, string>} [overrides]
346350
* @return {Promise<void>}
347351
*/
348-
export async function setReactVersion(version, coreOnly) {
352+
export async function setReactVersion(version, coreOnly, overrides = {}) {
349353
/** @type {fs.FileHandle | undefined} */
350354
let fd;
351355
try {
352-
const profile = await getProfile(version, coreOnly);
356+
const profile = { ...(await getProfile(version, coreOnly)), ...overrides };
353357
console.dir(profile, { depth: null });
354358

355359
const manifests = ["package.json", "example/package.json"];
@@ -394,15 +398,35 @@ export async function setReactVersion(version, coreOnly) {
394398
}
395399
}
396400

397-
const { [1]: script, [2]: version } = process.argv;
398401
if (isMain(import.meta.url)) {
402+
const { values, positionals } = util.parseArgs({
403+
args: process.argv.slice(2),
404+
options: {
405+
"core-only": {
406+
type: "boolean",
407+
default: false,
408+
},
409+
overrides: {
410+
type: "string",
411+
default: "{}",
412+
},
413+
},
414+
strict: true,
415+
allowPositionals: true,
416+
tokens: false,
417+
});
418+
419+
const version = positionals[0];
399420
if (!isValidVersion(version)) {
421+
const script = process.argv[1];
400422
console.log(
401423
`Usage: ${path.basename(script)} [<version number> | ${VALID_TAGS.join(" | ")}]`
402424
);
403425
process.exitCode = 1;
404426
} else {
405-
setReactVersion(version, process.argv.includes("--core-only")).then(() => {
427+
const { "core-only": coreOnly, overrides } =
428+
/** @type {RequiredObject<typeof values>} */ (values);
429+
setReactVersion(version, coreOnly, JSON.parse(overrides)).then(() => {
406430
const numVersion = VALID_TAGS.includes(version)
407431
? Number.MAX_SAFE_INTEGER
408432
: toVersionNumber(version);

0 commit comments

Comments
 (0)