@plumile/router 0.1.52 → 0.1.53

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 (116) hide show
  1. package/lib/ResourcePage.d.ts +12 -0
  2. package/lib/ResourcePage.d.ts.map +1 -0
  3. package/lib/ResourcePage.js +38 -0
  4. package/lib/asyncResource.d.ts +8 -0
  5. package/lib/asyncResource.d.ts.map +1 -0
  6. package/lib/asyncResource.js +101 -0
  7. package/lib/builder.d.ts +13 -0
  8. package/lib/builder.d.ts.map +1 -0
  9. package/lib/builder.js +72 -0
  10. package/lib/errors/HttpRedirect.d.ts +6 -0
  11. package/lib/errors/HttpRedirect.d.ts.map +1 -0
  12. package/lib/errors/HttpRedirect.js +11 -0
  13. package/lib/errors/index.d.ts +2 -0
  14. package/lib/errors/index.d.ts.map +1 -0
  15. package/lib/errors/index.js +2 -0
  16. package/lib/eslint-rules/index.d.ts +2 -0
  17. package/lib/eslint-rules/index.d.ts.map +1 -0
  18. package/lib/eslint-rules/index.js +2 -0
  19. package/lib/eslint-rules/no-direct-window-location-search.d.ts +4 -0
  20. package/lib/eslint-rules/no-direct-window-location-search.d.ts.map +1 -0
  21. package/lib/eslint-rules/no-direct-window-location-search.js +48 -0
  22. package/lib/history/BrowserHistory.d.ts +21 -0
  23. package/lib/history/BrowserHistory.d.ts.map +1 -0
  24. package/lib/history/BrowserHistory.js +139 -0
  25. package/lib/history/index.d.ts +3 -0
  26. package/lib/history/index.d.ts.map +1 -0
  27. package/lib/history/index.js +2 -0
  28. package/lib/history/types.d.ts +19 -0
  29. package/lib/history/types.d.ts.map +1 -0
  30. package/lib/history/types.js +2 -0
  31. package/lib/index.d.ts +10 -0
  32. package/lib/index.d.ts.map +1 -0
  33. package/lib/index.js +9 -0
  34. package/lib/instrumentation/Instrumentation.d.ts +90 -0
  35. package/lib/instrumentation/Instrumentation.d.ts.map +1 -0
  36. package/lib/instrumentation/Instrumentation.js +59 -0
  37. package/lib/instrumentation/adapters/devtoolsBridge.d.ts +14 -0
  38. package/lib/instrumentation/adapters/devtoolsBridge.d.ts.map +1 -0
  39. package/lib/instrumentation/adapters/devtoolsBridge.js +133 -0
  40. package/lib/instrumentation/adapters/logger.d.ts +10 -0
  41. package/lib/instrumentation/adapters/logger.d.ts.map +1 -0
  42. package/lib/instrumentation/adapters/logger.js +19 -0
  43. package/lib/instrumentation/index.d.ts +4 -0
  44. package/lib/instrumentation/index.d.ts.map +1 -0
  45. package/lib/instrumentation/index.js +4 -0
  46. package/lib/prepareResource.d.ts +4 -0
  47. package/lib/prepareResource.d.ts.map +1 -0
  48. package/lib/prepareResource.js +11 -0
  49. package/lib/routing/Link.d.ts +23 -0
  50. package/lib/routing/Link.d.ts.map +1 -0
  51. package/lib/routing/Link.js +158 -0
  52. package/lib/routing/RouteComponent.d.ts +8 -0
  53. package/lib/routing/RouteComponent.d.ts.map +1 -0
  54. package/lib/routing/RouteComponent.js +20 -0
  55. package/lib/routing/RouteComponentWrapper.d.ts +11 -0
  56. package/lib/routing/RouteComponentWrapper.d.ts.map +1 -0
  57. package/lib/routing/RouteComponentWrapper.js +101 -0
  58. package/lib/routing/RouterRenderer.d.ts +10 -0
  59. package/lib/routing/RouterRenderer.d.ts.map +1 -0
  60. package/lib/routing/RouterRenderer.js +67 -0
  61. package/lib/routing/RoutingContext.d.ts +5 -0
  62. package/lib/routing/RoutingContext.d.ts.map +1 -0
  63. package/lib/routing/RoutingContext.js +4 -0
  64. package/lib/routing/createRouter.d.ts +19 -0
  65. package/lib/routing/createRouter.d.ts.map +1 -0
  66. package/lib/routing/createRouter.js +604 -0
  67. package/lib/routing/index.d.ts +16 -0
  68. package/lib/routing/index.d.ts.map +1 -0
  69. package/lib/routing/index.js +16 -0
  70. package/lib/routing/useAllQuery.d.ts +7 -0
  71. package/lib/routing/useAllQuery.d.ts.map +1 -0
  72. package/lib/routing/useAllQuery.js +31 -0
  73. package/lib/routing/useFilterDiagnostics.d.ts +2 -0
  74. package/lib/routing/useFilterDiagnostics.d.ts.map +1 -0
  75. package/lib/routing/useFilterDiagnostics.js +11 -0
  76. package/lib/routing/useFilters.d.ts +8 -0
  77. package/lib/routing/useFilters.d.ts.map +1 -0
  78. package/lib/routing/useFilters.js +65 -0
  79. package/lib/routing/useLocation.d.ts +2 -0
  80. package/lib/routing/useLocation.d.ts.map +1 -0
  81. package/lib/routing/useLocation.js +24 -0
  82. package/lib/routing/useNavigate.d.ts +7 -0
  83. package/lib/routing/useNavigate.d.ts.map +1 -0
  84. package/lib/routing/useNavigate.js +11 -0
  85. package/lib/routing/usePathname.d.ts +2 -0
  86. package/lib/routing/usePathname.d.ts.map +1 -0
  87. package/lib/routing/usePathname.js +9 -0
  88. package/lib/routing/useQuery.d.ts +2 -0
  89. package/lib/routing/useQuery.d.ts.map +1 -0
  90. package/lib/routing/useQuery.js +9 -0
  91. package/lib/routing/useQueryState.d.ts +13 -0
  92. package/lib/routing/useQueryState.d.ts.map +1 -0
  93. package/lib/routing/useQueryState.js +45 -0
  94. package/lib/routing/useSearchParams.d.ts +11 -0
  95. package/lib/routing/useSearchParams.d.ts.map +1 -0
  96. package/lib/routing/useSearchParams.js +67 -0
  97. package/lib/tools/buildCombinedSearch.d.ts +8 -0
  98. package/lib/tools/buildCombinedSearch.d.ts.map +1 -0
  99. package/lib/tools/buildCombinedSearch.js +76 -0
  100. package/lib/tools/index.d.ts +3 -0
  101. package/lib/tools/index.d.ts.map +1 -0
  102. package/lib/tools/index.js +13 -0
  103. package/lib/tools/query.d.ts +2 -0
  104. package/lib/tools/query.d.ts.map +1 -0
  105. package/lib/tools/query.js +43 -0
  106. package/lib/tools.d.ts +15 -0
  107. package/lib/tools.d.ts.map +1 -0
  108. package/lib/tools.js +179 -0
  109. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  110. package/lib/types.d.ts +245 -0
  111. package/lib/types.d.ts.map +1 -0
  112. package/lib/types.js +2 -0
  113. package/lib/values.d.ts +19 -0
  114. package/lib/values.d.ts.map +1 -0
  115. package/lib/values.js +53 -0
  116. package/package.json +2 -2
