@workflow/web-shared 5.0.0-beta.0 → 5.0.0-beta.10

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 (275) hide show
  1. package/README.md +1 -1
  2. package/dist/components/error-boundary.js +1 -1
  3. package/dist/components/event-list-view.d.ts +18 -1
  4. package/dist/components/event-list-view.d.ts.map +1 -1
  5. package/dist/components/event-list-view.js +242 -142
  6. package/dist/components/hook-actions.js +1 -1
  7. package/dist/components/index.d.ts +4 -1
  8. package/dist/components/index.d.ts.map +1 -1
  9. package/dist/components/index.js +5 -2
  10. package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
  11. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
  12. package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
  13. package/dist/components/new-trace-viewer/components/event-list.d.ts +10 -0
  14. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
  15. package/dist/components/new-trace-viewer/components/event-list.js +39 -0
  16. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
  17. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
  18. package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
  19. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
  20. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
  21. package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
  22. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
  23. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
  24. package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
  25. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
  26. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
  27. package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
  28. package/dist/components/new-trace-viewer/components/split-pane.d.ts +14 -0
  29. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
  30. package/dist/components/new-trace-viewer/components/split-pane.js +99 -0
  31. package/dist/components/new-trace-viewer/components/timeline.d.ts +34 -0
  32. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
  33. package/dist/components/new-trace-viewer/components/timeline.js +223 -0
  34. package/dist/components/new-trace-viewer/context.d.ts +15 -0
  35. package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
  36. package/dist/components/new-trace-viewer/context.js +47 -0
  37. package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
  38. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
  39. package/dist/components/new-trace-viewer/detail-panel.js +13 -0
  40. package/dist/components/new-trace-viewer/icons.d.ts +6 -0
  41. package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
  42. package/dist/components/new-trace-viewer/icons.js +15 -0
  43. package/dist/components/new-trace-viewer/search.d.ts +19 -0
  44. package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
  45. package/dist/components/new-trace-viewer/search.js +134 -0
  46. package/dist/components/new-trace-viewer/trace-viewer.d.ts +8 -0
  47. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
  48. package/dist/components/new-trace-viewer/trace-viewer.js +387 -0
  49. package/dist/components/new-trace-viewer/types.d.ts +1 -0
  50. package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
  51. package/dist/components/new-trace-viewer/types.js +2 -0
  52. package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
  53. package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
  54. package/dist/components/new-trace-viewer/util/constants.js +2 -0
  55. package/dist/components/new-trace-viewer/utils.d.ts +46 -0
  56. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
  57. package/dist/components/new-trace-viewer/utils.js +330 -0
  58. package/dist/components/run-trace-view.d.ts +2 -1
  59. package/dist/components/run-trace-view.d.ts.map +1 -1
  60. package/dist/components/run-trace-view.js +3 -3
  61. package/dist/components/sidebar/attribute-panel.d.ts +7 -1
  62. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  63. package/dist/components/sidebar/attribute-panel.js +131 -70
  64. package/dist/components/sidebar/conversation-view.js +1 -1
  65. package/dist/components/sidebar/copyable-data-block.d.ts +1 -0
  66. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  67. package/dist/components/sidebar/copyable-data-block.js +16 -15
  68. package/dist/components/sidebar/detail-card.d.ts +5 -6
  69. package/dist/components/sidebar/detail-card.d.ts.map +1 -1
  70. package/dist/components/sidebar/detail-card.js +32 -16
  71. package/dist/components/sidebar/entity-detail-panel.d.ts +3 -1
  72. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  73. package/dist/components/sidebar/entity-detail-panel.js +20 -37
  74. package/dist/components/sidebar/events-list.d.ts +1 -1
  75. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  76. package/dist/components/sidebar/events-list.js +46 -32
  77. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  78. package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
  79. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
  80. package/dist/components/sidebar/sidebar-data-context.js +19 -0
  81. package/dist/components/stream-viewer.d.ts +1 -1
  82. package/dist/components/stream-viewer.d.ts.map +1 -1
  83. package/dist/components/stream-viewer.js +3 -27
  84. package/dist/components/trace-viewer/components/map.js +1 -1
  85. package/dist/components/trace-viewer/components/markers.js +1 -1
  86. package/dist/components/trace-viewer/components/node.js +1 -1
  87. package/dist/components/trace-viewer/components/search-input.js +1 -1
  88. package/dist/components/trace-viewer/components/search.js +1 -1
  89. package/dist/components/trace-viewer/components/span-content.js +1 -1
  90. package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
  91. package/dist/components/trace-viewer/components/span-segments.js +1 -1
  92. package/dist/components/trace-viewer/components/span-strategies.js +1 -1
  93. package/dist/components/trace-viewer/components/ui.js +1 -1
  94. package/dist/components/trace-viewer/components/zoom-button.js +1 -1
  95. package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
  96. package/dist/components/trace-viewer/context.js +1 -1
  97. package/dist/components/trace-viewer/index.js +1 -1
  98. package/dist/components/trace-viewer/trace-viewer.js +1 -1
  99. package/dist/components/trace-viewer/types.js +1 -1
  100. package/dist/components/trace-viewer/util/constants.js +1 -1
  101. package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
  102. package/dist/components/trace-viewer/util/timing.d.ts +1 -1
  103. package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
  104. package/dist/components/trace-viewer/util/timing.js +6 -9
  105. package/dist/components/trace-viewer/util/tree.js +1 -1
  106. package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
  107. package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
  108. package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
  109. package/dist/components/trace-viewer/worker.js +1 -1
  110. package/dist/components/trace-viewer-new.d.ts +10 -0
  111. package/dist/components/trace-viewer-new.d.ts.map +1 -0
  112. package/dist/components/trace-viewer-new.js +23 -0
  113. package/dist/components/ui/alert.js +1 -1
  114. package/dist/components/ui/button.d.ts +10 -0
  115. package/dist/components/ui/button.d.ts.map +1 -0
  116. package/dist/components/ui/button.js +46 -0
  117. package/dist/components/ui/card.js +1 -1
  118. package/dist/components/ui/data-inspector.d.ts +39 -1
  119. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  120. package/dist/components/ui/data-inspector.js +207 -22
  121. package/dist/components/ui/decrypt-button.js +1 -1
  122. package/dist/components/ui/error-card.js +1 -1
  123. package/dist/components/ui/error-stack-block.d.ts.map +1 -1
  124. package/dist/components/ui/error-stack-block.js +27 -19
  125. package/dist/components/ui/icon-button.d.ts +13 -0
  126. package/dist/components/ui/icon-button.d.ts.map +1 -0
  127. package/dist/components/ui/icon-button.js +29 -0
  128. package/dist/components/ui/inspector-theme.d.ts +9 -10
  129. package/dist/components/ui/inspector-theme.d.ts.map +1 -1
  130. package/dist/components/ui/inspector-theme.js +39 -72
  131. package/dist/components/ui/load-more-button.js +1 -1
  132. package/dist/components/ui/menu-dropdown.js +1 -1
  133. package/dist/components/ui/skeleton.js +1 -1
  134. package/dist/components/ui/spinner.js +1 -1
  135. package/dist/components/ui/timestamp-tooltip.js +1 -1
  136. package/dist/components/workflow-trace-view.d.ts +3 -1
  137. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  138. package/dist/components/workflow-trace-view.js +10 -5
  139. package/dist/components/workflow-traces/event-colors.js +1 -1
  140. package/dist/components/workflow-traces/trace-colors.js +1 -1
  141. package/dist/components/workflow-traces/trace-span-construction.d.ts +2 -2
  142. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  143. package/dist/components/workflow-traces/trace-span-construction.js +19 -6
  144. package/dist/components/workflow-traces/trace-time-utils.js +1 -1
  145. package/dist/hooks/use-dark-mode.js +1 -1
  146. package/dist/hooks/use-reduced-motion.d.ts +10 -0
  147. package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
  148. package/dist/hooks/use-reduced-motion.js +29 -0
  149. package/dist/index.d.ts +3 -1
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +3 -2
  152. package/dist/lib/event-analysis.js +1 -1
  153. package/dist/lib/event-materialization.js +1 -1
  154. package/dist/lib/exact-event-search-id.d.ts +25 -0
  155. package/dist/lib/exact-event-search-id.d.ts.map +1 -0
  156. package/dist/lib/exact-event-search-id.js +39 -0
  157. package/dist/lib/hydration.d.ts +15 -2
  158. package/dist/lib/hydration.d.ts.map +1 -1
  159. package/dist/lib/hydration.js +168 -16
  160. package/dist/lib/stream-display.d.ts +18 -0
  161. package/dist/lib/stream-display.d.ts.map +1 -0
  162. package/dist/lib/stream-display.js +30 -0
  163. package/dist/lib/toast.js +1 -1
  164. package/dist/lib/trace-builder.d.ts.map +1 -1
  165. package/dist/lib/trace-builder.js +3 -2
  166. package/dist/lib/utils.d.ts +9 -9
  167. package/dist/lib/utils.d.ts.map +1 -1
  168. package/dist/lib/utils.js +27 -32
  169. package/dist/styles.css +475 -1
  170. package/package.json +6 -4
  171. package/src/components/event-list-view.tsx +447 -282
  172. package/src/components/index.ts +12 -1
  173. package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
  174. package/src/components/new-trace-viewer/components/event-list.tsx +127 -0
  175. package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
  176. package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
  177. package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
  178. package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
  179. package/src/components/new-trace-viewer/components/split-pane.tsx +185 -0
  180. package/src/components/new-trace-viewer/components/timeline.tsx +552 -0
  181. package/src/components/new-trace-viewer/context.tsx +92 -0
  182. package/src/components/new-trace-viewer/detail-panel.tsx +55 -0
  183. package/src/components/new-trace-viewer/icons.tsx +79 -0
  184. package/src/components/new-trace-viewer/search.ts +178 -0
  185. package/src/components/new-trace-viewer/trace-viewer.tsx +694 -0
  186. package/src/components/new-trace-viewer/types.ts +0 -0
  187. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  188. package/src/components/new-trace-viewer/utils.ts +482 -0
  189. package/src/components/run-trace-view.tsx +3 -0
  190. package/src/components/sidebar/attribute-panel.tsx +240 -196
  191. package/src/components/sidebar/copyable-data-block.tsx +49 -27
  192. package/src/components/sidebar/detail-card.tsx +119 -59
  193. package/src/components/sidebar/entity-detail-panel.tsx +92 -148
  194. package/src/components/sidebar/events-list.tsx +93 -108
  195. package/src/components/sidebar/sidebar-data-context.tsx +62 -0
  196. package/src/components/stream-viewer.tsx +18 -40
  197. package/src/components/trace-viewer/util/timing.ts +5 -9
  198. package/src/components/trace-viewer-new.tsx +49 -0
  199. package/src/components/ui/button.tsx +68 -0
  200. package/src/components/ui/data-inspector.tsx +427 -31
  201. package/src/components/ui/error-stack-block.tsx +39 -30
  202. package/src/components/ui/icon-button.tsx +57 -0
  203. package/src/components/ui/inspector-theme.ts +39 -81
  204. package/src/components/workflow-trace-view.tsx +12 -2
  205. package/src/components/workflow-traces/trace-span-construction.ts +24 -6
  206. package/src/hooks/use-reduced-motion.ts +34 -0
  207. package/src/index.ts +9 -0
  208. package/src/lib/exact-event-search-id.ts +67 -0
  209. package/src/lib/hydration.ts +182 -14
  210. package/src/lib/stream-display.ts +48 -0
  211. package/src/lib/trace-builder.ts +2 -1
  212. package/src/lib/utils.ts +27 -32
  213. package/src/styles.css +475 -1
  214. package/dist/components/error-boundary.js.map +0 -1
  215. package/dist/components/event-list-view.js.map +0 -1
  216. package/dist/components/hook-actions.js.map +0 -1
  217. package/dist/components/index.js.map +0 -1
  218. package/dist/components/run-trace-view.js.map +0 -1
  219. package/dist/components/sidebar/attribute-panel.js.map +0 -1
  220. package/dist/components/sidebar/conversation-view.js.map +0 -1
  221. package/dist/components/sidebar/copyable-data-block.js.map +0 -1
  222. package/dist/components/sidebar/detail-card.js.map +0 -1
  223. package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
  224. package/dist/components/sidebar/events-list.js.map +0 -1
  225. package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
  226. package/dist/components/stream-viewer.js.map +0 -1
  227. package/dist/components/trace-viewer/components/map.js.map +0 -1
  228. package/dist/components/trace-viewer/components/markers.js.map +0 -1
  229. package/dist/components/trace-viewer/components/node.js.map +0 -1
  230. package/dist/components/trace-viewer/components/search-input.js.map +0 -1
  231. package/dist/components/trace-viewer/components/search.js.map +0 -1
  232. package/dist/components/trace-viewer/components/span-content.js.map +0 -1
  233. package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
  234. package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
  235. package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
  236. package/dist/components/trace-viewer/components/ui.js.map +0 -1
  237. package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
  238. package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
  239. package/dist/components/trace-viewer/context.js.map +0 -1
  240. package/dist/components/trace-viewer/index.js.map +0 -1
  241. package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
  242. package/dist/components/trace-viewer/types.js.map +0 -1
  243. package/dist/components/trace-viewer/util/constants.js.map +0 -1
  244. package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
  245. package/dist/components/trace-viewer/util/timing.js.map +0 -1
  246. package/dist/components/trace-viewer/util/tree.js.map +0 -1
  247. package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
  248. package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
  249. package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
  250. package/dist/components/trace-viewer/worker.js.map +0 -1
  251. package/dist/components/ui/alert.js.map +0 -1
  252. package/dist/components/ui/card.js.map +0 -1
  253. package/dist/components/ui/data-inspector.js.map +0 -1
  254. package/dist/components/ui/decrypt-button.js.map +0 -1
  255. package/dist/components/ui/error-card.js.map +0 -1
  256. package/dist/components/ui/error-stack-block.js.map +0 -1
  257. package/dist/components/ui/inspector-theme.js.map +0 -1
  258. package/dist/components/ui/load-more-button.js.map +0 -1
  259. package/dist/components/ui/menu-dropdown.js.map +0 -1
  260. package/dist/components/ui/skeleton.js.map +0 -1
  261. package/dist/components/ui/spinner.js.map +0 -1
  262. package/dist/components/ui/timestamp-tooltip.js.map +0 -1
  263. package/dist/components/workflow-trace-view.js.map +0 -1
  264. package/dist/components/workflow-traces/event-colors.js.map +0 -1
  265. package/dist/components/workflow-traces/trace-colors.js.map +0 -1
  266. package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
  267. package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
  268. package/dist/hooks/use-dark-mode.js.map +0 -1
  269. package/dist/index.js.map +0 -1
  270. package/dist/lib/event-analysis.js.map +0 -1
  271. package/dist/lib/event-materialization.js.map +0 -1
  272. package/dist/lib/hydration.js.map +0 -1
  273. package/dist/lib/toast.js.map +0 -1
  274. package/dist/lib/trace-builder.js.map +0 -1
  275. package/dist/lib/utils.js.map +0 -1
