From b500a0258be277c6826c845f8ddd401f40e14dba Mon Sep 17 00:00:00 2001 From: Vladimir Morozov Date: Wed, 10 Dec 2025 18:21:50 -0800 Subject: [PATCH 1/2] Fix NPM dist tags and make some NPM private (#15416) --- .ado/publish.yml | 47 ---- .ado/release.yml | 70 ++++-- .ado/scripts/npmGroupByTag.js | 202 ------------------ .ado/scripts/setVersionEnvVars.js | 14 +- package.json | 16 +- .../react-native-win32-tester/package.json | 4 +- .../react-native-win32/package.json | 4 +- .../automation-channel/package.json | 19 +- .../automation-commands/package.json | 19 +- .../automation/package.json | 19 +- .../@react-native-windows/cli/package.json | 4 +- .../codegen/package.json | 4 +- .../@react-native-windows/tester/package.json | 4 +- packages/@react-native/tester/package.json | 2 +- .../babel-node-config/package.json | 4 +- .../beachball-config/package.json | 6 +- .../beachball-config/src/beachball.config.ts | 102 ++++++++- .../create-github-releases/package.json | 4 +- packages/@rnw-scripts/doxysaurus/package.json | 4 +- .../@rnw-scripts/eslint-config/package.json | 10 +- .../@rnw-scripts/format-files/package.json | 4 +- .../generate-release-notes/package.json | 4 +- .../@rnw-scripts/integrate-rn/package.json | 8 +- .../jest-debug-config/package.json | 4 +- .../@rnw-scripts/jest-e2e-config/package.json | 4 +- .../package.json | 4 +- .../jest-out-of-tree-resolver/package.json | 4 +- .../jest-unittest-config/package.json | 4 +- packages/@rnw-scripts/just-task/package.json | 14 +- .../@rnw-scripts/promote-release/package.json | 4 +- .../@rnw-scripts/take-screenshot/package.json | 4 +- packages/@rnw-scripts/ts-config/package.json | 4 +- packages/debug-test/package.json | 4 +- packages/e2e-test-app-fabric/package.json | 8 +- packages/e2e-test-app/package.json | 8 +- packages/integration-test-app/package.json | 4 +- .../package.json | 21 +- .../react-native-windows-init/package.json | 11 +- vnext/package.json | 4 +- yarn.lock | 76 +++---- 40 files changed, 353 insertions(+), 403 deletions(-) delete mode 100644 .ado/scripts/npmGroupByTag.js diff --git a/.ado/publish.yml b/.ado/publish.yml index 2051db63e63..869a2b72d9a 100644 --- a/.ado/publish.yml +++ b/.ado/publish.yml @@ -211,53 +211,6 @@ extends: - script: dir /s "$(Pipeline.Workspace)\published-packages" displayName: Show created npm packages - # Beachball usually takes care about the NPM package tagging based on the values in package.json files. - # We use the ESRP Release where we must provide the tag explictly (the productstate parameter). - # Fortunately, we just use two tags: latest and some custom tag like "canary", "v0.73-stable", etc. - # The npmGroupByTag.js script groups the created NPM package by these two tags into the specified folders. - - pwsh: | - node .ado/scripts/npmGroupByTag.js "$(Pipeline.Workspace)\published-packages" "$(Pipeline.Workspace)\published-packages\custom-tag" "$(Pipeline.Workspace)\published-packages\latest-tag" - displayName: Group npm packages by tag - - - script: dir /s "$(Pipeline.Workspace)\published-packages" - displayName: Show grouped npm packages by tag - - # Publish NPM packages using ESRP Release task with the custom tag such as "canary", "v0.73-stable", etc. - - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' - displayName: 'ESRP Release to npmjs.com (custom tag)' - condition: and(succeeded(), ${{ not(parameters.skipNpmPublish) }}, eq(variables['NpmCustomFolderHasContent'], 'true')) - inputs: - connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' - usemanagedidentity: false - keyvaultname: 'OGX-JSHost-KV' - authcertname: 'OGX-JSHost-Auth4' - signcertname: 'OGX-JSHost-Sign3' - clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' - domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' - contenttype: npm - folderlocation: '$(NpmCustomFolder)' - productstate: '$(NpmCustomTag)' - owners: 'vmorozov@microsoft.com' - approvers: 'khosany@microsoft.com' - - # Publish NPM packages using ESRP Release task with the "latest" tag. - - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' - displayName: 'ESRP Release to npmjs.com (latest)' - condition: and(succeeded(), ${{ not(parameters.skipNpmPublish) }}, eq(variables['NpmLatestFolderHasContent'], 'true')) - inputs: - connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' - usemanagedidentity: false - keyvaultname: 'OGX-JSHost-KV' - authcertname: 'OGX-JSHost-Auth4' - signcertname: 'OGX-JSHost-Sign3' - clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' - domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' - contenttype: npm - folderlocation: '$(NpmLatestFolder)' - productstate: 'latest' - owners: 'vmorozov@microsoft.com' - approvers: 'khosany@microsoft.com' - # Beachball reverts to local state after publish, but we want the updates it added - script: git pull origin $(SourceBranchWithFolders) displayName: git pull diff --git a/.ado/release.yml b/.ado/release.yml index 1ea74d65666..c3a17ad095e 100644 --- a/.ado/release.yml +++ b/.ado/release.yml @@ -26,12 +26,51 @@ extends: customBuildTags: - ES365AIMigrationTooling-Release stages: - - stage: PushToPrivateAdoStage - displayName: ADO - react-native + - stage: Release + displayName: Publish artifacts jobs: - - job: PushPackages - displayName: Push packages - condition: succeeded() + - job: PushNpm + displayName: npmjs.com - Publish npm packages + variables: + - group: RNW Secrets + timeoutInMinutes: 0 + templateContext: + inputs: + - input: pipelineArtifact + pipeline: 'Publish' + artifactName: 'NpmPackedTarballs' + targetPath: '$(Pipeline.Workspace)/published-packages' + - input: pipelineArtifact + pipeline: 'Publish' + artifactName: 'VersionEnvVars' + targetPath: '$(Pipeline.Workspace)/VersionEnvVars' + steps: + - checkout: none + - task: CmdLine@2 + displayName: Apply version variables + inputs: + script: node $(Pipeline.Workspace)/VersionEnvVars/versionEnvVars.js + - script: dir /s "$(Pipeline.Workspace)\published-packages" + displayName: Show npm packages + - task: 'SFP.release-tasks.custom-build-release-task.EsrpRelease@10' + displayName: 'ESRP Release to npmjs.com' + condition: and(succeeded(), ne(variables['NpmDistTag'], '')) + inputs: + connectedservicename: 'ESRP-CodeSigning-OGX-JSHost-RNW' + usemanagedidentity: false + keyvaultname: 'OGX-JSHost-KV' + authcertname: 'OGX-JSHost-Auth4' + signcertname: 'OGX-JSHost-Sign3' + clientid: '0a35e01f-eadf-420a-a2bf-def002ba898d' + domaintenantid: 'cdc5aeea-15c5-4db6-b079-fcadd2505dc2' + contenttype: npm + folderlocation: '$(Pipeline.Workspace)\published-packages' + productstate: '$(NpmDistTag)' + owners: 'vmorozov@microsoft.com' + approvers: 'khosany@microsoft.com' + + - job: PushPrivateAdo + displayName: ADO - react-native timeoutInMinutes: 0 templateContext: inputs: @@ -52,12 +91,9 @@ extends: inputs: script: nuget.exe push *.nupkg -ApiKey AzureArtifacts -Source https://pkgs.dev.azure.com/ms/_packaging/react-native/nuget/v3/index.json -NonInteractive -Verbosity Detailed -SkipDuplicate -NoSymbols workingDirectory: $(Pipeline.Workspace)/ReactWindows-final-nuget - - stage: PushToPublicAdoStage - displayName: ADO - react-native-public - jobs: - - job: PushPackages - displayName: Push packages - condition: succeeded() + + - job: PushPublicAdo + displayName: ADO - react-native-public timeoutInMinutes: 0 templateContext: inputs: @@ -78,13 +114,11 @@ extends: inputs: script: nuget.exe push *.nupkg -ApiKey AzureArtifacts -Source https://pkgs.dev.azure.com/ms/react-native/_packaging/react-native-public/nuget/v3/index.json -NonInteractive -Verbosity Detailed -SkipDuplicate -NoSymbols workingDirectory: $(Pipeline.Workspace)/ReactWindows-final-nuget - - stage: PushToNuGetStage - displayName: nuget.org - Push nuget packages - variables: - - group: RNW Secrets - jobs: - - job: PushPackages - displayName: Push packages + + - job: PushNuGetOrg + displayName: nuget.org - Push nuget packages + variables: + - group: RNW Secrets timeoutInMinutes: 0 templateContext: inputs: diff --git a/.ado/scripts/npmGroupByTag.js b/.ado/scripts/npmGroupByTag.js deleted file mode 100644 index 23d6320e689..00000000000 --- a/.ado/scripts/npmGroupByTag.js +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env node -// @ts-check - -// Groups packed npm tarballs into tag-specific folders so ESRP can publish with the -// correct productstate value per tag. - -const fs = require('fs'); -const path = require('path'); - -/** - * @typedef {Object} PackageJsonBeachball - * @property {string | undefined} [defaultNpmTag] - */ - -/** - * @typedef {Object} PackageJson - * @property {string | undefined} [name] - * @property {string | undefined} [version] - * @property {boolean | undefined} [private] - * @property {PackageJsonBeachball | undefined} [beachball] - */ - -/** - * @returns {{packRootArg: string, customRootArg: string, latestRootArg: string}} - */ -function ensureArgs() { - const [, , packRootArg, customRootArg, latestRootArg] = process.argv; - if (!packRootArg || !customRootArg || !latestRootArg) { - console.error('Usage: node npmGroupByTag.js '); - process.exit(1); - } - return {packRootArg, customRootArg, latestRootArg}; -} - -/** - * @param {string} filePath - * @returns {unknown} - */ -function readJson(filePath) { - return JSON.parse(fs.readFileSync(filePath, 'utf8')); -} - -/** - * @param {string} pkgName - * @param {string} version - * @returns {string} - */ -function sanitizedTarballName(pkgName, version) { - const prefix = pkgName.startsWith('@') - ? pkgName.slice(1).replace(/\//g, '-').replace(/@/g, '-') - : pkgName.replace(/@/g, '-'); - return `${prefix}-${version}.tgz`; -} - -/** - * @param {string} tarballName - * @returns {string} - */ -function normalizePackedTarballName(tarballName) { - // beachball prefixes packed tarballs with a monotonically increasing number to avoid collisions - // when multiple packages share the same filename. Strip that prefix (single or repeated) for comparison. - return tarballName.replace(/^(?:\d+[._-])+/u, ''); -} - -/** - * @param {string} root - * @returns {string[]} - */ -function findPackageJsons(root) { - /** @type {string[]} */ - const results = []; - /** @type {string[]} */ - const stack = [root]; - - while (stack.length) { - const current = stack.pop(); - if (!current) { - continue; - } - /** @type {fs.Stats | undefined} */ - let stats; - try { - stats = fs.statSync(current); - } catch (e) { - continue; - } - - if (!stats.isDirectory()) { - continue; - } - - const entries = fs.readdirSync(current, {withFileTypes: true}); - for (const entry of entries) { - if (entry.name === 'node_modules' || entry.name === '.git') { - continue; - } - const entryPath = path.join(current, entry.name); - if (entry.isDirectory()) { - stack.push(entryPath); - } else if (entry.isFile() && entry.name === 'package.json') { - results.push(entryPath); - } - } - } - - return results; -} - -/** - * @param {string} name - * @param {string} value - */ -function setPipelineVariable(name, value) { - console.log(`##vso[task.setvariable variable=${name}]${value}`); -} - -(function main() { - const {packRootArg, customRootArg, latestRootArg} = ensureArgs(); - - const repoRoot = process.env.BUILD_SOURCESDIRECTORY || process.cwd(); - const packRoot = path.resolve(packRootArg); - const customRoot = path.resolve(customRootArg); - const latestRoot = path.resolve(latestRootArg); - - fs.mkdirSync(customRoot, {recursive: true}); - fs.mkdirSync(latestRoot, {recursive: true}); - - /** @type {string | null} */ - let customTag = null; - try { - const vnextPackageJson = /** @type {PackageJson} */ ( - readJson(path.join(repoRoot, 'vnext', 'package.json')) - ); - const tagFromVnext = vnextPackageJson?.beachball?.defaultNpmTag; - if (tagFromVnext && tagFromVnext !== 'latest') { - customTag = tagFromVnext; - } - } catch (e) { - console.warn('Unable to read vnext/package.json to determine custom tag.'); - } - - /** @type {string[]} */ - const tarballs = fs.existsSync(packRoot) - ? fs.readdirSync(packRoot).filter(file => file.endsWith('.tgz')) - : []; - - if (!tarballs.length) { - setPipelineVariable('NpmCustomTag', customTag || ''); - setPipelineVariable('NpmCustomFolder', customRoot); - setPipelineVariable('NpmCustomFolderHasContent', 'false'); - setPipelineVariable('NpmLatestFolder', latestRoot); - setPipelineVariable('NpmLatestFolderHasContent', 'false'); - return; - } - - /** @type {Set} */ - const customTarballs = new Set(); - - if (customTag) { - for (const packageJsonPath of findPackageJsons(repoRoot)) { - /** @type {PackageJson | undefined} */ - let pkg; - try { - pkg = /** @type {PackageJson} */ (readJson(packageJsonPath)); - } catch (e) { - continue; - } - - if (!pkg?.name || !pkg?.version) { - continue; - } - - const pkgTag = pkg?.beachball?.defaultNpmTag; - if (pkgTag === customTag && pkg.private !== true) { - customTarballs.add(sanitizedTarballName(pkg.name, pkg.version)); - } - } - } - - let customCount = 0; - let latestCount = 0; - - for (const tarball of tarballs) { - const sourcePath = path.join(packRoot, tarball); - const normalizedName = normalizePackedTarballName(tarball); - const destinationRoot = customTag && customTarballs.has(normalizedName) ? customRoot : latestRoot; - const destinationPath = path.join(destinationRoot, tarball); - fs.mkdirSync(path.dirname(destinationPath), {recursive: true}); - fs.renameSync(sourcePath, destinationPath); - if (destinationRoot === customRoot) { - customCount++; - } else { - latestCount++; - } - } - - setPipelineVariable('NpmCustomTag', customTag || ''); - setPipelineVariable('NpmCustomFolder', customRoot); - setPipelineVariable('NpmCustomFolderHasContent', customCount ? 'true' : 'false'); - setPipelineVariable('NpmLatestFolder', latestRoot); - setPipelineVariable('NpmLatestFolderHasContent', latestCount ? 'true' : 'false'); -})(); diff --git a/.ado/scripts/setVersionEnvVars.js b/.ado/scripts/setVersionEnvVars.js index 0d026245cc9..63358f259a9 100644 --- a/.ado/scripts/setVersionEnvVars.js +++ b/.ado/scripts/setVersionEnvVars.js @@ -37,6 +37,11 @@ const versionEnvVars = { publishCommitId: commitId, reactDevDependency: pkgJson.devDependencies['react'], reactNativeDevDependency: pkgJson.devDependencies['react-native'], + npmDistTag: pkgJson?.beachball?.defaultNpmTag?.trim(), +} + +if (!versionEnvVars.npmDistTag) { + throw new Error('defaultNpmTag is missing in vnext/package.json'); } // Set the build number so the build in the publish pipeline and the release pipeline are named with the convenient version @@ -54,8 +59,14 @@ console.log(`##vso[task.setvariable variable=npmVersion]${versionEnvVars.npmVers console.log(`##vso[task.setvariable variable=publishCommitId]${versionEnvVars.publishCommitId}`); console.log(`##vso[task.setvariable variable=reactDevDependency]${versionEnvVars.reactDevDependency}`); console.log(`##vso[task.setvariable variable=reactNativeDevDependency]${versionEnvVars.reactNativeDevDependency}`); +console.log(`##vso[task.setvariable variable=NpmDistTag]${versionEnvVars.npmDistTag}`); + +const runnerTemp = process.env.RUNNER_TEMP; +if (!runnerTemp) { + throw new Error('RUNNER_TEMP environment variable is not set'); +} -const dirPath = path.resolve(process.env.RUNNER_TEMP, 'versionEnvVars'); +const dirPath = path.resolve(runnerTemp, 'versionEnvVars'); fs.mkdirSync(dirPath, {recursive: true}); fs.writeFileSync(path.resolve(dirPath, 'versionEnvVars.js'), @@ -68,4 +79,5 @@ console.log("##vso[task.setvariable variable=npmVersion]${versionEnvVars.npmVers console.log("##vso[task.setvariable variable=publishCommitId]${versionEnvVars.publishCommitId}"); console.log("##vso[task.setvariable variable=reactDevDependency]${versionEnvVars.reactDevDependency}"); console.log("##vso[task.setvariable variable=reactNativeDevDependency]${versionEnvVars.reactNativeDevDependency}"); +console.log("##vso[task.setvariable variable=NpmDistTag]${versionEnvVars.npmDistTag}"); `); diff --git a/package.json b/package.json index 35deae932aa..841fe252d23 100644 --- a/package.json +++ b/package.json @@ -34,17 +34,17 @@ }, "devDependencies": { "@rnw-scripts/beachball-config": "0.0.0", - "@rnw-scripts/format-files": "*", - "@rnw-scripts/integrate-rn": "*", - "@rnw-scripts/just-task": "*", - "@rnw-scripts/promote-release": "*", + "@rnw-scripts/format-files": "1.1.57", + "@rnw-scripts/integrate-rn": "1.4.61", + "@rnw-scripts/just-task": "2.3.54", + "@rnw-scripts/promote-release": "2.1.61", "@rnw-scripts/stamp-version": "0.0.0", - "@rnw-scripts/take-screenshot": "*", - "beachball": "^2.20.0", + "@rnw-scripts/take-screenshot": "1.1.61", + "beachball": "^2.60.1", "fast-glob": "^3.2.11", "husky": "^4.2.5", "prettier-plugin-hermes-parser": "0.21.1", - "react-native-platform-override": "*", + "react-native-platform-override": "0.80.4", "unbroken": "1.0.27", "lage": "^2.7.1", "lodash": "^4.17.15" @@ -70,4 +70,4 @@ "z-schema": "CVE-2021-3765 in validator. z-schema is used by rush which is a dependency of lage so should not be executed in this repo" }, "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" -} +} \ No newline at end of file diff --git a/packages/@office-iss/react-native-win32-tester/package.json b/packages/@office-iss/react-native-win32-tester/package.json index 7b5b4198531..9b5682ec8c8 100644 --- a/packages/@office-iss/react-native-win32-tester/package.json +++ b/packages/@office-iss/react-native-win32-tester/package.json @@ -31,10 +31,10 @@ "eslint": "^8.19.0", "just-scripts": "^1.3.3", "react-native": "0.80.0", - "react-native-platform-override": "^1.9.56", + "react-native-platform-override": "0.80.4", "typescript": "5.0.4" }, "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@office-iss/react-native-win32/package.json b/packages/@office-iss/react-native-win32/package.json index ddb76e9451c..64243fe713c 100644 --- a/packages/@office-iss/react-native-win32/package.json +++ b/packages/@office-iss/react-native-win32/package.json @@ -89,7 +89,7 @@ "prettier": "2.8.8", "react": "19.1.0", "react-native": "0.80.0", - "react-native-platform-override": "^1.9.56", + "react-native-platform-override": "0.80.4", "typescript": "5.0.4" }, "peerDependencies": { @@ -112,4 +112,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation-channel/package.json b/packages/@react-native-windows/automation-channel/package.json index b0223945da4..27a0281b02c 100644 --- a/packages/@react-native-windows/automation-channel/package.json +++ b/packages/@react-native-windows/automation-channel/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation-channel", - "version": "0.12.318", + "version": "0.80.4", "license": "MIT", "repository": { "type": "git", @@ -41,8 +41,19 @@ "windows", "!packages*.lock.json" ], + "beachball": { + "defaultNpmTag": "latest", + "disallowedChangeTypes": [ + "major", + "minor", + "prerelease", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 18" - }, - "private": true -} + } +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation-commands/package.json b/packages/@react-native-windows/automation-commands/package.json index 77f6c77e11e..5943a64ed1a 100644 --- a/packages/@react-native-windows/automation-commands/package.json +++ b/packages/@react-native-windows/automation-commands/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation-commands", - "version": "0.1.421", + "version": "0.80.4", "description": "Allows controlling your react-native-windows application", "main": "lib-commonjs/index.js", "license": "MIT", @@ -9,7 +9,6 @@ "url": "https://github.com/microsoft/react-native-windows", "directory": "packages/@react-native-windows/automation-commands" }, - "private": true, "scripts": { "build": "rnw-scripts build", "clean": "rnw-scripts clean", @@ -18,7 +17,7 @@ "watch": "rnw-scripts watch" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.318", + "@react-native-windows/automation-channel": "0.80.4", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1" }, @@ -37,7 +36,19 @@ "lib-commonjs", "README.md" ], + "beachball": { + "defaultNpmTag": "latest", + "disallowedChangeTypes": [ + "major", + "minor", + "prerelease", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/automation/package.json b/packages/@react-native-windows/automation/package.json index 339284a1f4f..dffb449b3e2 100644 --- a/packages/@react-native-windows/automation/package.json +++ b/packages/@react-native-windows/automation/package.json @@ -1,6 +1,6 @@ { "name": "@react-native-windows/automation", - "version": "0.3.400", + "version": "0.80.4", "description": "UI Automation Suite for React Native Windows Applications", "main": "lib-commonjs/index.js", "repository": { @@ -9,7 +9,6 @@ "directory": "packages/@react-native-windows/automation" }, "license": "MIT", - "private": true, "scripts": { "build": "rnw-scripts build", "clean": "rnw-scripts clean", @@ -18,7 +17,7 @@ "watch": "rnw-scripts watch" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.318", + "@react-native-windows/automation-channel": "0.80.4", "@react-native-windows/fs": "0.80.0", "@typescript-eslint/eslint-plugin": "^7.1.1", "@typescript-eslint/parser": "^7.1.1", @@ -48,7 +47,19 @@ "lib-commonjs", "README.md" ], + "beachball": { + "defaultNpmTag": "latest", + "disallowedChangeTypes": [ + "major", + "minor", + "prerelease", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/cli/package.json b/packages/@react-native-windows/cli/package.json index 7e9135df2c5..31138239f58 100644 --- a/packages/@react-native-windows/cli/package.json +++ b/packages/@react-native-windows/cli/package.json @@ -66,7 +66,7 @@ "typescript": "5.0.4" }, "peerDependencies": { - "react-native": "*" + "react-native": "^0.80.0-0" }, "files": [ "lib-commonjs", @@ -88,4 +88,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/codegen/package.json b/packages/@react-native-windows/codegen/package.json index aba471f9d98..0748abd4830 100644 --- a/packages/@react-native-windows/codegen/package.json +++ b/packages/@react-native-windows/codegen/package.json @@ -47,7 +47,7 @@ "typescript": "5.0.4" }, "peerDependencies": { - "react-native": "*" + "react-native": "^0.80.0-0" }, "files": [ "bin.js", @@ -71,4 +71,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native-windows/tester/package.json b/packages/@react-native-windows/tester/package.json index 40b6dbd712f..4c03c4416c9 100644 --- a/packages/@react-native-windows/tester/package.json +++ b/packages/@react-native-windows/tester/package.json @@ -34,11 +34,11 @@ "eslint": "^8.19.0", "just-scripts": "^1.3.3", "react-native": "0.80.0", - "react-native-platform-override": "^1.9.56", + "react-native-platform-override": "0.80.4", "react-native-windows": "0.80.4", "typescript": "5.0.4" }, "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/@react-native/tester/package.json b/packages/@react-native/tester/package.json index 293014692b3..8473698e1f8 100644 --- a/packages/@react-native/tester/package.json +++ b/packages/@react-native/tester/package.json @@ -34,7 +34,7 @@ }, "peerDependencies": { "react": "19.1.0", - "react-native": "*" + "react-native": "^0.80.0-0" }, "codegenConfig": { "name": "AppSpecs", diff --git a/packages/@rnw-scripts/babel-node-config/package.json b/packages/@rnw-scripts/babel-node-config/package.json index ddca85cc44e..a31d0121d6f 100644 --- a/packages/@rnw-scripts/babel-node-config/package.json +++ b/packages/@rnw-scripts/babel-node-config/package.json @@ -2,6 +2,7 @@ "name": "@rnw-scripts/babel-node-config", "version": "2.3.2", "license": "MIT", + "private": true, "main": "babel.config.js", "repository": { "type": "git", @@ -27,6 +28,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/beachball-config/package.json b/packages/@rnw-scripts/beachball-config/package.json index 724065779ea..57594daf75a 100644 --- a/packages/@rnw-scripts/beachball-config/package.json +++ b/packages/@rnw-scripts/beachball-config/package.json @@ -19,7 +19,8 @@ "dependencies": { "@react-native-windows/package-utils": "0.80.0", "@rnw-scripts/stamp-version": "0.0.0", - "find-up": "^4.1.0" + "find-up": "^4.1.0", + "parse-path": "^7.1.0" }, "devDependencies": { "@rnw-scripts/eslint-config": "1.2.36", @@ -27,8 +28,9 @@ "@rnw-scripts/just-task": "2.3.54", "@rnw-scripts/ts-config": "2.0.5", "@types/node": "^18.0.0", + "@types/parse-path": "^7.1.0", "@types/shell-quote": "^1.7.5", - "beachball": "^2.20.0", + "beachball": "^2.60.1", "eslint": "^8.19.0", "prettier": "2.8.8", "shell-quote": "^1.8.1", diff --git a/packages/@rnw-scripts/beachball-config/src/beachball.config.ts b/packages/@rnw-scripts/beachball-config/src/beachball.config.ts index 4938904da59..2d8a92dbf27 100644 --- a/packages/@rnw-scripts/beachball-config/src/beachball.config.ts +++ b/packages/@rnw-scripts/beachball-config/src/beachball.config.ts @@ -5,6 +5,9 @@ * @format */ +import fs from 'fs'; +import path from 'path'; +import findUp from 'find-up'; import {execSync} from 'child_process'; import {quote} from 'shell-quote'; import {findRepoPackageSync} from '@react-native-windows/package-utils'; @@ -12,6 +15,9 @@ import {findRepoPackageSync} from '@react-native-windows/package-utils'; import type {RepoOptions} from 'beachball/lib/types/BeachballOptions'; import type {ChangeInfo} from 'beachball/lib/types/ChangeInfo'; +const rootPackageName = 'react-native-windows-repo'; +const platformOverridePackage = 'react-native-platform-override'; + const Options: RepoOptions = { ...require('@rnw-scripts/generated-beachball-config'), @@ -26,11 +32,19 @@ const Options: RepoOptions = { hooks: { // Stamp versions when we publish a new package - postbump: (_packagePath, name, version) => { + postbump: (packagePath, name, version) => { if (name === 'react-native-windows') { console.log(`Stamping RNW Version ${version}`); execSync(`yarn stamp-version ` + quote([`${version}`])); } + + if (name === platformOverridePackage) { + syncRootDependencyVersion( + packagePath, + platformOverridePackage, + version, + ); + } }, }, @@ -109,4 +123,90 @@ function correctComment( return comment; } +type RootPackageJson = { + name?: string; + dependencies?: Record; + devDependencies?: Record; + optionalDependencies?: Record; + peerDependencies?: Record; +}; + +type DependencySection = Exclude; + +const dependencySections: DependencySection[] = [ + 'dependencies', + 'devDependencies', + 'optionalDependencies', + 'peerDependencies', +]; + +function syncRootDependencyVersion( + packagePath: string, + dependencyName: string, + version: string, +) { + const rootPackage = loadRootPackage(packagePath); + + if (!rootPackage) { + console.warn( + `Unable to locate ${rootPackageName} while syncing ${dependencyName}`, + ); + return; + } + + let updated = false; + for (const section of dependencySections) { + const deps = rootPackage.json[section]; + if (deps && deps[dependencyName] !== undefined) { + if (deps[dependencyName] !== version) { + deps[dependencyName] = version; + updated = true; + } + } + } + + if (updated) { + fs.writeFileSync( + rootPackage.path, + JSON.stringify(rootPackage.json, null, 2) + '\n', + 'utf8', + ); + console.log( + `Updated root ${dependencyName} reference to ${version} in ${rootPackage.path}`, + ); + } +} + +function loadRootPackage( + startPath: string, +): {path: string; json: RootPackageJson} | null { + let rootPackage: {path: string; json: RootPackageJson} | null = null; + + findUp.sync( + directory => { + const candidate = path.join(directory, 'package.json'); + if (!fs.existsSync(candidate)) { + return undefined; + } + + try { + const packageJson = JSON.parse( + fs.readFileSync(candidate, 'utf8'), + ) as RootPackageJson; + if (packageJson.name === rootPackageName) { + rootPackage = {path: candidate, json: packageJson}; + return candidate; + } + } catch { + // Ignore JSON parse errors and continue walking up the tree. + } + + return undefined; + }, + {cwd: startPath}, + ); + + return rootPackage; +} + module.exports = Options; diff --git a/packages/@rnw-scripts/create-github-releases/package.json b/packages/@rnw-scripts/create-github-releases/package.json index f1d9e2014fd..0751bbb29b6 100644 --- a/packages/@rnw-scripts/create-github-releases/package.json +++ b/packages/@rnw-scripts/create-github-releases/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/create-github-releases", "version": "1.4.62", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -51,6 +52,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/doxysaurus/package.json b/packages/@rnw-scripts/doxysaurus/package.json index 2b7ac9e5a23..9119e63c796 100644 --- a/packages/@rnw-scripts/doxysaurus/package.json +++ b/packages/@rnw-scripts/doxysaurus/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/doxysaurus", "version": "0.4.55", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -57,6 +58,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/eslint-config/package.json b/packages/@rnw-scripts/eslint-config/package.json index 8a058658a57..967a40a39ba 100644 --- a/packages/@rnw-scripts/eslint-config/package.json +++ b/packages/@rnw-scripts/eslint-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/eslint-config", "version": "1.2.36", + "private": true, "license": "MIT", "main": "eslintrc.js", "repository": { @@ -22,11 +23,10 @@ "prettier": "2.8.8" }, "peerDependencies": { - "eslint": "*", - "prettier": "*" + "eslint": "^8.19.0", + "prettier": "^2.8.8" }, "engines": { "node": ">= 18" - }, - "private": true -} + } +} \ No newline at end of file diff --git a/packages/@rnw-scripts/format-files/package.json b/packages/@rnw-scripts/format-files/package.json index eb8a158f576..a85a6be10f8 100644 --- a/packages/@rnw-scripts/format-files/package.json +++ b/packages/@rnw-scripts/format-files/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/format-files", "version": "1.1.57", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -40,6 +41,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/generate-release-notes/package.json b/packages/@rnw-scripts/generate-release-notes/package.json index 2d823e09b90..c5094295f70 100644 --- a/packages/@rnw-scripts/generate-release-notes/package.json +++ b/packages/@rnw-scripts/generate-release-notes/package.json @@ -2,6 +2,7 @@ "name": "@rnw-scripts/generate-release-notes", "version": "1.0.1", "description": "Generates release notes for React Native Windows", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -18,6 +19,5 @@ "engines": { "node": ">= 18" }, - "type": "module", - "private": true + "type": "module" } diff --git a/packages/@rnw-scripts/integrate-rn/package.json b/packages/@rnw-scripts/integrate-rn/package.json index 83969e67263..f947f37d97e 100644 --- a/packages/@rnw-scripts/integrate-rn/package.json +++ b/packages/@rnw-scripts/integrate-rn/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/integrate-rn", "version": "1.4.61", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -28,7 +29,7 @@ "async": "^3.2.3", "lodash": "^4.17.15", "ora": "^3.4.0", - "react-native-platform-override": "^1.9.56", + "react-native-platform-override": "0.80.4", "semver": "^7.6.3", "source-map-support": "^0.5.19", "yargs": "^16.2.0" @@ -60,6 +61,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true -} + } +} \ No newline at end of file diff --git a/packages/@rnw-scripts/jest-debug-config/package.json b/packages/@rnw-scripts/jest-debug-config/package.json index 6fd9e233549..428aa84951e 100644 --- a/packages/@rnw-scripts/jest-debug-config/package.json +++ b/packages/@rnw-scripts/jest-debug-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-debug-config", "version": "1.5.11", + "private": true, "license": "MIT", "main": "jest.debug.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-e2e-config/package.json b/packages/@rnw-scripts/jest-e2e-config/package.json index c49ec50b717..396cf08516e 100644 --- a/packages/@rnw-scripts/jest-e2e-config/package.json +++ b/packages/@rnw-scripts/jest-e2e-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-e2e-config", "version": "1.4.11", + "private": true, "license": "MIT", "main": "jest.e2e.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json b/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json index 7adc8797ddc..f6a43c05625 100644 --- a/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json +++ b/packages/@rnw-scripts/jest-out-of-snapshot-resolver/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-out-of-tree-snapshot-resolver", "version": "1.1.40", + "private": true, "license": "MIT", "main": "jest-snapshot-resolver.js", "repository": { @@ -15,6 +16,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json b/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json index 32b16994970..31f1aeb2162 100644 --- a/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json +++ b/packages/@rnw-scripts/jest-out-of-tree-resolver/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-out-of-tree-resolver", "version": "1.1.39", + "private": true, "license": "MIT", "main": "jest-resolver.js", "repository": { @@ -18,6 +19,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/jest-unittest-config/package.json b/packages/@rnw-scripts/jest-unittest-config/package.json index a1bfc869ded..a7cb91ff63e 100644 --- a/packages/@rnw-scripts/jest-unittest-config/package.json +++ b/packages/@rnw-scripts/jest-unittest-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/jest-unittest-config", "version": "1.5.11", + "private": true, "license": "MIT", "main": "jest.unittest.config.js", "repository": { @@ -26,6 +27,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/just-task/package.json b/packages/@rnw-scripts/just-task/package.json index 89b419eeaa7..83925a6297f 100644 --- a/packages/@rnw-scripts/just-task/package.json +++ b/packages/@rnw-scripts/just-task/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/just-task", "version": "2.3.54", + "private": true, "license": "MIT", "main": "just-task.js", "repository": { @@ -31,10 +32,10 @@ "@typescript-eslint/parser": "^7.1.1" }, "peerDependencies": { - "eslint": "*", - "jest": "*", - "prettier": "*", - "typescript": "*" + "eslint": "^8.19.0", + "jest": "^29.7.0", + "prettier": "^2.8.8", + "typescript": "^5.0.4" }, "peerDependenciesMeta": { "jest": { @@ -43,6 +44,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true -} + } +} \ No newline at end of file diff --git a/packages/@rnw-scripts/promote-release/package.json b/packages/@rnw-scripts/promote-release/package.json index d40447ad0e2..db416e074be 100644 --- a/packages/@rnw-scripts/promote-release/package.json +++ b/packages/@rnw-scripts/promote-release/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/promote-release", "version": "2.1.61", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -45,6 +46,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/take-screenshot/package.json b/packages/@rnw-scripts/take-screenshot/package.json index bcb7364c37c..a1b998f99e5 100644 --- a/packages/@rnw-scripts/take-screenshot/package.json +++ b/packages/@rnw-scripts/take-screenshot/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/take-screenshot", "version": "1.1.61", + "private": true, "license": "MIT", "repository": { "type": "git", @@ -49,6 +50,5 @@ ], "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/@rnw-scripts/ts-config/package.json b/packages/@rnw-scripts/ts-config/package.json index dca8150fba5..c08a3d3d8f4 100644 --- a/packages/@rnw-scripts/ts-config/package.json +++ b/packages/@rnw-scripts/ts-config/package.json @@ -1,6 +1,7 @@ { "name": "@rnw-scripts/ts-config", "version": "2.0.5", + "private": true, "license": "MIT", "main": "tsconfig.json", "repository": { @@ -10,6 +11,5 @@ }, "engines": { "node": ">= 18" - }, - "private": true + } } diff --git a/packages/debug-test/package.json b/packages/debug-test/package.json index 30c81154c94..f97fe99e7cd 100644 --- a/packages/debug-test/package.json +++ b/packages/debug-test/package.json @@ -8,7 +8,7 @@ "lint:fix": "rnw-scripts lint:fix" }, "devDependencies": { - "@react-native-windows/automation": "^0.3.400", + "@react-native-windows/automation": "0.80.4", "@react-native-windows/fs": "0.80.0", "@rnw-scripts/eslint-config": "1.2.36", "@rnw-scripts/ts-config": "2.0.5", @@ -19,4 +19,4 @@ "ts-jest": "^29.0.3", "ws": "^6.2.2" } -} +} \ No newline at end of file diff --git a/packages/e2e-test-app-fabric/package.json b/packages/e2e-test-app-fabric/package.json index 7812d7c9e83..424f8ebd086 100644 --- a/packages/e2e-test-app-fabric/package.json +++ b/packages/e2e-test-app-fabric/package.json @@ -14,7 +14,7 @@ "bundle:debug": "npx @react-native-community/cli bundle --entry-file index.js --bundle-output ./windows/x64/Debug/RNTesterApp-Fabric/Bundle/index.windows.bundle --assets-dest ./windows/x64/Debug/RNTesterApp-Fabric/Bundle --platform windows" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.318", + "@react-native-windows/automation-channel": "0.80.4", "@react-native-windows/tester": "0.0.1", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", @@ -30,8 +30,8 @@ "@babel/preset-typescript": "^7.8.3", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "17.0.0", - "@react-native-windows/automation": "^0.3.400", - "@react-native-windows/automation-commands": "^0.1.421", + "@react-native-windows/automation": "0.80.4", + "@react-native-windows/automation-commands": "0.80.4", "@react-native/metro-config": "0.80.0", "@rnw-scripts/babel-node-config": "2.3.2", "@rnw-scripts/babel-react-native-config": "0.0.0", @@ -55,4 +55,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/e2e-test-app/package.json b/packages/e2e-test-app/package.json index 94b09e5e835..a498c3b3e2b 100644 --- a/packages/e2e-test-app/package.json +++ b/packages/e2e-test-app/package.json @@ -14,7 +14,7 @@ }, "dependencies": { "@react-native-picker/picker": "^2.5.1", - "@react-native-windows/automation-channel": "^0.12.318", + "@react-native-windows/automation-channel": "0.80.4", "@react-native-windows/tester": "0.0.1", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", @@ -31,8 +31,8 @@ "@babel/preset-typescript": "^7.8.3", "@babel/runtime": "^7.20.0", "@react-native-community/cli": "17.0.0", - "@react-native-windows/automation": "^0.3.400", - "@react-native-windows/automation-commands": "^0.1.421", + "@react-native-windows/automation": "0.80.4", + "@react-native-windows/automation-commands": "0.80.4", "@react-native/metro-config": "0.80.0", "@rnw-scripts/babel-node-config": "2.3.2", "@rnw-scripts/babel-react-native-config": "0.0.0", @@ -55,4 +55,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/integration-test-app/package.json b/packages/integration-test-app/package.json index 2c79539d40e..4b29b93a773 100644 --- a/packages/integration-test-app/package.json +++ b/packages/integration-test-app/package.json @@ -10,7 +10,7 @@ "integration-test": "jest --config jest.integration.config.js --runInBand --verbose" }, "dependencies": { - "@react-native-windows/automation-channel": "^0.12.318", + "@react-native-windows/automation-channel": "0.80.4", "@react-native-windows/fs": "0.80.0", "@types/react": "^19.1.0", "@typescript-eslint/eslint-plugin": "^7.1.1", @@ -51,4 +51,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/packages/react-native-platform-override/package.json b/packages/react-native-platform-override/package.json index bef5107f4ba..40bc9e8a3e5 100644 --- a/packages/react-native-platform-override/package.json +++ b/packages/react-native-platform-override/package.json @@ -1,6 +1,6 @@ { "name": "react-native-platform-override", - "version": "1.9.56", + "version": "0.80.4", "description": "react-native-platform-override offers CLI tools to manage Javascript overrides in out-of-tree React Native platforms", "license": "MIT", "main": "./lib-commonjs/Api.js", @@ -70,8 +70,20 @@ "typescript": "5.0.4" }, "peerDependencies": { - "react-native": "*" + "react-native": "^0.80.0-0" }, + "beachball": { + "defaultNpmTag": "latest", + "disallowedChangeTypes": [ + "major", + "minor", + "prerelease", + "premajor", + "preminor", + "prepatch" + ] + }, + "promoteRelease": true, "engines": { "node": ">= 18" }, @@ -80,6 +92,5 @@ "lib-commonjs", "!lib-commonjs/e2etest/**", "!lib-commonjs/test/**" - ], - "private": true -} + ] +} \ No newline at end of file diff --git a/packages/react-native-windows-init/package.json b/packages/react-native-windows-init/package.json index c1a5be97727..4e7e66e91e7 100644 --- a/packages/react-native-windows-init/package.json +++ b/packages/react-native-windows-init/package.json @@ -1,6 +1,6 @@ { "name": "react-native-windows-init", - "version": "1.4.74", + "version": "0.80.4", "description": "CLI to add react-native-windows to an existing react-native project", "main": "index.js", "repository": { @@ -9,7 +9,6 @@ "directory": "packages/react-native-windows-init" }, "license": "MIT", - "private": true, "scripts": { "build": "rnw-scripts build", "clean": "rnw-scripts clean", @@ -62,11 +61,15 @@ "README.md" ], "beachball": { + "defaultNpmTag": "latest", "disallowedChangeTypes": [ + "major", + "minor", "prerelease", "premajor", "preminor", "prepatch" ] - } -} + }, + "promoteRelease": true +} \ No newline at end of file diff --git a/vnext/package.json b/vnext/package.json index bd22d3170c7..bbc8951fbb9 100644 --- a/vnext/package.json +++ b/vnext/package.json @@ -85,7 +85,7 @@ "prettier": "2.8.8", "react": "19.1.0", "react-native": "0.80.0", - "react-native-platform-override": "^1.9.56", + "react-native-platform-override": "0.80.4", "react-refresh": "^0.14.0", "typescript": "5.0.4" }, @@ -151,4 +151,4 @@ "engines": { "node": ">= 18" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index aafa641b563..190d25a9006 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2761,6 +2761,13 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== +"@types/parse-path@^7.0.0", "@types/parse-path@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/parse-path/-/parse-path-7.1.0.tgz#1bdddfe4fb2038e76c7e622234a97d6a050a1be3" + integrity sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q== + dependencies: + parse-path "*" + "@types/prompts@2.0.10": version "2.0.10" resolved "https://registry.yarnpkg.com/@types/prompts/-/prompts-2.0.10.tgz#48cf7b5a5bf31723beb804f3927e510af1a96a27" @@ -3932,22 +3939,21 @@ basic-ftp@^5.0.2: resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0" integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg== -beachball@^2.20.0: - version "2.51.0" - resolved "https://registry.yarnpkg.com/beachball/-/beachball-2.51.0.tgz#6e4e930626fcdf9998099df7be0a8bd6d6cabeed" - integrity sha512-Io+mzUb2QnTeOFDzyho0woU6FnUf1UlJLljJUIyMMJqxxj/sflXe5/CKnWk1c00FGRjMyftSx7oo7fD4Rf3ZEw== +beachball@^2.60.1: + version "2.60.1" + resolved "https://registry.yarnpkg.com/beachball/-/beachball-2.60.1.tgz#d4f03d2198f0d0ba88ec33346afd87bc8ed59116" + integrity sha512-6xlhAU9m/z2h3/12l+N5Up1HBuNSE+iGXQfnNnHGLtGMfWA+p8nCvQ9gzRlfhlGACnciJlZBLfHcWeNTcAPADw== dependencies: - cosmiconfig "^8.3.6" + cosmiconfig "^9.0.0" execa "^5.0.0" fs-extra "^11.1.1" - lodash "^4.17.15" minimatch "^3.0.4" p-graph "^1.1.2" p-limit "^3.0.2" prompts "^2.4.2" semver "^7.0.0" toposort "^2.0.2" - workspace-tools "^0.38.0" + workspace-tools "^0.40.0" yargs-parser "^21.0.0" before-after-hook@^2.2.0: @@ -4668,16 +4674,6 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.1.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.3.6: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - cosmiconfig@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" @@ -6258,20 +6254,20 @@ get-uri@^6.0.1: debug "^4.3.4" fs-extra "^11.2.0" -git-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-7.0.0.tgz#bace30786e36f56ea341b6f69adfd83286337467" - integrity sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ== +git-up@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-8.1.1.tgz#06262adadb89a4a614d2922d803a0eda054be8c5" + integrity sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g== dependencies: is-ssh "^1.4.0" - parse-url "^8.1.0" + parse-url "^9.2.0" -git-url-parse@^13.0.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-13.1.1.tgz#664bddf0857c6a75b3c1f0ae6239abb08a1486d4" - integrity sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ== +git-url-parse@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-16.1.0.tgz#3bb6f378a2ba2903c4d8b1cdec004aa85a7ab66f" + integrity sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw== dependencies: - git-up "^7.0.0" + git-up "^8.1.0" github-slugger@^1.3.0: version "1.5.0" @@ -9264,6 +9260,13 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== +parse-path@*, parse-path@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.1.0.tgz#41fb513cb122831807a4c7b29c8727947a09d8c6" + integrity sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw== + dependencies: + protocols "^2.0.0" + parse-path@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-7.0.0.tgz#605a2d58d0a749c8594405d8cc3a2bf76d16099b" @@ -9271,11 +9274,12 @@ parse-path@^7.0.0: dependencies: protocols "^2.0.0" -parse-url@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-8.1.0.tgz#972e0827ed4b57fc85f0ea6b0d839f0d8a57a57d" - integrity sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w== +parse-url@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-9.2.0.tgz#d75da32b3bbade66e4eb0763fb4851d27526b97b" + integrity sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ== dependencies: + "@types/parse-path" "^7.0.0" parse-path "^7.0.0" parseurl@~1.3.3: @@ -11508,14 +11512,14 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.2.0" -workspace-tools@^0.38.0: - version "0.38.0" - resolved "https://registry.yarnpkg.com/workspace-tools/-/workspace-tools-0.38.0.tgz#5d7677f9c9f0a7df592537b17b378d1c33eddb86" - integrity sha512-BpvydL36Q+AVBU6Rj/a7nfxfEhxvX4ZkLVCsUx5LJ5UpzIcvLDgxvnolBSY+2MUU8VYhvf+PGtF7eWS8xBC1Iw== +workspace-tools@^0.40.0: + version "0.40.0" + resolved "https://registry.yarnpkg.com/workspace-tools/-/workspace-tools-0.40.0.tgz#77a5f9b31006e016e44753e2d9d7202d427e9c23" + integrity sha512-OlhUc1gMVNUQnuKil3PilJbmYXycuFT/hmY7H9Nh/WBRf2GcR3ClzpKFIvloidutd6vgo/RLQms4ZmgFG7uHrA== dependencies: "@yarnpkg/lockfile" "^1.1.0" fast-glob "^3.3.1" - git-url-parse "^13.0.0" + git-url-parse "^16.0.0" globby "^11.0.0" jju "^1.4.0" js-yaml "^4.1.0" From dc067b3a9e2ee894e70e328b5b8b4d8fba340452 Mon Sep 17 00:00:00 2001 From: Vladimir Morozov Date: Wed, 10 Dec 2025 18:22:25 -0800 Subject: [PATCH 2/2] Change files --- ...-native-win32-d25e3573-b504-4374-b411-542539be1ea6.json | 7 +++++++ ...ation-channel-2a56f211-034a-4324-ab59-bf1fa964fcfb.json | 7 +++++++ ...tion-commands-a5b6201f-5bf0-415b-9387-9e48062d2b57.json | 7 +++++++ ...ws-automation-d8072813-6aab-4f7f-a813-e5985b855d84.json | 7 +++++++ ...e-windows-cli-b9661819-e9cf-419f-bdbc-498315b795d5.json | 7 +++++++ ...ndows-codegen-2d855480-013b-4667-adff-cd8aeec9ed95.json | 7 +++++++ ...form-override-25a60c1b-1e0a-4585-95cf-e7f830720df8.json | 7 +++++++ ...ative-windows-b0866abc-1f53-4f03-8fcc-fc6cd56cceba.json | 7 +++++++ ...-windows-init-e833ff7e-43ea-43fb-8945-d0e82f767363.json | 7 +++++++ 9 files changed, 63 insertions(+) create mode 100644 change/@office-iss-react-native-win32-d25e3573-b504-4374-b411-542539be1ea6.json create mode 100644 change/@react-native-windows-automation-channel-2a56f211-034a-4324-ab59-bf1fa964fcfb.json create mode 100644 change/@react-native-windows-automation-commands-a5b6201f-5bf0-415b-9387-9e48062d2b57.json create mode 100644 change/@react-native-windows-automation-d8072813-6aab-4f7f-a813-e5985b855d84.json create mode 100644 change/@react-native-windows-cli-b9661819-e9cf-419f-bdbc-498315b795d5.json create mode 100644 change/@react-native-windows-codegen-2d855480-013b-4667-adff-cd8aeec9ed95.json create mode 100644 change/react-native-platform-override-25a60c1b-1e0a-4585-95cf-e7f830720df8.json create mode 100644 change/react-native-windows-b0866abc-1f53-4f03-8fcc-fc6cd56cceba.json create mode 100644 change/react-native-windows-init-e833ff7e-43ea-43fb-8945-d0e82f767363.json diff --git a/change/@office-iss-react-native-win32-d25e3573-b504-4374-b411-542539be1ea6.json b/change/@office-iss-react-native-win32-d25e3573-b504-4374-b411-542539be1ea6.json new file mode 100644 index 00000000000..2e8281a5214 --- /dev/null +++ b/change/@office-iss-react-native-win32-d25e3573-b504-4374-b411-542539be1ea6.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@office-iss/react-native-win32", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-channel-2a56f211-034a-4324-ab59-bf1fa964fcfb.json b/change/@react-native-windows-automation-channel-2a56f211-034a-4324-ab59-bf1fa964fcfb.json new file mode 100644 index 00000000000..3f6d3a8b29c --- /dev/null +++ b/change/@react-native-windows-automation-channel-2a56f211-034a-4324-ab59-bf1fa964fcfb.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@react-native-windows/automation-channel", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-commands-a5b6201f-5bf0-415b-9387-9e48062d2b57.json b/change/@react-native-windows-automation-commands-a5b6201f-5bf0-415b-9387-9e48062d2b57.json new file mode 100644 index 00000000000..489e539016c --- /dev/null +++ b/change/@react-native-windows-automation-commands-a5b6201f-5bf0-415b-9387-9e48062d2b57.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@react-native-windows/automation-commands", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-automation-d8072813-6aab-4f7f-a813-e5985b855d84.json b/change/@react-native-windows-automation-d8072813-6aab-4f7f-a813-e5985b855d84.json new file mode 100644 index 00000000000..6dfeec930f8 --- /dev/null +++ b/change/@react-native-windows-automation-d8072813-6aab-4f7f-a813-e5985b855d84.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@react-native-windows/automation", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-cli-b9661819-e9cf-419f-bdbc-498315b795d5.json b/change/@react-native-windows-cli-b9661819-e9cf-419f-bdbc-498315b795d5.json new file mode 100644 index 00000000000..1c2af1c9841 --- /dev/null +++ b/change/@react-native-windows-cli-b9661819-e9cf-419f-bdbc-498315b795d5.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@react-native-windows/cli", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/@react-native-windows-codegen-2d855480-013b-4667-adff-cd8aeec9ed95.json b/change/@react-native-windows-codegen-2d855480-013b-4667-adff-cd8aeec9ed95.json new file mode 100644 index 00000000000..53133c124b6 --- /dev/null +++ b/change/@react-native-windows-codegen-2d855480-013b-4667-adff-cd8aeec9ed95.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "@react-native-windows/codegen", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-platform-override-25a60c1b-1e0a-4585-95cf-e7f830720df8.json b/change/react-native-platform-override-25a60c1b-1e0a-4585-95cf-e7f830720df8.json new file mode 100644 index 00000000000..eab2507df3e --- /dev/null +++ b/change/react-native-platform-override-25a60c1b-1e0a-4585-95cf-e7f830720df8.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "react-native-platform-override", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-b0866abc-1f53-4f03-8fcc-fc6cd56cceba.json b/change/react-native-windows-b0866abc-1f53-4f03-8fcc-fc6cd56cceba.json new file mode 100644 index 00000000000..8e2f245ae9a --- /dev/null +++ b/change/react-native-windows-b0866abc-1f53-4f03-8fcc-fc6cd56cceba.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "react-native-windows", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +} diff --git a/change/react-native-windows-init-e833ff7e-43ea-43fb-8945-d0e82f767363.json b/change/react-native-windows-init-e833ff7e-43ea-43fb-8945-d0e82f767363.json new file mode 100644 index 00000000000..fc101fa1512 --- /dev/null +++ b/change/react-native-windows-init-e833ff7e-43ea-43fb-8945-d0e82f767363.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Fix NPM dist tags and make some NPM private (#15416)", + "packageName": "react-native-windows-init", + "email": "vmorozov@microsoft.com", + "dependentChangeType": "patch" +}