Skip to content

Commit 4d824b0

Browse files
committed
Merge branch 'main' of github.com:solidjs/solid
2 parents 199dd69 + 32aa744 commit 4d824b0

File tree

4 files changed

+48
-13
lines changed

4 files changed

+48
-13
lines changed

.changeset/twelve-comics-knock.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"solid-js": patch
3+
---
4+
5+
Improve resolving arguments in createResource

packages/solid/src/reactive/signal.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -591,14 +591,15 @@ export function createResource<T, S, R>(
591591
let source: ResourceSource<S>;
592592
let fetcher: ResourceFetcher<S, T, R>;
593593
let options: ResourceOptions<T, S>;
594-
if ((arguments.length === 2 && typeof pFetcher === "object") || arguments.length === 1) {
595-
source = true as ResourceSource<S>;
596-
fetcher = pSource as ResourceFetcher<S, T, R>;
597-
options = (pFetcher || {}) as ResourceOptions<T, S>;
598-
} else {
594+
595+
if (typeof pFetcher === "function") {
599596
source = pSource as ResourceSource<S>;
600597
fetcher = pFetcher as ResourceFetcher<S, T, R>;
601598
options = pOptions || ({} as ResourceOptions<T, S>);
599+
} else {
600+
source = true as ResourceSource<S>;
601+
fetcher = pSource as ResourceFetcher<S, T, R>;
602+
options = (pFetcher || {}) as ResourceOptions<T, S>;
602603
}
603604

604605
let pr: Promise<T> | null = null,

packages/solid/src/server/rendering.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -374,16 +374,13 @@ export function createResource<T, S>(
374374
fetcher?: ResourceFetcher<S, T> | ResourceOptions<T> | ResourceOptions<undefined>,
375375
options: ResourceOptions<T> | ResourceOptions<undefined> = {}
376376
): ResourceReturn<T> | ResourceReturn<T | undefined> {
377-
if (arguments.length === 2) {
378-
if (typeof fetcher === "object") {
379-
options = fetcher as ResourceOptions<T> | ResourceOptions<undefined>;
380-
fetcher = source as ResourceFetcher<S, T>;
381-
source = true as ResourceSource<S>;
382-
}
383-
} else if (arguments.length === 1) {
384-
fetcher = source as ResourceFetcher<S, T>;
377+
378+
if (typeof fetcher !== "function") {
385379
source = true as ResourceSource<S>;
380+
fetcher = source as ResourceFetcher<S, T>;
381+
options = (fetcher || {}) as ResourceOptions<T> | ResourceOptions<undefined>;
386382
}
383+
387384
const contexts = new Set<SuspenseContextType>();
388385
const id = sharedConfig.getNextContextId();
389386
let resource: { ref?: any; data?: T } = {};

packages/solid/test/resource.spec.ts

+32
Original file line numberDiff line numberDiff line change
@@ -385,3 +385,35 @@ describe("using Resource with custom store", () => {
385385
expect(street).toBe(2);
386386
});
387387
});
388+
389+
describe("createResource can be wrapped", () => {
390+
391+
const fns: [name: string, function: typeof createResource][] = [
392+
["original createResource", createResource],
393+
// @ts-ignore
394+
["createResource(...args)", (...args) => createResource(...args)],
395+
// @ts-ignore
396+
["createResource(a, b, c)", (a, b, c) => createResource(a, b, c)],
397+
]
398+
399+
for (const [name, fn] of fns) {
400+
401+
test(`only fetcher in ${name}`, () => {
402+
const [[data], dispose] = createRoot(dispose => [fn(() => 123), dispose])
403+
expect(data()).toBe(123)
404+
dispose()
405+
})
406+
407+
test(`fetcher and source in ${name}`, () => {
408+
const [source, setSource] = createSignal(1)
409+
410+
const [[data], dispose] = createRoot(dispose => [fn(source, v => v), dispose])
411+
expect(data()).toBe(1)
412+
413+
setSource(2)
414+
expect(data()).toBe(2)
415+
416+
dispose()
417+
})
418+
}
419+
})

0 commit comments

Comments
 (0)