@buoy-gg/route-events 7.0.41 → 7.0.43

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 (102) hide show
  1. package/README.md +11 -64
  2. package/lib/commonjs/RouteObserver.js +1 -54
  3. package/lib/commonjs/RouteParser.js +1 -314
  4. package/lib/commonjs/RouteTracker.js +1 -112
  5. package/lib/commonjs/RouteTracker.web.js +1 -12
  6. package/lib/commonjs/browserRouteRegistry.js +1 -30
  7. package/lib/commonjs/browserRoutes.js +1 -96
  8. package/lib/commonjs/components/NavigationStack.js +2 -572
  9. package/lib/commonjs/components/ReactNavigationRoutes.js +1 -836
  10. package/lib/commonjs/components/ReactNavigationRoutes.web.js +1 -12
  11. package/lib/commonjs/components/RouteEventDetail.js +1 -97
  12. package/lib/commonjs/components/RouteEventExpandedContent.js +1 -204
  13. package/lib/commonjs/components/RouteEventItemCompact.js +1 -191
  14. package/lib/commonjs/components/RouteEventsModalWithTabs.js +1 -734
  15. package/lib/commonjs/components/RouteEventsTimeline.js +1 -107
  16. package/lib/commonjs/components/RouteFilterViewV2.js +1 -42
  17. package/lib/commonjs/components/RoutesSitemap.js +2 -1035
  18. package/lib/commonjs/expoRouterStore.js +1 -121
  19. package/lib/commonjs/expoRouterStore.web.js +1 -44
  20. package/lib/commonjs/hooks/useRouteEvents.js +1 -57
  21. package/lib/commonjs/index.js +1 -168
  22. package/lib/commonjs/preset.js +1 -69
  23. package/lib/commonjs/stores/navigationStackStore.js +1 -45
  24. package/lib/commonjs/stores/routeEventStore.js +1 -136
  25. package/lib/commonjs/sync/routeEventsSyncAdapter.js +1 -275
  26. package/lib/commonjs/useNavigationStack.js +1 -408
  27. package/lib/commonjs/useNavigationStack.web.js +1 -32
  28. package/lib/commonjs/useRouteObserver.js +1 -73
  29. package/lib/commonjs/useRouteObserverReactNavigation.js +1 -109
  30. package/lib/commonjs/useRouteSitemap.js +1 -255
  31. package/lib/commonjs/utils/routeTemplate.js +1 -79
  32. package/lib/commonjs/utils/safeReactNavigation.js +1 -194
  33. package/lib/commonjs/utils/safeReactNavigation.web.js +1 -36
  34. package/lib/commonjs/utils/testIDs.js +1 -63
  35. package/lib/module/RouteObserver.js +1 -49
  36. package/lib/module/RouteParser.js +1 -309
  37. package/lib/module/RouteTracker.js +1 -109
  38. package/lib/module/RouteTracker.web.js +1 -8
  39. package/lib/module/browserRouteRegistry.js +1 -24
  40. package/lib/module/browserRoutes.js +1 -92
  41. package/lib/module/components/NavigationStack.js +2 -568
  42. package/lib/module/components/ReactNavigationRoutes.js +1 -832
  43. package/lib/module/components/ReactNavigationRoutes.web.js +1 -3
  44. package/lib/module/components/RouteEventDetail.js +1 -93
  45. package/lib/module/components/RouteEventExpandedContent.js +1 -200
  46. package/lib/module/components/RouteEventItemCompact.js +1 -187
  47. package/lib/module/components/RouteEventsModalWithTabs.js +1 -731
  48. package/lib/module/components/RouteEventsTimeline.js +1 -103
  49. package/lib/module/components/RouteFilterViewV2.js +1 -38
  50. package/lib/module/components/RoutesSitemap.js +2 -1033
  51. package/lib/module/expoRouterStore.js +1 -114
  52. package/lib/module/expoRouterStore.web.js +1 -37
  53. package/lib/module/hooks/useRouteEvents.js +1 -54
  54. package/lib/module/index.js +1 -70
  55. package/lib/module/preset.js +1 -66
  56. package/lib/module/stores/navigationStackStore.js +1 -41
  57. package/lib/module/stores/routeEventStore.js +1 -128
  58. package/lib/module/sync/routeEventsSyncAdapter.js +1 -273
  59. package/lib/module/useNavigationStack.js +1 -404
  60. package/lib/module/useNavigationStack.web.js +1 -28
  61. package/lib/module/useRouteObserver.js +1 -70
  62. package/lib/module/useRouteObserverReactNavigation.js +1 -106
  63. package/lib/module/useRouteSitemap.js +1 -250
  64. package/lib/module/utils/routeTemplate.js +1 -73
  65. package/lib/module/utils/safeReactNavigation.js +1 -185
  66. package/lib/module/utils/safeReactNavigation.web.js +1 -27
  67. package/lib/module/utils/testIDs.js +1 -55
  68. package/lib/web/index.mjs +4 -5
  69. package/package.json +6 -11
  70. package/lib/typescript/RouteObserver.d.ts.map +0 -1
  71. package/lib/typescript/RouteParser.d.ts.map +0 -1
  72. package/lib/typescript/RouteTracker.d.ts.map +0 -1
  73. package/lib/typescript/RouteTracker.web.d.ts.map +0 -1
  74. package/lib/typescript/browserRouteRegistry.d.ts.map +0 -1
  75. package/lib/typescript/browserRoutes.d.ts.map +0 -1
  76. package/lib/typescript/components/NavigationStack.d.ts.map +0 -1
  77. package/lib/typescript/components/ReactNavigationRoutes.d.ts.map +0 -1
  78. package/lib/typescript/components/ReactNavigationRoutes.web.d.ts.map +0 -1
  79. package/lib/typescript/components/RouteEventDetail.d.ts.map +0 -1
  80. package/lib/typescript/components/RouteEventExpandedContent.d.ts.map +0 -1
  81. package/lib/typescript/components/RouteEventItemCompact.d.ts.map +0 -1
  82. package/lib/typescript/components/RouteEventsModalWithTabs.d.ts.map +0 -1
  83. package/lib/typescript/components/RouteEventsTimeline.d.ts.map +0 -1
  84. package/lib/typescript/components/RouteFilterViewV2.d.ts.map +0 -1
  85. package/lib/typescript/components/RoutesSitemap.d.ts.map +0 -1
  86. package/lib/typescript/expoRouterStore.d.ts.map +0 -1
  87. package/lib/typescript/expoRouterStore.web.d.ts.map +0 -1
  88. package/lib/typescript/hooks/useRouteEvents.d.ts.map +0 -1
  89. package/lib/typescript/index.d.ts.map +0 -1
  90. package/lib/typescript/preset.d.ts.map +0 -1
  91. package/lib/typescript/stores/navigationStackStore.d.ts.map +0 -1
  92. package/lib/typescript/stores/routeEventStore.d.ts.map +0 -1
  93. package/lib/typescript/sync/routeEventsSyncAdapter.d.ts.map +0 -1
  94. package/lib/typescript/useNavigationStack.d.ts.map +0 -1
  95. package/lib/typescript/useNavigationStack.web.d.ts.map +0 -1
  96. package/lib/typescript/useRouteObserver.d.ts.map +0 -1
  97. package/lib/typescript/useRouteObserverReactNavigation.d.ts.map +0 -1
  98. package/lib/typescript/useRouteSitemap.d.ts.map +0 -1
  99. package/lib/typescript/utils/routeTemplate.d.ts.map +0 -1
  100. package/lib/typescript/utils/safeReactNavigation.d.ts.map +0 -1
  101. package/lib/typescript/utils/safeReactNavigation.web.d.ts.map +0 -1
  102. package/lib/typescript/utils/testIDs.d.ts.map +0 -1
