diff --git a/apps/site/components/Downloads/Release/PlatformDropdown.tsx b/apps/site/components/Downloads/Release/PlatformDropdown.tsx index a4839ae966f42..7c84d4b60c00c 100644 --- a/apps/site/components/Downloads/Release/PlatformDropdown.tsx +++ b/apps/site/components/Downloads/Release/PlatformDropdown.tsx @@ -4,6 +4,7 @@ import { useContext, useEffect, useMemo } from 'react'; import type { FC } from 'react'; import Select from '@/components/Common/Select'; +import WinGet from '@/components/Icons/Platform/WinGet'; import Choco from '@/components/Icons/Platform/Choco'; import Docker from '@/components/Icons/Platform/Docker'; import FNM from '@/components/Icons/Platform/FNM'; @@ -31,7 +32,7 @@ const PlatformDropdown: FC = () => { } if (os === 'LINUX' || os === 'MAC') { - disabledItems.push('CHOCO'); + disabledItems.push('WINGET', 'CHOCO'); } const releaseSupportsHomebrew = supportedHomebrewVersions.includes( @@ -68,6 +69,7 @@ const PlatformDropdown: FC = () => { values={formatDropdownItems({ items: platformItems, icons: { + WINGET: , NVM: , FNM: , BREW: , diff --git a/apps/site/components/Icons/Platform/WinGet.tsx b/apps/site/components/Icons/Platform/WinGet.tsx new file mode 100644 index 0000000000000..7be80d75f3504 --- /dev/null +++ b/apps/site/components/Icons/Platform/WinGet.tsx @@ -0,0 +1,21 @@ +import type { FC, SVGProps } from 'react'; + +const WinGet: FC> = props => ( + // TODO: Use real svg for WinGet: https://github.com/microsoft/winget-cli/issues/4691 + // For now, the Windows logo is used as a placeholder + + + + + + +); + +export default WinGet; diff --git a/apps/site/i18n/locales/en.json b/apps/site/i18n/locales/en.json index 50d2531ddf2d2..417bab323bbd8 100644 --- a/apps/site/i18n/locales/en.json +++ b/apps/site/i18n/locales/en.json @@ -310,6 +310,9 @@ "homebrewIsNotNodejsPackageManager": "Homebrew is not a Node.js package manager.", "homebrewInstructions": "Follow official instructions at https://brew.sh/", "homebrewSupportsIntallingMajorNodejsVersion": "Homebrew only supports installing major Node.js versions and might not support the latest Node.js version from the {version} release line.", + "wingetIsNotNodejsPackageManager": "The Windows Package Manager is not a Node.js package manager.", + "wingetInstructions": "Follow official instructions at https://learn.microsoft.com/en-us/windows/package-manager/winget/install", + "wingetNotMaintainedByNodejs": "WinGet is not officially maintained by the Node.js project and might not support the {version} version of Node.js", "chocolateyIsNotNodejsPackageManager": "Chocolatey is not a Node.js package manager.", "chocolateyInstructions": "Follow official instructions at https://chocolatey.org/", "chocolateyNotMaintainedByNodejs": "Chocolatey is not officially maintained by the Node.js project and might not support the {version} version of Node.js" diff --git a/apps/site/types/release.ts b/apps/site/types/release.ts index b1e794e940c8c..2824735f35584 100644 --- a/apps/site/types/release.ts +++ b/apps/site/types/release.ts @@ -3,7 +3,7 @@ import type { ReactNode } from 'react'; import type { NodeRelease } from '@/types/releases'; import type { UserOS } from '@/types/userOS'; -export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'CHOCO'; +export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'WINGET' | 'CHOCO'; export interface ReleaseState { os: UserOS; diff --git a/apps/site/util/downloadUtils.ts b/apps/site/util/downloadUtils.ts index 9a63c751a10e7..999b009a7b58b 100644 --- a/apps/site/util/downloadUtils.ts +++ b/apps/site/util/downloadUtils.ts @@ -13,6 +13,7 @@ export enum PackageManagerLabel { NVM = 'nvm', FNM = 'fnm', BREW = 'Brew', + WINGET = 'WinGet', CHOCO = 'Chocolatey', DOCKER = 'Docker', } @@ -49,6 +50,10 @@ export const platformItems = [ label: PackageManagerLabel.BREW, value: 'BREW' as PackageManager, }, + { + label: PackageManagerLabel.WINGET, + value: 'WINGET' as PackageManager, + }, { label: PackageManagerLabel.CHOCO, value: 'CHOCO' as PackageManager, diff --git a/apps/site/util/getNodeDownloadSnippet.ts b/apps/site/util/getNodeDownloadSnippet.ts index 0eb424805b901..7a8944bdd76a7 100644 --- a/apps/site/util/getNodeDownloadSnippet.ts +++ b/apps/site/util/getNodeDownloadSnippet.ts @@ -15,6 +15,7 @@ export const getNodeDownloadSnippet = ( FNM: '', BREW: '', DOCKER: '', + WINGET: '', CHOCO: '', }; @@ -84,6 +85,22 @@ export const getNodeDownloadSnippet = ( } if (os === 'WIN') { + snippets.WINGET = dedent` + # ${t('layouts.download.codeBox.noteWithColon')} + # ${t('layouts.download.codeBox.wingetIsNotNodejsPackageManager')} + # ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')} + # ${t('layouts.download.codeBox.wingetInstructions')} + # ${t('layouts.download.codeBox.wingetNotMaintainedByNodejs', { version: release.versionWithPrefix })} + + # ${t('layouts.download.codeBox.downloadAndInstallNodejs')} + winget install -e --id OpenJS.NodeJS${release.isLts ? '.LTS' : ''} -v ${release.version} + + # ${t('layouts.download.codeBox.verifiesRightNodejsVersion')} + node -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.versionWithPrefix })} + + # ${t('layouts.download.codeBox.verifiesRightNpmVersion')} + npm -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.npm })}`; + snippets.FNM = dedent` # ${t('layouts.download.codeBox.installsFnm')} winget install Schniz.fnm