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 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
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Crelte.d.ts","sourceRoot":"","sources":["../../../src/Crelte.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAI3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAWF,qBAAa,aAAa;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;gBAEL,MAAM,EAAE,MAAM;IAa1B,YAAY,CAAC,QAAQ,EAAE,MAAM;IAQ7B,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE;IAOpC,YAAY,CAAC,OAAO,EAAE,MAAM;IAI5B,KAAK,IAAI,MAAM;CAGf;AACD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,aAAa,GAAG,MAAM;IAa3C;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IACpC,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKnC;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvD;;;;;;;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;IAQnB,cAAc;IACd,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;CAO/B"}
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
  *
@@ -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;;;;;;;;;OASG;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"}
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"}
@@ -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
  *
@@ -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,OAAO,MAAM,sBAAsB,CAAC;AAChD,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;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,GACnB,aAAa,CAEf;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"}
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, preventOnRoute?: boolean): void;
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;IAaV;;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;IAiGN;;;;;;;;;OASG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO;IAuCjB;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,UAAQ;IAM7C;;;;;;;OAOG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,UAAQ;IAsBzC;;;;;;;OAOG;IACH,OAAO,CAAC,GAAG,EAAE,OAAO;IAsBpB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,OAAO;IAW9C,QAAQ,CAAC,GAAG,EAAE,OAAO;CAsErB"}
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
- this.setRoute(req);
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
- this.setRoute(req);
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
- this.push(req, true);
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, preventOnRoute = false) {
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.history.pushState(nReq._toState(), url.pathname + url.search + url.hash);
336
- this.setRoute(req, preventOnRoute);
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.history.replaceState(nReq._toState(), url.pathname + url.search + url.hash);
359
- this.setRoute(req);
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
@@ -8,6 +8,8 @@ export type RequestOptions = {
8
8
  scrollY?: number;
9
9
  index?: number;
10
10
  origin?: RouteOrigin;
11
+ state?: Record<string, any>;
12
+ context?: Record<string, any>;
11
13
  disableScroll?: boolean;
12
14
  disableLoadData?: boolean;
13
15
  statusCode?: number;
@@ -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;AAE7B;;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,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;IASxD;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,IAAI,WAAW;IAI1B;;OAEG;IACH,KAAK;IAUL;;OAEG;IACH,OAAO;IAQP,cAAc;IACd,WAAW,CAAC,IAAI,GAAE,cAAmB;CAOrC;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"}
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"}
@@ -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
  }
@@ -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 undefined
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":"AAAA,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;CACrB,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;;OAEG;gBACS,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,YAAiB;IASlE;;;;;;;;;;;;;;;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;;;;;;;;;;;;OAYG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ1D,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,WAAW,IAAI,OAAO;IAatB;;;;;OAKG;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;IAQL,cAAc;IACd,cAAc,CAAC,KAAK,EAAE,GAAG;IAQzB,cAAc;IACd,QAAQ,IAAI,GAAG;CAQf"}
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"}
@@ -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 undefined
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
- if (typeof value !== 'undefined' && value !== null) {
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
  }
@@ -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 pushState
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.pushState(route);
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":"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"}
1
+ {"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../../src/routing/Router.ts"],"names":[],"mappings":"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"}
@@ -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 pushState
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.pushState(route);
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 route = this.inner.targetToRequest(url);
303
- route.origin = 'init';
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 (!route.siteMatches()) {
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.setRoute(route);
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 (!route.eq(nReq)) {
317
+ if (!req.eq(nReq)) {
321
318
  return {
322
319
  success: true,
323
320
  redirect: true,
@@ -0,0 +1,2 @@
1
+ export declare function objClone(obj: any): any;
2
+ //# sourceMappingURL=utils.d.ts.map
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crelte",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "author": "Crelte <support@crelte.com>",
5
5
  "type": "module",
6
6
  "scripts": {
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
  *
@@ -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
- this.setRoute(req);
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
- this.setRoute(req);
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
- this.push(req, true);
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, preventOnRoute = false) {
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.history.pushState(
394
- nReq._toState(),
395
- url.pathname + url.search + url.hash,
396
- );
397
-
398
- this.setRoute(req, preventOnRoute);
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.history.replaceState(
424
- nReq._toState(),
425
- url.pathname + url.search + url.hash,
426
- );
427
-
428
- this.setRoute(req);
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
  /**
@@ -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
  }
@@ -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 undefined
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
- if (typeof value !== 'undefined' && value !== null) {
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
  }
@@ -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 pushState
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.pushState(route);
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 route = this.inner.targetToRequest(url);
405
- route.origin = 'init';
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 (!route.siteMatches()) {
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.setRoute(route);
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 (!route.eq(nReq)) {
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
+ }