From 6167ca78299a406e26f32875351177f220b93e6a Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Mon, 16 Oct 2023 18:21:13 +0200 Subject: [PATCH] Add missing `indexArray` to server-side runtime. --- .changeset/modern-oranges-own.md | 5 +++++ packages/solid/src/server/index.ts | 1 + packages/solid/src/server/reactive.ts | 22 +++++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 .changeset/modern-oranges-own.md diff --git a/.changeset/modern-oranges-own.md b/.changeset/modern-oranges-own.md new file mode 100644 index 00000000..1a8733ad --- /dev/null +++ b/.changeset/modern-oranges-own.md @@ -0,0 +1,5 @@ +--- +"solid-js": patch +--- + +Add missing `indexArray` to server-side runtime. diff --git a/packages/solid/src/server/index.ts b/packages/solid/src/server/index.ts index 7a9f92f0..dd4711e6 100644 --- a/packages/solid/src/server/index.ts +++ b/packages/solid/src/server/index.ts @@ -24,6 +24,7 @@ export { equalFn, requestCallback, mapArray, + indexArray, observable, from, $PROXY, diff --git a/packages/solid/src/server/reactive.ts b/packages/solid/src/server/reactive.ts index 774da29a..92ce5de0 100644 --- a/packages/solid/src/server/reactive.ts +++ b/packages/solid/src/server/reactive.ts @@ -267,11 +267,11 @@ export function requestCallback(fn: () => void, options?: { timeout: number }): export function cancelCallback(task: Task) {} export function mapArray( - list: () => T[], - mapFn: (v: T, i: () => number) => U, - options: { fallback?: () => any } = {} + list: Accessor, + mapFn: (v: T, i: Accessor) => U, + options: { fallback?: Accessor } = {} ): () => U[] { - const items = list(); + const items = list() || []; let s: U[] = []; if (items.length) { for (let i = 0, len = items.length; i < len; i++) s.push(mapFn(items[i], () => i)); @@ -279,9 +279,17 @@ export function mapArray( return () => s; } -function getSymbol() { - const SymbolCopy = Symbol as any; - return SymbolCopy.observable || "@@observable"; +export function indexArray( + list: Accessor, + mapFn: (v: Accessor, i: number) => U, + options: { fallback?: Accessor } = {} +): () => U[] { + const items = list() || []; + let s: U[] = []; + if (items.length) { + for (let i = 0, len = items.length; i < len; i++) s.push(mapFn(() => items[i], i)); + } else if (options.fallback) s = [options.fallback()]; + return () => s; } export type ObservableObserver =