Skip to content

Commit

Permalink
Better types for on
Browse files Browse the repository at this point in the history
  • Loading branch information
ryansolid committed Jun 16, 2021
1 parent 1c9b28f commit 4d69ae6
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 12 deletions.
11 changes: 7 additions & 4 deletions packages/solid-ssr/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/solid/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export {
runWithOwner,
equalFn
} from "./reactive/signal";
export type { Accessor, Resource, ResourceReturn, Context } from "./reactive/signal";
export type { Accessor, Resource, ResourceReturn, Context, OnParams } from "./reactive/signal";

export { createState, unwrap, $RAW } from "./reactive/state";
export type {
Expand Down
19 changes: 12 additions & 7 deletions packages/solid/src/reactive/signal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -440,20 +440,25 @@ export function untrack<T>(fn: Accessor<T>): T {
return result;
}

export function on<T, U>(
deps: Array<() => T> | (() => T),
fn: (value: Array<T> | T, prev: Array<T> | T, prevResults?: U) => U,
export type OnParams<T> = T extends Array<() => infer R>
? R[]
: T extends () => infer R
? R
: never;
export function on<T extends Array<() => any> | (() => any), U>(
deps: T,
fn: (value: OnParams<T>, prev: OnParams<T>, prevResults?: U) => U,
options?: { defer?: boolean }
): (prev?: U) => U | undefined {
let isArray = Array.isArray(deps);
let prev: Array<T> | T;
let prev: OnParams<T>;
let defer = options && options.defer;
return prevResult => {
let value: T | Array<T>;
let value: OnParams<T>;
if (isArray) {
value = [];
value = [] as any;
for (let i = 0; i < deps.length; i++) value.push((deps as Array<() => T>)[i]());
} else value = (deps as () => T)();
} else value = (deps as () => T)() as any;
if (defer) {
defer = false;
return undefined;
Expand Down

0 comments on commit 4d69ae6

Please sign in to comment.