crelte 0.3.1 → 0.4.0

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.
Files changed (63) hide show
  1. package/dist/Crelte.d.ts.map +1 -1
  2. package/dist/CrelteRequest.d.ts.map +1 -1
  3. package/dist/blocks/Blocks.d.ts.map +1 -1
  4. package/dist/blocks/Blocks.svelte.d.ts.map +1 -1
  5. package/dist/blocks/index.d.ts.map +1 -1
  6. package/dist/cookies/ClientCookies.d.ts.map +1 -1
  7. package/dist/cookies/ServerCookies.d.ts.map +1 -1
  8. package/dist/cookies/index.d.ts.map +1 -1
  9. package/dist/cookies/internal.d.ts.map +1 -1
  10. package/dist/cookies/utils.d.ts.map +1 -1
  11. package/dist/entry/EntryRouter.d.ts +30 -0
  12. package/dist/entry/EntryRouter.d.ts.map +1 -0
  13. package/dist/entry/EntryRouter.js +45 -0
  14. package/dist/entry/index.d.ts +32 -0
  15. package/dist/entry/index.d.ts.map +1 -0
  16. package/dist/entry/index.js +31 -0
  17. package/dist/graphql/GraphQl.d.ts.map +1 -1
  18. package/dist/graphql/gql.test.d.ts.map +1 -1
  19. package/dist/graphql/index.d.ts.map +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/init/client.d.ts +1 -1
  23. package/dist/init/client.d.ts.map +1 -1
  24. package/dist/init/client.js +4 -3
  25. package/dist/init/server.d.ts +3 -3
  26. package/dist/init/server.d.ts.map +1 -1
  27. package/dist/init/server.js +6 -46
  28. package/dist/init/shared.d.ts +3 -1
  29. package/dist/init/shared.d.ts.map +1 -1
  30. package/dist/init/shared.js +47 -26
  31. package/dist/loadData/Globals.d.ts.map +1 -1
  32. package/dist/loadData/index.d.ts.map +1 -1
  33. package/dist/plugins/Events.d.ts.map +1 -1
  34. package/dist/plugins/Plugins.d.ts.map +1 -1
  35. package/dist/plugins/index.d.ts.map +1 -1
  36. package/dist/routing/History.d.ts.map +1 -1
  37. package/dist/routing/InnerRouter.d.ts.map +1 -1
  38. package/dist/routing/PageLoader.d.ts.map +1 -1
  39. package/dist/routing/Request.d.ts.map +1 -1
  40. package/dist/routing/Route.d.ts +11 -0
  41. package/dist/routing/Route.d.ts.map +1 -1
  42. package/dist/routing/Route.js +13 -0
  43. package/dist/routing/Router.d.ts +47 -10
  44. package/dist/routing/Router.d.ts.map +1 -1
  45. package/dist/routing/Router.js +74 -17
  46. package/dist/routing/Site.d.ts.map +1 -1
  47. package/dist/routing/index.d.ts +2 -2
  48. package/dist/routing/index.d.ts.map +1 -1
  49. package/dist/routing/utils.d.ts.map +1 -1
  50. package/dist/ssr/SsrCache.d.ts.map +1 -1
  51. package/dist/ssr/SsrComponents.d.ts.map +1 -1
  52. package/dist/ssr/index.d.ts.map +1 -1
  53. package/dist/utils.d.ts.map +1 -1
  54. package/package.json +9 -4
  55. package/src/entry/EntryRouter.ts +71 -0
  56. package/src/entry/index.ts +48 -0
  57. package/src/index.ts +2 -0
  58. package/src/init/client.ts +10 -3
  59. package/src/init/server.ts +15 -59
  60. package/src/init/shared.ts +78 -28
  61. package/src/routing/Route.ts +14 -0
  62. package/src/routing/Router.ts +102 -20
  63. package/src/routing/index.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../../../src/routing/History.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,WAAW,OAAO;IAC/B,OAAO,IAAI,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,IAAI,IAAI,CAAC;CACb;AAED,qBAAa,aAAc,YAAW,OAAO;IAC5C,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIxB,IAAI,IAAI,IAAI;CAGZ;AAED,qBAAa,aAAc,YAAW,OAAO;IAC5C,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;;IAQpB,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAKxB,IAAI,IAAI,IAAI;CAGZ"}
