Skip to content

Commit 2af1d86

Browse files
committed
abstract setFunctionName
1 parent aef18ec commit 2af1d86

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

src/data/action.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
Navigator,
99
NarrowResponse
1010
} from "../types.js";
11-
import { mockBase } from "../utils.js";
11+
import { mockBase, setFunctionName } from "../utils.js";
1212
import { cacheKeyOp, hashKey, revalidate, query } from "./query.js";
1313

1414
export type Action<T extends Array<any>, U, V = T> = (T extends [FormData] | []
@@ -98,7 +98,7 @@ export function action<T extends Array<any>, U = void>(
9898
error: result?.error,
9999
pending: false,
100100
retry() {
101-
return retry = submission.retry();
101+
return (retry = submission.retry());
102102
}
103103
});
104104
if (retry) return retry;
@@ -136,12 +136,9 @@ export function action<T extends Array<any>, U = void>(
136136
}
137137
const o = typeof options === "string" ? { name: options } : options;
138138
const name = o.name || (!isServer ? String(hashString(fn.toString())) : undefined);
139-
const url: string =
140-
(fn as any).url ||
141-
(name && `https://action/${name}`) ||
142-
"";
139+
const url: string = (fn as any).url || (name && `https://action/${name}`) || "";
143140
mutate.base = url;
144-
if (name) Object.defineProperty(mutate, 'name', { value: name, writable: false, configurable: true });
141+
if (name) setFunctionName(mutate, name);
145142
return toAction(mutate, url);
146143
}
147144

src/data/createAsync.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ describe("createAsync", () => {
9595
});
9696
});
9797

98-
test.skip("should support `name` option for debugging", () => {
98+
test("should support `name` option for debugging", () => {
9999
return createRoot(() => {
100100
const resource = createAsync(async () => "named resource", { name: "test-resource" });
101101

src/data/createAsync.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import { type Accessor, createResource, sharedConfig, type Setter, untrack } from "solid-js";
55
import { createStore, reconcile, type ReconcileOptions, unwrap } from "solid-js/store";
66
import { isServer } from "solid-js/web";
7+
import { setFunctionName } from "../utils";
78

89
/**
910
* As `createAsync` and `createAsyncStore` are wrappers for `createResource`,
@@ -13,7 +14,7 @@ import { isServer } from "solid-js/web";
1314
export type AccessorWithLatest<T> = {
1415
(): T;
1516
latest: T;
16-
}
17+
};
1718

1819
export function createAsync<T>(
1920
fn: (prev: T) => Promise<T>,
@@ -40,19 +41,21 @@ export function createAsync<T>(
4041
}
4142
): AccessorWithLatest<T | undefined> {
4243
let resource: () => T;
43-
let prev = () => !resource || (resource as any).state === "unresolved" ? undefined : (resource as any).latest;
44+
let prev = () =>
45+
!resource || (resource as any).state === "unresolved" ? undefined : (resource as any).latest;
4446
[resource] = createResource(
4547
() => subFetch(fn, untrack(prev)),
4648
v => v,
4749
options as any
4850
);
4951

5052
const resultAccessor: AccessorWithLatest<T> = (() => resource()) as any;
51-
Object.defineProperty(resultAccessor, 'latest', {
53+
if (options?.name) setFunctionName(resultAccessor, options.name);
54+
Object.defineProperty(resultAccessor, "latest", {
5255
get() {
5356
return (resource as any).latest;
5457
}
55-
})
58+
});
5659

5760
return resultAccessor;
5861
}
@@ -85,7 +88,10 @@ export function createAsyncStore<T>(
8588
} = {}
8689
): AccessorWithLatest<T | undefined> {
8790
let resource: () => T;
88-
let prev = () => !resource || (resource as any).state === "unresolved" ? undefined : unwrap((resource as any).latest);
91+
let prev = () =>
92+
!resource || (resource as any).state === "unresolved"
93+
? undefined
94+
: unwrap((resource as any).latest);
8995
[resource] = createResource(
9096
() => subFetch(fn, untrack(prev)),
9197
v => v,
@@ -96,11 +102,11 @@ export function createAsyncStore<T>(
96102
);
97103

98104
const resultAccessor: AccessorWithLatest<T> = (() => resource()) as any;
99-
Object.defineProperty(resultAccessor, 'latest', {
105+
Object.defineProperty(resultAccessor, "latest", {
100106
get() {
101107
return (resource as any).latest;
102108
}
103-
})
109+
});
104110

105111
return resultAccessor;
106112
}

src/utils.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,3 +206,12 @@ export function expandOptionals(pattern: string): string[] {
206206
[]
207207
);
208208
}
209+
210+
export function setFunctionName<T>(obj: T, value: string) {
211+
Object.defineProperty(obj, "name", {
212+
value,
213+
writable: false,
214+
configurable: false
215+
});
216+
return obj;
217+
}

0 commit comments

Comments
 (0)