diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0c52a4f851397..2b329620067f8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -70,7 +70,7 @@ jobs: # See https://github.com/vercel/next.js/pull/81318 TURBOPACK_STATS: ${{ matrix.os == 'ubuntu-latest' }} - - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: matrix.os == 'ubuntu-latest' with: name: webpack-stats diff --git a/.github/workflows/bundle-compare.yml b/.github/workflows/bundle-compare.yml index f7c3a4b37e2cb..24e73ed288986 100644 --- a/.github/workflows/bundle-compare.yml +++ b/.github/workflows/bundle-compare.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit @@ -27,7 +27,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download Stats (HEAD) - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: webpack-stats path: head-stats @@ -44,7 +44,7 @@ jobs: echo "run_id=$ID" >> $GITHUB_OUTPUT - name: Download Stats (BASE) - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: webpack-stats path: base-stats diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 107362f73aacb..facc4d2635757 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -62,7 +62,7 @@ jobs: - name: Start Visual Regression Tests (Chromatic) # This assigns the Environment Deployment for Storybook id: chromatic-deploy - uses: chromaui/action@07791f8243f4cb2698bf4d00426baf4b2d1cb7e0 # v13.3.5 + uses: chromaui/action@5ec258af08deb3e8c36653bd618cb7fe52090031 # v15.2.0 with: workingDir: packages/ui-components buildScriptName: storybook:build diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml index 5f918acc97ea1..d8a27b8a0d7ae 100644 --- a/.github/workflows/lighthouse.yml +++ b/.github/workflows/lighthouse.yml @@ -65,7 +65,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/playwright-cloudflare-open-next.yml b/.github/workflows/playwright-cloudflare-open-next.yml index ebabe74f01bb4..f6b35ae40f7c8 100644 --- a/.github/workflows/playwright-cloudflare-open-next.yml +++ b/.github/workflows/playwright-cloudflare-open-next.yml @@ -59,7 +59,7 @@ jobs: - name: Upload Playwright test results if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: playwright-report path: apps/site/playwright-report/ diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 1a0bdf423cbda..d4fe720108753 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -84,7 +84,7 @@ jobs: - name: Upload Playwright test results if: always() - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: playwright-report path: apps/site/playwright-report/ diff --git a/.github/workflows/pnpm-updater.yml b/.github/workflows/pnpm-updater.yml index 1074b20c03ee9..3a2497d04afa3 100644 --- a/.github/workflows/pnpm-updater.yml +++ b/.github/workflows/pnpm-updater.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml index d345c6b5c4118..3f14c14026281 100644 --- a/.github/workflows/publish-packages.yml +++ b/.github/workflows/publish-packages.yml @@ -31,7 +31,7 @@ jobs: matrix: ${{ steps.generate-matrix.outputs.matrix }} steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit @@ -116,10 +116,11 @@ jobs: # Check if a custom publish script exists in package.json if jq -e '.scripts.release' package.json > /dev/null; then pnpm run release - else - pnpm publish --access public --no-git-checks fi + # Then publish the package to npm + pnpm publish --access public --no-git-checks + - name: Notify on Manual Release if: ${{ github.event_name == 'workflow_dispatch' }} uses: rtCamp/action-slack-notify@e31e87e03dd19038e411e38ae27cbad084a90661 # 2.3.3 diff --git a/.github/workflows/pull-request-label.yml b/.github/workflows/pull-request-label.yml index cec6cc6b532c7..a4891ebda8078 100644 --- a/.github/workflows/pull-request-label.yml +++ b/.github/workflows/pull-request-label.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/tmp-cloudflare-open-next-deploy.yml b/.github/workflows/tmp-cloudflare-open-next-deploy.yml index d51a91f32af8a..d8ed25a0893b9 100644 --- a/.github/workflows/tmp-cloudflare-open-next-deploy.yml +++ b/.github/workflows/tmp-cloudflare-open-next-deploy.yml @@ -30,7 +30,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/translations-pr-lint.yml b/.github/workflows/translations-pr-lint.yml index 076fe7c11da0f..54e7b7cc42368 100644 --- a/.github/workflows/translations-pr-lint.yml +++ b/.github/workflows/translations-pr-lint.yml @@ -42,7 +42,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit diff --git a/.github/workflows/translations-sync.yml b/.github/workflows/translations-sync.yml index 9d7390b15d6d8..6ef3302db12f6 100644 --- a/.github/workflows/translations-sync.yml +++ b/.github/workflows/translations-sync.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit @@ -37,7 +37,7 @@ jobs: # see all the options at https://github.com/crowdin/github-action - name: Crowdin PR - uses: crowdin/github-action@b4b468cffefb50bdd99dd83e5d2eaeb63c880380 # v2.14.0 + uses: crowdin/github-action@8818ff65bfc4322384f983ea37e3926948c11745 # v2.15.0 with: # do not upload anything - this is a one-way operation download upload_sources: false diff --git a/.github/workflows/translations-upload.yml b/.github/workflows/translations-upload.yml index 877d26ea2b608..33c7ec4057d66 100644 --- a/.github/workflows/translations-upload.yml +++ b/.github/workflows/translations-upload.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1 + uses: step-security/harden-runner@a90bcbc6539c36a85cdfeb73f7e2f433735f215b # v2.15.0 with: egress-policy: audit @@ -27,7 +27,7 @@ jobs: # see all the options at https://github.com/crowdin/github-action - name: crowdin action - uses: crowdin/github-action@b4b468cffefb50bdd99dd83e5d2eaeb63c880380 # v2.14.0 + uses: crowdin/github-action@8818ff65bfc4322384f983ea37e3926948c11745 # v2.15.0 with: # only upload sources, ensuring this is a one-way operation upload_sources: true diff --git a/apps/site/components/Common/Partners/index.module.css b/apps/site/components/Common/Partners/index.module.css index f419d06f3c67d..c0e59c6f556df 100644 --- a/apps/site/components/Common/Partners/index.module.css +++ b/apps/site/components/Common/Partners/index.module.css @@ -14,9 +14,3 @@ grid-cols-[repeat(auto-fill,minmax(240px,1fr))] gap-4; } - -.tooltip { - @apply p-2 - text-neutral-900 - dark:text-neutral-200; -} diff --git a/apps/site/components/Common/Partners/index.tsx b/apps/site/components/Common/Partners/index.tsx index 464af46b75d8b..430ca83b6abb7 100644 --- a/apps/site/components/Common/Partners/index.tsx +++ b/apps/site/components/Common/Partners/index.tsx @@ -1,4 +1,3 @@ -import Tooltip from '@node-core/ui-components/Common/Tooltip'; import * as PartnerLogos from '@node-core/ui-components/Icons/PartnerLogos'; import providePartners from '#site/next-data/providers/partners'; @@ -36,15 +35,15 @@ const renderSmallPartner = (partner: Partner) => { const Logo = PartnerLogos[partner.id]; return ( - {partner.name}} + size="small" + href={partner.href} + data-tooltip={partner.name} > - - - - + + ); }; diff --git a/apps/site/components/Common/Supporters/index.tsx b/apps/site/components/Common/Supporters/index.tsx index 06dddf7f23b44..d06abd357840b 100644 --- a/apps/site/components/Common/Supporters/index.tsx +++ b/apps/site/components/Common/Supporters/index.tsx @@ -1,5 +1,7 @@ import Avatar from '@node-core/ui-components/Common/AvatarGroup/Avatar'; +import { getAcronymFromString } from '#site/util/string'; + import type { Supporter } from '#site/types'; import type { FC } from 'react'; @@ -12,6 +14,7 @@ const SupportersList: FC = ({ supporters }) => ( {supporters.map(({ name, image, profile }, i) => ( { defaultValue={release.platform !== '' ? release.platform : undefined} loading={release.os === 'LOADING' || release.platform === ''} placeholder={t('layouts.download.dropdown.unknown')} - ariaLabel={t('layouts.download.dropdown.installMethod')} + ariaLabel={t('layouts.download.dropdown.platform')} onChange={platform => platform && release.setPlatform(platform)} className="min-w-28" inline={true} diff --git a/apps/site/components/withMetaBar.tsx b/apps/site/components/withMetaBar.tsx index ca7b7f3f6a0ca..22d52a9db83c3 100644 --- a/apps/site/components/withMetaBar.tsx +++ b/apps/site/components/withMetaBar.tsx @@ -35,11 +35,7 @@ const WithMetaBar: FC = () => { // Since we cannot show the same number of avatars in Mobile / Tablet // resolution as we do on desktop and there is overflow, we are adjusting // the number of avatars manually for the resolutions below - const isMobileResolution = useMediaQuery('(max-width: 890px)'); - - const isTabletResolution = useMediaQuery( - '(min-width: 890px) and (max-width: 1280px)' - ); + const isSmallerThanDesktop = useMediaQuery('(max-width: 1280px)'); return ( { )]: ( ), }), diff --git a/apps/site/components/withNavBar.tsx b/apps/site/components/withNavBar.tsx index daa874993991e..4b370fe48fd9b 100644 --- a/apps/site/components/withNavBar.tsx +++ b/apps/site/components/withNavBar.tsx @@ -19,6 +19,7 @@ import WithNodejsLogo from '#site/components/withNodejsLogo'; import { useSiteNavigation } from '#site/hooks/generic'; import { useRouter, usePathname } from '#site/navigation.mjs'; +import type { Theme } from '@node-core/ui-components/Common/ThemeToggle'; import type { SimpleLocaleConfig } from '@node-core/ui-components/types'; import type { FC } from 'react'; @@ -34,21 +35,13 @@ const ThemeToggle = dynamic( const WithNavBar: FC = () => { const { navigationItems } = useSiteNavigation(); - const { resolvedTheme, setTheme } = useTheme(); + const { theme, setTheme } = useTheme(); const { replace } = useRouter(); const pathname = usePathname(); const t = useTranslations(); const locale = useLocale(); - const toggleCurrentTheme = () => - setTheme(resolvedTheme === 'dark' ? 'light' : 'dark'); - - const themeToggleAriaLabel = - resolvedTheme === 'dark' - ? t('components.common.themeToggle.light') - : t('components.common.themeToggle.dark'); - const changeLanguage = (locale: SimpleLocaleConfig) => replace(pathname!, { locale: locale.code }); @@ -76,8 +69,14 @@ const WithNavBar: FC = () => { = ({ children }) => {
+
+
{type === 'vulnerability' && } diff --git a/apps/site/layouts/layouts.module.css b/apps/site/layouts/layouts.module.css index 770ea8c62ef06..a2b8a89315dea 100644 --- a/apps/site/layouts/layouts.module.css +++ b/apps/site/layouts/layouts.module.css @@ -1,12 +1,12 @@ @reference "../styles/index.css"; .baseLayout { - @apply grid + @apply ml:grid + ml:grid-cols-[1fr] + ml:grid-rows-[auto_1fr_auto] h-max min-h-full - w-full - grid-cols-[1fr] - grid-rows-[auto_1fr_auto]; + w-full; } .centeredLayout { @@ -104,7 +104,7 @@ justify-center; main { - @apply max-w-5xl + @apply max-w-7xl gap-4 px-4 py-12 @@ -135,17 +135,19 @@ } .contentLayout { - @apply max-w-8xl + @apply max-w-10xl max-ml:m-0 - max-ml:block + 3xl:grid-cols-[--spacing(80)_1fr_--spacing(80)] + ml:grid-cols-[0_1fr_--spacing(56)] + ml:grid mx-auto - grid + block w-full grid-rows-[1fr] - sm:grid-cols-[1fr_--spacing(52)] - xl:grid-cols-[1fr_--spacing(80)]; + xl:grid-cols-[--spacing(56)_1fr_--spacing(64)] + 2xl:grid-cols-[--spacing(72)_1fr_--spacing(72)]; - > *:nth-child(1) { + > *:nth-child(2) { @apply bg-gradient-subtle dark:bg-gradient-subtle-dark max-ml:border-l-0 @@ -164,13 +166,12 @@ dark:border-l-neutral-900; main { - @apply max-w-[660px] - gap-4 + @apply gap-4 wrap-anywhere; } } - > *:nth-child(2) { + > *:nth-child(3) { @apply ml:mt-0 ml:max-w-xs ml:border-l diff --git a/apps/site/next-data/generators/majorNodeReleases.mjs b/apps/site/next-data/generators/majorNodeReleases.mjs index 0a9a06e8cd5e4..28cb0dc07e1ed 100644 --- a/apps/site/next-data/generators/majorNodeReleases.mjs +++ b/apps/site/next-data/generators/majorNodeReleases.mjs @@ -2,11 +2,13 @@ import nodevu from '@nodevu/core'; +import { fetchWithRetry } from '#site/next.fetch.mjs'; + /** * Filters Node.js release data to return only major releases with documented support. */ export default async function getMajorNodeReleases() { - const nodevuData = await nodevu({ fetch }); + const nodevuData = await nodevu({ fetch: fetchWithRetry }); return Object.entries(nodevuData).filter(([version, { support }]) => { // Filter out those without documented support diff --git a/apps/site/next-data/generators/supportersData.mjs b/apps/site/next-data/generators/supportersData.mjs index fc77c4b383e8b..0a3423918ea1a 100644 --- a/apps/site/next-data/generators/supportersData.mjs +++ b/apps/site/next-data/generators/supportersData.mjs @@ -1,5 +1,5 @@ import { OPENCOLLECTIVE_MEMBERS_URL } from '#site/next.constants.mjs'; -import { fetchWithRetry } from '#site/util/fetch'; +import { fetchWithRetry } from '#site/next.fetch.mjs'; /** * Fetches supporters data from Open Collective API, filters active backers, @@ -19,7 +19,10 @@ async function fetchOpenCollectiveData() { name, image, url: website, - profile, + // If profile starts with the guest- prefix, it's a non-existing account + profile: profile.startsWith('https://opencollective.com/guest-') + ? undefined + : profile, source: 'opencollective', })); diff --git a/apps/site/next-data/generators/vulnerabilities.mjs b/apps/site/next-data/generators/vulnerabilities.mjs index d461d0f50d15a..cf57006d50d5e 100644 --- a/apps/site/next-data/generators/vulnerabilities.mjs +++ b/apps/site/next-data/generators/vulnerabilities.mjs @@ -1,5 +1,5 @@ import { VULNERABILITIES_URL } from '#site/next.constants.mjs'; -import { fetchWithRetry } from '#site/util/fetch'; +import { fetchWithRetry } from '#site/next.fetch.mjs'; const RANGE_REGEX = /([<>]=?)\s*(\d+)(?:\.(\d+))?/; const V0_REGEX = /^0\.\d+(\.x)?$/; diff --git a/apps/site/next.calendar.mjs b/apps/site/next.calendar.mjs index b7cdb666fcd73..1440e19c63cbe 100644 --- a/apps/site/next.calendar.mjs +++ b/apps/site/next.calendar.mjs @@ -4,7 +4,7 @@ import { BASE_CALENDAR_URL, SHARED_CALENDAR_KEY, } from './next.calendar.constants.mjs'; -import { fetchWithRetry } from './util/fetch'; +import { fetchWithRetry } from './next.fetch.mjs'; /** * diff --git a/apps/site/next.dynamic.mjs b/apps/site/next.dynamic.mjs index 6dfea0d82f56a..6b539563162f2 100644 --- a/apps/site/next.dynamic.mjs +++ b/apps/site/next.dynamic.mjs @@ -55,6 +55,10 @@ const getDynamicRouter = async () => { // Keeps the map of pathnames to filenames const pathnameToFilename = new Map(); + // Pre-compute the pages directory path to avoid Turbopack's overly broad + // file pattern analysis when using path.join() with dynamic segments + const pagesDirectory = join(process.cwd(), 'pages'); + const websitePages = await getMarkdownFiles( process.cwd(), `pages/${defaultLocale.code}` @@ -101,7 +105,7 @@ const getDynamicRouter = async () => { // meaning that the route exists on the website and can be rendered if (pathnameToFilename.has(normalizedPathname)) { const filename = pathnameToFilename.get(normalizedPathname); - const filepath = join(process.cwd(), 'pages', locale, filename); + const filepath = normalize(`${pagesDirectory}/${locale}/${filename}`); // We verify if our Markdown cache already has a cache entry for a localized // version of this file, because if not, it means that either diff --git a/apps/site/next.fetch.mjs b/apps/site/next.fetch.mjs new file mode 100644 index 0000000000000..26eaa48925a00 --- /dev/null +++ b/apps/site/next.fetch.mjs @@ -0,0 +1,38 @@ +/** + * @typedef { RequestInit & { maxRetry?: number; delay?: number; }} RetryOptions + */ + +const isTimeoutError = e => + e instanceof Error && + typeof e.cause === 'object' && + e.cause !== null && + 'code' in e.cause && + e.cause.code === 'ETIMEDOUT'; + +const sleep = ms => new Promise(r => setTimeout(r, ms)); + +/** + * Does a fetch with retry logic for network errors and timeouts. + * + * @param {string} url + * @param {RetryOptions} [options] + * @returns {Promise} + */ +export const fetchWithRetry = async ( + url, + { maxRetry = 3, delay = 100, ...options } = {} +) => { + const retries = Math.max(1, Number(maxRetry) || 1); + const backoff = Math.max(0, Number(delay) || 0); + + const attemptFetch = attempt => + fetch(url, { ...options, signal: AbortSignal.timeout(30000) }).catch(e => { + if (attempt === retries || !isTimeoutError(e)) { + throw e; + } + + return sleep(backoff * attempt).then(() => attemptFetch(attempt + 1)); + }); + + return attemptFetch(1); +}; diff --git a/apps/site/package.json b/apps/site/package.json index f0339f01b5ba4..e0f55566916dd 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -38,33 +38,33 @@ "@node-core/ui-components": "workspace:*", "@node-core/website-i18n": "workspace:*", "@nodevu/core": "0.3.0", - "@opentelemetry/api-logs": "~0.206.0", - "@opentelemetry/instrumentation": "~0.206.0", + "@opentelemetry/api-logs": "~0.212.0", + "@opentelemetry/instrumentation": "~0.212.0", "@opentelemetry/resources": "~1.30.1", - "@opentelemetry/sdk-logs": "~0.206.0", - "@orama/core": "^1.2.16", + "@opentelemetry/sdk-logs": "~0.212.0", + "@orama/core": "^1.2.19", "@orama/ui": "^1.5.4", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", - "@tailwindcss/postcss": "~4.1.18", + "@tailwindcss/postcss": "~4.2.1", "@types/node": "catalog:", "@types/react": "catalog:", "@vcarl/remark-headings": "~0.1.0", - "@vercel/analytics": "~1.5.0", - "@vercel/otel": "~2.1.0", - "@vercel/speed-insights": "~1.2.0", + "@vercel/analytics": "~1.6.1", + "@vercel/otel": "~2.1.1", + "@vercel/speed-insights": "~1.3.1", "classnames": "catalog:", "cross-env": "catalog:", "feed": "~5.1.0", "github-slugger": "~2.0.0", "gray-matter": "~4.0.3", "mdast-util-to-string": "^4.0.0", - "next": "16.0.10", - "next-intl": "~4.5.3", + "next": "16.1.6", + "next-intl": "~4.8.3", "next-themes": "~0.4.6", "postcss-calc": "~10.1.1", "react": "catalog:", - "react-dom": "^19.2.3", + "react-dom": "^19.2.4", "reading-time": "~1.5.0", "rehype-autolink-headings": "~7.1.0", "rehype-slug": "~6.0.0", @@ -74,41 +74,41 @@ "sval": "^0.6.8", "tailwindcss": "catalog:", "twoslash": "^0.3.6", - "unist-util-visit": "^5.0.0", + "typescript": "catalog:", + "unist-util-visit": "^5.1.0", "vfile": "~6.0.3", "vfile-matter": "~5.0.1" }, "devDependencies": { "@flarelabs-net/wrangler-build-time-fs-assets-polyfilling": "^0.0.1", - "@next/eslint-plugin-next": "16.0.7", + "@next/eslint-plugin-next": "16.1.6", "@node-core/remark-lint": "workspace:*", - "@opennextjs/cloudflare": "^1.14.7", - "@playwright/test": "^1.57.0", + "@opennextjs/cloudflare": "^1.16.3", + "@playwright/test": "^1.58.1", "@testing-library/user-event": "~14.6.1", "@types/mdast": "^4.0.4", "@types/mdx": "^2.0.13", "@types/semver": "~7.7.1", "babel-plugin-react-compiler": "^1.0.0", "dedent": "^1.7.1", - "eslint-config-next": "16.1.1", + "eslint-config-next": "16.1.6", "eslint-plugin-mdx": "~3.6.2", "eslint-plugin-react": "~7.37.5", "eslint-plugin-react-hooks": "^7.0.1", - "global-jsdom": "^27.0.0", + "global-jsdom": "^28.0.0", "handlebars": "4.7.8", - "jsdom": "^27.4.0", + "jsdom": "^28.1.0", "mdast-util-from-markdown": "^2.0.2", - "nock": "^14.0.10", + "nock": "^14.0.11", "remark-frontmatter": "^5.0.0", - "stylelint": "16.26.1", - "stylelint-config-standard": "39.0.1", + "stylelint": "17.1.1", + "stylelint-config-standard": "40.0.0", "stylelint-order": "7.0.1", "stylelint-selector-bem-pattern": "4.0.1", "tsx": "^4.21.0", - "typescript": "catalog:", - "typescript-eslint": "~8.50.1", + "typescript-eslint": "~8.54.0", "user-agent-data-types": "0.4.2", - "wrangler": "^4.54.0" + "wrangler": "^4.63.0" }, "imports": { "#site/*": [ diff --git a/apps/site/pages/en/about/security-reporting.mdx b/apps/site/pages/en/about/security-reporting.mdx index 985180b607b3d..226630480e733 100644 --- a/apps/site/pages/en/about/security-reporting.mdx +++ b/apps/site/pages/en/about/security-reporting.mdx @@ -11,6 +11,12 @@ For more details on active Security Policies, checkout [this page](https://githu Report security bugs in Node.js via [HackerOne](https://hackerone.com/nodejs). +> **Note:** Submitting a report through HackerOne requires a minimum +> [Signal](https://docs.hackerone.com/en/articles/8369891-signal-impact) score of **1.0**. +> If your Signal score is below this threshold, please reach out to the Node.js +> security release stewards directly via the +> [OpenJS Foundation Slack](https://slack-invite.openjsf.org/) instead. + Normally, your report will be acknowledged within 5 days, and you'll receive a more detailed response to your report within 10 days indicating the next steps in handling your submission. These timelines may extend when diff --git a/apps/site/pages/en/blog/announcements/hackerone-signal-requirement.md b/apps/site/pages/en/blog/announcements/hackerone-signal-requirement.md index 34dd19dc1d551..a5017d9acfa55 100644 --- a/apps/site/pages/en/blog/announcements/hackerone-signal-requirement.md +++ b/apps/site/pages/en/blog/announcements/hackerone-signal-requirement.md @@ -1,11 +1,15 @@ --- -date: 2026-01-21T12:00:00.000Z +date: 2026-02-19T12:00:00.000Z category: announcements title: New HackerOne Signal Requirement for Vulnerability Reports layout: blog-post author: The Node.js Project --- +**UPDATE 2026-02-19**: New researchers without signal can no longer submit reports through HackerOne. If you are a new researcher and would like to report a potential vulnerability, please reach out to the [Node.js security release stewards](https://github.com/nodejs/node?tab=readme-ov-file#security-release-stewards) through the [OpenJS Foundation Slack](https://slack-invite.openjsf.org/). + +--- + We have updated our [HackerOne program](https://hackerone.com/nodejs) to require a **Signal of 1.0 or higher** to submit vulnerability reports to the Node.js project. @@ -24,8 +28,7 @@ submissions. - **New researchers or researchers with [signal][Signal] >= 1.0**: You can continue reporting vulnerabilities through HackerOne as usual - **Those below the threshold**: You can still reach the security team through the - [OpenJS Foundation Slack](https://slack-invite.openjsf.org/). Contact us there to discuss potential - vulnerabilities + [OpenJS Foundation Slack](https://slack-invite.openjsf.org/) (channel: `#nodejs-security-wg` for help). Contact us directly using direct messages there to discuss potential vulnerabilities. You can find the users listed in [security release stewards](https://github.com/nodejs/node#security-release-stewards). ## About HackerOne Signal diff --git a/apps/site/pages/en/blog/release/v24.13.1.md b/apps/site/pages/en/blog/release/v24.13.1.md new file mode 100644 index 0000000000000..34d396d8b3879 --- /dev/null +++ b/apps/site/pages/en/blog/release/v24.13.1.md @@ -0,0 +1,406 @@ +--- +date: '2026-02-10T13:37:37.426Z' +category: release +title: Node.js 24.13.1 (LTS) +layout: blog-post +author: Antoine du Hamel +--- + +## 2026-02-10, Version 24.13.1 'Krypton' (LTS), @aduh95 + +### Notable Changes + +- \[[`1f64d6841e`](https://github.com/nodejs/node/commit/1f64d6841e)] - **build**: add support for Python 3.14 (Christian Clauss) [#59983](https://github.com/nodejs/node/pull/59983) +- \[[`30e500fc09`](https://github.com/nodejs/node/commit/30e500fc09)] - **cli**: mark `--heapsnapshot-near-heap-limit` as stable (Joyee Cheung) [#60956](https://github.com/nodejs/node/pull/60956) +- \[[`bc0a55f086`](https://github.com/nodejs/node/commit/bc0a55f086)] - **crypto**: update root certificates to NSS 3.119 (Node.js GitHub Bot) [#61419](https://github.com/nodejs/node/pull/61419) +- \[[`8a67c00bf5`](https://github.com/nodejs/node/commit/8a67c00bf5)] - **doc**: mark `--build-snapshot` and `--build-snapshot-config` as stable (Joyee Cheung) [#60954](https://github.com/nodejs/node/pull/60954) +- \[[`3999c2a910`](https://github.com/nodejs/node/commit/3999c2a910)] - **meta**: add avivkeller to collaborators (Aviv Keller) [#61115](https://github.com/nodejs/node/pull/61115) +- \[[`fa542fbae6`](https://github.com/nodejs/node/commit/fa542fbae6)] - **meta**: add gurgunday to collaborators (Gürgün Dayıoğlu) [#61094](https://github.com/nodejs/node/pull/61094) +- \[[`ff11eda2f2`](https://github.com/nodejs/node/commit/ff11eda2f2)] - **meta**: add Renegade334 to collaborators (Renegade334) [#60714](https://github.com/nodejs/node/pull/60714) +- \[[`2e387fb969`](https://github.com/nodejs/node/commit/2e387fb969)] - **url**: update ada to v3.4.2 and support unicode 17 (Yagiz Nizipli) [#61593](https://github.com/nodejs/node/pull/61593) +- \[[`bb206782d4`](https://github.com/nodejs/node/commit/bb206782d4)] - **v8**: mark `v8.queryObjects()` as stable (Joyee Cheung) [#60957](https://github.com/nodejs/node/pull/60957) + +### Commits + +- \[[`a73279c60d`](https://github.com/nodejs/node/commit/a73279c60d)] - **assert**: use a set instead of an array for faster lookup (Ruben Bridgewater) [#61076](https://github.com/nodejs/node/pull/61076) +- \[[`6a61bcd73c`](https://github.com/nodejs/node/commit/6a61bcd73c)] - **assert,util**: fix deep comparison for sets and maps with mixed types (Ruben Bridgewater) [#61388](https://github.com/nodejs/node/pull/61388) +- \[[`cf0eabcd42`](https://github.com/nodejs/node/commit/cf0eabcd42)] - **assert,util**: improve deep comparison performance (Ruben Bridgewater) [#61076](https://github.com/nodejs/node/pull/61076) +- \[[`ff3b9ac183`](https://github.com/nodejs/node/commit/ff3b9ac183)] - **benchmark**: add SQLite benchmarks (Guilherme Araújo) [#61401](https://github.com/nodejs/node/pull/61401) +- \[[`e1f7d68c94`](https://github.com/nodejs/node/commit/e1f7d68c94)] - **benchmark**: use boolean options in benchmark tests (SeokhunEom) [#60129](https://github.com/nodejs/node/pull/60129) +- \[[`91127c91cd`](https://github.com/nodejs/node/commit/91127c91cd)] - **benchmark**: allow boolean option values (SeokhunEom) [#60129](https://github.com/nodejs/node/pull/60129) +- \[[`170fda55f6`](https://github.com/nodejs/node/commit/170fda55f6)] - **benchmark**: add microbench on isInsideNodeModules (Chengzhong Wu) [#60991](https://github.com/nodejs/node/pull/60991) +- \[[`3976381b41`](https://github.com/nodejs/node/commit/3976381b41)] - **benchmark**: fix incorrect base64 input in byteLength benchmark (semimikoh) [#60841](https://github.com/nodejs/node/pull/60841) +- \[[`c702fccd76`](https://github.com/nodejs/node/commit/c702fccd76)] - **benchmark**: use typescript for import cjs benchmark (Joyee Cheung) [#60663](https://github.com/nodejs/node/pull/60663) +- \[[`92c517c62d`](https://github.com/nodejs/node/commit/92c517c62d)] - **buffer**: make methods work on Uint8Array instances (Neal Beeken) [#56578](https://github.com/nodejs/node/pull/56578) +- \[[`be95382edb`](https://github.com/nodejs/node/commit/be95382edb)] - **buffer**: let Buffer.of use heap (Сковорода Никита Андреевич) [#60503](https://github.com/nodejs/node/pull/60503) +- \[[`1f64d6841e`](https://github.com/nodejs/node/commit/1f64d6841e)] - **build**: test on Python 3.14 (Christian Clauss) [#59983](https://github.com/nodejs/node/pull/59983) +- \[[`ea4687981b`](https://github.com/nodejs/node/commit/ea4687981b)] - **build**: update android-patches/trap-handler.h.patch (Mo Luo) [#60369](https://github.com/nodejs/node/pull/60369) +- \[[`b3a7a8c780`](https://github.com/nodejs/node/commit/b3a7a8c780)] - **build**: update devcontainer.json to use paired nix env (Joyee Cheung) [#61414](https://github.com/nodejs/node/pull/61414) +- \[[`7168d0b5e3`](https://github.com/nodejs/node/commit/7168d0b5e3)] - **build**: add embedtest into native suite (Joyee Cheung) [#61357](https://github.com/nodejs/node/pull/61357) +- \[[`e00755a977`](https://github.com/nodejs/node/commit/e00755a977)] - **build**: fix misplaced comma in ldflags (hqzing) [#61294](https://github.com/nodejs/node/pull/61294) +- \[[`72fcc3ee9d`](https://github.com/nodejs/node/commit/72fcc3ee9d)] - **build**: fix crate vendor file checksums on windows (Chengzhong Wu) [#61329](https://github.com/nodejs/node/pull/61329) +- \[[`76a73d68fd`](https://github.com/nodejs/node/commit/76a73d68fd)] - **build**: expose libplatform symbols in shared libnode (Joyee Cheung) [#61144](https://github.com/nodejs/node/pull/61144) +- \[[`ef8d26ce5c`](https://github.com/nodejs/node/commit/ef8d26ce5c)] - **build**: fix inconsistent quoting in `Makefile` (Antoine du Hamel) [#60511](https://github.com/nodejs/node/pull/60511) +- \[[`2d23968783`](https://github.com/nodejs/node/commit/2d23968783)] - **build**: remove temporal updater (Chengzhong Wu) [#61151](https://github.com/nodejs/node/pull/61151) +- \[[`4c2655f1c2`](https://github.com/nodejs/node/commit/4c2655f1c2)] - **build**: update test-wpt-report to use NODE instead of OUT_NODE (Filip Skokan) [#61024](https://github.com/nodejs/node/pull/61024) +- \[[`eaea6821fc`](https://github.com/nodejs/node/commit/eaea6821fc)] - **build**: skip build-ci on actions with a separate test step (Chengzhong Wu) [#61073](https://github.com/nodejs/node/pull/61073) +- \[[`dfd4e12037`](https://github.com/nodejs/node/commit/dfd4e12037)] - **build**: run embedtest with node_g when BUILDTYPE=Debug (Chengzhong Wu) [#60850](https://github.com/nodejs/node/pull/60850) +- \[[`775c77234b`](https://github.com/nodejs/node/commit/775c77234b)] - **build,tools**: fix addon build deadlock on errors (Vladimir Morozov) [#61321](https://github.com/nodejs/node/pull/61321) +- \[[`5deafc10fa`](https://github.com/nodejs/node/commit/5deafc10fa)] - **build,win**: improve logs when ClangCL is missing (Mike McCready) [#61438](https://github.com/nodejs/node/pull/61438) +- \[[`e2481c5c6e`](https://github.com/nodejs/node/commit/e2481c5c6e)] - **build,win**: update WinGet configurations to Python 3.14 (Mike McCready) [#61431](https://github.com/nodejs/node/pull/61431) +- \[[`d2586b7e4c`](https://github.com/nodejs/node/commit/d2586b7e4c)] - **child_process**: treat ipc length header as unsigned uint32 (Ryuhei Shima) [#61344](https://github.com/nodejs/node/pull/61344) +- \[[`30e500fc09`](https://github.com/nodejs/node/commit/30e500fc09)] - **cli**: mark --heapsnapshot-near-heap-limit as stable (Joyee Cheung) [#60956](https://github.com/nodejs/node/pull/60956) +- \[[`2c7da15612`](https://github.com/nodejs/node/commit/2c7da15612)] - **cluster**: fix port reuse between cluster (Ryuhei Shima) [#60141](https://github.com/nodejs/node/pull/60141) +- \[[`bc0a55f086`](https://github.com/nodejs/node/commit/bc0a55f086)] - **crypto**: update root certificates to NSS 3.119 (Node.js GitHub Bot) [#61419](https://github.com/nodejs/node/pull/61419) +- \[[`2d5f20e9c3`](https://github.com/nodejs/node/commit/2d5f20e9c3)] - **crypto**: update root certificates to NSS 3.117 (Node.js GitHub Bot) [#60741](https://github.com/nodejs/node/pull/60741) +- \[[`fba95be188`](https://github.com/nodejs/node/commit/fba95be188)] - **deps**: update archs files for openssl-3.5.5 (Node.js GitHub Bot) [#61547](https://github.com/nodejs/node/pull/61547) +- \[[`08697289e0`](https://github.com/nodejs/node/commit/08697289e0)] - **deps**: upgrade openssl sources to openssl-3.5.5 (Node.js GitHub Bot) [#61547](https://github.com/nodejs/node/pull/61547) +- \[[`403c50c04d`](https://github.com/nodejs/node/commit/403c50c04d)] - **deps**: update corepack to 0.34.6 (Node.js GitHub Bot) [#61510](https://github.com/nodejs/node/pull/61510) +- \[[`3b24691aeb`](https://github.com/nodejs/node/commit/3b24691aeb)] - **deps**: upgrade npm to 11.8.0 (npm team) [#61466](https://github.com/nodejs/node/pull/61466) +- \[[`2bba7efdc4`](https://github.com/nodejs/node/commit/2bba7efdc4)] - **deps**: update googletest to 85087857ad10bd407cd6ed2f52f7ea9752db621f (Node.js GitHub Bot) [#61417](https://github.com/nodejs/node/pull/61417) +- \[[`8f8c6f6162`](https://github.com/nodejs/node/commit/8f8c6f6162)] - **deps**: update sqlite to 3.51.2 (Node.js GitHub Bot) [#61339](https://github.com/nodejs/node/pull/61339) +- \[[`c46009053c`](https://github.com/nodejs/node/commit/c46009053c)] - **deps**: update icu to 78.2 (Node.js GitHub Bot) [#60523](https://github.com/nodejs/node/pull/60523) +- \[[`b46b8dd91b`](https://github.com/nodejs/node/commit/b46b8dd91b)] - **deps**: update ada to v3.4.0 (Yagiz Nizipli) [#61315](https://github.com/nodejs/node/pull/61315) +- \[[`88c6b17e18`](https://github.com/nodejs/node/commit/88c6b17e18)] - **deps**: update zlib to 1.3.1-e00f703 (Node.js GitHub Bot) [#61135](https://github.com/nodejs/node/pull/61135) +- \[[`0030c05ba9`](https://github.com/nodejs/node/commit/0030c05ba9)] - **deps**: update cjs-module-lexer to 2.2.0 (Node.js GitHub Bot) [#61271](https://github.com/nodejs/node/pull/61271) +- \[[`77437cff89`](https://github.com/nodejs/node/commit/77437cff89)] - **deps**: update nbytes to 0.1.2 (Node.js GitHub Bot) [#61270](https://github.com/nodejs/node/pull/61270) +- \[[`fb0f05a937`](https://github.com/nodejs/node/commit/fb0f05a937)] - **deps**: update timezone to 2025c (Node.js GitHub Bot) [#61138](https://github.com/nodejs/node/pull/61138) +- \[[`b426a47c05`](https://github.com/nodejs/node/commit/b426a47c05)] - **deps**: nghttp2: revert 7784fa979d0b (Antoine du Hamel) [#61136](https://github.com/nodejs/node/pull/61136) +- \[[`c07a38f700`](https://github.com/nodejs/node/commit/c07a38f700)] - **deps**: update nghttp2 to 1.68.0 (nodejs-github-bot) [#61136](https://github.com/nodejs/node/pull/61136) +- \[[`c2ddc9a18b`](https://github.com/nodejs/node/commit/c2ddc9a18b)] - **deps**: update simdjson to 4.2.4 (Node.js GitHub Bot) [#61056](https://github.com/nodejs/node/pull/61056) +- \[[`f38cd6da8e`](https://github.com/nodejs/node/commit/f38cd6da8e)] - **deps**: update googletest to 065127f1e4b46c5f14fc73cf8d323c221f9dc68e (Node.js GitHub Bot) [#61055](https://github.com/nodejs/node/pull/61055) +- \[[`a9a6a4cdb2`](https://github.com/nodejs/node/commit/a9a6a4cdb2)] - **deps**: brotli: cherry-pick e230f474b87 (liujiahui) [#61003](https://github.com/nodejs/node/pull/61003) +- \[[`5a40023aae`](https://github.com/nodejs/node/commit/5a40023aae)] - **deps**: upgrade npm to 11.7.0 (npm team) [#61011](https://github.com/nodejs/node/pull/61011) +- \[[`4121e7a413`](https://github.com/nodejs/node/commit/4121e7a413)] - **deps**: update sqlite to 3.51.1 (Node.js GitHub Bot) [#60899](https://github.com/nodejs/node/pull/60899) +- \[[`e8a09fc896`](https://github.com/nodejs/node/commit/e8a09fc896)] - **deps**: update zlib to 1.3.1-63d7e16 (Node.js GitHub Bot) [#60898](https://github.com/nodejs/node/pull/60898) +- \[[`8df5862ee5`](https://github.com/nodejs/node/commit/8df5862ee5)] - **deps**: upgrade npm to 11.6.4 (npm team) [#60853](https://github.com/nodejs/node/pull/60853) +- \[[`6c1c8cbdcc`](https://github.com/nodejs/node/commit/6c1c8cbdcc)] - **deps**: update sqlite to 3.51.0 (Node.js GitHub Bot) [#60614](https://github.com/nodejs/node/pull/60614) +- \[[`2d1efc7c1b`](https://github.com/nodejs/node/commit/2d1efc7c1b)] - **deps**: upgrade npm to 11.6.3 (npm team) [#60785](https://github.com/nodejs/node/pull/60785) +- \[[`3a2de1c23b`](https://github.com/nodejs/node/commit/3a2de1c23b)] - **deps**: update brotli to 1.2.0 (Node.js GitHub Bot) [#60540](https://github.com/nodejs/node/pull/60540) +- \[[`58c5d40bd1`](https://github.com/nodejs/node/commit/58c5d40bd1)] - **deps**: update simdjson to 4.2.2 (Node.js GitHub Bot) [#60740](https://github.com/nodejs/node/pull/60740) +- \[[`e6b607ef50`](https://github.com/nodejs/node/commit/e6b607ef50)] - **deps**: update googletest to 1b96fa13f549387b7549cc89e1a785cf143a1a50 (Node.js GitHub Bot) [#60739](https://github.com/nodejs/node/pull/60739) +- \[[`650c9e0305`](https://github.com/nodejs/node/commit/650c9e0305)] - **deps**: update minimatch to 10.1.1 (Node.js GitHub Bot) [#60543](https://github.com/nodejs/node/pull/60543) +- \[[`ef1951d5d5`](https://github.com/nodejs/node/commit/ef1951d5d5)] - **deps**: update inspector_protocol to 1b1bcbbe060e8c8cd8704f00f78978c50991 (Node.js GitHub Bot) [#60705](https://github.com/nodejs/node/pull/60705) +- \[[`eb068305dd`](https://github.com/nodejs/node/commit/eb068305dd)] - **deps**: update cjs-module-lexer to 2.1.1 (Node.js GitHub Bot) [#60646](https://github.com/nodejs/node/pull/60646) +- \[[`ee1d99131c`](https://github.com/nodejs/node/commit/ee1d99131c)] - **deps**: update simdjson to 4.2.1 (Node.js GitHub Bot) [#60644](https://github.com/nodejs/node/pull/60644) +- \[[`23582967b7`](https://github.com/nodejs/node/commit/23582967b7)] - **deps**: V8: cherry-pick 1441665e0d87 (Domagoj Stolfa) [#60989](https://github.com/nodejs/node/pull/60989) +- \[[`155eaedff2`](https://github.com/nodejs/node/commit/155eaedff2)] - **deps**: V8: cherry-pick 394a8053b59e (Lu Yahan) [#60962](https://github.com/nodejs/node/pull/60962) +- \[[`c95a4a0f43`](https://github.com/nodejs/node/commit/c95a4a0f43)] - **deps**: V8: backport bbaae8e36164 (Lu Yahan) [#60962](https://github.com/nodejs/node/pull/60962) +- \[[`6f123f186d`](https://github.com/nodejs/node/commit/6f123f186d)] - **doc**: move Security-Team from TSC to SECURITY (Rafael Gonzaga) [#61495](https://github.com/nodejs/node/pull/61495) +- \[[`2e3337d15b`](https://github.com/nodejs/node/commit/2e3337d15b)] - **doc**: added `requestOCSP` option to `tls.connect` (ikeyan) [#61064](https://github.com/nodejs/node/pull/61064) +- \[[`f505f81577`](https://github.com/nodejs/node/commit/f505f81577)] - **doc**: restore @ChALkeR to collaborators (Сковорода Никита Андреевич) [#61553](https://github.com/nodejs/node/pull/61553) +- \[[`12fb95d0c9`](https://github.com/nodejs/node/commit/12fb95d0c9)] - **doc**: update IBM/Red Hat volunteers with dedicated project time (Beth Griggs) [#61588](https://github.com/nodejs/node/pull/61588) +- \[[`283ab61ed2`](https://github.com/nodejs/node/commit/283ab61ed2)] - **doc**: align Buffer.concat documentation with behavior (Gürgün Dayıoğlu) [#60405](https://github.com/nodejs/node/pull/60405) +- \[[`fc9c906d5f`](https://github.com/nodejs/node/commit/fc9c906d5f)] - **doc**: remove `v` prefix for version references (Mike McCready) [#61488](https://github.com/nodejs/node/pull/61488) +- \[[`4a88ed09e8`](https://github.com/nodejs/node/commit/4a88ed09e8)] - **doc**: mention constructor comparison in assert.deepStrictEqual (Hamza Kargin) [#60253](https://github.com/nodejs/node/pull/60253) +- \[[`9b29d56491`](https://github.com/nodejs/node/commit/9b29d56491)] - **doc**: add CVE delay mention (Rafael Gonzaga) [#61465](https://github.com/nodejs/node/pull/61465) +- \[[`4815e4ac52`](https://github.com/nodejs/node/commit/4815e4ac52)] - **doc**: update previous version links in BUILDING (Mike McCready) [#61457](https://github.com/nodejs/node/pull/61457) +- \[[`8a43244e6c`](https://github.com/nodejs/node/commit/8a43244e6c)] - **doc**: include OpenJSF handle for security stewards (Rafael Gonzaga) [#61454](https://github.com/nodejs/node/pull/61454) +- \[[`89a7f184a1`](https://github.com/nodejs/node/commit/89a7f184a1)] - **doc**: clarify process.argv\[1] behavior for -e/--eval (Jeevankumar S) [#61366](https://github.com/nodejs/node/pull/61366) +- \[[`b4041aba1c`](https://github.com/nodejs/node/commit/b4041aba1c)] - **doc**: remove Windows Dev Home instructions from BUILDING (Mike McCready) [#61434](https://github.com/nodejs/node/pull/61434) +- \[[`fa7830bac0`](https://github.com/nodejs/node/commit/fa7830bac0)] - **doc**: clarify TypedArray properties on Buffer (Roman Reiss) [#61355](https://github.com/nodejs/node/pull/61355) +- \[[`45663c8956`](https://github.com/nodejs/node/commit/45663c8956)] - **doc**: update Python 3.14 manual install instructions (Windows) (Mike McCready) [#61428](https://github.com/nodejs/node/pull/61428) +- \[[`0248357f26`](https://github.com/nodejs/node/commit/0248357f26)] - **doc**: note resume build should not be done on node-test-commit (Stewart X Addison) [#61373](https://github.com/nodejs/node/pull/61373) +- \[[`b254bab513`](https://github.com/nodejs/node/commit/b254bab513)] - **doc**: refine WebAssembly error documentation (sangwook) [#61382](https://github.com/nodejs/node/pull/61382) +- \[[`8aca37c6ef`](https://github.com/nodejs/node/commit/8aca37c6ef)] - **doc**: add deprecation history for url.parse (Eng Zer Jun) [#61389](https://github.com/nodejs/node/pull/61389) +- \[[`8047ac3aac`](https://github.com/nodejs/node/commit/8047ac3aac)] - **doc**: add marco and rafael in last sec release (Marco Ippolito) [#61383](https://github.com/nodejs/node/pull/61383) +- \[[`61190bf4b4`](https://github.com/nodejs/node/commit/61190bf4b4)] - **doc**: packages: example of private import switch to internal (coderaiser) [#61343](https://github.com/nodejs/node/pull/61343) +- \[[`346311c42f`](https://github.com/nodejs/node/commit/346311c42f)] - **doc**: add esm and cjs examples to node:v8 (Alfredo González) [#61328](https://github.com/nodejs/node/pull/61328) +- \[[`c07c80717c`](https://github.com/nodejs/node/commit/c07c80717c)] - **doc**: added 'secure' event to tls.TLSSocket (ikeyan) [#61066](https://github.com/nodejs/node/pull/61066) +- \[[`9f68d30f11`](https://github.com/nodejs/node/commit/9f68d30f11)] - **doc**: restore @watilde to collaborators (Daijiro Wachi) [#61350](https://github.com/nodejs/node/pull/61350) +- \[[`a3b08ddb51`](https://github.com/nodejs/node/commit/a3b08ddb51)] - **doc**: run license-builder (github-actions\[bot]) [#61348](https://github.com/nodejs/node/pull/61348) +- \[[`4990812dd9`](https://github.com/nodejs/node/commit/4990812dd9)] - **doc**: document ALPNCallback option for TLSSocket constructor (ikeyan) [#61331](https://github.com/nodejs/node/pull/61331) +- \[[`89e9d19693`](https://github.com/nodejs/node/commit/89e9d19693)] - **doc**: update MDN links (Livia Medeiros) [#61062](https://github.com/nodejs/node/pull/61062) +- \[[`dcffa88fec`](https://github.com/nodejs/node/commit/dcffa88fec)] - **doc**: correct description of `error.stack` accessor behavior (René) [#61090](https://github.com/nodejs/node/pull/61090) +- \[[`31476cd4d1`](https://github.com/nodejs/node/commit/31476cd4d1)] - **doc**: add documentation for process.traceProcessWarnings (Alireza Ebrahimkhani) [#53641](https://github.com/nodejs/node/pull/53641) +- \[[`99c783b9ec`](https://github.com/nodejs/node/commit/99c783b9ec)] - **doc**: add sqlite session disposal method (René) [#61273](https://github.com/nodejs/node/pull/61273) +- \[[`c7764bed35`](https://github.com/nodejs/node/commit/c7764bed35)] - **doc**: fix filename typo (Hardanish Singh) [#61297](https://github.com/nodejs/node/pull/61297) +- \[[`0f16bca9d8`](https://github.com/nodejs/node/commit/0f16bca9d8)] - **doc**: fix typos and grammar in `BUILDING.md` & `onboarding.md` (Hardanish Singh) [#61267](https://github.com/nodejs/node/pull/61267) +- \[[`4b691b562d`](https://github.com/nodejs/node/commit/4b691b562d)] - **doc**: mention --newVersion release script (Rafael Gonzaga) [#61255](https://github.com/nodejs/node/pull/61255) +- \[[`32e56ab71f`](https://github.com/nodejs/node/commit/32e56ab71f)] - **doc**: correct typo in api contributing doc (Mike McCready) [#61260](https://github.com/nodejs/node/pull/61260) +- \[[`9ebf1ffbeb`](https://github.com/nodejs/node/commit/9ebf1ffbeb)] - **doc**: add PR-URL requirement for security backports (Rafael Gonzaga) [#61256](https://github.com/nodejs/node/pull/61256) +- \[[`940f83d95d`](https://github.com/nodejs/node/commit/940f83d95d)] - **doc**: add reusePort error behavior to net module (mag123c) [#61250](https://github.com/nodejs/node/pull/61250) +- \[[`8881859ee0`](https://github.com/nodejs/node/commit/8881859ee0)] - **doc**: note corepack package removal in distribution doc (Mike McCready) [#61207](https://github.com/nodejs/node/pull/61207) +- \[[`03a1540cd1`](https://github.com/nodejs/node/commit/03a1540cd1)] - **doc**: fix tls.connect() timeout documentation (Azad Gupta) [#61079](https://github.com/nodejs/node/pull/61079) +- \[[`816ce7530d`](https://github.com/nodejs/node/commit/816ce7530d)] - **doc**: missing `passed`, `error` and `passed` properties on `TestContext` (Xavier Stouder) [#61185](https://github.com/nodejs/node/pull/61185) +- \[[`d825c8858a`](https://github.com/nodejs/node/commit/d825c8858a)] - **doc**: clarify threat model for application-level API exposure (Rafael Gonzaga) [#61184](https://github.com/nodejs/node/pull/61184) +- \[[`a3dd30d0e0`](https://github.com/nodejs/node/commit/a3dd30d0e0)] - **doc**: correct options for net.Socket class and socket.connect (Xavier Stouder) [#61179](https://github.com/nodejs/node/pull/61179) +- \[[`c3e776becd`](https://github.com/nodejs/node/commit/c3e776becd)] - **doc**: document error event on readline InterfaceConstructor (Xavier Stouder) [#61170](https://github.com/nodejs/node/pull/61170) +- \[[`05a6372d30`](https://github.com/nodejs/node/commit/05a6372d30)] - **doc**: add a smooth scrolling effect to the sidebar (btea) [#59007](https://github.com/nodejs/node/pull/59007) +- \[[`76a7eb09ef`](https://github.com/nodejs/node/commit/76a7eb09ef)] - **doc**: fix test settime docs (Efe) [#61117](https://github.com/nodejs/node/pull/61117) +- \[[`bcbbde6ccc`](https://github.com/nodejs/node/commit/bcbbde6ccc)] - **doc**: correct invalid collaborator profile (JJ) [#61091](https://github.com/nodejs/node/pull/61091) +- \[[`084741d09d`](https://github.com/nodejs/node/commit/084741d09d)] - **doc**: add a tip about developer mode on Windows (Joyee Cheung) [#61112](https://github.com/nodejs/node/pull/61112) +- \[[`ed4de371d3`](https://github.com/nodejs/node/commit/ed4de371d3)] - **doc**: exclude compile-time flag features from security policy (Matteo Collina) [#61109](https://github.com/nodejs/node/pull/61109) +- \[[`3999c2a910`](https://github.com/nodejs/node/commit/3999c2a910)] - **doc**: add @avivkeller to collaborators (Aviv Keller) [#61115](https://github.com/nodejs/node/pull/61115) +- \[[`f3ec066f1a`](https://github.com/nodejs/node/commit/f3ec066f1a)] - **doc**: warn about short GCM tags visibly (Tobias Nießen) [#61082](https://github.com/nodejs/node/pull/61082) +- \[[`fa542fbae6`](https://github.com/nodejs/node/commit/fa542fbae6)] - **doc**: add gurgunday to collaborators (Gürgün Dayıoğlu) [#61094](https://github.com/nodejs/node/pull/61094) +- \[[`49f36722dc`](https://github.com/nodejs/node/commit/49f36722dc)] - **doc**: mark sync module hooks as release candidate (Joyee Cheung) [#60960](https://github.com/nodejs/node/pull/60960) +- \[[`a0adc6afd2`](https://github.com/nodejs/node/commit/a0adc6afd2)] - **doc**: reorganize docs of module customization hooks (Joyee Cheung) [#60960](https://github.com/nodejs/node/pull/60960) +- \[[`a4097ca048`](https://github.com/nodejs/node/commit/a4097ca048)] - **doc**: mark crypto.hash as stable (Joyee Cheung) [#60994](https://github.com/nodejs/node/pull/60994) +- \[[`8a67c00bf5`](https://github.com/nodejs/node/commit/8a67c00bf5)] - **doc**: mark --build-snapshot and --build-snapshot-config as stable (Joyee Cheung) [#60954](https://github.com/nodejs/node/pull/60954) +- \[[`0c83169c35`](https://github.com/nodejs/node/commit/0c83169c35)] - **doc**: add File modes cross-references in fs methods (Mohit Raj Saxena) [#60286](https://github.com/nodejs/node/pull/60286) +- \[[`dae815262a`](https://github.com/nodejs/node/commit/dae815262a)] - **doc**: add missing `zstd` to mjs example of zlib (Deokjin Kim) [#60915](https://github.com/nodejs/node/pull/60915) +- \[[`28b284880e`](https://github.com/nodejs/node/commit/28b284880e)] - **doc**: clarify fileURLToPath security considerations (Rafael Gonzaga) [#60887](https://github.com/nodejs/node/pull/60887) +- \[[`6c440af39b`](https://github.com/nodejs/node/commit/6c440af39b)] - **doc**: show the use of string expressions in the SQLTagStore example (schliepa) [#60873](https://github.com/nodejs/node/pull/60873) +- \[[`4c5b62209c`](https://github.com/nodejs/node/commit/4c5b62209c)] - **doc**: replace column with columnNumber in example of `util.getCallSites` (Deokjin Kim) [#60881](https://github.com/nodejs/node/pull/60881) +- \[[`8875c9148e`](https://github.com/nodejs/node/commit/8875c9148e)] - **doc**: correct spelling in BUILDING.md (Rich Trott) [#60875](https://github.com/nodejs/node/pull/60875) +- \[[`d6cb762426`](https://github.com/nodejs/node/commit/d6cb762426)] - **doc**: update debuglog examples to use 'foo-bar' instead of 'foo' (xiaoyao) [#60867](https://github.com/nodejs/node/pull/60867) +- \[[`9eae518796`](https://github.com/nodejs/node/commit/9eae518796)] - **doc**: correct 'event handle' to 'event handler' in Utf8Stream drop event (Riddhi) [#60692](https://github.com/nodejs/node/pull/60692) +- \[[`c3c3ed27c1`](https://github.com/nodejs/node/commit/c3c3ed27c1)] - **doc**: fix typos in changelogs (Rich Trott) [#60855](https://github.com/nodejs/node/pull/60855) +- \[[`1b975e3017`](https://github.com/nodejs/node/commit/1b975e3017)] - **doc**: mark module.register as active development (Chengzhong Wu) [#60849](https://github.com/nodejs/node/pull/60849) +- \[[`6a6fc0c851`](https://github.com/nodejs/node/commit/6a6fc0c851)] - **doc**: add fullName property to SuiteContext (PaulyBearCoding) [#60762](https://github.com/nodejs/node/pull/60762) +- \[[`8347d734e6`](https://github.com/nodejs/node/commit/8347d734e6)] - **doc**: add additional codemods for deprecation (Augustin Mauroy) [#60811](https://github.com/nodejs/node/pull/60811) +- \[[`7cc87037c3`](https://github.com/nodejs/node/commit/7cc87037c3)] - **doc**: keep sidebar module visible when navigating docs (Botato) [#60410](https://github.com/nodejs/node/pull/60410) +- \[[`1c6618f643`](https://github.com/nodejs/node/commit/1c6618f643)] - **doc**: correct concurrency wording in test() documentation (Azad Gupta) [#60773](https://github.com/nodejs/node/pull/60773) +- \[[`488208004e`](https://github.com/nodejs/node/commit/488208004e)] - **doc**: clarify that CQ only picks up PRs targeting `main` (René) [#60731](https://github.com/nodejs/node/pull/60731) +- \[[`34517940c2`](https://github.com/nodejs/node/commit/34517940c2)] - **doc**: clarify license section and add contributor note (KaleruMadhu) [#60590](https://github.com/nodejs/node/pull/60590) +- \[[`f080721df4`](https://github.com/nodejs/node/commit/f080721df4)] - **doc**: correct and expand documentation for SQLTagStore (René) [#60200](https://github.com/nodejs/node/pull/60200) +- \[[`be3d26709d`](https://github.com/nodejs/node/commit/be3d26709d)] - **doc**: correct tls ALPNProtocols types (René) [#60143](https://github.com/nodejs/node/pull/60143) +- \[[`ef82c53131`](https://github.com/nodejs/node/commit/ef82c53131)] - **doc**: remove mention of SMS 2FA (Antoine du Hamel) [#60707](https://github.com/nodejs/node/pull/60707) +- \[[`11b190f63e`](https://github.com/nodejs/node/commit/11b190f63e)] - **doc**: add info about renamed flag in `cli.md` (Antoine du Hamel) [#60690](https://github.com/nodejs/node/pull/60690) +- \[[`59db9bc654`](https://github.com/nodejs/node/commit/59db9bc654)] - **doc**: fix incorrect slh-dsa oids in crypto.md (Artsiom Malakhau) [#60681](https://github.com/nodejs/node/pull/60681) +- \[[`ad52750cf6`](https://github.com/nodejs/node/commit/ad52750cf6)] - **doc**: `domain.add()` does not accept timer objects (René) [#60675](https://github.com/nodejs/node/pull/60675) +- \[[`2592d94e29`](https://github.com/nodejs/node/commit/2592d94e29)] - **doc**: fix v24 changelog after security release (Marco Ippolito) [#61371](https://github.com/nodejs/node/pull/61371) +- \[[`e0f4ad0af0`](https://github.com/nodejs/node/commit/e0f4ad0af0)] - **doc,test**: add documentation and test on how to use addons in SEA (Joyee Cheung) [#59582](https://github.com/nodejs/node/pull/59582) +- \[[`13af640d94`](https://github.com/nodejs/node/commit/13af640d94)] - **esm**: ensure watch mode restarts after syntax errors (Xavier Stouder) [#61232](https://github.com/nodejs/node/pull/61232) +- \[[`31afe95d15`](https://github.com/nodejs/node/commit/31afe95d15)] - **esm**: avoid throw when module specifier is not url (Craig Macomber (Microsoft)) [#61000](https://github.com/nodejs/node/pull/61000) +- \[[`311a04cf2d`](https://github.com/nodejs/node/commit/311a04cf2d)] - **esm**: improve error messages for ambiguous module syntax (mag123c) [#60376](https://github.com/nodejs/node/pull/60376) +- \[[`cacef92937`](https://github.com/nodejs/node/commit/cacef92937)] - **events**: remove redundant todo (Gürgün Dayıoğlu) [#60595](https://github.com/nodejs/node/pull/60595) +- \[[`42e1f72561`](https://github.com/nodejs/node/commit/42e1f72561)] - **events**: remove eventtarget custom inspect branding (Efe) [#61128](https://github.com/nodejs/node/pull/61128) +- \[[`fd8b61369b`](https://github.com/nodejs/node/commit/fd8b61369b)] - **fs**: remove duplicate getValidatedPath calls (Mert Can Altin) [#61359](https://github.com/nodejs/node/pull/61359) +- \[[`9bb9fc7f2c`](https://github.com/nodejs/node/commit/9bb9fc7f2c)] - **fs**: fix errorOnExist behavior for directory copy in fs.cp (Nicholas Paun) [#60946](https://github.com/nodejs/node/pull/60946) +- \[[`55a3c70780`](https://github.com/nodejs/node/commit/55a3c70780)] - **fs**: fix ENOTDIR in globSync when file is treated as dir (sangwook) [#61259](https://github.com/nodejs/node/pull/61259) +- \[[`073a145095`](https://github.com/nodejs/node/commit/073a145095)] - **fs**: remove duplicate fd validation in sync functions (Mert Can Altin) [#61361](https://github.com/nodejs/node/pull/61361) +- \[[`b132ecdf60`](https://github.com/nodejs/node/commit/b132ecdf60)] - **fs**: validate statfs path (Efe) [#61230](https://github.com/nodejs/node/pull/61230) +- \[[`0ed0a30f74`](https://github.com/nodejs/node/commit/0ed0a30f74)] - **fs**: fix rmSync to handle non-ASCII characters (Yeaseen) [#61108](https://github.com/nodejs/node/pull/61108) +- \[[`99632b1a3b`](https://github.com/nodejs/node/commit/99632b1a3b)] - **fs**: remove broken symlinks in rmSync (sangwook) [#61040](https://github.com/nodejs/node/pull/61040) +- \[[`9cb6757a67`](https://github.com/nodejs/node/commit/9cb6757a67)] - **fs**: detect dot files when using globstar (Robin van Wijngaarden) [#61012](https://github.com/nodejs/node/pull/61012) +- \[[`e22aad19e0`](https://github.com/nodejs/node/commit/e22aad19e0)] - **gyp**: aix: change gcc version detection so CXX="ccache g++" works (Stewart X Addison) [#61464](https://github.com/nodejs/node/pull/61464) +- \[[`59d94ba7e7`](https://github.com/nodejs/node/commit/59d94ba7e7)] - **http**: fix rawHeaders exceeding maxHeadersCount limit (Max Harari) [#61285](https://github.com/nodejs/node/pull/61285) +- \[[`ae6a1fd40a`](https://github.com/nodejs/node/commit/ae6a1fd40a)] - **http,https**: fix double ERR_PROXY_TUNNEL emission (Shima Ryuhei) [#60699](https://github.com/nodejs/node/pull/60699) +- \[[`53bfbaa4b1`](https://github.com/nodejs/node/commit/53bfbaa4b1)] - **http2**: validate initialWindowSize per HTTP/2 spec (Matteo Collina) [#61402](https://github.com/nodejs/node/pull/61402) +- \[[`14b421b677`](https://github.com/nodejs/node/commit/14b421b677)] - **http2,zlib**: prefer `call()` over `apply()` if argument list is not array (Livia Medeiros) [#60834](https://github.com/nodejs/node/pull/60834) +- \[[`32b03d0604`](https://github.com/nodejs/node/commit/32b03d0604)] - **(CVE-2025-59465)** **lib**: add TLSSocket default error handler (RafaelGSS) [nodejs-private/node-private#750](https://github.com/nodejs-private/node-private/pull/750) +- \[[`4ef7a6c77e`](https://github.com/nodejs/node/commit/4ef7a6c77e)] - **lib**: backport `_tls_common` and `_tls_wrap` refactors (Dario Piotrowicz) [#57643](https://github.com/nodejs/node/pull/57643) +- \[[`820e0a5cfa`](https://github.com/nodejs/node/commit/820e0a5cfa)] - **lib**: fix typo in `util.js` comment (Taejin Kim) [#61365](https://github.com/nodejs/node/pull/61365) +- \[[`8de391e1cb`](https://github.com/nodejs/node/commit/8de391e1cb)] - **lib**: fix TypeScript support check in jitless mode (sangwook) [#61382](https://github.com/nodejs/node/pull/61382) +- \[[`f22f622b3e`](https://github.com/nodejs/node/commit/f22f622b3e)] - **lib**: add lint rules for reflective function calls (Michaël Zasso) [#60825](https://github.com/nodejs/node/pull/60825) +- \[[`603f0bf8e1`](https://github.com/nodejs/node/commit/603f0bf8e1)] - **lib**: implement all 1-byte encodings in js (Сковорода Никита Андреевич) [#61093](https://github.com/nodejs/node/pull/61093) +- \[[`1c0a1aa5ef`](https://github.com/nodejs/node/commit/1c0a1aa5ef)] - **lib**: gbk decoder is gb18030 decoder per spec (Сковорода Никита Андреевич) [#61099](https://github.com/nodejs/node/pull/61099) +- \[[`2cf963df73`](https://github.com/nodejs/node/commit/2cf963df73)] - **lib**: enforce use of `URLParse` (Antoine du Hamel) [#61016](https://github.com/nodejs/node/pull/61016) +- \[[`bb90630470`](https://github.com/nodejs/node/commit/bb90630470)] - **lib**: use `FastBuffer` for empty buffer allocation (Gürgün Dayıoğlu) [#60558](https://github.com/nodejs/node/pull/60558) +- \[[`10893a6f13`](https://github.com/nodejs/node/commit/10893a6f13)] - **lib**: refactor JWK import PQC support check (Filip Skokan) [#60586](https://github.com/nodejs/node/pull/60586) +- \[[`d43806291f`](https://github.com/nodejs/node/commit/d43806291f)] - **lib,src**: isInsideNodeModules should test on the first non-internal frame (Chengzhong Wu) [#60991](https://github.com/nodejs/node/pull/60991) +- \[[`0bb8f5fe03`](https://github.com/nodejs/node/commit/0bb8f5fe03)] - **lib,src,test**: fix tests without SQLite (Antoine du Hamel) [#60906](https://github.com/nodejs/node/pull/60906) +- \[[`f3fe0e7fc2`](https://github.com/nodejs/node/commit/f3fe0e7fc2)] - **lib,test**: enforce use of `assert.fail` via a lint rule (Antoine du Hamel) [#61004](https://github.com/nodejs/node/pull/61004) +- \[[`8b783d46ef`](https://github.com/nodejs/node/commit/8b783d46ef)] - **meta**: do not fast-track npm updates (Antoine du Hamel) [#61475](https://github.com/nodejs/node/pull/61475) +- \[[`de4a11b50e`](https://github.com/nodejs/node/commit/de4a11b50e)] - **meta**: fix typos in issue template config (Daijiro Wachi) [#61399](https://github.com/nodejs/node/pull/61399) +- \[[`97b1492783`](https://github.com/nodejs/node/commit/97b1492783)] - **meta**: label v8 module PRs (René) [#61325](https://github.com/nodejs/node/pull/61325) +- \[[`9bf899b743`](https://github.com/nodejs/node/commit/9bf899b743)] - **meta**: bump step-security/harden-runner from 2.13.2 to 2.14.0 (dependabot\[bot]) [#61245](https://github.com/nodejs/node/pull/61245) +- \[[`4df7134324`](https://github.com/nodejs/node/commit/4df7134324)] - **meta**: bump actions/setup-node from 6.0.0 to 6.1.0 (dependabot\[bot]) [#61244](https://github.com/nodejs/node/pull/61244) +- \[[`ff98f610d8`](https://github.com/nodejs/node/commit/ff98f610d8)] - **meta**: bump actions/cache from 4.3.0 to 5.0.1 (dependabot\[bot]) [#61243](https://github.com/nodejs/node/pull/61243) +- \[[`86950a41ab`](https://github.com/nodejs/node/commit/86950a41ab)] - **meta**: bump github/codeql-action from 4.31.6 to 4.31.9 (dependabot\[bot]) [#61241](https://github.com/nodejs/node/pull/61241) +- \[[`96901b4828`](https://github.com/nodejs/node/commit/96901b4828)] - **meta**: bump codecov/codecov-action from 5.5.1 to 5.5.2 (dependabot\[bot]) [#61240](https://github.com/nodejs/node/pull/61240) +- \[[`c90fc7c0d3`](https://github.com/nodejs/node/commit/c90fc7c0d3)] - **meta**: bump peter-evans/create-pull-request from 7.0.9 to 8.0.0 (dependabot\[bot]) [#61237](https://github.com/nodejs/node/pull/61237) +- \[[`f130d4b6de`](https://github.com/nodejs/node/commit/f130d4b6de)] - **meta**: move lukekarrys to emeritus (Node.js GitHub Bot) [#60985](https://github.com/nodejs/node/pull/60985) +- \[[`416f34ccfc`](https://github.com/nodejs/node/commit/416f34ccfc)] - **meta**: bump actions/setup-python from 6.0.0 to 6.1.0 (dependabot\[bot]) [#60927](https://github.com/nodejs/node/pull/60927) +- \[[`2239939305`](https://github.com/nodejs/node/commit/2239939305)] - **meta**: bump github/codeql-action from 4.31.3 to 4.31.6 (dependabot\[bot]) [#60926](https://github.com/nodejs/node/pull/60926) +- \[[`7f146b6a97`](https://github.com/nodejs/node/commit/7f146b6a97)] - **meta**: bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 (dependabot\[bot]) [#60924](https://github.com/nodejs/node/pull/60924) +- \[[`d9020f0089`](https://github.com/nodejs/node/commit/d9020f0089)] - **meta**: bump github/codeql-action from 4.31.2 to 4.31.3 (dependabot\[bot]) [#60770](https://github.com/nodejs/node/pull/60770) +- \[[`4bba259d3b`](https://github.com/nodejs/node/commit/4bba259d3b)] - **meta**: bump step-security/harden-runner from 2.13.1 to 2.13.2 (dependabot\[bot]) [#60769](https://github.com/nodejs/node/pull/60769) +- \[[`ff11eda2f2`](https://github.com/nodejs/node/commit/ff11eda2f2)] - **meta**: add Renegade334 to collaborators (Renegade334) [#60714](https://github.com/nodejs/node/pull/60714) +- \[[`e3b5593c0f`](https://github.com/nodejs/node/commit/e3b5593c0f)] - **module**: fix sync resolve hooks for require with node: prefixes (Joyee Cheung) [#61088](https://github.com/nodejs/node/pull/61088) +- \[[`edec5be805`](https://github.com/nodejs/node/commit/edec5be805)] - **module**: preserve URL in the parent created by createRequire() (Joyee Cheung) [#60974](https://github.com/nodejs/node/pull/60974) +- \[[`5cc3596eb4`](https://github.com/nodejs/node/commit/5cc3596eb4)] - **node-api**: fix node_api_create_object_with_properties name (Vladimir Morozov) [#61319](https://github.com/nodejs/node/pull/61319) +- \[[`179162fe42`](https://github.com/nodejs/node/commit/179162fe42)] - **node-api**: use Node-API in comments (Vladimir Morozov) [#61320](https://github.com/nodejs/node/pull/61320) +- \[[`b3fe457a89`](https://github.com/nodejs/node/commit/b3fe457a89)] - **node-api**: add napi_set_prototype (siaeyy) [#60711](https://github.com/nodejs/node/pull/60711) +- \[[`1e13e84f16`](https://github.com/nodejs/node/commit/1e13e84f16)] - **node-api**: fix data race and use-after-free in napi_threadsafe_function (Mika Fischer) [#55877](https://github.com/nodejs/node/pull/55877) +- \[[`36ce6d636d`](https://github.com/nodejs/node/commit/36ce6d636d)] - **node-api**: add support for Float16Array (Ilyas Shabi) [#58879](https://github.com/nodejs/node/pull/58879) +- \[[`95e6659e2b`](https://github.com/nodejs/node/commit/95e6659e2b)] - **node-api**: support SharedArrayBuffer in napi_create_dataview (Kevin Eady) [#60473](https://github.com/nodejs/node/pull/60473) +- \[[`54f58e2fb2`](https://github.com/nodejs/node/commit/54f58e2fb2)] - **os**: freeze signals constant (Xavier Stouder) [#61038](https://github.com/nodejs/node/pull/61038) +- \[[`31489310f8`](https://github.com/nodejs/node/commit/31489310f8)] - **process**: improve process.cwd() error message (TseIan) [#61164](https://github.com/nodejs/node/pull/61164) +- \[[`f7450a90ed`](https://github.com/nodejs/node/commit/f7450a90ed)] - **repl**: move completion logic to internal module (Dario Piotrowicz) [#59889](https://github.com/nodejs/node/pull/59889) +- \[[`27117625df`](https://github.com/nodejs/node/commit/27117625df)] - **sqlite**: add some tests (Guilherme Araújo) [#61410](https://github.com/nodejs/node/pull/61410) +- \[[`d56066ce8c`](https://github.com/nodejs/node/commit/d56066ce8c)] - **sqlite**: improve error messages for tag store (Pramit Sharma) [#61096](https://github.com/nodejs/node/pull/61096) +- \[[`9d993be6c1`](https://github.com/nodejs/node/commit/9d993be6c1)] - **sqlite**: make `SQLTagStore.prototype.size` a getter (René) [#60246](https://github.com/nodejs/node/pull/60246) +- \[[`ceaa200d16`](https://github.com/nodejs/node/commit/ceaa200d16)] - **src**: improve StringBytes::Encode perf on UTF8 (Сковорода Никита Андреевич) [#61131](https://github.com/nodejs/node/pull/61131) +- \[[`034a5f2346`](https://github.com/nodejs/node/commit/034a5f2346)] - **src**: add missing override specifier to Clean() (Tobias Nießen) [#61429](https://github.com/nodejs/node/pull/61429) +- \[[`977f46cc20`](https://github.com/nodejs/node/commit/977f46cc20)] - **src**: cache context lookup in vectored io loops (Mert Can Altin) [#61387](https://github.com/nodejs/node/pull/61387) +- \[[`bb9e4e0784`](https://github.com/nodejs/node/commit/bb9e4e0784)] - **src**: cache missing package.json files in the C++ package config cache (Michael Smith) [#60425](https://github.com/nodejs/node/pull/60425) +- \[[`c1aa9f49cd`](https://github.com/nodejs/node/commit/c1aa9f49cd)] - **src**: use starts_with instead of rfind/find (Tobias Nießen) [#61426](https://github.com/nodejs/node/pull/61426) +- \[[`d3676d0a82`](https://github.com/nodejs/node/commit/d3676d0a82)] - **src**: use C++ nullptr in sqlite (Tobias Nießen) [#61416](https://github.com/nodejs/node/pull/61416) +- \[[`001be8aa7c`](https://github.com/nodejs/node/commit/001be8aa7c)] - **src**: use C++ nullptr in webstorage (Tobias Nießen) [#61407](https://github.com/nodejs/node/pull/61407) +- \[[`4f832b1e3d`](https://github.com/nodejs/node/commit/4f832b1e3d)] - **src**: fix pointer alignment (jhofstee) [#61336](https://github.com/nodejs/node/pull/61336) +- \[[`a0a8c96fd1`](https://github.com/nodejs/node/commit/a0a8c96fd1)] - **src**: dump snapshot source with node:generate_default_snapshot_source (Joyee Cheung) [#61101](https://github.com/nodejs/node/pull/61101) +- \[[`b6d3caeda8`](https://github.com/nodejs/node/commit/b6d3caeda8)] - **src**: improve StringBytes::Encode perf on ASCII (Сковорода Никита Андреевич) [#61119](https://github.com/nodejs/node/pull/61119) +- \[[`9c80e5ac87`](https://github.com/nodejs/node/commit/9c80e5ac87)] - **src**: add HandleScope to edge loop in heap_utils (Mert Can Altin) [#60885](https://github.com/nodejs/node/pull/60885) +- \[[`09ccd94312`](https://github.com/nodejs/node/commit/09ccd94312)] - **src**: remove redundant CHECK (Tobias Nießen) [#61130](https://github.com/nodejs/node/pull/61130) +- \[[`6008354b8a`](https://github.com/nodejs/node/commit/6008354b8a)] - **src**: remove unused private field in `SQLTagStore` (Michaël Zasso) [#61027](https://github.com/nodejs/node/pull/61027) +- \[[`7484a34a7d`](https://github.com/nodejs/node/commit/7484a34a7d)] - **src**: implement Windows-1252 encoding support and update related tests (Mert Can Altin) [#60893](https://github.com/nodejs/node/pull/60893) +- \[[`47851db855`](https://github.com/nodejs/node/commit/47851db855)] - **src**: fix off-thread cert loading in bundled cert mode (Joyee Cheung) [#60764](https://github.com/nodejs/node/pull/60764) +- \[[`4702a8696b`](https://github.com/nodejs/node/commit/4702a8696b)] - **src**: handle DER decoding errors from system certificates (Joyee Cheung) [#60787](https://github.com/nodejs/node/pull/60787) +- \[[`19a4926965`](https://github.com/nodejs/node/commit/19a4926965)] - **src**: use static_cast instead of C-style cast (Michaël Zasso) [#60868](https://github.com/nodejs/node/pull/60868) +- \[[`6529334dec`](https://github.com/nodejs/node/commit/6529334dec)] - **src**: add test flag to config file (Marco Ippolito) [#60798](https://github.com/nodejs/node/pull/60798) +- \[[`d153b30773`](https://github.com/nodejs/node/commit/d153b30773)] - **src**: split inspector protocol domains files (Chengzhong Wu) [#60754](https://github.com/nodejs/node/pull/60754) +- \[[`7191b847c6`](https://github.com/nodejs/node/commit/7191b847c6)] - **src,permission**: fix permission.has on empty param (Rafael Gonzaga) [#60674](https://github.com/nodejs/node/pull/60674) +- \[[`a188b954bb`](https://github.com/nodejs/node/commit/a188b954bb)] - **src,permission**: add debug log on is_tree_granted (Rafael Gonzaga) [#60668](https://github.com/nodejs/node/pull/60668) +- \[[`b483b5a8ea`](https://github.com/nodejs/node/commit/b483b5a8ea)] - **stream**: export namespace object from internal end-of-stream module (René) [#61455](https://github.com/nodejs/node/pull/61455) +- \[[`0472104536`](https://github.com/nodejs/node/commit/0472104536)] - **stream**: fix isErrored/isWritable for WritableStreams (René) [#60905](https://github.com/nodejs/node/pull/60905) +- \[[`dd13f1046f`](https://github.com/nodejs/node/commit/dd13f1046f)] - **test**: skip --build-sea tests on platforms where SEA is flaky (Joyee Cheung) [#61504](https://github.com/nodejs/node/pull/61504) +- \[[`6c18bf26f4`](https://github.com/nodejs/node/commit/6c18bf26f4)] - **test**: update WPT for url to 81a2aed262 (Node.js GitHub Bot) [#61509](https://github.com/nodejs/node/pull/61509) +- \[[`f511c24d6b`](https://github.com/nodejs/node/commit/f511c24d6b)] - **test**: fix flaky debugger test (Ryuhei Shima) [#58324](https://github.com/nodejs/node/pull/58324) +- \[[`41710ba953`](https://github.com/nodejs/node/commit/41710ba953)] - **test**: ensure removeListener event fires for once() listeners (sangwook) [#60137](https://github.com/nodejs/node/pull/60137) +- \[[`0035f3fa0f`](https://github.com/nodejs/node/commit/0035f3fa0f)] - **test**: delay writing the files only on macOS (Luigi Pinca) [#61532](https://github.com/nodejs/node/pull/61532) +- \[[`99c29eb261`](https://github.com/nodejs/node/commit/99c29eb261)] - **test**: add implicit test for fs dispose handling with using (Ilyas Shabi) [#61140](https://github.com/nodejs/node/pull/61140) +- \[[`e349d34c8a`](https://github.com/nodejs/node/commit/e349d34c8a)] - **test**: check new WebCryptoAPI enum values (Filip Skokan) [#61406](https://github.com/nodejs/node/pull/61406) +- \[[`e75617d25f`](https://github.com/nodejs/node/commit/e75617d25f)] - **test**: split test-esm-loader-hooks (Joyee Cheung) [#61374](https://github.com/nodejs/node/pull/61374) +- \[[`42110af62a`](https://github.com/nodejs/node/commit/42110af62a)] - **test**: aix: mark test-emit-on-destroyed as flaky (Stewart X Addison) [#61381](https://github.com/nodejs/node/pull/61381) +- \[[`180fdbf188`](https://github.com/nodejs/node/commit/180fdbf188)] - **test**: update url web-platform tests (Yagiz Nizipli) [#61315](https://github.com/nodejs/node/pull/61315) +- \[[`4bac4ecd9d`](https://github.com/nodejs/node/commit/4bac4ecd9d)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60761](https://github.com/nodejs/node/pull/60761) +- \[[`39ca74e57e`](https://github.com/nodejs/node/commit/39ca74e57e)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60759](https://github.com/nodejs/node/pull/60759) +- \[[`7327b04875`](https://github.com/nodejs/node/commit/7327b04875)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60726](https://github.com/nodejs/node/pull/60726) +- \[[`fd6601c710`](https://github.com/nodejs/node/commit/fd6601c710)] - **test**: asserts that import.meta.resolve invokes sync loader hooks (Chengzhong Wu) [#61158](https://github.com/nodejs/node/pull/61158) +- \[[`da4d4d4fde`](https://github.com/nodejs/node/commit/da4d4d4fde)] - **test**: check util.parseArgs argv parsing with actual process execution (René) [#61089](https://github.com/nodejs/node/pull/61089) +- \[[`368b32d410`](https://github.com/nodejs/node/commit/368b32d410)] - **test**: update WPT for urlpattern to a2e15ad405 (Node.js GitHub Bot) [#61134](https://github.com/nodejs/node/pull/61134) +- \[[`e880062de8`](https://github.com/nodejs/node/commit/e880062de8)] - **test**: make buffer sizes 32bit-aware in test-internal-util-construct-sab (René) [#61026](https://github.com/nodejs/node/pull/61026) +- \[[`f2706e1166`](https://github.com/nodejs/node/commit/f2706e1166)] - **test**: remove unneccessary repl magic_mode tests (Dario Piotrowicz) [#61053](https://github.com/nodejs/node/pull/61053) +- \[[`327dd25f86`](https://github.com/nodejs/node/commit/327dd25f86)] - **test**: skip sea tests on riscv64 (Stewart X Addison) [#61111](https://github.com/nodejs/node/pull/61111) +- \[[`6da34027e2`](https://github.com/nodejs/node/commit/6da34027e2)] - **test**: simplify `test-cli-node-options-docs` (Antoine du Hamel) [#61006](https://github.com/nodejs/node/pull/61006) +- \[[`74df70d1da`](https://github.com/nodejs/node/commit/74df70d1da)] - **test**: mark stringbytes-external-max flaky on AIX (Stewart X Addison) [#60995](https://github.com/nodejs/node/pull/60995) +- \[[`5513338446`](https://github.com/nodejs/node/commit/5513338446)] - **test**: update test426 fixtures (Rich Trott) [#60982](https://github.com/nodejs/node/pull/60982) +- \[[`9f594f53a7`](https://github.com/nodejs/node/commit/9f594f53a7)] - **test**: update WPT for urlpattern to aed1f3d244 (Node.js GitHub Bot) [#60642](https://github.com/nodejs/node/pull/60642) +- \[[`18e3b91bf1`](https://github.com/nodejs/node/commit/18e3b91bf1)] - **test**: deflake `test-repl-paste-big-data` (Livia Medeiros) [#60975](https://github.com/nodejs/node/pull/60975) +- \[[`28ecdc5c98`](https://github.com/nodejs/node/commit/28ecdc5c98)] - **test**: skip SEA inspect test if inspector is not available (Livia Medeiros) [#60872](https://github.com/nodejs/node/pull/60872) +- \[[`24a50b31e0`](https://github.com/nodejs/node/commit/24a50b31e0)] - **test**: update WPT for WebCryptoAPI to 1e4933113d (Node.js GitHub Bot) [#60896](https://github.com/nodejs/node/pull/60896) +- \[[`78ad2f4dad`](https://github.com/nodejs/node/commit/78ad2f4dad)] - **test**: lint more `assert(regexp.test(...))` cases (René) [#60878](https://github.com/nodejs/node/pull/60878) +- \[[`280d567e1c`](https://github.com/nodejs/node/commit/280d567e1c)] - **test**: use `assert.match` for non-literal regexp tests (René) [#60879](https://github.com/nodejs/node/pull/60879) +- \[[`74b14258cb`](https://github.com/nodejs/node/commit/74b14258cb)] - **test**: fix embedtest in debug windows (Vladimir Morozov) [#60806](https://github.com/nodejs/node/pull/60806) +- \[[`163c17de51`](https://github.com/nodejs/node/commit/163c17de51)] - **test**: skip failing tests when compiled without amaro (Yuki Okita) [#60815](https://github.com/nodejs/node/pull/60815) +- \[[`5763a304d2`](https://github.com/nodejs/node/commit/5763a304d2)] - **test**: fix debug test crashes caused by sea tests (Vladimir Morozov) [#60807](https://github.com/nodejs/node/pull/60807) +- \[[`1fb83e240d`](https://github.com/nodejs/node/commit/1fb83e240d)] - **test**: add lint rule to forbid use of `assert.ok(/regex/.test(…))` (Antoine du Hamel) [#60832](https://github.com/nodejs/node/pull/60832) +- \[[`8c97827913`](https://github.com/nodejs/node/commit/8c97827913)] - **test**: replace deprecated regex test assertions in http trailers test (Aditya Chopra) [#60831](https://github.com/nodejs/node/pull/60831) +- \[[`a88bffeedc`](https://github.com/nodejs/node/commit/a88bffeedc)] - **test**: prefer major GC in cppgc-object teardown (sangwook) [#60672](https://github.com/nodejs/node/pull/60672) +- \[[`2e2963f3ed`](https://github.com/nodejs/node/commit/2e2963f3ed)] - **test**: ensure assertions are reached on HTTP2 tests (Antoine du Hamel) [#60730](https://github.com/nodejs/node/pull/60730) +- \[[`9b748942ec`](https://github.com/nodejs/node/commit/9b748942ec)] - **test**: ensure assertions are reached on HTTP tests (Antoine du Hamel) [#60729](https://github.com/nodejs/node/pull/60729) +- \[[`37947e0adf`](https://github.com/nodejs/node/commit/37947e0adf)] - **test**: skip test that cause timeout on IBM i (SRAVANI GUNDEPALLI) [#60700](https://github.com/nodejs/node/pull/60700) +- \[[`357825979e`](https://github.com/nodejs/node/commit/357825979e)] - **test**: add missing r.close() calls in REPL multiline tests (sangwook) [#60226](https://github.com/nodejs/node/pull/60226) +- \[[`ccecbd9f80`](https://github.com/nodejs/node/commit/ccecbd9f80)] - **test**: update WPT for WebCryptoAPI to c58b6f4e0e (Node.js GitHub Bot) [#60702](https://github.com/nodejs/node/pull/60702) +- \[[`63a2400c64`](https://github.com/nodejs/node/commit/63a2400c64)] - **test**: limit the concurrency of WPTRunner for RISC-V (Levi Zim) [#60591](https://github.com/nodejs/node/pull/60591) +- \[[`ec40989dfb`](https://github.com/nodejs/node/commit/ec40989dfb)] - **test**: fix test-strace-openat-openssl for RISC-V (Levi Zim) [#60588](https://github.com/nodejs/node/pull/60588) +- \[[`b09129df18`](https://github.com/nodejs/node/commit/b09129df18)] - **test**: split test-runner-run-watch.mjs (Joyee Cheung) [#60653](https://github.com/nodejs/node/pull/60653) +- \[[`0f05221aec`](https://github.com/nodejs/node/commit/0f05221aec)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60641](https://github.com/nodejs/node/pull/60641) +- \[[`078cfa2cd6`](https://github.com/nodejs/node/commit/078cfa2cd6)] - **test_runner**: fix memory leaks in runner (Abhishek Kv. Savani) [#60860](https://github.com/nodejs/node/pull/60860) +- \[[`73146e9c50`](https://github.com/nodejs/node/commit/73146e9c50)] - **test_runner**: fix coverage report when a directory is named file (Heath Dutton🕴️) [#61169](https://github.com/nodejs/node/pull/61169) +- \[[`8fc61e45e2`](https://github.com/nodejs/node/commit/8fc61e45e2)] - **test_runner**: print info when test restarts (Xavier Stouder) [#61160](https://github.com/nodejs/node/pull/61160) +- \[[`9382be5b16`](https://github.com/nodejs/node/commit/9382be5b16)] - **test_runner**: fix rerun ambiguous test failures (Moshe Atlow) [#61392](https://github.com/nodejs/node/pull/61392) +- \[[`ce417b14c0`](https://github.com/nodejs/node/commit/ce417b14c0)] - **test_runner**: nix dead reporter code (Vas Sudanagunta) [#59700](https://github.com/nodejs/node/pull/59700) +- \[[`ce79c72829`](https://github.com/nodejs/node/commit/ce79c72829)] - **test_runner**: fix lazy `test.assert` accessor (René) [#61097](https://github.com/nodejs/node/pull/61097) +- \[[`9a25541bd2`](https://github.com/nodejs/node/commit/9a25541bd2)] - **test_runner**: propagate V8 options to child process (Pietro Marchini) [#60999](https://github.com/nodejs/node/pull/60999) +- \[[`d61b0584ca`](https://github.com/nodejs/node/commit/d61b0584ca)] - **test_runner**: fix line feed escaping in JUnit (Aliaksandr) [#60274](https://github.com/nodejs/node/pull/60274) +- \[[`fc98343591`](https://github.com/nodejs/node/commit/fc98343591)] - **test_runner**: simplify code and make it more consistent (Antoine du Hamel) [#60777](https://github.com/nodejs/node/pull/60777) +- \[[`36e29bf400`](https://github.com/nodejs/node/commit/36e29bf400)] - **(CVE-2026-21637)** **tls**: route callback exceptions through error handlers (Matteo Collina) [nodejs-private/node-private#782](https://github.com/nodejs-private/node-private/pull/782) +- \[[`bc610a825d`](https://github.com/nodejs/node/commit/bc610a825d)] - **tools**: update gyp-next to 0.21.1 (Node.js GitHub Bot) [#61528](https://github.com/nodejs/node/pull/61528) +- \[[`c335462a6a`](https://github.com/nodejs/node/commit/c335462a6a)] - **tools**: validate release commit diff as part of `lint-release-proposal` (Antoine du Hamel) [#61440](https://github.com/nodejs/node/pull/61440) +- \[[`0e53c48ab6`](https://github.com/nodejs/node/commit/0e53c48ab6)] - **tools**: fix vcbuild lint-js-build (Vladimir Morozov) [#61318](https://github.com/nodejs/node/pull/61318) +- \[[`f989fdc469`](https://github.com/nodejs/node/commit/f989fdc469)] - **tools**: bump the eslint group in /tools/eslint with 2 updates (dependabot\[bot]) [#61246](https://github.com/nodejs/node/pull/61246) +- \[[`f104719490`](https://github.com/nodejs/node/commit/f104719490)] - **tools**: only report commit validation failure on Slack (Antoine du Hamel) [#61124](https://github.com/nodejs/node/pull/61124) +- \[[`0267293e79`](https://github.com/nodejs/node/commit/0267293e79)] - **tools**: use sparse-checkout in linter jobs (Antoine du Hamel) [#61123](https://github.com/nodejs/node/pull/61123) +- \[[`2c861d4bd4`](https://github.com/nodejs/node/commit/2c861d4bd4)] - **tools**: simplify `notify-on-push` (Antoine du Hamel) [#61050](https://github.com/nodejs/node/pull/61050) +- \[[`678f2caa71`](https://github.com/nodejs/node/commit/678f2caa71)] - **tools**: fix update-nghttp2 signature verification (Richard Lau) [#61035](https://github.com/nodejs/node/pull/61035) +- \[[`2ef5be0570`](https://github.com/nodejs/node/commit/2ef5be0570)] - **tools**: improve log output of `create-release-proposal` (Antoine du Hamel) [#61028](https://github.com/nodejs/node/pull/61028) +- \[[`cd5c76cffe`](https://github.com/nodejs/node/commit/cd5c76cffe)] - **tools**: fix `vcbuild test` when path contain spaces (stduhpf) [#56481](https://github.com/nodejs/node/pull/56481) +- \[[`da6cb8e1d2`](https://github.com/nodejs/node/commit/da6cb8e1d2)] - **tools**: do not run `test-linux` workflow for changes on `vcbuild.bat` (Antoine du Hamel) [#60979](https://github.com/nodejs/node/pull/60979) +- \[[`49f7a8c07a`](https://github.com/nodejs/node/commit/49f7a8c07a)] - **tools**: bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /tools/doc (dependabot\[bot]) [#60930](https://github.com/nodejs/node/pull/60930) +- \[[`4f12d38359`](https://github.com/nodejs/node/commit/4f12d38359)] - **tools**: replace deprecated eslint-plugin-markdown (Michaël Zasso) [#60908](https://github.com/nodejs/node/pull/60908) +- \[[`78aef6c098`](https://github.com/nodejs/node/commit/78aef6c098)] - **tools**: remove deprecated ESLint plugins (Michaël Zasso) [#60908](https://github.com/nodejs/node/pull/60908) +- \[[`de57704198`](https://github.com/nodejs/node/commit/de57704198)] - **tools**: update ESLint dependencies (Michaël Zasso) [#60908](https://github.com/nodejs/node/pull/60908) +- \[[`fd155c9764`](https://github.com/nodejs/node/commit/fd155c9764)] - **tools**: disable some new cpplint rules before update (Michaël Zasso) [#60901](https://github.com/nodejs/node/pull/60901) +- \[[`f7f987305b`](https://github.com/nodejs/node/commit/f7f987305b)] - **tools**: don't fetch V8 deps in the source tree (Richard Lau) [#60883](https://github.com/nodejs/node/pull/60883) +- \[[`f7a7e363f9`](https://github.com/nodejs/node/commit/f7a7e363f9)] - **tools**: add temporal updater (Chengzhong Wu) [#60828](https://github.com/nodejs/node/pull/60828) +- \[[`a7bb9746ba`](https://github.com/nodejs/node/commit/a7bb9746ba)] - **tools**: dump config.gypi as json (Chengzhong Wu) [#60794](https://github.com/nodejs/node/pull/60794) +- \[[`23792b1334`](https://github.com/nodejs/node/commit/23792b1334)] - **tools**: bump js-yaml from 4.1.0 to 4.1.1 in /tools/lint-md (dependabot\[bot]) [#60781](https://github.com/nodejs/node/pull/60781) +- \[[`5b75fec005`](https://github.com/nodejs/node/commit/5b75fec005)] - **tools**: bump js-yaml from 4.1.0 to 4.1.1 in /tools/doc in the doc group (dependabot\[bot]) [#60766](https://github.com/nodejs/node/pull/60766) +- \[[`a8cf03323b`](https://github.com/nodejs/node/commit/a8cf03323b)] - **tools**: update install_tools.bat old echo from 2019 to 2022 (David Hidalgo) [#60736](https://github.com/nodejs/node/pull/60736) +- \[[`1e9281e147`](https://github.com/nodejs/node/commit/1e9281e147)] - **tools**: remove unsupported `cooldown` from Dependabot config (Antoine du Hamel) [#60747](https://github.com/nodejs/node/pull/60747) +- \[[`497184baff`](https://github.com/nodejs/node/commit/497184baff)] - **tools**: update sccache to v0.12.0 (Michaël Zasso) [#60723](https://github.com/nodejs/node/pull/60723) +- \[[`0a33189050`](https://github.com/nodejs/node/commit/0a33189050)] - **tools**: update gyp-next to 0.21.0 (Node.js GitHub Bot) [#60645](https://github.com/nodejs/node/pull/60645) +- \[[`d2c8dd29cc`](https://github.com/nodejs/node/commit/d2c8dd29cc)] - **tools,doc**: fix format-md files list (Stefan Stojanovic) [#61147](https://github.com/nodejs/node/pull/61147) +- \[[`0ca4fac44a`](https://github.com/nodejs/node/commit/0ca4fac44a)] - **typings**: add typing for string_decoder (Taejin Kim) [#61368](https://github.com/nodejs/node/pull/61368) +- \[[`2e387fb969`](https://github.com/nodejs/node/commit/2e387fb969)] - **url**: update ada to v3.4.2 and support unicode 17 (Yagiz Nizipli) [#61593](https://github.com/nodejs/node/pull/61593) +- \[[`d65326c4e6`](https://github.com/nodejs/node/commit/d65326c4e6)] - **url**: add fast path to getPathFromURL decoder (Gürgün Dayıoğlu) [#60749](https://github.com/nodejs/node/pull/60749) +- \[[`77f72e0bfc`](https://github.com/nodejs/node/commit/77f72e0bfc)] - **url**: remove array.reduce usage (Gürgün Dayıoğlu) [#60748](https://github.com/nodejs/node/pull/60748) +- \[[`bfee9d0187`](https://github.com/nodejs/node/commit/bfee9d0187)] - **util**: optimize toASCIILower function using V8s native toLowerCase (Mert Can Altin) [#61107](https://github.com/nodejs/node/pull/61107) +- \[[`6acc9d75ec`](https://github.com/nodejs/node/commit/6acc9d75ec)] - **util**: limit `inspect` to only show own properties (Ruben Bridgewater) [#61032](https://github.com/nodejs/node/pull/61032) +- \[[`bb6e680eb1`](https://github.com/nodejs/node/commit/bb6e680eb1)] - **util**: fix parseArgs skipping positional arg with --eval and --print (azadgupta1) [#60814](https://github.com/nodejs/node/pull/60814) +- \[[`b97081a7ba`](https://github.com/nodejs/node/commit/b97081a7ba)] - **util**: assert getCallSites does not invoke Error.prepareStackTrace (Chengzhong Wu) [#60922](https://github.com/nodejs/node/pull/60922) +- \[[`722094ca3a`](https://github.com/nodejs/node/commit/722094ca3a)] - **util**: safely inspect getter errors whose message throws (Yves M.) [#60684](https://github.com/nodejs/node/pull/60684) +- \[[`746206b6ee`](https://github.com/nodejs/node/commit/746206b6ee)] - **v8**: add GCProfiler support for erm (Ilyas Shabi) [#61191](https://github.com/nodejs/node/pull/61191) +- \[[`bb206782d4`](https://github.com/nodejs/node/commit/bb206782d4)] - **v8**: mark v8.queryObjects() as stable (Joyee Cheung) [#60957](https://github.com/nodejs/node/pull/60957) +- \[[`e0ff861a8e`](https://github.com/nodejs/node/commit/e0ff861a8e)] - **worker**: update code examples for `node:worker_threads` module (fisker Cheung) [#58264](https://github.com/nodejs/node/pull/58264) +- \[[`06be1db72c`](https://github.com/nodejs/node/commit/06be1db72c)] - **worker**: remove not implemented declarations (Artur Gawlik) [#60655](https://github.com/nodejs/node/pull/60655) +- \[[`c9b0dc60ec`](https://github.com/nodejs/node/commit/c9b0dc60ec)] - **zlib**: validate write_result array length (Ryuhei Shima) [#61342](https://github.com/nodejs/node/pull/61342) +- \[[`ba318c5d44`](https://github.com/nodejs/node/commit/ba318c5d44)] - **zlib**: add CHECK to validate fast path input (Matteo Collina) [#61175](https://github.com/nodejs/node/pull/61175) + +Windows 64-bit Installer: https://nodejs.org/dist/v24.13.1/node-v24.13.1-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v24.13.1/node-v24.13.1-arm64.msi \ +Windows 64-bit Binary: https://nodejs.org/dist/v24.13.1/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v24.13.1/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v24.13.1/node-v24.13.1.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-aix-ppc64.tar.gz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v24.13.1/node-v24.13.1-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v24.13.1/node-v24.13.1.tar.gz \ +Other release files: https://nodejs.org/dist/v24.13.1/ \ +Documentation: https://nodejs.org/docs/v24.13.1/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +8ae06649ee9da6d9eadbd2a1a0b091c3b93c78c91b6a6ec89909993ab5bae2ae node-v24.13.1-aix-ppc64.tar.gz +0b1d9dead92e68d05011d14bb31c113336e9090315f2b7027e04444bacc693fd node-v24.13.1-arm64.msi +8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6 node-v24.13.1-darwin-arm64.tar.gz +d82a321541d65109c696505135be3b7dd46e3358f0f04d664f50f0d1e1ccb8a6 node-v24.13.1-darwin-arm64.tar.xz +527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf node-v24.13.1-darwin-x64.tar.gz +013a8f786a022ad1729cf435e3675e097a77d5a42eaf139a2d5d1d5309a027d4 node-v24.13.1-darwin-x64.tar.xz +0e0073cb62a38c0d41c08df0311a60b755c68edcd4e4dbb04b0a3bbe0083e186 node-v24.13.1-headers.tar.gz +59f1e5011268052f75eba3fac375e9a3b2ea6710301677528e5453090d85e8b8 node-v24.13.1-headers.tar.xz +4873459d7c9b28feaa1f0fade9bb9c81cb702670991ff80a51d805325c5e3456 node-v24.13.1-linux-arm64.tar.gz +c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1 node-v24.13.1-linux-arm64.tar.xz +da86a0a04b622cabc0c9de83616ea937c1d8a05a8eaff88955bdc1c7e0eced1d node-v24.13.1-linux-ppc64le.tar.gz +fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6 node-v24.13.1-linux-ppc64le.tar.xz +d45e5e337a8d37b557d75bfaa4f854f32588c2acf975ff7c39e4fd93ae21d630 node-v24.13.1-linux-s390x.tar.gz +8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2 node-v24.13.1-linux-s390x.tar.xz +7ad28fb172a9ab0593f86c1a39e5c268d0d8fc3d6cb0167f455b5655a7a6e2fd node-v24.13.1-linux-x64.tar.gz +30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089 node-v24.13.1-linux-x64.tar.xz +ddab0c1e3878034f047797d11f259052a995cc1b18397055e08d522da823e806 node-v24.13.1-win-arm64.7z +0cd29eeb64f3c649db2c4c868779ca277f5a4c49e26c69e5928d01fe0ae06da8 node-v24.13.1-win-arm64.zip +cd182025ae2f7c8143541677df0aa3721a5aa248b11a95ee713cf9158299b9d9 node-v24.13.1-win-x64.7z +fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279 node-v24.13.1-win-x64.zip +03fe815e236ad8fb6fa4289921a746e1492571acee49105154f2cc0b07021515 node-v24.13.1-x64.msi +8760ca4ba16ed660ce8ff634d23e56ff887eed3e408df5f31c60fddb69aa45ec node-v24.13.1.pkg +16f241ebb9429d76936021a51d477d1ed7310ffbff71753c65c4b8805210d3ae node-v24.13.1.tar.gz +b227bc868fb5e9ec8670620e2b25530eb12c17d43e6c7bc51bb38a660684192d node-v24.13.1.tar.xz +303124c8c13d0f90492c247d76b6275a8f6bba6c1ad83443d4b6d14fef58edaf win-arm64/node.exe +5388c2e591e3469856cfc3cf0d538fc6d9bcf895a8452b316f9c592aab11f048 win-arm64/node.lib +e769755e4495d300bf9cf94c950c4b9a562a8aa87d322fb093bdd892ac0822af win-arm64/node_pdb.7z +f00e9641e8809f636e24f5de79d9b70db2354a50dcab54ba84ad9fd79279ad6c win-arm64/node_pdb.zip +e3be0545990c90995d7bf3a7af5d64af1f2e0fc1bbd9b79c27f7abc1e9676e50 win-x64/node.exe +437cc33eb3f9ad8b90737dd930b7344dd88481ab803ffe9818dbe3973e49341f win-x64/node.lib +7db7f82190bef75c3b12e60299f8214da62e6567f423c1b8b749a332e7f0e99b win-x64/node_pdb.7z +ac832bdb279adb8451c7619dc88b3cceb137d48c3edd5657756d653fbf966bb2 win-x64/node_pdb.zip + +-----BEGIN PGP SIGNATURE----- + +iHUEARYIAB0WIQRb6KP2yKXAHRBsCtggsaOQsWjTVgUCaYszxgAKCRAgsaOQsWjT +VjCDAP4jWJH0ZT+BZryLNqPf+kFcLrC47hqPSDaWAi+M7/znUgEA85cNqoDgXfbn +aUNrL6zfP6jKPKz6+FSZc131R06V8wg= +=1xXm +-----END PGP SIGNATURE----- +``` diff --git a/apps/site/pages/en/blog/release/v24.14.0.md b/apps/site/pages/en/blog/release/v24.14.0.md new file mode 100644 index 0000000000000..a517d3f1051e1 --- /dev/null +++ b/apps/site/pages/en/blog/release/v24.14.0.md @@ -0,0 +1,222 @@ +--- +date: '2026-02-24T15:38:19.656Z' +category: release +title: Node.js 24.14.0 (LTS) +layout: blog-post +author: Ruy Adorno +--- + +## 2026-02-24, Version 24.14.0 'Krypton' (LTS), @ruyadorno prepared by @aduh95 + +### Notable Changes + +- \[[`8b6d31d379`](https://github.com/nodejs/node/commit/8b6d31d379)] - **(SEMVER-MINOR)** **async_hooks**: add `trackPromises` option to `createHook()` (Joyee Cheung) [#61415](https://github.com/nodejs/node/pull/61415) +- \[[`68da144b4e`](https://github.com/nodejs/node/commit/68da144b4e)] - **build,deps**: replace cjs-module-lexer with merve (Yagiz Nizipli) [#61456](https://github.com/nodejs/node/pull/61456) +- \[[`f3a24c76e4`](https://github.com/nodejs/node/commit/f3a24c76e4)] - **(SEMVER-MINOR)** **deps**: add LIEF as a dependency (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`1948861d23`](https://github.com/nodejs/node/commit/1948861d23)] - **(SEMVER-MINOR)** **events**: repurpose `events.listenerCount()` to accept EventTargets (René) [#60214](https://github.com/nodejs/node/pull/60214) +- \[[`d6f7c8d06f`](https://github.com/nodejs/node/commit/d6f7c8d06f)] - **(SEMVER-MINOR)** **fs**: add `ignore` option to `fs.watch` (Matteo Collina) [#61433](https://github.com/nodejs/node/pull/61433) +- \[[`cb54b3ca6e`](https://github.com/nodejs/node/commit/cb54b3ca6e)] - **(SEMVER-MINOR)** **http**: add `http.setGlobalProxyFromEnv()` (Joyee Cheung) [#60953](https://github.com/nodejs/node/pull/60953) +- \[[`35b1759d06`](https://github.com/nodejs/node/commit/35b1759d06)] - **(SEMVER-MINOR)** **module**: allow subpath imports that start with `#/` (Jan Martin) [#60864](https://github.com/nodejs/node/pull/60864) +- \[[`2d72ea66f2`](https://github.com/nodejs/node/commit/2d72ea66f2)] - **(SEMVER-MINOR)** **process**: preserve `AsyncLocalStorage` in `queueMicrotask` only when needed (Gürgün Dayıoğlu) [#60913](https://github.com/nodejs/node/pull/60913) +- \[[`6f4a4f6c8e`](https://github.com/nodejs/node/commit/6f4a4f6c8e)] - **(SEMVER-MINOR)** **sea**: split sea binary manipulation code (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`c0ceb9b065`](https://github.com/nodejs/node/commit/c0ceb9b065)] - **(SEMVER-MINOR)** **sqlite**: enable defensive mode by default (Bart Louwers) [#61266](https://github.com/nodejs/node/pull/61266) +- \[[`33d8e8303b`](https://github.com/nodejs/node/commit/33d8e8303b)] - **(SEMVER-MINOR)** **sqlite**: add sqlite prepare options args (Guilherme Araújo) [#61311](https://github.com/nodejs/node/pull/61311) +- \[[`563ab699eb`](https://github.com/nodejs/node/commit/563ab699eb)] - **(SEMVER-MINOR)** **src**: add initial support for ESM in embedder API (Joyee Cheung) [#61548](https://github.com/nodejs/node/pull/61548) +- \[[`4c80031000`](https://github.com/nodejs/node/commit/4c80031000)] - **(SEMVER-MINOR)** **stream**: add `bytes()` method to `node:stream/consumers` (wantaek) [#60426](https://github.com/nodejs/node/pull/60426) +- \[[`f5233df4ff`](https://github.com/nodejs/node/commit/f5233df4ff)] - **(SEMVER-MINOR)** **stream**: do not pass `readable.compose()` output via `Readable.from()` (René) [#60907](https://github.com/nodejs/node/pull/60907) +- \[[`345a40fda3`](https://github.com/nodejs/node/commit/345a40fda3)] - **(SEMVER-MINOR)** **test**: use fixture directories for sea tests (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`972f82411d`](https://github.com/nodejs/node/commit/972f82411d)] - **(SEMVER-MINOR)** **test_runner**: add `env` option to `run` function (Ethan Arrowood) [#61367](https://github.com/nodejs/node/pull/61367) +- \[[`d77f98c4b6`](https://github.com/nodejs/node/commit/d77f98c4b6)] - **(SEMVER-MINOR)** **test_runner**: support expecting a test-case to fail (Jacob Smith) [#60669](https://github.com/nodejs/node/pull/60669) +- \[[`8e900af6ba`](https://github.com/nodejs/node/commit/8e900af6ba)] - **(SEMVER-MINOR)** **util**: add `convertProcessSignalToExitCode` utility (Erick Wendel) [#60963](https://github.com/nodejs/node/pull/60963) + +### Commits + +- \[[`180778fb9a`](https://github.com/nodejs/node/commit/180778fb9a)] - **assert**: fix loose deepEqual arrays with undefined and null failing (Ruben Bridgewater) [#61587](https://github.com/nodejs/node/pull/61587) +- \[[`8b6d31d379`](https://github.com/nodejs/node/commit/8b6d31d379)] - **(SEMVER-MINOR)** **async_hooks**: add trackPromises option to createHook() (Joyee Cheung) [#61415](https://github.com/nodejs/node/pull/61415) +- \[[`83bcd38d35`](https://github.com/nodejs/node/commit/83bcd38d35)] - **benchmark**: add streaming TextDecoder benchmark (Сковорода Никита Андреевич) [#61549](https://github.com/nodejs/node/pull/61549) +- \[[`4c105844c5`](https://github.com/nodejs/node/commit/4c105844c5)] - **build**: add support for Visual Studio 2026 (Michaël Zasso) [#60727](https://github.com/nodejs/node/pull/60727) +- \[[`1f84fd91d9`](https://github.com/nodejs/node/commit/1f84fd91d9)] - **build**: skip sscache action on non-main branches (Joyee Cheung) [#61790](https://github.com/nodejs/node/pull/61790) +- \[[`30601b680f`](https://github.com/nodejs/node/commit/30601b680f)] - **build**: add `--shared-nbytes` configure flag (Antoine du Hamel) [#61341](https://github.com/nodejs/node/pull/61341) +- \[[`c6253eda49`](https://github.com/nodejs/node/commit/c6253eda49)] - **build**: add `--shared-hdr-histogram` configure flag (Antoine du Hamel) [#61280](https://github.com/nodejs/node/pull/61280) +- \[[`584c189037`](https://github.com/nodejs/node/commit/584c189037)] - **build**: add `--shared-gtest` configure flag (Antoine du Hamel) [#61279](https://github.com/nodejs/node/pull/61279) +- \[[`5998987881`](https://github.com/nodejs/node/commit/5998987881)] - **build**: aix: deoptimize implementation-visitor.cc with --shared (Stewart X Addison) [#61550](https://github.com/nodejs/node/pull/61550) +- \[[`68da144b4e`](https://github.com/nodejs/node/commit/68da144b4e)] - **build,deps**: replace cjs-module-lexer with merve (Yagiz Nizipli) [#61456](https://github.com/nodejs/node/pull/61456) +- \[[`6a4511bafb`](https://github.com/nodejs/node/commit/6a4511bafb)] - **build,win**: fix vs2022 compilation (Stefan Stojanovic) [#61530](https://github.com/nodejs/node/pull/61530) +- \[[`2d6735db8a`](https://github.com/nodejs/node/commit/2d6735db8a)] - **deps**: upgrade npm to 11.9.0 (npm team) [#61685](https://github.com/nodejs/node/pull/61685) +- \[[`699e2f8f81`](https://github.com/nodejs/node/commit/699e2f8f81)] - **deps**: update amaro to 1.1.7 (Node.js GitHub Bot) [#61730](https://github.com/nodejs/node/pull/61730) +- \[[`7be76316d6`](https://github.com/nodejs/node/commit/7be76316d6)] - **deps**: update minimatch to 10.1.2 (Node.js GitHub Bot) [#61732](https://github.com/nodejs/node/pull/61732) +- \[[`97e5a65013`](https://github.com/nodejs/node/commit/97e5a65013)] - **deps**: update undici to 7.21.0 (Node.js GitHub Bot) [#61683](https://github.com/nodejs/node/pull/61683) +- \[[`74e4710ee7`](https://github.com/nodejs/node/commit/74e4710ee7)] - **deps**: update googletest to 56efe3983185e3f37e43415d1afa97e3860f187f (Node.js GitHub Bot) [#61605](https://github.com/nodejs/node/pull/61605) +- \[[`b5113e2a2a`](https://github.com/nodejs/node/commit/b5113e2a2a)] - **deps**: update amaro to 1.1.6 (Node.js GitHub Bot) [#61603](https://github.com/nodejs/node/pull/61603) +- \[[`f3a24c76e4`](https://github.com/nodejs/node/commit/f3a24c76e4)] - **(SEMVER-MINOR)** **deps**: add LIEF as a dependency (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`c370c3dc06`](https://github.com/nodejs/node/commit/c370c3dc06)] - **(SEMVER-MINOR)** **deps**: add tools and scripts to pull LIEF as a dependency (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`e54975e17d`](https://github.com/nodejs/node/commit/e54975e17d)] - **deps**: V8: cherry-pick highway\@dcc0ca1cd42 (Richard Lau) [#61008](https://github.com/nodejs/node/pull/61008) +- \[[`625b90b76b`](https://github.com/nodejs/node/commit/625b90b76b)] - **deps**: update undici to 7.19.2 (Node.js GitHub Bot) [#61566](https://github.com/nodejs/node/pull/61566) +- \[[`05e9a9fb5e`](https://github.com/nodejs/node/commit/05e9a9fb5e)] - **deps**: update undici to 7.19.1 (Node.js GitHub Bot) [#61514](https://github.com/nodejs/node/pull/61514) +- \[[`3d41643e38`](https://github.com/nodejs/node/commit/3d41643e38)] - **deps**: update undici to 7.19.0 (Node.js GitHub Bot) [#61470](https://github.com/nodejs/node/pull/61470) +- \[[`17b363a66c`](https://github.com/nodejs/node/commit/17b363a66c)] - **dns**: fix Windows SRV ECONNREFUSED by adjusting c-ares fallback detection (notvivek12) [#61453](https://github.com/nodejs/node/pull/61453) +- \[[`33d0a8c22d`](https://github.com/nodejs/node/commit/33d0a8c22d)] - **doc**: clarify EventEmitter error handling in threat model (Matteo Collina) [#61701](https://github.com/nodejs/node/pull/61701) +- \[[`5b8e72cf85`](https://github.com/nodejs/node/commit/5b8e72cf85)] - **doc**: mention default option for test runner env (Steven) [#61659](https://github.com/nodejs/node/pull/61659) +- \[[`f44e67fac2`](https://github.com/nodejs/node/commit/f44e67fac2)] - **doc**: fix --inspect security warning section (Tim Perry) [#61675](https://github.com/nodejs/node/pull/61675) +- \[[`a0e09c9043`](https://github.com/nodejs/node/commit/a0e09c9043)] - **doc**: document `url.format(urlString)` as deprecated under DEP0169 (René) [#61644](https://github.com/nodejs/node/pull/61644) +- \[[`5e719248fe`](https://github.com/nodejs/node/commit/5e719248fe)] - **doc**: deprecation add more codemod (Augustin Mauroy) [#61642](https://github.com/nodejs/node/pull/61642) +- \[[`8f5a3e5df4`](https://github.com/nodejs/node/commit/8f5a3e5df4)] - **doc**: fix grammatical error in README.md (ayj8201) [#61653](https://github.com/nodejs/node/pull/61653) +- \[[`d52b535163`](https://github.com/nodejs/node/commit/d52b535163)] - **doc**: correct tools README Boxstarter link (Mike McCready) [#61638](https://github.com/nodejs/node/pull/61638) +- \[[`4889dc4f59`](https://github.com/nodejs/node/commit/4889dc4f59)] - **doc**: update `server.dropMaxConnection` link (YuSheng Chen) [#61584](https://github.com/nodejs/node/pull/61584) +- \[[`8e48e72f2a`](https://github.com/nodejs/node/commit/8e48e72f2a)] - **doc**: clean up writing-and-running-benchmarks.md (Hardanish Singh) [#61345](https://github.com/nodejs/node/pull/61345) +- \[[`1948861d23`](https://github.com/nodejs/node/commit/1948861d23)] - **(SEMVER-MINOR)** **events**: repurpose `events.listenerCount()` to accept EventTargets (René) [#60214](https://github.com/nodejs/node/pull/60214) +- \[[`d6f7c8d06f`](https://github.com/nodejs/node/commit/d6f7c8d06f)] - **(SEMVER-MINOR)** **fs**: add ignore option to fs.watch (Matteo Collina) [#61433](https://github.com/nodejs/node/pull/61433) +- \[[`2d7e5f9581`](https://github.com/nodejs/node/commit/2d7e5f9581)] - **http**: implement slab allocation for HTTP header parsing (Mert Can Altin) [#61375](https://github.com/nodejs/node/pull/61375) +- \[[`cb54b3ca6e`](https://github.com/nodejs/node/commit/cb54b3ca6e)] - **(SEMVER-MINOR)** **http**: add http.setGlobalProxyFromEnv() (Joyee Cheung) [#60953](https://github.com/nodejs/node/pull/60953) +- \[[`6df8be48ce`](https://github.com/nodejs/node/commit/6df8be48ce)] - **lib**: use utf8 fast path for streaming TextDecoder (Сковорода Никита Андреевич) [#61549](https://github.com/nodejs/node/pull/61549) +- \[[`830fff0aca`](https://github.com/nodejs/node/commit/830fff0aca)] - **lib**: recycle queues (Robert Nagy) [#61461](https://github.com/nodejs/node/pull/61461) +- \[[`069874bdbd`](https://github.com/nodejs/node/commit/069874bdbd)] - **lib**: use StringPrototypeStartsWith from primordials in locks (Taejin Kim) [#61492](https://github.com/nodejs/node/pull/61492) +- \[[`7824c7589e`](https://github.com/nodejs/node/commit/7824c7589e)] - **lib**: unify ICU and no-ICU TextDecoder (Сковорода Никита Андреевич) [#61409](https://github.com/nodejs/node/pull/61409) +- \[[`f81430702a`](https://github.com/nodejs/node/commit/f81430702a)] - **lib**: prefer `call()` over `apply()` if argument list is not array (Livia Medeiros) [#60796](https://github.com/nodejs/node/pull/60796) +- \[[`a723f72e1e`](https://github.com/nodejs/node/commit/a723f72e1e)] - **lib**: add support for readable byte streams to .toWeb() (Hans Klunder) [#58664](https://github.com/nodejs/node/pull/58664) +- \[[`b78d814b3d`](https://github.com/nodejs/node/commit/b78d814b3d)] - **meta**: persist sccache daemon until end of build workflows (René) [#61639](https://github.com/nodejs/node/pull/61639) +- \[[`40a872a4b9`](https://github.com/nodejs/node/commit/40a872a4b9)] - **meta**: bump github/codeql-action from 4.31.9 to 4.32.0 (dependabot\[bot]) [#61622](https://github.com/nodejs/node/pull/61622) +- \[[`0637bdb3be`](https://github.com/nodejs/node/commit/0637bdb3be)] - **meta**: bump step-security/harden-runner from 2.14.0 to 2.14.1 (dependabot\[bot]) [#61621](https://github.com/nodejs/node/pull/61621) +- \[[`e8d9bd9fc5`](https://github.com/nodejs/node/commit/e8d9bd9fc5)] - **meta**: bump actions/setup-python from 6.1.0 to 6.2.0 (dependabot\[bot]) [#61627](https://github.com/nodejs/node/pull/61627) +- \[[`c517df2b65`](https://github.com/nodejs/node/commit/c517df2b65)] - **meta**: bump actions/setup-node from 6.1.0 to 6.2.0 (dependabot\[bot]) [#61625](https://github.com/nodejs/node/pull/61625) +- \[[`9a64f2f25d`](https://github.com/nodejs/node/commit/9a64f2f25d)] - **meta**: bump actions/cache from 5.0.1 to 5.0.3 (dependabot\[bot]) [#61624](https://github.com/nodejs/node/pull/61624) +- \[[`0e5922e95e`](https://github.com/nodejs/node/commit/0e5922e95e)] - **meta**: bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (dependabot\[bot]) [#61623](https://github.com/nodejs/node/pull/61623) +- \[[`5da7b51091`](https://github.com/nodejs/node/commit/5da7b51091)] - **meta**: bump actions/stale from 10.1.0 to 10.1.1 (dependabot\[bot]) [#61620](https://github.com/nodejs/node/pull/61620) +- \[[`c085c8a43f`](https://github.com/nodejs/node/commit/c085c8a43f)] - **meta**: bump actions/checkout from 6.0.1 to 6.0.2 (dependabot\[bot]) [#61619](https://github.com/nodejs/node/pull/61619) +- \[[`ce2acf0275`](https://github.com/nodejs/node/commit/ce2acf0275)] - **meta**: bump actions/download-artifact from 6.0.0 to 7.0.0 (dependabot\[bot]) [#61242](https://github.com/nodejs/node/pull/61242) +- \[[`629f0eaac5`](https://github.com/nodejs/node/commit/629f0eaac5)] - **meta**: bump actions/checkout from 6.0.0 to 6.0.1 (dependabot\[bot]) [#61239](https://github.com/nodejs/node/pull/61239) +- \[[`cd80d369c9`](https://github.com/nodejs/node/commit/cd80d369c9)] - **meta**: bump actions/upload-artifact from 5.0.0 to 6.0.0 (dependabot\[bot]) [#61238](https://github.com/nodejs/node/pull/61238) +- \[[`8c75e4e1fa`](https://github.com/nodejs/node/commit/8c75e4e1fa)] - **meta**: bump actions/checkout from 5.0.1 to 6.0.0 (dependabot\[bot]) [#60925](https://github.com/nodejs/node/pull/60925) +- \[[`5a9e9f4127`](https://github.com/nodejs/node/commit/5a9e9f4127)] - **meta**: bump actions/checkout from 5.0.0 to 5.0.1 (dependabot\[bot]) [#60767](https://github.com/nodejs/node/pull/60767) +- \[[`1519251dd1`](https://github.com/nodejs/node/commit/1519251dd1)] - **module**: do not invoke resolve hooks twice for imported cjs (Joyee Cheung) [#61529](https://github.com/nodejs/node/pull/61529) +- \[[`8d7190b3fe`](https://github.com/nodejs/node/commit/8d7190b3fe)] - **module**: do not wrap module.\_load when tracing is not enabled (Joyee Cheung) [#61479](https://github.com/nodejs/node/pull/61479) +- \[[`35b1759d06`](https://github.com/nodejs/node/commit/35b1759d06)] - **(SEMVER-MINOR)** **module**: allow subpath imports that start with `#/` (Jan Martin) [#60864](https://github.com/nodejs/node/pull/60864) +- \[[`7a83b38921`](https://github.com/nodejs/node/commit/7a83b38921)] - **net**: defer synchronous destroy calls in internalConnect (RajeshKumar11) [#61658](https://github.com/nodejs/node/pull/61658) +- \[[`16bab79421`](https://github.com/nodejs/node/commit/16bab79421)] - **process**: do not truncate long strings in `--print` (Mohamed Akram) [#61497](https://github.com/nodejs/node/pull/61497) +- \[[`2d72ea66f2`](https://github.com/nodejs/node/commit/2d72ea66f2)] - **(SEMVER-MINOR)** **process**: preserve AsyncLocalStorage in queueMicrotask only when needed (Gürgün Dayıoğlu) [#60913](https://github.com/nodejs/node/pull/60913) +- \[[`9cc1c4604f`](https://github.com/nodejs/node/commit/9cc1c4604f)] - **repl**: fix getters triggering side effects during completion (Dario Piotrowicz) [#61043](https://github.com/nodejs/node/pull/61043) +- \[[`93703306a1`](https://github.com/nodejs/node/commit/93703306a1)] - **repl**: tab completion targets `` instead of `new ` (Đỗ Trọng Hải) [#60319](https://github.com/nodejs/node/pull/60319) +- \[[`6f4a4f6c8e`](https://github.com/nodejs/node/commit/6f4a4f6c8e)] - **(SEMVER-MINOR)** **sea**: split sea binary manipulation code (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`46a2dad4db`](https://github.com/nodejs/node/commit/46a2dad4db)] - **sqlite**: avoid extra copy for large text binds (Ali Hassan) [#61580](https://github.com/nodejs/node/pull/61580) +- \[[`f91a377f7e`](https://github.com/nodejs/node/commit/f91a377f7e)] - **sqlite**: use DictionaryTemplate for run() result (Mert Can Altin) [#61432](https://github.com/nodejs/node/pull/61432) +- \[[`0e7571ae3e`](https://github.com/nodejs/node/commit/0e7571ae3e)] - **sqlite**: change approach to fix segfault SQLTagStore (Bart Louwers) [#60462](https://github.com/nodejs/node/pull/60462) +- \[[`8e8f70524a`](https://github.com/nodejs/node/commit/8e8f70524a)] - **sqlite**: reserve vectors space (Guilherme Araújo) [#61540](https://github.com/nodejs/node/pull/61540) +- \[[`c0ceb9b065`](https://github.com/nodejs/node/commit/c0ceb9b065)] - **(SEMVER-MINOR)** **sqlite**: enable defensive mode by default (Bart Louwers) [#61266](https://github.com/nodejs/node/pull/61266) +- \[[`33d8e8303b`](https://github.com/nodejs/node/commit/33d8e8303b)] - **(SEMVER-MINOR)** **sqlite**: add sqlite prepare options args (Guilherme Araújo) [#61311](https://github.com/nodejs/node/pull/61311) +- \[[`f0d8f37002`](https://github.com/nodejs/node/commit/f0d8f37002)] - **src**: elide heap allocation in structured clone implementation (Anna Henningsen) [#61703](https://github.com/nodejs/node/pull/61703) +- \[[`db478c4336`](https://github.com/nodejs/node/commit/db478c4336)] - **src**: use simdutf for one-byte string UTF-8 write in stringBytes (Mert Can Altin) [#61696](https://github.com/nodejs/node/pull/61696) +- \[[`563ab699eb`](https://github.com/nodejs/node/commit/563ab699eb)] - **(SEMVER-MINOR)** **src**: add initial support for ESM in embedder API (Joyee Cheung) [#61548](https://github.com/nodejs/node/pull/61548) +- \[[`da13186a15`](https://github.com/nodejs/node/commit/da13186a15)] - **src**: throw RangeError on failed ArrayBuffer BackingStore allocation (Chengzhong Wu) [#61480](https://github.com/nodejs/node/pull/61480) +- \[[`4c80031000`](https://github.com/nodejs/node/commit/4c80031000)] - **(SEMVER-MINOR)** **stream**: add bytes() method to stream/consumers (wantaek) [#60426](https://github.com/nodejs/node/pull/60426) +- \[[`f5233df4ff`](https://github.com/nodejs/node/commit/f5233df4ff)] - **(SEMVER-MINOR)** **stream**: do not pass `readable.compose()` output via `Readable.from()` (René) [#60907](https://github.com/nodejs/node/pull/60907) +- \[[`ad04a469c8`](https://github.com/nodejs/node/commit/ad04a469c8)] - **test**: restraint version replacement pattern in snapshots (Chengzhong Wu) [#61748](https://github.com/nodejs/node/pull/61748) +- \[[`2d3b4a8d65`](https://github.com/nodejs/node/commit/2d3b4a8d65)] - **test**: print stack immediately avoiding GC interleaving (Chengzhong Wu) [#61699](https://github.com/nodejs/node/pull/61699) +- \[[`38f43a6d4e`](https://github.com/nodejs/node/commit/38f43a6d4e)] - **test**: fix case-insensitive path matching on Windows (Matteo Collina) [#61682](https://github.com/nodejs/node/pull/61682) +- \[[`06513f5ff2`](https://github.com/nodejs/node/commit/06513f5ff2)] - **test**: fix flaky test-performance-eventloopdelay (Matteo Collina) [#61629](https://github.com/nodejs/node/pull/61629) +- \[[`9d79c66c61`](https://github.com/nodejs/node/commit/9d79c66c61)] - **test**: remove duplicate wpt tests (Filip Skokan) [#61617](https://github.com/nodejs/node/pull/61617) +- \[[`eac9f4f401`](https://github.com/nodejs/node/commit/eac9f4f401)] - **test**: fix race condition in watch mode tests (Matteo Collina) [#61615](https://github.com/nodejs/node/pull/61615) +- \[[`ecf5947575`](https://github.com/nodejs/node/commit/ecf5947575)] - **test**: update WPT for url to e3c46fdf55 (Node.js GitHub Bot) [#61602](https://github.com/nodejs/node/pull/61602) +- \[[`356ff5fece`](https://github.com/nodejs/node/commit/356ff5fece)] - **test**: use the skipIfNoWatch() utility function (Luigi Pinca) [#61531](https://github.com/nodejs/node/pull/61531) +- \[[`4b2187aea2`](https://github.com/nodejs/node/commit/4b2187aea2)] - **test**: unify assertSnapshot common patterns (Chengzhong Wu) [#61590](https://github.com/nodejs/node/pull/61590) +- \[[`8c25489d63`](https://github.com/nodejs/node/commit/8c25489d63)] - **test**: split test-fs-watch-ignore-\* (Luigi Pinca) [#61494](https://github.com/nodejs/node/pull/61494) +- \[[`43b8a2b7e7`](https://github.com/nodejs/node/commit/43b8a2b7e7)] - **test**: add some validation for JSON doc output (Antoine du Hamel) [#61413](https://github.com/nodejs/node/pull/61413) +- \[[`345a40fda3`](https://github.com/nodejs/node/commit/345a40fda3)] - **(SEMVER-MINOR)** **test**: use fixture directories for sea tests (Joyee Cheung) [#61167](https://github.com/nodejs/node/pull/61167) +- \[[`24cf6b8326`](https://github.com/nodejs/node/commit/24cf6b8326)] - **test**: reveal wpt evaluation errors in status files (Chengzhong Wu) [#61358](https://github.com/nodejs/node/pull/61358) +- \[[`d4034dfb62`](https://github.com/nodejs/node/commit/d4034dfb62)] - **test**: forbid use of named imports for fixtures (Antoine du Hamel) [#61228](https://github.com/nodejs/node/pull/61228) +- \[[`4f871ee897`](https://github.com/nodejs/node/commit/4f871ee897)] - **test**: enforce better never-settling-promise detection (Antoine du Hamel) [#60976](https://github.com/nodejs/node/pull/60976) +- \[[`8e9adedf02`](https://github.com/nodejs/node/commit/8e9adedf02)] - **test**: ensure assertions are reached on all tests (Antoine du Hamel) [#60845](https://github.com/nodejs/node/pull/60845) +- \[[`273832802e`](https://github.com/nodejs/node/commit/273832802e)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60763](https://github.com/nodejs/node/pull/60763) +- \[[`e06adcb52f`](https://github.com/nodejs/node/commit/e06adcb52f)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60760](https://github.com/nodejs/node/pull/60760) +- \[[`aeed0ccc02`](https://github.com/nodejs/node/commit/aeed0ccc02)] - **test**: use `RegExp.escape` to improve test reliability (Antoine du Hamel) [#60803](https://github.com/nodejs/node/pull/60803) +- \[[`74bcd0adab`](https://github.com/nodejs/node/commit/74bcd0adab)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60728](https://github.com/nodejs/node/pull/60728) +- \[[`407807b08e`](https://github.com/nodejs/node/commit/407807b08e)] - **test**: skip tests not passing without `NODE_OPTIONS` support (Antoine du Hamel) [#60912](https://github.com/nodejs/node/pull/60912) +- \[[`a9e70cefb0`](https://github.com/nodejs/node/commit/a9e70cefb0)] - **test**: ensure assertions are reached on more tests (Antoine du Hamel) [#60634](https://github.com/nodejs/node/pull/60634) +- \[[`21b23cd0d0`](https://github.com/nodejs/node/commit/21b23cd0d0)] - **test_runner**: fix test enqueue when test file has syntax error (Edy Silva) [#61573](https://github.com/nodejs/node/pull/61573) +- \[[`6a4de694b2`](https://github.com/nodejs/node/commit/6a4de694b2)] - **test_runner**: fix passing `expectFailure` (Moshe Atlow) [#61568](https://github.com/nodejs/node/pull/61568) +- \[[`6640de2b0f`](https://github.com/nodejs/node/commit/6640de2b0f)] - **test_runner**: differentiate todo and failure styles (Moshe Atlow) [#61564](https://github.com/nodejs/node/pull/61564) +- \[[`972f82411d`](https://github.com/nodejs/node/commit/972f82411d)] - **(SEMVER-MINOR)** **test_runner**: add env option to run function (Ethan Arrowood) [#61367](https://github.com/nodejs/node/pull/61367) +- \[[`d77f98c4b6`](https://github.com/nodejs/node/commit/d77f98c4b6)] - **(SEMVER-MINOR)** **test_runner**: support expecting a test-case to fail (Jacob Smith) [#60669](https://github.com/nodejs/node/pull/60669) +- \[[`f98986cbb9`](https://github.com/nodejs/node/commit/f98986cbb9)] - **tools**: switch to ARM runners on GHA jobs (Antoine du Hamel) [#61903](https://github.com/nodejs/node/pull/61903) +- \[[`034589dd93`](https://github.com/nodejs/node/commit/034589dd93)] - **tools**: avoid building twice in coverage jobs (Antoine du Hamel) [#61899](https://github.com/nodejs/node/pull/61899) +- \[[`e50e2f00bb`](https://github.com/nodejs/node/commit/e50e2f00bb)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61759](https://github.com/nodejs/node/pull/61759) +- \[[`f658f48ccb`](https://github.com/nodejs/node/commit/f658f48ccb)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61734](https://github.com/nodejs/node/pull/61734) +- \[[`65c77d74ff`](https://github.com/nodejs/node/commit/65c77d74ff)] - **tools**: use ubuntu-latest runner in `notify-on-push` workflow (Antoine du Hamel) [#61742](https://github.com/nodejs/node/pull/61742) +- \[[`605905556a`](https://github.com/nodejs/node/commit/605905556a)] - **tools**: enforce removal of `lts-watch-*` labels on release proposals (Antoine du Hamel) [#61672](https://github.com/nodejs/node/pull/61672) +- \[[`f0f98d4c03`](https://github.com/nodejs/node/commit/f0f98d4c03)] - **tools**: use ubuntu-slim runner in meta GitHub Actions (Tierney Cyren) [#61663](https://github.com/nodejs/node/pull/61663) +- \[[`ab63ddf354`](https://github.com/nodejs/node/commit/ab63ddf354)] - **tools**: add LIEF to license builder (Chengzhong Wu) [#61523](https://github.com/nodejs/node/pull/61523) +- \[[`8a0f6192c9`](https://github.com/nodejs/node/commit/8a0f6192c9)] - **tools**: enforce trailing commas in `test/es-module` (Antoine du Hamel) [#60891](https://github.com/nodejs/node/pull/60891) +- \[[`4afbbcf39e`](https://github.com/nodejs/node/commit/4afbbcf39e)] - **tools**: enforce trailing commas in `test/sequential` (Antoine du Hamel) [#60892](https://github.com/nodejs/node/pull/60892) +- \[[`4c1abf752c`](https://github.com/nodejs/node/commit/4c1abf752c)] - **tools,win**: upgrade install additional tools to Visual Studio 2026 (Mike McCready) [#61562](https://github.com/nodejs/node/pull/61562) +- \[[`8e900af6ba`](https://github.com/nodejs/node/commit/8e900af6ba)] - **(SEMVER-MINOR)** **util**: add convertProcessSignalToExitCode utility (Erick Wendel) [#60963](https://github.com/nodejs/node/pull/60963) + +Windows 64-bit Installer: https://nodejs.org/dist/v24.14.0/node-v24.14.0-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v24.14.0/node-v24.14.0-arm64.msi \ +Windows 64-bit Binary: https://nodejs.org/dist/v24.14.0/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v24.14.0/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v24.14.0/node-v24.14.0.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-aix-ppc64.tar.gz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v24.14.0/node-v24.14.0-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v24.14.0/node-v24.14.0.tar.gz \ +Other release files: https://nodejs.org/dist/v24.14.0/ \ +Documentation: https://nodejs.org/docs/v24.14.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +27ac48f94c7e88f4b0c5d9077f0fec10256289c7dca21e0d9f82cbaad13d6e3d node-v24.14.0-aix-ppc64.tar.gz +63d07136eead197b66c58f4ee6c4343e0b4027cc3a1f852ada45b081250e21b7 node-v24.14.0-arm64.msi +a1a54f46a750d2523d628d924aab61758a51c9dad3e0238beb14141be9615dd3 node-v24.14.0-darwin-arm64.tar.gz +448f01d4dfa5a21d280cfbacf00abc22b51aad52f38db0f4886e0e5d00df541d node-v24.14.0-darwin-arm64.tar.xz +f2879eb810e25993a0578e5d878930266fd2eafcffe9f2839b3d8db354d4879e node-v24.14.0-darwin-x64.tar.gz +c17b234c4db75eeb03c3a86664428ec25ee849e1ebbe8cb05c4a70f282187866 node-v24.14.0-darwin-x64.tar.xz +bc1505c8e2b2b1f7b7cf3808bf53691e5d110c816d1bc1a48075195c5dcafe05 node-v24.14.0-headers.tar.gz +87d1a7d80599ce330de0f0832f6b85c7d93c5be7b6a203725afa016405227988 node-v24.14.0-headers.tar.xz +f44740cd218de8127f1c44c41510a3a740fa5c9c8d1cdce1c3bedada79f3cde7 node-v24.14.0-linux-arm64.tar.gz +e7adfca03d9173276114a6f2219df1a7d25e1bfd6bbd771d3f839118a2053094 node-v24.14.0-linux-arm64.tar.xz +83b263f9c2ea946c0c4a15c3caea6470dc49fe0beb6f33dfd29aa9128250637a node-v24.14.0-linux-ppc64le.tar.gz +33beedaf3ff82ee511cfc5ca0cc7076161a54a982321d061409299e27bc5f41e node-v24.14.0-linux-ppc64le.tar.xz +8fa220a1f7b7769605c2e929fdbf736822997bf4cf88a3db05188eabd7712328 node-v24.14.0-linux-s390x.tar.gz +d133f1aac2d6dbaa4de9fe183184e57adbc9f45d62e37f55a864c8af92d4cb5a node-v24.14.0-linux-s390x.tar.xz +dbf5b8665dec15e59e6359a517fefb47b23fdb9152d8def975b9bca3dfc6d355 node-v24.14.0-linux-x64.tar.gz +41cd79bb7877c81605a9e68ec4c91547774f46a40c67a17e34d7179ef11729df node-v24.14.0-linux-x64.tar.xz +5514f833980f172088ce22883000d1aea9db9eea41cb1a306154eb4f333ec1c0 node-v24.14.0.pkg +852c73dd5b6ba15b231d036da6312dbcdabd6295adc3940586f3187b77731cf3 node-v24.14.0.tar.gz +9fe025ef4028aba95d16e7810518bf4a5e8abfb0bdc07d8a3fdbb0afd538d77f node-v24.14.0.tar.xz +6cd8d95799dc70e89585522e5cfe5d576b6ac44f6ff5afc0a4b0318c9f7aa8cd node-v24.14.0-win-arm64.7z +88d36e8109736a2fa9bdc596f2cf507a3c52c69cdf96e54f8acd473ec14be853 node-v24.14.0-win-arm64.zip +90f18586ef8ca13dd94e7f571d27b8a5120116fea218bcc41e3ef6697dcbc777 node-v24.14.0-win-x64.7z +313fa40c0d7b18575821de8cb17483031fe07d95de5994f6f435f3b345f85c66 node-v24.14.0-win-x64.zip +e75802e82be6875b03b63377a9e12e4416799d0fb6dd460f0605d29144d386a6 node-v24.14.0-x64.msi +8c5fd45a4a1fd3cc4a6f07da8803b05194108906cb6fb7d962448a12582a5922 win-arm64/node.exe +59f1c42e5962e9333bb1673c21125b7a7ce9a6908299aee8f7673803c2e24212 win-arm64/node.lib +5a7c7261b40fd4e39bc4410e23d31e48857d737d830434ea2dc215fec892a8dd win-arm64/node_pdb.7z +3bf09a2b133893208ad48b3c439dad570aa4cc2a5fe842bc137f795aa4e72944 win-arm64/node_pdb.zip +63c259c81e5d472b5f11c8d506070130cb04a1ecf84b80377a34ed6ec9048088 win-x64/node.exe +35fcdd35d3d22e283c0e2e095cc43ef676301bb85f950c344a73d59231bd7e61 win-x64/node.lib +802553494ca6c8049aa542ddcc54e2616a0a1819ae23f894767a4110a1ec0b5a win-x64/node_pdb.7z +b8e1aee14390b2828ede1f4b89ed8a8b0c5da40e43fbfe14dc4b42dc14ed3710 win-x64/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEEEI9StI21e7DMQ5spl7AUGb2S+AoFAmmdxM8ACgkQl7AUGb2S ++AqtGg//VNRQePlUD0cVBO0AnCnV4LlkmkIdxYDmD1Myk2blqC1rvLsGDj1kwfp0 +cOrDI1PvnYrasK9N5Q1cF+g9ZJDgv59v8lLkPYng8hYPiVgyYE4e00QSPMebDzwu +jwIZtNdR0sdD6nAq3WLQQFqkvytj2y4OhL1w4+OiXomBXYRC7CU3/ZwzEsrJ/od6 +QeO10KezF3luDGiMXVoJzn1pxm6Itvcdyqu0DZkBsbX6IrzR+Kbb2wv/dWUafas+ +PM9J89QhV4UTgRSHo6O5FnG6ZStcOpa/o4yCWmO9EA1GBv/n3Jnr/uk8zNE2ODwe +TV0OiJnbUrCx0dQQTx42wVQL+Ust/PLu5m5csnO0R5E/QCVBxwwF6+CnPyNP6HgF +fA+2PoKuv5pSCbfupfJg0KLSxToX6p3wO02sRzQnpzY8usdEel071n6246TjYRqM +o4nS5FgLlBLd1djKjOna62QYsKtOvldZ1+R96rQBOW7oYeAG9vggGcbuWN2y2zvu +ctcVpC3+cj2wEQ/N2NQOz/Zd//m8j19XgIoNxHuU6w0xGXxHnyTpJhrd5bI3L3R4 +QMK+v67uM9qVLPPZdEFbRpwVv/UhtM2jewcQtwnplo2dseWO3n+CXgRs8DOK5JKX +RN7ozy+bCPm3ayU6O01MmUiUaD9PQA/lIE2M4jZ9qfmhWuTlk20= +=i+aM +-----END PGP SIGNATURE----- +``` diff --git a/apps/site/pages/en/blog/release/v25.6.1.md b/apps/site/pages/en/blog/release/v25.6.1.md new file mode 100644 index 0000000000000..2c34add90b6ea --- /dev/null +++ b/apps/site/pages/en/blog/release/v25.6.1.md @@ -0,0 +1,131 @@ +--- +date: '2026-02-10T13:37:48.605Z' +category: release +title: Node.js 25.6.1 (Current) +layout: blog-post +author: Antoine du Hamel +--- + +## 2026-02-10, Version 25.6.1 (Current), @aduh95 + +### Notable Changes + +- \[[`47df4328d7`](https://github.com/nodejs/node/commit/47df4328d7)] - **build,deps**: replace `cjs-module-lexer` with `merve` (Yagiz Nizipli) [#61456](https://github.com/nodejs/node/pull/61456) + +### Commits + +- \[[`47df4328d7`](https://github.com/nodejs/node/commit/47df4328d7)] - **build,deps**: replace cjs-module-lexer with merve (Yagiz Nizipli) [#61456](https://github.com/nodejs/node/pull/61456) +- \[[`a727054503`](https://github.com/nodejs/node/commit/a727054503)] - **deps**: upgrade npm to 11.9.0 (npm team) [#61685](https://github.com/nodejs/node/pull/61685) +- \[[`c78c49ed6b`](https://github.com/nodejs/node/commit/c78c49ed6b)] - **deps**: update amaro to 1.1.7 (Node.js GitHub Bot) [#61730](https://github.com/nodejs/node/pull/61730) +- \[[`4790816d9b`](https://github.com/nodejs/node/commit/4790816d9b)] - **deps**: update minimatch to 10.1.2 (Node.js GitHub Bot) [#61732](https://github.com/nodejs/node/pull/61732) +- \[[`8c71740e8a`](https://github.com/nodejs/node/commit/8c71740e8a)] - **deps**: update undici to 7.21.0 (Node.js GitHub Bot) [#61683](https://github.com/nodejs/node/pull/61683) +- \[[`e559ef6ab1`](https://github.com/nodejs/node/commit/e559ef6ab1)] - **deps**: update googletest to 56efe3983185e3f37e43415d1afa97e3860f187f (Node.js GitHub Bot) [#61605](https://github.com/nodejs/node/pull/61605) +- \[[`300de2bb5a`](https://github.com/nodejs/node/commit/300de2bb5a)] - **deps**: update amaro to 1.1.6 (Node.js GitHub Bot) [#61603](https://github.com/nodejs/node/pull/61603) +- \[[`e71e9505ef`](https://github.com/nodejs/node/commit/e71e9505ef)] - **dns**: fix Windows SRV ECONNREFUSED by adjusting c-ares fallback detection (notvivek12) [#61453](https://github.com/nodejs/node/pull/61453) +- \[[`439b816bc7`](https://github.com/nodejs/node/commit/439b816bc7)] - **doc**: clarify EventEmitter error handling in threat model (Matteo Collina) [#61701](https://github.com/nodejs/node/pull/61701) +- \[[`c1c6641f23`](https://github.com/nodejs/node/commit/c1c6641f23)] - **doc**: mention default option for test runner env (Steven) [#61659](https://github.com/nodejs/node/pull/61659) +- \[[`41ec451f98`](https://github.com/nodejs/node/commit/41ec451f98)] - **doc**: fix --inspect security warning section (Tim Perry) [#61675](https://github.com/nodejs/node/pull/61675) +- \[[`bb90ef2356`](https://github.com/nodejs/node/commit/bb90ef2356)] - **doc**: document `url.format(urlString)` as deprecated under DEP0169 (René) [#61644](https://github.com/nodejs/node/pull/61644) +- \[[`513df82e6f`](https://github.com/nodejs/node/commit/513df82e6f)] - **doc**: update to Visual Studio 2026 manual install (Mike McCready) [#61655](https://github.com/nodejs/node/pull/61655) +- \[[`9409d30736`](https://github.com/nodejs/node/commit/9409d30736)] - **doc**: deprecation add more codemod (Augustin Mauroy) [#61642](https://github.com/nodejs/node/pull/61642) +- \[[`75a7a67151`](https://github.com/nodejs/node/commit/75a7a67151)] - **doc**: fix grammatical error in README.md (ayj8201) [#61653](https://github.com/nodejs/node/pull/61653) +- \[[`821e59e884`](https://github.com/nodejs/node/commit/821e59e884)] - **doc**: correct tools README Boxstarter link (Mike McCready) [#61638](https://github.com/nodejs/node/pull/61638) +- \[[`4998f539a0`](https://github.com/nodejs/node/commit/4998f539a0)] - **doc**: update `server.dropMaxConnection` link (YuSheng Chen) [#61584](https://github.com/nodejs/node/pull/61584) +- \[[`9383ac4ab7`](https://github.com/nodejs/node/commit/9383ac4ab7)] - **http**: implement slab allocation for HTTP header parsing (Mert Can Altin) [#61375](https://github.com/nodejs/node/pull/61375) +- \[[`e90eb1d561`](https://github.com/nodejs/node/commit/e90eb1d561)] - **meta**: persist sccache daemon until end of build workflows (René) [#61639](https://github.com/nodejs/node/pull/61639) +- \[[`ade36ac367`](https://github.com/nodejs/node/commit/ade36ac367)] - **meta**: bump github/codeql-action from 4.31.9 to 4.32.0 (dependabot\[bot]) [#61622](https://github.com/nodejs/node/pull/61622) +- \[[`26638bd67f`](https://github.com/nodejs/node/commit/26638bd67f)] - **meta**: bump step-security/harden-runner from 2.14.0 to 2.14.1 (dependabot\[bot]) [#61621](https://github.com/nodejs/node/pull/61621) +- \[[`eaa9a96cb6`](https://github.com/nodejs/node/commit/eaa9a96cb6)] - **meta**: bump actions/setup-python from 6.1.0 to 6.2.0 (dependabot\[bot]) [#61627](https://github.com/nodejs/node/pull/61627) +- \[[`fd98187828`](https://github.com/nodejs/node/commit/fd98187828)] - **meta**: bump cachix/cachix-action (dependabot\[bot]) [#61626](https://github.com/nodejs/node/pull/61626) +- \[[`820c1d021c`](https://github.com/nodejs/node/commit/820c1d021c)] - **meta**: bump actions/setup-node from 6.1.0 to 6.2.0 (dependabot\[bot]) [#61625](https://github.com/nodejs/node/pull/61625) +- \[[`72a4136bd5`](https://github.com/nodejs/node/commit/72a4136bd5)] - **meta**: bump actions/cache from 5.0.1 to 5.0.3 (dependabot\[bot]) [#61624](https://github.com/nodejs/node/pull/61624) +- \[[`e3ef6cb3bc`](https://github.com/nodejs/node/commit/e3ef6cb3bc)] - **meta**: bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (dependabot\[bot]) [#61623](https://github.com/nodejs/node/pull/61623) +- \[[`020a836202`](https://github.com/nodejs/node/commit/020a836202)] - **meta**: bump actions/stale from 10.1.0 to 10.1.1 (dependabot\[bot]) [#61620](https://github.com/nodejs/node/pull/61620) +- \[[`0df72f07c8`](https://github.com/nodejs/node/commit/0df72f07c8)] - **meta**: bump actions/checkout from 6.0.1 to 6.0.2 (dependabot\[bot]) [#61619](https://github.com/nodejs/node/pull/61619) +- \[[`d147c08b83`](https://github.com/nodejs/node/commit/d147c08b83)] - **module**: do not invoke resolve hooks twice for imported cjs (Joyee Cheung) [#61529](https://github.com/nodejs/node/pull/61529) +- \[[`a2843f8556`](https://github.com/nodejs/node/commit/a2843f8556)] - **net**: defer synchronous destroy calls in internalConnect (RajeshKumar11) [#61658](https://github.com/nodejs/node/pull/61658) +- \[[`7fb7030781`](https://github.com/nodejs/node/commit/7fb7030781)] - **repl**: fix flaky test-repl-programmatic-history (Matteo Collina) [#61614](https://github.com/nodejs/node/pull/61614) +- \[[`d4c9b5cf5b`](https://github.com/nodejs/node/commit/d4c9b5cf5b)] - **sqlite**: avoid extra copy for large text binds (Ali Hassan) [#61580](https://github.com/nodejs/node/pull/61580) +- \[[`aa1b3661d9`](https://github.com/nodejs/node/commit/aa1b3661d9)] - **sqlite**: use DictionaryTemplate for run() result (Mert Can Altin) [#61432](https://github.com/nodejs/node/pull/61432) +- \[[`9c8ad7e881`](https://github.com/nodejs/node/commit/9c8ad7e881)] - **src**: elide heap allocation in structured clone implementation (Anna Henningsen) [#61703](https://github.com/nodejs/node/pull/61703) +- \[[`c4ecfef93d`](https://github.com/nodejs/node/commit/c4ecfef93d)] - **src**: use simdutf for one-byte string UTF-8 write in stringBytes (Mert Can Altin) [#61696](https://github.com/nodejs/node/pull/61696) +- \[[`28905b9734`](https://github.com/nodejs/node/commit/28905b9734)] - **src**: consolidate C++ ReadFileSync/WriteFileSync utilities (Joyee Cheung) [#61662](https://github.com/nodejs/node/pull/61662) +- \[[`e90cec2f69`](https://github.com/nodejs/node/commit/e90cec2f69)] - **test**: restraint version replacement pattern in snapshots (Chengzhong Wu) [#61748](https://github.com/nodejs/node/pull/61748) +- \[[`adce20c0a1`](https://github.com/nodejs/node/commit/adce20c0a1)] - **test**: print stack immediately avoiding GC interleaving (Chengzhong Wu) [#61699](https://github.com/nodejs/node/pull/61699) +- \[[`7643bc8999`](https://github.com/nodejs/node/commit/7643bc8999)] - **test**: fix case-insensitive path matching on Windows (Matteo Collina) [#61682](https://github.com/nodejs/node/pull/61682) +- \[[`23d1ecf66f`](https://github.com/nodejs/node/commit/23d1ecf66f)] - **test**: fix flaky test-performance-eventloopdelay (Matteo Collina) [#61629](https://github.com/nodejs/node/pull/61629) +- \[[`99012a88ed`](https://github.com/nodejs/node/commit/99012a88ed)] - **test**: remove duplicate wpt tests (Filip Skokan) [#61617](https://github.com/nodejs/node/pull/61617) +- \[[`a8b32b8ce1`](https://github.com/nodejs/node/commit/a8b32b8ce1)] - **test**: fix race condition in watch mode tests (Matteo Collina) [#61615](https://github.com/nodejs/node/pull/61615) +- \[[`086a5a5a25`](https://github.com/nodejs/node/commit/086a5a5a25)] - **test**: update WPT for url to e3c46fdf55 (Node.js GitHub Bot) [#61602](https://github.com/nodejs/node/pull/61602) +- \[[`f0574fd419`](https://github.com/nodejs/node/commit/f0574fd419)] - **test**: use the skipIfNoWatch() utility function (Luigi Pinca) [#61531](https://github.com/nodejs/node/pull/61531) +- \[[`b064ddc221`](https://github.com/nodejs/node/commit/b064ddc221)] - **test**: unify assertSnapshot common patterns (Chengzhong Wu) [#61590](https://github.com/nodejs/node/pull/61590) +- \[[`17122e521b`](https://github.com/nodejs/node/commit/17122e521b)] - **test_runner**: fix test enqueue when test file has syntax error (Edy Silva) [#61573](https://github.com/nodejs/node/pull/61573) +- \[[`bad3f02dd9`](https://github.com/nodejs/node/commit/bad3f02dd9)] - **tools**: enforce removal of `lts-watch-*` labels on release proposals (Antoine du Hamel) [#61672](https://github.com/nodejs/node/pull/61672) +- \[[`a8f33fd6bd`](https://github.com/nodejs/node/commit/a8f33fd6bd)] - **tools**: use ubuntu-slim runner in meta GitHub Actions (Tierney Cyren) [#61663](https://github.com/nodejs/node/pull/61663) +- \[[`c843e447ca`](https://github.com/nodejs/node/commit/c843e447ca)] - **tools**: test `--shared-merve` in `test-shared` workflow (Antoine du Hamel) [#61649](https://github.com/nodejs/node/pull/61649) +- \[[`2fedc03f96`](https://github.com/nodejs/node/commit/2fedc03f96)] - **tools**: update OpenSSL to 3.5.5 in `test-shared` (Antoine du Hamel) [#61551](https://github.com/nodejs/node/pull/61551) +- \[[`1c1db94670`](https://github.com/nodejs/node/commit/1c1db94670)] - **tools,win**: upgrade install additional tools to Visual Studio 2026 (Mike McCready) [#61562](https://github.com/nodejs/node/pull/61562) + +Windows 64-bit Installer: https://nodejs.org/dist/v25.6.1/node-v25.6.1-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v25.6.1/node-v25.6.1-arm64.msi \ +Windows 64-bit Binary: https://nodejs.org/dist/v25.6.1/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v25.6.1/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v25.6.1/node-v25.6.1.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-aix-ppc64.tar.gz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v25.6.1/node-v25.6.1-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v25.6.1/node-v25.6.1.tar.gz \ +Other release files: https://nodejs.org/dist/v25.6.1/ \ +Documentation: https://nodejs.org/docs/v25.6.1/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +21eacf97f520b95b8e6d774e68832c323a8118767f3c1a95a431de7169c89c2f node-v25.6.1-aix-ppc64.tar.gz +4b1d58e83a854481e87e21ce636ada04364c8b952095e545cbf91435911027a5 node-v25.6.1-arm64.msi +a80cb252d170a4730f78f5950cf19a46106f156e5886e5c1cc8c5602aea60243 node-v25.6.1-darwin-arm64.tar.gz +d5c37f04d4006741574730871148839f254f3b3940f5afd70f7d1e70970c90e3 node-v25.6.1-darwin-arm64.tar.xz +3b68f847d9d8861c7c8bfef32c540d14f6ca18bfcbf5f6495a595b9529063a9b node-v25.6.1-darwin-x64.tar.gz +7b6211bdb2a90834422f0243274ff1ca5deee309ca12a21329edcf1f775f8113 node-v25.6.1-darwin-x64.tar.xz +0fa0c1aa6dda46d9595e860635e1edcbb7d0c9f0c42da316e37f293ab90a6412 node-v25.6.1-headers.tar.gz +31c82dd9d6837b2bce85652623f6c712769dd546cdf96282a558d661af1922d3 node-v25.6.1-headers.tar.xz +90fea701897ecb424aafa2824539476598437ad9f21e649732a85cc2d955d845 node-v25.6.1-linux-arm64.tar.gz +157e76f7eee66cff1492489c94c801c48b2b0859e7f352f28b12e855ead301ff node-v25.6.1-linux-arm64.tar.xz +28bdd63dc0540d4fb1f5fbd200212d50e5cc09c40b3eb4ce2fe0c4c09f542e06 node-v25.6.1-linux-ppc64le.tar.gz +2824e6d443d0feb82d2c934c2cc364c3becf5c24be438451487aea4fd62bf158 node-v25.6.1-linux-ppc64le.tar.xz +0e819251ac30d8aaceaa0dbc3012472c8d624f14327ae7b3a184876b929c2a67 node-v25.6.1-linux-s390x.tar.gz +4f8201e701e505624f7d470586364e35d4d41ce6a3832b7c4ad192969f9234e8 node-v25.6.1-linux-s390x.tar.xz +3809fdbfd54829bad363b9db8e96ca3600509e2ff20ede74181cfc1ca8451ce3 node-v25.6.1-linux-x64.tar.gz +97eec07e2a43c5a39e4968c1ae554461783914d872c27d856e98d2751094f5be node-v25.6.1-linux-x64.tar.xz +87f13e0aba0e02e4aee57ca586da59aea1b503d5e98aa5a100eba8e4b42ee26d node-v25.6.1-win-arm64.7z +e11f610f584261617259aba8cbb8d2af6d1eb726cc0a433197572e5882d0bf77 node-v25.6.1-win-arm64.zip +76281226593d12ccbd775e9553ee259ef06cd2bece7d6daabb26eaaa5406f0ca node-v25.6.1-win-x64.7z +0ae2300cdf44c399b5b351edbefb3534d1342a6fabd64302ca8c8e2fb86b0445 node-v25.6.1-win-x64.zip +8906e19ae88fdfa2dab2e140667dfa05a70b746bd0ca4d1b849aa5c7cbb71dc9 node-v25.6.1-x64.msi +153e0e33c9b8f9945cb02f639d435388f606220fcf7beda5010b5a6aba624c67 node-v25.6.1.pkg +a72bb2b274e8ddf3c933ea7a73d5ac4fce7503e45edc9d541fc75d104fa848c3 node-v25.6.1.tar.gz +cf756781c8b4dc5ee030f87ddf9d51b8d5bf219ad56cbd9855c4a3bdc832c78e node-v25.6.1.tar.xz +1ece331f8d170fba2ea1523f6cdfec4fc95c22c0758aa6c8aaa0140918509f09 win-arm64/node.exe +47750ee99207e5b621671565852cf7385f27bf664470886b9437137342a497c9 win-arm64/node.lib +1968da8c616e14213e38c3940d3796615b2c9264bcb597be97c4007465483b3c win-arm64/node_pdb.7z +7b05ee18d9b73e3704da7d30d57dd24f4b97d3850afa02ec229673e4b67c19e4 win-arm64/node_pdb.zip +677507a667c7fc0be6162312a260eb996202f127255f72357708cdb6f412429b win-x64/node.exe +f7201b932d898bdbf78aee7add288d2263c4791f1502068ad11b6c14675c6324 win-x64/node.lib +b2ef067a44da18d3751a67e0c5299c75be0f02f5dcce46effa0c29b69cf4cf44 win-x64/node_pdb.7z +992a113f23de308552f894f0de2ae9810d2f633d021c8c199ab9c6795e0439cc win-x64/node_pdb.zip + +-----BEGIN PGP SIGNATURE----- + +iHUEARYIAB0WIQRb6KP2yKXAHRBsCtggsaOQsWjTVgUCaYs0AwAKCRAgsaOQsWjT +ViwdAQCRnKxMteNgIdARF/OCughVAML9+gyQNYFa02XEJAN0wwD9HDmiadFdOvV4 +gmK6dSHrqxTz99irXvJZx8Z0tewW0wY= +=FpZa +-----END PGP SIGNATURE----- +``` diff --git a/apps/site/pages/en/blog/release/v25.7.0.md b/apps/site/pages/en/blog/release/v25.7.0.md new file mode 100644 index 0000000000000..3d9683ea36f98 --- /dev/null +++ b/apps/site/pages/en/blog/release/v25.7.0.md @@ -0,0 +1,182 @@ +--- +date: '2026-02-24T15:38:46.266Z' +category: release +title: Node.js 25.7.0 (Current) +layout: blog-post +author: Ruy Adorno +--- + +## 2026-02-24, Version 25.7.0 (Current), @ruyadorno prepared by @aduh95 + +### Notable Changes + +- \[[`b0a79b10f0`](https://github.com/nodejs/node/commit/b0a79b10f0)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#61713](https://github.com/nodejs/node/pull/61713) +- \[[`2d874dfb8e`](https://github.com/nodejs/node/commit/2d874dfb8e)] - **(SEMVER-MINOR)** **sea**: support ESM entry point in SEA (Joyee Cheung) [#61813](https://github.com/nodejs/node/pull/61813) +- \[[`ee59127664`](https://github.com/nodejs/node/commit/ee59127664)] - **sqlite**: mark as release candidate (Matteo Collina) [#61262](https://github.com/nodejs/node/pull/61262) +- \[[`608736e19e`](https://github.com/nodejs/node/commit/608736e19e)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#61632](https://github.com/nodejs/node/pull/61632) +- \[[`a43375999f`](https://github.com/nodejs/node/commit/a43375999f)] - **(SEMVER-MINOR)** **test_runner**: show interrupted test on SIGINT (Matteo Collina) [#61676](https://github.com/nodejs/node/pull/61676) + +### Commits + +- \[[`ab4375e141`](https://github.com/nodejs/node/commit/ab4375e141)] - **benchmark**: add startup benchmark for ESM entrypoint (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769) +- \[[`8d83d8026b`](https://github.com/nodejs/node/commit/8d83d8026b)] - **build**: add temporal test on GHA windows (Chengzhong Wu) [#61810](https://github.com/nodejs/node/pull/61810) +- \[[`aab153eec3`](https://github.com/nodejs/node/commit/aab153eec3)] - **build**: skip sscache action on non-main branches (Joyee Cheung) [#61790](https://github.com/nodejs/node/pull/61790) +- \[[`9e40fb93bc`](https://github.com/nodejs/node/commit/9e40fb93bc)] - **build**: use path-ignore in GHA coverage-windows.yml (Chengzhong Wu) [#61811](https://github.com/nodejs/node/pull/61811) +- \[[`4896653361`](https://github.com/nodejs/node/commit/4896653361)] - **build**: generate_config_gypi.py generates valid JSON (Shelley Vohr) [#61791](https://github.com/nodejs/node/pull/61791) +- \[[`bb82b44de0`](https://github.com/nodejs/node/commit/bb82b44de0)] - **build**: build with v8 gdbjit support on supported platform (Joyee Cheung) [#61010](https://github.com/nodejs/node/pull/61010) +- \[[`e7173a093a`](https://github.com/nodejs/node/commit/e7173a093a)] - **build**: show cc outputs when version detection failed (Chengzhong Wu) [#61700](https://github.com/nodejs/node/pull/61700) +- \[[`848050d38f`](https://github.com/nodejs/node/commit/848050d38f)] - **build,win**: add WinGet Visual Studio 2022 Build Tools Edition config (Mike McCready) [#61652](https://github.com/nodejs/node/pull/61652) +- \[[`938841e1cd`](https://github.com/nodejs/node/commit/938841e1cd)] - **crypto**: always return certificate serial numbers as uppercase (Anna Henningsen) [#61752](https://github.com/nodejs/node/pull/61752) +- \[[`dba9001d6f`](https://github.com/nodejs/node/commit/dba9001d6f)] - **deps**: upgrade npm to 11.10.1 (npm team) [#61892](https://github.com/nodejs/node/pull/61892) +- \[[`75c8e18d2f`](https://github.com/nodejs/node/commit/75c8e18d2f)] - **deps**: update nbytes to 0.1.3 (Node.js GitHub Bot) [#61879](https://github.com/nodejs/node/pull/61879) +- \[[`4ca1597f25`](https://github.com/nodejs/node/commit/4ca1597f25)] - **deps**: remove stale OpenSSL arch configs (René) [#61834](https://github.com/nodejs/node/pull/61834) +- \[[`c4f298c729`](https://github.com/nodejs/node/commit/c4f298c729)] - **deps**: update llhttp to 9.3.1 (Node.js GitHub Bot) [#61827](https://github.com/nodejs/node/pull/61827) +- \[[`7d63a2df93`](https://github.com/nodejs/node/commit/7d63a2df93)] - **deps**: V8: cherry-pick 64b36b441179 (Rafael Magrin) [#61712](https://github.com/nodejs/node/pull/61712) +- \[[`241a6b7088`](https://github.com/nodejs/node/commit/241a6b7088)] - **deps**: update googletest to 5a9c3f9e8d9b90bbbe8feb32902146cb8f7c1757 (Node.js GitHub Bot) [#61731](https://github.com/nodejs/node/pull/61731) +- \[[`eec896c0e0`](https://github.com/nodejs/node/commit/eec896c0e0)] - **deps**: V8: backport 6a0a25abaed3 (Vivian Wang) [#61666](https://github.com/nodejs/node/pull/61666) +- \[[`5a9874af09`](https://github.com/nodejs/node/commit/5a9874af09)] - **doc**: clarify status of feature request issues (Antoine du Hamel) [#61505](https://github.com/nodejs/node/pull/61505) +- \[[`0648ac64aa`](https://github.com/nodejs/node/commit/0648ac64aa)] - **doc**: add esm and cjs examples to node:vm (Alfredo González) [#61498](https://github.com/nodejs/node/pull/61498) +- \[[`8b38718294`](https://github.com/nodejs/node/commit/8b38718294)] - **doc**: clarify build environment is trusted in threat model (Matteo Collina) [#61865](https://github.com/nodejs/node/pull/61865) +- \[[`10e86818ee`](https://github.com/nodejs/node/commit/10e86818ee)] - **doc**: remove incorrect mention of `module` in `typescript.md` (Rob Palmer) [#61839](https://github.com/nodejs/node/pull/61839) +- \[[`b50376f527`](https://github.com/nodejs/node/commit/b50376f527)] - **doc**: simplify addAbortListener example (Chemi Atlow) [#61842](https://github.com/nodejs/node/pull/61842) +- \[[`dea0e7a856`](https://github.com/nodejs/node/commit/dea0e7a856)] - **doc**: fix typo in --disable-wasm-trap-handler description (Dmytro Semchuk) [#61820](https://github.com/nodejs/node/pull/61820) +- \[[`57ac1f5aa0`](https://github.com/nodejs/node/commit/57ac1f5aa0)] - **doc**: clean up globals.md (René) [#61822](https://github.com/nodejs/node/pull/61822) +- \[[`4c30d2bb4d`](https://github.com/nodejs/node/commit/4c30d2bb4d)] - **doc**: remove obsolete Boxstarter automated install (Mike McCready) [#61785](https://github.com/nodejs/node/pull/61785) +- \[[`db610b9e32`](https://github.com/nodejs/node/commit/db610b9e32)] - **doc**: clarify async caveats for `events.once()` (René) [#61572](https://github.com/nodejs/node/pull/61572) +- \[[`b4a826b11c`](https://github.com/nodejs/node/commit/b4a826b11c)] - **doc**: update Juan's security steward info (Juan José) [#61754](https://github.com/nodejs/node/pull/61754) +- \[[`7d9cc5dc54`](https://github.com/nodejs/node/commit/7d9cc5dc54)] - **doc**: fix methods being documented as properties in `process.md` (Antoine du Hamel) [#61765](https://github.com/nodejs/node/pull/61765) +- \[[`aa0362c26a`](https://github.com/nodejs/node/commit/aa0362c26a)] - **doc**: add riscv64 info into platform list (Lu Yahan) [#42251](https://github.com/nodejs/node/pull/42251) +- \[[`9b0101b65b`](https://github.com/nodejs/node/commit/9b0101b65b)] - **doc**: fix dropdown menu being obscured at <600px due to stacking context (Jeff) [#61735](https://github.com/nodejs/node/pull/61735) +- \[[`df2c65b3e4`](https://github.com/nodejs/node/commit/df2c65b3e4)] - **doc**: fix spacing in process message event (Aviv Keller) [#61756](https://github.com/nodejs/node/pull/61756) +- \[[`01018559f5`](https://github.com/nodejs/node/commit/01018559f5)] - **doc**: move describe/it aliases section before expectFailure (Luca Raveri) [#61567](https://github.com/nodejs/node/pull/61567) +- \[[`49443583af`](https://github.com/nodejs/node/commit/49443583af)] - **doc**: fix broken links of net.md (YuSheng Chen) [#61673](https://github.com/nodejs/node/pull/61673) +- \[[`af7c927a2a`](https://github.com/nodejs/node/commit/af7c927a2a)] - **doc**: clean up Windows code snippet in `child_process.md` (reillylm) [#61422](https://github.com/nodejs/node/pull/61422) +- \[[`221648a687`](https://github.com/nodejs/node/commit/221648a687)] - **esm**: update outdated FIXME comment in translators.js (Karan Mangtani) [#61715](https://github.com/nodejs/node/pull/61715) +- \[[`4484e14a31`](https://github.com/nodejs/node/commit/4484e14a31)] - **events**: don't call resume after close (Сковорода Никита Андреевич) [#60548](https://github.com/nodejs/node/pull/60548) +- \[[`4cecbe1f53`](https://github.com/nodejs/node/commit/4cecbe1f53)] - **fs**: add `throwIfNoEntry` option for fs.stat and fs.promises.stat (Juan José) [#61178](https://github.com/nodejs/node/pull/61178) +- \[[`2c94967684`](https://github.com/nodejs/node/commit/2c94967684)] - **http**: remove redundant keepAliveTimeoutBuffer assignment (Efe) [#61743](https://github.com/nodejs/node/pull/61743) +- \[[`435f3dd8e4`](https://github.com/nodejs/node/commit/435f3dd8e4)] - **http**: attach error handler to socket synchronously in onSocket (RajeshKumar11) [#61770](https://github.com/nodejs/node/pull/61770) +- \[[`ce0ebd853d`](https://github.com/nodejs/node/commit/ce0ebd853d)] - **http**: fix keep-alive socket reuse race in requestOnFinish (Martin Slota) [#61710](https://github.com/nodejs/node/pull/61710) +- \[[`8103a78b6a`](https://github.com/nodejs/node/commit/8103a78b6a)] - **http2**: add strictSingleValueFields option to relax header validation (Tim Perry) [#59917](https://github.com/nodejs/node/pull/59917) +- \[[`b0a79b10f0`](https://github.com/nodejs/node/commit/b0a79b10f0)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#61713](https://github.com/nodejs/node/pull/61713) +- \[[`c589b6b23c`](https://github.com/nodejs/node/commit/c589b6b23c)] - **http2**: fix FileHandle leak in respondWithFile (sangwook) [#61707](https://github.com/nodejs/node/pull/61707) +- \[[`df477202ae`](https://github.com/nodejs/node/commit/df477202ae)] - **lib**: reduce cycles in esm loader and load it in snapshot (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769) +- \[[`deda50a819`](https://github.com/nodejs/node/commit/deda50a819)] - **lib**: remove top-level getOptionValue() calls in lib/internal/modules (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769) +- \[[`b1c1ddff79`](https://github.com/nodejs/node/commit/b1c1ddff79)] - **lib**: optimize styleText when validateStream is false (Rafael Gonzaga) [#61792](https://github.com/nodejs/node/pull/61792) +- \[[`df334f7fa0`](https://github.com/nodejs/node/commit/df334f7fa0)] - **meta**: use SCCACHE_GHA_ENABLED for shared build workflows (René) [#61640](https://github.com/nodejs/node/pull/61640) +- \[[`e1b2cd605f`](https://github.com/nodejs/node/commit/e1b2cd605f)] - **meta**: bump cachix/install-nix-action from 31.9.0 to 31.9.1 (dependabot\[bot]) [#61910](https://github.com/nodejs/node/pull/61910) +- \[[`24b858547a`](https://github.com/nodejs/node/commit/24b858547a)] - **module**: fix extensionless entry with explicit type=commonjs (Yuya Inoue) [#61600](https://github.com/nodejs/node/pull/61600) +- \[[`4f2f8006bd`](https://github.com/nodejs/node/commit/4f2f8006bd)] - **repl**: fix FileHandle leak in history initialization (sangwook) [#61706](https://github.com/nodejs/node/pull/61706) +- \[[`2d874dfb8e`](https://github.com/nodejs/node/commit/2d874dfb8e)] - **(SEMVER-MINOR)** **sea**: support ESM entry point in SEA (Joyee Cheung) [#61813](https://github.com/nodejs/node/pull/61813) +- \[[`ee59127664`](https://github.com/nodejs/node/commit/ee59127664)] - **sqlite**: mark as release candidate (Matteo Collina) [#61262](https://github.com/nodejs/node/pull/61262) +- \[[`f14ff14473`](https://github.com/nodejs/node/commit/f14ff14473)] - **src**: remove unnecessary `c_str()` conversions in diagnostic messages (Anna Henningsen) [#61786](https://github.com/nodejs/node/pull/61786) +- \[[`26a09e541d`](https://github.com/nodejs/node/commit/26a09e541d)] - **src**: use bool literals in TraceEnvVarOptions (Tobias Nießen) [#61425](https://github.com/nodejs/node/pull/61425) +- \[[`62b0758c47`](https://github.com/nodejs/node/commit/62b0758c47)] - **src**: fix `--build-sea` default executable path (Alex Schwartz) [#61708](https://github.com/nodejs/node/pull/61708) +- \[[`b5724921b1`](https://github.com/nodejs/node/commit/b5724921b1)] - **src**: track allocations made by zstd streams (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717) +- \[[`3d1d1523a5`](https://github.com/nodejs/node/commit/3d1d1523a5)] - **src**: do not store compression methods on Brotli classes (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717) +- \[[`b2915cda77`](https://github.com/nodejs/node/commit/b2915cda77)] - **src**: extract zlib allocation tracking into its own class (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717) +- \[[`3032a7e3c6`](https://github.com/nodejs/node/commit/3032a7e3c6)] - **src**: release memory for zstd contexts in `Close()` (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717) +- \[[`bc2287db74`](https://github.com/nodejs/node/commit/bc2287db74)] - **src**: add more checks and clarify docs for external references (Joyee Cheung) [#61719](https://github.com/nodejs/node/pull/61719) +- \[[`5daf282e33`](https://github.com/nodejs/node/commit/5daf282e33)] - **src**: fix cjs_lexer external reference registration (Joyee Cheung) [#61718](https://github.com/nodejs/node/pull/61718) +- \[[`fb2db5f947`](https://github.com/nodejs/node/commit/fb2db5f947)] - **src**: support import() and import.meta in embedder-run modules (Joyee Cheung) [#61654](https://github.com/nodejs/node/pull/61654) +- \[[`e146591002`](https://github.com/nodejs/node/commit/e146591002)] - **stream**: fix decoded fromList chunk boundary check (Thomas Watson) [#61884](https://github.com/nodejs/node/pull/61884) +- \[[`065200a5f0`](https://github.com/nodejs/node/commit/065200a5f0)] - **stream**: add fast paths for webstreams read and pipeTo (Matteo Collina) [#61807](https://github.com/nodejs/node/pull/61807) +- \[[`608736e19e`](https://github.com/nodejs/node/commit/608736e19e)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#61632](https://github.com/nodejs/node/pull/61632) +- \[[`51587d684d`](https://github.com/nodejs/node/commit/51587d684d)] - **test**: fix typos in test files (Daijiro Wachi) [#61408](https://github.com/nodejs/node/pull/61408) +- \[[`17b2361360`](https://github.com/nodejs/node/commit/17b2361360)] - **test**: allow filtering async internal frames in assertSnapshot (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769) +- \[[`3f6a5f5f7f`](https://github.com/nodejs/node/commit/3f6a5f5f7f)] - **test**: unify assertSnapshot stacktrace transform (Chengzhong Wu) [#61665](https://github.com/nodejs/node/pull/61665) +- \[[`c8dac320de`](https://github.com/nodejs/node/commit/c8dac320de)] - **test**: check stability block position in API markdown (René) [#58590](https://github.com/nodejs/node/pull/58590) +- \[[`6809ef8d04`](https://github.com/nodejs/node/commit/6809ef8d04)] - **test**: adapt buffer test for v8 sandbox (Shelley Vohr) [#61772](https://github.com/nodejs/node/pull/61772) +- \[[`60f5771a74`](https://github.com/nodejs/node/commit/60f5771a74)] - **test**: update FileAPI tests from WPT (Ms2ger) [#61750](https://github.com/nodejs/node/pull/61750) +- \[[`d2fef4a31a`](https://github.com/nodejs/node/commit/d2fef4a31a)] - **test**: update WPT for WebCryptoAPI to 7cbe7e8ed9 (Node.js GitHub Bot) [#61729](https://github.com/nodejs/node/pull/61729) +- \[[`d7a87f14da`](https://github.com/nodejs/node/commit/d7a87f14da)] - **test**: update WPT for url to efb889eb4c (Node.js GitHub Bot) [#61728](https://github.com/nodejs/node/pull/61728) +- \[[`b6ae1fc4b8`](https://github.com/nodejs/node/commit/b6ae1fc4b8)] - **test**: split test-embedding.js and run tests in parallel (Joyee Cheung) [#61571](https://github.com/nodejs/node/pull/61571) +- \[[`a43375999f`](https://github.com/nodejs/node/commit/a43375999f)] - **(SEMVER-MINOR)** **test_runner**: show interrupted test on SIGINT (Matteo Collina) [#61676](https://github.com/nodejs/node/pull/61676) +- \[[`1c02aa09b0`](https://github.com/nodejs/node/commit/1c02aa09b0)] - **test_runner**: fix suite rerun (Moshe Atlow) [#61775](https://github.com/nodejs/node/pull/61775) +- \[[`47821ec609`](https://github.com/nodejs/node/commit/47821ec609)] - **tools**: switch to ARM runners on GHA jobs (Antoine du Hamel) [#61903](https://github.com/nodejs/node/pull/61903) +- \[[`1630a56370`](https://github.com/nodejs/node/commit/1630a56370)] - **tools**: avoid building twice in coverage jobs (Antoine du Hamel) [#61899](https://github.com/nodejs/node/pull/61899) +- \[[`89318b0a02`](https://github.com/nodejs/node/commit/89318b0a02)] - **tools**: fix auto-start-ci (Antoine du Hamel) [#61900](https://github.com/nodejs/node/pull/61900) +- \[[`ee107f5e84`](https://github.com/nodejs/node/commit/ee107f5e84)] - **tools**: do not checkout repo in `auto-start-ci.yml` (Antoine du Hamel) [#61874](https://github.com/nodejs/node/pull/61874) +- \[[`c2de1fa619`](https://github.com/nodejs/node/commit/c2de1fa619)] - **tools**: cache V8 build on test-shared workflow (Antoine du Hamel) [#61860](https://github.com/nodejs/node/pull/61860) +- \[[`111c77ec94`](https://github.com/nodejs/node/commit/111c77ec94)] - **tools**: automate updates for test/fixtures/test426 (Rich Trott) [#60978](https://github.com/nodejs/node/pull/60978) +- \[[`ea8886f7d5`](https://github.com/nodejs/node/commit/ea8886f7d5)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61759](https://github.com/nodejs/node/pull/61759) +- \[[`9db82ba786`](https://github.com/nodejs/node/commit/9db82ba786)] - **tools**: bump unist-util-visit in /tools/doc in the doc group (dependabot\[bot]) [#61646](https://github.com/nodejs/node/pull/61646) +- \[[`c8e58c56b9`](https://github.com/nodejs/node/commit/c8e58c56b9)] - **tools**: bump the eslint group in /tools/eslint with 6 updates (dependabot\[bot]) [#61628](https://github.com/nodejs/node/pull/61628) +- \[[`2518ec77e8`](https://github.com/nodejs/node/commit/2518ec77e8)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61734](https://github.com/nodejs/node/pull/61734) +- \[[`c5ad2beba3`](https://github.com/nodejs/node/commit/c5ad2beba3)] - **tools**: fix small inconsistencies in JSON doc output (Antoine du Hamel) [#61757](https://github.com/nodejs/node/pull/61757) +- \[[`a9f90bee0a`](https://github.com/nodejs/node/commit/a9f90bee0a)] - **tools**: use ubuntu-latest runner in `notify-on-push` workflow (Antoine du Hamel) [#61742](https://github.com/nodejs/node/pull/61742) +- \[[`30e38182d9`](https://github.com/nodejs/node/commit/30e38182d9)] - **watch**: get flags from execArgv (Efe) [#61779](https://github.com/nodejs/node/pull/61779) +- \[[`da1a08a3a5`](https://github.com/nodejs/node/commit/da1a08a3a5)] - **worker**: eliminate race condition in process.cwd() (giulioAZ) [#61664](https://github.com/nodejs/node/pull/61664) +- \[[`dfac82a235`](https://github.com/nodejs/node/commit/dfac82a235)] - **zlib**: add support for brotli compression dictionary (Andy Weiss) [#61763](https://github.com/nodejs/node/pull/61763) + +Windows 64-bit Installer: https://nodejs.org/dist/v25.7.0/node-v25.7.0-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v25.7.0/node-v25.7.0-arm64.msi \ +Windows 64-bit Binary: https://nodejs.org/dist/v25.7.0/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v25.7.0/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v25.7.0/node-v25.7.0.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-aix-ppc64.tar.gz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v25.7.0/node-v25.7.0-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v25.7.0/node-v25.7.0.tar.gz \ +Other release files: https://nodejs.org/dist/v25.7.0/ \ +Documentation: https://nodejs.org/docs/v25.7.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +500805d140c6eae59705c12eeb4c59954c872b345be3a880dd59d7fa4d134abb node-v25.7.0-aix-ppc64.tar.gz +39d400db485fdb261981849a15c52c1f051ff8356c0f75c02bb09151498c290d node-v25.7.0-arm64.msi +d4e3cfe5e6bddda41ba0c683e37329632465b93371ddc538c763578758d5bc35 node-v25.7.0-darwin-arm64.tar.gz +6745e61fc00c87f20a3584591275d55b1712891eaa06d28a6bf7e97bc91262ec node-v25.7.0-darwin-arm64.tar.xz +f83929f4a84ae5a88c2a5333466b100dd101658063592497626ae9eea15b3b1b node-v25.7.0-darwin-x64.tar.gz +4843ab17e74d088a6d20d6a30589d648205a261c5b9c7f0d50235610aff2ff1b node-v25.7.0-darwin-x64.tar.xz +62b6ce65475bd3ac88f4f3f7e31c8c9f35b9c9631296e82a62670b72d1234fe1 node-v25.7.0-headers.tar.gz +b6646b9ceba75246021f3f6db4e9863dc6ee9ec87d93a3be1382fb9da1f6e1ad node-v25.7.0-headers.tar.xz +3a73c9145547b5d2e29491b0ed6a37b95306b784eb83cdb2361f1e2e76fa237f node-v25.7.0-linux-arm64.tar.gz +4aad827d8ecce8143624e09b98946e23c96a270a1407e9c13a56ceec163b4205 node-v25.7.0-linux-arm64.tar.xz +c2b5e162efb21a1d41c026bf5b08b3798e2e813b969031b1ed069b167cce77a0 node-v25.7.0-linux-ppc64le.tar.gz +59076fc29ca75b73caeafa91bb627e0c5fe083b0b7d3077389459bfea7712b78 node-v25.7.0-linux-ppc64le.tar.xz +c53a17fb58b0d8ec3001268bc69fbd4e3ec97034b7fde7c95b422d5734c52cd5 node-v25.7.0-linux-s390x.tar.gz +048749b91d9d0946b684a487c465adf56bff983949d8610ba6c0951ae61142ce node-v25.7.0-linux-s390x.tar.xz +033ad3a740d62d3c7e3aaa1fecfeec16a719d4af33ab030666bf171057b070d9 node-v25.7.0-linux-x64.tar.gz +2af25e8fc301bb3bbf02874f7d07e1d00483dc143fbd0eb56ee844c17849168e node-v25.7.0-linux-x64.tar.xz +477eb8f5499904b2eb76212e0f14f40965c693795b0af8e1500cc7aeaa1c18b8 node-v25.7.0.pkg +2a36edd1c8cc4d275464ff873a199937c8237c13f6943db5f7879f8a83ceddbe node-v25.7.0.tar.gz +8f13df7e8f79c3e8f227ad713c754592293c98f70e9e29e8fcee974e62a000e1 node-v25.7.0.tar.xz +297368ae8d82b138ad604a52578b4e2144e802d4c2855be8d3ea60ef7bf6b455 node-v25.7.0-win-arm64.7z +8b824eb15ae95d24bd082cee9637f74d5850ba5c8649bd65c5f108e360835f1e node-v25.7.0-win-arm64.zip +388fd0d55294854a132adb3bd4deee8b5afef431b7d8a3babc34ae0931ca00e8 node-v25.7.0-win-x64.7z +4a66eac416c30474fe9c3f0ef7d4ffc85a8797cbc35f6b8566dfbce02789a9c4 node-v25.7.0-win-x64.zip +5cb49889fd408ab9fe19471b0ab52badaf5724e47a6f824b0e11cafd09576838 node-v25.7.0-x64.msi +3e29601f88368da267420815f89e7bc73d67de7793a60b70a25c0c25dd6c6843 win-arm64/node.exe +47750ee99207e5b621671565852cf7385f27bf664470886b9437137342a497c9 win-arm64/node.lib +c9357f6f020191a72159acfcffc5f1c0828d841dc8d247e9af37798b97e55dca win-arm64/node_pdb.7z +279f034bebb2750f18e9bfe54688c301b517398f0cf6e1e09df57d90ab8b552d win-arm64/node_pdb.zip +6d27b928592496d739f97eb0dec6818fd7b23089ef4626f8967ece5907d23d36 win-x64/node.exe +f7201b932d898bdbf78aee7add288d2263c4791f1502068ad11b6c14675c6324 win-x64/node.lib +406b61316a6d06a0e7396d98ada6e3bd76de5ca9d8fc454fafc867c59341c060 win-x64/node_pdb.7z +1e0e09b139fa8e116b339a9f8c27f5235ffee457d6ee4bc133f07671a5aa5521 win-x64/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEEEI9StI21e7DMQ5spl7AUGb2S+AoFAmmdxT4ACgkQl7AUGb2S ++Aq13A/+LZPSUeuaxLXPqztZV4GYmt35Z1JEyXou4AZp2asnAVEvLKy49hIm82cQ +Carn4LlOKLXuvEh0ZdYs53iT+xX+gIJfTQdXC/Kjaa61Rj4rdXeCP6qL1WuL39oN +FWYyk/ubhrFFWC8KV0UbGGf9Zv9wICSSDsFsdfxpkuO0aOfpC3Bj1I2j8JrlHlTP +L9mgZJs47ymlx5GGVIvK/niPBJh0znzDilQjAAj8txU6QSD+GA75ovkBkQd5s3jV +sgGTz0tRCUn8II7enmV/dfDgF9b50xP4k6vyqsNaV3WDtra7rTgehnYXgBK8lqiz +ajcaXNDd1+25pL7bkth1icAFODvZqOv8lywUlsdX1ufg8ZIP8+k/+H5Q7vsBCApH ++wapAEG5sUzN+tydJD0Xn73UNlOo+r+kLWndFD27Pfg/v4oP76fX9JNEEUEvryxT +qsqk87hL9dZkID+wOvgDpZR2md09bq2Ra4Jq1K20VaRjlfvd9zI8vcxktIdUZ2ha +7Y333TasoBl1zlM507X2Z7vvnTDWOKsZ4mDtPwSFXy09puJBexa32X0BWU0TzPqR +Qeb3b3voysIwk9KoILOrzdukb3BKXeIJul3Y/1vAyO3kolLFE/O+80Sm6TxfZ8SX +mDM7qdAGxX+TJ/AJHf+bBkEjxYim0VMwplD0LrT5HQvQ3qmzauk= +=58BT +-----END PGP SIGNATURE----- +``` diff --git a/apps/site/pages/en/blog/release/v25.8.0.md b/apps/site/pages/en/blog/release/v25.8.0.md new file mode 100644 index 0000000000000..877820ec5eee2 --- /dev/null +++ b/apps/site/pages/en/blog/release/v25.8.0.md @@ -0,0 +1,146 @@ +--- +date: '2026-03-03T17:07:45.477Z' +category: release +title: Node.js 25.8.0 (Current) +layout: blog-post +author: Richard Lau +--- + +## 2026-03-03, Version 25.8.0 (Current), @richardlau + +### Notable Changes + +- \[[`e55eddea2a`](https://github.com/nodejs/node/commit/e55eddea2a)] - **build, doc**: use new api doc tooling (flakey5) [#57343](https://github.com/nodejs/node/pull/57343) +- \[[`4c181e2277`](https://github.com/nodejs/node/commit/4c181e2277)] - **(SEMVER-MINOR)** **sqlite**: add limits property to DatabaseSync (Mert Can Altin) [#61298](https://github.com/nodejs/node/pull/61298) +- \[[`46ee1eddd7`](https://github.com/nodejs/node/commit/46ee1eddd7)] - **(SEMVER-MINOR)** **src**: add C++ support for diagnostics channels (RafaelGSS) [#61869](https://github.com/nodejs/node/pull/61869) +- \[[`9ddd1a9c27`](https://github.com/nodejs/node/commit/9ddd1a9c27)] - **(SEMVER-MINOR)** **src,permission**: add --permission-audit (RafaelGSS) [#61869](https://github.com/nodejs/node/pull/61869) +- \[[`0d97ec4044`](https://github.com/nodejs/node/commit/0d97ec4044)] - **(SEMVER-MINOR)** **test_runner**: expose worker ID for concurrent test execution (Ali Hassan) [#61394](https://github.com/nodejs/node/pull/61394) + +### Commits + +- \[[`940b58c8c1`](https://github.com/nodejs/node/commit/940b58c8c1)] - **buffer**: optimize buffer.concat performance (Mert Can Altin) [#61721](https://github.com/nodejs/node/pull/61721) +- \[[`0589b0e5a1`](https://github.com/nodejs/node/commit/0589b0e5a1)] - **build**: fix GN for new merve dep (Shelley Vohr) [#61984](https://github.com/nodejs/node/pull/61984) +- \[[`f3d3968dcd`](https://github.com/nodejs/node/commit/f3d3968dcd)] - _**Revert**_ "**build**: add temporal test on GHA windows" (Antoine du Hamel) [#61810](https://github.com/nodejs/node/pull/61810) +- \[[`e55eddea2a`](https://github.com/nodejs/node/commit/e55eddea2a)] - **build, doc**: use new api doc tooling (flakey5) [#57343](https://github.com/nodejs/node/pull/57343) +- \[[`b7715292f8`](https://github.com/nodejs/node/commit/b7715292f8)] - **child_process**: add tracing channel for spawn (Marco) [#61836](https://github.com/nodejs/node/pull/61836) +- \[[`a32a598748`](https://github.com/nodejs/node/commit/a32a598748)] - **crypto**: fix missing nullptr check on RSA_new() (ndossche) [#61888](https://github.com/nodejs/node/pull/61888) +- \[[`dc384f95b3`](https://github.com/nodejs/node/commit/dc384f95b3)] - **crypto**: fix handling of null BUF_MEM\* in ToV8Value() (Nora Dossche) [#61885](https://github.com/nodejs/node/pull/61885) +- \[[`3337b095db`](https://github.com/nodejs/node/commit/3337b095db)] - **crypto**: fix potential null pointer dereference when BIO_meth_new() fails (Nora Dossche) [#61788](https://github.com/nodejs/node/pull/61788) +- \[[`51ded81139`](https://github.com/nodejs/node/commit/51ded81139)] - **deps**: update undici to 7.22.0 (Node.js GitHub Bot) [#62035](https://github.com/nodejs/node/pull/62035) +- \[[`8aa2fde931`](https://github.com/nodejs/node/commit/8aa2fde931)] - **deps**: update minimatch to 10.2.4 (Node.js GitHub Bot) [#62016](https://github.com/nodejs/node/pull/62016) +- \[[`57dc092eaf`](https://github.com/nodejs/node/commit/57dc092eaf)] - **deps**: upgrade npm to 11.11.0 (npm team) [#61994](https://github.com/nodejs/node/pull/61994) +- \[[`705bbd60a9`](https://github.com/nodejs/node/commit/705bbd60a9)] - **deps**: update simdjson to 4.3.1 (Node.js GitHub Bot) [#61930](https://github.com/nodejs/node/pull/61930) +- \[[`4d411d72e5`](https://github.com/nodejs/node/commit/4d411d72e5)] - **deps**: update acorn-walk to 8.3.5 (Node.js GitHub Bot) [#61928](https://github.com/nodejs/node/pull/61928) +- \[[`f53a32ab84`](https://github.com/nodejs/node/commit/f53a32ab84)] - **deps**: update acorn to 8.16.0 (Node.js GitHub Bot) [#61925](https://github.com/nodejs/node/pull/61925) +- \[[`9b483fbb27`](https://github.com/nodejs/node/commit/9b483fbb27)] - **deps**: update minimatch to 10.2.2 (Node.js GitHub Bot) [#61830](https://github.com/nodejs/node/pull/61830) +- \[[`bdc18940ad`](https://github.com/nodejs/node/commit/bdc18940ad)] - **doc**: expand SECURITY.md with non-vulnerability examples (Rafael Gonzaga) [#61972](https://github.com/nodejs/node/pull/61972) +- \[[`4e54c103cb`](https://github.com/nodejs/node/commit/4e54c103cb)] - **doc**: separate in-types and out-types in SQLite conversion docs (René) [#62034](https://github.com/nodejs/node/pull/62034) +- \[[`ca78ebbeaa`](https://github.com/nodejs/node/commit/ca78ebbeaa)] - **doc**: fix small logic error in DETECT_MODULE_SYNTAX (René) [#62025](https://github.com/nodejs/node/pull/62025) +- \[[`e6b131f3fe`](https://github.com/nodejs/node/commit/e6b131f3fe)] - **doc**: fix module.stripTypeScriptTypes indentation (René) [#61992](https://github.com/nodejs/node/pull/61992) +- \[[`7508540e19`](https://github.com/nodejs/node/commit/7508540e19)] - **doc**: update DEP0040 (punycode) to application type deprecation (Mike McCready) [#61916](https://github.com/nodejs/node/pull/61916) +- \[[`33a364cb62`](https://github.com/nodejs/node/commit/33a364cb62)] - **doc**: explicitly mention Slack handle (Rafael Gonzaga) [#61986](https://github.com/nodejs/node/pull/61986) +- \[[`46a61922bd`](https://github.com/nodejs/node/commit/46a61922bd)] - **doc**: support toolchain Visual Studio 2022 & 2026 + Windows 11 SDK (Mike McCready) [#61864](https://github.com/nodejs/node/pull/61864) +- \[[`dc12a257aa`](https://github.com/nodejs/node/commit/dc12a257aa)] - **doc**: rename invalid `function` parameter (René) [#61942](https://github.com/nodejs/node/pull/61942) +- \[[`6259abcf55`](https://github.com/nodejs/node/commit/6259abcf55)] - **http**: validate ClientRequest path on set (Matteo Collina) [#62030](https://github.com/nodejs/node/pull/62030) +- \[[`dafdc0a5b8`](https://github.com/nodejs/node/commit/dafdc0a5b8)] - **http**: validate headers in writeEarlyHints (Richard Clarke) [#61897](https://github.com/nodejs/node/pull/61897) +- \[[`3c94b56fa6`](https://github.com/nodejs/node/commit/3c94b56fa6)] - **inspector**: unwrap internal/debugger/inspect imports (René) [#61974](https://github.com/nodejs/node/pull/61974) +- \[[`8a24c17648`](https://github.com/nodejs/node/commit/8a24c17648)] - **lib**: improve argument handling in Blob constructor (Ms2ger) [#61980](https://github.com/nodejs/node/pull/61980) +- \[[`21d4baf256`](https://github.com/nodejs/node/commit/21d4baf256)] - **meta**: bump github/codeql-action from 4.32.0 to 4.32.4 (dependabot\[bot]) [#61911](https://github.com/nodejs/node/pull/61911) +- \[[`59a726a8e3`](https://github.com/nodejs/node/commit/59a726a8e3)] - **meta**: bump step-security/harden-runner from 2.14.1 to 2.14.2 (dependabot\[bot]) [#61909](https://github.com/nodejs/node/pull/61909) +- \[[`0072b7f991`](https://github.com/nodejs/node/commit/0072b7f991)] - **meta**: bump actions/stale from 10.1.1 to 10.2.0 (dependabot\[bot]) [#61908](https://github.com/nodejs/node/pull/61908) +- \[[`3d160cd049`](https://github.com/nodejs/node/commit/3d160cd049)] - **module**: run require.resolve through module.registerHooks() (Joyee Cheung) [#62028](https://github.com/nodejs/node/pull/62028) +- \[[`999bf22f47`](https://github.com/nodejs/node/commit/999bf22f47)] - **repl**: keep reference count for `process.on('newListener')` (Anna Henningsen) [#61895](https://github.com/nodejs/node/pull/61895) +- \[[`4c181e2277`](https://github.com/nodejs/node/commit/4c181e2277)] - **(SEMVER-MINOR)** **sqlite**: add limits property to DatabaseSync (Mert Can Altin) [#61298](https://github.com/nodejs/node/pull/61298) +- \[[`aee2a18257`](https://github.com/nodejs/node/commit/aee2a18257)] - **src**: fix flags argument offset in JSUdpWrap (Weixie Cui) [#61948](https://github.com/nodejs/node/pull/61948) +- \[[`46ee1eddd7`](https://github.com/nodejs/node/commit/46ee1eddd7)] - **(SEMVER-MINOR)** **src**: add C++ support for diagnostics channels (RafaelGSS) [#61869](https://github.com/nodejs/node/pull/61869) +- \[[`9ddd1a9c27`](https://github.com/nodejs/node/commit/9ddd1a9c27)] - **(SEMVER-MINOR)** **src,permission**: add --permission-audit (RafaelGSS) [#61869](https://github.com/nodejs/node/pull/61869) +- \[[`ea2df2a16f`](https://github.com/nodejs/node/commit/ea2df2a16f)] - **stream**: fix pipeTo to defer writes per WHATWG spec (Matteo Collina) [#61800](https://github.com/nodejs/node/pull/61800) +- \[[`aa0c7b09e0`](https://github.com/nodejs/node/commit/aa0c7b09e0)] - **test**: remove unnecessary `process.exit` calls from test files (Antoine du Hamel) [#62020](https://github.com/nodejs/node/pull/62020) +- \[[`ad96a6578f`](https://github.com/nodejs/node/commit/ad96a6578f)] - **test**: skip `test-url` on `--shared-ada` builds (Antoine du Hamel) [#62019](https://github.com/nodejs/node/pull/62019) +- \[[`7c72a31e4b`](https://github.com/nodejs/node/commit/7c72a31e4b)] - **test**: skip strace test with shared openssl (Richard Lau) [#61987](https://github.com/nodejs/node/pull/61987) +- \[[`604456c163`](https://github.com/nodejs/node/commit/604456c163)] - **test**: avoid flaky debugger restart waits (Yuya Inoue) [#61773](https://github.com/nodejs/node/pull/61773) +- \[[`4890d6bd43`](https://github.com/nodejs/node/commit/4890d6bd43)] - **test_runner**: run afterEach on runtime skip (Igor Shevelenkov) [#61525](https://github.com/nodejs/node/pull/61525) +- \[[`fce2930110`](https://github.com/nodejs/node/commit/fce2930110)] - **test_runner**: expose expectFailure message (sangwook) [#61563](https://github.com/nodejs/node/pull/61563) +- \[[`0d97ec4044`](https://github.com/nodejs/node/commit/0d97ec4044)] - **(SEMVER-MINOR)** **test_runner**: expose worker ID for concurrent test execution (Ali Hassan) [#61394](https://github.com/nodejs/node/pull/61394) +- \[[`243e6b2009`](https://github.com/nodejs/node/commit/243e6b2009)] - **test_runner**: replace native methods with primordials (Ayoub Mabrouk) [#61219](https://github.com/nodejs/node/pull/61219) +- \[[`bf1ed7e647`](https://github.com/nodejs/node/commit/bf1ed7e647)] - **tls**: forward keepAlive, keepAliveInitialDelay, noDelay to socket (Sergey Zelenov) [#62004](https://github.com/nodejs/node/pull/62004) +- \[[`746d0cebbf`](https://github.com/nodejs/node/commit/746d0cebbf)] - **tools**: fix parsing of commit trailers in `lint-release-proposal` GHA (Antoine du Hamel) [#62077](https://github.com/nodejs/node/pull/62077) +- \[[`0f15079d94`](https://github.com/nodejs/node/commit/0f15079d94)] - **tools**: remove custom logic for skipping `test-strace-openat-openssl` (Antoine du Hamel) [#62038](https://github.com/nodejs/node/pull/62038) +- \[[`54a055a59d`](https://github.com/nodejs/node/commit/54a055a59d)] - **tools**: bump minimatch from 3.1.2 to 3.1.3 in `/tools/clang-format` (dependabot\[bot]) [#61977](https://github.com/nodejs/node/pull/61977) +- \[[`a28744cb62`](https://github.com/nodejs/node/commit/a28744cb62)] - **tools**: fix permissions for merve update script (Richard Lau) [#62023](https://github.com/nodejs/node/pull/62023) +- \[[`31e7936354`](https://github.com/nodejs/node/commit/31e7936354)] - **tools**: revert tools GHA workflow to ubuntu-latest (Richard Lau) [#62024](https://github.com/nodejs/node/pull/62024) +- \[[`0a96a16e1f`](https://github.com/nodejs/node/commit/0a96a16e1f)] - **tools**: bump minimatch from 3.1.2 to 3.1.3 in /tools/eslint (dependabot\[bot]) [#61976](https://github.com/nodejs/node/pull/61976) +- \[[`f279233412`](https://github.com/nodejs/node/commit/f279233412)] - **tools**: roll back to x86 runner on `scorecard.yml` (Antoine du Hamel) [#61944](https://github.com/nodejs/node/pull/61944) +- \[[`192c0382f4`](https://github.com/nodejs/node/commit/192c0382f4)] - **util**: add fast path to stripVTControlCharacters (Hiroki Osame) [#61833](https://github.com/nodejs/node/pull/61833) + +Windows 64-bit Installer: https://nodejs.org/dist/v25.8.0/node-v25.8.0-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v25.8.0/node-v25.8.0-arm64.msi \ +Windows 64-bit Binary: https://nodejs.org/dist/v25.8.0/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v25.8.0/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v25.8.0/node-v25.8.0.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-aix-ppc64.tar.gz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v25.8.0/node-v25.8.0-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v25.8.0/node-v25.8.0.tar.gz \ +Other release files: https://nodejs.org/dist/v25.8.0/ \ +Documentation: https://nodejs.org/docs/v25.8.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +0af74f04ecd2b939d75ae5bab45e76cd8c5b684c796c7cbc6c497481613d87a0 node-v25.8.0-aix-ppc64.tar.gz +9761b59bcf92ebd572b1023d550d5d6c848adc3cac51ff523e55adee6e65e664 node-v25.8.0-arm64.msi +75ff6fd07e0a85fb4d2529f6189c996014b1d3d83180c31e65feb2b3eaeec5d9 node-v25.8.0-darwin-arm64.tar.gz +53d08ed5b3a3ab7fb098e8d82421b18cf0a6ac4e7403bb2ab43e33f5fb89a395 node-v25.8.0-darwin-arm64.tar.xz +03fb559600c3ede0228d8b588ac6ad8b7b2cd0bac9422b56e7e2ef7f5c11b67c node-v25.8.0-darwin-x64.tar.gz +f126dcc12d8f79d7ab438fcc7ceb91e3efe656d2b2a26160212a4c8215800dd8 node-v25.8.0-darwin-x64.tar.xz +dd6779bc4f8b4eed917da7833585b416b8673968e74c62a7e8d9ca413fbde365 node-v25.8.0-headers.tar.gz +c83752605618b3efefc6c19bd10c9b710ead18ba70d9b036cd75a2adfbced5da node-v25.8.0-headers.tar.xz +54c128f5286a4392a1fd1c765729b074a6873abff8a4f9bb3d63d571c2855e41 node-v25.8.0-linux-arm64.tar.gz +024740906d9af0b9c9fe1a2843447c9eae5dc8cb44d2c5391c2bdf2afccb2bf1 node-v25.8.0-linux-arm64.tar.xz +3ecd09ca302967c858281e494728257db226dd623b464f2b9d8dd88fdaba16e6 node-v25.8.0-linux-ppc64le.tar.gz +b82bf28c1cfeed9862dd0849e548ea0cef8f60edb0a519ebbf9defc52307f91a node-v25.8.0-linux-ppc64le.tar.xz +c48338493b98b24c0a8665a9b5d527c95925d769fe0852e6c8573b2e0264c122 node-v25.8.0-linux-s390x.tar.gz +4b3f40fab11183c69ee3b35db08c0bc8f706e04899407620be58569e89de463b node-v25.8.0-linux-s390x.tar.xz +2ae6f70d74a459c0a96456e486dc60f3e7e65d7752ad302771834e58b27500af node-v25.8.0-linux-x64.tar.gz +f0a38698e3a49105f7323b6bda8f70d864ce853da17c6260a5e1798234d0f87d node-v25.8.0-linux-x64.tar.xz +0fb9beb89195bb01af17c246f7e00b8cb85d55f1e15003b833bcfad014773963 node-v25.8.0.pkg +ba7cb39b3d8d3744385109bfea1f94ed466400452e11b24672c54e645689c521 node-v25.8.0.tar.gz +5d00429cb856cc72200ec6c08e8cdda75ea9618256de8d899fa049c23f4a2eee node-v25.8.0.tar.xz +2e3b464fee036495d46c4ea80b7c1ad06755e102b38187ddf2e7d4717e390051 node-v25.8.0-win-arm64.7z +efdadd968946f58be79bcda43cf2704b5bfaec5db48c8c502583b20f795af298 node-v25.8.0-win-arm64.zip +9ddb70ed2a31db4f36e241c69e527feb72aac710ebcacb1a2de97310da0ee19f node-v25.8.0-win-x64.7z +5744746371a417179a701044739b5fa2b3164e943aa57f86059fb312f8032e86 node-v25.8.0-win-x64.zip +d60366f4a727d09281d1ec1f9c6bff491197796497e0a8f183390b55f18429ed node-v25.8.0-x64.msi +281f54c055c150ad9e5b4c8481dc902d532a750a279d614c131289988020ed19 win-arm64/node.exe +47750ee99207e5b621671565852cf7385f27bf664470886b9437137342a497c9 win-arm64/node.lib +7d7766c0d008c0a6f764e7f4bd0068d036b5cfb69abf8352dad316a69dcc54f8 win-arm64/node_pdb.7z +e1640ebf920ee352782b721e28cb778b40abb3b6c01dd25cd078473cdbb516c9 win-arm64/node_pdb.zip +d0100ef59988cdfcb48a6876b36ea98b1ce006470de24e1e59ab7d5752750c21 win-x64/node.exe +f7201b932d898bdbf78aee7add288d2263c4791f1502068ad11b6c14675c6324 win-x64/node.lib +5abd5051b99140b8cdb26aaf0f46b7aa7a8ca56921fe1e9fe31f3684ee5e9a6a win-x64/node_pdb.7z +b87bfb142fc5b122af8dda75b542866b707ad5c38c3a0aad982346b706fdc80a win-x64/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQIzBAEBCAAdFiEEyC+jrhy+3Gvka5NgxDzsRcF6uTwFAmmnBPoACgkQxDzsRcF6 +uTwyzhAAl3ymmojzrQPLvR+nHACQD0sfaG3Topx+xAJT3HOCzsF9CZelbaK23Rz3 +5xm+FM2zuYBKVLfPnmFyZkLE3myfCClhE2N20KcvokKY0UJ7yZTcmKYW52jWulXv ++RJuNKQJIShC4rVFwoj0JgAnT+iobdD0QjnmixlyL+9OhrpfU5EXiZUD87BIY1go +Ms2Vd58K9+2DBIdEL2zzFyOedBSpM26VcQA30YhvDKGjc2RcEPNVgVhGHI56u+3A +H6yzWyv7GGC9jj4IphKlNkuAV9KqH+KvEl7AcqV5LV5N1JfaJ9WC5JWVQPyONT6/ +BZW/exqQ0pNvjubJslf+LKx8tv9gEGiIVhTdL3Gh5/7plph34oAIwTq4lVO/PLTt +yVgR64AVhZWKdUymkY8hIpgJr0CewmIzHeSbk2nSX0fwd0sZaZoQdw3CiTNlH5Uo +LrDvvPoNTZYaS9P+hgMEs3bRK9iztjvs7U/gRwfKdLmLiIu3+YAmZ+DRunB+oZlN +eNyGlhU/um3UfPumO8TegTX06t1pcyiO0ZnY/qd6eOoEDlKFNVmudh4xzpIMaatg +5UqYF432iCCfeUxLORDMORr/CXI7cMHlf0reX0quu7dd6X26wSQotwoRVkAQEigC +Gk7258DoWyo+ZWEBlmoVCmpe3IiqbJq0rA4xQHTRnjqmB0RAKGw= +=liCO +-----END PGP SIGNATURE----- +``` diff --git a/apps/site/pages/en/learn/asynchronous-work/event-loop-timers-and-nexttick.md b/apps/site/pages/en/learn/asynchronous-work/event-loop-timers-and-nexttick.md index f8468941682fe..2f625ed7df7f9 100644 --- a/apps/site/pages/en/learn/asynchronous-work/event-loop-timers-and-nexttick.md +++ b/apps/site/pages/en/learn/asynchronous-work/event-loop-timers-and-nexttick.md @@ -110,7 +110,7 @@ For example, say you schedule a timeout to execute after a 100 ms threshold, then your script starts asynchronously reading a file which takes 95 ms: -```js +```cjs const fs = require('node:fs'); function someAsyncOperation(callback) { @@ -137,6 +137,33 @@ someAsyncOperation(() => { }); ``` +```mjs +import fs from 'node:fs'; + +function someAsyncOperation(callback) { + // Assume this takes 95ms to complete + fs.readFile('/path/to/file', callback); +} + +const timeoutScheduled = Date.now(); + +setTimeout(() => { + const delay = Date.now() - timeoutScheduled; + + console.log(`${delay}ms have passed since I was scheduled`); +}, 100); + +// do someAsyncOperation which takes 95 ms to complete +someAsyncOperation(() => { + const startCallback = Date.now(); + + // do something that will take 10ms... + while (Date.now() - startCallback < 10) { + // do nothing + } +}); +``` + When the event loop enters the **poll** phase, it has an empty queue (`fs.readFile()` has not completed), so it will wait for the number of ms remaining until the soonest timer's threshold is reached. While it is @@ -259,7 +286,7 @@ timeout However, if you move the two calls within an I/O cycle, the immediate callback is always executed first: -```js +```cjs // timeout_vs_immediate.js const fs = require('node:fs'); @@ -273,6 +300,20 @@ fs.readFile(__filename, () => { }); ``` +```mjs +// timeout_vs_immediate.js +import fs from 'node:fs'; + +fs.readFile(import.meta.filename, () => { + setTimeout(() => { + console.log('timeout'); + }, 0); + setImmediate(() => { + console.log('immediate'); + }); +}); +``` + ```bash $ node timeout_vs_immediate.js immediate @@ -453,7 +494,7 @@ allowing the connection event to be fired before the listening event. Another example is extending an `EventEmitter` and emitting an event from within the constructor: -```js +```cjs const EventEmitter = require('node:events'); class MyEmitter extends EventEmitter { @@ -469,13 +510,30 @@ myEmitter.on('event', () => { }); ``` +```mjs +import EventEmitter from 'node:events'; + +class MyEmitter extends EventEmitter { + constructor() { + super(); + this.emit('event'); + } +} + +const myEmitter = new MyEmitter(); +myEmitter.on('event', () => { + console.log('an event occurred!'); +}); +``` + You can't emit an event from the constructor immediately + because the script will not have processed to the point where the user assigns a callback to that event. So, within the constructor itself, you can use `process.nextTick()` to set a callback to emit the event after the constructor has finished, which provides the expected results: -```js +```cjs const EventEmitter = require('node:events'); class MyEmitter extends EventEmitter { @@ -495,5 +553,25 @@ myEmitter.on('event', () => { }); ``` +```mjs +import EventEmitter from 'node:events'; + +class MyEmitter extends EventEmitter { + constructor() { + super(); + + // use nextTick to emit the event once a handler is assigned + process.nextTick(() => { + this.emit('event'); + }); + } +} + +const myEmitter = new MyEmitter(); +myEmitter.on('event', () => { + console.log('an event occurred!'); +}); +``` + [libuv]: https://libuv.org/ [REPL]: https://nodejs.org/api/repl.html#repl_repl diff --git a/apps/site/pages/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks.md b/apps/site/pages/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks.md index 11b7bda915516..fc9c2755f1a48 100644 --- a/apps/site/pages/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks.md +++ b/apps/site/pages/en/learn/asynchronous-work/javascript-asynchronous-programming-and-callbacks.md @@ -96,7 +96,7 @@ How do you handle errors with callbacks? One very common strategy is to use what If there is no error, the object is `null`. If there is an error, it contains some description of the error and other information. -```js +```cjs const fs = require('node:fs'); fs.readFile('/file.json', (err, data) => { @@ -111,6 +111,21 @@ fs.readFile('/file.json', (err, data) => { }); ``` +```mjs +import fs from 'node:fs'; + +fs.readFile('/file.json', (err, data) => { + if (err) { + // handle error + console.log(err); + return; + } + + // no errors, process data + console.log(data); +}); +``` + ### The problem with callbacks Callbacks are great for simple cases! diff --git a/apps/site/pages/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking.md b/apps/site/pages/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking.md index e516cd6f8f3c8..deaaa24791d91 100644 --- a/apps/site/pages/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking.md +++ b/apps/site/pages/en/learn/asynchronous-work/overview-of-blocking-vs-non-blocking.md @@ -39,15 +39,21 @@ execute **asynchronously**. Using the File System module as an example, this is a **synchronous** file read: -```js +```cjs const fs = require('node:fs'); const data = fs.readFileSync('/file.md'); // blocks here until file is read ``` +```mjs +import fs from 'node:fs'; + +const data = fs.readFileSync('/file.md'); // blocks here until file is read +``` + And here is an equivalent **asynchronous** example: -```js +```cjs const fs = require('node:fs'); fs.readFile('/file.md', (err, data) => { @@ -57,6 +63,16 @@ fs.readFile('/file.md', (err, data) => { }); ``` +```mjs +import fs from 'node:fs'; + +fs.readFile('/file.md', (err, data) => { + if (err) { + throw err; + } +}); +``` + The first example appears simpler than the second but has the disadvantage of the second line **blocking** the execution of any additional JavaScript until the entire file is read. Note that in the synchronous version if an error is @@ -66,7 +82,7 @@ shown. Let's expand our example a little bit: -```js +```cjs const fs = require('node:fs'); const data = fs.readFileSync('/file.md'); // blocks here until file is read @@ -74,9 +90,17 @@ console.log(data); moreWork(); // will run after console.log ``` +```mjs +import fs from 'node:fs'; + +const data = fs.readFileSync('/file.md'); // blocks here until file is read +console.log(data); +moreWork(); // will run after console.log +``` + And here is a similar, but not equivalent asynchronous example: -```js +```cjs const fs = require('node:fs'); fs.readFile('/file.md', (err, data) => { @@ -89,6 +113,19 @@ fs.readFile('/file.md', (err, data) => { moreWork(); // will run before console.log ``` +```mjs +import fs from 'node:fs'; + +fs.readFile('/file.md', (err, data) => { + if (err) { + throw err; + } + + console.log(data); +}); +moreWork(); // will run before console.log +``` + In the first example above, `console.log` will be called before `moreWork()`. In the second example `fs.readFile()` is **non-blocking** so JavaScript execution can continue and `moreWork()` will be called first. The ability to run @@ -118,7 +155,7 @@ threads may be created to handle concurrent work. There are some patterns that should be avoided when dealing with I/O. Let's look at an example: -```js +```cjs const fs = require('node:fs'); fs.readFile('/file.md', (err, data) => { @@ -131,12 +168,25 @@ fs.readFile('/file.md', (err, data) => { fs.unlinkSync('/file.md'); ``` +```mjs +import fs from 'node:fs'; + +fs.readFile('/file.md', (err, data) => { + if (err) { + throw err; + } + + console.log(data); +}); +fs.unlinkSync('/file.md'); +``` + In the above example, `fs.unlinkSync()` is likely to be run before `fs.readFile()`, which would delete `file.md` before it is actually read. A better way to write this, which is completely **non-blocking** and guaranteed to execute in the correct order is: -```js +```cjs const fs = require('node:fs'); fs.readFile('/file.md', (readFileErr, data) => { @@ -154,6 +204,24 @@ fs.readFile('/file.md', (readFileErr, data) => { }); ``` +```mjs +import fs from 'node:fs'; + +fs.readFile('/file.md', (readFileErr, data) => { + if (readFileErr) { + throw readFileErr; + } + + console.log(data); + + fs.unlink('/file.md', unlinkErr => { + if (unlinkErr) { + throw unlinkErr; + } + }); +}); +``` + The above places a **non-blocking** call to `fs.unlink()` within the callback of `fs.readFile()` which guarantees the correct order of operations. diff --git a/apps/site/pages/en/learn/command-line/how-to-read-environment-variables-from-nodejs.md b/apps/site/pages/en/learn/command-line/how-to-read-environment-variables-from-nodejs.md index 9afb46f342ba1..89bda392e45d2 100644 --- a/apps/site/pages/en/learn/command-line/how-to-read-environment-variables-from-nodejs.md +++ b/apps/site/pages/en/learn/command-line/how-to-read-environment-variables-from-nodejs.md @@ -80,7 +80,7 @@ Because this method is invoked post-initialization, the setting of startup-relat PORT=1234 ``` -```js +```cjs const { loadEnvFile } = require('node:process'); // Loads environment variables from the default .env file @@ -89,9 +89,23 @@ loadEnvFile(); console.log(process.env.PORT); // Logs '1234' ``` +```mjs +import { loadEnvFile } from 'node:process'; + +// Loads environment variables from the default .env file +loadEnvFile(); + +console.log(process.env.PORT); // Logs '1234' +``` + You can also specify a custom path: -```js +```cjs const { loadEnvFile } = require('node:process'); loadEnvFile('./config/.env'); ``` + +```mjs +import { loadEnvFile } from 'node:process'; +loadEnvFile('./config/.env'); +``` diff --git a/apps/site/pages/en/learn/diagnostics/memory/understanding-and-tuning-memory.md b/apps/site/pages/en/learn/diagnostics/memory/understanding-and-tuning-memory.md index ae39c74851ef9..30ddfb6f3565e 100644 --- a/apps/site/pages/en/learn/diagnostics/memory/understanding-and-tuning-memory.md +++ b/apps/site/pages/en/learn/diagnostics/memory/understanding-and-tuning-memory.md @@ -36,6 +36,14 @@ const heapSizeInGB = heap_size_limit / (1024 * 1024 * 1024); console.log(`${heapSizeInGB} GB`); ``` +```mjs +import v8 from 'node:v8'; +const { heap_size_limit } = v8.getHeapStatistics(); +const heapSizeInGB = heap_size_limit / (1024 * 1024 * 1024); + +console.log(`${heapSizeInGB} GB`); +``` + This will output the maximum heap size in gigabytes, which is based on your system's available memory. ### The Stack diff --git a/apps/site/pages/en/learn/diagnostics/memory/using-gc-traces.md b/apps/site/pages/en/learn/diagnostics/memory/using-gc-traces.md index 19b1b66f97a8d..14b4c81155df3 100644 --- a/apps/site/pages/en/learn/diagnostics/memory/using-gc-traces.md +++ b/apps/site/pages/en/learn/diagnostics/memory/using-gc-traces.md @@ -359,6 +359,33 @@ obs.observe({ entryTypes: ['gc'] }); obs.disconnect(); ``` +```mjs +import { PerformanceObserver } from 'node:perf_hooks'; + +// Create a performance observer +const obs = new PerformanceObserver(list => { + const entry = list.getEntries()[0]; + /* + The entry is an instance of PerformanceEntry containing + metrics of a single garbage collection event. + For example: + PerformanceEntry { + name: 'gc', + entryType: 'gc', + startTime: 2820.567669, + duration: 1.315709, + kind: 1 + } + */ +}); + +// Subscribe to notifications of GCs +obs.observe({ entryTypes: ['gc'] }); + +// Stop subscription +obs.disconnect(); +``` + ### Examining a trace with performance hooks You can get GC statistics as [PerformanceEntry][] from the callback in diff --git a/apps/site/pages/en/learn/diagnostics/memory/using-heap-snapshot.md b/apps/site/pages/en/learn/diagnostics/memory/using-heap-snapshot.md index dbe951184d81d..a74732bab2796 100644 --- a/apps/site/pages/en/learn/diagnostics/memory/using-heap-snapshot.md +++ b/apps/site/pages/en/learn/diagnostics/memory/using-heap-snapshot.md @@ -73,8 +73,13 @@ For details, see the latest documentation of [heapsnapshot-signal flag][]. If you need a snapshot from a working process, like an application running on a server, you can implement getting it using: -```js -require('v8').writeHeapSnapshot(); +```cjs +require('node:v8').writeHeapSnapshot(); +``` + +```mjs +import { writeHeapSnapshot } from 'node:v8'; +writeHeapSnapshot(); ``` Check [`writeHeapSnapshot` docs][] for file name options. diff --git a/apps/site/pages/en/learn/manipulating-files/writing-files-with-nodejs.md b/apps/site/pages/en/learn/manipulating-files/writing-files-with-nodejs.md index ffd643eae6a75..7deac9680aef7 100644 --- a/apps/site/pages/en/learn/manipulating-files/writing-files-with-nodejs.md +++ b/apps/site/pages/en/learn/manipulating-files/writing-files-with-nodejs.md @@ -10,7 +10,7 @@ authors: flaviocopes, MylesBorins, fhemberger, LaRuaNa, ahmadawais, clean99, ovf The easiest way to write to files in Node.js is to use the `fs.writeFile()` API. -```js +```cjs const fs = require('node:fs'); const content = 'Some content!'; @@ -24,11 +24,25 @@ fs.writeFile('/Users/joe/test.txt', content, err => { }); ``` +```mjs +import fs from 'node:fs'; + +const content = 'Some content!'; + +fs.writeFile('/Users/joe/test.txt', content, err => { + if (err) { + console.error(err); + } else { + // file written successfully + } +}); +``` + ### Writing a file synchronously Alternatively, you can use the synchronous version `fs.writeFileSync()`: -```js +```cjs const fs = require('node:fs'); const content = 'Some content!'; @@ -41,9 +55,22 @@ try { } ``` +```mjs +import fs from 'node:fs'; + +const content = 'Some content!'; + +try { + fs.writeFileSync('/Users/joe/test.txt', content); + // file written successfully +} catch (err) { + console.error(err); +} +``` + You can also use the promise-based `fsPromises.writeFile()` method offered by the `fs/promises` module: -```js +```cjs const fs = require('node:fs/promises'); async function example() { @@ -58,6 +85,17 @@ async function example() { example(); ``` +```mjs +import fs from 'node:fs/promises'; + +try { + const content = 'Some content!'; + await fs.writeFile('/Users/joe/test.txt', content); +} catch (err) { + console.log(err); +} +``` + By default, this API will **replace the contents of the file** if it does already exist. **You can modify the default by specifying a flag:** @@ -85,7 +123,7 @@ Appending to files is handy when you don't want to overwrite a file with new con A handy method to append content to the end of a file is `fs.appendFile()` (and its `fs.appendFileSync()` counterpart): -```js +```cjs const fs = require('node:fs'); const content = 'Some content!'; @@ -99,11 +137,25 @@ fs.appendFile('file.log', content, err => { }); ``` +```mjs +import fs from 'node:fs'; + +const content = 'Some content!'; + +fs.appendFile('file.log', content, err => { + if (err) { + console.error(err); + } else { + // done! + } +}); +``` + #### Example with Promises Here is a `fsPromises.appendFile()` example: -```js +```cjs const fs = require('node:fs/promises'); async function example() { @@ -117,3 +169,14 @@ async function example() { example(); ``` + +```mjs +import fs from 'node:fs/promises'; + +try { + const content = 'Some content!'; + await fs.appendFile('/Users/joe/test.txt', content); +} catch (err) { + console.log(err); +} +``` diff --git a/apps/site/pages/fr/index.mdx b/apps/site/pages/fr/index.mdx index 78c669832a43f..3e805ea1b4f58 100644 --- a/apps/site/pages/fr/index.mdx +++ b/apps/site/pages/fr/index.mdx @@ -27,7 +27,7 @@ layout: home pour les versions Node.js en fin de vie -
+
diff --git a/apps/site/pages/ja/about/branding.mdx b/apps/site/pages/ja/about/branding.mdx index 51619c8ecd20b..5ac55faf84b62 100644 --- a/apps/site/pages/ja/about/branding.mdx +++ b/apps/site/pages/ja/about/branding.mdx @@ -37,14 +37,24 @@ Node.jsのロゴやシンボルマークの許可されている利用方法に - Node.jsダーク横型ロゴ + Node.jsダーク横型ロゴ - - Node.jsライト横型ロゴ + Node.jsライト横型ロゴ - @@ -54,24 +64,39 @@ Node.jsのロゴやシンボルマークの許可されている利用方法に - Node.jsダークスタック型ロゴ + Node.jsダークスタック型ロゴ - - Node.jsライトスタック型ロゴ + Node.jsライトスタック型ロゴ - - Node.jsブラックスタック型ロゴ + Node.jsブラックスタック型ロゴ - - Node.jsホワイトスタック型ロゴ + Node.jsホワイトスタック型ロゴ - @@ -81,13 +106,23 @@ Node.jsのロゴやシンボルマークの許可されている利用方法に - JSアイコングリーン + JSアイコングリーン - - JSアイコンホワイト + JSアイコンホワイト - diff --git a/apps/site/pages/ja/about/eol.mdx b/apps/site/pages/ja/about/eol.mdx index 8ee35a391d04c..78adc943c9e36 100644 --- a/apps/site/pages/ja/about/eol.mdx +++ b/apps/site/pages/ja/about/eol.mdx @@ -14,9 +14,7 @@ Node.jsのメジャーバージョンは予定されたスケジュールでリ - -または - + または diff --git a/apps/site/pages/ja/about/security-reporting.mdx b/apps/site/pages/ja/about/security-reporting.mdx index 5342407ad9c9c..170a8a67e102a 100644 --- a/apps/site/pages/ja/about/security-reporting.mdx +++ b/apps/site/pages/ja/about/security-reporting.mdx @@ -11,6 +11,8 @@ layout: about Node.jsのセキュリティーに関する問題は[HackerOne](https://hackerone.com/nodejs)を通して報告してください。 +> **注意:** HackerOneでレポートを提出するには、[Signal](https://docs.hackerone.com/en/articles/8369891-signal-impact)スコアが **1.0** 以上必要です。スコアがこの基準を下回る場合は、[OpenJS Foundation Slack](https://slack-invite.openjsf.org/)を通じてNode.jsのセキュリティーリリース担当者に直接ご連絡ください。 + 通常、報告は5日以内に確認され、詳細な回答を10日以内に回答します。その回答には報告の処理に関する次の手順が明記されます。これらのスケジュールは当団体のボランティアが休暇中である場合(特に年末の時期)、延長される可能性があります。 あなたの報告への最初の返信の後、セキュリティーチームは修正と最終的な発表に向けて進捗をお知らせします。また、報告された問題に関する追加情報やガイダンスを求める場合があります。 @@ -51,15 +53,9 @@ Node.jsプロジェクトはセキュリティー研究者と責任ある情報 ## OpenSSFベストプラクティス - - OpenSSFバッジ + + + OpenSSFバッジ オープンソースセキュリティー財団(OpenSSF)の[ベストプラクティスバッジ](https://github.com/coreinfrastructure/best-practices-badge)は、Free/Libre and Open Source Software(FLOSS)プロジェクトがベストプラクティスに従っていることを示す方法です。プロジェクトはそれぞれのベストプラクティスに従っている方法を自発的に自己認証できます。バッジを使うことでどのFLOSSプロジェクトがベストプラクティスに従っているかを迅速に評価でき、結果としてより高品質で安全なソフトウェアを製造する可能性が高くなります。 diff --git a/apps/site/pages/ja/download/current.mdx b/apps/site/pages/ja/download/current.mdx index 1dffb99443dd8..f31a114b60cc9 100644 --- a/apps/site/pages/ja/download/current.mdx +++ b/apps/site/pages/ja/download/current.mdx @@ -4,20 +4,30 @@ title: Node.js®をダウンロードする ---
- 用のNode.js® を使ってダウンロードする + + +用のNode.js® を + +を使ってダウンロードする - - アーキテクチャーで動作する用のビルド済みのNode.js®も利用できます。 + + + +アーキテクチャーで動作する + +用のビルド済みのNode.js®も利用できます。 + + - + -
- このバージョンの変更点ブログ記事を確認できます。 + +このバージョンの変更点ブログ記事を確認できます。 リリーススケジュールやLTSに関する詳しい内容は[Node.jsのリリース](/ja/about/previous-releases)を確認してください。 @@ -25,8 +35,16 @@ title: Node.js®をダウンロードする 署名済みのNode.jsのソースコードのtarballもダウンロードできます。 - ナイトリーバイナリーや全ての過去のリリース、 - 他のプラットフォーム向けの非公式バイナリーもダウンロードできます。 + + ナイトリーバイナリー + +や全ての過去のリリース、 +他のプラットフォーム向けの + + 非公式バイナリー + +もダウンロードできます。 +
--- @@ -34,12 +52,9 @@ title: Node.js®をダウンロードする

下記のパートナー企業からご支援いただいております:

- - これらのパートナー企業をはじめ{' '} - 数多くの企業{' '} - からのご支援により、Node.jsのダウンロードの提供やインフラの維持を行っています。 - - + + これらのパートナー企業をはじめ 数多くの企業 からのご支援により、Node.jsのダウンロードの提供やインフラの維持を行っています。 +
diff --git a/apps/site/pages/ja/download/index.mdx b/apps/site/pages/ja/download/index.mdx index 047628c37f35c..fe1214eb0a608 100644 --- a/apps/site/pages/ja/download/index.mdx +++ b/apps/site/pages/ja/download/index.mdx @@ -4,20 +4,30 @@ title: Node.js®をダウンロードする ---
- 用のNode.js® を使ってダウンロードする + + +用のNode.js® を + +を使ってダウンロードする - - アーキテクチャーで動作する用のビルド済みのNode.js®も利用できます。 + + + +アーキテクチャーで動作する + +用のビルド済みのNode.js®も利用できます。 + + - + -
- このバージョンの変更点ブログ記事を確認できます。 + +このバージョンの変更点ブログ記事を確認できます。 リリーススケジュールやLTSに関する詳しい内容は[Node.jsのリリース](/ja/about/previous-releases)を確認してください。 @@ -25,8 +35,16 @@ title: Node.js®をダウンロードする 署名済みのNode.jsのソースコードのtarballもダウンロードできます。 - ナイトリーバイナリーや全ての過去のリリース、 - 他のプラットフォーム向けの非公式バイナリーもダウンロードできます。 + + ナイトリーバイナリー + +や全ての過去のリリース、 +他のプラットフォーム向けの + + 非公式バイナリー + +もダウンロードできます。 +
--- @@ -34,12 +52,9 @@ title: Node.js®をダウンロードする

下記のパートナー企業からご支援いただいております:

- - これらのパートナー企業をはじめ{' '} - 数多くの企業{' '} - からのご支援により、Node.jsのダウンロードの提供やインフラの維持を行っています。 - - + + これらのパートナー企業をはじめ 数多くの企業 からのご支援により、Node.jsのダウンロードの提供やインフラの維持を行っています。 +
diff --git a/apps/site/pages/ja/index.mdx b/apps/site/pages/ja/index.mdx index 5b3b61e1c6dc2..9e77091eccabf 100644 --- a/apps/site/pages/ja/index.mdx +++ b/apps/site/pages/ja/index.mdx @@ -14,6 +14,7 @@ layout: home
+
@@ -21,16 +22,13 @@ layout: home
- Node.jsは上記パートナー企業など数多くの企業からご支援いただいています。
@@ -125,7 +123,5 @@ layout: home ```
- -私たちの[学習コンテンツ](/learn)でNode.jsでできることをさらに学んでみましょう。 - + 私たちの[学習コンテンツ](/learn)でNode.jsでできることをさらに学んでみましょう。 diff --git a/apps/site/pages/pt-br/about/previous-releases.mdx b/apps/site/pages/pt-br/about/previous-releases.mdx index 5c002b597a83c..445adca000c3a 100644 --- a/apps/site/pages/pt-br/about/previous-releases.mdx +++ b/apps/site/pages/pt-br/about/previous-releases.mdx @@ -41,7 +41,7 @@ Métodos de instalação indicados como "Oficial" devem seguir os seguintes requ ### Métodos de Instalação da Comunidade -Os métodos de instalação da comunidade incluídos na página de download de serviços próprios(/download) também devem obedecer a um conjunto mínimo de critérios: +Os métodos de instalação da comunidade incluídos na página de download de autoatendimento (localizada em /download) também devem seguir um conjunto mínimo de critérios: - **Suporte de versão:** deve oferecer suporte a todas as versões do Node.js atualmente suportadas e que não estejam em fim de vida útil (EOL). - **Compatibilidade do OS:** Deve funcionar em pelo menos um Sistema Operacional (OS) oficialmente suportado. diff --git a/apps/site/pages/pt-br/index.mdx b/apps/site/pages/pt-br/index.mdx index fd684d2cf2dce..b272db5b359fc 100644 --- a/apps/site/pages/pt-br/index.mdx +++ b/apps/site/pages/pt-br/index.mdx @@ -103,6 +103,7 @@ layout: home createWriteStream('package.json.gz') ); + // run with `node streams.mjs` ``` diff --git a/apps/site/pages/ro/about/branding.mdx b/apps/site/pages/ro/about/branding.mdx index fe2a5ef11dffa..91bd4ff9cab88 100644 --- a/apps/site/pages/ro/about/branding.mdx +++ b/apps/site/pages/ro/about/branding.mdx @@ -37,14 +37,24 @@ Mulțumiri către [Angela Angelini](https://www.linkedin.com/in/angeliningl/) pe - Logo orizontal întunecat Node.js + Logo orizontal întunecat Node.js - - Logo orizontal deschis Node.js + Logo orizontal deschis Node.js - @@ -54,24 +64,39 @@ Mulțumiri către [Angela Angelini](https://www.linkedin.com/in/angeliningl/) pe - Logo stivuit întunecat Node.js + Logo stivuit întunecat Node.js - - Logo stivuit deschis Node.js + Logo stivuit deschis Node.js - - Logo stivuit negru Node.js + Logo stivuit negru Node.js - - Logo stivuit alb Node.js + Logo stivuit alb Node.js - @@ -81,13 +106,23 @@ Mulțumiri către [Angela Angelini](https://www.linkedin.com/in/angeliningl/) pe - Pictogramă JS verde + Pictogramă JS verde - - Pictogramă JS albă + Pictogramă JS albă - diff --git a/apps/site/pages/ro/index.mdx b/apps/site/pages/ro/index.mdx index ec2f60407d098..9a1bb893f7446 100644 --- a/apps/site/pages/ro/index.mdx +++ b/apps/site/pages/ro/index.mdx @@ -16,6 +16,7 @@ layout: home
+
@@ -23,16 +24,13 @@ layout: home
- Node.js este susținut cu mândrie de partenerii de mai sus și mulți alții.
@@ -127,7 +125,5 @@ layout: home ```
- -Află ce poate oferi Node.js mai mult cu [materialele noastre de învățare](/learn). - + Află ce poate oferi Node.js mai mult cu [materialele noastre de învățare](/learn). diff --git a/apps/site/pages/ta/about/branding.mdx b/apps/site/pages/ta/about/branding.mdx new file mode 100644 index 0000000000000..c7d16581633c0 --- /dev/null +++ b/apps/site/pages/ta/about/branding.mdx @@ -0,0 +1,93 @@ +--- +title: Node.js-இன் பிராண்டிங் +layout: about +--- + +# Node.js-இன் பிராண்டிங் + +Node.js® சின்னங்கள் மற்றும் குறிகளை அனுமதிக்கப்பட்ட முறையில் பயன்படுத்துவது பற்றிய தகவலுக்கு, [வர்த்தக முத்திரை கொள்கை](https://trademark-policy.openjsf.org/) என்பதைப் பார்க்கவும். + +## Node.js® சின்னம் + +Rocket Turtle வடிவமைத்துப் பங்களித்த [ஏஞ்சலா ஏஞ்சலினி](https://www.linkedin.com/in/angeliningl/) அவர்களுக்கு நன்றி. + +Node.js® சின்னம் + +## Node.js® சின்னங்கள் + +### Node.js® ஹெக்ஸ் லோகோ + +Node.js® ஹெக்ஸ் லோகோ + +### Node.js® கிடைமட்ட சின்னம் + + + + + + + + + + +
+ Node.js கருமையான கிடைமட்ட லோகோ + + Node.js லைட் ஹாரிசாண்டல் லோகோ +
+ +### Node.js® அடுக்கி வைக்கப்பட்ட லோகோ + + + + + + + + + + + + + + + + +
+ Node.js® கருமையான அடுக்கி வைக்கப்பட்ட லோகோ + + Node.js® லைட் அடுக்கி வைக்கப்பட்ட லோகோ +
+ Node.js கருப்பு நிற அடுக்குகளைக் கொண்ட லோகோ + + Node.js வெள்ளை நிற அடுக்கு லோகோ +
+ +### JS சின்னங்கள் + + + + + + + + + + +
+ JS Green சின்னங்கள் + + White JS சின்னங்கள் +
diff --git a/apps/site/pages/ta/about/eol.mdx b/apps/site/pages/ta/about/eol.mdx new file mode 100644 index 0000000000000..d5c401b376fda --- /dev/null +++ b/apps/site/pages/ta/about/eol.mdx @@ -0,0 +1,46 @@ +--- +title: காலாவதி நிலை +layout: about +description: 'Node.js காலாவதி நிலையைப் புரிந்துகொள்ளுதல்: இது பாதுகாப்பு, மென்பொருள் கருவிகள் மற்றும் இணக்கத்தன்மை ஆகியவற்றில் ஏற்படுத்தும் தாக்கங்கள் என்ன என்பதை அறியுங்கள். மேலும், காலாவதியான பதிப்புகளின் விவரங்கள் மற்றும் வணிகரீதியான ஆதரவு விருப்பங்கள் பற்றியும் தெரிந்துகொள்ளுங்கள்.' +--- + +# காலாவதி நிலை (EOL) + +## Node.js பதிப்புகள் ஏன் மற்றும் எப்படி காலாவதி நிலையை அடைகின்றன + +Node.js-இன் முக்கிய பதிப்புகள் ஒரு குறிப்பிட்ட கால அட்டவணையின்படி வெளியிடப்படுகின்றன, மேம்படுத்தப்படுகின்றன, பின்னர் காலாவதியானதாக அறிவிக்கப்படுகின்றன. அனைத்து பதிப்புகளையும் எப்போதும் பராமரிப்பது சாத்தியமற்றது என்பதால், திட்டமிடப்பட்ட பராமரிப்புக் காலத்திற்குப் பிறகு, குறிப்பிட்ட ஒரு Node.js முக்கிய பதிப்பிற்கான பராமரிப்புப் பணிகளை இத்திட்டம் நிறுத்திக்கொள்கிறது. + +
+ + +அல்லது + + +
+ +[Node.js வெளியீட்டு அட்டவணையைப் பார்க்கவும்](/about/releases/). + +## வெளியீட்டு வரிசை EOL ஐ அடையும்போது என்ன நடக்கும் + +ஒரு பதிப்பு காலாவதி நிலையை அடையும்போது, பாதுகாப்புத் திருத்தங்கள் உட்பட எந்தவொரு புதிய மேம்படுத்தல்களையும் அது இனி பெறாது என்று அர்த்தம். இதனால், அத்தகைய பதிப்புகளில் இயங்கும் செயலிகள், எப்போதும் சரிசெய்யப்பட முடியாத பாதுகாப்பு குறைபாடுகளுக்கும் பிழைகளுக்கும் ஆளாகும் அபாயம் உள்ளது. + +- **பாதுகாப்பு குறைபாடுகளுக்கான தீர்வுகள் இனி இருக்காது**: புதிய பதிப்புகளில் ஏதேனும் பாதுகாப்பு அச்சுறுத்தல்கள் கண்டறியப்பட்டு, அவற்றுக்கான திருத்தங்கள் வெளியிடப்படும்போது, அதே குறைபாடு காலாவதியான பதிப்புகளையும் பாதித்தாலும், அவற்றுக்கு புதிய அப்டேட்கள் வழங்கப்படாது. காலாவதியான பதிப்புகளைத் தொடர்ந்து பயன்படுத்துபவர்கள், தங்களின் மென்பொருள் குறியீடுகள் வழியாக இத்தகைய பாதுகாப்புத் தாக்குதல்களுக்கு உள்ளாகும் அபாயம் உடனடியாக ஏற்படும். +- **மென்பொருள் கருவிகளின் சங்கிலித்தொடர் முறிவு**: காலாவதியான பதிப்புகள், தாங்கள் சார்ந்திருக்கும் பகிரப்பட்ட நூலகங்களின் புதிய பதிப்புகளுடன் இனி இணக்கமான தொடர்பைக் கொண்டிருக்காது. இது கணினி அப்டேட்களைத் தடுக்கலாம் அல்லது செயலிழக்கச் செய்யலாம். +- **சூழல் அமைப்பிலிருந்து விலகிச் செல்லுதல்**: பலப் பிரபலமான மென்பொருள் தொகுப்புகள், காலப்போக்கில் காலாவதியான Node.js பதிப்புகளுக்கான ஆதரவை நிறுத்திவிடுகின்றன. ஒரு செயலி தொடர்ந்து பழைய தொகுப்புகளையே பயன்படுத்தும்போது, அதில் சரிசெய்யப்படாத பாதுகாப்பு குறைபாடுகளும் பிழைகளும் மேலும் அதிகரிக்கக்கூடும். இது ஒட்டுமொத்த மென்பொருள் சமூகத்தின் தற்போதைய தரநிலைகளிலிருந்து அந்தச் செயலியை வெகுவாகத் தனிமைப்படுத்திவிடும். +- **விதிமுறை இணக்கக் குறைபாடுகள்**: பல தொழில்முறைத் தணிக்கைகள், பராமரிக்கப்படாத இயங்குதளங்களைப் பயன்படுத்துவதைத் தடை செய்கின்றன. + +## EOL பதிப்புகள் + + + +## வணிகரீதியான ஆதரவு + +காலாவதியான பதிப்புகளைப் பயன்படுத்துவதில் உள்ள தெளிவான பாதிப்புகளுக்கு மத்தியிலும், நடைமுறையில் பல நிறுவனங்கள் சில கட்டுப்பாடுகளை எதிர்கொள்கின்றன. பழைய மென்பொருள் குறியீடுகள், விதிமுறை இணக்கத் தேவைகள் அல்லது சிக்கலான சார்பு நிலைகள் போன்றவற்றால் அவர்களால் உடனடியாகப் புதிய பதிப்பிற்கு மாற முடியாமல் போகலாம். இத்தகைய சூழலில், [OpenJS Foundation Ecosystem Sustainability Program](https://openjsf.org/blog/ecosystem-sustainability-program) மூலம், HeroDevs மற்றும் NodeSource ஆகிய நிறுவனங்கள் Node.js-க்கு பாதுகாப்புத் திருத்தங்களை வழங்குவதற்கான வணிகரீதியான சேவைகளை வழங்குகின்றன. + +HeroDevs நிறுவனம், அதிகாரப்பூர்வ பராமரிப்புக் காலம் முடிந்த Node.js பதிப்புகளுக்காக [Never-Ending Support (NES)](https://nodejs.org/esp/herodevs) எனப்படும் தொடர்ச்சியான ஆதரவை வழங்குகிறது. இதில் பாதுகாப்புத் திருத்தங்கள், விதிமுறை இணக்கத்திற்கான உதவி மற்றும் தொழில்நுட்ப ஆதரவு ஆகியவை அடங்கும். உங்கள் நிறுவனம் புதிய பதிப்பிற்கு மாறுவதற்கான திட்டமிடலில் இருக்கும்போது, அந்த இடைப்பட்ட காலத்தைச் சமாளிக்க இந்தச் சேவை பெரிதும் உதவுகிறது. + +வணிகரீதியான ஆதரவின் மூலம் காலாவதியான பதிப்புகளைப் பயன்படுத்துவது ஒரு தற்காலிகத் தீர்வாக மட்டுமே கருதப்பட வேண்டும்—தற்போது பயன்பாட்டில் உள்ள மற்றும் அதிகாரப்பூர்வ ஆதரவு பெறும் புதிய பதிப்புகளுக்கு மாறுவதே எப்போதும் முதன்மையான இலக்காக இருக்க வேண்டும். diff --git a/apps/site/pages/ta/about/get-involved/collab-summit.md b/apps/site/pages/ta/about/get-involved/collab-summit.md new file mode 100644 index 0000000000000..eee7152a397af --- /dev/null +++ b/apps/site/pages/ta/about/get-involved/collab-summit.md @@ -0,0 +1,16 @@ +--- +title: கூட்டு முயற்சி மாநாடு +layout: about +--- + +# கூட்டு முயற்சி மாநாடு + +Node.js-இன் கூட்டு முயற்சி மாநாடு என்பது தற்போதைய மற்றும் வருங்கால பங்களிப்பாளர்களை ஒன்றிணைப்பதற்கான ஒரு மாநாடாகும். இது கலந்துரையாடல், கல்வி மற்றும் அறிவுப் பகிர்வு ஆகியவற்றின் மூலம் Node.js-ஐ மேம்படுத்துவதை நோக்கமாகக் கொண்டுள்ளது. சமூகத்தைச் சேர்ந்த குழுக்கள், பணிக்குழுக்கள் மற்றும் பங்களிப்பாளர்கள் ஆண்டுக்கு இரண்டு முறை நேரில் சந்தித்துக் கொள்கிறார்கள். இந்த சந்திப்புகள் முக்கியமான முடிவுகளை எடுப்பதற்கும், தாங்கள் முன்னெடுத்துச் செல்ல விரும்பும் உற்சாகமான திட்டங்களில் இணைந்து பணியாற்றுவதற்கும் ஒரு சிறந்த தளமாக அமைகின்றன. + +## யாரெல்லாம் கலந்து கொள்ளலாம்? + +கூட்டு முயற்சி மாநாடு முக்கியமாக தற்போதைய பங்களிப்பாளர்கள் மற்றும் சமூக உறுப்பினர்களுக்காக நடத்தப்படுகிறது. இருப்பினும், இதுவரை பங்களிப்பு செய்யாத, ஆனால் புதிதாக இணைய விரும்பும் நபர்களையும் இது அன்புடன் வரவேற்கிறது. நீங்கள் Node.js பங்களிப்பிற்கு புதியவராக இருந்தால், இந்த மாநாடு உங்களுக்கு ஒரு சிறந்த வாய்ப்பாகும். இதன் மூலம் சமூகத்திற்குள் என்ன நடக்கிறது என்பதை நீங்கள் அறிந்து கொள்ளலாம். அதோடு, உங்களிடம் உள்ள திறமைகளைப் பயன்படுத்தியும், புதிய திறன்களை வளர்த்துக் கொண்டும் நீங்கள் Node.js-க்கு பங்களிக்கத் தொடங்கலாம். + +இந்த மாநாடு தொடங்குவதற்கு முன்பாகவே, பங்களிப்பாளர்கள் மற்றும் சமூக உறுப்பினர்கள் தாங்கள் விவாதிக்க விரும்பும் தலைப்புகளைச் சமர்ப்பித்து ஒரு கால அட்டவணையை உருவாக்குகிறார்கள். இதன் மூலம் பங்கேற்பாளர்கள் நேரில் வருவதற்கு முன்பே, அங்கு என்னென்ன விவாதங்கள் நடக்கப்போகின்றன என்பதை அறிந்து கொள்ளலாம். அங்கு வந்தவுடன், முதலில் பொதுவான விவாதங்களில் கலந்துகொண்டு, பின்னர் தங்களுக்கு விருப்பமான குறிப்பிட்ட தலைப்புகளில் ஆழமாக ஈடுபடலாம். இது தவிர, முறைசாரா உரையாடல்கள் மற்றும் புதிய யோசனைகளை உருவாக்குவதற்கான ஏராளமான வாய்ப்புகளும் அங்கு அமையும். + +வரவிருக்கும் மற்றும் கடந்த கால Collaboration Summit பற்றிய தகவல்களுக்கு, பின்வரும் இணைப்புகளைப் பார்க்கவும் [மாநாட்டின் தரவுத்தளம்](https://github.com/openjs-foundation/summit) பங்களிப்பாளர்கள் மற்றும் சமூக உறுப்பினர்கள் எதைப் பற்றி விவாதிக்க முன்மொழிந்துள்ளனர் என்பதை அறிய [இந்த இணைப்பைப்](https://github.com/nodejs/summit/issues) பார்க்கவும். diff --git a/apps/site/pages/ta/about/get-involved/events.mdx b/apps/site/pages/ta/about/get-involved/events.mdx new file mode 100644 index 0000000000000..021a5ee169877 --- /dev/null +++ b/apps/site/pages/ta/about/get-involved/events.mdx @@ -0,0 +1,16 @@ +--- +title: வரவிருக்கும் நிகழ்வுகள் +layout: about +--- + +## வரவிருக்கும் நிகழ்வுகள் + +Node.js நிகழ்வுகள் பொதுமக்களுக்காகத் திறக்கப்பட்டுள்ளன மற்றும் அனைவரும் அணுகக்கூடியவை. இதில் யார் வேண்டுமானாலும் இணைந்து பங்கேற்கலாம். + +### வரவிருக்கும் Node.js® கூட்டங்கள் + +Node.js திட்டம் தொடர்பான பல்வேறு அம்சங்களை விவாதிக்கவும் திட்டமிடவும், அந்த அமைப்பு ஆண்டு முழுவதும் ஏராளமான கூட்டங்களை நடத்துகிறது. + +அடுத்த 7 நாட்களில் நடைபெறவிருக்கும் கூட்டங்களின் விவரங்கள் கீழே கொடுக்கப்பட்டுள்ளன. + + diff --git a/apps/site/pages/ta/about/get-involved/index.md b/apps/site/pages/ta/about/get-involved/index.md new file mode 100644 index 0000000000000..214380a2beaee --- /dev/null +++ b/apps/site/pages/ta/about/get-involved/index.md @@ -0,0 +1,34 @@ +--- +title: ஈடுபடத் தொடங்குங்கள் +layout: about +--- + +# ஈடுபடத் தொடங்குங்கள் + +நீங்கள் Node.js சமூகத்தில் இணைந்து பணியாற்ற ஆர்வமாக இருந்தால், அதற்குப் பல வழிகள் உள்ளன. Node.js திட்டம் என்பது ஒரு மிகப்பெரிய மற்றும் பன்முகத்தன்மை கொண்ட சமூகமாகும்; இதில் வெறும் நிரலாக்கம் எழுதுவது மட்டுமல்லாமல், இன்னும் பல்வேறு வழிகளில் நீங்கள் உங்கள் பங்களிப்பை வழங்க முடியும். + +## கம்யூனிட்டி கலந்துரையாடல் + +- [`nodejs/node` GitHub repository](https://github.com/nodejs/node/issues) என்பது Node.js-இன் முக்கிய அம்சங்களைப் பற்றி விவாதிக்கவும், சிக்கல்களைப் புகாரளிக்கவும் ஏற்ற இடமாகும். +- Node.js பற்றிக் கேள்விகளைக் கேட்க [`nodejs/help` GitHub repository](https://github.com/nodejs/help/issues) தான் அதிகாரப்பூர்வமான இடம். +- Node.js இன் [அதிகாரப்பூர்வ Discord server](https://discord.gg/nodejs) மற்ற Node.js டெவலப்பர்களுடன் உரையாடுவதற்கும், Node.js திட்டத்திலிருந்து அதிகாரப்பூர்வ செய்திகளைப் பெறுவதற்குமான ஒரு இடமாகும். +- அனைத்து பொதுவான Node.js குழு கூட்டங்களைக் கொண்ட Node.js-இன் [திட்டக் காலண்டர்](https://nodejs.org/calendar). + +## கற்றல் பொருட்கள் + +நீங்கள் Node.js பற்றி மேலும் தெரிந்துகொள்ள விரும்பினால், அதற்கென ஏராளமான ஆதாரங்கள் உங்களுக்குக் கிடைக்கின்றன. + +- Node.js-இன் [அதிகாரப்பூர்வ கற்றல் பொருட்கள்](https://nodejs.org/en/learn/). +- Node.js-இன் [அதிகாரப்பூர்வ API குறிப்பு ஆவணங்கள்](https://nodejs.org/api/). +- [NodeSchool.io](https://nodeschool.io/) என்பது ஊடாடும் கட்டளை-வரி விளையாட்டுகள்மூலம் Node.js கருத்துகளைக் கற்பிக்கிறது. +- [StackOverflow's Node.js tag](https://stackoverflow.com/questions/tagged/node.js) பயனுள்ள ஆதாரங்களைக் கொண்ட ஏராளமான திரிகளை கொண்டுள்ளது. +- [The DEV கம்யூனிட்டி Node.js's tag](https://dev.to/t/node)Node.js தொடர்பான கட்டுரைகள் மற்றும் உள்ளடக்கத்தைக் கொண்டுள்ளது. + +## அதிகாரப்பூர்வமற்ற கலந்துரையாடல் பகுதிகள் + +நீங்கள் Node.js பற்றி இன்னும் இயல்பான முறையில் கலந்துரையாட விரும்பினால், அதற்கெனப் பல அதிகாரப்பூர்வமற்ற விவாதக் களங்கள் உள்ளன. கவனிக்கவும்: Node.js திட்டம் இவற்றை அதிகாரப்பூர்வமாக அங்கீகரிக்கவில்லை. எனவே, அந்தந்த தளங்களின் நடத்தை விதிகள் மற்றும் நிபந்தனைகளைத் தயவுசெய்துது. + +- [Node Slackers](https://www.nodeslackers.com/) என்பது Node.js மையமாகக் கொண்ட Slack சமூகம். +- [OpenJSF Slack](https://slack-invite.openjsf.org/) என்பது OpenJS அறக்கட்டளைக்கான ஒரு Slack பணிச்சூழல் ஆகும். Node.js தொடர்பான பல சேனல்கள் உள்ளன. (_#nodejs- ஆல் முன்னொட்டு செய்யப்பட்ட சேனல்கள் திட்டத்துடன் தொடர்புடையவை)_ +- [r/node](https://www.reddit.com/r/node/) என்பது Node.js மையமாகக் கொண்ட ஒரு சப்ரெடிட். +- `#node.js` சேனலில் `irc.libera.chat` ஐ [IRC கிளையண்ட்](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients) மூலம் இணைக்கவும் அல்லது உங்கள் வலை உலாவியில் [வலை கிளையண்ட்](https://kiwiirc.com/nextclient/) பயன்படுத்தி சேனலை இணைக்கவும். diff --git a/apps/site/pages/ta/about/governance.md b/apps/site/pages/ta/about/governance.md new file mode 100644 index 0000000000000..9a9b5180612db --- /dev/null +++ b/apps/site/pages/ta/about/governance.md @@ -0,0 +1,24 @@ +--- +title: திட்ட நிர்வாகம் +layout: about +--- + +# திட்ட நிர்வாகம் + +## ஒருமித்த கருத்துத் தேடல் முறை + +Node.js திட்டம், முடிவெடுப்பதில் ஒருமித்த [கருத்துத் தேடல்](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making) மாதிரியைப் பின்பற்றுகிறது. + +## பங்களிப்பாளர்கள் + +[nodejs/node](https://github.com/nodejs/node) என்ற முதன்மையான GitHub களஞ்சியமானது, தற்போதுள்ள பங்களிப்பாளர்களால் அவ்வப்போது பரிந்துரைக்கப்படும் புதிய பங்களிப்பாளர்களால் பராமரிக்கப்படுகிறது. + +திட்டத்திற்கு குறிப்பிடத்தக்க மற்றும் மதிப்புமிக்க பங்களிப்புகளை வழங்கும் தனிநபர்கள், பங்களிப்பாளர்களாக உயர்த்தப்பட்டு, திட்டத்தில் மாற்றங்களைச் செய்யும் அனுமதி வழங்கப்படுகிறார்கள். இந்த நபர்கள் பிற பங்களிப்பாளர்களால் அடையாளம் காணப்பட்டு, அவர்களின் நியமனம் குறித்து தற்போதைய குழுவினருடன் விவாதிக்கப்படும். + +தற்போதைய பங்களிப்பாளர்களின் பட்டியலைக் காண, திட்டத்தின் [README.md](https://github.com/nodejs/node/blob/main/README.md#current-project-team-members) கோப்பைப் பார்க்கவும். + +பங்களிப்பாளர்களுக்கான வழிகாட்டுதல்கள் [collaborator-guide.md](https://github.com/nodejs/node/blob/main/doc/contributing/collaborator-guide.md) கோப்பில் பராமரிக்கப்படுகின்றன. + +## தொழில்நுட்ப வழிகாட்டுதல் குழு + +இந்தத் திட்டம் [தொழில்நுட்ப வழிகாட்டுதல் குழுவினால் (TSC)](https://github.com/nodejs/TSC/blob/main/TSC-Charter.md) நிர்வகிக்கப்படுகிறது. திட்டத்தின் உயர்மட்ட வழிகாட்டுதல்களுக்கு இக்குழுவே பொறுப்பாகும். TSC என்பது தற்போதுள்ள TSC உறுப்பினர்களால் பரிந்துரைக்கப்பட்ட, சுறுசுறுப்பாகச் செயல்படும் பங்களிப்பாளர்களின் ஒரு சிறிய குழுவாகும். diff --git a/apps/site/pages/ta/about/index.mdx b/apps/site/pages/ta/about/index.mdx new file mode 100644 index 0000000000000..53fc4413526cf --- /dev/null +++ b/apps/site/pages/ta/about/index.mdx @@ -0,0 +1,94 @@ +--- +title: Node.js® பற்றி +layout: about +--- + +# Node.js® பற்றி + +Node.js என்பது ஒரு asynchronous event-driven JavaScript runtime ஆகும். இது அளவிடக்கூடிய வலைப்பின்னல் பயன்பாடுகளை உருவாக்க வடிவமைக்கப்பட்டுள்ளது. கீழே உள்ள "hello world" உதாரணமாக, ஒரே நேரத்தில் பல இணைப்புகளை கையாள முடியும். ஒவ்வொரு இணைப்பின் போதும், ஒரு callback இயக்கப்படும்; ஆனால் செய்வதற்கு வேலை ஏதும் இல்லையெனில், Node.js உறக்க நிலைக்கு சென்றுவிடும். + +```cjs +const { createServer } = require('node:http'); + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +```mjs +import { createServer } from 'node:http'; + +const hostname = '127.0.0.1'; +const port = 3000; + +const server = createServer((req, res) => { + res.statusCode = 200; + res.setHeader('Content-Type', 'text/plain'); + res.end('Hello World'); +}); + +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +}); +``` + +இன்றைய பொதுவான கன்கரன்சி மாடலான OS திரெட்கள் பயன்படுத்துவதற்கு நேர்மாறானது இது. திரெட்களை அடிப்படையாகக் கொண்ட நெட்வொர்க்கிங் முறை சற்றே செயல்திறன் குறைவானது மற்றும் பயன்படுத்துவதற்கு கடினமானது. மேலும், Node.js பயனர்கள் 'dead-locking' பற்றிய கவலை இன்றி இருக்கலாம், ஏனெனில் இதில் லாக் முறைகள் கிடையாது. Node.js-இல் உள்ள எந்தவொரு செயல்பாடும் நேரடியாக I/O-வை இயக்குவதில்லை, எனவே Node.js தரநிலை நூலகத்தின் synchronous முறைகளைப் பயன்படுத்தும் போது தவிர, மற்ற நேரங்களில் செயல்முறை முடங்குவதில்லை. எதுவும் தடையின்றி இயங்குவதால், Node.js மூலம் மிகப்பெரிய அமைப்புகளை உருவாக்குவது மிகவும் எளிதாகிறது. + +இதில் பயன்படுத்தப்பட்டுள்ள language உங்களுக்குப் புதியதாகவோ அல்லது புரியாததாகவோ இருந்தால் [Blocking vs. Non-Blocking](/learn/asynchronous-work/overview-of-blocking-vs-non-blocking) குறித்த முழுமையான கட்டுரையை இங்கே படிக்கலாம். + +--- + +Node.js வடிவமைப்பில் Ruby [Event Machine](https://github.com/eventmachine/eventmachine) மற்றும் Python [Twisted](https://twisted.org/) போன்ற அமைப்புகளைப் போன்றது, மேலும் அவற்றின் தாக்கத்தால் உருவானது. ஆனால், Node.js இந்த event model இன்னும் ஒரு படி மேலே கொண்டு செல்கிறது. இது event loop ஐ ஒரு library -யாக வழங்காமல், ரன்டைம் கட்டமைப்பின் ஒரு பகுதியாகவே வழங்குகிறது. மற்ற அமைப்புகளில், நிகழ்வு வளையத்தைத் தொடங்க எப்போதும் blocking call தேவைப்படும். பொதுவாக, ஒரு ஸ்கிரிப்ட்டின் தொடக்கத்தில் கால்பேக்குகள் மூலம் அதன் செயல்பாடுகள் வரையறுக்கப்படும், இறுதியில் `EventMachine::run()` போன்ற ஒரு blocking call மூலம் சர்வர் தொடங்கப்படும். +Node.js-இல் அத்தகைய 'start-the-event-loop' அழைப்பு எதுவும் கிடையாது. உள்ளீட்டு ஸ்கிரிப்டை இயக்கிய உடனேயே Node.js நேரடியாக நிகழ்வு வளையத்திற்குள் நுழைகிறது. செய்ய வேண்டிய கால்பேக்குகள் ஏதுமில்லாத போது, அது நிகழ்வு வளையத்தை விட்டு வெளியேறுகிறது. இந்தச் செயல்பாடு browser JavaScript போன்றது — அதாவது, நிகழ்வு வளையம் பயனருக்குத் தெரியாமல் மறைக்கப்பட்டிருக்கும். + +HTTP என்பது Node.js-இல் ஒரு முதன்மை அங்கமாகக் கருதப்படுகிறது. இது தரவுப் பரிமாற்றம் மற்றும் மிகக்குறைந்த தாமதத்தைக் கருத்தில் கொண்டே வடிவமைக்கப்பட்டுள்ளது. இதன் காரணமாக, web libraries அல்லது frameworks உருவாக்குவதற்கான மிகச்சிறந்த அடித்தளமாக Node.js விளங்குகிறது. + +Node.js திரெட்கள் இன்றி வடிவமைக்கப்பட்டிருந்தாலும், உங்கள் கணினியில் உள்ள பல கோர்களின் பலனை நீங்கள் பெற முடியாது என்று அர்த்தமல்ல. எமது [`child_process.fork()`](https://nodejs.org/api/child_process.html) API-ஐப் பயன்படுத்தி துணைச் செயல்முறைகளை உருவாக்க முடியும்; இவை மிக எளிதாகத் தொடர்புகொள்ளும் வகையில் வடிவமைக்கப்பட்டுள்ளன. அதே இடைமுகத்தின் அடிப்படையில் உருவாக்கப்பட்டதே [`cluster`](https://nodejs.org/api/cluster.html) மாட்யூல் ஆகும். இது செயல்முறைகளுக்கு இடையே சாக்கெட்டுகளைப் பகிர்ந்துகொள்ள அனுமதிக்கிறது. இதன் மூலம் உங்கள் கணினியின் அனைத்து கோர்களிலும் சுமை சமநிலையை ஏற்படுத்தி, செயல்திறனை அதிகரிக்க முடியும். + +## அதிகாரப்பூர்வ Node.js ஆதாரங்கள் + +Node.js உடன் பணியாற்றும்போது அதன் நம்பகத்தன்மை மற்றும் பாதுகாப்பை உறுதிப்படுத்த, எப்போதும் அதிகாரப்பூர்வ ஆதாரங்களையே பயன்படுத்துங்கள். அதிகாரப்பூர்வமற்ற இடங்களிலிருந்து வரும் மின்னஞ்சல்கள், பைனரி கோப்புகள் அல்லது பதிவிறக்கங்களை நம்புவதைத் தவிர்க்கவும். + +### அதிகாரப்பூர்வ Node.js களங்கள் + +Node.js பைனரிகளைப் பதிவிறக்கம் செய்யவும், அதிகாரப்பூர்வ ஆவணங்களை அணுகவும், இந்தக் களங்களை மட்டும் பயன்படுத்தவும்: + +- [nodejs.org](https://nodejs.org) +- [nodejs.dev](https://nodejs.dev) _(Redirects to https://nodejs.org)_ +- [iojs.org](https://iojs.org) _(Redirects to https://nodejs.org)_ + +### அதிகாரப்பூர்வ npm தொகுப்புகள் + +Node.js குழு பின்வரும் அதிகாரப்பூர்வ npm தொகுப்பு வரம்புகளைப் பராமரிக்கிறது: + +- [`@node-core`](https://npmjs.com/~node-core) +- [`@pkgjs`](https://npmjs.com/~pkgjs) + +கூடுதலாக, Node.js குழு [`nodejs-foundation`](https://npmjs.com/~nodejs-foundation) npm கணக்கின் மூலம் வெளியிடப்பட்ட தொகுப்புகளைப் பராமரிக்கிறது, மற்ற Node.js தொடர்பான தொகுப்புகளையும் ([`undici`](https://www.npmjs.com/package/undici) போன்றவை) திட்டத்துடன் நெருக்கமாகத் தொடர்புடைய பங்களிப்பாளர்கள் பராமரிக்கலாம். + +Node.js குழுவிலிருந்து தொகுப்புகளைப் பயன்படுத்துவது நீங்கள் அதிகாரப்பூர்வமாக ஆதரிக்கப்படும் Node.js கூறுகளைப் பயன்படுத்துகிறீர்கள் என்பதை உறுதி செய்கிறது. + +### அதிகாரப்பூர்வ GitHub அமைப்புகள் + +Node.js மற்றும் அது தொடர்பான திட்டங்கள் இந்த அதிகாரப்பூர்வ GitHub அமைப்புகளின் கீழ் பராமரிக்கப்படுகின்றன: + +- [nodejs](https://github.com/nodejs) +- [pkgjs](https://github.com/pkgjs) + +### அதிகாரப்பூர்வ தகவல் தொடர்பு வழிகள் + +Node.js மற்றும் OpenJS அறக்கட்டளை பல்வேறு அதிகாரப்பூர்வ மற்றும் சமூக ஆதரவு வழிகள்மூலம் தொடர்பு கொள்கின்றன. எவ்வாறு ஈடுபடுவது என்பது பற்றிய விவரங்களை [Get Involved](https://nodejs.org/en/about/get-involved) பக்கத்தில் காணலாம். + +### வலைத்தள சிக்கல்கள் & செயலிழப்பு பற்றித் தெரிவித்தல் + +Node.js இணையதளத்தில் சிக்கல்களை நீங்கள் சந்தித்தால், அவற்றை [Node.js இணையதள களஞ்சியத்தில்](https://github.com/nodejs/nodejs.org/issues) தெரிவிக்கவும். +செயலிழப்புகள் குறித்த நிகழ்நேர புதுப்பிப்புகளுக்கு, [Node.js நிலை பக்கத்தைப்](https://status.nodejs.org) பார்வையிடவும். diff --git a/apps/site/pages/ta/about/partners.mdx b/apps/site/pages/ta/about/partners.mdx new file mode 100644 index 0000000000000..1cced744351e8 --- /dev/null +++ b/apps/site/pages/ta/about/partners.mdx @@ -0,0 +1,40 @@ +--- +title: கூட்டாளிகள் & ஆதரவாளர்கள் +layout: about +--- + +# கூட்டாளிகள் & ஆதரவாளர்கள் + +Node.js சமூகம் பல்வேறு வழிகளில் பங்களிக்கும் துடிப்பான கூட்டாளர்களின் வலைப்பின்னலால் செழுமைப்படுத்தப்படுகிறது. இத்தகைய ஒத்துழைப்புகளின் மூலம், எமது வலுவான உள்கட்டமைப்பை நாங்கள் பராமரிக்கிறோம், பாதுகாப்பை பலப்படுத்துகிறோம், புதிய பதிப்புகளை வெளியிடுகிறோம் மற்றும் எமது சூழல் அமைப்பை நிலையான முறையில் வளர்க்கிறோம். + +Node.js-இன் வெற்றிக்கும் அதன் தொடர்ச்சியான வளர்ச்சிக்கும் முக்கியப் பங்காற்றும் எமது கூட்டாளர்களின் ஆதரவிற்கு நாங்கள் நன்றியுள்ளவர்களாக இருக்கிறோம். + +## உள்கட்டமைப்பு + +எமது உள்கட்டமைப்பு கூட்டாளர்கள், Node.js திட்டத்திற்கு மிக முக்கியமான ஆதரவை வழங்குகிறார்கள். எமது தொடர்ச்சியான ஒருங்கிணைப்பு மற்றும் சோதனைச் செயல்பாடுகளுக்குத் தேவையான வன்பொருள்களையும் கணினிகளையும் அவர்கள் வழங்குகிறார்கள்; இவர்களது உதவி இன்றி, எங்களால் Node.js-இன் புதிய பதிப்புகளைச் சோதிக்கவோ அல்லது வெளியிடவோ முடியாது. + + + +## ஆதரவாளர்கள் + +ஆதரவாளர்கள் என்பது [OpenCollective](https://opencollective.com/nodejs) வாயிலாக Node.js திட்டத்திற்கு நிதி உதவி வழங்கும் தனிநபர்கள் மற்றும் அமைப்புகள் ஆவர். + + + +## சூழல் மண்டல நிலைத்தன்மை திட்டம் (ESP) + +நீங்கள் காலாவதியான (EOL) Node.js பதிப்பைப் பயன்படுத்துகிறீர்களா? OpenJS Ecosystem Sustainability Program (ESP) என்பது, நிறுவனங்கள் தங்களது காலாவதியான பதிப்புகளில் உள்ள செயலிகளைத் தொடர்ந்து பராமரிக்க உதவும் ஒரு திட்டமாகும். நீங்கள் புதிய பதிப்பிற்கு மாறுவதற்கான திட்டமிடலில் இருக்கும்போது, அந்த இடைப்பட்ட காலத்தைச் சமாளிக்க இந்தப் பாதுகாப்புத் திருத்தங்கள், விதிமுறை இணக்க உதவி மற்றும் தொழில்நுட்ப ஆதரவு ஆகியவற்றை இத்திட்டம் வழங்குகிறது. காலாவதியான பதிப்புகளைப் பற்றிய கூடுதல் தகவல்களுக்கு, தயவுசெய்து [End-Of-Life Node.js Releases](/about/eol) பக்கத்தைப் பார்வையிடவும் + +> வணிக ரீதியான ஆதரவின் மூலம் காலாவதியான பதிப்புகளைப் பயன்படுத்துவது ஒரு தற்காலிகத் தீர்வாக மட்டுமே கருதப்பட வேண்டும்; அதிகாரப்பூர்வ ஆதரவு உள்ள புதிய பதிப்புகளுக்கு மாறுவதே எப்போதும் இறுதி இலக்காக இருக்க வேண்டும். + + + +## பார்ட்னராக இணைதல் + +Node.js திட்டத்தின் கூட்டாளராக இணைந்து, இத்திட்டத்தைத் தொடர்ந்து மேம்படுத்தவும் பராமரிக்கவும் எங்களுக்கு உதவுங்கள். உலகம் முழுவதும் உள்ள மென்பொருள் உருவாக்குநர்களுக்கும் நிறுவனங்களுக்கும் Node.js ஒரு நம்பகமான மற்றும் பாதுகாப்பான தளமாகத் திகழ்வதை உறுதிசெய்ய உங்கள் ஆதரவு மிகவும் அவசியமானது. கூட்டாளராக இணைவதில் உங்களுக்கு ஆர்வம் இருந்தால், தயவுசெய்து OpenJS Foundation மூலம் எங்களைத் தொடர்புகொள்ளவும். + +
+ +
diff --git a/apps/site/pages/ta/about/previous-releases.mdx b/apps/site/pages/ta/about/previous-releases.mdx new file mode 100644 index 0000000000000..9e0f02b4699fb --- /dev/null +++ b/apps/site/pages/ta/about/previous-releases.mdx @@ -0,0 +1,48 @@ +--- +title: Node.js வெளியீடுகள் +layout: about +--- + +# Node.js வெளியீடுகள் + + + +முக்கியமான Node.js பதிப்புகள் முதலில் ஆறு மாதங்களுக்கு _Current_ நிலையில் இருக்கும்; இது லைப்ரரி உருவாக்குநர்களுக்கு புதிய பதிப்பிற்கான ஆதரவைச் சேர்க்க கால அவகாசம் அளிக்கிறது. ஆறு மாதங்களுக்குப் பிறகு, ஒற்றைப்படை எண்கள் கொண்ட பதிப்புகள் (9, 11 போன்றவை) அதிகாரப்பூர்வ ஆதரவை இழக்கின்றன. இரட்டைப்படை எண்கள் கொண்ட பதிப்புகள் (10, 12 போன்றவை) _Active LTS_ நிலைக்கு மாற்றப்பட்டு, பொதுவான பயன்பாட்டிற்குத் தயாராகின்றன. _LTS_ என்பது "long-term suppor" நிலையைக் குறிக்கிறது. இது பொதுவாக முக்கியமான பிழைகள் மொத்தம் 30 மாதங்களுக்குத் திருத்தப்படும் என்பதற்கு உத்தரவாதம் அளிக்கிறது. நிறுவனங்களின் நேரடிப் பயன்பாட்டில் உள்ள மென்பொருள்கள், _Active LTS_ அல்லது _Maintenance LTS_ பதிப்புகளை மட்டுமே பயன்படுத்த வேண்டும். + +## வெளியீட்டு அட்டவணை + +![Releases](https://raw.githubusercontent.com/nodejs/Release/main/schedule.svg?sanitize=true) + +Node.js வெளியீட்டு அட்டவணைபற்றிய முழு விவரங்களும் [GitHub இல்](https://github.com/nodejs/release#release-schedule) கிடைக்கின்றன. + +## ஒரு குறிப்பிட்ட பதிப்புக் கிளையின் சமீபத்திய வெளியீட்டைத் தேடுகிறீர்களா? + + + +## அதிகாரப்பூர்வ மற்றும் சமூக நிறுவல் முறைகள் + +Node.js இணையதளம், பயனர்கள் நேரடியாகத் தலையிடத் தேவையில்லாத பல நிறுவல் முறைகளை வழங்குகிறது. இதில் கட்டளை வரி இடைமுகங்கள் (CLIs), இயங்குதள(OS) பேக்கேஜ் மேனேஜர்கள் (எ.கா: brew), மற்றும் Node.js பதிப்பு மேலாளர்கள் (எ.கா: nvm) ஆகியவை அடங்கும். + +சமூகத்தின் பங்களிப்புகளை முன்னிலைப்படுத்தவும் ஊக்குவிக்கவும், Node.js திட்டம் தனது பதிவிறக்கப் பக்கத்தை மாற்றியமைத்துள்ளது. இதில் நிறுவல் முறைகள் "அதிகாரப்பூர்வமானவை" அல்லது "சமூகத்தினால் வழங்கப்படுபவை" என வகைப்படுத்தப்பட்டுள்ளன. இது பயனர்களுக்குக் கூடுதல் நெகிழ்வுத்தன்மையையும் தேர்வையும் வழங்குகிறது. தெளிவை உறுதிப்படுத்துவதற்காக, ஒவ்வொரு வகைக்கும் உரிய அளவுகோல்களை நாங்கள் வரையறுத்துள்ளோம். + +### அதிகாரப்பூர்வ நிறுவல் முறைகள் + +"அதிகாரப்பூர்வமானவை" என வகைப்படுத்தப்படும் நிறுவல் முறைகள் பின்வரும் நிபந்தனைகளைப் பூர்த்தி செய்ய வேண்டும்: + +| தேவைகள் (அதிகாரப்பூர்வ நிறுவல் முறைகள்) | +| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| புதிய Node.js பதிப்புகள், அதிகாரப்பூர்வ வெளியீட்டுடன் அதே நேரத்தில் கிடைக்கப்பெற வேண்டும். | +| இந்த நிறுவல் முறைகளைப் பராமரிப்பவர்கள், நேரடித் தொடர்பு வழிகள் உட்பட Node.js திட்டத்துடன் நெருங்கிய உறவைக் கொண்டிருக்க வேண்டும். | +| நிறுவல் முறையானது, Node.js திட்டத்தால் தொகுக்கப்பட்ட அதிகாரப்பூர்வ பைனரிகளை மட்டுமே பதிவிறக்க வேண்டும். | +| முன்கூட்டியே உருவாக்கப்பட்ட பைனரிகள் கிடைக்கும்போது, இந்த நிறுவல் முறைகள் மூலக் குறியீட்டிலிருந்து மென்பொருளை உருவாக்கக் கூடாது; மேலும், அவை அதிகாரப்பூர்வ பைனரிகளில் எந்த மாற்றத்தையும் செய்யக் கூடாது. | + +### சமூக நிறுவல் முறைகள் + +சுய-சேவைப் பதிவிறக்கப் பக்கத்தில் (/download) இடம்பெறும் சமூக நிறுவல் முறைகள், பின்வரும் குறைந்தபட்ச அளவுகோல்களைக் கடைப்பிடிக்க வேண்டும்: + +- **பதிப்பு ஆதரவு:** தற்போது அதிகாரப்பூர்வ ஆதரவில் உள்ள, காலாவதியாகாத (non-EOL) அனைத்து Node.js பதிப்புகளையும் ஆதரிக்க வேண்டும். +- **இயங்குதள இணக்கத்தன்மை:** அதிகாரப்பூர்வமாக ஆதரிக்கப்படும் குறைந்தபட்சம் ஒரு இயங்குதளத்திலாவது (OS) இது செயல்பட வேண்டும். +- **விரிவான இயங்குதள ஆதரவு:** ஒரு இயங்குதளத்தின் குறிப்பிட்ட சில பதிப்புகளுக்கு மட்டும் என இந்த ஆதரவு மட்டுப்படுத்தப்பட்டிருக்கக் கூடாது. + - உதாரணமாக, "Windows" உடன் இணக்கமானது எனக் கூறும் ஒரு நிறுவல் முறை, "Windows 10", "Windows 11" மற்றும் அவற்றின் அனைத்து பதிப்புகளிலும் (சர்வர் பதிப்புகள் உட்பட) செயல்பட வேண்டும். + - அதேபோல், "Linux" உடன் இணக்கமானது எனக் கூறும் ஒரு நிறுவல் முறை, அனைத்து முக்கிய லினக்ஸ் விநியோகங்களிலும் நிறுவக்கூடியதாக இருக்க வேண்டும்; ஒரு குறிப்பிட்ட பிரிவில் மட்டும் இருக்கக் கூடாது. இது `apt` அல்லது `dnf` போன்ற விநியோகம் சார்ந்த பேக்கேஜ் மேனேஜர்களை மட்டும் சார்ந்திருக்கக் கூடாது. +- **இலவச மற்றும் திறந்த மூல மென்பொருள்:** இது இலவசமாகவும், திறந்த மூல மென்பொருளாகவும் இருக்க வேண்டும். இது ஒரு வணிகத் தயாரிப்பாக விற்கப்படவோ அல்லது கட்டணச் சேவையாக இருக்கவோ கூடாது. diff --git a/apps/site/pages/ta/about/security-reporting.mdx b/apps/site/pages/ta/about/security-reporting.mdx new file mode 100644 index 0000000000000..d0236f794442f --- /dev/null +++ b/apps/site/pages/ta/about/security-reporting.mdx @@ -0,0 +1,64 @@ +--- +title: பாதுகாப்பு அறிக்கை +layout: about +--- + +# பாதுகாப்பு அறிக்கை + +செயலில் உள்ள பாதுகாப்பு கொள்கைகள்பற்றிய கூடுதல் விவரங்களுக்கு, [இந்தப் பக்கத்தை](https://github.com/nodejs/node/security/policy) பார்வையிடவும். + +## Node.js-இல் ஒரு பிழையைப் புகாரளித்தல் + +Node.js-இல் உள்ள பாதுகாப்புப் பிழைகளை [HackerOne](https://hackerone.com/nodejs) மூலம் தெரிவிக்கவும். + +பொதுவாக, உங்கள் அறிக்கை 5 நாட்களுக்குள் ஒப்புக்கொள்ளப்படும். மேலும் 10 நாட்களுக்குள் உங்கள் சமர்ப்பிப்பைக் கையாளுவதற்கான அடுத்தகட்ட நடவடிக்கைகள் குறித்த விரிவான பதில் உங்களுக்கு வழங்கப்படும். எமது தன்னார்வலர்கள் விடுமுறையில் இருக்கும் காலங்களில் குறிப்பாக ஆண்டின் இறுதியில் இந்த காலக்கெடு நீட்டிக்கப்படலாம். + +உங்கள் அறிக்கைக்கு ஆரம்பகட்ட பதில் அளித்த பிறகு, பாதுகாப்புப் பிரச்சனையைச் சரிசெய்வது மற்றும் அது குறித்த முழுமையான அறிவிப்பை வெளியிடுவது போன்ற முன்னேற்றங்கள் குறித்து பாதுகாப்பு குழு உங்களுக்குத் தெரிவிக்கும். மேலும், தெரிவிக்கப்பட்ட சிக்கல் குறித்து கூடுதல் தகவல்களையும் வழிகாட்டலையும் அவர்கள் உங்களிடம் கேட்கலாம். + +### Node.js பக் பவுண்டி திட்டம் + +Node.js திட்டம், பாதுகாப்பு ஆராய்ச்சியாளர்கள் மற்றும் பொறுப்பான பொது வெளிப்படுத்தல்களுக்காக ஓர் அதிகாரப்பூர்வமான பக் பவுண்டி திட்டத்தை முன்னெடுக்கிறது. இந்தத் திட்டம் HackerOne தளம் மூலம் நிர்வகிக்கப்படுகிறது. இது குறித்த கூடுதல் விவரங்களுக்கு [https://hackerone.com/nodejs](https://hackerone.com/nodejs) என்ற பக்கத்தைப் பார்வையிடவும். + +## மூன்றாம் தரப்பு மாட்யூலில் உள்ள பிழையைத் தெரிவித்தல் + +மூன்றாம் தரப்பு மாட்யூல்களில் உள்ள பாதுகாப்புப் பிழைகள் அந்தந்த மாட்யூல் பராமரிப்பாளர்களிடமே தெரிவிக்கப்பட வேண்டும். + +## வெளிப்படுத்தும் கொள்கை + +Node.js-க்கான பாதுகாப்பு வெளிப்படுத்தும் கொள்கை இங்கே கொடுக்கப்பட்டுள்ளது + +- பாதுகாப்பு அறிக்கை பெறப்பட்டதும், அதைச் சரிசெய்ய ஒரு முதன்மை கையாளுபவர் நியமிக்கப்படுவார். இந்த நபர் திருத்தப்பணிகள் மற்றும் வெளியீட்டுச் செயல்முறையை ஒருங்கிணைப்பார். இந்தப் பிரச்சனை ஆதரவு நிலையிலுள்ள அனைத்து Node.js பதிப்புகளிலும் சரிபார்க்கப்படும். உறுதிப்படுத்தப்பட்டவுடன், பாதிக்கப்பட்ட பதிப்புகளின் பட்டியல் தீர்மானிக்கப்படும். இதே போன்ற பிற சிக்கல்கள் ஏதேனும் உள்ளதா என்பதைக் கண்டறிய குறியீடுகள் தணிக்கை செய்யப்படும். ஆதரவு நிலையிலுள்ள அனைத்து வெளியீடுகளுக்கும் திருத்தங்கள் தயார் செய்யப்படும். இந்தத் திருத்தங்கள் பொதுக் களஞ்சியத்தில் உடனே சேர்க்கப்படாமல், அதிகாரப்பூர்வ அறிவிப்பு வரும் வரை ரகசியமாக வைக்கப்படும். + +- இந்தப் பாதிப்புகுறித்த தகவலைப் பொதுமக்களுக்கு வெளியிடுவதற்கான ஒரு தேதி பரிந்துரைக்கப்படும் மற்றும் இதற்கான CVE (Common Vulnerabilities and Exposures (CVE®)) கோரப்படும். + +- குறிக்கப்பட்ட தேதியில், இதற்கான அறிவிப்பு Node.js பாதுகாப்பு மின்னஞ்சல் குழுவிற்கு அனுப்பப்படும். மாற்றங்கள் பொதுக் களஞ்சியத்தில் பதிவேற்றப்பட்டு, புதிய பதிப்புகள் nodejs.org தளத்தில் வெளியிடப்படும். மின்னஞ்சல் குழுவிற்கு அறிவிக்கப்பட்ட 6 மணி நேரத்திற்குள், Node.js பிளாக்கில் இது குறித்த விரிவான அறிக்கை வெளியிடப்படும். + +- பொதுவாக, CVE வழங்கப்பட்ட 72 மணி நேரத்திற்குப் பிறகு இந்தத் தேதி நிர்ணயிக்கப்படும். இருப்பினும், பிழையின் தீவிரம் அல்லது திருத்தத்தைப் பயன்படுத்துவதில் உள்ள சிக்கலைப் பொறுத்து இது மாறுபடலாம். + +- இந்தச் செயல்முறை முடிவடையச் சிறிது காலம் எடுக்கலாம், குறிப்பாக மற்ற திட்டங்களின் பராமரிப்பாளர்களுடன் நாங்கள் ஒருங்கிணைந்து செயல்பட வேண்டியிருக்கும் போது தாமதமாகலாம். பிழையை எவ்வளவு விரைவாகக் கையாள முடியுமோ அவ்வளவு விரைவாகச் செய்ய முயல்வோம்; எவ்வாறாயினும், தகவல்களை வெளிப்படுத்துவதில் நிலைத்தன்மையை உறுதிப்படுத்த மேலே உள்ள வெளியீட்டுச் செயல்முறையை நாங்கள் பின்பற்ற வேண்டும். + +## பாதுகாப்பு புதுப்பிப்புகளைப் பெறுவதற்கு + +பாதுகாப்பு அறிவிப்புகள் பின்வரும் முறைகள்மூலம் விநியோகிக்கப்படும். + +- [கூகிள் குழு](https://groups.google.com/group/nodejs-sec) +- [Node.js வலைப்பதிவு](/blog) + +## இந்தக் கொள்கைகுறித்த கருத்துகள் + +இந்தச் செயல்முறையை எவ்வாறு மேம்படுத்தலாம் என்பது குறித்து உங்களிடம் ஆலோசனைகள் இருந்தால், தயவுசெய்து [nodejs/security-wg](https://github.com/nodejs/security-wg) களஞ்சியத்தைப் பார்வையிடவும். + +## OpenSSF சிறந்த நடைமுறைகள் + + + OpenSSF Badge + + +Open Source Security Foundation (OpenSSF) வழங்கும் [Best Practices badge](https://github.com/coreinfrastructure/best-practices-badge) என்பது, இலவச மற்றும் திறந்த மூல மென்பொருள்(FLOSS) திட்டங்கள் தாங்கள் சிறந்த நடைமுறைகளைப் பின்பற்றுவதை வெளிப்படுத்துவதற்கான ஒரு வழியாகும். இத்திட்டங்கள் ஒவ்வொன்றிலும் தாங்கள் எவ்வாறு சிறந்த நடைமுறைகளைப் பின்பற்றுகிறோம் என்பதை அந்தந்த மென்பொருள் குழுக்களே முன்வந்து சுய-சான்றளிக்க முடியும். இந்தச் சின்னத்தைப் பார்ப்பதன் மூலம், பயனர்கள் எந்தெந்த திட்டங்கள் சரியான வழிமுறைகளைப் பின்பற்றுகின்றன என்பதை விரைவாக மதிப்பிட முடியும். இதன் விளைவாக, அத்தகைய FLOSS திட்டங்கள் உருவாக்குவதற்கான வாய்ப்புகள் அதிகம் உள்ளன. diff --git a/apps/site/pages/ta/download/archive/index.mdx b/apps/site/pages/ta/download/archive/index.mdx new file mode 100644 index 0000000000000..0a0b6a6ef918a --- /dev/null +++ b/apps/site/pages/ta/download/archive/index.mdx @@ -0,0 +1,54 @@ +--- +title: Node.js®-ஐ பதிவிறக்கவும் +layout: download-archive +--- + + + {({ binaries, installers, version, release, sources }) => ( + <> +

Node.js® பதிவிறக்கக் காப்பகம்

+

+ Node.js லோகோ + {version} + {release.codename && ` (${release.codename})`} +

+ + + + +
    +
  • + இந்தப் பதிப்பிற்கானமாற்றங்களின் தொகுப்பை அல்லது வலைப்பதிவு இடுகையை வாசிக்கவும். +
  • +
  • + வெளியீட்டு கால அட்டவணை மற்றும் LTS நிலை உட்பட Node.js வெளியீடுகள் பற்றி மேலும் தெரிந்துகொள்ளுங்கள். +
  • +
  • + வெளியீட்டுக் கோப்புகளுக்கான கையொப்பமிடப்பட்ட SHASUMS. கையொப்பமிடப்பட்ட SHASUMS-களை எவ்வாறு சரிபார்ப்பது என்பது குறித்த விவரம். +
  • +
  • + கையொப்பமிடப்பட்ட Node.js {version} மூலக் குறியீடு டார்பால் கோப்பைப் பதிவிறக்கவும். +
  • +
+ +

பிற வெளியீடுகள்

+ + +

பைனரி பதிவிறக்கங்கள்

+ + +

நிறுவி தொகுப்புகள்

+ + +

துணைப் பதிப்புகள்

+ + + +)} + +
diff --git a/apps/site/pages/ta/download/current.mdx b/apps/site/pages/ta/download/current.mdx new file mode 100644 index 0000000000000..1e9e66fb2a428 --- /dev/null +++ b/apps/site/pages/ta/download/current.mdx @@ -0,0 +1,46 @@ +--- +layout: download +title: Node.js®-ஐ பதிவிறக்கவும் +--- + +
+ இயங்குதளத்திற்கு உடன் முறையைப் பயன்படுத்தி Node.js® -ஐப் பெறுங்கள் + + + + + அல்லது கட்டமைப்பில் இயங்கும் இயங்குதளத்திற்கான முன்கூட்டியே உருவாக்கப்பட்ட Node.js®-ஐப் பெறுங்கள். + + + + +
+ +
+ இந்தப் பதிப்பிற்கான மாற்றங்களின் தொகுப்பு அல்லது வலைப்பதிவு இடுகையை வாசிக்கவும். + +வெளியீட்டு கால அட்டவணை மற்றும் LTS நிலை உட்பட [Node.js வெளியீடுகள்](/about/previous-releases) பற்றிய கூடுதல் தகவல்களைப் தெரிந்துகொள்ளுங்கள். + +கையொப்பமிடப்பட்ட SHASUMS-களை எவ்வாறு சரிபார்ப்பது என்பதைத் தெரிந்துகொள்ளுங்கள். + +Node.js மூலக் குறியீட்டைத் தேடுகிறீர்களா? கையொப்பமிடப்பட்ட Node.js மூலக் குறியீடு டார்பால் கோப்பைப் பதிவிறக்கவும். + +எங்களது nightly பைனரிகள் அல்லது அனைத்து முந்தைய வெளியீடுகள் அல்லது பிற தளங்களுக்கான அதிகாரப்பூர்வமற்ற பைனரிகளைச் சரிபார்க்கவும். + +
+ +--- + +
+

கீழே உள்ள கூட்டாளர்களின் ஆதரவை நாங்கள் பெருமையுடன் பெற்றுள்ளோம்:

+ + + இந்தப் பங்காளிகள் மற்றும் பலரின் ஆதரவினால் + மட்டுமே Node.js பதிவிறக்கங்களை வழங்கவும், எங்களது உள்கட்டமைப்பை சிறப்பாகப் + பராமரிக்கவும் எங்களால் முடிகிறது. + + +
+ +
+
diff --git a/apps/site/pages/ta/download/index.mdx b/apps/site/pages/ta/download/index.mdx new file mode 100644 index 0000000000000..03062a4890142 --- /dev/null +++ b/apps/site/pages/ta/download/index.mdx @@ -0,0 +1,46 @@ +--- +layout: download +title: Node.js®-ஐ பதிவிறக்கவும் +--- + +
+ இயங்குதளத்திற்கு உடன் முறையைப் பயன்படுத்தி Node.js® -ஐப் பெறுங்கள் + + + + + அல்லது கட்டமைப்பில் இயங்கும் இயங்குதளத்திற்கான முன்கூட்டியே உருவாக்கப்பட்ட Node.js®-ஐப் பெறுங்கள். + + + + +
+ +
+ இந்தப் பதிப்பிற்கான மாற்றங்களின் தொகுப்பு அல்லது வலைப்பதிவு இடுகையை வாசிக்கவும். + +வெளியீட்டு கால அட்டவணை மற்றும் LTS நிலை உட்பட [Node.js வெளியீடுகள்](/about/previous-releases) பற்றிய கூடுதல் தகவல்களைப் தெரிந்துகொள்ளுங்கள். + +கையொப்பமிடப்பட்ட SHASUMS-களை எவ்வாறு சரிபார்ப்பது என்பதைத் தெரிந்துகொள்ளுங்கள். + +Node.js மூலக் குறியீட்டைத் தேடுகிறீர்களா? கையொப்பமிடப்பட்ட Node.js மூலக் குறியீடு டார்பால் கோப்பைப் பதிவிறக்கவும். + +எங்களது nightly பைனரிகள் அல்லது அனைத்து முந்தைய வெளியீடுகள் அல்லது பிற தளங்களுக்கான அதிகாரப்பூர்வமற்ற பைனரிகளைச் சரிபார்க்கவும். + +
+ +--- + +
+

கீழே உள்ள கூட்டாளர்களின் ஆதரவை நாங்கள் பெருமையுடன் பெற்றுள்ளோம்:

+ + + இந்தப் பங்காளிகள் மற்றும் பலரின் ஆதரவினால் + மட்டுமே Node.js பதிவிறக்கங்களை வழங்கவும், எங்களது உள்கட்டமைப்பை சிறப்பாகப் + பராமரிக்கவும் எங்களால் முடிகிறது. + + +
+ +
+
diff --git a/apps/site/pages/ta/index.mdx b/apps/site/pages/ta/index.mdx new file mode 100644 index 0000000000000..17858bd7cdfdf --- /dev/null +++ b/apps/site/pages/ta/index.mdx @@ -0,0 +1,131 @@ +--- +title: JavaScript ஐ எங்கும் இயக்க +layout: home +--- + +
+ + +
+

JavaScript ஐ எங்கும் இயக்க

+ + Node.js® என்பது ஒரு இலவச, திறந்த மூல மென்பொருளாகும். இது பல்வேறு இயக்கத் தளங்களில் JavaScript ஐ இயக்க உதவும் சூழலாகும். இதன் மூலம் டெவலப்பர்கள் சர்வர்கள், வெப் பயன்பாடுகள், கட்டளை வரி கருவிகள் மற்றும் ஸ்கிரிப்ட்களை உருவாக்க முடியும். + +
+ +
+
+ + + + + + +
+ +
+ + Node.js பெருமையுடன் மேலே உள்ள கூட்டாளர்களால் ஆதரிக்கப்படுகிறது மற்றும் பலர். +
+ +
+
+ +
+
+ ```js displayName="Create an HTTP Server" + // server.mjs + import { createServer } from 'node:http'; + + const server = createServer((req, res) => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.end('Hello World!\n'); + }); + + // starts a simple http server locally on port 3000 + server.listen(3000, '127.0.0.1', () => { + console.log('Listening on 127.0.0.1:3000'); + }); + + // run with `node server.mjs` + ``` + + ```js displayName="Write Tests" + // tests.mjs + import assert from 'node:assert'; + import test from 'node:test'; + + test('that 1 is equal 1', () => { + assert.strictEqual(1, 1); + }); + + test('that throws as 1 is not equal 2', () => { + // throws an exception because 1 != 2 + assert.strictEqual(1, 2); + }); + + // run with `node tests.mjs` + ``` + + ```js displayName="Read and Hash a File" + // crypto.mjs + import { createHash } from 'node:crypto'; + import { readFile } from 'node:fs/promises'; + + const hasher = createHash('sha1'); + + hasher.setEncoding('hex'); + // ensure you have a `package.json` file for this test! + hasher.write(await readFile('package.json')); + hasher.end(); + + const fileHash = hasher.read(); + + // run with `node crypto.mjs` + ``` + + ```js displayName="Streams Pipeline" + // streams.mjs + import { createReadStream, createWriteStream } from 'node:fs'; + import { pipeline } from 'node:stream/promises'; + import { createGzip } from 'node:zlib'; + + // ensure you have a `package.json` file for this test! + await pipeline( + createReadStream('package.json'), + createGzip(), + createWriteStream('package.json.gz') + ); + + + // run with `node streams.mjs` + ``` + + ```js displayName="Work with Threads" + // threads.mjs + import { Worker, isMainThread, + workerData, parentPort } from 'node:worker_threads'; + + if (isMainThread) { + const data = 'some data'; + const worker = new Worker(import.meta.filename, { workerData: data }); + worker.on('message', msg => console.log('Reply from Thread:', msg)); + } else { + const source = workerData; + parentPort.postMessage(btoa(source.toUpperCase())); + } + + // run with `node threads.mjs` + ``` + +
+ +Node.js என்ன செய்ய முடியும் என்பதை எங்கள் கற்றல் வளங்கள்மூலம் மேலும் [தெரிந்து கொள்ளுங்கள்](/learn). + +
diff --git a/apps/site/pages/uk/about/branding.mdx b/apps/site/pages/uk/about/branding.mdx index e81f51a46b75d..08611035af270 100644 --- a/apps/site/pages/uk/about/branding.mdx +++ b/apps/site/pages/uk/about/branding.mdx @@ -37,14 +37,24 @@ layout: about - Темний горизонтальний логотип Node.js + Темний горизонтальний логотип Node.js - - Світлий горизонтальний логотип Node.js + Світлий горизонтальний логотип Node.js - @@ -54,24 +64,39 @@ layout: about - Темний складений логотип Node.js® + Темний складений логотип Node.js® - - Світлий складений логотип Node.js® + Світлий складений логотип Node.js® - - Чорний складений логотип Node.js® + Чорний складений логотип Node.js® - - Білий складений логотип Node.js® + Білий складений логотип Node.js® - @@ -81,13 +106,23 @@ layout: about - Зелений значок JS + Зелений значок JS - - Білий значок JS + Білий значок JS - diff --git a/apps/site/pages/uk/about/eol.mdx b/apps/site/pages/uk/about/eol.mdx index 034a7d1717e13..0697184aaf334 100644 --- a/apps/site/pages/uk/about/eol.mdx +++ b/apps/site/pages/uk/about/eol.mdx @@ -14,9 +14,7 @@ description: З'ясуйте, що таке кінець підтримки (End - -або - + або diff --git a/apps/site/pages/uk/download/current.mdx b/apps/site/pages/uk/download/current.mdx index 8a47dc9b68f00..e1218b40793bb 100644 --- a/apps/site/pages/uk/download/current.mdx +++ b/apps/site/pages/uk/download/current.mdx @@ -4,20 +4,24 @@ title: Завантажити Node.js® ---
- Отримати Node.js® для за допомогою з + +Отримати Node.js® для за допомогою з - - Або отримайте збудований Node.js® для з архітектурою . + + +Або отримайте збудований Node.js® для з архітектурою . + + - + -
- Читайте список змін або публікацію в блозі про цю версію. + +Читайте список змін або публікацію в блозі про цю версію. Дізнайтеся більше про [релізи Node.js](/about/previous-releases), у тому числі про розклад релізів та статус підтримки. @@ -28,7 +32,11 @@ title: Завантажити Node.js® Перегляньте наші нічні бінарні файли, усі попередні релізи чи - неофіційні бінарні файли для інших платформ. + + неофіційні + +бінарні файли для інших платформ. +
--- @@ -36,12 +44,10 @@ title: Завантажити Node.js®

Нас підтримують наступні партнери:

- - Ми можемо надавати завантаження Node.js та обслуговувати нашу інфраструктуру - завдяки підтримці цих партнерів{' '} - і не тільки. - - + + Ми можемо надавати завантаження Node.js та обслуговувати нашу інфраструктуру + завдяки підтримці цих партнерів і не тільки. +
diff --git a/apps/site/pages/uk/download/index.mdx b/apps/site/pages/uk/download/index.mdx index 54482e06783ef..8b861b4629792 100644 --- a/apps/site/pages/uk/download/index.mdx +++ b/apps/site/pages/uk/download/index.mdx @@ -4,20 +4,24 @@ title: Завантажити Node.js® ---
- Отримати Node.js® для за допомогою з + +Отримати Node.js® для за допомогою з - - Або отримайте збудований Node.js® для з архітектурою . + + +Або отримайте збудований Node.js® для з архітектурою . + + - + -
- Читайте список змін або публікацію в блозі про цю версію. + +Читайте список змін або публікацію в блозі про цю версію. Дізнайтеся більше про [релізи Node.js](/about/previous-releases), у тому числі про розклад релізів та статус підтримки. @@ -28,7 +32,11 @@ title: Завантажити Node.js® Перегляньте наші нічні бінарні файли, усі попередні релізи чи - неофіційні бінарні файли для інших платформ. + + неофіційні + +бінарні файли для інших платформ. +
--- @@ -36,12 +44,10 @@ title: Завантажити Node.js®

Нас підтримують наступні партнери:

- - Ми можемо надавати завантаження Node.js та обслуговувати нашу інфраструктуру - завдяки підтримці цих партнерів{' '} - і не тільки. - - + + Ми можемо надавати завантаження Node.js та обслуговувати нашу інфраструктуру + завдяки підтримці цих партнерів і не тільки. +
diff --git a/apps/site/pages/uk/index.mdx b/apps/site/pages/uk/index.mdx index ad9476793d8f5..7107e5353a7c7 100644 --- a/apps/site/pages/uk/index.mdx +++ b/apps/site/pages/uk/index.mdx @@ -15,6 +15,7 @@ layout: home
+
@@ -22,16 +23,13 @@ layout: home
- Node.js підтримується партнерами вище і не тільки.
@@ -126,7 +124,5 @@ layout: home ```
- -Дізнайтеся більше про можливості Node.js із [нашими навчальними матеріалами](/learn). - + Дізнайтеся більше про можливості Node.js із [нашими навчальними матеріалами](/learn). diff --git a/apps/site/scripts/orama-search/get-documents.mjs b/apps/site/scripts/orama-search/get-documents.mjs index b6d4ffdf73fc2..0363ff4e2358c 100644 --- a/apps/site/scripts/orama-search/get-documents.mjs +++ b/apps/site/scripts/orama-search/get-documents.mjs @@ -60,6 +60,8 @@ export const getArticles = async () => { // Read content + metadata return Promise.all( files + // Exclude blog posts: they tend to surface in feature searches and + // direct users to a release announcement rather than the actual docs. .filter(path => !path.startsWith('blog')) .map(async path => ({ content: await readFile(join(root, path), 'utf8'), diff --git a/apps/site/snippets/en/download/nvm.bash b/apps/site/snippets/en/download/nvm.bash index b15d7aa21a7b7..f1719ecf6d41d 100644 --- a/apps/site/snippets/en/download/nvm.bash +++ b/apps/site/snippets/en/download/nvm.bash @@ -1,5 +1,5 @@ # Download and install nvm: -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash # in lieu of restarting the shell \. "$HOME/.nvm/nvm.sh" diff --git a/apps/site/snippets/ja/download/nvm.bash b/apps/site/snippets/ja/download/nvm.bash index a7b2d5ae4e136..78b3781f594c9 100644 --- a/apps/site/snippets/ja/download/nvm.bash +++ b/apps/site/snippets/ja/download/nvm.bash @@ -1,5 +1,5 @@ # nvmをダウンロードしてインストールする: -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash # シェルを再起動する代わりに実行する \. "$HOME/.nvm/nvm.sh" diff --git a/apps/site/snippets/ro/download/nvm.bash b/apps/site/snippets/ro/download/nvm.bash index b425ddf7d301f..8ff7a2cf56f29 100644 --- a/apps/site/snippets/ro/download/nvm.bash +++ b/apps/site/snippets/ro/download/nvm.bash @@ -1,5 +1,5 @@ # Descarcă și instalează nvm: -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash # în loc de a reporni shell-ul \. "$HOME/.nvm/nvm.sh" diff --git a/apps/site/snippets/ta/download/brew.bash b/apps/site/snippets/ta/download/brew.bash new file mode 100644 index 0000000000000..2a91f9b109184 --- /dev/null +++ b/apps/site/snippets/ta/download/brew.bash @@ -0,0 +1,5 @@ +# Homebrew ஐ பதிவிறக்கம் செய்து நிறுவவும் +curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash + +# Node.js ஐ பதிவிறக்கம் செய்து நிறுவவும்: +brew install node@${props.release.major} diff --git a/apps/site/snippets/ta/download/choco.bash b/apps/site/snippets/ta/download/choco.bash new file mode 100644 index 0000000000000..845f37783a24d --- /dev/null +++ b/apps/site/snippets/ta/download/choco.bash @@ -0,0 +1,5 @@ +# Chocolatey -ஐ பதிவிறக்கம் செய்து நிறுவவும்: +powershell -c "irm https://community.chocolatey.org/install.ps1|iex" + +# Node.js -ஐ பதிவிறக்கம் செய்து நிறுவவும்: +choco install nodejs --version="${props.release.version}" diff --git a/apps/site/snippets/ta/download/corepack.bash b/apps/site/snippets/ta/download/corepack.bash new file mode 100644 index 0000000000000..5d11448233363 --- /dev/null +++ b/apps/site/snippets/ta/download/corepack.bash @@ -0,0 +1,2 @@ +# Corepack -ஐ நிறுவ: +npm install -g corepack diff --git a/apps/site/snippets/ta/download/docker.bash b/apps/site/snippets/ta/download/docker.bash new file mode 100644 index 0000000000000..c1ef4df567b92 --- /dev/null +++ b/apps/site/snippets/ta/download/docker.bash @@ -0,0 +1,8 @@ +# ஒவ்வொரு இயக்க முறைமைக்கும் Docker-ரில் குறிப்பிட்ட நிறுவல் வழிமுறைகள் உள்ளன. +# தயவுசெய்து அதிகாரப்பூர்வ ஆவணத்தை https://docker.com/get-started/ இல் பார்க்கவும் + +# Node.js Docker படத்தை இழுக்கவும்: +docker pull node:${props.release.major}-${props.release.major >= 4 ? 'alpine' : 'slim'} + +# ஒரு Node.js container ஐ உருவாக்கி, ஒரு ஷெல் அமர்வைத் தொடங்கவும்: +docker run -it --rm --entrypoint sh node:${props.release.major}-${props.release.major >= 4 ? 'alpine' : 'slim'} diff --git a/apps/site/snippets/ta/download/fnm.bash b/apps/site/snippets/ta/download/fnm.bash new file mode 100644 index 0000000000000..885a155834934 --- /dev/null +++ b/apps/site/snippets/ta/download/fnm.bash @@ -0,0 +1,8 @@ +# fnm-ஐ பதிவிறக்கம் செய்து நிறுவவும்: +${props.os === 'WIN' ? + 'winget install Schniz.fnm' : + 'curl -o- https://fnm.vercel.app/install | bash' +} + +# Node.js ஐ பதிவிறக்கம் செய்து நிறுவவும்: +fnm install ${props.release.major} diff --git a/apps/site/snippets/ta/download/n.bash b/apps/site/snippets/ta/download/n.bash new file mode 100644 index 0000000000000..90928885f45f7 --- /dev/null +++ b/apps/site/snippets/ta/download/n.bash @@ -0,0 +1,5 @@ +# n மற்றும் Node.js ஐ பதிவிறக்கம் செய்து நிறுவவும்: +curl -fsSL https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-install | bash -s ${props.release.major} + +# Node.js ஏற்கனவே n-install-இன் போது நிறுவப்படுகிறது, ஆனால் நீங்கள் அதை manual முறையாகவும் நிறுவலாம்: +# n install ${props.release.major} diff --git a/apps/site/snippets/ta/download/node.bash b/apps/site/snippets/ta/download/node.bash new file mode 100644 index 0000000000000..5e258a64752b4 --- /dev/null +++ b/apps/site/snippets/ta/download/node.bash @@ -0,0 +1,2 @@ +# Node.js பதிப்பைச் சரிபார்க்கவும்: +node -v # Should print "${props.release.versionWithPrefix}". diff --git a/apps/site/snippets/ta/download/npm.bash b/apps/site/snippets/ta/download/npm.bash new file mode 100644 index 0000000000000..20abe653d69eb --- /dev/null +++ b/apps/site/snippets/ta/download/npm.bash @@ -0,0 +1,2 @@ +# npm பதிப்பைச் சரிபார்க்கவும்: +npm -v # Should print "${props.release.npm}". diff --git a/apps/site/snippets/ta/download/nvm.bash b/apps/site/snippets/ta/download/nvm.bash new file mode 100644 index 0000000000000..23c77fa3250e6 --- /dev/null +++ b/apps/site/snippets/ta/download/nvm.bash @@ -0,0 +1,8 @@ +# nvm-ஐ பதிவிறக்கம் செய்து நிறுவவும்: +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash + +# ஷெல்லை மறுதொடக்கம் செய்வதற்கு பதிலாக lieu பயன்படுத்தவும் +\. "$HOME/.nvm/nvm.sh" + +# Node.js-ஐ பதிவிறக்கம் செய்து நிறுவவும்: +nvm install ${props.release.major} diff --git a/apps/site/snippets/ta/download/pnpm.bash b/apps/site/snippets/ta/download/pnpm.bash new file mode 100644 index 0000000000000..e19d40c781eb9 --- /dev/null +++ b/apps/site/snippets/ta/download/pnpm.bash @@ -0,0 +1,5 @@ +# pnpm-ஐ பதிவிறக்கம் செய்து நிறுவவும்: +corepack enable pnpm + +# pnpm பதிப்பைச் சரிபார்க்கவும்: +pnpm -v diff --git a/apps/site/snippets/ta/download/yarn.bash b/apps/site/snippets/ta/download/yarn.bash new file mode 100644 index 0000000000000..71e292d533516 --- /dev/null +++ b/apps/site/snippets/ta/download/yarn.bash @@ -0,0 +1,5 @@ +# Yarn-ஐ பதிவிறக்கம் செய்து நிறுவவும்: +corepack enable yarn + +# Yarn பதிப்பைச் சரிபார்க்கவும்: +yarn -v diff --git a/apps/site/snippets/uk/download/nvm.bash b/apps/site/snippets/uk/download/nvm.bash index 88a9f582d124c..ed5331506a10d 100644 --- a/apps/site/snippets/uk/download/nvm.bash +++ b/apps/site/snippets/uk/download/nvm.bash @@ -1,5 +1,5 @@ # Завантажує й установлює nvm: -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash +curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash # Замість перезапуску оболонки можна виконати: \. "$HOME/.nvm/nvm.sh" diff --git a/apps/site/tests/e2e/general-behavior.spec.ts b/apps/site/tests/e2e/general-behavior.spec.ts index 327c897b383b5..813fabf5ed209 100644 --- a/apps/site/tests/e2e/general-behavior.spec.ts +++ b/apps/site/tests/e2e/general-behavior.spec.ts @@ -12,10 +12,9 @@ const locators = { navLinksLocator: `[aria-label="${englishLocale.components.containers.navBar.controls.toggle}"] + div`, // Global UI controls languageDropdownName: englishLocale.components.common.languageDropdown.label, - themeToggleAriaLabels: { - light: englishLocale.components.common.themeToggle.light, - dark: englishLocale.components.common.themeToggle.dark, - }, + themeToggleName: englishLocale.components.header.buttons.theme, + themeDarkLabel: englishLocale.components.header.buttons.themeDarkMode, + themeLightLabel: englishLocale.components.header.buttons.themeLightMode, }; const getTheme = (page: Page) => @@ -23,11 +22,6 @@ const getTheme = (page: Page) => () => document.documentElement.dataset.theme as 'light' | 'dark' ); -const getCurrentAriaLabel = (theme: string) => - theme === 'dark' - ? locators.themeToggleAriaLabels.light - : locators.themeToggleAriaLabels.dark; - const openLanguageMenu = async (page: Page) => { const button = page.getByRole('button', { name: locators.languageDropdownName, @@ -73,35 +67,50 @@ test.describe('Node.js Website', () => { }); test.describe('Theme', () => { - test('should toggle between light/dark themes', async ({ page }) => { + test('should change to dark theme via dropdown', async ({ page }) => { const themeToggle = page.getByRole('button', { - name: /Switch to (Light|Dark) Mode/i, + name: locators.themeToggleName, }); - const initialTheme = await getTheme(page); - const initialAriaLabel = getCurrentAriaLabel(initialTheme); - let currentAriaLabel = await themeToggle.getAttribute('aria-label'); - expect(currentAriaLabel).toBe(initialAriaLabel); + await themeToggle.click(); + await page + .getByRole('menuitem', { name: locators.themeDarkLabel }) + .click(); + + expect(await getTheme(page)).toBe('dark'); + }); + test('should change to light theme via dropdown', async ({ page }) => { + const themeToggle = page.getByRole('button', { + name: locators.themeToggleName, + }); + + // Set dark first, then switch to light await themeToggle.click(); + await page + .getByRole('menuitem', { name: locators.themeDarkLabel }) + .click(); - const newTheme = await getTheme(page); - const newAriaLabel = getCurrentAriaLabel(newTheme); - currentAriaLabel = await themeToggle.getAttribute('aria-label'); + await themeToggle.click(); + await page + .getByRole('menuitem', { name: locators.themeLightLabel }) + .click(); - expect(newTheme).not.toBe(initialTheme); - expect(currentAriaLabel).toBe(newAriaLabel); + expect(await getTheme(page)).toBe('light'); }); test('should persist theme across page navigation', async ({ page }) => { const themeToggle = page.getByRole('button', { - name: /Switch to (Light|Dark) Mode/i, + name: locators.themeToggleName, }); + await themeToggle.click(); - const selectedTheme = await getTheme(page); + await page + .getByRole('menuitem', { name: locators.themeDarkLabel }) + .click(); await page.reload(); - expect(await getTheme(page)).toBe(selectedTheme); + expect(await getTheme(page)).toBe('dark'); }); test('should respect system preference initially', async ({ browser }) => { diff --git a/apps/site/tsconfig.json b/apps/site/tsconfig.json index a662061edf89f..6956ba1568824 100644 --- a/apps/site/tsconfig.json +++ b/apps/site/tsconfig.json @@ -10,6 +10,7 @@ "esModuleInterop": true, "module": "esnext", "moduleResolution": "Bundler", + "customConditions": ["default"], "resolveJsonModule": true, "isolatedModules": true, "jsx": "react-jsx", diff --git a/apps/site/types/supporters.ts b/apps/site/types/supporters.ts index 5da04e07c50ca..ea7b06008cfbd 100644 --- a/apps/site/types/supporters.ts +++ b/apps/site/types/supporters.ts @@ -2,7 +2,7 @@ export type Supporter = { name: string; image: string; url: string; - profile: string; + profile?: string; source: T; }; diff --git a/apps/site/util/fetch.ts b/apps/site/util/fetch.ts deleted file mode 100644 index 61378982c6616..0000000000000 --- a/apps/site/util/fetch.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { setTimeout } from 'node:timers/promises'; - -type RetryOptions = RequestInit & { - maxRetry?: number; - delay?: number; -}; - -type FetchError = { - cause: { - code: string; - }; -}; - -export const fetchWithRetry = async ( - url: string, - { maxRetry = 3, delay = 100, ...options }: RetryOptions = {} -) => { - for (let i = 1; i <= maxRetry; i++) { - try { - return fetch(url, options); - } catch (e) { - console.debug( - `fetch of ${url} failed at ${Date.now()}, attempt ${i}/${maxRetry}`, - e - ); - - if (i === maxRetry || (e as FetchError).cause.code !== 'ETIMEDOUT') { - throw e; - } - - await setTimeout(delay * i); - } - } -}; diff --git a/package.json b/package.json index 55ee618b30a7b..bf9d8ab8649c1 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "name": "Node.js Website Team and Contributors" }, "scripts": { + "compile": "turbo compile", "build": "turbo build", "cloudflare:deploy": "turbo cloudflare:deploy", "cloudflare:preview": "turbo cloudflare:preview", @@ -36,21 +37,21 @@ "dependencies": { "husky": "9.1.7", "lint-staged": "16.2.7", - "turbo": "2.6.1" + "turbo": "2.8.11" }, "devDependencies": { "@eslint/js": "~9.39.2", - "@reporters/github": "^1.11.0", - "@testing-library/react": "~16.3.1", + "@reporters/github": "^1.12.0", + "@testing-library/react": "~16.3.2", "cross-env": "^10.1.0", "eslint": "~9.39.2", "eslint-import-resolver-typescript": "~4.4.4", "eslint-plugin-import-x": "~4.16.1", - "globals": "^16.5.0", - "prettier": "3.7.4", + "globals": "^17.3.0", + "prettier": "3.8.1", "prettier-plugin-tailwindcss": "0.7.2", "typescript": "catalog:", - "typescript-eslint": "~8.50.1" + "typescript-eslint": "~8.54.0" }, "packageManager": "pnpm@10.28.2", "devEngines": { diff --git a/packages/i18n/package.json b/packages/i18n/package.json index ee5a17e4ded8f..96898cc148fe7 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "@node-core/website-i18n", - "version": "1.1.17", + "version": "1.1.21", "type": "module", "exports": { "./*": [ diff --git a/packages/i18n/src/config.json b/packages/i18n/src/config.json index afe8858dfc86b..36095966d7f44 100644 --- a/packages/i18n/src/config.json +++ b/packages/i18n/src/config.json @@ -256,7 +256,7 @@ "langDir": "ltr", "dateFormat": "DD-MM-YYYY", "hrefLang": "ta", - "enabled": false, + "enabled": true, "default": false }, { diff --git a/packages/i18n/src/locales/en.json b/packages/i18n/src/locales/en.json index 940491462ec30..a794c5f164efc 100644 --- a/packages/i18n/src/locales/en.json +++ b/packages/i18n/src/locales/en.json @@ -1,5 +1,13 @@ { "components": { + "header": { + "buttons": { + "theme": "Select theme", + "themeSystem": "System", + "themeLightMode": "Light", + "themeDarkMode": "Dark" + } + }, "containers": { "footer": { "legal": "Copyright OpenJS Foundation and Node.js contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.", @@ -270,10 +278,6 @@ "languageDropdown": { "label": "Choose Language" }, - "themeToggle": { - "light": "Switch to Light Mode", - "dark": "Switch to Dark Mode" - }, "skipToContent": "Skip to content" }, "metabar": { diff --git a/packages/i18n/src/locales/fr.json b/packages/i18n/src/locales/fr.json index 5f4bf66716f06..c4b6c77d179c2 100644 --- a/packages/i18n/src/locales/fr.json +++ b/packages/i18n/src/locales/fr.json @@ -2,11 +2,16 @@ "components": { "containers": { "footer": { + "legal": "Copyright © OpenJS Foundation et les contributeurs Node.js. Tous droits réservés.\nLa OpenJS Foundation détient des marques déposées et utilise des marques commerciales.\nPour consulter la liste des marques de la OpenJS Foundation, veuillez vous référer à notre Politique relative aux marques ainsi qu’à la Liste des marques.\nLes marques et logos qui ne figurent pas dans la liste des marques de la OpenJS Foundation sont des marques commerciales™ ou des marques déposées® appartenant à leurs détenteurs respectifs. Leur utilisation n’implique aucune affiliation ni approbation de leur part.", "links": { - "openJSFoundation": "Fondation OpenJS", - "trademarkPolicy": "Politique de Marque", + "foundationName": "Fondation OpenJS", + "termsOfUse": "Conditions d’utilisation", "privacyPolicy": "Politique de confidentialité", + "bylaws": "Statuts et règlements", "codeOfConduct": "Code de conduite", + "trademarkPolicy": "Politique de Marque", + "trademarkList": "Liste des marques déposées", + "cookiePolicy": "Politique des cookies", "security": "Politique de sécurité" }, "releasePills": { @@ -280,7 +285,13 @@ "contribute": "Contribuer", "contributeText": "Éditer cette page", "viewAs": "Afficher en tant que", - "tableOfContents": "Table des matières" + "tableOfContents": "Table des matières", + "metadata": "Métadonnées de l'article" + }, + "banner": { + "default": "Annonce", + "warning": "Avertissement", + "error": "Notification d'erreur" }, "search": { "searchPlaceholder": "Commencer à écrire...", diff --git a/packages/i18n/src/locales/ja.json b/packages/i18n/src/locales/ja.json index 9c90849d06938..b23faa967329a 100644 --- a/packages/i18n/src/locales/ja.json +++ b/packages/i18n/src/locales/ja.json @@ -2,11 +2,16 @@ "components": { "containers": { "footer": { + "legal": "Copyright OpenJS Foundation and Node.js contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.", "links": { - "openJSFoundation": "OpenJS Foundation", - "trademarkPolicy": "商標ポリシー", + "foundationName": "OpenJS Foundation", + "termsOfUse": "利用規約", "privacyPolicy": "プライバシーポリシー", + "bylaws": "定款", "codeOfConduct": "行動規範", + "trademarkPolicy": "商標ポリシー", + "trademarkList": "商標リスト", + "cookiePolicy": "クッキーポリシー", "security": "セキュリティーポリシー" }, "releasePills": { @@ -280,7 +285,13 @@ "contribute": "編集への協力", "contributeText": "このページを編集", "viewAs": "表示方法", - "tableOfContents": "目次" + "tableOfContents": "目次", + "metadata": "記事のメタデータ" + }, + "banner": { + "default": "お知らせ", + "warning": "警告通知", + "error": "エラー通知" }, "search": { "searchPlaceholder": "入力を開始...", diff --git a/packages/i18n/src/locales/pt-br.json b/packages/i18n/src/locales/pt-br.json index 512a8afbccf77..de37d98e132e7 100644 --- a/packages/i18n/src/locales/pt-br.json +++ b/packages/i18n/src/locales/pt-br.json @@ -2,11 +2,16 @@ "components": { "containers": { "footer": { + "legal": "Copyright OpenJS Foundation e colaboradores do Node.js. Todos os direitos reservados. A OpenJS Foundation possui e utiliza marcas registradas. Para consultar a lista de marcas registradas da OpenJS Foundation, acesse nossa Política de Marcas Registradas e a Lista de Marcas Registradas. Marcas registradas e logotipos não indicados na lista de marcas registradas da OpenJS Foundation são marcas comerciais™ ou marcas registradas® de seus respectivos titulares. O uso dessas marcas não implica qualquer vínculo ou endosso porparte de seus titulares.", "links": { - "openJSFoundation": "Fundação OpenJS", - "trademarkPolicy": "Política de Marca Registrada", + "foundationName": "OpenJS Foundation", + "termsOfUse": "Termos de Uso", "privacyPolicy": "Política de Privacidade", + "bylaws": "Estatuto", "codeOfConduct": "Código de Conduta", + "trademarkPolicy": "Política de Marca Registrada", + "trademarkList": "Lista de Marcas Registradas", + "cookiePolicy": "Políticas de Cookies", "security": "Política de Segurança" }, "releasePills": { @@ -268,7 +273,8 @@ "themeToggle": { "light": "Mudar para Modo Claro", "dark": "Mudar para Modo Escuro" - } + }, + "skipToContent": "Ir direto ao conteúdo" }, "metabar": { "lastUpdated": "Última Atualização", @@ -279,7 +285,13 @@ "contribute": "Contribuir", "contributeText": "Editar esta página", "viewAs": "Visualizar como", - "tableOfContents": "Índice" + "tableOfContents": "Índice", + "metadata": "Metadados do Artigo" + }, + "banner": { + "default": "Anúncio", + "warning": "Alerta", + "error": "Erro" }, "search": { "searchPlaceholder": "Comece a digitar...", diff --git a/packages/i18n/src/locales/ta.json b/packages/i18n/src/locales/ta.json new file mode 100644 index 0000000000000..2b146ce2628b8 --- /dev/null +++ b/packages/i18n/src/locales/ta.json @@ -0,0 +1,408 @@ +{ + "components": { + "containers": { + "footer": { + "legal": "பதிப்புரிமை OpenJS நிறுவனம் மற்றும் Node.js பங்களிப்பாளர்கள். அனைத்து உரிமைகளும் பாதுகாக்கப்பட்டவை. OpenJS நிறுவனம் பதிவுசெய்யப்பட்ட வர்த்தக முத்திரைகளைக் கொண்டுள்ளது மற்றும் வர்த்தக முத்திரைகளைப் பயன்படுத்துகிறது. OpenJS நிறுவனம்-ன் வர்த்தக முத்திரைகளின் பட்டியலுக்கு, தயவுசெய்து எங்களது வர்த்தக முத்திரை கொள்கை மற்றும் வர்த்தக முத்திரை பட்டியல் -ஐப் பார்க்கவும்.OpenJS Foundation வர்த்தக முத்திரைகளின் பட்டியலில் குறிப்பிடப்படாத வர்த்தக முத்திரைகள் மற்றும் லோகோக்கள், அந்தந்த உரிமையாளர்களின் வர்த்தக முத்திரைகள்™ அல்லது பதிவுசெய்யப்பட்ட® வர்த்தக முத்திரைகள் ஆகும். அவற்றைப் பயன்படுத்துவது அவர்களுடனான எந்தவொரு தொடர்பையோ அல்லது அவர்களது அங்கீகாரத்தையோ குறிக்காது.", + "links": { + "foundationName": "OpenJS நிறுவனம்", + "termsOfUse": "பயன்பாட்டு விதிமுறைகள்", + "privacyPolicy": "தனியுரிமை கொள்கை", + "bylaws": "துணை விதிகள்", + "codeOfConduct": "நடத்தை விதிமுறை", + "trademarkPolicy": "வர்த்தக குறிக்கொள்கை", + "trademarkList": "வர்த்தக முத்திரை பட்டியல்", + "cookiePolicy": "குக்கீ கொள்கை", + "security": "பாதுகாப்புக் கொள்கை" + }, + "releasePills": { + "latestLTS": "சமீபத்திய LTS", + "latestRelease": "சமீபத்திய வெளியீடு" + } + }, + "navBar": { + "controls": { + "toggle": "வழிசெலுத்தல் மெனுவை மாற்று" + }, + "links": { + "about": "இதைப் பற்றி", + "download": "பதிவிறக்கவும்", + "docs": "ஆவணங்கள்", + "guides": "வழிகாட்டிகள்", + "learn": "கற்க", + "security": "பாதுகாப்பு", + "certification": "பாடப்பிரிவுகள்", + "blog": "வலைப்பதிவு", + "contribute": "பங்களியுங்கள்" + } + } + }, + "navigation": { + "learn": { + "gettingStarted": { + "links": { + "gettingStarted": "தொடங்குதல்", + "introductionToNodejs": "Node.js அறிமுகம்", + "howMuchJavascriptDoYouNeedToKnowToUseNodejs": "Node.js பயன்படுத்த எவ்வளவு JavaScript தெரிந்திருக்க வேண்டும்?", + "differencesBetweenNodejsAndTheBrowser": "Node.js மற்றும் உலாவி இடையேயான வேறுபாடுகள்", + "theV8JavascriptEngine": "V8 JavaScript என்ஜின்", + "anIntroductionToTheNpmPackageManager": "npm தொகுப்பு மேலாளர் அறிமுகம்", + "ecmascript2015Es6AndBeyond": "ECMAScript 2015 (ES6) மற்றும் அதற்குப் பிறகு", + "debugging": "Node.js பிழைத்திருத்தம்", + "fetch": "Node.js மூலம் தரவு பெறுதல்", + "websocket": "Node.js மூலம் WebSocket கிளையண்ட்", + "nodejsTheDifferenceBetweenDevelopmentAndProduction": "Node.js: வளர்ச்சி மற்றும் உற்பத்தி இடையிலான வேறுபாடு", + "profiling": "Node.js செயலி சுயவிவரப்படுத்தல்", + "nodejsWithWebassembly": "WebAssembly உடன் Node.js", + "securityBestPractices": "பாதுகாப்பு சிறந்த நடைமுறைகள்", + "userlandMigrations": "Userland மாற்றங்களின் அறிமுகம்" + } + }, + "commandLine": { + "links": { + "commandLine": "கட்டளை வரி", + "runNodejsScriptsFromTheCommandLine": "கட்டளை வரிகளில் Node.js ஸ்கிரிப்டுகளை இயக்குதல்", + "howToUseTheNodejsRepl": "Node.js REPL பயன்படுத்துவது எப்படி", + "outputToTheCommandLineUsingNodejs": "Node.js மூலம் கமாண்டு லைனுக்கு வெளி எழுதுதல்", + "acceptInputFromTheCommandLineInNodejs": "Node.js இல் கட்டளை வரிகளிருந்து உள்ளீடு பெறுதல்", + "howToReadEnvironmentVariablesFromNodejs": "Node.js இலிருந்து என்வைரன்மென்ட் வேரியபிள்களை எப்படி படிப்பது" + } + }, + "http": { + "links": { + "http": "HTTP", + "anatomyOfAnHttpTransaction": "HTTP பரிவர்த்தனையின் அமைப்பு", + "enterpriseNetworkConfiguration": "பெருநிறுவன வலையமைப்பு அமைப்பமைவு" + } + }, + "manipulatingFiles": { + "links": { + "manipulatingFiles": "கோப்புகளை நிர்வகித்தல்", + "nodejsFileStats": "Node.js கோப்பு புள்ளிவிவரங்கள்", + "nodejsFilePaths": "Node.js கோப்புப் பாதைகள்", + "readingFilesWithNodejs": "Node.js மூலம் கோப்புகளைப் படித்தல்", + "writingFilesWithNodejs": "Node.js மூலம் கோப்புகளை எழுதுதல்", + "workingWithFileDescriptorsInNodejs": "Node.js இல் கோப்பு விவரிகளில் பணிபுரிதல்", + "workingWithFoldersInNodejs": "Node.js இல் கோப்புறைகளில் பணிபுரிதல்", + "workingWithDifferentFilesystems": "பல்வேறு கோப்பு முறைமைகளில் பணிபுரிவது எப்படி" + } + }, + "asynchronousWork": { + "links": { + "asynchronousWork": "ஒத்திசைவற்ற நிரலாக்கம் செயல்", + "javascriptAsynchronousProgrammingAndCallbacks": "JavaScript இல் ஒத்திசைவற்ற நிரலாக்கம் மற்றும் திரும்ப அழைப்புச் செயல்பாடுகள்", + "asynchronousFlowControl": "ஒத்திசைவற்ற நிரலாக்கம் ஓட்டம் கட்டுப்பாடு", + "discoverPromisesInNodejs": "Node.js இல் Promises கண்டறிதல்", + "discoverJavascriptTimers": "JavaScript நேரக்கணக்கிகளை அறிதல்", + "overviewOfBlockingVsNonBlocking": "Blocking vs Non-Blocking - ஒரு முன்னோக்கு", + "eventLoopTimersAndNexttick": "Node.js நிகழ்வுச் சுழல்", + "theNodejsEventEmitter": "Node.js நிகழ்வு உமிழ்ப்பான்", + "understandingProcessnexttick": "process.nextTick() புரிதல்", + "understandingSetimmediate": "setImmediate() புரிதல்", + "dontBlockTheEventLoop": "Event Loop-ஐ தடுக்காதீர்கள்" + } + }, + "typescript": { + "links": { + "typescript": "TypeScript", + "introduction": "TypeScript அறிமுகம்", + "runNatively": "TypeScript-ஐ நேரடியாக இயக்குதல்", + "transpile": "Transpilation மூலம் TypeScript இயக்குதல்", + "run": "Runner மூலம் TypeScript இயக்குதல்", + "publishingTSPackage": "TypeScript தொகுப்பு வெளியிடுதல்" + } + }, + "modules": { + "links": { + "modules": "கூறுகள்", + "howToUseStreams": "ஸ்ட்ரீம்களைப் பயன்படுத்துவது எப்படி", + "backpressuringInStreams": "ஸ்ட்ரீம்களில் Backpressure", + "publishingAPackage": "தொகுப்பு வெளியிடுதல்", + "publishingNodeApiModules": "Node-API தொகுப்பு வெளியிடுவது எப்படி", + "abiStability": "ABI நிலைத்தன்மை" + } + }, + "diagnostics": { + "links": { + "diagnostics": "ஆய்வு", + "userJourney": "பயனர் பயணம்", + "memory": "நினைவகம்", + "understandingAndTuningMemory": "நினைவகத்தை புரிந்து மாற்றம் செய்வது", + "liveDebugging": "நேரடி பிழைத்திருத்தம்", + "poorPerformance": "சராசரி செயல்திறன்", + "flameGraphs": "Flame Graphs" + } + }, + "testRunner": { + "links": { + "testRunner": "டெஸ்ட் ரன்னர்", + "introduction": "Node.js டெஸ்ட் ரன்னர் அறிமுகம்", + "usingTestRunner": "Node.js டெஸ்ட் ரன்னர் பயன்படுத்துதல்", + "mocking": "டெஸ்ட்களில் Mocking", + "collectingCodeCoverage": "Node.js இல் Code Coverage சேகரித்தல்" + } + } + }, + "about": { + "links": { + "about": "Node.js பற்றி", + "aboutSide": "Node.js® பற்றி", + "branding": "Node.js பிராண்டிங்", + "governance": "திட்ட நிர்வாகம்", + "releases": "Node.js வெளியீடுகள்", + "security": "பாதுகாப்பு அறிக்கை", + "partners": "கூட்டாளர்கள் & ஆதரவாளர்கள்", + "eol": "காலாவதி நிலை (EOL)" + } + }, + "getInvolved": { + "links": { + "getInvolved": "ஈடுபடுங்கள்", + "collabSummit": "கூட்டு முயற்சி மாநாடு", + "upcomingEvents": "வரவிருக்கும் நிகழ்வுகள்", + "contribute": "Node.js-க்கு பங்களி", + "codeOfConduct": "நடத்தை விதிமுறை" + } + } + }, + "downloadReleasesTable": { + "version": "Node.js", + "nApiVersion": "N-API", + "codename": "குறியீடு பெயர்", + "releaseDate": "வெளியிடப்பட்ட தேதி", + "firstReleased": "முதலில் வெளியிடப்பட்டது", + "lastUpdated": "கடைசியாகப் புதுப்பிக்கப்பட்டது", + "status": "நிலை", + "details": "விவரங்கள்" + }, + "downloadsTable": { + "fileName": "கோப்புப் பெயர்", + "operatingSystem": "OS", + "architecture": "வமைப்பு" + }, + "releaseModal": { + "title": "Node.js v{version} ({codename})", + "titleWithoutCodename": "Node.js v{version}", + "overview": "மேலும் விவரம்", + "minorVersions": "சிறு பதிப்புகள்", + "releaseAnnouncement": "வெளியீட்டு அறிவிப்பு", + "unsupportedVersionWarning": "இந்தப் பதிப்பு பராமரிப்பில் இல்லை. தயவுசெய்து ஆதரிக்கப்படும் பதிப்பைப் பயன்படுத்தவும். EOL ஆதரவைக் புரிந்துகொள்ளவும்.", + "ltsVersionFeaturesNotice": "புதிய அம்சங்களைச் சீக்கிரமே வேண்டுமா? சமீபத்திய Node.js பதிப்பு பயன்படுத்தி முயற்சிக்கவும்!" + }, + "eolAlert": { + "message": "பராமரிப்பு LTS நிலையைக் கடந்த பதிப்புகளுக்கு எங்கள் OpenJS சூழல் நிலைத்தன்மை திட்டக் கூட்டாளர்கள் மூலம் வணிக ஆதரவு கிடைக்கும்" + }, + "eolChip": { + "severity": { + "unknown": "தெரியாதது", + "low": "குறைந்தது", + "medium": "நடுத்தரம்", + "high": "உயர்", + "critical": "அத்தியாவசியம்" + } + }, + "eolModal": { + "title": "Node.js v{version} ({codename}) EOL-ஐ சென்றடைந்தது", + "titleWithoutCodename": "Node.js v{version} EOL-ஐ சென்றடைந்தது", + "vulnerabilitiesMessage": "இந்த Node.js பதிப்போடு தொடர்புடைய {count}+ அறியப்பட்ட பாதுகாப்புச் சிக்கல்கள் (CVEs) உள்ளன. CVEs (Common Vulnerabilities and Exposures) என்பது பகிரங்கமாக அறிவிக்கப்பட்ட பாதுகாப்பு குறைபாடுகளுக்கான தனித்துவமான அடையாளங்கள் ஆகும். ஏதேனும் ஒரு CVE இணைப்பைக் கிளிக் செய்வதன் மூலம், அந்தப் பாதுகாப்பு குறைபாடு எவ்வாறு செயல்படுகிறது என்பது போன்ற கூடுதல் தொழில்நுட்ப விவரங்களை நீங்கள் அறியலாம்.", + "noVulnerabilitiesMessage": "தற்போது இந்த Node.js பதிப்போடு தொடர்புடைய அறியப்பட்ட பாதுகாப்பு குறைபாடுகள் (CVEs) ஏதுமில்லை. இருப்பினும், இது முற்றிலும் பாதுகாப்பானது என்று அர்த்தமல்ல—சில பாதுகாப்பு ஓட்டைகள் இன்னும் கண்டறியப்படாமல் இருக்கலாம் அல்லது பகிரங்கமாக அறிவிக்கப்படாமல் இருக்கலாம். இந்த பதிப்பு பழையதாகவோ அல்லது அதிகாரப்பூர்வ ஆதரவு அற்றதாகவோ இருந்தால், சமீபத்திய திருத்தங்கள் மற்றும் பாதுகாப்பு மேம்பாடுகளைப் பெறுவதற்கு, புதிய பதிப்பிற்கு மாறுவதே சிறந்த முடிவாகும்.", + "blogLinkText": "வலைப்பதிவு", + "showUnknownSeverities": "தெரியாத தீவிரம் உள்ளவற்றைக் காட்டவும்", + "table": { + "cves": "CVE(கள்)", + "severity": "தீவிரம்", + "overview": "மேலும் விவரம்", + "details": "விவரங்கள்" + } + }, + "eolTable": { + "version": "பதிப்பு", + "codename": "குறியீடு பெயர்", + "releaseDate": "வெளியிடப்பட்டது", + "lastUpdated": "கடைசியாகப் புதுப்பிக்கப்பட்டது", + "vulnerabilities": "பாதுகாப்பு குறைபாடுகள்", + "details": "விவரங்கள்", + "hideNonLts": "LTS அல்லாத பதிப்புகளை மறை" + }, + "minorReleasesTable": { + "version": "பதிப்பு", + "links": "இணைப்புகள்", + "nApiVersion": "N-API பதிப்பு", + "npmVersion": "npm பதிப்பு", + "v8Version": "V8 பதிப்பு", + "actions": { + "release": "வெளியீடு", + "changelog": "மாற்றப்பட்ட பதிவுகள்", + "docs": "ஆவணங்கள்" + } + }, + "releaseOverview": { + "firstReleased": "முதல் வெளியீடு", + "lastUpdated": "கடைசி புதுப்பிப்பு", + "minorVersions": "சிறு பதிப்புகள்", + "nApiVersion": "N-API பதிப்பு", + "npmVersion": "npm பதிப்பு", + "v8Version": "V8 பதிப்பு" + }, + "common": { + "alertBox": { + "info": "தகவல்", + "warning": "எச்சரிக்கை", + "danger": "ஆபத்து" + }, + "breadcrumbs": { + "navigateToHome": "முகப்பிற்கு செல்லவும்" + }, + "codebox": { + "copy": "கிளிப்போர்டிற்கு நகலெடு", + "copied": "கிளிப்போர்டில் நகலெடுக்கப்பட்டது!" + }, + "pagination": { + "previous": "முந்தையது", + "previousAriaLabel": "முந்தைய பக்கம்", + "next": "அடுத்தது", + "nextAriaLabel": "அடுத்த பக்கம்", + "defaultLabel": "பக்க எண்கள்", + "pageLabel": "{pageNumber} ஆவது பக்கத்திற்குச் செல்லவும்" + }, + "sidebar": { + "title": "பக்கத்தை மாற்று" + }, + "languageDropdown": { + "label": "மொழி தேர்வு" + }, + "themeToggle": { + "light": "Switch to Light Mode", + "dark": "Switch to Dark Mode" + }, + "skipToContent": "உள்ளடக்கத்திற்குச் செல்லவும்" + }, + "metabar": { + "lastUpdated": "கடைசியாகப் புதுப்பிக்கப்பட்டது", + "readingTime": "படிக்கும் நேரம்", + "addedIn": "சேர்க்கப்பட்டது", + "author": "ஆசிரியர்", + "authors": "ஆசிரியர்கள்", + "contribute": "பங்களி", + "contributeText": "இந்தப் பக்கத்தைத் திருத்து", + "viewAs": "இப்படியாகப் பார்", + "tableOfContents": "உள்ளடக்கப் பட்டியல்", + "metadata": "கட்டுரை மெட்டாடேட்டா" + }, + "banner": { + "default": "அறிவிப்புகள்", + "warning": "எச்சரிக்கை அறிவிப்பு", + "error": "பிழை செய்தி" + }, + "search": { + "searchPlaceholder": "எழுதத் தொடங்கு...", + "chatPlaceholder": "எதையும் கேளுங்கள்", + "noResultsFoundFor": "இதற்கான முடிவுகள் இல்லை", + "suggestions": "பரிந்துரைகள்", + "seeAll": "அனைத்தையும் பார்க்கவும்", + "addMore": "மேலும் சேர்க்கவும்", + "clearChat": "Chat-யை அழிக்கவும்", + "errorMessage": "தேடும்போது பிழை ஏற்பட்டது. மீண்டும் முயற்சிக்கவும்.", + "disclaimer": "AI சுருக்கங்கள் சில நேரங்களில் தவறாக இருக்கலாம். தயவுசெய்து சரிபார்க்கவும்.", + "startYourSearch": "உங்கள் தேடலைத் தொடங்கவும்", + "initErrorSearch": "தேடல் சேவை தொடங்க முடியவில்லை", + "initErrorChat": "Chat சேவை தொடங்க முடியவில்லை", + "chatButtonLabel": "AI சுருக்கம் பெற", + "searchButtonLabel": "தேடல்", + "poweredBy": "Powered by", + "suggestionOne": "Node.js எப்படி நிறுவுவது?", + "suggestionTwo": "HTTP சர்வர் உருவாக்குவது எப்படி?", + "suggestionThree": "Node.js பதிப்பு மேம்படுத்துதல்", + "scrollToBottom": "கீழே செல்லவும்", + "closeChat": "Chat-யை மூடு", + "keyboardShortcuts": { + "select": "தேர்வு செய்ய", + "navigate": "navigate செய்ய", + "close": "close செய்ய" + } + }, + "blog": { + "blogHeader": { + "subtitle": "சமீபத்திய Node.js செய்திகள், மாற்று வழிகாட்டிகள் மற்றும் நிகழ்வுச் சுருக்கங்கள்", + "rssLink": "RSS feed" + } + } + }, + "layouts": { + "blogPost": { + "author": { + "byLine": "{author, select, null {} other {{author} எழுதியது, }}" + } + }, + "blogIndex": { + "categoryName": "{category, select, all {வலைப்பதிவு} other {{category} பதிவுகள்}}" + }, + "blog": { + "title": "வலைப்பதிவு", + "selectCategory": "பிரிவுகள்", + "categories": { + "all": "அனைத்தும்", + "announcements": "அனைத்தும்", + "release": "அனைத்தும்", + "vulnerability": "பாதுகாப்பு பிரச்சினைகள்", + "advisory-board": "ஆலோசனை குழு", + "community": "சமூகம்", + "feature": "அம்சம்", + "module": "மொடியூல்", + "npm": "npm", + "uncategorized": "வகைப்படுத்தப்படாதது", + "video": "வீடியோ", + "weekly": "வாராந்திர புதுப்பிப்புகள்", + "wg": "பணிக்குழுக்கள்", + "migrations": "மாற்று வழிகாட்டிகள்", + "events": "நிகழ்வுகள்" + } + }, + "error": { + "notFound": { + "title": "பக்கம் கிடைக்கவில்லை", + "description": "மன்னிக்கவும்! நீங்கள் தேடும் பக்கத்தைக் காண முடியவில்லை. முகப்புப் பக்கத்திலிருந்து மீண்டும் முயற்சிக்கவும்." + }, + "internalServerError": { + "title": "உள் சேவையக பிழை", + "description": "இந்தப் பக்கத்தில் சரிசெய்ய முடியாத பிழை ஏற்பட்டது." + }, + "backToHome": "முகப்பிற்கு திரும்பவும்" + }, + "download": { + "buttons": { + "installer": "{os} நிறுவி (.{extension})", + "binary": "Standalone பைனரி (.{extension})" + }, + "dropdown": { + "platform": "பிளாட்ஃபார்ம்", + "os": "இயங்கு தளம்", + "version": "பதிப்பு", + "installMethod": "நிறுவும் முறை", + "packageManager": "பேக்கேஜ் மேலாளர்", + "unknown": "தெரியவில்லை", + "platformGroups": { + "official": "பரிந்துரைக்கப்படும் (அதிகாரப்பூர்வமானது)", + "unofficial": "சமூகம் (அதிகாரப்பூர்வமற்றது)" + } + }, + "codeBox": { + "unsupportedVersionWarning": "இந்தப் பதிப்பு பராமரிப்பில் இல்லை. ஆதரிக்கப்படும் பதிப்பைப் பயன்படுத்தவும். EOL ஆதரவு குறித்து அறிய", + "ltsVersionFeaturesNotice": "புதிய அம்சங்களைச் சீக்கிரமே வேண்டுமா? சமீபத்திய Node.js பதிப்பை முயற்சிக்கவும்!", + "communityPlatformInfo": "சமூகத்தின் சாப்ட்வேர் மூலம் வழங்கப்படும் Installation முறைகளுக்கு அவர்கள் தான் பொறுப்பு.", + "externalSupportInfo": "பிரச்சினைகள் இருந்தால் {platform} இணையதளத்தில் பார்த்தறியவும்", + "noScriptDetected": "இந்தப் பக்கத்திற்கு JavaScript தேவை. நீங்கள் நேரடியாக பதிவிறக்க ஆவணக் காப்பகப் பக்கத்திற்குச் சென்று ஜாவாஸ்கிரிப்ட் இல்லாமல் Node.js ஐ பதிவிறக்கம் செய்யலாம்.", + "platformInfo": { + "default": "{platform} மற்றும் அதன் ஸ்கிரிப்ட்கள் Node.js குழுவால் பராமரிக்கப்படுவதில்லை.", + "nvm": "\"nvm\" ஒரு குறுக்கு-பிளாட்ஃபார்ம் Node.js பதிப்பு மேலாளர்.", + "fnm": "\"fnm\" ஒரு குறுக்கு-பிளாட்ஃபார்ம் Node.js பதிப்பு மேலாளர்.", + "brew": "Homebrew என்பது macOS மற்றும் Linux இற்கான பேக்கேஜ் மேலாளர்.", + "choco": "Chocolatey என்பது Windows இற்கான பேக்கேஜ் மேலாளர்.", + "docker": "Docker என்பது containerization தளம்.", + "n": "\"n\" குறுக்கு-பிளாட்ஃபார்ம் Node பதிப்பு மேலாளர்.", + "volta": "\"Volta\" விரைந்து வேலை செய்யும் Node மேலாளர்." + } + } + }, + "logo": "Node.js சின்னம்" + } +} diff --git a/packages/i18n/src/locales/uk.json b/packages/i18n/src/locales/uk.json index 246d4be53c2fd..78d92d64f90a6 100644 --- a/packages/i18n/src/locales/uk.json +++ b/packages/i18n/src/locales/uk.json @@ -2,11 +2,16 @@ "components": { "containers": { "footer": { + "legal": "Авторські права OpenJS Foundation та учасників спільноти Node.js. Усі права захищено. OpenJS Foundation має зареєстровані торговельні марки та використовує торговельні марки. Аби побачити список торговельних марок OpenJS Foundation, перегляньте нашу політику торговельних марок та список торговельних марок. Торговельні марки та логотипи, не зазначені в списку торговельних марок OpenJS Foundation, є торговельними марками™ або зареєстрованими® торговельними марками їхніх відповідних власників. Їхнє використання не означає певну приналежність чи схвалення ними.", "links": { - "openJSFoundation": "OpenJS Foundation", - "trademarkPolicy": "Політика торгових марок", + "foundationName": "OpenJS Foundation", + "termsOfUse": "Умови використання", "privacyPolicy": "Політика конфіденційності", + "bylaws": "Статути", "codeOfConduct": "Кодекс поведінки", + "trademarkPolicy": "Політика торговельних марок", + "trademarkList": "Список торговельних марок", + "cookiePolicy": "Політика cookie", "security": "Політика безпеки" }, "releasePills": { @@ -268,7 +273,8 @@ "themeToggle": { "light": "Увімкнути світлу тему", "dark": "Увімкнути темну тему" - } + }, + "skipToContent": "Перейти до вмісту" }, "metabar": { "lastUpdated": "Востаннє оновлено", @@ -279,7 +285,13 @@ "contribute": "Долучитися", "contributeText": "Редагувати цю сторінку", "viewAs": "Переглянути як", - "tableOfContents": "Зміст" + "tableOfContents": "Зміст", + "metadata": "Метадані статті" + }, + "banner": { + "default": "Оголошення", + "warning": "Попередження", + "error": "Помилка" }, "search": { "searchPlaceholder": "Уведіть щось...", diff --git a/packages/i18n/tsconfig.json b/packages/i18n/tsconfig.json index 9e24d7ba420aa..8b3fd79f7f55c 100644 --- a/packages/i18n/tsconfig.json +++ b/packages/i18n/tsconfig.json @@ -8,7 +8,7 @@ "forceConsistentCasingInFileNames": true, "esModuleInterop": true, "module": "esnext", - "moduleResolution": "Bundler", + "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, "incremental": true, diff --git a/packages/rehype-shiki/eslint.config.js b/packages/rehype-shiki/eslint.config.js index 92c6ea4214f81..e22cf7d4fa90d 100644 --- a/packages/rehype-shiki/eslint.config.js +++ b/packages/rehype-shiki/eslint.config.js @@ -1 +1,17 @@ -export { default } from '../../eslint.config.js'; +import baseConfig from '../../eslint.config.js'; + +export default baseConfig.concat([ + { + files: ['src'], + ignores: ['**/*.test.*', '**/*.stories.tsx'], + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + '@typescript-eslint/consistent-type-imports': 'error', + }, + }, +]); diff --git a/packages/rehype-shiki/package.json b/packages/rehype-shiki/package.json index acb72443f7c22..cdb1e2d10a261 100644 --- a/packages/rehype-shiki/package.json +++ b/packages/rehype-shiki/package.json @@ -1,11 +1,18 @@ { "name": "@node-core/rehype-shiki", - "version": "1.3.0", + "version": "1.4.1", "type": "module", + "types": "./dist/index.d.mts", "exports": { - ".": "./src/index.mjs", - "./index.css": "./src/index.css", - "./*": "./src/*.mjs" + ".": { + "types": "./dist/index.d.mts", + "default": "./src/index.mjs" + }, + "./*": { + "types": "./dist/*.d.mts", + "default": "./src/*.mjs" + }, + "./index.css": "./src/index.css" }, "repository": { "type": "git", @@ -13,24 +20,38 @@ "directory": "packages/rehype-shiki" }, "scripts": { + "compile:ts": "tsc", + "compile": "node --run compile:ts", + "release": "node --run compile", "lint": "node --run lint:js", "lint:fix": "node --run lint:js:fix", "lint:js": "eslint \"**/*.mjs\"", "lint:js:fix": "node --run lint:js -- --fix", + "lint:types": "tsc --noEmit", "test": "node --run test:unit", "test:unit": "cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --experimental-test-module-mocks --test \"**/*.test.mjs\"" }, "dependencies": { - "@shikijs/core": "^3.20.0", - "@shikijs/engine-javascript": "^3.20.0", - "@shikijs/engine-oniguruma": "^3.20.0", - "@shikijs/twoslash": "^3.20.0", + "@shikijs/core": "^3.23.0", + "@shikijs/engine-javascript": "^3.23.0", + "@shikijs/engine-oniguruma": "^3.23.0", + "@shikijs/twoslash": "^3.23.0", "classnames": "catalog:", "hast-util-to-string": "^3.0.1", - "shiki": "~3.20.0", - "unist-util-visit": "^5.0.0" + "shiki": "~3.23.0", + "typescript": "catalog:", + "unist-util-visit": "^5.1.0" }, "devDependencies": { "cross-env": "catalog:" + }, + "imports": { + "#rs/*": [ + "./src/*", + "./src/*.mjs" + ] + }, + "engines": { + "node": ">=20" } } diff --git a/packages/rehype-shiki/src/highlighter.mjs b/packages/rehype-shiki/src/highlighter.mjs index 15b57f00fc5e7..56c5d5e11eb29 100644 --- a/packages/rehype-shiki/src/highlighter.mjs +++ b/packages/rehype-shiki/src/highlighter.mjs @@ -9,6 +9,12 @@ const DEFAULT_THEME = { ...shikiNordTheme, }; +/** + * @template {{ name: string; aliases?: string[] }} T + * @param {string} language + * @param {ReadonlyArray} langs + * @returns {T | undefined} + */ export const getLanguageByName = (language, langs) => { const normalized = language.toLowerCase(); @@ -20,7 +26,7 @@ export const getLanguageByName = (language, langs) => { /** * @typedef {Object} SyntaxHighlighter - * @property {import('@shikijs/core').HighlighterCoreSync} shiki - The underlying shiki core instance. + * @property {import('@shikijs/core').HighlighterCore} shiki - The underlying shiki core instance. * @property {(code: string, lang: string, meta?: Record) => string} highlightToHtml - Highlights code and returns inner HTML of the tag. * @property {(code: string, lang: string, meta?: Record) => any} highlightToHast - Highlights code and returns a HAST tree. */ diff --git a/packages/rehype-shiki/src/index.mjs b/packages/rehype-shiki/src/index.mjs index 91971241ca022..229f079bc084f 100644 --- a/packages/rehype-shiki/src/index.mjs +++ b/packages/rehype-shiki/src/index.mjs @@ -14,7 +14,7 @@ import shellSessionLanguage from 'shiki/langs/shellsession.mjs'; import typeScriptLanguage from 'shiki/langs/typescript.mjs'; import yamlLanguage from 'shiki/langs/yaml.mjs'; -import createHighlighter, { getLanguageByName } from './highlighter.mjs'; +import createHighlighter, { getLanguageByName } from '#rs/highlighter.mjs'; /** * @typedef {Object} HighlighterOptions @@ -48,7 +48,7 @@ async function getTransformers({ twoslash = false, twoslashOptions }) { const transformers = []; if (twoslash) { - const { twoslash } = await import('./transformers/twoslash/index.mjs'); + const { twoslash } = await import('#rs/transformers/twoslash/index.mjs'); transformers.push(twoslash(twoslashOptions)); } diff --git a/packages/rehype-shiki/src/minimal.mjs b/packages/rehype-shiki/src/minimal.mjs index 611ef44951053..413cd0d4396ff 100644 --- a/packages/rehype-shiki/src/minimal.mjs +++ b/packages/rehype-shiki/src/minimal.mjs @@ -2,7 +2,7 @@ import { createJavaScriptRegexEngine } from '@shikijs/engine-javascript'; import powershellLanguage from 'shiki/langs/powershell.mjs'; import shellScriptLanguage from 'shiki/langs/shellscript.mjs'; -import createHighlighter, { getLanguageByName } from './highlighter.mjs'; +import createHighlighter, { getLanguageByName } from '#rs/highlighter.mjs'; export const LANGS = [...powershellLanguage, ...shellScriptLanguage]; diff --git a/packages/rehype-shiki/src/plugin.mjs b/packages/rehype-shiki/src/plugin.mjs index 9f1663c735aff..6f08603fd7293 100644 --- a/packages/rehype-shiki/src/plugin.mjs +++ b/packages/rehype-shiki/src/plugin.mjs @@ -4,7 +4,7 @@ import classNames from 'classnames'; import { toString } from 'hast-util-to-string'; import { SKIP, visit } from 'unist-util-visit'; -import createHighlighter from './index.mjs'; +import createHighlighter from '#rs/index.mjs'; // This is what Remark will use as prefix within a
 className
 // to attribute the current language of the 
 element
@@ -54,7 +54,7 @@ function isCodeBlock(node) {
 }
 
 /**
- * @param {import('./index.mjs').HighlighterOptions & { highlighter: import('./highlighter.mjs').SyntaxHighlighter }} options
+ * @param {import('#rs/index.mjs').HighlighterOptions & { highlighter: import('#rs/highlighter.mjs').SyntaxHighlighter }} options
  */
 export default async function rehypeShikiji(options) {
   const highlighter =
@@ -163,7 +163,11 @@ export default async function rehypeShikiji(options) {
       const meta = parseMeta(preElement.data?.meta);
 
       // Retrieve the whole 
 contents as a parsed DOM string
-      const preElementContents = toString(preElement);
+      const preElementContents = toString(preElement).replace(/\n$/, '');
+
+      // Since we removed the trailing newline, we can easily count the
+      // amount of lines without worrying about an extra empty line at the end of the code block
+      const lineCount = preElementContents.split('\n').length;
 
       // Grabs the relevant alias/name of the language
       const languageId = codeLanguage.slice(languagePrefix.length);
@@ -178,7 +182,8 @@ export default async function rehypeShikiji(options) {
       // Adds the original language back to the 
 element
       children[0].properties.class = classNames(
         children[0].properties.class,
-        codeLanguage
+        codeLanguage,
+        { 'no-line-numbers': lineCount < 5, 'no-footer': lineCount === 1 }
       );
 
       // Replaces the 
 element with the updated one
diff --git a/packages/rehype-shiki/tsconfig.json b/packages/rehype-shiki/tsconfig.json
new file mode 100644
index 0000000000000..47c2bb0a61c43
--- /dev/null
+++ b/packages/rehype-shiki/tsconfig.json
@@ -0,0 +1,22 @@
+{
+  "compilerOptions": {
+    "target": "esnext",
+    "lib": ["dom", "dom.iterable", "esnext"],
+    "allowJs": true,
+    "skipLibCheck": true,
+    "strict": true,
+    "forceConsistentCasingInFileNames": true,
+    "esModuleInterop": true,
+    "module": "esnext",
+    "moduleResolution": "bundler",
+    "resolveJsonModule": true,
+    "jsx": "react-jsx",
+    "declaration": true,
+    "emitDeclarationOnly": true,
+    "baseUrl": "./src",
+    "rootDir": "./src",
+    "outDir": "./dist"
+  },
+  "include": ["src"],
+  "exclude": ["**/*.test.*", "**/*.stories.tsx"]
+}
diff --git a/packages/rehype-shiki/turbo.json b/packages/rehype-shiki/turbo.json
index 7a34fa4ca9091..c6f3812e962eb 100644
--- a/packages/rehype-shiki/turbo.json
+++ b/packages/rehype-shiki/turbo.json
@@ -8,6 +8,9 @@
     "lint:fix": {
       "cache": false
     },
+    "lint:types": {
+      "cache": false
+    },
     "test:unit": {
       "inputs": ["src/**/*.mjs"]
     }
diff --git a/packages/remark-lint/package.json b/packages/remark-lint/package.json
index 179479875b5c3..f8b3c2ae1b14b 100644
--- a/packages/remark-lint/package.json
+++ b/packages/remark-lint/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@node-core/remark-lint",
   "type": "module",
-  "version": "1.2.0",
+  "version": "1.2.1",
   "exports": {
     ".": "./src/index.mjs",
     "./api": "./src/api.mjs"
@@ -52,7 +52,7 @@
     "remark-preset-lint-recommended": "^7.0.1",
     "semver": "^7.7.3",
     "unified-lint-rule": "^3.0.1",
-    "unist-util-visit": "^5.0.0",
+    "unist-util-visit": "^5.1.0",
     "yaml": "^2.8.2"
   },
   "devDependencies": {
diff --git a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs
index 714c31f14222b..177e45942e487 100644
--- a/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs
+++ b/packages/remark-lint/src/rules/__tests__/invalid-type-reference.test.mjs
@@ -26,6 +26,11 @@ const testCases = [
       'Type reference should be separated by "|", without spaces; saw "{string | boolean}"',
     ],
   },
+  {
+    name: 'newline, multiple references',
+    input: 'Psst, are you a {string|\nboolean}',
+    expected: [],
+  },
   {
     name: 'invalid references',
     input: 'This is {invalid}.',
diff --git a/packages/remark-lint/src/rules/invalid-type-reference.mjs b/packages/remark-lint/src/rules/invalid-type-reference.mjs
index a4dc36666f75a..80d2fba986a93 100644
--- a/packages/remark-lint/src/rules/invalid-type-reference.mjs
+++ b/packages/remark-lint/src/rules/invalid-type-reference.mjs
@@ -3,8 +3,8 @@ import createQueries from '@nodejs/doc-kit/src/utils/queries/index.mjs';
 import { lintRule } from 'unified-lint-rule';
 import { visit } from 'unist-util-visit';
 
-const MATCH_RE = /\s\||\|\s/g;
-const REPLACE_RE = /\s*\|\s*/g;
+const MATCH_RE = /\s\||\| /g;
+const REPLACE_RE = /\s*\| */g;
 
 /**
  * Ensures that all type references are valid
diff --git a/packages/ui-components/README.md b/packages/ui-components/README.md
index f701e050751b7..b1f590f2dc541 100644
--- a/packages/ui-components/README.md
+++ b/packages/ui-components/README.md
@@ -8,3 +8,23 @@ The components are based on [this design file](https://www.figma.com/design/a10c
 Most components in this package are available on [Chromatic](https://www.chromatic.com/library?appId=64c7d71358830e9105808652).
 
 For additional details regarding specific components, refer to the [nodejs/nodejs.org](https://github.com/nodejs/nodejs.org) repository.
+
+## Local development
+
+To use this package via `npm link` in another repo (for example, doc-kit), build the
+compiled outputs and keep them updated while you work.
+
+```bash
+# From nodejs.org/packages/ui-components
+pnpm install
+node --run compile:watch
+
+# In another terminal, still in nodejs.org/packages/ui-components
+npm link
+
+# From the consumer repo (for example doc-kit)
+npm link @node-core/ui-components
+```
+
+The `compile:watch` script keeps `dist/` up to date so consumers resolve compiled
+CSS and JavaScript instead of the raw Tailwind source.
diff --git a/packages/ui-components/package.json b/packages/ui-components/package.json
index 429eac54fe626..6235ce5011b40 100644
--- a/packages/ui-components/package.json
+++ b/packages/ui-components/package.json
@@ -1,15 +1,22 @@
 {
   "name": "@node-core/ui-components",
-  "version": "1.5.10",
+  "version": "1.6.2",
   "type": "module",
   "exports": {
-    "./*": [
-      "./src/*",
-      "./src/*.tsx",
-      "./src/*/index.tsx",
-      "./src/*.ts",
-      "./src/*/index.ts"
-    ]
+    "./*": {
+      "rolldown": [
+        "./dist/*",
+        "./dist/*.js",
+        "./dist/*/index.js"
+      ],
+      "default": [
+        "./src/*",
+        "./src/*.tsx",
+        "./src/*/index.tsx",
+        "./src/*.ts",
+        "./src/*/index.ts"
+      ]
+    }
   },
   "repository": {
     "type": "git",
@@ -20,7 +27,8 @@
     "compile:ts": "tsc",
     "compile:css": "postcss --dir dist --base src \"src/**/*.module.css\" src/styles/index.css",
     "compile": "node --run compile:ts && node --run compile:css",
-    "release": "node --run compile && node scripts/publish.mjs",
+    "compile:watch": "concurrently -k \"node --run compile:ts -- --watch\" \"node --run compile:css -- --watch\"",
+    "release": "node --run compile",
     "lint": "node --run lint:js && node --run lint:css",
     "lint:css": "stylelint \"**/*.css\" --allow-empty-input --cache --cache-strategy=content --cache-location=.stylelintcache",
     "lint:css:fix": "node --run lint:css -- --fix",
@@ -36,58 +44,69 @@
   },
   "dependencies": {
     "@heroicons/react": "^2.2.0",
+    "@orama/core": "^1.2.19",
     "@orama/ui": "^1.5.4",
     "@radix-ui/react-avatar": "^1.1.11",
     "@radix-ui/react-dialog": "^1.1.15",
-    "@radix-ui/react-dropdown-menu": "~2.1.16",
-    "@radix-ui/react-label": "~2.1.8",
-    "@radix-ui/react-select": "~2.2.6",
-    "@radix-ui/react-separator": "~1.1.8",
-    "@radix-ui/react-tabs": "~1.1.13",
-    "@radix-ui/react-tooltip": "~1.2.8",
-    "@tailwindcss/postcss": "~4.1.18",
+    "@radix-ui/react-dropdown-menu": "^2.1.16",
+    "@radix-ui/react-label": "^2.1.8",
+    "@radix-ui/react-select": "^2.2.6",
+    "@radix-ui/react-separator": "^1.1.8",
+    "@radix-ui/react-tabs": "^1.1.13",
+    "@radix-ui/react-tooltip": "^1.2.8",
+    "@tailwindcss/postcss": "~4.2.1",
+    "@types/react": "catalog:",
     "@vcarl/remark-headings": "~0.1.0",
     "classnames": "catalog:",
-    "postcss-calc": "^10.1.1",
-    "tailwindcss": "catalog:"
+    "postcss-cli": "11.0.1",
+    "postcss-calc": "10.1.1",
+    "react": "catalog:",
+    "tailwindcss": "catalog:",
+    "typescript": "catalog:"
   },
   "devDependencies": {
-    "@orama/core": "^1.2.16",
-    "@storybook/addon-styling-webpack": "^3.0.0",
-    "@storybook/addon-themes": "^10.1.11",
-    "@storybook/addon-webpack5-compiler-swc": "^4.0.2",
-    "@storybook/react-webpack5": "^10.1.11",
+    "@storybook/addon-styling-webpack": "~3.0.0",
+    "@storybook/addon-themes": "~10.2.13",
+    "@storybook/addon-webpack5-compiler-swc": "~4.0.2",
+    "@storybook/react-webpack5": "~10.2.13",
     "@testing-library/user-event": "~14.6.1",
     "@types/node": "catalog:",
-    "@types/react": "catalog:",
     "cross-env": "catalog:",
-    "css-loader": "~7.1.2",
-    "eslint-plugin-react": "~7.37.5",
-    "eslint-plugin-react-hooks": "^7.0.1",
-    "eslint-plugin-storybook": "~10.0.2",
-    "global-jsdom": "^27.0.0",
-    "postcss-cli": "^11.0.1",
-    "postcss-loader": "~8.2.0",
-    "react": "catalog:",
-    "storybook": "^10.1.11",
-    "style-loader": "~4.0.0",
-    "stylelint": "^16.26.1",
-    "stylelint-config-standard": "^39.0.1",
+    "concurrently": "8.2.2",
+    "css-loader": "7.1.2",
+    "eslint-plugin-react": "7.37.5",
+    "eslint-plugin-react-hooks": "7.0.1",
+    "eslint-plugin-storybook": "10.0.7",
+    "global-jsdom": "28.0.0",
+    "postcss-loader": "8.2.0",
+    "storybook": "~10.2.13",
+    "style-loader": "4.0.0",
+    "stylelint": "17.1.1",
+    "stylelint-config-standard": "40.0.0",
     "stylelint-order": "7.0.1",
     "stylelint-selector-bem-pattern": "4.0.1",
-    "tailwindcss": "catalog:",
-    "tsx": "^4.21.0",
-    "typescript": "catalog:"
+    "tsx": "4.21.0"
   },
   "imports": {
-    "#ui/*": [
-      "./src/*",
-      "./src/*.tsx",
-      "./src/*/index.tsx",
-      "./src/*.ts",
-      "./src/*/index.ts"
-    ]
+    "#ui/*": {
+      "rolldown": [
+        "./dist/*",
+        "./dist/*.js",
+        "./dist/*/index.js"
+      ],
+      "default": [
+        "./src/*",
+        "./src/*.tsx",
+        "./src/*/index.tsx",
+        "./src/*.ts",
+        "./src/*/index.ts"
+      ]
+    }
   },
+  "files": [
+    "dist/**",
+    "README.md"
+  ],
   "engines": {
     "node": ">=20"
   }
diff --git a/packages/ui-components/scripts/publish.mjs b/packages/ui-components/scripts/publish.mjs
deleted file mode 100644
index 7834b7126be0f..0000000000000
--- a/packages/ui-components/scripts/publish.mjs
+++ /dev/null
@@ -1,32 +0,0 @@
-import { spawnSync } from 'node:child_process';
-import { writeFile, copyFile } from 'node:fs/promises';
-
-import pkg from '../package.json' with { type: 'json' };
-
-// Strip the devDependencies, since they aren't needed for publish
-// Strip the exports, since we don't want to reference './src'
-/* eslint-disable @typescript-eslint/no-unused-vars */
-const { devDependencies, exports, ...cleanedPkg } = pkg;
-// Change `#ui` to `./` from `./src`, since we are publishing
-// from the same directory as the source code (rather, the compiled code).
-cleanedPkg.imports['#ui/*'] = ['./*'];
-
-await writeFile(
-  'dist/package.json',
-  JSON.stringify(cleanedPkg, null, 2),
-  'utf8'
-);
-
-await copyFile('README.md', 'dist/README.md');
-
-// Now, publish the generated `dist` folder
-const { status, error } = spawnSync('pnpm', ['publish', '--no-git-checks'], {
-  cwd: 'dist',
-  stdio: 'inherit',
-});
-
-if (error) {
-  throw error;
-}
-
-process.exitCode = status;
diff --git a/packages/ui-components/src/Common/BaseButton/index.module.css b/packages/ui-components/src/Common/BaseButton/index.module.css
index c45b71abfca60..4eb0e97fd2500 100644
--- a/packages/ui-components/src/Common/BaseButton/index.module.css
+++ b/packages/ui-components/src/Common/BaseButton/index.module.css
@@ -9,8 +9,7 @@
     px-4.5
     py-2.5
     text-center
-    font-semibold
-    motion-safe:transition-colors;
+    font-semibold;
 
   svg {
     @apply size-5;
@@ -124,7 +123,7 @@
       after:mx-auto
       after:h-px
       after:w-2/5
-      after:bg-gradient-to-r
+      after:bg-linear-to-r
       after:from-green-600/0
       after:via-green-600
       after:to-green-600/0
diff --git a/packages/ui-components/src/Common/BaseCodeBox/index.module.css b/packages/ui-components/src/Common/BaseCodeBox/index.module.css
index 923d875a9f334..b74075c89c921 100644
--- a/packages/ui-components/src/Common/BaseCodeBox/index.module.css
+++ b/packages/ui-components/src/Common/BaseCodeBox/index.module.css
@@ -53,6 +53,19 @@
             [counter-increment:line];
         }
       }
+
+      &[class*='plain-text'] {
+        @apply font-ibm-plex-mono;
+      }
+    }
+
+    &[class*='no-line-numbers'] > code > [class='line'] {
+      @apply pl-0;
+
+      &:not(:empty:last-child)::after {
+        @apply content-none
+          [counter-reset:none];
+      }
     }
   }
 
@@ -62,8 +75,8 @@
       justify-between
       border-t
       border-t-neutral-900
-      px-4
-      py-3
+      px-3
+      py-2
       text-sm
       font-medium;
 
@@ -72,9 +85,14 @@
     }
 
     & > .action {
-      @apply px-3
-        py-1.5
+      @apply px-2.5
+        py-1
+        text-xs
         font-medium;
+
+      > svg {
+        @apply size-4;
+      }
     }
   }
 }
diff --git a/packages/ui-components/src/Common/BaseCodeBox/index.tsx b/packages/ui-components/src/Common/BaseCodeBox/index.tsx
index c5ee36c1773b8..666127a156962 100644
--- a/packages/ui-components/src/Common/BaseCodeBox/index.tsx
+++ b/packages/ui-components/src/Common/BaseCodeBox/index.tsx
@@ -39,31 +39,27 @@ const transformCode = >(
   // being an empty string, so we need to remove it
   const lines = content.split('\n');
 
-  const extraStyle = language.length === 0 ? { fontFamily: 'monospace' } : {};
+  const extraClasses = classNames({ 'plain-text': language.length === 0 });
 
   return (
-    
-      {lines
-        .flatMap((line, lineIndex) => {
-          const columns = line.split(' ');
-
-          return [
-            
-              {columns.map((column, columnIndex) => (
-                
-                  {column}
-                  {columnIndex < columns.length - 1 &&  }
-                
-              ))}
-            ,
-            // Add a break line so the text content is formatted correctly
-            // when copying to clipboard
-            '\n',
-          ];
-        })
-        // Here we remove that empty line from before and
-        // the last flatMap entry which is an `\n`
-        .slice(0, -2)}
+    
+      {lines.flatMap((line, lineIndex) => {
+        const columns = line.split(' ');
+
+        return [
+          
+            {columns.map((column, columnIndex) => (
+              
+                {column}
+                {columnIndex < columns.length - 1 &&  }
+              
+            ))}
+          ,
+          // Add a break line so the text content is formatted correctly
+          // when copying to clipboard
+          '\n',
+        ];
+      })}
     
   );
 };
@@ -89,8 +85,11 @@ const BaseCodeBox: FC> = ({
   const containerRef = useRef(null);
 
   const handleCopy = () => copy(containerRef.current?.textContent);
+
   const ButtonIcon = copied ? DocumentDuplicateIcon : CodeBracketIcon;
 
+  const hideFooter = className?.includes('no-footer');
+
   return (
     
> = ({
       >
         {transformCode(children as ReactElement, language)}
       
- {language && ( + + {!language || hideFooter || (
{language} + = ({ label, }) => { return ( -
  • +
  • = ({ kind, size = 'md' }) => ( -
    +
    {symbolMap[kind]}
    ); diff --git a/packages/ui-components/src/Common/Search/Modal/index.module.css b/packages/ui-components/src/Common/Search/Modal/index.module.css index d683d4c51a183..984bc208ea834 100644 --- a/packages/ui-components/src/Common/Search/Modal/index.module.css +++ b/packages/ui-components/src/Common/Search/Modal/index.module.css @@ -24,14 +24,12 @@ p-1.5 text-neutral-900 hover:bg-neutral-100 - motion-safe:transition-colors dark:border-neutral-900 dark:bg-neutral-950 dark:text-neutral-200; &:hover { @apply bg-neutral-100 - motion-safe:transition-colors motion-safe:duration-300 dark:bg-neutral-900; diff --git a/packages/ui-components/src/Common/Signature/SignatureHeader/index.module.css b/packages/ui-components/src/Common/Signature/SignatureHeader/index.module.css new file mode 100644 index 0000000000000..da2da6867d349 --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureHeader/index.module.css @@ -0,0 +1,45 @@ +@reference "../../../styles/index.css"; + +.header { + @apply flex + items-start + gap-1; +} + +.attribute { + @apply font-ibm-plex-mono + inline-flex + flex-wrap + items-center + gap-1 + text-sm + font-semibold; + + .longName { + @apply break-all + sm:break-keep; + } + + &.return { + @apply font-open-sans + shrink-0; + + svg { + @apply size-4; + } + } +} + +.type { + @apply font-ibm-plex-mono + inline-flex + flex-wrap + gap-0.5 + text-sm + break-all; + + a { + @apply text-green-700 + dark:text-green-400; + } +} diff --git a/packages/ui-components/src/Common/Signature/SignatureHeader/index.tsx b/packages/ui-components/src/Common/Signature/SignatureHeader/index.tsx new file mode 100644 index 0000000000000..ee8040b13df0c --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureHeader/index.tsx @@ -0,0 +1,51 @@ +import { ArrowTurnDownLeftIcon } from '@heroicons/react/24/outline'; +import classNames from 'classnames'; + +import type Signature from '#ui/Common/Signature'; +import type { ComponentProps, FC } from 'react'; + +import styles from './index.module.css'; + +type SignatureHeaderProps = { isReturn?: boolean } & Omit< + ComponentProps, + 'title' | 'description' +>; + +const SignatureHeader: FC = ({ + name, + type, + optional, + isReturn = false, +}) => ( +
    + {name && ( + + {isReturn && } + 16, + })} + > + {name}: + {optional && ( + + ? + + )} + + + )} + {type && {type}} +
    +); + +export default SignatureHeader; diff --git a/packages/ui-components/src/Common/Signature/SignatureItem/index.module.css b/packages/ui-components/src/Common/Signature/SignatureItem/index.module.css new file mode 100644 index 0000000000000..d1554950a9370 --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureItem/index.module.css @@ -0,0 +1,50 @@ +@reference "../../../styles/index.css"; + +.item { + @apply flex + flex-col + gap-1; +} + +.return { + @apply rounded-sm + bg-green-100 + px-4 + py-3 + dark:bg-neutral-900/40; +} + +.children { + @apply relative + flex + flex-col + rounded-sm + border + border-neutral-200 + dark:border-neutral-900; + + &:has(> .return:only-child) { + @apply border-0; + } + + &:not(:has(.return:only-child)) .return { + @apply mx-4 + mb-3; + } + + .item:not(.return) { + @apply mx-4 + py-3; + } + + .item:not(:last-child, :has(+ .return)) { + @apply border-b + border-neutral-200 + dark:border-neutral-900; + } +} + +.description { + @apply text-sm + break-all; +} diff --git a/packages/ui-components/src/Common/Signature/SignatureItem/index.tsx b/packages/ui-components/src/Common/Signature/SignatureItem/index.tsx new file mode 100644 index 0000000000000..df079276d70dd --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureItem/index.tsx @@ -0,0 +1,36 @@ +import classNames from 'classnames'; + +import SignatureHeader from '#ui/Common/Signature/SignatureHeader'; + +import type Signature from '#ui/Common/Signature'; +import type { ComponentProps, FC, PropsWithChildren } from 'react'; + +import styles from './index.module.css'; + +type SignatureItemProps = Omit, 'title'>; + +const SignatureItem: FC> = ({ + kind = 'default', + name, + type, + description, + optional, + children, +}) => ( +
    + + {description &&
    {description}
    } + {children &&
    {children}
    } +
    +); + +export default SignatureItem; diff --git a/packages/ui-components/src/Common/Signature/SignatureRoot/index.module.css b/packages/ui-components/src/Common/Signature/SignatureRoot/index.module.css new file mode 100644 index 0000000000000..15d730563dc28 --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureRoot/index.module.css @@ -0,0 +1,24 @@ +@reference "../../../styles/index.css"; + +.container { + @apply flex + flex-col + gap-3; +} + +.title { + @apply text-base + font-semibold; +} + +.root { + @apply flex + flex-col + gap-4 + rounded-sm + border + border-neutral-200 + px-4 + py-3 + dark:border-neutral-900; +} diff --git a/packages/ui-components/src/Common/Signature/SignatureRoot/index.tsx b/packages/ui-components/src/Common/Signature/SignatureRoot/index.tsx new file mode 100644 index 0000000000000..79e3f145b0d84 --- /dev/null +++ b/packages/ui-components/src/Common/Signature/SignatureRoot/index.tsx @@ -0,0 +1,26 @@ +import { useId } from 'react'; + +import type Signature from '#ui/Common/Signature'; +import type { ComponentProps, FC, PropsWithChildren } from 'react'; + +import styles from './index.module.css'; + +type SignatureRootProps = Pick, 'title'>; + +const SignatureRoot: FC> = ({ + title, + children, +}) => { + const titleId = useId(); + + return ( +
    +
    + {title} +
    +
    {children}
    +
    + ); +}; + +export default SignatureRoot; diff --git a/packages/ui-components/src/Common/Signature/index.stories.tsx b/packages/ui-components/src/Common/Signature/index.stories.tsx new file mode 100644 index 0000000000000..686a11779b58b --- /dev/null +++ b/packages/ui-components/src/Common/Signature/index.stories.tsx @@ -0,0 +1,100 @@ +import Signature from '#ui/Common/Signature'; + +import type { Meta as MetaObj, StoryObj } from '@storybook/react-webpack5'; + +type Story = StoryObj; +type Meta = MetaObj; + +export const Default: Story = { + args: { + title: 'Attributes', + children: ( + <> + + <Type1>|<Type2> + + } + /> + <Object>} + description="An optional attribute." + > + <Type1>} /> + <Type2>} /> + <Type3>} + description="One of the available options." + /> + + <Type4>} + description="Returns the result of the function." + kind="return" + /> + + ), + }, +}; + +export const WithLongAttributeNames: Story = { + args: { + title: 'Attributes', + children: ( + <> + + <Type1>|<Type3> + + } + /> + + ), + }, +}; + +export const WithLongTypeAndAttributeNames: Story = { + args: { + title: 'Attributes', + children: ( + <> + + + <ThisIsATypeWithAnExcessivelyLongNameToTestTextWrapping> + + + } + /> + + ), + }, +}; + +export const OptionalAttribute: Story = { + args: { + title: 'Attributes', + children: ( + <Object>} + description="An optional attribute." + /> + ), + }, +}; + +export default { + component: Signature, +} as Meta; diff --git a/packages/ui-components/src/Common/Signature/index.tsx b/packages/ui-components/src/Common/Signature/index.tsx new file mode 100644 index 0000000000000..e24ef4fca18cc --- /dev/null +++ b/packages/ui-components/src/Common/Signature/index.tsx @@ -0,0 +1,41 @@ +import SignatureItem from '#ui/Common/Signature/SignatureItem'; +import SignatureRoot from '#ui/Common/Signature/SignatureRoot'; + +import type { FC, PropsWithChildren, ReactNode } from 'react'; + +export type SignatureProps = { + title?: string; + kind?: 'default' | 'return'; + name?: string; + type?: ReactNode; + description?: ReactNode; + optional?: boolean; +}; + +const Signature: FC> = ({ + kind = 'default', + name, + type, + description, + optional, + title, + children, +}) => { + if (title) { + return {children}; + } + + return ( + + {children} + + ); +}; + +export default Signature; diff --git a/packages/ui-components/src/Common/TableOfContents/index.module.css b/packages/ui-components/src/Common/TableOfContents/index.module.css index 3e97de5dd5a7c..eac5bd455be23 100644 --- a/packages/ui-components/src/Common/TableOfContents/index.module.css +++ b/packages/ui-components/src/Common/TableOfContents/index.module.css @@ -5,7 +5,7 @@ block rounded-md bg-neutral-200 - lg:hidden + xl:hidden dark:bg-neutral-900; &[open] { @@ -49,6 +49,11 @@ dark:hover:text-neutral-500; } + .codeLink { + @apply font-ibm-plex-mono + font-medium; + } + .depthThree { @apply pl-2; } diff --git a/packages/ui-components/src/Common/TableOfContents/index.tsx b/packages/ui-components/src/Common/TableOfContents/index.tsx index 015e5c4431823..2aa41f669f392 100644 --- a/packages/ui-components/src/Common/TableOfContents/index.tsx +++ b/packages/ui-components/src/Common/TableOfContents/index.tsx @@ -1,8 +1,9 @@ import { ChevronRightIcon } from '@heroicons/react/24/outline'; import classNames from 'classnames'; -import { LinkLike } from '#ui/types'; +import { CODE_LIKE_TYPES } from '#ui/constants'; +import type { LinkLike } from '#ui/types'; import type { Heading } from '@vcarl/remark-headings'; import type { ComponentProps, FC } from 'react'; @@ -44,7 +45,9 @@ const TableOfContents: FC = ({
  • {head.value} diff --git a/packages/ui-components/src/Common/Tabs/index.module.css b/packages/ui-components/src/Common/Tabs/index.module.css index f51259c26a0b5..f700b7b1321aa 100644 --- a/packages/ui-components/src/Common/Tabs/index.module.css +++ b/packages/ui-components/src/Common/Tabs/index.module.css @@ -15,7 +15,8 @@ @apply border-b-2 border-b-transparent px-1 - pb-[11px] + pt-0 + pb-2 text-sm font-semibold whitespace-nowrap @@ -28,7 +29,7 @@ border border-neutral-200 px-1 - py-0.5 + py-0 text-xs font-normal text-neutral-200; diff --git a/packages/ui-components/src/Common/ThemeToggle/__tests__/index.test.jsx b/packages/ui-components/src/Common/ThemeToggle/__tests__/index.test.jsx index fefa39f4044d1..91acf689ec00c 100644 --- a/packages/ui-components/src/Common/ThemeToggle/__tests__/index.test.jsx +++ b/packages/ui-components/src/Common/ThemeToggle/__tests__/index.test.jsx @@ -1,4 +1,4 @@ -import { describe, it, beforeEach } from 'node:test'; +import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import { render, screen } from '@testing-library/react'; @@ -6,30 +6,102 @@ import userEvent from '@testing-library/user-event'; import ThemeToggle from '../'; -let mockCurrentTheme = 'light'; +const noop = () => {}; -const toggleTheme = () => { - mockCurrentTheme = mockCurrentTheme === 'light' ? 'dark' : 'light'; -}; +const defaultLabels = { system: 'System', light: 'Light', dark: 'Dark' }; describe('ThemeToggle', () => { - let toggle; + global.ResizeObserver = class { + observe = noop; + unobserve = noop; + disconnect = noop; + }; - beforeEach(() => { - mockCurrentTheme = 'light'; + it('renders the trigger button with the given aria-label', () => { + render( + + ); - render(); - toggle = screen.getByRole('button'); + assert.ok(screen.getByRole('button', { name: 'Select theme' })); }); - it('switches dark theme to light theme', async () => { - mockCurrentTheme = 'dark'; - await userEvent.click(toggle); - assert.equal(mockCurrentTheme, 'light'); + it('opens the dropdown when the trigger is clicked', async () => { + render( + + ); + + await userEvent.click(screen.getByRole('button', { name: 'Select theme' })); + + assert.ok(screen.getByText('System')); + assert.ok(screen.getByText('Light')); + assert.ok(screen.getByText('Dark')); + }); + + it('calls onChange with "light" when the Light option is clicked', async () => { + let selected = null; + + render( + { + selected = theme; + }} + themeLabels={defaultLabels} + /> + ); + + await userEvent.click(screen.getByRole('button', { name: 'Select theme' })); + await userEvent.click(screen.getByText('Light')); + + assert.equal(selected, 'light'); }); - it('switches light theme to dark theme', async () => { - await userEvent.click(toggle); - assert.equal(mockCurrentTheme, 'dark'); + it('calls onChange with "dark" when the Dark option is clicked', async () => { + let selected = null; + + render( + { + selected = theme; + }} + themeLabels={defaultLabels} + /> + ); + + await userEvent.click(screen.getByRole('button', { name: 'Select theme' })); + await userEvent.click(screen.getByText('Dark')); + + assert.equal(selected, 'dark'); + }); + + it('calls onChange with "system" when the System option is clicked', async () => { + let selected = null; + + render( + { + selected = theme; + }} + themeLabels={defaultLabels} + /> + ); + + await userEvent.click(screen.getByRole('button', { name: 'Select theme' })); + await userEvent.click(screen.getByText('System')); + + assert.equal(selected, 'system'); }); }); diff --git a/packages/ui-components/src/Common/ThemeToggle/index.module.css b/packages/ui-components/src/Common/ThemeToggle/index.module.css index e0ed8df47fddc..d1480cf221026 100644 --- a/packages/ui-components/src/Common/ThemeToggle/index.module.css +++ b/packages/ui-components/src/Common/ThemeToggle/index.module.css @@ -13,3 +13,37 @@ dark:bg-neutral-900; } } + +.dropDownContent { + @apply max-h-80 + w-36 + overflow-hidden + rounded-sm + border + border-neutral-200 + bg-white + shadow-lg + dark:border-neutral-900 + dark:bg-neutral-950; +} + +.dropDownItem { + @apply flex + cursor-pointer + items-center + gap-2 + px-2.5 + py-1.5 + text-sm + font-medium + text-neutral-800 + outline-hidden + data-highlighted:bg-green-600 + data-highlighted:text-white + dark:text-white; +} + +.activeItem { + @apply bg-green-600 + text-white; +} diff --git a/packages/ui-components/src/Common/ThemeToggle/index.stories.tsx b/packages/ui-components/src/Common/ThemeToggle/index.stories.tsx index 617a4b31c7ece..ca2e2419c547b 100644 --- a/packages/ui-components/src/Common/ThemeToggle/index.stories.tsx +++ b/packages/ui-components/src/Common/ThemeToggle/index.stories.tsx @@ -5,6 +5,33 @@ import type { Meta as MetaObj, StoryObj } from '@storybook/react-webpack5'; type Story = StoryObj; type Meta = MetaObj; -export const Default: Story = {}; +const defaultLabels = { system: 'System', light: 'Light', dark: 'Dark' }; + +export const Default: Story = { + args: { + ariaLabel: 'Select theme', + currentTheme: 'system', + themeLabels: defaultLabels, + onChange: () => {}, + }, +}; + +export const LightSelected: Story = { + args: { + ariaLabel: 'Select theme', + currentTheme: 'light', + themeLabels: defaultLabels, + onChange: () => {}, + }, +}; + +export const DarkSelected: Story = { + args: { + ariaLabel: 'Select theme', + currentTheme: 'dark', + themeLabels: defaultLabels, + onChange: () => {}, + }, +}; export default { component: ThemeToggle } as Meta; diff --git a/packages/ui-components/src/Common/ThemeToggle/index.tsx b/packages/ui-components/src/Common/ThemeToggle/index.tsx index a1ddeca5644c4..923aba5f90d16 100644 --- a/packages/ui-components/src/Common/ThemeToggle/index.tsx +++ b/packages/ui-components/src/Common/ThemeToggle/index.tsx @@ -1,15 +1,76 @@ -import { MoonIcon, SunIcon } from '@heroicons/react/24/outline'; +import { + ComputerDesktopIcon, + MoonIcon, + SunIcon, +} from '@heroicons/react/24/outline'; +import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; +import classNames from 'classnames'; -import type { FC, ButtonHTMLAttributes } from 'react'; +import type { FC } from 'react'; import styles from './index.module.css'; -const ThemeToggle: FC> = props => { +export type Theme = 'system' | 'light' | 'dark'; + +type ThemeToggleProps = { + onChange?: (theme: Theme) => void; + currentTheme?: Theme; + ariaLabel?: string; + themeLabels?: { system: string; light: string; dark: string }; +}; + +const themeIcons: Record = { + system: ComputerDesktopIcon, + light: SunIcon, + dark: MoonIcon, +}; + +const themes: Array = ['system', 'light', 'dark']; + +const ThemeToggle: FC = ({ + onChange = () => {}, + currentTheme = 'system', + ariaLabel, + themeLabels = { system: 'System', light: 'Light', dark: 'Dark' }, +}) => { + const TriggerIcon = themeIcons[currentTheme]; + return ( - + + + + + + + + {themes.map(theme => { + const Icon = themeIcons[theme]; + return ( + onChange(theme)} + className={classNames(styles.dropDownItem, { + [styles.activeItem]: theme === currentTheme, + })} + > + + {themeLabels[theme]} + + ); + })} + + + ); }; diff --git a/packages/ui-components/src/Containers/Article/index.module.css b/packages/ui-components/src/Containers/Article/index.module.css index c4d541d9fb19f..f37302121e03c 100644 --- a/packages/ui-components/src/Containers/Article/index.module.css +++ b/packages/ui-components/src/Containers/Article/index.module.css @@ -3,23 +3,25 @@ .articleLayout { @apply max-w-10xl ml:grid - ml:grid-cols-[--spacing(52)_1fr] + ml:grid-cols-[--spacing(56)_1fr] ml:grid-rows-[1fr] ml:overflow-visible ml:[grid-template-areas:'sidebar_main''sidebar_footer'] + 3xl:grid-cols-[--spacing(80)_1fr_--spacing(80)] mx-auto block w-full - xl:grid-cols-[--spacing(52)_1fr_--spacing(52)] + xl:grid-cols-[--spacing(56)_1fr_--spacing(64)] xl:[grid-template-areas:'sidebar_main_metabar''sidebar_footer_metabar'] - 2xl:grid-cols-[--spacing(80)_1fr_--spacing(80)]; + 2xl:grid-cols-[--spacing(72)_1fr_--spacing(72)]; > *:nth-child(1) { @apply [grid-area:sidebar] - xl:sticky - xl:top-0 - xl:h-screen - xl:overflow-y-auto; + lg:sticky + lg:top-0 + lg:max-h-screen + lg:self-stretch + lg:overflow-y-auto; } > *:nth-child(2) { @@ -36,7 +38,8 @@ p-4 [grid-area:main] motion-safe:scroll-smooth - xl:p-12; + xl:p-10 + 2xl:p-12; } > *:last-child { @@ -46,7 +49,7 @@ [grid-area:metabar] xl:sticky xl:top-0 - xl:max-w-xs + xl:max-w-none xl:border-t-0 xl:border-l; } diff --git a/packages/ui-components/src/Containers/Footer/index.module.css b/packages/ui-components/src/Containers/Footer/index.module.css index 2cc080588e1c3..b4f6a0f44f9b9 100644 --- a/packages/ui-components/src/Containers/Footer/index.module.css +++ b/packages/ui-components/src/Containers/Footer/index.module.css @@ -1,86 +1,90 @@ @reference "../../styles/index.css"; -.footer { - @apply flex - flex-col - items-center - gap-6 - border-t +.container { + @apply border-t border-neutral-200 bg-white py-4 text-neutral-500 sm:px-8 - md:justify-between md:py-5 dark:border-neutral-900 dark:bg-neutral-950; - .row { - @apply flex + .innerContainer { + @apply max-w-10xl + mx-auto + flex flex-col items-center gap-6 - md:flex-row - md:justify-between - md:gap-0 - md:self-stretch; - } + md:justify-between; - .sectionPrimary { - @apply flex - flex-wrap - content-start - items-center - justify-center - gap-1 - self-stretch; + .row { + @apply flex + flex-col + items-center + gap-6 + md:flex-row + md:justify-between + md:gap-0 + md:self-stretch; - a { - @apply whitespace-nowrap; - } - } + .sectionPrimary { + @apply flex + flex-wrap + content-start + items-center + justify-center + gap-1 + self-stretch; - .sectionSecondary { - @apply flex - flex-col - items-center - gap-1 - md:flex-row; + a { + @apply whitespace-nowrap; + } + } - .social { - @apply flex - items-center - gap-1; - } - } + .sectionSecondary { + @apply flex + flex-col + items-center + gap-1 + md:flex-row; - .legal { - @apply flex - flex-col - gap-2 - px-4 - text-center - text-xs - text-balance - md:px-14; + .social { + @apply flex + items-center + gap-1; + } + } - p { - @apply text-center - text-sm - text-neutral-800 - dark:text-neutral-500; - } + &.legal { + @apply flex + flex-col + gap-2 + px-4 + text-center + text-xs + text-balance; + + p { + @apply text-center + text-sm + text-neutral-800 + dark:text-neutral-500; + } - a { - @apply max-ml:font-semibold - text-green-600 - dark:text-green-400; + a { + @apply max-ml:font-semibold + text-green-600 + dark:text-green-400; - &:hover { - @apply cursor-pointer - text-green-900 - dark:text-green-200; + &:hover { + @apply cursor-pointer + text-green-900 + dark:text-green-200; + } + } } } } diff --git a/packages/ui-components/src/Containers/Footer/index.tsx b/packages/ui-components/src/Containers/Footer/index.tsx index 419bf770bbb7c..c9bf03318b86e 100644 --- a/packages/ui-components/src/Containers/Footer/index.tsx +++ b/packages/ui-components/src/Containers/Footer/index.tsx @@ -55,9 +55,9 @@ const Footer: FC = ({ as = 'a', navigation, slots, -}) => { - return ( -
    +}) => ( +
    +
    {slots?.primary}
    @@ -83,9 +83,10 @@ const Footer: FC = ({
  • +
    {slots?.legal}
    - - ); -}; +
    + +); export default Footer; diff --git a/packages/ui-components/src/Containers/FunctionSignature/index.stories.tsx b/packages/ui-components/src/Containers/FunctionSignature/index.stories.tsx new file mode 100644 index 0000000000000..4aebee4bdee88 --- /dev/null +++ b/packages/ui-components/src/Containers/FunctionSignature/index.stories.tsx @@ -0,0 +1,152 @@ +import FunctionSignature from '#ui/Containers/FunctionSignature'; + +import type { Meta as MetaObj, StoryObj } from '@storybook/react-webpack5'; + +type Story = StoryObj; +type Meta = MetaObj; + +export const Default: Story = { + args: { + title: 'Attributes', + items: [ + { + name: 'streams', + type: ( + <> + <Stream[]>|<Iterable[]>| + <AsyncIterable[]>| + <Function[]> + + ), + }, + { + name: 'options', + optional: true, + type: <Object>, + children: [ + { + name: 'Signal', + type: <AbortSignal>, + }, + { + name: 'end', + type: <boolean>, + description: ( + <> + End the destination stream when the source stream ends. + Transform streams are always ended, even if this value is  + false.Default: true. + + ), + }, + ], + }, + { + name: 'Returns', + type: <Promise>, + description: 'Fulfills when the pipeline is complete.', + kind: 'return', + }, + ], + }, +}; + +export const Nested: Story = { + args: { + title: 'Attributes', + items: [ + { + name: 'source', + type: ( + <> + <Stream>|<Iterable>| + <AsyncIterable>| + <Function> + + ), + children: [ + { + name: 'attribute1', + type: <Attribute1>, + }, + { + name: 'attribute2', + type: <Attribute2>, + }, + { + name: 'attribute3', + type: <Attribute3>, + }, + { + name: 'Returns', + kind: 'return', + description: 'description', + type: ( + <> + <Promise>| + <AsyncIterable> + + ), + }, + ], + }, + { + name: '...transforms', + type: ( + <> + <Stream>|<Function> + + ), + children: [ + { + name: 'source', + description: 'description', + type: <AsyncIterable>, + children: [ + { + name: 'Returns', + kind: 'return', + description: 'description', + type: ( + <> + <Promise>| + <AsyncIterable> + + ), + }, + ], + }, + ], + }, + ], + }, +}; + +export const ReturnType: Story = { + args: { + items: [ + { + name: 'Returns', + type: <Promise>, + description: 'Fulfills when the pipeline is complete.', + kind: 'return', + }, + ], + }, +}; + +export const HasOnlyTypeDefinition: Story = { + args: { + title: 'Type', + items: [ + { + type: <Promise>, + description: 'A simple type definition.', + }, + ], + }, +}; + +export default { + component: FunctionSignature, +} as Meta; diff --git a/packages/ui-components/src/Containers/FunctionSignature/index.tsx b/packages/ui-components/src/Containers/FunctionSignature/index.tsx new file mode 100644 index 0000000000000..96eeaf00b53be --- /dev/null +++ b/packages/ui-components/src/Containers/FunctionSignature/index.tsx @@ -0,0 +1,42 @@ +import Signature from '#ui/Common/Signature'; + +import type { ComponentProps, FC } from 'react'; + +type SignatureDefinition = Omit< + ComponentProps, + 'children' +> & { + children?: Array; +}; + +type FunctionSignatureProps = { + title?: string; + items: Array; +}; + +const renderSignature = (param: SignatureDefinition, index: number) => ( + + {param.children?.map((child, i) => renderSignature(child, i))} + +); + +const FunctionSignature: FC = ({ title, items }) => { + if (title) { + return ( + + {items.map((param, i) => renderSignature(param, i))} + + ); + } + + return items.map((param, i) => renderSignature(param, i)); +}; + +export default FunctionSignature; diff --git a/packages/ui-components/src/Containers/MetaBar/index.module.css b/packages/ui-components/src/Containers/MetaBar/index.module.css index 341c3f8b84e69..f06fc547e2668 100644 --- a/packages/ui-components/src/Containers/MetaBar/index.module.css +++ b/packages/ui-components/src/Containers/MetaBar/index.module.css @@ -59,6 +59,11 @@ } } + a.codeLink { + @apply font-ibm-plex-mono + font-medium; + } + ol { @apply flex w-full diff --git a/packages/ui-components/src/Containers/MetaBar/index.tsx b/packages/ui-components/src/Containers/MetaBar/index.tsx index c761cfe07f643..1fb1dbdb3f9e7 100644 --- a/packages/ui-components/src/Containers/MetaBar/index.tsx +++ b/packages/ui-components/src/Containers/MetaBar/index.tsx @@ -1,5 +1,8 @@ +import classNames from 'classnames'; import { Fragment, useMemo } from 'react'; +import { CODE_LIKE_TYPES } from '#ui/constants'; + import type { LinkLike } from '#ui/types'; import type { Heading } from '@vcarl/remark-headings'; import type { FC, HTMLAttributes } from 'react'; @@ -55,8 +58,14 @@ const MetaBar: FC = ({ head.depth === 3 ? 'pl-2' : head.depth === 4 ? 'pl-4' : '' } > - - {' '} + {head.value} diff --git a/packages/ui-components/src/Containers/NavBar/NavItem/index.module.css b/packages/ui-components/src/Containers/NavBar/NavItem/index.module.css index 6f848a0d95c4a..be3520a41e57f 100644 --- a/packages/ui-components/src/Containers/NavBar/NavItem/index.module.css +++ b/packages/ui-components/src/Containers/NavBar/NavItem/index.module.css @@ -6,8 +6,7 @@ gap-2 rounded-sm px-3 - py-2 - motion-safe:transition-colors; + py-2; .label { @apply text-base diff --git a/packages/ui-components/src/Containers/NavBar/index.module.css b/packages/ui-components/src/Containers/NavBar/index.module.css index 7e569a8eb13fb..a7f3a189d5cc3 100644 --- a/packages/ui-components/src/Containers/NavBar/index.module.css +++ b/packages/ui-components/src/Containers/NavBar/index.module.css @@ -3,129 +3,135 @@ .container { @apply border-neutral-200 bg-white - xl:flex xl:h-16 - xl:flex-row - xl:items-center - xl:gap-8 xl:border-b xl:px-8 dark:border-neutral-900 dark:bg-neutral-950; -} -.nodeIconAndMobileItemsToggler { - @apply flex - h-16 - shrink-0 - items-center - border-b - border-neutral-200 - px-4 - xl:flex - xl:h-full - xl:items-center - xl:border-0 - xl:px-0 - dark:border-neutral-900; -} + .innerContainer { + @apply max-w-10xl + xl:mx-auto + xl:flex + xl:h-16 + xl:flex-row + xl:items-center + xl:gap-8; -.sidebarItemToggler { - @apply absolute - right-4 - -z-10 - -translate-y-[200%] - appearance-none - opacity-0; -} + .nodeIconAndMobileItemsToggler { + @apply flex + h-16 + shrink-0 + items-center + border-b + border-neutral-200 + px-4 + xl:flex + xl:h-full + xl:items-center + xl:border-0 + xl:px-0 + dark:border-neutral-900; -.nodeIconWrapper { - @apply h-[30px] - flex-1; -} + .nodeIconWrapper { + @apply h-[30px] + flex-1; + } -.navInteractionIcon, -.sidebarItemToggler { - @apply size-6; -} + .sidebarItemTogglerLabel { + @apply block + cursor-pointer + xl:hidden; -.sidebarItemTogglerLabel { - @apply block - cursor-pointer - xl:hidden; -} + .navInteractionIcon { + @apply size-6; + } + } + } -.main { - @apply flex-1 - flex-col - justify-between - gap-4 - xl:flex - xl:flex-row - xl:items-center; -} + .sidebarItemToggler { + @apply absolute + right-4 + -z-10 + size-6 + -translate-y-[200%] + appearance-none + opacity-0; + } -.navItems { - @apply flex - flex-col - gap-0 - border-b - border-neutral-200 - p-4 - xl:flex-1 - xl:flex-row - xl:gap-1 - xl:border-0 - xl:p-0 - dark:border-neutral-900; -} + .main { + @apply flex-1 + flex-col + justify-between + gap-4 + xl:flex + xl:flex-row + xl:items-center; + } -.actionsWrapper { - @apply flex - flex-row - flex-wrap - items-center - justify-between - gap-2 - border-b - border-neutral-200 - p-4 - sm:flex-nowrap - xl:basis-96 - xl:border-0 - xl:p-0 - dark:border-neutral-900; -} + .navItems { + @apply flex + flex-col + gap-0 + border-b + border-neutral-200 + p-4 + xl:flex-1 + xl:flex-row + xl:gap-1 + xl:border-0 + xl:p-0 + dark:border-neutral-900; + } -span.searchButtonSkeleton { - @apply my-px - mr-2 - flex-grow - rounded-xl; + .actionsWrapper { + @apply flex + flex-row + flex-wrap + items-center + justify-between + gap-2 + border-b + border-neutral-200 + p-4 + sm:flex-nowrap + xl:basis-96 + xl:border-0 + xl:p-0 + dark:border-neutral-900; - &:empty { - @apply h-10; - } -} + span.searchButtonSkeleton { + @apply my-px + mr-2 + grow + rounded-xl; -span.themeToggleSkeleton { - @apply size-9 - rounded-md - py-4; -} + &:empty { + @apply h-10; + } + } -.ghIconWrapper { - @apply size-9 - rounded-md - p-2; + span.themeToggleSkeleton { + @apply size-9 + rounded-md + py-4; + } - svg { - @apply fill-neutral-700 - dark:fill-neutral-300; - } + .ghIconWrapper { + @apply size-9 + rounded-md + p-2; + + svg { + @apply fill-neutral-700 + dark:fill-neutral-300; + } - &:hover { - @apply bg-neutral-100 - dark:bg-neutral-900; + &:hover { + @apply bg-neutral-100 + dark:bg-neutral-900; + } + } + } } } diff --git a/packages/ui-components/src/Containers/NavBar/index.tsx b/packages/ui-components/src/Containers/NavBar/index.tsx index 5c5f6891f1960..4456420968c6d 100644 --- a/packages/ui-components/src/Containers/NavBar/index.tsx +++ b/packages/ui-components/src/Containers/NavBar/index.tsx @@ -14,11 +14,11 @@ import type { ElementType, } from 'react'; -import style from './index.module.css'; +import styles from './index.module.css'; const navInteractionIcons = { - show: , - close: , + show: , + close: , }; type NavbarProps = { @@ -44,48 +44,54 @@ const NavBar: FC> = ({ const [isMenuOpen, setIsMenuOpen] = useState(false); return ( -