mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-12 10:21:39 +00:00
Compare commits
9 Commits
shadcn@4.1
...
shadcn/rep
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
01b72a39ba | ||
|
|
2be26ddbb7 | ||
|
|
cef302ad5a | ||
|
|
1994caba0b | ||
|
|
1450bea8d6 | ||
|
|
ced2a5beb5 | ||
|
|
10f1717a3e | ||
|
|
deba036d50 | ||
|
|
5bd81beebf |
5
.changeset/lazy-buttons-fetch.md
Normal file
5
.changeset/lazy-buttons-fetch.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"shadcn": patch
|
||||
---
|
||||
|
||||
replace node-fetch with native fetch
|
||||
@@ -284,6 +284,14 @@
|
||||
}
|
||||
}
|
||||
|
||||
[data-rehype-pretty-code-figure] code,
|
||||
[data-rehype-pretty-code-figure] code span {
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings:
|
||||
"liga" 0,
|
||||
"calt" 0;
|
||||
}
|
||||
|
||||
[data-rehype-pretty-code-title] {
|
||||
border-bottom: color-mix(in oklab, var(--border) 30%, transparent);
|
||||
border-bottom-width: 1px;
|
||||
|
||||
422
apps/v4/content/docs/registry/api-reference.mdx
Normal file
422
apps/v4/content/docs/registry/api-reference.mdx
Normal file
@@ -0,0 +1,422 @@
|
||||
---
|
||||
title: API Reference
|
||||
description: Programmatic API for working with registries, schemas and presets.
|
||||
---
|
||||
|
||||
The `shadcn` package exposes a set of programmatic APIs in addition to the CLI.
|
||||
You can use these to fetch and resolve registry items, validate registry JSON,
|
||||
and build custom tooling on top of the registry.
|
||||
|
||||
Each API is available under a dedicated subpath import.
|
||||
|
||||
```ts
|
||||
import { getRegistryItems } from "shadcn/registry"
|
||||
import { registryItemSchema } from "shadcn/schema"
|
||||
```
|
||||
|
||||
<Callout className="mt-6">
|
||||
The CLI commands themselves are not part of the public API. Only the imports
|
||||
documented below are considered stable.
|
||||
</Callout>
|
||||
|
||||
## shadcn/registry
|
||||
|
||||
Fetch and resolve items from configured registries.
|
||||
|
||||
Most functions accept an options object. The two options below are common to all
|
||||
of them. In the examples that follow, `config` refers to this optional value —
|
||||
omit it to use the built-in registries.
|
||||
|
||||
### config
|
||||
|
||||
- **Type:** `Partial<Config>`
|
||||
- **Default:** built-in registries only
|
||||
|
||||
The resolved contents of your `components.json` file. Its `registries` field
|
||||
maps a namespace (e.g. `@acme`) to a URL and any authentication headers or
|
||||
environment variables required to reach it.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { getRegistryItems } from "shadcn/registry"
|
||||
|
||||
const items = await getRegistryItems(["@acme/login-form"], {
|
||||
config: {
|
||||
registries: {
|
||||
"@acme": "https://acme.com/r/{name}.json",
|
||||
},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
### useCache
|
||||
|
||||
- **Type:** `boolean`
|
||||
- **Default:** `true`
|
||||
|
||||
Registry responses are cached **in memory for the lifetime of the process**,
|
||||
keyed by the resolved URL. Because the in-flight promise is cached, concurrent
|
||||
requests for the same URL are de-duplicated into a single fetch.
|
||||
|
||||
Leave this enabled for one-off scripts and CLI runs. Set it to `false` in
|
||||
long-running processes (servers, watchers, the MCP server) where the registry
|
||||
can change between requests and you need fresh data each time.
|
||||
|
||||
```ts
|
||||
const fresh = await getRegistry("@shadcn", { useCache: false })
|
||||
```
|
||||
|
||||
### getRegistry
|
||||
|
||||
Fetch a single registry by name.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { getRegistry } from "shadcn/registry"
|
||||
|
||||
const registry = await getRegistry("@acme", {
|
||||
config, // optional Partial<Config>
|
||||
useCache: true,
|
||||
})
|
||||
```
|
||||
|
||||
### getRegistryItems
|
||||
|
||||
Fetch one or more registry items by their qualified names.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { getRegistryItems } from "shadcn/registry"
|
||||
|
||||
const items = await getRegistryItems(["@acme/button", "@acme/card"], {
|
||||
config,
|
||||
useCache: true,
|
||||
})
|
||||
```
|
||||
|
||||
Returns an array of registry items:
|
||||
|
||||
```json showLineNumbers
|
||||
[
|
||||
{
|
||||
"name": "button",
|
||||
"type": "registry:ui",
|
||||
"dependencies": ["@radix-ui/react-slot"],
|
||||
"files": [
|
||||
{
|
||||
"path": "ui/button.tsx",
|
||||
"type": "registry:ui",
|
||||
"content": "..."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### resolveRegistryItems
|
||||
|
||||
Resolve multiple items together with their registry dependencies, merged into a
|
||||
single tree. Unlike [`getRegistryItems`](#getregistryitems), which returns the
|
||||
items as a list, this walks each item's `registryDependencies` and flattens
|
||||
everything — files, dependencies, CSS variables — into one installable object.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { resolveRegistryItems } from "shadcn/registry"
|
||||
|
||||
const tree = await resolveRegistryItems(
|
||||
["@acme/button", "@acme/card", "@acme/dialog"],
|
||||
{ config }
|
||||
)
|
||||
```
|
||||
|
||||
Returns a single merged tree:
|
||||
|
||||
```json showLineNumbers
|
||||
{
|
||||
"dependencies": ["@radix-ui/react-slot", "@radix-ui/react-dialog"],
|
||||
"files": [
|
||||
{ "path": "ui/button.tsx", "type": "registry:ui", "content": "..." },
|
||||
{ "path": "ui/card.tsx", "type": "registry:ui", "content": "..." },
|
||||
{ "path": "ui/dialog.tsx", "type": "registry:ui", "content": "..." }
|
||||
],
|
||||
"cssVars": {
|
||||
"theme": {
|
||||
"font-heading": "Poppins, sans-serif"
|
||||
},
|
||||
"light": {
|
||||
"brand": "oklch(0.205 0.015 18)"
|
||||
},
|
||||
"dark": {
|
||||
"brand": "oklch(0.205 0.015 18)"
|
||||
}
|
||||
},
|
||||
"docs": ""
|
||||
}
|
||||
```
|
||||
|
||||
### getRegistries
|
||||
|
||||
Fetch the registry directory.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { getRegistries } from "shadcn/registry"
|
||||
|
||||
const registries = await getRegistries({ useCache: true })
|
||||
```
|
||||
|
||||
Returns an array of registry entries:
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "@shadcn",
|
||||
"url": "https://ui.shadcn.com/r/{name}.json",
|
||||
"homepage": "https://ui.shadcn.com"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### searchRegistries
|
||||
|
||||
Search across one or more registries with fuzzy matching.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { searchRegistries } from "shadcn/registry"
|
||||
|
||||
const results = await searchRegistries(["@shadcn"], {
|
||||
query: "button",
|
||||
types: ["registry:component"],
|
||||
limit: 100,
|
||||
offset: 0,
|
||||
config,
|
||||
continueOnError: true, // skip (don't throw on) registries that fail to load
|
||||
})
|
||||
```
|
||||
|
||||
Returns matching items wrapped in pagination metadata:
|
||||
|
||||
```json
|
||||
{
|
||||
"pagination": { "total": 1, "offset": 0, "limit": 100, "hasMore": false },
|
||||
"items": [
|
||||
{
|
||||
"name": "button",
|
||||
"type": "registry:ui",
|
||||
"description": "A button component.",
|
||||
"registry": "@shadcn",
|
||||
"addCommandArgument": "@shadcn/button"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### loadRegistry
|
||||
|
||||
Read and resolve a local `registry.json` file from disk, following any
|
||||
`include` references, and return the registry catalog.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { loadRegistry } from "shadcn/registry"
|
||||
|
||||
const catalog = await loadRegistry({
|
||||
cwd: process.cwd(), // defaults to process.cwd()
|
||||
registryFile: "registry.json", // defaults to "registry.json"
|
||||
})
|
||||
```
|
||||
|
||||
The returned catalog lists every item but **omits file contents** — like a
|
||||
built `registry.json` index.
|
||||
|
||||
<Callout className="mt-6" title="How is this different from getRegistry?">
|
||||
[`getRegistry`](#getregistry) fetches a **remote** registry over the network
|
||||
(by namespace, URL or GitHub address) and expects the served catalog to
|
||||
already be flattened — it rejects catalogs that still use `include`.
|
||||
`loadRegistry` reads a **local** `registry.json` from disk and resolves
|
||||
`include` references itself.
|
||||
</Callout>
|
||||
|
||||
### loadRegistryItem
|
||||
|
||||
Read a single item from a local `registry.json` by name, with its file contents
|
||||
read from disk and inlined.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { loadRegistryItem } from "shadcn/registry"
|
||||
|
||||
const item = await loadRegistryItem("login-form", { cwd: process.cwd() })
|
||||
```
|
||||
|
||||
Returns a fully resolved registry item with file contents:
|
||||
|
||||
```json
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
||||
"name": "login-form",
|
||||
"type": "registry:component",
|
||||
"files": [
|
||||
{
|
||||
"path": "registry/new-york/login-form.tsx",
|
||||
"type": "registry:component",
|
||||
"content": "..."
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
<Callout className="mt-6" title="How is this different from getRegistryItems?">
|
||||
[`getRegistryItems`](#getregistryitems) resolves items from a **remote**
|
||||
registry over the network. `loadRegistryItem` builds a single item on demand
|
||||
from your **local** source files, reading each file from disk. Use it in a
|
||||
dynamic route that serves `registry-item.json` responses.
|
||||
</Callout>
|
||||
|
||||
### Errors
|
||||
|
||||
All registry functions throw typed errors that extend `RegistryError`. Use the
|
||||
`RegistryErrorCode` enum or `instanceof` checks to handle them.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { RegistryError, RegistryNotFoundError } from "shadcn/registry"
|
||||
|
||||
try {
|
||||
await getRegistry("@unknown")
|
||||
} catch (error) {
|
||||
if (error instanceof RegistryNotFoundError) {
|
||||
// handle missing registry
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Available error classes:
|
||||
|
||||
- `RegistryError`
|
||||
- `RegistryNotFoundError`
|
||||
- `RegistryUnauthorizedError`
|
||||
- `RegistryForbiddenError`
|
||||
- `RegistryFetchError`
|
||||
- `RegistryNotConfiguredError`
|
||||
- `RegistryLocalFileError`
|
||||
- `RegistryParseError`
|
||||
- `RegistryValidationError`
|
||||
- `RegistryItemNotFoundError`
|
||||
- `RegistriesIndexParseError`
|
||||
- `RegistryMissingEnvironmentVariablesError`
|
||||
- `RegistryInvalidNamespaceError`
|
||||
|
||||
## shadcn/schema
|
||||
|
||||
The Zod schemas used to validate `registry.json`, `registry-item.json` and
|
||||
`components.json`. Useful for validating registry data in your own tooling.
|
||||
|
||||
```ts
|
||||
import { registryItemSchema, registrySchema } from "shadcn/schema"
|
||||
|
||||
const result = registryItemSchema.safeParse(json)
|
||||
if (!result.success) {
|
||||
console.error(result.error)
|
||||
}
|
||||
```
|
||||
|
||||
Key schemas:
|
||||
|
||||
- `registrySchema`
|
||||
- `registryItemSchema`
|
||||
- `registryItemFileSchema`
|
||||
- `registryItemTypeSchema`
|
||||
- `registryItemCssVarsSchema`
|
||||
- `registryItemTailwindSchema`
|
||||
- `registryBaseColorSchema`
|
||||
- `configSchema`
|
||||
- `presetSchema`
|
||||
|
||||
Inferred types are exported alongside them:
|
||||
|
||||
- `Registry`
|
||||
- `RegistryItem`
|
||||
- `RegistryBaseItem`
|
||||
- `RegistryFontItem`
|
||||
- `Preset`
|
||||
- `ConfigJson`
|
||||
|
||||
## shadcn/preset
|
||||
|
||||
Encode, decode and validate theme presets, plus the preset option constants used
|
||||
by the theme editor.
|
||||
|
||||
### encodePreset
|
||||
|
||||
Encode a `Partial<PresetConfig>` into a short, URL-safe preset code. Any fields
|
||||
you omit fall back to `DEFAULT_PRESET_CONFIG`.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { encodePreset } from "shadcn/preset"
|
||||
|
||||
const code = encodePreset({
|
||||
style: "vega",
|
||||
baseColor: "stone",
|
||||
theme: "blue",
|
||||
radius: "large",
|
||||
font: "geist",
|
||||
})
|
||||
```
|
||||
|
||||
Returns a version-prefixed string:
|
||||
|
||||
```ts showLineNumbers
|
||||
"bJ4FLU0"
|
||||
```
|
||||
|
||||
### decodePreset
|
||||
|
||||
Decode a preset code back into a full `PresetConfig`. Returns `null` if the code
|
||||
is missing or invalid.
|
||||
|
||||
```ts showLineNumbers
|
||||
import { decodePreset } from "shadcn/preset"
|
||||
|
||||
const config = decodePreset("bJ4FLU0")
|
||||
```
|
||||
|
||||
Returns the resolved config (omitted fields are filled with their defaults):
|
||||
|
||||
```json
|
||||
{
|
||||
"style": "vega",
|
||||
"baseColor": "stone",
|
||||
"theme": "blue",
|
||||
"chartColor": "neutral",
|
||||
"iconLibrary": "lucide",
|
||||
"font": "geist",
|
||||
"fontHeading": "inherit",
|
||||
"radius": "large",
|
||||
"menuAccent": "subtle",
|
||||
"menuColor": "default"
|
||||
}
|
||||
```
|
||||
|
||||
```ts
|
||||
decodePreset("not-a-code") // null
|
||||
```
|
||||
|
||||
### Other exports
|
||||
|
||||
Additional functions for validating codes and generating random presets:
|
||||
|
||||
- `isPresetCode`
|
||||
- `isValidPreset`
|
||||
- `generateRandomConfig`
|
||||
- `generateRandomPreset`
|
||||
- `toBase62`
|
||||
- `fromBase62`
|
||||
|
||||
Constants:
|
||||
|
||||
- `PRESET_BASES`
|
||||
- `PRESET_STYLES`
|
||||
- `PRESET_BASE_COLORS`
|
||||
- `PRESET_THEMES`
|
||||
- `PRESET_ICON_LIBRARIES`
|
||||
- `PRESET_FONTS`
|
||||
- `PRESET_FONT_HEADINGS`
|
||||
- `PRESET_RADII`
|
||||
- `PRESET_MENU_ACCENTS`
|
||||
- `PRESET_MENU_COLORS`
|
||||
- `PRESET_CHART_COLORS`
|
||||
- `DEFAULT_PRESET_CONFIG`
|
||||
@@ -10,6 +10,7 @@
|
||||
"authentication",
|
||||
"mcp",
|
||||
"open-in-v0",
|
||||
"api-reference",
|
||||
"registry-json",
|
||||
"registry-item-json"
|
||||
]
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// This file is autogenerated by scripts/build-registry.mts
|
||||
// Do not edit this file directly.
|
||||
import "server-only"
|
||||
|
||||
import * as React from "react"
|
||||
|
||||
export const ExamplesIndex: Record<string, Record<string, any>> = {
|
||||
|
||||
@@ -29,9 +29,6 @@ const nextConfig = {
|
||||
turbopack: {
|
||||
root: path.resolve(import.meta.dirname, "../.."),
|
||||
},
|
||||
experimental: {
|
||||
turbopackFileSystemCacheForDev: true,
|
||||
},
|
||||
redirects() {
|
||||
return [
|
||||
// Form redirects to /docs/forms.
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache",
|
||||
"format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache",
|
||||
"icons:dev": "tsx --tsconfig ./tsconfig.scripts.json ./scripts/build-icons.ts --watch",
|
||||
"registry:build": "pnpm --filter=shadcn build && bun run ./scripts/build-registry.mts",
|
||||
"registry:capture": "tsx --tsconfig ./tsconfig.scripts.json ./scripts/capture-registry.mts",
|
||||
"registry:build": "pnpm --filter=shadcn build && bun --conditions=react-server run ./scripts/build-registry.mts",
|
||||
"registry:capture": "tsx --conditions=react-server --tsconfig ./tsconfig.scripts.json ./scripts/capture-registry.mts",
|
||||
"explore:capture": "tsx --tsconfig ./tsconfig.scripts.json ./scripts/capture-explore.mts",
|
||||
"validate:registries": "tsx --tsconfig ./tsconfig.scripts.json ./scripts/validate-registries.mts",
|
||||
"test:apps": "bun run ./scripts/build-test-app.mts",
|
||||
@@ -61,7 +61,7 @@
|
||||
"lru-cache": "^11.2.4",
|
||||
"lucide-react": "0.474.0",
|
||||
"motion": "^12.12.1",
|
||||
"next": "16.1.6",
|
||||
"next": "16.2.7",
|
||||
"next-themes": "0.4.6",
|
||||
"nuqs": "^2.8.9",
|
||||
"postcss": "^8.5.1",
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// @ts-nocheck
|
||||
// This file is autogenerated by scripts/build-registry.ts
|
||||
// Do not edit this file directly.
|
||||
import "server-only"
|
||||
|
||||
import * as React from "react"
|
||||
|
||||
export const Index: Record<string, Record<string, any>> = {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -61,7 +61,7 @@ function scanIconUsage() {
|
||||
function generateIconFiles(iconUsage: IconUsage) {
|
||||
const outputDir = path.join(process.cwd(), "registry/icons")
|
||||
|
||||
console.log("✓ Generated icon files:")
|
||||
const written: string[] = []
|
||||
|
||||
Object.entries(iconLibraries).forEach(([libraryName, config]) => {
|
||||
const icons = Array.from(iconUsage[libraryName as IconLibraryName]).sort()
|
||||
@@ -75,10 +75,25 @@ ${icons.map((icon) => `export { ${icon} } from "${config.export}"`).join("\n")}
|
||||
`
|
||||
|
||||
const filename = `__${libraryName}__.ts`
|
||||
fs.writeFileSync(path.join(outputDir, filename), content)
|
||||
const filepath = path.join(outputDir, filename)
|
||||
|
||||
console.log(` - ${config.title}: ${icons.length} icons`)
|
||||
// Skip unchanged files to avoid mtime bumps that trigger
|
||||
// unnecessary Turbopack invalidations in watch mode.
|
||||
if (
|
||||
fs.existsSync(filepath) &&
|
||||
fs.readFileSync(filepath, "utf-8") === content
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
fs.writeFileSync(filepath, content)
|
||||
written.push(` - ${config.title}: ${icons.length} icons`)
|
||||
})
|
||||
|
||||
if (written.length > 0) {
|
||||
console.log("✓ Generated icon files:")
|
||||
written.forEach((line) => console.log(line))
|
||||
}
|
||||
}
|
||||
|
||||
function main() {
|
||||
|
||||
@@ -1019,6 +1019,7 @@ async function buildExamplesIndex() {
|
||||
let index = `// @ts-nocheck
|
||||
// This file is autogenerated by scripts/build-registry.mts
|
||||
// Do not edit this file directly.
|
||||
import "server-only"
|
||||
import * as React from "react"
|
||||
|
||||
export const ExamplesIndex: Record<string, Record<string, any>> = {`
|
||||
@@ -1065,6 +1066,7 @@ async function buildRegistryIndex(styles: { name: string; title: string }[]) {
|
||||
let index = `// @ts-nocheck
|
||||
// This file is autogenerated by scripts/build-registry.ts
|
||||
// Do not edit this file directly.
|
||||
import "server-only"
|
||||
import * as React from "react"
|
||||
|
||||
export const Index: Record<string, Record<string, any>> = {`
|
||||
|
||||
10
package.json
10
package.json
@@ -17,8 +17,8 @@
|
||||
"registry:build": "pnpm --filter=v4 registry:build && pnpm lint:fix && pnpm format:write -- --loglevel silent",
|
||||
"registry:capture": "pnpm --filter=v4 registry:capture",
|
||||
"explore:capture": "pnpm --filter=v4 explore:capture",
|
||||
"dev": "turbo run dev --parallel",
|
||||
"shadcn:dev": "turbo --filter=shadcn dev",
|
||||
"dev": "turbo run dev",
|
||||
"shadcn:dev": "turbo run dev --filter=shadcn",
|
||||
"shadcn": "pnpm --filter=shadcn start:dev",
|
||||
"shadcn:prod": "pnpm --filter=shadcn start:prod",
|
||||
"shadcn:build": "pnpm --filter=shadcn build",
|
||||
@@ -37,7 +37,7 @@
|
||||
"pub:beta": "cd packages/shadcn && pnpm pub:beta",
|
||||
"pub:rc": "cd packages/shadcn && pnpm pub:rc",
|
||||
"pub:release": "cd packages/shadcn && pnpm pub:release",
|
||||
"test:dev": "turbo run test --filter=!shadcn-ui --force",
|
||||
"test:dev": "turbo run test --force",
|
||||
"test": "pnpm --filter=v4 registry:build && start-server-and-test v4:dev http://localhost:4000 test:dev",
|
||||
"validate:registries": "pnpm --filter=v4 validate:registries",
|
||||
"test:apps": "pnpm --filter=v4 test:apps"
|
||||
@@ -60,7 +60,7 @@
|
||||
"eslint": "^9.26.0",
|
||||
"eslint-config-next": "^15.0.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-turbo": "^1.9.9",
|
||||
"eslint-config-turbo": "^2.9.16",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-tailwindcss": "3.13.1",
|
||||
"motion": "^12.12.1",
|
||||
@@ -69,7 +69,7 @@
|
||||
"puppeteer": "^23.6.0",
|
||||
"tailwindcss": "^3.4.18",
|
||||
"tsx": "^4.1.4",
|
||||
"turbo": "^1.9.9",
|
||||
"turbo": "^2.9.16",
|
||||
"vite": "^7.3.2",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"vitest": "^2.1.9"
|
||||
|
||||
@@ -61,6 +61,9 @@
|
||||
}
|
||||
},
|
||||
"bin": "./dist/index.js",
|
||||
"engines": {
|
||||
"node": ">=20.18.1"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsup --watch",
|
||||
"build": "tsup",
|
||||
@@ -98,9 +101,7 @@
|
||||
"fast-glob": "^3.3.3",
|
||||
"fs-extra": "^11.3.1",
|
||||
"fuzzysort": "^3.1.0",
|
||||
"https-proxy-agent": "^7.0.6",
|
||||
"kleur": "^4.1.5",
|
||||
"node-fetch": "^3.3.2",
|
||||
"open": "^11.0.0",
|
||||
"ora": "^8.2.0",
|
||||
"postcss": "^8.5.6",
|
||||
@@ -111,6 +112,7 @@
|
||||
"tailwind-merge": "^3.0.1",
|
||||
"ts-morph": "^26.0.0",
|
||||
"tsconfig-paths": "^4.2.0",
|
||||
"undici": "^7.27.2",
|
||||
"validate-npm-package-name": "^7.0.1",
|
||||
"zod": "^3.24.1",
|
||||
"zod-to-json-schema": "^3.24.6"
|
||||
|
||||
@@ -12,15 +12,10 @@ import {
|
||||
RegistryParseError,
|
||||
RegistryUnauthorizedError,
|
||||
} from "@/src/registry/errors"
|
||||
import { fetchWithProxy } from "@/src/registry/proxy"
|
||||
import { registryItemSchema } from "@/src/schema"
|
||||
import { HttpsProxyAgent } from "https-proxy-agent"
|
||||
import fetch, { Headers } from "node-fetch"
|
||||
import { z } from "zod"
|
||||
|
||||
const agent = process.env.https_proxy
|
||||
? new HttpsProxyAgent(process.env.https_proxy)
|
||||
: undefined
|
||||
|
||||
const registryCache = new Map<string, Promise<any>>()
|
||||
|
||||
export function clearRegistryCache() {
|
||||
@@ -59,8 +54,7 @@ export async function fetchRegistry(
|
||||
requestHeaders.set(key, value)
|
||||
}
|
||||
|
||||
const response = await fetch(url, {
|
||||
agent,
|
||||
const response = await fetchWithProxy(url, {
|
||||
headers: requestHeaders,
|
||||
})
|
||||
|
||||
|
||||
@@ -5,21 +5,16 @@ import type {
|
||||
import { RegistryError, RegistrySourceFileError } from "@/src/registry/errors"
|
||||
import { resolveGitHubRef } from "@/src/registry/github-ref"
|
||||
import type { GitHubSource } from "@/src/registry/github-ref"
|
||||
import { fetchWithProxy } from "@/src/registry/proxy"
|
||||
import {
|
||||
loadRegistryCatalogFromSource,
|
||||
loadRegistryItemFromSource,
|
||||
} from "@/src/registry/source"
|
||||
import type { RegistrySourceReader } from "@/src/registry/source"
|
||||
import { HttpsProxyAgent } from "https-proxy-agent"
|
||||
import fetch, { Headers } from "node-fetch"
|
||||
|
||||
const GITHUB_RAW_URL = "https://raw.githubusercontent.com"
|
||||
const GITHUB_VALIDATION_CONCURRENCY = 8
|
||||
|
||||
const agent = process.env.https_proxy
|
||||
? new HttpsProxyAgent(process.env.https_proxy)
|
||||
: undefined
|
||||
|
||||
type GitHubItemAddress = Extract<ResolvedItemAddress, { scheme: "github" }>
|
||||
|
||||
type GitHubRegistryValidationDiagnostic = {
|
||||
@@ -180,10 +175,9 @@ async function fetchGitHubSourceFile(
|
||||
filePath: string,
|
||||
address: GitHubSource
|
||||
) {
|
||||
let response: Awaited<ReturnType<typeof fetch>>
|
||||
let response: Response
|
||||
try {
|
||||
response = await fetch(url, {
|
||||
agent,
|
||||
response = await fetchWithProxy(url, {
|
||||
headers: new Headers({
|
||||
"Accept-Encoding": "identity",
|
||||
"User-Agent": "shadcn",
|
||||
|
||||
60
packages/shadcn/src/registry/proxy.ts
Normal file
60
packages/shadcn/src/registry/proxy.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { EnvHttpProxyAgent } from "undici"
|
||||
|
||||
// Native fetch ignores the http.Agent-based `agent` option, so proxy support
|
||||
// goes through an undici dispatcher instead. EnvHttpProxyAgent honors
|
||||
// http_proxy, https_proxy and no_proxy (upper and lowercase).
|
||||
const proxyDispatcher =
|
||||
process.env.https_proxy ||
|
||||
process.env.HTTPS_PROXY ||
|
||||
process.env.http_proxy ||
|
||||
process.env.HTTP_PROXY
|
||||
? new EnvHttpProxyAgent()
|
||||
: undefined
|
||||
|
||||
export async function fetchWithProxy(url: string | URL, init?: RequestInit) {
|
||||
try {
|
||||
// The `dispatcher` option is supported by Node's fetch at runtime but
|
||||
// missing from the ambient RequestInit type, hence the cast.
|
||||
return await fetch(url, {
|
||||
...init,
|
||||
dispatcher: proxyDispatcher,
|
||||
} as RequestInit)
|
||||
} catch (error) {
|
||||
// Native fetch reports network failures as a generic "fetch failed"
|
||||
// TypeError with the actual reason buried in `cause`. The casts are
|
||||
// needed because the configured TS lib predates Error.cause.
|
||||
const cause =
|
||||
error instanceof TypeError
|
||||
? (error as TypeError & { cause?: unknown }).cause
|
||||
: undefined
|
||||
|
||||
if (cause) {
|
||||
const enriched = new Error(
|
||||
`Request to ${url} failed, reason: ${getFailureReason(cause)}`
|
||||
) as Error & { cause?: unknown }
|
||||
enriched.cause = cause
|
||||
throw enriched
|
||||
}
|
||||
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
function getFailureReason(cause: unknown): string {
|
||||
// Connection failures surface as an AggregateError with an empty message
|
||||
// and the per-address errors (e.g. ECONNREFUSED) in `errors`.
|
||||
if (cause instanceof Error && "errors" in cause) {
|
||||
const errors = (cause as Error & { errors: unknown }).errors
|
||||
if (Array.isArray(errors) && errors.length) {
|
||||
return getFailureReason(errors[0])
|
||||
}
|
||||
}
|
||||
|
||||
if (cause instanceof Error) {
|
||||
return (
|
||||
cause.message || (cause as NodeJS.ErrnoException).code || "unknown error"
|
||||
)
|
||||
}
|
||||
|
||||
return String(cause)
|
||||
}
|
||||
345
pnpm-lock.yaml
generated
345
pnpm-lock.yaml
generated
@@ -61,8 +61,8 @@ importers:
|
||||
specifier: ^8.8.0
|
||||
version: 8.10.2(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))
|
||||
eslint-config-turbo:
|
||||
specifier: ^1.9.9
|
||||
version: 1.13.4(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))
|
||||
specifier: ^2.9.16
|
||||
version: 2.9.16(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))(turbo@2.9.16)
|
||||
eslint-plugin-react:
|
||||
specifier: ^7.32.2
|
||||
version: 7.37.5(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))
|
||||
@@ -88,8 +88,8 @@ importers:
|
||||
specifier: ^4.1.4
|
||||
version: 4.20.3
|
||||
turbo:
|
||||
specifier: ^1.9.9
|
||||
version: 1.13.4
|
||||
specifier: ^2.9.16
|
||||
version: 2.9.16
|
||||
vite:
|
||||
specifier: ^7.3.2
|
||||
version: 7.3.2(@types/node@20.19.10)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)
|
||||
@@ -177,7 +177,7 @@ importers:
|
||||
version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
'@vercel/analytics':
|
||||
specifier: ^1.4.1
|
||||
version: 1.5.0(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
|
||||
version: 1.5.0(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
|
||||
change-case:
|
||||
specifier: ^5.4.4
|
||||
version: 5.4.4
|
||||
@@ -210,16 +210,16 @@ importers:
|
||||
version: 4.0.2
|
||||
fumadocs-core:
|
||||
specifier: 16.0.5
|
||||
version: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
version: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
fumadocs-docgen:
|
||||
specifier: 2.0.0
|
||||
version: 2.0.0
|
||||
fumadocs-mdx:
|
||||
specifier: 13.0.2
|
||||
version: 13.0.2(fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1))
|
||||
version: 13.0.2(fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1))
|
||||
fumadocs-ui:
|
||||
specifier: 16.0.5
|
||||
version: 16.0.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18)
|
||||
version: 16.0.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18)
|
||||
input-otp:
|
||||
specifier: ^1.4.2
|
||||
version: 1.4.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
@@ -242,14 +242,14 @@ importers:
|
||||
specifier: ^12.12.1
|
||||
version: 12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next:
|
||||
specifier: 16.1.6
|
||||
version: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
specifier: 16.2.7
|
||||
version: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next-themes:
|
||||
specifier: 0.4.6
|
||||
version: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
nuqs:
|
||||
specifier: ^2.8.9
|
||||
version: 2.8.9(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
|
||||
version: 2.8.9(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)
|
||||
postcss:
|
||||
specifier: ^8.5.1
|
||||
version: 8.5.6
|
||||
@@ -428,15 +428,9 @@ importers:
|
||||
fuzzysort:
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0
|
||||
https-proxy-agent:
|
||||
specifier: ^7.0.6
|
||||
version: 7.0.6
|
||||
kleur:
|
||||
specifier: ^4.1.5
|
||||
version: 4.1.5
|
||||
node-fetch:
|
||||
specifier: ^3.3.2
|
||||
version: 3.3.2
|
||||
open:
|
||||
specifier: ^11.0.0
|
||||
version: 11.0.0
|
||||
@@ -467,6 +461,9 @@ importers:
|
||||
tsconfig-paths:
|
||||
specifier: ^4.2.0
|
||||
version: 4.2.0
|
||||
undici:
|
||||
specifier: ^7.27.2
|
||||
version: 7.27.2
|
||||
validate-npm-package-name:
|
||||
specifier: ^7.0.1
|
||||
version: 7.0.1
|
||||
@@ -534,7 +531,7 @@ importers:
|
||||
version: 5.9.2
|
||||
vite-tsconfig-paths:
|
||||
specifier: ^4.2.0
|
||||
version: 4.3.2(typescript@5.9.2)(vite@5.4.19(@types/node@20.19.10)(lightningcss@1.30.2))
|
||||
version: 4.3.2(typescript@5.9.2)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1))
|
||||
vitest:
|
||||
specifier: ^2.1.9
|
||||
version: 2.1.9(@types/node@20.19.10)(lightningcss@1.30.2)(msw@2.10.4(@types/node@20.19.10)(typescript@5.9.2))
|
||||
@@ -1948,8 +1945,8 @@ packages:
|
||||
'@napi-rs/wasm-runtime@0.2.12':
|
||||
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
|
||||
|
||||
'@next/env@16.1.6':
|
||||
resolution: {integrity: sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==}
|
||||
'@next/env@16.2.7':
|
||||
resolution: {integrity: sha512-tMJizPlj6ZYpBMMdK8S0LJufrP4QTdR6pcv9KQ/bVETPAmg0j1mlHE9G2c38UyGHxoBapgwuj7XjbGJ2RcDFOg==}
|
||||
|
||||
'@next/eslint-plugin-next@15.5.11':
|
||||
resolution: {integrity: sha512-tS/HYQOjIoX9ZNDQitba/baS8sTvo3ekY6Vgdx5lmhN4jov082bdApIChXr94qhMZHvEciz9DZglFFnhguQp/A==}
|
||||
@@ -1957,54 +1954,54 @@ packages:
|
||||
'@next/eslint-plugin-next@16.0.0':
|
||||
resolution: {integrity: sha512-IB7RzmmtrPOrpAgEBR1PIQPD0yea5lggh5cq54m51jHjjljU80Ia+czfxJYMlSDl1DPvpzb8S9TalCc0VMo9Hw==}
|
||||
|
||||
'@next/swc-darwin-arm64@16.1.6':
|
||||
resolution: {integrity: sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==}
|
||||
'@next/swc-darwin-arm64@16.2.7':
|
||||
resolution: {integrity: sha512-vm1EDI/pVaBNNiychmxk3fft+OhQPVD9cIM/tReLZIQ3TfQ4kqI9DwKk00dzuS1ulC7icbrzCFrmRRlk9PfNdw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-darwin-x64@16.1.6':
|
||||
resolution: {integrity: sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==}
|
||||
'@next/swc-darwin-x64@16.2.7':
|
||||
resolution: {integrity: sha512-O3IRSv1ZBL1zs0WrIgefTEcTKFVn+ryxBNe54erJ6KsD+2f/Mmt7g2jOYh8PSBdUwPtKQJuCsTMlZ7tIu2AcsQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-linux-arm64-gnu@16.1.6':
|
||||
resolution: {integrity: sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==}
|
||||
'@next/swc-linux-arm64-gnu@16.2.7':
|
||||
resolution: {integrity: sha512-Re6PZtjBDd0aMU+VcZcC/PrIvj4WhrjDYtMhhCVQamWN4L90EVP0pcEOBQD25prSlw7OzNw5QpHLWMilRLsRNw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@next/swc-linux-arm64-musl@16.1.6':
|
||||
resolution: {integrity: sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==}
|
||||
'@next/swc-linux-arm64-musl@16.2.7':
|
||||
resolution: {integrity: sha512-qyogG9QtBzWxgJfeGBvOEHI3851gTfCF3wLZ5RDLTBJGAmE9p1qDwKCOdrBrvBzRvYDT+gUDp72pzlSEfAXgNA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@next/swc-linux-x64-gnu@16.1.6':
|
||||
resolution: {integrity: sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==}
|
||||
'@next/swc-linux-x64-gnu@16.2.7':
|
||||
resolution: {integrity: sha512-Vhe4ZDuBpmMogrGi5D4R2Kq4JAQlj6+wvgaFYy31zfES0zPmt6TLA+cuYpM/OLrPZjo2MYQTHVqNUSCR6+fDZQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [glibc]
|
||||
|
||||
'@next/swc-linux-x64-musl@16.1.6':
|
||||
resolution: {integrity: sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==}
|
||||
'@next/swc-linux-x64-musl@16.2.7':
|
||||
resolution: {integrity: sha512-srvian89JahFLw1YLBEuhvPJ0DO5lpUeJQMXy4xYo7g628ZlNgXdNkqoxSAv9OYrBfByh6vxISMwW/mRbzCY+g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
libc: [musl]
|
||||
|
||||
'@next/swc-win32-arm64-msvc@16.1.6':
|
||||
resolution: {integrity: sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==}
|
||||
'@next/swc-win32-arm64-msvc@16.2.7':
|
||||
resolution: {integrity: sha512-GX3wvLpULFuRFJzwHaKfm7QZJ18F4ZSuxlPJ96BoBglCzBmdSjyeBKF+ZhWhvL/ckxNfLnNa7bsObO2ipYpszw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@next/swc-win32-x64-msvc@16.1.6':
|
||||
resolution: {integrity: sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==}
|
||||
'@next/swc-win32-x64-msvc@16.2.7':
|
||||
resolution: {integrity: sha512-J4WlM72NMk076Qsg0jTdK3SNXatlSdnjW7L7oNGLst1tAGjHrJh/FYi+pw9wyIjEtGRKDNzD0zuiY16oWYWVaw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
@@ -3361,6 +3358,36 @@ packages:
|
||||
'@ts-morph/common@0.27.0':
|
||||
resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==}
|
||||
|
||||
'@turbo/darwin-64@2.9.16':
|
||||
resolution: {integrity: sha512-jLjApWTSNd7JZ5JaLYfelW1ytnGQOvB7ivl+2RD1xQvJTbi8I9gBjzcga7tDZVPyaxpl10YTfJt3BrYXR18KDw==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@turbo/darwin-arm64@2.9.16':
|
||||
resolution: {integrity: sha512-YPgrn+5HIGzrx0O2a631SV4MBQUe4W/DafMFUuBVgaU32PW9/OTT0ehviF0QSxTXuRJlHvW2eUTemddF5/spmw==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@turbo/linux-64@2.9.16':
|
||||
resolution: {integrity: sha512-vAEf1H6l26lTpl9FJ/peQo1NUB8RC0sbEJJz5mPcUhHA2bPDup2x3CZPgo/bH8S4cUcBLm4FN3UHd5iUO2RAew==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@turbo/linux-arm64@2.9.16':
|
||||
resolution: {integrity: sha512-xDBLR2PZg4BrQOchfG6svgpv5FCNJ2TOtT2psLdEJcdKo1BH+pnPs9Xj6pvUjgfkHbuvBOfeE4R6tvxMoQKDHQ==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@turbo/windows-64@2.9.16':
|
||||
resolution: {integrity: sha512-NBAJnaUiGdgkSzQwUIdOvkCkcpTSu58G/sBGa0mvBtzfvFOOgrQwepKOOQ8cp6sWM6OcKDNFj2p1dsZA1OWjPg==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@turbo/windows-arm64@2.9.16':
|
||||
resolution: {integrity: sha512-Y7SJppD0Z8wjO3Ec0ZGd9KQ4Yv0BMnA8CIowj5Vp+OEVsosXDG2weK6/t1RRLfJmc2Ozrnd6y4DOgQys+mn3WQ==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@tybys/wasm-util@0.10.0':
|
||||
resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==}
|
||||
|
||||
@@ -4459,10 +4486,6 @@ packages:
|
||||
resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
data-uri-to-buffer@4.0.1:
|
||||
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
|
||||
engines: {node: '>= 12'}
|
||||
|
||||
data-uri-to-buffer@6.0.2:
|
||||
resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
|
||||
engines: {node: '>= 14'}
|
||||
@@ -4841,10 +4864,11 @@ packages:
|
||||
peerDependencies:
|
||||
eslint: '>=7.0.0'
|
||||
|
||||
eslint-config-turbo@1.13.4:
|
||||
resolution: {integrity: sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==}
|
||||
eslint-config-turbo@2.9.16:
|
||||
resolution: {integrity: sha512-tIbnu6/rIZQzSFcGvocqP0LD97jirVVg235ohRfEiyjmoT8EoGgqvkvZKksmNyInjHB91er9TtDzPBtAMb3Bvw==}
|
||||
peerDependencies:
|
||||
eslint: '>6.6.0'
|
||||
turbo: '>2.0.0'
|
||||
|
||||
eslint-import-resolver-node@0.3.9:
|
||||
resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
|
||||
@@ -4923,10 +4947,11 @@ packages:
|
||||
peerDependencies:
|
||||
tailwindcss: ^3.3.2
|
||||
|
||||
eslint-plugin-turbo@1.13.4:
|
||||
resolution: {integrity: sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==}
|
||||
eslint-plugin-turbo@2.9.16:
|
||||
resolution: {integrity: sha512-NOITpZwuq+c/urW2aGD7QruJ/1frWyci2SF9lX8IaFFGwu2iNSI/90XqOiiWbQe5Ur96C8rspnhDSKzh+EXzIg==}
|
||||
peerDependencies:
|
||||
eslint: '>6.6.0'
|
||||
turbo: '>2.0.0'
|
||||
|
||||
eslint-scope@8.4.0:
|
||||
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
|
||||
@@ -5113,10 +5138,6 @@ packages:
|
||||
picomatch:
|
||||
optional: true
|
||||
|
||||
fetch-blob@3.2.0:
|
||||
resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
|
||||
engines: {node: ^12.20 || >= 14.13}
|
||||
|
||||
figures@6.1.0:
|
||||
resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -5176,10 +5197,6 @@ packages:
|
||||
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
formdata-polyfill@4.0.10:
|
||||
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
|
||||
engines: {node: '>=12.20.0'}
|
||||
|
||||
forwarded@0.2.0:
|
||||
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@@ -6492,8 +6509,8 @@ packages:
|
||||
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
|
||||
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
|
||||
|
||||
next@16.1.6:
|
||||
resolution: {integrity: sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==}
|
||||
next@16.2.7:
|
||||
resolution: {integrity: sha512-eMJxgjRzBaj3olkP4cBamHDXL79A8FC6u1GcsO1D1Tsx8bw/LLXUJCaoajVxtnhD3A1IJqIT8IcRJjgBIPJq4w==}
|
||||
engines: {node: '>=20.9.0'}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -6513,11 +6530,6 @@ packages:
|
||||
sass:
|
||||
optional: true
|
||||
|
||||
node-domexception@1.0.0:
|
||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||
engines: {node: '>=10.5.0'}
|
||||
deprecated: Use your platform's native DOMException instead
|
||||
|
||||
node-fetch@2.7.0:
|
||||
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
||||
engines: {node: 4.x || >=6.0.0}
|
||||
@@ -6527,10 +6539,6 @@ packages:
|
||||
encoding:
|
||||
optional: true
|
||||
|
||||
node-fetch@3.3.2:
|
||||
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
|
||||
node-releases@2.0.21:
|
||||
resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
|
||||
|
||||
@@ -7903,38 +7911,8 @@ packages:
|
||||
engines: {node: '>=18.0.0'}
|
||||
hasBin: true
|
||||
|
||||
turbo-darwin-64@1.13.4:
|
||||
resolution: {integrity: sha512-A0eKd73R7CGnRinTiS7txkMElg+R5rKFp9HV7baDiEL4xTG1FIg/56Vm7A5RVgg8UNgG2qNnrfatJtb+dRmNdw==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
turbo-darwin-arm64@1.13.4:
|
||||
resolution: {integrity: sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
turbo-linux-64@1.13.4:
|
||||
resolution: {integrity: sha512-Bq0JphDeNw3XEi+Xb/e4xoKhs1DHN7OoLVUbTIQz+gazYjigVZvtwCvgrZI7eW9Xo1eOXM2zw2u1DGLLUfmGkQ==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
turbo-linux-arm64@1.13.4:
|
||||
resolution: {integrity: sha512-BJcXw1DDiHO/okYbaNdcWN6szjXyHWx9d460v6fCHY65G8CyqGU3y2uUTPK89o8lq/b2C8NK0yZD+Vp0f9VoIg==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
turbo-windows-64@1.13.4:
|
||||
resolution: {integrity: sha512-OFFhXHOFLN7A78vD/dlVuuSSVEB3s9ZBj18Tm1hk3aW1HTWTuAw0ReN6ZNlVObZUHvGy8d57OAGGxf2bT3etQw==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
turbo-windows-arm64@1.13.4:
|
||||
resolution: {integrity: sha512-u5A+VOKHswJJmJ8o8rcilBfU5U3Y1TTAfP9wX8bFh8teYF1ghP0EhtMRLjhtp6RPa+XCxHHVA2CiC3gbh5eg5g==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
turbo@1.13.4:
|
||||
resolution: {integrity: sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ==}
|
||||
turbo@2.9.16:
|
||||
resolution: {integrity: sha512-NqgRQy6j6dPYcdSdv0q1g9QsZg7SWg87RERM8otw/1AtKU2yTFVClOM7cbwKzOonZr/Ek1blTBucw64L9H0Bwg==}
|
||||
hasBin: true
|
||||
|
||||
tw-animate-css@1.4.0:
|
||||
@@ -8000,6 +7978,10 @@ packages:
|
||||
undici-types@6.21.0:
|
||||
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
|
||||
|
||||
undici@7.27.2:
|
||||
resolution: {integrity: sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==}
|
||||
engines: {node: '>=20.18.1'}
|
||||
|
||||
unicorn-magic@0.1.0:
|
||||
resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -8293,10 +8275,6 @@ packages:
|
||||
web-namespaces@2.0.1:
|
||||
resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
|
||||
|
||||
web-streams-polyfill@3.3.3:
|
||||
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
|
||||
engines: {node: '>= 8'}
|
||||
|
||||
webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||
|
||||
@@ -9787,7 +9765,7 @@ snapshots:
|
||||
'@tybys/wasm-util': 0.10.0
|
||||
optional: true
|
||||
|
||||
'@next/env@16.1.6': {}
|
||||
'@next/env@16.2.7': {}
|
||||
|
||||
'@next/eslint-plugin-next@15.5.11':
|
||||
dependencies:
|
||||
@@ -9797,28 +9775,28 @@ snapshots:
|
||||
dependencies:
|
||||
fast-glob: 3.3.1
|
||||
|
||||
'@next/swc-darwin-arm64@16.1.6':
|
||||
'@next/swc-darwin-arm64@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-darwin-x64@16.1.6':
|
||||
'@next/swc-darwin-x64@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-gnu@16.1.6':
|
||||
'@next/swc-linux-arm64-gnu@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-musl@16.1.6':
|
||||
'@next/swc-linux-arm64-musl@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-gnu@16.1.6':
|
||||
'@next/swc-linux-x64-gnu@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-musl@16.1.6':
|
||||
'@next/swc-linux-x64-musl@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-arm64-msvc@16.1.6':
|
||||
'@next/swc-win32-arm64-msvc@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-x64-msvc@16.1.6':
|
||||
'@next/swc-win32-x64-msvc@16.2.7':
|
||||
optional: true
|
||||
|
||||
'@noble/ciphers@1.3.0': {}
|
||||
@@ -9906,7 +9884,7 @@ snapshots:
|
||||
extract-zip: 2.0.1
|
||||
progress: 2.0.3
|
||||
proxy-agent: 6.5.0
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
tar-fs: 3.1.0
|
||||
unbzip2-stream: 1.4.3
|
||||
yargs: 17.7.2
|
||||
@@ -11092,6 +11070,24 @@ snapshots:
|
||||
minimatch: 10.1.1
|
||||
path-browserify: 1.0.1
|
||||
|
||||
'@turbo/darwin-64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@turbo/darwin-arm64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@turbo/linux-64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@turbo/linux-arm64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@turbo/windows-64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@turbo/windows-arm64@2.9.16':
|
||||
optional: true
|
||||
|
||||
'@tybys/wasm-util@0.10.0':
|
||||
dependencies:
|
||||
tslib: 2.8.1
|
||||
@@ -11416,7 +11412,7 @@ snapshots:
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.5
|
||||
semver: 7.7.2
|
||||
semver: 7.7.3
|
||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||
typescript: 5.9.2
|
||||
transitivePeerDependencies:
|
||||
@@ -11571,9 +11567,9 @@ snapshots:
|
||||
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
|
||||
optional: true
|
||||
|
||||
'@vercel/analytics@1.5.0(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)':
|
||||
'@vercel/analytics@1.5.0(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)':
|
||||
optionalDependencies:
|
||||
next: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
react: 19.2.3
|
||||
|
||||
'@vitest/expect@2.1.9':
|
||||
@@ -12221,8 +12217,6 @@ snapshots:
|
||||
|
||||
dargs@8.1.0: {}
|
||||
|
||||
data-uri-to-buffer@4.0.1: {}
|
||||
|
||||
data-uri-to-buffer@6.0.2: {}
|
||||
|
||||
data-view-buffer@1.0.2:
|
||||
@@ -12727,10 +12721,11 @@ snapshots:
|
||||
dependencies:
|
||||
eslint: 9.26.0(hono@4.11.7)(jiti@1.21.7)
|
||||
|
||||
eslint-config-turbo@1.13.4(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7)):
|
||||
eslint-config-turbo@2.9.16(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))(turbo@2.9.16):
|
||||
dependencies:
|
||||
eslint: 9.26.0(hono@4.11.7)(jiti@1.21.7)
|
||||
eslint-plugin-turbo: 1.13.4(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))
|
||||
eslint-plugin-turbo: 2.9.16(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))(turbo@2.9.16)
|
||||
turbo: 2.9.16
|
||||
|
||||
eslint-import-resolver-node@0.3.9:
|
||||
dependencies:
|
||||
@@ -12953,10 +12948,11 @@ snapshots:
|
||||
postcss: 8.5.6
|
||||
tailwindcss: 3.4.19(tsx@4.20.3)(yaml@2.8.1)
|
||||
|
||||
eslint-plugin-turbo@1.13.4(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7)):
|
||||
eslint-plugin-turbo@2.9.16(eslint@9.26.0(hono@4.11.7)(jiti@1.21.7))(turbo@2.9.16):
|
||||
dependencies:
|
||||
dotenv: 16.0.3
|
||||
eslint: 9.26.0(hono@4.11.7)(jiti@1.21.7)
|
||||
turbo: 2.9.16
|
||||
|
||||
eslint-scope@8.4.0:
|
||||
dependencies:
|
||||
@@ -13289,11 +13285,6 @@ snapshots:
|
||||
optionalDependencies:
|
||||
picomatch: 4.0.4
|
||||
|
||||
fetch-blob@3.2.0:
|
||||
dependencies:
|
||||
node-domexception: 1.0.0
|
||||
web-streams-polyfill: 3.3.3
|
||||
|
||||
figures@6.1.0:
|
||||
dependencies:
|
||||
is-unicode-supported: 2.1.0
|
||||
@@ -13367,10 +13358,6 @@ snapshots:
|
||||
hasown: 2.0.2
|
||||
mime-types: 2.1.35
|
||||
|
||||
formdata-polyfill@4.0.10:
|
||||
dependencies:
|
||||
fetch-blob: 3.2.0
|
||||
|
||||
forwarded@0.2.0: {}
|
||||
|
||||
fraction.js@4.3.7: {}
|
||||
@@ -13414,7 +13401,7 @@ snapshots:
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
||||
fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
||||
dependencies:
|
||||
'@formatjs/intl-localematcher': 0.6.2
|
||||
'@orama/orama': 3.1.16
|
||||
@@ -13436,7 +13423,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.2
|
||||
lucide-react: 0.474.0(react@19.2.3)
|
||||
next: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
react: 19.2.3
|
||||
react-dom: 19.2.3(react@19.2.3)
|
||||
transitivePeerDependencies:
|
||||
@@ -13451,14 +13438,14 @@ snapshots:
|
||||
unist-util-visit: 5.0.0
|
||||
zod: 3.25.76
|
||||
|
||||
fumadocs-mdx@13.0.2(fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)):
|
||||
fumadocs-mdx@13.0.2(fumadocs-core@16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)):
|
||||
dependencies:
|
||||
'@mdx-js/mdx': 3.1.1
|
||||
'@standard-schema/spec': 1.1.0
|
||||
chokidar: 4.0.3
|
||||
esbuild: 0.25.11
|
||||
estree-util-value-to-estree: 3.5.0
|
||||
fumadocs-core: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
fumadocs-core: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
js-yaml: 4.1.1
|
||||
lru-cache: 11.2.4
|
||||
mdast-util-to-markdown: 2.1.2
|
||||
@@ -13472,13 +13459,13 @@ snapshots:
|
||||
unist-util-visit: 5.0.0
|
||||
zod: 4.3.6
|
||||
optionalDependencies:
|
||||
next: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
react: 19.2.3
|
||||
vite: 7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
fumadocs-ui@16.0.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18):
|
||||
fumadocs-ui@16.0.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.1.18):
|
||||
dependencies:
|
||||
'@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
'@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
@@ -13491,7 +13478,7 @@ snapshots:
|
||||
'@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.3)
|
||||
'@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
class-variance-authority: 0.7.1
|
||||
fumadocs-core: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
fumadocs-core: 16.0.5(@types/react@19.2.2)(lucide-react@0.474.0(react@19.2.3))(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
lodash.merge: 4.6.2
|
||||
next-themes: 0.4.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
postcss-selector-parser: 7.1.0
|
||||
@@ -13502,7 +13489,7 @@ snapshots:
|
||||
tailwind-merge: 3.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 19.2.2
|
||||
next: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
tailwindcss: 4.1.18
|
||||
transitivePeerDependencies:
|
||||
- '@mixedbread/sdk'
|
||||
@@ -14910,9 +14897,9 @@ snapshots:
|
||||
react: 19.2.3
|
||||
react-dom: 19.2.3(react@19.2.3)
|
||||
|
||||
next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
||||
next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
|
||||
dependencies:
|
||||
'@next/env': 16.1.6
|
||||
'@next/env': 16.2.7
|
||||
'@swc/helpers': 0.5.15
|
||||
baseline-browser-mapping: 2.10.0
|
||||
caniuse-lite: 1.0.30001759
|
||||
@@ -14921,32 +14908,24 @@ snapshots:
|
||||
react-dom: 19.2.3(react@19.2.3)
|
||||
styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.2.3)
|
||||
optionalDependencies:
|
||||
'@next/swc-darwin-arm64': 16.1.6
|
||||
'@next/swc-darwin-x64': 16.1.6
|
||||
'@next/swc-linux-arm64-gnu': 16.1.6
|
||||
'@next/swc-linux-arm64-musl': 16.1.6
|
||||
'@next/swc-linux-x64-gnu': 16.1.6
|
||||
'@next/swc-linux-x64-musl': 16.1.6
|
||||
'@next/swc-win32-arm64-msvc': 16.1.6
|
||||
'@next/swc-win32-x64-msvc': 16.1.6
|
||||
'@next/swc-darwin-arm64': 16.2.7
|
||||
'@next/swc-darwin-x64': 16.2.7
|
||||
'@next/swc-linux-arm64-gnu': 16.2.7
|
||||
'@next/swc-linux-arm64-musl': 16.2.7
|
||||
'@next/swc-linux-x64-gnu': 16.2.7
|
||||
'@next/swc-linux-x64-musl': 16.2.7
|
||||
'@next/swc-win32-arm64-msvc': 16.2.7
|
||||
'@next/swc-win32-x64-msvc': 16.2.7
|
||||
'@opentelemetry/api': 1.9.0
|
||||
sharp: 0.34.5
|
||||
transitivePeerDependencies:
|
||||
- '@babel/core'
|
||||
- babel-plugin-macros
|
||||
|
||||
node-domexception@1.0.0: {}
|
||||
|
||||
node-fetch@2.7.0:
|
||||
dependencies:
|
||||
whatwg-url: 5.0.0
|
||||
|
||||
node-fetch@3.3.2:
|
||||
dependencies:
|
||||
data-uri-to-buffer: 4.0.1
|
||||
fetch-blob: 3.2.0
|
||||
formdata-polyfill: 4.0.10
|
||||
|
||||
node-releases@2.0.21: {}
|
||||
|
||||
normalize-path@3.0.0: {}
|
||||
@@ -14970,12 +14949,12 @@ snapshots:
|
||||
|
||||
npm-to-yarn@3.0.1: {}
|
||||
|
||||
nuqs@2.8.9(next@16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3):
|
||||
nuqs@2.8.9(next@16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3):
|
||||
dependencies:
|
||||
'@standard-schema/spec': 1.0.0
|
||||
react: 19.2.3
|
||||
optionalDependencies:
|
||||
next: 16.1.6(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
next: 16.2.7(@babel/core@7.28.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
|
||||
|
||||
object-assign@4.1.1: {}
|
||||
|
||||
@@ -16575,32 +16554,14 @@ snapshots:
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
|
||||
turbo-darwin-64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo-darwin-arm64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo-linux-64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo-linux-arm64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo-windows-64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo-windows-arm64@1.13.4:
|
||||
optional: true
|
||||
|
||||
turbo@1.13.4:
|
||||
turbo@2.9.16:
|
||||
optionalDependencies:
|
||||
turbo-darwin-64: 1.13.4
|
||||
turbo-darwin-arm64: 1.13.4
|
||||
turbo-linux-64: 1.13.4
|
||||
turbo-linux-arm64: 1.13.4
|
||||
turbo-windows-64: 1.13.4
|
||||
turbo-windows-arm64: 1.13.4
|
||||
'@turbo/darwin-64': 2.9.16
|
||||
'@turbo/darwin-arm64': 2.9.16
|
||||
'@turbo/linux-64': 2.9.16
|
||||
'@turbo/linux-arm64': 2.9.16
|
||||
'@turbo/windows-64': 2.9.16
|
||||
'@turbo/windows-arm64': 2.9.16
|
||||
|
||||
tw-animate-css@1.4.0: {}
|
||||
|
||||
@@ -16682,6 +16643,8 @@ snapshots:
|
||||
|
||||
undici-types@6.21.0: {}
|
||||
|
||||
undici@7.27.2: {}
|
||||
|
||||
unicorn-magic@0.1.0: {}
|
||||
|
||||
unicorn-magic@0.3.0: {}
|
||||
@@ -16913,17 +16876,6 @@ snapshots:
|
||||
- supports-color
|
||||
- terser
|
||||
|
||||
vite-tsconfig-paths@4.3.2(typescript@5.9.2)(vite@5.4.19(@types/node@20.19.10)(lightningcss@1.30.2)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.1.6(typescript@5.9.2)
|
||||
optionalDependencies:
|
||||
vite: 5.4.19(@types/node@20.19.10)(lightningcss@1.30.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite-tsconfig-paths@4.3.2(typescript@5.9.2)(vite@7.3.2(@types/node@20.19.10)(jiti@1.21.7)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
@@ -16935,6 +16887,17 @@ snapshots:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite-tsconfig-paths@4.3.2(typescript@5.9.2)(vite@7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)):
|
||||
dependencies:
|
||||
debug: 4.4.1
|
||||
globrex: 0.1.2
|
||||
tsconfck: 3.1.6(typescript@5.9.2)
|
||||
optionalDependencies:
|
||||
vite: 7.3.2(@types/node@20.19.10)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.20.3)(yaml@2.8.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
- typescript
|
||||
|
||||
vite@5.4.19(@types/node@20.19.10)(lightningcss@1.30.2):
|
||||
dependencies:
|
||||
esbuild: 0.21.5
|
||||
@@ -17025,8 +16988,6 @@ snapshots:
|
||||
|
||||
web-namespaces@2.0.1: {}
|
||||
|
||||
web-streams-polyfill@3.3.3: {}
|
||||
|
||||
webidl-conversions@3.0.1: {}
|
||||
|
||||
webidl-conversions@4.0.2: {}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://turbo.build/schema.json",
|
||||
"globalEnv": ["NODE_ENV"],
|
||||
"pipeline": {
|
||||
"tasks": {
|
||||
"build": {
|
||||
"dependsOn": ["^build"],
|
||||
"env": [
|
||||
@@ -42,7 +42,8 @@
|
||||
},
|
||||
"typecheck": {},
|
||||
"dev": {
|
||||
"cache": false
|
||||
"cache": false,
|
||||
"persistent": true
|
||||
},
|
||||
"check": {
|
||||
"cache": false
|
||||
|
||||
Reference in New Issue
Block a user