@workflow/web-shared 4.0.1-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +76 -0
  3. package/dist/api/workflow-api-client.d.ts +303 -0
  4. package/dist/api/workflow-api-client.d.ts.map +1 -0
  5. package/dist/api/workflow-api-client.js +797 -0
  6. package/dist/api/workflow-api-client.js.map +1 -0
  7. package/dist/api/workflow-server-actions.d.ts +97 -0
  8. package/dist/api/workflow-server-actions.d.ts.map +1 -0
  9. package/dist/api/workflow-server-actions.js +329 -0
  10. package/dist/api/workflow-server-actions.js.map +1 -0
  11. package/dist/components/ui/alert.d.ts +9 -0
  12. package/dist/components/ui/alert.d.ts.map +1 -0
  13. package/dist/components/ui/alert.jsx +22 -0
  14. package/dist/components/ui/alert.jsx.map +1 -0
  15. package/dist/index.d.ts +7 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +5 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/utils.d.ts +11 -0
  20. package/dist/lib/utils.d.ts.map +1 -0
  21. package/dist/lib/utils.js +19 -0
  22. package/dist/lib/utils.js.map +1 -0
  23. package/dist/run-trace-view.d.ts +8 -0
  24. package/dist/run-trace-view.d.ts.map +1 -0
  25. package/dist/run-trace-view.jsx +25 -0
  26. package/dist/run-trace-view.jsx.map +1 -0
  27. package/dist/sidebar/attribute-panel.d.ts +11 -0
  28. package/dist/sidebar/attribute-panel.d.ts.map +1 -0
  29. package/dist/sidebar/attribute-panel.jsx +153 -0
  30. package/dist/sidebar/attribute-panel.jsx.map +1 -0
  31. package/dist/sidebar/detail-card.d.ts +6 -0
  32. package/dist/sidebar/detail-card.d.ts.map +1 -0
  33. package/dist/sidebar/detail-card.jsx +13 -0
  34. package/dist/sidebar/detail-card.jsx.map +1 -0
  35. package/dist/sidebar/events-list.d.ts +8 -0
  36. package/dist/sidebar/events-list.d.ts.map +1 -0
  37. package/dist/sidebar/events-list.jsx +67 -0
  38. package/dist/sidebar/events-list.jsx.map +1 -0
  39. package/dist/sidebar/workflow-detail-panel.d.ts +8 -0
  40. package/dist/sidebar/workflow-detail-panel.d.ts.map +1 -0
  41. package/dist/sidebar/workflow-detail-panel.jsx +59 -0
  42. package/dist/sidebar/workflow-detail-panel.jsx.map +1 -0
  43. package/dist/trace-viewer/components/map.d.ts +8 -0
  44. package/dist/trace-viewer/components/map.d.ts.map +1 -0
  45. package/dist/trace-viewer/components/map.jsx +164 -0
  46. package/dist/trace-viewer/components/map.jsx.map +1 -0
  47. package/dist/trace-viewer/components/markers.d.ts +22 -0
  48. package/dist/trace-viewer/components/markers.d.ts.map +1 -0
  49. package/dist/trace-viewer/components/markers.jsx +400 -0
  50. package/dist/trace-viewer/components/markers.jsx.map +1 -0
  51. package/dist/trace-viewer/components/node.d.ts +31 -0
  52. package/dist/trace-viewer/components/node.d.ts.map +1 -0
  53. package/dist/trace-viewer/components/node.jsx +116 -0
  54. package/dist/trace-viewer/components/node.jsx.map +1 -0
  55. package/dist/trace-viewer/components/search-input.d.ts +9 -0
  56. package/dist/trace-viewer/components/search-input.d.ts.map +1 -0
  57. package/dist/trace-viewer/components/search-input.jsx +16 -0
  58. package/dist/trace-viewer/components/search-input.jsx.map +1 -0
  59. package/dist/trace-viewer/components/search.d.ts +3 -0
  60. package/dist/trace-viewer/components/search.d.ts.map +1 -0
  61. package/dist/trace-viewer/components/search.jsx +27 -0
  62. package/dist/trace-viewer/components/search.jsx.map +1 -0
  63. package/dist/trace-viewer/components/span-detail-panel.d.ts +10 -0
  64. package/dist/trace-viewer/components/span-detail-panel.d.ts.map +1 -0
  65. package/dist/trace-viewer/components/span-detail-panel.jsx +388 -0
  66. package/dist/trace-viewer/components/span-detail-panel.jsx.map +1 -0
  67. package/dist/trace-viewer/components/ui.d.ts +28 -0
  68. package/dist/trace-viewer/components/ui.d.ts.map +1 -0
  69. package/dist/trace-viewer/components/ui.jsx +54 -0
  70. package/dist/trace-viewer/components/ui.jsx.map +1 -0
  71. package/dist/trace-viewer/components/zoom-button.d.ts +3 -0
  72. package/dist/trace-viewer/components/zoom-button.d.ts.map +1 -0
  73. package/dist/trace-viewer/components/zoom-button.jsx +40 -0
  74. package/dist/trace-viewer/components/zoom-button.jsx.map +1 -0
  75. package/dist/trace-viewer/components/zoom-icons.d.ts +11 -0
  76. package/dist/trace-viewer/components/zoom-icons.d.ts.map +1 -0
  77. package/dist/trace-viewer/components/zoom-icons.jsx +23 -0
  78. package/dist/trace-viewer/components/zoom-icons.jsx.map +1 -0
  79. package/dist/trace-viewer/context.d.ts +183 -0
  80. package/dist/trace-viewer/context.d.ts.map +1 -0
  81. package/dist/trace-viewer/context.jsx +326 -0
  82. package/dist/trace-viewer/context.jsx.map +1 -0
  83. package/dist/trace-viewer/index.d.ts +5 -0
  84. package/dist/trace-viewer/index.d.ts.map +1 -0
  85. package/dist/trace-viewer/index.jsx +4 -0
  86. package/dist/trace-viewer/index.jsx.map +1 -0
  87. package/dist/trace-viewer/trace-viewer.d.ts +22 -0
  88. package/dist/trace-viewer/trace-viewer.d.ts.map +1 -0
  89. package/dist/trace-viewer/trace-viewer.jsx +311 -0
  90. package/dist/trace-viewer/trace-viewer.jsx.map +1 -0
  91. package/dist/trace-viewer/trace-viewer.module.css +1275 -0
  92. package/dist/trace-viewer/types.d.ts +201 -0
  93. package/dist/trace-viewer/types.d.ts.map +1 -0
  94. package/dist/trace-viewer/types.js +2 -0
  95. package/dist/trace-viewer/types.js.map +1 -0
  96. package/dist/trace-viewer/util/constants.d.ts +9 -0
  97. package/dist/trace-viewer/util/constants.d.ts.map +1 -0
  98. package/dist/trace-viewer/util/constants.js +9 -0
  99. package/dist/trace-viewer/util/constants.js.map +1 -0
  100. package/dist/trace-viewer/util/scrollbar-width.d.ts +2 -0
  101. package/dist/trace-viewer/util/scrollbar-width.d.ts.map +1 -0
  102. package/dist/trace-viewer/util/scrollbar-width.js +14 -0
  103. package/dist/trace-viewer/util/scrollbar-width.js.map +1 -0
  104. package/dist/trace-viewer/util/timing.d.ts +8 -0
  105. package/dist/trace-viewer/util/timing.d.ts.map +1 -0
  106. package/dist/trace-viewer/util/timing.js +29 -0
  107. package/dist/trace-viewer/util/timing.js.map +1 -0
  108. package/dist/trace-viewer/util/tree.d.ts +13 -0
  109. package/dist/trace-viewer/util/tree.d.ts.map +1 -0
  110. package/dist/trace-viewer/util/tree.js +223 -0
  111. package/dist/trace-viewer/util/tree.js.map +1 -0
  112. package/dist/trace-viewer/util/use-immediate-style.d.ts +15 -0
  113. package/dist/trace-viewer/util/use-immediate-style.d.ts.map +1 -0
  114. package/dist/trace-viewer/util/use-immediate-style.js +22 -0
  115. package/dist/trace-viewer/util/use-immediate-style.js.map +1 -0
  116. package/dist/trace-viewer/util/use-streaming-spans.d.ts +8 -0
  117. package/dist/trace-viewer/util/use-streaming-spans.d.ts.map +1 -0
  118. package/dist/trace-viewer/util/use-streaming-spans.js +332 -0
  119. package/dist/trace-viewer/util/use-streaming-spans.js.map +1 -0
  120. package/dist/trace-viewer/util/use-trackpad-zoom.d.ts +6 -0
  121. package/dist/trace-viewer/util/use-trackpad-zoom.d.ts.map +1 -0
  122. package/dist/trace-viewer/util/use-trackpad-zoom.jsx +38 -0
  123. package/dist/trace-viewer/util/use-trackpad-zoom.jsx.map +1 -0
  124. package/dist/trace-viewer/worker.d.ts +2 -0
  125. package/dist/trace-viewer/worker.d.ts.map +1 -0
  126. package/dist/trace-viewer/worker.js +107 -0
  127. package/dist/trace-viewer/worker.js.map +1 -0
  128. package/dist/workflow-trace-view.d.ts +12 -0
  129. package/dist/workflow-trace-view.d.ts.map +1 -0
  130. package/dist/workflow-trace-view.jsx +129 -0
  131. package/dist/workflow-trace-view.jsx.map +1 -0
  132. package/dist/workflow-traces/event-colors.d.ts +31 -0
  133. package/dist/workflow-traces/event-colors.d.ts.map +1 -0
  134. package/dist/workflow-traces/event-colors.js +68 -0
  135. package/dist/workflow-traces/event-colors.js.map +1 -0
  136. package/dist/workflow-traces/trace-colors.d.ts +15 -0
  137. package/dist/workflow-traces/trace-colors.d.ts.map +1 -0
  138. package/dist/workflow-traces/trace-colors.js +89 -0
  139. package/dist/workflow-traces/trace-colors.js.map +1 -0
  140. package/dist/workflow-traces/trace-span-construction.d.ts +31 -0
  141. package/dist/workflow-traces/trace-span-construction.d.ts.map +1 -0
  142. package/dist/workflow-traces/trace-span-construction.js +173 -0
  143. package/dist/workflow-traces/trace-span-construction.js.map +1 -0
  144. package/dist/workflow-traces/trace-time-utils.d.ts +13 -0
  145. package/dist/workflow-traces/trace-time-utils.d.ts.map +1 -0
  146. package/dist/workflow-traces/trace-time-utils.js +34 -0
  147. package/dist/workflow-traces/trace-time-utils.js.map +1 -0
  148. package/package.json +59 -0
