@workflow/web-shared 5.0.0-beta.3 → 5.0.0-beta.31
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.
- package/README.md +2 -10
- package/dist/components/error-boundary.js +1 -1
- package/dist/components/event-list-view.d.ts +46 -1
- package/dist/components/event-list-view.d.ts.map +1 -1
- package/dist/components/event-list-view.js +228 -90
- package/dist/components/hook-actions.js +1 -1
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +5 -2
- package/dist/components/new-trace-viewer/components/copy-button.js +3 -3
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel-width.js +67 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/detail-panel.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/detail-panel.js +122 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts +31 -0
- package/dist/components/new-trace-viewer/components/draggable-border.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/draggable-border.js +140 -0
- package/dist/components/new-trace-viewer/components/event-list.d.ts +4 -2
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/event-list.js +22 -13
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts +18 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/copy-selection.js +54 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/middle-truncate.js +81 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts +25 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/truncate.js +101 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.js +114 -0
- package/dist/components/new-trace-viewer/components/minimap.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/minimap.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/minimap.js +337 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts +14 -0
- package/dist/components/new-trace-viewer/components/pane-constants.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/pane-constants.js +16 -0
- package/dist/components/new-trace-viewer/components/span-markers.d.ts +46 -0
- package/dist/components/new-trace-viewer/components/span-markers.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/span-markers.js +85 -0
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +3 -7
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +25 -84
- package/dist/components/new-trace-viewer/components/timeline.d.ts +19 -15
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +229 -111
- package/dist/components/new-trace-viewer/components/timeline.module.css +46 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts +5 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +55 -0
- package/dist/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +26 -0
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts +8 -0
- package/dist/components/new-trace-viewer/components/use-element-width.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-element-width.js +25 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts +34 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-row-window.js +107 -0
- package/dist/components/new-trace-viewer/context.d.ts +3 -1
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/context.js +9 -10
- package/dist/components/new-trace-viewer/icons.js +3 -3
- package/dist/components/new-trace-viewer/search.d.ts +19 -0
- package/dist/components/new-trace-viewer/search.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/search.js +134 -0
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +6 -3
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +167 -162
- package/dist/components/new-trace-viewer/types.d.ts +2 -0
- package/dist/components/new-trace-viewer/types.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/types.js +2 -2
- package/dist/components/new-trace-viewer/utils.d.ts +48 -13
- package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/utils.js +135 -107
- package/dist/components/run-trace-view.d.ts +5 -7
- package/dist/components/run-trace-view.d.ts.map +1 -1
- package/dist/components/run-trace-view.js +3 -3
- package/dist/components/sidebar/attribute-panel.d.ts +4 -1
- package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
- package/dist/components/sidebar/attribute-panel.js +133 -113
- package/dist/components/sidebar/attributes-block.d.ts +40 -0
- package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
- package/dist/components/sidebar/attributes-block.js +140 -0
- package/dist/components/sidebar/conversation-view.js +1 -1
- package/dist/components/sidebar/copyable-data-block.d.ts +2 -0
- package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
- package/dist/components/sidebar/copyable-data-block.js +17 -16
- package/dist/components/sidebar/entity-detail-panel.d.ts +11 -11
- package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
- package/dist/components/sidebar/entity-detail-panel.js +35 -69
- package/dist/components/sidebar/events-list.d.ts +6 -2
- package/dist/components/sidebar/events-list.d.ts.map +1 -1
- package/dist/components/sidebar/events-list.js +76 -62
- package/dist/components/sidebar/resolve-hook-modal.js +1 -1
- package/dist/components/sidebar/sidebar-data-context.d.ts +10 -7
- package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
- package/dist/components/sidebar/sidebar-data-context.js +1 -1
- package/dist/components/sidebar/span-detail-merge.d.ts +31 -0
- package/dist/components/sidebar/span-detail-merge.d.ts.map +1 -0
- package/dist/components/sidebar/span-detail-merge.js +92 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts +16 -0
- package/dist/components/sidebar/use-selected-span-detail.d.ts.map +1 -0
- package/dist/components/sidebar/use-selected-span-detail.js +93 -0
- package/dist/components/stream-viewer.js +1 -1
- package/dist/components/trace-viewer/components/map.d.ts +2 -2
- package/dist/components/trace-viewer/components/map.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/map.js +1 -1
- package/dist/components/trace-viewer/components/markers.js +1 -1
- package/dist/components/trace-viewer/components/node.d.ts +7 -7
- package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
- package/dist/components/trace-viewer/components/node.js +2 -1
- package/dist/components/trace-viewer/components/search-input.js +1 -1
- package/dist/components/trace-viewer/components/search.js +1 -1
- package/dist/components/trace-viewer/components/span-content.js +1 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js +1 -1
- package/dist/components/trace-viewer/components/span-segments.js +1 -1
- package/dist/components/trace-viewer/components/span-strategies.js +1 -1
- package/dist/components/trace-viewer/components/ui.js +1 -1
- package/dist/components/trace-viewer/components/zoom-button.js +1 -1
- package/dist/components/trace-viewer/components/zoom-icons.js +1 -1
- package/dist/components/trace-viewer/context.js +1 -1
- package/dist/components/trace-viewer/index.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.js +1 -1
- package/dist/components/trace-viewer/trace-viewer.module.css +4 -4
- package/dist/components/trace-viewer/types.js +1 -1
- package/dist/components/trace-viewer/util/constants.js +1 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js +1 -1
- package/dist/components/trace-viewer/util/timing.d.ts +3 -3
- package/dist/components/trace-viewer/util/timing.d.ts.map +1 -1
- package/dist/components/trace-viewer/util/timing.js +8 -11
- package/dist/components/trace-viewer/util/tree.js +1 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js +1 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js +1 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js +1 -1
- package/dist/components/trace-viewer/worker.js +1 -1
- package/dist/components/trace-viewer-new.d.ts +5 -1
- package/dist/components/trace-viewer-new.d.ts.map +1 -1
- package/dist/components/trace-viewer-new.js +8 -10
- package/dist/components/ui/alert.js +2 -2
- package/dist/components/ui/button.d.ts +10 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +46 -0
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/collapsible.d.ts +46 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +66 -0
- package/dist/components/ui/context-card.d.ts +47 -0
- package/dist/components/ui/context-card.d.ts.map +1 -0
- package/dist/components/ui/context-card.js +471 -0
- package/dist/components/ui/data-inspector.d.ts +7 -6
- package/dist/components/ui/data-inspector.d.ts.map +1 -1
- package/dist/components/ui/data-inspector.js +232 -99
- package/dist/components/ui/data-inspector.styles.d.ts +29 -0
- package/dist/components/ui/data-inspector.styles.d.ts.map +1 -0
- package/dist/components/ui/data-inspector.styles.js +95 -0
- package/dist/components/ui/decrypt-button.js +1 -1
- package/dist/components/ui/error-card.js +2 -2
- package/dist/components/ui/error-stack-block.d.ts +17 -10
- package/dist/components/ui/error-stack-block.d.ts.map +1 -1
- package/dist/components/ui/error-stack-block.js +49 -30
- package/dist/components/ui/icon-button.d.ts +19 -0
- package/dist/components/ui/icon-button.d.ts.map +1 -0
- package/dist/components/ui/icon-button.js +29 -0
- package/dist/components/ui/kbd.d.ts +10 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +25 -0
- package/dist/components/ui/load-more-button.js +1 -1
- package/dist/components/ui/menu-dropdown.js +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/spinner.js +1 -1
- package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
- package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
- package/dist/components/ui/timestamp-tooltip.js +80 -132
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/components/workflow-trace-view.d.ts +7 -8
- package/dist/components/workflow-trace-view.d.ts.map +1 -1
- package/dist/components/workflow-trace-view.js +11 -16
- package/dist/components/workflow-traces/event-colors.d.ts +2 -1
- package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/event-colors.js +15 -7
- package/dist/components/workflow-traces/trace-colors.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-colors.js +3 -4
- package/dist/components/workflow-traces/trace-span-construction.d.ts +7 -4
- package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
- package/dist/components/workflow-traces/trace-span-construction.js +87 -33
- package/dist/components/workflow-traces/trace-time-utils.js +1 -1
- package/dist/hooks/use-dark-mode.js +1 -1
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/hooks/use-reduced-motion.d.ts +10 -0
- package/dist/hooks/use-reduced-motion.d.ts.map +1 -0
- package/dist/hooks/use-reduced-motion.js +29 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/lib/cn.d.ts +10 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +83 -0
- package/dist/lib/event-analysis.d.ts +1 -1
- package/dist/lib/event-analysis.d.ts.map +1 -1
- package/dist/lib/event-analysis.js +3 -2
- package/dist/lib/event-materialization.d.ts +1 -1
- package/dist/lib/event-materialization.d.ts.map +1 -1
- package/dist/lib/event-materialization.js +29 -21
- package/dist/lib/exact-event-search-id.d.ts +25 -0
- package/dist/lib/exact-event-search-id.d.ts.map +1 -0
- package/dist/lib/exact-event-search-id.js +39 -0
- package/dist/lib/hydration.d.ts +17 -2
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +185 -22
- package/dist/lib/stream-display.js +1 -1
- package/dist/lib/toast.js +1 -1
- package/dist/lib/trace-builder.d.ts +16 -4
- package/dist/lib/trace-builder.d.ts.map +1 -1
- package/dist/lib/trace-builder.js +34 -15
- package/dist/lib/utils.d.ts +23 -9
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +73 -33
- package/dist/lib/zstd-browser-decoder.d.ts +7 -0
- package/dist/lib/zstd-browser-decoder.d.ts.map +1 -0
- package/dist/lib/zstd-browser-decoder.js +41 -0
- package/dist/styles.css +14 -0
- package/package.json +10 -7
- package/src/components/event-list-view.tsx +375 -116
- package/src/components/index.ts +12 -5
- package/src/components/new-trace-viewer/components/copy-button.tsx +2 -2
- package/src/components/new-trace-viewer/components/detail-panel-width.test.ts +123 -0
- package/src/components/new-trace-viewer/components/detail-panel-width.ts +76 -0
- package/src/components/new-trace-viewer/components/detail-panel.tsx +273 -0
- package/src/components/new-trace-viewer/components/draggable-border.tsx +216 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +57 -32
- package/src/components/new-trace-viewer/components/middle-truncate/copy-selection.ts +114 -0
- package/src/components/new-trace-viewer/components/middle-truncate/middle-truncate.tsx +157 -0
- package/src/components/new-trace-viewer/components/middle-truncate/truncate.ts +132 -0
- package/src/components/new-trace-viewer/components/middle-truncate/use-middle-truncate.ts +167 -0
- package/src/components/new-trace-viewer/components/minimap.tsx +559 -0
- package/src/components/new-trace-viewer/components/pane-constants.ts +19 -0
- package/src/components/new-trace-viewer/components/span-markers.tsx +173 -0
- package/src/components/new-trace-viewer/components/split-pane.tsx +80 -135
- package/src/components/new-trace-viewer/components/timeline.module.css +46 -0
- package/src/components/new-trace-viewer/components/timeline.tsx +603 -239
- package/src/components/new-trace-viewer/components/trace-shortcut-helper.module.css +20 -0
- package/src/components/new-trace-viewer/components/trace-shortcut-helper.tsx +116 -0
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +114 -0
- package/src/components/new-trace-viewer/components/use-element-width.ts +29 -0
- package/src/components/new-trace-viewer/components/use-row-window.ts +140 -0
- package/src/components/new-trace-viewer/context.tsx +13 -14
- package/src/components/new-trace-viewer/icons.tsx +2 -2
- package/src/components/new-trace-viewer/search.ts +178 -0
- package/src/components/new-trace-viewer/trace-viewer.tsx +336 -293
- package/src/components/new-trace-viewer/types.ts +2 -0
- package/src/components/new-trace-viewer/utils.test.ts +247 -0
- package/src/components/new-trace-viewer/utils.ts +203 -134
- package/src/components/run-trace-view.tsx +10 -14
- package/src/components/sidebar/attribute-panel.tsx +276 -275
- package/src/components/sidebar/attributes-block.tsx +326 -0
- package/src/components/sidebar/copyable-data-block.tsx +50 -28
- package/src/components/sidebar/entity-detail-panel.tsx +89 -123
- package/src/components/sidebar/events-list.tsx +196 -178
- package/src/components/sidebar/sidebar-data-context.tsx +11 -11
- package/src/components/sidebar/span-detail-merge.ts +134 -0
- package/src/components/sidebar/use-selected-span-detail.ts +146 -0
- package/src/components/trace-viewer/components/node.tsx +3 -2
- package/src/components/trace-viewer/trace-viewer.module.css +4 -4
- package/src/components/trace-viewer/util/timing.ts +7 -11
- package/src/components/trace-viewer-new.tsx +21 -15
- package/src/components/ui/alert.tsx +1 -1
- package/src/components/ui/button.tsx +68 -0
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/collapsible.tsx +219 -0
- package/src/components/ui/context-card.tsx +784 -0
- package/src/components/ui/data-inspector.styles.ts +96 -0
- package/src/components/ui/data-inspector.tsx +501 -204
- package/src/components/ui/error-card.tsx +1 -1
- package/src/components/ui/error-stack-block.tsx +84 -55
- package/src/components/ui/icon-button.tsx +53 -0
- package/src/components/ui/kbd.tsx +43 -0
- package/src/components/ui/skeleton.tsx +1 -1
- package/src/components/ui/timestamp-tooltip.tsx +132 -194
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/components/workflow-trace-view.tsx +31 -36
- package/src/components/workflow-traces/event-colors.ts +15 -11
- package/src/components/workflow-traces/trace-colors.ts +6 -6
- package/src/components/workflow-traces/trace-span-construction.test.ts +85 -0
- package/src/components/workflow-traces/trace-span-construction.ts +118 -35
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/hooks/use-reduced-motion.ts +34 -0
- package/src/index.ts +9 -0
- package/src/lib/cn.ts +93 -0
- package/src/lib/event-analysis.ts +6 -4
- package/src/lib/event-materialization.ts +35 -21
- package/src/lib/exact-event-search-id.ts +67 -0
- package/src/lib/hydration.ts +203 -29
- package/src/lib/trace-builder.ts +44 -19
- package/src/lib/utils.test.ts +33 -0
- package/src/lib/utils.ts +82 -35
- package/src/lib/zstd-browser-decoder.ts +42 -0
- package/src/styles.css +14 -0
- package/dist/components/error-boundary.js.map +0 -1
- package/dist/components/event-list-view.js.map +0 -1
- package/dist/components/hook-actions.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/new-trace-viewer/components/copy-button.js.map +0 -1
- package/dist/components/new-trace-viewer/components/event-list.js.map +0 -1
- package/dist/components/new-trace-viewer/components/split-pane.js.map +0 -1
- package/dist/components/new-trace-viewer/components/timeline.js.map +0 -1
- package/dist/components/new-trace-viewer/context.js.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.d.ts +0 -10
- package/dist/components/new-trace-viewer/detail-panel.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/detail-panel.js +0 -11
- package/dist/components/new-trace-viewer/detail-panel.js.map +0 -1
- package/dist/components/new-trace-viewer/icons.js.map +0 -1
- package/dist/components/new-trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/new-trace-viewer/types.js.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts +0 -1
- package/dist/components/new-trace-viewer/util/constants.d.ts.map +0 -1
- package/dist/components/new-trace-viewer/util/constants.js +0 -2
- package/dist/components/new-trace-viewer/util/constants.js.map +0 -1
- package/dist/components/new-trace-viewer/utils.js.map +0 -1
- package/dist/components/run-trace-view.js.map +0 -1
- package/dist/components/sidebar/attribute-panel.js.map +0 -1
- package/dist/components/sidebar/conversation-view.js.map +0 -1
- package/dist/components/sidebar/copyable-data-block.js.map +0 -1
- package/dist/components/sidebar/detail-card.d.ts +0 -14
- package/dist/components/sidebar/detail-card.d.ts.map +0 -1
- package/dist/components/sidebar/detail-card.js +0 -20
- package/dist/components/sidebar/detail-card.js.map +0 -1
- package/dist/components/sidebar/entity-detail-panel.js.map +0 -1
- package/dist/components/sidebar/events-list.js.map +0 -1
- package/dist/components/sidebar/resolve-hook-modal.js.map +0 -1
- package/dist/components/sidebar/sidebar-data-context.js.map +0 -1
- package/dist/components/stream-viewer.js.map +0 -1
- package/dist/components/trace-viewer/components/map.js.map +0 -1
- package/dist/components/trace-viewer/components/markers.js.map +0 -1
- package/dist/components/trace-viewer/components/node.js.map +0 -1
- package/dist/components/trace-viewer/components/search-input.js.map +0 -1
- package/dist/components/trace-viewer/components/search.js.map +0 -1
- package/dist/components/trace-viewer/components/span-content.js.map +0 -1
- package/dist/components/trace-viewer/components/span-detail-panel.js.map +0 -1
- package/dist/components/trace-viewer/components/span-segments.js.map +0 -1
- package/dist/components/trace-viewer/components/span-strategies.js.map +0 -1
- package/dist/components/trace-viewer/components/ui.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-button.js.map +0 -1
- package/dist/components/trace-viewer/components/zoom-icons.js.map +0 -1
- package/dist/components/trace-viewer/context.js.map +0 -1
- package/dist/components/trace-viewer/index.js.map +0 -1
- package/dist/components/trace-viewer/trace-viewer.js.map +0 -1
- package/dist/components/trace-viewer/types.js.map +0 -1
- package/dist/components/trace-viewer/util/constants.js.map +0 -1
- package/dist/components/trace-viewer/util/scrollbar-width.js.map +0 -1
- package/dist/components/trace-viewer/util/timing.js.map +0 -1
- package/dist/components/trace-viewer/util/tree.js.map +0 -1
- package/dist/components/trace-viewer/util/use-immediate-style.js.map +0 -1
- package/dist/components/trace-viewer/util/use-streaming-spans.js.map +0 -1
- package/dist/components/trace-viewer/util/use-trackpad-zoom.js.map +0 -1
- package/dist/components/trace-viewer/worker.js.map +0 -1
- package/dist/components/trace-viewer-new.js.map +0 -1
- package/dist/components/ui/alert.js.map +0 -1
- package/dist/components/ui/card.js.map +0 -1
- package/dist/components/ui/data-inspector.js.map +0 -1
- package/dist/components/ui/decrypt-button.js.map +0 -1
- package/dist/components/ui/error-card.js.map +0 -1
- package/dist/components/ui/error-stack-block.js.map +0 -1
- package/dist/components/ui/inspector-theme.d.ts +0 -95
- package/dist/components/ui/inspector-theme.d.ts.map +0 -1
- package/dist/components/ui/inspector-theme.js +0 -82
- package/dist/components/ui/inspector-theme.js.map +0 -1
- package/dist/components/ui/load-more-button.js.map +0 -1
- package/dist/components/ui/menu-dropdown.js.map +0 -1
- package/dist/components/ui/skeleton.js.map +0 -1
- package/dist/components/ui/spinner.js.map +0 -1
- package/dist/components/ui/timestamp-tooltip.js.map +0 -1
- package/dist/components/workflow-trace-view.js.map +0 -1
- package/dist/components/workflow-traces/event-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-colors.js.map +0 -1
- package/dist/components/workflow-traces/trace-span-construction.js.map +0 -1
- package/dist/components/workflow-traces/trace-time-utils.js.map +0 -1
- package/dist/hooks/use-dark-mode.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/event-analysis.js.map +0 -1
- package/dist/lib/event-materialization.js.map +0 -1
- package/dist/lib/hydration.js.map +0 -1
- package/dist/lib/stream-display.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/trace-builder.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/src/components/new-trace-viewer/detail-panel.tsx +0 -57
- package/src/components/new-trace-viewer/util/constants.ts +0 -0
- package/src/components/sidebar/detail-card.tsx +0 -65
- package/src/components/ui/inspector-theme.ts +0 -110
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
|
-
* Reusable data inspector
|
|
4
|
+
* Reusable data inspector for the o11y UI.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Renders JSON as a collapsible tree: bracket notation (`{ … }` / `[ … ]`),
|
|
7
|
+
* colored keys, typed value colors, `▸`/`▾` disclosure icons, and a `...`
|
|
8
|
+
* collapsed indicator.
|
|
9
|
+
*
|
|
10
|
+
* On top of plain JSON it handles the workflow-specific value types: StreamRef /
|
|
11
|
+
* RunRef badges, encrypted markers, decoded byte streams, Dates, and named
|
|
12
|
+
* class instances.
|
|
9
13
|
*/
|
|
10
14
|
import { Lock } from 'lucide-react';
|
|
11
|
-
import { createContext, useContext,
|
|
12
|
-
import { ObjectInspector, ObjectLabel, ObjectName, ObjectRootLabel, ObjectValue, } from 'react-inspector';
|
|
13
|
-
import { useDarkMode } from '../../hooks/use-dark-mode';
|
|
15
|
+
import { createContext, useContext, useId, useMemo, useRef, useState, } from 'react';
|
|
14
16
|
import { ENCRYPTED_DISPLAY_NAME } from '../../lib/hydration';
|
|
15
17
|
import { formatArrayBufferViewForDisplay, } from '../../lib/stream-display';
|
|
16
|
-
import {
|
|
18
|
+
import { Button } from './button';
|
|
19
|
+
import { CLS, JSON_VIEW_STYLES } from './data-inspector.styles';
|
|
17
20
|
import { Spinner } from './spinner';
|
|
18
21
|
// ---------------------------------------------------------------------------
|
|
19
22
|
// StreamRef / ClassInstanceRef type detection
|
|
@@ -68,6 +71,12 @@ function isClassInstanceRef(value) {
|
|
|
68
71
|
'__type' in value &&
|
|
69
72
|
value.__type === CLASS_INSTANCE_REF_TYPE);
|
|
70
73
|
}
|
|
74
|
+
function isEncryptedMarker(value) {
|
|
75
|
+
return (value !== null &&
|
|
76
|
+
typeof value === 'object' &&
|
|
77
|
+
value.constructor?.name ===
|
|
78
|
+
ENCRYPTED_DISPLAY_NAME);
|
|
79
|
+
}
|
|
71
80
|
// ---------------------------------------------------------------------------
|
|
72
81
|
// Stream click context (passed through from the panel)
|
|
73
82
|
// ---------------------------------------------------------------------------
|
|
@@ -78,19 +87,16 @@ function isClassInstanceRef(value) {
|
|
|
78
87
|
export const StreamClickContext = createContext(undefined);
|
|
79
88
|
export const DecryptClickContext = createContext(undefined);
|
|
80
89
|
export const RunClickContext = createContext(undefined);
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Workflow-specific value renderers (badges, encrypted markers, byte streams)
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
81
93
|
function EncryptedInlineLabel() {
|
|
82
94
|
const ctx = useContext(DecryptClickContext);
|
|
83
95
|
if (ctx) {
|
|
84
|
-
return (_jsxs(
|
|
85
|
-
backgroundColor: 'var(--ds-gray-100)',
|
|
86
|
-
color: 'var(--ds-gray-700)',
|
|
87
|
-
border: '1px solid var(--ds-gray-400)',
|
|
88
|
-
fontStyle: 'italic',
|
|
89
|
-
opacity: ctx.isDecrypting ? 0.6 : 1,
|
|
90
|
-
}, disabled: ctx.isDecrypting, onClick: (e) => {
|
|
96
|
+
return (_jsxs(Button, { size: "xs", className: "align-baseline gap-x-1", disabled: ctx.isDecrypting, onClick: (e) => {
|
|
91
97
|
e.stopPropagation();
|
|
92
98
|
ctx.onDecrypt();
|
|
93
|
-
},
|
|
99
|
+
}, children: [ctx.isDecrypting ? (_jsx(Spinner, { size: 10 })) : (_jsx(Lock, { className: "h-3 w-3" })), _jsx("span", { children: "Decrypt" })] }));
|
|
94
100
|
}
|
|
95
101
|
return (_jsxs("span", { style: { color: 'var(--ds-gray-600)', fontStyle: 'italic' }, children: [_jsx(Lock, { className: "h-3 w-3", style: {
|
|
96
102
|
display: 'inline',
|
|
@@ -125,10 +131,6 @@ function RunRefInline({ runRef }) {
|
|
|
125
131
|
onRunClick?.(runRef.runId);
|
|
126
132
|
}, title: `View run: ${runRef.runId}`, children: _jsx("span", { children: runRef.runId }) }));
|
|
127
133
|
}
|
|
128
|
-
// ---------------------------------------------------------------------------
|
|
129
|
-
// Extended theme context (for colors react-inspector doesn't support natively)
|
|
130
|
-
// ---------------------------------------------------------------------------
|
|
131
|
-
const ExtendedThemeContext = createContext(inspectorThemeExtendedLight);
|
|
132
134
|
function DecodedBytesChunk({ decodedText, source, }) {
|
|
133
135
|
const [selectedView, setSelectedView] = useState('decoded');
|
|
134
136
|
const parsed = parseChunkData(decodedText);
|
|
@@ -149,75 +151,217 @@ function DecodedBytesInspector({ decodedText, source, }) {
|
|
|
149
151
|
const [expanded, setExpanded] = useState(false);
|
|
150
152
|
return (_jsxs("div", { className: "font-mono", children: [_jsxs("button", { type: "button", className: "flex max-w-full items-start gap-1 text-left", style: { color: 'var(--ds-gray-1000)' }, onClick: () => setExpanded((value) => !value), title: `${source.type} decoded as ${source.encoding.toUpperCase()} text`, children: [_jsx("span", { className: "select-none", style: { color: 'var(--ds-gray-700)' }, children: expanded ? '▼' : '▶' }), _jsx("span", { className: "min-w-0 break-words", children: source.rawSummary })] }), expanded && (_jsxs("div", { className: "mt-1 pl-5", children: [_jsx("span", { style: { color: 'var(--ds-gray-700)' }, children: "decoded: " }), _jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-green-900)' }, children: JSON.stringify(decodedText) })] }))] }));
|
|
151
153
|
}
|
|
152
|
-
function
|
|
153
|
-
|
|
154
|
+
function BytesDisplayValue({ display }) {
|
|
155
|
+
if (display.decodedFrom) {
|
|
156
|
+
return (_jsx(DecodedBytesChunk, { decodedText: display.text, source: display.decodedFrom }));
|
|
157
|
+
}
|
|
158
|
+
return (_jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-gray-1000)' }, children: display.text }));
|
|
159
|
+
}
|
|
160
|
+
/** Field names are rendered unquoted (empty string shows as `""`). */
|
|
161
|
+
function formatField(field) {
|
|
162
|
+
return field === '' ? '""' : field;
|
|
154
163
|
}
|
|
155
|
-
// ---------------------------------------------------------------------------
|
|
156
|
-
// Custom nodeRenderer
|
|
157
|
-
// ---------------------------------------------------------------------------
|
|
158
164
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* react-inspector renders Date instances as unstyled plain text (no theme
|
|
163
|
-
* key exists for them), so we intercept here and apply the magenta color
|
|
164
|
-
* from our extended theme — matching Node.js util.inspect()'s date style.
|
|
165
|
-
*
|
|
166
|
-
* Default nodeRenderer reference:
|
|
167
|
-
* https://github.com/storybookjs/react-inspector/blob/main/README.md#noderenderer
|
|
165
|
+
* Describe an object/array/map/set as an expandable container. Returns null for
|
|
166
|
+
* values that should render as a primitive. `prefix` carries a class name shown
|
|
167
|
+
* before the opening bracket (Map/Set and named class instances).
|
|
168
168
|
*/
|
|
169
|
-
function
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
169
|
+
function describeContainer(value) {
|
|
170
|
+
if (Array.isArray(value)) {
|
|
171
|
+
return {
|
|
172
|
+
entries: value.map((item) => [undefined, item]),
|
|
173
|
+
open: '[',
|
|
174
|
+
close: ']',
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (value instanceof Map) {
|
|
178
|
+
return {
|
|
179
|
+
entries: Array.from(value.entries(), ([key, val]) => [
|
|
180
|
+
String(key),
|
|
181
|
+
val,
|
|
182
|
+
]),
|
|
183
|
+
open: '{',
|
|
184
|
+
close: '}',
|
|
185
|
+
prefix: 'Map',
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
if (value instanceof Set) {
|
|
189
|
+
return {
|
|
190
|
+
entries: Array.from(value.values(), (item) => [undefined, item]),
|
|
191
|
+
open: '[',
|
|
192
|
+
close: ']',
|
|
193
|
+
prefix: 'Set',
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (value !== null && typeof value === 'object') {
|
|
197
|
+
const name = value.constructor
|
|
198
|
+
?.name;
|
|
199
|
+
return {
|
|
200
|
+
entries: Object.entries(value),
|
|
201
|
+
open: '{',
|
|
202
|
+
close: '}',
|
|
203
|
+
prefix: name && name !== 'Object' ? name : undefined,
|
|
204
|
+
};
|
|
183
205
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
function describePrimitive(value) {
|
|
209
|
+
if (value === null)
|
|
210
|
+
return { text: 'null', cls: CLS.null };
|
|
211
|
+
if (value === undefined)
|
|
212
|
+
return { text: 'undefined', cls: CLS.undefined };
|
|
213
|
+
if (typeof value === 'string' || value instanceof String) {
|
|
214
|
+
return { text: `"${String(value)}"`, cls: CLS.string };
|
|
215
|
+
}
|
|
216
|
+
if (typeof value === 'boolean' || value instanceof Boolean) {
|
|
217
|
+
return { text: String(value), cls: CLS.boolean };
|
|
218
|
+
}
|
|
219
|
+
if (typeof value === 'number' || value instanceof Number) {
|
|
220
|
+
return { text: String(value), cls: CLS.number };
|
|
187
221
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
return (_jsxs("span", { children: [name != null && _jsx(ObjectName, { name: name }), name != null && _jsx("span", { children: ": " }), _jsx(RunRefInline, { runRef: data })] }));
|
|
222
|
+
if (typeof value === 'bigint') {
|
|
223
|
+
return { text: `${value.toString()}n`, cls: CLS.number };
|
|
191
224
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
225
|
+
return { text: String(value), cls: CLS.punctuation };
|
|
226
|
+
}
|
|
227
|
+
function Label({ field, clickable }) {
|
|
228
|
+
if (field === undefined)
|
|
229
|
+
return null;
|
|
230
|
+
return (_jsx("span", { className: clickable ? CLS.clickableLabel : CLS.label, children: `${formatField(field)}:` }));
|
|
231
|
+
}
|
|
232
|
+
function Comma({ isLast }) {
|
|
233
|
+
if (isLast)
|
|
234
|
+
return null;
|
|
235
|
+
return _jsx("span", { className: CLS.punctuation, children: "," });
|
|
236
|
+
}
|
|
237
|
+
/** A non-expandable row: `field: <value>`. */
|
|
238
|
+
function LeafRow({ field, isLast, children, }) {
|
|
239
|
+
return (_jsxs("div", { className: CLS.child, role: "treeitem", tabIndex: -1, children: [_jsx(Label, { field: field }), children, _jsx(Comma, { isLast: isLast })] }));
|
|
240
|
+
}
|
|
241
|
+
function PrimitiveValue({ field, value, isLast }) {
|
|
242
|
+
const { text, cls } = describePrimitive(value);
|
|
243
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx("span", { className: cls, children: text }) }));
|
|
244
|
+
}
|
|
245
|
+
function EmptyContainer({ field, prefix, open, close, isLast, }) {
|
|
246
|
+
return (_jsxs("div", { className: CLS.child, role: "treeitem", tabIndex: -1, children: [_jsx(Label, { field: field }), prefix ? _jsx("span", { className: CLS.className, children: prefix }) : null, _jsx("span", { className: CLS.punctuation, children: open }), _jsx("span", { className: CLS.punctuation, children: close }), _jsx(Comma, { isLast: isLast })] }));
|
|
247
|
+
}
|
|
248
|
+
function focusExpander(button, outerRef) {
|
|
249
|
+
const previous = outerRef.current?.querySelector('[data-json-expander][tabindex="0"]');
|
|
250
|
+
if (previous)
|
|
251
|
+
previous.tabIndex = -1;
|
|
252
|
+
button.tabIndex = 0;
|
|
253
|
+
button.focus();
|
|
254
|
+
}
|
|
255
|
+
function moveExpanderFocus(outerRef, direction) {
|
|
256
|
+
const root = outerRef.current;
|
|
257
|
+
if (!root)
|
|
258
|
+
return;
|
|
259
|
+
const buttons = root.querySelectorAll('[data-json-expander]');
|
|
260
|
+
let current = -1;
|
|
261
|
+
for (let i = 0; i < buttons.length; i += 1) {
|
|
262
|
+
if (buttons[i].tabIndex === 0) {
|
|
263
|
+
current = i;
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (current < 0)
|
|
268
|
+
return;
|
|
269
|
+
const next = (current + direction + buttons.length) % buttons.length;
|
|
270
|
+
buttons[current].tabIndex = -1;
|
|
271
|
+
buttons[next].tabIndex = 0;
|
|
272
|
+
buttons[next].focus();
|
|
273
|
+
}
|
|
274
|
+
function ExpandableContainer({ field, entries, open, close, prefix, ctx, isLast, }) {
|
|
275
|
+
const { level, shouldExpand, outerRef } = ctx;
|
|
276
|
+
const [expanded, setExpanded] = useState(() => shouldExpand(level));
|
|
277
|
+
const rowRef = useRef(null);
|
|
278
|
+
const contentsId = useId();
|
|
279
|
+
if (entries.length === 0) {
|
|
280
|
+
return (_jsx(EmptyContainer, { field: field, prefix: prefix, open: open, close: close, isLast: isLast }));
|
|
281
|
+
}
|
|
282
|
+
const toggle = () => {
|
|
283
|
+
setExpanded((value) => !value);
|
|
284
|
+
if (rowRef.current)
|
|
285
|
+
focusExpander(rowRef.current, outerRef);
|
|
286
|
+
};
|
|
287
|
+
// Toggle only for clicks that land on this row itself; clicks bubbling up out
|
|
288
|
+
// of a nested treeitem are handled by that descendant's own row.
|
|
289
|
+
const onClick = (event) => {
|
|
290
|
+
if (event.target.closest('[role="treeitem"]') !==
|
|
291
|
+
event.currentTarget) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
toggle();
|
|
295
|
+
};
|
|
296
|
+
const onKeyDown = (event) => {
|
|
297
|
+
if (event.key === 'ArrowRight') {
|
|
298
|
+
event.preventDefault();
|
|
299
|
+
setExpanded(true);
|
|
196
300
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
// react-inspector has no OBJECT_VALUE_DATE_COLOR theme key, so we handle it here.
|
|
201
|
-
if (data instanceof Date) {
|
|
202
|
-
const dateStr = data.toISOString();
|
|
203
|
-
if (depth === 0) {
|
|
204
|
-
return (_jsx("span", { style: { color: extendedTheme.OBJECT_VALUE_DATE_COLOR }, children: dateStr }));
|
|
301
|
+
else if (event.key === 'ArrowLeft') {
|
|
302
|
+
event.preventDefault();
|
|
303
|
+
setExpanded(false);
|
|
205
304
|
}
|
|
206
|
-
|
|
305
|
+
else if (event.key === 'ArrowUp') {
|
|
306
|
+
event.preventDefault();
|
|
307
|
+
moveExpanderFocus(outerRef, -1);
|
|
308
|
+
}
|
|
309
|
+
else if (event.key === 'ArrowDown') {
|
|
310
|
+
event.preventDefault();
|
|
311
|
+
moveExpanderFocus(outerRef, 1);
|
|
312
|
+
}
|
|
313
|
+
};
|
|
314
|
+
const lastIndex = entries.length - 1;
|
|
315
|
+
return (_jsxs("div", { className: CLS.child, role: "treeitem", "aria-expanded": expanded, "aria-controls": expanded ? contentsId : undefined, "data-json-expander": true, ref: rowRef, tabIndex: level === 0 ? 0 : -1, onClick: onClick, onKeyDown: onKeyDown, children: [_jsx("span", { className: expanded ? CLS.collapseIcon : CLS.expandIcon, "aria-hidden": "true" }), field !== undefined && (_jsx("span", { className: CLS.clickableLabel, children: `${formatField(field)}:` })), prefix ? _jsx("span", { className: CLS.className, children: prefix }) : null, _jsx("span", { className: CLS.punctuation, children: open }), expanded ? (_jsx("ul", { id: contentsId, className: CLS.childFields, role: "group", children: entries.map(([childField, childValue], index) => (_jsx(DataRender, { field: childField, value: childValue, isLast: index === lastIndex, ctx: { ...ctx, level: level + 1 } }, childField ?? index))) })) : (_jsx("span", { className: CLS.collapsedContent, "aria-hidden": "true" })), _jsx("span", { className: CLS.punctuation, children: close }), _jsx(Comma, { isLast: isLast })] }));
|
|
316
|
+
}
|
|
317
|
+
function DataRender({ field, value, isLast, ctx }) {
|
|
318
|
+
if (isBytesDisplay(value)) {
|
|
319
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx(BytesDisplayValue, { display: value }) }));
|
|
207
320
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
return _jsx(ObjectRootLabel, { name: name, data: data });
|
|
321
|
+
if (isEncryptedMarker(value)) {
|
|
322
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx(EncryptedInlineLabel, {}) }));
|
|
211
323
|
}
|
|
212
|
-
|
|
324
|
+
if (isStreamRef(value)) {
|
|
325
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx(StreamRefInline, { streamRef: value }) }));
|
|
326
|
+
}
|
|
327
|
+
if (isRunRef(value)) {
|
|
328
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx(RunRefInline, { runRef: value }) }));
|
|
329
|
+
}
|
|
330
|
+
if (value instanceof Date) {
|
|
331
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx("span", { className: CLS.date, children: value.toISOString() }) }));
|
|
332
|
+
}
|
|
333
|
+
if (value instanceof RegExp) {
|
|
334
|
+
return (_jsx(LeafRow, { field: field, isLast: isLast, children: _jsx("span", { className: CLS.regexp, children: value.toString() }) }));
|
|
335
|
+
}
|
|
336
|
+
if (isClassInstanceRef(value)) {
|
|
337
|
+
return (_jsx(ClassInstanceNode, { field: field, instance: value, isLast: isLast, ctx: ctx }));
|
|
338
|
+
}
|
|
339
|
+
const container = describeContainer(value);
|
|
340
|
+
if (container) {
|
|
341
|
+
return (_jsx(ExpandableContainer, { field: field, entries: container.entries, open: container.open, close: container.close, prefix: container.prefix, ctx: ctx, isLast: isLast }));
|
|
342
|
+
}
|
|
343
|
+
return (_jsx(PrimitiveValue, { field: field, value: value, isLast: isLast, ctx: ctx }));
|
|
344
|
+
}
|
|
345
|
+
function ClassInstanceNode({ field, instance, isLast, ctx, }) {
|
|
346
|
+
const container = describeContainer(instance.data);
|
|
347
|
+
if (container) {
|
|
348
|
+
return (_jsx(ExpandableContainer, { field: field, entries: container.entries, open: container.open, close: container.close, prefix: instance.className, ctx: ctx, isLast: isLast }));
|
|
349
|
+
}
|
|
350
|
+
const { text, cls } = describePrimitive(instance.data);
|
|
351
|
+
return (_jsxs(LeafRow, { field: field, isLast: isLast, children: [_jsx("span", { className: CLS.className, children: instance.className }), _jsx("span", { className: cls, children: text })] }));
|
|
352
|
+
}
|
|
353
|
+
function JsonTree({ data, name, expandLevel, }) {
|
|
354
|
+
const outerRef = useRef(null);
|
|
355
|
+
const shouldExpand = useMemo(() => (level) => level < expandLevel, [expandLevel]);
|
|
356
|
+
return (_jsx("div", { ref: outerRef, className: CLS.container, role: "tree", "aria-label": "JSON view", children: _jsx(DataRender, { field: name, value: data, isLast: true, ctx: { level: 0, shouldExpand, outerRef } }) }));
|
|
213
357
|
}
|
|
214
358
|
// ---------------------------------------------------------------------------
|
|
215
|
-
//
|
|
359
|
+
// Ref / typed-array collapsing (preprocessing before render)
|
|
216
360
|
// ---------------------------------------------------------------------------
|
|
217
361
|
/**
|
|
218
362
|
* Create a non-expandable wrapper that carries ref data as non-enumerable
|
|
219
|
-
* properties
|
|
220
|
-
*
|
|
363
|
+
* properties so the renderer can detect StreamRef/RunRef without exposing
|
|
364
|
+
* their internals as object fields.
|
|
221
365
|
*/
|
|
222
366
|
function makeOpaqueRef(ref) {
|
|
223
367
|
const opaque = Object.create(null);
|
|
@@ -244,11 +388,11 @@ function makeBytesDisplay(display) {
|
|
|
244
388
|
}
|
|
245
389
|
/**
|
|
246
390
|
* Recursively walk data and replace RunRef/StreamRef/typed array objects with
|
|
247
|
-
* non-expandable versions so
|
|
391
|
+
* non-expandable versions so the renderer doesn't show their internals.
|
|
248
392
|
* Only recurses into plain objects and arrays to avoid stripping class
|
|
249
|
-
* instances (Date, Error, URL, Headers, etc.) that have their own rendering
|
|
250
|
-
*
|
|
251
|
-
*
|
|
393
|
+
* instances (Date, Error, URL, Headers, etc.) that have their own rendering.
|
|
394
|
+
* Map and Set containers are preserved while their contents are prepared for
|
|
395
|
+
* display.
|
|
252
396
|
*
|
|
253
397
|
* Exported for testing the typed-array detection path used by hydrated
|
|
254
398
|
* AI agent stream chunks (e.g. `{ delta: new Uint8Array(...) }`).
|
|
@@ -285,32 +429,21 @@ export function collapseRefs(data) {
|
|
|
285
429
|
export function DataInspector({ data, expandLevel = 2, name, onStreamClick, onRunClick, onDecrypt, isDecrypting = false, }) {
|
|
286
430
|
const collapsedData = useMemo(() => collapseRefs(data), [data]);
|
|
287
431
|
const stableData = useStableInspectorData(collapsedData);
|
|
288
|
-
|
|
289
|
-
const isDark = useDarkMode();
|
|
290
|
-
const extendedTheme = isDark
|
|
291
|
-
? inspectorThemeExtendedDark
|
|
292
|
-
: inspectorThemeExtendedLight;
|
|
293
|
-
useEffect(() => {
|
|
294
|
-
// react-inspector reapplies expandLevel on every data change, which can
|
|
295
|
-
// reopen paths the user manually collapsed. Apply it only on mount.
|
|
296
|
-
setInitialExpandLevel(0);
|
|
297
|
-
}, []);
|
|
298
|
-
const content = (_jsx(ExtendedThemeContext.Provider, { value: extendedTheme, children: _jsx(ObjectInspector, { data: stableData, name: name,
|
|
299
|
-
// @ts-expect-error react-inspector accepts theme objects at runtime despite
|
|
300
|
-
// types declaring string only — see https://github.com/storybookjs/react-inspector/blob/main/README.md#theme
|
|
301
|
-
theme: isDark ? inspectorThemeDark : inspectorThemeLight, expandLevel: initialExpandLevel, nodeRenderer: NodeRenderer }) }));
|
|
302
|
-
let wrapped = content;
|
|
432
|
+
let content = (_jsxs(_Fragment, { children: [_jsx("style", { href: "wf-json-view", precedence: "default", children: JSON_VIEW_STYLES }), _jsx(JsonTree, { data: stableData, name: name, expandLevel: expandLevel })] }));
|
|
303
433
|
if (onStreamClick) {
|
|
304
|
-
|
|
434
|
+
content = (_jsx(StreamClickContext.Provider, { value: onStreamClick, children: content }));
|
|
305
435
|
}
|
|
306
436
|
if (onRunClick) {
|
|
307
|
-
|
|
437
|
+
content = (_jsx(RunClickContext.Provider, { value: onRunClick, children: content }));
|
|
308
438
|
}
|
|
309
439
|
if (onDecrypt) {
|
|
310
|
-
|
|
440
|
+
content = (_jsx(DecryptClickContext.Provider, { value: { onDecrypt, isDecrypting }, children: content }));
|
|
311
441
|
}
|
|
312
|
-
return
|
|
442
|
+
return content;
|
|
313
443
|
}
|
|
444
|
+
// ---------------------------------------------------------------------------
|
|
445
|
+
// Render stabilization (avoid re-renders when data is deeply equal)
|
|
446
|
+
// ---------------------------------------------------------------------------
|
|
314
447
|
function useStableInspectorData(next) {
|
|
315
448
|
const previousRef = useRef(next);
|
|
316
449
|
if (!isDeepEqual(previousRef.current, next)) {
|
|
@@ -388,4 +521,4 @@ function isDeepEqual(a, b, seen = new WeakMap()) {
|
|
|
388
521
|
}
|
|
389
522
|
return true;
|
|
390
523
|
}
|
|
391
|
-
//# sourceMappingURL=data-inspector.js.map
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFHTCwrQkFBK0IsR0FDaEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLDhFQUE4RTtBQUM5RSw4Q0FBOEM7QUFDOUMsd0RBQXdEO0FBQ3hELDhFQUE4RTtBQUU5RSxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQUNsRCxNQUFNLHVCQUF1QixHQUFHLGlDQUFpQyxDQUFDO0FBQ2xFLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsNEJBQTRCLENBQUM7QUF5QnhELFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE9B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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS02MDApJywgZm9udFN0eWxlOiAnaXRhbGljJyB9fT5cbiAgICAgIDxMb2NrXG4gICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTNcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiAnM3B4JyxcbiAgICAgICAgICBtYXJnaW5Ub3A6ICctMXB4JyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICBFbmNyeXB0ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFN0cmVhbVJlZklubGluZSh7IHN0cmVhbVJlZiB9OiB7IHN0cmVhbVJlZjogU3RyZWFtUmVmIH0pIHtcbiAgY29uc3Qgb25TdHJlYW1DbGljayA9IHVzZUNvbnRleHQoU3RyZWFtQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkID8gJ3ZhcigtLWRzLWJsdWUtMjAwKScgOiAndmFyKC0tZHMtYmx1ZS0xMDApJyxcbiAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ibHVlLTkwMCknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtYmx1ZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25TdHJlYW1DbGljaz8uKHN0cmVhbVJlZi5zdHJlYW1JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHN0cmVhbTogJHtzdHJlYW1SZWYuc3RyZWFtSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj7wn5OhPC9zcGFuPlxuICAgICAgPHNwYW4+e3N0cmVhbVJlZi5zdHJlYW1JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJ1blJlZklubGluZSh7IHJ1blJlZiB9OiB7IHJ1blJlZjogUnVuUmVmIH0pIHtcbiAgY29uc3Qgb25SdW5DbGljayA9IHVzZUNvbnRleHQoUnVuQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkXG4gICAgICAgICAgPyAndmFyKC0tZHMtcHVycGxlLTIwMCknXG4gICAgICAgICAgOiAndmFyKC0tZHMtcHVycGxlLTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXB1cnBsZS05MDApJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLXB1cnBsZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SdW5DbGljaz8uKHJ1blJlZi5ydW5JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHJ1bjogJHtydW5SZWYucnVuSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj57cnVuUmVmLnJ1bklkfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzQ2h1bmsoe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkVmlldywgc2V0U2VsZWN0ZWRWaWV3XSA9IHVzZVN0YXRlPCdkZWNvZGVkJyB8ICdieXRlcyc+KFxuICAgICdkZWNvZGVkJ1xuICApO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUNodW5rRGF0YShkZWNvZGVkVGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgIHtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAge3R5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rlc2VyaWFsaXplQ2h1bmtUZXh0KHBhcnNlZCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e3BhcnNlZH0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8RGVjb2RlZEJ5dGVzSW5zcGVjdG9yIGRlY29kZWRUZXh0PXtkZWNvZGVkVGV4dH0gc291cmNlPXtzb3VyY2V9IC8+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJvcmRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTQwMCknIH19XG4gICAgICAgICAgdGl0bGU9e2Ake3NvdXJjZS50eXBlfSBkZWNvZGVkIGFzICR7c291cmNlLmVuY29kaW5nLnRvVXBwZXJDYXNlKCl9IHRleHQuIFN3aXRjaCB0byBCeXRlcyB0byBpbnNwZWN0IHRoZSBzdW1tYXJpemVkIHJhdyB2YWx1ZS5gfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoLTUgcHgtMS41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ1xuICAgICAgICAgICAgICAgICAgPyAndmFyKC0tZHMtZ3JheS0yMDApJ1xuICAgICAgICAgICAgICAgICAgOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkVmlldygnZGVjb2RlZCcpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IGRlY29kZWQgdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGVjb2RlZFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC01IGJvcmRlci1sIHB4LTEuNSB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdieXRlcydcbiAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLWRzLWdyYXktMjAwKSdcbiAgICAgICAgICAgICAgICAgIDogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2J5dGVzJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IHJhdyBieXRlcyBzdW1tYXJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBCeXRlc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNJbnNwZWN0b3Ioe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIHRleHQtbGVmdFwiXG4gICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpfVxuICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dGB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNlbGVjdC1ub25lXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGRlY29kZWRUZXh0KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQnl0ZXNEaXNwbGF5VmFsdWUoeyBkaXNwbGF5IH06IHsgZGlzcGxheTogQnl0ZXNEaXNwbGF5IH0pIHtcbiAgaWYgKGRpc3BsYXkuZGVjb2RlZEZyb20pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlY29kZWRCeXRlc0NodW5rXG4gICAgICAgIGRlY29kZWRUZXh0PXtkaXNwbGF5LnRleHR9XG4gICAgICAgIHNvdXJjZT17ZGlzcGxheS5kZWNvZGVkRnJvbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCJcbiAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICA+XG4gICAgICB7ZGlzcGxheS50ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmVlIHJlbmRlcmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBFbnRyeSA9IFtmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93bl07XG5cbmludGVyZmFjZSBOb2RlQ29udGV4dCB7XG4gIGxldmVsOiBudW1iZXI7XG4gIHNob3VsZEV4cGFuZDogKGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbn1cblxuLyoqIEZpZWxkIG5hbWVzIGFyZSByZW5kZXJlZCB1bnF1b3RlZCAoZW1wdHkgc3RyaW5nIHNob3dzIGFzIGBcIlwiYCkuICovXG5mdW5jdGlvbiBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpZWxkID09PSAnJyA/ICdcIlwiJyA6IGZpZWxkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIGFuIG9iamVjdC9hcnJheS9tYXAvc2V0IGFzIGFuIGV4cGFuZGFibGUgY29udGFpbmVyLiBSZXR1cm5zIG51bGwgZm9yXG4gKiB2YWx1ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGEgcHJpbWl0aXZlLiBgcHJlZml4YCBjYXJyaWVzIGEgY2xhc3MgbmFtZSBzaG93blxuICogYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQgKE1hcC9TZXQgYW5kIG5hbWVkIGNsYXNzIGluc3RhbmNlcykuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQ29udGFpbmVyKFxuICB2YWx1ZTogdW5rbm93blxuKTogeyBlbnRyaWVzOiBFbnRyeVtdOyBvcGVuOiBzdHJpbmc7IGNsb3NlOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB2YWx1ZS5tYXAoKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS5lbnRyaWVzKCksIChba2V5LCB2YWxdKSA9PiBbXG4gICAgICAgIFN0cmluZyhrZXkpLFxuICAgICAgICB2YWwsXG4gICAgICBdKSBhcyBFbnRyeVtdLFxuICAgICAgb3BlbjogJ3snLFxuICAgICAgY2xvc2U6ICd9JyxcbiAgICAgIHByZWZpeDogJ01hcCcsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSwgKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgICBwcmVmaXg6ICdTZXQnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuYW1lID0gKHZhbHVlIGFzIHsgY29uc3RydWN0b3I/OiB7IG5hbWU/OiBzdHJpbmcgfSB9KS5jb25zdHJ1Y3RvclxuICAgICAgPy5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6IG5hbWUgJiYgbmFtZSAhPT0gJ09iamVjdCcgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogeyB0ZXh0OiBzdHJpbmc7IGNsczogc3RyaW5nIH0ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IHRleHQ6ICdudWxsJywgY2xzOiBDTFMubnVsbCB9O1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgdGV4dDogJ3VuZGVmaW5lZCcsIGNsczogQ0xTLnVuZGVmaW5lZCB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIHJldHVybiB7IHRleHQ6IGBcIiR7U3RyaW5nKHZhbHVlKX1cImAsIGNsczogQ0xTLnN0cmluZyB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5ib29sZWFuIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB7IHRleHQ6IGAke3ZhbHVlLnRvU3RyaW5nKCl9bmAsIGNsczogQ0xTLm51bWJlciB9O1xuICB9XG4gIHJldHVybiB7IHRleHQ6IFN0cmluZyh2YWx1ZSksIGNsczogQ0xTLnB1bmN0dWF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIExhYmVsKHsgZmllbGQsIGNsaWNrYWJsZSB9OiB7IGZpZWxkPzogc3RyaW5nOyBjbGlja2FibGU/OiBib29sZWFuIH0pIHtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xpY2thYmxlID8gQ0xTLmNsaWNrYWJsZUxhYmVsIDogQ0xTLmxhYmVsfT5cbiAgICAgIHtgJHtmb3JtYXRGaWVsZChmaWVsZCl9OmB9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBDb21tYSh7IGlzTGFzdCB9OiB7IGlzTGFzdDogYm9vbGVhbiB9KSB7XG4gIGlmIChpc0xhc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259Piw8L3NwYW4+O1xufVxuXG4vKiogQSBub24tZXhwYW5kYWJsZSByb3c6IGBmaWVsZDogPHZhbHVlPmAuICovXG5mdW5jdGlvbiBMZWFmUm93KHtcbiAgZmllbGQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByaW1pdGl2ZVZhbHVlKHsgZmllbGQsIHZhbHVlLCBpc0xhc3QgfTogTm9kZVByb3BzKSB7XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW1wdHlDb250YWluZXIoe1xuICBmaWVsZCxcbiAgcHJlZml4LFxuICBvcGVuLFxuICBjbG9zZSxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Q0xTLmNoaWxkfSByb2xlPVwidHJlZWl0ZW1cIiB0YWJJbmRleD17LTF9PlxuICAgICAgPExhYmVsIGZpZWxkPXtmaWVsZH0gLz5cbiAgICAgIHtwcmVmaXggPyA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntwcmVmaXh9PC9zcGFuPiA6IG51bGx9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5wdW5jdHVhdGlvbn0+e29wZW59PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzRXhwYW5kZXIoXG4gIGJ1dHRvbjogSFRNTEVsZW1lbnQsXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gb3V0ZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgJ1tkYXRhLWpzb24tZXhwYW5kZXJdW3RhYmluZGV4PVwiMFwiXSdcbiAgKTtcbiAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy50YWJJbmRleCA9IC0xO1xuICBidXR0b24udGFiSW5kZXggPSAwO1xuICBidXR0b24uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUV4cGFuZGVyRm9jdXMoXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbiAgZGlyZWN0aW9uOiAxIHwgLTFcbikge1xuICBjb25zdCByb290ID0gb3V0ZXJSZWYuY3VycmVudDtcbiAgaWYgKCFyb290KSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbZGF0YS1qc29uLWV4cGFuZGVyXScpO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYnV0dG9uc1tpXS50YWJJbmRleCA9PT0gMCkge1xuICAgICAgY3VycmVudCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQgPCAwKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSAoY3VycmVudCArIGRpcmVjdGlvbiArIGJ1dHRvbnMubGVuZ3RoKSAlIGJ1dHRvbnMubGVuZ3RoO1xuICBidXR0b25zW2N1cnJlbnRdLnRhYkluZGV4ID0gLTE7XG4gIGJ1dHRvbnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICBidXR0b25zW25leHRdLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIEV4cGFuZGFibGVDb250YWluZXIoe1xuICBmaWVsZCxcbiAgZW50cmllcyxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIHByZWZpeCxcbiAgY3R4LFxuICBpc0xhc3QsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBlbnRyaWVzOiBFbnRyeVtdO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgY3R4OiBOb2RlQ29udGV4dDtcbiAgaXNMYXN0OiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IGxldmVsLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH0gPSBjdHg7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkRXhwYW5kKGxldmVsKSk7XG4gIGNvbnN0IHJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRzSWQgPSB1c2VJZCgpO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RW1wdHlDb250YWluZXJcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBwcmVmaXg9e3ByZWZpeH1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvd1JlZi5jdXJyZW50KSBmb2N1c0V4cGFuZGVyKHJvd1JlZi5jdXJyZW50LCBvdXRlclJlZik7XG4gIH07XG5cbiAgLy8gVG9nZ2xlIG9ubHkgZm9yIGNsaWNrcyB0aGF0IGxhbmQgb24gdGhpcyByb3cgaXRzZWxmOyBjbGlja3MgYnViYmxpbmcgdXAgb3V0XG4gIC8vIG9mIGEgbmVzdGVkIHRyZWVpdGVtIGFyZSBoYW5kbGVkIGJ5IHRoYXQgZGVzY2VuZGFudCdzIG93biByb3cuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSAhPT1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUV4cGFuZGVyRm9jdXMob3V0ZXJSZWYsIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYXN0SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBUaGUgdHJlZWl0ZW0gcm93IGlzIHRoZSBmb2N1c2FibGUsIGtleWJvYXJkLW9wZXJhYmxlIGNvbnRyb2wgKHJvdmluZ1xuICAgIC8vIHRhYmluZGV4ICsgYXJyb3cga2V5cyk7IHRoZSBkaXNjbG9zdXJlIG1hcmtlciBiZWxvdyBpcyBwdXJlbHkgZGVjb3JhdGl2ZS5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e0NMUy5jaGlsZH1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGVkID8gY29udGVudHNJZCA6IHVuZGVmaW5lZH1cbiAgICAgIGRhdGEtanNvbi1leHBhbmRlclxuICAgICAgcmVmPXtyb3dSZWZ9XG4gICAgICB0YWJJbmRleD17bGV2ZWwgPT09IDAgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtleHBhbmRlZCA/IENMUy5jb2xsYXBzZUljb24gOiBDTFMuZXhwYW5kSWNvbn1cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICB7ZmllbGQgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsaWNrYWJsZUxhYmVsfT57YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIHtleHBhbmRlZCA/IChcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBBUklBIHRyZWUgZ3JvdXAgaXMgdGhlIGNvcnJlY3Qgcm9sZSBoZXJlXG4gICAgICAgIDx1bCBpZD17Y29udGVudHNJZH0gY2xhc3NOYW1lPXtDTFMuY2hpbGRGaWVsZHN9IHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW2NoaWxkRmllbGQsIGNoaWxkVmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgICAgICAga2V5PXtjaGlsZEZpZWxkID8/IGluZGV4fVxuICAgICAgICAgICAgICBmaWVsZD17Y2hpbGRGaWVsZH1cbiAgICAgICAgICAgICAgdmFsdWU9e2NoaWxkVmFsdWV9XG4gICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IGxhc3RJbmRleH1cbiAgICAgICAgICAgICAgY3R4PXt7IC4uLmN0eCwgbGV2ZWw6IGxldmVsICsgMSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNvbGxhcHNlZENvbnRlbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlUHJvcHMge1xuICBmaWVsZD86IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY3R4OiBOb2RlQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gRGF0YVJlbmRlcih7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0LCBjdHggfTogTm9kZVByb3BzKSB7XG4gIGlmIChpc0J5dGVzRGlzcGxheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxCeXRlc0Rpc3BsYXlWYWx1ZSBkaXNwbGF5PXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxFbmNyeXB0ZWRJbmxpbmVMYWJlbCAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzU3RyZWFtUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFN0cmVhbVJlZklubGluZSBzdHJlYW1SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzUnVuUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFJ1blJlZklubGluZSBydW5SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMuZGF0ZX0+e3ZhbHVlLnRvSVNPU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5yZWdleHB9Pnt2YWx1ZS50b1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc0luc3RhbmNlTm9kZVxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGluc3RhbmNlPXt2YWx1ZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZGVzY3JpYmVDb250YWluZXIodmFsdWUpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2NvbnRhaW5lci5wcmVmaXh9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFByaW1pdGl2ZVZhbHVlIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlfSBpc0xhc3Q9e2lzTGFzdH0gY3R4PXtjdHh9IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENsYXNzSW5zdGFuY2VOb2RlKHtcbiAgZmllbGQsXG4gIGluc3RhbmNlLFxuICBpc0xhc3QsXG4gIGN0eCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlOiBDbGFzc0luc3RhbmNlUmVmO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKGluc3RhbmNlLmRhdGEpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2luc3RhbmNlLmNsYXNzTmFtZX1cbiAgICAgICAgY3R4PXtjdHh9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZShpbnN0YW5jZS5kYXRhKTtcbiAgcmV0dXJuIChcbiAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e2luc3RhbmNlLmNsYXNzTmFtZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvblRyZWUoe1xuICBkYXRhLFxuICBuYW1lLFxuICBleHBhbmRMZXZlbCxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgbmFtZT86IHN0cmluZztcbiAgZXhwYW5kTGV2ZWw6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qgb3V0ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzaG91bGRFeHBhbmQgPSB1c2VNZW1vKFxuICAgICgpID0+IChsZXZlbDogbnVtYmVyKSA9PiBsZXZlbCA8IGV4cGFuZExldmVsLFxuICAgIFtleHBhbmRMZXZlbF1cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtDTFMuY29udGFpbmVyfVxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgYXJpYS1sYWJlbD1cIkpTT04gdmlld1wiXG4gICAgPlxuICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgZmllbGQ9e25hbWV9XG4gICAgICAgIHZhbHVlPXtkYXRhfVxuICAgICAgICBpc0xhc3RcbiAgICAgICAgY3R4PXt7IGxldmVsOiAwLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZiAvIHR5cGVkLWFycmF5IGNvbGxhcHNpbmcgKHByZXByb2Nlc3NpbmcgYmVmb3JlIHJlbmRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZSBhIG5vbi1leHBhbmRhYmxlIHdyYXBwZXIgdGhhdCBjYXJyaWVzIHJlZiBkYXRhIGFzIG5vbi1lbnVtZXJhYmxlXG4gKiBwcm9wZXJ0aWVzIHNvIHRoZSByZW5kZXJlciBjYW4gZGV0ZWN0IFN0cmVhbVJlZi9SdW5SZWYgd2l0aG91dCBleHBvc2luZ1xuICogdGhlaXIgaW50ZXJuYWxzIGFzIG9iamVjdCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPcGFxdWVSZWYocmVmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gb3BhcXVlO1xufVxuXG5mdW5jdGlvbiBtYWtlQnl0ZXNEaXNwbGF5KGRpc3BsYXk6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSk6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAnX190eXBlJywge1xuICAgIHZhbHVlOiBCWVRFU19ESVNQTEFZX1RZUEUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAndGV4dCcsIHtcbiAgICB2YWx1ZTogZGlzcGxheS50ZXh0LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ2RlY29kZWRGcm9tJywge1xuICAgIHZhbHVlOiBkaXNwbGF5LmRlY29kZWRGcm9tLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrIGRhdGEgYW5kIHJlcGxhY2UgUnVuUmVmL1N0cmVhbVJlZi90eXBlZCBhcnJheSBvYmplY3RzIHdpdGhcbiAqIG5vbi1leHBhbmRhYmxlIHZlcnNpb25zIHNvIHRoZSByZW5kZXJlciBkb2Vzbid0IHNob3cgdGhlaXIgaW50ZXJuYWxzLlxuICogT25seSByZWN1cnNlcyBpbnRvIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyB0byBhdm9pZCBzdHJpcHBpbmcgY2xhc3NcbiAqIGluc3RhbmNlcyAoRGF0ZSwgRXJyb3IsIFVSTCwgSGVhZGVycywgZXRjLikgdGhhdCBoYXZlIHRoZWlyIG93biByZW5kZXJpbmcuXG4gKiBNYXAgYW5kIFNldCBjb250YWluZXJzIGFyZSBwcmVzZXJ2ZWQgd2hpbGUgdGhlaXIgY29udGVudHMgYXJlIHByZXBhcmVkIGZvclxuICogZGlzcGxheS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdGluZyB0aGUgdHlwZWQtYXJyYXkgZGV0ZWN0aW9uIHBhdGggdXNlZCBieSBoeWRyYXRlZFxuICogQUkgYWdlbnQgc3RyZWFtIGNodW5rcyAoZS5nLiBgeyBkZWx0YTogbmV3IFVpbnQ4QXJyYXkoLi4uKSB9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZVJlZnMoZGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIHJldHVybiBtYWtlQnl0ZXNEaXNwbGF5KGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoZGF0YSkpO1xuICB9XG4gIGlmIChpc1J1blJlZihkYXRhKSB8fCBpc1N0cmVhbVJlZihkYXRhKSlcbiAgICByZXR1cm4gbWFrZU9wYXF1ZVJlZihkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEubWFwKGNvbGxhcHNlUmVmcyk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBBcnJheS5mcm9tKGRhdGEuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGNvbGxhcHNlUmVmcyhrZXkpLFxuICAgICAgICBjb2xsYXBzZVJlZnModmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShkYXRhLnZhbHVlcygpLCBjb2xsYXBzZVJlZnMpKTtcbiAgfVxuICAvLyBPbmx5IHJlY3Vyc2UgaW50byBwbGFpbiBvYmplY3RzIOKAlCBsZWF2ZSBjbGFzcyBpbnN0YW5jZXMgdW50b3VjaGVkXG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpO1xuICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHJldHVybiBkYXRhO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb2xsYXBzZVJlZnModmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUluc3BlY3RvclByb3BzIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGluc3BlY3QgKi9cbiAgZGF0YTogdW5rbm93bjtcbiAgLyoqIExldmVscyBzdHJpY3RseSBiZWxvdyB0aGlzIG51bWJlciBhdXRvLWV4cGFuZCAoZGVmYXVsdDogMikgKi9cbiAgZXhwYW5kTGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcm9vdCBub2RlICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRhSW5zcGVjdG9yKHtcbiAgZGF0YSxcbiAgZXhwYW5kTGV2ZWwgPSAyLFxuICBuYW1lLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxufTogRGF0YUluc3BlY3RvclByb3BzKSB7XG4gIGNvbnN0IGNvbGxhcHNlZERhdGEgPSB1c2VNZW1vKCgpID0+IGNvbGxhcHNlUmVmcyhkYXRhKSwgW2RhdGFdKTtcbiAgY29uc3Qgc3RhYmxlRGF0YSA9IHVzZVN0YWJsZUluc3BlY3RvckRhdGEoY29sbGFwc2VkRGF0YSk7XG5cbiAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSA9IChcbiAgICA8PlxuICAgICAgey8qIFJlYWN0IDE5IGhvaXN0cyAmIGRlZHVwZXMgdGhpcyA8c3R5bGU+IGJ5IGhyZWYsIHNvIGl0IGlzIGVtaXR0ZWQgb25jZVxuICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW5zcGVjdG9ycyBhcmUgbW91bnRlZC4gKi99XG4gICAgICA8c3R5bGUgaHJlZj1cIndmLWpzb24tdmlld1wiIHByZWNlZGVuY2U9XCJkZWZhdWx0XCI+XG4gICAgICAgIHtKU09OX1ZJRVdfU1RZTEVTfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxKc29uVHJlZSBkYXRhPXtzdGFibGVEYXRhfSBuYW1lPXtuYW1lfSBleHBhbmRMZXZlbD17ZXhwYW5kTGV2ZWx9IC8+XG4gICAgPC8+XG4gICk7XG5cbiAgaWYgKG9uU3RyZWFtQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25SdW5DbGljaykge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L1J1bkNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG4gIGlmIChvbkRlY3J5cHQpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfX0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZW5kZXIgc3RhYmlsaXphdGlvbiAoYXZvaWQgcmUtcmVuZGVycyB3aGVuIGRhdGEgaXMgZGVlcGx5IGVxdWFsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHVzZVN0YWJsZUluc3BlY3RvckRhdGE8VD4obmV4dDogVCk6IFQge1xuICBjb25zdCBwcmV2aW91c1JlZiA9IHVzZVJlZjxUPihuZXh0KTtcbiAgaWYgKCFpc0RlZXBFcXVhbChwcmV2aW91c1JlZi5jdXJyZW50LCBuZXh0KSkge1xuICAgIHByZXZpb3VzUmVmLmN1cnJlbnQgPSBuZXh0O1xuICB9XG4gIHJldHVybiBwcmV2aW91c1JlZi5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVCeXRlc0Rpc3BsYXkoYTogQnl0ZXNEaXNwbGF5LCBiOiBCeXRlc0Rpc3BsYXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhLnRleHQgPT09IGIudGV4dCAmJlxuICAgIGEuZGVjb2RlZEZyb20/LnR5cGUgPT09IGIuZGVjb2RlZEZyb20/LnR5cGUgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5lbmNvZGluZyA9PT0gYi5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5ID09PSBiLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5XG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoYSwgYikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChpc0J5dGVzRGlzcGxheShhKSB8fCBpc0J5dGVzRGlzcGxheShiKSkge1xuICAgIHJldHVybiBpc0J5dGVzRGlzcGxheShhKSAmJiBpc0J5dGVzRGlzcGxheShiKSAmJiBpc1NhbWVCeXRlc0Rpc3BsYXkoYSwgYik7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFncztcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgTWFwICYmIGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFpc0RlZXBFcXVhbCh2YWx1ZSwgYi5nZXQoa2V5KSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIFNldCAmJiBiIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIWIuaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3RMaWtlKGEpIHx8ICFpc09iamVjdExpa2UoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2Vlbi5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xuICBzZWVuLnNldChhLCBiKTtcblxuICBjb25zdCBhSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gIGNvbnN0IGJJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiKTtcbiAgaWYgKGFJc0FycmF5ICE9PSBiSXNBcnJheSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhSXNBcnJheSAmJiBiSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghaXNEZWVwRXF1YWwoYVtpXSwgYltpXSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhS2V5cykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFpc0RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class names and styles for the data inspector tree.
|
|
3
|
+
*
|
|
4
|
+
* Kept out of the component module for readability. The CSS is injected via a
|
|
5
|
+
* React 19 hoistable `<style>` (see DataInspector), so it stays bundler-agnostic
|
|
6
|
+
* for every consumer. Colors use theme-aware `--ds-*` tokens that adapt to
|
|
7
|
+
* light/dark automatically, so no per-theme overrides are needed.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CLS: {
|
|
10
|
+
readonly container: "wf-json-view";
|
|
11
|
+
readonly child: "wf-json-child";
|
|
12
|
+
readonly childFields: "wf-json-child-fields";
|
|
13
|
+
readonly label: "wf-json-label";
|
|
14
|
+
readonly clickableLabel: "wf-json-clickable-label";
|
|
15
|
+
readonly punctuation: "wf-json-punctuation";
|
|
16
|
+
readonly className: "wf-json-classname";
|
|
17
|
+
readonly expandIcon: "wf-json-expand-icon";
|
|
18
|
+
readonly collapseIcon: "wf-json-collapse-icon";
|
|
19
|
+
readonly collapsedContent: "wf-json-collapsed-content";
|
|
20
|
+
readonly string: "wf-json-string";
|
|
21
|
+
readonly number: "wf-json-number";
|
|
22
|
+
readonly boolean: "wf-json-boolean";
|
|
23
|
+
readonly null: "wf-json-null";
|
|
24
|
+
readonly undefined: "wf-json-undefined";
|
|
25
|
+
readonly date: "wf-json-date";
|
|
26
|
+
readonly regexp: "wf-json-regexp";
|
|
27
|
+
};
|
|
28
|
+
export declare const JSON_VIEW_STYLES: string;
|
|
29
|
+
//# sourceMappingURL=data-inspector.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-inspector.styles.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBN,CAAC;AAEX,eAAO,MAAM,gBAAgB,QAkE5B,CAAC"}
|