@solidjs/router 0.10.0-beta.6 → 0.10.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/action.d.ts +9 -6
- package/dist/data/action.js +24 -10
- package/dist/data/cache.d.ts +1 -0
- package/dist/data/cache.js +1 -1
- package/dist/data/events.js +3 -1
- package/dist/index.js +27 -18
- package/dist/routing.js +4 -13
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/dist/data/action.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { JSX } from "solid-js";
|
|
2
2
|
import { Submission } from "../types";
|
|
3
|
-
export type Action<T
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export type Action<T extends Array<any>, U> = ((...vars: T) => Promise<U>) & JSX.SerializableAttributeValue & {
|
|
4
|
+
url: string;
|
|
5
|
+
with<A extends any[], B extends any[]>(this: (this: any, ...args: [...A, ...B]) => U, ...args: A): Action<B, U>;
|
|
6
|
+
};
|
|
7
|
+
export declare const actions: Map<string, Action<any, any>>;
|
|
8
|
+
export declare function useSubmissions<T extends Array<any>, U>(fn: Action<T, U>, filter?: (arg: T) => boolean): Submission<T, U>[] & {
|
|
6
9
|
pending: boolean;
|
|
7
10
|
};
|
|
8
|
-
export declare function useSubmission<T
|
|
9
|
-
export declare function useAction<T
|
|
10
|
-
export declare function action<T
|
|
11
|
+
export declare function useSubmission<T extends Array<any>, U>(fn: Action<T, U>, filter?: (arg: T) => boolean): Submission<T, U>;
|
|
12
|
+
export declare function useAction<T extends Array<any>, U>(action: Action<T, U>): (...args: Parameters<Action<T, U>>) => Promise<U>;
|
|
13
|
+
export declare function action<T extends Array<any>, U = void>(fn: (...args: T) => Promise<U>, name?: string): Action<T, U>;
|
package/dist/data/action.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $TRACK, createMemo, createSignal } from "solid-js";
|
|
1
|
+
import { $TRACK, createMemo, createSignal, onCleanup, getOwner } from "solid-js";
|
|
2
2
|
import { isServer } from "solid-js/web";
|
|
3
3
|
import { useRouter } from "../routing";
|
|
4
4
|
import { redirectStatusCodes } from "../utils";
|
|
5
|
-
import { revalidate } from "./cache";
|
|
5
|
+
import { hashKey, revalidate } from "./cache";
|
|
6
6
|
export const actions = /* #__PURE__ */ new Map();
|
|
7
7
|
export function useSubmissions(fn, filter) {
|
|
8
8
|
const router = useRouter();
|
|
@@ -27,11 +27,11 @@ export function useSubmission(fn, filter) {
|
|
|
27
27
|
}
|
|
28
28
|
export function useAction(action) {
|
|
29
29
|
const router = useRouter();
|
|
30
|
-
return action.
|
|
30
|
+
return (...args) => action.apply(router, args);
|
|
31
31
|
}
|
|
32
32
|
export function action(fn, name) {
|
|
33
|
-
function mutate(variables) {
|
|
34
|
-
const p = fn(variables);
|
|
33
|
+
function mutate(...variables) {
|
|
34
|
+
const p = fn(...variables);
|
|
35
35
|
const [result, setResult] = createSignal();
|
|
36
36
|
let submission;
|
|
37
37
|
const router = this;
|
|
@@ -56,7 +56,7 @@ export function action(fn, name) {
|
|
|
56
56
|
},
|
|
57
57
|
retry() {
|
|
58
58
|
setResult(undefined);
|
|
59
|
-
const p = fn(variables);
|
|
59
|
+
const p = fn(...variables);
|
|
60
60
|
p.then(handler, handler);
|
|
61
61
|
return p;
|
|
62
62
|
}
|
|
@@ -66,14 +66,28 @@ export function action(fn, name) {
|
|
|
66
66
|
return p;
|
|
67
67
|
}
|
|
68
68
|
const url = fn.url || (name && `action:${name}`) || (!isServer ? `action:${fn.name}` : "");
|
|
69
|
-
mutate
|
|
69
|
+
return toAction(mutate, url);
|
|
70
|
+
}
|
|
71
|
+
function toAction(fn, url) {
|
|
72
|
+
fn.toString = () => {
|
|
70
73
|
if (!url)
|
|
71
74
|
throw new Error("Client Actions need explicit names if server rendered");
|
|
72
75
|
return url;
|
|
73
76
|
};
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
fn.with = function (...args) {
|
|
78
|
+
const newFn = function (...passedArgs) {
|
|
79
|
+
return fn.call(this, ...args, ...passedArgs);
|
|
80
|
+
};
|
|
81
|
+
const uri = new URL(url, "http://sar");
|
|
82
|
+
uri.searchParams.set("args", hashKey(args));
|
|
83
|
+
return toAction(newFn, uri.toString());
|
|
84
|
+
};
|
|
85
|
+
fn.url = url;
|
|
86
|
+
if (!isServer) {
|
|
87
|
+
actions.set(url, fn);
|
|
88
|
+
getOwner() && onCleanup(() => actions.delete(url));
|
|
89
|
+
}
|
|
90
|
+
return fn;
|
|
77
91
|
}
|
|
78
92
|
async function handleResponse(response, navigate) {
|
|
79
93
|
let data;
|
package/dist/data/cache.d.ts
CHANGED
|
@@ -5,3 +5,4 @@ export type CachedFunction<T extends (...args: any) => U | Response, U> = T & {
|
|
|
5
5
|
key: string;
|
|
6
6
|
};
|
|
7
7
|
export declare function cache<T extends (...args: any) => U | Response, U>(fn: T, name: string, options?: ReconcileOptions): CachedFunction<T, U>;
|
|
8
|
+
export declare function hashKey<T extends Array<any>>(args: T): string;
|
package/dist/data/cache.js
CHANGED
|
@@ -139,7 +139,7 @@ function matchKey(key, keys) {
|
|
|
139
139
|
}
|
|
140
140
|
// Modified from the amazing Tanstack Query library (MIT)
|
|
141
141
|
// https://github.com/TanStack/query/blob/main/packages/query-core/src/utils.ts#L168
|
|
142
|
-
function hashKey(args) {
|
|
142
|
+
export function hashKey(args) {
|
|
143
143
|
return JSON.stringify(args, (_, val) => isPlainObject(val)
|
|
144
144
|
? Object.keys(val)
|
|
145
145
|
.sort()
|
package/dist/data/events.js
CHANGED
|
@@ -81,7 +81,9 @@ export function setupNativeEvents(router) {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
function handleFormSubmit(evt) {
|
|
84
|
-
let actionRef =
|
|
84
|
+
let actionRef = evt.submitter && evt.submitter.hasAttribute("formaction")
|
|
85
|
+
? evt.submitter.formAction
|
|
86
|
+
: evt.target.action;
|
|
85
87
|
if (!actionRef)
|
|
86
88
|
return;
|
|
87
89
|
if (!actionRef.startsWith("action:")) {
|
package/dist/index.js
CHANGED
|
@@ -389,7 +389,7 @@ function createRouterContext(integration, getBranches, options = {}) {
|
|
|
389
389
|
const [state, setState] = createSignal(source().state);
|
|
390
390
|
const location = createLocation(reference, state);
|
|
391
391
|
const referrers = [];
|
|
392
|
-
const submissions = createSignal(initFromFlash(
|
|
392
|
+
const submissions = createSignal(isServer ? initFromFlash() : []);
|
|
393
393
|
const baseRoute = {
|
|
394
394
|
pattern: basePath,
|
|
395
395
|
params: {},
|
|
@@ -544,15 +544,9 @@ function createRouterContext(integration, getBranches, options = {}) {
|
|
|
544
544
|
}
|
|
545
545
|
intent = prevIntent;
|
|
546
546
|
}
|
|
547
|
-
function initFromFlash(
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
const input = new Map(param.entries);
|
|
551
|
-
return [{
|
|
552
|
-
url: param.url,
|
|
553
|
-
result: param.error ? new Error(param.result) : param.result,
|
|
554
|
-
input: input
|
|
555
|
-
}];
|
|
547
|
+
function initFromFlash() {
|
|
548
|
+
const e = getRequestEvent();
|
|
549
|
+
return e && e.initialSubmission ? [e.initialSubmission] : [];
|
|
556
550
|
}
|
|
557
551
|
}
|
|
558
552
|
function createRouteContext(router, parent, outlet, match, params) {
|
|
@@ -916,11 +910,11 @@ function useSubmission(fn, filter) {
|
|
|
916
910
|
}
|
|
917
911
|
function useAction(action) {
|
|
918
912
|
const router = useRouter();
|
|
919
|
-
return action.
|
|
913
|
+
return (...args) => action.apply(router, args);
|
|
920
914
|
}
|
|
921
915
|
function action(fn, name) {
|
|
922
|
-
function mutate(variables) {
|
|
923
|
-
const p = fn(variables);
|
|
916
|
+
function mutate(...variables) {
|
|
917
|
+
const p = fn(...variables);
|
|
924
918
|
const [result, setResult] = createSignal();
|
|
925
919
|
let submission;
|
|
926
920
|
const router = this;
|
|
@@ -945,7 +939,7 @@ function action(fn, name) {
|
|
|
945
939
|
},
|
|
946
940
|
retry() {
|
|
947
941
|
setResult(undefined);
|
|
948
|
-
const p = fn(variables);
|
|
942
|
+
const p = fn(...variables);
|
|
949
943
|
p.then(handler, handler);
|
|
950
944
|
return p;
|
|
951
945
|
}
|
|
@@ -954,12 +948,27 @@ function action(fn, name) {
|
|
|
954
948
|
return p;
|
|
955
949
|
}
|
|
956
950
|
const url = fn.url || name && `action:${name}` || (!isServer ? `action:${fn.name}` : "");
|
|
957
|
-
mutate
|
|
951
|
+
return toAction(mutate, url);
|
|
952
|
+
}
|
|
953
|
+
function toAction(fn, url) {
|
|
954
|
+
fn.toString = () => {
|
|
958
955
|
if (!url) throw new Error("Client Actions need explicit names if server rendered");
|
|
959
956
|
return url;
|
|
960
957
|
};
|
|
961
|
-
|
|
962
|
-
|
|
958
|
+
fn.with = function (...args) {
|
|
959
|
+
const newFn = function (...passedArgs) {
|
|
960
|
+
return fn.call(this, ...args, ...passedArgs);
|
|
961
|
+
};
|
|
962
|
+
const uri = new URL(url, "http://sar");
|
|
963
|
+
uri.searchParams.set("args", hashKey(args));
|
|
964
|
+
return toAction(newFn, uri.toString());
|
|
965
|
+
};
|
|
966
|
+
fn.url = url;
|
|
967
|
+
if (!isServer) {
|
|
968
|
+
actions.set(url, fn);
|
|
969
|
+
getOwner() && onCleanup(() => actions.delete(url));
|
|
970
|
+
}
|
|
971
|
+
return fn;
|
|
963
972
|
}
|
|
964
973
|
async function handleResponse(response, navigate) {
|
|
965
974
|
let data;
|
|
@@ -1043,7 +1052,7 @@ function setupNativeEvents(router) {
|
|
|
1043
1052
|
}
|
|
1044
1053
|
}
|
|
1045
1054
|
function handleFormSubmit(evt) {
|
|
1046
|
-
let actionRef = evt.submitter && evt.submitter.
|
|
1055
|
+
let actionRef = evt.submitter && evt.submitter.hasAttribute("formaction") ? evt.submitter.formAction : evt.target.action;
|
|
1047
1056
|
if (!actionRef) return;
|
|
1048
1057
|
if (!actionRef.startsWith("action:")) {
|
|
1049
1058
|
const url = new URL(actionRef);
|
package/dist/routing.js
CHANGED
|
@@ -202,7 +202,7 @@ export function createRouterContext(integration, getBranches, options = {}) {
|
|
|
202
202
|
const [state, setState] = createSignal(source().state);
|
|
203
203
|
const location = createLocation(reference, state);
|
|
204
204
|
const referrers = [];
|
|
205
|
-
const submissions = createSignal(initFromFlash(
|
|
205
|
+
const submissions = createSignal(isServer ? initFromFlash() : []);
|
|
206
206
|
const baseRoute = {
|
|
207
207
|
pattern: basePath,
|
|
208
208
|
params: {},
|
|
@@ -342,18 +342,9 @@ export function createRouterContext(integration, getBranches, options = {}) {
|
|
|
342
342
|
}
|
|
343
343
|
intent = prevIntent;
|
|
344
344
|
}
|
|
345
|
-
function initFromFlash(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return [];
|
|
349
|
-
const input = new Map(param.entries);
|
|
350
|
-
return [
|
|
351
|
-
{
|
|
352
|
-
url: param.url,
|
|
353
|
-
result: param.error ? new Error(param.result) : param.result,
|
|
354
|
-
input: input
|
|
355
|
-
}
|
|
356
|
-
];
|
|
345
|
+
function initFromFlash() {
|
|
346
|
+
const e = getRequestEvent();
|
|
347
|
+
return e && e.initialSubmission ? [e.initialSubmission] : [];
|
|
357
348
|
}
|
|
358
349
|
}
|
|
359
350
|
export function createRouteContext(router, parent, outlet, match, params) {
|
package/dist/types.d.ts
CHANGED