@@ -0,0 +1,311 @@
1
+ 'use client';
2
+ import { clsx } from 'clsx';
3
+ import { useCallback, useEffect, useLayoutEffect, useRef } from 'react';
4
+ import { MiniMap } from './components/map';
5
+ import { CursorMarker, EventMarkers, Markers } from './components/markers';
6
+ import { SpanNodes } from './components/node';
7
+ import { SearchBar } from './components/search';
8
+ import { SpanDetailPanel } from './components/span-detail-panel';
9
+ import { ZoomButton } from './components/zoom-button';
10
+ import { TraceViewerContextProvider, useTraceViewer } from './context';
11
+ import styles from './trace-viewer.module.css';
12
+ import { MAP_HEIGHT, MARKER_HEIGHT, MARKER_NOTCH_HEIGHT, ROW_HEIGHT, ROW_PADDING, SEARCH_GAP, SEARCH_HEIGHT, TIMELINE_PADDING, } from './util/constants';
13
+ import { parseTrace } from './util/tree';
14
+ import { useStreamingSpans } from './util/use-streaming-spans';
15
+ export function TraceViewerProvider({ getQuickLinks, children, }) {
16
+ return (<TraceViewerContextProvider getQuickLinks={getQuickLinks}>
17
+ {children}
18
+ </TraceViewerContextProvider>);
19
+ }
20
+ const skeletonTrace = {
21
+ traceId: 'skeleton',
22
+ spans: [
23
+ {
24
+ parentSpanId: '',
25
+ spanId: 'root',
26
+ name: 'root span',
27
+ kind: 1,
28
+ resource: 'vercel.runtime',
29
+ startTime: [5000, 0],
30
+ endTime: [6000, 0],
31
+ duration: [1000, 0],
32
+ library: {
33
+ name: 'vercel-site',
34
+ },
35
+ status: {
36
+ code: 1,
37
+ },
38
+ attributes: {
39
+ 'vercel.ownerId': 'team_abc',
40
+ },
41
+ traceFlags: 1,
42
+ events: [],
43
+ links: [],
44
+ },
45
+ ],
46
+ resources: [
47
+ {
48
+ name: 'vercel.runtime',
49
+ attributes: {},
50
+ },
51
+ ],
52
+ rootSpanId: 'root',
53
+ };
54
+ export function TraceViewerTimeline({ trace = skeletonTrace, className = '', scrollLock = false, height, withPanel = false, highlightedSpans, }) {
55
+ const isSkeleton = trace === skeletonTrace;
56
+ const { state, dispatch } = useTraceViewer();
57
+ const { timelineRef, scrollSnapshotRef } = state;
58
+ const memoCache = state.memoCacheRef.current;
59
+ const hideSearchBar = (highlightedSpans?.length ?? 0) > 0 || trace.spans.length <= 10;
60
+ useEffect(() => {
61
+ const { root, map: spanMap } = parseTrace(trace);
62
+ dispatch({
63
+ type: 'setRoot',
64
+ root,
65
+ spanMap,
66
+ resources: trace.resources || [],
67
+ });
68
+ }, [dispatch, trace]);
69
+ const { rows, spans, events, scale } = useStreamingSpans(highlightedSpans);
70
+ const ref = useRef(null);
71
+ useLayoutEffect(() => {
72
+ const $el = ref.current;
73
+ if (!$el)
74
+ return;
75
+ const onResize = () => {
76
+ const padding = 2 * TIMELINE_PADDING;
77
+ const rect = $el.getBoundingClientRect();
78
+ dispatch({
79
+ type: 'setSize',
80
+ width: rect.width - padding,
81
+ height: rect.height,
82
+ });
83
+ };
84
+ onResize();
85
+ const observer = new ResizeObserver(onResize);
86
+ observer.observe($el);
87
+ window.addEventListener('resize', onResize);
88
+ return () => {
89
+ observer.disconnect();
90
+ window.removeEventListener('resize', onResize);
91
+ };
92
+ }, [dispatch]);
93
+ const lastClickRef = useRef({
94
+ t: 0,
95
+ x: -1,
96
+ y: -1,
97
+ spanId: '',
98
+ });
99
+ const onClick = useCallback((event) => {
100
+ // NOTE(wits): We manually implement double-click logic here so that we can support double
101
+ // clicking a span even if the first click moves the span that the user is clicking on due
102
+ // to the panel opening. If we used a regular double click listener we would need to delay
103
+ // the opening of the panel artificially. This implementation allows us to always be
104
+ // FAST while also avoiding a FRUSTRATING situation.
105
+ const prev = lastClickRef.current;
106
+ const t = Date.now();
107
+ const { clientX: x, clientY: y } = event;
108
+ const d = Math.sqrt((x - prev.x) ** 2 + (y - prev.y) ** 2);
109
+ // double click
110
+ if (t - prev.t <= 500 && d <= 8) {
111
+ event.stopPropagation();
112
+ event.preventDefault();
113
+ if (!prev.spanId) {
114
+ dispatch({
115
+ type: 'resetScale',
116
+ });
117
+ return;
118
+ }
119
+ dispatch({
120
+ type: 'select',
121
+ id: prev.spanId,
122
+ });
123
+ dispatch({
124
+ type: 'scaleToNode',
125
+ id: prev.spanId,
126
+ });
127
+ return;
128
+ }
129
+ const target = event.target;
130
+ if (!target.closest(`.${String(styles.timeline)}`))
131
+ return;
132
+ const $button = target.closest('[data-span-id]');
133
+ const spanId = $button?.dataset.spanId || '';
134
+ lastClickRef.current = {
135
+ x,
136
+ y,
137
+ t,
138
+ spanId,
139
+ };
140
+ if (!spanId)
141
+ return;
142
+ dispatch({
143
+ type: 'toggleSelection',
144
+ id: spanId,
145
+ });
146
+ event.stopPropagation();
147
+ }, [dispatch]);
148
+ // Zoom helper
149
+ useLayoutEffect(() => {
150
+ const $timeline = timelineRef.current;
151
+ if (!$timeline)
152
+ return;
153
+ const snapshot = scrollSnapshotRef.current;
154
+ if (snapshot) {
155
+ $timeline.scrollLeft = snapshot.anchorT * scale - snapshot.anchorX;
156
+ }
157
+ }, [scrollSnapshotRef, timelineRef, scale]);
158
+ // Selection helper
159
+ useEffect(() => {
160
+ const spanId = state.selected?.span.spanId;
161
+ if (!spanId)
162
+ return;
163
+ const timeout = setTimeout(() => {
164
+ const $timeline = state.timelineRef.current;
165
+ const $span = $timeline?.querySelector(`[data-span-id="${spanId}"]`);
166
+ if (!$timeline || !$span)
167
+ return;
168
+ const viewRect = $timeline.getBoundingClientRect();
169
+ const spanRect = $span.getBoundingClientRect();
170
+ // If the selected span is narrower than the timeline, scroll it into view
171
+ if (spanRect.width < viewRect.width &&
172
+ (spanRect.left < viewRect.left ||
173
+ spanRect.right > viewRect.right ||
174
+ spanRect.top < viewRect.top ||
175
+ spanRect.bottom > viewRect.bottom)) {
176
+ $span.scrollIntoView({
177
+ block: 'nearest',
178
+ inline: 'center',
179
+ behavior: 'smooth',
180
+ });
181
+ }
182
+ }, 500);
183
+ return () => {
184
+ clearTimeout(timeout);
185
+ };
186
+ }, [state.selected, state.timelineRef]);
187
+ // Global keyboard shortcuts
188
+ useEffect(() => {
189
+ const onKeyDown = (e) => {
190
+ if (e.key === 'Escape') {
191
+ dispatch({
192
+ type: 'escape',
193
+ });
194
+ }
195
+ };
196
+ window.addEventListener('keydown', onKeyDown);
197
+ return () => {
198
+ window.removeEventListener('keydown', onKeyDown);
199
+ };
200
+ }, [dispatch]);
201
+ // Scroll locking
202
+ useEffect(() => {
203
+ if (!scrollLock)
204
+ return;
205
+ const $html = document.documentElement;
206
+ const $body = document.body;
207
+ $html.style.overflow = 'clip';
208
+ $body.style.overflow = 'clip';
209
+ const onScroll = (event) => {
210
+ if (event?.cancelable) {
211
+ event.preventDefault();
212
+ }
213
+ else {
214
+ window.scrollTo({
215
+ left: 0,
216
+ top: 0,
217
+ behavior: 'instant',
218
+ });
219
+ }
220
+ };
221
+ onScroll();
222
+ window.addEventListener('scroll', onScroll, {
223
+ passive: false,
224
+ });
225
+ return () => {
226
+ $html.style.overflow = '';
227
+ $body.style.overflow = '';
228
+ window.removeEventListener('scroll', onScroll);
229
+ };
230
+ }, [scrollLock]);
231
+ const timelineHeight = Math.max(state.timelineHeight - state.scrollbarWidth, MARKER_HEIGHT +
232
+ ROW_PADDING +
233
+ rows.length * (ROW_HEIGHT + ROW_PADDING) -
234
+ ROW_PADDING +
235
+ // When there are enough spans to be near the bottom edge, add some extra padding
236
+ // to avoid overlapping with the zoom buttons, etc.
237
+ 84);
238
+ const inert = Boolean(state.isMobile && state.selected);
239
+ return (<div className={clsx(styles.traceViewer, isSkeleton && styles.skeleton, className)} onClickCapture={onClick} ref={ref} style={{
240
+ height,
241
+ '--timeline-padding': `${TIMELINE_PADDING}px`,
242
+ '--row-height': `${ROW_HEIGHT}px`,
243
+ '--row-padding': `${ROW_PADDING}px`,
244
+ '--search-height': `${!hideSearchBar ? SEARCH_HEIGHT : 0}px`,
245
+ '--search-gap': `${!hideSearchBar ? SEARCH_GAP : 2}px`,
246
+ '--map-height': `${MAP_HEIGHT}px`,
247
+ '--timeline-width': `${state.timelineWidth}px`,
248
+ '--timeline-height': `${state.timelineHeight}px`,
249
+ '--timeline-scroll-width': `${Math.round(state.root.duration * state.scale)}px`,
250
+ '--panel-width': `${state.panelWidth}px`,
251
+ '--panel-height': `${state.panelHeight}px`,
252
+ '--height': `${state.height}px`,
253
+ '--scrollbar-width': `${state.scrollbarWidth}px`,
254
+ '--marker-height': `${MARKER_HEIGHT}px`,
255
+ '--marker-notch-height': `${MARKER_NOTCH_HEIGHT}px`,
256
+ }}>
257
+ {!hideSearchBar ? <SearchBar /> : null}
258
+ <MiniMap rows={rows} scale={scale} timelineRef={timelineRef}/>
259
+ <div className={clsx(styles.traceViewerContent, inert && styles.inert)}>
260
+ <div className={styles.timeline} ref={timelineRef}>
261
+ <div style={{
262
+ position: 'relative',
263
+ width: state.timelineWidth,
264
+ height: state.timelineHeight - TIMELINE_PADDING * 2,
265
+ padding: TIMELINE_PADDING,
266
+ paddingBottom: 0,
267
+ }}>
268
+ <div className={styles.traceNode} style={{
269
+ width: state.root.duration * scale || undefined,
270
+ height: timelineHeight - TIMELINE_PADDING * 2,
271
+ }}>
272
+ <Markers scale={scale}/>
273
+ <EventMarkers events={events} root={state.root} scale={scale}/>
274
+ <CursorMarker dispatch={dispatch} events={events} memoCacheRef={state.memoCacheRef} root={state.root} scale={scale} scrollSnapshotRef={scrollSnapshotRef} spans={spans} timelineRef={timelineRef}/>
275
+ <SpanNodes cacheKey={memoCache.get('')} cache={memoCache} customSpanClassNameFunc={state.customSpanClassNameFunc} customSpanEventClassNameFunc={state.customSpanEventClassNameFunc} root={state.root} scale={scale} scrollSnapshotRef={scrollSnapshotRef} spans={spans}/>
276
+ </div>
277
+ </div>
278
+ </div>
279
+ <div className={styles.zoomButtonTraceViewer}>
280
+ <ZoomButton />
281
+ </div>
282
+ </div>
283
+ {withPanel ? (<div className={clsx(styles.spanDetailPanelTraceViewer, !state.selected && styles.hidden, state.isMobile && styles.mobile)}>
284
+ <SpanDetailPanel attached/>
285
+ </div>) : null}
286
+ </div>);
287
+ }
288
+ export function TraceViewerPanel({ className = '', children = null, }) {
289
+ const { state } = useTraceViewer();
290
+ if (!state.selected) {
291
+ return children;
292
+ }
293
+ return (<div className={clsx(styles.spanDetailPanelTraceViewer, className)} style={{
294
+ position: 'relative',
295
+ '--search-height': '0',
296
+ '--search-gap': '0',
297
+ '--map-height': '0',
298
+ '--panel-width': `100%`,
299
+ '--panel-height': `100%`,
300
+ '--height': `100%`,
301
+ '--scrollbar-width': `${state.scrollbarWidth}px`,
302
+ }}>
303
+ <SpanDetailPanel />
304
+ </div>);
305
+ }
306
+ export function TraceViewer(props) {
307
+ return (<TraceViewerContextProvider getQuickLinks={props.getQuickLinks} withPanel>
308
+ <TraceViewerTimeline withPanel {...props}/>
309
+ </TraceViewerContextProvider>);
310
+ }
311
+ //# sourceMappingURL=trace-viewer.jsx.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-viewer.jsx","sourceRoot":"","sources":["../../src/trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"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"}