From f081c95df7f4bf100b123e3183e198885c7b598c Mon Sep 17 00:00:00 2001
From: yousif <42901524+fullmooner-stack@users.noreply.github.com>
Date: Mon, 1 Dec 2025 11:49:58 +0300
Subject: [PATCH 001/153] render on root not app (#1361)
Co-authored-by: yousif1997 <42901524+yousif1997@users.noreply.github.com>
---
src/routes/solid-router/reference/components/router.mdx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/routes/solid-router/reference/components/router.mdx b/src/routes/solid-router/reference/components/router.mdx
index 9ff9160346..006a4d4996 100644
--- a/src/routes/solid-router/reference/components/router.mdx
+++ b/src/routes/solid-router/reference/components/router.mdx
@@ -32,7 +32,7 @@ const App = (props) => (
render(
() => {/*... routes */},
- document.getElementById("app")
+ document.getElementById("root")
);
```
From a159a3041c99acac1e589e2bc0bf9e97dd15ae84 Mon Sep 17 00:00:00 2001
From: Amir Hossein Hashemi <87268103+amirhhashemi@users.noreply.github.com>
Date: Mon, 1 Dec 2025 23:54:04 +0330
Subject: [PATCH 002/153] Update createComputed reference (#1358)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
.../secondary-primitives/create-computed.mdx | 122 +++++++++++++++---
1 file changed, 103 insertions(+), 19 deletions(-)
diff --git a/src/routes/reference/secondary-primitives/create-computed.mdx b/src/routes/reference/secondary-primitives/create-computed.mdx
index 90b6026938..84da443c4e 100644
--- a/src/routes/reference/secondary-primitives/create-computed.mdx
+++ b/src/routes/reference/secondary-primitives/create-computed.mdx
@@ -9,36 +9,120 @@ tags:
- primitives
- effects
- tracking
-version: '1.0'
+version: "1.0"
description: >-
Create immediate reactive computations with createComputed. Build custom
primitives and handle side effects that respond to dependencies.
---
+The `createComputed` function creates a reactive computation that runs _before_ the rendering phase.
+It is primarily used to synchronize state before rendering begins.
+
+## Import
+
```ts
-import { createComputed } from "solid-js"
+import { createComputed } from "solid-js";
+```
-function createComputed(fn: (v: T) => T, value?: T): void
+## Type
+```ts
+function createComputed(
+ fn: EffectFunction, Next>
+): void;
+function createComputed(
+ fn: EffectFunction,
+ value: Init,
+ options?: { name?: string }
+): void;
+function createComputed(
+ fn: EffectFunction,
+ value?: Init,
+ options?: { name?: string }
+): void;
```
-`createComputed` creates a new computation that immediately runs the given function in a tracking scope, thus automatically tracking its dependencies, and automatically reruns the function whenever the dependencies changes.
-The function gets called with an argument equal to the value returned from the function's last execution, or on the first call, equal to the optional second argument to `createComputed`.
-Note that the return value of the function is not otherwise exposed; in particular, createComputed has no return value.
+## Parameters
+
+### `fn`
+
+- **Type:** `EffectFunction, Next> | EffectFunction`
+- **Required:** Yes
+
+The function that performs the computation.
+It executes immediately to track dependencies and re-runs whenever a dependency changes.
+
+It receives the value returned from the previous execution as its argument.
+On the initial execution, it receives the [`value`](#value) parameter (if provided) or `undefined`.
+
+### `value`
+
+- **Type:** `Init`
+- **Required:** No
+
+The initial value passed to `fn` on its first execution.
+
+### `options`
+
+- **Type:** `{ name?: string }`
+- **Required:** No
+
+An optional configuration object with the following properties:
-`createComputed` is the most immediate form of reactivity in Solid, and is most useful for building other reactive primitives.
-For example, some other Solid primitives are built from `createComputed`.
-However, it should be used with care, as `createComputed` can easily cause more unnecessary updates than other reactive primitives.
-Before using it, consider the closely related primitives [`createMemo`](/reference/basic-reactivity/create-memo) and [`createRenderEffect`](/reference/secondary-primitives/create-render-effect).
+#### `name`
-Like `createMemo`, `createComputed` calls its function immediately on updates (unless you're in a [batch](/reference/reactive-utilities/batch), [effect](/reference/basic-reactivity/create-effect), or [transition](/reference/reactive-utilities/use-transition)).
-However, while `createMemo` functions should be pure (not set any signals), `createComputed` functions can set signals.
-Related, `createMemo` offers a readonly signal for the return value of the function, whereas to do the same with `createComputed` you would need to set a signal within the function.
-If it is possible to use pure functions and `createMemo`, this is likely more efficient, as Solid optimizes the execution order of memo updates, whereas updating a signal within `createComputed` will immediately trigger reactive updates some of which may turn out to be unnecessary.
+- **Type:** `string`
+- **Required:** No
+
+A debug name for the computation.
+It is used for identification in debugging tools like the [Solid Debugger](https://github.com/thetarnav/solid-devtools).
+
+## Return value
+
+- **Type:** `void`
+
+`createComputed` does not return a value.
+
+## Examples
+
+### Basic usage
+
+```tsx
+import { createComputed } from "solid-js";
+import { createStore } from "solid-js/store";
+
+type User = {
+ name?: string;
+};
+
+type UserEditorProps = {
+ user: User;
+};
+
+function UserEditor(props: UserEditorProps) {
+ const [formData, setFormData] = createStore({
+ name: "",
+ });
+
+ // Update the store synchronously when props change.
+ // This prevents a second render cycle.
+ createComputed(() => {
+ setFormData("name", props.user.name);
+ });
+
+ return (
+
+ );
+}
+```
-## Arguments
+## Related
-| Name | Type | Description |
-| :------ | :------------ | :----------------------------------------- |
-| `fn` | `(v: T) => T` | The function to run in a tracking scope. |
-| `value` | `T` | The initial value to pass to the function. |
+- [`createMemo`](/reference/basic-reactivity/create-memo)
+- [`createRenderEffect`](/reference/secondary-primitives/create-render-effect)
From ea6ae266f7ceb6e66fcb90901ba2bd0c5cd6f6cf Mon Sep 17 00:00:00 2001
From: Amir Hossein Hashemi <87268103+amirhhashemi@users.noreply.github.com>
Date: Wed, 3 Dec 2025 00:25:14 +0330
Subject: [PATCH 003/153] Update useParams reference page (#1359)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
.../reference/primitives/use-params.mdx | 55 ++++++++++++++++---
1 file changed, 47 insertions(+), 8 deletions(-)
diff --git a/src/routes/solid-router/reference/primitives/use-params.mdx b/src/routes/solid-router/reference/primitives/use-params.mdx
index 750752b20d..46c0bad053 100644
--- a/src/routes/solid-router/reference/primitives/use-params.mdx
+++ b/src/routes/solid-router/reference/primitives/use-params.mdx
@@ -1,24 +1,63 @@
---
title: useParams
-use_cases: 'dynamic routes, user profiles, product pages, id-based content, url parameters'
+use_cases: "dynamic routes, user profiles, product pages, id-based content, url parameters"
tags:
- params
- dynamic
- routes
- parameters
- reactive
-version: '1.0'
+version: "1.0"
description: >-
Access route parameters reactively with useParams - extract dynamic segments
from URLs for user profiles, products, and ID-based pages.
---
-`useParams` retrieves a reactive object similar to a store.
-It contains the current route's path parameters as defined in the Route.
+The `useParams` function reads the path parameters of the current route.
-```js
-const params = useParams();
+## Import
-// Route path: /user/:id => /user/123
-console.log(params.id); // 123
+```ts
+import { useParams } from "@solidjs/router";
```
+
+## Type
+
+```ts
+function useParams>(): T;
+```
+
+## Parameters
+
+`useParams` takes no arguments.
+
+## Return value
+
+- **Type**: `T`
+
+`useParams` returns a reactive object where keys match the dynamic segments defined in the route path.
+Accessing a property within a tracking scope registers a dependency, causing the computation to re-run when the parameter changes.
+
+## Examples
+
+### Basic usage
+
+```ts
+import { createMemo } from "solid-js";
+import { useParams } from "@solidjs/router";
+
+// Rendered via
+function UserPage() {
+ const params = useParams();
+
+ // Derived value updates when the route parameter changes.
+ const title = createMemo(() => `Profile for ${params.id}`);
+
+ return
{title()}
;
+}
+```
+
+## Related
+
+- [useLocation](/solid-router/reference/primitives/use-location)
+- [useSearchParams](/solid-router/reference/primitives/use-search-params)
From 3315d786847bd05578a44bad0b4d7a63bfd03ebf Mon Sep 17 00:00:00 2001
From: Amir Hossein Hashemi <87268103+amirhhashemi@users.noreply.github.com>
Date: Wed, 3 Dec 2025 00:26:32 +0330
Subject: [PATCH 004/153] Update useSearchParams reference page (#1360)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
.../primitives/use-search-params.mdx | 90 +++++++++++++------
1 file changed, 64 insertions(+), 26 deletions(-)
diff --git a/src/routes/solid-router/reference/primitives/use-search-params.mdx b/src/routes/solid-router/reference/primitives/use-search-params.mdx
index 0aa58b7cf5..224a6f49ba 100644
--- a/src/routes/solid-router/reference/primitives/use-search-params.mdx
+++ b/src/routes/solid-router/reference/primitives/use-search-params.mdx
@@ -1,6 +1,6 @@
---
title: useSearchParams
-use_cases: 'pagination, filters, search forms, url state management, query string updates'
+use_cases: "pagination, filters, search forms, url state management, query string updates"
tags:
- search
- query
@@ -8,34 +8,72 @@ tags:
- pagination
- filters
- url
-version: '1.0'
+version: "1.0"
description: >-
Manage URL query parameters with useSearchParams - handle pagination, filters,
and search state directly in the URL query string.
---
-Retrieves a tuple containing a reactive object to read the current location's query parameters and a method to update them.
-The object is a proxy so you must access properties to subscribe to reactive updates.
-Note values will be strings and property names will retain their casing.
-
-The setter method accepts an object as an input, and its key-value pairs will be merged into the existing query string.
-If a value is `''`, `undefined` or `null`, the corresponding key will be omitted from the resulting query string.
-The updates behave like navigation and will not scroll the page to the top.
-Additionally, the setter can take an optional second parameter, the same as `navigate`, to control the navigation behavior and auto-scrolling, which are disabled by default.
-
-```js
-const [searchParams, setSearchParams] = useSearchParams();
-
-return (
-
- Page: {searchParams.page}
-
-
-);
+The `useSearchParams` function reads the URL query parameters for the current route and provides a function to update them.
+
+## Import
+
+```ts
+import { useSearchParams } from "@solidjs/router";
+```
+
+## Type
+
+```ts
+function useSearchParams>(): [
+ Partial,
+ (params: SetSearchParams, options?: Partial) => void,
+];
```
+
+## Parameters
+
+`useSearchParams` takes no arguments.
+
+## Return value
+
+- **Type:** `[ Partial, (params: SetSearchParams, options?: Partial) => void ]`
+
+`useSearchParams` returns an array with two items.
+
+The first item is a reactive object containing the current query parameters.
+Accessing a property within a tracking scope registers a dependency, causing the computation to re-run when the parameter changes.
+Values are always strings.
+
+The second item is a function that updates the query string.
+It merges the object provided as its first argument with the current query parameters.
+Passing an empty string (`""`), an empty array (`[]`), `undefined`, or `null` as a value removes the key.
+It accepts the same options as [`useNavigate`](/solid-router/reference/primitives/use-navigate) as the second parameter.
+By default, the `resolve` and `scroll` options are set to `false`.
+
+## Examples
+
+### Basic usage
+
+```tsx
+import { useSearchParams } from "@solidjs/router";
+
+function Paginator() {
+ const [params, setParams] = useSearchParams();
+
+ const page = () => Number(params.page || "1");
+
+ return (
+
+ Current Page: {page()}
+
+
+ );
+}
+```
+
+## Related
+
+- [`useParams`](/solid-router/reference/primitives/use-params)
+- [`useLocation`](/solid-router/reference/primitives/use-location)
+- [`useNavigate`](/solid-router/reference/primitives/use-navigate)
From b708b4db460013ddc9205fc9787ddd1267ac3900 Mon Sep 17 00:00:00 2001
From: Amir Hossein Hashemi <87268103+amirhhashemi@users.noreply.github.com>
Date: Wed, 3 Dec 2025 00:27:20 +0330
Subject: [PATCH 005/153] Update response helpers documentation (#1331)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
.../reference/response-helpers/json.mdx | 134 +++++++++++++++---
.../reference/response-helpers/redirect.mdx | 129 +++++++++--------
.../reference/response-helpers/reload.mdx | 83 ++++++++---
3 files changed, 251 insertions(+), 95 deletions(-)
diff --git a/src/routes/solid-router/reference/response-helpers/json.mdx b/src/routes/solid-router/reference/response-helpers/json.mdx
index b2668eee8b..a6bf91a8ce 100644
--- a/src/routes/solid-router/reference/response-helpers/json.mdx
+++ b/src/routes/solid-router/reference/response-helpers/json.mdx
@@ -7,38 +7,134 @@ tags:
- json
- api
- actions
- - cache
+ - queries
- revalidation
- response
-version: '1.0'
+version: "1.0"
description: >-
- Return JSON data from actions with cache revalidation control. Configure how
+ Return JSON data from actions with query revalidation control. Configure how
route data updates after mutations for optimal performance.
---
-Returns JSON data from an action while also providing options for controlling revalidation of cache data on the route.
+The `json` function returns a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object that contains the provided data.
+It is intended for sending JSON data from a [query](/solid-router/reference/data-apis/query) or [action](/solid-router/concepts/actions) while also allowing configuration of query revalidation.
-```ts title="/actions/get-completed-todos.ts" {7}
-import { action, json } from "@solidjs/router";
-import { fetchTodo } from "../fetchers";
+This works both in client and server (e.g., using a server function) environments.
-const getCompletedTodos = action(async () => {
- const completedTodos = await fetchTodo({ status: 'complete' });
+## Import
- return json(completedTodos, { revalidate: getTodo.keyFor(id) });
-});
+```ts
+import { json } from "@solidjs/router";
```
-Also read [action](/solid-router/reference/data-apis/action) and [revalidate](/solid-router/reference/response-helpers/revalidate).
+## Type
-## Type Signature
+```ts
+function json(
+ data: T,
+ init: {
+ revalidate?: string | string[];
+ headers?: HeadersInit;
+ status?: number;
+ statusText?: string;
+ } = {}
+): CustomResponse;
+```
+
+## Parameters
+
+### `data`
+
+- **Type:** `T`
+- **Required:** Yes
+
+The data to be serialized as JSON in the response body.
+It must be a value that can be serialized with [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify).
+
+### `init`
+
+- **Type:** `{ revalidate?: string | string[]; headers?: HeadersInit; status?: number; statusText?: string; }`
+- **Required:** No
+
+An optional configuration object with the following properties:
+
+#### `revalidate`
+
+- **Type:** `string | string[]`
+- **Required:** No
+
+A query key or an array of query keys to revalidate.
+Passing an empty array (`[]`) disables query revalidation entirely.
+
+#### `headers`
+
+- **Type:** `HeadersInit`
+- **Required:** No
+
+An object containing any headers to be sent with the response.
+
+#### `status`
-```typescript
-interface ResponseOptions & Omit {
- revalidate?: string | string[];
+- **Type:** `number`
+- **Required:** No
+
+The HTTP status code of the response.
+Defaults to [`200 OK`](http://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/200).
+
+#### `statusText`
+
+- **Type:** `string`
+- **Required:** No
+
+The status text associated with the status code.
+
+## Examples
+
+### Invalidating Data After a Mutation
+
+```tsx
+import { For } from "solid-js";
+import { query, action, json, createAsync } from "@solidjs/router";
+
+const getCurrentUserQuery = query(async () => {
+ return await fetch("/api/me").then((response) => response.json());
+}, "currentUser");
+
+const getPostsQuery = query(async () => {
+ return await fetch("/api/posts").then((response) => response.json());
+}, "posts");
+
+const createPostAction = action(async (formData: FormData) => {
+ const title = formData.get("title")?.toString();
+ const newPost = await fetch("/api/posts", {
+ method: "POST",
+ body: JSON.stringify({ title }),
+ }).then((response) => response.json());
+
+ // Only revalidate the "posts" query.
+ return json(newPost, { revalidate: "posts" });
+}, "createPost");
+
+function Posts() {
+ const currentUser = createAsync(() => getCurrentUserQuery());
+ const posts = createAsync(() => getPostsQuery());
+
+ return (
+
+
Welcome back {currentUser()?.name}
+
+ {(post) =>
{post.title}
}
+
+
+
+ );
}
+```
-json(data: T, opt?: ResponseOptions): CustomResponse;
-```
+## Related
-The `ResponseOptions` extens the types from the native [`ResponseInit`](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#options) interface.
+- [`query`](/solid-router/reference/data-apis/query)
+- [`action`](/solid-router/reference/data-apis/action)
diff --git a/src/routes/solid-router/reference/response-helpers/redirect.mdx b/src/routes/solid-router/reference/response-helpers/redirect.mdx
index 3941939658..57535bcb93 100644
--- a/src/routes/solid-router/reference/response-helpers/redirect.mdx
+++ b/src/routes/solid-router/reference/response-helpers/redirect.mdx
@@ -10,89 +10,106 @@ tags:
- routing
- authorization
- forms
-version: '1.0'
+version: "1.0"
description: >-
Redirect users between routes with proper status codes. Handle authentication
flows, form submissions, and protected route access.
---
-Redirects to the next route.
-When done over a server RPC (Remote Procedure Call), the redirect will be done through the server.
-By default the status code of a `redirect()` is `302 - FOUND`, also known as a temporary redirect.
+The `redirect` function returns a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object that instructs the router to navigate to a different route when returned or thrown from a [query](/solid-router/reference/data-apis/query) or [action](/solid-router/concepts/actions).
-Other useful redirect codes:
+This works both in client and server (e.g., using a server function) environments.
-| Code | Description |
-| ---- | ----------- |
-| `301` | Moved Permanently |
-| `307` | Temporary Redirect |
-| `308` | Permanent redirect |
+## Import
-:::tip[Redirect Methods]
-307 and 308 won't allow the browser to change the method of the request.
-If you want to change the method, you should use 301 or 302.
-:::
+```ts
+import { redirect } from "@solidjs/router";
+```
-A common use-case for throwing a redirect is when a user is not authenticated and needs to be sent to the login page or another public route.
+## Type
-```js title="/queries/get-user.ts" {7}
-import { query, redirect } from "@solidjs/router";
-import { getCurrentUser } from "../auth";
-
-const getUser = query(() => {
- const user = await getCurrentUser();
-
- if (!user) throw redirect("/login");
-
- return user;
-}, "get-user")
+```ts
+function redirect(
+ url: string,
+ init?:
+ | number
+ | {
+ revalidate?: string | string[];
+ headers?: HeadersInit;
+ status?: number;
+ statusText?: string;
+ }
+): CustomResponse;
```
-## Single-Flight Mutations
+## Parameters
-When using `redirect` during a Server Action, the redirect will be done through the server.
-The response value will automatically send data for the destination route, avoiding a subsequent roundtrip to load the data from the target route.
+### `url`
-This is useful when redirecting the user to a different route once a mutation is done.
+- **Type:** `string`
+- **Required:** Yes
-```ts title="/actions/add-user.ts" {3,6}
-import { action, redirect } from "@solidjs/router";
+The absolute or relative URL to which the redirect should occur.
-const addUser = action(async (user: User) => {
- await postUser(user);
-
- return redirect("/users");
-});
-```
+### `init`
-The `addUser` action will redirect the user to the `/users` route once the user has been added to the database.
-The response from the form action will send the updated data for the `/users` route without the developer needing to revalidate or reload.
+- **Type:** `number | { revalidate?: string | string[]; headers?: HeadersInit; status?: number; statusText?: string; }`
+- **Required:** No
-## Throw vs Return
+Either a number representing the status code or a configuration object with the following properties:
-Both `throw` and `return` can be used to redirect the user to a different route.
-For general usage `throw` is recommended as it immediately stops the execution of the current action and redirects the user.
+#### `revalidate`
-When returning from a nested method, the parent method will continue to execute, which can lead to unexpected behavior.
+- **Type:** `string | string[]`
+- **Required:** No
-### TypeScript Signature
+A query key or an array of query keys to revalidate on the destination route.
-```typescript
-type RouterResponseInit = Omit & {
- revalidate?: string | string[];
-};
+#### `status`
-function redirect(url: string, init?: number | RouterResponseInit): CustomResponse;
-```
+- **Type:** `number`
+- **Required:** No
-The `RouterResponseInit` type extends the native [`ResponseInit`](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#options) interface.
+The HTTP status code for the redirect.
+Defaults to [`302 Found`)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/302).
-## Revalidate Query Keys
+## Examples
-You can pass query keys to the redirect helper to revalidate them.
+### Basic Usage
```ts
-redirect("/", { revalidate: ["getUser", getUser.keyFor(id)] });
+import { query, redirect } from "@solidjs/router";
+
+const getCurrentUserQuery = query(async () => {
+ const response = await fetch("/api/me");
+
+ if (response.status === 401) {
+ return redirect("/login");
+ }
+
+ return await response.json();
+}, "currentUser");
```
-This will only invalidate the query keys passed to the redirect helper instead of the entire next page.
+### Configuring Query Revalidation
+
+```ts
+import { action, redirect } from "@solidjs/router";
+
+const loginAction = action(async (formData: FormData) => {
+ const username = formData.get("username")?.toString();
+ const password = formData.get("password")?.toString();
+
+ await fetch("/api/login", {
+ method: "POST",
+ body: JSON.stringify({ username, password }),
+ }).then((response) => response.json());
+
+ return redirect("/users", { revalidate: ["currentUser"] });
+}, "login");
+```
+
+## Related
+
+- [`query`](/solid-router/reference/data-apis/query)
+- [`action`](/solid-router/reference/data-apis/action)
diff --git a/src/routes/solid-router/reference/response-helpers/reload.mdx b/src/routes/solid-router/reference/response-helpers/reload.mdx
index 4a7f2546d2..94c3909638 100644
--- a/src/routes/solid-router/reference/response-helpers/reload.mdx
+++ b/src/routes/solid-router/reference/response-helpers/reload.mdx
@@ -10,37 +10,80 @@ tags:
- mutations
- queries
- refresh
-version: '1.0'
+version: "1.0"
description: >-
Reload and revalidate specific queries after mutations. Efficiently update
cached data without full page refreshes for better UX.
---
-Reload is a response helper built on top of [revalidate](/solid-router/reference/response-helpers/revalidate).
-It will receive a query key, or an array of query keys, to invalidate those queries, and cause them to fire again.
+The `reload` function returns a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object that instructs the router to revalidate specific queries when returned or thrown from a [query](/solid-router/reference/data-apis/query) or [action](/solid-router/concepts/actions).
-```ts title="/actions/update-todo.ts" {7}
-import { action, reload } from "@solidjs/router";
-import { putTodo, getTodo } from "../db";
+## Import
-const updateTodo = action(async (todo: Todo) => {
- await putTodo(todo.id, todo);
-
- return reload({ revalidate: getTodo.keyFor(id) });
-});
+```ts
+import { reload } from "@solidjs/router";
```
-The code snippet above uses the query key from a user-defined query (`getTodo`).
-To better understand how queries work, check the [query](/solid-router/reference/data-apis/query) documentation.
+## Type
+
+```ts
+function reload(init?: {
+ revalidate?: string | string[];
+ headers?: HeadersInit;
+ status?: number;
+ statusText?: string;
+}): CustomResponse;
+```
+
+## Parameters
+
+### `init`
+
+- **Type:** `{ revalidate?: string | string[]; headers?: HeadersInit; status?: number; statusText?: string; }`
+- **Required:** No
+
+An optional configuration object with the following properties:
+
+#### `revalidate`
+
+- **Type:** `string | string[]`
+- **Required:** No
+
+A query key or an array of query keys to revalidate.
+
+#### `headers`
-## TypeScript Signature
+- **Type:** `HeadersInit`
+- **Required:** No
+
+An object containing any headers to be sent with the response.
+
+#### `status`
+
+- **Type:** `number`
+- **Required:** No
+
+The HTTP status code of the response.
+Defaults to [`200 OK`](http://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/200).
+
+#### `statusText`
+
+- **Type:** `string`
+- **Required:** No
+
+The status text associated with the status code.
+
+## Examples
+
+### Basic Usage
```ts
-interface ResponseOptions & Omit {
- revalidate?: string | string[];
-}
+import { action, reload } from "@solidjs/router";
-reload(opt?: ResponseOptions): CustomResponse;
-```
+const savePreferencesAction = action(async () => {
+ // ... Saves the user preferences.
-The `ResponseOptions` extends the types from the native [`ResponseInit`](https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#options) interface.
+ // Only revalidate the "userPreferences" query.
+ return reload({ revalidate: ["userPreferences"] });
+}, "savePreferences");
+```
From 3a86138bc37edd4b39ce003fc20c073e18cd0f19 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 9 Dec 2025 12:18:32 +0330
Subject: [PATCH 006/153] Bump typescript-eslint from 8.46.2 to 8.49.0 (#1366)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 254 ++++++++++++++++++-------------------------------
2 files changed, 96 insertions(+), 160 deletions(-)
diff --git a/package.json b/package.json
index f0be5be8cd..adca140b59 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,7 @@
"prettier-plugin-tailwindcss": "^0.7.1",
"tailwindcss": "^3.4.18",
"typescript": "^5.9.3",
- "typescript-eslint": "^8.46.2",
+ "typescript-eslint": "^8.49.0",
"vite": "^6.3.5"
},
"engines": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ccfc908b16..cb81076767 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -118,8 +118,8 @@ importers:
specifier: ^5.9.3
version: 5.9.3
typescript-eslint:
- specifier: ^8.46.2
- version: 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ specifier: ^8.49.0
+ version: 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
vite:
specifier: ^6.3.5
version: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
@@ -1454,14 +1454,6 @@ packages:
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@typescript-eslint/eslint-plugin@8.46.2':
- resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.46.2
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <6.0.0'
-
'@typescript-eslint/eslint-plugin@8.46.4':
resolution: {integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1470,10 +1462,11 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.46.2':
- resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==}
+ '@typescript-eslint/eslint-plugin@8.49.0':
+ resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
+ '@typescript-eslint/parser': ^8.49.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
@@ -1484,17 +1477,18 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.34.0':
- resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==}
+ '@typescript-eslint/parser@8.49.0':
+ resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.46.2':
- resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==}
+ '@typescript-eslint/project-service@8.34.0':
+ resolution: {integrity: sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
+ typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/project-service@8.46.4':
resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==}
@@ -1502,8 +1496,8 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.47.0':
- resolution: {integrity: sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA==}
+ '@typescript-eslint/project-service@8.49.0':
+ resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -1512,47 +1506,41 @@ packages:
resolution: {integrity: sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/scope-manager@8.46.2':
- resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/scope-manager@8.46.4':
resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript-eslint/scope-manager@8.49.0':
+ resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/tsconfig-utils@8.34.0':
resolution: {integrity: sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/tsconfig-utils@8.46.2':
- resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
-
'@typescript-eslint/tsconfig-utils@8.46.4':
resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/tsconfig-utils@8.47.0':
- resolution: {integrity: sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g==}
+ '@typescript-eslint/tsconfig-utils@8.49.0':
+ resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.46.2':
- resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==}
+ '@typescript-eslint/type-utils@8.46.4':
+ resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.46.4':
- resolution: {integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==}
+ '@typescript-eslint/type-utils@8.49.0':
+ resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1562,16 +1550,12 @@ packages:
resolution: {integrity: sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/types@8.46.2':
- resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/types@8.46.4':
resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/types@8.47.0':
- resolution: {integrity: sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A==}
+ '@typescript-eslint/types@8.49.0':
+ resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.34.0':
@@ -1580,20 +1564,14 @@ packages:
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/typescript-estree@8.46.2':
- resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.0.0'
-
'@typescript-eslint/typescript-estree@8.46.4':
resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/typescript-estree@8.47.0':
- resolution: {integrity: sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg==}
+ '@typescript-eslint/typescript-estree@8.49.0':
+ resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
@@ -1605,15 +1583,15 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
- '@typescript-eslint/utils@8.46.2':
- resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==}
+ '@typescript-eslint/utils@8.46.4':
+ resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.46.4':
- resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==}
+ '@typescript-eslint/utils@8.49.0':
+ resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1623,16 +1601,12 @@ packages:
resolution: {integrity: sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/visitor-keys@8.46.2':
- resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
'@typescript-eslint/visitor-keys@8.46.4':
resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/visitor-keys@8.47.0':
- resolution: {integrity: sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ==}
+ '@typescript-eslint/visitor-keys@8.49.0':
+ resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript/vfs@1.6.2':
@@ -4712,8 +4686,8 @@ packages:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
- typescript-eslint@8.46.2:
- resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==}
+ typescript-eslint@8.49.0:
+ resolution: {integrity: sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -6734,23 +6708,6 @@ snapshots:
'@types/node': 24.10.0
optional: true
- '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.2
- eslint: 9.39.1(jiti@1.21.7)
- graphemer: 1.4.0
- ignore: 7.0.5
- natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.9.3)
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
-
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -6768,14 +6725,18 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.2
- debug: 4.4.3
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
eslint: 9.39.1(jiti@1.21.7)
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -6792,19 +6753,22 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.34.0(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3
+ eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.34.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
@@ -6813,16 +6777,16 @@ snapshots:
'@typescript-eslint/project-service@8.46.4(typescript@5.9.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/types': 8.46.4
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
@@ -6833,21 +6797,17 @@ snapshots:
'@typescript-eslint/types': 8.34.0
'@typescript-eslint/visitor-keys': 8.34.0
- '@typescript-eslint/scope-manager@8.46.2':
- dependencies:
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/visitor-keys': 8.46.2
-
'@typescript-eslint/scope-manager@8.46.4':
dependencies:
'@typescript-eslint/types': 8.46.4
'@typescript-eslint/visitor-keys': 8.46.4
- '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.9.3)':
+ '@typescript-eslint/scope-manager@8.49.0':
dependencies:
- typescript: 5.9.3
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
- '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.34.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
@@ -6855,15 +6815,15 @@ snapshots:
dependencies:
typescript: 5.9.3
- '@typescript-eslint/tsconfig-utils@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.46.4
+ '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1(jiti@1.21.7)
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -6871,11 +6831,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.46.4
- '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1(jiti@1.21.7)
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -6885,11 +6845,9 @@ snapshots:
'@typescript-eslint/types@8.34.0': {}
- '@typescript-eslint/types@8.46.2': {}
-
'@typescript-eslint/types@8.46.4': {}
- '@typescript-eslint/types@8.47.0': {}
+ '@typescript-eslint/types@8.49.0': {}
'@typescript-eslint/typescript-estree@8.34.0(typescript@5.9.3)':
dependencies:
@@ -6907,22 +6865,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)':
- dependencies:
- '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/visitor-keys': 8.46.2
- debug: 4.4.3
- fast-glob: 3.3.3
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.7.3
- ts-api-utils: 2.1.0(typescript@5.9.3)
- typescript: 5.9.3
- transitivePeerDependencies:
- - supports-color
-
'@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)':
dependencies:
'@typescript-eslint/project-service': 8.46.4(typescript@5.9.3)
@@ -6939,17 +6881,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.47.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.47.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.47.0
- '@typescript-eslint/visitor-keys': 8.47.0
+ '@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/visitor-keys': 8.49.0
debug: 4.4.3
- fast-glob: 3.3.3
- is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
+ tinyglobby: 0.2.15
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
@@ -6966,23 +6907,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.46.4
+ '@typescript-eslint/types': 8.46.4
+ '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@1.21.7))
- '@typescript-eslint/scope-manager': 8.46.4
- '@typescript-eslint/types': 8.46.4
- '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.49.0
+ '@typescript-eslint/types': 8.49.0
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
@@ -6993,19 +6934,14 @@ snapshots:
'@typescript-eslint/types': 8.34.0
eslint-visitor-keys: 4.2.1
- '@typescript-eslint/visitor-keys@8.46.2':
- dependencies:
- '@typescript-eslint/types': 8.46.2
- eslint-visitor-keys: 4.2.1
-
'@typescript-eslint/visitor-keys@8.46.4':
dependencies:
'@typescript-eslint/types': 8.46.4
eslint-visitor-keys: 4.2.1
- '@typescript-eslint/visitor-keys@8.47.0':
+ '@typescript-eslint/visitor-keys@8.49.0':
dependencies:
- '@typescript-eslint/types': 8.47.0
+ '@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
'@typescript/vfs@1.6.2(typescript@5.9.3)':
@@ -7676,7 +7612,7 @@ snapshots:
detective-typescript@14.0.0(typescript@5.9.3):
dependencies:
- '@typescript-eslint/typescript-estree': 8.47.0(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
ast-module-types: 6.0.1
node-source-walk: 7.0.1
typescript: 5.9.3
@@ -10730,12 +10666,12 @@ snapshots:
type-fest@4.41.0: {}
- typescript-eslint@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
+ typescript-eslint@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
eslint: 9.39.1(jiti@1.21.7)
typescript: 5.9.3
transitivePeerDependencies:
From f9adf4daebe69995ab570657b5c2ba95494bcd8e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 9 Dec 2025 08:49:19 +0000
Subject: [PATCH 007/153] Bump prettier-plugin-tailwindcss from 0.7.1 to 0.7.2
(#1367)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package.json b/package.json
index adca140b59..5b3dbfa70c 100644
--- a/package.json
+++ b/package.json
@@ -52,7 +52,7 @@
"eslint-plugin-solid": "^0.14.5",
"globals": "^16.5.0",
"prettier": "3.6.2",
- "prettier-plugin-tailwindcss": "^0.7.1",
+ "prettier-plugin-tailwindcss": "^0.7.2",
"tailwindcss": "^3.4.18",
"typescript": "^5.9.3",
"typescript-eslint": "^8.49.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cb81076767..431097b6ea 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -109,8 +109,8 @@ importers:
specifier: 3.6.2
version: 3.6.2
prettier-plugin-tailwindcss:
- specifier: ^0.7.1
- version: 0.7.1(prettier@3.6.2)
+ specifier: ^0.7.2
+ version: 0.7.2(prettier@3.6.2)
tailwindcss:
specifier: ^3.4.18
version: 3.4.18(yaml@2.8.1)
@@ -3914,8 +3914,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
- prettier-plugin-tailwindcss@0.7.1:
- resolution: {integrity: sha512-Bzv1LZcuiR1Sk02iJTS1QzlFNp/o5l2p3xkopwOrbPmtMeh3fK9rVW5M3neBQzHq+kGKj/4LGQMTNcTH4NGPtQ==}
+ prettier-plugin-tailwindcss@0.7.2:
+ resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==}
engines: {node: '>=20.19'}
peerDependencies:
'@ianvs/prettier-plugin-sort-imports': '*'
@@ -9771,7 +9771,7 @@ snapshots:
prelude-ls@1.2.1: {}
- prettier-plugin-tailwindcss@0.7.1(prettier@3.6.2):
+ prettier-plugin-tailwindcss@0.7.2(prettier@3.6.2):
dependencies:
prettier: 3.6.2
From 95a15478c78fcacdc8fbaabe8e5be4caacf4e4bd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 9 Dec 2025 12:23:58 +0330
Subject: [PATCH 008/153] Bump shiki from 3.15.0 to 3.19.0 (#1368)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 95 +++++++++++++++++++++++++++++---------------------
2 files changed, 56 insertions(+), 41 deletions(-)
diff --git a/package.json b/package.json
index 5b3dbfa70c..ede034ccea 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"glob": "^12.0.0",
"gray-matter": "^4.0.3",
"postcss": "^8.5.6",
- "shiki": "^3.15.0",
+ "shiki": "^3.19.0",
"sitemap": "^8.0.0",
"solid-heroicons": "^3.2.4",
"solid-js": "^1.9.10",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 431097b6ea..5ad8292d50 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,8 +51,8 @@ importers:
specifier: ^8.5.6
version: 8.5.6
shiki:
- specifier: ^3.15.0
- version: 3.15.0
+ specifier: ^3.19.0
+ version: 3.19.0
sitemap:
specifier: ^8.0.0
version: 8.0.0
@@ -1178,38 +1178,38 @@ packages:
'@shikijs/core@1.29.2':
resolution: {integrity: sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==}
- '@shikijs/core@3.15.0':
- resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==}
+ '@shikijs/core@3.19.0':
+ resolution: {integrity: sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA==}
'@shikijs/engine-javascript@1.29.2':
resolution: {integrity: sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==}
- '@shikijs/engine-javascript@3.15.0':
- resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==}
+ '@shikijs/engine-javascript@3.19.0':
+ resolution: {integrity: sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ==}
'@shikijs/engine-oniguruma@1.29.2':
resolution: {integrity: sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==}
- '@shikijs/engine-oniguruma@3.15.0':
- resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==}
+ '@shikijs/engine-oniguruma@3.19.0':
+ resolution: {integrity: sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==}
'@shikijs/langs@1.29.2':
resolution: {integrity: sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==}
- '@shikijs/langs@3.15.0':
- resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==}
+ '@shikijs/langs@3.19.0':
+ resolution: {integrity: sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==}
'@shikijs/themes@1.29.2':
resolution: {integrity: sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==}
- '@shikijs/themes@3.15.0':
- resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==}
+ '@shikijs/themes@3.19.0':
+ resolution: {integrity: sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==}
'@shikijs/types@1.29.2':
resolution: {integrity: sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==}
- '@shikijs/types@3.15.0':
- resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==}
+ '@shikijs/types@3.19.0':
+ resolution: {integrity: sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -3326,6 +3326,9 @@ packages:
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
@@ -3684,8 +3687,8 @@ packages:
oniguruma-to-es@2.3.0:
resolution: {integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==}
- oniguruma-to-es@4.3.3:
- resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -4291,8 +4294,8 @@ packages:
shiki@1.29.2:
resolution: {integrity: sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==}
- shiki@3.15.0:
- resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
+ shiki@3.19.0:
+ resolution: {integrity: sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -5692,7 +5695,7 @@ snapshots:
'@expressive-code/plugin-shiki@0.41.3':
dependencies:
'@expressive-code/core': 0.41.3
- shiki: 3.15.0
+ shiki: 3.19.0
'@expressive-code/plugin-text-markers@0.40.2':
dependencies:
@@ -6371,9 +6374,9 @@ snapshots:
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
- '@shikijs/core@3.15.0':
+ '@shikijs/core@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
hast-util-to-html: 9.0.5
@@ -6384,44 +6387,44 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 2.3.0
- '@shikijs/engine-javascript@3.15.0':
+ '@shikijs/engine-javascript@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
- oniguruma-to-es: 4.3.3
+ oniguruma-to-es: 4.3.4
'@shikijs/engine-oniguruma@1.29.2':
dependencies:
'@shikijs/types': 1.29.2
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/engine-oniguruma@3.15.0':
+ '@shikijs/engine-oniguruma@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
'@shikijs/langs@1.29.2':
dependencies:
'@shikijs/types': 1.29.2
- '@shikijs/langs@3.15.0':
+ '@shikijs/langs@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/themes@1.29.2':
dependencies:
'@shikijs/types': 1.29.2
- '@shikijs/themes@3.15.0':
+ '@shikijs/themes@3.19.0':
dependencies:
- '@shikijs/types': 3.15.0
+ '@shikijs/types': 3.19.0
'@shikijs/types@1.29.2':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- '@shikijs/types@3.15.0':
+ '@shikijs/types@3.19.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -8326,7 +8329,7 @@ snapshots:
comma-separated-tokens: 2.0.3
hast-util-whitespace: 3.0.0
html-void-elements: 3.0.0
- mdast-util-to-hast: 13.2.0
+ mdast-util-to-hast: 13.2.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
stringify-entities: 4.0.4
@@ -8919,6 +8922,18 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
+ mdast-util-to-hast@13.2.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+
mdast-util-to-markdown@2.1.2:
dependencies:
'@types/mdast': 4.0.4
@@ -9534,7 +9549,7 @@ snapshots:
regex: 5.1.1
regex-recursion: 5.1.1
- oniguruma-to-es@4.3.3:
+ oniguruma-to-es@4.3.4:
dependencies:
oniguruma-parser: 0.12.1
regex: 6.0.1
@@ -10216,14 +10231,14 @@ snapshots:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
- shiki@3.15.0:
+ shiki@3.19.0:
dependencies:
- '@shikijs/core': 3.15.0
- '@shikijs/engine-javascript': 3.15.0
- '@shikijs/engine-oniguruma': 3.15.0
- '@shikijs/langs': 3.15.0
- '@shikijs/themes': 3.15.0
- '@shikijs/types': 3.15.0
+ '@shikijs/core': 3.19.0
+ '@shikijs/engine-javascript': 3.19.0
+ '@shikijs/engine-oniguruma': 3.19.0
+ '@shikijs/langs': 3.19.0
+ '@shikijs/themes': 3.19.0
+ '@shikijs/types': 3.19.0
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
From 3e17ee3f4624564bf69fbdd12f4cc2529898f1ed Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 9 Dec 2025 08:55:05 +0000
Subject: [PATCH 009/153] Bump glob from 12.0.0 to 13.0.0 (#1369)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 42 +++++++++++++++---------------------------
2 files changed, 16 insertions(+), 28 deletions(-)
diff --git a/package.json b/package.json
index ede034ccea..eb16e462d6 100644
--- a/package.json
+++ b/package.json
@@ -28,7 +28,7 @@
"@solidjs/router": "^0.15.4",
"@solidjs/start": "^1.2.0",
"dotenv": "^17.2.3",
- "glob": "^12.0.0",
+ "glob": "^13.0.0",
"gray-matter": "^4.0.3",
"postcss": "^8.5.6",
"shiki": "^3.19.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5ad8292d50..a9f2916368 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -42,8 +42,8 @@ importers:
specifier: ^17.2.3
version: 17.2.3
glob:
- specifier: ^12.0.0
- version: 12.0.0
+ specifier: ^13.0.0
+ version: 13.0.0
gray-matter:
specifier: ^4.0.3
version: 4.0.3
@@ -2738,14 +2738,13 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
hasBin: true
- glob@12.0.0:
- resolution: {integrity: sha512-5Qcll1z7IKgHr5g485ePDdHcNQY0k2dtv/bjYy0iuyGxQw2qSOiiXUXJ+AYQpg3HNoUMHqAruX478Jeev7UULw==}
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
engines: {node: 20 || >=22}
- hasBin: true
globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
@@ -3086,10 +3085,6 @@ packages:
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
- engines: {node: 20 || >=22}
-
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
@@ -3247,8 +3242,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.2:
- resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
+ lru-cache@11.2.4:
+ resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -6965,7 +6960,7 @@ snapshots:
async-sema: 3.1.1
bindings: 1.5.0
estree-walker: 2.0.2
- glob: 10.4.5
+ glob: 10.5.0
graceful-fs: 4.2.11
node-gyp-build: 4.8.4
picomatch: 4.0.3
@@ -7149,7 +7144,7 @@ snapshots:
archiver-utils@5.0.2:
dependencies:
- glob: 10.4.5
+ glob: 10.5.0
graceful-fs: 4.2.11
is-stream: 2.0.1
lazystream: 1.0.1
@@ -8157,7 +8152,7 @@ snapshots:
dependencies:
is-glob: 4.0.3
- glob@10.4.5:
+ glob@10.5.0:
dependencies:
foreground-child: 3.3.1
jackspeak: 3.4.3
@@ -8166,13 +8161,10 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 1.11.1
- glob@12.0.0:
+ glob@13.0.0:
dependencies:
- foreground-child: 3.3.1
- jackspeak: 4.1.1
minimatch: 10.1.1
minipass: 7.1.2
- package-json-from-dist: 1.0.1
path-scurry: 2.0.1
globals@11.12.0: {}
@@ -8578,10 +8570,6 @@ snapshots:
optionalDependencies:
'@pkgjs/parseargs': 0.11.0
- jackspeak@4.1.1:
- dependencies:
- '@isaacs/cliui': 8.0.2
-
jiti@1.21.7: {}
jiti@2.6.1: {}
@@ -8720,7 +8708,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.2.2: {}
+ lru-cache@11.2.4: {}
lru-cache@5.1.1:
dependencies:
@@ -9658,7 +9646,7 @@ snapshots:
path-scurry@2.0.1:
dependencies:
- lru-cache: 11.2.2
+ lru-cache: 11.2.4
minipass: 7.1.2
path-to-regexp@6.3.0: {}
@@ -10472,7 +10460,7 @@ snapshots:
dependencies:
'@jridgewell/gen-mapping': 0.3.13
commander: 4.1.1
- glob: 10.4.5
+ glob: 10.5.0
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.7
From 5034c34e1affc1187da02906d9ed39b2b436101e Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 9 Dec 2025 08:55:59 +0000
Subject: [PATCH 010/153] Bump @types/node from 24.10.0 to 24.10.1 (#1370)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
package.json | 2 +-
pnpm-lock.yaml | 84 +++++++++++++++++++++++++-------------------------
2 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/package.json b/package.json
index eb16e462d6..57c04a8ed2 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,7 @@
"@kobalte/tailwindcss": "^0.9.0",
"@orama/crawly": "^0.0.6",
"@tailwindcss/typography": "^0.5.19",
- "@types/node": "^24.10.0",
+ "@types/node": "^24.10.1",
"@typescript-eslint/eslint-plugin": "^8.46.4",
"@typescript-eslint/parser": "^8.46.4",
"autoprefixer": "^10.4.22",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a9f2916368..67e7721f5a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,7 +13,7 @@ importers:
version: 0.13.11(solid-js@1.9.10)
'@kobalte/solidbase':
specifier: ^0.2.20
- version: 0.2.20(@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)))(@vue/compiler-sfc@3.5.16)(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ version: 0.2.20(@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)))(@vue/compiler-sfc@3.5.16)(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
'@oramacloud/client':
specifier: ^2.1.4
version: 2.1.4
@@ -37,7 +37,7 @@ importers:
version: 0.15.4(solid-js@1.9.10)
'@solidjs/start':
specifier: ^1.2.0
- version: 1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ version: 1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
dotenv:
specifier: ^17.2.3
version: 17.2.3
@@ -67,7 +67,7 @@ importers:
version: 0.3.0(solid-js@1.9.10)
vinxi:
specifier: ^0.5.7
- version: 0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ version: 0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
zod:
specifier: ^4.1.12
version: 4.1.12
@@ -85,8 +85,8 @@ importers:
specifier: ^0.5.19
version: 0.5.19(tailwindcss@3.4.18(yaml@2.8.1))
'@types/node':
- specifier: ^24.10.0
- version: 24.10.0
+ specifier: ^24.10.1
+ version: 24.10.1
'@typescript-eslint/eslint-plugin':
specifier: ^8.46.4
version: 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
@@ -122,7 +122,7 @@ importers:
version: 8.49.0(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)
vite:
specifier: ^6.3.5
- version: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ version: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
packages:
@@ -1427,8 +1427,8 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- '@types/node@24.10.0':
- resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -5817,7 +5817,7 @@ snapshots:
solid-presence: 0.1.8(solid-js@1.9.10)
solid-prevent-scroll: 0.1.10(solid-js@1.9.10)
- '@kobalte/solidbase@0.2.20(@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)))(@vue/compiler-sfc@3.5.16)(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@kobalte/solidbase@0.2.20(@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)))(@vue/compiler-sfc@3.5.16)(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
'@alloc/quick-lru': 5.2.0
'@bprogress/core': 1.3.4
@@ -5841,7 +5841,7 @@ snapshots:
'@solid-primitives/storage': 4.3.3(solid-js@1.9.10)
'@solidjs/meta': 0.29.4(solid-js@1.9.10)
'@solidjs/router': 0.15.4(solid-js@1.9.10)
- '@solidjs/start': 1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@solidjs/start': 1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
cross-spawn: 7.0.6
diff: 8.0.2
esast-util-from-js: 2.0.1
@@ -5865,7 +5865,7 @@ snapshots:
remark-frontmatter: 5.0.0
remark-gfm: 4.0.1
solid-js: 1.9.10
- solid-mdx: 0.0.7(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ solid-mdx: 0.0.7(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
source-map: 0.7.6
toml: 3.0.0
typescript: 5.9.3
@@ -5876,8 +5876,8 @@ snapshots:
unist-util-visit: 5.0.0
unplugin-auto-import: 19.3.0
unplugin-icons: 22.5.0(@vue/compiler-sfc@3.5.16)
- vinxi: 0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vinxi: 0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
yaml: 2.8.1
transitivePeerDependencies:
- '@nuxt/kit'
@@ -6551,11 +6551,11 @@ snapshots:
dependencies:
solid-js: 1.9.10
- '@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
- '@tanstack/server-functions-plugin': 1.121.21(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
- '@vinxi/server-components': 0.5.1(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@tanstack/server-functions-plugin': 1.121.21(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@vinxi/server-components': 0.5.1(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
cookie-es: 2.0.0
defu: 6.1.4
error-stack-parser: 2.1.4
@@ -6567,8 +6567,8 @@ snapshots:
source-map-js: 1.2.1
terracotta: 1.0.6(solid-js@1.9.10)
tinyglobby: 0.2.15
- vinxi: 0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
- vite-plugin-solid: 2.11.8(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ vinxi: 0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite-plugin-solid: 2.11.8(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
transitivePeerDependencies:
- '@testing-library/jest-dom'
- solid-js
@@ -6586,7 +6586,7 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 3.4.18(yaml@2.8.1)
- '@tanstack/directive-functions-plugin@1.121.21(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@tanstack/directive-functions-plugin@1.121.21(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/core': 7.28.4
@@ -6595,7 +6595,7 @@ snapshots:
'@tanstack/router-utils': 1.131.2
babel-dead-code-elimination: 1.0.10
tiny-invariant: 1.3.3
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -6610,7 +6610,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@tanstack/server-functions-plugin@1.121.21(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@tanstack/server-functions-plugin@1.121.21(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
'@babel/code-frame': 7.26.2
'@babel/core': 7.28.4
@@ -6619,7 +6619,7 @@ snapshots:
'@babel/template': 7.27.2
'@babel/traverse': 7.28.4
'@babel/types': 7.28.4
- '@tanstack/directive-functions-plugin': 1.121.21(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@tanstack/directive-functions-plugin': 1.121.21(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
babel-dead-code-elimination: 1.0.10
tiny-invariant: 1.3.3
transitivePeerDependencies:
@@ -6681,7 +6681,7 @@ snapshots:
'@types/node@17.0.45': {}
- '@types/node@24.10.0':
+ '@types/node@24.10.1':
dependencies:
undici-types: 7.16.0
@@ -6691,7 +6691,7 @@ snapshots:
'@types/sax@1.2.7':
dependencies:
- '@types/node': 24.10.0
+ '@types/node': 24.10.1
'@types/triple-beam@1.3.5': {}
@@ -6703,7 +6703,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 24.10.0
+ '@types/node': 24.10.1
optional: true
'@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.1(jiti@1.21.7))(typescript@5.9.3)':
@@ -6990,7 +6990,7 @@ snapshots:
untun: 0.1.3
uqr: 0.1.2
- '@vinxi/plugin-directives@0.5.1(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@vinxi/plugin-directives@0.5.1(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
'@babel/parser': 7.28.4
acorn: 8.15.0
@@ -7001,18 +7001,18 @@ snapshots:
magicast: 0.2.11
recast: 0.23.11
tslib: 2.8.1
- vinxi: 0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vinxi: 0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
- '@vinxi/server-components@0.5.1(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
+ '@vinxi/server-components@0.5.1(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))':
dependencies:
- '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ '@vinxi/plugin-directives': 0.5.1(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
acorn: 8.15.0
acorn-loose: 8.5.2
acorn-typescript: 1.4.13(acorn@8.15.0)
astring: 1.9.0
magicast: 0.2.11
recast: 0.23.11
- vinxi: 0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vinxi: 0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
'@vue/compiler-core@3.5.16':
dependencies:
@@ -10292,10 +10292,10 @@ snapshots:
'@corvu/utils': 0.4.2(solid-js@1.9.10)
solid-js: 1.9.10
- solid-mdx@0.0.7(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
+ solid-mdx@0.0.7(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
dependencies:
solid-js: 1.9.10
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
solid-presence@0.1.8(solid-js@1.9.10):
dependencies:
@@ -10945,7 +10945,7 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
- vinxi@0.5.7(@types/node@24.10.0)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1):
+ vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1):
dependencies:
'@babel/core': 7.25.8
'@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8)
@@ -10979,7 +10979,7 @@ snapshots:
unctx: 2.4.1
unenv: 1.10.0
unstorage: 1.16.0(db0@0.3.2)(ioredis@5.6.1)
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
zod: 3.25.76
transitivePeerDependencies:
- '@azure/app-configuration'
@@ -11023,7 +11023,7 @@ snapshots:
- xml2js
- yaml
- vite-plugin-solid@2.11.8(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
+ vite-plugin-solid@2.11.8(solid-js@1.9.10)(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
dependencies:
'@babel/core': 7.28.4
'@types/babel__core': 7.20.5
@@ -11031,12 +11031,12 @@ snapshots:
merge-anything: 5.1.7
solid-js: 1.9.10
solid-refresh: 0.6.3(solid-js@1.9.10)
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
- vitefu: 1.1.1(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vitefu: 1.1.1(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
transitivePeerDependencies:
- supports-color
- vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1):
+ vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1):
dependencies:
esbuild: 0.25.5
fdir: 6.4.6(picomatch@4.0.2)
@@ -11045,15 +11045,15 @@ snapshots:
rollup: 4.43.0
tinyglobby: 0.2.14
optionalDependencies:
- '@types/node': 24.10.0
+ '@types/node': 24.10.1
fsevents: 2.3.3
jiti: 1.21.7
terser: 5.42.0
yaml: 2.8.1
- vitefu@1.1.1(vite@6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
+ vitefu@1.1.1(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)):
optionalDependencies:
- vite: 6.3.5(@types/node@24.10.0)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
+ vite: 6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)
web-namespaces@2.0.1: {}
From 5246b9515d9ddcacd23561bd193093eebe330480 Mon Sep 17 00:00:00 2001
From: Sarah
Date: Sat, 13 Dec 2025 09:02:57 -0500
Subject: [PATCH 011/153] createSignal , createResource updates (#1356)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
Co-authored-by: Amir Hossein Hashemi <87268103+amirhhashemi@users.noreply.github.com>
---
.../basic-reactivity/create-resource.mdx | 389 ++++++++++--------
.../basic-reactivity/create-signal.mdx | 183 ++++----
2 files changed, 291 insertions(+), 281 deletions(-)
diff --git a/src/routes/reference/basic-reactivity/create-resource.mdx b/src/routes/reference/basic-reactivity/create-resource.mdx
index 2ebcfb4deb..1b293cf4e9 100644
--- a/src/routes/reference/basic-reactivity/create-resource.mdx
+++ b/src/routes/reference/basic-reactivity/create-resource.mdx
@@ -11,212 +11,261 @@ tags:
- loading
- error-handling
- ssr
-version: '1.0'
+version: "1.0"
description: >-
Fetch async data with createResource. Handles loading states, errors, and
integrates with Suspense for seamless data fetching in Solid.js applications.
---
-`createResource` takes an asynchronous fetcher function and returns a signal that is updated with the resulting data when the fetcher completes.
+Creates a reactive resource that manages asynchronous data fetching and loading states, automatically tracking dependencies and providing a simple interface for reading, refreshing, and error handling.
+It integrates with Solid's reactivity system and Suspense boundaries.
-There are two ways to use `createResource`: you can pass the fetcher function as the sole argument, or you can additionally pass a source signal as the first argument.
-The source signal will retrigger the fetcher whenever it changes, and its value will be passed to the fetcher.
+## Import
-```tsx
-const [data, { mutate, refetch }] = createResource(fetchData)
+```typescript
+import { createResource } from "solid-js";
```
-```tsx
-const [data, { mutate, refetch }] = createResource(source, fetchData)
+## Type
+
+```typescript
+// Without source
+function createResource(
+ fetcher: ResourceFetcher,
+ options?: ResourceOptions
+): ResourceReturn;
+
+// With source
+function createResource(
+ source: ResourceSource,
+ fetcher: ResourceFetcher,
+ options?: ResourceOptions
+): ResourceReturn;
```
-In these snippets, the fetcher is the function `fetchData`, and `data()` is undefined until `fetchData` finishes resolving.
-In the first case, `fetchData` will be called immediately.
-In the second, `fetchData` will be called as soon as `source` has any value other than false, null, or undefined.
-It will be called again whenever the value of `source` changes, and that value will always be passed to `fetchData` as its first argument.
-
-You can call `mutate` to directly update the `data` signal (it works like any other signal setter).
-You can also call refetch to rerun the fetcher directly, and pass an optional argument to provide additional info to the fetcher e.g `refetch(info)`.
-
-`data` works like a normal signal getter: use `data()` to read the last returned value of `fetchData`.
-But it also has extra reactive properties:
-
-- `data.loading`: whether the fetcher has been called but not returned.
-- `data.error`: if the request has errored out.
- `createResource`: provides an `Error` object for `data.error`. It will show even if the fetcher throws something else.
-
- - Fetcher throws an `Error` instance, `data.error` will be that instance.
- - If the fetcher throws a string, `data.error.message` will contain that string.
- - When the fetcher throws a value that is neither an `Error` nor a string, that value will be available as `data.error.cause`.
-
-- As of **v1.4.0**, `data.latest` returns the last value received and will not trigger [Suspense](/reference/components/suspense) or [transitions](#TODO); if no value has been returned yet, `data.latest` will act the same as `data()`.
- This can be useful if you want to show the out-of-date data while the new data is loading.
-
-`loading`, `error`, and `latest` are reactive getters and can be tracked.
-
-## The fetcher
-
-The `fetcher` is the async function that you provide to `createResource` to actually fetch the data.
-It is passed two arguments: the value of the source signal (if provided), and an info object with two properties: `value` and `refetching`.
-The `value` property tells you the previously fetched value.
-The `refetching` property is true if the `fetcher` was triggered using the refetch function and false otherwise.
-If the `refetch` function was called with an argument (`refetch(info)`), refetching is set to that argument.
-
-```tsx
-async function fetchData(source, { value, refetching }) {
- // Fetch the data and return a value.
- //`source` tells you the current value of the source signal;
- //`value` tells you the last returned value of the fetcher;
- //`refetching` is true when the fetcher is triggered by calling `refetch()`,
- // or equal to the optional data passed: `refetch(info)`
+### Related types
+
+```typescript
+type ResourceReturn = [Resource, ResourceActions];
+
+type Resource = {
+ (): T | undefined;
+ state: "unresolved" | "pending" | "ready" | "refreshing" | "errored";
+ loading: boolean;
+ error: any;
+ latest: T | undefined;
+};
+
+type ResourceActions = {
+ mutate: (value: T | undefined) => T | undefined;
+ refetch: (info?: R) => Promise | T | undefined;
+};
+
+type ResourceSource =
+ | S
+ | false
+ | null
+ | undefined
+ | (() => S | false | null | undefined);
+
+type ResourceFetcher = (
+ source: S,
+ info: { value: T | undefined; refetching: R | boolean }
+) => T | Promise;
+
+interface ResourceOptions {
+ initialValue?: T;
+ name?: string;
+ deferStream?: boolean;
+ ssrLoadFrom?: "initial" | "server";
+ storage?: (
+ init: T | undefined
+ ) => [Accessor, Setter];
+ onHydrated?: (k: S | undefined, info: { value: T | undefined }) => void;
}
+```
+
+## Parameters
+
+### `source`
+
+- **Type:** `ResourceSource`
+- **Default:** `undefined`
+
+Reactive data source evaluated before the fetcher runs.
+When the value is `undefined`, `null`, or `false`, the fetcher is not called.
+Otherwise the current value is passed as the first fetcher argument.
+Each change triggers the fetcher again.
+
+### `fetcher`
+
+- **Type:** `ResourceFetcher`
+
+Function that receives the source value (or `true` if no source), the current resource info, and returns a value or Promise.
+
+### `options`
+
+- **Type:** `ResourceOptions`
+- **Default:** `{}`
+
+Configuration options for the resource.
+
+#### `initialValue`
+
+- **Type:** `T`
+- **Default:** `undefined`
+
+Initial value for the resource.
+When provided, the resource starts in "ready" state and the type excludes `undefined`.
+
+#### `name`
+
+- **Type:** `string`
+- **Default:** `undefined`
+
+A name for debugging purposes in development mode.
+
+#### `deferStream`
+
+- **Type:** `boolean`
+- **Default:** `false`
-const [data, { mutate, refetch }] = createResource(getQuery, fetchData)
+Controls streaming behavior during server-side rendering.
-// read value
-data()
+#### `ssrLoadFrom`
-// check if loading
-data.loading
+- **Type:** `"initial" | "server"`
+- **Default:** `"server"`
-// check if errored
-data.error
+Determines how the resource loads during SSR hydration.
-// directly set value without creating promise
-mutate(optimisticValue)
+- "server": Uses the server-fetched value during hydration.
+- "initial": Re-fetches on the client after hydration.
-// refetch the last request explicitly
-refetch()
+#### `storage`
+- **Type:** `(init: T | undefined) => [Accessor, Setter]`
+- **Default:** `createSignal`
+
+Custom storage function for the resource value, useful for persistence or custom state management.
+
+#### `onHydrated`
+
+- **Type:** `(k: S | undefined, info: { value: T | undefined }) => void`
+- **Default:** `undefined`
+
+Callback fired when the resource hydrates on the client side.
+
+## Return value
+
+- **Type:** `[Resource, ResourceActions]`
+
+Returns a tuple containing the resource accessor and resource actions.
+
+### `Resource`
+
+```typescript
+type Resource = {
+ (): T | undefined;
+ state: "unresolved" | "pending" | "ready" | "refreshing" | "errored";
+ loading: boolean;
+ error: any;
+ latest: T | undefined;
+};
+```
+
+- `state`: Current state of the resource.
+ See the table below for state descriptions.
+- `loading`: Indicates if the resource is currently loading.
+- `error`: Error information if the resource failed to load.
+- `latest`: The latest value of the resource.
+
+| State | Description | Loading | Error | Latest |
+| ------------ | --------------------------------------- | ------- | ----------- | ----------- |
+| `unresolved` | Initial state, not yet fetched | `false` | `undefined` | `undefined` |
+| `pending` | Fetching in progress | `true` | `undefined` | `undefined` |
+| `ready` | Successfully fetched | `false` | `undefined` | `T` |
+| `refreshing` | Refetching while keeping previous value | `true` | `undefined` | `T` |
+| `errored` | Fetching failed | `false` | `any` | `undefined` |
+
+### `ResourceActions`
+
+```typescript
+type ResourceActions = {
+ mutate: (value: T | undefined) => T | undefined;
+ refetch: (info?: R) => Promise | T | undefined;
+};
```
-## Version 1.4.0 and Later
+- `mutate`: Function to manually overwrite the resource value without calling the fetcher.
+ Allows you to optimistically update the resource value locally, without making a network request.
+- `refetch`: Function to re-run the fetcher without changing the source.
+ If a parameter is provided to `refetch`, it will be passed to the fetcher's `refetching` property.
-#### v1.4.0
+## Examples
-If you're using `renderToStream`, you can tell Solid to wait for a resource before flushing the stream using the `deferStream` option:
+### Basic usage
-```tsx
-// fetches a user and streams content as soon as possible
-const [user] = createResource(() => params.id, fetchUser)
+```typescript
+const [data] = createResource(async () => {
+ const response = await fetch("/api/data");
+ return response.json();
+});
-// fetches a user but only streams content after this resource has loaded
-const [user] = createResource(() => params.id, fetchUser, {
- deferStream: true,
-})
+// Access data
+console.log(data()); // undefined initially, then fetched data
+console.log(data.loading); // true during fetch
+console.log(data.state); // "pending" → "ready"
```
-#### v1.5.0
+### With source
+
+```typescript
+const [userId, setUserId] = createSignal(1);
+
+const [user] = createResource(userId, async (id) => {
+ const response = await fetch(`/api/users/${id}`);
+ return response.json();
+});
+
+// Automatically refetches when userId changes
+setUserId(2);
+```
-1. We've added a new state field which covers a more detailed view of the Resource state beyond `loading` and `error`.
-You can now check whether a Resource is `unresolved`, `pending`, `ready`, `refreshing`, or `errored`.
+### With actions
-| State | Value resolved | Loading | Has error |
-| ------------ | -------------- | ------- | --------- |
-| `unresolved` | No | No | No |
-| `pending` | No | Yes | No |
-| `ready` | Yes | No | No |
-| `refreshing` | Yes | Yes | No |
-| `errored` | No | No | Yes |
+```typescript
+const [posts, { refetch, mutate }] = createResource(fetchPosts);
-2. When server-rendering resources, especially when embedding Solid in other systems that fetch data before rendering, you might want to initialize the resource with this prefetched value instead of fetching again and having the resource serialize it in its own state.
-You can use the new `ssrLoadFrom` option for this.
-Instead of using the default `server` value, you can pass `initial` and the resource will use `initialValue` as if it were the result of the first fetch for both SSR and hydration.
+// Manual refetch
+await refetch();
-```tsx
-const [data, { mutate, refetch }] = createResource(() => params.id, fetchUser, {
- initialValue: preloadedData,
- ssrLoadFrom: "initial",
-})
+// Optimistic update
+mutate((posts) => [...posts, newPost]);
```
-3. Resources can be set with custom defined storage with the same signature as a Signal by using the storage option.
-For example using a custom reconciling store could be done this way:
-
-```tsx
-function createDeepSignal(value: T): Signal {
- const [store, setStore] = createStore({
- value,
- })
- return [
- () => store.value,
- (v: T) => {
- const unwrapped = unwrap(store.value)
- typeof v === "function" && (v = v(unwrapped))
- setStore("value", reconcile(v))
- return store.value
- },
- ] as Signal
-}
+### Error handling
+
+```typescript
+const [data] = createResource(async () => {
+ const response = await fetch('/api/data');
+ if (!response.ok) throw new Error('Failed to fetch');
+ return response.json();
+});
-const [resource] = createResource(fetcher, {
- storage: createDeepSignal,
-})
+// In JSX
+Error loading data}>
+
{data()?.title}
+
```
-This option is still experimental and may change in the future.
-
-## Options
-
-The `createResource` function takes an optional third argument, an options object. The options are:
-
-| Name | Type | Default | Description |
-| ------------ | ----------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| name | `string` | `undefined` | A name for the resource. This is used for debugging purposes. |
-| deferStream | `boolean` | `false` | If true, Solid will wait for the resource to resolve before flushing the stream. |
-| initialValue | `any` | `undefined` | The initial value of the resource. |
-| onHydrated | `function` | `undefined` | A callback that is called when the resource is hydrated. |
-| ssrLoadFrom | `"server" \| "initial"` | `"server"` | The source of the initial value for SSR. If set to `"initial"`, the resource will use the `initialValue` option instead of the value returned by the fetcher. |
-| storage | `function` | `createSignal` | A function that returns a signal. This can be used to create a custom storage for the resource. This is still experimental |
-
-## Note for TypeScript users
-
-The function and type definitions for `createResource` are as follows:
-
-```tsx
-import { createResource } from "solid-js"
-import type { ResourceReturn, ResourceOptions } from "solid-js"
-
-type ResourceReturn = [
- {
- (): T | undefined
- state: "unresolved" | "pending" | "ready" | "refreshing" | "errored"
- loading: boolean
- error: any
- latest: T | undefined
- },
- {
- mutate: (v: T | undefined) => T | undefined
- refetch: (info: unknown) => Promise | T
- }
-]
-
-type ResourceOptions = {
- initialValue?: T
- name?: string
- deferStream?: boolean
- ssrLoadFrom?: "initial" | "server"
- storage?: (
- init: T | undefined
- ) => [Accessor, Setter]
- onHydrated?: (k: S | undefined, info: { value: T | undefined }) => void
-}
+### With initial value
-function createResource(
- fetcher: (
- k: U,
- info: { value: T | undefined; refetching: boolean | unknown }
- ) => T | Promise,
- options?: ResourceOptions
-): ResourceReturn
-
-function createResource(
- source: U | false | null | (() => U | false | null),
- fetcher: (
- k: U,
- info: { value: T | undefined; refetching: boolean | unknown }
- ) => T | Promise,
- options?: ResourceOptions
-): ResourceReturn
+```typescript
+const [user] = createResource(() => fetchUser(), {
+ initialValue: { name: "Loading...", id: 0 },
+});
+// user() is never undefined
+console.log(user().name); // "Loading..." initially
```
diff --git a/src/routes/reference/basic-reactivity/create-signal.mdx b/src/routes/reference/basic-reactivity/create-signal.mdx
index f6de896ac9..ca80f50522 100644
--- a/src/routes/reference/basic-reactivity/create-signal.mdx
+++ b/src/routes/reference/basic-reactivity/create-signal.mdx
@@ -9,153 +9,114 @@ tags:
- reactivity
- core
- primitives
-version: '1.0'
+version: "1.0"
description: >-
Create reactive state with createSignal, Solid's fundamental primitive. Track
values that change over time and automatically update your UI when they do.
---
-Signals are the most basic reactive primitive.
-They track a single value (which can be a value of any type) that changes over time.
+Creates a reactive state primitive consisting of a getter (accessor) and a setter function that forms the foundation of Solid's reactivity system.
+Signals use a pull-based reactivity model where tracking subscriptions (reads) is lightweight, while updates (writes) trigger dependency tracking and effect re-execution, making them optimized for frequent reads and infrequent writes.
-```tsx
-import { createSignal } from "solid-js"
-
-function createSignal(
- initialValue: T,
- options?: {
- equals?: false | ((prev: T, next: T) => boolean)
- name?: string
- internal?: boolean
- }
-): [get: () => T, set: (v: T) => T]
-
-// available types for return value of createSignal:
-import type { Signal, Accessor, Setter } from "solid-js"
-type Signal = [get: Accessor, set: Setter]
-type Accessor = () => T
-type Setter = (v: T | ((prev?: T) => T)) => T
+## Import
+```typescript
+import { createSignal } from "solid-js";
```
-The Signal's value starts out equal to the passed first argument `initialValue` (or undefined if there are no arguments).
-The `createSignal` function returns a pair of functions as a two-element array: a getter (or accessor) and a setter.
-In typical use, you would destructure this array into a named Signal like so:
+## Type signature
-```tsx
-const [count, setCount] = createSignal(0)
-const [ready, setReady] = createSignal(false)
-```
+```typescript
+function createSignal(): Signal;
+function createSignal(value: T, options?: SignalOptions): Signal;
-Calling the getter (e.g., `count()` or `ready()`) returns the current value of the Signal.
+type Signal = [get: Accessor, set: Setter];
-Crucial to automatic dependency tracking, calling the getter within a tracking scope causes the calling function to depend on this Signal, so that function will rerun if the Signal gets updated.
+type Accessor = () => T;
-Calling the setter (e.g., `setCount(nextCount)` or `setReady(nextReady)`) sets the Signal's value and updates the Signal (triggering dependents to rerun) if the value actually changed (see details below).
-The setter takes either the new value for the signal or a function that maps the previous value of the signal to a new value as its only argument.
-The updated value is also returned by the setter. As an example:
+type Setter = {
+ (value: Exclude | ((prev: T) => U)): U;
+ (value: (prev: T) => U): U;
+ (value: Exclude): U;
+ (value: Exclude | ((prev: T) => U)): U;
+};
-```tsx
-// read signal's current value, and
-// depend on signal if in a tracking scope
-// (but nonreactive outside of a tracking scope):
-const currentCount = count()
+interface SignalOptions {
+ name?: string;
+ equals?: false | ((prev: T, next: T) => boolean);
+ internal?: boolean;
+}
+```
-// or wrap any computation with a function,
-// and this function can be used in a tracking scope:
-const doubledCount = () => 2 * count()
+## Parameters
-// or build a tracking scope and depend on signal:
-const countDisplay =
{count()}
+### `value`
-// write signal by providing a value:
-setReady(true)
+- **Type:** `T`
+- **Default:** `undefined`
-// write signal by providing a function setter:
-const newCount = setCount((prev) => prev + 1)
+The initial value for the signal.
+If no initial value is provided, the signal's type is automatically extended with `undefined`.
-```
+### `options`
-:::note
- If you want to store a function in a Signal you must use the function form:
+- **Type:** `SignalOptions`
+- **Default:** `undefined`
- ```tsx
- setValue(() => myFunction);
- ```
+Configuration object for the signal.
- However, functions are not treated specially as the `initialValue` argument to `createSignal`, so you can pass a
- function initial value as is:
+#### `name`
- ```tsx
- const [func, setFunc] = createSignal(myFunction);
- ```
+- **Type:** `string`
+- **Default:** `undefined`
-:::
+A name for the signal used by debugging tools like [Solid devtools](https://github.com/thetarnav/solid-devtools).
+It works only in development mode and is removed from the production bundle.
-## Options
+#### `equals`
-| Name | Type | Default | Description |
-| ---------- | ------------------------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `equals` | `false \| ((prev: T, next: T) => boolean)` | `===` | A function that determines whether the Signal's value has changed. If the function returns true, the Signal's value will not be updated and dependents will not rerun. If the function returns false, the Signal's value will be updated and dependents will rerun. |
-| `name` | `string` | | A name for the Signal. This is useful for debugging. |
-| `internal` | `boolean` | `false` | If true, the Signal will not be accessible in the devtools. |
+- **Type:** `false | ((prev: T, next: T) => boolean)`
+- **Default:** `false`
-### `equals`
+A custom comparison function to determine when the signal should update.
+By default, signals use reference equality (`===`) to compare previous and next values.
+When set to `false`, the signal will always update regardless of value equality, which is useful for creating signals that trigger manual updates in the reactive system.
-The `equals` option can be used to customize the equality check used to determine whether the Signal's value has changed.
-By default, the equality check is a strict equality check (`===`).
-If you want to use a different equality check, you can pass a custom function as the `equals` option.
-The custom function will be called with the previous and next values of the Signal as arguments.
-If the function returns true, the Signal's value will not be updated and dependents will not rerun.
-If the function returns false, the Signal's value will be updated and dependents will rerun.
+When providing a custom function, it should be pure and return `true` if the values are equal (no update needed) or `false` if they differ (trigger update).
+Impure functions can create unexpected side effects and performance issues.
-```tsx
-const [count, setCount] = createSignal(0, {
- equals: (prev, next) => prev === next,
-})
-```
+#### `internal`
-Here are some examples of this option in use:
+- **Type:** `boolean`
+- **Default:** `false`
-```tsx
-// use { equals: false } to allow modifying object in-place;
-// normally this wouldn't be seen as an update because the
-// object has the same identity before and after change
-const [object, setObject] = createSignal({ count: 0 }, { equals: false })
-setObject((current) => {
- current.count += 1
- current.updated = new Date()
- return current
-})
-
-// use { equals: false } to create a signal that acts as a trigger without storing a value:
-const [depend, rerun] = createSignal(undefined, { equals: false })
-// now calling depend() in a tracking scope
-// makes that scope rerun whenever rerun() gets called
-
-// define equality based on string length:
-const [myString, setMyString] = createSignal("string", {
- equals: (newVal, oldVal) => newVal.length === oldVal.length,
-})
-
-setMyString("string") // considered equal to the last value and won't cause updates
-setMyString("stranger") // considered different and will cause updates
-```
+Marks the signal as internal, preventing it from appearing in development tools.
+This is primarily used by Solid's internal systems.
-### `name`
+## Return value
-The `name` option can be used to give the Signal a name.
-This is useful for debugging. The name will be displayed in the devtools.
+- **Type:** `Signal`
-```tsx
-const [count, setCount] = createSignal(0, { name: "count" })
-```
+Returns a tuple `[getter, setter]` where:
+
+- **getter**: An accessor function that returns the current value and tracks dependencies when called within a reactive context
+- **setter**: A function that updates the signal's value and notifies all dependent computations
-### `internal`
+## Examples
-The `internal` option can be used to hide the Signal from the devtools.
-This is useful for Signals that are used internally by a component and should not be exposed to the user.
+### Basic usage
```tsx
-const [count, setCount] = createSignal(0, { internal: true })
+import { createSignal } from "solid-js";
+
+function Counter() {
+ const [count, setCount] = createSignal(0);
+
+ return (
+
+
+ {count()}
+
+ );
+}
```
From 61569b02547f30796537a5140930687580437841 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 06:19:29 -0800
Subject: [PATCH 012/153] fix broken links
---
src/routes/solid-router/concepts/actions.mdx | 4 ++--
.../solid-router/reference/data-apis/create-async-store.mdx | 2 +-
src/routes/solid-router/reference/data-apis/create-async.mdx | 2 +-
.../solid-start/building-your-application/data-fetching.mdx | 4 ++--
src/routes/solid-start/guides/data-fetching.mdx | 2 +-
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/routes/solid-router/concepts/actions.mdx b/src/routes/solid-router/concepts/actions.mdx
index a04eaea673..a254565e0b 100644
--- a/src/routes/solid-router/concepts/actions.mdx
+++ b/src/routes/solid-router/concepts/actions.mdx
@@ -26,7 +26,7 @@ Actions provide several benefits:
- **Integrated state management:**
Solid Router automatically tracks the execution state of an action, simplifying reactive UI feedback.
- **Automatic data revalidation:**
- After an action successfully completes, Solid Router revalidates relevant [`queries`](/solid-router/concepts/queries), ensuring the UI reflects the latest data.
+ After an action successfully completes, Solid Router revalidates relevant [`queries`](/solid-router/concepts/data-fetching/queries), ensuring the UI reflects the latest data.
- **Progressive enhancement:**
When used with HTML forms, actions enable functionality even if JavaScript is not yet loaded.
@@ -281,7 +281,7 @@ To prevent this, ensure every code path in an action returns a value, such as `{
## Automatic data revalidation
After server data changes, the application's can become stale.
-To solve this, Solid Router automatically revalidates all [queries](/solid-router/concepts/queries) used in the same page after a successful action.
+To solve this, Solid Router automatically revalidates all [queries](/solid-router/concepts/data-fetching/queries) used in the same page after a successful action.
This ensures any component using that data is automatically updated with the freshest information.
For example, if a page displays a list of registered devices and includes a form to register a new one, the list will automatically update after the form is submitted.
diff --git a/src/routes/solid-router/reference/data-apis/create-async-store.mdx b/src/routes/solid-router/reference/data-apis/create-async-store.mdx
index 942e135e4d..b867b88480 100644
--- a/src/routes/solid-router/reference/data-apis/create-async-store.mdx
+++ b/src/routes/solid-router/reference/data-apis/create-async-store.mdx
@@ -87,7 +87,7 @@ The initial value of the returned store before the fetcher resolves.
- **Type:** `boolean`
- **Required:** No
-If `true`, [streaming](/solid-router/concepts/queries#streaming) will be deferred until the resource has resolved.
+If `true`, [streaming](/solid-router/concepts/data-fetching/streaming) will be deferred until the resource has resolved.
#### `reconcile`
diff --git a/src/routes/solid-router/reference/data-apis/create-async.mdx b/src/routes/solid-router/reference/data-apis/create-async.mdx
index 0831a86a29..53424a4cbb 100644
--- a/src/routes/solid-router/reference/data-apis/create-async.mdx
+++ b/src/routes/solid-router/reference/data-apis/create-async.mdx
@@ -90,7 +90,7 @@ The initial value of the returned signal before the fetcher finishes executing.
- **Type:** `boolean`
- **Required:** No
-If `true`, [streaming](/solid-router/concepts/queries#streaming) will be deferred until the fetcher finishes executing.
+If `true`, [streaming](/solid-router/concepts/data-fetching/streaming) will be deferred until the fetcher finishes executing.
## Return value
diff --git a/src/routes/solid-start/building-your-application/data-fetching.mdx b/src/routes/solid-start/building-your-application/data-fetching.mdx
index 6204a6bb47..ea8784f842 100644
--- a/src/routes/solid-start/building-your-application/data-fetching.mdx
+++ b/src/routes/solid-start/building-your-application/data-fetching.mdx
@@ -3,12 +3,12 @@ title: "Data fetching"
---
Fetching data from a remote API or database is a core task for most applications.
-[Solid](/) and [Solid Router](/solid-router) provide foundational tools like the [`createResource` primitive](/guides/fetching-data) and [queries](/solid-router/concepts/queries) to manage asynchronous data.
+[Solid](/) and [Solid Router](/solid-router) provide foundational tools like the [`createResource` primitive](/guides/fetching-data) and [queries](/solid-router/concepts/data-fetching/queries) to manage asynchronous data.
SolidStart builds on these capabilities, extending them to provide a comprehensive solution for data fetching in a full-stack environment.
This page assumes you are familiar with the fundamental concepts of Solid and Solid Router.
-If you are a beginner, we highly recommend starting with the [queries documentation](/solid-router/concepts/queries).
+If you are a beginner, we highly recommend starting with the [queries documentation](/solid-router/concepts/data-fetching/queries).
You can also find many practical examples in the [data fetching how-to guide](/solid-start/guides/data-fetching).
## Server functions and queries
diff --git a/src/routes/solid-start/guides/data-fetching.mdx b/src/routes/solid-start/guides/data-fetching.mdx
index 221f6ea1fb..01fbb6c077 100644
--- a/src/routes/solid-start/guides/data-fetching.mdx
+++ b/src/routes/solid-start/guides/data-fetching.mdx
@@ -19,7 +19,7 @@ description: >-
This guide provides practical examples of common data-fetching tasks in SolidStart.
-Here's an example showing how to create a [`query`](/solid-router/concepts/queries) and access its data with the [`createAsync` primitive](/solid-router/reference/data-apis/create-async):
+Here's an example showing how to create a [`query`](/solid-router/reference/data-apis/query) and access its data with the [`createAsync` primitive](/solid-router/reference/data-apis/create-async):
```tsx tab title="TypeScript"
// src/routes/index.tsx
From 95832e2ef5779d39e0b5e88d93de9a7677d9714e Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 06:26:31 -0800
Subject: [PATCH 013/153] fix links
---
src/routes/solid-router/concepts/actions.mdx | 4 ++--
.../solid-router/reference/data-apis/create-async-store.mdx | 2 +-
src/routes/solid-router/reference/data-apis/create-async.mdx | 2 +-
.../solid-start/building-your-application/data-fetching.mdx | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/routes/solid-router/concepts/actions.mdx b/src/routes/solid-router/concepts/actions.mdx
index a254565e0b..31f3901db8 100644
--- a/src/routes/solid-router/concepts/actions.mdx
+++ b/src/routes/solid-router/concepts/actions.mdx
@@ -26,7 +26,7 @@ Actions provide several benefits:
- **Integrated state management:**
Solid Router automatically tracks the execution state of an action, simplifying reactive UI feedback.
- **Automatic data revalidation:**
- After an action successfully completes, Solid Router revalidates relevant [`queries`](/solid-router/concepts/data-fetching/queries), ensuring the UI reflects the latest data.
+ After an action successfully completes, Solid Router revalidates relevant [`queries`](/solid-router/data-fetching/queries), ensuring the UI reflects the latest data.
- **Progressive enhancement:**
When used with HTML forms, actions enable functionality even if JavaScript is not yet loaded.
@@ -281,7 +281,7 @@ To prevent this, ensure every code path in an action returns a value, such as `{
## Automatic data revalidation
After server data changes, the application's can become stale.
-To solve this, Solid Router automatically revalidates all [queries](/solid-router/concepts/data-fetching/queries) used in the same page after a successful action.
+To solve this, Solid Router automatically revalidates all [queries](/solid-router/data-fetching/queries) used in the same page after a successful action.
This ensures any component using that data is automatically updated with the freshest information.
For example, if a page displays a list of registered devices and includes a form to register a new one, the list will automatically update after the form is submitted.
diff --git a/src/routes/solid-router/reference/data-apis/create-async-store.mdx b/src/routes/solid-router/reference/data-apis/create-async-store.mdx
index b867b88480..946a97efc1 100644
--- a/src/routes/solid-router/reference/data-apis/create-async-store.mdx
+++ b/src/routes/solid-router/reference/data-apis/create-async-store.mdx
@@ -87,7 +87,7 @@ The initial value of the returned store before the fetcher resolves.
- **Type:** `boolean`
- **Required:** No
-If `true`, [streaming](/solid-router/concepts/data-fetching/streaming) will be deferred until the resource has resolved.
+If `true`, [streaming](/solid-router/data-fetching/streaming) will be deferred until the resource has resolved.
#### `reconcile`
diff --git a/src/routes/solid-router/reference/data-apis/create-async.mdx b/src/routes/solid-router/reference/data-apis/create-async.mdx
index 53424a4cbb..bfbdac5497 100644
--- a/src/routes/solid-router/reference/data-apis/create-async.mdx
+++ b/src/routes/solid-router/reference/data-apis/create-async.mdx
@@ -90,7 +90,7 @@ The initial value of the returned signal before the fetcher finishes executing.
- **Type:** `boolean`
- **Required:** No
-If `true`, [streaming](/solid-router/concepts/data-fetching/streaming) will be deferred until the fetcher finishes executing.
+If `true`, [streaming](/solid-router/data-fetching/streaming) will be deferred until the fetcher finishes executing.
## Return value
diff --git a/src/routes/solid-start/building-your-application/data-fetching.mdx b/src/routes/solid-start/building-your-application/data-fetching.mdx
index ea8784f842..497499b781 100644
--- a/src/routes/solid-start/building-your-application/data-fetching.mdx
+++ b/src/routes/solid-start/building-your-application/data-fetching.mdx
@@ -3,12 +3,12 @@ title: "Data fetching"
---
Fetching data from a remote API or database is a core task for most applications.
-[Solid](/) and [Solid Router](/solid-router) provide foundational tools like the [`createResource` primitive](/guides/fetching-data) and [queries](/solid-router/concepts/data-fetching/queries) to manage asynchronous data.
+[Solid](/) and [Solid Router](/solid-router) provide foundational tools like the [`createResource` primitive](/guides/fetching-data) and [queries](/solid-router/data-fetching/queries) to manage asynchronous data.
SolidStart builds on these capabilities, extending them to provide a comprehensive solution for data fetching in a full-stack environment.
This page assumes you are familiar with the fundamental concepts of Solid and Solid Router.
-If you are a beginner, we highly recommend starting with the [queries documentation](/solid-router/concepts/data-fetching/queries).
+If you are a beginner, we highly recommend starting with the [queries documentation](/solid-router/data-fetching/queries).
You can also find many practical examples in the [data fetching how-to guide](/solid-start/guides/data-fetching).
## Server functions and queries
From c8f1ab57dab818163b624d2d3ca7d1ab5464fa14 Mon Sep 17 00:00:00 2001
From: Michele Riva
Date: Sat, 13 Dec 2025 06:40:03 -0800
Subject: [PATCH 014/153] refactor: migrate to new orama infra (#1371)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
---
.github/workflows/orama_sync.yml | 3 +-
env.d.ts | 4 +-
package.json | 4 +-
pnpm-lock.yaml | 64 +++++++++++-----------
public/llms.txt | 10 +++-
scripts/sync-orama.mjs | 92 +++++++++++---------------------
src/ui/search.tsx | 58 +++++++++-----------
7 files changed, 104 insertions(+), 131 deletions(-)
diff --git a/.github/workflows/orama_sync.yml b/.github/workflows/orama_sync.yml
index 30d83ee15e..f8715f8533 100644
--- a/.github/workflows/orama_sync.yml
+++ b/.github/workflows/orama_sync.yml
@@ -32,4 +32,5 @@ jobs:
run: pnpm sync:orama
env:
ORAMA_PRIVATE_API_KEY: ${{ secrets.ORAMA_PRIVATE_API_KEY }}
- ORAMA_PRIVATE_INDEX_ID: ${{ secrets.ORAMA_PRIVATE_INDEX_ID }}
+ ORAMA_DATASOURCE_ID: ${{ secrets.ORAMA_DATASOURCE_ID }}
+ ORAMA_PROJECT_ID: ${{ secrets.ORAMA_PROJECT_ID }}
diff --git a/env.d.ts b/env.d.ts
index df07a81008..eaa53030d6 100644
--- a/env.d.ts
+++ b/env.d.ts
@@ -10,8 +10,10 @@ interface ImportMeta {
declare namespace NodeJS {
interface ProcessEnv {
+ readonly ORAMA_PROJECT_ID: string;
+ readonly ORAMA_DATASOURCE_ID: string;
+ readonly ORAMA_PUBLIC_API_KEY: string;
readonly ORAMA_PRIVATE_API_KEY: string;
- readonly ORAMA_PRIVATE_INDEX_ID: string;
}
}
diff --git a/package.json b/package.json
index 57c04a8ed2..9613cd305c 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"dependencies": {
"@kobalte/core": "^0.13.11",
"@kobalte/solidbase": "^0.2.20",
- "@oramacloud/client": "^2.1.4",
+ "@orama/core": "^1.2.14",
"@solid-primitives/event-listener": "^2.4.3",
"@solid-primitives/marker": "^0.2.2",
"@solid-primitives/media": "^2.3.3",
@@ -62,4 +62,4 @@
"node": ">=24",
"pnpm": ">=10"
}
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 67e7721f5a..2398200099 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,9 +14,9 @@ importers:
'@kobalte/solidbase':
specifier: ^0.2.20
version: 0.2.20(@solidjs/start@1.2.0(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1)))(@vue/compiler-sfc@3.5.16)(solid-js@1.9.10)(vinxi@0.5.7(@types/node@24.10.1)(db0@0.3.2)(ioredis@5.6.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))(vite@6.3.5(@types/node@24.10.1)(jiti@1.21.7)(terser@5.42.0)(yaml@2.8.1))
- '@oramacloud/client':
- specifier: ^2.1.4
- version: 2.1.4
+ '@orama/core':
+ specifier: ^1.2.14
+ version: 1.2.14
'@solid-primitives/event-listener':
specifier: ^2.4.3
version: 2.4.3(solid-js@1.9.10)
@@ -799,18 +799,17 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@orama/core@1.2.14':
+ resolution: {integrity: sha512-+D6PXdztYM9j2Z115p7wEwTIVG/yN03jsMpra12NZ2d0GNQFSKLd5P8C+5N+9hKyjx9J47GVUwr9guxnb800yg==}
+
'@orama/crawly@0.0.6':
resolution: {integrity: sha512-8u0pv9IvKrYaO9gbOe7hcZ757Kd6y6qqyN5uPXXPJmAk0nXc2p172YsZEp8NzanZgvcH6G6t1XsG74t7Mptchw==}
'@orama/cuid2@2.2.3':
resolution: {integrity: sha512-Lcak3chblMejdlSHgYU2lS2cdOhDpU6vkfIJH4m+YKvqQyLqs1bB8+w6NT1MG5bO12NUK2GFc34Mn2xshMIQ1g==}
- '@orama/orama@3.1.7':
- resolution: {integrity: sha512-6yB0117ZjsgNevZw3LP+bkrZa9mU/POPVaXgzMPOBbBc35w2P3R+1vMMhEfC06kYCpd5bf0jodBaTkYQW5TVeQ==}
- engines: {node: '>= 20.0.0'}
-
- '@oramacloud/client@2.1.4':
- resolution: {integrity: sha512-uNPFs4wq/iOPbggCwTkVNbIr64Vfd7ZS/h+cricXVnzXWocjDTfJ3wLL4lr0qiSu41g8z+eCAGBqJ30RO2O4AA==}
+ '@orama/oramacore-events-parser@0.0.5':
+ resolution: {integrity: sha512-yAuSwog+HQBAXgZ60TNKEwu04y81/09mpbYBCmz1RCxnr4ObNY2JnPZI7HmALbjAhLJ8t5p+wc2JHRK93ubO4w==}
'@parcel/watcher-android-arm64@2.4.1':
resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==}
@@ -1720,10 +1719,6 @@ packages:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.2.0:
- resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==}
- engines: {node: '>=12'}
-
ansi-regex@6.2.2:
resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
@@ -4465,10 +4460,6 @@ packages:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
- engines: {node: '>=12'}
-
strip-ansi@7.1.2:
resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
@@ -5136,6 +5127,14 @@ packages:
resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
engines: {node: '>= 14'}
+ zod-to-json-schema@3.24.5:
+ resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
+ peerDependencies:
+ zod: ^3.24.1
+
+ zod@3.24.3:
+ resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==}
+
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
@@ -6052,6 +6051,13 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@orama/core@1.2.14':
+ dependencies:
+ '@orama/cuid2': 2.2.3
+ '@orama/oramacore-events-parser': 0.0.5
+ zod: 3.24.3
+ zod-to-json-schema: 3.24.5(zod@3.24.3)
+
'@orama/crawly@0.0.6':
dependencies:
cheerio: 1.0.0-rc.12
@@ -6061,13 +6067,7 @@ snapshots:
dependencies:
'@noble/hashes': 1.8.0
- '@orama/orama@3.1.7': {}
-
- '@oramacloud/client@2.1.4':
- dependencies:
- '@orama/cuid2': 2.2.3
- '@orama/orama': 3.1.7
- lodash: 4.17.21
+ '@orama/oramacore-events-parser@0.0.5': {}
'@parcel/watcher-android-arm64@2.4.1':
optional: true
@@ -7115,8 +7115,6 @@ snapshots:
ansi-regex@5.0.1: {}
- ansi-regex@6.2.0: {}
-
ansi-regex@6.2.2: {}
ansi-styles@3.2.1:
@@ -10397,7 +10395,7 @@ snapshots:
dependencies:
emoji-regex: 10.4.0
get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
string_decoder@1.1.1:
dependencies:
@@ -10416,10 +10414,6 @@ snapshots:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
- dependencies:
- ansi-regex: 6.2.0
-
strip-ansi@7.1.2:
dependencies:
ansi-regex: 6.2.2
@@ -11127,7 +11121,7 @@ snapshots:
dependencies:
ansi-styles: 6.2.3
string-width: 7.2.0
- strip-ansi: 7.1.0
+ strip-ansi: 7.1.2
wrappy@1.0.2: {}
@@ -11197,6 +11191,12 @@ snapshots:
compress-commons: 6.0.2
readable-stream: 4.7.0
+ zod-to-json-schema@3.24.5(zod@3.24.3):
+ dependencies:
+ zod: 3.24.3
+
+ zod@3.24.3: {}
+
zod@3.25.76: {}
zod@4.1.12: {}
diff --git a/public/llms.txt b/public/llms.txt
index 59c510b3f7..f0cd0ce392 100644
--- a/public/llms.txt
+++ b/public/llms.txt
@@ -128,7 +128,8 @@
- [Routing](https://docs.solidjs.com/solid-start/building-your-application/routing)
- [API routes](https://docs.solidjs.com/solid-start/building-your-application/api-routes)
- [CSS and styling](https://docs.solidjs.com/solid-start/building-your-application/css-and-styling)
-- [Data loading](https://docs.solidjs.com/solid-start/building-your-application/data-loading)
+- [Data fetching](https://docs.solidjs.com/solid-start/building-your-application/data-fetching)
+- [Data mutation](https://docs.solidjs.com/solid-start/building-your-application/data-mutation)
- [Head and metadata](https://docs.solidjs.com/solid-start/building-your-application/head-and-metadata)
- [Route Pre-rendering](https://docs.solidjs.com/solid-start/building-your-application/route-prerendering)
- [Static assets](https://docs.solidjs.com/solid-start/building-your-application/static-assets)
@@ -176,6 +177,11 @@
- [Actions](https://docs.solidjs.com/solid-router/concepts/actions)
- [Single page applications](https://docs.solidjs.com/solid-router/rendering-modes/spa)
- [Server side rendering](https://docs.solidjs.com/solid-router/rendering-modes/ssr)
+- [Queries](https://docs.solidjs.com/solid-router/data-fetching/queries)
+- [Streaming](https://docs.solidjs.com/solid-router/data-fetching/streaming)
+- [Revalidation](https://docs.solidjs.com/solid-router/data-fetching/revalidation)
+- [Preload data](https://docs.solidjs.com/solid-router/data-fetching/how-to/preload-data)
+- [Handle pending and error states](https://docs.solidjs.com/solid-router/data-fetching/how-to/handle-error-and-loading-states)
- [Lazy loading](https://docs.solidjs.com/solid-router/advanced-concepts/lazy-loading)
- [Migration from v0.9.x](https://docs.solidjs.com/solid-router/guides/migration)
- [A](https://docs.solidjs.com/solid-router/reference/components/a)
@@ -193,7 +199,7 @@
- [useAction](https://docs.solidjs.com/solid-router/reference/data-apis/use-action)
- [useSubmission](https://docs.solidjs.com/solid-router/reference/data-apis/use-submission)
- [useSubmissions](https://docs.solidjs.com/solid-router/reference/data-apis/use-submissions)
-- [Preload](https://docs.solidjs.com/solid-router/reference/preload-functions/preload)
+- [preload](https://docs.solidjs.com/solid-router/reference/preload-functions/preload)
- [useBeforeLeave](https://docs.solidjs.com/solid-router/reference/primitives/use-before-leave)
- [useCurrentMatches](https://docs.solidjs.com/solid-router/reference/primitives/use-current-matches)
- [useIsRouting](https://docs.solidjs.com/solid-router/reference/primitives/use-is-routing)
diff --git a/scripts/sync-orama.mjs b/scripts/sync-orama.mjs
index 8d72936d4f..749d26032f 100644
--- a/scripts/sync-orama.mjs
+++ b/scripts/sync-orama.mjs
@@ -1,10 +1,12 @@
import { readFileSync } from "node:fs";
import { globSync } from "glob";
+import { OramaCloud } from "@orama/core";
import { generalPurposeCrawler } from "@orama/crawly";
import "dotenv/config";
const ORAMA_PRIVATE_API_KEY = process.env.ORAMA_PRIVATE_API_KEY;
-const ORAMA_PRIVATE_INDEX_ID = process.env.ORAMA_PRIVATE_INDEX_ID;
+const ORAMA_DATASOURCE_ID = process.env.ORAMA_DATASOURCE_ID;
+const ORAMA_PROJECT_ID = process.env.ORAMA_PROJECT_ID;
const baseURL = new URL("../dist", import.meta.url).pathname;
const HTMLFiles = globSync("**/*.html", { cwd: baseURL });
@@ -18,71 +20,41 @@ const pagesToIndex = HTMLFiles.flatMap((file) => {
const productionDocsURL = `https://docs.solidjs.com/${path}`;
- return {
- ...generalPurposeCrawler(productionDocsURL, pageContent, {
- parseCodeBlocks: false,
- })[0],
- contentWithCode: generalPurposeCrawler(productionDocsURL, pageContent)?.[0]
- ?.content,
- };
-});
+ const content = generalPurposeCrawler(productionDocsURL, pageContent, { parseCodeBlocks: false })[0];
+ const contentWithCode = generalPurposeCrawler(productionDocsURL, pageContent, { parseCodeBlocks: true })[0];
-async function emptyIndex() {
- await fetch(
- `https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/snapshot`,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
- },
- body: JSON.stringify([]),
- }
- );
-}
+ const fullContent = {
+ title: content.title,
+ path: content.path,
+ content: content.content,
+ contentWithCode: contentWithCode.content,
+ }
-async function upsertFreshData() {
- const batches = [];
- const batchesSize = 25;
+ if (content?.category) {
+ fullContent.category = `enum('${content.category}')`
+ }
- for (let i = 0; i < pagesToIndex.length; i += batchesSize) {
- const batch = pagesToIndex.slice(i, i + batchesSize);
- batches.push(batch);
+ if (content?.section) {
+ fullContent.section = `enum('${content.section}')`
}
- for (let i = 0; i < batches.length; i++) {
- const batch = batches[i];
+ return fullContent
+});
- await fetch(
- `https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/notify`,
- {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
- },
- body: JSON.stringify({
- upsert: batch,
- }),
- }
- );
- }
-}
+const orama = new OramaCloud({
+ apiKey: ORAMA_PRIVATE_API_KEY,
+ projectId: ORAMA_PROJECT_ID
+})
-async function deployIndex() {
- await fetch(
- `https://api.oramasearch.com/api/v1/webhooks/${ORAMA_PRIVATE_INDEX_ID}/deploy`,
- {
- method: "POST",
- headers: {
- authorization: `Bearer ${ORAMA_PRIVATE_API_KEY}`,
- },
- }
- );
+const index = orama.index.set(ORAMA_DATASOURCE_ID)
+
+console.log(`[Orama] - Indexing ${pagesToIndex.length} documents to Orama...`)
- console.log("Index deployed");
-}
+const tempIndexId = `tempIndex-${Date.now()}`
+await index.createTemporaryIndex(tempIndexId)
+const tempIdx = orama.index.set(tempIndexId)
+await tempIdx.insertDocuments(pagesToIndex)
+await index.swapTemporaryIndex(ORAMA_DATASOURCE_ID, tempIndexId)
+await orama.index.delete(tempIndexId)
-await emptyIndex();
-await upsertFreshData();
-await deployIndex();
+console.log(`[Orama] - Indexed ${pagesToIndex.length} documents to Orama.`)
diff --git a/src/ui/search.tsx b/src/ui/search.tsx
index 33a3da7f29..4f29fc203c 100644
--- a/src/ui/search.tsx
+++ b/src/ui/search.tsx
@@ -1,4 +1,4 @@
-import { OramaClient } from "@oramacloud/client";
+import { OramaCloud, type SearchResult } from "@orama/core";
import {
createEffect,
createSignal,
@@ -16,23 +16,17 @@ import { createEventListener } from "@solid-primitives/event-listener";
import { isAppleDevice } from "@solid-primitives/platform";
function getOramaClient({
- endpoint,
- api_key,
-}: Record<"endpoint" | "api_key", string | null>) {
- return endpoint && api_key
- ? new OramaClient({
- endpoint,
- api_key,
+ projectId,
+ apiKey,
+}: Record<"projectId" | "apiKey", string | null>) {
+ return projectId && apiKey
+ ? new OramaCloud({
+ projectId,
+ apiKey,
})
: null;
}
-type OramaResult = {
- hits: {
- document: OramaDocument;
- }[];
-};
-
type OramaDocument = {
content: string;
path: string;
@@ -41,8 +35,8 @@ type OramaDocument = {
};
const client = getOramaClient({
- endpoint: import.meta.env.VITE_ORAMA_ENDPOINT ?? null,
- api_key: import.meta.env.VITE_ORAMA_API_KEY ?? null,
+ projectId: import.meta.env.ORAMA_PROJECT_ID ?? null,
+ apiKey: import.meta.env.ORAMA_PUBLIC_API_KEY ?? null,
});
export function Search() {
@@ -58,28 +52,27 @@ export function Search() {
async () => {
const _searchTerm = searchTerm();
if (!_searchTerm) return {};
- const result: OramaResult | null = await client.search({
+ const result = (await client.search({
term: _searchTerm,
mode: "fulltext",
- });
+ datasources: [],
+ })) as SearchResult;
if (!result) return {};
const seen: Record = {};
- result.hits = result.hits.filter(
- hit => {
- hit.document.path = hit.document.path.replace("/index#", "#");
- if(!seen[hit.document.path]) {
- seen[hit.document.path] = true;
- return hit;
- }
+ result.hits = result.hits.filter((hit) => {
+ hit.document.path = hit.document.path.replace("/index#", "#");
+ if (!seen[hit.document.path]) {
+ seen[hit.document.path] = true;
+ return hit;
}
- );
+ });
const groupedHits = result.hits.reduce(
(groupedHits, hit) => {
const section = hit.document.section.replace(
/(^|-)([a-z])/g,
- (_, sep, letter) => sep + letter.toUpperCase()
+ (_, sep, letter) => sep + letter.toUpperCase(),
);
if (!groupedHits[section]) {
groupedHits[section] = [];
@@ -87,13 +80,13 @@ export function Search() {
groupedHits[section].push(hit);
return groupedHits;
},
- {} as Record
+ {} as Record["hits"]>,
);
setActive(0);
setResultRefs([]);
return groupedHits;
},
- { initialValue: {} }
+ { initialValue: {} },
);
const resultArray = () => Object.values(result()).flatMap((hits) => hits);
@@ -196,7 +189,7 @@ export function Search() {
class="w-full rounded border border-blue-100 bg-white px-9 py-2 ring-2 ring-blue-400 focus:outline-none focus-visible:border focus-visible:border-blue-400 focus-visible:ring-2 dark:bg-slate-800"
onInput={(e) =>
startTransition(() =>
- setSearchTerm((e.target as HTMLInputElement).value)
+ setSearchTerm((e.target as HTMLInputElement).value),
)
}
onFocus={() => setActive(0)}
@@ -290,7 +283,7 @@ export function Search() {
{highlightContent(
trimContent(hit.document.content),
- regex()
+ regex(),
)}
@@ -835,8 +828,7 @@ function KeyboardShortcut(props: { key: string; class?: string }) {
return (
From 27d26dfccc493e6bb4c64edfdd017cb635aad7f7 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 07:01:09 -0800
Subject: [PATCH 015/153] search fix?
---
src/ui/search.tsx | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/ui/search.tsx b/src/ui/search.tsx
index 4f29fc203c..c20d940439 100644
--- a/src/ui/search.tsx
+++ b/src/ui/search.tsx
@@ -35,8 +35,8 @@ type OramaDocument = {
};
const client = getOramaClient({
- projectId: import.meta.env.ORAMA_PROJECT_ID ?? null,
- apiKey: import.meta.env.ORAMA_PUBLIC_API_KEY ?? null,
+ projectId: process.env.ORAMA_PROJECT_ID ?? null,
+ apiKey: process.env.ORAMA_PUBLIC_API_KEY ?? null,
});
export function Search() {
@@ -72,7 +72,7 @@ export function Search() {
(groupedHits, hit) => {
const section = hit.document.section.replace(
/(^|-)([a-z])/g,
- (_, sep, letter) => sep + letter.toUpperCase(),
+ (_, sep, letter) => sep + letter.toUpperCase()
);
if (!groupedHits[section]) {
groupedHits[section] = [];
@@ -80,13 +80,13 @@ export function Search() {
groupedHits[section].push(hit);
return groupedHits;
},
- {} as Record["hits"]>,
+ {} as Record["hits"]>
);
setActive(0);
setResultRefs([]);
return groupedHits;
},
- { initialValue: {} },
+ { initialValue: {} }
);
const resultArray = () => Object.values(result()).flatMap((hits) => hits);
@@ -189,7 +189,7 @@ export function Search() {
class="w-full rounded border border-blue-100 bg-white px-9 py-2 ring-2 ring-blue-400 focus:outline-none focus-visible:border focus-visible:border-blue-400 focus-visible:ring-2 dark:bg-slate-800"
onInput={(e) =>
startTransition(() =>
- setSearchTerm((e.target as HTMLInputElement).value),
+ setSearchTerm((e.target as HTMLInputElement).value)
)
}
onFocus={() => setActive(0)}
@@ -283,7 +283,7 @@ export function Search() {
{highlightContent(
trimContent(hit.document.content),
- regex(),
+ regex()
)}
From 3a7e01bcc6fe9e9beb8a4ef1fa3870aa6e76c006 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 07:31:27 -0800
Subject: [PATCH 016/153] fix?
---
src/ui/search.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/ui/search.tsx b/src/ui/search.tsx
index c20d940439..e58a0d8283 100644
--- a/src/ui/search.tsx
+++ b/src/ui/search.tsx
@@ -35,8 +35,8 @@ type OramaDocument = {
};
const client = getOramaClient({
- projectId: process.env.ORAMA_PROJECT_ID ?? null,
- apiKey: process.env.ORAMA_PUBLIC_API_KEY ?? null,
+ projectId: import.meta.env.ORAMA_PROJECT_ID ?? null,
+ apiKey: import.meta.env.ORAMA_PUBLIC_API_KEY ?? null,
});
export function Search() {
From e4bb92d48c45fde7d9c49af21df8b34f9bffa772 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 07:44:53 -0800
Subject: [PATCH 017/153] fixed now
---
src/ui/search.tsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/ui/search.tsx b/src/ui/search.tsx
index e58a0d8283..fc2b367195 100644
--- a/src/ui/search.tsx
+++ b/src/ui/search.tsx
@@ -35,8 +35,8 @@ type OramaDocument = {
};
const client = getOramaClient({
- projectId: import.meta.env.ORAMA_PROJECT_ID ?? null,
- apiKey: import.meta.env.ORAMA_PUBLIC_API_KEY ?? null,
+ projectId: import.meta.env.VITE_ORAMA_PROJECT_ID ?? null,
+ apiKey: import.meta.env.VITE_ORAMA_PUBLIC_API_KEY ?? null,
});
export function Search() {
From 18a572896de17747ff28182b2773a6a7210b0dc5 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 07:51:40 -0800
Subject: [PATCH 018/153] fix action?
---
.github/workflows/orama_sync.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/orama_sync.yml b/.github/workflows/orama_sync.yml
index f8715f8533..295a123e17 100644
--- a/.github/workflows/orama_sync.yml
+++ b/.github/workflows/orama_sync.yml
@@ -24,7 +24,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
- node-version: 20.x
+ node-version: 24.x
cache: pnpm
- name: Install dependencies
run: pnpm i
From 1167104acb062d3101e937cd7caac5a28bd6265e Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 07:54:02 -0800
Subject: [PATCH 019/153] fix actions?
---
.github/workflows/orama_sync.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/orama_sync.yml b/.github/workflows/orama_sync.yml
index 295a123e17..ab1e5df913 100644
--- a/.github/workflows/orama_sync.yml
+++ b/.github/workflows/orama_sync.yml
@@ -18,9 +18,9 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
- - uses: pnpm/action-setup@v3
+ - uses: pnpm/action-setup@v4
with:
- version: 9
+ version: 10
- name: Setup Node.js
uses: actions/setup-node@v4
with:
From 76d848dd80a722eca1f349cabeb840b171ed5a42 Mon Sep 17 00:00:00 2001
From: ladybluenotes
Date: Sat, 13 Dec 2025 08:41:40 -0800
Subject: [PATCH 020/153] remove enum from section string
---
src/ui/search.tsx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/ui/search.tsx b/src/ui/search.tsx
index fc2b367195..2e5ef9c94c 100644
--- a/src/ui/search.tsx
+++ b/src/ui/search.tsx
@@ -242,8 +242,10 @@ export function Search() {
{([section, hits]) => (
-