diff --git a/.env b/.env deleted file mode 100644 index 03292b262f..0000000000 --- a/.env +++ /dev/null @@ -1,33 +0,0 @@ -# visit https://giscus.app to get your Giscus ids -NEXT_PUBLIC_GISCUS_REPO=Ditectrev/blog -NEXT_PUBLIC_GISCUS_REPOSITORY_ID=R_kgDOOm7gkA -NEXT_PUBLIC_GISCUS_CATEGORY=Announcements -NEXT_PUBLIC_GISCUS_CATEGORY_ID=DIC_kwDOOm7gkM4Cp7y0 -NEXT_PUBLIC_UTTERANCES_REPO= -NEXT_PUBLIC_DISQUS_SHORTNAME= - - -MAILCHIMP_API_KEY= -MAILCHIMP_API_SERVER= -MAILCHIMP_AUDIENCE_ID= - -BUTTONDOWN_API_KEY= - -CONVERTKIT_API_KEY= -# curl https://api.convertkit.com/v3/forms?api_key= to get your form ID -CONVERTKIT_FORM_ID= - -KLAVIYO_API_KEY= -KLAVIYO_LIST_ID= - -REVUE_API_KEY= - -# Create EmailOctopus API key at https://emailoctopus.com/api-documentation -EMAILOCTOPUS_API_KEY= -# List ID can be found in the URL as a UUID after clicking a list on https://emailoctopus.com/lists -# or the settings page of your list https://emailoctopus.com/lists/{UUID}/settings -EMAILOCTOPUS_LIST_ID= - -# Create Beehiiv API key at https://developers.beehiiv.com/docs/v2/bktd9a7mxo67n-create-an-api-key -BEEHIIV_API_KEY= -BEEHIIV_PUBLICATION_ID= diff --git a/.env.example b/.env.example new file mode 100644 index 0000000000..bd7a00f9b8 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +MAILCHIMP_SUBSCRIBE_ENDPOINT= +MAILCHIMP_B_FIELD= + +# visit https://giscus.app to get your Giscus ids +NEXT_PUBLIC_GISCUS_REPO= +NEXT_PUBLIC_GISCUS_REPOSITORY_ID= +NEXT_PUBLIC_GISCUS_CATEGORY= +NEXT_PUBLIC_GISCUS_CATEGORY_ID= diff --git a/.github/workflows/firebase-hosting-merge.yml b/.github/workflows/firebase-hosting-merge.yml index 08e2ab95ba..a2b8a49caf 100644 --- a/.github/workflows/firebase-hosting-merge.yml +++ b/.github/workflows/firebase-hosting-merge.yml @@ -22,6 +22,8 @@ jobs: env: EXPORT: 1 UNOPTIMIZED: 1 + MAILCHIMP_SUBSCRIBE_ENDPOINT: ${{ vars.MAILCHIMP_SUBSCRIBE_ENDPOINT }} + MAILCHIMP_B_FIELD: ${{ vars.MAILCHIMP_B_FIELD }} NEXT_PUBLIC_GISCUS_REPO: ${{ vars.NEXT_PUBLIC_GISCUS_REPO }} NEXT_PUBLIC_GISCUS_REPOSITORY_ID: ${{ vars.NEXT_PUBLIC_GISCUS_REPOSITORY_ID }} NEXT_PUBLIC_GISCUS_CATEGORY: ${{ vars.NEXT_PUBLIC_GISCUS_CATEGORY }} diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml index 10966411ed..3652a39e21 100644 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ b/.github/workflows/firebase-hosting-pull-request.yml @@ -13,7 +13,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - run: npm ci && npm run build + - run: npm ci + - name: Build + run: npm run build + env: + MAILCHIMP_SUBSCRIBE_ENDPOINT: ${{ vars.MAILCHIMP_SUBSCRIBE_ENDPOINT }} + MAILCHIMP_B_FIELD: ${{ vars.MAILCHIMP_B_FIELD }} - uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index f62bbb9aeb..ad317a1bf9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ yarn-debug.log* yarn-error.log* # local env files +.env .env.local .env.development.local .env.test.local diff --git a/app/Main.tsx b/app/Main.tsx index c91c706493..ec6733b3d8 100644 --- a/app/Main.tsx +++ b/app/Main.tsx @@ -1,12 +1,18 @@ import Link from '@/components/Link' +import NewsletterForm from '@/components/NewsletterForm' import Tag from '@/components/Tag' import siteMetadata from '@/data/siteMetadata' import { formatDate } from 'pliny/utils/formatDate' -import NewsletterForm from 'pliny/ui/NewsletterForm' const MAX_DISPLAY = 5 export default function Home({ posts }) { + const newsletterConfig = (siteMetadata.newsletter || {}) as { + externalUrl?: string + emailFieldName?: string + hiddenFieldName?: string + } + return ( <>
@@ -83,7 +89,11 @@ export default function Home({ posts }) { )} {siteMetadata.newsletter?.provider && (
- +
)} diff --git a/app/api/newsletter/route.ts b/app/api/newsletter/route.ts index b2c3b74ef3..4a13b144c1 100644 --- a/app/api/newsletter/route.ts +++ b/app/api/newsletter/route.ts @@ -1,11 +1,83 @@ -import { NewsletterAPI } from 'pliny/newsletter' -import siteMetadata from '@/data/siteMetadata' +import { NextResponse } from 'next/server' -export const dynamic = 'force-static' +export const dynamic = 'force-dynamic' -const handler = NewsletterAPI({ - // @ts-ignore - provider: siteMetadata.newsletter.provider, -}) +const stripHtml = (value: string) => + value + .replace(/<[^>]*>/g, '') + .replace(/^\d+\s*-\s*/, '') + .trim() -export { handler as GET, handler as POST } +const parseJsonpPayload = (raw: string) => { + const start = raw.indexOf('(') + const end = raw.lastIndexOf(')') + if (start === -1 || end === -1 || end <= start + 1) { + return null + } + const json = raw.slice(start + 1, end) + try { + return JSON.parse(json) as { result?: string; msg?: string } + } catch { + return null + } +} + +export async function POST(request: Request) { + try { + const body = (await request.json()) as { + email?: string + emailFieldName?: string + hiddenFieldName?: string + action?: string + } + const email = (body.email || '').trim() + if (!email) { + return NextResponse.json({ error: 'Email is required.' }, { status: 400 }) + } + + const endpoint = (body.action || process.env.MAILCHIMP_SUBSCRIBE_ENDPOINT || '').trim() + if (!endpoint) { + return NextResponse.json( + { error: 'Newsletter endpoint is not configured.' }, + { status: 500 } + ) + } + + const normalizedEndpoint = endpoint.includes('/post-json') + ? endpoint + : endpoint.replace(/\/post(\?|$)/, '/post-json$1') + const emailFieldName = (body.emailFieldName || 'EMAIL').trim() + const hiddenFieldName = (body.hiddenFieldName || process.env.MAILCHIMP_B_FIELD || '').trim() + + const url = new URL(normalizedEndpoint) + url.searchParams.set(emailFieldName, email) + if (hiddenFieldName) { + url.searchParams.set(hiddenFieldName, '') + } + url.searchParams.set('c', 'mailchimpCallback') + + const mailchimpResponse = await fetch(url.toString(), { cache: 'no-store' }) + const responseText = await mailchimpResponse.text() + const payload = parseJsonpPayload(responseText) + + if (!payload) { + return NextResponse.json( + { error: 'Could not parse newsletter provider response.' }, + { status: 502 } + ) + } + + if (payload.result !== 'success') { + return NextResponse.json( + { error: stripHtml(payload.msg || 'Subscription failed. Please try again.') }, + { status: 400 } + ) + } + + return NextResponse.json({ + message: 'Thanks! Please check your inbox to confirm your subscription.', + }) + } catch { + return NextResponse.json({ error: 'Could not submit right now. Please try again.' }, { status: 500 }) + } +} diff --git a/app/tag-data.json b/app/tag-data.json index 5a82d040c5..bf0715e2f5 100644 --- a/app/tag-data.json +++ b/app/tag-data.json @@ -9,12 +9,18 @@ "rest": 1, "web-development": 3, "web-services": 1, - "frontend": 2, - "javascript": 1, - "software-development": 3, - "css": 1, + "javascript": 2, + "node": 1, + "nodejs": 1, + "npm": 1, + "operating-system": 1, + "package-manager": 1, + "runtime-environment": 1, "android": 1, "androidx": 1, "jetifier": 1, - "mobile-development": 1 + "mobile-development": 1, + "software-development": 3, + "css": 1, + "frontend": 2 } diff --git a/components/MDXComponents.tsx b/components/MDXComponents.tsx index 4b3e271c25..42642e1aad 100644 --- a/components/MDXComponents.tsx +++ b/components/MDXComponents.tsx @@ -1,16 +1,30 @@ import TOCInline from 'pliny/ui/TOCInline' import Pre from 'pliny/ui/Pre' -import BlogNewsletterForm from 'pliny/ui/BlogNewsletterForm' import type { MDXComponents } from 'mdx/types' +import siteMetadata from '@/data/siteMetadata' import Image from './Image' import CustomLink from './Link' +import NewsletterForm from './NewsletterForm' import TableWrapper from './TableWrapper' +const newsletterConfig = (siteMetadata.newsletter || {}) as { + externalUrl?: string + emailFieldName?: string + hiddenFieldName?: string +} + export const components: MDXComponents = { Image, TOCInline, a: CustomLink, pre: Pre, table: TableWrapper, - BlogNewsletterForm, + BlogNewsletterForm: (props) => ( + + ), } diff --git a/components/NewsletterForm.tsx b/components/NewsletterForm.tsx new file mode 100644 index 0000000000..3e7ecc7254 --- /dev/null +++ b/components/NewsletterForm.tsx @@ -0,0 +1,103 @@ +'use client' + +import { FormEvent, useState } from 'react' + +type NewsletterFormProps = { + title?: string + action?: string + emailFieldName?: string + hiddenFieldName?: string +} + +export default function NewsletterForm({ + title = 'Subscribe to the newsletter', + action = '', + emailFieldName = 'EMAIL', + hiddenFieldName = '', +}: NewsletterFormProps) { + const [email, setEmail] = useState('') + const [isSubmitting, setIsSubmitting] = useState(false) + const [statusMessage, setStatusMessage] = useState('') + const [statusType, setStatusType] = useState<'idle' | 'success' | 'error'>('idle') + const handleSubmit = async (e: FormEvent) => { + e.preventDefault() + if (!email) return + + setIsSubmitting(true) + setStatusType('idle') + setStatusMessage('') + try { + const response = await fetch('/api/newsletter', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + email, + emailFieldName, + hiddenFieldName, + action, + }), + }) + const data = (await response.json()) as { error?: string; message?: string } + if (!response.ok) { + setStatusType('error') + setStatusMessage(data.error || 'Subscription failed. Please try again.') + return + } + setStatusType('success') + setStatusMessage(data.message || 'Thanks! Please check your inbox to confirm your subscription.') + setEmail('') + } catch { + setStatusType('error') + setStatusMessage('Could not submit right now. Please try again.') + } finally { + setIsSubmitting(false) + } + } + + return ( +
+

+ {title} +

+
+ + setEmail(event.target.value)} + required + autoComplete="email" + placeholder="you@example.com" + className="ring-primary-500 w-full rounded-md border border-gray-300 bg-white px-4 py-2 text-gray-900 transition outline-none placeholder:text-gray-400 focus:ring-2 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100" + /> + +
+ {statusType !== 'idle' ? ( +

+ {statusMessage} +

+ ) : null} +
+ ) +} diff --git a/data/blog/operating-system/runtime-environment/node-js/how-to-add-a-npmrc-file-step-by-step.mdx b/data/blog/operating-system/runtime-environment/node-js/how-to-add-a-npmrc-file-step-by-step.mdx new file mode 100644 index 0000000000..017ad5d643 --- /dev/null +++ b/data/blog/operating-system/runtime-environment/node-js/how-to-add-a-npmrc-file-step-by-step.mdx @@ -0,0 +1,619 @@ +--- +title: 'How to Add a `.npmrc` File?' +date: '2026-05-05' +tags: ['javascript', 'node', 'nodejs', 'npm', 'operating system', 'package manager', 'runtime environment'] +draft: false +summary: 'Learn what a `.npmrc` file is, why it matters in Node.js projects, and how to add and use it correctly for npm configuration, private packages, and custom registries. Step-by-step guide with examples.' +authors: ['default'] +images: ['/static/images/nodejs-npmrc.avif'] +layout: PostLayout +--- + +![How to Add a `.npmrc` File infographics](/static/images/nodejs-npmrc.avif) + + + +## Introduction + +Node.js is one of the most popular runtimes for building modern web applications—fast, flexible, and suited to both small and large projects. When working with Node.js, developers rely on **npm** (Node Package Manager) to install and manage dependencies. One important but often overlooked part of the npm ecosystem is the **`.npmrc`** file. + +Many developers are unsure what a `.npmrc` file is or why it matters. Even experienced engineers sometimes underuse it. This guide explains what a `.npmrc` file is, why it is useful, where to place it, and how to add and manage it step by step. + +You will learn: + +- What `.npmrc` controls +- Where npm reads config from +- How to set up public and private registries +- How to handle tokens safely in local development and CI +- How to debug common "wrong registry" or auth issues quickly + +## What Is a `.npmrc` File? + +A **`.npmrc`** file is a configuration file used by npm. It tells npm how to behave. Settings are written in a simple **key=value** format. + +For example, the `.npmrc` file can store: + +- **Registry URLs** – where to download packages from +- **Authentication tokens** – for private or scoped registries +- **Package scopes** – which registry to use for which scope +- **Proxy settings** – for corporate or restricted networks +- **Cache and save rules** – how to cache and record dependencies + +In short, it lets you control how npm installs and manages packages without repeating long flags in every command. + +The file is plain text and can be created with any editor. The leading dot (`.`) makes it a hidden file on Unix-like systems (macOS, Linux). + +### `.npmrc` Format Basics (Important Details) + +`.npmrc` uses INI-style syntax: + +```ini +key=value +``` + +Rules worth knowing: + +- One setting per line +- Comments can use `#` or `;` +- Boolean values are typically `true` / `false` +- Environment variables can be referenced as `${VAR_NAME}` +- Whitespace around `=` is usually fine, but keep formatting consistent + +Example: + +```ini +# npm public registry +registry=https://registry.npmjs.org/ + +; keep exact versions in package.json +save-exact=true +``` + +## Quick Start (Most Common Setup) + +If you just want a safe, practical setup for most teams, use this: + +1. Create a project-level `.npmrc` next to `package.json`. +2. Put registry rules in the file. +3. Use environment variables for tokens. +4. Keep secrets out of git. + +```ini +registry=https://registry.npmjs.org/ +@mycompany:registry=https://registry.mycompany.com/ +//registry.mycompany.com/:_authToken=${NPM_TOKEN} +always-auth=true +``` + +Then set `NPM_TOKEN` in your shell or CI, and verify: + +```bash +npm config get registry +npm whoami --registry=https://registry.mycompany.com/ +``` + +This gives you: + +- Public packages from npmjs +- Private scoped packages from your company registry +- No hardcoded token in the repository + +## Why Is the `.npmrc` File Important? + +The `.npmrc` file becomes important as soon as you work on real projects. Common reasons to use it: + +### 1. Using Private Packages + +Many teams use private npm packages. To access them, npm needs authentication. The `.npmrc` file is where you store these credentials (preferably via environment variables, not raw tokens in the repo). + +### 2. Custom Registries + +By default, npm uses the public registry at `https://registry.npmjs.org/`. You may need a different registry—for example a company registry or a mirror. The `.npmrc` file lets you switch registries per project or per scope. + +### 3. Project-Level Settings + +Different projects may need different registries, save rules, or engine checks. A `.npmrc` in the project root applies only to that project and keeps settings next to the code. + +### 4. Saving Time and Reducing Errors + +Without `.npmrc`, you might type long `--registry` or `--save-exact` options every time. With the file in place, npm reads the settings automatically and your workflow stays consistent. + +## Where Can You Add a `.npmrc` File? + +Where you put `.npmrc` determines **scope**: who or which project is affected. + +### Global Level + +- Affects all users on the machine. +- Usually managed by system administrators. +- Rarely used by everyday developers. + +### User Level + +- Affects only your user account. +- Stored in your **home directory**. + +**Paths:** + +- **macOS / Linux:** `~/.npmrc` +- **Windows:** `C:\Users\\.npmrc` + +To see the exact path npm uses, run: + +```bash +npm config get userconfig +``` + +You can also list all config and paths with: + +```bash +npm config ls -l +``` + +### Project Level + +- Affects only the project in that folder. +- Stored in the **project root**, next to `package.json`. + +**Example layout:** + +``` +my-project/ + package.json + .npmrc +``` + +Project-level `.npmrc` files are very common because they keep configuration versioned and shared with the team (excluding secrets). + +### Which Location Should You Choose? + +- **Personal defaults for all repos**: user-level (`~/.npmrc`) +- **Team-shared project behavior**: project-level (`/.npmrc`) +- **Machine-wide administration**: global-level (rare for app developers) + +A common pattern is: + +- Keep non-secret defaults in project `.npmrc` +- Keep personal/global defaults in `~/.npmrc` +- Inject secrets from environment variables + +## How to Create a `.npmrc` File Manually + +### Step 1: Choose the Location + +Decide between **user level** (all your projects) or **project level** (this repo only). For project level, open your project root in a terminal or editor. + +### Step 2: Create the File + +Create a new file named exactly **`.npmrc`** with no extra extension. + +**On macOS or Linux:** + +```bash +touch .npmrc +``` + +**On Windows:** + +- Create a new text file. +- Rename it to `.npmrc`. +- Remove any `.txt` extension (you may need to enable "Show file extensions" in Explorer). + +### Step 3: Add Configuration + +Open `.npmrc` in a text editor and add one setting per line. Example: + +```ini +registry=https://registry.npmjs.org/ +``` + +Save the file. npm will read it automatically on the next command. + +You can also set values using npm commands (which write to config files for you): + +```bash +npm config set save-exact true +npm config set @mycompany:registry https://registry.mycompany.com/ +``` + +Tip: if you use command-based config, confirm *where* npm wrote the value with: + +```bash +npm config get userconfig +npm config ls -l +``` + +## How to Let npm Create the `.npmrc` File + +npm can create a user-level `.npmrc` for you when you log in: + +```bash +npm login +``` + +npm will prompt for: + +- Username +- Password +- Email + +After a successful login, npm creates or updates `~/.npmrc` (or your platform's user config path) and stores an authentication token. This is useful when you don't want to manage tokens manually for the default registry. + +If you use modern npm authentication flows (such as browser-based login), npm still writes the resulting auth configuration into your user config unless configured otherwise. + +## Common `.npmrc` Settings Explained + +### Registry URL + +Tells npm where to download packages: + +```ini +registry=https://registry.npmjs.org/ +``` + +### Authentication Token + +Used for private or authenticated registries. **Never commit real tokens to a public repo.** + +```ini +//registry.npmjs.org/:_authToken=YOUR_TOKEN +``` + +Prefer environment variables in CI and locally: + +```ini +//registry.npmjs.org/:_authToken=${NPM_TOKEN} +``` + +npm expands `${NPM_TOKEN}` from the environment. See the [npm blog on private modules](https://blog.npmjs.org/post/118393368555/deploying-with-npm-private-modules) and the [npmrc documentation](https://docs.npmjs.com/files/npmrc). + +If your token is for a custom registry, scope it to that host: + +```ini +//registry.mycompany.com/:_authToken=${NPM_TOKEN} +``` + +### Scoped Packages + +Use a custom registry only for a specific scope: + +```ini +@mycompany:registry=https://registry.example.com/ +``` + +Packages whose name starts with `@mycompany` will use that registry. + +You can combine scope and token rules: + +```ini +@mycompany:registry=https://registry.mycompany.com/ +//registry.mycompany.com/:_authToken=${NPM_TOKEN} +always-auth=true +``` + +### Save Exact Versions + +Control how versions are written to `package.json` (e.g. exact version vs ranges): + +```ini +save-exact=true +``` + +Or with the legacy prefix style: + +```ini +save-prefix='~' +``` + +### Useful Additional Settings + +```ini +fund=false +audit=true +engine-strict=true +``` + +- `fund=false`: hides funding messages in install output +- `audit=true`: keeps security audit checks enabled +- `engine-strict=true`: fails install if `engines` constraints do not match + +### Network and Proxy Settings (Corporate Environments) + +If you are behind a corporate proxy or custom TLS environment, these settings are often required: + +```ini +proxy=http://proxy.mycompany.local:8080 +https-proxy=http://proxy.mycompany.local:8080 +strict-ssl=true +``` + +Notes: + +- Keep `strict-ssl=true` whenever possible for security +- Only disable SSL verification temporarily for debugging, and only if your security policy allows it +- In many companies, a custom CA certificate is installed at OS level; check internal docs before changing npm TLS settings + +### Install and Dependency Behavior Settings + +Useful knobs for team consistency: + +```ini +save-exact=true +legacy-peer-deps=false +package-lock=true +``` + +- `save-exact=true`: pin exact versions for new installs +- `legacy-peer-deps=false`: enforce modern peer dependency resolution +- `package-lock=true`: keep lockfile generation enabled + +## How npm Reads Multiple `.npmrc` Files + +npm can load several config sources. Highest precedence wins: + +1. **CLI flags** (for example `npm install --registry=...`) +2. **Environment variables** (`npm_config_*`) +3. **Project level** (`/.npmrc`) +4. **User level** (`~/.npmrc` or `npm config get userconfig`) +5. **Global level** (system config) +6. **Built-in npm defaults** + +If the same key appears in more than one file, the more specific level overrides the more general one. That gives you global defaults with the option to override per project. + +When debugging, this precedence explains why your `.npmrc` "looks correct" but npm still uses a different value. + +### Inspecting the Effective Value of a Single Key + +When you only care about one setting, query it directly: + +```bash +npm config get registry +npm config get save-exact +npm config get @mycompany:registry +``` + +This is usually faster than scanning full config output. + +## Best Practices for Using `.npmrc` Files + +### Do Not Commit Secrets + +Never commit authentication tokens or passwords to a public (or shared) repository. If `.npmrc` contains secrets, add it to `.gitignore` and use a `.npmrc.example` with placeholder values. + +Example `.npmrc.example`: + +```ini +@mycompany:registry=https://registry.mycompany.com/ +//registry.mycompany.com/:_authToken=${NPM_TOKEN} +always-auth=true +``` + +### Use Environment Variables + +Prefer environment variables for tokens so that: + +- Secrets aren't in the repo. +- CI/CD can inject different tokens per environment. + +Example: + +```ini +//registry.example.com/:_authToken=${NPM_TOKEN} +``` + +### Keep It Simple + +Only add settings you actually need. A minimal `.npmrc` is easier to understand and maintain. + +### Document Your Setup + +If you work in a team, document why `.npmrc` exists (e.g. custom registry, scope) and how to obtain any required tokens or env vars. + +### Prefer Read-Only or Scoped Tokens + +If your registry supports token scopes/permissions, create the least-privileged token possible. For CI installs, use read-only package tokens instead of publish-capable tokens. + +### Rotate Tokens Regularly + +Treat package registry tokens like passwords: + +- Rotate periodically +- Revoke immediately if exposed +- Avoid sharing personal tokens between team members + +### Separate Install vs Publish Credentials + +If your workflow publishes packages, do not reuse broad personal tokens everywhere: + +- Use read-only token for installs in CI jobs +- Use publish-capable token only in release/publish jobs +- Restrict token scope to the minimum registry and package scope needed + +## Publishing Packages and `.npmrc` + +`.npmrc` is not only for installs. It also affects `npm publish`. + +For scoped packages, set your intended publish registry explicitly: + +```ini +@mycompany:registry=https://registry.mycompany.com/ +``` + +You can also set publish behavior in `package.json`: + +```json +{ + "name": "@mycompany/my-package", + "version": "1.0.0", + "publishConfig": { + "registry": "https://registry.mycompany.com/", + "access": "restricted" + } +} +``` + +Using `publishConfig.registry` helps avoid accidental publishes to the wrong registry. + +## Monorepo / Workspaces Notes + +In npm workspaces, npm still resolves config by the same precedence rules, but in practice: + +- A root project `.npmrc` is usually the main shared config +- Workspace packages inherit behavior when commands run from the repo root +- Running commands from subdirectories can change which project config is considered current + +Recommended pattern for workspaces: + +- Keep registry/scope rules in the monorepo root `.npmrc` +- Keep secrets in environment variables +- Run install commands from root when possible (`npm install`, `npm ci`) + +## Example Team Setup + +Project file (`.npmrc` in repo): + +```ini +registry=https://registry.npmjs.org/ +@mycompany:registry=https://registry.mycompany.com/ +//registry.mycompany.com/:_authToken=${NPM_TOKEN} +always-auth=true +save-exact=true +``` + +Git ignore: + +```gitignore +# If you keep secrets in a local override file +.npmrc.local +``` + +Optional local override (not committed): + +```ini +# .npmrc.local +fund=false +``` + +If you use a local override file, load it explicitly in your workflow or scripts. Keep the main `.npmrc` in the repo free of secrets. + +## CI/CD Example (GitHub Actions) + +In CI, inject `NPM_TOKEN` as a secret and let npm read it from `.npmrc`. + +```yaml +name: Install dependencies +on: [push] +jobs: + install: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + - run: npm ci + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} +``` + +This keeps credentials outside version control and centralizes secret management in your CI platform. + +For publish pipelines, use a separate secret (for example `NPM_PUBLISH_TOKEN`) in a dedicated job, rather than reusing install credentials. + +## Common Problems and How to Fix Them + +### Quick Debug Checklist + +When npm behavior is unexpected, run this short checklist in order: + +1. Check active registry: `npm config get registry` +2. Check scope registry: `npm config get @mycompany:registry` +3. Confirm auth identity: `npm whoami --registry=https://registry.mycompany.com/` +4. Print full config sources: `npm config ls -l` +5. Verify environment variables used in `.npmrc` are actually set + +This resolves most install/auth incidents quickly. + +### npm Seems to Ignore .npmrc + +Check which config npm is using: + +```bash +npm config ls -l +``` + +Confirm the **userconfig** path and that your file is at the expected location. For project-level config, ensure the file is in the project root (same directory as `package.json`). + +Also check whether environment variables or CLI flags are overriding values. + +### Permission Errors + +Ensure the file is readable (and writable if npm needs to update it) by your user. On Unix-like systems, `chmod` and ownership can affect this. + +On Windows, also check: + +- File extension is truly `.npmrc` (not `.npmrc.txt`) +- Your editor did not save with hidden extension changes + +### Wrong Registry Used + +If the wrong registry is used, another `.npmrc` may be overriding your setting. Check project, user, and global config with `npm config ls -l` and fix or remove the overriding value. + +Helpful checks: + +```bash +npm config get registry +npm config get @mycompany:registry +``` + +### 404 for a Private Package + +If you get "404 Not found" for a scoped or private package, verify: + +- The scope and registry in `.npmrc` match the package name. +- Your token has access to that package/scope. +- The token is not expired. + +### 401/403 Authentication Errors + +If you get `E401` or `E403`, usually: + +- Token is missing, invalid, or expired +- Token is for a different registry host +- `always-auth` behavior differs from what your registry expects + +Try: + +```bash +npm whoami --registry=https://registry.mycompany.com/ +``` + +If this fails, your auth setup for that registry is not valid yet. + +### Lockfile or Install Behavior Differs Across Machines + +If teammates see different versions, align on: + +- Node version +- npm version +- `.npmrc` settings such as `save-exact` +- Use `npm ci` in CI for reproducible installs + +Also verify: + +- Lockfile is committed and up to date +- Team uses the same package manager (`npm`, not mixed with `yarn`/`pnpm` unless intentional) +- Proxy or mirror registry is not returning inconsistent metadata + +## Why `.npmrc` Matters in Real Projects + +In real Node.js projects, `.npmrc` helps teams share the same registry and auth setup, avoid "works on my machine" issues, and keep private package access secure. Whether you work on a small app or a large monorepo, understanding and using `.npmrc` makes installs and CI more reliable. + +## Recommended Node.js Learning Resources + +If you prefer video-based learning, the [Developing Back-End Apps with Node.js and Express (Coursera)](https://imp.i384100.net/Gb0Qa9) course offers practical Node.js + Express foundations, including APIs and authentication. For developers who prefer interactive, text-based learning, the [Learn Node.js (Educative)](https://www.educative.io/courses/learn-node-js?aff=VALz) course provides a hands-on roadmap covering APIs, databases, JWT, and WebSockets. + +## Conclusion + +The `.npmrc` file is a small but powerful way to control how npm behaves. It helps you manage registries, authentication, and project settings in a consistent and secure way. Adding and maintaining a `.npmrc` file is simple; knowing where and how to use it improves your Node.js workflow and reduces common install and auth errors. + diff --git a/data/siteMetadata.js b/data/siteMetadata.js index c9aca7d78e..bf5ea5ba1c 100644 --- a/data/siteMetadata.js +++ b/data/siteMetadata.js @@ -52,7 +52,11 @@ const siteMetadata = { newsletter: { // supports mailchimp, buttondown, convertkit, klaviyo, revue, emailoctopus, beehive // Please add your .env file and modify it according to your selection + // For static hosting, set MAILCHIMP_SUBSCRIBE_ENDPOINT. provider: 'mailchimp', + externalUrl: process.env.MAILCHIMP_SUBSCRIBE_ENDPOINT || '', + emailFieldName: 'EMAIL', + hiddenFieldName: process.env.MAILCHIMP_B_FIELD || '', }, comments: { // If you want to use an analytics provider you have to add it to the diff --git a/next-env.d.ts b/next-env.d.ts index 1b3be0840f..c4b7818fbb 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.js b/next.config.js index 747c027b54..0857df4440 100644 --- a/next.config.js +++ b/next.config.js @@ -67,11 +67,16 @@ module.exports = () => { output, basePath, reactStrictMode: true, + transpilePackages: [ + '@headlessui/react', + '@floating-ui/react', + '@floating-ui/react-dom', + '@floating-ui/dom', + '@floating-ui/core', + '@floating-ui/utils', + ], trailingSlash: false, pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'], - eslint: { - dirs: ['app', 'components', 'layouts', 'scripts'], - }, images: { remotePatterns: [ { @@ -89,13 +94,5 @@ module.exports = () => { }, ] }, - webpack: (config, options) => { - config.module.rules.push({ - test: /\.svg$/, - use: ['@svgr/webpack'], - }) - - return config - }, }) } diff --git a/package.json b/package.json index eac24132f7..d23192d88b 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,8 @@ "version": "2.4.0", "private": true, "scripts": { - "start": "next dev", - "dev": "cross-env INIT_CWD=$PWD next dev", + "start": "next dev --webpack", + "dev": "cross-env INIT_CWD=$PWD next dev --webpack", "build": "cross-env EXPORT=true INIT_CWD=$PWD next build && cross-env NODE_OPTIONS='--experimental-json-modules' node ./scripts/postbuild.mjs", "serve": "next start", "analyze": "cross-env ANALYZE=true next build", @@ -13,7 +13,7 @@ }, "dependencies": { "@headlessui/react": "2.2.0", - "@next/bundle-analyzer": "15.2.4", + "@next/bundle-analyzer": "latest", "@tailwindcss/forms": "^0.5.9", "@tailwindcss/postcss": "^4.0.5", "@tailwindcss/typography": "^0.5.15", @@ -24,7 +24,7 @@ "gray-matter": "^4.0.2", "hast-util-from-html-isomorphic": "^2.0.0", "image-size": "2.0.1", - "next": "15.2.4", + "next": "latest", "next-contentlayer2": "0.5.5", "next-themes": "^0.4.6", "pliny": "0.4.1", @@ -56,7 +56,7 @@ "@typescript-eslint/parser": "^8.12.0", "cross-env": "^7.0.3", "eslint": "^9.14.0", - "eslint-config-next": "15.2.4", + "eslint-config-next": "latest", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.0", "globals": "^15.12.0", diff --git a/public/static/images/nodejs-npmrc.avif b/public/static/images/nodejs-npmrc.avif new file mode 100644 index 0000000000..316b397563 Binary files /dev/null and b/public/static/images/nodejs-npmrc.avif differ diff --git a/tsconfig.json b/tsconfig.json index f1ce12b2bd..e6a493ce33 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,11 @@ "compilerOptions": { "incremental": true, "target": "ES6", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": false, @@ -14,15 +18,27 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "baseUrl": ".", "paths": { - "@/components/*": ["components/*"], - "@/data/*": ["data/*"], - "@/layouts/*": ["layouts/*"], - "@/css/*": ["css/*"], - "contentlayer/generated": ["./.contentlayer/generated"], - "pliny/*": ["node_modules/pliny/*"] + "@/components/*": [ + "components/*" + ], + "@/data/*": [ + "data/*" + ], + "@/layouts/*": [ + "layouts/*" + ], + "@/css/*": [ + "css/*" + ], + "contentlayer/generated": [ + "./.contentlayer/generated" + ], + "pliny/*": [ + "node_modules/pliny/*" + ] }, "plugins": [ { @@ -40,7 +56,10 @@ "**/*.json", ".contentlayer/generated", ".contentlayer/generated/**/*.json", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" ], - "exclude": ["node_modules"] + "exclude": [ + "node_modules" + ] } diff --git a/yarn.lock b/yarn.lock index 865bd5342f..add830d40f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -220,6 +220,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": ^7.28.5 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 39f5b303757e4d63bbff8133e251094cd4f952b46e3fa9febc7368d907583911d6a1eded6090876dc1feeff5cf6e134fb19b706f8d58d26c5402cd50e5e1aeb2 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.0": version: 7.28.4 resolution: "@babel/compat-data@npm:7.28.4" @@ -227,6 +238,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.28.6": + version: 7.29.0 + resolution: "@babel/compat-data@npm:7.29.0" + checksum: ad19db279dfd06cbe91b505d03be00d603c6d3fcc141cfc14f4ace5c558193e9b6aae4788cb01fd209c4c850e52d73c8f3c247680e3c0d84fa17ab8b3d50c808 + languageName: node + linkType: hard + "@babel/core@npm:^7.21.3": version: 7.28.4 resolution: "@babel/core@npm:7.28.4" @@ -250,6 +268,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.24.4": + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-compilation-targets": ^7.28.6 + "@babel/helper-module-transforms": ^7.28.6 + "@babel/helpers": ^7.28.6 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/traverse": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/remapping": ^2.3.5 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 85e1df6e213382c46dee27bcd07ed9202fa108a85bb74eb37be656308fd949349171ad2aa17cc84cf0720c908dc9ea6309d25e64d2a7fcdaa63721ce0c67c10b + languageName: node + linkType: hard + "@babel/generator@npm:^7.28.3": version: 7.28.3 resolution: "@babel/generator@npm:7.28.3" @@ -263,6 +304,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.29.0": + version: 7.29.1 + resolution: "@babel/generator@npm:7.29.1" + dependencies: + "@babel/parser": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 + jsesc: ^3.0.2 + checksum: d8e6863b2d04f684e65ad72731049ac7d754d3a3d1a67cdfc20807b109ba3180ed90d7ccef58ce5d38ded2eaeb71983a76c711eecb9b6266118262378f6c7226 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": version: 7.27.3 resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" @@ -285,6 +339,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" + dependencies: + "@babel/compat-data": ^7.28.6 + "@babel/helper-validator-option": ^7.27.1 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 8151e36b74eb1c5e414fe945c189436421f7bfa011884de5be3dd7fd77f12f1f733ff7c982581dfa0a49d8af724450243c2409427114b4a6cfeb8333259d001c + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.27.1, @babel/helper-create-class-features-plugin@npm:^7.28.3": version: 7.28.3 resolution: "@babel/helper-create-class-features-plugin@npm:7.28.3" @@ -357,6 +424,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 437513aa029898b588a38f7991d7656c539b22f595207d85d0c407240c9e3f2aff8b9d0d7115fdedc91e7fdce4465100549a052024e2fba6a810bcbb7584296b + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3": version: 7.28.3 resolution: "@babel/helper-module-transforms@npm:7.28.3" @@ -370,6 +447,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-validator-identifier": ^7.28.5 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 522f7d1d08b5e2ccd4ec912aca879bd1506af78d1fb30f46e3e6b4bb69c6ae6ab4e379a879723844230d27dc6d04a55b03f5215cd3141b7a2b40bb4a02f71a9f + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" @@ -436,6 +526,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" @@ -464,6 +561,27 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.28.6": + version: 7.29.2 + resolution: "@babel/helpers@npm:7.29.2" + dependencies: + "@babel/template": ^7.28.6 + "@babel/types": ^7.29.0 + checksum: 2c8ce711a639ef334539d3bd48977f57493f71af99e13d3f685fe47b3bc32aa83dbc1380688e19d5df924d958f8f29072f3dcff8110257ba6399524907287189 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.24.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.2 + resolution: "@babel/parser@npm:7.29.2" + dependencies: + "@babel/types": ^7.29.0 + bin: + parser: ./bin/babel-parser.js + checksum: 25249623ffceb61beda0ba67776cf3957ffd49bef3005ccb81da3049db52115c91ad97c97da661b714f92d062e052d07bd2ba6cba6b5460f168ff38dabaf4d6d + languageName: node + linkType: hard + "@babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.3, @babel/parser@npm:^7.28.4": version: 7.28.4 resolution: "@babel/parser@npm:7.28.4" @@ -1417,6 +1535,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": ^7.28.6 + "@babel/parser": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 8ab6383053e226025d9491a6e795293f2140482d14f60c1244bece6bf53610ed1e251d5e164de66adab765629881c7d9416e1e540c716541d2fd0f8f36a013d7 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4": version: 7.28.4 resolution: "@babel/traverse@npm:7.28.4" @@ -1432,6 +1561,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-globals": ^7.28.0 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/types": ^7.29.0 + debug: ^4.3.1 + checksum: fbb5085aa525b5d4ecd9fe2f5885d88413fff6ad9c0fac244c37f96069b6d3af9ce825750cd16af1d97d26fa3d354b38dbbdb5f31430e0d99ed89660ab65430e + languageName: node + linkType: hard + "@babel/types@npm:^7.21.3, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.4.4": version: 7.28.4 resolution: "@babel/types@npm:7.28.4" @@ -1442,6 +1586,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/types@npm:7.29.0" + dependencies: + "@babel/helper-string-parser": ^7.27.1 + "@babel/helper-validator-identifier": ^7.28.5 + checksum: 83f190438e94c22b2574aaeef7501830311ef266eaabfb06523409f64e2fe855e522951607085d71cad286719adef14e1ba37b671f334a7cd25b0f8506a01e0b + languageName: node + linkType: hard + "@citation-js/core@npm:^0.7.14": version: 0.7.18 resolution: "@citation-js/core@npm:0.7.18" @@ -1824,7 +1978,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:^1.2.0, @emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.5.0": +"@emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.5.0": version: 1.5.0 resolution: "@emnapi/runtime@npm:1.5.0" dependencies: @@ -1833,6 +1987,15 @@ __metadata: languageName: node linkType: hard +"@emnapi/runtime@npm:^1.7.0": + version: 1.10.0 + resolution: "@emnapi/runtime@npm:1.10.0" + dependencies: + tslib: ^2.4.0 + checksum: cc403db36a6875495f4f4a776eea8379c028d83d7d37a018b50079db226e7484f269a0447fc1e49235216d4fb2378bf2c61fa7f047d9f9c50e21698ce9b6e531 + languageName: node + linkType: hard + "@emnapi/wasi-threads@npm:1.1.0, @emnapi/wasi-threads@npm:^1.1.0": version: 1.1.0 resolution: "@emnapi/wasi-threads@npm:1.1.0" @@ -2224,6 +2387,17 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.9.1": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" + dependencies: + eslint-visitor-keys: ^3.4.3 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 0a27c2d676c4be6b329ebb5dd8f6c5ef5fae9a019ff575655306d72874bb26f3ab20e0b241a5f086464bb1f2511ca26a29ff6f80c1e2b0b02eca4686b4dfe1b5 + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" @@ -2231,6 +2405,13 @@ __metadata: languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.12.2": + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 1770bc81f676a72f65c7200b5675ff7a349786521f30e66125faaf767fde1ba1c19c3790e16ba8508a62a3933afcfc806a893858b3b5906faf693d862b9e4120 + languageName: node + linkType: hard + "@eslint/config-array@npm:^0.21.0": version: 0.21.0 resolution: "@eslint/config-array@npm:0.21.0" @@ -2442,11 +2623,18 @@ __metadata: languageName: node linkType: hard -"@img/sharp-darwin-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-darwin-arm64@npm:0.33.5" +"@img/colour@npm:^1.0.0": + version: 1.1.0 + resolution: "@img/colour@npm:1.1.0" + checksum: 1572b4f154fe5987e02e107c32f64a9f50a18cab4a2015b7e53f48317b20c58e00cc2e09467378a2d4f06a6139cabd259b1b6d224e79a3bd6b66daea70a6613d + languageName: node + linkType: hard + +"@img/sharp-darwin-arm64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-darwin-arm64@npm:0.34.5" dependencies: - "@img/sharp-libvips-darwin-arm64": 1.0.4 + "@img/sharp-libvips-darwin-arm64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-darwin-arm64": optional: true @@ -2454,11 +2642,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-darwin-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-darwin-x64@npm:0.33.5" +"@img/sharp-darwin-x64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-darwin-x64@npm:0.34.5" dependencies: - "@img/sharp-libvips-darwin-x64": 1.0.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-darwin-x64": optional: true @@ -2466,67 +2654,81 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-darwin-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-darwin-arm64@npm:1.0.4" +"@img/sharp-libvips-darwin-arm64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-darwin-arm64@npm:1.2.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@img/sharp-libvips-darwin-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-darwin-x64@npm:1.0.4" +"@img/sharp-libvips-darwin-x64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-darwin-x64@npm:1.2.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@img/sharp-libvips-linux-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-arm64@npm:1.0.4" +"@img/sharp-libvips-linux-arm64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-arm64@npm:1.2.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@img/sharp-libvips-linux-arm@npm:1.0.5": - version: 1.0.5 - resolution: "@img/sharp-libvips-linux-arm@npm:1.0.5" +"@img/sharp-libvips-linux-arm@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-arm@npm:1.2.4" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@img/sharp-libvips-linux-s390x@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-s390x@npm:1.0.4" +"@img/sharp-libvips-linux-ppc64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-ppc64@npm:1.2.4" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-riscv64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-riscv64@npm:1.2.4" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-libvips-linux-s390x@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-s390x@npm:1.2.4" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@img/sharp-libvips-linux-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linux-x64@npm:1.0.4" +"@img/sharp-libvips-linux-x64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linux-x64@npm:1.2.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.0.4" +"@img/sharp-libvips-linuxmusl-arm64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.2.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@img/sharp-libvips-linuxmusl-x64@npm:1.0.4": - version: 1.0.4 - resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.0.4" +"@img/sharp-libvips-linuxmusl-x64@npm:1.2.4": + version: 1.2.4 + resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.2.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@img/sharp-linux-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-arm64@npm:0.33.5" +"@img/sharp-linux-arm64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-arm64@npm:0.34.5" dependencies: - "@img/sharp-libvips-linux-arm64": 1.0.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linux-arm64": optional: true @@ -2534,11 +2736,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-arm@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-arm@npm:0.33.5" +"@img/sharp-linux-arm@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-arm@npm:0.34.5" dependencies: - "@img/sharp-libvips-linux-arm": 1.0.5 + "@img/sharp-libvips-linux-arm": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linux-arm": optional: true @@ -2546,11 +2748,35 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-s390x@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-s390x@npm:0.33.5" +"@img/sharp-linux-ppc64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-ppc64@npm:0.34.5" + dependencies: + "@img/sharp-libvips-linux-ppc64": 1.2.4 + dependenciesMeta: + "@img/sharp-libvips-linux-ppc64": + optional: true + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-riscv64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-riscv64@npm:0.34.5" + dependencies: + "@img/sharp-libvips-linux-riscv64": 1.2.4 + dependenciesMeta: + "@img/sharp-libvips-linux-riscv64": + optional: true + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@img/sharp-linux-s390x@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-s390x@npm:0.34.5" dependencies: - "@img/sharp-libvips-linux-s390x": 1.0.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linux-s390x": optional: true @@ -2558,11 +2784,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linux-x64@npm:0.33.5" +"@img/sharp-linux-x64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linux-x64@npm:0.34.5" dependencies: - "@img/sharp-libvips-linux-x64": 1.0.4 + "@img/sharp-libvips-linux-x64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linux-x64": optional: true @@ -2570,11 +2796,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linuxmusl-arm64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linuxmusl-arm64@npm:0.33.5" +"@img/sharp-linuxmusl-arm64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linuxmusl-arm64@npm:0.34.5" dependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linuxmusl-arm64": optional: true @@ -2582,11 +2808,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linuxmusl-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-linuxmusl-x64@npm:0.33.5" +"@img/sharp-linuxmusl-x64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-linuxmusl-x64@npm:0.34.5" dependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 dependenciesMeta: "@img/sharp-libvips-linuxmusl-x64": optional: true @@ -2594,25 +2820,32 @@ __metadata: languageName: node linkType: hard -"@img/sharp-wasm32@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-wasm32@npm:0.33.5" +"@img/sharp-wasm32@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-wasm32@npm:0.34.5" dependencies: - "@emnapi/runtime": ^1.2.0 + "@emnapi/runtime": ^1.7.0 conditions: cpu=wasm32 languageName: node linkType: hard -"@img/sharp-win32-ia32@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-win32-ia32@npm:0.33.5" +"@img/sharp-win32-arm64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-win32-arm64@npm:0.34.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@img/sharp-win32-ia32@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-win32-ia32@npm:0.34.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@img/sharp-win32-x64@npm:0.33.5": - version: 0.33.5 - resolution: "@img/sharp-win32-x64@npm:0.33.5" +"@img/sharp-win32-x64@npm:0.34.5": + version: 0.34.5 + resolution: "@img/sharp-win32-x64@npm:0.34.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2865,83 +3098,83 @@ __metadata: languageName: node linkType: hard -"@next/bundle-analyzer@npm:15.2.4": - version: 15.2.4 - resolution: "@next/bundle-analyzer@npm:15.2.4" +"@next/bundle-analyzer@npm:latest": + version: 16.2.4 + resolution: "@next/bundle-analyzer@npm:16.2.4" dependencies: webpack-bundle-analyzer: 4.10.1 - checksum: bb99fb49b16dc1921f9e44a109b13926f483cdb72a6dd59c199518286fb0af67cf23901ecabfb5416fafa79d96024a885f4683ebd4054ad77d7fc50d469ad44d + checksum: f76361d7be4b6a2a52d36c2c2bb2cb09a9c1ebebdc46ac3ae3dcafc0fefecd6d3126907993bdc6595a437ccc24fed7011c444a3a7d4102f4e80424bd34cba867 languageName: node linkType: hard -"@next/env@npm:15.2.4": - version: 15.2.4 - resolution: "@next/env@npm:15.2.4" - checksum: 8c532d963408766406baeb3b7f018fcdfac6b953d829afbd9d7d649668c20546dd32400259d3b0d894a7a1947116e364cb4a62e9a642cf0cca7c0f1fcf9e7920 +"@next/env@npm:16.2.4": + version: 16.2.4 + resolution: "@next/env@npm:16.2.4" + checksum: f8ce723b06ff73be4bf055554371b07638203c1302d2841ae4fcc5c3cedb167b45874f228a21f587df3e7656ff3943b92dccbd2a3912966530e69521a8d474cb languageName: node linkType: hard -"@next/eslint-plugin-next@npm:15.2.4": - version: 15.2.4 - resolution: "@next/eslint-plugin-next@npm:15.2.4" +"@next/eslint-plugin-next@npm:16.2.4": + version: 16.2.4 + resolution: "@next/eslint-plugin-next@npm:16.2.4" dependencies: fast-glob: 3.3.1 - checksum: 5cec3e2631bf959b91df5a1aa495b6f673a2894347441491c67459b26743f90d5e113c4caefe4fa46ef851628cf5543278dcaff21c3e75e9b73efcb9fab31cb7 + checksum: 2fdf43562e88f56c54de38ff61a05a682617ce2b33c01834f90b09455f0aa67d330021842bdd74d57d0efe269d780cf340a538d001a8aaf721c57115216eddc2 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-darwin-arm64@npm:15.2.4" +"@next/swc-darwin-arm64@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-darwin-arm64@npm:16.2.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-darwin-x64@npm:15.2.4" +"@next/swc-darwin-x64@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-darwin-x64@npm:16.2.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-linux-arm64-gnu@npm:15.2.4" +"@next/swc-linux-arm64-gnu@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-linux-arm64-gnu@npm:16.2.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-linux-arm64-musl@npm:15.2.4" +"@next/swc-linux-arm64-musl@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-linux-arm64-musl@npm:16.2.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-linux-x64-gnu@npm:15.2.4" +"@next/swc-linux-x64-gnu@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-linux-x64-gnu@npm:16.2.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-linux-x64-musl@npm:15.2.4" +"@next/swc-linux-x64-musl@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-linux-x64-musl@npm:16.2.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-win32-arm64-msvc@npm:15.2.4" +"@next/swc-win32-arm64-msvc@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-win32-arm64-msvc@npm:16.2.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.2.4": - version: 15.2.4 - resolution: "@next/swc-win32-x64-msvc@npm:15.2.4" +"@next/swc-win32-x64-msvc@npm:16.2.4": + version: 16.2.4 + resolution: "@next/swc-win32-x64-msvc@npm:16.2.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3477,13 +3710,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/eslint-patch@npm:^1.10.3": - version: 1.13.0 - resolution: "@rushstack/eslint-patch@npm:1.13.0" - checksum: a99be6ce559cbfb504516690e1f94088fe9ea5ac8f02ab6bd95c98a3105e6c55d34025c49a1a6edf358cf431adcdcd220c4d06daf0569192ccb2e1ef9ab783b4 - languageName: node - linkType: hard - "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": version: 8.0.0 resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" @@ -3640,13 +3866,6 @@ __metadata: languageName: node linkType: hard -"@swc/counter@npm:0.1.3": - version: 0.1.3 - resolution: "@swc/counter@npm:0.1.3" - checksum: df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598 - languageName: node - linkType: hard - "@swc/helpers@npm:0.5.15": version: 0.5.15 resolution: "@swc/helpers@npm:0.5.15" @@ -4028,7 +4247,27 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/eslint-plugin@npm:^8.12.0": +"@typescript-eslint/eslint-plugin@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.59.0" + dependencies: + "@eslint-community/regexpp": ^4.12.2 + "@typescript-eslint/scope-manager": 8.59.0 + "@typescript-eslint/type-utils": 8.59.0 + "@typescript-eslint/utils": 8.59.0 + "@typescript-eslint/visitor-keys": 8.59.0 + ignore: ^7.0.5 + natural-compare: ^1.4.0 + ts-api-utils: ^2.5.0 + peerDependencies: + "@typescript-eslint/parser": ^8.59.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: c3ebb93b59628be249b4e787ff1fb910cd3c0c42912d12b6d9aeb70f09f25c29c7d352896d608f9491051c2e558a5d3accab61342b928d3610a7d76dad95df8b + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^8.12.0": version: 8.45.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.45.0" dependencies: @@ -4049,7 +4288,23 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/parser@npm:^8.12.0": +"@typescript-eslint/parser@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/parser@npm:8.59.0" + dependencies: + "@typescript-eslint/scope-manager": 8.59.0 + "@typescript-eslint/types": 8.59.0 + "@typescript-eslint/typescript-estree": 8.59.0 + "@typescript-eslint/visitor-keys": 8.59.0 + debug: ^4.4.3 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 87ec26044f7ce6715e8ec5367c17969b4f7f4fc3abbb3d6d58cc7c625be588ac5a0577aae7fd5cf257bc0e14521aeed8c47811010e3bbed31be6545338706779 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^8.12.0": version: 8.45.0 resolution: "@typescript-eslint/parser@npm:8.45.0" dependencies: @@ -4078,6 +4333,19 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/project-service@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/project-service@npm:8.59.0" + dependencies: + "@typescript-eslint/tsconfig-utils": ^8.59.0 + "@typescript-eslint/types": ^8.59.0 + debug: ^4.4.3 + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: e626db5ce1c3a5497a2f68808d146cb37c0d78f523121bc365c374ee555a9624a854854ddd2f51d79ab4739bc4e319e31155ec57dd92c047240c8da6b7e33821 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.45.0": version: 8.45.0 resolution: "@typescript-eslint/scope-manager@npm:8.45.0" @@ -4088,6 +4356,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/scope-manager@npm:8.59.0" + dependencies: + "@typescript-eslint/types": 8.59.0 + "@typescript-eslint/visitor-keys": 8.59.0 + checksum: e5913496a49a5658958dcea8165731676d24aee0365101dd9a35ca9a04d4ddf5e5fc5dd64226d2718470c7664079c94c3aaed47048925d2035749e19a2bead06 + languageName: node + linkType: hard + "@typescript-eslint/tsconfig-utils@npm:8.45.0, @typescript-eslint/tsconfig-utils@npm:^8.45.0": version: 8.45.0 resolution: "@typescript-eslint/tsconfig-utils@npm:8.45.0" @@ -4097,6 +4375,15 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/tsconfig-utils@npm:8.59.0, @typescript-eslint/tsconfig-utils@npm:^8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.59.0" + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: e02e610166044f37f8581c7cbd00c95d3efe3e5af3266c8d3aa02446fe635ec96fdf21c6557b19090e0f111a487c258d80d3bf805b17660823587d52ceba8070 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.45.0": version: 8.45.0 resolution: "@typescript-eslint/type-utils@npm:8.45.0" @@ -4113,6 +4400,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/type-utils@npm:8.59.0" + dependencies: + "@typescript-eslint/types": 8.59.0 + "@typescript-eslint/typescript-estree": 8.59.0 + "@typescript-eslint/utils": 8.59.0 + debug: ^4.4.3 + ts-api-utils: ^2.5.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 4d2eda88919c5e2caea9a1cc37a79c5a6f9527dccf6636e4fda67bcca43b2290bf45e5c7267640abcfb2dad8b0f59b18c0aca49fc1f149c0634f45430f693a69 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.45.0, @typescript-eslint/types@npm:^8.45.0": version: 8.45.0 resolution: "@typescript-eslint/types@npm:8.45.0" @@ -4120,6 +4423,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.59.0, @typescript-eslint/types@npm:^8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/types@npm:8.59.0" + checksum: 71681b84b5e7176ec6685230bdf9eb65ee7f002e87896ac0ad193f0e4eb610a262e459a14acbf0c2fedfe72951d1603d2a79bcfe78ddacc43492f105a71f85f1 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.45.0": version: 8.45.0 resolution: "@typescript-eslint/typescript-estree@npm:8.45.0" @@ -4140,6 +4450,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.59.0" + dependencies: + "@typescript-eslint/project-service": 8.59.0 + "@typescript-eslint/tsconfig-utils": 8.59.0 + "@typescript-eslint/types": 8.59.0 + "@typescript-eslint/visitor-keys": 8.59.0 + debug: ^4.4.3 + minimatch: ^10.2.2 + semver: ^7.7.3 + tinyglobby: ^0.2.15 + ts-api-utils: ^2.5.0 + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + checksum: bb2ae9ef4065e5dd458833a017d3f162c2792287cf906f24e523c0d9f88167688448288ae2ad9d65ae2c6781366120c96632cc00175b72daee2092edcd3d1f4e + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:8.45.0": version: 8.45.0 resolution: "@typescript-eslint/utils@npm:8.45.0" @@ -4155,6 +4484,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/utils@npm:8.59.0" + dependencies: + "@eslint-community/eslint-utils": ^4.9.1 + "@typescript-eslint/scope-manager": 8.59.0 + "@typescript-eslint/types": 8.59.0 + "@typescript-eslint/typescript-estree": 8.59.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: d66d030fc049c2e52ab01a2e2ad7d25d5ece18b55157de40bd1131fe2b714a4c41a3e62c52cca3e9e65a80b15b75b07db287a22dcc038e93e01821def7143ac9 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.45.0": version: 8.45.0 resolution: "@typescript-eslint/visitor-keys@npm:8.45.0" @@ -4165,6 +4509,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.59.0": + version: 8.59.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.59.0" + dependencies: + "@typescript-eslint/types": 8.59.0 + eslint-visitor-keys: ^5.0.0 + checksum: 3e885554965f6fb2071ed83eb95688b9126dab0044dc8cfbb54610f298b6cceda7d6a32737c4aa28f173cdd3271aca92fee68c59c603465b51ea7ea2bf77eebc + languageName: node + linkType: hard + "@ungap/structured-clone@npm:^1.0.0": version: 1.3.0 resolution: "@ungap/structured-clone@npm:1.3.0" @@ -4678,6 +5032,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 + languageName: node + linkType: hard + "base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -4694,6 +5055,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.19": + version: 2.10.21 + resolution: "baseline-browser-mapping@npm:2.10.21" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 534e122d9ebbdac9f509eb018d2a6d6c9340dd7bdc100da5815b417e9210337906f579ce7239d09689e6c4e3af7329520827a0e332f18556c46724f484878d23 + languageName: node + linkType: hard + "bcp-47-match@npm:^2.0.0": version: 2.0.3 resolution: "bcp-47-match@npm:2.0.3" @@ -4762,6 +5132,15 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^5.0.5": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" + dependencies: + balanced-match: ^4.0.2 + checksum: 4481b7ffa467b34c14e258167dbd8d9485a2d31d03060e8e8b38142dcde32cdc89c8f55b04d3ae7aae9304fa7eac1dfafd602787cf09c019cc45de3bb6950ffc + languageName: node + linkType: hard + "braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" @@ -4803,15 +5182,6 @@ __metadata: languageName: node linkType: hard -"busboy@npm:1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" - dependencies: - streamsearch: ^1.1.0 - checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e - languageName: node - linkType: hard - "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -5071,33 +5441,13 @@ __metadata: languageName: node linkType: hard -"color-name@npm:^1.0.0, color-name@npm:~1.1.4": +"color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard -"color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" - dependencies: - color-name: ^1.0.0 - simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 - languageName: node - linkType: hard - -"color@npm:^4.2.3": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: ^2.0.1 - color-string: ^1.9.0 - checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4 - languageName: node - linkType: hard - "colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -5424,7 +5774,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.1": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -5516,7 +5866,7 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4": +"detect-libc@npm:^2.0.3, detect-libc@npm:^2.0.4, detect-libc@npm:^2.1.2": version: 2.1.2 resolution: "detect-libc@npm:2.1.2" checksum: 471740d52365084c4b2ae359e507b863f2b1d79b08a92835ebdf701918e08fc9cfba175b3db28483ca33b155e1311a91d69dc42c6d192b476f41a9e1f094ce6a @@ -6068,27 +6418,26 @@ __metadata: languageName: node linkType: hard -"eslint-config-next@npm:15.2.4": - version: 15.2.4 - resolution: "eslint-config-next@npm:15.2.4" +"eslint-config-next@npm:latest": + version: 16.2.4 + resolution: "eslint-config-next@npm:16.2.4" dependencies: - "@next/eslint-plugin-next": 15.2.4 - "@rushstack/eslint-patch": ^1.10.3 - "@typescript-eslint/eslint-plugin": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0 - "@typescript-eslint/parser": ^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0 + "@next/eslint-plugin-next": 16.2.4 eslint-import-resolver-node: ^0.3.6 eslint-import-resolver-typescript: ^3.5.2 - eslint-plugin-import: ^2.31.0 + eslint-plugin-import: ^2.32.0 eslint-plugin-jsx-a11y: ^6.10.0 eslint-plugin-react: ^7.37.0 - eslint-plugin-react-hooks: ^5.0.0 + eslint-plugin-react-hooks: ^7.0.0 + globals: 16.4.0 + typescript-eslint: ^8.46.0 peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + eslint: ">=9.0.0" typescript: ">=3.3.1" peerDependenciesMeta: typescript: optional: true - checksum: 8e206d89910dbe05282ae1d80da8db87d1dc6870c90366b342aacf248daabfa6baf2433042614e6fa15f8bf51038c7faa2ef5ee25559526b7586fbd37fbb7d14 + checksum: cf168e2adcb567efae72ff4b650dc906c6bdd493d8b6a6039964909499fa5b6770b14bbc624dac263d8bf5a25a8c58e8507cdc8f818978cf204ee31f8acbdd28 languageName: node linkType: hard @@ -6150,7 +6499,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.31.0": +"eslint-plugin-import@npm:^2.32.0": version: 2.32.0 resolution: "eslint-plugin-import@npm:2.32.0" dependencies: @@ -6224,12 +6573,18 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^5.0.0": - version: 5.2.0 - resolution: "eslint-plugin-react-hooks@npm:5.2.0" +"eslint-plugin-react-hooks@npm:^7.0.0": + version: 7.1.1 + resolution: "eslint-plugin-react-hooks@npm:7.1.1" + dependencies: + "@babel/core": ^7.24.4 + "@babel/parser": ^7.24.4 + hermes-parser: ^0.25.1 + zod: ^3.25.0 || ^4.0.0 + zod-validation-error: ^3.5.0 || ^4.0.0 peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - checksum: 5920736a78c0075488e7e30e04fbe5dba5b6b5a6c8c4b5742fdae6f9b8adf4ee387bc45dc6e03b4012865e6fd39d134da7b83a40f57c90cc9eecf80692824e3a + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + checksum: 8562764538a08e6dcc147cd1e42e4f6a7fa60e7c39affa7c8a9eb283998cfc5caced6785e6e5d68ab1c0ac472096a06b2104d18cb215b8da6b0fb02fb146a1b2 languageName: node linkType: hard @@ -6285,6 +6640,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^5.0.0": + version: 5.0.1 + resolution: "eslint-visitor-keys@npm:5.0.1" + checksum: d6cc6830536ab4a808f25325686c2c27862f27aab0c1ffed39627293b06cee05d95187da113cafd366314ea5be803b456115de71ad625e365020f20e2a6af89b + languageName: node + linkType: hard + "eslint@npm:^9.14.0": version: 9.37.0 resolution: "eslint@npm:9.37.0" @@ -6926,6 +7288,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:16.4.0": + version: 16.4.0 + resolution: "globals@npm:16.4.0" + checksum: 934180f5c6cbb26f8b2832caa255050fface970eee45bde8757fabba384807c85640a12716aa5bcc47d781807839fee470c8c1f6159c6b8dc877668c56103880 + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -7377,6 +7746,22 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 97f42e9178dff61db017810b4f79f5a2cdbb3cde94b7d99ba84ed632ee2adfcae2244555587951b3151fc036676c68f48f57fbe2b49e253eb1f3f904d284a8b0 + languageName: node + linkType: hard + +"hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: 0.25.1 + checksum: 4edcfaa3030931343b540182b83c432aba4cdcb1925952521ab4cfb7ab90c2c1543dfcb042ccd51d5e81e4bfe2809420e85902c2ff95ef7c6c64644ce17138ea + languageName: node + linkType: hard + "html-enumerated-attributes@npm:^1.0.0": version: 1.1.1 resolution: "html-enumerated-attributes@npm:1.1.1" @@ -7487,7 +7872,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.0": +"ignore@npm:^7.0.0, ignore@npm:^7.0.5": version: 7.0.5 resolution: "ignore@npm:7.0.5" checksum: d0862bf64d3d58bf34d5fb0a9f725bec9ca5ce8cd1aecc8f28034269e8f69b8009ffd79ca3eda96962a6a444687781cd5efdb8c7c8ddc0a6996e36d31c217f14 @@ -7611,13 +7996,6 @@ __metadata: languageName: node linkType: hard -"is-arrayish@npm:^0.3.1": - version: 0.3.4 - resolution: "is-arrayish@npm:0.3.4" - checksum: 09816634eb7b6e357067f6b49c7656b4aff6d8b25486553d086bab53ce0f929c0293906539503b2a317f3137b5a5cd7e9ea01305f6090c0037c4340d9121420d - languageName: node - linkType: hard - "is-async-function@npm:^2.0.0": version: 2.1.1 resolution: "is-async-function@npm:2.1.1" @@ -9348,6 +9726,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.2.2": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: ^5.0.5 + checksum: 000423875fecbc7da1d74bf63c9081363a71291ef2588c376c45647ac004582cb5bc8cc09ef84420b26bfb490f4d0818d328e78569c6228e20d90271283f73ba + languageName: node + linkType: hard + "minimatch@npm:^3.0.3, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -9588,29 +9975,28 @@ __metadata: languageName: node linkType: hard -"next@npm:15.2.4": - version: 15.2.4 - resolution: "next@npm:15.2.4" +"next@npm:latest": + version: 16.2.4 + resolution: "next@npm:16.2.4" dependencies: - "@next/env": 15.2.4 - "@next/swc-darwin-arm64": 15.2.4 - "@next/swc-darwin-x64": 15.2.4 - "@next/swc-linux-arm64-gnu": 15.2.4 - "@next/swc-linux-arm64-musl": 15.2.4 - "@next/swc-linux-x64-gnu": 15.2.4 - "@next/swc-linux-x64-musl": 15.2.4 - "@next/swc-win32-arm64-msvc": 15.2.4 - "@next/swc-win32-x64-msvc": 15.2.4 - "@swc/counter": 0.1.3 + "@next/env": 16.2.4 + "@next/swc-darwin-arm64": 16.2.4 + "@next/swc-darwin-x64": 16.2.4 + "@next/swc-linux-arm64-gnu": 16.2.4 + "@next/swc-linux-arm64-musl": 16.2.4 + "@next/swc-linux-x64-gnu": 16.2.4 + "@next/swc-linux-x64-musl": 16.2.4 + "@next/swc-win32-arm64-msvc": 16.2.4 + "@next/swc-win32-x64-msvc": 16.2.4 "@swc/helpers": 0.5.15 - busboy: 1.6.0 + baseline-browser-mapping: ^2.9.19 caniuse-lite: ^1.0.30001579 postcss: 8.4.31 - sharp: ^0.33.5 + sharp: ^0.34.5 styled-jsx: 5.1.6 peerDependencies: "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.41.2 + "@playwright/test": ^1.51.1 babel-plugin-react-compiler: "*" react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 @@ -9645,7 +10031,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: a235fbe6a77e7b81ea8d9372a85ce02a1e1ecc5666b19f60b071acaa3135bf42fa4a29ad616257e3a2e60fadb9400cb4041da0e8217d46c76d7703c197896bd4 + checksum: da8eb428487802fbf6161fbcb09bc1465089a6dc03f6610b45145f4916fd667e70ee8fb804708494ecdbc3dae186556636cb8b5a2242b2d9e5d81a1f1e7a1ee9 languageName: node linkType: hard @@ -10077,6 +10463,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.4": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 76b387b5157951422fa6049a96bdd1695e39dd126cd99df34d343638dc5cdb8bcdc83fff288c23eddcf7c26657c35e3173d4d5f488c4f28b889b314472e0a662 + languageName: node + linkType: hard + "pidtree@npm:0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" @@ -11302,7 +11695,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.6.0, semver@npm:^7.6.3, semver@npm:^7.7.1": +"semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.6.0, semver@npm:^7.7.1": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -11311,6 +11704,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.3": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 9b4a6a58e98b9723fafcafa393c9d4e8edefaa60b8dfbe39e30892a3604cf1f45f52df9cfb1ae1a22b44c8b3d57fec8a9bb7b3e1645431587cb272399ede152e + languageName: node + linkType: hard + "set-function-length@npm:^1.2.2": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -11348,32 +11750,37 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.33.5": - version: 0.33.5 - resolution: "sharp@npm:0.33.5" - dependencies: - "@img/sharp-darwin-arm64": 0.33.5 - "@img/sharp-darwin-x64": 0.33.5 - "@img/sharp-libvips-darwin-arm64": 1.0.4 - "@img/sharp-libvips-darwin-x64": 1.0.4 - "@img/sharp-libvips-linux-arm": 1.0.5 - "@img/sharp-libvips-linux-arm64": 1.0.4 - "@img/sharp-libvips-linux-s390x": 1.0.4 - "@img/sharp-libvips-linux-x64": 1.0.4 - "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 - "@img/sharp-libvips-linuxmusl-x64": 1.0.4 - "@img/sharp-linux-arm": 0.33.5 - "@img/sharp-linux-arm64": 0.33.5 - "@img/sharp-linux-s390x": 0.33.5 - "@img/sharp-linux-x64": 0.33.5 - "@img/sharp-linuxmusl-arm64": 0.33.5 - "@img/sharp-linuxmusl-x64": 0.33.5 - "@img/sharp-wasm32": 0.33.5 - "@img/sharp-win32-ia32": 0.33.5 - "@img/sharp-win32-x64": 0.33.5 - color: ^4.2.3 - detect-libc: ^2.0.3 - semver: ^7.6.3 +"sharp@npm:^0.34.5": + version: 0.34.5 + resolution: "sharp@npm:0.34.5" + dependencies: + "@img/colour": ^1.0.0 + "@img/sharp-darwin-arm64": 0.34.5 + "@img/sharp-darwin-x64": 0.34.5 + "@img/sharp-libvips-darwin-arm64": 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + "@img/sharp-linux-arm": 0.34.5 + "@img/sharp-linux-arm64": 0.34.5 + "@img/sharp-linux-ppc64": 0.34.5 + "@img/sharp-linux-riscv64": 0.34.5 + "@img/sharp-linux-s390x": 0.34.5 + "@img/sharp-linux-x64": 0.34.5 + "@img/sharp-linuxmusl-arm64": 0.34.5 + "@img/sharp-linuxmusl-x64": 0.34.5 + "@img/sharp-wasm32": 0.34.5 + "@img/sharp-win32-arm64": 0.34.5 + "@img/sharp-win32-ia32": 0.34.5 + "@img/sharp-win32-x64": 0.34.5 + detect-libc: ^2.1.2 + semver: ^7.7.3 dependenciesMeta: "@img/sharp-darwin-arm64": optional: true @@ -11387,6 +11794,10 @@ __metadata: optional: true "@img/sharp-libvips-linux-arm64": optional: true + "@img/sharp-libvips-linux-ppc64": + optional: true + "@img/sharp-libvips-linux-riscv64": + optional: true "@img/sharp-libvips-linux-s390x": optional: true "@img/sharp-libvips-linux-x64": @@ -11399,6 +11810,10 @@ __metadata: optional: true "@img/sharp-linux-arm64": optional: true + "@img/sharp-linux-ppc64": + optional: true + "@img/sharp-linux-riscv64": + optional: true "@img/sharp-linux-s390x": optional: true "@img/sharp-linux-x64": @@ -11409,11 +11824,13 @@ __metadata: optional: true "@img/sharp-wasm32": optional: true + "@img/sharp-win32-arm64": + optional: true "@img/sharp-win32-ia32": optional: true "@img/sharp-win32-x64": optional: true - checksum: 04beae89910ac65c5f145f88de162e8466bec67705f497ace128de849c24d168993e016f33a343a1f3c30b25d2a90c3e62b017a9a0d25452371556f6cd2471e4 + checksum: b86972729697af7e37c96714cd9c5c2470c6b503a79d5b38f6fd3eb4d5a46b20d7c15dae1a73db3d0e0aa605d517f2f66d4f52de7496bfb037dd7feb930c1899 languageName: node linkType: hard @@ -11495,15 +11912,6 @@ __metadata: languageName: node linkType: hard -"simple-swizzle@npm:^0.2.2": - version: 0.2.4 - resolution: "simple-swizzle@npm:0.2.4" - dependencies: - is-arrayish: ^0.3.1 - checksum: 9a2f6f39a6b9fab68f96903523bf19953ec21e5e843108154cf47a9cc0f78955dd44f64499ffb71a849ac10c758d9fab7533627c7ca3ab40b5c177117acfdc1b - languageName: node - linkType: hard - "sirv@npm:^2.0.3": version: 2.0.4 resolution: "sirv@npm:2.0.4" @@ -11643,13 +12051,6 @@ __metadata: languageName: node linkType: hard -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 - languageName: node - linkType: hard - "string-argv@npm:0.3.2": version: 0.3.2 resolution: "string-argv@npm:0.3.2" @@ -11956,7 +12357,7 @@ __metadata: "@eslint/eslintrc": ^3.2.0 "@eslint/js": ^9.16.0 "@headlessui/react": 2.2.0 - "@next/bundle-analyzer": 15.2.4 + "@next/bundle-analyzer": latest "@svgr/webpack": ^8.0.1 "@tailwindcss/forms": ^0.5.9 "@tailwindcss/postcss": ^4.0.5 @@ -11970,7 +12371,7 @@ __metadata: cross-env: ^7.0.3 esbuild: 0.25.2 eslint: ^9.14.0 - eslint-config-next: 15.2.4 + eslint-config-next: latest eslint-config-prettier: ^9.1.0 eslint-plugin-prettier: ^5.2.0 github-slugger: ^2.0.0 @@ -11980,7 +12381,7 @@ __metadata: husky: ^9.0.0 image-size: 2.0.1 lint-staged: ^13.0.0 - next: 15.2.4 + next: latest next-contentlayer2: 0.5.5 next-themes: ^0.4.6 pliny: 0.4.1 @@ -12070,6 +12471,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.15": + version: 0.2.16 + resolution: "tinyglobby@npm:0.2.16" + dependencies: + fdir: ^6.5.0 + picomatch: ^4.0.4 + checksum: db9d22ce1deb1095720a683c492cd5e80da0f71fed21ed697e2752f6f298edd8a1249dab197c86a26f001c180594a81bf532400fe519791ed2a2cb57b03bc337 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -12132,6 +12543,15 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^2.5.0": + version: 2.5.0 + resolution: "ts-api-utils@npm:2.5.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 5b2a2db7aa041d60b040df691ee5e73d534fb4cb3cf4fd6d2c27c584a32836a7ca8272fb23d865e673559ea639fdba35f8623249bf931df22188f0aaef7f0075 + languageName: node + linkType: hard + "ts-pattern@npm:^5.0.6": version: 5.8.0 resolution: "ts-pattern@npm:5.8.0" @@ -12241,6 +12661,21 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.46.0": + version: 8.59.0 + resolution: "typescript-eslint@npm:8.59.0" + dependencies: + "@typescript-eslint/eslint-plugin": 8.59.0 + "@typescript-eslint/parser": 8.59.0 + "@typescript-eslint/typescript-estree": 8.59.0 + "@typescript-eslint/utils": 8.59.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + checksum: 237434d20233a29ac434bcad9d81130a13abf0d1c09854dde23603a5e9dda328f8b75e90a81475ed1bcb6b7890f3390f32f75090ee89b65fcc906bc416e1896e + languageName: node + linkType: hard + "typescript@npm:^5.1.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" @@ -12867,6 +13302,15 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^3.5.0 || ^4.0.0": + version: 4.0.2 + resolution: "zod-validation-error@npm:4.0.2" + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + checksum: f16ccbc08c5345f28788beea814d82e1f047978414f1511bd97a171580d7dbe63cecc368caa352c1391e201539288c241d61145e57c6b84cb19112dc88a72098 + languageName: node + linkType: hard + "zod@npm:^3.22.4": version: 3.25.76 resolution: "zod@npm:3.25.76" @@ -12874,6 +13318,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.25.0 || ^4.0.0": + version: 4.3.6 + resolution: "zod@npm:4.3.6" + checksum: 19cec761b46bae4b6e7e861ea740f3f248e50a6671825afc8a5758e27b35d6f20ccde9942422fd5cf6f8b697f18bd05ef8bb33f5f2db112ab25cc628de2fae47 + languageName: node + linkType: hard + "zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": version: 2.0.4 resolution: "zwitch@npm:2.0.4"