1
+ {"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../src/routing/History.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,WAAW,OAAO;IAC/B,OAAO,IAAI,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,IAAI,IAAI,CAAC;CACb;AAED,qBAAa,aAAc,YAAW,OAAO;IAC5C,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAIxB,IAAI,IAAI,IAAI;CAGZ;AAED,qBAAa,aAAc,YAAW,OAAO;IAC5C,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;;IAQpB,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAM3C,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvC,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAKxB,IAAI,IAAI,IAAI;CAGZ"}
@@ -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;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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageLoader.d.ts","sourceRoot":"","sources":["../../../../src/routing/PageLoader.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE7E,MAAM,MAAM,WAAW,GAAG;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI;IACnC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,cAAc,CAAS;IAE/B,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjE,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;gBACS,OAAO,EAAE,iBAAiB;IAWtC;;OAEG;IACH,OAAO;IAKD,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAiC7B,OAAO,CAAC,GAAG,EAAE,OAAO;CAc1B"}
1
+ {"version":3,"file":"PageLoader.d.ts","sourceRoot":"","sources":["../../src/routing/PageLoader.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE7E,MAAM,MAAM,WAAW,GAAG;IACzB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI;IACnC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,cAAc,CAAS;IAE/B,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACjE,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;gBACS,OAAO,EAAE,iBAAiB;IAWtC;;OAEG;IACH,OAAO;IAKD,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;IAiC7B,OAAO,CAAC,GAAG,EAAE,OAAO;CAc1B"}
@@ -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;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
+ {"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"}
@@ -139,6 +139,17 @@ export default class Route {
139
139
  * ```
140
140
  */
141
141
  get hash(): string;
142
+ /**
143
+ * Set the hash of the route
144
+ *
145
+ * ## Example
146
+ * ```
147
+ * const route = new Route('https://example.com/foo/bar/', null);
148
+ * route.hash = '#hash';
149
+ * console.log(route.url.href); // 'https://example.com/foo/bar/#hash'
150
+ * ```
151
+ */
152
+ set hash(hash: string);
142
153
  /**
143
154
  * Checks if there are previous routes which would allow it to go back
144
155
  */
@@ -1 +1 @@
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
+ {"version":3,"file":"Route.d.ts","sourceRoot":"","sources":["../../src/routing/Route.ts"],"names":[],"mappings":"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"}
@@ -139,6 +139,19 @@ export default class Route {
139
139
  get hash() {
140
140
  return this.url.hash;
141
141
  }
142
+ /**
143
+ * Set the hash of the route
144
+ *
145
+ * ## Example
146
+ * ```
147
+ * const route = new Route('https://example.com/foo/bar/', null);
148
+ * route.hash = '#hash';
149
+ * console.log(route.url.href); // 'https://example.com/foo/bar/#hash'
150
+ * ```
151
+ */
152
+ set hash(hash) {
153
+ this.url.hash = hash;
154
+ }
142
155
  /**
143
156
  * Checks if there are previous routes which would allow it to go back
144
157
  */
@@ -7,6 +7,17 @@ export type RouterOptions = {
7
7
  preloadOnMouseOver?: boolean;
8
8
  debugTiming?: boolean;
9
9
  };
10
+ /**
11
+ * Allows to easely modify a Request
12
+ *
13
+ * If you return `false` the request will be aborted
14
+ *
15
+ * ## Example
16
+ * ```
17
+ * router.replace(req => (req.hash = ''));
18
+ * ```
19
+ */
20
+ export type UpdateRequest = (req: Request) => boolean | null | undefined | void;
10
21
  /**
11
22
  * internal only
12
23
  */
@@ -106,7 +117,7 @@ export default class Router {
106
117
  * // the following page will be opened https://example.com/de/foo/bar
107
118
  * ```
108
119
  */
109
- open(target: string | URL | Route | Request, opts?: RequestOptions): void;
120
+ open(target: string | URL | Route | Request | UpdateRequest, opts?: RequestOptions): void;
110
121
  /**
111
122
  * This pushes the new route without triggering a new pageload
112
123
  *
@@ -118,7 +129,17 @@ export default class Router {
118
129
  * And will clear the scrollY value if you not provide a new one via the `opts`
119
130
  * This will disableLoadData by default if you not provide an override via the `opts`
120
131
  *
121
- * ## Example
132
+ * ## Example using the update function
133
+ * ```
134
+ * import { getRouter } from 'crelte';
135
+ *
136
+ * const router = getRouter();
137
+ *
138
+ * const page = 1;
139
+ * router.push(req => req.setSearchParam('page', page || null));
140
+ * ```
141
+ *
142
+ * ## Example using the route object
122
143
  * ```
123
144
  * import { getRouter } from 'crelte';
124
145
  *
@@ -130,22 +151,32 @@ export default class Router {
130
151
  * router.push(route);
131
152
  * ```
132
153
  */
133
- push(route: Route | Request, opts?: RequestOptions): void;
154
+ push(route: Route | Request | UpdateRequest, opts?: RequestOptions): void;
134
155
  /**
135
156
  * @deprecated use push instead
136
157
  */
137
158
  pushState(route: Route | Request): void;
138
159
  /**
139
- * This replaces the state of the route without triggering an event
160
+ * This replaces the state of the route without triggering a new pageload
140
161
  *
141
162
  * You can use this when using some filters for example a search filter
142
163
  *
143
164
  * ## Note
144
165
  * This will always set the origin to 'replace'
145
- * And will clear the scrollY value if you not provide a new one via the `opts`
146
- * This will disableLoadData by default if you not provide an override via the `opts`
166
+ * And will clear the scrollY value if you don't provide a new one via the `opts`
167
+ * This will disableLoadData by default if you don't provide an override via the `opts`
147
168
  *
148
- * ## Example
169
+ * ## Example using the update function
170
+ * ```
171
+ * import { getRouter } from 'crelte';
172
+ *
173
+ * const router = getRouter();
174
+ *
175
+ * const search = 'foo';
176
+ * router.replace(req => req.setSearchParam('search', search));
177
+ * ```
178
+ *
179
+ * ## Example using the route object
149
180
  * ```
150
181
  * import { getRouter } from 'crelte';
151
182
  *
@@ -153,11 +184,11 @@ export default class Router {
153
184
  *
154
185
  * const search = 'foo';
155
186
  * const route = router.route.get();
156
- * route.setSearchParam('search', search ? search : null);
157
- * router.replaceState(route);
187
+ * route.setSearchParam('search', search);
188
+ * router.replace(route);
158
189
  * ```
159
190
  */
160
- replace(route: Route | Request, opts?: RequestOptions): void;
191
+ replace(route: Route | Request | UpdateRequest, opts?: RequestOptions): void;
161
192
  /**
162
193
  * @deprecated use replace instead
163
194
  */
@@ -209,6 +240,12 @@ export default class Router {
209
240
  private _onLoaded;
210
241
  private _onNothingLoaded;
211
242
  private _onProgress;
243
+ /**
244
+ * Transforms a target to a request
245
+ *
246
+ * returns null if the request was canceled by the update request
247
+ */
248
+ private targetOrUpdateToRequest;
212
249
  }
213
250
  export {};
214
251
  //# sourceMappingURL=Router.d.ts.map
@@ -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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"}
@@ -54,6 +54,8 @@ export default class Router {
54
54
  this._loading = new Writable(false);
55
55
  this._loadingProgress = new Writable(0);
56
56
  this._onRequest = new Listeners();
57
+ // these functions are exposed to the init "module"
58
+ // but should not be used by anybody else
57
59
  this._internal = {
58
60
  onLoaded: () => { },
59
61
  onNothingLoaded: () => { },
@@ -130,10 +132,11 @@ export default class Router {
130
132
  * ```
131
133
  */
132
134
  open(target, opts = {}) {
133
- const req = this.inner.targetToRequest(target, {
134
- ...opts,
135
+ const req = this.targetOrUpdateToRequest(target, opts, {
135
136
  origin: 'manual',
136
137
  });
138
+ if (!req)
139
+ return;
137
140
  this.inner.open(req);
138
141
  }
139
142
  /**
@@ -147,7 +150,17 @@ export default class Router {
147
150
  * And will clear the scrollY value if you not provide a new one via the `opts`
148
151
  * This will disableLoadData by default if you not provide an override via the `opts`
149
152
  *
150
- * ## Example
153
+ * ## Example using the update function
154
+ * ```
155
+ * import { getRouter } from 'crelte';
156
+ *
157
+ * const router = getRouter();
158
+ *
159
+ * const page = 1;
160
+ * router.push(req => req.setSearchParam('page', page || null));
161
+ * ```
162
+ *
163
+ * ## Example using the route object
151
164
  * ```
152
165
  * import { getRouter } from 'crelte';
153
166
  *
@@ -160,14 +173,15 @@ export default class Router {
160
173
  * ```
161
174
  */
162
175
  push(route, opts = {}) {
163
- // cancel previous request
164
- this.pageLoader.discard();
165
- const req = this.inner.targetToRequest(route, {
166
- ...opts,
176
+ // theoretically string and URL also work but we might
177
+ // change that in the future
178
+ const req = this.targetOrUpdateToRequest(route, opts, {
167
179
  origin: 'push',
168
180
  scrollY: opts.scrollY ?? undefined,
169
181
  disableLoadData: opts.disableLoadData ?? true,
170
182
  });
183
+ if (!req)
184
+ return;
171
185
  this.inner.push(req);
172
186
  }
173
187
  /**
@@ -178,16 +192,26 @@ export default class Router {
178
192
  this.push(route);
179
193
  }
180
194
  /**
181
- * This replaces the state of the route without triggering an event
195
+ * This replaces the state of the route without triggering a new pageload
182
196
  *
183
197
  * You can use this when using some filters for example a search filter
184
198
  *
185
199
  * ## Note
186
200
  * This will always set the origin to 'replace'
187
- * And will clear the scrollY value if you not provide a new one via the `opts`
188
- * This will disableLoadData by default if you not provide an override via the `opts`
201
+ * And will clear the scrollY value if you don't provide a new one via the `opts`
202
+ * This will disableLoadData by default if you don't provide an override via the `opts`
189
203
  *
190
- * ## Example
204
+ * ## Example using the update function
205
+ * ```
206
+ * import { getRouter } from 'crelte';
207
+ *
208
+ * const router = getRouter();
209
+ *
210
+ * const search = 'foo';
211
+ * router.replace(req => req.setSearchParam('search', search));
212
+ * ```
213
+ *
214
+ * ## Example using the route object
191
215
  * ```
192
216
  * import { getRouter } from 'crelte';
193
217
  *
@@ -195,18 +219,20 @@ export default class Router {
195
219
  *
196
220
  * const search = 'foo';
197
221
  * const route = router.route.get();
198
- * route.setSearchParam('search', search ? search : null);
199
- * router.replaceState(route);
222
+ * route.setSearchParam('search', search);
223
+ * router.replace(route);
200
224
  * ```
201
225
  */
202
226
  replace(route, opts = {}) {
203
- // cancel previous request
204
- this.pageLoader.discard();
205
- const req = this.inner.targetToRequest(route, {
227
+ // theoretically string and URL also work but we might
228
+ // change that in the future
229
+ const req = this.targetOrUpdateToRequest(route, opts, {
206
230
  origin: 'replace',
207
231
  scrollY: opts.scrollY ?? undefined,
208
232
  disableLoadData: opts.disableLoadData ?? true,
209
233
  });
234
+ if (!req)
235
+ return;
210
236
  this.inner.replace(req);
211
237
  }
212
238
  /**
@@ -325,6 +351,7 @@ export default class Router {
325
351
  }
326
352
  return resp;
327
353
  }
354
+ // gets called by the InnerRouter when a new route is requested
328
355
  _onRoute(req, changeHistory) {
329
356
  this.destroyRequest();
330
357
  this._request = req;
@@ -338,6 +365,7 @@ export default class Router {
338
365
  this.pageLoader.load(req, { changeHistory });
339
366
  }
340
367
  else {
368
+ this.pageLoader.discard();
341
369
  this._onNothingLoaded(req, { changeHistory });
342
370
  }
343
371
  }
@@ -350,12 +378,13 @@ export default class Router {
350
378
  _onPreload(req) {
351
379
  this.pageLoader.preload(req);
352
380
  }
381
+ // gets called by the pageLoader when teh loadData completes
353
382
  async _onLoaded(resp, req, more) {
354
383
  // check if the render was cancelled
355
384
  if (await req._renderBarrier.ready())
356
385
  return;
357
386
  // when the data is loaded let's update the route of the inner
358
- // this is will only happen if no other route has been requested
387
+ // this will only happen if no other route has been requested
359
388
  // in the meantime
360
389
  more.changeHistory();
361
390
  const route = req.toRoute();
@@ -365,6 +394,7 @@ export default class Router {
365
394
  return resp.data;
366
395
  });
367
396
  }
397
+ // this gets called if loadData is not called
368
398
  async _onNothingLoaded(req, more) {
369
399
  // check if the render was cancelled
370
400
  if (await req._renderBarrier.ready())
@@ -380,10 +410,37 @@ export default class Router {
380
410
  this.setNewRoute(route);
381
411
  });
382
412
  }
413
+ // this is called by the pageLoader if we get a progress update
383
414
  _onProgress(loading, progress) {
384
415
  if (this._loading.get() !== loading)
385
416
  this._loading.set(loading);
386
417
  if (typeof progress === 'number')
387
418
  this._loadingProgress.set(progress);
388
419
  }
420
+ /**
421
+ * Transforms a target to a request
422
+ *
423
+ * returns null if the request was canceled by the update request
424
+ */
425
+ targetOrUpdateToRequest(target, opts = {}, forcedOpts = {}) {
426
+ // we have an update request
427
+ if (typeof target === 'function') {
428
+ const route = this.route.get();
429
+ if (!route) {
430
+ throw new Error('route to update missing in first loadData call');
431
+ }
432
+ // first get a req
433
+ const req = this.inner.targetToRequest(route, opts);
434
+ // check if the request was canceled by the update request
435
+ if (target(req) === false)
436
+ return null;
437
+ // now we add the forcedOpts
438
+ req._updateOpts(forcedOpts);
439
+ return req;
440
+ }
441
+ return this.inner.targetToRequest(target, {
442
+ ...opts,
443
+ ...forcedOpts,
444
+ });
445
+ }
389
446
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Site.d.ts","sourceRoot":"","sources":["../../../../src/routing/Site.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,IAAI;IACxB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;gBAEL,GAAG,EAAE,eAAe;IAShC;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,CAEhB;CACD"}
1
+ {"version":3,"file":"Site.d.ts","sourceRoot":"","sources":["../../src/routing/Site.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,IAAI;IACxB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;gBAEL,GAAG,EAAE,eAAe;IAShC;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,CAEhB;CACD"}
@@ -1,6 +1,6 @@
1
- import Router from './Router.js';
1
+ import Router, { type UpdateRequest } from './Router.js';
2
2
  import Route, { type RouteOptions } from './Route.js';
3
3
  import Request, { type RequestOptions, type DelayRender } from './Request.js';
4
4
  import Site from './Site.js';
5
- export { Router, Route, RouteOptions, Site, Request, DelayRender, RequestOptions, };
5
+ export { Router, UpdateRequest, Route, RouteOptions, Site, Request, DelayRender, RequestOptions, };
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/routing/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,OAAO,EAAE,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACN,MAAM,EACN,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,WAAW,EACX,cAAc,GACd,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,OAAO,EAAE,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACN,MAAM,EACN,aAAa,EACb,KAAK,EACL,YAAY,EACZ,IAAI,EACJ,OAAO,EACP,WAAW,EACX,cAAc,GACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/routing/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,UAEvC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/routing/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,UAEvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SsrCache.d.ts","sourceRoot":"","sources":["../../../../src/ssr/SsrCache.ts"],"names":[],"mappings":"AAAA,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,mBAoBtC;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC5B,OAAO,CAAC,KAAK,CAAsB;;IAYnC;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAO/C;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAI9B,cAAc;IACd,KAAK;IAIL,OAAO,CAAC,YAAY;IAIpB,cAAc;IACd,aAAa,IAAI,MAAM;CAGvB"}
1
+ {"version":3,"file":"SsrCache.d.ts","sourceRoot":"","sources":["../../src/ssr/SsrCache.ts"],"names":[],"mappings":"AAAA,wBAAsB,OAAO,CAAC,IAAI,EAAE,GAAG,mBAoBtC;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC5B,OAAO,CAAC,KAAK,CAAsB;;IAYnC;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAO/C;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAI7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAI9B,cAAc;IACd,KAAK;IAIL,OAAO,CAAC,YAAY;IAIpB,cAAc;IACd,aAAa,IAAI,MAAM;CAGvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SsrComponents.d.ts","sourceRoot":"","sources":["../../../../src/ssr/SsrComponents.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,OAAO,CAAC,OAAO,CAAc;;IAO7B,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAOlC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAkB5C"}
1
+ {"version":3,"file":"SsrComponents.d.ts","sourceRoot":"","sources":["../../src/ssr/SsrComponents.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,OAAO,CAAC,OAAO,CAAc;;IAO7B,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAOlC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAkB5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ssr/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC"}
@@ -1 +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"}
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crelte",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "author": "Crelte <support@crelte.com>",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -44,6 +44,10 @@
44
44
  "types": "./dist/routing/index.d.ts",
45
45
  "default": "./dist/routing/index.js"
46
46
  },
47
+ "./entry": {
48
+ "types": "./dist/entry/index.d.ts",
49
+ "default": "./dist/entry/index.js"
50
+ },
47
51
  "./ssr": {
48
52
  "types": "./dist/ssr/index.d.ts",
49
53
  "default": "./dist/ssr/index.js"
@@ -71,14 +75,15 @@
71
75
  },
72
76
  "dependencies": {
73
77
  "crelte-std": "^0.1.1",
74
- "svelte": "^4.2.12"
78
+ "svelte": "^4.2.12",
79
+ "trouter": "^4.0.0"
75
80
  },
76
81
  "devDependencies": {
77
82
  "@sveltejs/package": "^2.3.1",
78
83
  "@sveltejs/vite-plugin-svelte": "^3.0.0",
79
84
  "svelte-check": "^4.1.4",
80
85
  "typescript-svelte-plugin": "^0.3.45",
81
- "vitest": "^2.0.0",
82
- "vite": "^5.0"
86
+ "vite": "^5.0",
87
+ "vitest": "^2.0.0"
83
88
  }
84
89
  }
@@ -0,0 +1,71 @@
1
+ import { Pattern, Trouter } from 'trouter';
2
+ import { Crelte, CrelteRequest, Entry, QueryOptions } from '../index.js';
3
+ import { CrelteEntryRequest, EntryRequest } from './index.js';
4
+ import { GraphQlQuery } from '../graphql/GraphQl.js';
5
+
6
+ export type EntryRouteHandler = (
7
+ cr: CrelteEntryRequest,
8
+ ) => Promise<Entry | null | undefined> | Entry | null | undefined | void;
9
+
10
+ export type EntryRoutes = (router: EntryRouter) => Promise<void> | void;
11
+
12
+ export default class EntryRouter {
13
+ private _crelte: Crelte;
14
+ private inner: Trouter<EntryRouteHandler>;
15
+
16
+ constructor(crelte: Crelte) {
17
+ this._crelte = crelte;
18
+ this.inner = new Trouter();
19
+ }
20
+
21
+ add(pattern: Pattern, ...handlers: EntryRouteHandler[]): this {
22
+ this.inner.add('GET', pattern, ...handlers);
23
+ return this;
24
+ }
25
+
26
+ /**
27
+ * returns an env variable from the craft/.env file.
28
+ */
29
+ getEnv(name: 'ENDPOINT_URL'): string;
30
+ getEnv(name: 'CRAFT_WEB_URL'): string;
31
+ getEnv(name: string): string | null;
32
+ getEnv(name: string): string | null {
33
+ return this._crelte.getEnv(name);
34
+ }
35
+
36
+ /**
37
+ * Run a GraphQl Query
38
+ *
39
+ * @param query the default export from a graphql file or the gql`query {}`
40
+ * function
41
+ * @param variables variables that should be passed to the
42
+ * graphql query
43
+ */
44
+ async query(
45
+ query: GraphQlQuery,
46
+ variables: Record<string, unknown> = {},
47
+ opts: QueryOptions = {},
48
+ ): Promise<unknown> {
49
+ // this function is added as convenience
50
+ return this._crelte.graphQl.query(query, variables, opts);
51
+ }
52
+
53
+ /** @hidden */
54
+ async _handle(cr: CrelteRequest): Promise<Entry | null> {
55
+ const { params, handlers } = this.inner.find('GET', cr.req.uri);
56
+
57
+ if (!handlers.length) return null;
58
+
59
+ const er = new EntryRequest(cr.req.url, cr.req.site, {
60
+ params: new Map(Object.entries(params)),
61
+ });
62
+ const cer = new CrelteEntryRequest(cr, er);
63
+
64
+ for (const handler of handlers) {
65
+ const res = await handler(cer);
66
+ if (res) return res;
67
+ }
68
+
69
+ return null;
70
+ }
71
+ }
@@ -0,0 +1,48 @@
1
+ import { Crelte, CrelteRequest } from '../index.js';
2
+ import { Request, RequestOptions, Site } from '../routing/index.js';
3
+ import EntryRouter, { EntryRouteHandler, EntryRoutes } from './EntryRouter.js';
4
+
5
+ export { EntryRouter, type EntryRouteHandler, type EntryRoutes };
6
+
7
+ export type Entry = {
8
+ sectionHandle: string;
9
+ typeHandle: string;
10
+ [key: string]: any;
11
+ };
12
+
13
+ export type EntryRequestOptions = RequestOptions & {
14
+ params?: Map<string, string>;
15
+ };
16
+
17
+ export class EntryRequest extends Request {
18
+ private params: Map<string, string>;
19
+
20
+ constructor(url: string | URL, site: Site, opts: EntryRequestOptions = {}) {
21
+ super(url, site, opts);
22
+
23
+ this.params = opts.params ?? new Map();
24
+ }
25
+
26
+ /**
27
+ * returns the url params from the request
28
+ *
29
+ * @example
30
+ * ```js
31
+ * router.get('/blog/:slug', async (cs, req) => {
32
+ * return Response.json({ slug: cs.getParam('slug') });
33
+ * });
34
+ * ```
35
+ */
36
+ getParam(name: string): string | null {
37
+ return this.params.get(name) ?? null;
38
+ }
39
+ }
40
+
41
+ export class CrelteEntryRequest extends CrelteRequest {
42
+ req: EntryRequest;
43
+
44
+ constructor(inner: Crelte, req: EntryRequest) {
45
+ super(inner, req);
46
+ this.req = req;
47
+ }
48
+ }
package/src/index.ts CHANGED
@@ -15,6 +15,7 @@ import {
15
15
  LoadDataFn,
16
16
  LoadDataObj,
17
17
  } from './loadData/index.js';
18
+ import { Entry } from './entry/index.js';
18
19
 
19
20
  export {
20
21
  Crelte,
@@ -25,6 +26,7 @@ export {
25
26
  type LoadDataFn,
26
27
  type LoadDataObj,
27
28
  type LoadDataArray,
29
+ type Entry,
28
30
  };
29
31
 
30
32
  /**