@tanstack/solid-router 1.133.35 → 1.133.36
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/cjs/useRouterState.cjs +19 -0
- package/dist/cjs/useRouterState.cjs.map +1 -1
- package/dist/esm/useRouterState.js +19 -0
- package/dist/esm/useRouterState.js.map +1 -1
- package/dist/source/useRouterState.jsx +28 -0
- package/dist/source/useRouterState.jsx.map +1 -1
- package/package.json +3 -3
- package/src/useRouterState.tsx +40 -4
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const solidStore = require("@tanstack/solid-store");
|
|
4
4
|
const useRouter = require("./useRouter.cjs");
|
|
5
|
+
function deepEqual(a, b) {
|
|
6
|
+
if (Object.is(a, b)) return true;
|
|
7
|
+
if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
const keysA = Object.keys(a);
|
|
11
|
+
const keysB = Object.keys(b);
|
|
12
|
+
if (keysA.length !== keysB.length) return false;
|
|
13
|
+
for (const key of keysA) {
|
|
14
|
+
if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
|
|
15
|
+
if (!deepEqual(a[key], b[key])) return false;
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
5
19
|
function useRouterState(opts) {
|
|
6
20
|
const contextRouter = useRouter.useRouter({
|
|
7
21
|
warn: opts?.router === void 0
|
|
@@ -10,6 +24,11 @@ function useRouterState(opts) {
|
|
|
10
24
|
return solidStore.useStore(router.__store, (state) => {
|
|
11
25
|
if (opts?.select) return opts.select(state);
|
|
12
26
|
return state;
|
|
27
|
+
}, {
|
|
28
|
+
// Use deep equality to match behavior of solid-store 0.7.0 which used
|
|
29
|
+
// reconcile(). This ensures updates work correctly when selectors
|
|
30
|
+
// return new object references but with the same values.
|
|
31
|
+
equal: deepEqual
|
|
13
32
|
});
|
|
14
33
|
}
|
|
15
34
|
exports.useRouterState = useRouterState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"useRouterState.cjs","sources":["../../src/useRouterState.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\nimport { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\n// Deep equality check to match behavior of solid-store 0.7.0's reconcile()\nfunction deepEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!deepEqual(a[key], b[key])) return false\n }\n\n return true\n}\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(\n router.__store,\n (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n },\n {\n // Use deep equality to match behavior of solid-store 0.7.0 which used\n // reconcile(). This ensures updates work correctly when selectors\n // return new object references but with the same values.\n equal: deepEqual,\n },\n ) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["deepEqual","a","b","Object","is","keysA","keys","keysB","length","key","prototype","hasOwnProperty","call","useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select","equal"],"mappings":";;;;AAWA,SAASA,UAAUC,GAAQC,GAAiB;AAC1C,MAAIC,OAAOC,GAAGH,GAAGC,CAAC,EAAG,QAAO;AAE5B,MACE,OAAOD,MAAM,YACbA,MAAM,QACN,OAAOC,MAAM,YACbA,MAAM,MACN;AACA,WAAO;AAAA,EACT;AAEA,QAAMG,QAAQF,OAAOG,KAAKL,CAAC;AAC3B,QAAMM,QAAQJ,OAAOG,KAAKJ,CAAC;AAE3B,MAAIG,MAAMG,WAAWD,MAAMC,OAAQ,QAAO;AAE1C,aAAWC,OAAOJ,OAAO;AACvB,QAAI,CAACF,OAAOO,UAAUC,eAAeC,KAAKV,GAAGO,GAAG,EAAG,QAAO;AAC1D,QAAI,CAACT,UAAUC,EAAEQ,GAAG,GAAGP,EAAEO,GAAG,CAAC,EAAG,QAAO;AAAA,EACzC;AAEA,SAAO;AACT;AAYO,SAASI,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAAA,UAAmB;AAAA,IACvCC,MAAMH,MAAMI,WAAWC;AAAAA,EAAAA,CACxB;AACD,QAAMD,SAASJ,MAAMI,UAAUH;AAE/B,SAAOK,oBACLF,OAAOG,SACNC,CAAAA,UAAU;AACT,QAAIR,MAAMS,OAAQ,QAAOT,KAAKS,OAAOD,KAAK;AAE1C,WAAOA;AAAAA,EACT,GACA;AAAA;AAAA;AAAA;AAAA,IAIEE,OAAOxB;AAAAA,EAAAA,CAEX;AACF;;"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { useStore } from "@tanstack/solid-store";
|
|
2
2
|
import { useRouter } from "./useRouter.js";
|
|
3
|
+
function deepEqual(a, b) {
|
|
4
|
+
if (Object.is(a, b)) return true;
|
|
5
|
+
if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
const keysA = Object.keys(a);
|
|
9
|
+
const keysB = Object.keys(b);
|
|
10
|
+
if (keysA.length !== keysB.length) return false;
|
|
11
|
+
for (const key of keysA) {
|
|
12
|
+
if (!Object.prototype.hasOwnProperty.call(b, key)) return false;
|
|
13
|
+
if (!deepEqual(a[key], b[key])) return false;
|
|
14
|
+
}
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
3
17
|
function useRouterState(opts) {
|
|
4
18
|
const contextRouter = useRouter({
|
|
5
19
|
warn: opts?.router === void 0
|
|
@@ -8,6 +22,11 @@ function useRouterState(opts) {
|
|
|
8
22
|
return useStore(router.__store, (state) => {
|
|
9
23
|
if (opts?.select) return opts.select(state);
|
|
10
24
|
return state;
|
|
25
|
+
}, {
|
|
26
|
+
// Use deep equality to match behavior of solid-store 0.7.0 which used
|
|
27
|
+
// reconcile(). This ensures updates work correctly when selectors
|
|
28
|
+
// return new object references but with the same values.
|
|
29
|
+
equal: deepEqual
|
|
11
30
|
});
|
|
12
31
|
}
|
|
13
32
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"useRouterState.js","sources":["../../src/useRouterState.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */\nimport { useStore } from '@tanstack/solid-store'\nimport { useRouter } from './useRouter'\nimport type {\n AnyRouter,\n RegisteredRouter,\n RouterState,\n} from '@tanstack/router-core'\nimport type { Accessor } from 'solid-js'\n\n// Deep equality check to match behavior of solid-store 0.7.0's reconcile()\nfunction deepEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true\n\n if (\n typeof a !== 'object' ||\n a === null ||\n typeof b !== 'object' ||\n b === null\n ) {\n return false\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) return false\n\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false\n if (!deepEqual(a[key], b[key])) return false\n }\n\n return true\n}\n\nexport type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {\n router?: TRouter\n select?: (state: RouterState<TRouter['routeTree']>) => TSelected\n}\n\nexport type UseRouterStateResult<\n TRouter extends AnyRouter,\n TSelected,\n> = unknown extends TSelected ? RouterState<TRouter['routeTree']> : TSelected\n\nexport function useRouterState<\n TRouter extends AnyRouter = RegisteredRouter,\n TSelected = unknown,\n>(\n opts?: UseRouterStateOptions<TRouter, TSelected>,\n): Accessor<UseRouterStateResult<TRouter, TSelected>> {\n const contextRouter = useRouter<TRouter>({\n warn: opts?.router === undefined,\n })\n const router = opts?.router || contextRouter\n\n return useStore(\n router.__store,\n (state) => {\n if (opts?.select) return opts.select(state)\n\n return state\n },\n {\n // Use deep equality to match behavior of solid-store 0.7.0 which used\n // reconcile(). This ensures updates work correctly when selectors\n // return new object references but with the same values.\n equal: deepEqual,\n },\n ) as Accessor<UseRouterStateResult<TRouter, TSelected>>\n}\n"],"names":["deepEqual","a","b","Object","is","keysA","keys","keysB","length","key","prototype","hasOwnProperty","call","useRouterState","opts","contextRouter","useRouter","warn","router","undefined","useStore","__store","state","select","equal"],"mappings":";;AAWA,SAASA,UAAUC,GAAQC,GAAiB;AAC1C,MAAIC,OAAOC,GAAGH,GAAGC,CAAC,EAAG,QAAO;AAE5B,MACE,OAAOD,MAAM,YACbA,MAAM,QACN,OAAOC,MAAM,YACbA,MAAM,MACN;AACA,WAAO;AAAA,EACT;AAEA,QAAMG,QAAQF,OAAOG,KAAKL,CAAC;AAC3B,QAAMM,QAAQJ,OAAOG,KAAKJ,CAAC;AAE3B,MAAIG,MAAMG,WAAWD,MAAMC,OAAQ,QAAO;AAE1C,aAAWC,OAAOJ,OAAO;AACvB,QAAI,CAACF,OAAOO,UAAUC,eAAeC,KAAKV,GAAGO,GAAG,EAAG,QAAO;AAC1D,QAAI,CAACT,UAAUC,EAAEQ,GAAG,GAAGP,EAAEO,GAAG,CAAC,EAAG,QAAO;AAAA,EACzC;AAEA,SAAO;AACT;AAYO,SAASI,eAIdC,MACoD;AACpD,QAAMC,gBAAgBC,UAAmB;AAAA,IACvCC,MAAMH,MAAMI,WAAWC;AAAAA,EAAAA,CACxB;AACD,QAAMD,SAASJ,MAAMI,UAAUH;AAE/B,SAAOK,SACLF,OAAOG,SACNC,CAAAA,UAAU;AACT,QAAIR,MAAMS,OAAQ,QAAOT,KAAKS,OAAOD,KAAK;AAE1C,WAAOA;AAAAA,EACT,GACA;AAAA;AAAA;AAAA;AAAA,IAIEE,OAAOxB;AAAAA,EAAAA,CAEX;AACF;"}
|
|
@@ -1,5 +1,28 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */
|
|
1
2
|
import { useStore } from '@tanstack/solid-store';
|
|
2
3
|
import { useRouter } from './useRouter';
|
|
4
|
+
// Deep equality check to match behavior of solid-store 0.7.0's reconcile()
|
|
5
|
+
function deepEqual(a, b) {
|
|
6
|
+
if (Object.is(a, b))
|
|
7
|
+
return true;
|
|
8
|
+
if (typeof a !== 'object' ||
|
|
9
|
+
a === null ||
|
|
10
|
+
typeof b !== 'object' ||
|
|
11
|
+
b === null) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
const keysA = Object.keys(a);
|
|
15
|
+
const keysB = Object.keys(b);
|
|
16
|
+
if (keysA.length !== keysB.length)
|
|
17
|
+
return false;
|
|
18
|
+
for (const key of keysA) {
|
|
19
|
+
if (!Object.prototype.hasOwnProperty.call(b, key))
|
|
20
|
+
return false;
|
|
21
|
+
if (!deepEqual(a[key], b[key]))
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
3
26
|
export function useRouterState(opts) {
|
|
4
27
|
const contextRouter = useRouter({
|
|
5
28
|
warn: opts?.router === undefined,
|
|
@@ -9,6 +32,11 @@ export function useRouterState(opts) {
|
|
|
9
32
|
if (opts?.select)
|
|
10
33
|
return opts.select(state);
|
|
11
34
|
return state;
|
|
35
|
+
}, {
|
|
36
|
+
// Use deep equality to match behavior of solid-store 0.7.0 which used
|
|
37
|
+
// reconcile(). This ensures updates work correctly when selectors
|
|
38
|
+
// return new object references but with the same values.
|
|
39
|
+
equal: deepEqual,
|
|
12
40
|
});
|
|
13
41
|
}
|
|
14
42
|
//# sourceMappingURL=useRouterState.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouterState.jsx","sourceRoot":"","sources":["../../src/useRouterState.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"useRouterState.jsx","sourceRoot":"","sources":["../../src/useRouterState.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAQvC,2EAA2E;AAC3E,SAAS,SAAS,CAAC,CAAM,EAAE,CAAM;IAC/B,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEhC,IACE,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI,EACV,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAE5B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC9C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAYD,MAAM,UAAU,cAAc,CAI5B,IAAgD;IAEhD,MAAM,aAAa,GAAG,SAAS,CAAU;QACvC,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS;KACjC,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,aAAa,CAAA;IAE5C,OAAO,QAAQ,CACb,MAAM,CAAC,OAAO,EACd,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,IAAI,EAAE,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE3C,OAAO,KAAK,CAAA;IACd,CAAC,EACD;QACE,sEAAsE;QACtE,kEAAkE;QAClE,yDAAyD;QACzD,KAAK,EAAE,SAAS;KACjB,CACoD,CAAA;AACzD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/solid-router",
|
|
3
|
-
"version": "1.133.
|
|
3
|
+
"version": "1.133.36",
|
|
4
4
|
"description": "Modern and scalable routing for Solid applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -84,12 +84,12 @@
|
|
|
84
84
|
"@solid-devtools/logger": "^0.9.4",
|
|
85
85
|
"@solid-primitives/refs": "^1.0.8",
|
|
86
86
|
"@solidjs/meta": "^0.29.4",
|
|
87
|
-
"@tanstack/solid-store": "0.
|
|
87
|
+
"@tanstack/solid-store": "^0.8.0",
|
|
88
88
|
"isbot": "^5.1.22",
|
|
89
89
|
"tiny-invariant": "^1.3.3",
|
|
90
90
|
"tiny-warning": "^1.0.3",
|
|
91
91
|
"@tanstack/history": "1.133.28",
|
|
92
|
-
"@tanstack/router-core": "1.133.
|
|
92
|
+
"@tanstack/router-core": "1.133.36"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@solidjs/testing-library": "^0.8.10",
|
package/src/useRouterState.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-type-assertion */
|
|
1
2
|
import { useStore } from '@tanstack/solid-store'
|
|
2
3
|
import { useRouter } from './useRouter'
|
|
3
4
|
import type {
|
|
@@ -7,6 +8,32 @@ import type {
|
|
|
7
8
|
} from '@tanstack/router-core'
|
|
8
9
|
import type { Accessor } from 'solid-js'
|
|
9
10
|
|
|
11
|
+
// Deep equality check to match behavior of solid-store 0.7.0's reconcile()
|
|
12
|
+
function deepEqual(a: any, b: any): boolean {
|
|
13
|
+
if (Object.is(a, b)) return true
|
|
14
|
+
|
|
15
|
+
if (
|
|
16
|
+
typeof a !== 'object' ||
|
|
17
|
+
a === null ||
|
|
18
|
+
typeof b !== 'object' ||
|
|
19
|
+
b === null
|
|
20
|
+
) {
|
|
21
|
+
return false
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const keysA = Object.keys(a)
|
|
25
|
+
const keysB = Object.keys(b)
|
|
26
|
+
|
|
27
|
+
if (keysA.length !== keysB.length) return false
|
|
28
|
+
|
|
29
|
+
for (const key of keysA) {
|
|
30
|
+
if (!Object.prototype.hasOwnProperty.call(b, key)) return false
|
|
31
|
+
if (!deepEqual(a[key], b[key])) return false
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return true
|
|
35
|
+
}
|
|
36
|
+
|
|
10
37
|
export type UseRouterStateOptions<TRouter extends AnyRouter, TSelected> = {
|
|
11
38
|
router?: TRouter
|
|
12
39
|
select?: (state: RouterState<TRouter['routeTree']>) => TSelected
|
|
@@ -28,9 +55,18 @@ export function useRouterState<
|
|
|
28
55
|
})
|
|
29
56
|
const router = opts?.router || contextRouter
|
|
30
57
|
|
|
31
|
-
return useStore(
|
|
32
|
-
|
|
58
|
+
return useStore(
|
|
59
|
+
router.__store,
|
|
60
|
+
(state) => {
|
|
61
|
+
if (opts?.select) return opts.select(state)
|
|
33
62
|
|
|
34
|
-
|
|
35
|
-
|
|
63
|
+
return state
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
// Use deep equality to match behavior of solid-store 0.7.0 which used
|
|
67
|
+
// reconcile(). This ensures updates work correctly when selectors
|
|
68
|
+
// return new object references but with the same values.
|
|
69
|
+
equal: deepEqual,
|
|
70
|
+
},
|
|
71
|
+
) as Accessor<UseRouterStateResult<TRouter, TSelected>>
|
|
36
72
|
}
|