@plumile/router 0.1.5

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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/lib/esm/ResourcePage.d.ts +15 -0
  4. package/lib/esm/ResourcePage.d.ts.map +1 -0
  5. package/lib/esm/ResourcePage.js +64 -0
  6. package/lib/esm/builder.d.ts +13 -0
  7. package/lib/esm/builder.d.ts.map +1 -0
  8. package/lib/esm/builder.js +64 -0
  9. package/lib/esm/errors/HttpRedirect.d.ts +6 -0
  10. package/lib/esm/errors/HttpRedirect.d.ts.map +1 -0
  11. package/lib/esm/errors/HttpRedirect.js +11 -0
  12. package/lib/esm/errors/index.d.ts +2 -0
  13. package/lib/esm/errors/index.d.ts.map +1 -0
  14. package/lib/esm/errors/index.js +2 -0
  15. package/lib/esm/history/BrowserHistory.d.ts +16 -0
  16. package/lib/esm/history/BrowserHistory.d.ts.map +1 -0
  17. package/lib/esm/history/BrowserHistory.js +59 -0
  18. package/lib/esm/history/index.d.ts +3 -0
  19. package/lib/esm/history/index.d.ts.map +1 -0
  20. package/lib/esm/history/index.js +2 -0
  21. package/lib/esm/history/types.d.ts +12 -0
  22. package/lib/esm/history/types.d.ts.map +1 -0
  23. package/lib/esm/history/types.js +2 -0
  24. package/lib/esm/index.d.ts +8 -0
  25. package/lib/esm/index.d.ts.map +1 -0
  26. package/lib/esm/index.js +7 -0
  27. package/lib/esm/routing/Link.d.ts +21 -0
  28. package/lib/esm/routing/Link.d.ts.map +1 -0
  29. package/lib/esm/routing/Link.js +99 -0
  30. package/lib/esm/routing/RouteComponent.d.ts +8 -0
  31. package/lib/esm/routing/RouteComponent.d.ts.map +1 -0
  32. package/lib/esm/routing/RouteComponent.js +20 -0
  33. package/lib/esm/routing/RouteComponentWrapper.d.ts +10 -0
  34. package/lib/esm/routing/RouteComponentWrapper.d.ts.map +1 -0
  35. package/lib/esm/routing/RouteComponentWrapper.js +72 -0
  36. package/lib/esm/routing/RouterRenderer.d.ts +10 -0
  37. package/lib/esm/routing/RouterRenderer.d.ts.map +1 -0
  38. package/lib/esm/routing/RouterRenderer.js +67 -0
  39. package/lib/esm/routing/RoutingContext.d.ts +5 -0
  40. package/lib/esm/routing/RoutingContext.d.ts.map +1 -0
  41. package/lib/esm/routing/RoutingContext.js +4 -0
  42. package/lib/esm/routing/createRouter.d.ts +7 -0
  43. package/lib/esm/routing/createRouter.d.ts.map +1 -0
  44. package/lib/esm/routing/createRouter.js +75 -0
  45. package/lib/esm/routing/index.d.ts +7 -0
  46. package/lib/esm/routing/index.d.ts.map +1 -0
  47. package/lib/esm/routing/index.js +7 -0
  48. package/lib/esm/tools/index.d.ts +3 -0
  49. package/lib/esm/tools/index.d.ts.map +1 -0
  50. package/lib/esm/tools/index.js +13 -0
  51. package/lib/esm/tools.d.ts +7 -0
  52. package/lib/esm/tools.d.ts.map +1 -0
  53. package/lib/esm/tools.js +58 -0
  54. package/lib/esm/types.d.ts +86 -0
  55. package/lib/esm/types.d.ts.map +1 -0
  56. package/lib/esm/types.js +2 -0
  57. package/lib/tsconfig.esm.tsbuildinfo +1 -0
  58. package/lib/types/ResourcePage.d.ts +15 -0
  59. package/lib/types/ResourcePage.d.ts.map +1 -0
  60. package/lib/types/builder.d.ts +13 -0
  61. package/lib/types/builder.d.ts.map +1 -0
  62. package/lib/types/errors/HttpRedirect.d.ts +6 -0
  63. package/lib/types/errors/HttpRedirect.d.ts.map +1 -0
  64. package/lib/types/errors/index.d.ts +2 -0
  65. package/lib/types/errors/index.d.ts.map +1 -0
  66. package/lib/types/history/BrowserHistory.d.ts +16 -0
  67. package/lib/types/history/BrowserHistory.d.ts.map +1 -0
  68. package/lib/types/history/index.d.ts +3 -0
  69. package/lib/types/history/index.d.ts.map +1 -0
  70. package/lib/types/history/types.d.ts +12 -0
  71. package/lib/types/history/types.d.ts.map +1 -0
  72. package/lib/types/index.d.ts +8 -0
  73. package/lib/types/index.d.ts.map +1 -0
  74. package/lib/types/routing/Link.d.ts +21 -0
  75. package/lib/types/routing/Link.d.ts.map +1 -0
  76. package/lib/types/routing/RouteComponent.d.ts +8 -0
  77. package/lib/types/routing/RouteComponent.d.ts.map +1 -0
  78. package/lib/types/routing/RouteComponentWrapper.d.ts +10 -0
  79. package/lib/types/routing/RouteComponentWrapper.d.ts.map +1 -0
  80. package/lib/types/routing/RouterRenderer.d.ts +10 -0
  81. package/lib/types/routing/RouterRenderer.d.ts.map +1 -0
  82. package/lib/types/routing/RoutingContext.d.ts +5 -0
  83. package/lib/types/routing/RoutingContext.d.ts.map +1 -0
  84. package/lib/types/routing/createRouter.d.ts +7 -0
  85. package/lib/types/routing/createRouter.d.ts.map +1 -0
  86. package/lib/types/routing/index.d.ts +7 -0
  87. package/lib/types/routing/index.d.ts.map +1 -0
  88. package/lib/types/tools/index.d.ts +3 -0
  89. package/lib/types/tools/index.d.ts.map +1 -0
  90. package/lib/types/tools.d.ts +7 -0
  91. package/lib/types/tools.d.ts.map +1 -0
  92. package/lib/types/types.d.ts +86 -0
  93. package/lib/types/types.d.ts.map +1 -0
  94. package/package.json +57 -0
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useContext, useMemo } from 'react';
3
+ import { HttpRedirect } from '../errors/index.js';
4
+ import RoutingContext from './RoutingContext.js';
5
+ import RouteComponent from './RouteComponent.js';
6
+ const RouteComponentWrapper = (props) => {
7
+ const { children, match, preparedRoute } = props;
8
+ const { resourcePage, prepared, render, redirectTo } = preparedRoute;
9
+ const router = useContext(RoutingContext);
10
+ const route = useMemo(() => {
11
+ if (match == null) {
12
+ return null;
13
+ }
14
+ return match.route;
15
+ }, [match]);
16
+ const Component = useMemo(() => {
17
+ if (resourcePage == null) {
18
+ return;
19
+ }
20
+ return resourcePage.read();
21
+ }, [resourcePage]);
22
+ let content = null;
23
+ let redirectToPathname = null;
24
+ if (render != null) {
25
+ try {
26
+ content = render({
27
+ children,
28
+ Component,
29
+ preparedRoute,
30
+ route,
31
+ prepared,
32
+ });
33
+ }
34
+ catch (error) {
35
+ if (error instanceof HttpRedirect && router != null) {
36
+ content = null;
37
+ redirectToPathname = error.redirectTo;
38
+ }
39
+ else if (error instanceof Promise) {
40
+ content = error;
41
+ }
42
+ else if (typeof error === 'undefined') {
43
+ content = undefined;
44
+ redirectToPathname = null;
45
+ }
46
+ else {
47
+ console.error('ERROR: ', error);
48
+ content = null;
49
+ redirectToPathname = null;
50
+ }
51
+ }
52
+ }
53
+ const pathname = redirectTo ?? redirectToPathname ?? null;
54
+ if (render != null) {
55
+ if (content instanceof Promise) {
56
+ throw content;
57
+ }
58
+ if (pathname != null) {
59
+ return _jsx(RouteComponent, { redirectToPathname: pathname });
60
+ }
61
+ if (typeof content !== 'undefined') {
62
+ return content;
63
+ }
64
+ }
65
+ if (Component == null) {
66
+ return null;
67
+ }
68
+ const content2 = (_jsx(Component, { match: match, preparedRoute: preparedRoute, route: route, prepared: prepared, children: children }));
69
+ return _jsx(RouteComponent, { redirectToPathname: pathname, content: content2 });
70
+ };
71
+ export default RouteComponentWrapper;
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVDb21wb25lbnRXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvUm91dGVDb21wb25lbnRXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQVksTUFBTSxPQUFPLENBQUM7QUFHdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBbUJqRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBWSxFQUFzQixFQUFFO0lBQ2pFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqRCxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBRXJFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ3pCLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBR1osTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM3QixJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUdELE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFbkIsSUFBSSxPQUFPLEdBQWtELElBQUksQ0FBQztJQUNsRSxJQUFJLGtCQUFrQixHQUFrQixJQUFJLENBQUM7SUFFN0MsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLE1BQU0sQ0FBQztnQkFDZixRQUFRO2dCQUVSLFNBQVM7Z0JBQ1QsYUFBYTtnQkFDYixLQUFLO2dCQUNMLFFBQVE7YUFDVCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2Ysa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUV4QyxDQUFDO2lCQUFNLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO2dCQUNwQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLENBQUM7aUJBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDcEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFFTixPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQWtCLFVBQVUsSUFBSSxrQkFBa0IsSUFBSSxJQUFJLENBQUM7SUFFekUsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxPQUFPLFlBQVksT0FBTyxFQUFFLENBQUM7WUFFL0IsTUFBTSxPQUFPLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE9BQU8sS0FBQyxjQUFjLElBQUMsa0JBQWtCLEVBQUUsUUFBUSxHQUFJLENBQUM7UUFDMUQsQ0FBQztRQUVELElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbkMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxDQUVmLEtBQUMsU0FBUyxJQUNSLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLGFBQWEsRUFDNUIsS0FBSyxFQUFFLEtBQUssRUFDWixRQUFRLEVBQUUsUUFBUSxZQUVqQixRQUFRLEdBQ0MsQ0FDYixDQUFDO0lBRUYsT0FBTyxLQUFDLGNBQWMsSUFBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBSSxDQUFDO0FBQzdFLENBQUMsQ0FBQztBQUVGLGVBQWUscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VNZW1vLCB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBQcmVwYXJlZE1hdGNoUm91dGUsIFJvdXRlck1hdGNoZWRSb3V0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7IEh0dHBSZWRpcmVjdCB9IGZyb20gJy4uL2Vycm9ycy9pbmRleC5qcyc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbmltcG9ydCBSb3V0ZUNvbXBvbmVudCBmcm9tICcuL1JvdXRlQ29tcG9uZW50LmpzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBhbnk7XG4gIG1hdGNoOiBSb3V0ZXJNYXRjaGVkUm91dGU8YW55PiB8IG51bGw7XG4gIHByZXBhcmVkUm91dGU6IFByZXBhcmVkTWF0Y2hSb3V0ZTtcbn07XG5cbi8qKlxuICogVGhlIGByZXNvdXJjZVBhZ2VgIHByb3BlcnR5IGZyb20gdGhlIHJvdXRlIGVudHJ5IGlzIGEgUmVzb3VyY2UsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHJlYWR5LlxuICogV2UgdXNlIGEgaGVscGVyIGNoaWxkIGNvbXBvbmVudCB0byB1bndyYXAgdGhlIHJlc291cmNlIHdpdGggY29tcG9uZW50LnJlYWQoKSwgYW5kIHRoZW5cbiAqIHJlbmRlciBpdCBpZiBpdHMgcmVhZHkuXG4gKlxuICogTk9URTogY2FsbGluZyByb3V0ZUVudHJ5LnJvdXRlLmNvbXBvbmVudC5yZWFkKCkgZGlyZWN0bHkgaW4gUm91dGVSZW5kZXJlciB3b2xkbid0IHdvcmsgdGhlXG4gKiB3YXkgd2UnZCBleHBlY3QuIEJlY2F1c2UgdGhhdCBtZXRob2QgY291bGQgdGhyb3cgLSBlaXRoZXIgc3VzcGVuZGluZyBvciBvbiBlcnJvciAtIHRoZSBlcnJvclxuICogd291bGQgYnViYmxlIHVwIHRvIHRoZSAqY2FsbGVyKiBvZiBSb3V0ZVJlbmRlcmVyLiBXZSB3YW50IHRoZSBzdXNwZW5kL2Vycm9yIHRvIGJ1YmJsZSB1cCB0b1xuICogb3VyIEVycm9yQm91bmRhcnkvU3VzcGVuc2UgY29tcG9uZW50cywgc28gd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VzcGVuZC9lcnJvciBoYXBwZW5zXG4gKiBpbiBhIGNoaWxkIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgUm91dGVDb21wb25lbnRXcmFwcGVyID0gKHByb3BzOiBQcm9wcyk6IEpTWC5FbGVtZW50IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIG1hdGNoLCBwcmVwYXJlZFJvdXRlIH0gPSBwcm9wcztcbiAgY29uc3QgeyByZXNvdXJjZVBhZ2UsIHByZXBhcmVkLCByZW5kZXIsIHJlZGlyZWN0VG8gfSA9IHByZXBhcmVkUm91dGU7IC8vIHJvdXRlRGF0YVxuXG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuXG4gIGNvbnN0IHJvdXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaC5yb3V0ZTtcbiAgfSwgW21hdGNoXSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jXG4gIGNvbnN0IENvbXBvbmVudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHJldHVybiByZXNvdXJjZVBhZ2UucmVhZCgpO1xuICB9LCBbcmVzb3VyY2VQYWdlXSk7XG5cbiAgbGV0IGNvbnRlbnQ6IEpTWC5FbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB8IFByb21pc2U8YW55PiA9IG51bGw7XG4gIGxldCByZWRpcmVjdFRvUGF0aG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb250ZW50ID0gcmVuZGVyKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IE9LIGNhbiBiZSBhIHN1c3BlbmRcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcmVwYXJlZFJvdXRlLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcHJlcGFyZWQsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cFJlZGlyZWN0ICYmIHJvdXRlciAhPSBudWxsKSB7XG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICByZWRpcmVjdFRvUGF0aG5hbWUgPSBlcnJvci5yZWRpcmVjdFRvO1xuICAgICAgICAvLyBJZiBpdCdzIHN1c3BlbmRlZFxuICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgY29udGVudCA9IGVycm9yO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlZGlyZWN0VG9QYXRobmFtZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUjogJywgZXJyb3IpO1xuICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgcmVkaXJlY3RUb1BhdGhuYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXRobmFtZTogc3RyaW5nIHwgbnVsbCA9IHJlZGlyZWN0VG8gPz8gcmVkaXJlY3RUb1BhdGhuYW1lID8/IG51bGw7XG5cbiAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L29ubHktdGhyb3ctZXJyb3JcbiAgICAgIHRocm93IGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgaWYgKHBhdGhuYW1lICE9IG51bGwpIHtcbiAgICAgIHJldHVybiA8Um91dGVDb21wb25lbnQgcmVkaXJlY3RUb1BhdGhuYW1lPXtwYXRobmFtZX0gLz47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb250ZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKENvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50MiA9IChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBPS1xuICAgIDxDb21wb25lbnRcbiAgICAgIG1hdGNoPXttYXRjaH1cbiAgICAgIHByZXBhcmVkUm91dGU9e3ByZXBhcmVkUm91dGV9XG4gICAgICByb3V0ZT17cm91dGV9XG4gICAgICBwcmVwYXJlZD17cHJlcGFyZWR9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xuXG4gIHJldHVybiA8Um91dGVDb21wb25lbnQgcmVkaXJlY3RUb1BhdGhuYW1lPXtwYXRobmFtZX0gY29udGVudD17Y29udGVudDJ9IC8+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUm91dGVDb21wb25lbnRXcmFwcGVyO1xuIl19
@@ -0,0 +1,10 @@
1
+ import { type ReactNode, type JSX } from 'react';
2
+ export declare function getNewIndex(): number;
3
+ type Props = {
4
+ fallback?: ReactNode;
5
+ enableTransition?: boolean;
6
+ pending?: ReactNode;
7
+ };
8
+ declare const RouterRenderer: (props: Props) => JSX.Element | null;
9
+ export default RouterRenderer;
10
+ //# sourceMappingURL=RouterRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouterRenderer.d.ts","sourceRoot":"","sources":["../../../src/routing/RouterRenderer.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,SAAS,EAA0B,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAahF,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAED,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAMF,QAAA,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,GAAG,CAAC,OAAO,GAAG,IAwIpD,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useMemo, useTransition } from 'react';
3
+ import RoutingContext from './RoutingContext.js';
4
+ import RouteComponentWrapper from './RouteComponentWrapper.js';
5
+ const { useContext, useEffect, Suspense, useState } = React;
6
+ let index = 0;
7
+ export function getNewIndex() {
8
+ index += 1;
9
+ return index;
10
+ }
11
+ const RouterRenderer = (props) => {
12
+ const { fallback, pending, enableTransition = false } = props;
13
+ const router = useContext(RoutingContext);
14
+ const [isPending, startTransition] = useTransition();
15
+ const [routeEntry, setRouteEntry] = useState(router?.get());
16
+ useEffect(() => {
17
+ if (router == null) {
18
+ return;
19
+ }
20
+ const currentEntry = router.get();
21
+ if (currentEntry !== routeEntry) {
22
+ setRouteEntry(currentEntry);
23
+ return;
24
+ }
25
+ const dispose = router.subscribe((nextEntry) => {
26
+ if (enableTransition) {
27
+ startTransition(() => {
28
+ setRouteEntry(nextEntry);
29
+ });
30
+ }
31
+ else {
32
+ setRouteEntry(nextEntry);
33
+ }
34
+ });
35
+ return () => {
36
+ dispose();
37
+ };
38
+ }, [router]);
39
+ const pendingContent = useMemo(() => {
40
+ if (isPending) {
41
+ return pending;
42
+ }
43
+ return null;
44
+ }, [isPending, pending]);
45
+ const routeComponent = useMemo(() => {
46
+ if (routeEntry == null) {
47
+ return null;
48
+ }
49
+ const result = [];
50
+ const reversedItems = result
51
+ .concat(routeEntry.preparedMatch.routes)
52
+ .reverse();
53
+ const firstItem = reversedItems[0];
54
+ if (firstItem == null) {
55
+ return null;
56
+ }
57
+ let mainComponent = (_jsx(RouteComponentWrapper, { match: routeEntry.preparedMatch.match ?? null, preparedRoute: firstItem }, firstItem.path));
58
+ for (let index = 1; index < reversedItems.length; index += 1) {
59
+ const nextItem = reversedItems[index];
60
+ mainComponent = (_jsx(RouteComponentWrapper, { match: routeEntry.preparedMatch.match ?? null, preparedRoute: nextItem, children: mainComponent }, nextItem.path));
61
+ }
62
+ return mainComponent;
63
+ }, [routeEntry]);
64
+ return (_jsxs(Suspense, { fallback: fallback, children: [pendingContent, routeComponent] }));
65
+ };
66
+ export default RouterRenderer;
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9Sb3V0ZXJSZW5kZXJlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQWtCLE9BQU8sRUFBRSxhQUFhLEVBQVksTUFBTSxPQUFPLENBQUM7QUFJaEYsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxxQkFBcUIsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBRTVELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUlkLE1BQU0sVUFBVSxXQUFXO0lBQ3pCLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDWCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFZRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQVksRUFBc0IsRUFBRTtJQUMxRCxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFHOUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRzFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFJckQsTUFBTSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxRQUFRLENBQzFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FDZCxDQUFDO0lBR0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLElBQUksWUFBWSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBRWhDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUlELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQU03QyxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLGVBQWUsQ0FBQyxHQUFHLEVBQUU7b0JBQ25CLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUdILE9BQU8sR0FBRyxFQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUM7SUFNSixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBc0JiLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDbEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBSXpCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDbEMsSUFBSSxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQXlCLEVBQUUsQ0FBQztRQUV4QyxNQUFNLGFBQWEsR0FBRyxNQUFNO2FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQzthQUN2QyxPQUFPLEVBQUUsQ0FBQztRQUViLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuQyxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBRyxDQUNsQixLQUFDLHFCQUFxQixJQUVwQixLQUFLLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxFQUM3QyxhQUFhLEVBQUUsU0FBUyxJQUZuQixTQUFTLENBQUMsSUFBSSxDQUduQixDQUNILENBQUM7UUFDRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLGFBQWEsR0FBRyxDQUNkLEtBQUMscUJBQXFCLElBR3BCLEtBQUssRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBRTdDLGFBQWEsRUFBRSxRQUFTLFlBRXZCLGFBQWEsSUFMVCxRQUFTLENBQUMsSUFBSSxDQU1HLENBQ3pCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUlqQixPQUFPLENBQ0wsTUFBQyxRQUFRLElBQUMsUUFBUSxFQUFFLFFBQVEsYUFDekIsY0FBYyxFQUNkLGNBQWMsSUFDTixDQUNaLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixlQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB0eXBlIFJlYWN0Tm9kZSwgdXNlTWVtbywgdXNlVHJhbnNpdGlvbiwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgUHJlcGFyZWRNYXRjaFJvdXRlLCBSb3V0ZUVudHJ5IH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5pbXBvcnQgUm91dGluZ0NvbnRleHQgZnJvbSAnLi9Sb3V0aW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgUm91dGVDb21wb25lbnRXcmFwcGVyIGZyb20gJy4vUm91dGVDb21wb25lbnRXcmFwcGVyLmpzJztcblxuY29uc3QgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIFN1c3BlbnNlLCB1c2VTdGF0ZSB9ID0gUmVhY3Q7XG5cbmxldCBpbmRleCA9IDA7XG4vKipcbiAqIEEgc2ltcGxlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbmV3IGluZGV4IGZvciB0aGUgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdJbmRleCgpOiBudW1iZXIge1xuICBpbmRleCArPSAxO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGZhbGxiYWNrPzogUmVhY3ROb2RlO1xuICBlbmFibGVUcmFuc2l0aW9uPzogYm9vbGVhbjtcbiAgcGVuZGluZz86IFJlYWN0Tm9kZTtcbn07XG5cbi8qKlxuICogQSBjb21wb25lbnQgdGhhdCBhY2Nlc3NlcyB0aGUgY3VycmVudCByb3V0ZSBlbnRyeSBmcm9tIFJvdXRpbmdDb250ZXh0IGFuZCByZW5kZXJzXG4gKiB0aGF0IGVudHJ5LlxuICovXG5jb25zdCBSb3V0ZXJSZW5kZXJlciA9IChwcm9wczogUHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCB7IGZhbGxiYWNrLCBwZW5kaW5nLCBlbmFibGVUcmFuc2l0aW9uID0gZmFsc2UgfSA9IHByb3BzO1xuXG4gIC8vIEFjY2VzcyB0aGUgcm91dGVyXG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuICAvLyBJbXByb3ZlIHRoZSByb3V0ZSB0cmFuc2l0aW9uIFVYIGJ5IGRlbGF5aW5nIHRyYW5zaXRpb25zOiBzaG93IHRoZSBwcmV2aW91cyByb3V0ZSBlbnRyeVxuICAvLyBmb3IgYSBicmllZiBwZXJpb2Qgd2hpbGUgdGhlIG5leHQgcm91dGUgaXMgYmVpbmcgcHJlcGFyZWQuXG4gIGNvbnN0IFtpc1BlbmRpbmcsIHN0YXJ0VHJhbnNpdGlvbl0gPSB1c2VUcmFuc2l0aW9uKCk7XG5cbiAgLy8gU3RvcmUgdGhlIGFjdGl2ZSBlbnRyeSBpbiBzdGF0ZSAtIHRoaXMgYWxsb3dzIHRoZSByZW5kZXJlciB0byB1c2UgZmVhdHVyZXMgbGlrZVxuICAvLyB1c2VUcmFuc2l0aW9uIHRvIGRlbGF5IHdoZW4gc3RhdGUgY2hhbmdlcyBiZWNvbWUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgY29uc3QgW3JvdXRlRW50cnksIHNldFJvdXRlRW50cnldID0gdXNlU3RhdGU8Um91dGVFbnRyeTxhbnk+IHwgdW5kZWZpbmVkPihcbiAgICByb3V0ZXI/LmdldCgpLFxuICApO1xuXG4gIC8vIE9uIG1vdW50IHN1YnNjcmliZSBmb3Igcm91dGUgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyb3V0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGUgcm91dGUgaGFzIGNoYW5nZWQgYmV0d2VlbiB0aGUgbGFzdCByZW5kZXIgYW5kIGNvbW1pdDpcbiAgICBjb25zdCBjdXJyZW50RW50cnkgPSByb3V0ZXIuZ2V0KCk7XG4gICAgaWYgKGN1cnJlbnRFbnRyeSAhPT0gcm91dGVFbnRyeSkge1xuICAgICAgLy8gaWYgdGhlcmUgd2FzIGEgY29uY3VycmVudCBtb2RpZmljYXRpb24sIHJlcmVuZGVyIGFuZCBleGl0XG4gICAgICBzZXRSb3V0ZUVudHJ5KGN1cnJlbnRFbnRyeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgKndhc24ndCogYSBjb25jdXJyZW50IGNoYW5nZSB0byB0aGUgcm91dGUsIHRoZW4gdGhlIFVJXG4gICAgLy8gaXMgY3VycmVudDogc3Vic2NyaWJlIGZvciBzdWJzZXF1ZW50IHJvdXRlIHVwZGF0ZXNcbiAgICBjb25zdCBkaXNwb3NlID0gcm91dGVyLnN1YnNjcmliZSgobmV4dEVudHJ5KSA9PiB7XG4gICAgICAvLyBzdGFydFRyYW5zaXRpb24oKSBkZWxheXMgdGhlIGVmZmVjdCBvZiB0aGUgc2V0Um91dGVFbnRyeSAoc2V0U3RhdGUpIGNhbGxcbiAgICAgIC8vIGZvciBhIGJyaWVmIHBlcmlvZCwgY29udGludWluZyB0byBzaG93IHRoZSBvbGQgc3RhdGUgd2hpbGUgdGhlIG5ld1xuICAgICAgLy8gc3RhdGUgKHJvdXRlKSBpcyBwcmVwYXJlZC5cbiAgICAgIC8vIFRPRE86IHVzZSBzdGFydFRyYW5zaXRpb24gb25seSBmb3IgcmVsYXkgY29udGVudFxuXG4gICAgICBpZiAoZW5hYmxlVHJhbnNpdGlvbikge1xuICAgICAgICBzdGFydFRyYW5zaXRpb24oKCkgPT4ge1xuICAgICAgICAgIHNldFJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRSb3V0ZUVudHJ5KG5leHRFbnRyeSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZGlzcG9zZSgpO1xuICAgIH07XG5cbiAgICAvLyBOb3RlOiB0aGlzIGhvb2sgdXBkYXRlcyByb3V0ZUVudHJ5IG1hbnVhbGx5OyB3ZSBleGNsdWRlIHRoYXQgdmFyaWFibGVcbiAgICAvLyBmcm9tIHRoZSBob29rIGRlcHMgdG8gYXZvaWQgcmVjb21wdXRpbmcgdGhlIGVmZmVjdCBhZnRlciBlYWNoIGNoYW5nZVxuICAgIC8vIHRyaWdnZXJlZCBieSB0aGUgZWZmZWN0IGl0c2VsZi5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtyb3V0ZXJdKTtcblxuICAvLyBUaGUgY3VycmVudCByb3V0ZSB2YWx1ZSBpcyBhbiBhcnJheSBvZiBtYXRjaGluZyBlbnRyaWVzIC0gb25lIGVudHJ5IHBlclxuICAvLyBsZXZlbCBvZiByb3V0ZXMgKHRvIGFsbG93IG5lc3RlZCByb3V0ZXMpLiBXZSBoYXZlIHRvIG1hcCBlYWNoIG9uZSB0byBhXG4gIC8vIFJvdXRlQ29tcG9uZW50IHRvIGFsbG93IHN1c3BlbmRpbmcsIGFuZCBhbHNvIHBhc3MgaXRzIGNoaWxkcmVuIGNvcnJlY3RseS5cbiAgLy8gQ29uY2VwdHVhbGx5LCB3ZSB3YW50IHRoaXMgc3RydWN0dXJlOlxuICAvLyBgYGBcbiAgLy8gPFJvdXRlQ29tcG9uZW50XG4gIC8vICAgY29tcG9uZW50PXtlbnRyeVswXS5jb21wb25lbnR9XG4gIC8vICAgcHJlcGFyZWQ9e2VudHJyeVswXS5wcmVwYXJlZH0+XG4gIC8vICAgPFJvdXRlQ29tcG9uZW50XG4gIC8vICAgICBjb21wb25lbnQ9e2VudHJ5WzFdLmNvbXBvbmVudH1cbiAgLy8gICAgIHByZXBhcmVkPXtlbnRyeVsxXS5wcmVwYXJlZH0+XG4gIC8vICAgICAgIC8vIGNvbnRpbnVlIGZvciBuZXN0ZWQgaXRlbXMuLi5cbiAgLy8gICA8L1JvdXRlQ29tcG9uZW50PlxuICAvLyA8L1JvdXRlQ29tcG9uZW50PlxuICAvLyBgYGBcbiAgLy8gVG8gYWNoaWV2ZSB0aGlzLCB3ZSByZXZlcnNlIHRoZSBsaXN0IHNvIHdlIGNhbiBzdGFydCBhdCB0aGUgYm90dG9tLW1vc3RcbiAgLy8gY29tcG9uZW50LCBhbmQgaXRlcmF0aXZlbHkgY29uc3RydWN0IHBhcmVudCBjb21wb25lbnRzIHcgdGhlIHByZXZpb3VzXG4gIC8vIHZhbHVlIGFzIHRoZSBjaGlsZCBvZiB0aGUgbmV4dCBvbmU6XG4gIC8vIHJldmVyc2UgaXMgaW4gcGxhY2UsIGJ1dCB3ZSB3YW50IGEgY29weSBzbyBjb25jYXRcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcm9taXNlLWZ1bmN0aW9uLWFzeW5jXG4gIGNvbnN0IHBlbmRpbmdDb250ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzUGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIFtpc1BlbmRpbmcsIHBlbmRpbmddKTtcblxuICAvLyB0aGUgYm90dG9tLW1vc3QgY29tcG9uZW50IGlzIHNwZWNpYWwgc2luY2UgaXQgd2lsbCBoYXZlIG5vIGNoaWxkcmVuXG4gIC8vICh0aG91Z2ggd2UgY291bGQgcHJvYmFibHkganVzdCBwYXNzIG51bGwgY2hpbGRyZW4gdG8gaXQpXG4gIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJvdXRlRW50cnkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0OiBQcmVwYXJlZE1hdGNoUm91dGVbXSA9IFtdO1xuXG4gICAgY29uc3QgcmV2ZXJzZWRJdGVtcyA9IHJlc3VsdFxuICAgICAgLmNvbmNhdChyb3V0ZUVudHJ5LnByZXBhcmVkTWF0Y2gucm91dGVzKVxuICAgICAgLnJldmVyc2UoKTtcblxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IHJldmVyc2VkSXRlbXNbMF07XG5cbiAgICBpZiAoZmlyc3RJdGVtID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBtYWluQ29tcG9uZW50ID0gKFxuICAgICAgPFJvdXRlQ29tcG9uZW50V3JhcHBlclxuICAgICAgICBrZXk9e2ZpcnN0SXRlbS5wYXRofVxuICAgICAgICBtYXRjaD17cm91dGVFbnRyeS5wcmVwYXJlZE1hdGNoLm1hdGNoID8/IG51bGx9XG4gICAgICAgIHByZXBhcmVkUm91dGU9e2ZpcnN0SXRlbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcmV2ZXJzZWRJdGVtcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG5leHRJdGVtID0gcmV2ZXJzZWRJdGVtc1tpbmRleF07XG4gICAgICBtYWluQ29tcG9uZW50ID0gKFxuICAgICAgICA8Um91dGVDb21wb25lbnRXcmFwcGVyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICBrZXk9e25leHRJdGVtIS5wYXRofVxuICAgICAgICAgIG1hdGNoPXtyb3V0ZUVudHJ5LnByZXBhcmVkTWF0Y2gubWF0Y2ggPz8gbnVsbH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIHByZXBhcmVkUm91dGU9e25leHRJdGVtIX1cbiAgICAgICAgPlxuICAgICAgICAgIHttYWluQ29tcG9uZW50fVxuICAgICAgICA8L1JvdXRlQ29tcG9uZW50V3JhcHBlcj5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1haW5Db21wb25lbnQ7XG4gIH0sIFtyb3V0ZUVudHJ5XSk7XG5cbiAgLy8gUm91dGVzIGNhbiBlcnJvciBzbyB3cmFwIGluIGFuIDxFcnJvckJvdW5kYXJ5PlxuICAvLyBSb3V0ZXMgY2FuIHN1c3BlbmQsIHNvIHdyYXAgaW4gPFN1c3BlbnNlPlxuICByZXR1cm4gKFxuICAgIDxTdXNwZW5zZSBmYWxsYmFjaz17ZmFsbGJhY2t9PlxuICAgICAge3BlbmRpbmdDb250ZW50fVxuICAgICAge3JvdXRlQ29tcG9uZW50fVxuICAgIDwvU3VzcGVuc2U+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXJSZW5kZXJlcjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RoutingContextType } from '../types.js';
3
+ declare const RoutingContext: React.Context<RoutingContextType<any> | null>;
4
+ export default RoutingContext;
5
+ //# sourceMappingURL=RoutingContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingContext.d.ts","sourceRoot":"","sources":["../../../src/routing/RoutingContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,QAAA,MAAM,cAAc,+CAEnB,CAAC;AAKF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ const RoutingContext = React.createContext(null);
3
+ export default RoutingContext;
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGluZ0NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9Sb3V0aW5nQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFJMUIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FDeEMsSUFBSSxDQUNMLENBQUM7QUFLRixlQUFlLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgUm91dGluZ0NvbnRleHRUeXBlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5jb25zdCBSb3V0aW5nQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Um91dGluZ0NvbnRleHRUeXBlPGFueT4gfCBudWxsPihcbiAgbnVsbCxcbik7XG5cbi8qKlxuICogQSBjdXN0b20gY29udGV4dCBpbnN0YW5jZSBmb3Igb3VyIHJvdXRlciB0eXBlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdDb250ZXh0O1xuIl19
@@ -0,0 +1,7 @@
1
+ import type { Route, RoutingContextType } from '../types.js';
2
+ export type CreateRouterReturn = {
3
+ cleanup: () => void;
4
+ context: RoutingContextType<any>;
5
+ };
6
+ export default function createRouter(routes: Route<any, any>[]): CreateRouterReturn;
7
+ //# sourceMappingURL=createRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,KAAK,EAEL,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAQF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GACxB,kBAAkB,CA2FpB"}
@@ -0,0 +1,75 @@
1
+ import { buildRoutes } from '../builder.js';
2
+ import { BrowserHistory } from '../history/index.js';
3
+ import { getMatchedRoute, prepareMatch } from '../tools.js';
4
+ export default function createRouter(routes) {
5
+ const history = new BrowserHistory();
6
+ const flatRoutes = buildRoutes(routes);
7
+ const route = getMatchedRoute(flatRoutes, history.location);
8
+ const preparedMatch = prepareMatch(route);
9
+ let currentEntry = {
10
+ forceRerender: false,
11
+ location: history.location,
12
+ route,
13
+ preparedMatch,
14
+ };
15
+ let nextId = 0;
16
+ const subscribers = new Map();
17
+ const cleanup = history.subscribe((location, forceRerender) => {
18
+ if (forceRerender) {
19
+ }
20
+ else if (location.pathname === currentEntry.location.pathname) {
21
+ return;
22
+ }
23
+ const route = getMatchedRoute(flatRoutes, history.location);
24
+ const preparedMatch = prepareMatch(route);
25
+ const nextEntry = {
26
+ forceRerender,
27
+ location,
28
+ route,
29
+ preparedMatch,
30
+ };
31
+ currentEntry = nextEntry;
32
+ subscribers.forEach((callback) => {
33
+ callback(nextEntry);
34
+ });
35
+ });
36
+ const context = {
37
+ history,
38
+ get() {
39
+ return currentEntry;
40
+ },
41
+ preloadCode(pathname) {
42
+ const matches = getMatchedRoute(flatRoutes, {
43
+ ...window.location,
44
+ pathname,
45
+ });
46
+ if (matches == null) {
47
+ return;
48
+ }
49
+ matches.route.routes.forEach(({ resourcePage }) => {
50
+ if (resourcePage == null) {
51
+ return;
52
+ }
53
+ resourcePage.load();
54
+ });
55
+ },
56
+ preload(pathname) {
57
+ const matches = getMatchedRoute(flatRoutes, {
58
+ ...window.location,
59
+ pathname,
60
+ });
61
+ prepareMatch(matches);
62
+ },
63
+ subscribe(callback) {
64
+ nextId += 1;
65
+ const id = nextId;
66
+ const dispose = () => {
67
+ subscribers.delete(id);
68
+ };
69
+ subscribers.set(id, callback);
70
+ return dispose;
71
+ },
72
+ };
73
+ return { cleanup, context };
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBbUI1RCxNQUFNLENBQUMsT0FBTyxVQUFVLFlBQVksQ0FDbEMsTUFBeUI7SUFHekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztJQUVyQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFHdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLElBQUksWUFBWSxHQUFvQjtRQUNsQyxhQUFhLEVBQUUsS0FBSztRQUNwQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsS0FBSztRQUNMLGFBQWE7S0FDZCxDQUFDO0lBR0YsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7SUFLOUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRTtRQUM1RCxJQUNFLGFBQWEsRUFFYixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hFLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFvQjtZQUNqQyxhQUFhO1lBQ2IsUUFBUTtZQUNSLEtBQUs7WUFDTCxhQUFhO1NBQ2QsQ0FBQztRQUNGLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDekIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQy9CLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBR0gsTUFBTSxPQUFPLEdBQTRCO1FBQ3ZDLE9BQU87UUFDUCxHQUFHO1lBQ0QsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztRQUNELFdBQVcsQ0FBQyxRQUFRO1lBRWxCLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsTUFBTSxDQUFDLFFBQVE7Z0JBQ2xCLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxRQUFRO1lBRWQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDMUMsR0FBRyxNQUFNLENBQUMsUUFBUTtnQkFDbEIsUUFBUTthQUNULENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsU0FBUyxDQUFDLFFBQVE7WUFDaEIsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUNaLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUVsQixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDO1lBQ0YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztLQUNGLENBQUM7SUFHRixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFJvdXRlcyB9IGZyb20gJy4uL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgQnJvd3Nlckhpc3RvcnkgfSBmcm9tICcuLi9oaXN0b3J5L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1hdGNoZWRSb3V0ZSwgcHJlcGFyZU1hdGNoIH0gZnJvbSAnLi4vdG9vbHMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBSb3V0ZSxcbiAgUm91dGVFbnRyeSxcbiAgUm91dGluZ0NvbnRleHRUeXBlLFxuICBTdWJzY3JpYmVDYWxsYmFjayxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJSZXR1cm4gPSB7XG4gIGNsZWFudXA6ICgpID0+IHZvaWQ7XG4gIGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+O1xufTtcblxuLyoqXG4gKiBBIGN1c3RvbSByb3V0ZXIgYnVpbHQgZnJvbSB0aGUgc2FtZSBwcmltaXRpdmVzIGFzIHJlYWN0LXJvdXRlci4gRWFjaCBvYmplY3QgaW4gYHJvdXRlc2BcbiAqIGNvbnRhaW5zIGJvdGggYSBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqIFRoZSByb3V0ZXIgd2F0Y2hlcyBmb3IgY2hhbmdlcyB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB2aWEgdGhlIGBoaXN0b3J5YCBwYWNrYWdlLCBtYXBzIHRoZVxuICogbG9jYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgZW50cnksIGFuZCB0aGVuIHByZWxvYWRzIHRoZSBjb2RlIGFuZCBkYXRhIGZvciB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcihcbiAgcm91dGVzOiBSb3V0ZTxhbnksIGFueT5bXSxcbik6IENyZWF0ZVJvdXRlclJldHVybiB7XG4gIC8vIEluaXRpYWxpemUgaGlzdG9yeVxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCBtYXRjaCBhbmQgcHJlcGFyZSBpdFxuICBjb25zdCByb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChyb3V0ZSk7XG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICBmb3JjZVJlcmVuZGVyOiBmYWxzZSxcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvbixcbiAgICByb3V0ZSxcbiAgICBwcmVwYXJlZE1hdGNoLFxuICB9O1xuXG4gIC8vIG1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueT4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBOb3RlIHRoYXQgdGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgY2xlYW51cCA9IGhpc3Rvcnkuc3Vic2NyaWJlKChsb2NhdGlvbiwgZm9yY2VSZXJlbmRlcikgPT4ge1xuICAgIGlmIChcbiAgICAgIGZvcmNlUmVyZW5kZXJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgICkge1xuICAgIH0gZWxzZSBpZiAobG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlKTtcbiAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICAgIGZvcmNlUmVyZW5kZXIsXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJvdXRlLFxuICAgICAgcHJlcGFyZWRNYXRjaCxcbiAgICB9O1xuICAgIGN1cnJlbnRFbnRyeSA9IG5leHRFbnRyeTtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2sobmV4dEVudHJ5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gVGhlIGFjdHVhbCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0aGUgUm91dGluZ0NvbmV4dC5cbiAgY29uc3QgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT4gPSB7XG4gICAgaGlzdG9yeSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudHJ5O1xuICAgIH0sXG4gICAgcHJlbG9hZENvZGUocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQganVzdCB0aGUgY29kZSBmb3IgYSByb3V0ZSwgd2l0aG91dCBzdG9yaW5nIHRoZSByZXN1bHRcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIHRoZSBjb2RlIGFuZCBkYXRhIGZvciBhIHJvdXRlLCB3aXRob3V0IHN0b3JpbmcgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICB9KTtcbiAgICAgIHByZXBhcmVNYXRjaChtYXRjaGVzKTtcbiAgICB9LFxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbmV4dElkICs9IDE7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLXN0eWxlXG4gICAgICBjb25zdCBkaXNwb3NlID0gKCkgPT4ge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoaWQpO1xuICAgICAgfTtcbiAgICAgIHN1YnNjcmliZXJzLnNldChpZCwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuIGRpc3Bvc2U7XG4gICAgfSxcbiAgfTtcblxuICAvLyBSZXR1cm4gYm90aCB0aGUgY29udGV4dCBvYmplY3QgYW5kIGEgY2xlYW51cCBmdW5jdGlvblxuICByZXR1cm4geyBjbGVhbnVwLCBjb250ZXh0IH07XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export { default as createRouter } from './createRouter.js';
2
+ export { default as Link } from './Link.js';
3
+ export { default as RouteComponent } from './RouteComponent.js';
4
+ export { default as RouteComponentWrapper } from './RouteComponentWrapper.js';
5
+ export { default as RouterRenderer } from './RouterRenderer.js';
6
+ export { default as RoutingContext } from './RoutingContext.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { default as createRouter } from './createRouter.js';
2
+ export { default as Link } from './Link.js';
3
+ export { default as RouteComponent } from './RouteComponent.js';
4
+ export { default as RouteComponentWrapper } from './RouteComponentWrapper.js';
5
+ export { default as RouterRenderer } from './RouterRenderer.js';
6
+ export { default as RoutingContext } from './RoutingContext.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sSUFBSSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgYXMgY3JlYXRlUm91dGVyIH0gZnJvbSAnLi9jcmVhdGVSb3V0ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rIH0gZnJvbSAnLi9MaW5rLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGVDb21wb25lbnQgfSBmcm9tICcuL1JvdXRlQ29tcG9uZW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGVDb21wb25lbnRXcmFwcGVyIH0gZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudFdyYXBwZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3V0ZXJSZW5kZXJlciB9IGZyb20gJy4vUm91dGVyUmVuZGVyZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3V0aW5nQ29udGV4dCB9IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuIl19
@@ -0,0 +1,3 @@
1
+ export declare function onlyDefinedStyles(styles: (string | null | undefined)[]): string[];
2
+ export declare function cx(styles: (string | null | undefined)[]): string;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GACpC,MAAM,EAAE,CAUV;AAMD,wBAAgB,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,MAAM,CAEhE"}
@@ -0,0 +1,13 @@
1
+ export function onlyDefinedStyles(styles) {
2
+ const filteredStyles = [];
3
+ for (const style of styles) {
4
+ if (style != null) {
5
+ filteredStyles.push(style);
6
+ }
7
+ }
8
+ return filteredStyles;
9
+ }
10
+ export function cx(styles) {
11
+ return onlyDefinedStyles(styles).join(' ');
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUFxQztJQUVyQyxNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFcEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQixjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxjQUFjLENBQUM7QUFDeEIsQ0FBQztBQU1ELE1BQU0sVUFBVSxFQUFFLENBQUMsTUFBcUM7SUFDdEQsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJucyBhIG5ldyBhcnJheSBjb250YWluaW5nIG9ubHkgdGhlIGRlZmluZWQgc3R5bGVzIGZyb20gdGhlIGlucHV0IGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbmx5RGVmaW5lZFN0eWxlcyhcbiAgc3R5bGVzOiAoc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZClbXSxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgZmlsdGVyZWRTdHlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBzdHlsZSBvZiBzdHlsZXMpIHtcbiAgICBpZiAoc3R5bGUgIT0gbnVsbCkge1xuICAgICAgZmlsdGVyZWRTdHlsZXMucHVzaChzdHlsZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpbHRlcmVkU3R5bGVzO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIHRoZSBpbnB1dCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbmcsIGZpbHRlcmluZyBvdXQgYW55IG51bGwgb3JcbiAqIHVuZGVmaW5lZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjeChzdHlsZXM6IChzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG9ubHlEZWZpbmVkU3R5bGVzKHN0eWxlcykuam9pbignICcpO1xufVxuIl19
@@ -0,0 +1,7 @@
1
+ import type { ParamData } from 'path-to-regexp';
2
+ import type { PrepareResult, PreparedMatch, Route, RouterMatchedRoute } from './types.js';
3
+ import type { FlatRoute } from './builder.js';
4
+ export declare function getMatchedRoute<TParams extends ParamData>(routes: FlatRoute<TParams>[], location: Location): RouterMatchedRoute<TParams> | null;
5
+ export declare function prepareMatch<TParams extends ParamData>(match: RouterMatchedRoute<TParams> | null): PreparedMatch<TParams>;
6
+ export declare function r<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData>(route: Route<TPrepared, TVariables>): Route<TPrepared, TVariables>;
7
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,KAAK,EACL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,wBAAgB,eAAe,CAAC,OAAO,SAAS,SAAS,EACvD,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5B,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,CAepC;AAKD,wBAAgB,YAAY,CAAC,OAAO,SAAS,SAAS,EACpD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,GACxC,aAAa,CAAC,OAAO,CAAC,CA8CxB;AAKD,wBAAgB,CAAC,CACf,SAAS,SAAS,aAAa,EAC/B,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAEnE"}
@@ -0,0 +1,58 @@
1
+ export function getMatchedRoute(routes, location) {
2
+ for (const route of routes) {
3
+ const match = route.matchFunction(location.pathname);
4
+ if (match !== false) {
5
+ const { path, params } = match;
6
+ return {
7
+ match,
8
+ route,
9
+ path,
10
+ params,
11
+ };
12
+ }
13
+ }
14
+ return null;
15
+ }
16
+ export function prepareMatch(match) {
17
+ if (match == null) {
18
+ return {
19
+ match,
20
+ routes: [],
21
+ };
22
+ }
23
+ const matchedRoute = match.route;
24
+ const routes = match.route.routes.map((route) => {
25
+ const { path, prepare, resourcePage, render } = route;
26
+ let Component;
27
+ let prepared;
28
+ if (prepare != null) {
29
+ prepared = prepare({
30
+ match,
31
+ matchedRoute,
32
+ resourcePage,
33
+ variables: { ...match.params },
34
+ });
35
+ }
36
+ if (resourcePage != null) {
37
+ Component = resourcePage.get();
38
+ if (Component == null) {
39
+ resourcePage.load();
40
+ }
41
+ }
42
+ return {
43
+ path,
44
+ prepared,
45
+ redirectTo: matchedRoute.redirectTo ?? null,
46
+ render,
47
+ resourcePage,
48
+ };
49
+ });
50
+ return {
51
+ match,
52
+ routes,
53
+ };
54
+ }
55
+ export function r(route) {
56
+ return route;
57
+ }
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsTUFBNEIsRUFDNUIsUUFBa0I7SUFFbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNwQixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztZQUMvQixPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxJQUFJO2dCQUNKLE1BQU07YUFDUCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFLRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUF5QztJQUV6QyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBRWpDLE1BQU0sTUFBTSxHQUF5QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNwRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXRELElBQUksU0FBa0IsQ0FBQztRQUN2QixJQUFJLFFBQW1DLENBQUM7UUFFeEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDcEIsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDakIsS0FBSztnQkFDTCxZQUFZO2dCQUNaLFlBQVk7Z0JBRVosU0FBUyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO2FBQy9CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUV0QixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLFFBQVE7WUFDUixVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQzNDLE1BQU07WUFDTixZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFLRCxNQUFNLFVBQVUsQ0FBQyxDQUdmLEtBQW1DO0lBQ25DLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1EYXRhIH0gZnJvbSAncGF0aC10by1yZWdleHAnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFByZXBhcmVSZXN1bHQsXG4gIFByZXBhcmVkTWF0Y2gsXG4gIFByZXBhcmVkTWF0Y2hSb3V0ZSxcbiAgUm91dGUsXG4gIFJvdXRlck1hdGNoZWRSb3V0ZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgRmxhdFJvdXRlIH0gZnJvbSAnLi9idWlsZGVyLmpzJztcblxuLyoqXG4gKiBHZXQgdGhlIG1hdGNoZWQgcm91dGUgZm9yIHRoZSBnaXZlbiBsb2NhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hlZFJvdXRlPFRQYXJhbXMgZXh0ZW5kcyBQYXJhbURhdGE+KFxuICByb3V0ZXM6IEZsYXRSb3V0ZTxUUGFyYW1zPltdLFxuICBsb2NhdGlvbjogTG9jYXRpb24sXG4pOiBSb3V0ZXJNYXRjaGVkUm91dGU8VFBhcmFtcz4gfCBudWxsIHtcbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IHJvdXRlLm1hdGNoRnVuY3Rpb24obG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIGlmIChtYXRjaCAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgcGFyYW1zIH0gPSBtYXRjaDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBMb2FkIHRoZSBkYXRhIGZvciB0aGUgbWF0Y2hlZCByb3V0ZSwgZ2l2ZW4gdGhlIHBhcmFtcyBleHRyYWN0ZWQgZnJvbSB0aGUgcm91dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNYXRjaDxUUGFyYW1zIGV4dGVuZHMgUGFyYW1EYXRhPihcbiAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxUUGFyYW1zPiB8IG51bGwsXG4pOiBQcmVwYXJlZE1hdGNoPFRQYXJhbXM+IHtcbiAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2gsXG4gICAgICByb3V0ZXM6IFtdLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtYXRjaGVkUm91dGUgPSBtYXRjaC5yb3V0ZTtcblxuICBjb25zdCByb3V0ZXM6IFByZXBhcmVkTWF0Y2hSb3V0ZVtdID0gbWF0Y2gucm91dGUucm91dGVzLm1hcCgocm91dGUpID0+IHtcbiAgICBjb25zdCB7IHBhdGgsIHByZXBhcmUsIHJlc291cmNlUGFnZSwgcmVuZGVyIH0gPSByb3V0ZTtcblxuICAgIGxldCBDb21wb25lbnQ6IHVua25vd247XG4gICAgbGV0IHByZXBhcmVkOiBQcmVwYXJlUmVzdWx0IHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHByZXBhcmUgIT0gbnVsbCkge1xuICAgICAgcHJlcGFyZWQgPSBwcmVwYXJlKHtcbiAgICAgICAgbWF0Y2gsXG4gICAgICAgIG1hdGNoZWRSb3V0ZSxcbiAgICAgICAgcmVzb3VyY2VQYWdlLFxuICAgICAgICAvLyBGaXggT2JqZWN0LmNyZWF0ZShudWxsKSBpc3N1ZSBpbiBwYXRoLXRvLXJlZ2V4cFxuICAgICAgICB2YXJpYWJsZXM6IHsgLi4ubWF0Y2gucGFyYW1zIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VQYWdlICE9IG51bGwpIHtcbiAgICAgIENvbXBvbmVudCA9IHJlc291cmNlUGFnZS5nZXQoKTtcbiAgICAgIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7IC8vIGVhZ2VybHkgbG9hZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIHByZXBhcmVkLFxuICAgICAgcmVkaXJlY3RUbzogbWF0Y2hlZFJvdXRlLnJlZGlyZWN0VG8gPz8gbnVsbCxcbiAgICAgIHJlbmRlcixcbiAgICAgIHJlc291cmNlUGFnZSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoLFxuICAgIHJvdXRlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIHRvIGFkZCB0eXBlc2NyaXB0IHR5cGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcjxcbiAgVFByZXBhcmVkIGV4dGVuZHMgUHJlcGFyZVJlc3VsdCxcbiAgVFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YSxcbj4ocm91dGU6IFJvdXRlPFRQcmVwYXJlZCwgVFZhcmlhYmxlcz4pOiBSb3V0ZTxUUHJlcGFyZWQsIFRWYXJpYWJsZXM+IHtcbiAgcmV0dXJuIHJvdXRlO1xufVxuIl19
@@ -0,0 +1,86 @@
1
+ import type { ComponentType, ReactElement, ReactNode, JSX } from 'react';
2
+ import type { Match, MatchFunction, ParamData } from 'path-to-regexp';
3
+ import type { FlatRoute } from './builder.js';
4
+ import type { ResourcePage } from './ResourcePage.js';
5
+ import type { BrowserHistory } from './history/index.js';
6
+ export type FlatRouteInput<TVariables extends ParamData> = {
7
+ path: string;
8
+ redirectTo?: string;
9
+ matchFunction: MatchFunction<TVariables>;
10
+ routes: Route<any, any>[];
11
+ };
12
+ export type RouterMatchedRoute<TVariables extends ParamData> = {
13
+ match: Match<TVariables>;
14
+ params: TVariables;
15
+ path: string;
16
+ route: FlatRoute<TVariables>;
17
+ };
18
+ export type RouteReactComponent<TProps = Record<string, unknown>> = (props: TProps) => JSX.Element | null;
19
+ export type RouteRenderOpts<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData> = {
20
+ children: ReactNode;
21
+ Component?: RouteReactComponent;
22
+ prepared: TPrepared | undefined;
23
+ preparedRoute: PreparedMatchRoute;
24
+ route: FlatRoute<TVariables> | null;
25
+ };
26
+ export type RouteRender<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData> = (opts: RouteRenderOpts<TPrepared, TVariables>) => ReactElement<any> | null;
27
+ export type PreparedMatchRoute = {
28
+ path?: string;
29
+ prepared: PrepareResult | undefined;
30
+ render?: RouteRender<any, any>;
31
+ redirectTo: string | null;
32
+ resourcePage?: ResourcePage;
33
+ };
34
+ export type PreparedMatch<TVariables extends ParamData> = {
35
+ match: RouterMatchedRoute<TVariables> | null;
36
+ routes: PreparedMatchRoute[];
37
+ };
38
+ export type RouteEntry<TVariables extends ParamData> = {
39
+ preparedMatch: PreparedMatch<TVariables>;
40
+ location: Location;
41
+ route: RouterMatchedRoute<TVariables> | null;
42
+ forceRerender: boolean;
43
+ };
44
+ export type RouterRedirectStatus = 301 | 302;
45
+ export type MatchedRoute<TVariables extends ParamData> = {
46
+ match: RegExpExecArray;
47
+ route: FlatRoute<TVariables>;
48
+ };
49
+ export type Redirect = {
50
+ path?: string;
51
+ to: string;
52
+ status?: RouterRedirectStatus;
53
+ };
54
+ export type PrepareResult = Record<string, any>;
55
+ export type PrepareParams<TVariables extends ParamData> = {
56
+ match: RouterMatchedRoute<TVariables>;
57
+ matchedRoute: FlatRoute<TVariables>;
58
+ resourcePage?: ResourcePage;
59
+ variables: TVariables;
60
+ };
61
+ export type RoutePrepare<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData> = (params: PrepareParams<TVariables>) => TPrepared;
62
+ export type Route<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData> = {
63
+ children?: (Route<any, any> | Redirect)[];
64
+ resourcePage?: ResourcePage;
65
+ path?: string;
66
+ prepare?: RoutePrepare<TPrepared, TVariables>;
67
+ render?: RouteRender<TPrepared, TVariables>;
68
+ };
69
+ export type RouteComponentProps<TVariables extends ParamData> = {
70
+ children: ReactElement<any>;
71
+ routerContext: RoutingContextType<TVariables>;
72
+ route: Route<any, any>;
73
+ };
74
+ export type SubscribeCallback<TVariables extends ParamData> = (nextEntry: RouteEntry<TVariables>) => void;
75
+ export type RoutingContextType<TVariables extends ParamData> = {
76
+ history: BrowserHistory;
77
+ get: () => RouteEntry<TVariables>;
78
+ preloadCode: (pathname: string) => void;
79
+ preload: (pathname: string) => void;
80
+ subscribe: (callback: SubscribeCallback<TVariables>) => () => void;
81
+ };
82
+ export type ResourcePageReturn = {
83
+ default: ComponentType<any>;
84
+ } | ComponentType<any>;
85
+ export type ResourcePageLoader = () => Promise<ResourcePageReturn>;
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tcG9uZW50VHlwZSwgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIEpTWCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgTWF0Y2gsIE1hdGNoRnVuY3Rpb24sIFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHR5cGUgeyBGbGF0Um91dGUgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZVBhZ2UgfSBmcm9tICcuL1Jlc291cmNlUGFnZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi9oaXN0b3J5L2luZGV4LmpzJztcblxuZXhwb3J0IHR5cGUgRmxhdFJvdXRlSW5wdXQ8VFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YT4gPSB7XG4gIHBhdGg6IHN0cmluZztcbiAgcmVkaXJlY3RUbz86IHN0cmluZztcbiAgbWF0Y2hGdW5jdGlvbjogTWF0Y2hGdW5jdGlvbjxUVmFyaWFibGVzPjtcbiAgcm91dGVzOiBSb3V0ZTxhbnksIGFueT5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlck1hdGNoZWRSb3V0ZTxUVmFyaWFibGVzIGV4dGVuZHMgUGFyYW1EYXRhPiA9IHtcbiAgbWF0Y2g6IE1hdGNoPFRWYXJpYWJsZXM+O1xuICBwYXJhbXM6IFRWYXJpYWJsZXM7XG4gIHBhdGg6IHN0cmluZztcbiAgcm91dGU6IEZsYXRSb3V0ZTxUVmFyaWFibGVzPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVhY3RDb21wb25lbnQ8VFByb3BzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gKFxuICBwcm9wczogVFByb3BzLFxuKSA9PiBKU1guRWxlbWVudCB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFJvdXRlUmVuZGVyT3B0czxcbiAgVFByZXBhcmVkIGV4dGVuZHMgUHJlcGFyZVJlc3VsdCxcbiAgVFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YSxcbj4gPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIENvbXBvbmVudD86IFJvdXRlUmVhY3RDb21wb25lbnQ7XG4gIHByZXBhcmVkOiBUUHJlcGFyZWQgfCB1bmRlZmluZWQ7XG4gIHByZXBhcmVkUm91dGU6IFByZXBhcmVkTWF0Y2hSb3V0ZTtcbiAgcm91dGU6IEZsYXRSb3V0ZTxUVmFyaWFibGVzPiB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0ZVJlbmRlcjxcbiAgVFByZXBhcmVkIGV4dGVuZHMgUHJlcGFyZVJlc3VsdCxcbiAgVFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YSxcbj4gPSAob3B0czogUm91dGVSZW5kZXJPcHRzPFRQcmVwYXJlZCwgVFZhcmlhYmxlcz4pID0+IFJlYWN0RWxlbWVudDxhbnk+IHwgbnVsbDtcblxuZXhwb3J0IHR5cGUgUHJlcGFyZWRNYXRjaFJvdXRlID0ge1xuICBwYXRoPzogc3RyaW5nO1xuICBwcmVwYXJlZDogUHJlcGFyZVJlc3VsdCB8IHVuZGVmaW5lZDtcbiAgcmVuZGVyPzogUm91dGVSZW5kZXI8YW55LCBhbnk+O1xuICByZWRpcmVjdFRvOiBzdHJpbmcgfCBudWxsO1xuICByZXNvdXJjZVBhZ2U/OiBSZXNvdXJjZVBhZ2U7XG59O1xuXG5leHBvcnQgdHlwZSBQcmVwYXJlZE1hdGNoPFRWYXJpYWJsZXMgZXh0ZW5kcyBQYXJhbURhdGE+ID0ge1xuICBtYXRjaDogUm91dGVyTWF0Y2hlZFJvdXRlPFRWYXJpYWJsZXM+IHwgbnVsbDtcbiAgcm91dGVzOiBQcmVwYXJlZE1hdGNoUm91dGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlRW50cnk8VFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YT4gPSB7XG4gIHByZXBhcmVkTWF0Y2g6IFByZXBhcmVkTWF0Y2g8VFZhcmlhYmxlcz47XG4gIGxvY2F0aW9uOiBMb2NhdGlvbjtcbiAgcm91dGU6IFJvdXRlck1hdGNoZWRSb3V0ZTxUVmFyaWFibGVzPiB8IG51bGw7XG4gIGZvcmNlUmVyZW5kZXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0ZXJSZWRpcmVjdFN0YXR1cyA9IDMwMSB8IDMwMjtcblxuZXhwb3J0IHR5cGUgTWF0Y2hlZFJvdXRlPFRWYXJpYWJsZXMgZXh0ZW5kcyBQYXJhbURhdGE+ID0ge1xuICBtYXRjaDogUmVnRXhwRXhlY0FycmF5O1xuICByb3V0ZTogRmxhdFJvdXRlPFRWYXJpYWJsZXM+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVkaXJlY3QgPSB7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHRvOiBzdHJpbmc7XG4gIHN0YXR1cz86IFJvdXRlclJlZGlyZWN0U3RhdHVzO1xufTtcblxuZXhwb3J0IHR5cGUgUHJlcGFyZVJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbmV4cG9ydCB0eXBlIFByZXBhcmVQYXJhbXM8VFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YT4gPSB7XG4gIG1hdGNoOiBSb3V0ZXJNYXRjaGVkUm91dGU8VFZhcmlhYmxlcz47XG4gIG1hdGNoZWRSb3V0ZTogRmxhdFJvdXRlPFRWYXJpYWJsZXM+O1xuICByZXNvdXJjZVBhZ2U/OiBSZXNvdXJjZVBhZ2U7XG4gIHZhcmlhYmxlczogVFZhcmlhYmxlcztcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRlUHJlcGFyZTxcbiAgVFByZXBhcmVkIGV4dGVuZHMgUHJlcGFyZVJlc3VsdCxcbiAgVFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YSxcbj4gPSAocGFyYW1zOiBQcmVwYXJlUGFyYW1zPFRWYXJpYWJsZXM+KSA9PiBUUHJlcGFyZWQ7XG5cbmV4cG9ydCB0eXBlIFJvdXRlPFxuICBUUHJlcGFyZWQgZXh0ZW5kcyBQcmVwYXJlUmVzdWx0LFxuICBUVmFyaWFibGVzIGV4dGVuZHMgUGFyYW1EYXRhID0gUGFyYW1EYXRhLFxuPiA9IHtcbiAgY2hpbGRyZW4/OiAoUm91dGU8YW55LCBhbnk+IHwgUmVkaXJlY3QpW107XG4gIHJlc291cmNlUGFnZT86IFJlc291cmNlUGFnZTtcbiAgcGF0aD86IHN0cmluZztcbiAgcHJlcGFyZT86IFJvdXRlUHJlcGFyZTxUUHJlcGFyZWQsIFRWYXJpYWJsZXM+O1xuICByZW5kZXI/OiBSb3V0ZVJlbmRlcjxUUHJlcGFyZWQsIFRWYXJpYWJsZXM+O1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGVDb21wb25lbnRQcm9wczxUVmFyaWFibGVzIGV4dGVuZHMgUGFyYW1EYXRhPiA9IHtcbiAgY2hpbGRyZW46IFJlYWN0RWxlbWVudDxhbnk+O1xuICByb3V0ZXJDb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8VFZhcmlhYmxlcz47XG4gIHJvdXRlOiBSb3V0ZTxhbnksIGFueT47XG59O1xuXG5leHBvcnQgdHlwZSBTdWJzY3JpYmVDYWxsYmFjazxUVmFyaWFibGVzIGV4dGVuZHMgUGFyYW1EYXRhPiA9IChcbiAgbmV4dEVudHJ5OiBSb3V0ZUVudHJ5PFRWYXJpYWJsZXM+LFxuKSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nQ29udGV4dFR5cGU8VFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YT4gPSB7XG4gIGhpc3Rvcnk6IEJyb3dzZXJIaXN0b3J5O1xuICBnZXQ6ICgpID0+IFJvdXRlRW50cnk8VFZhcmlhYmxlcz47XG4gIHByZWxvYWRDb2RlOiAocGF0aG5hbWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcHJlbG9hZDogKHBhdGhuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHN1YnNjcmliZTogKGNhbGxiYWNrOiBTdWJzY3JpYmVDYWxsYmFjazxUVmFyaWFibGVzPikgPT4gKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlUGFnZVJldHVybiA9XG4gIHwgeyBkZWZhdWx0OiBDb21wb25lbnRUeXBlPGFueT4gfVxuICB8IENvbXBvbmVudFR5cGU8YW55PjtcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VQYWdlTG9hZGVyID0gKCkgPT4gUHJvbWlzZTxSZXNvdXJjZVBhZ2VSZXR1cm4+O1xuIl19