@@ -0,0 +1,158 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { forwardRef, useEffect, useMemo, } from 'react';
3
+ import { cx } from './../tools/index.js';
4
+ import buildCombinedSearch from '../tools/buildCombinedSearch.js';
5
+ import RoutingContext from './RoutingContext.js';
6
+ const { useCallback, useContext } = React;
7
+ export function isCurrentPathname(exact, history, pathname) {
8
+ if (history == null) {
9
+ return false;
10
+ }
11
+ const resolvedUrl = new URL(pathname, document.location);
12
+ const resolvedPathname = resolvedUrl.pathname;
13
+ if (exact && history.location.pathname === resolvedPathname) {
14
+ return true;
15
+ }
16
+ if (!exact && history.location.pathname.startsWith(resolvedPathname)) {
17
+ return true;
18
+ }
19
+ return false;
20
+ }
21
+ const Link = forwardRef((props, ref) => {
22
+ const router = useContext(RoutingContext);
23
+ const { activeClassName, children, className, exact = false, isDisabled = false, onClick, onFocus, onMouseOver, preloadOnMouseEnter = false, preloadOnMouseDown = true, target, to, href, filters, query, } = props;
24
+ const pathname = useMemo(() => {
25
+ if (isDisabled) {
26
+ return '#';
27
+ }
28
+ let newHref = href;
29
+ if (newHref == null) {
30
+ if (typeof to === 'string') {
31
+ newHref = to;
32
+ }
33
+ else if (to?.pathname != null) {
34
+ newHref = to.pathname;
35
+ }
36
+ }
37
+ newHref ??= '#';
38
+ return newHref;
39
+ }, [href, isDisabled, to]);
40
+ const search = useMemo(() => {
41
+ if (isDisabled) {
42
+ return '';
43
+ }
44
+ if (to != null && typeof to === 'object' && to.search != null) {
45
+ if (to.search === '') {
46
+ return '';
47
+ }
48
+ if (to.search.startsWith('?')) {
49
+ return to.search;
50
+ }
51
+ return `?${to.search}`;
52
+ }
53
+ const filterInput = filters ?? query;
54
+ let rawQueryInput;
55
+ if (filters != null) {
56
+ rawQueryInput = query;
57
+ }
58
+ if (filterInput == null && rawQueryInput == null)
59
+ return '';
60
+ if (router == null)
61
+ return '';
62
+ const entry = router.get();
63
+ return buildCombinedSearch({
64
+ filters: filterInput,
65
+ query: rawQueryInput,
66
+ querySchema: entry.activeQuerySchema,
67
+ });
68
+ }, [filters, isDisabled, query, router, to]);
69
+ const hash = useMemo(() => {
70
+ if (isDisabled) {
71
+ return '';
72
+ }
73
+ if (to != null && typeof to === 'object' && to.hash != null) {
74
+ if (to.hash === '') {
75
+ return '';
76
+ }
77
+ if (to.hash.startsWith('#')) {
78
+ return to.hash;
79
+ }
80
+ return `#${to.hash}`;
81
+ }
82
+ return '';
83
+ }, [isDisabled, to]);
84
+ const initialIsActive = isCurrentPathname(exact, router?.history, pathname);
85
+ const [isActive, setIsActive] = React.useState(initialIsActive);
86
+ useEffect(() => {
87
+ const onChange = () => {
88
+ const newIsActive = isCurrentPathname(exact, router?.history, pathname);
89
+ setIsActive(newIsActive);
90
+ };
91
+ if (router == null) {
92
+ return () => { };
93
+ }
94
+ router.history.subscribe(onChange);
95
+ return () => {
96
+ router.history.unsubscribe(onChange);
97
+ };
98
+ }, [exact, pathname, router]);
99
+ const classNames = [className];
100
+ if (isActive) {
101
+ classNames.push(activeClassName);
102
+ }
103
+ const handleClick = useCallback((event) => {
104
+ if (!isDisabled && typeof onClick === 'function') {
105
+ onClick(event);
106
+ }
107
+ if (event.defaultPrevented ||
108
+ event.metaKey ||
109
+ event.altKey ||
110
+ event.ctrlKey ||
111
+ event.shiftKey ||
112
+ event.button !== 0 ||
113
+ (target != null && target !== '_self')) {
114
+ return;
115
+ }
116
+ event.preventDefault();
117
+ if (router == null || isDisabled) {
118
+ return;
119
+ }
120
+ router.history.push({
121
+ pathname,
122
+ search,
123
+ hash,
124
+ debugContext: {
125
+ origin: 'link-click',
126
+ trigger: 'link',
127
+ },
128
+ });
129
+ }, [hash, isDisabled, onClick, pathname, router, target, search]);
130
+ const handleMouseEnter = useCallback(() => {
131
+ if (router == null || isDisabled) {
132
+ return;
133
+ }
134
+ const target = { pathname, search, source: 'preload-hover' };
135
+ if (preloadOnMouseEnter) {
136
+ router.preload(target);
137
+ }
138
+ else {
139
+ router.preloadCode(target);
140
+ }
141
+ }, [router, isDisabled, preloadOnMouseEnter, pathname, search]);
142
+ const handleMouseDown = useCallback(() => {
143
+ if (router == null || isDisabled || !preloadOnMouseDown) {
144
+ return;
145
+ }
146
+ router.preload({ pathname, search, source: 'link-click' });
147
+ }, [router, isDisabled, preloadOnMouseDown, pathname, search]);
148
+ let hrefValue = pathname;
149
+ if (typeof search === 'string' && search.length > 0) {
150
+ hrefValue = `${pathname}${search}`;
151
+ }
152
+ if (typeof hash === 'string' && hash.length > 0) {
153
+ hrefValue = `${hrefValue}${hash}`;
154
+ }
155
+ return (_jsx("a", { className: cx(classNames), href: hrefValue, onClick: handleClick, onFocus: onFocus, onMouseDown: handleMouseDown, onMouseEnter: handleMouseEnter, onMouseOver: onMouseOver, ref: ref, target: target, children: children }));
156
+ });
157
+ export default Link;
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb3V0aW5nL0xpbmsudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtBQUssRUFBRSxFQUlaLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sT0FBTyxDQUFDO0FBSWYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFFbEUsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFHakQsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFLMUMsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixLQUFjLEVBQ2QsT0FBbUMsRUFDbkMsUUFBZ0I7SUFFaEIsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBR0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV6RCxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFFOUMsSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBZ0VELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBMkIsQ0FBQyxLQUFZLEVBQUUsR0FBRyxFQUFFLEVBQUU7SUFDdEUsTUFBTSxN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QUFHLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLENBQ0wsWUFDRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUN6QixJQUFJLEVBQUUsU0FBUyxFQUNmLE9BQU8sRUFBRSxXQUFXLEVBQ3BCLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFdBQVcsRUFBRSxlQUFlLEVBQzVCLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsR0FBRyxFQUFFLEdBQUcsRUFDUixNQUFNLEVBQUUsTUFBTSxZQUViLFFBQVEsR0FDUCxDQUNMLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILGVBQWUsSUFBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gIHR5cGUgSFRNTEF0dHJpYnV0ZUFuY2hvclRhcmdldCxcbiAgdHlwZSBNb3VzZUV2ZW50LFxuICB0eXBlIFJlYWN0Tm9kZSxcbiAgZm9yd2FyZFJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxufSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgQnJvd3Nlckhpc3RvcnksIEhpc3RvcnlMb2NhdGlvbiB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuXG5pbXBvcnQgeyBjeCB9IGZyb20gJy4vLi4vdG9vbHMvaW5kZXguanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5cbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbi8vIChmaWx0ZXItcXVlcnkgc3RyaW5naWZ5IG5vdCB1c2VkIGhlcmUgYWZ0ZXIgc2ltcGxpZnlpbmcgbWFudWFsIHNlcmlhbGl6YXRpb24pXG5cbmNvbnN0IHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSA9IFJlYWN0O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IHBhdGhuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdGhuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyZW50UGF0aG5hbWUoXG4gIGV4YWN0OiBib29sZWFuLFxuICBoaXN0b3J5OiBCcm93c2VySGlzdG9yeSB8IHVuZGVmaW5lZCxcbiAgcGF0aG5hbWU6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBpZiAoaGlzdG9yeSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogT0tcbiAgY29uc3QgcmVzb2x2ZWRVcmwgPSBuZXcgVVJMKHBhdGhuYW1lLCBkb2N1bWVudC5sb2NhdGlvbik7XG5cbiAgY29uc3QgcmVzb2x2ZWRQYXRobmFtZSA9IHJlc29sdmVkVXJsLnBhdGhuYW1lO1xuXG4gIGlmIChleGFjdCAmJiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lID09PSByZXNvbHZlZFBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWV4YWN0ICYmIGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChyZXNvbHZlZFBhdGhuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgTGluayBjb21wb25lbnQuXG4gKi9cbnR5cGUgUHJvcHM8XG4gIFRGaWx0ZXJzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVFJhd1F1ZXJ5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPSB7XG4gIC8qKiBDU1MgY2xhc3MgdG8gYXBwbHkgd2hlbiB0aGUgbGluayBpcyBhY3RpdmUgKG1hdGNoZXMgY3VycmVudCByb3V0ZSkgKi9cbiAgYWN0aXZlQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogQ2hpbGQgY29tcG9uZW50cyB0byByZW5kZXIgaW5zaWRlIHRoZSBsaW5rICovXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIC8qKiBCYXNlIENTUyBjbGFzcyBmb3IgdGhlIGxpbmsgKi9cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKiogV2hldGhlciB0byB1c2UgZXhhY3QgcGF0aCBtYXRjaGluZyBmb3IgYWN0aXZlIHN0YXRlICovXG4gIGV4YWN0PzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdG8gcHJlbG9hZCB0aGUgcm91dGUgd2hlbiBtb3VzZSBlbnRlcnMgdGhlIGxpbmsgKi9cbiAgcHJlbG9hZE9uTW91c2VFbnRlcj86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRvIHByZWxvYWQgdGhlIHJvdXRlIHdoZW4gbW91c2UgaXMgcHJlc3NlZCBkb3duICovXG4gIHByZWxvYWRPbk1vdXNlRG93bj86IGJvb2xlYW47XG4gIC8qKiBEaXJlY3QgaHJlZiBhdHRyaWJ1dGUgKG92ZXJyaWRlcyAndG8nIHByb3ApICovXG4gIGhyZWY/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBsaW5rIHNob3VsZCBiZSBkaXNhYmxlZCAqL1xuICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIENsaWNrIGhhbmRsZXIgKi9cbiAgb25DbGljaz86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PjtcbiAgLyoqIEZvY3VzIGhhbmRsZXIgKi9cbiAgb25Gb2N1cz86IFJlYWN0LkZvY3VzRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PjtcbiAgLyoqIE1vdXNlIG92ZXIgaGFuZGxlciAqL1xuICBvbk1vdXNlT3Zlcj86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PjtcbiAgLyoqIFRhcmdldCBhdHRyaWJ1dGUgZm9yIHRoZSBsaW5rICovXG4gIHRhcmdldD86IEhUTUxBdHRyaWJ1dGVBbmNob3JUYXJnZXQ7XG4gIC8qKiBEZXN0aW5hdGlvbiBmb3IgdGhlIGxpbmsgKGNhbiBiZSBzdHJpbmcgcGF0aCBvciBsb2NhdGlvbiBvYmplY3QpICovXG4gIHRvPzogSGlzdG9yeUxvY2F0aW9uIHwgc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgZmlsdGVycyBvYmplY3QgdG8gc2VyaWFsaXplIHVzaW5nIGRlc3RpbmF0aW9uIHJvdXRlIHNjaGVtYSAoaWdub3JlZCBpZiBgdG8uc2VhcmNoYCBpcyBzZXQpICovXG4gIGZpbHRlcnM/OiBURmlsdGVycztcbiAgLyoqIE9wdGlvbmFsIHJhdyBxdWVyeSBwYXJhbXMgKG5vbi1zY2hlbWEga2V5cykgdG8gbWVyZ2UgKGlnbm9yZWQgaWYgYHRvLnNlYXJjaGAgaXMgc2V0KSAqL1xuICBxdWVyeT86IFRSYXdRdWVyeTtcbn07XG5cbi8qKlxuICogTmF2aWdhdGlvbiBjb21wb25lbnQgdGhhdCBwcm92aWRlcyBjbGllbnQtc2lkZSByb3V0aW5nIHdpdGggcHJlbG9hZGluZyBjYXBhYmlsaXRpZXMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIHRoZSByb3V0ZXIncyBSb3V0aW5nQ29udGV4dCB0byBwcm92aWRlIHNtb290aCBuYXZpZ2F0aW9uXG4gKiB3aXRoIG9wdGlvbmFsIHByZWxvYWRpbmcgb2Ygcm91dGUgY29tcG9uZW50cyBhbmQgZGF0YS4gSXQgYXV0b21hdGljYWxseSBhcHBsaWVzIGFjdGl2ZVxuICogc3R5bGluZyB3aGVuIHRoZSBjdXJyZW50IHJvdXRlIG1hdGNoZXMgdGhlIGxpbmsncyBkZXN0aW5hdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiAvLyBCYXNpYyB1c2FnZVxuICogPExpbmsgdG89XCIvdXNlcnMvMTIzXCI+VmlldyBQcm9maWxlPC9MaW5rPlxuICpcbiAqIC8vIFdpdGggYWN0aXZlIHN0eWxpbmdcbiAqIDxMaW5rIHRvPVwiL2Rhc2hib2FyZFwiIGFjdGl2ZUNsYXNzTmFtZT1cImFjdGl2ZVwiIGV4YWN0PlxuICogICBEYXNoYm9hcmRcbiAqIDwvTGluaz5cbiAqXG4gKiAvLyBXaXRoIHByZWxvYWRpbmcgb24gaG92ZXJcbiAqIDxMaW5rIHRvPVwiL2hlYXZ5LXBhZ2VcIiBwcmVsb2FkT25Nb3VzZUVudGVyPlxuICogICBIZWF2eSBQYWdlXG4gKiA8L0xpbms+XG4gKiBgYGBcbiAqL1xuY29uc3QgTGluayA9IGZvcndhcmRSZWY8SFRNTEFuY2hvckVsZW1lbnQsIFByb3BzPigocHJvcHM6IFByb3BzLCByZWYpID0+IHtcbiAgY29uc3Qgcm91dGVyID0gdXNlQ29udGV4dChSb3V0aW5nQ29udGV4dCk7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVDbGFzc05hbWUsXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGV4YWN0ID0gZmFsc2UsXG4gICAgaXNEaXNhYmxlZCA9IGZhbHNlLFxuICAgIG9uQ2xpY2ssXG4gICAgb25Gb2N1cyxcbiAgICBvbk1vdXNlT3ZlcixcbiAgICBwcmVsb2FkT25Nb3VzZUVudGVyID0gZmFsc2UsXG4gICAgcHJlbG9hZE9uTW91c2VEb3duID0gdHJ1ZSxcbiAgICB0YXJnZXQsXG4gICAgdG8sXG4gICAgaHJlZixcbiAgICBmaWx0ZXJzLFxuICAgIHF1ZXJ5LFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuICcjJztcbiAgICB9XG5cbiAgICBsZXQgbmV3SHJlZiA9IGhyZWY7XG5cbiAgICBpZiAobmV3SHJlZiA9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIHRvID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXdIcmVmID0gdG87XG4gICAgICB9IGVsc2UgaWYgKHRvPy5wYXRobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld0hyZWYgPSB0by5wYXRobmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdIcmVmID8/PSAnIyc7XG5cbiAgICByZXR1cm4gbmV3SHJlZjtcbiAgfSwgW2hyZWYsIGlzRGlzYWJsZWQsIHRvXSk7XG5cbiAgLy8gUmVzb2x2ZSBzZWFyY2ggc3RyaW5nIGZyb20gZXhwbGljaXQgYHRvLnNlYXJjaGAgb3IgZnJvbSBwcm92aWRlZCBxdWVyeVxuICAvLyB0cmVhdGVkIGFzIGZpbHRlcnMgd2l0aCB0aGUgYWN0aXZlIHNjaGVtYS5cbiAgY29uc3Qgc2VhcmNoID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgaWYgKHRvICE9IG51bGwgJiYgdHlwZW9mIHRvID09PSAnb2JqZWN0JyAmJiB0by5zZWFyY2ggIT0gbnVsbCkge1xuICAgICAgaWYgKHRvLnNlYXJjaCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgaWYgKHRvLnNlYXJjaC5zdGFydHNXaXRoKCc/JykpIHtcbiAgICAgICAgcmV0dXJuIHRvLnNlYXJjaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBgPyR7dG8uc2VhcmNofWA7XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlcklucHV0ID0gZmlsdGVycyA/PyBxdWVyeTtcbiAgICBsZXQgcmF3UXVlcnlJbnB1dDogdHlwZW9mIHF1ZXJ5IHwgdW5kZWZpbmVkO1xuICAgIGlmIChmaWx0ZXJzICE9IG51bGwpIHtcbiAgICAgIHJhd1F1ZXJ5SW5wdXQgPSBxdWVyeTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcklucHV0ID09IG51bGwgJiYgcmF3UXVlcnlJbnB1dCA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKHJvdXRlciA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZW50cnkgPSByb3V0ZXIuZ2V0KCk7XG4gICAgcmV0dXJuIGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgZmlsdGVyczogZmlsdGVySW5wdXQgYXMgYW55LFxuICAgICAgcXVlcnk6IHJhd1F1ZXJ5SW5wdXQgYXMgYW55LFxuICAgICAgcXVlcnlTY2hlbWE6IGVudHJ5LmFjdGl2ZVF1ZXJ5U2NoZW1hIGFzIGFueSxcbiAgICB9KTtcbiAgfSwgW2ZpbHRlcnMsIGlzRGlzYWJsZWQsIHF1ZXJ5LCByb3V0ZXIsIHRvXSk7XG5cbiAgY29uc3QgaGFzaCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGlmICh0byAhPSBudWxsICYmIHR5cGVvZiB0byA9PT0gJ29iamVjdCcgJiYgdG8uaGFzaCAhPSBudWxsKSB7XG4gICAgICBpZiAodG8uaGFzaCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgaWYgKHRvLmhhc2guc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgIHJldHVybiB0by5oYXNoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAjJHt0by5oYXNofWA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSwgW2lzRGlzYWJsZWQsIHRvXSk7XG5cbiAgY29uc3QgaW5pdGlhbElzQWN0aXZlID0gaXNDdXJyZW50UGF0aG5hbWUoZXhhY3QsIHJvdXRlcj8uaGlzdG9yeSwgcGF0aG5hbWUpO1xuICBjb25zdCBbaXNBY3RpdmUsIHNldElzQWN0aXZlXSA9IFJlYWN0LnVzZVN0YXRlKGluaXRpYWxJc0FjdGl2ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG5ld0lzQWN0aXZlID0gaXNDdXJyZW50UGF0aG5hbWUoZXhhY3QsIHJvdXRlcj8uaGlzdG9yeSwgcGF0aG5hbWUpO1xuICAgICAgc2V0SXNBY3RpdmUobmV3SXNBY3RpdmUpO1xuICAgIH07XG5cbiAgICBpZiAocm91dGVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICB9XG5cbiAgICByb3V0ZXIuaGlzdG9yeS5zdWJzY3JpYmUob25DaGFuZ2UpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJvdXRlci5oaXN0b3J5LnVuc3Vic2NyaWJlKG9uQ2hhbmdlKTtcbiAgICB9O1xuICB9LCBbZXhhY3QsIHBhdGhuYW1lLCByb3V0ZXJdKTtcblxuICBjb25zdCBjbGFzc05hbWVzID0gW2NsYXNzTmFtZV07XG5cbiAgaWYgKGlzQWN0aXZlKSB7XG4gICAgY2xhc3NOYW1lcy5wdXNoKGFjdGl2ZUNsYXNzTmFtZSk7XG4gIH1cblxuICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcywgY2hhbmdlIHJvdXRlXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBNb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFpc0Rpc2FibGVkICYmIHR5cGVvZiBvbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHxcbiAgICAgICAgZXZlbnQubWV0YUtleSB8fFxuICAgICAgICBldmVudC5hbHRLZXkgfHxcbiAgICAgICAgZXZlbnQuY3RybEtleSB8fFxuICAgICAgICBldmVudC5zaGlmdEtleSB8fFxuICAgICAgICBldmVudC5idXR0b24gIT09IDAgfHxcbiAgICAgICAgKHRhcmdldCAhPSBudWxsICYmIHRhcmdldCAhPT0gJ19zZWxmJylcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAocm91dGVyID09IG51bGwgfHwgaXNEaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJvdXRlci5oaXN0b3J5LnB1c2goe1xuICAgICAgICBwYXRobmFtZSxcbiAgICAgICAgc2VhcmNoLFxuICAgICAgICBoYXNoLFxuICAgICAgICBkZWJ1Z0NvbnRleHQ6IHtcbiAgICAgICAgICBvcmlnaW46ICdsaW5rLWNsaWNrJyxcbiAgICAgICAgICB0cmlnZ2VyOiAnbGluaycsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtoYXNoLCBpc0Rpc2FibGVkLCBvbkNsaWNrLCBwYXRobmFtZSwgcm91dGVyLCB0YXJnZXQsIHNlYXJjaF0sXG4gICk7XG5cbiAgLy8gQ2FsbGJhY2sgdG8gcHJlbG9hZCBqdXN0IHRoZSBjb2RlIGZvciB0aGUgcm91dGU6XG4gIC8vIHdlIHBhc3MgdGhpcyB0byBvbk1vdXNlRW50ZXIsIHdoaWNoIGlzIGEgd2Vha2VyIHNpZ25hbFxuICAvLyB0aGF0IHRoZSB1c2VyICptYXkqIG5hdmlnYXRlIHRvIHRoZSByb3V0ZS5cbiAgY29uc3QgaGFuZGxlTW91c2VFbnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAocm91dGVyID09IG51bGwgfHwgaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IHsgcGF0aG5hbWUsIHNlYXJjaCwgc291cmNlOiAncHJlbG9hZC1ob3ZlcicgfSBhcyBjb25zdDtcbiAgICBpZiAocHJlbG9hZE9uTW91c2VFbnRlcikge1xuICAgICAgcm91dGVyLnByZWxvYWQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm91dGVyLnByZWxvYWRDb2RlKHRhcmdldCk7XG4gICAgfVxuICB9LCBbcm91dGVyLCBpc0Rpc2FibGVkLCBwcmVsb2FkT25Nb3VzZUVudGVyLCBwYXRobmFtZSwgc2VhcmNoXSk7XG5cbiAgLy8gQ2FsbGJhY2sgdG8gcHJlbG9hZCB0aGUgY29kZSBhbmQgZGF0YSBmb3IgdGhlIHJvdXRlOlxuICAvLyB3ZSBwYXNzIHRoaXMgdG8gb25Nb3VzZURvd24sIHNpbmNlIHRoaXMgaXMgYSBzdHJvbmdlclxuICAvLyBzaWduYWwgdGhhdCB0aGUgdXNlciB3aWxsIGxpa2VseSBjb21wbGV0ZSB0aGUgbmF2aWdhdGlvblxuICBjb25zdCBoYW5kbGVNb3VzZURvd24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHJvdXRlciA9PSBudWxsIHx8IGlzRGlzYWJsZWQgfHwgIXByZWxvYWRPbk1vdXNlRG93bikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByb3V0ZXIucHJlbG9hZCh7IHBhdGhuYW1lLCBzZWFyY2gsIHNvdXJjZTogJ2xpbmstY2xpY2snIH0pO1xuICB9LCBbcm91dGVyLCBpc0Rpc2FibGVkLCBwcmVsb2FkT25Nb3VzZURvd24sIHBhdGhuYW1lLCBzZWFyY2hdKTtcblxuICBsZXQgaHJlZlZhbHVlID0gcGF0aG5hbWU7XG4gIGlmICh0eXBlb2Ygc2VhcmNoID09PSAnc3RyaW5nJyAmJiBzZWFyY2gubGVuZ3RoID4gMCkge1xuICAgIGhyZWZWYWx1ZSA9IGAke3BhdGhuYW1lfSR7c2VhcmNofWA7XG4gIH1cbiAgaWYgKHR5cGVvZiBoYXNoID09PSAnc3RyaW5nJyAmJiBoYXNoLmxlbmd0aCA+IDApIHtcbiAgICBocmVmVmFsdWUgPSBgJHtocmVmVmFsdWV9JHtoYXNofWA7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgY2xhc3NOYW1lPXtjeChjbGFzc05hbWVzKX1cbiAgICAgIGhyZWY9e2hyZWZWYWx1ZX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgIG9uTW91c2VEb3duPXtoYW5kbGVNb3VzZURvd259XG4gICAgICBvbk1vdXNlRW50ZXI9e2hhbmRsZU1vdXNlRW50ZXJ9XG4gICAgICBvbk1vdXNlT3Zlcj17b25Nb3VzZU92ZXJ9XG4gICAgICByZWY9e3JlZn1cbiAgICAgIHRhcmdldD17dGFyZ2V0fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgTGluaztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ type Props = {
3
+ content?: ReactNode;
4
+ redirectToPathname: string | null;
5
+ };
6
+ declare const RouteComponent: (props: Props) => ReactNode;
7
+ export default RouteComponent;
8
+ //# sourceMappingURL=RouteComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteComponent.d.ts","sourceRoot":"","sources":["../../src/routing/RouteComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,OAAO,CAAC;AAI9D,KAAK,KAAK,GAAG;IACX,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAaF,QAAA,MAAM,cAAc,GAAI,OAAO,KAAK,KAAG,SAqBtC,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { useContext, useEffect } from 'react';
2
+ import RoutingContext from './RoutingContext.js';
3
+ const RouteComponent = (props) => {
4
+ const { content, redirectToPathname } = props;
5
+ const router = useContext(RoutingContext);
6
+ useEffect(() => {
7
+ if (router == null) {
8
+ return;
9
+ }
10
+ if (redirectToPathname == null) {
11
+ return;
12
+ }
13
+ router.history.set({
14
+ pathname: redirectToPathname,
15
+ });
16
+ }, [redirectToPathname, router]);
17
+ return content ?? null;
18
+ };
19
+ export default RouteComponent;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVDb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGluZy9Sb3V0ZUNvbXBvbmVudC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTlELE9BQU8sY0FBYyxNQUFNLHFCQUFxQixDQUFDO0FBa0JqRCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQVksRUFBYSxFQUFFO0lBQ2pELE1BQU0sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFOUMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksa0JBQWtCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNqQixRQUFRLEVBQUUsa0JBQWtCO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFHakMsT0FBTyxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUVGLGVBQWUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBSZWFjdE5vZGUsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IFJvdXRpbmdDb250ZXh0IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuXG50eXBlIFByb3BzID0ge1xuICBjb250ZW50PzogUmVhY3ROb2RlO1xuICByZWRpcmVjdFRvUGF0aG5hbWU6IHN0cmluZyB8IG51bGw7XG59O1xuXG4vKipcbiAqIFRoZSBgcmVzb3VyY2VQYWdlYCBwcm9wZXJ0eSBmcm9tIHRoZSByb3V0ZSBlbnRyeSBpcyBhIFJlc291cmNlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSByZWFkeS5cbiAqIFdlIHVzZSBhIGhlbHBlciBjaGlsZCBjb21wb25lbnQgdG8gdW53cmFwIHRoZSByZXNvdXJjZSB3aXRoIGNvbXBvbmVudC5yZWFkKCksIGFuZCB0aGVuXG4gKiByZW5kZXIgaXQgaWYgaXRzIHJlYWR5LlxuICpcbiAqIE5PVEU6IGNhbGxpbmcgcm91dGVFbnRyeS5yb3V0ZS5jb21wb25lbnQucmVhZCgpIGRpcmVjdGx5IGluIFJvdXRlUmVuZGVyZXIgd29sZG4ndCB3b3JrIHRoZVxuICogd2F5IHdlJ2QgZXhwZWN0LiBCZWNhdXNlIHRoYXQgbWV0aG9kIGNvdWxkIHRocm93IC0gZWl0aGVyIHN1c3BlbmRpbmcgb3Igb24gZXJyb3IgLSB0aGUgZXJyb3JcbiAqIHdvdWxkIGJ1YmJsZSB1cCB0byB0aGUgKmNhbGxlciogb2YgUm91dGVSZW5kZXJlci4gV2Ugd2FudCB0aGUgc3VzcGVuZC9lcnJvciB0byBidWJibGUgdXAgdG9cbiAqIG91ciBFcnJvckJvdW5kYXJ5L1N1c3BlbnNlIGNvbXBvbmVudHMsIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHN1c3BlbmQvZXJyb3IgaGFwcGVuc1xuICogaW4gYSBjaGlsZCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFJvdXRlQ29tcG9uZW50ID0gKHByb3BzOiBQcm9wcyk6IFJlYWN0Tm9kZSA9PiB7XG4gIGNvbnN0IHsgY29udGVudCwgcmVkaXJlY3RUb1BhdGhuYW1lIH0gPSBwcm9wcztcblxuICBjb25zdCByb3V0ZXIgPSB1c2VDb250ZXh0KFJvdXRpbmdDb250ZXh0KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyb3V0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChyZWRpcmVjdFRvUGF0aG5hbWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvdXRlci5oaXN0b3J5LnNldCh7XG4gICAgICBwYXRobmFtZTogcmVkaXJlY3RUb1BhdGhuYW1lLFxuICAgIH0pO1xuICB9LCBbcmVkaXJlY3RUb1BhdGhuYW1lLCByb3V0ZXJdKTtcblxuICAvLyBUT0RPOiBIYW5kbGUgU3VzcGVuc2UvbG9hZGVyXG4gIHJldHVybiBjb250ZW50ID8/IG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZUNvbXBvbmVudDtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { type JSX, type ReactNode } from 'react';
2
+ import type { PreparedMatchRoute, RouterMatchedRoute } from '../types.js';
3
+ import type { ParamData } from 'path-to-regexp';
4
+ type Props<TVars extends ParamData = ParamData> = {
5
+ children?: ReactNode;
6
+ match: RouterMatchedRoute<TVars> | null;
7
+ preparedRoute: PreparedMatchRoute;
8
+ };
9
+ declare const RouteComponentWrapper: <TVars extends ParamData = ParamData>(props: Props<TVars>) => JSX.Element | null;
10
+ export default RouteComponentWrapper;
11
+ //# sourceMappingURL=RouteComponentWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouteComponentWrapper.d.ts","sourceRoot":"","sources":["../../src/routing/RouteComponentWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAkChD,KAAK,KAAK,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACxC,aAAa,EAAE,kBAAkB,CAAC;CACnC,CAAC;AAaF,QAAA,MAAM,qBAAqB,GAAI,KAAK,SAAS,SAAS,GAAG,SAAS,EAChE,OAAO,KAAK,CAAC,KAAK,CAAC,KAClB,GAAG,CAAC,OAAO,GAAG,IAgIhB,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } 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
+ import { readPreparedRouteValue } from '../prepareResource.js';
7
+ function RouteHighlightBoundary(props) {
8
+ const { highlightId, children } = props;
9
+ return (_jsxs(_Fragment, { children: [_jsx("span", { "data-plumile-route-start": highlightId, "aria-hidden": "true", style: { display: 'none' } }), children, _jsx("span", { "data-plumile-route-end": highlightId, "aria-hidden": "true", style: { display: 'none' } })] }));
10
+ }
11
+ const RouteComponentWrapper = (props) => {
12
+ const { children, match, preparedRoute } = props;
13
+ const { resourcePage, preparedResource, render, redirectTo, highlightId } = preparedRoute;
14
+ const router = useContext(RoutingContext);
15
+ const currentEntry = router?.get();
16
+ const rawQuery = currentEntry?.query ?? {};
17
+ const routeContext = currentEntry?.context;
18
+ const typedQuery = rawQuery;
19
+ const preparedSegments = currentEntry?.preparedMatch.segments ?? [];
20
+ const { segmentIndex } = preparedRoute;
21
+ const leafSegment = preparedSegments.at(-1) ?? preparedRoute;
22
+ const route = useMemo(() => {
23
+ if (match == null) {
24
+ return null;
25
+ }
26
+ return match.route;
27
+ }, [match]);
28
+ const prepared = useMemo(() => {
29
+ return readPreparedRouteValue(preparedResource);
30
+ }, [preparedResource]);
31
+ const Component = useMemo(() => {
32
+ if (resourcePage == null) {
33
+ return;
34
+ }
35
+ return resourcePage.read();
36
+ }, [resourcePage]);
37
+ let content = null;
38
+ let redirectToPathname = null;
39
+ if (render != null) {
40
+ try {
41
+ content = render({
42
+ children,
43
+ Component,
44
+ preparedSegment: preparedRoute,
45
+ preparedRoute,
46
+ preparedSegments,
47
+ segmentIndex,
48
+ leafSegment,
49
+ route,
50
+ prepared,
51
+ context: routeContext,
52
+ rawQuery,
53
+ query: typedQuery,
54
+ });
55
+ }
56
+ catch (error) {
57
+ if (error instanceof HttpRedirect && router != null) {
58
+ content = null;
59
+ redirectToPathname = error.redirectTo;
60
+ }
61
+ else if (error instanceof Promise) {
62
+ content = error;
63
+ }
64
+ else if (typeof error === 'undefined') {
65
+ content = undefined;
66
+ redirectToPathname = null;
67
+ }
68
+ else {
69
+ console.error('ERROR: ', error);
70
+ content = null;
71
+ redirectToPathname = null;
72
+ }
73
+ }
74
+ }
75
+ const pathname = redirectTo ?? redirectToPathname ?? null;
76
+ const wrapWithHighlight = (node) => {
77
+ if (typeof highlightId !== 'string') {
78
+ return _jsx(_Fragment, { children: node });
79
+ }
80
+ return (_jsx(RouteHighlightBoundary, { highlightId: highlightId, children: node }));
81
+ };
82
+ if (render != null) {
83
+ if (content instanceof Promise) {
84
+ throw content;
85
+ }
86
+ if (pathname != null) {
87
+ return _jsx(RouteComponent, { redirectToPathname: pathname });
88
+ }
89
+ if (typeof content !== 'undefined') {
90
+ return wrapWithHighlight(content ?? null);
91
+ }
92
+ }
93
+ if (Component == null) {
94
+ return null;
95
+ }
96
+ const componentNode = (_jsx(Component, { match: match, preparedRoute: preparedRoute, route: route, prepared: prepared, query: typedQuery, preparedSegments: preparedSegments, segmentIndex: segmentIndex, leafSegment: leafSegment, children: children }));
97
+ const content2 = wrapWithHighlight(componentNode);
98
+ return _jsx(RouteComponent, { redirectToPathname: pathname, content: content2 });
99
+ };
100
+ export default RouteComponentWrapper;
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVDb21wb25lbnRXcmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRpbmcvUm91dGVDb21wb25lbnRXcmFwcGVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQTRCLE1BQU0sT0FBTyxDQUFDO0FBSXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVUvRCxTQUFTLHNCQUFzQixDQUFDLEtBQTZCO0lBQzNELE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLE9BQU8sQ0FDTCw4QkFDRSwyQ0FDNEIsV0FBVyxpQkFDekIsTUFBTSxFQUNsQixLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQzFCLEVBQ0QsUUFBUSxFQUNULHlDQUMwQixXQUFXLGlCQUN2QixNQUFNLEVBQ2xCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FDMUIsSUFDRCxDQUNKLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsS0FBbUIsRUFDQyxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNqRCxNQUFNLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQ3ZFLGFBQWEsQ0FBQztJQUNoQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFF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dHlwZSBKU1gsIHR5cGUgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFByZXBhcmVkTWF0Y2hSb3V0ZSwgUm91dGVyTWF0Y2hlZFJvdXRlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQgeyBIdHRwUmVkaXJlY3QgfSBmcm9tICcuLi9lcnJvcnMvaW5kZXguanMnO1xuXG5pbXBvcnQgUm91dGluZ0NvbnRleHQgZnJvbSAnLi9Sb3V0aW5nQ29udGV4dC5qcyc7XG5pbXBvcnQgUm91dGVDb21wb25lbnQgZnJvbSAnLi9Sb3V0ZUNvbXBvbmVudC5qcyc7XG5pbXBvcnQgeyByZWFkUHJlcGFyZWRSb3V0ZVZhbHVlIH0gZnJvbSAnLi4vcHJlcGFyZVJlc291cmNlLmpzJztcblxudHlwZSBIaWdobGlnaHRCb3VuZGFyeVByb3BzID0ge1xuICBoaWdobGlnaHRJZDogc3RyaW5nO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBXcmFwcyB0aGUgcmVuZGVyZWQgcm91dGUgb3V0cHV0IHdpdGggaW52aXNpYmxlIG1hcmtlcnMgc28gRGV2VG9vbHMgY2FuIG1hcCBpdCBiYWNrLlxuICovXG5mdW5jdGlvbiBSb3V0ZUhpZ2hsaWdodEJvdW5kYXJ5KHByb3BzOiBIaWdobGlnaHRCb3VuZGFyeVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGhpZ2hsaWdodElkLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1zdGFydD17aGlnaGxpZ2h0SWR9XG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxzcGFuXG4gICAgICAgIGRhdGEtcGx1bWlsZS1yb3V0ZS1lbmQ9e2hpZ2hsaWdodElkfVxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59XG5cbnR5cGUgUHJvcHM8VFZhcnMgZXh0ZW5kcyBQYXJhbURhdGEgPSBQYXJhbURhdGE+ID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgbWF0Y2g6IFJvdXRlck1hdGNoZWRSb3V0ZTxUVmFycz4gfCBudWxsO1xuICBwcmVwYXJlZFJvdXRlOiBQcmVwYXJlZE1hdGNoUm91dGU7XG59O1xuXG4vKipcbiAqIFRoZSBgcmVzb3VyY2VQYWdlYCBwcm9wZXJ0eSBmcm9tIHRoZSByb3V0ZSBlbnRyeSBpcyBhIFJlc291cmNlLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSByZWFkeS5cbiAqIFdlIHVzZSBhIGhlbHBlciBjaGlsZCBjb21wb25lbnQgdG8gdW53cmFwIHRoZSByZXNvdXJjZSB3aXRoIGNvbXBvbmVudC5yZWFkKCksIGFuZCB0aGVuXG4gKiByZW5kZXIgaXQgaWYgaXRzIHJlYWR5LlxuICpcbiAqIE5PVEU6IGNhbGxpbmcgcm91dGVFbnRyeS5yb3V0ZS5jb21wb25lbnQucmVhZCgpIGRpcmVjdGx5IGluIFJvdXRlUmVuZGVyZXIgd29sZG4ndCB3b3JrIHRoZVxuICogd2F5IHdlJ2QgZXhwZWN0LiBCZWNhdXNlIHRoYXQgbWV0aG9kIGNvdWxkIHRocm93IC0gZWl0aGVyIHN1c3BlbmRpbmcgb3Igb24gZXJyb3IgLSB0aGUgZXJyb3JcbiAqIHdvdWxkIGJ1YmJsZSB1cCB0byB0aGUgKmNhbGxlciogb2YgUm91dGVSZW5kZXJlci4gV2Ugd2FudCB0aGUgc3VzcGVuZC9lcnJvciB0byBidWJibGUgdXAgdG9cbiAqIG91ciBFcnJvckJvdW5kYXJ5L1N1c3BlbnNlIGNvbXBvbmVudHMsIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHN1c3BlbmQvZXJyb3IgaGFwcGVuc1xuICogaW4gYSBjaGlsZCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IFJvdXRlQ29tcG9uZW50V3JhcHBlciA9IDxUVmFycyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YT4oXG4gIHByb3BzOiBQcm9wczxUVmFycz4sXG4pOiBKU1guRWxlbWVudCB8IG51bGwgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBtYXRjaCwgcHJlcGFyZWRSb3V0ZSB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgcmVzb3VyY2VQYWdlLCBwcmVwYXJlZFJlc291cmNlLCByZW5kZXIsIHJlZGlyZWN0VG8sIGhpZ2hsaWdodElkIH0gPVxuICAgIHByZXBhcmVkUm91dGU7IC8vIHJvdXRlRGF0YVxuICBjb25zdCByb3V0ZXIgPSB1c2VDb250ZXh0KFJvdXRpbmdDb250ZXh0KTtcbiAgY29uc3QgY3VycmVudEVudHJ5ID0gcm91dGVyPy5nZXQoKTtcbiAgY29uc3QgcmF3UXVlcnkgPSBjdXJyZW50RW50cnk/LnF1ZXJ5ID8/IHt9O1xuICBjb25zdCByb3V0ZUNvbnRleHQgPSBjdXJyZW50RW50cnk/LmNvbnRleHQ7XG4gIGNvbnN0IHR5cGVkUXVlcnkgPSByYXdRdWVyeTsgLy8gbGVnYWN5IHR5cGVkUXVlcnkgcmVtb3ZlZFxuICBjb25zdCBwcmVwYXJlZFNlZ21lbnRzID0gY3VycmVudEVudHJ5Py5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzID8/IFtdO1xuICBjb25zdCB7IHNlZ21lbnRJbmRleCB9ID0gcHJlcGFyZWRSb3V0ZTtcbiAgY29uc3QgbGVhZlNlZ21lbnQgPSBwcmVwYXJlZFNlZ21lbnRzLmF0KC0xKSA/PyBwcmVwYXJlZFJvdXRlO1xuXG4gIGNvbnN0IHJvdXRlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKG1hdGNoID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaC5yb3V0ZTtcbiAgfSwgW21hdGNoXSk7XG5cbiAgY29uc3QgcHJlcGFyZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gcmVhZFByZXBhcmVkUm91dGVWYWx1ZShwcmVwYXJlZFJlc291cmNlKTtcbiAgfSwgW3ByZXBhcmVkUmVzb3VyY2VdKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmNcbiAgY29uc3QgQ29tcG9uZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlUGFnZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gICAgcmV0dXJuIHJlc291cmNlUGFnZS5yZWFkKCk7XG4gIH0sIFtyZXNvdXJjZVBhZ2VdKTtcblxuICBsZXQgY29udGVudDpcbiAgICB8IEpTWC5FbGVtZW50XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWRcbiAgICB8IFByb21pc2U8SlNYLkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkPiA9IG51bGw7XG4gIGxldCByZWRpcmVjdFRvUGF0aG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICBjb250ZW50ID0gcmVuZGVyKHtcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IE9LIGNhbiBiZSBhIHN1c3BlbmRcbiAgICAgICAgQ29tcG9uZW50LFxuICAgICAgICBwcmVwYXJlZFNlZ21lbnQ6IHByZXBhcmVkUm91dGUsXG4gICAgICAgIHByZXBhcmVkUm91dGUsXG4gICAgICAgIHByZXBhcmVkU2VnbWVudHMsXG4gICAgICAgIHNlZ21lbnRJbmRleCxcbiAgICAgICAgbGVhZlNlZ21lbnQsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBwcmVwYXJlZCxcbiAgICAgICAgY29udGV4dDogcm91dGVDb250ZXh0LFxuICAgICAgICByYXdRdWVyeSxcbiAgICAgICAgcXVlcnk6IHR5cGVkUXVlcnksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cFJlZGlyZWN0ICYmIHJvdXRlciAhPSBudWxsKSB7XG4gICAgICAgIGNvbnRlbnQgPSBudWxsO1xuICAgICAgICByZWRpcmVjdFRvUGF0aG5hbWUgPSBlcnJvci5yZWRpcmVjdFRvO1xuICAgICAgICAvLyBJZiBpdCdzIHN1c3BlbmRlZFxuICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgY29udGVudCA9IGVycm9yO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJlZGlyZWN0VG9QYXRobmFtZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFUlJPUjogJywgZXJyb3IpO1xuICAgICAgICBjb250ZW50ID0gbnVsbDtcbiAgICAgICAgcmVkaXJlY3RUb1BhdGhuYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwYXRobmFtZTogc3RyaW5nIHwgbnVsbCA9IHJlZGlyZWN0VG8gPz8gcmVkaXJlY3RUb1BhdGhuYW1lID8/IG51bGw7XG5cbiAgY29uc3Qgd3JhcFdpdGhIaWdobGlnaHQgPSAobm9kZTogUmVhY3ROb2RlKTogSlNYLkVsZW1lbnQgPT4ge1xuICAgIGlmICh0eXBlb2YgaGlnaGxpZ2h0SWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gPD57bm9kZX08Lz47XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8Um91dGVIaWdobGlnaHRCb3VuZGFyeSBoaWdobGlnaHRJZD17aGlnaGxpZ2h0SWR9PlxuICAgICAgICB7bm9kZX1cbiAgICAgIDwvUm91dGVIaWdobGlnaHRCb3VuZGFyeT5cbiAgICApO1xuICB9O1xuXG4gIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9vbmx5LXRocm93LWVycm9yXG4gICAgICB0aHJvdyBjb250ZW50O1xuICAgIH1cblxuICAgIGlmIChwYXRobmFtZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gPFJvdXRlQ29tcG9uZW50IHJlZGlyZWN0VG9QYXRobmFtZT17cGF0aG5hbWV9IC8+O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29udGVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB3cmFwV2l0aEhpZ2hsaWdodChjb250ZW50ID8/IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29tcG9uZW50Tm9kZSA9IChcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBPSyAtIGNvbXBvbmVudCB0eXBlIGluZmVyZW5jZSBmcm9tIHJlc291cmNlIGxvYWRlciBpcyBkeW5hbWljXG4gICAgPENvbXBvbmVudFxuICAgICAgbWF0Y2g9e21hdGNofVxuICAgICAgcHJlcGFyZWRSb3V0ZT17cHJlcGFyZWRSb3V0ZX1cbiAgICAgIHJvdXRlPXtyb3V0ZX1cbiAgICAgIHByZXBhcmVkPXtwcmVwYXJlZH1cbiAgICAgIHF1ZXJ5PXt0eXBlZFF1ZXJ5fVxuICAgICAgcHJlcGFyZWRTZWdtZW50cz17cHJlcGFyZWRTZWdtZW50c31cbiAgICAgIHNlZ21lbnRJbmRleD17c2VnbWVudEluZGV4fVxuICAgICAgbGVhZlNlZ21lbnQ9e2xlYWZTZWdtZW50fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbiAgY29uc3QgY29udGVudDIgPSB3cmFwV2l0aEhpZ2hsaWdodChjb21wb25lbnROb2RlKTtcblxuICByZXR1cm4gPFJvdXRlQ29tcG9uZW50IHJlZGlyZWN0VG9QYXRobmFtZT17cGF0aG5hbWV9IGNvbnRlbnQ9e2NvbnRlbnQyfSAvPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlQ29tcG9uZW50V3JhcHBlcjtcbiJdfQ==
@@ -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;AAkBhF,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAKD,KAAK,KAAK,GAAG;IAEX,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAyBF,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGluZy9Sb3V0ZXJSZW5kZXJlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQWtCLE9BQU8sRUFBRSxhQUFhLEVBQVksTUFBTSxPQUFPLENBQUM7QUFLaEYsT0FBTyxjQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxxQkFBcUIsTUFBTSw0QkFBNEIsQ0FBQztBQUUvRCxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBRTVELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQVFkLE1BQU0sVUFBVSxXQUFXO0lBQ3pCLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDWCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFxQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFZLEVBQXNCLEVBQUU7SUFDMUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRzlELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUsxQyxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDO0lBSXJELE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUUxQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUdqQixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNULENBQUM7UUFHRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFFaEMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBR0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBSTdDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsZUFBZSxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBR0gsT0FBTyxHQUFHLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQztJQU1KLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFzQmIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNsQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFJekIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNsQyxJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBeUIsRUFBRSxDQUFDO1FBRXhDLE1BQU0sYUFBYSxHQUFHLE1BQU07YUFDekIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO2FBQ3ZDLE9BQU8sRUFBRSxDQUFDO1FBRWIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5DLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksYUFBYSxHQUFHLENBQ2xCLEtBQUMscUJBQXFCLElBRXBCLEtBQUssRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQzdDLGFBQWEsRUFBRSxTQUFTLElBRm5CLFNBQVMsQ0FBQyxJQUFJLENBR25CLENBQ0gsQ0FBQztRQUNGLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsYUFBYSxHQUFHLENBQ2QsS0FBQyxxQkFBcUIsSUFHcEIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksRUFFN0MsYUFBYSxFQUFFLFFBQVMsWUFFdkIsYUFBYSxJQUxULFFBQVMsQ0FBQyxJQUFJLENBTUcsQ0FDekIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBSWpCLE9BQU8sQ0FDTCxNQUFDLFFBQVEsSUFBQyxRQUFRLEVBQUUsUUFBUSxhQUN6QixjQUFjLEVBQ2QsY0FBYyxJQUNOLENBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHR5cGUgUmVhY3ROb2RlLCB1c2VNZW1vLCB1c2VUcmFuc2l0aW9uLCB0eXBlIEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBQcmVwYXJlZE1hdGNoUm91dGUsIFJvdXRlRW50cnkgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IFJvdXRpbmdDb250ZXh0IGZyb20gJy4vUm91dGluZ0NvbnRleHQuanMnO1xuaW1wb3J0IFJvdXRlQ29tcG9uZW50V3JhcHBlciBmcm9tICcuL1JvdXRlQ29tcG9uZW50V3JhcHBlci5qcyc7XG5cbmNvbnN0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCBTdXNwZW5zZSwgdXNlU3RhdGUgfSA9IFJlYWN0O1xuXG5sZXQgaW5kZXggPSAwO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHVuaXF1ZSBpbmRleCBmb3IgY29tcG9uZW50IGluc3RhbmNlcy5cbiAqIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGVuc3VyZSBwcm9wZXIgUmVhY3QgcmVjb25jaWxpYXRpb24uXG4gKlxuICogQHJldHVybnMgQSB1bmlxdWUgaW5jcmVtZW50YWwgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdJbmRleCgpOiBudW1iZXIge1xuICBpbmRleCArPSAxO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBSb3V0ZXJSZW5kZXJlciBjb21wb25lbnQuXG4gKi9cbnR5cGUgUHJvcHMgPSB7XG4gIC8qKiBGYWxsYmFjayBVSSB0byBzaG93IHdoaWxlIGxvYWRpbmcgY29tcG9uZW50cyAqL1xuICBmYWxsYmFjaz86IFJlYWN0Tm9kZTtcbiAgLyoqIFdoZXRoZXIgdG8gZW5hYmxlIFJlYWN0IDE4IHRyYW5zaXRpb25zIGZvciBzbW9vdGhlciByb3V0ZSBjaGFuZ2VzICovXG4gIGVuYWJsZVRyYW5zaXRpb24/OiBib29sZWFuO1xuICAvKiogVUkgdG8gc2hvdyBkdXJpbmcgdHJhbnNpdGlvbnMgKHdoZW4gZW5hYmxlVHJhbnNpdGlvbiBpcyB0cnVlKSAqL1xuICBwZW5kaW5nPzogUmVhY3ROb2RlO1xufTtcblxuLyoqXG4gKiBNYWluIHJvdXRlciByZW5kZXJlciBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyB0aGUgY3VycmVudCByb3V0ZS5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBhY2Nlc3NlcyB0aGUgY3VycmVudCByb3V0ZSBlbnRyeSBmcm9tIFJvdXRpbmdDb250ZXh0IGFuZCByZW5kZXJzXG4gKiB0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50cy4gSXQgc3VwcG9ydHMgUmVhY3QgU3VzcGVuc2UgZm9yIGxhenktbG9hZGVkIGNvbXBvbmVudHNcbiAqIGFuZCBjYW4gb3B0aW9uYWxseSB1c2UgUmVhY3QgMTggdHJhbnNpdGlvbnMgZm9yIHNtb290aGVyIHJvdXRlIGNoYW5nZXMuXG4gKlxuICogVGhlIGNvbXBvbmVudCBoYW5kbGVzIG5lc3RlZCByb3V0ZXMgYnkgY3JlYXRpbmcgYSBoaWVyYXJjaHkgb2YgUm91dGVDb21wb25lbnRXcmFwcGVyXG4gKiBjb21wb25lbnRzLCB3aGVyZSBlYWNoIGxldmVsIGNhbiByZW5kZXIgaXRzIG93biBjb21wb25lbnQgYW5kIGNoaWxkcmVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggU3VzcGVuc2UgZmFsbGJhY2tcbiAqIDxSb3V0ZXJSZW5kZXJlciBmYWxsYmFjaz17PGRpdj5Mb2FkaW5nLi4uPC9kaXY+fSAvPlxuICpcbiAqIC8vIFdpdGggUmVhY3QgMTggdHJhbnNpdGlvbnNcbiAqIDxSb3V0ZXJSZW5kZXJlclxuICogICBlbmFibGVUcmFuc2l0aW9uXG4gKiAgIGZhbGxiYWNrPXs8ZGl2PkxvYWRpbmcuLi48L2Rpdj59XG4gKiAgIHBlbmRpbmc9ezxkaXY+TmF2aWdhdGluZy4uLjwvZGl2Pn1cbiAqIC8+XG4gKiBgYGBcbiAqL1xuY29uc3QgUm91dGVyUmVuZGVyZXIgPSAocHJvcHM6IFByb3BzKTogSlNYLkVsZW1lbnQgfCBudWxsID0+IHtcbiAgY29uc3QgeyBmYWxsYmFjaywgcGVuZGluZywgZW5hYmxlVHJhbnNpdGlvbiA9IGZhbHNlIH0gPSBwcm9wcztcblxuICAvLyBBY2Nlc3MgdGhlIHJvdXRlciBjb250ZXh0XG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuXG4gIC8vIFVzZSBSZWFjdCAxOCB0cmFuc2l0aW9ucyB0byBpbXByb3ZlIHJvdXRlIHRyYW5zaXRpb24gVVggYnkgZGVsYXlpbmdcbiAgLy8gdHJhbnNpdGlvbnMgYW5kIHNob3dpbmcgdGhlIHByZXZpb3VzIHJvdXRlIGZvciBhIGJyaWVmIHBlcmlvZCB3aGlsZVxuICAvLyB0aGUgbmV4dCByb3V0ZSBpcyBiZWluZyBwcmVwYXJlZC5cbiAgY29uc3QgW2lzUGVuZGluZywgc3RhcnRUcmFuc2l0aW9uXSA9IHVzZVRyYW5zaXRpb24oKTtcblxuICAvLyBTdG9yZSB0aGUgYWN0aXZlIGVudHJ5IGluIHN0YXRlIC0gdGhpcyBhbGxvd3MgdGhlIHJlbmRlcmVyIHRvIHVzZSBmZWF0dXJlcyBsaWtlXG4gIC8vIHVzZVRyYW5zaXRpb24gdG8gZGVsYXkgd2hlbiBzdGF0ZSBjaGFuZ2VzIGJlY29tZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICBjb25zdCBbcm91dGVFbnRyeSwgc2V0Um91dGVFbnRyeV0gPSB1c2VTdGF0ZTxcbiAgICBSb3V0ZUVudHJ5PFBhcmFtRGF0YT4gfCB1bmRlZmluZWRcbiAgPihyb3V0ZXI/LmdldCgpKTtcblxuICAvLyBTdWJzY3JpYmUgdG8gcm91dGUgY2hhbmdlcyBvbiBtb3VudFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyb3V0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSByb3V0ZSBoYXMgY2hhbmdlZCBiZXR3ZWVuIHRoZSBsYXN0IHJlbmRlciBhbmQgY29tbWl0XG4gICAgY29uc3QgY3VycmVudEVudHJ5ID0gcm91dGVyLmdldCgpO1xuICAgIGlmIChjdXJyZW50RW50cnkgIT09IHJvdXRlRW50cnkpIHtcbiAgICAgIC8vIEhhbmRsZSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgYnkgcmUtcmVuZGVyaW5nIHdpdGggY3VycmVudCBlbnRyeVxuICAgICAgc2V0Um91dGVFbnRyeShjdXJyZW50RW50cnkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliZSBmb3Igc3Vic2VxdWVudCByb3V0ZSB1cGRhdGVzXG4gICAgY29uc3QgZGlzcG9zZSA9IHJvdXRlci5zdWJzY3JpYmUoKG5leHRFbnRyeSkgPT4ge1xuICAgICAgLy8gVXNlIHN0YXJ0VHJhbnNpdGlvbiB0byBkZWxheSB0aGUgZWZmZWN0IG9mIHNldFJvdXRlRW50cnkgZm9yIHNtb290aGVyIFVYLlxuICAgICAgLy8gVGhpcyBjb250aW51ZXMgc2hvd2luZyB0aGUgb2xkIHN0YXRlIHdoaWxlIHRoZSBuZXcgcm91dGUgaXMgYmVpbmcgcHJlcGFyZWQuXG5cbiAgICAgIGlmIChlbmFibGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgICAgICAgc2V0Um91dGVFbnRyeShuZXh0RW50cnkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFJvdXRlRW50cnkobmV4dEVudHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgfTtcblxuICAgIC8vIE5vdGU6IHRoaXMgaG9vayB1cGRhdGVzIHJvdXRlRW50cnkgbWFudWFsbHk7IHdlIGV4Y2x1ZGUgdGhhdCB2YXJpYWJsZVxuICAgIC8vIGZyb20gdGhlIGhvb2sgZGVwcyB0byBhdm9pZCByZWNvbXB1dGluZyB0aGUgZWZmZWN0IGFmdGVyIGVhY2ggY2hhbmdlXG4gICAgLy8gdHJpZ2dlcmVkIGJ5IHRoZSBlZmZlY3QgaXRzZWxmLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3JvdXRlcl0pO1xuXG4gIC8vIFRoZSBjdXJyZW50IHJvdXRlIHZhbHVlIGlzIGFuIGFycmF5IG9mIG1hdGNoaW5nIGVudHJpZXMgLSBvbmUgZW50cnkgcGVyXG4gIC8vIGxldmVsIG9mIHJvdXRlcyAodG8gYWxsb3cgbmVzdGVkIHJvdXRlcykuIFdlIGhhdmUgdG8gbWFwIGVhY2ggb25lIHRvIGFcbiAgLy8gUm91dGVDb21wb25lbnQgdG8gYWxsb3cgc3VzcGVuZGluZywgYW5kIGFsc28gcGFzcyBpdHMgY2hpbGRyZW4gY29ycmVjdGx5LlxuICAvLyBDb25jZXB0dWFsbHksIHdlIHdhbnQgdGhpcyBzdHJ1Y3R1cmU6XG4gIC8vIGBgYFxuICAvLyA8Um91dGVDb21wb25lbnRcbiAgLy8gICBjb21wb25lbnQ9e2VudHJ5WzBdLmNvbXBvbmVudH1cbiAgLy8gICBwcmVwYXJlZD17ZW50cnJ5WzBdLnByZXBhcmVkfT5cbiAgLy8gICA8Um91dGVDb21wb25lbnRcbiAgLy8gICAgIGNvbXBvbmVudD17ZW50cnlbMV0uY29tcG9uZW50fVxuICAvLyAgICAgcHJlcGFyZWQ9e2VudHJ5WzFdLnByZXBhcmVkfT5cbiAgLy8gICAgICAgLy8gY29udGludWUgZm9yIG5lc3RlZCBpdGVtcy4uLlxuICAvLyAgIDwvUm91dGVDb21wb25lbnQ+XG4gIC8vIDwvUm91dGVDb21wb25lbnQ+XG4gIC8vIGBgYFxuICAvLyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJldmVyc2UgdGhlIGxpc3Qgc28gd2UgY2FuIHN0YXJ0IGF0IHRoZSBib3R0b20tbW9zdFxuICAvLyBjb21wb25lbnQsIGFuZCBpdGVyYXRpdmVseSBjb25zdHJ1Y3QgcGFyZW50IGNvbXBvbmVudHMgdyB0aGUgcHJldmlvdXNcbiAgLy8gdmFsdWUgYXMgdGhlIGNoaWxkIG9mIHRoZSBuZXh0IG9uZTpcbiAgLy8gcmV2ZXJzZSBpcyBpbiBwbGFjZSwgYnV0IHdlIHdhbnQgYSBjb3B5IHNvIGNvbmNhdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmNcbiAgY29uc3QgcGVuZGluZ0NvbnRlbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNQZW5kaW5nKSB7XG4gICAgICByZXR1cm4gcGVuZGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSwgW2lzUGVuZGluZywgcGVuZGluZ10pO1xuXG4gIC8vIHRoZSBib3R0b20tbW9zdCBjb21wb25lbnQgaXMgc3BlY2lhbCBzaW5jZSBpdCB3aWxsIGhhdmUgbm8gY2hpbGRyZW5cbiAgLy8gKHRob3VnaCB3ZSBjb3VsZCBwcm9iYWJseSBqdXN0IHBhc3MgbnVsbCBjaGlsZHJlbiB0byBpdClcbiAgY29uc3Qgcm91dGVDb21wb25lbnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAocm91dGVFbnRyeSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFByZXBhcmVkTWF0Y2hSb3V0ZVtdID0gW107XG5cbiAgICBjb25zdCByZXZlcnNlZEl0ZW1zID0gcmVzdWx0XG4gICAgICAuY29uY2F0KHJvdXRlRW50cnkucHJlcGFyZWRNYXRjaC5yb3V0ZXMpXG4gICAgICAucmV2ZXJzZSgpO1xuXG4gICAgY29uc3QgZmlyc3RJdGVtID0gcmV2ZXJzZWRJdGVtc1swXTtcblxuICAgIGlmIChmaXJzdEl0ZW0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG1haW5Db21wb25lbnQgPSAoXG4gICAgICA8Um91dGVDb21wb25lbnRXcmFwcGVyXG4gICAgICAgIGtleT17Zmlyc3RJdGVtLnBhdGh9XG4gICAgICAgIG1hdGNoPXtyb3V0ZUVudHJ5LnByZXBhcmVkTWF0Y2gubWF0Y2ggPz8gbnVsbH1cbiAgICAgICAgcHJlcGFyZWRSb3V0ZT17Zmlyc3RJdGVtfVxuICAgICAgLz5cbiAgICApO1xuICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXZlcnNlZEl0ZW1zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgbmV4dEl0ZW0gPSByZXZlcnNlZEl0ZW1zW2luZGV4XTtcbiAgICAgIG1haW5Db21wb25lbnQgPSAoXG4gICAgICAgIDxSb3V0ZUNvbXBvbmVudFdyYXBwZXJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIGtleT17bmV4dEl0ZW0hLnBhdGh9XG4gICAgICAgICAgbWF0Y2g9e3JvdXRlRW50cnkucHJlcGFyZWRNYXRjaC5tYXRjaCA/PyBudWxsfVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgcHJlcGFyZWRSb3V0ZT17bmV4dEl0ZW0hfVxuICAgICAgICA+XG4gICAgICAgICAge21haW5Db21wb25lbnR9XG4gICAgICAgIDwvUm91dGVDb21wb25lbnRXcmFwcGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFpbkNvbXBvbmVudDtcbiAgfSwgW3JvdXRlRW50cnldKTtcblxuICAvLyBSb3V0ZXMgY2FuIGVycm9yIHNvIHdyYXAgaW4gYW4gPEVycm9yQm91bmRhcnk+XG4gIC8vIFJvdXRlcyBjYW4gc3VzcGVuZCwgc28gd3JhcCBpbiA8U3VzcGVuc2U+XG4gIHJldHVybiAoXG4gICAgPFN1c3BlbnNlIGZhbGxiYWNrPXtmYWxsYmFja30+XG4gICAgICB7cGVuZGluZ0NvbnRlbnR9XG4gICAgICB7cm91dGVDb21wb25lbnR9XG4gICAgPC9TdXNwZW5zZT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlclJlbmRlcmVyO1xuIl19
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { RoutingContextType, UnknownQueryShape } from '../types.js';
3
+ declare const RoutingContext: React.Context<RoutingContextType<any, Readonly<Record<string, import("@plumile/filter-query").FieldDescriptor>> | undefined, UnknownQueryShape, 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,EAEV,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAErB,QAAA,MAAM,cAAc,8JAKL,CAAC;AAKhB,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGluZ0NvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGluZy9Sb3V0aW5nQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFRMUIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FLaEMsSUFBSSxDQUFDLENBQUM7QUFLaEIsZUFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZpbHRlclNjaGVtYSxcbiAgUm91dGluZ0NvbnRleHRUeXBlLFxuICBVbmtub3duUXVlcnlTaGFwZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5jb25zdCBSb3V0aW5nQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8Um91dGluZ0NvbnRleHRUeXBlPFxuICBhbnksXG4gIEZpbHRlclNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgVW5rbm93blF1ZXJ5U2hhcGUsXG4gIGFueVxuPiB8IG51bGw+KG51bGwpO1xuXG4vKipcbiAqIEEgY3VzdG9tIGNvbnRleHQgaW5zdGFuY2UgZm9yIG91ciByb3V0ZXIgdHlwZVxuICovXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nQ29udGV4dDtcbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { type Schema as FilterSchema } from '@plumile/filter-query';
2
+ import type { ParamData } from 'path-to-regexp';
3
+ import { type RoutingContextType, type AnyRoute, type PreparedAccess, type NavigateOverloads, type UnknownQueryShape } from '../types.js';
4
+ import { type InstrumentationAPI } from '../instrumentation/Instrumentation.js';
5
+ type RouterQuerySchema = FilterSchema | undefined;
6
+ export type CreateRouterReturn<TContext, R extends AnyRoute[]> = {
7
+ cleanup: () => void;
8
+ context: RoutingContextType<ParamData, RouterQuerySchema, UnknownQueryShape, TContext> & PreparedAccess<R> & {
9
+ navigate: NavigateOverloads<R>;
10
+ };
11
+ };
12
+ export type CreateRouterOptions<TContext> = {
13
+ instrumentations?: InstrumentationAPI[];
14
+ context?: TContext | (() => TContext);
15
+ getContext?: () => TContext;
16
+ };
17
+ export default function createRouter<TContext = unknown, R extends AnyRoute[] = AnyRoute[]>(routes: [...R] | AnyRoute[], options?: CreateRouterOptions<TContext>): CreateRouterReturn<TContext, R>;
18
+ export {};
19
+ //# sourceMappingURL=createRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../src/routing/createRouter.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,MAAM,IAAI,YAAY,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAKxB,MAAM,uCAAuC,CAAC;AAQ/C,KAAK,iBAAiB,GAAG,YAAY,GAAG,SAAS,CAAC;AAgBlD,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,QAAQ,EAAE,IAAI;IAE/D,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;CAC7B,CAAC;AASF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAEjC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAk0BjC"}