@@ -5,9 +5,10 @@
5
5
  * `Buffer` dependency). Produces `ClassInstanceRef` objects and `StreamRef`
6
6
  * objects for UI rendering.
7
7
  */
8
- import { extractClassName, hydrateResourceIO as hydrateResourceIOGeneric, isEncryptedData, isExpiredStub, observabilityRevivers, } from '@workflow/core/serialization-format';
8
+ import { extractClassName, hydrateResourceIO as hydrateResourceIOGeneric, isEncryptedData, isExpiredStub, isRunRef, observabilityRevivers, serializedInstanceToRef, } from '@workflow/core/serialization-format';
9
+ import { EVENT_DATA_REF_FIELDS } from '@workflow/world';
9
10
  // Re-export types and utilities that consumers need
10
- export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, isClassInstanceRef, isEncryptedData, isStreamId, isStreamRef, STREAM_REF_TYPE, truncateId, } from '@workflow/core/serialization-format';
11
+ export { CLASS_INSTANCE_REF_TYPE, ClassInstanceRef, ENCRYPTED_PLACEHOLDER, extractStreamIds, isClassInstanceRef, isEncryptedData, isRunRef, isStreamId, isStreamRef, RUN_REF_TYPE, STREAM_REF_TYPE, serializedInstanceToRef, truncateId, } from '@workflow/core/serialization-format';
11
12
  // ---------------------------------------------------------------------------
12
13
  // Browser-safe base64 decode
13
14
  // ---------------------------------------------------------------------------
