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..e950ac00 100644 --- a/packages/solid/src/server/reactive.ts +++ b/packages/solid/src/server/reactive.ts @@ -267,21 +267,29 @@ 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(); let s: U[] = []; - if (items.length) { + if (items && 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; } -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 && 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 =