crelte 0.3.0 → 0.3.1
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/Crelte.d.ts +12 -0
- package/dist/Crelte.d.ts.map +1 -1
- package/dist/Crelte.js +12 -0
- package/dist/CrelteRequest.d.ts +0 -4
- package/dist/CrelteRequest.d.ts.map +1 -1
- package/dist/CrelteRequest.js +0 -4
- package/dist/index.d.ts +0 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -6
- package/dist/routing/InnerRouter.d.ts +1 -10
- package/dist/routing/InnerRouter.d.ts.map +1 -1
- package/dist/routing/InnerRouter.js +20 -21
- package/dist/routing/Request.d.ts +2 -0
- package/dist/routing/Request.d.ts.map +1 -1
- package/dist/routing/Request.js +9 -0
- package/dist/routing/Route.d.ts +56 -1
- package/dist/routing/Route.d.ts.map +1 -1
- package/dist/routing/Route.js +85 -2
- package/dist/routing/Router.d.ts +2 -2
- package/dist/routing/Router.d.ts.map +1 -1
- package/dist/routing/Router.js +8 -11
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +8 -0
- package/package.json +1 -1
- package/src/Crelte.ts +15 -0
- package/src/CrelteRequest.ts +0 -4
- package/src/index.ts +0 -11
- package/src/routing/InnerRouter.ts +29 -30
- package/src/routing/Request.ts +11 -0
- package/src/routing/Route.ts +93 -2
- package/src/routing/Router.ts +8 -11
- package/src/utils.ts +10 -0
package/dist/Crelte.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Cookies } from './cookies/index.js';
|
|
2
2
|
import GraphQl, { GraphQlQuery } from './graphql/GraphQl.js';
|
|
3
|
+
import { CrelteRequest } from './index.js';
|
|
3
4
|
import Globals, { Global } from './loadData/Globals.js';
|
|
4
5
|
import Events from './plugins/Events.js';
|
|
5
6
|
import Plugins, { Plugin } from './plugins/Plugins.js';
|
|
7
|
+
import type Route from './routing/Route.js';
|
|
8
|
+
import type Request from './routing/Request.js';
|
|
6
9
|
import Router from './routing/Router.js';
|
|
7
10
|
import { SiteFromGraphQl } from './routing/Site.js';
|
|
8
11
|
import SsrCache from './ssr/SsrCache.js';
|
|
@@ -144,6 +147,15 @@ export default class Crelte {
|
|
|
144
147
|
* `CrelteRequest.getGlobalAsync`
|
|
145
148
|
*/
|
|
146
149
|
getGlobalStore<T = any>(name: string): Global<T> | null;
|
|
150
|
+
/**
|
|
151
|
+
* returns a new CrelteRequest instance either with the current
|
|
152
|
+
* route or a provided one
|
|
153
|
+
*
|
|
154
|
+
* ## Note
|
|
155
|
+
* This is useful if you want to create a stateful crelte
|
|
156
|
+
* to use in loadData context
|
|
157
|
+
*/
|
|
158
|
+
toRequest(req?: Route | Request): CrelteRequest;
|
|
147
159
|
/**
|
|
148
160
|
* Run a GraphQl Query
|
|
149
161
|
*
|
package/dist/Crelte.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Crelte.d.ts","sourceRoot":"","sources":["../../../src/Crelte.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Crelte.d.ts","sourceRoot":"","sources":["../../../src/Crelte.ts"],"names":[],"mappings":"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"}
|
package/dist/Crelte.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ClientCookies from './cookies/ClientCookies.js';
|
|
2
2
|
import ServerCookies from './cookies/ServerCookies.js';
|
|
3
3
|
import GraphQl from './graphql/GraphQl.js';
|
|
4
|
+
import { CrelteRequest } from './index.js';
|
|
4
5
|
import Globals from './loadData/Globals.js';
|
|
5
6
|
import Events from './plugins/Events.js';
|
|
6
7
|
import Plugins from './plugins/Plugins.js';
|
|
@@ -143,6 +144,17 @@ export default class Crelte {
|
|
|
143
144
|
getGlobalStore(name) {
|
|
144
145
|
return this.globals.getStore(name) ?? null;
|
|
145
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* returns a new CrelteRequest instance either with the current
|
|
149
|
+
* route or a provided one
|
|
150
|
+
*
|
|
151
|
+
* ## Note
|
|
152
|
+
* This is useful if you want to create a stateful crelte
|
|
153
|
+
* to use in loadData context
|
|
154
|
+
*/
|
|
155
|
+
toRequest(req) {
|
|
156
|
+
return CrelteRequest.fromCrelte(this, req);
|
|
157
|
+
}
|
|
146
158
|
/**
|
|
147
159
|
* Run a GraphQl Query
|
|
148
160
|
*
|
package/dist/CrelteRequest.d.ts
CHANGED
|
@@ -14,10 +14,6 @@ export default class CrelteRequest extends Crelte {
|
|
|
14
14
|
*
|
|
15
15
|
* If you don't provide a route or request the current route
|
|
16
16
|
* will be used.
|
|
17
|
-
*
|
|
18
|
-
* ## Note
|
|
19
|
-
* If you provide a route it must contain a site or you must
|
|
20
|
-
* provide one,
|
|
21
17
|
*/
|
|
22
18
|
static fromCrelte(inner: Crelte | CrelteRequest, req?: Route | Request): CrelteRequest;
|
|
23
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrelteRequest.d.ts","sourceRoot":"","sources":["../../../src/CrelteRequest.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,KAAK,MAAM,oBAAoB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,MAAM;IAChD;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;gBAED,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAMvC
|
|
1
|
+
{"version":3,"file":"CrelteRequest.d.ts","sourceRoot":"","sources":["../../../src/CrelteRequest.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,KAAK,MAAM,oBAAoB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,MAAM;IAChD;;OAEG;IACH,GAAG,EAAE,OAAO,CAAC;gBAED,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;IAMvC;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAChB,KAAK,EAAE,MAAM,GAAG,aAAa,EAC7B,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,GACnB,aAAa;IAehB;;;OAGG;IACH,IAAI,KAAK,IAAI,OAAO,CAGnB;IAED;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI,IAAI,CAEf;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI1C;;;;;;OAMG;IACG,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAI9D;;;;;;;OAOG;IACG,KAAK,CACV,KAAK,EAAE,YAAY,EACnB,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,IAAI,GAAE,YAAiB,GACrB,OAAO,CAAC,OAAO,CAAC;CAOnB"}
|
package/dist/CrelteRequest.js
CHANGED
|
@@ -14,10 +14,6 @@ export default class CrelteRequest extends Crelte {
|
|
|
14
14
|
*
|
|
15
15
|
* If you don't provide a route or request the current route
|
|
16
16
|
* will be used.
|
|
17
|
-
*
|
|
18
|
-
* ## Note
|
|
19
|
-
* If you provide a route it must contain a site or you must
|
|
20
|
-
* provide one,
|
|
21
17
|
*/
|
|
22
18
|
static fromCrelte(inner, req) {
|
|
23
19
|
if (inner instanceof CrelteRequest && !req)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type Route from './routing/Route.js';
|
|
2
|
-
import type Request from './routing/Request.js';
|
|
3
2
|
import type Router from './routing/Router.js';
|
|
4
3
|
import type SsrCache from './ssr/SsrCache.js';
|
|
5
4
|
import type Site from './routing/Site.js';
|
|
@@ -92,10 +91,6 @@ export declare function getGlobal<T = any>(name: string): Global<T> | null;
|
|
|
92
91
|
* This only works during component initialisation.
|
|
93
92
|
*/
|
|
94
93
|
export declare function getCookies(): Cookies;
|
|
95
|
-
/**
|
|
96
|
-
* A function to make sure you have a CrelteRequest
|
|
97
|
-
*/
|
|
98
|
-
export declare function toCrelteRequest(crelte: Crelte | CrelteRequest, req?: Route | Request): CrelteRequest;
|
|
99
94
|
/**
|
|
100
95
|
* Listen for route changes
|
|
101
96
|
*
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAC9C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,MAAM,EAAE,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACN,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACN,MAAM,EACN,aAAa,EACb,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,GAClB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAK1C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAKxC;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;AACrD,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC;AACtD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAKpD;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAErD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,QAOjE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,IAAI,QAOxD"}
|
package/dist/index.js
CHANGED
|
@@ -101,12 +101,6 @@ export function getGlobal(name) {
|
|
|
101
101
|
export function getCookies() {
|
|
102
102
|
return getCrelte().cookies;
|
|
103
103
|
}
|
|
104
|
-
/**
|
|
105
|
-
* A function to make sure you have a CrelteRequest
|
|
106
|
-
*/
|
|
107
|
-
export function toCrelteRequest(crelte, req) {
|
|
108
|
-
return CrelteRequest.fromCrelte(crelte, req);
|
|
109
|
-
}
|
|
110
104
|
/**
|
|
111
105
|
* Listen for route changes
|
|
112
106
|
*
|
|
@@ -82,15 +82,6 @@ export default class InnerRouter {
|
|
|
82
82
|
* `push` and `replace` will cause this function to throw an error
|
|
83
83
|
*/
|
|
84
84
|
open(req: Request): void;
|
|
85
|
-
/**
|
|
86
|
-
* Sets a route
|
|
87
|
-
*
|
|
88
|
-
* Will trigger an onRoute event but will not store any scroll progress
|
|
89
|
-
* or modify the history
|
|
90
|
-
*
|
|
91
|
-
* @param req
|
|
92
|
-
*/
|
|
93
|
-
setRoute(req: Request, preventOnRoute?: boolean): void;
|
|
94
85
|
/**
|
|
95
86
|
* This pushes a new route to the history
|
|
96
87
|
*
|
|
@@ -99,7 +90,7 @@ export default class InnerRouter {
|
|
|
99
90
|
* ## Important
|
|
100
91
|
* Make sure the route has the correct origin
|
|
101
92
|
*/
|
|
102
|
-
push(req: Request
|
|
93
|
+
push(req: Request): void;
|
|
103
94
|
/**
|
|
104
95
|
* This replaces the current route
|
|
105
96
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InnerRouter.d.ts","sourceRoot":"","sources":["../../../../src/routing/InnerRouter.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,OAAO,EAAE,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,MAAM,eAAe,GAAG;IAC7B,kBAAkB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;;OAKG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC7D,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEpC,OAAO,CAAC,qBAAqB,CAAa;IAE1C;;;;;OAKG;gBACS,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe;IAkB3D;;OAEG;IACH,UAAU;
|
|
1
|
+
{"version":3,"file":"InnerRouter.d.ts","sourceRoot":"","sources":["../../../../src/routing/InnerRouter.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,OAAO,EAAE,EAAa,cAAc,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,MAAM,eAAe,GAAG;IAC7B,kBAAkB,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd;;;;;OAKG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAC7D,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEpC,OAAO,CAAC,qBAAqB,CAAa;IAE1C;;;;;OAKG;gBACS,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,eAAe;IAkB3D;;OAEG;IACH,UAAU;IAgBV;;OAEG;IACH,UAAU;IAEV;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAsCxD;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKjC;;;;;;OAMG;IACH,eAAe,CACd,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,EACtC,IAAI,GAAE,cAAmB,GACvB,OAAO;IA0BV;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK;IAgCjC,MAAM;IAoGN;;;;;;;;;OASG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO;IA4CjB;;;;;;;OAOG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO;IAuBjB;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO;IAuBpB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO;IAW9C,QAAQ,CAAC,GAAG,EAAE,OAAO;CAsErB"}
|
|
@@ -52,7 +52,10 @@ export default class InnerRouter {
|
|
|
52
52
|
req._fillFromState(window.history.state);
|
|
53
53
|
req.origin = 'init';
|
|
54
54
|
window.history.scrollRestoration = 'manual';
|
|
55
|
-
|
|
55
|
+
// we set it now instead of waiting for the onRoute call
|
|
56
|
+
// because the window.history is already set
|
|
57
|
+
this.route = req.toRoute();
|
|
58
|
+
this.onRoute(req, () => { });
|
|
56
59
|
}
|
|
57
60
|
/**
|
|
58
61
|
* Initializes the router when running on the server.
|
|
@@ -254,7 +257,10 @@ export default class InnerRouter {
|
|
|
254
257
|
const req = this.targetToRequest(window.location.href);
|
|
255
258
|
req._fillFromState(e.state);
|
|
256
259
|
req.origin = 'pop';
|
|
257
|
-
|
|
260
|
+
// we set it now instead of waiting for the onRoute call
|
|
261
|
+
// because the window.history was already modified
|
|
262
|
+
this.route = req.toRoute();
|
|
263
|
+
this.onRoute(req, () => { });
|
|
258
264
|
});
|
|
259
265
|
}
|
|
260
266
|
/**
|
|
@@ -296,22 +302,11 @@ export default class InnerRouter {
|
|
|
296
302
|
}
|
|
297
303
|
req.index = (current?.index ?? 0) + 1;
|
|
298
304
|
this.onRoute(req, () => {
|
|
299
|
-
|
|
305
|
+
const url = req.url;
|
|
306
|
+
this.history.pushState(req._toState(), url.pathname + url.search + url.hash);
|
|
307
|
+
this.route = req.toRoute();
|
|
300
308
|
});
|
|
301
309
|
}
|
|
302
|
-
/**
|
|
303
|
-
* Sets a route
|
|
304
|
-
*
|
|
305
|
-
* Will trigger an onRoute event but will not store any scroll progress
|
|
306
|
-
* or modify the history
|
|
307
|
-
*
|
|
308
|
-
* @param req
|
|
309
|
-
*/
|
|
310
|
-
setRoute(req, preventOnRoute = false) {
|
|
311
|
-
this.route = req.toRoute();
|
|
312
|
-
if (!preventOnRoute)
|
|
313
|
-
this.onRoute(req, () => { });
|
|
314
|
-
}
|
|
315
310
|
/**
|
|
316
311
|
* This pushes a new route to the history
|
|
317
312
|
*
|
|
@@ -320,7 +315,7 @@ export default class InnerRouter {
|
|
|
320
315
|
* ## Important
|
|
321
316
|
* Make sure the route has the correct origin
|
|
322
317
|
*/
|
|
323
|
-
push(req
|
|
318
|
+
push(req) {
|
|
324
319
|
const url = req.url;
|
|
325
320
|
// todo a push should also store the previous scrollY
|
|
326
321
|
let nReq = req;
|
|
@@ -332,8 +327,10 @@ export default class InnerRouter {
|
|
|
332
327
|
nReq = req.clone();
|
|
333
328
|
nReq.scrollY = this.history.scrollY();
|
|
334
329
|
}
|
|
335
|
-
this.
|
|
336
|
-
|
|
330
|
+
this.onRoute(req, () => {
|
|
331
|
+
this.history.pushState(req._toState(), url.pathname + url.search + url.hash);
|
|
332
|
+
this.route = req.toRoute();
|
|
333
|
+
});
|
|
337
334
|
}
|
|
338
335
|
/**
|
|
339
336
|
* This replaces the current route
|
|
@@ -355,8 +352,10 @@ export default class InnerRouter {
|
|
|
355
352
|
nReq = req.clone();
|
|
356
353
|
nReq.scrollY = this.history.scrollY();
|
|
357
354
|
}
|
|
358
|
-
this.
|
|
359
|
-
|
|
355
|
+
this.onRoute(req, () => {
|
|
356
|
+
this.history.replaceState(req._toState(), url.pathname + url.search + url.hash);
|
|
357
|
+
this.route = req.toRoute();
|
|
358
|
+
});
|
|
360
359
|
}
|
|
361
360
|
/**
|
|
362
361
|
* Preload a url
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../../src/routing/Request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../../src/routing/Request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK;IACzC;;;OAGG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,cAAc;IACd,cAAc,EAAE,aAAa,CAAC;IAE9B;;OAEG;gBACS,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,cAAmB;IASpE;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,cAAmB;IAWxD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,IAAI,WAAW;IAI1B;;OAEG;IACH,KAAK;IAYL;;OAEG;IACH,OAAO;IAUP,cAAc;IACd,WAAW,CAAC,IAAI,GAAE,cAAmB;CASrC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,OAAO,CAElD;AAED,cAAM,aAAa;IAClB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;;IAQlB,MAAM,IAAI,OAAO;IAIjB,GAAG,IAAI,WAAW;IAclB,cAAc;IACd,MAAM;IAQN,cAAc;IACd,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;CAGzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACzB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9B;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC"}
|
package/dist/routing/Request.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Barrier } from 'crelte-std/sync';
|
|
2
2
|
import Route from './Route.js';
|
|
3
|
+
import { objClone } from '../utils.js';
|
|
3
4
|
/**
|
|
4
5
|
* A Request is a Route with some extra options
|
|
5
6
|
* you get a Request from the onRequest event or
|
|
@@ -40,6 +41,8 @@ export default class Request extends Route {
|
|
|
40
41
|
scrollY: route.scrollY ?? undefined,
|
|
41
42
|
index: route.index,
|
|
42
43
|
origin: route.origin,
|
|
44
|
+
state: route._state,
|
|
45
|
+
context: route._context,
|
|
43
46
|
...opts,
|
|
44
47
|
});
|
|
45
48
|
}
|
|
@@ -82,6 +85,8 @@ export default class Request extends Route {
|
|
|
82
85
|
scrollY: this.scrollY ?? undefined,
|
|
83
86
|
index: this.index,
|
|
84
87
|
origin: this.origin,
|
|
88
|
+
state: objClone(this._state),
|
|
89
|
+
context: this._context,
|
|
85
90
|
disableScroll: this.disableScroll,
|
|
86
91
|
statusCode: this.statusCode ?? undefined,
|
|
87
92
|
});
|
|
@@ -94,6 +99,8 @@ export default class Request extends Route {
|
|
|
94
99
|
scrollY: this.scrollY ?? undefined,
|
|
95
100
|
index: this.index,
|
|
96
101
|
origin: this.origin,
|
|
102
|
+
state: objClone(this._state),
|
|
103
|
+
context: this._context,
|
|
97
104
|
});
|
|
98
105
|
}
|
|
99
106
|
/** @hidden */
|
|
@@ -101,6 +108,8 @@ export default class Request extends Route {
|
|
|
101
108
|
this.scrollY = opts.scrollY ?? this.scrollY;
|
|
102
109
|
this.index = opts.index ?? this.index;
|
|
103
110
|
this.origin = opts.origin ?? this.origin;
|
|
111
|
+
this._state = opts.state ?? this._state;
|
|
112
|
+
this._context = opts.context ?? this._context;
|
|
104
113
|
this.disableScroll = opts.disableScroll ?? this.disableScroll;
|
|
105
114
|
this.statusCode = opts.statusCode ?? this.statusCode;
|
|
106
115
|
}
|
package/dist/routing/Route.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ export type RouteOptions = {
|
|
|
3
3
|
scrollY?: number;
|
|
4
4
|
index?: number;
|
|
5
5
|
origin?: RouteOrigin;
|
|
6
|
+
state?: Record<string, any>;
|
|
7
|
+
context?: Record<string, any>;
|
|
6
8
|
};
|
|
7
9
|
/**
|
|
8
10
|
* RouteOrigin represents the origin of a route.
|
|
@@ -59,6 +61,23 @@ export default class Route {
|
|
|
59
61
|
* The origin of this route, See [[RouteOrigin]]
|
|
60
62
|
*/
|
|
61
63
|
origin: RouteOrigin;
|
|
64
|
+
/**
|
|
65
|
+
* @hidden
|
|
66
|
+
* State data that can be used to store additional information
|
|
67
|
+
*/
|
|
68
|
+
_state: Record<string, any>;
|
|
69
|
+
/**
|
|
70
|
+
* @hidden
|
|
71
|
+
* Any data that should be passed to onRoute and onRequest handlers
|
|
72
|
+
* or exchanged between loadData's
|
|
73
|
+
* This context is not persistant and should be considered "valid"
|
|
74
|
+
* only for the current request / route
|
|
75
|
+
*
|
|
76
|
+
* ## Note
|
|
77
|
+
* Consider using state instead. This will not be cloned in the clone
|
|
78
|
+
* call so will always be the same object
|
|
79
|
+
*/
|
|
80
|
+
_context: Record<string, any>;
|
|
62
81
|
/**
|
|
63
82
|
* Creates a new Route
|
|
64
83
|
*/
|
|
@@ -135,7 +154,8 @@ export default class Route {
|
|
|
135
154
|
*/
|
|
136
155
|
getSearchParam(key: string): string | null;
|
|
137
156
|
/**
|
|
138
|
-
* Sets the search param or removes it if the value is null or
|
|
157
|
+
* Sets the search param or removes it if the value is null, undefined or an
|
|
158
|
+
* empty string
|
|
139
159
|
*
|
|
140
160
|
* ## Example
|
|
141
161
|
* ```
|
|
@@ -148,6 +168,38 @@ export default class Route {
|
|
|
148
168
|
* ```
|
|
149
169
|
*/
|
|
150
170
|
setSearchParam(key: string, value?: string | number | null): void;
|
|
171
|
+
/**
|
|
172
|
+
* Returns a state value if it exists.
|
|
173
|
+
*/
|
|
174
|
+
getState<T = any>(key: string): T | null;
|
|
175
|
+
/**
|
|
176
|
+
* Sets a state value.
|
|
177
|
+
* If the value is null or undefined, the key will be removed.
|
|
178
|
+
*
|
|
179
|
+
* ## When to use state
|
|
180
|
+
* State is used to store additional information that persists across route changes.
|
|
181
|
+
* The State is only available in the client code since it is stored using window.history.
|
|
182
|
+
*
|
|
183
|
+
* Consider using setSearchParam instead to enable server side rendering.
|
|
184
|
+
*/
|
|
185
|
+
setState<T>(key: string, value: T | null | undefined): void;
|
|
186
|
+
/**
|
|
187
|
+
* Returns a context value if it exists.
|
|
188
|
+
*/
|
|
189
|
+
getContext<T = any>(key: string): T | null;
|
|
190
|
+
/**
|
|
191
|
+
* Sets a context value.
|
|
192
|
+
* If the value is null or undefined, the key will be removed.
|
|
193
|
+
*
|
|
194
|
+
* ## When to use context
|
|
195
|
+
* Context is used to pass data to onRoute and onRequest handlers or exchange data between loadData calls.
|
|
196
|
+
* This context is not persistent and should be considered valid only for the current request/route.
|
|
197
|
+
* The context is not cloned in the clone call and will be the same object.
|
|
198
|
+
*/
|
|
199
|
+
setContext<T>(key: string, value: T | null | undefined): void;
|
|
200
|
+
/**
|
|
201
|
+
* Returns true if the route is in live preview mode
|
|
202
|
+
*/
|
|
151
203
|
inLivePreview(): boolean;
|
|
152
204
|
/**
|
|
153
205
|
* Returns if the site matches the url
|
|
@@ -158,6 +210,9 @@ export default class Route {
|
|
|
158
210
|
*
|
|
159
211
|
* This checks all properties of the url but search params do not have to be
|
|
160
212
|
* in the same order
|
|
213
|
+
*
|
|
214
|
+
* ## Note
|
|
215
|
+
* This does not check the state or context
|
|
161
216
|
*/
|
|
162
217
|
eq(route: Route | null): boolean | null;
|
|
163
218
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../../../src/routing/Route.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../../../src/routing/Route.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GACpB,MAAM,GACN,QAAQ,GACR,OAAO,GACP,KAAK,GACL,SAAS,GACT,MAAM,CAAC;AAEV;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,KAAK;IACzB;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;;;;;;;;OASG;IACH,IAAI,EAAE,IAAI,CAAC;IAEX;;;;;;;;;OASG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,EAAE,WAAW,CAAC;IAEpB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE5B;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9B;;OAEG;gBACS,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,YAAiB;IAWlE;;;;;;;;;;;;;;;OAeG;IACH,IAAI,GAAG,IAAI,MAAM,CAQhB;IAED;;;;;;;;;;;;;;;OAeG;IACH,IAAI,OAAO,IAAI,MAAM,CAIpB;IAED;;;;;;;;;;;OAWG;IACH,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED;;;;;;;;OAQG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;;;;OAQG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI1C;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAa1D;;OAEG;IACH,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAIxC;;;;;;;;;OASG;IACH,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS;IAQpD;;OAEG;IACH,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI1C;;;;;;;;OAQG;IACH,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS;IAOtD;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,WAAW,IAAI,OAAO;IAatB;;;;;;;;OAQG;IACH,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAStB;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAkB5B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI1B;;OAEG;IACH,KAAK;IAUL,cAAc;IACd,cAAc,CAAC,KAAK,EAAE,GAAG;IAYzB,cAAc;IACd,QAAQ,IAAI,GAAG;CASf"}
|
package/dist/routing/Route.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { objClone } from '../utils.js';
|
|
1
2
|
import { trimSlashEnd } from './utils.js';
|
|
2
3
|
/**
|
|
3
4
|
* A Route contains information about the current page for example the url and
|
|
@@ -39,6 +40,23 @@ export default class Route {
|
|
|
39
40
|
* The origin of this route, See [[RouteOrigin]]
|
|
40
41
|
*/
|
|
41
42
|
origin;
|
|
43
|
+
/**
|
|
44
|
+
* @hidden
|
|
45
|
+
* State data that can be used to store additional information
|
|
46
|
+
*/
|
|
47
|
+
_state;
|
|
48
|
+
/**
|
|
49
|
+
* @hidden
|
|
50
|
+
* Any data that should be passed to onRoute and onRequest handlers
|
|
51
|
+
* or exchanged between loadData's
|
|
52
|
+
* This context is not persistant and should be considered "valid"
|
|
53
|
+
* only for the current request / route
|
|
54
|
+
*
|
|
55
|
+
* ## Note
|
|
56
|
+
* Consider using state instead. This will not be cloned in the clone
|
|
57
|
+
* call so will always be the same object
|
|
58
|
+
*/
|
|
59
|
+
_context;
|
|
42
60
|
/**
|
|
43
61
|
* Creates a new Route
|
|
44
62
|
*/
|
|
@@ -48,6 +66,8 @@ export default class Route {
|
|
|
48
66
|
this.scrollY = opts.scrollY ?? null;
|
|
49
67
|
this.index = opts.index ?? 0;
|
|
50
68
|
this.origin = opts.origin ?? 'manual';
|
|
69
|
+
this._state = opts.state ?? {};
|
|
70
|
+
this._context = opts.context ?? {};
|
|
51
71
|
}
|
|
52
72
|
/**
|
|
53
73
|
* Returns the uri of the route
|
|
@@ -138,7 +158,8 @@ export default class Route {
|
|
|
138
158
|
return this.search.get(key);
|
|
139
159
|
}
|
|
140
160
|
/**
|
|
141
|
-
* Sets the search param or removes it if the value is null or
|
|
161
|
+
* Sets the search param or removes it if the value is null, undefined or an
|
|
162
|
+
* empty string
|
|
142
163
|
*
|
|
143
164
|
* ## Example
|
|
144
165
|
* ```
|
|
@@ -151,13 +172,66 @@ export default class Route {
|
|
|
151
172
|
* ```
|
|
152
173
|
*/
|
|
153
174
|
setSearchParam(key, value) {
|
|
154
|
-
|
|
175
|
+
const deleteValue = typeof value === 'undefined' ||
|
|
176
|
+
value === null ||
|
|
177
|
+
(typeof value === 'string' && value === '');
|
|
178
|
+
if (!deleteValue) {
|
|
155
179
|
this.search.set(key, value);
|
|
156
180
|
}
|
|
157
181
|
else {
|
|
158
182
|
this.search.delete(key);
|
|
159
183
|
}
|
|
160
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Returns a state value if it exists.
|
|
187
|
+
*/
|
|
188
|
+
getState(key) {
|
|
189
|
+
return this._state[key] ?? null;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Sets a state value.
|
|
193
|
+
* If the value is null or undefined, the key will be removed.
|
|
194
|
+
*
|
|
195
|
+
* ## When to use state
|
|
196
|
+
* State is used to store additional information that persists across route changes.
|
|
197
|
+
* The State is only available in the client code since it is stored using window.history.
|
|
198
|
+
*
|
|
199
|
+
* Consider using setSearchParam instead to enable server side rendering.
|
|
200
|
+
*/
|
|
201
|
+
setState(key, value) {
|
|
202
|
+
if (typeof value === 'undefined' || value === null) {
|
|
203
|
+
delete this._state[key];
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this._state[key] = value;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Returns a context value if it exists.
|
|
211
|
+
*/
|
|
212
|
+
getContext(key) {
|
|
213
|
+
return this._context[key] ?? null;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Sets a context value.
|
|
217
|
+
* If the value is null or undefined, the key will be removed.
|
|
218
|
+
*
|
|
219
|
+
* ## When to use context
|
|
220
|
+
* Context is used to pass data to onRoute and onRequest handlers or exchange data between loadData calls.
|
|
221
|
+
* This context is not persistent and should be considered valid only for the current request/route.
|
|
222
|
+
* The context is not cloned in the clone call and will be the same object.
|
|
223
|
+
*/
|
|
224
|
+
setContext(key, value) {
|
|
225
|
+
if (typeof value === 'undefined' || value === null) {
|
|
226
|
+
delete this._context[key];
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
this._context[key] = value;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Returns true if the route is in live preview mode
|
|
234
|
+
*/
|
|
161
235
|
inLivePreview() {
|
|
162
236
|
return !!this.search.get('x-craft-live-preview');
|
|
163
237
|
}
|
|
@@ -179,6 +253,9 @@ export default class Route {
|
|
|
179
253
|
*
|
|
180
254
|
* This checks all properties of the url but search params do not have to be
|
|
181
255
|
* in the same order
|
|
256
|
+
*
|
|
257
|
+
* ## Note
|
|
258
|
+
* This does not check the state or context
|
|
182
259
|
*/
|
|
183
260
|
eq(route) {
|
|
184
261
|
return (route &&
|
|
@@ -227,6 +304,8 @@ export default class Route {
|
|
|
227
304
|
scrollY: this.scrollY ?? undefined,
|
|
228
305
|
index: this.index,
|
|
229
306
|
origin: this.origin,
|
|
307
|
+
state: objClone(this._state),
|
|
308
|
+
context: this._context,
|
|
230
309
|
});
|
|
231
310
|
}
|
|
232
311
|
/** @hidden */
|
|
@@ -235,6 +314,9 @@ export default class Route {
|
|
|
235
314
|
this.scrollY = state.route.scrollY;
|
|
236
315
|
if (typeof state?.route?.index === 'number')
|
|
237
316
|
this.index = state.route.index;
|
|
317
|
+
if (typeof state?.state === 'object' && state.state !== null) {
|
|
318
|
+
this._state = state.state;
|
|
319
|
+
}
|
|
238
320
|
}
|
|
239
321
|
/** @hidden */
|
|
240
322
|
_toState() {
|
|
@@ -243,6 +325,7 @@ export default class Route {
|
|
|
243
325
|
scrollY: this.scrollY,
|
|
244
326
|
index: this.index,
|
|
245
327
|
},
|
|
328
|
+
state: this._state,
|
|
246
329
|
};
|
|
247
330
|
}
|
|
248
331
|
}
|
package/dist/routing/Router.d.ts
CHANGED
|
@@ -111,7 +111,7 @@ export default class Router {
|
|
|
111
111
|
* This pushes the new route without triggering a new pageload
|
|
112
112
|
*
|
|
113
113
|
* You can use this when using pagination for example change the route object
|
|
114
|
-
* (search argument) and then call
|
|
114
|
+
* (search argument) and then call push
|
|
115
115
|
*
|
|
116
116
|
* ## Note
|
|
117
117
|
* This will always set the origin to 'push'
|
|
@@ -127,7 +127,7 @@ export default class Router {
|
|
|
127
127
|
* const page = 1;
|
|
128
128
|
* const route = router.route.get();
|
|
129
129
|
* route.setSearchParam('page', page > 0 ? page : null);
|
|
130
|
-
* router.
|
|
130
|
+
* router.push(route);
|
|
131
131
|
* ```
|
|
132
132
|
*/
|
|
133
133
|
push(route: Route | Request, opts?: RequestOptions): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../../src/routing/Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAElD,OAAmB,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAY,MAAM,mBAAmB,CAAC;AAEvD,OAAO,OAAO,EAAE,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAWF;;GAEG;AACH,KAAK,QAAQ,GAAG;IACf,QAAQ,EAAE,CACT,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,OAAO,EAKZ,KAAK,EAAE,MAAM,GAAG,KACZ,IAAI,CAAC;IAIV,eAAe,EAAE,CAChB,GAAG,EAAE,OAAO,EAKZ,KAAK,EAAE,MAAM,IAAI,KACb,IAAI,CAAC;IAEV,MAAM,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAEjC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CACxE,CAAC;AAEF,KAAK,YAAY,GAAG;IACnB,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;CACX,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAyB;IAEvC;;;;;OAKG;IACH,OAAO,CAAC,KAAK,CAAwB;IAGrC,OAAO,CAAC,QAAQ,CAAiB;IAEjC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAoB;IAEpC;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,OAAO,CAAC,UAAU,CAAuB;IAEzC,cAAc;IACd,SAAS,EAAE,QAAQ,CAAC;IAEpB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAAyB;gBAE/B,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,GAAE,aAAkB;IAwC9D;;;;;;;OAOG;IACH,IAAI,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAElC;IAED;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAEhC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,IAAI,EAAE,CAElB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAE/B;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,QAAQ,CAAC,MAAM,CAAC,CAEtC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO,EAAE,IAAI,GAAE,cAAmB;IAQtE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,IAAI,GAAE,cAAmB;
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../../src/routing/Router.ts"],"names":[],"mappings":"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"}
|
package/dist/routing/Router.js
CHANGED
|
@@ -140,7 +140,7 @@ export default class Router {
|
|
|
140
140
|
* This pushes the new route without triggering a new pageload
|
|
141
141
|
*
|
|
142
142
|
* You can use this when using pagination for example change the route object
|
|
143
|
-
* (search argument) and then call
|
|
143
|
+
* (search argument) and then call push
|
|
144
144
|
*
|
|
145
145
|
* ## Note
|
|
146
146
|
* This will always set the origin to 'push'
|
|
@@ -156,7 +156,7 @@ export default class Router {
|
|
|
156
156
|
* const page = 1;
|
|
157
157
|
* const route = router.route.get();
|
|
158
158
|
* route.setSearchParam('page', page > 0 ? page : null);
|
|
159
|
-
* router.
|
|
159
|
+
* router.push(route);
|
|
160
160
|
* ```
|
|
161
161
|
*/
|
|
162
162
|
push(route, opts = {}) {
|
|
@@ -169,8 +169,6 @@ export default class Router {
|
|
|
169
169
|
disableLoadData: opts.disableLoadData ?? true,
|
|
170
170
|
});
|
|
171
171
|
this.inner.push(req);
|
|
172
|
-
this.destroyRequest();
|
|
173
|
-
this.setNewRoute(route);
|
|
174
172
|
}
|
|
175
173
|
/**
|
|
176
174
|
* @deprecated use push instead
|
|
@@ -210,8 +208,6 @@ export default class Router {
|
|
|
210
208
|
disableLoadData: opts.disableLoadData ?? true,
|
|
211
209
|
});
|
|
212
210
|
this.inner.replace(req);
|
|
213
|
-
this.destroyRequest();
|
|
214
|
-
this.setNewRoute(req);
|
|
215
211
|
}
|
|
216
212
|
/**
|
|
217
213
|
* @deprecated use replace instead
|
|
@@ -299,11 +295,11 @@ export default class Router {
|
|
|
299
295
|
});
|
|
300
296
|
};
|
|
301
297
|
});
|
|
302
|
-
const
|
|
303
|
-
|
|
298
|
+
const req = this.inner.targetToRequest(url);
|
|
299
|
+
req.origin = 'init';
|
|
304
300
|
// let's see if the url matches any route and site
|
|
305
301
|
// if not let's redirect to the site which matches the acceptLang
|
|
306
|
-
if (!
|
|
302
|
+
if (!req.siteMatches()) {
|
|
307
303
|
const site = this.inner.siteByAcceptLang(acceptLang);
|
|
308
304
|
return {
|
|
309
305
|
success: true,
|
|
@@ -312,12 +308,13 @@ export default class Router {
|
|
|
312
308
|
props: {},
|
|
313
309
|
};
|
|
314
310
|
}
|
|
315
|
-
this.inner.
|
|
311
|
+
this.inner.route = req.toRoute();
|
|
312
|
+
this.inner.onRoute(req, () => { });
|
|
316
313
|
const resp = await prom;
|
|
317
314
|
const hist = this.inner.history;
|
|
318
315
|
if (hist.url || hist.req) {
|
|
319
316
|
const nReq = this.inner.targetToRequest(hist.req ?? hist.url);
|
|
320
|
-
if (!
|
|
317
|
+
if (!req.eq(nReq)) {
|
|
321
318
|
return {
|
|
322
319
|
success: true,
|
|
323
320
|
redirect: true,
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAMtC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// This are internal utils. Consider adding them to crelte-std instead
|
|
2
|
+
// this tries to do a structuredClone and else just uses JSON
|
|
3
|
+
export function objClone(obj) {
|
|
4
|
+
if (typeof structuredClone === 'function') {
|
|
5
|
+
return structuredClone(obj);
|
|
6
|
+
}
|
|
7
|
+
return JSON.parse(JSON.stringify(obj));
|
|
8
|
+
}
|
package/package.json
CHANGED
package/src/Crelte.ts
CHANGED
|
@@ -2,9 +2,12 @@ import ClientCookies from './cookies/ClientCookies.js';
|
|
|
2
2
|
import { Cookies } from './cookies/index.js';
|
|
3
3
|
import ServerCookies from './cookies/ServerCookies.js';
|
|
4
4
|
import GraphQl, { GraphQlQuery } from './graphql/GraphQl.js';
|
|
5
|
+
import { CrelteRequest } from './index.js';
|
|
5
6
|
import Globals, { Global } from './loadData/Globals.js';
|
|
6
7
|
import Events from './plugins/Events.js';
|
|
7
8
|
import Plugins, { Plugin } from './plugins/Plugins.js';
|
|
9
|
+
import type Route from './routing/Route.js';
|
|
10
|
+
import type Request from './routing/Request.js';
|
|
8
11
|
import Router from './routing/Router.js';
|
|
9
12
|
import { SiteFromGraphQl } from './routing/Site.js';
|
|
10
13
|
import SsrCache from './ssr/SsrCache.js';
|
|
@@ -243,6 +246,18 @@ export default class Crelte {
|
|
|
243
246
|
return this.globals.getStore(name) ?? null;
|
|
244
247
|
}
|
|
245
248
|
|
|
249
|
+
/**
|
|
250
|
+
* returns a new CrelteRequest instance either with the current
|
|
251
|
+
* route or a provided one
|
|
252
|
+
*
|
|
253
|
+
* ## Note
|
|
254
|
+
* This is useful if you want to create a stateful crelte
|
|
255
|
+
* to use in loadData context
|
|
256
|
+
*/
|
|
257
|
+
toRequest(req?: Route | Request): CrelteRequest {
|
|
258
|
+
return CrelteRequest.fromCrelte(this, req);
|
|
259
|
+
}
|
|
260
|
+
|
|
246
261
|
/**
|
|
247
262
|
* Run a GraphQl Query
|
|
248
263
|
*
|
package/src/CrelteRequest.ts
CHANGED
|
@@ -21,10 +21,6 @@ export default class CrelteRequest extends Crelte {
|
|
|
21
21
|
*
|
|
22
22
|
* If you don't provide a route or request the current route
|
|
23
23
|
* will be used.
|
|
24
|
-
*
|
|
25
|
-
* ## Note
|
|
26
|
-
* If you provide a route it must contain a site or you must
|
|
27
|
-
* provide one,
|
|
28
24
|
*/
|
|
29
25
|
static fromCrelte(
|
|
30
26
|
inner: Crelte | CrelteRequest,
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getContext, onDestroy } from 'svelte';
|
|
2
2
|
import type Route from './routing/Route.js';
|
|
3
|
-
import type Request from './routing/Request.js';
|
|
4
3
|
import type Router from './routing/Router.js';
|
|
5
4
|
import type SsrCache from './ssr/SsrCache.js';
|
|
6
5
|
import type Site from './routing/Site.js';
|
|
@@ -149,16 +148,6 @@ export function getCookies(): Cookies {
|
|
|
149
148
|
return getCrelte().cookies;
|
|
150
149
|
}
|
|
151
150
|
|
|
152
|
-
/**
|
|
153
|
-
* A function to make sure you have a CrelteRequest
|
|
154
|
-
*/
|
|
155
|
-
export function toCrelteRequest(
|
|
156
|
-
crelte: Crelte | CrelteRequest,
|
|
157
|
-
req?: Route | Request,
|
|
158
|
-
): CrelteRequest {
|
|
159
|
-
return CrelteRequest.fromCrelte(crelte, req);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
151
|
/**
|
|
163
152
|
* Listen for route changes
|
|
164
153
|
*
|
|
@@ -68,7 +68,10 @@ export default class InnerRouter {
|
|
|
68
68
|
req.origin = 'init';
|
|
69
69
|
window.history.scrollRestoration = 'manual';
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
// we set it now instead of waiting for the onRoute call
|
|
72
|
+
// because the window.history is already set
|
|
73
|
+
this.route = req.toRoute();
|
|
74
|
+
this.onRoute(req, () => {});
|
|
72
75
|
}
|
|
73
76
|
|
|
74
77
|
/**
|
|
@@ -301,7 +304,10 @@ export default class InnerRouter {
|
|
|
301
304
|
req._fillFromState(e.state);
|
|
302
305
|
req.origin = 'pop';
|
|
303
306
|
|
|
304
|
-
|
|
307
|
+
// we set it now instead of waiting for the onRoute call
|
|
308
|
+
// because the window.history was already modified
|
|
309
|
+
this.route = req.toRoute();
|
|
310
|
+
this.onRoute(req, () => {});
|
|
305
311
|
});
|
|
306
312
|
}
|
|
307
313
|
|
|
@@ -350,24 +356,15 @@ export default class InnerRouter {
|
|
|
350
356
|
|
|
351
357
|
req.index = (current?.index ?? 0) + 1;
|
|
352
358
|
this.onRoute(req, () => {
|
|
353
|
-
|
|
359
|
+
const url = req.url;
|
|
360
|
+
this.history.pushState(
|
|
361
|
+
req._toState(),
|
|
362
|
+
url.pathname + url.search + url.hash,
|
|
363
|
+
);
|
|
364
|
+
this.route = req.toRoute();
|
|
354
365
|
});
|
|
355
366
|
}
|
|
356
367
|
|
|
357
|
-
/**
|
|
358
|
-
* Sets a route
|
|
359
|
-
*
|
|
360
|
-
* Will trigger an onRoute event but will not store any scroll progress
|
|
361
|
-
* or modify the history
|
|
362
|
-
*
|
|
363
|
-
* @param req
|
|
364
|
-
*/
|
|
365
|
-
setRoute(req: Request, preventOnRoute = false) {
|
|
366
|
-
this.route = req.toRoute();
|
|
367
|
-
|
|
368
|
-
if (!preventOnRoute) this.onRoute(req, () => {});
|
|
369
|
-
}
|
|
370
|
-
|
|
371
368
|
/**
|
|
372
369
|
* This pushes a new route to the history
|
|
373
370
|
*
|
|
@@ -376,7 +373,7 @@ export default class InnerRouter {
|
|
|
376
373
|
* ## Important
|
|
377
374
|
* Make sure the route has the correct origin
|
|
378
375
|
*/
|
|
379
|
-
push(req: Request
|
|
376
|
+
push(req: Request) {
|
|
380
377
|
const url = req.url;
|
|
381
378
|
// todo a push should also store the previous scrollY
|
|
382
379
|
|
|
@@ -390,12 +387,13 @@ export default class InnerRouter {
|
|
|
390
387
|
nReq.scrollY = this.history.scrollY();
|
|
391
388
|
}
|
|
392
389
|
|
|
393
|
-
this.
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
390
|
+
this.onRoute(req, () => {
|
|
391
|
+
this.history.pushState(
|
|
392
|
+
req._toState(),
|
|
393
|
+
url.pathname + url.search + url.hash,
|
|
394
|
+
);
|
|
395
|
+
this.route = req.toRoute();
|
|
396
|
+
});
|
|
399
397
|
}
|
|
400
398
|
|
|
401
399
|
/**
|
|
@@ -420,12 +418,13 @@ export default class InnerRouter {
|
|
|
420
418
|
nReq.scrollY = this.history.scrollY();
|
|
421
419
|
}
|
|
422
420
|
|
|
423
|
-
this.
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
421
|
+
this.onRoute(req, () => {
|
|
422
|
+
this.history.replaceState(
|
|
423
|
+
req._toState(),
|
|
424
|
+
url.pathname + url.search + url.hash,
|
|
425
|
+
);
|
|
426
|
+
this.route = req.toRoute();
|
|
427
|
+
});
|
|
429
428
|
}
|
|
430
429
|
|
|
431
430
|
/**
|
package/src/routing/Request.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Barrier } from 'crelte-std/sync';
|
|
2
2
|
import Route, { RouteOrigin } from './Route.js';
|
|
3
3
|
import Site from './Site.js';
|
|
4
|
+
import { objClone } from '../utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Options to create a Request
|
|
@@ -9,6 +10,8 @@ export type RequestOptions = {
|
|
|
9
10
|
scrollY?: number;
|
|
10
11
|
index?: number;
|
|
11
12
|
origin?: RouteOrigin;
|
|
13
|
+
state?: Record<string, any>;
|
|
14
|
+
context?: Record<string, any>;
|
|
12
15
|
disableScroll?: boolean;
|
|
13
16
|
disableLoadData?: boolean;
|
|
14
17
|
statusCode?: number;
|
|
@@ -60,6 +63,8 @@ export default class Request extends Route {
|
|
|
60
63
|
scrollY: route.scrollY ?? undefined,
|
|
61
64
|
index: route.index,
|
|
62
65
|
origin: route.origin,
|
|
66
|
+
state: route._state,
|
|
67
|
+
context: route._context,
|
|
63
68
|
...opts,
|
|
64
69
|
});
|
|
65
70
|
}
|
|
@@ -104,6 +109,8 @@ export default class Request extends Route {
|
|
|
104
109
|
scrollY: this.scrollY ?? undefined,
|
|
105
110
|
index: this.index,
|
|
106
111
|
origin: this.origin,
|
|
112
|
+
state: objClone(this._state),
|
|
113
|
+
context: this._context,
|
|
107
114
|
disableScroll: this.disableScroll,
|
|
108
115
|
statusCode: this.statusCode ?? undefined,
|
|
109
116
|
});
|
|
@@ -117,6 +124,8 @@ export default class Request extends Route {
|
|
|
117
124
|
scrollY: this.scrollY ?? undefined,
|
|
118
125
|
index: this.index,
|
|
119
126
|
origin: this.origin,
|
|
127
|
+
state: objClone(this._state),
|
|
128
|
+
context: this._context,
|
|
120
129
|
});
|
|
121
130
|
}
|
|
122
131
|
|
|
@@ -125,6 +134,8 @@ export default class Request extends Route {
|
|
|
125
134
|
this.scrollY = opts.scrollY ?? this.scrollY;
|
|
126
135
|
this.index = opts.index ?? this.index;
|
|
127
136
|
this.origin = opts.origin ?? this.origin;
|
|
137
|
+
this._state = opts.state ?? this._state;
|
|
138
|
+
this._context = opts.context ?? this._context;
|
|
128
139
|
this.disableScroll = opts.disableScroll ?? this.disableScroll;
|
|
129
140
|
this.statusCode = opts.statusCode ?? this.statusCode;
|
|
130
141
|
}
|
package/src/routing/Route.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { objClone } from '../utils.js';
|
|
1
2
|
import Site from './Site.js';
|
|
2
3
|
import { trimSlashEnd } from './utils.js';
|
|
3
4
|
|
|
@@ -5,6 +6,8 @@ export type RouteOptions = {
|
|
|
5
6
|
scrollY?: number;
|
|
6
7
|
index?: number;
|
|
7
8
|
origin?: RouteOrigin;
|
|
9
|
+
state?: Record<string, any>;
|
|
10
|
+
context?: Record<string, any>;
|
|
8
11
|
};
|
|
9
12
|
|
|
10
13
|
/**
|
|
@@ -74,6 +77,25 @@ export default class Route {
|
|
|
74
77
|
*/
|
|
75
78
|
origin: RouteOrigin;
|
|
76
79
|
|
|
80
|
+
/**
|
|
81
|
+
* @hidden
|
|
82
|
+
* State data that can be used to store additional information
|
|
83
|
+
*/
|
|
84
|
+
_state: Record<string, any>;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @hidden
|
|
88
|
+
* Any data that should be passed to onRoute and onRequest handlers
|
|
89
|
+
* or exchanged between loadData's
|
|
90
|
+
* This context is not persistant and should be considered "valid"
|
|
91
|
+
* only for the current request / route
|
|
92
|
+
*
|
|
93
|
+
* ## Note
|
|
94
|
+
* Consider using state instead. This will not be cloned in the clone
|
|
95
|
+
* call so will always be the same object
|
|
96
|
+
*/
|
|
97
|
+
_context: Record<string, any>;
|
|
98
|
+
|
|
77
99
|
/**
|
|
78
100
|
* Creates a new Route
|
|
79
101
|
*/
|
|
@@ -84,6 +106,8 @@ export default class Route {
|
|
|
84
106
|
this.scrollY = opts.scrollY ?? null;
|
|
85
107
|
this.index = opts.index ?? 0;
|
|
86
108
|
this.origin = opts.origin ?? 'manual';
|
|
109
|
+
this._state = opts.state ?? {};
|
|
110
|
+
this._context = opts.context ?? {};
|
|
87
111
|
}
|
|
88
112
|
|
|
89
113
|
/**
|
|
@@ -184,7 +208,8 @@ export default class Route {
|
|
|
184
208
|
}
|
|
185
209
|
|
|
186
210
|
/**
|
|
187
|
-
* Sets the search param or removes it if the value is null or
|
|
211
|
+
* Sets the search param or removes it if the value is null, undefined or an
|
|
212
|
+
* empty string
|
|
188
213
|
*
|
|
189
214
|
* ## Example
|
|
190
215
|
* ```
|
|
@@ -197,13 +222,69 @@ export default class Route {
|
|
|
197
222
|
* ```
|
|
198
223
|
*/
|
|
199
224
|
setSearchParam(key: string, value?: string | number | null) {
|
|
200
|
-
|
|
225
|
+
const deleteValue =
|
|
226
|
+
typeof value === 'undefined' ||
|
|
227
|
+
value === null ||
|
|
228
|
+
(typeof value === 'string' && value === '');
|
|
229
|
+
|
|
230
|
+
if (!deleteValue) {
|
|
201
231
|
this.search.set(key, value as string);
|
|
202
232
|
} else {
|
|
203
233
|
this.search.delete(key);
|
|
204
234
|
}
|
|
205
235
|
}
|
|
206
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Returns a state value if it exists.
|
|
239
|
+
*/
|
|
240
|
+
getState<T = any>(key: string): T | null {
|
|
241
|
+
return this._state[key] ?? null;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Sets a state value.
|
|
246
|
+
* If the value is null or undefined, the key will be removed.
|
|
247
|
+
*
|
|
248
|
+
* ## When to use state
|
|
249
|
+
* State is used to store additional information that persists across route changes.
|
|
250
|
+
* The State is only available in the client code since it is stored using window.history.
|
|
251
|
+
*
|
|
252
|
+
* Consider using setSearchParam instead to enable server side rendering.
|
|
253
|
+
*/
|
|
254
|
+
setState<T>(key: string, value: T | null | undefined) {
|
|
255
|
+
if (typeof value === 'undefined' || value === null) {
|
|
256
|
+
delete this._state[key];
|
|
257
|
+
} else {
|
|
258
|
+
this._state[key] = value;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Returns a context value if it exists.
|
|
264
|
+
*/
|
|
265
|
+
getContext<T = any>(key: string): T | null {
|
|
266
|
+
return this._context[key] ?? null;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Sets a context value.
|
|
271
|
+
* If the value is null or undefined, the key will be removed.
|
|
272
|
+
*
|
|
273
|
+
* ## When to use context
|
|
274
|
+
* Context is used to pass data to onRoute and onRequest handlers or exchange data between loadData calls.
|
|
275
|
+
* This context is not persistent and should be considered valid only for the current request/route.
|
|
276
|
+
* The context is not cloned in the clone call and will be the same object.
|
|
277
|
+
*/
|
|
278
|
+
setContext<T>(key: string, value: T | null | undefined) {
|
|
279
|
+
if (typeof value === 'undefined' || value === null) {
|
|
280
|
+
delete this._context[key];
|
|
281
|
+
} else {
|
|
282
|
+
this._context[key] = value;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Returns true if the route is in live preview mode
|
|
287
|
+
*/
|
|
207
288
|
inLivePreview(): boolean {
|
|
208
289
|
return !!this.search.get('x-craft-live-preview');
|
|
209
290
|
}
|
|
@@ -229,6 +310,9 @@ export default class Route {
|
|
|
229
310
|
*
|
|
230
311
|
* This checks all properties of the url but search params do not have to be
|
|
231
312
|
* in the same order
|
|
313
|
+
*
|
|
314
|
+
* ## Note
|
|
315
|
+
* This does not check the state or context
|
|
232
316
|
*/
|
|
233
317
|
eq(route: Route | null) {
|
|
234
318
|
return (
|
|
@@ -288,6 +372,8 @@ export default class Route {
|
|
|
288
372
|
scrollY: this.scrollY ?? undefined,
|
|
289
373
|
index: this.index,
|
|
290
374
|
origin: this.origin,
|
|
375
|
+
state: objClone(this._state),
|
|
376
|
+
context: this._context,
|
|
291
377
|
});
|
|
292
378
|
}
|
|
293
379
|
|
|
@@ -298,6 +384,10 @@ export default class Route {
|
|
|
298
384
|
|
|
299
385
|
if (typeof state?.route?.index === 'number')
|
|
300
386
|
this.index = state.route.index;
|
|
387
|
+
|
|
388
|
+
if (typeof state?.state === 'object' && state.state !== null) {
|
|
389
|
+
this._state = state.state;
|
|
390
|
+
}
|
|
301
391
|
}
|
|
302
392
|
|
|
303
393
|
/** @hidden */
|
|
@@ -307,6 +397,7 @@ export default class Route {
|
|
|
307
397
|
scrollY: this.scrollY,
|
|
308
398
|
index: this.index,
|
|
309
399
|
},
|
|
400
|
+
state: this._state,
|
|
310
401
|
};
|
|
311
402
|
}
|
|
312
403
|
}
|
package/src/routing/Router.ts
CHANGED
|
@@ -221,7 +221,7 @@ export default class Router {
|
|
|
221
221
|
* This pushes the new route without triggering a new pageload
|
|
222
222
|
*
|
|
223
223
|
* You can use this when using pagination for example change the route object
|
|
224
|
-
* (search argument) and then call
|
|
224
|
+
* (search argument) and then call push
|
|
225
225
|
*
|
|
226
226
|
* ## Note
|
|
227
227
|
* This will always set the origin to 'push'
|
|
@@ -237,7 +237,7 @@ export default class Router {
|
|
|
237
237
|
* const page = 1;
|
|
238
238
|
* const route = router.route.get();
|
|
239
239
|
* route.setSearchParam('page', page > 0 ? page : null);
|
|
240
|
-
* router.
|
|
240
|
+
* router.push(route);
|
|
241
241
|
* ```
|
|
242
242
|
*/
|
|
243
243
|
push(route: Route | Request, opts: RequestOptions = {}) {
|
|
@@ -250,8 +250,6 @@ export default class Router {
|
|
|
250
250
|
disableLoadData: opts.disableLoadData ?? true,
|
|
251
251
|
});
|
|
252
252
|
this.inner.push(req);
|
|
253
|
-
this.destroyRequest();
|
|
254
|
-
this.setNewRoute(route);
|
|
255
253
|
}
|
|
256
254
|
|
|
257
255
|
/**
|
|
@@ -293,8 +291,6 @@ export default class Router {
|
|
|
293
291
|
disableLoadData: opts.disableLoadData ?? true,
|
|
294
292
|
});
|
|
295
293
|
this.inner.replace(req);
|
|
296
|
-
this.destroyRequest();
|
|
297
|
-
this.setNewRoute(req);
|
|
298
294
|
}
|
|
299
295
|
|
|
300
296
|
/**
|
|
@@ -401,12 +397,12 @@ export default class Router {
|
|
|
401
397
|
};
|
|
402
398
|
});
|
|
403
399
|
|
|
404
|
-
const
|
|
405
|
-
|
|
400
|
+
const req = this.inner.targetToRequest(url);
|
|
401
|
+
req.origin = 'init';
|
|
406
402
|
|
|
407
403
|
// let's see if the url matches any route and site
|
|
408
404
|
// if not let's redirect to the site which matches the acceptLang
|
|
409
|
-
if (!
|
|
405
|
+
if (!req.siteMatches()) {
|
|
410
406
|
const site = this.inner.siteByAcceptLang(acceptLang);
|
|
411
407
|
|
|
412
408
|
return {
|
|
@@ -417,14 +413,15 @@ export default class Router {
|
|
|
417
413
|
};
|
|
418
414
|
}
|
|
419
415
|
|
|
420
|
-
this.inner.
|
|
416
|
+
this.inner.route = req.toRoute();
|
|
417
|
+
this.inner.onRoute(req, () => {});
|
|
421
418
|
|
|
422
419
|
const resp = await prom;
|
|
423
420
|
|
|
424
421
|
const hist = this.inner.history as ServerHistory;
|
|
425
422
|
if (hist.url || hist.req) {
|
|
426
423
|
const nReq = this.inner.targetToRequest(hist.req ?? hist.url!);
|
|
427
|
-
if (!
|
|
424
|
+
if (!req.eq(nReq)) {
|
|
428
425
|
return {
|
|
429
426
|
success: true,
|
|
430
427
|
redirect: true,
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// This are internal utils. Consider adding them to crelte-std instead
|
|
2
|
+
|
|
3
|
+
// this tries to do a structuredClone and else just uses JSON
|
|
4
|
+
export function objClone(obj: any): any {
|
|
5
|
+
if (typeof structuredClone === 'function') {
|
|
6
|
+
return structuredClone(obj);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return JSON.parse(JSON.stringify(obj));
|
|
10
|
+
}
|