@@ -1,121 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getExpoRouterStore = getExpoRouterStore;
7
- exports.getRouteNodeMetadata = getRouteNodeMetadata;
8
- exports.isExpoRouterStoreSupported = isExpoRouterStoreSupported;
9
- exports.loadRouteNode = loadRouteNode;
10
- let cachedStore = null;
11
- let cachedStoreSource = null;
12
- let importError = null;
13
- let hasLoggedMissingStore = false;
14
- let hasLoggedMissingRouteNode = false;
15
- let lastRouteNodeTimestamp = null;
16
- function logOnce(message, error) {
17
- if (__DEV__) {
18
- if (error) {
19
- console.error(`[RouteEvents] ${message}`, error);
20
- } else {
21
- console.warn(`[RouteEvents] ${message}`);
22
- }
23
- }
24
- }
25
-
26
- /**
27
- * Attempt to require the expo-router store from known locations.
28
- * Returns null (with a logged error in dev) when expo-router is not available.
29
- *
30
- * Note: The store uses getters that read from an internal storeRef.
31
- * The storeRef gets populated when Expo Router's useStore() hook runs.
32
- * So we cache the store reference but its property values update over time.
33
- */
34
- /**
35
- * Whether the expo-router store can be loaded in this runtime. The store is
36
- * pulled in via CommonJS `require`, which only exists under Metro/Node. On the
37
- * web (e.g. the desktop dashboard rendering these RN tools via react-native-web)
38
- * `require` is undefined, the route tree lives on the device — not here — and
39
- * there is nothing to load. Callers use this to skip polling/logging.
40
- */
41
- function isExpoRouterStoreSupported() {
42
- return typeof require !== "undefined";
43
- }
44
- function getExpoRouterStore() {
45
- if (cachedStore) {
46
- return cachedStore;
47
- }
48
-
49
- // No `require` (web): bail quietly rather than throwing ReferenceError and
50
- // logging a misleading "install expo-router" message on the dashboard.
51
- if (!isExpoRouterStoreSupported()) {
52
- return null;
53
- }
54
- const loadFromBuild = () => {
55
- try {
56
- const module = require("expo-router/build/global-state/router-store");
57
- if (module?.store) {
58
- cachedStore = module.store;
59
- cachedStoreSource = "build";
60
- importError = null;
61
- hasLoggedMissingStore = false;
62
- return true;
63
- }
64
- } catch (error) {
65
- importError = error;
66
- }
67
- return false;
68
- };
69
- const loadFromSrc = () => {
70
- try {
71
- const module = require("expo-router/src/global-state/router-store");
72
- if (module?.store) {
73
- cachedStore = module.store;
74
- cachedStoreSource = "src";
75
- importError = null;
76
- hasLoggedMissingStore = false;
77
- return true;
78
- }
79
- } catch (error) {
80
- importError = error;
81
- }
82
- return false;
83
- };
84
- if (loadFromBuild() || loadFromSrc()) {
85
- return cachedStore;
86
- }
87
- if (!hasLoggedMissingStore) {
88
- logOnce("Unable to load expo-router internals. @buoy-gg/route-events requires expo-router >= 2.0.0. Install expo-router and ensure it is configured before using the Routes tab.", importError ?? undefined);
89
- hasLoggedMissingStore = true;
90
- }
91
- return null;
92
- }
93
-
94
- /**
95
- * Returns the current RouteNode tree (if available).
96
- * Logs a helpful warning in development when the tree is missing even though
97
- * the navigation ref is ready.
98
- */
99
- function loadRouteNode() {
100
- const store = getExpoRouterStore();
101
- if (!store) {
102
- return null;
103
- }
104
- if (store.routeNode) {
105
- hasLoggedMissingRouteNode = false;
106
- lastRouteNodeTimestamp = Date.now();
107
- return store.routeNode;
108
- }
109
- const isReady = store.navigationRef?.isReady?.();
110
- if (__DEV__ && !hasLoggedMissingRouteNode && isReady) {
111
- logOnce("Expo Router route tree is unavailable. Ensure your app directory is configured and that expo-router is initialized before opening the Route Events devtool.");
112
- hasLoggedMissingRouteNode = true;
113
- }
114
- return null;
115
- }
116
- function getRouteNodeMetadata() {
117
- return {
118
- source: cachedStoreSource,
119
- lastLoadedAt: lastRouteNodeTimestamp
120
- };
121
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getExpoRouterStore=getExpoRouterStore;exports.getRouteNodeMetadata=getRouteNodeMetadata;exports.isExpoRouterStoreSupported=isExpoRouterStoreSupported;exports.loadRouteNode=loadRouteNode;let cachedStore=null;let cachedStoreSource=null;let importError=null;let hasLoggedMissingStore=false;let hasLoggedMissingRouteNode=false;let lastRouteNodeTimestamp=null;function logOnce(e,o){if(__DEV__){if(o){console.error(`[RouteEvents] ${e}`,o)}else{console.warn(`[RouteEvents] ${e}`)}}}function isExpoRouterStoreSupported(){return typeof require!=="undefined"}function getExpoRouterStore(){if(cachedStore){return cachedStore}if(!isExpoRouterStoreSupported()){return null}const e=()=>{try{const t=require("expo-router/build/global-state/router-store");if(t?.store){cachedStore=t.store;cachedStoreSource="build";importError=null;hasLoggedMissingStore=false;return true}}catch(t){importError=t}return false};const o=()=>{try{const t=require("expo-router/src/global-state/router-store");if(t?.store){cachedStore=t.store;cachedStoreSource="src";importError=null;hasLoggedMissingStore=false;return true}}catch(t){importError=t}return false};if(e()||o()){return cachedStore}if(!hasLoggedMissingStore){logOnce("Unable to load expo-router internals. @buoy-gg/route-events requires expo-router >= 2.0.0. Install expo-router and ensure it is configured before using the Routes tab.",importError??void 0);hasLoggedMissingStore=true}return null}function loadRouteNode(){const e=getExpoRouterStore();if(!e){return null}if(e.routeNode){hasLoggedMissingRouteNode=false;lastRouteNodeTimestamp=Date.now();return e.routeNode}const o=e.navigationRef?.isReady?.();if(__DEV__&&!hasLoggedMissingRouteNode&&o){logOnce("Expo Router route tree is unavailable. Ensure your app directory is configured and that expo-router is initialized before opening the Route Events devtool.");hasLoggedMissingRouteNode=true}return null}function getRouteNodeMetadata(){return{source:cachedStoreSource,lastLoadedAt:lastRouteNodeTimestamp}}
@@ -1,44 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getExpoRouterStore = getExpoRouterStore;
7
- exports.getRouteNodeMetadata = getRouteNodeMetadata;
8
- exports.isExpoRouterStoreSupported = isExpoRouterStoreSupported;
9
- exports.loadRouteNode = loadRouteNode;
10
- var _utils = require("@buoy-gg/shared-ui/utils");
11
- var _browserRouteRegistry = require("./browserRouteRegistry");
12
- function isExpoRouterStoreSupported() {
13
- return typeof window !== 'undefined';
14
- }
15
- function loadRouteNode() {
16
- if (!isExpoRouterStoreSupported()) return null;
17
- const paths = new Set([...(0, _browserRouteRegistry.getBrowserRoutePaths)(), new URL((0, _utils.getBrowserHref)()).pathname]);
18
- return {
19
- route: '',
20
- type: 'layout',
21
- contextKey: 'browser',
22
- children: [...paths].map(path => ({
23
- route: path.replace(/^\//, '') || 'index',
24
- type: 'route',
25
- contextKey: path,
26
- children: [],
27
- dynamic: null
28
- }))
29
- };
30
- }
31
- function getExpoRouterStore() {
32
- return {
33
- routeNode: loadRouteNode(),
34
- navigationRef: {
35
- isReady: () => typeof window !== 'undefined'
36
- }
37
- };
38
- }
39
- function getRouteNodeMetadata() {
40
- return {
41
- source: null,
42
- lastLoadedAt: (0, _browserRouteRegistry.getBrowserRoutesUpdatedAt)()
43
- };
44
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.getExpoRouterStore=getExpoRouterStore;exports.getRouteNodeMetadata=getRouteNodeMetadata;exports.isExpoRouterStoreSupported=isExpoRouterStoreSupported;exports.loadRouteNode=loadRouteNode;var _utils=require("@buoy-gg/shared-ui/utils");var _browserRouteRegistry=require("./browserRouteRegistry");function isExpoRouterStoreSupported(){return typeof window!=="undefined"}function loadRouteNode(){if(!isExpoRouterStoreSupported())return null;const t=new Set([...(0,_browserRouteRegistry.getBrowserRoutePaths)(),new URL((0,_utils.getBrowserHref)()).pathname]);return{route:"",type:"layout",contextKey:"browser",children:[...t].map(e=>({route:e.replace(/^\//,"")||"index",type:"route",contextKey:e,children:[],dynamic:null}))}}function getExpoRouterStore(){return{routeNode:loadRouteNode(),navigationRef:{isReady:()=>typeof window!=="undefined"}}}function getRouteNodeMetadata(){return{source:null,lastLoadedAt:(0,_browserRouteRegistry.getBrowserRoutesUpdatedAt)()}}
@@ -1,57 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useRouteEvents = useRouteEvents;
7
- var _sharedUi = require("@buoy-gg/shared-ui");
8
- var _routeEventStore = require("../stores/routeEventStore");
9
- /**
10
- * useRouteEvents Hook
11
- *
12
- * React hook for subscribing to route events from the centralized store.
13
- * Uses self-managing Subscribable pattern - the store automatically
14
- * subscribes to routeObserver when this hook mounts and unsubscribes
15
- * when all subscribers unmount.
16
- *
17
- * @example
18
- * ```typescript
19
- * function MyComponent() {
20
- * const { events, clearEvents, isListening } = useRouteEvents();
21
- *
22
- * return (
23
- * <View>
24
- * {events.map((event) => (
25
- * <Text key={event.timestamp.toString()}>
26
- * {event.pathname}
27
- * </Text>
28
- * ))}
29
- * </View>
30
- * );
31
- * }
32
- * ```
33
- */
34
-
35
- // Re-export RouteChangeEvent for convenience
36
-
37
- function useRouteEvents(options = {}) {
38
- const {
39
- maxEvents = 500,
40
- enabled = true
41
- } = options;
42
- // Subscribing auto-starts the route observer (Subscribable pattern), and
43
- // the shared hook frame-coalesces navigation bursts into one commit.
44
- const {
45
- events,
46
- clearEvents,
47
- isActive
48
- } = (0, _sharedUi.useEventStoreEvents)(_routeEventStore.routeEventStore, {
49
- maxEvents,
50
- enabled
51
- });
52
- return {
53
- events,
54
- clearEvents,
55
- isListening: isActive
56
- };
57
- }
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useRouteEvents=useRouteEvents;var _sharedUi=require("@buoy-gg/shared-ui");var _routeEventStore=require("../stores/routeEventStore");function useRouteEvents(e={}){const{maxEvents:t=500,enabled:r=true}=e;const{events:s,clearEvents:n,isActive:u}=(0,_sharedUi.useEventStoreEvents)(_routeEventStore.routeEventStore,{maxEvents:t,enabled:r});return{events:s,clearEvents:n,isListening:u}}
@@ -1,168 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "NavigationStack", {
7
- enumerable: true,
8
- get: function () {
9
- return _NavigationStack.NavigationStack;
10
- }
11
- });
12
- Object.defineProperty(exports, "RouteEventDetail", {
13
- enumerable: true,
14
- get: function () {
15
- return _RouteEventDetail.RouteEventDetail;
16
- }
17
- });
18
- Object.defineProperty(exports, "RouteEventExpandedContent", {
19
- enumerable: true,
20
- get: function () {
21
- return _RouteEventExpandedContent.RouteEventExpandedContent;
22
- }
23
- });
24
- Object.defineProperty(exports, "RouteEventItemCompact", {
25
- enumerable: true,
26
- get: function () {
27
- return _RouteEventItemCompact.RouteEventItemCompact;
28
- }
29
- });
30
- Object.defineProperty(exports, "RouteEventsModalWithTabs", {
31
- enumerable: true,
32
- get: function () {
33
- return _RouteEventsModalWithTabs.RouteEventsModalWithTabs;
34
- }
35
- });
36
- Object.defineProperty(exports, "RouteObserver", {
37
- enumerable: true,
38
- get: function () {
39
- return _RouteObserver.RouteObserver;
40
- }
41
- });
42
- Object.defineProperty(exports, "RouteParser", {
43
- enumerable: true,
44
- get: function () {
45
- return _RouteParser.RouteParser;
46
- }
47
- });
48
- Object.defineProperty(exports, "RouteTracker", {
49
- enumerable: true,
50
- get: function () {
51
- return _RouteTracker.RouteTracker;
52
- }
53
- });
54
- Object.defineProperty(exports, "RoutesSitemap", {
55
- enumerable: true,
56
- get: function () {
57
- return _RoutesSitemap.RoutesSitemap;
58
- }
59
- });
60
- Object.defineProperty(exports, "RoutesToolView", {
61
- enumerable: true,
62
- get: function () {
63
- return _RouteEventsModalWithTabs.RoutesToolView;
64
- }
65
- });
66
- Object.defineProperty(exports, "createRouteEventsTool", {
67
- enumerable: true,
68
- get: function () {
69
- return _preset.createRouteEventsTool;
70
- }
71
- });
72
- Object.defineProperty(exports, "navigationStackStore", {
73
- enumerable: true,
74
- get: function () {
75
- return _navigationStackStore.navigationStackStore;
76
- }
77
- });
78
- Object.defineProperty(exports, "registerBrowserRoutes", {
79
- enumerable: true,
80
- get: function () {
81
- return _browserRouteRegistry.registerBrowserRoutes;
82
- }
83
- });
84
- Object.defineProperty(exports, "routeEventStore", {
85
- enumerable: true,
86
- get: function () {
87
- return _routeEventStore.routeEventStore;
88
- }
89
- });
90
- Object.defineProperty(exports, "routeEventsSyncAdapter", {
91
- enumerable: true,
92
- get: function () {
93
- return _routeEventsSyncAdapter.routeEventsSyncAdapter;
94
- }
95
- });
96
- Object.defineProperty(exports, "routeEventsToolPreset", {
97
- enumerable: true,
98
- get: function () {
99
- return _preset.routeEventsToolPreset;
100
- }
101
- });
102
- Object.defineProperty(exports, "routeObserver", {
103
- enumerable: true,
104
- get: function () {
105
- return _RouteObserver.routeObserver;
106
- }
107
- });
108
- Object.defineProperty(exports, "useNavigationStack", {
109
- enumerable: true,
110
- get: function () {
111
- return _useNavigationStack.useNavigationStack;
112
- }
113
- });
114
- Object.defineProperty(exports, "useParentRoutes", {
115
- enumerable: true,
116
- get: function () {
117
- return _useRouteSitemap.useParentRoutes;
118
- }
119
- });
120
- Object.defineProperty(exports, "useRoute", {
121
- enumerable: true,
122
- get: function () {
123
- return _useRouteSitemap.useRoute;
124
- }
125
- });
126
- Object.defineProperty(exports, "useRouteEvents", {
127
- enumerable: true,
128
- get: function () {
129
- return _useRouteEvents.useRouteEvents;
130
- }
131
- });
132
- Object.defineProperty(exports, "useRouteObserver", {
133
- enumerable: true,
134
- get: function () {
135
- return _useRouteObserver.useRouteObserver;
136
- }
137
- });
138
- Object.defineProperty(exports, "useRouteObserverReactNavigation", {
139
- enumerable: true,
140
- get: function () {
141
- return _useRouteObserverReactNavigation.useRouteObserverReactNavigation;
142
- }
143
- });
144
- Object.defineProperty(exports, "useRouteSitemap", {
145
- enumerable: true,
146
- get: function () {
147
- return _useRouteSitemap.useRouteSitemap;
148
- }
149
- });
150
- var _preset = require("./preset");
151
- var _RouteEventsModalWithTabs = require("./components/RouteEventsModalWithTabs");
152
- var _RouteTracker = require("./RouteTracker");
153
- var _browserRouteRegistry = require("./browserRouteRegistry");
154
- var _RoutesSitemap = require("./components/RoutesSitemap");
155
- var _NavigationStack = require("./components/NavigationStack");
156
- var _RouteEventItemCompact = require("./components/RouteEventItemCompact");
157
- var _RouteEventExpandedContent = require("./components/RouteEventExpandedContent");
158
- var _RouteEventDetail = require("./components/RouteEventDetail");
159
- var _useRouteObserver = require("./useRouteObserver");
160
- var _useRouteObserverReactNavigation = require("./useRouteObserverReactNavigation");
161
- var _useRouteEvents = require("./hooks/useRouteEvents");
162
- var _useRouteSitemap = require("./useRouteSitemap");
163
- var _useNavigationStack = require("./useNavigationStack");
164
- var _routeEventsSyncAdapter = require("./sync/routeEventsSyncAdapter");
165
- var _RouteParser = require("./RouteParser");
166
- var _RouteObserver = require("./RouteObserver");
167
- var _routeEventStore = require("./stores/routeEventStore");
168
- var _navigationStackStore = require("./stores/navigationStackStore");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"NavigationStack",{enumerable:true,get:function(){return _NavigationStack.NavigationStack}});Object.defineProperty(exports,"RouteEventDetail",{enumerable:true,get:function(){return _RouteEventDetail.RouteEventDetail}});Object.defineProperty(exports,"RouteEventExpandedContent",{enumerable:true,get:function(){return _RouteEventExpandedContent.RouteEventExpandedContent}});Object.defineProperty(exports,"RouteEventItemCompact",{enumerable:true,get:function(){return _RouteEventItemCompact.RouteEventItemCompact}});Object.defineProperty(exports,"RouteEventsModalWithTabs",{enumerable:true,get:function(){return _RouteEventsModalWithTabs.RouteEventsModalWithTabs}});Object.defineProperty(exports,"RouteObserver",{enumerable:true,get:function(){return _RouteObserver.RouteObserver}});Object.defineProperty(exports,"RouteParser",{enumerable:true,get:function(){return _RouteParser.RouteParser}});Object.defineProperty(exports,"RouteTracker",{enumerable:true,get:function(){return _RouteTracker.RouteTracker}});Object.defineProperty(exports,"RoutesSitemap",{enumerable:true,get:function(){return _RoutesSitemap.RoutesSitemap}});Object.defineProperty(exports,"RoutesToolView",{enumerable:true,get:function(){return _RouteEventsModalWithTabs.RoutesToolView}});Object.defineProperty(exports,"createRouteEventsTool",{enumerable:true,get:function(){return _preset.createRouteEventsTool}});Object.defineProperty(exports,"navigationStackStore",{enumerable:true,get:function(){return _navigationStackStore.navigationStackStore}});Object.defineProperty(exports,"registerBrowserRoutes",{enumerable:true,get:function(){return _browserRouteRegistry.registerBrowserRoutes}});Object.defineProperty(exports,"routeEventStore",{enumerable:true,get:function(){return _routeEventStore.routeEventStore}});Object.defineProperty(exports,"routeEventsSyncAdapter",{enumerable:true,get:function(){return _routeEventsSyncAdapter.routeEventsSyncAdapter}});Object.defineProperty(exports,"routeEventsToolPreset",{enumerable:true,get:function(){return _preset.routeEventsToolPreset}});Object.defineProperty(exports,"routeObserver",{enumerable:true,get:function(){return _RouteObserver.routeObserver}});Object.defineProperty(exports,"useNavigationStack",{enumerable:true,get:function(){return _useNavigationStack.useNavigationStack}});Object.defineProperty(exports,"useParentRoutes",{enumerable:true,get:function(){return _useRouteSitemap.useParentRoutes}});Object.defineProperty(exports,"useRoute",{enumerable:true,get:function(){return _useRouteSitemap.useRoute}});Object.defineProperty(exports,"useRouteEvents",{enumerable:true,get:function(){return _useRouteEvents.useRouteEvents}});Object.defineProperty(exports,"useRouteObserver",{enumerable:true,get:function(){return _useRouteObserver.useRouteObserver}});Object.defineProperty(exports,"useRouteObserverReactNavigation",{enumerable:true,get:function(){return _useRouteObserverReactNavigation.useRouteObserverReactNavigation}});Object.defineProperty(exports,"useRouteSitemap",{enumerable:true,get:function(){return _useRouteSitemap.useRouteSitemap}});var _preset=require("./preset");var _RouteEventsModalWithTabs=require("./components/RouteEventsModalWithTabs");var _RouteTracker=require("./RouteTracker");var _browserRouteRegistry=require("./browserRouteRegistry");var _RoutesSitemap=require("./components/RoutesSitemap");var _NavigationStack=require("./components/NavigationStack");var _RouteEventItemCompact=require("./components/RouteEventItemCompact");var _RouteEventExpandedContent=require("./components/RouteEventExpandedContent");var _RouteEventDetail=require("./components/RouteEventDetail");var _useRouteObserver=require("./useRouteObserver");var _useRouteObserverReactNavigation=require("./useRouteObserverReactNavigation");var _useRouteEvents=require("./hooks/useRouteEvents");var _useRouteSitemap=require("./useRouteSitemap");var _useNavigationStack=require("./useNavigationStack");var _routeEventsSyncAdapter=require("./sync/routeEventsSyncAdapter");var _RouteParser=require("./RouteParser");var _RouteObserver=require("./RouteObserver");var _routeEventStore=require("./stores/routeEventStore");var _navigationStackStore=require("./stores/navigationStackStore");
@@ -1,69 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.routeEventsToolPreset = exports.createRouteEventsTool = void 0;
7
- var _floatingToolsCore = require("@buoy-gg/floating-tools-core");
8
- var _RouteEventsModalWithTabs = require("./components/RouteEventsModalWithTabs");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- /**
12
- * Pre-configured route events tool for FloatingDevTools
13
- *
14
- * This preset provides a zero-config way to add route tracking to your dev tools.
15
- * Just import and spread it into your apps array!
16
- *
17
- * @example
18
- * ```tsx
19
- * import { routeEventsToolPreset } from '@buoy-gg/route-events';
20
- *
21
- * const installedApps = [
22
- * routeEventsToolPreset, // That's it!
23
- * // ...other tools
24
- * ];
25
- * ```
26
- */
27
-
28
- /**
29
- * Pre-configured route events tool for FloatingDevTools.
30
- * Includes:
31
- * - Route sitemap browser
32
- * - Event timeline with filtering
33
- * - Navigation stack visualization
34
- * - Automatic route tracking (no setup needed)
35
- */
36
- const routeEventsToolPreset = exports.routeEventsToolPreset = (0, _sharedUi.defineToolPreset)({
37
- id: "route-events",
38
- name: "ROUTES",
39
- description: "Route tracking & navigation inspector",
40
- slot: "both",
41
- icon: ({
42
- size
43
- }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_floatingToolsCore.RoutesIcon, {
44
- size: size
45
- }),
46
- component: _RouteEventsModalWithTabs.RouteEventsModalWithTabs,
47
- props: {
48
- enableSharedModalDimensions: false
49
- }
50
- });
51
-
52
- /**
53
- * Create a custom route events tool configuration.
54
- * Use this if you want to override default settings.
55
- *
56
- * @example
57
- * ```tsx
58
- * import { createRouteEventsTool } from '@buoy-gg/route-events';
59
- *
60
- * const myRouteTool = createRouteEventsTool({
61
- * name: "MY ROUTES",
62
- * color: "#a78bfa",
63
- * enableSharedModalDimensions: true,
64
- * });
65
- * ```
66
- */
67
- const createRouteEventsTool = exports.createRouteEventsTool = (0, _sharedUi.createToolFactory)(routeEventsToolPreset, options => ({
68
- enableSharedModalDimensions: options.enableSharedModalDimensions ?? false
69
- }));
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.routeEventsToolPreset=exports.createRouteEventsTool=void 0;var _floatingToolsCore=require("@buoy-gg/floating-tools-core");var _RouteEventsModalWithTabs=require("./components/RouteEventsModalWithTabs");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const routeEventsToolPreset=exports.routeEventsToolPreset=(0,_sharedUi.defineToolPreset)({id:"route-events",name:"ROUTES",description:"Route tracking & navigation inspector",slot:"both",icon:({size:e})=>(0,_jsxRuntime.jsx)(_floatingToolsCore.RoutesIcon,{size:e}),component:_RouteEventsModalWithTabs.RouteEventsModalWithTabs,props:{enableSharedModalDimensions:false}});const createRouteEventsTool=exports.createRouteEventsTool=(0,_sharedUi.createToolFactory)(routeEventsToolPreset,e=>({enableSharedModalDimensions:e.enableSharedModalDimensions??false}));
@@ -1,45 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.navigationStackStore = void 0;
7
- /**
8
- * Navigation Stack Store
9
- *
10
- * Holds the latest serializable navigation stack plus references to the live
11
- * navigation action functions. The stack is captured inside the navigation tree
12
- * by <RouteTracker /> (which runs useNavigationStack), and read by the
13
- * route-events sync adapter so the dashboard can render the Stack tab and drive
14
- * navigation on the device remotely.
15
- *
16
- * The stack itself (StackDisplayItem[]) is JSON-serializable and synced to the
17
- * dashboard. The action functions are NOT serialized — they stay on the device
18
- * and are invoked when the dashboard sends a remote action.
19
- */
20
-
21
- class NavigationStackStore {
22
- stack = [];
23
- actions = null;
24
- listeners = new Set();
25
- getStack() {
26
- return this.stack;
27
- }
28
- setStack(stack) {
29
- this.stack = stack;
30
- this.listeners.forEach(listener => listener());
31
- }
32
- getActions() {
33
- return this.actions;
34
- }
35
- setActions(actions) {
36
- this.actions = actions;
37
- }
38
- subscribe(listener) {
39
- this.listeners.add(listener);
40
- return () => {
41
- this.listeners.delete(listener);
42
- };
43
- }
44
- }
45
- const navigationStackStore = exports.navigationStackStore = new NavigationStackStore();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.navigationStackStore=void 0;class NavigationStackStore{stack=[];actions=null;listeners=new Set;getStack(){return this.stack}setStack(t){this.stack=t;this.listeners.forEach(e=>e())}getActions(){return this.actions}setActions(t){this.actions=t}subscribe(t){this.listeners.add(t);return()=>{this.listeners.delete(t)}}}const navigationStackStore=exports.navigationStackStore=new NavigationStackStore;
@@ -1,136 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.subscribeToRouteEvents = exports.routeEventStore = exports.onRouteEvent = exports.isRouteListening = exports.getRouteEvents = exports.clearRouteEvents = void 0;
7
- var _sharedUi = require("@buoy-gg/shared-ui");
8
- var _RouteObserver = require("../RouteObserver");
9
- /**
10
- * Route Event Store
11
- *
12
- * Centralized store that aggregates route change events from the RouteObserver.
13
- * Uses BaseEventStore pattern - the store automatically subscribes to routeObserver
14
- * when the first subscriber joins and unsubscribes when the last subscriber leaves.
15
- *
16
- * @example
17
- * ```typescript
18
- * import { routeEventStore } from '@buoy-gg/route-events';
19
- *
20
- * // Subscribe to route events - automatically starts listening!
21
- * const unsubscribe = routeEventStore.subscribeToEvents((events) => {
22
- * console.log('Route events:', events);
23
- * });
24
- *
25
- * // Later, clean up - automatically stops if no other subscribers
26
- * unsubscribe();
27
- * ```
28
- */
29
-
30
- // Re-export types for convenience
31
-
32
- /**
33
- * Listener callback type for route events array
34
- */
35
-
36
- /**
37
- * Listener callback for individual new events
38
- */
39
-
40
- class RouteEventStore extends _sharedUi.BaseEventStore {
41
- // Unsubscribe function for routeObserver
42
- routeObserverUnsubscribe = null;
43
- // The store's own subscription — see setBootCapture.
44
- bootCaptureRelease = null;
45
- bootCaptureHydrated = false;
46
-
47
- /**
48
- * Capture from app launch, not from the first open of the tool.
49
- *
50
- * A BaseEventStore only listens while something subscribes to it, and for
51
- * routes that was the open modal or a watching desktop — so every
52
- * navigation before the tool was first opened was simply never recorded,
53
- * and the Events tab opened on "No route events yet" after a session of
54
- * navigating. (It looked fine on any machine with Buoy Desktop running,
55
- * because the desktop's watch subscribed at boot.) Network and storage both
56
- * capture from launch; this holds a subscription of the store's own so
57
- * routes does too.
58
- *
59
- * The hold follows the tool's persisted monitoring switch: the modal calls
60
- * this on every toggle, and `hydrateBootCapture` reads the persisted value
61
- * at boot so a paused tool stays paused across a relaunch.
62
- */
63
- setBootCapture(enabled) {
64
- if (enabled && !this.bootCaptureRelease) {
65
- this.bootCaptureRelease = this.subscribeToEvents(() => {});
66
- } else if (!enabled && this.bootCaptureRelease) {
67
- this.bootCaptureRelease();
68
- this.bootCaptureRelease = null;
69
- }
70
- }
71
-
72
- /** Arm boot capture from the persisted monitoring switch (default on). */
73
- hydrateBootCapture() {
74
- if (this.bootCaptureHydrated) return;
75
- this.bootCaptureHydrated = true;
76
- void _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.routeEvents.isMonitoring()).then(raw => {
77
- // The modal may already have decided while the read was in flight.
78
- if (this.bootCaptureRelease) return;
79
- this.setBootCapture(raw !== "false");
80
- }).catch(() => this.setBootCapture(true));
81
- }
82
- constructor() {
83
- super({
84
- storeName: "route-events",
85
- maxEvents: 500
86
- });
87
- }
88
-
89
- /**
90
- * Start listening to route changes from routeObserver
91
- */
92
- startCapturing() {
93
- if (!this.routeObserverUnsubscribe) {
94
- this.routeObserverUnsubscribe = _RouteObserver.routeObserver.addListener(event => {
95
- this.addEvent(event);
96
- });
97
- }
98
- }
99
-
100
- /**
101
- * Stop listening to route changes
102
- */
103
- stopCapturing() {
104
- if (this.routeObserverUnsubscribe) {
105
- this.routeObserverUnsubscribe();
106
- this.routeObserverUnsubscribe = null;
107
- }
108
- }
109
-
110
- /**
111
- * Check if currently listening (has subscribers)
112
- */
113
- isCapturing() {
114
- return this.routeObserverUnsubscribe !== null;
115
- }
116
-
117
- // Alias for backwards compatibility
118
- isListening() {
119
- return this.isCapturing();
120
- }
121
- }
122
-
123
- // Singleton instance
124
- const routeEventStore = exports.routeEventStore = new RouteEventStore();
125
-
126
- // Convenience exports
127
- const subscribeToRouteEvents = listener => routeEventStore.subscribeToEvents(listener);
128
- exports.subscribeToRouteEvents = subscribeToRouteEvents;
129
- const onRouteEvent = callback => routeEventStore.onEvent(callback);
130
- exports.onRouteEvent = onRouteEvent;
131
- const getRouteEvents = () => routeEventStore.getEvents();
132
- exports.getRouteEvents = getRouteEvents;
133
- const clearRouteEvents = () => routeEventStore.clearEvents();
134
- exports.clearRouteEvents = clearRouteEvents;
135
- const isRouteListening = () => routeEventStore.isListening();
136
- exports.isRouteListening = isRouteListening;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.subscribeToRouteEvents=exports.routeEventStore=exports.onRouteEvent=exports.isRouteListening=exports.getRouteEvents=exports.clearRouteEvents=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _RouteObserver=require("../RouteObserver");class RouteEventStore extends _sharedUi.BaseEventStore{routeObserverUnsubscribe=null;bootCaptureRelease=null;bootCaptureHydrated=false;setBootCapture(e){if(e&&!this.bootCaptureRelease){this.bootCaptureRelease=this.subscribeToEvents(()=>{})}else if(!e&&this.bootCaptureRelease){this.bootCaptureRelease();this.bootCaptureRelease=null}}hydrateBootCapture(){if(this.bootCaptureHydrated)return;this.bootCaptureHydrated=true;void _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.routeEvents.isMonitoring()).then(e=>{if(this.bootCaptureRelease)return;this.setBootCapture(e!=="false")}).catch(()=>this.setBootCapture(true))}constructor(){super({storeName:"route-events",maxEvents:500})}startCapturing(){if(!this.routeObserverUnsubscribe){this.routeObserverUnsubscribe=_RouteObserver.routeObserver.addListener(e=>{this.addEvent(e)})}}stopCapturing(){if(this.routeObserverUnsubscribe){this.routeObserverUnsubscribe();this.routeObserverUnsubscribe=null}}isCapturing(){return this.routeObserverUnsubscribe!==null}isListening(){return this.isCapturing()}}const routeEventStore=exports.routeEventStore=new RouteEventStore;const subscribeToRouteEvents=t=>routeEventStore.subscribeToEvents(t);exports.subscribeToRouteEvents=subscribeToRouteEvents;const onRouteEvent=t=>routeEventStore.onEvent(t);exports.onRouteEvent=onRouteEvent;const getRouteEvents=()=>routeEventStore.getEvents();exports.getRouteEvents=getRouteEvents;const clearRouteEvents=()=>routeEventStore.clearEvents();exports.clearRouteEvents=clearRouteEvents;const isRouteListening=()=>routeEventStore.isListening();exports.isRouteListening=isRouteListening;