@@ -25,12 +26,51 @@ function base64ToArrayBuffer(base64) {
25
26
  // ---------------------------------------------------------------------------
26
27
  // Web revivers (browser-safe, no Buffer dependency)
27
28
  // ---------------------------------------------------------------------------
29
+ /**
30
+ * Build a reviver for one of the built-in `Error` subclasses (e.g.
31
+ * `TypeError`, `RangeError`). The constructor for the named subclass is
32
+ * resolved off `globalThis` at call time so the produced instance has the
33
+ * correct prototype chain in the consumer realm. Falls back to a generic
34
+ * `Error` (with `name` set) if the global isn't available, which keeps the
35
+ * o11y UI rendering even on exotic browsers.
36
+ *
37
+ * `cause` is passed through `ErrorOptions` to the constructor when present,
38
+ * matching `getCommonRevivers` in `@workflow/core` so the resulting `cause`
39
+ * property has the same semantics (non-enumerable, set by the engine) as a
40
+ * freshly thrown Error in the consumer realm. The `'cause' in value` check
41
+ * preserves the distinction between "no cause" and "cause is undefined".
42
+ */
43
+ function makeWebErrorSubclassReviver(name) {
44
+ return (value) => {
45
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
46
+ const Ctor = globalThis[name];
47
+ let error;
48
+ if (typeof Ctor === 'function') {
49
+ error = new Ctor(value.message, opts);
50
+ }
51
+ else {
52
+ // Fallback path: no built-in subclass available (exotic env). Construct
53
+ // a plain Error with the right `name` and copy `cause` manually since
54
+ // the base Error constructor is what we actually called.
55
+ error = Object.assign(new Error(value.message, opts), { name });
56
+ }
57
+ if (value.stack !== undefined)
58
+ error.stack = value.stack;
59
+ return error;
60
+ };
61
+ }
28
62
  /**
29
63
  * Get the web-specific revivers for hydrating serialized data.
30
64
  *
31
65
  * Uses `atob()` for base64 decoding (no Node.js Buffer dependency).
32
66
  * All types are revived as real instances (Date, Map, Set, URL,
33
67
  * URLSearchParams, Headers, Error, etc.).
68
+ *
69
+ * NOTE: this set must mirror the keys in `SerializableSpecial` (see
70
+ * `@workflow/core/serialization/types`). Any reducer key added on the
71
+ * serialization side that isn't covered here will cause `devalue.unflatten`
72
+ * to throw `Unknown type X`, which `hydrateResourceIO` swallows and
73
+ * surfaces as a "Failed to load resource details" banner in the o11y UI.
34
74
  */
35
75
  export function getWebRevivers() {
36
76
  function reviveArrayBuffer(value) {
@@ -46,10 +86,94 @@ export function getWebRevivers() {
46
86
  BigInt64Array: (value) => new BigInt64Array(reviveArrayBuffer(value)),
47
87
  BigUint64Array: (value) => new BigUint64Array(reviveArrayBuffer(value)),
48
88
  Date: (value) => new Date(value),
89
+ // Error family. The reducer side (see
90
+ // `packages/core/src/serialization/reducers/common.ts`) emits a tagged
91
+ // entry for each built-in Error subclass plus the workflow-specific
92
+ // `FatalError` / `RetryableError` and `AggregateError`. Without
93
+ // matching revivers here, `devalue.unflatten` throws "Unknown type X"
94
+ // — which surfaces in the web o11y UI as "Failed to load resource
95
+ // details: Unknown type FatalError".
49
96
  Error: (value) => {
97
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
98
+ const error = new Error(value.message, opts);
99
+ error.name = value.name;
100
+ if (value.stack !== undefined)
101
+ error.stack = value.stack;
102
+ return error;
103
+ },
104
+ EvalError: makeWebErrorSubclassReviver('EvalError'),
105
+ RangeError: makeWebErrorSubclassReviver('RangeError'),
106
+ ReferenceError: makeWebErrorSubclassReviver('ReferenceError'),
107
+ SyntaxError: makeWebErrorSubclassReviver('SyntaxError'),
108
+ TypeError: makeWebErrorSubclassReviver('TypeError'),
109
+ URIError: makeWebErrorSubclassReviver('URIError'),
110
+ AggregateError: (value) => {
111
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
112
+ const Ctor = globalThis.AggregateError;
113
+ const error = typeof Ctor === 'function'
114
+ ? new Ctor(value.errors, value.message, opts)
115
+ : Object.assign(new Error(value.message, opts), {
116
+ name: 'AggregateError',
117
+ errors: value.errors,
118
+ });
119
+ if (value.stack !== undefined)
120
+ error.stack = value.stack;
121
+ return error;
122
+ },
123
+ // `FatalError` and `RetryableError` are not built-in browser globals,
124
+ // so we can't resolve a constructor from globalThis. The web o11y UI
125
+ // doesn't need `instanceof FatalError` to pass (no user code runs
126
+ // here) — it just needs `name`, `message`, `stack`, and any extra
127
+ // enumerable fields to render. Construct a plain `Error` with `name`
128
+ // set; ObjectInspector reads `constructor.name` for the displayed
129
+ // class label, but we don't have the real class, so we emit a tagged
130
+ // Error whose `name` field carries the class identity. This matches
131
+ // how the existing base `Error` reviver presents unknown subclasses.
132
+ FatalError: (value) => {
133
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
134
+ const error = new Error(value.message, opts);
135
+ error.name = 'FatalError';
136
+ if (value.stack !== undefined)
137
+ error.stack = value.stack;
138
+ return error;
139
+ },
140
+ RetryableError: (value) => {
141
+ const opts = 'cause' in value ? { cause: value.cause } : undefined;
142
+ const error = new Error(value.message, opts);
143
+ error.name = 'RetryableError';
144
+ if (value.stack !== undefined)
145
+ error.stack = value.stack;
146
+ // `retryAfter` is serialized as an epoch ms number (see the runtime
147
+ // RetryableError reducer for the rationale around realm-safety).
148
+ // Rehydrate as a Date so o11y consumers can render it directly.
149
+ // Guard against payloads from older runtime versions that predate
150
+ // the field — without this check, `new Date(undefined)` would
151
+ // produce an Invalid Date rather than omitting the property.
152
+ if (value.retryAfter != null) {
153
+ error.retryAfter = new Date(value.retryAfter);
154
+ }
155
+ return error;
156
+ },
157
+ DOMException: (value) => {
158
+ // Modern browsers and Node 18+ expose `DOMException` on globalThis.
159
+ // `AbortController.abort()` with no argument synthesizes one as the
160
+ // signal's reason, so this is a common payload for any aborted step.
161
+ const G = globalThis;
162
+ if (typeof G.DOMException === 'function') {
163
+ const e = new G.DOMException(value.message, value.name);
164
+ if (value.stack !== undefined)
165
+ e.stack = value.stack;
166
+ if ('cause' in value)
167
+ e.cause = value.cause;
168
+ return e;
169
+ }
50
170
  const error = new Error(value.message);
51
171
  error.name = value.name;
52
- error.stack = value.stack;
172
+ if (value.stack !== undefined)
173
+ error.stack = value.stack;
174
+ if ('cause' in value) {
175
+ error.cause = value.cause;
176
+ }
53
177
  return error;
54
178
  },
55
179
  Float32Array: (value) => new Float32Array(reviveArrayBuffer(value)),
@@ -103,6 +227,11 @@ export function getWebRevivers() {
103
227
  // react-inspector shows the class name (it reads constructor.name).
104
228
  Class: (value) => `<class:${extractClassName(value.classId)}>`,
105
229
  Instance: (value) => {
230
+ // Run instances are rendered as clickable RunRef badges
231
+ const runRef = serializedInstanceToRef(value);
232
+ if (isRunRef(runRef)) {
233
+ return runRef;
234
+ }
106
235
  const className = extractClassName(value.classId);
107
236
  const data = value.data;
108
237
  const props = data && typeof data === 'object' ? { ...data } : { value: data };
@@ -215,22 +344,18 @@ function replaceEncryptedAndExpiredWithMarkers(resource) {
215
344
  result[key] = toDisplayMarker(result[key]);
216
345
  }
217
346
  if (result.eventData && typeof result.eventData === 'object') {
347
+ const eventType = typeof result.eventType === 'string' ? result.eventType : '';
348
+ const refKeys = EVENT_DATA_REF_FIELDS[eventType] ?? [];
218
349
  const ed = { ...result.eventData };
219
- for (const key of EVENT_DATA_SERIALIZED_FIELDS) {
220
- ed[key] = toDisplayMarker(ed[key]);
350
+ for (const key of refKeys) {
351
+ if (key in ed) {
352
+ ed[key] = toDisplayMarker(ed[key]);
353
+ }
221
354
  }
222
355
  result.eventData = ed;
223
356
  }
224
357
  return result;
225
358
  }
226
- /** Known serialized subfields within eventData, matching hydrateEventData in core */
227
- const EVENT_DATA_SERIALIZED_FIELDS = [
228
- 'result',
229
- 'input',
230
- 'output',
231
- 'metadata',
232
- 'payload',
233
- ];
234
359
  /**
235
360
  * Hydrate resource data with decryption support.
236
361
  *
@@ -238,7 +363,7 @@ const EVENT_DATA_SERIALIZED_FIELDS = [
238
363
  * This is the async version used when the user clicks "Decrypt" in the web UI.
239
364
  *
240
365
  * Handles both top-level fields (input, output, metadata) and nested
241
- * eventData subfields (result, input, output, metadata, payload).
366
+ * eventData subfields per `EVENT_DATA_REF_FIELDS` from `@workflow/world` for that event type.
242
367
  */
243
368
  export async function hydrateResourceIOWithKey(resource, key) {
244
369
  const { hydrateDataWithKey } = await import('@workflow/core/serialization-format');
@@ -269,8 +394,10 @@ export async function hydrateResourceIOWithKey(resource, key) {
269
394
  }
270
395
  // Decrypt + hydrate eventData subfields (events)
271
396
  if (result.eventData && typeof result.eventData === 'object') {
397
+ const eventType = typeof result.eventType === 'string' ? result.eventType : '';
398
+ const refKeys = EVENT_DATA_REF_FIELDS[eventType] ?? [];
272
399
  const eventData = { ...result.eventData };
273
- for (const field of EVENT_DATA_SERIALIZED_FIELDS) {
400
+ for (const field of refKeys) {
274
401
  if (field in eventData) {
275
402
  eventData[field] = await decryptField(eventData[field], revivers, cryptoKey);
276
403
  }
@@ -279,4 +406,29 @@ export async function hydrateResourceIOWithKey(resource, key) {
279
406
  }
280
407
  return result;
281
408
  }
282
- //# sourceMappingURL=hydration.js.map
409
+ /**
410
+ * Check whether a hydrated resource (event, step, run, etc.) contains any
411
+ * encrypted display markers. Inspects the standard top-level fields
412
+ * (`input`, `output`, `error`, `metadata`) as well as the event-type-specific
413
+ * `eventData` ref fields.
414
+ */
415
+ export function hasEncryptedFields(resource) {
416
+ if (!resource || typeof resource !== 'object')
417
+ return false;
418
+ const r = resource;
419
+ for (const key of ['input', 'output', 'metadata', 'error']) {
420
+ if (isEncryptedMarker(r[key]))
421
+ return true;
422
+ }
423
+ if (r.eventData && typeof r.eventData === 'object') {
424
+ const eventType = typeof r.eventType === 'string' ? r.eventType : '';
425
+ const refKeys = EVENT_DATA_REF_FIELDS[eventType] ?? [];
426
+ const ed = r.eventData;
427
+ for (const key of refKeys) {
428
+ if (key in ed && isEncryptedMarker(ed[key]))
429
+ return true;
430
+ }
431
+ }
432
+ return false;
433
+ }
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9oeWRyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsSUFBSSx3QkFBd0IsRUFDN0MsZUFBZSxFQUNmLGFBQWEsRUFDYixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLHVCQUF1QixHQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELG9EQUFvRDtBQUNwRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUVaLGVBQWUsRUFFZix1QkFBdUIsRUFDdkIsVUFBVSxHQUNYLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOEVBQThFO0FBQzlFLDZCQUE2QjtBQUM3Qiw4RUFBOEU7QUFFOUUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENB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QVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxRQUFtQyxDQUFDO0lBRTlDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBb0MsQ0FBQztRQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYi1zcGVjaWZpYyBoeWRyYXRpb24gZm9yIG8xMXkgZGlzcGxheS5cbiAqXG4gKiBCcm93c2VyLXNhZmUgcmV2aXZlcnMgdGhhdCB1c2UgYGF0b2IoKWAgZm9yIGJhc2U2NCBkZWNvZGluZyAobm8gTm9kZS5qc1xuICogYEJ1ZmZlcmAgZGVwZW5kZW5jeSkuIFByb2R1Y2VzIGBDbGFzc0luc3RhbmNlUmVmYCBvYmplY3RzIGFuZCBgU3RyZWFtUmVmYFxuICogb2JqZWN0cyBmb3IgVUkgcmVuZGVyaW5nLlxuICovXG5cbmltcG9ydCB7XG4gIGV4dHJhY3RDbGFzc05hbWUsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPIGFzIGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyxcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc0V4cGlyZWRTdHViLFxuICBpc1J1blJlZixcbiAgb2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICB0eXBlIFJldml2ZXJzLFxuICBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZixcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuaW1wb3J0IHsgRVZFTlRfREFUQV9SRUZfRklFTERTIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzUnVuUmVmLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgUlVOX1JFRl9UWVBFLFxuICB0eXBlIFJ1blJlZixcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCcm93c2VyLXNhZmUgYmFzZTY0IGRlY29kZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGlmIChiYXNlNjQgPT09ICcnIHx8IGJhc2U2NCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgfVxuICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdlYiByZXZpdmVycyAoYnJvd3Nlci1zYWZlLCBubyBCdWZmZXIgZGVwZW5kZW5jeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmV2aXZlciBmb3Igb25lIG9mIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMgKGUuZy5cbiAqIGBUeXBlRXJyb3JgLCBgUmFuZ2VFcnJvcmApLiBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuYW1lZCBzdWJjbGFzcyBpc1xuICogcmVzb2x2ZWQgb2ZmIGBnbG9iYWxUaGlzYCBhdCBjYWxsIHRpbWUgc28gdGhlIHByb2R1Y2VkIGluc3RhbmNlIGhhcyB0aGVcbiAqIGNvcnJlY3QgcHJvdG90eXBlIGNoYWluIGluIHRoZSBjb25zdW1lciByZWFsbS4gRmFsbHMgYmFjayB0byBhIGdlbmVyaWNcbiAqIGBFcnJvcmAgKHdpdGggYG5hbWVgIHNldCkgaWYgdGhlIGdsb2JhbCBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGtlZXBzIHRoZVxuICogbzExeSBVSSByZW5kZXJpbmcgZXZlbiBvbiBleG90aWMgYnJvd3NlcnMuXG4gKlxuICogYGNhdXNlYCBpcyBwYXNzZWQgdGhyb3VnaCBgRXJyb3JPcHRpb25zYCB0byB0aGUgY29uc3RydWN0b3Igd2hlbiBwcmVzZW50LFxuICogbWF0Y2hpbmcgYGdldENvbW1vblJldml2ZXJzYCBpbiBgQHdvcmtmbG93L2NvcmVgIHNvIHRoZSByZXN1bHRpbmcgYGNhdXNlYFxuICogcHJvcGVydHkgaGFzIHRoZSBzYW1lIHNlbWFudGljcyAobm9uLWVudW1lcmFibGUsIHNldCBieSB0aGUgZW5naW5lKSBhcyBhXG4gKiBmcmVzaGx5IHRocm93biBFcnJvciBpbiB0aGUgY29uc3VtZXIgcmVhbG0uIFRoZSBgJ2NhdXNlJyBpbiB2YWx1ZWAgY2hlY2tcbiAqIHByZXNlcnZlcyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBcIm5vIGNhdXNlXCIgYW5kIFwiY2F1c2UgaXMgdW5kZWZpbmVkXCIuXG4gKi9cbmZ1bmN0aW9uIG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcihcbiAgbmFtZTpcbiAgICB8ICdFdmFsRXJyb3InXG4gICAgfCAnUmFuZ2VFcnJvcidcbiAgICB8ICdSZWZlcmVuY2VFcnJvcidcbiAgICB8ICdTeW50YXhFcnJvcidcbiAgICB8ICdUeXBlRXJyb3InXG4gICAgfCAnVVJJRXJyb3InXG4pIHtcbiAgcmV0dXJuICh2YWx1ZTogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfSkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBDdG9yID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbbmFtZV0gYXNcbiAgICAgIHwgRXJyb3JDb25zdHJ1Y3RvclxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycm9yOiBFcnJvcjtcbiAgICBpZiAodHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yID0gbmV3IEN0b3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHBhdGg6IG5vIGJ1aWx0LWluIHN1YmNsYXNzIGF2YWlsYWJsZSAoZXhvdGljIGVudikuIENvbnN0cnVjdFxuICAgICAgLy8gYSBwbGFpbiBFcnJvciB3aXRoIHRoZSByaWdodCBgbmFtZWAgYW5kIGNvcHkgYGNhdXNlYCBtYW51YWxseSBzaW5jZVxuICAgICAgLy8gdGhlIGJhc2UgRXJyb3IgY29uc3RydWN0b3IgaXMgd2hhdCB3ZSBhY3R1YWxseSBjYWxsZWQuXG4gICAgICBlcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7IG5hbWUgfSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdlYi1zcGVjaWZpYyByZXZpdmVycyBmb3IgaHlkcmF0aW5nIHNlcmlhbGl6ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIGBhdG9iKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgKG5vIE5vZGUuanMgQnVmZmVyIGRlcGVuZGVuY3kpLlxuICogQWxsIHR5cGVzIGFyZSByZXZpdmVkIGFzIHJlYWwgaW5zdGFuY2VzIChEYXRlLCBNYXAsIFNldCwgVVJMLFxuICogVVJMU2VhcmNoUGFyYW1zLCBIZWFkZXJzLCBFcnJvciwgZXRjLikuXG4gKlxuICogTk9URTogdGhpcyBzZXQgbXVzdCBtaXJyb3IgdGhlIGtleXMgaW4gYFNlcmlhbGl6YWJsZVNwZWNpYWxgIChzZWVcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uL3R5cGVzYCkuIEFueSByZWR1Y2VyIGtleSBhZGRlZCBvbiB0aGVcbiAqIHNlcmlhbGl6YXRpb24gc2lkZSB0aGF0IGlzbid0IGNvdmVyZWQgaGVyZSB3aWxsIGNhdXNlIGBkZXZhbHVlLnVuZmxhdHRlbmBcbiAqIHRvIHRocm93IGBVbmtub3duIHR5cGUgWGAsIHdoaWNoIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgYW5kXG4gKiBzdXJmYWNlcyBhcyBhIFwiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UgZGV0YWlsc1wiIGJhbm5lciBpbiB0aGUgbzExeSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYlJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgZnVuY3Rpb24gcmV2aXZlQXJyYXlCdWZmZXIodmFsdWU6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gYmFzZTY0VG9BcnJheUJ1ZmZlcih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC8vIFNwcmVhZCBGSVJTVCBzbyB3ZWItc3BlY2lmaWMgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZS5cbiAgICAuLi5vYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG5cbiAgICAvLyBCaW5hcnkgdHlwZXNcbiAgICBBcnJheUJ1ZmZlcjogcmV2aXZlQXJyYXlCdWZmZXIsXG4gICAgQmlnSW50OiAodmFsdWU6IHN0cmluZykgPT4gQmlnSW50KHZhbHVlKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBCaWdJbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IEJpZ1VpbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgRGF0ZTogKHZhbHVlKSA9PiBuZXcgRGF0ZSh2YWx1ZSksXG5cbiAgICAvLyBFcnJvciBmYW1pbHkuIFRoZSByZWR1Y2VyIHNpZGUgKHNlZVxuICAgIC8vIGBwYWNrYWdlcy9jb3JlL3NyYy9zZXJpYWxpemF0aW9uL3JlZHVjZXJzL2NvbW1vbi50c2ApIGVtaXRzIGEgdGFnZ2VkXG4gICAgLy8gZW50cnkgZm9yIGVhY2ggYnVpbHQtaW4gRXJyb3Igc3ViY2xhc3MgcGx1cyB0aGUgd29ya2Zsb3ctc3BlY2lmaWNcbiAgICAvLyBgRmF0YWxFcnJvcmAgLyBgUmV0cnlhYmxlRXJyb3JgIGFuZCBgQWdncmVnYXRlRXJyb3JgLiBXaXRob3V0XG4gICAgLy8gbWF0Y2hpbmcgcmV2aXZlcnMgaGVyZSwgYGRldmFsdWUudW5mbGF0dGVuYCB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiXG4gICAgLy8g4oCUIHdoaWNoIHN1cmZhY2VzIGluIHRoZSB3ZWIgbzExeSBVSSBhcyBcIkZhaWxlZCB0byBsb2FkIHJlc291cmNlXG4gICAgLy8gZGV0YWlsczogVW5rbm93biB0eXBlIEZhdGFsRXJyb3JcIi5cbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignRXZhbEVycm9yJyksXG4gICAgUmFuZ2VFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICBTeW50YXhFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdVUklFcnJvcicpLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IEN0b3IgPSAoXG4gICAgICAgIGdsb2JhbFRoaXMgYXMgeyBBZ2dyZWdhdGVFcnJvcj86IEFnZ3JlZ2F0ZUVycm9yQ29uc3RydWN0b3IgfVxuICAgICAgKS5BZ2dyZWdhdGVFcnJvcjtcbiAgICAgIGNvbnN0IGVycm9yID1cbiAgICAgICAgdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG5ldyBDdG9yKHZhbHVlLmVycm9ycywgdmFsdWUubWVzc2FnZSwgb3B0cylcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7XG4gICAgICAgICAgICAgIG5hbWU6ICdBZ2dyZWdhdGVFcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yczogdmFsdWUuZXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIC8vIGBGYXRhbEVycm9yYCBhbmQgYFJldHJ5YWJsZUVycm9yYCBhcmUgbm90IGJ1aWx0LWluIGJyb3dzZXIgZ2xvYmFscyxcbiAgICAvLyBzbyB3ZSBjYW4ndCByZXNvbHZlIGEgY29uc3RydWN0b3IgZnJvbSBnbG9iYWxUaGlzLiBUaGUgd2ViIG8xMXkgVUlcbiAgICAvLyBkb2Vzbid0IG5lZWQgYGluc3RhbmNlb2YgRmF0YWxFcnJvcmAgdG8gcGFzcyAobm8gdXNlciBjb2RlIHJ1bnNcbiAgICAvLyBoZXJlKSDigJQgaXQganVzdCBuZWVkcyBgbmFtZWAsIGBtZXNzYWdlYCwgYHN0YWNrYCwgYW5kIGFueSBleHRyYVxuICAgIC8vIGVudW1lcmFibGUgZmllbGRzIHRvIHJlbmRlci4gQ29uc3RydWN0IGEgcGxhaW4gYEVycm9yYCB3aXRoIGBuYW1lYFxuICAgIC8vIHNldDsgT2JqZWN0SW5zcGVjdG9yIHJlYWRzIGBjb25zdHJ1Y3Rvci5uYW1lYCBmb3IgdGhlIGRpc3BsYXllZFxuICAgIC8vIGNsYXNzIGxhYmVsLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVhbCBjbGFzcywgc28gd2UgZW1pdCBhIHRhZ2dlZFxuICAgIC8vIEVycm9yIHdob3NlIGBuYW1lYCBmaWVsZCBjYXJyaWVzIHRoZSBjbGFzcyBpZGVudGl0eS4gVGhpcyBtYXRjaGVzXG4gICAgLy8gaG93IHRoZSBleGlzdGluZyBiYXNlIGBFcnJvcmAgcmV2aXZlciBwcmVzZW50cyB1bmtub3duIHN1YmNsYXNzZXMuXG4gICAgRmF0YWxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnRmF0YWxFcnJvcic7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJldHJ5YWJsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpIGFzIEVycm9yICYge1xuICAgICAgICByZXRyeUFmdGVyPzogRGF0ZTtcbiAgICAgIH07XG4gICAgICBlcnJvci5uYW1lID0gJ1JldHJ5YWJsZUVycm9yJztcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgLy8gYHJldHJ5QWZ0ZXJgIGlzIHNlcmlhbGl6ZWQgYXMgYW4gZXBvY2ggbXMgbnVtYmVyIChzZWUgdGhlIHJ1bnRpbWVcbiAgICAgIC8vIFJldHJ5YWJsZUVycm9yIHJlZHVjZXIgZm9yIHRoZSByYXRpb25hbGUgYXJvdW5kIHJlYWxtLXNhZmV0eSkuXG4gICAgICAvLyBSZWh5ZHJhdGUgYXMgYSBEYXRlIHNvIG8xMXkgY29uc3VtZXJzIGNhbiByZW5kZXIgaXQgZGlyZWN0bHkuXG4gICAgICAvLyBHdWFyZCBhZ2FpbnN0IHBheWxvYWRzIGZyb20gb2xkZXIgcnVudGltZSB2ZXJzaW9ucyB0aGF0IHByZWRhdGVcbiAgICAgIC8vIHRoZSBmaWVsZCDigJQgd2l0aG91dCB0aGlzIGNoZWNrLCBgbmV3IERhdGUodW5kZWZpbmVkKWAgd291bGRcbiAgICAgIC8vIHByb2R1Y2UgYW4gSW52YWxpZCBEYXRlIHJhdGhlciB0aGFuIG9taXR0aW5nIHRoZSBwcm9wZXJ0eS5cbiAgICAgIGlmICh2YWx1ZS5yZXRyeUFmdGVyICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IucmV0cnlBZnRlciA9IG5ldyBEYXRlKHZhbHVlLnJldHJ5QWZ0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgRE9NRXhjZXB0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VycyBhbmQgTm9kZSAxOCsgZXhwb3NlIGBET01FeGNlcHRpb25gIG9uIGdsb2JhbFRoaXMuXG4gICAgICAvLyBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgIHdpdGggbm8gYXJndW1lbnQgc3ludGhlc2l6ZXMgb25lIGFzIHRoZVxuICAgICAgLy8gc2lnbmFsJ3MgcmVhc29uLCBzbyB0aGlzIGlzIGEgY29tbW9uIHBheWxvYWQgZm9yIGFueSBhYm9ydGVkIHN0ZXAuXG4gICAgICBjb25zdCBHID0gZ2xvYmFsVGhpcyBhcyB7IERPTUV4Y2VwdGlvbj86IHR5cGVvZiBET01FeGNlcHRpb24gfTtcbiAgICAgIGlmICh0eXBlb2YgRy5ET01FeGNlcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyBHLkRPTUV4Y2VwdGlvbih2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGUuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIChlIGFzIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSk7XG4gICAgICBlcnJvci5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIHtcbiAgICAgICAgKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIEZsb2F0MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBGbG9hdDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBGbG9hdDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgRmxvYXQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgSW50OEFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEludDhBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MTZBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIE1hcDogKHZhbHVlKSA9PiBuZXcgTWFwKHZhbHVlKSxcbiAgICBSZWdFeHA6ICh2YWx1ZSkgPT4gbmV3IFJlZ0V4cCh2YWx1ZS5zb3VyY2UsIHZhbHVlLmZsYWdzKSxcbiAgICBTZXQ6ICh2YWx1ZSkgPT4gbmV3IFNldCh2YWx1ZSksXG4gICAgVWludDhBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50OEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgVWludDE2QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuXG4gICAgSGVhZGVyczogKHZhbHVlKSA9PiBuZXcgSGVhZGVycyh2YWx1ZSksXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHt9IH0uUmVxdWVzdCE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIGR1cGxleDogdmFsdWUuZHVwbGV4LFxuICAgICAgICAuLi4odmFsdWUucmVzcG9uc2VXcml0YWJsZVxuICAgICAgICAgID8geyByZXNwb25zZVdyaXRhYmxlOiB2YWx1ZS5yZXNwb25zZVdyaXRhYmxlIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVzcG9uc2U6IGZ1bmN0aW9uICgpIHt9IH0uUmVzcG9uc2UhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBzdGF0dXM6IHZhbHVlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogdmFsdWUuc3RhdHVzVGV4dCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICByZWRpcmVjdGVkOiB2YWx1ZS5yZWRpcmVjdGVkLFxuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgVVJMOiAodmFsdWUpID0+IG5ldyBVUkwodmFsdWUpLFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PiBuZXcgVVJMU2VhcmNoUGFyYW1zKHZhbHVlID09PSAnLicgPyAnJyA6IHZhbHVlKSxcblxuICAgIC8vIFdlYi1zcGVjaWZpYyBvdmVycmlkZXMgZm9yIGNsYXNzIGluc3RhbmNlcy5cbiAgICAvLyBDcmVhdGUgb2JqZWN0cyB3aXRoIGEgZHluYW1pY2FsbHktbmFtZWQgY29uc3RydWN0b3Igc28gdGhhdFxuICAgIC8vIHJlYWN0LWluc3BlY3RvciBzaG93cyB0aGUgY2xhc3MgbmFtZSAoaXQgcmVhZHMgY29uc3RydWN0b3IubmFtZSkuXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4gYDxjbGFzczoke2V4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCl9PmAsXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gUnVuIGluc3RhbmNlcyBhcmUgcmVuZGVyZWQgYXMgY2xpY2thYmxlIFJ1blJlZiBiYWRnZXNcbiAgICAgIGNvbnN0IHJ1blJlZiA9IHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmKHZhbHVlKTtcbiAgICAgIGlmIChpc1J1blJlZihydW5SZWYpKSB7XG4gICAgICAgIHJldHVybiBydW5SZWY7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpO1xuICAgICAgY29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XG4gICAgICBjb25zdCBwcm9wcyA9XG4gICAgICAgIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8geyAuLi5kYXRhIH0gOiB7IHZhbHVlOiBkYXRhIH07XG4gICAgICAvLyBDcmVhdGUgYSBjb25zdHJ1Y3RvciB3aXRoIHRoZSByaWdodCBuYW1lIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5XG4gICAgICAvLyBzbyByZWFjdC1pbnNwZWN0b3IncyBgb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWVgIHNob3dzIHRoZSBjbGFzcyBuYW1lLlxuICAgICAgLy8gTXVzdCB1c2UgYGZ1bmN0aW9uYCAobm90IGFycm93KSBiZWNhdXNlIGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGUuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFtjbGFzc05hbWVdOiBmdW5jdGlvbiAoKSB7fSB9W2NsYXNzTmFtZV0hO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwgcHJvcHMpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByZS1idWlsdCB3ZWIgcmV2aXZlcnMgKGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGNhY2hlZFJldml2ZXJzOiBSZXZpdmVycyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGlmICghY2FjaGVkUmV2aXZlcnMpIHtcbiAgICBjYWNoZWRSZXZpdmVycyA9IGdldFdlYlJldml2ZXJzKCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZFJldml2ZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgZGF0YSBmaWVsZHMgb2YgYSByZXNvdXJjZSBmb3Igd2ViIGRpc3BsYXkuXG4gKlxuICogVXNlcyBicm93c2VyLXNhZmUgcmV2aXZlcnMgKGF0b2IgZm9yIGJhc2U2NCwgQ2xhc3NJbnN0YW5jZVJlZiBmb3JcbiAqIGN1c3RvbSBjbGFzc2VzLCBTdHJlYW1SZWYgZm9yIHN0cmVhbXMpLiBDYWxsIHRoaXMgb24gZGF0YSByZWNlaXZlZFxuICogZnJvbSB0aGUgc2VydmVyIGJlZm9yZSBwYXNzaW5nIGl0IHRvIFVJIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJTzxUPihyZXNvdXJjZTogVCk6IFQge1xuICBjb25zdCBoeWRyYXRlZCA9IGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyhcbiAgICByZXNvdXJjZSBhcyBhbnksXG4gICAgZ2V0UmV2aXZlcnMoKVxuICApIGFzIFQ7XG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzKGh5ZHJhdGVkKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNyeXB0ZWQgZGF0YSBkaXNwbGF5IG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSA9ICdFbmNyeXB0ZWQnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBlbmNyeXB0ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIHRoZSBzYW1lIG5hbWVkLWNvbnN0cnVjdG9yIHRyaWNrIGFzIHRoZSBJbnN0YW5jZSByZXZpdmVyIHNvIHRoYXRcbiAqIE9iamVjdEluc3BlY3RvciByZW5kZXJzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIChcIvCflJIgRW5jcnlwdGVkXCIpIHdpdGggbm9cbiAqIGV4cGFuZGFibGUgY2hpbGRyZW4uIFRoZSBvcmlnaW5hbCBlbmNyeXB0ZWQgYnl0ZXMgYXJlIHN0b3JlZCBpbiBhXG4gKiBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmb3IgbGF0ZXIgZGVjcnlwdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGVkTWFya2VyKGRhdGE6IFVpbnQ4QXJyYXkpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VOQ1JZUFRFRF9ESVNQTEFZX05BTUVdOiBmdW5jdGlvbiAoKSB7fSB9W1xuICAgIEVOQ1JZUFRFRF9ESVNQTEFZX05BTUVcbiAgXSE7XG4gIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAvLyBTdG9yZSBvcmlnaW5hbCBieXRlcyBmb3IgZGVjcnlwdGlvbiwgYnV0IG5vbi1lbnVtZXJhYmxlIHNvXG4gIC8vIE9iamVjdEluc3BlY3RvciBkb2Vzbid0IHNob3cgdGhlbSBhcyBjaGlsZHJlblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19lbmNyeXB0ZWREYXRhJywge1xuICAgIHZhbHVlOiBkYXRhLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlLmNvbnN0cnVjdG9yPy5uYW1lID09PSBFTkNSWVBURURfRElTUExBWV9OQU1FXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwaXJlZCBkYXRhIGRpc3BsYXkgbWFya2Vyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBFWFBJUkVEX0RJU1BMQVlfTkFNRSA9ICdFeHBpcmVkIERhdGEnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBleHBpcmVkIGRhdGEuXG4gKlxuICogVXNlcyB0aGUgc2FtZSBuYW1lZC1jb25zdHJ1Y3RvciB0cmljayBhcyB0aGUgZW5jcnlwdGVkIG1hcmtlciBzbyB0aGF0XG4gKiBPYmplY3RJbnNwZWN0b3IgcmVuZGVycyB0aGUgY29uc3RydWN0b3IgbmFtZSAoXCJFeHBpcmVkIERhdGFcIikgd2l0aCBub1xuICogZXhwYW5kYWJsZSBjaGlsZHJlbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhwaXJlZE1hcmtlcigpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VYUElSRURfRElTUExBWV9OQU1FXTogZnVuY3Rpb24gKCkge30gfVtcbiAgICBFWFBJUkVEX0RJU1BMQVlfTkFNRVxuICBdITtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBleHBpcmVkIGRhdGEgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZS5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gRVhQSVJFRF9ESVNQTEFZX05BTUVcbiAgKTtcbn1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgbWFya2VyIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlNYXJrZXIodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBjcmVhdGVFbmNyeXB0ZWRNYXJrZXIodmFsdWUgYXMgVWludDhBcnJheSk7XG4gIGlmIChpc0V4cGlyZWRTdHViKHZhbHVlKSkgcmV0dXJuIGNyZWF0ZUV4cGlyZWRNYXJrZXIoKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBvc3QtcHJvY2VzcyBoeWRyYXRlZCByZXNvdXJjZSBkYXRhOiByZXBsYWNlIGVuY3J5cHRlZCBVaW50OEFycmF5IHZhbHVlc1xuICogYW5kIGV4cGlyZWQgc3R1YnMgd2l0aCBkaXNwbGF5LWZyaWVuZGx5IG1hcmtlciBvYmplY3RzIGluIGtub3duIGRhdGEgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlc291cmNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICByZXN1bHRba2V5XSA9IHRvRGlzcGxheU1hcmtlcihyZXN1bHRba2V5XSk7XG4gIH1cblxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgICBjb25zdCBlZCA9IHsgLi4uKHJlc3VsdC5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCkge1xuICAgICAgICBlZFtrZXldID0gdG9EaXNwbGF5TWFya2VyKGVkW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSByZXNvdXJjZSBkYXRhIHdpdGggZGVjcnlwdGlvbiBzdXBwb3J0LlxuICpcbiAqIFdoZW4gYSBrZXkgaXMgcHJvdmlkZWQsIGVuY3J5cHRlZCBmaWVsZHMgYXJlIGRlY3J5cHRlZCBiZWZvcmUgaHlkcmF0aW9uLlxuICogVGhpcyBpcyB0aGUgYXN5bmMgdmVyc2lvbiB1c2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiRGVjcnlwdFwiIGluIHRoZSB3ZWIgVUkuXG4gKlxuICogSGFuZGxlcyBib3RoIHRvcC1sZXZlbCBmaWVsZHMgKGlucHV0LCBvdXRwdXQsIG1ldGFkYXRhKSBhbmQgbmVzdGVkXG4gKiBldmVudERhdGEgc3ViZmllbGRzIHBlciBgRVZFTlRfREFUQV9SRUZfRklFTERTYCBmcm9tIGBAd29ya2Zsb3cvd29ybGRgIGZvciB0aGF0IGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJT1dpdGhLZXk8VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXk6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGh5ZHJhdGVEYXRhV2l0aEtleSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCdcbiAgKTtcbiAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBpbXBvcnRLZXkoa2V5KTtcbiAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVycygpO1xuXG4gIC8qKiBFeHRyYWN0IG9yaWdpbmFsIGVuY3J5cHRlZCBieXRlcyBmcm9tIGEgbWFya2VyIG9yIHJhdyBVaW50OEFycmF5LCB0aGVuIGRlY3J5cHQgKyBoeWRyYXRlICovXG4gIGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRGaWVsZChcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICByZXY6IFJldml2ZXJzLFxuICAgIGs6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgaW1wb3J0S2V5Pj5cbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gQWxyZWFkeS1oeWRyYXRlZDogZW5jcnlwdGVkIG1hcmtlciB3aXRoIHN0b3JlZCBieXRlc1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJhdyA9ICh2YWx1ZSBhcyBhbnkpLl9fZW5jcnlwdGVkRGF0YSBhcyBVaW50OEFycmF5O1xuICAgICAgcmV0dXJuIGh5ZHJhdGVEYXRhV2l0aEtleShyYXcsIHJldiwgayk7XG4gICAgfVxuICAgIC8vIFJhdyBlbmNyeXB0ZWQgVWludDhBcnJheSAobm90IHlldCBoeWRyYXRlZClcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gaHlkcmF0ZURhdGFXaXRoS2V5KHZhbHVlLCByZXYsIGspO1xuICAgIH1cbiAgICAvLyBOb3QgZW5jcnlwdGVkIOKAlCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIC8vIERlY3J5cHQgKyBoeWRyYXRlIHRvcC1sZXZlbCBzZXJpYWxpemVkIGZpZWxkcyAocnVucywgc3RlcHMsIGhvb2tzKVxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICBpZiAoZmllbGQgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHRbZmllbGRdID0gYXdhaXQgZGVjcnlwdEZpZWxkKHJlc3VsdFtmaWVsZF0sIHJldml2ZXJzLCBjcnlwdG9LZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlY3J5cHQgKyBoeWRyYXRlIGV2ZW50RGF0YSBzdWJmaWVsZHMgKGV2ZW50cylcbiAgaWYgKHJlc3VsdC5ldmVudERhdGEgJiYgdHlwZW9mIHJlc3VsdC5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBjb25zdCByZWZLZXlzID0gRVZFTlRfREFUQV9SRUZfRklFTERTW2V2ZW50VHlwZV0gPz8gW107XG4gICAgY29uc3QgZXZlbnREYXRhID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHJlZktleXMpIHtcbiAgICAgIGlmIChmaWVsZCBpbiBldmVudERhdGEpIHtcbiAgICAgICAgZXZlbnREYXRhW2ZpZWxkXSA9IGF3YWl0IGRlY3J5cHRGaWVsZChcbiAgICAgICAgICBldmVudERhdGFbZmllbGRdLFxuICAgICAgICAgIHJldml2ZXJzLFxuICAgICAgICAgIGNyeXB0b0tleVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBoeWRyYXRlZCByZXNvdXJjZSAoZXZlbnQsIHN0ZXAsIHJ1biwgZXRjLikgY29udGFpbnMgYW55XG4gKiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXJzLiBJbnNwZWN0cyB0aGUgc3RhbmRhcmQgdG9wLWxldmVsIGZpZWxkc1xuICogKGBpbnB1dGAsIGBvdXRwdXRgLCBgZXJyb3JgLCBgbWV0YWRhdGFgKSBhcyB3ZWxsIGFzIHRoZSBldmVudC10eXBlLXNwZWNpZmljXG4gKiBgZXZlbnREYXRhYCByZWYgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRW5jcnlwdGVkRmllbGRzKHJlc291cmNlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcihyW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyLmV2ZW50RGF0YSAmJiB0eXBlb2Ygci5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gdHlwZW9mIHIuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHIuZXZlbnRUeXBlIDogJyc7XG4gICAgY29uc3QgcmVmS2V5cyA9IEVWRU5UX0RBVEFfUkVGX0ZJRUxEU1tldmVudFR5cGVdID8/IFtdO1xuICAgIGNvbnN0IGVkID0gci5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCAmJiBpc0VuY3J5cHRlZE1hcmtlcihlZFtrZXldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
@@ -0,0 +1,18 @@
1
+ export interface DecodedStreamChunkSource {
2
+ type: string;
3
+ encoding: 'utf-8';
4
+ rawSummary: string;
5
+ }
6
+ export interface FormattedStreamChunkDisplay {
7
+ text: string;
8
+ decodedFrom?: DecodedStreamChunkSource;
9
+ }
10
+ export declare function summarizeArrayBufferView(value: ArrayBufferView): string;
11
+ /**
12
+ * Decode a typed array as UTF-8 text when valid, otherwise return a compact
13
+ * raw-byte summary. Used by `DataInspector`'s `collapseRefs` pipeline so
14
+ * hydrated `Uint8Array` chunks (e.g. AI SDK text deltas) render as readable
15
+ * text while still exposing the underlying byte layout.
16
+ */
17
+ export declare function formatArrayBufferViewForDisplay(value: ArrayBufferView): FormattedStreamChunkDisplay;
18
+ //# sourceMappingURL=stream-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-display.d.ts","sourceRoot":"","sources":["../../src/lib/stream-display.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAYvE;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,eAAe,GACrB,2BAA2B,CAc7B"}
@@ -0,0 +1,30 @@
1
+ export function summarizeArrayBufferView(value) {
2
+ const ta = value;
3
+ const name = ta.constructor.name;
4
+ const preview = Array.from({ length: Math.min(ta.length, 8) }, (_, i) => ta[i]);
5
+ const suffix = ta.length > 8 ? ', …' : '';
6
+ return `${name}(${ta.length}) [${preview.join(', ')}${suffix}]`;
7
+ }
8
+ /**
9
+ * Decode a typed array as UTF-8 text when valid, otherwise return a compact
10
+ * raw-byte summary. Used by `DataInspector`'s `collapseRefs` pipeline so
11
+ * hydrated `Uint8Array` chunks (e.g. AI SDK text deltas) render as readable
12
+ * text while still exposing the underlying byte layout.
13
+ */
14
+ export function formatArrayBufferViewForDisplay(value) {
15
+ try {
16
+ const text = new TextDecoder('utf-8', { fatal: true }).decode(value);
17
+ return {
18
+ text,
19
+ decodedFrom: {
20
+ type: value.constructor.name,
21
+ encoding: 'utf-8',
22
+ rawSummary: summarizeArrayBufferView(value),
23
+ },
24
+ };
25
+ }
26
+ catch {
27
+ return { text: summarizeArrayBufferView(value) };
28
+ }
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWRpc3BsYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3N0cmVhbS1kaXNwbGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVdBLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFzQjtJQUM3RCxNQUFNLEVBQUUsR0FBRyxLQUdVLENBQUM7SUFDdEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDeEIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNoQixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE1BQU0sTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSwrQkFBK0IsQ0FDN0MsS0FBc0I7SUFFdEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JFLE9BQU87WUFDTCxJQUFJO1lBQ0osV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQzVCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixVQUFVLEVBQUUsd0JBQXdCLENBQUMsS0FBSyxDQUFDO2FBQzVDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIERlY29kZWRTdHJlYW1DaHVua1NvdXJjZSB7XG4gIHR5cGU6IHN0cmluZztcbiAgZW5jb2Rpbmc6ICd1dGYtOCc7XG4gIHJhd1N1bW1hcnk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtYXR0ZWRTdHJlYW1DaHVua0Rpc3BsYXkge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGRlY29kZWRGcm9tPzogRGVjb2RlZFN0cmVhbUNodW5rU291cmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplQXJyYXlCdWZmZXJWaWV3KHZhbHVlOiBBcnJheUJ1ZmZlclZpZXcpOiBzdHJpbmcge1xuICBjb25zdCB0YSA9IHZhbHVlIGFzIHVua25vd24gYXMge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yOiB7IG5hbWU6IHN0cmluZyB9O1xuICB9ICYgQXJyYXlMaWtlPG51bWJlcj47XG4gIGNvbnN0IG5hbWUgPSB0YS5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCBwcmV2aWV3ID0gQXJyYXkuZnJvbShcbiAgICB7IGxlbmd0aDogTWF0aC5taW4odGEubGVuZ3RoLCA4KSB9LFxuICAgIChfLCBpKSA9PiB0YVtpXVxuICApO1xuICBjb25zdCBzdWZmaXggPSB0YS5sZW5ndGggPiA4ID8gJywg4oCmJyA6ICcnO1xuICByZXR1cm4gYCR7bmFtZX0oJHt0YS5sZW5ndGh9KSBbJHtwcmV2aWV3LmpvaW4oJywgJyl9JHtzdWZmaXh9XWA7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgdHlwZWQgYXJyYXkgYXMgVVRGLTggdGV4dCB3aGVuIHZhbGlkLCBvdGhlcndpc2UgcmV0dXJuIGEgY29tcGFjdFxuICogcmF3LWJ5dGUgc3VtbWFyeS4gVXNlZCBieSBgRGF0YUluc3BlY3RvcmAncyBgY29sbGFwc2VSZWZzYCBwaXBlbGluZSBzb1xuICogaHlkcmF0ZWQgYFVpbnQ4QXJyYXlgIGNodW5rcyAoZS5nLiBBSSBTREsgdGV4dCBkZWx0YXMpIHJlbmRlciBhcyByZWFkYWJsZVxuICogdGV4dCB3aGlsZSBzdGlsbCBleHBvc2luZyB0aGUgdW5kZXJseWluZyBieXRlIGxheW91dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoXG4gIHZhbHVlOiBBcnJheUJ1ZmZlclZpZXdcbik6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSB7XG4gIHRyeSB7XG4gICAgY29uc3QgdGV4dCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pLmRlY29kZSh2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQsXG4gICAgICBkZWNvZGVkRnJvbToge1xuICAgICAgICB0eXBlOiB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgICAgcmF3U3VtbWFyeTogc3VtbWFyaXplQXJyYXlCdWZmZXJWaWV3KHZhbHVlKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgdGV4dDogc3VtbWFyaXplQXJyYXlCdWZmZXJWaWV3KHZhbHVlKSB9O1xuICB9XG59XG4iXX0=
package/dist/lib/toast.js CHANGED
@@ -21,4 +21,4 @@ export function ToastProvider({ toast, children, }) {
21
21
  export function useToast() {
22
22
  return useContext(ToastContext);
23
23
  }
24
- //# sourceMappingURL=toast.js.map
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3RvYXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFROUMsTUFBTSxjQUFjLEdBQWlCO0lBQ25DLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztJQUN0RCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7SUFDbEQsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0NBQ2pELENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxhQUFhLENBQWUsY0FBYyxDQUFDLENBQUM7QUFFakU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUM1QixLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsWUFBWSxDQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsS0FBSyxZQUFHLFFBQVEsR0FBeUIsQ0FDeEUsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUTtJQUN0QixPQUFPLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB0b2FzdCBhcyBzb25uZXJUb2FzdCB9IGZyb20gJ3Nvbm5lcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9hc3RBZGFwdGVyIHtcbiAgc3VjY2VzczogKG1lc3NhZ2U6IHN0cmluZywgb3B0cz86IHsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgZXJyb3I6IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiB7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIGluZm86IChtZXNzYWdlOiBzdHJpbmcsIG9wdHM/OiB7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0pID0+IHZvaWQ7XG59XG5cbmNvbnN0IGRlZmF1bHRBZGFwdGVyOiBUb2FzdEFkYXB0ZXIgPSB7XG4gIHN1Y2Nlc3M6IChtc2csIG9wdHMpID0+IHNvbm5lclRvYXN0LnN1Y2Nlc3MobXNnLCBvcHRzKSxcbiAgZXJyb3I6IChtc2csIG9wdHMpID0+IHNvbm5lclRvYXN0LmVycm9yKG1zZywgb3B0cyksXG4gIGluZm86IChtc2csIG9wdHMpID0+IHNvbm5lclRvYXN0LmluZm8obXNnLCBvcHRzKSxcbn07XG5cbmNvbnN0IFRvYXN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VG9hc3RBZGFwdGVyPihkZWZhdWx0QWRhcHRlcik7XG5cbi8qKlxuICogUHJvdmlkZSBhIGN1c3RvbSB0b2FzdCBpbXBsZW1lbnRhdGlvbiB0byB3ZWItc2hhcmVkIGNvbXBvbmVudHMuXG4gKlxuICogV2hlbiBub3QgcHJvdmlkZWQsIGZhbGxzIGJhY2sgdG8gc29ubmVyICh3b3JrcyBpbiBwYWNrYWdlcy93ZWIpLlxuICogSG9zdCBhcHBzIGxpa2UgdmVyY2VsLXNpdGUgY2FuIHN1cHBseSB0aGVpciBvd24gYWRhcHRlclxuICogKGUuZy4gR2Vpc3QgdXNlVG9hc3RzKSBzbyB0b2FzdHMgcmVuZGVyIGluIHRoZSBob3N0J3MgdG9hc3Qgc3lzdGVtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gVG9hc3RQcm92aWRlcih7XG4gIHRvYXN0LFxuICBjaGlsZHJlbixcbn06IHtcbiAgdG9hc3Q6IFRvYXN0QWRhcHRlcjtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxUb2FzdENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RvYXN0fT57Y2hpbGRyZW59PC9Ub2FzdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUb2FzdCgpOiBUb2FzdEFkYXB0ZXIge1xuICByZXR1cm4gdXNlQ29udGV4dChUb2FzdENvbnRleHQpO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"trace-builder.d.ts","sourceRoot":"","sources":["../../src/lib/trace-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAc7D,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,YAAkC,CAAC;AAEhF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,mDACkB,CAAC;AAEjE,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,oEAGvB,CAAC;AAMhC,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;CAClC,CAAC;AAeF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAgCvE;AAqED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,EAAE,CAAC;IAClE,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,IAAI,GACR,aAAa,CA6Bf"}
1
+ {"version":3,"file":"trace-builder.d.ts","sourceRoot":"","sources":["../../src/lib/trace-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAc7D,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,YAAkC,CAAC;AAEhF,eAAO,MAAM,YAAY,GAAI,WAAW,MAAM,mDACkB,CAAC;AAEjE,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,oEAGvB,CAAC;AAMhC,MAAM,MAAM,aAAa,GAAG;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACrC,cAAc,EAAE,KAAK,EAAE,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;CAClC,CAAC;AAeF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAgCvE;AAsED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,EAAE,CAAC;IAClE,iEAAiE;IACjE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,IAAI,GACR,aAAa,CA6Bf"}
@@ -72,6 +72,7 @@ function buildSpans(run, groupedEvents, now, latestKnownTime) {
72
72
  // unknown territory. Even when the run is completed, we may not have loaded
73
73
  // all events yet, so always use the latest event we've actually seen.
74
74
  const childMaxEnd = latestKnownTime;
75
+ const runMaxEnd = run.completedAt ?? now;
75
76
  const stepSpans = Array.from(groupedEvents.eventsByStepId.values())
76
77
  .map((events) => stepToSpan(events, childMaxEnd))
77
78
  .filter((span) => span !== null);
@@ -79,7 +80,7 @@ function buildSpans(run, groupedEvents, now, latestKnownTime) {
79
80
  .map((events) => hookToSpan(events, childMaxEnd))
80
81
  .filter((span) => span !== null);
81
82
  const waitSpans = Array.from(groupedEvents.timerEvents.values())
82
- .map((events) => waitToSpan(events, childMaxEnd))
83
+ .map((events) => waitToSpan(events, childMaxEnd, runMaxEnd))
83
84
  .filter((span) => span !== null);
84
85
  return {
85
86
  runSpan: runToSpan(run, groupedEvents.runLevelEvents, now),
@@ -126,4 +127,4 @@ export function buildTrace(run, events, now) {
126
127
  knownDurationMs: Math.max(0, knownDurationMs),
127
128
  };
128
129
  }
129
- //# sourceMappingURL=trace-builder.js.map
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdHJhY2UtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLGdCQUFnQixHQUNqQixNQUFNLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU5RSw4RUFBOEU7QUFDOUUseUJBQXlCO0FBQ3pCLDhFQUE4RTtBQUU5RSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRWhGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUNoRCxTQUFTLEtBQUssY0FBYyxJQUFJLFNBQVMsS0FBSyxnQkFBZ0IsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRSxDQUN4RCxTQUFTLEtBQUssZUFBZTtJQUM3QixTQUFTLEtBQUssY0FBYztJQUM1QixTQUFTLEtBQUssZUFBZSxDQUFDO0FBYWhDLFNBQVMsU0FBUyxDQUNoQixHQUF5QixFQUN6QixhQUFxQixFQUNyQixLQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixPQUFPO0lBQ1QsQ0FBQztJQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHdC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IFdvcmtmbG93UnVuIGFuZCBpdHMgRXZlbnRzLlxuICpcbiAqIFRoaXMgbW9kdWxlIGdyb3VwcyByYXcgZXZlbnRzIGJ5IGNvcnJlbGF0aW9uIElEIGFuZCBlbnRpdHkgdHlwZSxcbiAqIGNvbnZlcnRzIGVhY2ggZ3JvdXAgaW50byBhbiBPcGVuVGVsZW1ldHJ5LXN0eWxlIFNwYW4sIGFuZCByZXR1cm5zXG4gKiBhIGZ1bGx5LWZvcm1lZCBUcmFjZSByZWFkeSBmb3IgdGhlIHRyYWNlIHZpZXdlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi9jb21wb25lbnRzL3RyYWNlLXZpZXdlci90eXBlcyc7XG5pbXBvcnQge1xuICBob29rVG9TcGFuLFxuICBydW5Ub1NwYW4sXG4gIHN0ZXBUb1NwYW4sXG4gIHdhaXRUb1NwYW4sXG4gIFdPUktGTE9XX0xJQlJBUlksXG59IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXNwYW4tY29uc3RydWN0aW9uJztcbmltcG9ydCB7IG90ZWxUaW1lVG9NcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvd29ya2Zsb3ctdHJhY2VzL3RyYWNlLXRpbWUtdXRpbHMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IHR5cGUgY2xhc3NpZmllcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgaXNTdGVwRXZlbnQgPSAoZXZlbnRUeXBlOiBzdHJpbmcpID0+IGV2ZW50VHlwZS5zdGFydHNXaXRoKCdzdGVwXycpO1xuXG5leHBvcnQgY29uc3QgaXNUaW1lckV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICd3YWl0X2NyZWF0ZWQnIHx8IGV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJztcblxuZXhwb3J0IGNvbnN0IGlzSG9va0xpZmVjeWNsZUV2ZW50ID0gKGV2ZW50VHlwZTogc3RyaW5nKSA9PlxuICBldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJyB8fFxuICBldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnIHx8XG4gIGV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV2ZW50IGdyb3VwaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgR3JvdXBlZEV2ZW50cyA9IHtcbiAgZXZlbnRzQnlTdGVwSWQ6IE1hcDxzdHJpbmcsIEV2ZW50W10+O1xuICBydW5MZXZlbEV2ZW50czogRXZlbnRbXTtcbiAgdGltZXJFdmVudHM6IE1hcDxzdHJpbmcsIEV2ZW50W10+O1xuICBob29rRXZlbnRzOiBNYXA8c3RyaW5nLCBFdmVudFtdPjtcbn07XG5cbmZ1bmN0aW9uIHB1c2hFdmVudChcbiAgbWFwOiBNYXA8c3RyaW5nLCBFdmVudFtdPixcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICBldmVudDogRXZlbnRcbikge1xuICBjb25zdCBleGlzdGluZyA9IG1hcC5nZXQoY29ycmVsYXRpb25JZCk7XG4gIGlmIChleGlzdGluZykge1xuICAgIGV4aXN0aW5nLnB1c2goZXZlbnQpO1xuICAgIHJldHVybjtcbiAgfVxuICBtYXAuc2V0KGNvcnJlbGF0aW9uSWQsIFtldmVudF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBFdmVudHNCeUNvcnJlbGF0aW9uKGV2ZW50czogRXZlbnRbXSk6IEdyb3VwZWRFdmVudHMge1xuICBjb25zdCBldmVudHNCeVN0ZXBJZCA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICBjb25zdCBydW5MZXZlbEV2ZW50czogRXZlbnRbXSA9IFtdO1xuICBjb25zdCB0aW1lckV2ZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBFdmVudFtdPigpO1xuICBjb25zdCBob29rRXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIEV2ZW50W10+KCk7XG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gZXZlbnQuY29ycmVsYXRpb25JZDtcbiAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcbiAgICAgIHJ1bkxldmVsRXZlbnRzLnB1c2goZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzVGltZXJFdmVudChldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICBwdXNoRXZlbnQodGltZXJFdmVudHMsIGNvcnJlbGF0aW9uSWQsIGV2ZW50KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChpc0hvb2tMaWZlY3ljbGVFdmVudChldmVudC5ldmVudFR5cGUpKSB7XG4gICAgICBwdXNoRXZlbnQoaG9va0V2ZW50cywgY29ycmVsYXRpb25JZCwgZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RlcEV2ZW50KGV2ZW50LmV2ZW50VHlwZSkpIHtcbiAgICAgIHB1c2hFdmVudChldmVudHNCeVN0ZXBJZCwgY29ycmVsYXRpb25JZCwgZXZlbnQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcnVuTGV2ZWxFdmVudHMucHVzaChldmVudCk7XG4gIH1cblxuICByZXR1cm4geyBldmVudHNCeVN0ZXBJZCwgcnVuTGV2ZWxFdmVudHMsIHRpbWVyRXZlbnRzLCBob29rRXZlbnRzIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHJhY2UgY29uc3RydWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgbGF0ZXN0IGtub3duIGV2ZW50IHRpbWUgZnJvbSB0aGUgZXZlbnRzIGxpc3QuXG4gKiBBY3RpdmUgKGluLXByb2dyZXNzKSBjaGlsZCBzcGFucyBhcmUgY2FwcGVkIGF0IHRoaXMgdGltZSBpbnN0ZWFkIG9mIGBub3dgLFxuICogc28gdGhleSBvbmx5IGV4dGVuZCBhcyBmYXIgYXMgb3VyIGRhdGEgZ29lcy5cbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUxhdGVzdEtub3duVGltZShldmVudHM6IEV2ZW50W10sIHJ1bjogV29ya2Zsb3dSdW4pOiBEYXRlIHtcbiAgbGV0IGxhdGVzdCA9IG5ldyBEYXRlKHJ1bi5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICBjb25zdCB0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgaWYgKHQgPiBsYXRlc3QpIGxhdGVzdCA9IHQ7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGxhdGVzdCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkU3BhbnMoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIGdyb3VwZWRFdmVudHM6IEdyb3VwZWRFdmVudHMsXG4gIG5vdzogRGF0ZSxcbiAgbGF0ZXN0S25vd25UaW1lOiBEYXRlXG4pIHtcbiAgLy8gQWN0aXZlIGNoaWxkIHNwYW5zIGNhcCBhdCBsYXRlc3RLbm93blRpbWUgc28gdGhleSBkb24ndCBleHRlbmQgaW50b1xuICAvLyB1bmtub3duIHRlcnJpdG9yeS4gRXZlbiB3aGVuIHRoZSBydW4gaXMgY29tcGxldGVkLCB3ZSBtYXkgbm90IGhhdmUgbG9hZGVkXG4gIC8vIGFsbCBldmVudHMgeWV0LCBzbyBhbHdheXMgdXNlIHRoZSBsYXRlc3QgZXZlbnQgd2UndmUgYWN0dWFsbHkgc2Vlbi5cbiAgY29uc3QgY2hpbGRNYXhFbmQgPSBsYXRlc3RLbm93blRpbWU7XG4gIGNvbnN0IHJ1bk1heEVuZCA9IHJ1bi5jb21wbGV0ZWRBdCA/PyBub3c7XG5cbiAgY29uc3Qgc3RlcFNwYW5zID0gQXJyYXkuZnJvbShncm91cGVkRXZlbnRzLmV2ZW50c0J5U3RlcElkLnZhbHVlcygpKVxuICAgIC5tYXAoKGV2ZW50cykgPT4gc3RlcFRvU3BhbihldmVudHMsIGNoaWxkTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIGNvbnN0IGhvb2tTcGFucyA9IEFycmF5LmZyb20oZ3JvdXBlZEV2ZW50cy5ob29rRXZlbnRzLnZhbHVlcygpKVxuICAgIC5tYXAoKGV2ZW50cykgPT4gaG9va1RvU3BhbihldmVudHMsIGNoaWxkTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIGNvbnN0IHdhaXRTcGFucyA9IEFycmF5LmZyb20oZ3JvdXBlZEV2ZW50cy50aW1lckV2ZW50cy52YWx1ZXMoKSlcbiAgICAubWFwKChldmVudHMpID0+IHdhaXRUb1NwYW4oZXZlbnRzLCBjaGlsZE1heEVuZCwgcnVuTWF4RW5kKSlcbiAgICAuZmlsdGVyKChzcGFuKTogc3BhbiBpcyBTcGFuID0+IHNwYW4gIT09IG51bGwpO1xuXG4gIHJldHVybiB7XG4gICAgcnVuU3BhbjogcnVuVG9TcGFuKHJ1biwgZ3JvdXBlZEV2ZW50cy5ydW5MZXZlbEV2ZW50cywgbm93KSxcbiAgICBzcGFuczogWy4uLnN0ZXBTcGFucywgLi4uaG9va1NwYW5zLCAuLi53YWl0U3BhbnNdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXNjYWRlU3BhbnMocnVuU3BhbjogU3Bhbiwgc3BhbnM6IFNwYW5bXSkge1xuICBjb25zdCBzb3J0ZWRTcGFucyA9IFtcbiAgICBydW5TcGFuLFxuICAgIC4uLnNwYW5zLnNsaWNlKCkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYVN0YXJ0ID0gb3RlbFRpbWVUb01zKGEuc3RhcnRUaW1lKTtcbiAgICAgIGNvbnN0IGJTdGFydCA9IG90ZWxUaW1lVG9NcyhiLnN0YXJ0VGltZSk7XG4gICAgICByZXR1cm4gYVN0YXJ0IC0gYlN0YXJ0O1xuICAgIH0pLFxuICBdO1xuXG4gIHJldHVybiBzb3J0ZWRTcGFucy5tYXAoKHNwYW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFyZW50U3BhbklkID1cbiAgICAgIGluZGV4ID09PSAwID8gdW5kZWZpbmVkIDogU3RyaW5nKHNvcnRlZFNwYW5zW2luZGV4IC0gMV0uc3BhbklkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3BhbixcbiAgICAgIHBhcmVudFNwYW5JZCxcbiAgICB9O1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFjZVdpdGhNZXRhIHtcbiAgdHJhY2VJZDogc3RyaW5nO1xuICByb290U3BhbklkOiBzdHJpbmc7XG4gIHNwYW5zOiBTcGFuW107XG4gIHJlc291cmNlczogeyBuYW1lOiBzdHJpbmc7IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfVtdO1xuICAvKiogRHVyYXRpb24gaW4gbXMgZnJvbSB0cmFjZSBzdGFydCB0byB0aGUgbGF0ZXN0IGtub3duIGV2ZW50LiAqL1xuICBrbm93bkR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVHJhY2UoXG4gIHJ1bjogV29ya2Zsb3dSdW4sXG4gIGV2ZW50czogRXZlbnRbXSxcbiAgbm93OiBEYXRlXG4pOiBUcmFjZVdpdGhNZXRhIHtcbiAgY29uc3QgZ3JvdXBlZEV2ZW50cyA9IGdyb3VwRXZlbnRzQnlDb3JyZWxhdGlvbihldmVudHMpO1xuICBjb25zdCBsYXRlc3RLbm93blRpbWUgPSBjb21wdXRlTGF0ZXN0S25vd25UaW1lKGV2ZW50cywgcnVuKTtcbiAgY29uc3QgeyBydW5TcGFuLCBzcGFucyB9ID0gYnVpbGRTcGFucyhcbiAgICBydW4sXG4gICAgZ3JvdXBlZEV2ZW50cyxcbiAgICBub3csXG4gICAgbGF0ZXN0S25vd25UaW1lXG4gICk7XG4gIGNvbnN0IHNvcnRlZENhc2NhZGluZ1NwYW5zID0gY2FzY2FkZVNwYW5zKHJ1blNwYW4sIHNwYW5zKTtcblxuICAvLyBDb21wdXRlIGtub3duIGR1cmF0aW9uIHJlbGF0aXZlIHRvIHRyYWNlIHN0YXJ0XG4gIGNvbnN0IHRyYWNlU3RhcnRNcyA9IG90ZWxUaW1lVG9NcyhydW5TcGFuLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGtub3duRHVyYXRpb25NcyA9IGxhdGVzdEtub3duVGltZS5nZXRUaW1lKCkgLSB0cmFjZVN0YXJ0TXM7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmFjZUlkOiBydW4ucnVuSWQsXG4gICAgcm9vdFNwYW5JZDogcnVuLnJ1bklkLFxuICAgIHNwYW5zOiBzb3J0ZWRDYXNjYWRpbmdTcGFucyxcbiAgICByZXNvdXJjZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3dvcmtmbG93JyxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICdzZXJ2aWNlLm5hbWUnOiBXT1JLRkxPV19MSUJSQVJZLm5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAga25vd25EdXJhdGlvbk1zOiBNYXRoLm1heCgwLCBrbm93bkR1cmF0aW9uTXMpLFxuICB9O1xufVxuIl19
@@ -6,19 +6,19 @@ export declare function cn(...inputs: ClassValue[]): string;
6
6
  * Formats a duration in milliseconds to a human-readable string.
7
7
  *
8
8
  * @param ms - Duration in milliseconds
9
- * @param compact - If true, returns a single-unit format (e.g., "45s", "2.5m").
10
- * If false (default), returns multi-part format (e.g., "1h 30m", "2d 5h").
9
+ * @param compact - If true, returns a compact format (e.g., "380ms", "2m 30s").
10
+ * If false (default), returns multi-part format (e.g., "1m 13s", "2d 5h 3m 12s").
11
11
  *
12
- * Compact format:
13
- * - < 1s: shows milliseconds (e.g., "500ms")
12
+ * Compact format (timeline markers):
13
+ * - < 1s: shows milliseconds (e.g., "380ms")
14
14
  * - < 1m: shows seconds (e.g., "45s")
15
- * - < 1h: shows minutes (e.g., "45m")
16
- * - >= 1h: shows hours (e.g., "2.5h")
15
+ * - < 1h: shows minutes and seconds (e.g., "2m 30s")
16
+ * - >= 1h: shows hours and minutes (e.g., "2h 30m")
17
17
  *
18
18
  * Full format:
19
- * - < 1s: shows milliseconds (e.g., "500ms")
20
- * - < 1m: shows seconds (e.g., "45.5s")
21
- * - >= 1m: shows human-readable format (e.g., "1h 30m", "2d 5h")
19
+ * - < 1s: shows milliseconds (e.g., "380ms")
20
+ * - < 1m: shows seconds (e.g., "45s")
21
+ * - >= 1m: shows decomposed format with whole seconds (e.g., "1m 13s", "2m 13s")
22
22
  */
23
23
  export declare function formatDuration(ms: number, compact?: boolean): string;
24
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAWD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAiDlE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC;AAOD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,MAAM,CAgDlE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,MAAM,CAKR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,CAmB7E;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAc/D"}