From 2a09bb8e86d1d5174dffb8d2d9b03ffeb5b6c06e Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Wed, 9 Jul 2025 18:17:38 +0800
Subject: [PATCH 1/6] feat: export isStore and isTask functions; update API
documentation
---
.changeset/mighty-peaches-knock.md | 5 ++
packages/docs/src/routes/api/qwik/api.json | 28 +++++++
packages/docs/src/routes/api/qwik/index.mdx | 74 +++++++++++++++++++
packages/qwik/src/core/index.ts | 3 +-
packages/qwik/src/core/qwik.core.api.md | 10 +++
.../core/reactive-primitives/impl/store.ts | 2 +-
.../core/reactive-primitives/signal.public.ts | 2 +-
packages/qwik/src/core/use/use-task.ts | 2 +-
8 files changed, 122 insertions(+), 4 deletions(-)
create mode 100644 .changeset/mighty-peaches-knock.md
diff --git a/.changeset/mighty-peaches-knock.md b/.changeset/mighty-peaches-knock.md
new file mode 100644
index 00000000000..8737fbdc3a1
--- /dev/null
+++ b/.changeset/mighty-peaches-knock.md
@@ -0,0 +1,5 @@
+---
+'@qwik.dev/core': patch
+---
+
+fix: export isStore from signal implementation
diff --git a/packages/docs/src/routes/api/qwik/api.json b/packages/docs/src/routes/api/qwik/api.json
index 55b49caf435..6b2d8a8cc8e 100644
--- a/packages/docs/src/routes/api/qwik/api.json
+++ b/packages/docs/src/routes/api/qwik/api.json
@@ -835,6 +835,34 @@
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/utils.ts",
"mdFile": "core.issignal.md"
},
+ {
+ "name": "isStore",
+ "id": "isstore",
+ "hierarchy": [
+ {
+ "name": "isStore",
+ "id": "isstore"
+ }
+ ],
+ "kind": "Function",
+ "content": "```typescript\nisStore: (value: StoreTarget) => boolean\n```\n\n\n
\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nStoreTarget\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nboolean",
+ "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts",
+ "mdFile": "core.isstore.md"
+ },
+ {
+ "name": "isTask",
+ "id": "istask",
+ "hierarchy": [
+ {
+ "name": "isTask",
+ "id": "istask"
+ }
+ ],
+ "kind": "Function",
+ "content": "```typescript\nisTask: (value: any) => value is Task\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nany\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nvalue is Task",
+ "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts",
+ "mdFile": "core.istask.md"
+ },
{
"name": "jsx",
"id": "jsx",
diff --git a/packages/docs/src/routes/api/qwik/index.mdx b/packages/docs/src/routes/api/qwik/index.mdx
index 284d5abd3e4..00abe72796b 100644
--- a/packages/docs/src/routes/api/qwik/index.mdx
+++ b/packages/docs/src/routes/api/qwik/index.mdx
@@ -1647,6 +1647,80 @@ value is [Signal](#signal)<unknown>
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/utils.ts)
+## isStore
+
+```typescript
+isStore: (value: StoreTarget) => boolean;
+```
+
+
+
+Parameter
+
+ |
+
+Type
+
+ |
+
+Description
+
+ |
+
+
+value
+
+ |
+
+StoreTarget
+
+ |
+
+ |
+
+**Returns:**
+
+boolean
+
+[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts)
+
+## isTask
+
+```typescript
+isTask: (value: any) => value is Task
+```
+
+
+
+Parameter
+
+ |
+
+Type
+
+ |
+
+Description
+
+ |
+
+
+value
+
+ |
+
+any
+
+ |
+
+ |
+
+**Returns:**
+
+value is Task
+
+[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts)
+
## jsx
Used by the JSX transpilers to create a JSXNode. Note that the optimizer will not use this, instead using \_jsxSplit and \_jsxSorted directly.
diff --git a/packages/qwik/src/core/index.ts b/packages/qwik/src/core/index.ts
index 77068bd48b6..8e2c26b3e81 100644
--- a/packages/qwik/src/core/index.ts
+++ b/packages/qwik/src/core/index.ts
@@ -128,7 +128,7 @@ export type {
} from './use/use-resource';
export { useResourceQrl, Resource } from './use/use-resource';
export { useResource$ } from './use/use-resource-dollar';
-export { useTaskQrl } from './use/use-task';
+export { useTaskQrl, isTask } from './use/use-task';
export { useTask$ } from './use/use-task-dollar';
export { useVisibleTask$ } from './use/use-visible-task-dollar';
export { useComputed$ } from './use/use-computed';
@@ -151,6 +151,7 @@ export {
createSerializer$,
createAsyncComputedQrl,
createAsyncComputed$,
+ isStore,
} from './reactive-primitives/signal.public';
export type { ComputedOptions } from './reactive-primitives/types';
diff --git a/packages/qwik/src/core/qwik.core.api.md b/packages/qwik/src/core/qwik.core.api.md
index e68e4ecc99e..69c8999709b 100644
--- a/packages/qwik/src/core/qwik.core.api.md
+++ b/packages/qwik/src/core/qwik.core.api.md
@@ -427,9 +427,19 @@ export interface ISsrComponentFrame {
scopedStyleIds: Set;
}
+// Warning: (ae-forgotten-export) The symbol "StoreTarget" needs to be exported by the entry point index.d.ts
+//
+// @public (undocumented)
+export const isStore: (value: StoreTarget) => boolean;
+
// @internal (undocumented)
export function _isStringifiable(value: unknown): value is _Stringifiable;
+// Warning: (ae-forgotten-export) The symbol "Task" needs to be exported by the entry point index.d.ts
+//
+// @public (undocumented)
+export const isTask: (value: any) => value is Task;
+
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
//
// @public
diff --git a/packages/qwik/src/core/reactive-primitives/impl/store.ts b/packages/qwik/src/core/reactive-primitives/impl/store.ts
index 04701c6072e..cd49faf1031 100644
--- a/packages/qwik/src/core/reactive-primitives/impl/store.ts
+++ b/packages/qwik/src/core/reactive-primitives/impl/store.ts
@@ -40,7 +40,7 @@ export const getStoreTarget = (value: T): T | null => {
export const unwrapStore = (value: T): T => {
return getStoreTarget(value) || value;
};
-
+/** @public */
export const isStore = (value: StoreTarget): boolean => {
return STORE_TARGET in value;
};
diff --git a/packages/qwik/src/core/reactive-primitives/signal.public.ts b/packages/qwik/src/core/reactive-primitives/signal.public.ts
index 4c79dd0e62b..7c61805f158 100644
--- a/packages/qwik/src/core/reactive-primitives/signal.public.ts
+++ b/packages/qwik/src/core/reactive-primitives/signal.public.ts
@@ -8,7 +8,7 @@ import {
} from './signal-api';
import type { ComputedReturnType } from '../use/use-computed';
import type { AsyncComputedReturnType } from '../use/use-async-computed';
-
+export { isStore } from './impl/store';
export { isSignal } from './utils';
/** @public */
diff --git a/packages/qwik/src/core/use/use-task.ts b/packages/qwik/src/core/use/use-task.ts
index 7ba1bcfa6c1..84fd908ef02 100644
--- a/packages/qwik/src/core/use/use-task.ts
+++ b/packages/qwik/src/core/use/use-task.ts
@@ -220,7 +220,7 @@ export class Task
super();
}
}
-
+/** @public */
export const isTask = (value: any): value is Task => {
return value instanceof Task;
};
From 296ab6b07ab35a037e8ba1357c5e79265cad6681 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Fri, 11 Jul 2025 14:31:08 +0800
Subject: [PATCH 2/6] feat: add _isTask function and update API documentation;
remove isStore function
---
packages/docs/src/routes/api/qwik/api.json | 42 +++----
packages/docs/src/routes/api/qwik/index.mdx | 111 ++++++------------
packages/qwik/src/core/index.ts | 3 +-
packages/qwik/src/core/internal.ts | 3 +-
packages/qwik/src/core/qwik.core.api.md | 11 +-
.../core/reactive-primitives/impl/store.ts | 2 +-
6 files changed, 59 insertions(+), 113 deletions(-)
diff --git a/packages/docs/src/routes/api/qwik/api.json b/packages/docs/src/routes/api/qwik/api.json
index 6b2d8a8cc8e..66e53a94b84 100644
--- a/packages/docs/src/routes/api/qwik/api.json
+++ b/packages/docs/src/routes/api/qwik/api.json
@@ -2,6 +2,20 @@
"id": "qwik",
"package": "@qwik.dev/qwik",
"members": [
+ {
+ "name": "_isTask",
+ "id": "_istask",
+ "hierarchy": [
+ {
+ "name": "_isTask",
+ "id": "_istask"
+ }
+ ],
+ "kind": "Function",
+ "content": "```typescript\nisTask: (value: any) => value is Task\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nany\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nvalue is Task",
+ "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts",
+ "mdFile": "core._istask.md"
+ },
{
"name": "\"q:slot\"",
"id": "componentbaseprops-_q_slot_",
@@ -835,34 +849,6 @@
"editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/utils.ts",
"mdFile": "core.issignal.md"
},
- {
- "name": "isStore",
- "id": "isstore",
- "hierarchy": [
- {
- "name": "isStore",
- "id": "isstore"
- }
- ],
- "kind": "Function",
- "content": "```typescript\nisStore: (value: StoreTarget) => boolean\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nStoreTarget\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nboolean",
- "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts",
- "mdFile": "core.isstore.md"
- },
- {
- "name": "isTask",
- "id": "istask",
- "hierarchy": [
- {
- "name": "isTask",
- "id": "istask"
- }
- ],
- "kind": "Function",
- "content": "```typescript\nisTask: (value: any) => value is Task\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nany\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nvalue is Task",
- "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts",
- "mdFile": "core.istask.md"
- },
{
"name": "jsx",
"id": "jsx",
diff --git a/packages/docs/src/routes/api/qwik/index.mdx b/packages/docs/src/routes/api/qwik/index.mdx
index 00abe72796b..310a7057cbf 100644
--- a/packages/docs/src/routes/api/qwik/index.mdx
+++ b/packages/docs/src/routes/api/qwik/index.mdx
@@ -4,6 +4,43 @@ title: \@qwik.dev/qwik API Reference
# [API](/api) › @qwik.dev/qwik
+## \_isTask
+
+```typescript
+isTask: (value: any) => value is Task
+```
+
+
+
+Parameter
+
+ |
+
+Type
+
+ |
+
+Description
+
+ |
+
+
+value
+
+ |
+
+any
+
+ |
+
+ |
+
+**Returns:**
+
+value is Task
+
+[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts)
+
## "q:slot"
```typescript
@@ -1647,80 +1684,6 @@ value is [Signal](#signal)<unknown>
[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/utils.ts)
-## isStore
-
-```typescript
-isStore: (value: StoreTarget) => boolean;
-```
-
-
-
-Parameter
-
- |
-
-Type
-
- |
-
-Description
-
- |
-
-
-value
-
- |
-
-StoreTarget
-
- |
-
- |
-
-**Returns:**
-
-boolean
-
-[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts)
-
-## isTask
-
-```typescript
-isTask: (value: any) => value is Task
-```
-
-
-
-Parameter
-
- |
-
-Type
-
- |
-
-Description
-
- |
-
-
-value
-
- |
-
-any
-
- |
-
- |
-
-**Returns:**
-
-value is Task
-
-[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts)
-
## jsx
Used by the JSX transpilers to create a JSXNode. Note that the optimizer will not use this, instead using \_jsxSplit and \_jsxSorted directly.
diff --git a/packages/qwik/src/core/index.ts b/packages/qwik/src/core/index.ts
index 8e2c26b3e81..77068bd48b6 100644
--- a/packages/qwik/src/core/index.ts
+++ b/packages/qwik/src/core/index.ts
@@ -128,7 +128,7 @@ export type {
} from './use/use-resource';
export { useResourceQrl, Resource } from './use/use-resource';
export { useResource$ } from './use/use-resource-dollar';
-export { useTaskQrl, isTask } from './use/use-task';
+export { useTaskQrl } from './use/use-task';
export { useTask$ } from './use/use-task-dollar';
export { useVisibleTask$ } from './use/use-visible-task-dollar';
export { useComputed$ } from './use/use-computed';
@@ -151,7 +151,6 @@ export {
createSerializer$,
createAsyncComputedQrl,
createAsyncComputed$,
- isStore,
} from './reactive-primitives/signal.public';
export type { ComputedOptions } from './reactive-primitives/types';
diff --git a/packages/qwik/src/core/internal.ts b/packages/qwik/src/core/internal.ts
index 7d1bf0c6d32..0cc6717ba09 100644
--- a/packages/qwik/src/core/internal.ts
+++ b/packages/qwik/src/core/internal.ts
@@ -53,4 +53,5 @@ export {
useInvokeContext as _useInvokeContext,
_waitUntilRendered,
} from './use/use-core';
-export { scheduleTask as _task } from './use/use-task';
+export { scheduleTask as _task, isTask as _isTask } from './use/use-task';
+export { unwrapStore as _unwrapStore } from './use/use-store.public';
diff --git a/packages/qwik/src/core/qwik.core.api.md b/packages/qwik/src/core/qwik.core.api.md
index 69c8999709b..3ef73d0fec8 100644
--- a/packages/qwik/src/core/qwik.core.api.md
+++ b/packages/qwik/src/core/qwik.core.api.md
@@ -427,18 +427,13 @@ export interface ISsrComponentFrame {
scopedStyleIds: Set;
}
-// Warning: (ae-forgotten-export) The symbol "StoreTarget" needs to be exported by the entry point index.d.ts
-//
-// @public (undocumented)
-export const isStore: (value: StoreTarget) => boolean;
-
// @internal (undocumented)
export function _isStringifiable(value: unknown): value is _Stringifiable;
// Warning: (ae-forgotten-export) The symbol "Task" needs to be exported by the entry point index.d.ts
//
// @public (undocumented)
-export const isTask: (value: any) => value is Task;
+export const _isTask: (value: any) => value is Task;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
//
@@ -1666,7 +1661,9 @@ export const _UNINITIALIZED: unique symbol;
export const untrack: (fn: () => T) => T;
// @public
-export const unwrapStore: (value: T) => T;
+const unwrapStore: (value: T) => T;
+export { unwrapStore as _unwrapStore }
+export { unwrapStore }
// @public
export const useAsyncComputed$: (qrl: AsyncComputedFn, options?: ComputedOptions | undefined) => AsyncComputedReturnType;
diff --git a/packages/qwik/src/core/reactive-primitives/impl/store.ts b/packages/qwik/src/core/reactive-primitives/impl/store.ts
index cd49faf1031..04701c6072e 100644
--- a/packages/qwik/src/core/reactive-primitives/impl/store.ts
+++ b/packages/qwik/src/core/reactive-primitives/impl/store.ts
@@ -40,7 +40,7 @@ export const getStoreTarget = (value: T): T | null => {
export const unwrapStore = (value: T): T => {
return getStoreTarget(value) || value;
};
-/** @public */
+
export const isStore = (value: StoreTarget): boolean => {
return STORE_TARGET in value;
};
From 7bb0075286641fbe1ccc7e4c1935737d9f03d018 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Mon, 14 Jul 2025 16:24:15 +0800
Subject: [PATCH 3/6] feat: export isStore function for public use
---
packages/qwik/src/core/internal.ts | 1 +
packages/qwik/src/core/reactive-primitives/impl/store.ts | 3 +++
2 files changed, 4 insertions(+)
diff --git a/packages/qwik/src/core/internal.ts b/packages/qwik/src/core/internal.ts
index 0cc6717ba09..f016ad4b22f 100644
--- a/packages/qwik/src/core/internal.ts
+++ b/packages/qwik/src/core/internal.ts
@@ -55,3 +55,4 @@ export {
} from './use/use-core';
export { scheduleTask as _task, isTask as _isTask } from './use/use-task';
export { unwrapStore as _unwrapStore } from './use/use-store.public';
+export { isStore as _isStore } from './reactive-primitives/signal.public';
diff --git a/packages/qwik/src/core/reactive-primitives/impl/store.ts b/packages/qwik/src/core/reactive-primitives/impl/store.ts
index 04701c6072e..658ec638b9a 100644
--- a/packages/qwik/src/core/reactive-primitives/impl/store.ts
+++ b/packages/qwik/src/core/reactive-primitives/impl/store.ts
@@ -41,6 +41,9 @@ export const unwrapStore = (value: T): T => {
return getStoreTarget(value) || value;
};
+/*
+ * @public
+ */
export const isStore = (value: StoreTarget): boolean => {
return STORE_TARGET in value;
};
From 5837d1bf6920e0165c8538d4de924ad97c29da04 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Mon, 14 Jul 2025 16:30:51 +0800
Subject: [PATCH 4/6] feat: add _isStore function and update API documentation
---
packages/docs/src/routes/api/qwik/api.json | 14 +++++++
packages/docs/src/routes/api/qwik/index.mdx | 37 +++++++++++++++++++
packages/qwik/src/core/qwik.core.api.md | 5 +++
.../core/reactive-primitives/impl/store.ts | 4 +-
4 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/packages/docs/src/routes/api/qwik/api.json b/packages/docs/src/routes/api/qwik/api.json
index 66e53a94b84..bf4797dbbe2 100644
--- a/packages/docs/src/routes/api/qwik/api.json
+++ b/packages/docs/src/routes/api/qwik/api.json
@@ -2,6 +2,20 @@
"id": "qwik",
"package": "@qwik.dev/qwik",
"members": [
+ {
+ "name": "_isStore",
+ "id": "_isstore",
+ "hierarchy": [
+ {
+ "name": "_isStore",
+ "id": "_isstore"
+ }
+ ],
+ "kind": "Function",
+ "content": "```typescript\nisStore: (value: StoreTarget) => boolean\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nStoreTarget\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nboolean",
+ "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts",
+ "mdFile": "core._isstore.md"
+ },
{
"name": "_isTask",
"id": "_istask",
diff --git a/packages/docs/src/routes/api/qwik/index.mdx b/packages/docs/src/routes/api/qwik/index.mdx
index 310a7057cbf..663da2f6608 100644
--- a/packages/docs/src/routes/api/qwik/index.mdx
+++ b/packages/docs/src/routes/api/qwik/index.mdx
@@ -4,6 +4,43 @@ title: \@qwik.dev/qwik API Reference
# [API](/api) › @qwik.dev/qwik
+## \_isStore
+
+```typescript
+isStore: (value: StoreTarget) => boolean;
+```
+
+
+
+Parameter
+
+ |
+
+Type
+
+ |
+
+Description
+
+ |
+
+
+value
+
+ |
+
+StoreTarget
+
+ |
+
+ |
+
+**Returns:**
+
+boolean
+
+[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts)
+
## \_isTask
```typescript
diff --git a/packages/qwik/src/core/qwik.core.api.md b/packages/qwik/src/core/qwik.core.api.md
index 3ef73d0fec8..dbb4b338c6d 100644
--- a/packages/qwik/src/core/qwik.core.api.md
+++ b/packages/qwik/src/core/qwik.core.api.md
@@ -427,6 +427,11 @@ export interface ISsrComponentFrame {
scopedStyleIds: Set;
}
+// Warning: (ae-forgotten-export) The symbol "StoreTarget" needs to be exported by the entry point index.d.ts
+//
+// @public (undocumented)
+export const _isStore: (value: StoreTarget) => boolean;
+
// @internal (undocumented)
export function _isStringifiable(value: unknown): value is _Stringifiable;
diff --git a/packages/qwik/src/core/reactive-primitives/impl/store.ts b/packages/qwik/src/core/reactive-primitives/impl/store.ts
index 658ec638b9a..6ae63976ae1 100644
--- a/packages/qwik/src/core/reactive-primitives/impl/store.ts
+++ b/packages/qwik/src/core/reactive-primitives/impl/store.ts
@@ -41,9 +41,7 @@ export const unwrapStore = (value: T): T => {
return getStoreTarget(value) || value;
};
-/*
- * @public
- */
+/** @public */
export const isStore = (value: StoreTarget): boolean => {
return STORE_TARGET in value;
};
From 8a11f422fc8d8061f33ddc429c9e6fe4d5449d14 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Mon, 14 Jul 2025 16:43:06 +0800
Subject: [PATCH 5/6] refactor: remove _isStore and _isTask functions from API
documentation and internal exports
---
.changeset/mighty-peaches-knock.md | 5 --
packages/docs/src/routes/api/qwik/api.json | 28 -------
packages/docs/src/routes/api/qwik/index.mdx | 74 -------------------
packages/qwik/src/core/internal.ts | 3 +-
packages/qwik/src/core/qwik.core.api.md | 8 +-
.../core/reactive-primitives/impl/store.ts | 2 +-
.../core/reactive-primitives/signal.public.ts | 1 -
packages/qwik/src/core/use/use-task.ts | 2 +-
8 files changed, 6 insertions(+), 117 deletions(-)
delete mode 100644 .changeset/mighty-peaches-knock.md
diff --git a/.changeset/mighty-peaches-knock.md b/.changeset/mighty-peaches-knock.md
deleted file mode 100644
index 8737fbdc3a1..00000000000
--- a/.changeset/mighty-peaches-knock.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@qwik.dev/core': patch
----
-
-fix: export isStore from signal implementation
diff --git a/packages/docs/src/routes/api/qwik/api.json b/packages/docs/src/routes/api/qwik/api.json
index bf4797dbbe2..55b49caf435 100644
--- a/packages/docs/src/routes/api/qwik/api.json
+++ b/packages/docs/src/routes/api/qwik/api.json
@@ -2,34 +2,6 @@
"id": "qwik",
"package": "@qwik.dev/qwik",
"members": [
- {
- "name": "_isStore",
- "id": "_isstore",
- "hierarchy": [
- {
- "name": "_isStore",
- "id": "_isstore"
- }
- ],
- "kind": "Function",
- "content": "```typescript\nisStore: (value: StoreTarget) => boolean\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nStoreTarget\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nboolean",
- "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts",
- "mdFile": "core._isstore.md"
- },
- {
- "name": "_isTask",
- "id": "_istask",
- "hierarchy": [
- {
- "name": "_isTask",
- "id": "_istask"
- }
- ],
- "kind": "Function",
- "content": "```typescript\nisTask: (value: any) => value is Task\n```\n\n\n\n\nParameter\n\n\n | \n\nType\n\n\n | \n\nDescription\n\n\n |
\n\n\nvalue\n\n\n | \n\nany\n\n\n | \n\n\n |
\n
\n**Returns:**\n\nvalue is Task",
- "editUrl": "https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts",
- "mdFile": "core._istask.md"
- },
{
"name": "\"q:slot\"",
"id": "componentbaseprops-_q_slot_",
diff --git a/packages/docs/src/routes/api/qwik/index.mdx b/packages/docs/src/routes/api/qwik/index.mdx
index 663da2f6608..284d5abd3e4 100644
--- a/packages/docs/src/routes/api/qwik/index.mdx
+++ b/packages/docs/src/routes/api/qwik/index.mdx
@@ -4,80 +4,6 @@ title: \@qwik.dev/qwik API Reference
# [API](/api) › @qwik.dev/qwik
-## \_isStore
-
-```typescript
-isStore: (value: StoreTarget) => boolean;
-```
-
-
-
-Parameter
-
- |
-
-Type
-
- |
-
-Description
-
- |
-
-
-value
-
- |
-
-StoreTarget
-
- |
-
- |
-
-**Returns:**
-
-boolean
-
-[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/reactive-primitives/impl/store.ts)
-
-## \_isTask
-
-```typescript
-isTask: (value: any) => value is Task
-```
-
-
-
-Parameter
-
- |
-
-Type
-
- |
-
-Description
-
- |
-
-
-value
-
- |
-
-any
-
- |
-
- |
-
-**Returns:**
-
-value is Task
-
-[Edit this section](https://github.com/QwikDev/qwik/tree/main/packages/qwik/src/core/use/use-task.ts)
-
## "q:slot"
```typescript
diff --git a/packages/qwik/src/core/internal.ts b/packages/qwik/src/core/internal.ts
index f016ad4b22f..000a815abba 100644
--- a/packages/qwik/src/core/internal.ts
+++ b/packages/qwik/src/core/internal.ts
@@ -54,5 +54,4 @@ export {
_waitUntilRendered,
} from './use/use-core';
export { scheduleTask as _task, isTask as _isTask } from './use/use-task';
-export { unwrapStore as _unwrapStore } from './use/use-store.public';
-export { isStore as _isStore } from './reactive-primitives/signal.public';
+export { isStore as _isStore } from './reactive-primitives/impl/store';
diff --git a/packages/qwik/src/core/qwik.core.api.md b/packages/qwik/src/core/qwik.core.api.md
index dbb4b338c6d..688c902865e 100644
--- a/packages/qwik/src/core/qwik.core.api.md
+++ b/packages/qwik/src/core/qwik.core.api.md
@@ -429,7 +429,7 @@ export interface ISsrComponentFrame {
// Warning: (ae-forgotten-export) The symbol "StoreTarget" needs to be exported by the entry point index.d.ts
//
-// @public (undocumented)
+// @internal (undocumented)
export const _isStore: (value: StoreTarget) => boolean;
// @internal (undocumented)
@@ -437,7 +437,7 @@ export function _isStringifiable(value: unknown): value is _Stringifiable;
// Warning: (ae-forgotten-export) The symbol "Task" needs to be exported by the entry point index.d.ts
//
-// @public (undocumented)
+// @internal (undocumented)
export const _isTask: (value: any) => value is Task;
// Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts
@@ -1666,9 +1666,7 @@ export const _UNINITIALIZED: unique symbol;
export const untrack: (fn: () => T) => T;
// @public
-const unwrapStore: (value: T) => T;
-export { unwrapStore as _unwrapStore }
-export { unwrapStore }
+export const unwrapStore: (value: T) => T;
// @public
export const useAsyncComputed$: (qrl: AsyncComputedFn, options?: ComputedOptions | undefined) => AsyncComputedReturnType;
diff --git a/packages/qwik/src/core/reactive-primitives/impl/store.ts b/packages/qwik/src/core/reactive-primitives/impl/store.ts
index 6ae63976ae1..a8eaf98eaf9 100644
--- a/packages/qwik/src/core/reactive-primitives/impl/store.ts
+++ b/packages/qwik/src/core/reactive-primitives/impl/store.ts
@@ -41,7 +41,7 @@ export const unwrapStore = (value: T): T => {
return getStoreTarget(value) || value;
};
-/** @public */
+/** @internal */
export const isStore = (value: StoreTarget): boolean => {
return STORE_TARGET in value;
};
diff --git a/packages/qwik/src/core/reactive-primitives/signal.public.ts b/packages/qwik/src/core/reactive-primitives/signal.public.ts
index 7c61805f158..606534e8281 100644
--- a/packages/qwik/src/core/reactive-primitives/signal.public.ts
+++ b/packages/qwik/src/core/reactive-primitives/signal.public.ts
@@ -8,7 +8,6 @@ import {
} from './signal-api';
import type { ComputedReturnType } from '../use/use-computed';
import type { AsyncComputedReturnType } from '../use/use-async-computed';
-export { isStore } from './impl/store';
export { isSignal } from './utils';
/** @public */
diff --git a/packages/qwik/src/core/use/use-task.ts b/packages/qwik/src/core/use/use-task.ts
index 84fd908ef02..fb4188edebe 100644
--- a/packages/qwik/src/core/use/use-task.ts
+++ b/packages/qwik/src/core/use/use-task.ts
@@ -220,7 +220,7 @@ export class Task
super();
}
}
-/** @public */
+/** @internal */
export const isTask = (value: any): value is Task => {
return value instanceof Task;
};
From 2d1ef93860de86509a23f79e414765f6b2c49476 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Fri, 25 Jul 2025 16:33:29 +0800
Subject: [PATCH 6/6] feat: expand internal vnode and mapArray utilities with
new exports and documentation
---
.../qwik/src/core/client/util-mapArray.ts | 3 ++
packages/qwik/src/core/client/vnode.ts | 10 +++++
packages/qwik/src/core/internal.ts | 20 +++++++++-
packages/qwik/src/core/qwik.core.api.md | 39 +++++++++++++++++++
4 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/packages/qwik/src/core/client/util-mapArray.ts b/packages/qwik/src/core/client/util-mapArray.ts
index 1928c560369..afe5edd77f2 100644
--- a/packages/qwik/src/core/client/util-mapArray.ts
+++ b/packages/qwik/src/core/client/util-mapArray.ts
@@ -1,5 +1,6 @@
import { assertTrue } from '../shared/error/assert';
+/** @internal */
export const mapApp_findIndx = (array: (T | null)[], key: string, start: number): number => {
assertTrue(start % 2 === 0, 'Expecting even number.');
let bottom = (start as number) >> 1;
@@ -19,6 +20,7 @@ export const mapApp_findIndx = (array: (T | null)[], key: string, start: numb
return (bottom << 1) ^ -1;
};
+/** @internal */
export const mapArray_set = (
array: (T | null)[],
key: string,
@@ -48,6 +50,7 @@ export const mapApp_remove = (array: (T | null)[], key: string, start: number
return value;
};
+/** @internal */
export const mapArray_get = (array: (T | null)[], key: string, start: number): T | null => {
const indx = mapApp_findIndx(array, key, start);
if (indx >= 0) {
diff --git a/packages/qwik/src/core/client/vnode.ts b/packages/qwik/src/core/client/vnode.ts
index 4c0a8603c17..dd60321fdda 100644
--- a/packages/qwik/src/core/client/vnode.ts
+++ b/packages/qwik/src/core/client/vnode.ts
@@ -317,6 +317,7 @@ export const vnode_isElementOrVirtualVNode = (
return (flag & VNodeFlags.ELEMENT_OR_VIRTUAL_MASK) !== 0;
};
+/** @internal */
export const vnode_isMaterialized = (vNode: VNode): boolean => {
assertDefined(vNode, 'Missing vNode');
const flag = (vNode as VNode)[VNodeProps.flags];
@@ -327,12 +328,14 @@ export const vnode_isMaterialized = (vNode: VNode): boolean => {
);
};
+/** @internal */
export const vnode_isTextVNode = (vNode: VNode): vNode is TextVNode => {
assertDefined(vNode, 'Missing vNode');
const flag = (vNode as VNode)[VNodeProps.flags];
return (flag & VNodeFlags.Text) === VNodeFlags.Text;
};
+/** @internal */
export const vnode_isVirtualVNode = (vNode: VNode): vNode is VirtualVNode => {
assertDefined(vNode, 'Missing vNode');
const flag = (vNode as VNode)[VNodeProps.flags];
@@ -384,6 +387,7 @@ export const vnode_getNodeTypeName = (vNode: VNode): string => {
return '';
};
+/** @internal */
export const vnode_ensureElementInflated = (vnode: VNode) => {
const flags = vnode[VNodeProps.flags];
if ((flags & VNodeFlags.INFLATED_TYPE_MASK) === VNodeFlags.Element) {
@@ -1233,6 +1237,7 @@ export const vnode_setText = (journal: VNodeJournal, textVNode: TextVNode, text:
journal.push(VNodeJournalOpCode.SetText, textNode, (textVNode[TextVNodeProps.text] = text));
};
+/** @internal */
export const vnode_getFirstChild = (vnode: VNode): VNode | null => {
if (vnode_isTextVNode(vnode)) {
return null;
@@ -1592,6 +1597,7 @@ const processVNodeData = (
}
};
+/** @internal */
export const vnode_getNextSibling = (vnode: VNode): VNode | null => {
return vnode[VNodeProps.nextSibling];
};
@@ -1600,6 +1606,7 @@ export const vnode_getPreviousSibling = (vnode: VNode): VNode | null => {
return vnode[VNodeProps.previousSibling];
};
+/** @internal */
export const vnode_getAttrKeys = (vnode: ElementVNode | VirtualVNode): string[] => {
const type = vnode[VNodeProps.flags];
if ((type & VNodeFlags.ELEMENT_OR_VIRTUAL_MASK) !== 0) {
@@ -1651,6 +1658,7 @@ export const vnode_setAttr = (
}
};
+/** @internal */
export const vnode_getAttr = (vnode: VNode, key: string): string | null => {
const type = vnode[VNodeProps.flags];
if ((type & VNodeFlags.ELEMENT_OR_VIRTUAL_MASK) !== 0) {
@@ -1693,6 +1701,7 @@ export const vnode_setProp = (vnode: VirtualVNode | ElementVNode, key: string, v
}
};
+/** @internal */
export const vnode_getPropStartIndex = (vnode: VNode): number => {
const type = vnode[VNodeProps.flags] & VNodeFlags.TYPE_MASK;
if (type === VNodeFlags.Element) {
@@ -1703,6 +1712,7 @@ export const vnode_getPropStartIndex = (vnode: VNode): number => {
throw qError(QError.invalidVNodeType, [type]);
};
+/** @internal */
export const vnode_getProps = (vnode: VNode): unknown[] => {
return vnode[vnode_getPropStartIndex(vnode)] as unknown[];
};
diff --git a/packages/qwik/src/core/internal.ts b/packages/qwik/src/core/internal.ts
index 9d1dd95c2e2..e7cd749d238 100644
--- a/packages/qwik/src/core/internal.ts
+++ b/packages/qwik/src/core/internal.ts
@@ -15,7 +15,25 @@ export type {
VNode as _VNode,
VNodeFlags as _VNodeFlags,
} from './client/types';
-export { vnode_toString as _vnode_toString } from './client/vnode';
+export {
+ vnode_toString as _vnode_toString,
+ vnode_getPropStartIndex as _vnode_getPropStartIndex,
+ vnode_getProps as _vnode_getProps,
+ vnode_isTextVNode as _vnode_isTextVNode,
+ vnode_isVirtualVNode as _vnode_isVirtualVNode,
+ vnode_getFirstChild as _vnode_getFirstChild,
+ vnode_isMaterialized as _vnode_isMaterialized,
+ vnode_getNextSibling as _vnode_getNextSibling,
+ vnode_ensureElementInflated as _vnode_ensureElementInflated,
+ vnode_getAttrKeys as _vnode_getAttrKeys,
+ vnode_getAttr as _vnode_getAttr,
+} from './client/vnode';
+export {
+ mapApp_findIndx as _mapApp_findIndx,
+ mapArray_get as _mapArray_get,
+ mapArray_set as _mapArray_set,
+} from './client/util-mapArray';
+
export { _wrapProp, _wrapSignal } from './reactive-primitives/internal-api';
export { SubscriptionData as _SubscriptionData } from './reactive-primitives/subscription-data';
export { _EFFECT_BACK_REF } from './reactive-primitives/types';
diff --git a/packages/qwik/src/core/qwik.core.api.md b/packages/qwik/src/core/qwik.core.api.md
index fa435fd2534..294494302ee 100644
--- a/packages/qwik/src/core/qwik.core.api.md
+++ b/packages/qwik/src/core/qwik.core.api.md
@@ -511,6 +511,15 @@ export type JSXTagName = keyof HTMLElementTagNameMap | Omit;
+// @internal (undocumented)
+export const _mapApp_findIndx: (array: (T | null)[], key: string, start: number) => number;
+
+// @internal (undocumented)
+export const _mapArray_get: (array: (T | null)[], key: string, start: number) => T | null;
+
+// @internal (undocumented)
+export const _mapArray_set: (array: (T | null)[], key: string, value: T | null, start: number) => void;
+
// @public @deprecated (undocumented)
export type NativeAnimationEvent = AnimationEvent;
@@ -1838,6 +1847,36 @@ export type VisibleTaskStrategy = 'intersection-observer' | 'document-ready' | '
// @internal (undocumented)
export type _VNode = _ElementVNode | _TextVNode | _VirtualVNode;
+// @internal (undocumented)
+export const _vnode_ensureElementInflated: (vnode: _VNode) => void;
+
+// @internal (undocumented)
+export const _vnode_getAttr: (vnode: _VNode, key: string) => string | null;
+
+// @internal (undocumented)
+export const _vnode_getAttrKeys: (vnode: _ElementVNode | _VirtualVNode) => string[];
+
+// @internal (undocumented)
+export const _vnode_getFirstChild: (vnode: _VNode) => _VNode | null;
+
+// @internal (undocumented)
+export const _vnode_getNextSibling: (vnode: _VNode) => _VNode | null;
+
+// @internal (undocumented)
+export const _vnode_getProps: (vnode: _VNode) => unknown[];
+
+// @internal (undocumented)
+export const _vnode_getPropStartIndex: (vnode: _VNode) => number;
+
+// @internal (undocumented)
+export const _vnode_isMaterialized: (vNode: _VNode) => boolean;
+
+// @internal (undocumented)
+export const _vnode_isTextVNode: (vNode: _VNode) => vNode is _TextVNode;
+
+// @internal (undocumented)
+export const _vnode_isVirtualVNode: (vNode: _VNode) => vNode is _VirtualVNode;
+
// @internal (undocumented)
export function _vnode_toString(this: _VNode | null, depth?: number, offset?: string, materialize?: boolean, siblings?: boolean, colorize?: boolean): string;