@solidjs/router 0.14.1 → 0.14.2
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/README.md +9 -1
- package/dist/data/createAsync.d.ts +12 -7
- package/dist/data/createAsync.js +14 -2
- package/dist/data/index.d.ts +1 -1
- package/dist/index.js +23 -3
- package/dist/routers/createRouter.js +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -495,11 +495,19 @@ This is light wrapper over `createResource` that aims to serve as stand-in for a
|
|
|
495
495
|
const user = createAsync((currentValue) => getUser(params.id))
|
|
496
496
|
```
|
|
497
497
|
|
|
498
|
+
It also preserves `latest` field from `createResource`. Note that it will be removed in the future.
|
|
499
|
+
|
|
500
|
+
```jsx
|
|
501
|
+
const user = createAsync((currentValue) => getUser(params.id))
|
|
502
|
+
return <h1>{user.latest.name}</h1>;
|
|
503
|
+
```
|
|
504
|
+
|
|
498
505
|
Using `cache` in `createResource` directly won't work properly as the fetcher is not reactive and it won't invalidate properly.
|
|
499
506
|
|
|
500
507
|
### `createAsyncStore`
|
|
501
508
|
|
|
502
509
|
Similar to `createAsync` except it uses a deeply reactive store. Perfect for applying fine-grained changes to large model data that updates.
|
|
510
|
+
It also supports `latest` field which will be removed in the future.
|
|
503
511
|
|
|
504
512
|
```jsx
|
|
505
513
|
const todos = createAsyncStore(() => getTodos());
|
|
@@ -727,7 +735,7 @@ This is the main Router component for the browser.
|
|
|
727
735
|
| base | string | Base url to use for matching routes |
|
|
728
736
|
| actionBase | string | Root url for server actions, default: `/_server` |
|
|
729
737
|
| preload | boolean | Enables/disables preloads globally, default: `true` |
|
|
730
|
-
| explicitLinks | boolean | Disables all anchors being intercepted and instead requires `<A>`.
|
|
738
|
+
| explicitLinks | boolean | Disables all anchors being intercepted and instead requires `<A>`. Default: `false`. (To disable interception for a specific link, set `target` to any value, e.g. `<a target="_self">`.) |
|
|
731
739
|
|
|
732
740
|
### `<A>`
|
|
733
741
|
|
|
@@ -1,27 +1,32 @@
|
|
|
1
|
+
import { type ReconcileOptions } from "solid-js/store";
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* As `createAsync` and `createAsyncStore` are wrappers for `createResource`,
|
|
4
|
+
* this type allows to support `latest` field for these primitives.
|
|
5
|
+
* It will be removed in the future.
|
|
3
6
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
export type AccessorWithLatest<T> = {
|
|
8
|
+
(): T;
|
|
9
|
+
latest: T;
|
|
10
|
+
};
|
|
6
11
|
export declare function createAsync<T>(fn: (prev: T) => Promise<T>, options: {
|
|
7
12
|
name?: string;
|
|
8
13
|
initialValue: T;
|
|
9
14
|
deferStream?: boolean;
|
|
10
|
-
}):
|
|
15
|
+
}): AccessorWithLatest<T>;
|
|
11
16
|
export declare function createAsync<T>(fn: (prev: T | undefined) => Promise<T>, options?: {
|
|
12
17
|
name?: string;
|
|
13
18
|
initialValue?: T;
|
|
14
19
|
deferStream?: boolean;
|
|
15
|
-
}):
|
|
20
|
+
}): AccessorWithLatest<T | undefined>;
|
|
16
21
|
export declare function createAsyncStore<T>(fn: (prev: T) => Promise<T>, options: {
|
|
17
22
|
name?: string;
|
|
18
23
|
initialValue: T;
|
|
19
24
|
deferStream?: boolean;
|
|
20
25
|
reconcile?: ReconcileOptions;
|
|
21
|
-
}):
|
|
26
|
+
}): AccessorWithLatest<T>;
|
|
22
27
|
export declare function createAsyncStore<T>(fn: (prev: T | undefined) => Promise<T>, options?: {
|
|
23
28
|
name?: string;
|
|
24
29
|
initialValue?: T;
|
|
25
30
|
deferStream?: boolean;
|
|
26
31
|
reconcile?: ReconcileOptions;
|
|
27
|
-
}):
|
|
32
|
+
}): AccessorWithLatest<T | undefined>;
|
package/dist/data/createAsync.js
CHANGED
|
@@ -8,7 +8,13 @@ export function createAsync(fn, options) {
|
|
|
8
8
|
let resource;
|
|
9
9
|
let prev = () => !resource || resource.state === "unresolved" ? undefined : resource.latest;
|
|
10
10
|
[resource] = createResource(() => subFetch(fn, untrack(prev)), v => v, options);
|
|
11
|
-
|
|
11
|
+
const resultAccessor = (() => resource());
|
|
12
|
+
Object.defineProperty(resultAccessor, 'latest', {
|
|
13
|
+
get() {
|
|
14
|
+
return resource.latest;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
return resultAccessor;
|
|
12
18
|
}
|
|
13
19
|
export function createAsyncStore(fn, options = {}) {
|
|
14
20
|
let resource;
|
|
@@ -17,7 +23,13 @@ export function createAsyncStore(fn, options = {}) {
|
|
|
17
23
|
...options,
|
|
18
24
|
storage: (init) => createDeepSignal(init, options.reconcile)
|
|
19
25
|
});
|
|
20
|
-
|
|
26
|
+
const resultAccessor = (() => resource());
|
|
27
|
+
Object.defineProperty(resultAccessor, 'latest', {
|
|
28
|
+
get() {
|
|
29
|
+
return resource.latest;
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return resultAccessor;
|
|
21
33
|
}
|
|
22
34
|
function createDeepSignal(value, options) {
|
|
23
35
|
const [store, setStore] = createStore({
|
package/dist/data/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { createAsync, createAsyncStore } from "./createAsync.js";
|
|
1
|
+
export { createAsync, createAsyncStore, type AccessorWithLatest } from "./createAsync.js";
|
|
2
2
|
export { action, useSubmission, useSubmissions, useAction, type Action } from "./action.js";
|
|
3
3
|
export { cache, revalidate, type CachedFunction } from "./cache.js";
|
|
4
4
|
export { redirect, reload, json } from "./response.js";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isServer, getRequestEvent, createComponent as createComponent$1, memo, delegateEvents, spread, mergeProps as mergeProps$1, template } from 'solid-js/web';
|
|
2
|
-
import { getOwner, runWithOwner, createMemo, createContext, onCleanup, useContext, untrack, createSignal, createRenderEffect, on, startTransition, resetErrorBoundaries, batch, createComponent, children, mergeProps, Show, createRoot,
|
|
2
|
+
import { getOwner, runWithOwner, createMemo, createContext, onCleanup, useContext, untrack, createSignal, createRenderEffect, on, startTransition, resetErrorBoundaries, batch, createComponent, children, mergeProps, Show, createRoot, sharedConfig, getListener, $TRACK, splitProps, createResource } from 'solid-js';
|
|
3
3
|
import { createStore, reconcile, unwrap } from 'solid-js/store';
|
|
4
4
|
|
|
5
5
|
function createBeforeLeave() {
|
|
@@ -840,6 +840,7 @@ function createRouter(config) {
|
|
|
840
840
|
equals: (a, b) => a.value === b.value && a.state === b.state
|
|
841
841
|
}), undefined, next => {
|
|
842
842
|
!ignore && config.set(next);
|
|
843
|
+
if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = true;
|
|
843
844
|
return next;
|
|
844
845
|
});
|
|
845
846
|
config.init && onCleanup(config.init((value = config.get()) => {
|
|
@@ -1521,11 +1522,24 @@ function Navigate(props) {
|
|
|
1521
1522
|
/**
|
|
1522
1523
|
* This is mock of the eventual Solid 2.0 primitive. It is not fully featured.
|
|
1523
1524
|
*/
|
|
1525
|
+
|
|
1526
|
+
/**
|
|
1527
|
+
* As `createAsync` and `createAsyncStore` are wrappers for `createResource`,
|
|
1528
|
+
* this type allows to support `latest` field for these primitives.
|
|
1529
|
+
* It will be removed in the future.
|
|
1530
|
+
*/
|
|
1531
|
+
|
|
1524
1532
|
function createAsync(fn, options) {
|
|
1525
1533
|
let resource;
|
|
1526
1534
|
let prev = () => !resource || resource.state === "unresolved" ? undefined : resource.latest;
|
|
1527
1535
|
[resource] = createResource(() => subFetch(fn, untrack(prev)), v => v, options);
|
|
1528
|
-
|
|
1536
|
+
const resultAccessor = () => resource();
|
|
1537
|
+
Object.defineProperty(resultAccessor, 'latest', {
|
|
1538
|
+
get() {
|
|
1539
|
+
return resource.latest;
|
|
1540
|
+
}
|
|
1541
|
+
});
|
|
1542
|
+
return resultAccessor;
|
|
1529
1543
|
}
|
|
1530
1544
|
function createAsyncStore(fn, options = {}) {
|
|
1531
1545
|
let resource;
|
|
@@ -1534,7 +1548,13 @@ function createAsyncStore(fn, options = {}) {
|
|
|
1534
1548
|
...options,
|
|
1535
1549
|
storage: init => createDeepSignal(init, options.reconcile)
|
|
1536
1550
|
});
|
|
1537
|
-
|
|
1551
|
+
const resultAccessor = () => resource();
|
|
1552
|
+
Object.defineProperty(resultAccessor, 'latest', {
|
|
1553
|
+
get() {
|
|
1554
|
+
return resource.latest;
|
|
1555
|
+
}
|
|
1556
|
+
});
|
|
1557
|
+
return resultAccessor;
|
|
1538
1558
|
}
|
|
1539
1559
|
function createDeepSignal(value, options) {
|
|
1540
1560
|
const [store, setStore] = createStore({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createSignal, onCleanup } from "solid-js";
|
|
1
|
+
import { createSignal, onCleanup, sharedConfig } from "solid-js";
|
|
2
2
|
import { createRouterComponent } from "./components.jsx";
|
|
3
3
|
function intercept([value, setValue], get, set) {
|
|
4
4
|
return [get ? () => get(value()) : value, set ? (v) => setValue(set(v)) : setValue];
|
|
@@ -22,6 +22,8 @@ export function createRouter(config) {
|
|
|
22
22
|
equals: (a, b) => a.value === b.value && a.state === b.state
|
|
23
23
|
}), undefined, next => {
|
|
24
24
|
!ignore && config.set(next);
|
|
25
|
+
if (sharedConfig.registry && !sharedConfig.done)
|
|
26
|
+
sharedConfig.done = true;
|
|
25
27
|
return next;
|
|
26
28
|
});
|
|
27
29
|
config.init &&
|