gloomberb 0.18.2 → 0.18.4
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 +8 -8
- package/README.zh-CN.md +11 -11
- package/bin/{gloomberb → gloom} +3 -1
- package/package.json +6 -2
- package/patches/electrobun@1.18.1.patch +106 -5
- package/src/account/checkout-handoff.tsx +225 -0
- package/src/account/device-signin-dialog.tsx +2 -2
- package/src/account/device-signin.ts +2 -2
- package/src/account/upgrade-dialog.tsx +1 -1
- package/src/api-client/askg.ts +2 -2
- package/src/api-client/auth.ts +2 -2
- package/src/api-client/central-bank-rates.ts +6 -0
- package/src/api-client/collections.ts +5 -1
- package/src/api-client/cot.ts +2 -0
- package/src/api-client/crypto-etf-flows.ts +37 -0
- package/src/api-client/crypto-markets.ts +60 -0
- package/src/api-client/data.ts +99 -5
- package/src/api-client/doe.ts +15 -0
- package/src/api-client/equity-screener.ts +28 -0
- package/src/api-client/exchange-announcements.ts +38 -0
- package/src/api-client/fund-facts.ts +39 -0
- package/src/api-client/futures-curve.ts +9 -1
- package/src/api-client/hiring.ts +301 -0
- package/src/api-client/index.ts +24 -5
- package/src/api-client/market-discovery.ts +14 -0
- package/src/api-client/members.ts +6 -0
- package/src/api-client/mna.ts +6 -0
- package/src/api-client/paths.ts +18 -1
- package/src/api-client/request.ts +26 -7
- package/src/api-client/short-side-publications.ts +37 -0
- package/src/api-client/socket.ts +64 -4
- package/src/api-client/swap-curve.ts +35 -0
- package/src/api-client/telemetry.ts +17 -0
- package/src/api-client/themes.ts +7 -1
- package/src/api-client/types.ts +90 -2
- package/src/app/global-shortcuts.ts +1 -16
- package/src/app/pane-runtime/plugin-bindings.ts +9 -2
- package/src/app/runtime/desktop-deeplink.ts +5 -5
- package/src/app/runtime/plugin-bindings.ts +2 -2
- package/src/app/runtime/startup.ts +13 -0
- package/src/app/runtime/update.ts +28 -8
- package/src/app/star-prompt/status-line.tsx +2 -2
- package/src/architecture/core-builtin-allowlist.json +5 -2
- package/src/architecture/pane-tabs-allowlist.json +65 -0
- package/src/architecture/ui-literals-allowlist.json +3 -3
- package/src/architecture/ui-tokens-allowlist.json +1 -1
- package/src/brokers/broker-portfolio-sync.ts +37 -0
- package/src/brokers/directory.ts +11 -0
- package/src/brokers/logos.ts +3 -1
- package/src/brokers/signed-in/adapter.ts +304 -26
- package/src/brokers/signed-in/client.ts +14 -2
- package/src/brokers/signed-in/connect.ts +10 -2
- package/src/brokers/sync-broker-instance.ts +9 -1
- package/src/capabilities/chart-series.ts +22 -6
- package/src/cli/bank-section.ts +1 -1
- package/src/cli/base-converter.ts +23 -14
- package/src/cli/central-bank-events.ts +1 -1
- package/src/cli/command-options.ts +59 -4
- package/src/cli/commands/api.ts +9 -6
- package/src/cli/commands/broker.ts +2 -2
- package/src/cli/commands/command-utils.ts +2 -2
- package/src/cli/commands/crypto-hints.ts +7 -20
- package/src/cli/commands/fred-series.ts +4 -2
- package/src/cli/commands/keybindings.ts +2 -2
- package/src/cli/commands/market.ts +1189 -296
- package/src/cli/commands/news-hints.ts +2 -2
- package/src/cli/commands/news-search.ts +59 -6
- package/src/cli/commands/options-leaps.ts +41 -26
- package/src/cli/commands/overview.ts +121 -48
- package/src/cli/commands/plugins.ts +9 -9
- package/src/cli/commands/remote.ts +13 -10
- package/src/cli/commands/search.ts +64 -44
- package/src/cli/commands/system.ts +27 -19
- package/src/cli/commands/themes.ts +1 -1
- package/src/cli/commands/ticker.ts +272 -70
- package/src/cli/context.ts +3 -2
- package/src/cli/desktop-pane-shot-view.ts +2 -2
- package/src/cli/desktop-pane-shot.ts +1 -1
- package/src/cli/earnings-calendar.ts +4 -4
- package/src/cli/entry.ts +18 -1
- package/src/cli/errors.ts +20 -2
- package/src/cli/exit-codes.ts +1 -1
- package/src/cli/export-source.ts +10 -4
- package/src/cli/freshness.ts +2 -8
- package/src/cli/fx-forward.ts +130 -0
- package/src/cli/fx-pair.ts +10 -9
- package/src/cli/glossary.ts +64 -20
- package/src/cli/help.ts +20 -14
- package/src/cli/history-export.ts +126 -0
- package/src/cli/history-rows.ts +196 -43
- package/src/cli/index-roots.ts +5 -45
- package/src/cli/index.ts +32 -18
- package/src/cli/issuer-membership.ts +103 -0
- package/src/cli/known-gaps.ts +118 -25
- package/src/cli/listing-arg.ts +315 -43
- package/src/cli/name-entries.ts +73 -22
- package/src/cli/native-smoke.ts +2 -0
- package/src/cli/not-a-ticker.ts +19 -9
- package/src/cli/opentui-libc.ts +5 -0
- package/src/cli/options.ts +12 -0
- package/src/cli/pane-functions/capabilities.ts +77 -20
- package/src/cli/pane-functions/catalog.ts +40 -23
- package/src/cli/pane-functions/discovery.ts +1 -1
- package/src/cli/pane-functions/dom.ts +12 -8
- package/src/cli/pane-functions/financial-ratio-shot.ts +2 -2
- package/src/cli/pane-functions/freshness.ts +174 -23
- package/src/cli/pane-functions/function-help.ts +66 -27
- package/src/cli/pane-functions/headless.ts +48 -16
- package/src/cli/pane-functions/index.ts +82 -21
- package/src/cli/pane-functions/options.ts +22 -2
- package/src/cli/pane-functions/report-notices.ts +12 -4
- package/src/cli/pane-functions/report.ts +5 -5
- package/src/cli/pane-functions/resolver.ts +65 -14
- package/src/cli/pane-functions/screenshot-assessment.ts +322 -0
- package/src/cli/pane-functions/screenshot-bridge.ts +152 -0
- package/src/cli/pane-functions/screenshot-chart-evidence.ts +396 -0
- package/src/cli/pane-functions/screenshot-data-evidence.ts +383 -0
- package/src/cli/pane-functions/screenshot-evidence.ts +1 -1
- package/src/cli/pane-functions/screenshot-payload.ts +453 -0
- package/src/cli/pane-functions/screenshot-render.ts +316 -0
- package/src/cli/pane-functions/screenshot-types.ts +162 -0
- package/src/cli/pane-functions/shot-options.ts +8 -3
- package/src/cli/peso-dollar-rates.ts +79 -0
- package/src/cli/quote-answer.ts +38 -3
- package/src/cli/report-tables.ts +190 -27
- package/src/cli/restore-plugins.ts +29 -14
- package/src/cli/result.ts +122 -25
- package/src/cli/series-search.ts +5 -5
- package/src/cli/statement-filings.ts +19 -0
- package/src/cli/suffixed-listing-rows.ts +49 -0
- package/src/cli/symbol-args.ts +50 -15
- package/src/cli/symbol-cells.ts +120 -0
- package/src/cli/symbol-list.ts +226 -60
- package/src/cli/symbol-rows.ts +131 -25
- package/src/cli/ticker-resolution.ts +108 -11
- package/src/cli/treasury-yields.ts +5 -5
- package/src/cli/types.ts +2 -0
- package/src/cli/uncovered-instrument.ts +3 -3
- package/src/cli/unknown-command.ts +6 -6
- package/src/components/chart/composite/chart-layout.ts +131 -0
- package/src/components/chart/composite/composite-chart.tsx +387 -21
- package/src/components/chart/composite/drawing-store.ts +26 -6
- package/src/components/chart/composite/interactions.ts +9 -3
- package/src/components/chart/composite/legend.tsx +75 -3
- package/src/components/chart/composite/levels.ts +5 -0
- package/src/components/chart/composite/panel-gestures.ts +41 -0
- package/src/components/chart/composite/panel-labels.ts +2 -1
- package/src/components/chart/composite/panel-surface.tsx +316 -11
- package/src/components/chart/composite/price-axis-labels.tsx +27 -3
- package/src/components/chart/composite/rasterizer.ts +44 -19
- package/src/components/chart/composite/scene.ts +16 -4
- package/src/components/chart/composite/text-renderer.ts +48 -21
- package/src/components/chart/composite/toolbar.tsx +52 -5
- package/src/components/chart/composite/types.ts +19 -0
- package/src/components/chart/composite/use-composite-chart-keyboard.ts +120 -13
- package/src/components/chart/composite/use-composite-value-scales.ts +44 -0
- package/src/components/chart/composite/use-composite-viewport.ts +12 -3
- package/src/components/chart/composite/value-scale.ts +149 -0
- package/src/components/chart/composite/volume-profile-paint.ts +6 -3
- package/src/components/chart/core/pointer.ts +2 -0
- package/src/components/chart-table/index.ts +2 -0
- package/src/components/chart-table/read.tsx +74 -0
- package/src/components/command-bar/commands/collection-list.ts +41 -19
- package/src/components/command-bar/commands/collection.ts +9 -3
- package/src/components/command-bar/commands/direct/index.ts +1 -1
- package/src/components/command-bar/commands/direct/runtime.ts +3 -2
- package/src/components/command-bar/pane-templates/items.ts +59 -6
- package/src/components/command-bar/pane-templates/workflow.ts +10 -1
- package/src/components/command-bar/routes/root/command-items.ts +32 -6
- package/src/components/command-bar/routes/root/plugin-install.ts +1 -1
- package/src/components/command-bar/routes/root/provider-search.ts +42 -11
- package/src/components/command-bar/routes/root/results.ts +18 -4
- package/src/components/command-bar/routes/root/runtime.ts +15 -3
- package/src/components/command-bar/routes/root/search-providers.ts +25 -2
- package/src/components/command-bar/routes/root/selection.ts +6 -1
- package/src/components/command-bar/routes/root/shortcut-feedback.ts +4 -1
- package/src/components/command-bar/routes/root/shortcuts.ts +30 -3
- package/src/components/command-bar/routes/ticker-search/results.ts +73 -4
- package/src/components/command-bar/selection-runtime.ts +50 -10
- package/src/components/command-bar/surface/index.tsx +24 -2
- package/src/components/command-bar/view-model.ts +7 -0
- package/src/components/command-bar/workflow/broker.ts +2 -2
- package/src/components/command-bar/workflow/collection-actions.ts +46 -7
- package/src/components/command-bar/workflow/collection-ticker.ts +32 -4
- package/src/components/command-bar/workflow/fields.ts +8 -2
- package/src/components/command-bar/workflow/ops.ts +18 -4
- package/src/components/command-bar/workflow/portfolio-position.ts +53 -4
- package/src/components/command-bar/workflow/submit.ts +3 -2
- package/src/components/command-bar/workflow/tickers.ts +5 -1
- package/src/components/company-logo.tsx +39 -0
- package/src/components/data-table/sections.ts +4 -2
- package/src/components/data-table/view.tsx +23 -3
- package/src/components/form-modal/confirm.tsx +2 -1
- package/src/components/form-modal/request.ts +5 -0
- package/src/components/form-modal/routes.ts +4 -1
- package/src/components/index.ts +13 -6
- package/src/components/layout/detached-pane-shell.tsx +1 -0
- package/src/components/layout/floating-pane.tsx +1 -0
- package/src/components/layout/header.tsx +234 -60
- package/src/components/layout/market-summary.ts +9 -6
- package/src/components/layout/pane/capture-status.ts +1 -1
- package/src/components/layout/pane/footer/model.ts +11 -5
- package/src/components/layout/pane/header.tsx +10 -3
- package/src/components/layout/pane/index.tsx +1 -0
- package/src/components/layout/pane/pane-tabs.tsx +9 -1
- package/src/components/layout/shell/chrome.ts +19 -6
- package/src/components/layout/shell/index.tsx +2 -1
- package/src/components/layout/shell/pane/layers.tsx +19 -1
- package/src/components/layout/status-bar.tsx +2 -2
- package/src/components/market-board/index.tsx +11 -3
- package/src/components/onboarding/onboarding-wizard.tsx +1 -0
- package/src/components/onboarding/portfolio-step/broker-setup-panel.tsx +2 -2
- package/src/components/onboarding/wizard-broker-sync.ts +4 -1
- package/src/components/pane-settings-dialog/desktop.tsx +20 -7
- package/src/components/pane-settings-dialog/tui.tsx +17 -9
- package/src/components/pane-settings-dialog/value.ts +8 -1
- package/src/components/pane-settings-dialog.tsx +44 -13
- package/src/components/sign-in-code-panel.tsx +27 -19
- package/src/components/ui/column-grid.tsx +48 -4
- package/src/components/ui/country-flag-art.tsx +180 -0
- package/src/components/ui/country-flag.tsx +118 -12
- package/src/components/ui/data-table/opentui/index.tsx +61 -2
- package/src/components/ui/data-table/opentui/model.ts +109 -2
- package/src/components/ui/data-table/types.ts +1 -1
- package/src/components/ui/display.tsx +5 -1
- package/src/components/ui/index.ts +3 -1
- package/src/components/ui/logo-mark.tsx +11 -2
- package/src/components/ui/query-bar.tsx +1 -1
- package/src/components/ui/row-notes.ts +79 -0
- package/src/components/ui/stat-grid.tsx +28 -3
- package/src/components/ui/status.tsx +3 -1
- package/src/core/app-services.ts +4 -0
- package/src/core/state/app/layout.ts +4 -4
- package/src/data/cached-query.ts +8 -1
- package/src/data/config/chart-settings.ts +3 -3
- package/src/data/config/home.ts +10 -2
- package/src/data/config/layout.ts +4 -1
- package/src/data/config/store/node.ts +4 -0
- package/src/data/config/store/normalize.ts +13 -3
- package/src/data/config/store/portfolio-as-of-column.ts +2 -2
- package/src/data/json-storage.ts +2 -0
- package/src/data/saved-copies.ts +84 -0
- package/src/docs/snapshot.json +65 -32
- package/src/i18n/es.ts +51 -12
- package/src/i18n/ja.ts +51 -12
- package/src/i18n/ko.ts +51 -12
- package/src/i18n/zh-cn.ts +51 -12
- package/src/i18n/zh-tw.ts +51 -12
- package/src/layout/desks.ts +1 -1
- package/src/layout/launch-layout.ts +1 -1
- package/src/layout/pane-manager/floating-actions.ts +5 -3
- package/src/layout/pane-manager/floating.ts +43 -1
- package/src/layout/pane-manager/index.ts +2 -0
- package/src/layout/selected-ticker.ts +74 -0
- package/src/market-data/depositary-pair.ts +251 -0
- package/src/market-data/futures-board.ts +1 -1
- package/src/market-data/futures-contract.ts +124 -40
- package/src/market-data/fx-closes.ts +17 -2
- package/src/market-data/hooks.tsx +19 -11
- package/src/market-data/market/change-basis.ts +49 -7
- package/src/market-data/market/freshness.ts +34 -5
- package/src/market-data/market/period-return.ts +163 -0
- package/src/market-data/market/trading-sessions.ts +13 -0
- package/src/market-data/market/year-to-date.ts +8 -13
- package/src/market-data/performance.ts +20 -14
- package/src/market-data/perpetual-premium.ts +32 -0
- package/src/market-data/published-apac-sessions.ts +2 -1
- package/src/market-data/published-futures-sessions.ts +69 -0
- package/src/market-data/quotes/contributions.ts +5 -1
- package/src/market-data/quotes/freshness.ts +42 -0
- package/src/market-data/quotes/intraday-bar.ts +37 -0
- package/src/market-data/quotes/regular-session-valuation.ts +13 -8
- package/src/market-data/quotes/resolution.ts +4 -2
- package/src/market-data/tax-equivalent.ts +1 -1
- package/src/market-data/ticker-price-returns.ts +3 -1
- package/src/news/aggregator.ts +5 -1
- package/src/news/news-model.ts +4 -0
- package/src/news/types.ts +11 -0
- package/src/notifications/app-notifier.ts +1 -1
- package/src/plugins/auto-update.ts +2 -2
- package/src/plugins/builtin/account-management/index.tsx +1 -0
- package/src/plugins/builtin/account-management/pane.tsx +9 -8
- package/src/plugins/builtin/alerts/alert-engine.ts +30 -18
- package/src/plugins/builtin/alerts/calendar-events.ts +378 -0
- package/src/plugins/builtin/alerts/cli.ts +485 -76
- package/src/plugins/builtin/alerts/command.ts +5 -10
- package/src/plugins/builtin/alerts/event-rows.ts +9 -5
- package/src/plugins/builtin/alerts/events-pane.tsx +71 -56
- package/src/plugins/builtin/alerts/events.ts +108 -5
- package/src/plugins/builtin/alerts/fired-log.ts +78 -0
- package/src/plugins/builtin/alerts/format.ts +2 -1
- package/src/plugins/builtin/alerts/headless.ts +100 -39
- package/src/plugins/builtin/alerts/history-pane.tsx +105 -62
- package/src/plugins/builtin/alerts/history-rows.ts +89 -0
- package/src/plugins/builtin/alerts/index.tsx +45 -18
- package/src/plugins/builtin/alerts/iv-level.ts +365 -0
- package/src/plugins/builtin/alerts/levels.ts +3 -3
- package/src/plugins/builtin/alerts/pane.tsx +97 -29
- package/src/plugins/builtin/alerts/price.ts +35 -0
- package/src/plugins/builtin/alerts/quotes.ts +24 -0
- package/src/plugins/builtin/alerts/research-builder.ts +84 -11
- package/src/plugins/builtin/alerts/research-rules.ts +77 -3
- package/src/plugins/builtin/alerts/scheduled-check.ts +206 -32
- package/src/plugins/builtin/alerts/scheduled-sources.ts +26 -3
- package/src/plugins/builtin/alerts/scheduled.ts +188 -29
- package/src/plugins/builtin/alerts/storage.ts +13 -10
- package/src/plugins/builtin/alerts/targets.ts +12 -3
- package/src/plugins/builtin/analytics/index.tsx +8 -2
- package/src/plugins/builtin/analytics/metrics.ts +1 -1
- package/src/plugins/builtin/analytics/risk-book.ts +215 -0
- package/src/plugins/builtin/analytics/risk-client.ts +13 -6
- package/src/plugins/builtin/analytics/risk-headless.ts +55 -21
- package/src/plugins/builtin/analytics/risk-math.ts +6 -3
- package/src/plugins/builtin/analytics/risk-model.ts +297 -104
- package/src/plugins/builtin/analytics/risk-options.ts +17 -2
- package/src/plugins/builtin/analytics/risk-pane.tsx +107 -43
- package/src/plugins/builtin/attention/pane.tsx +22 -16
- package/src/plugins/builtin/awards/headless.ts +7 -3
- package/src/plugins/builtin/awards/model.ts +18 -0
- package/src/plugins/builtin/awards/pane.tsx +12 -9
- package/src/plugins/builtin/backtest/export.ts +1 -1
- package/src/plugins/builtin/backtest/headless.ts +3 -3
- package/src/plugins/builtin/backtest/rules.ts +41 -5
- package/src/plugins/builtin/broker-manager/add-flow.tsx +12 -7
- package/src/plugins/builtin/broker-manager/detail.tsx +47 -19
- package/src/plugins/builtin/broker-manager/footer.ts +27 -11
- package/src/plugins/builtin/broker-manager/index.tsx +21 -12
- package/src/plugins/builtin/broker-manager/keyboard.ts +1 -1
- package/src/plugins/builtin/broker-manager/model.ts +12 -2
- package/src/plugins/builtin/broker-manager/pane-actions.tsx +183 -57
- package/src/plugins/builtin/broker-manager/table.ts +28 -12
- package/src/plugins/builtin/broker-trading/account-picker.tsx +2 -1
- package/src/plugins/builtin/broker-trading/chart-levels.ts +82 -13
- package/src/plugins/builtin/broker-trading/controller.ts +45 -13
- package/src/plugins/builtin/broker-trading/dock.tsx +24 -4
- package/src/plugins/builtin/broker-trading/headless.ts +2 -1
- package/src/plugins/builtin/broker-trading/index.tsx +7 -1
- package/src/plugins/builtin/broker-trading/linked-orders.ts +148 -0
- package/src/plugins/builtin/broker-trading/order-feed.ts +75 -7
- package/src/plugins/builtin/broker-trading/orders.tsx +109 -31
- package/src/plugins/builtin/broker-trading/overview-orders.tsx +9 -3
- package/src/plugins/builtin/broker-trading/pane-model.ts +30 -2
- package/src/plugins/builtin/broker-trading/pane.tsx +115 -26
- package/src/plugins/builtin/broker-trading/ticket-parts.tsx +36 -7
- package/src/plugins/builtin/broker-trading/ticket.tsx +122 -36
- package/src/plugins/builtin/buildout/cells.tsx +4 -0
- package/src/plugins/builtin/buildout/detail/index.tsx +5 -1
- package/src/plugins/builtin/buildout/detail/ui.tsx +7 -4
- package/src/plugins/builtin/buildout/pane/index.tsx +34 -18
- package/src/plugins/builtin/buildout/pane/status.tsx +0 -4
- package/src/plugins/builtin/builtin-plugin-meta.ts +1 -1
- package/src/plugins/builtin/catalysts/client.ts +2 -2
- package/src/plugins/builtin/catalysts/detail.tsx +3 -2
- package/src/plugins/builtin/catalysts/index.tsx +1 -1
- package/src/plugins/builtin/catalysts/model.ts +49 -4
- package/src/plugins/builtin/catalysts/pane.tsx +9 -11
- package/src/plugins/builtin/central-bank-rates/client.ts +5 -0
- package/src/plugins/builtin/central-bank-rates/headless.ts +36 -10
- package/src/plugins/builtin/central-bank-rates/model.ts +33 -8
- package/src/plugins/builtin/changelog/index.tsx +1 -0
- package/src/plugins/builtin/chart-composer/catalog-inventory.ts +1 -0
- package/src/plugins/builtin/chart-composer/chart-spec-edit.ts +2 -1
- package/src/plugins/builtin/chart-composer/chart-spec.ts +7 -0
- package/src/plugins/builtin/chart-composer/cli-options.ts +2 -5
- package/src/plugins/builtin/chart-composer/data-catalog-pane.tsx +2 -1
- package/src/plugins/builtin/chart-composer/editor/controller.ts +2 -0
- package/src/plugins/builtin/chart-composer/editor.tsx +4 -1
- package/src/plugins/builtin/chart-composer/headless-schema.ts +28 -26
- package/src/plugins/builtin/chart-composer/headless.ts +253 -35
- package/src/plugins/builtin/chart-composer/index.tsx +12 -2
- package/src/plugins/builtin/chart-composer/leverage-overlay.ts +142 -0
- package/src/plugins/builtin/chart-composer/pane.tsx +128 -28
- package/src/plugins/builtin/chart-composer/series-catalog.ts +1 -0
- package/src/plugins/builtin/chart-composer/series-expression.ts +65 -6
- package/src/plugins/builtin/chart-composer/session-history.ts +15 -21
- package/src/plugins/builtin/chart-composer/session-range.ts +4 -2
- package/src/plugins/builtin/chart-composer/settings.ts +31 -19
- package/src/plugins/builtin/chart-composer/use-series-catalog.ts +5 -6
- package/src/plugins/builtin/chart-composer/viewport-labels.ts +18 -8
- package/src/plugins/builtin/chat/attachments/model.ts +3 -1
- package/src/plugins/builtin/chat/content/index.tsx +1 -1
- package/src/plugins/builtin/chat/pane-links/open.ts +1 -1
- package/src/plugins/builtin/chat/people.ts +1 -1
- package/src/plugins/builtin/clinical-trials/client.ts +5 -2
- package/src/plugins/builtin/clinical-trials/model.ts +13 -4
- package/src/plugins/builtin/clinical-trials/pane.tsx +32 -12
- package/src/plugins/builtin/clinical-trials/ticker-sponsor.ts +17 -0
- package/src/plugins/builtin/cloud/askg/controller.ts +1 -1
- package/src/plugins/builtin/cloud/askg/lock-note.ts +1 -1
- package/src/plugins/builtin/cloud/askg/tool-display.ts +1 -1
- package/src/plugins/builtin/cloud/auth-commands.ts +3 -3
- package/src/plugins/builtin/cloud/team/pane-sections.tsx +105 -47
- package/src/plugins/builtin/cloud/team/pane-ui.tsx +42 -4
- package/src/plugins/builtin/cloud/team/pane.tsx +204 -64
- package/src/plugins/builtin/cloud/thesis/store.ts +45 -22
- package/src/plugins/builtin/cloud-tweets/registration.ts +1 -0
- package/src/plugins/builtin/commodities-energy/index.tsx +29 -2
- package/src/plugins/builtin/commodities-energy/view-state.ts +2 -0
- package/src/plugins/builtin/commodity-balances/pane.tsx +14 -8
- package/src/plugins/builtin/company-attention/app-rank.tsx +11 -10
- package/src/plugins/builtin/company-attention/building-model.ts +222 -0
- package/src/plugins/builtin/company-attention/building.tsx +172 -0
- package/src/plugins/builtin/company-attention/client.ts +117 -1
- package/src/plugins/builtin/company-attention/evidence.ts +16 -3
- package/src/plugins/builtin/company-attention/headless.ts +101 -5
- package/src/plugins/builtin/company-attention/index.tsx +6 -3
- package/src/plugins/builtin/company-attention/model.ts +33 -7
- package/src/plugins/builtin/company-attention/moves-model.ts +253 -0
- package/src/plugins/builtin/company-attention/moves.tsx +159 -0
- package/src/plugins/builtin/company-attention/pane.tsx +89 -31
- package/src/plugins/builtin/company-attention/signals-model.ts +229 -0
- package/src/plugins/builtin/company-attention/signals.tsx +160 -0
- package/src/plugins/builtin/company-kpis/headless.ts +3 -2
- package/src/plugins/builtin/company-kpis/model.ts +2 -2
- package/src/plugins/builtin/company-kpis/pane.tsx +5 -4
- package/src/plugins/builtin/composite-plugins.ts +2 -1
- package/src/plugins/builtin/congress-trades/headless.ts +1 -1
- package/src/plugins/builtin/connections/index.ts +1 -0
- package/src/plugins/builtin/correlation/headless-schema.ts +3 -2
- package/src/plugins/builtin/correlation/headless.ts +7 -4
- package/src/plugins/builtin/correlation/relationship/model.ts +1 -0
- package/src/plugins/builtin/correlation/settings.ts +1 -0
- package/src/plugins/builtin/cot/headless.ts +28 -6
- package/src/plugins/builtin/cot/model.ts +12 -0
- package/src/plugins/builtin/cot/pane.tsx +7 -5
- package/src/plugins/builtin/cpi/headless.ts +5 -1
- package/src/plugins/builtin/cpi/pane.tsx +11 -9
- package/src/plugins/builtin/credit-boards/model.ts +2 -0
- package/src/plugins/builtin/credit-documents/headless.ts +1 -1
- package/src/plugins/builtin/credit-documents/pane.tsx +8 -7
- package/src/plugins/builtin/crypto-board/client.ts +86 -0
- package/src/plugins/builtin/crypto-board/defi-view.tsx +218 -0
- package/src/plugins/builtin/crypto-board/defi.ts +239 -0
- package/src/plugins/builtin/crypto-board/headless.ts +117 -6
- package/src/plugins/builtin/crypto-board/index.tsx +8 -3
- package/src/plugins/builtin/crypto-board/model.ts +40 -8
- package/src/plugins/builtin/crypto-board/pane.tsx +55 -21
- package/src/plugins/builtin/crypto-board/series.ts +19 -1
- package/src/plugins/builtin/crypto-etf-flows/client.ts +60 -0
- package/src/plugins/builtin/crypto-etf-flows/headless.ts +132 -0
- package/src/plugins/builtin/crypto-etf-flows/index.tsx +44 -0
- package/src/plugins/builtin/crypto-etf-flows/model.ts +121 -0
- package/src/plugins/builtin/crypto-etf-flows/pane.tsx +193 -0
- package/src/plugins/builtin/debt-maturities/pane.tsx +4 -3
- package/src/plugins/builtin/debug/index.tsx +1 -0
- package/src/plugins/builtin/dividend-yield/index.tsx +1 -1
- package/src/plugins/builtin/docs/index.tsx +1 -1
- package/src/plugins/builtin/docs/pane.tsx +2 -2
- package/src/plugins/builtin/docs/targets.ts +1 -1
- package/src/plugins/builtin/doe/client.ts +5 -1
- package/src/plugins/builtin/doe/headless.ts +12 -6
- package/src/plugins/builtin/doe/model.ts +43 -6
- package/src/plugins/builtin/doe/pane.tsx +19 -12
- package/src/plugins/builtin/earnings/board-model.ts +13 -6
- package/src/plugins/builtin/earnings/board-table.ts +4 -1
- package/src/plugins/builtin/earnings/board.tsx +253 -50
- package/src/plugins/builtin/earnings/calendar-model.ts +188 -0
- package/src/plugins/builtin/earnings/calendar.tsx +338 -0
- package/src/plugins/builtin/earnings/client.ts +4 -3
- package/src/plugins/builtin/earnings/headless.ts +53 -15
- package/src/plugins/builtin/earnings/history-model.ts +53 -36
- package/src/plugins/builtin/earnings/index.tsx +15 -22
- package/src/plugins/builtin/earnings/model.ts +17 -12
- package/src/plugins/builtin/earnings/scope.ts +89 -0
- package/src/plugins/builtin/earnings-calls/calendar.tsx +310 -0
- package/src/plugins/builtin/earnings-calls/data.ts +146 -2
- package/src/plugins/builtin/earnings-calls/headless.ts +151 -9
- package/src/plugins/builtin/earnings-calls/index.tsx +3 -3
- package/src/plugins/builtin/earnings-calls/lock-note.ts +1 -1
- package/src/plugins/builtin/earnings-calls/pane.tsx +149 -31
- package/src/plugins/builtin/earnings-calls/upcoming.ts +195 -0
- package/src/plugins/builtin/earnings-ripple/pane.tsx +10 -5
- package/src/plugins/builtin/econ/calendar-model.ts +132 -20
- package/src/plugins/builtin/econ/detail-view.tsx +48 -10
- package/src/plugins/builtin/econ/fred-catalog.ts +23 -6
- package/src/plugins/builtin/econ/fred-series-map.ts +4 -0
- package/src/plugins/builtin/econ/index.tsx +112 -25
- package/src/plugins/builtin/econ/print-watch.ts +2 -1
- package/src/plugins/builtin/econ/types.ts +32 -1
- package/src/plugins/builtin/econ-statistics/client.ts +16 -3
- package/src/plugins/builtin/econ-statistics/defs.ts +4 -0
- package/src/plugins/builtin/econ-statistics/detail.tsx +2 -2
- package/src/plugins/builtin/econ-statistics/headless.ts +13 -2
- package/src/plugins/builtin/econ-statistics/index.tsx +3 -3
- package/src/plugins/builtin/econ-statistics/pane.tsx +2 -1
- package/src/plugins/builtin/econ-statistics/stats.ts +103 -0
- package/src/plugins/builtin/econ-statistics/view.ts +16 -1
- package/src/plugins/builtin/equity-screener/client.ts +21 -3
- package/src/plugins/builtin/equity-screener/headless.ts +77 -5
- package/src/plugins/builtin/equity-screener/live.ts +1 -1
- package/src/plugins/builtin/equity-screener/model.ts +34 -0
- package/src/plugins/builtin/equity-screener/pane.tsx +148 -106
- package/src/plugins/builtin/equity-screener/screen-check.ts +90 -0
- package/src/plugins/builtin/equity-screener/ticker-check.tsx +148 -0
- package/src/plugins/builtin/estimate-revisions/headless.ts +3 -1
- package/src/plugins/builtin/estimate-revisions/lock-note.ts +3 -3
- package/src/plugins/builtin/estimate-revisions/model.ts +8 -10
- package/src/plugins/builtin/exposure/headless.ts +51 -6
- package/src/plugins/builtin/exposure/index.tsx +28 -2
- package/src/plugins/builtin/exposure/model.ts +7 -0
- package/src/plugins/builtin/exposure/pane.tsx +16 -10
- package/src/plugins/builtin/fear-greed/index.tsx +1 -1
- package/src/plugins/builtin/filing-events/index.tsx +1 -1
- package/src/plugins/builtin/futures/model.ts +10 -9
- package/src/plugins/builtin/futures/returns.ts +8 -36
- package/src/plugins/builtin/futures/table.tsx +1 -1
- package/src/plugins/builtin/futures-curve/client.ts +40 -9
- package/src/plugins/builtin/futures-curve/headless.ts +39 -17
- package/src/plugins/builtin/futures-curve/model.ts +258 -69
- package/src/plugins/builtin/futures-curve/pane.tsx +46 -17
- package/src/plugins/builtin/fx-matrix/client.ts +15 -8
- package/src/plugins/builtin/fx-matrix/headless.ts +32 -14
- package/src/plugins/builtin/fx-matrix/index.tsx +13 -11
- package/src/plugins/builtin/fx-matrix/live-legs.ts +22 -0
- package/src/plugins/builtin/fx-matrix/settings.ts +2 -1
- package/src/plugins/builtin/gpu/board.tsx +4 -1
- package/src/plugins/builtin/gpu/changes.tsx +10 -10
- package/src/plugins/builtin/gpu/equities.tsx +4 -1
- package/src/plugins/builtin/gpu/headless.ts +9 -4
- package/src/plugins/builtin/gpu/history.tsx +4 -2
- package/src/plugins/builtin/gpu/pane.tsx +5 -3
- package/src/plugins/builtin/help/index.tsx +13 -3
- package/src/plugins/builtin/holders/beneficial-model.ts +8 -11
- package/src/plugins/builtin/holders/beneficial-report.ts +6 -5
- package/src/plugins/builtin/holders/beneficial-view.tsx +7 -3
- package/src/plugins/builtin/holders/client.ts +15 -2
- package/src/plugins/builtin/holders/format.ts +28 -17
- package/src/plugins/builtin/holders/headless.ts +48 -8
- package/src/plugins/builtin/holders/index-holders.ts +264 -0
- package/src/plugins/builtin/holders/pane.tsx +79 -15
- package/src/plugins/builtin/holders/report-rows.ts +35 -7
- package/src/plugins/builtin/holders/table-model.ts +2 -1
- package/src/plugins/builtin/holders/thirteenf-match.ts +3 -1
- package/src/plugins/builtin/holders/treemap.tsx +2 -2
- package/src/plugins/builtin/insider/base-values.ts +11 -7
- package/src/plugins/builtin/insider/client.ts +3 -0
- package/src/plugins/builtin/insider/headless.ts +20 -7
- package/src/plugins/builtin/insider/index.tsx +17 -8
- package/src/plugins/builtin/insider/issuer.ts +34 -4
- package/src/plugins/builtin/insider/signals-client.ts +3 -3
- package/src/plugins/builtin/insider/signals.tsx +1 -1
- package/src/plugins/builtin/insider/table-model.ts +35 -13
- package/src/plugins/builtin/insider/table.tsx +5 -2
- package/src/plugins/builtin/ipo-calendar/pane.tsx +7 -4
- package/src/plugins/builtin/iv-history/client.ts +20 -0
- package/src/plugins/builtin/iv-history/events.ts +145 -0
- package/src/plugins/builtin/iv-history/format.ts +3 -0
- package/src/plugins/builtin/iv-history/headless.ts +91 -7
- package/src/plugins/builtin/iv-history/index.tsx +1 -1
- package/src/plugins/builtin/iv-history/model.ts +13 -4
- package/src/plugins/builtin/iv-history/series.ts +3 -1
- package/src/plugins/builtin/jobs/lock-note.ts +1 -1
- package/src/plugins/builtin/jobs/model.ts +4 -15
- package/src/plugins/builtin/jobs/pane.tsx +7 -5
- package/src/plugins/builtin/jobs/share-bars.tsx +11 -5
- package/src/plugins/builtin/jodi/pane.tsx +14 -8
- package/src/plugins/builtin/layout-manager/index.tsx +1 -0
- package/src/plugins/builtin/macro-day/headless.ts +20 -7
- package/src/plugins/builtin/macro-day/index.tsx +3 -2
- package/src/plugins/builtin/macro-day/model.ts +29 -8
- package/src/plugins/builtin/macro-day/pane.tsx +46 -10
- package/src/plugins/builtin/macro-day/releases.ts +55 -13
- package/src/plugins/builtin/market-heatmap/data.ts +9 -2
- package/src/plugins/builtin/market-heatmap/evidence.ts +1 -1
- package/src/plugins/builtin/market-heatmap/headless.ts +9 -6
- package/src/plugins/builtin/market-heatmap/index.tsx +3 -3
- package/src/plugins/builtin/market-heatmap/model.ts +10 -7
- package/src/plugins/builtin/market-movers/client.ts +36 -21
- package/src/plugins/builtin/market-movers/headless.ts +8 -2
- package/src/plugins/builtin/market-movers/index.tsx +16 -10
- package/src/plugins/builtin/market-movers/screener.ts +33 -11
- package/src/plugins/builtin/market-movers/session-body.tsx +4 -2
- package/src/plugins/builtin/market-movers/session-table.ts +4 -2
- package/src/plugins/builtin/market-movers/table.ts +4 -1
- package/src/plugins/builtin/market-valuation/headless.ts +2 -0
- package/src/plugins/builtin/market-valuation/view.ts +5 -0
- package/src/plugins/builtin/members/headless.ts +6 -5
- package/src/plugins/builtin/members/pane.tsx +11 -4
- package/src/plugins/builtin/mna/client.ts +1 -0
- package/src/plugins/builtin/mna/detail.tsx +20 -32
- package/src/plugins/builtin/mna/distress/detail.tsx +16 -4
- package/src/plugins/builtin/mna/distress/model.ts +3 -2
- package/src/plugins/builtin/mna/distress/pane.tsx +7 -4
- package/src/plugins/builtin/mna/headless.ts +6 -13
- package/src/plugins/builtin/mna/model.ts +93 -15
- package/src/plugins/builtin/mna/pane.tsx +5 -4
- package/src/plugins/builtin/news/headless.ts +12 -6
- package/src/plugins/builtin/news/index.tsx +10 -1
- package/src/plugins/builtin/news/wire/index.tsx +3 -2
- package/src/plugins/builtin/news/wire/news/command-bar-search.ts +26 -10
- package/src/plugins/builtin/news/wire/news/query-presets.ts +6 -2
- package/src/plugins/builtin/news/wire/rss/cli.ts +3 -3
- package/src/plugins/builtin/notes/cli.ts +50 -15
- package/src/plugins/builtin/notes/export.ts +17 -6
- package/src/plugins/builtin/notes/files.ts +16 -5
- package/src/plugins/builtin/openfda/pane.tsx +1 -1
- package/src/plugins/builtin/options/carry.ts +2 -2
- package/src/plugins/builtin/options/enrichment-model.ts +10 -9
- package/src/plugins/builtin/options/index.tsx +1 -1
- package/src/plugins/builtin/options/model-spot.ts +70 -4
- package/src/plugins/builtin/options/view.tsx +51 -23
- package/src/plugins/builtin/options-calculator/headless.ts +46 -7
- package/src/plugins/builtin/options-calculator/pane.tsx +3 -2
- package/src/plugins/builtin/options-positioning/headless.ts +11 -3
- package/src/plugins/builtin/options-positioning/model.ts +24 -0
- package/src/plugins/builtin/options-positioning/pane.tsx +10 -12
- package/src/plugins/builtin/options-scenario/client.ts +142 -29
- package/src/plugins/builtin/options-scenario/collar.ts +8 -6
- package/src/plugins/builtin/options-scenario/csp-screen-headless.ts +127 -0
- package/src/plugins/builtin/options-scenario/csp-screen-pane.tsx +165 -0
- package/src/plugins/builtin/options-scenario/csp-screen.ts +258 -0
- package/src/plugins/builtin/options-scenario/csp.ts +101 -21
- package/src/plugins/builtin/options-scenario/headless.ts +49 -21
- package/src/plugins/builtin/options-scenario/hedge.ts +20 -14
- package/src/plugins/builtin/options-scenario/index.tsx +28 -3
- package/src/plugins/builtin/options-scenario/model.ts +13 -0
- package/src/plugins/builtin/options-scenario/pane.tsx +22 -10
- package/src/plugins/builtin/perps/equity-row.tsx +11 -3
- package/src/plugins/builtin/perps/freshness.ts +8 -5
- package/src/plugins/builtin/perps/headless.ts +3 -1
- package/src/plugins/builtin/perps/list-perpetuals.ts +25 -4
- package/src/plugins/builtin/perps/live-rows.ts +161 -0
- package/src/plugins/builtin/perps/markets-section.tsx +154 -0
- package/src/plugins/builtin/perps/pane.tsx +36 -17
- package/src/plugins/builtin/perps/venue-markets.ts +96 -0
- package/src/plugins/builtin/plugin-marketplace/index.tsx +2 -1
- package/src/plugins/builtin/plugin-marketplace/pane.tsx +145 -60
- package/src/plugins/builtin/portfolio-list/cli/bulk-symbols.ts +78 -27
- package/src/plugins/builtin/portfolio-list/cli/portfolio-command.ts +158 -141
- package/src/plugins/builtin/portfolio-list/cli/render.ts +49 -20
- package/src/plugins/builtin/portfolio-list/cli/shared.ts +3 -3
- package/src/plugins/builtin/portfolio-list/cli/watchlist-command.ts +29 -24
- package/src/plugins/builtin/portfolio-list/headless.ts +6 -3
- package/src/plugins/builtin/portfolio-list/income.ts +13 -2
- package/src/plugins/builtin/portfolio-list/index.tsx +9 -2
- package/src/plugins/builtin/portfolio-list/pane/index.tsx +21 -8
- package/src/plugins/builtin/portfolio-list/pane/purchase-date-fx.ts +46 -0
- package/src/plugins/builtin/portfolio-list/summary/live-accounts.ts +16 -9
- package/src/plugins/builtin/portfolio-list/summary/totals.ts +2 -15
- package/src/plugins/builtin/power/client.ts +6 -3
- package/src/plugins/builtin/power/evidence.ts +22 -7
- package/src/plugins/builtin/power/gas.tsx +5 -1
- package/src/plugins/builtin/power/pane.tsx +44 -32
- package/src/plugins/builtin/power/prices.tsx +10 -3
- package/src/plugins/builtin/research/analyst-headless.ts +25 -8
- package/src/plugins/builtin/research/analyst-model.ts +68 -3
- package/src/plugins/builtin/research/corporate-actions-pane.tsx +63 -14
- package/src/plugins/builtin/research/event-model.ts +3 -1
- package/src/plugins/builtin/research/event-sources.ts +12 -4
- package/src/plugins/builtin/research/index.tsx +2 -1
- package/src/plugins/builtin/research/relative-valuation-basis.ts +58 -0
- package/src/plugins/builtin/research/relative-valuation-columns.ts +31 -2
- package/src/plugins/builtin/research/relative-valuation-currency.ts +12 -5
- package/src/plugins/builtin/research/relative-valuation-headless.ts +84 -26
- package/src/plugins/builtin/research/relative-valuation-model.ts +88 -19
- package/src/plugins/builtin/research/relative-valuation-pane.tsx +76 -9
- package/src/plugins/builtin/research/relative-valuation-peers.ts +1 -1
- package/src/plugins/builtin/reverse-dcf/client.ts +2 -1
- package/src/plugins/builtin/reverse-dcf/model.ts +10 -5
- package/src/plugins/builtin/risk-factors/index.tsx +2 -2
- package/src/plugins/builtin/scanner/lock-note.ts +1 -1
- package/src/plugins/builtin/seasonality/client.ts +2 -1
- package/src/plugins/builtin/sec/forms.ts +13 -0
- package/src/plugins/builtin/sec/fund-abroad.ts +32 -0
- package/src/plugins/builtin/sec/fund-facts.ts +68 -8
- package/src/plugins/builtin/sec/headless.ts +85 -8
- package/src/plugins/builtin/sec/index.tsx +58 -12
- package/src/plugins/builtin/sectors/client.ts +6 -4
- package/src/plugins/builtin/sectors/sector-model.ts +11 -15
- package/src/plugins/builtin/series-inventory.ts +2 -0
- package/src/plugins/builtin/shared/broker-reconnect.ts +107 -22
- package/src/plugins/builtin/shared/cloud-resource.ts +15 -2
- package/src/plugins/builtin/shared/cloud-upgrade.ts +34 -6
- package/src/plugins/builtin/shared/earnings-calendar.ts +375 -0
- package/src/plugins/builtin/{earnings/estimate-basis.ts → shared/earnings-estimate-basis.ts} +1 -1
- package/src/plugins/builtin/shared/earnings-report.ts +3 -3
- package/src/plugins/builtin/shared/fx-rate-freshness.ts +23 -1
- package/src/plugins/builtin/shared/job-posting.ts +129 -0
- package/src/plugins/builtin/shared/pro-lock-note.ts +3 -3
- package/src/plugins/builtin/shared/report-freshness.ts +3 -0
- package/src/plugins/builtin/shared/research-trading.tsx +23 -0
- package/src/plugins/builtin/shared/series-cache.ts +2 -0
- package/src/plugins/builtin/shared/series-list-detail.tsx +3 -1
- package/src/plugins/builtin/shared/ticker-surface.ts +2 -1
- package/src/plugins/builtin/shared/volatility/options.ts +2 -1
- package/src/plugins/builtin/short-interest/client.ts +2 -0
- package/src/plugins/builtin/short-interest/headless.ts +41 -12
- package/src/plugins/builtin/short-interest/index.tsx +23 -1
- package/src/plugins/builtin/short-interest/model.ts +70 -19
- package/src/plugins/builtin/short-interest/pane.tsx +19 -2
- package/src/plugins/builtin/short-interest/publications-client.ts +82 -0
- package/src/plugins/builtin/short-interest/publications-headless.ts +29 -0
- package/src/plugins/builtin/short-interest/publications-model.ts +50 -0
- package/src/plugins/builtin/short-interest/publications-pane.tsx +66 -0
- package/src/plugins/builtin/short-interest/schedule.ts +35 -2
- package/src/plugins/builtin/short-interest/surface.tsx +11 -4
- package/src/plugins/builtin/short-interest/types.ts +9 -0
- package/src/plugins/builtin/short-interest/watch-client.ts +14 -8
- package/src/plugins/builtin/short-interest/watch-model.ts +12 -25
- package/src/plugins/builtin/short-interest/watch-pane.tsx +5 -1
- package/src/plugins/builtin/social-mentions/client.ts +2 -1
- package/src/plugins/builtin/supply-chain/flow.tsx +33 -9
- package/src/plugins/builtin/supply-chain/model.ts +51 -3
- package/src/plugins/builtin/supply-chain/pane.tsx +78 -39
- package/src/plugins/builtin/supply-chain/row-evidence.tsx +1 -1
- package/src/plugins/builtin/themes/headless.ts +8 -5
- package/src/plugins/builtin/themes/model.ts +14 -4
- package/src/plugins/builtin/themes/pane.tsx +24 -5
- package/src/plugins/builtin/thirteenf/headless.ts +5 -5
- package/src/plugins/builtin/thirteenf/signals.ts +3 -1
- package/src/plugins/builtin/ticker-detail/adr-pair/headless.ts +123 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/model.ts +132 -0
- package/src/plugins/builtin/ticker-detail/adr-pair/tab.tsx +87 -0
- package/src/plugins/builtin/ticker-detail/data-panes/historical-prices.tsx +40 -26
- package/src/plugins/builtin/ticker-detail/data-panes/history-bars.ts +8 -4
- package/src/plugins/builtin/ticker-detail/data-panes/returns-history.ts +67 -3
- package/src/plugins/builtin/ticker-detail/data-panes/returns-model.ts +112 -5
- package/src/plugins/builtin/ticker-detail/data-panes/returns-pane.tsx +17 -2
- package/src/plugins/builtin/ticker-detail/financials/aggregation.ts +21 -7
- package/src/plugins/builtin/ticker-detail/financials/model.ts +36 -1
- package/src/plugins/builtin/ticker-detail/financials/offerings.ts +56 -0
- package/src/plugins/builtin/ticker-detail/financials/ratios.ts +62 -13
- package/src/plugins/builtin/ticker-detail/financials/tab.tsx +30 -4
- package/src/plugins/builtin/ticker-detail/headless-schema.ts +14 -2
- package/src/plugins/builtin/ticker-detail/headless.ts +148 -35
- package/src/plugins/builtin/ticker-detail/index.tsx +37 -5
- package/src/plugins/builtin/ticker-detail/overview/model.ts +65 -10
- package/src/plugins/builtin/ticker-detail/overview/pane.tsx +9 -1
- package/src/plugins/builtin/ticker-detail/overview-tab.tsx +68 -11
- package/src/plugins/builtin/ticker-detail/pane.tsx +11 -0
- package/src/plugins/builtin/ticker-detail/quote-footer.ts +8 -3
- package/src/plugins/builtin/ticker-detail/research-tabs.ts +11 -0
- package/src/plugins/builtin/vol-surface/client.ts +28 -7
- package/src/plugins/builtin/vol-surface/headless.ts +43 -15
- package/src/plugins/builtin/vol-surface/model.ts +34 -12
- package/src/plugins/builtin/vol-surface/pane.tsx +33 -13
- package/src/plugins/builtin/vol-surface/stored.ts +34 -3
- package/src/plugins/builtin/vol-surface/tables.ts +14 -0
- package/src/plugins/builtin/volatility/model.ts +5 -10
- package/src/plugins/builtin/world-venue-map/basemap-layer.tsx +4 -3
- package/src/plugins/builtin/world-venue-map/basemap.ts +3 -1
- package/src/plugins/builtin/world-venue-map/chokepoint-chart.ts +40 -0
- package/src/plugins/builtin/world-venue-map/evidence.ts +1 -1
- package/src/plugins/builtin/world-venue-map/geo-series.ts +90 -11
- package/src/plugins/builtin/world-venue-map/headless.ts +1 -1
- package/src/plugins/builtin/world-venue-map/index.ts +3 -26
- package/src/plugins/builtin/world-venue-map/layers.ts +1 -1
- package/src/plugins/builtin/world-venue-map/map.tsx +2 -1
- package/src/plugins/builtin/world-venue-map/pane.tsx +4 -2
- package/src/plugins/builtin/world-venue-map/venue-header.tsx +15 -4
- package/src/plugins/builtin/yield-curve/client.ts +25 -0
- package/src/plugins/builtin/yield-curve/curves.ts +7 -4
- package/src/plugins/builtin/yield-curve/headless.ts +38 -4
- package/src/plugins/builtin/yield-curve/history.ts +4 -3
- package/src/plugins/builtin/yield-curve/index.tsx +12 -6
- package/src/plugins/builtin/yield-curve/swaps-model.ts +93 -0
- package/src/plugins/builtin/yield-curve/swaps.tsx +99 -0
- package/src/plugins/bundle.ts +1 -1
- package/src/plugins/catalog-browser.ts +2 -1
- package/src/plugins/compat.ts +3 -3
- package/src/plugins/dependencies.ts +75 -14
- package/src/plugins/extracted-plugins.ts +132 -34
- package/src/plugins/host-link.ts +149 -34
- package/src/plugins/installer.ts +35 -10
- package/src/plugins/loader.ts +206 -38
- package/src/plugins/manager-node.ts +2 -2
- package/src/plugins/marketplace/deactivation.ts +22 -0
- package/src/plugins/marketplace/model.ts +2 -2
- package/src/plugins/marketplace/packs.ts +1 -1
- package/src/plugins/ownership.ts +1 -1
- package/src/plugins/peer-retry.ts +155 -0
- package/src/plugins/registry/contributions.ts +3 -1
- package/src/plugins/registry/index.ts +4 -3
- package/src/plugins/registry/plugin-state.ts +3 -0
- package/src/plugins/seed-notice.ts +20 -0
- package/src/plugins/shortcut-argument.ts +39 -0
- package/src/portfolio/allocation.ts +1 -1
- package/src/portfolio/collection-name.ts +31 -0
- package/src/portfolio/column-values.ts +10 -8
- package/src/portfolio/cost-fx.ts +296 -19
- package/src/portfolio/manual-lots.ts +75 -0
- package/src/portfolio/mutations.ts +60 -22
- package/src/portfolio/suffixed-listings.ts +209 -0
- package/src/portfolio/totals-currency.ts +24 -0
- package/src/public/__snapshots__/public-api.test.ts.snap +14 -0
- package/src/public/time-series.ts +11 -8
- package/src/remote/schema.ts +1 -1
- package/src/renderers/browser/config-host.ts +3 -0
- package/src/renderers/browser/main.tsx +23 -3
- package/src/renderers/dom/boot-frame-page.ts +187 -0
- package/src/renderers/dom/boot-frame.ts +237 -0
- package/src/renderers/dom/build-assets.ts +46 -8
- package/src/renderers/dom/desktop/controls.tsx +1 -1
- package/src/renderers/dom/desktop/query-bar.tsx +2 -0
- package/src/renderers/dom/dom-ui-host.tsx +4 -29
- package/src/renderers/dom/host/ascii-text.ts +16 -2
- package/src/renderers/dom/host/box.tsx +43 -2
- package/src/renderers/dom/host/chart-surface.tsx +2 -0
- package/src/renderers/dom/host/hls.chunk.ts +3 -0
- package/src/renderers/dom/host/image-surface.tsx +49 -0
- package/src/renderers/dom/host/media-surface.tsx +24 -18
- package/src/renderers/dom/host/mouse.ts +30 -0
- package/src/renderers/dom/host/size-observer.ts +1 -1
- package/src/renderers/dom/host/style.ts +1 -1
- package/src/renderers/dom/host/tabs.tsx +16 -5
- package/src/renderers/dom/host/top-surface.ts +127 -0
- package/src/renderers/dom/styles.css +115 -0
- package/src/renderers/dom/test-utils.tsx +2 -1
- package/src/renderers/electrobun/bun/application-menu/index.ts +3 -3
- package/src/renderers/electrobun/bun/core-capabilities.ts +9 -1
- package/src/renderers/electrobun/bun/desktop/backend-requests.ts +3 -0
- package/src/renderers/electrobun/bun/desktop/backend.ts +56 -3
- package/src/renderers/electrobun/bun/desktop/detached-windows.ts +1 -1
- package/src/renderers/electrobun/bun/desktop/host-requests.ts +9 -3
- package/src/renderers/electrobun/bun/desktop/initialization.ts +81 -18
- package/src/renderers/electrobun/bun/desktop/update.ts +210 -30
- package/src/renderers/electrobun/bun/external-plugins.ts +29 -7
- package/src/renderers/electrobun/bun/index.ts +11 -1
- package/src/renderers/electrobun/bun/window/boot-frame.ts +67 -0
- package/src/renderers/electrobun/bun/window/create.ts +4 -1
- package/src/renderers/electrobun/shared/boot-frame.ts +7 -0
- package/src/renderers/electrobun/shared/protocol.ts +6 -1
- package/src/renderers/electrobun/view/cli-pane-shot-entry.tsx +1 -1
- package/src/renderers/electrobun/view/config-host.ts +3 -0
- package/src/renderers/electrobun/view/fatal-screen.tsx +1 -1
- package/src/renderers/electrobun/view/main.tsx +30 -4
- package/src/renderers/electrobun/view/news-source.ts +9 -7
- package/src/renderers/electrobun/view/remote/asset-data-client.ts +9 -2
- package/src/renderers/electrobun/view/ui-host.tsx +1 -1
- package/src/renderers/opentui/browser-open.ts +88 -0
- package/src/renderers/opentui/host.tsx +5 -14
- package/src/renderers/opentui/image/loader.ts +3 -2
- package/src/renderers/opentui/native-smoke.ts +10 -1
- package/src/renderers/opentui/pane-image/index.ts +2 -1
- package/src/renderers/opentui/render-lib.ts +253 -0
- package/src/renderers/opentui/render-timing-smoke.ts +1 -1
- package/src/renderers/opentui/start.tsx +8 -1
- package/src/renderers/share/layout-view.tsx +2 -2
- package/src/renderers/share/main.tsx +4 -4
- package/src/renderers/share/view.tsx +1 -1
- package/src/series/resolve.ts +22 -6
- package/src/series/standalone.ts +30 -2
- package/src/series/types.ts +8 -1
- package/src/shares/api.ts +4 -1
- package/src/shares/pane.ts +1 -1
- package/src/sources/gloomberb-cloud/fred-series.ts +46 -1
- package/src/sources/gloomberb-cloud/index.ts +39 -16
- package/src/sources/gloomberb-cloud/news.ts +39 -0
- package/src/sources/gloomberb-cloud/normalizers.ts +14 -1
- package/src/sources/gloomberb-cloud/perpetuals.ts +49 -1
- package/src/sources/listing-symbols.ts +37 -0
- package/src/sources/provider-errors.ts +16 -2
- package/src/sources/provider-router/financial-routes.ts +21 -3
- package/src/sources/provider-router/financials.ts +15 -2
- package/src/sources/provider-router/history.ts +30 -8
- package/src/sources/provider-router/index.ts +16 -0
- package/src/sources/provider-router/primary.ts +1 -1
- package/src/state/app/bootstrap.ts +23 -0
- package/src/state/hooks/inline-tickers.ts +30 -5
- package/src/sync/controller.ts +1 -1
- package/src/sync/core-contributors.ts +46 -14
- package/src/team/collections-sync.ts +2 -1
- package/src/team/collections.ts +178 -17
- package/src/telemetry/crash-reports.ts +21 -4
- package/src/telemetry/update-failures-node.ts +59 -0
- package/src/telemetry/update-failures.ts +307 -0
- package/src/test-support/builtin-panes.ts +1 -1
- package/src/theme/colors.ts +3 -30
- package/src/theme/ui-tokens.ts +37 -1
- package/src/tickers/company-name-listing.ts +215 -36
- package/src/tickers/company-name.ts +43 -0
- package/src/tickers/index-roots.ts +47 -0
- package/src/tickers/instrument-label.ts +5 -1
- package/src/tickers/listing-fate.ts +30 -0
- package/src/tickers/metadata.ts +10 -0
- package/src/tickers/perpetual-listing.ts +5 -2
- package/src/tickers/search/home-listing.ts +75 -0
- package/src/tickers/search/index.ts +76 -27
- package/src/tickers/search/ranking.ts +54 -4
- package/src/tickers/search/upsert.ts +29 -0
- package/src/tickers/terminal-codes.ts +416 -40
- package/src/time-series/bar-aggregation.ts +243 -0
- package/src/time-series/base-series.ts +307 -0
- package/src/time-series/chart-bounds.ts +349 -0
- package/src/time-series/chart-seed.ts +142 -0
- package/src/time-series/economic.ts +5 -0
- package/src/time-series/fundamentals.ts +18 -3
- package/src/time-series/history-acquisition.ts +499 -0
- package/src/time-series/leverage.ts +100 -0
- package/src/time-series/market-resolution.ts +4 -2
- package/src/time-series/market.ts +2 -1
- package/src/time-series/price-comparison.ts +175 -30
- package/src/time-series/range.ts +9 -1
- package/src/time-series/resolution.ts +174 -16
- package/src/time-series/resolve-context.ts +157 -0
- package/src/time-series/resolve.ts +126 -1577
- package/src/time-series/series-name.ts +38 -0
- package/src/time-series/series-presentation.ts +208 -0
- package/src/time-series/spec.ts +11 -6
- package/src/time-series/studies.ts +109 -12
- package/src/time-series/tail-reconcile.ts +121 -0
- package/src/time-series/types.ts +29 -2
- package/src/time-series/use-chart-resolution.ts +4 -5
- package/src/types/broker.ts +10 -0
- package/src/types/config.ts +14 -0
- package/src/types/data-provider.ts +20 -0
- package/src/types/exchange-rate.ts +6 -0
- package/src/types/financials.ts +104 -7
- package/src/types/headless.ts +83 -6
- package/src/types/instrument.ts +3 -0
- package/src/types/issuer-listings.ts +28 -0
- package/src/types/plugin.ts +65 -8
- package/src/types/price-history.ts +2 -0
- package/src/types/ticker.ts +13 -0
- package/src/types/trading.ts +59 -1
- package/src/ui/ascii-font.ts +13 -1
- package/src/ui/host.tsx +6 -1
- package/src/updater/command-names.ts +175 -0
- package/src/updater/failure.ts +163 -0
- package/src/updater/index.ts +97 -28
- package/src/utils/calendar-date.ts +32 -15
- package/src/utils/cash-runway.ts +241 -0
- package/src/utils/central-banks.ts +42 -0
- package/src/utils/cli-output.ts +259 -80
- package/src/utils/contract-month.ts +16 -0
- package/src/utils/crypto-pair.ts +61 -3
- package/src/utils/currency-pair.ts +26 -0
- package/src/utils/currency-units.ts +29 -0
- package/src/utils/datetime-format.ts +10 -0
- package/src/utils/debug-log.ts +1 -1
- package/src/utils/decimal-comma.ts +39 -6
- package/src/utils/exchange-announcements.ts +71 -0
- package/src/utils/exchange-rate-snapshot.ts +10 -0
- package/src/utils/financial-statements.ts +83 -4
- package/src/utils/format.ts +34 -16
- package/src/utils/fundamentals.ts +150 -34
- package/src/utils/fx-market-hours.ts +10 -1
- package/src/utils/latest-financial-period.ts +8 -0
- package/src/utils/linux-libc.ts +54 -0
- package/src/utils/market-capitalization.ts +111 -15
- package/src/utils/max-drawdown.ts +64 -0
- package/src/utils/network-failure.ts +83 -0
- package/src/utils/option-expiry.ts +139 -7
- package/src/utils/price-earnings.ts +11 -5
- package/src/utils/price-history.ts +18 -8
- package/src/utils/price-window.ts +131 -0
- package/src/utils/release-date.ts +47 -0
- package/src/utils/sec.ts +71 -0
- package/src/utils/throttled-fetch.ts +11 -4
- package/src/utils/trailing-eps.ts +67 -0
- package/src/utils/typed-text.ts +21 -0
- package/src/utils/utc-time.ts +24 -1
- package/src/version.ts +6 -0
- package/src/cli/pane-functions/screenshot.ts +0 -2122
|
@@ -1,46 +1,295 @@
|
|
|
1
|
+
import { futuresContractByCode } from "../market-data/futures-board";
|
|
2
|
+
import { getListingSymbol, hongKongListingCode, tickerHasListingSuffix } from "../sources/listing-symbols";
|
|
3
|
+
import { isCurrencyCode } from "../utils/currency-pair";
|
|
4
|
+
import { isKnownExchangeCode, isUsListingExchange } from "../utils/exchanges";
|
|
5
|
+
|
|
1
6
|
/**
|
|
2
|
-
* A
|
|
7
|
+
* A listing written the way a market data terminal names it, read as the
|
|
3
8
|
* listing it is. Reuters codes put the venue after a dot (WFC.N for the New
|
|
4
9
|
* York Stock Exchange, AAPL.O or AAPL.OQ for Nasdaq) and a share class in
|
|
5
|
-
* lower case before it (BRKb.N)
|
|
6
|
-
* the asset class
|
|
7
|
-
*
|
|
8
|
-
* suffixes of listings abroad (VOD.L, 7203.T, RY.TO,
|
|
9
|
-
* classes (BRK.B)
|
|
10
|
+
* lower case before it (BRKb.N). Bloomberg writes the symbol, the market and
|
|
11
|
+
* the asset class, its yellow key: JPM US Equity (the US composite), VOD LN
|
|
12
|
+
* Equity (London), 7203 JP (Tokyo, the key left off), SPX Index, EURUSD
|
|
13
|
+
* Curncy, CL1 Comdty. The suffixes of listings abroad (VOD.L, 7203.T, RY.TO,
|
|
14
|
+
* 0700.HK) and US share classes (BRK.B) are not codes; they read as before.
|
|
10
15
|
*/
|
|
11
16
|
export interface TerminalListingCode {
|
|
12
17
|
/** The code as typed, trimmed: `WFC.N`, `JPM US Equity`. */
|
|
13
18
|
typed: string;
|
|
14
|
-
/** The
|
|
19
|
+
/** The symbol, with a US share class after a dot: `WFC`, `BRK.B`, `0700`, `^GSPC`. */
|
|
15
20
|
symbol: string;
|
|
16
|
-
/** The canonical code of the venue the code names; "" for Bloomberg's US composite
|
|
21
|
+
/** The canonical code of the venue the code names; "" for Bloomberg's US composite and for a code that names no venue (SPX Index). */
|
|
17
22
|
exchange: string;
|
|
18
|
-
/** `WFC:NYSE`, or `JPM` for the US composite. */
|
|
23
|
+
/** `WFC:NYSE`, `VOD:LSE`, or `JPM` for the US composite. */
|
|
19
24
|
key: string;
|
|
20
25
|
/** Which terminal writes it so: a Bloomberg code is words, which a fund's name can also be. */
|
|
21
26
|
terminal: "reuters" | "bloomberg";
|
|
27
|
+
/** Bloomberg's market code, in capitals (`LN`); absent for a Reuters code and an index, a currency or a future. */
|
|
28
|
+
market?: string;
|
|
29
|
+
/** Bloomberg's yellow key, when the code is one: typed, or the Equity a market code implies. */
|
|
30
|
+
yellowKey?: BloombergYellowKey;
|
|
31
|
+
/**
|
|
32
|
+
* Further listings the code can name, tried in order when search does not
|
|
33
|
+
* list the first: VOLV.B:SFB for `VOLVB SS` (Bloomberg glues a Nordic class
|
|
34
|
+
* on), RY:TSXV for `RY CN` (Canada is Toronto, then the Venture exchange).
|
|
35
|
+
*/
|
|
36
|
+
alternatives?: readonly TerminalListing[];
|
|
22
37
|
}
|
|
23
38
|
|
|
24
|
-
|
|
39
|
+
export interface TerminalListing {
|
|
40
|
+
symbol: string;
|
|
41
|
+
exchange: string;
|
|
42
|
+
key: string;
|
|
43
|
+
}
|
|
25
44
|
|
|
26
|
-
/**
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
UQ: "NASDAQ",
|
|
32
|
-
UR: "NASDAQ",
|
|
33
|
-
UA: "AMEX",
|
|
34
|
-
UP: "ARCA",
|
|
35
|
-
UF: "BATS",
|
|
45
|
+
/** The yellow keys the terminal reads. Govt, Corp, Mtge, Muni, Pfd and M-Mkt name securities no source here quotes. */
|
|
46
|
+
type BloombergYellowKey = "Equity" | "Index" | "Curncy" | "Comdty";
|
|
47
|
+
|
|
48
|
+
const YELLOW_KEYS: Readonly<Record<string, BloombergYellowKey>> = {
|
|
49
|
+
equity: "Equity", index: "Index", curncy: "Curncy", comdty: "Comdty",
|
|
36
50
|
};
|
|
37
51
|
|
|
52
|
+
interface BloombergMarket {
|
|
53
|
+
/**
|
|
54
|
+
* The venues, as the shared exchange-notation table's canonical codes, in
|
|
55
|
+
* the order tried; "" is a US listing, named by its bare symbol.
|
|
56
|
+
*/
|
|
57
|
+
venues: readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* How a local symbol differs from Bloomberg's there: a Nordic share class
|
|
60
|
+
* glued on (VOLVB is VOLV.B), a code without its leading zeros (700 is
|
|
61
|
+
* 0700), the China composite's venue read from the code (6 is Shanghai).
|
|
62
|
+
*/
|
|
63
|
+
local?: "nordic-class" | "pad4" | "china";
|
|
64
|
+
/** Where Bloomberg's ticker is not the venue's own code (Maybank is MAY MK, 1155 on Bursa): what to type instead. */
|
|
65
|
+
hint?: string;
|
|
66
|
+
/** A market no source here quotes, named for the refusal: the Philippine Stock Exchange. Its `venues` are empty. */
|
|
67
|
+
name?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const at = (...venues: string[]): BloombergMarket => ({ venues });
|
|
71
|
+
const US_COMPOSITE = at("");
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Bloomberg's market codes, checked against OpenFIGI (Bloomberg's open
|
|
75
|
+
* symbology) with a known listing on each venue. Every venue is one the
|
|
76
|
+
* exchange-notation table names, or the code search lists a venue by where
|
|
77
|
+
* the table has none yet (ISE, JAKARTA, SET, BURSAMY); a parity test holds
|
|
78
|
+
* both, so a code reads as the same venue a typed `SYM:EXCH` does.
|
|
79
|
+
*/
|
|
80
|
+
export const BLOOMBERG_MARKETS: Readonly<Record<string, BloombergMarket>> = {
|
|
81
|
+
US: US_COMPOSITE,
|
|
82
|
+
UV: US_COMPOSITE,
|
|
83
|
+
UN: at("NYSE"),
|
|
84
|
+
UW: at("NASDAQ"),
|
|
85
|
+
UQ: at("NASDAQ"),
|
|
86
|
+
UR: at("NASDAQ"),
|
|
87
|
+
UA: at("AMEX"),
|
|
88
|
+
UP: at("ARCA"),
|
|
89
|
+
UF: at("BATS"),
|
|
90
|
+
LN: at("LSE"),
|
|
91
|
+
GY: at("XETRA"),
|
|
92
|
+
GR: at("XETRA"),
|
|
93
|
+
GF: at("FWB2"),
|
|
94
|
+
FP: at("EPA"),
|
|
95
|
+
NA: at("AMS"),
|
|
96
|
+
BB: at("BRU"),
|
|
97
|
+
PL: at("LIS"),
|
|
98
|
+
ID: at("ISE"),
|
|
99
|
+
IM: at("BIT"),
|
|
100
|
+
SM: at("MCE"),
|
|
101
|
+
SW: at("SWX"),
|
|
102
|
+
SE: at("SWX"),
|
|
103
|
+
SS: { venues: ["SFB"], local: "nordic-class" },
|
|
104
|
+
DC: { venues: ["CPH"], local: "nordic-class" },
|
|
105
|
+
FH: { venues: ["HEL"], local: "nordic-class" },
|
|
106
|
+
NO: { venues: ["OSL"], local: "nordic-class" },
|
|
107
|
+
AV: at("VIE"),
|
|
108
|
+
PW: at("WSE"),
|
|
109
|
+
CP: at("PSE"),
|
|
110
|
+
JT: at("JPX"),
|
|
111
|
+
JP: at("JPX"),
|
|
112
|
+
HK: { venues: ["HKEX"], local: "pad4" },
|
|
113
|
+
CH: { venues: ["SSE", "SZSE"], local: "china" },
|
|
114
|
+
CG: at("SSE"),
|
|
115
|
+
CS: at("SZSE"),
|
|
116
|
+
KS: at("KRX"),
|
|
117
|
+
KQ: at("KOSDAQ"),
|
|
118
|
+
TT: at("TWSE", "TPEX"),
|
|
119
|
+
IN: at("NSE"),
|
|
120
|
+
IS: at("NSE"),
|
|
121
|
+
IB: at("BSE"),
|
|
122
|
+
SP: { venues: ["SGX"], hint: "Bloomberg and SGX codes differ there: type the SGX code, such as D05 SP for DBS." },
|
|
123
|
+
MK: { venues: ["BURSAMY"], hint: "Bloomberg and Bursa Malaysia codes differ there: type the Bursa code, such as 1155 MK for Maybank." },
|
|
124
|
+
IJ: at("JAKARTA"),
|
|
125
|
+
TB: at("SET"),
|
|
126
|
+
PM: { venues: [], name: "Philippine Stock Exchange" },
|
|
127
|
+
AU: at("ASX"),
|
|
128
|
+
NZ: at("NZX"),
|
|
129
|
+
CN: at("TSX", "TSXV"),
|
|
130
|
+
CT: at("TSX"),
|
|
131
|
+
CV: at("TSXV"),
|
|
132
|
+
MM: at("BMV"),
|
|
133
|
+
BZ: at("B3"),
|
|
134
|
+
BS: at("B3"),
|
|
135
|
+
AR: at("BYMA"),
|
|
136
|
+
SJ: at("JSE"),
|
|
137
|
+
IT: at("TASE"),
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/** Bloomberg's index tickers the quote sources carry, by the symbol each is quoted as. */
|
|
141
|
+
const BLOOMBERG_INDICES: Readonly<Record<string, string>> = {
|
|
142
|
+
SPX: "^GSPC", INDU: "^DJI", CCMP: "^IXIC", NDX: "^NDX", RTY: "^RUT", VIX: "^VIX",
|
|
143
|
+
UKX: "^FTSE", DAX: "^GDAXI", CAC: "^FCHI", SX5E: "^STOXX50E", SMI: "^SSMI", AEX: "^AEX", IBEX: "^IBEX",
|
|
144
|
+
NKY: "^N225", HSI: "^HSI", KOSPI: "^KS11", TWSE: "^TWII", SENSEX: "^BSESN", NIFTY: "^NSEI", FSSTI: "^STI",
|
|
145
|
+
AS51: "^AXJO", SPTSX: "^GSPTSE", MEXBOL: "^MXX", IBOV: "^BVSP", DXY: "DX-Y.NYB",
|
|
146
|
+
USGG5YR: "^FVX", USGG10YR: "^TNX", USGG30YR: "^TYX",
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/** Index and volatility futures Bloomberg writes with the Index key (ES1 Index, DM1 Index, UX1 Index), by the root quoted here. */
|
|
150
|
+
const BLOOMBERG_INDEX_FUTURE_ROOTS: Readonly<Record<string, string>> = {
|
|
151
|
+
ES: "ES", NQ: "NQ", RTY: "RTY", DM: "YM", YM: "YM", UX: "VX", VX: "VX",
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/** Futures roots Bloomberg spells its own way (CO is Brent); the quote service reads these as its own roots. */
|
|
155
|
+
const BLOOMBERG_FUTURES_ALIASES: ReadonlySet<string> = new Set([
|
|
156
|
+
"TY", "US", "FV", "TU", "WN", "DM", "FF", "SFR", "CO", "XB", "LC", "LH", "FC", "SM", "BO", "KW",
|
|
157
|
+
]);
|
|
158
|
+
|
|
159
|
+
/** "EUR Curncy" is the dollar rate in market convention: these as XXXUSD, every other currency as USDXXX. */
|
|
160
|
+
const DOLLAR_BASE_CURRENCIES: ReadonlySet<string> = new Set(["EUR", "GBP", "AUD", "NZD"]);
|
|
161
|
+
|
|
162
|
+
/** Bloomberg writes bitcoin as XBT. */
|
|
163
|
+
const BLOOMBERG_CRYPTO: Readonly<Record<string, string>> = { XBT: "BTC-USD", XBTUSD: "BTC-USD" };
|
|
164
|
+
|
|
165
|
+
const REUTERS_VENUES: Record<string, string> = { N: "NYSE", O: "NASDAQ", OQ: "NASDAQ" };
|
|
166
|
+
|
|
38
167
|
/** `WFC.N`, `BRKb.N` (class B, in lower case as Reuters writes it), `wfc.n`, `AAPL.OQ`. */
|
|
39
168
|
const REUTERS_CODE = /^([A-Za-z]{1,6})\.(N|O|OQ)$/i;
|
|
40
169
|
/** A root in capitals with one lower-case letter after it: the letter is the share class (BRKb). */
|
|
41
170
|
const REUTERS_CLASS = /^([A-Z]{1,5})([a-z])$/;
|
|
42
|
-
/**
|
|
43
|
-
const
|
|
171
|
+
/** A Bloomberg ticker: letters and digits, a share class after a slash (BRK/B, BT/A), or BP/ as BP trades. */
|
|
172
|
+
const BLOOMBERG_ROOT = /^([A-Za-z0-9]{1,12})(?:\/([A-Za-z]{1,2})?)?$/;
|
|
173
|
+
|
|
174
|
+
/** A Bloomberg ticker's root and share class; a slash after one letter is a ratio or an abbreviation (P/E, N/A, Y/Y), never a class. */
|
|
175
|
+
function bloombergRoot(word: string): { ticker: string; shareClass: string | undefined } | null {
|
|
176
|
+
const root = BLOOMBERG_ROOT.exec(word);
|
|
177
|
+
if (!root || (word.includes("/") && root[1]!.length < 2)) return null;
|
|
178
|
+
return { ticker: root[1]!, shareClass: root[2] };
|
|
179
|
+
}
|
|
180
|
+
/** A market code: two letters. */
|
|
181
|
+
const MARKET_CODE = /^[A-Za-z]{2}$/;
|
|
182
|
+
|
|
183
|
+
function keyOf(symbol: string, exchange: string): TerminalListing {
|
|
184
|
+
return { symbol, exchange, key: exchange ? `${symbol}:${exchange}` : symbol };
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** The parts of a code written the Bloomberg way, read or not: `VOD LN Equity` is VOD, LN, Equity. */
|
|
188
|
+
interface BloombergParts {
|
|
189
|
+
typed: string;
|
|
190
|
+
/** The code's words before the yellow key. */
|
|
191
|
+
parts: string[];
|
|
192
|
+
yellowKey: BloombergYellowKey | null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function bloombergParts(typed: string): BloombergParts | null {
|
|
196
|
+
const words = typed.split(" ");
|
|
197
|
+
if (words.length < 2 || words.length > 3) return null;
|
|
198
|
+
const yellowKey = YELLOW_KEYS[words.at(-1)!.toLowerCase()] ?? null;
|
|
199
|
+
const parts = yellowKey ? words.slice(0, -1) : words;
|
|
200
|
+
return { typed, parts, yellowKey };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Whether a code with no yellow key is written as one: the root and the
|
|
205
|
+
* market in capitals (`VOD LN`, `7203 JP`). In lower case the same words
|
|
206
|
+
* are a name or a phrase (`apple us`, `nestle sw`), as they were.
|
|
207
|
+
*/
|
|
208
|
+
function writtenAsCode(typed: string): boolean {
|
|
209
|
+
return !/\p{Ll}/u.test(typed);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** The local spellings of a Bloomberg equity ticker on its market, in the order tried. */
|
|
213
|
+
function equityListings(root: string, shareClass: string | undefined, market: BloombergMarket): TerminalListing[] {
|
|
214
|
+
const ticker = root.toUpperCase();
|
|
215
|
+
// Shanghai's codes start with 6 (shares), 5 (funds) or 9 (B shares); Shenzhen's with 0, 1, 2 or 3.
|
|
216
|
+
const venues = market.local === "china" ? [/^[569]/.test(ticker) ? "SSE" : "SZSE"] : market.venues;
|
|
217
|
+
return venues.flatMap((venue) => {
|
|
218
|
+
// A share class reads as a broker writes it in the US (BRK-B, as `BRK/B` does) and after a dot abroad (BT.A), as search lists those.
|
|
219
|
+
if (shareClass) return [keyOf(`${ticker}${!venue || isUsListingExchange(venue) ? "-" : "."}${shareClass.toUpperCase()}`, venue)];
|
|
220
|
+
if (market.local === "pad4") return [keyOf(hongKongListingCode(ticker, venue), venue)];
|
|
221
|
+
const spellings = [keyOf(ticker, venue)];
|
|
222
|
+
// VOLVB is VOLV.B there; ABB, SAND and NOKIA end in a letter too, so the code as written goes first.
|
|
223
|
+
const nordic = market.local === "nordic-class" ? /^([A-Z0-9]{2,})([A-D])$/.exec(ticker) : null;
|
|
224
|
+
if (nordic) spellings.push(keyOf(`${nordic[1]}.${nordic[2]}`, venue));
|
|
225
|
+
return spellings;
|
|
226
|
+
}).filter((listing, index, all) => all.findIndex((other) => other.key === listing.key) === index);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function readBloombergEquity({ typed, parts, yellowKey }: BloombergParts): TerminalListingCode | null {
|
|
230
|
+
if (parts.length !== 2) return null;
|
|
231
|
+
const [rootWord, marketWord] = parts as [string, string];
|
|
232
|
+
const root = bloombergRoot(rootWord);
|
|
233
|
+
const code = marketWord.toUpperCase();
|
|
234
|
+
const market = BLOOMBERG_MARKETS[code];
|
|
235
|
+
if (!root || !market || !MARKET_CODE.test(marketWord)) return null;
|
|
236
|
+
// Without its yellow key a code is read only as written in capitals.
|
|
237
|
+
if (!yellowKey && !writtenAsCode(typed)) return null;
|
|
238
|
+
const [first, ...alternatives] = equityListings(root.ticker, root.shareClass, market);
|
|
239
|
+
if (!first) return null;
|
|
240
|
+
return {
|
|
241
|
+
typed, ...first, terminal: "bloomberg", market: code, yellowKey: "Equity",
|
|
242
|
+
...alternatives.length > 0 ? { alternatives } : {},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** `SPX Index`, and an index future Bloomberg keys as one: `ES1 Index`. */
|
|
247
|
+
function readBloombergIndex(typed: string, code: string): TerminalListingCode | null {
|
|
248
|
+
const index = BLOOMBERG_INDICES[code];
|
|
249
|
+
if (index) return { typed, ...keyOf(index, ""), terminal: "bloomberg", yellowKey: "Index" };
|
|
250
|
+
const future = /^([A-Z]{2,3})(\d{1,2})$/.exec(code);
|
|
251
|
+
const root = future ? BLOOMBERG_INDEX_FUTURE_ROOTS[future[1]!] : undefined;
|
|
252
|
+
return root ? genericFuture(typed, root, future![2]!, "Index") : null;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/** `EURUSD Curncy`, `JPY Curncy` (the dollar rate in market convention: USDJPY), `XBT Curncy`. */
|
|
256
|
+
function readBloombergCurrency(typed: string, code: string): TerminalListingCode | null {
|
|
257
|
+
const crypto = BLOOMBERG_CRYPTO[code];
|
|
258
|
+
if (crypto) return { typed, ...keyOf(crypto, ""), terminal: "bloomberg", yellowKey: "Curncy" };
|
|
259
|
+
const [base, quote] = /^[A-Z]{6}$/.test(code) ? [code.slice(0, 3), code.slice(3)]
|
|
260
|
+
: /^[A-Z]{3}$/.test(code) && code !== "USD" ? DOLLAR_BASE_CURRENCIES.has(code) ? [code, "USD"] : ["USD", code]
|
|
261
|
+
: [null, null];
|
|
262
|
+
if (!base || !quote || base === quote || !isCurrencyCode(base) || !isCurrencyCode(quote)) return null;
|
|
263
|
+
return { typed, ...keyOf(`${base}${quote}=X`, ""), terminal: "bloomberg", yellowKey: "Curncy" };
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* A Bloomberg generic future, `CL1 Comdty`, as the generic the quote service
|
|
268
|
+
* rolls at expiry the way Bloomberg's do (CL1E). A dated contract (CLZ6) is
|
|
269
|
+
* not read: no source here quotes one by that name.
|
|
270
|
+
*/
|
|
271
|
+
function readBloombergComdty(typed: string, code: string): TerminalListingCode | null {
|
|
272
|
+
const generic = /^([A-Z]{1,3})(\d{1,2})$/.exec(code);
|
|
273
|
+
if (!generic) return null;
|
|
274
|
+
const root = generic[1]!;
|
|
275
|
+
return futuresContractByCode(root) || BLOOMBERG_FUTURES_ALIASES.has(root) ? genericFuture(typed, root, generic[2]!, "Comdty") : null;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function genericFuture(typed: string, root: string, position: string, yellowKey: BloombergYellowKey): TerminalListingCode | null {
|
|
279
|
+
if (position.startsWith("0")) return null;
|
|
280
|
+
return { typed, ...keyOf(`${root}${position}E`, ""), terminal: "bloomberg", yellowKey };
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function readBloombergCode(typed: string): TerminalListingCode | null {
|
|
284
|
+
const code = bloombergParts(typed);
|
|
285
|
+
if (!code) return null;
|
|
286
|
+
if (code.yellowKey === "Equity" || !code.yellowKey) return readBloombergEquity(code);
|
|
287
|
+
if (code.parts.length !== 1) return null;
|
|
288
|
+
const word = code.parts[0]!.toUpperCase();
|
|
289
|
+
if (code.yellowKey === "Index") return readBloombergIndex(typed, word);
|
|
290
|
+
if (code.yellowKey === "Curncy") return readBloombergCurrency(typed, word);
|
|
291
|
+
return readBloombergComdty(typed, word);
|
|
292
|
+
}
|
|
44
293
|
|
|
45
294
|
function listing(
|
|
46
295
|
typed: string,
|
|
@@ -50,30 +299,157 @@ function listing(
|
|
|
50
299
|
terminal: TerminalListingCode["terminal"],
|
|
51
300
|
): TerminalListingCode {
|
|
52
301
|
const symbol = `${root.toUpperCase()}${shareClass ? `.${shareClass.toUpperCase()}` : ""}`;
|
|
53
|
-
return { typed, symbol, exchange,
|
|
302
|
+
return { typed, ...keyOf(symbol, exchange), terminal };
|
|
54
303
|
}
|
|
55
304
|
|
|
56
|
-
|
|
57
|
-
const typed = raw.trim().replace(/\s+/g, " ");
|
|
305
|
+
function readReutersCode(typed: string): TerminalListingCode | null {
|
|
58
306
|
const reuters = REUTERS_CODE.exec(typed);
|
|
59
|
-
if (reuters)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
307
|
+
if (!reuters) return null;
|
|
308
|
+
// Typed all in lower case (wfc.n), the last letter is part of the symbol, not a class.
|
|
309
|
+
const shareClass = REUTERS_CLASS.exec(reuters[1]!);
|
|
310
|
+
const exchange = REUTERS_VENUES[reuters[2]!.toUpperCase()]!;
|
|
311
|
+
return shareClass
|
|
312
|
+
? listing(typed, shareClass[1]!, shareClass[2], exchange, "reuters")
|
|
313
|
+
: listing(typed, reuters[1]!, undefined, exchange, "reuters");
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function normalizeTyped(raw: string): string {
|
|
317
|
+
return raw.trim().replace(/\s+/g, " ");
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* The one reader of a terminal's code: Reuters' (WFC.N) and Bloomberg's
|
|
322
|
+
* (`VOD LN`, `JPM US Equity`, `SPX Index`, `EURUSD Curncy`, `CL1 Comdty`).
|
|
323
|
+
* A Bloomberg equity code without its yellow key is read only in capitals.
|
|
324
|
+
* Null for anything else, and for a market code no venue here answers to
|
|
325
|
+
* (`unknownBloombergMarket` says which).
|
|
326
|
+
*/
|
|
327
|
+
export function readTerminalListingCode(raw: string): TerminalListingCode | null {
|
|
328
|
+
const typed = normalizeTyped(raw);
|
|
329
|
+
return readReutersCode(typed) ?? readBloombergCode(typed);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** `VOD LN` as typed, an `Equity` it left off implied: what a code's suggestion names. */
|
|
333
|
+
export interface UnknownBloombergMarket {
|
|
334
|
+
typed: string;
|
|
335
|
+
/** The ticker before the market code, in capitals: AAPL. */
|
|
336
|
+
symbol: string;
|
|
337
|
+
/** The market code no venue answers to, in capitals: GP. */
|
|
338
|
+
market: string;
|
|
339
|
+
/** Whether the code carried its yellow key, so its words cannot be two symbols. */
|
|
340
|
+
keyed: boolean;
|
|
341
|
+
/** The market's name when the code is a real one no source here quotes (PM, the Philippine Stock Exchange). */
|
|
342
|
+
unquoted?: string;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* A line written as a Bloomberg equity code whose market code no venue here
|
|
347
|
+
* answers to (`AAPL GP`, `KO PG`, `AAPL ZZ Equity`, `SM PM`): one entry,
|
|
348
|
+
* refused with a suggestion unless it is a company's name, never two
|
|
349
|
+
* symbols. Without the yellow key only capitals count, so `Apple Co` stays a
|
|
350
|
+
* name. Null for anything else.
|
|
351
|
+
*/
|
|
352
|
+
export function unknownBloombergMarket(raw: string): UnknownBloombergMarket | null {
|
|
353
|
+
const typed = normalizeTyped(raw);
|
|
354
|
+
const code = bloombergParts(typed);
|
|
355
|
+
if (!code || code.parts.length !== 2 || (code.yellowKey && code.yellowKey !== "Equity")) return null;
|
|
356
|
+
const [rootWord, marketWord] = code.parts as [string, string];
|
|
357
|
+
const market = BLOOMBERG_MARKETS[marketWord.toUpperCase()];
|
|
358
|
+
if (!bloombergRoot(rootWord) || !MARKET_CODE.test(marketWord) || (market && market.venues.length > 0)) return null;
|
|
359
|
+
if (!code.yellowKey && !writtenAsCode(typed)) return null;
|
|
360
|
+
return {
|
|
361
|
+
typed, symbol: rootWord.toUpperCase(), market: marketWord.toUpperCase(), keyed: !!code.yellowKey,
|
|
362
|
+
...market?.name ? { unquoted: market.name } : {},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/** What to type instead where Bloomberg's ticker is not the venue's own code (MK, SP); null elsewhere. */
|
|
367
|
+
export function bloombergMarketHint(market: string | undefined): string | null {
|
|
368
|
+
return (market && BLOOMBERG_MARKETS[market]?.hint) || null;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Whether the venue a code names is one the exchange table has no entry for yet (JAKARTA), so search alone can say what is listed there. */
|
|
372
|
+
export function isSearchOnlyVenue(exchange: string): boolean {
|
|
373
|
+
return !!exchange && !isKnownExchangeCode(exchange);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Company legal forms written after a name. Two words ending in one (`SAP SE`,
|
|
378
|
+
* `SIEMENS AG`, `NESTLE SA`) look like a Bloomberg code, and SE is also
|
|
379
|
+
* SIX Swiss's market code, so the name is looked up first.
|
|
380
|
+
*/
|
|
381
|
+
const LEGAL_FORMS: ReadonlySet<string> = new Set([
|
|
382
|
+
"AG", "SE", "SA", "NV", "AB", "AS", "BV", "KK", "OY", "CO", "PLC", "ASA", "OYJ", "SPA", "LTD", "INC", "CORP", "LLC",
|
|
383
|
+
"GMBH", "KGAA", "BHD", "TBK", "PCL",
|
|
384
|
+
]);
|
|
385
|
+
|
|
386
|
+
/** Two words, the second a company's legal form (`SAP SE`, `VOLVO AB`): a name to look up before reading it as a code. */
|
|
387
|
+
export function endsInLegalForm(raw: string): boolean {
|
|
388
|
+
const words = normalizeTyped(raw).split(" ");
|
|
389
|
+
return words.length === 2 && LEGAL_FORMS.has(words[1]!.toUpperCase());
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/** Bloomberg's code for each venue, the first the table lists for it: US for every US exchange, LN for LSE. */
|
|
393
|
+
const BLOOMBERG_CODE_OF_VENUE: ReadonlyMap<string, string> = (() => {
|
|
394
|
+
const codes = new Map<string, string>();
|
|
395
|
+
for (const [code, market] of Object.entries(BLOOMBERG_MARKETS)) {
|
|
396
|
+
if (market.local === "china") continue;
|
|
397
|
+
for (const venue of market.venues) if (venue && !codes.has(venue)) codes.set(venue, code);
|
|
72
398
|
}
|
|
73
|
-
return
|
|
399
|
+
return codes;
|
|
400
|
+
})();
|
|
401
|
+
|
|
402
|
+
/** `AAPL US` for AAPL on NASDAQ, `VOD LN` for VOD on LSE: a listing as Bloomberg writes it; null where no code here names its venue. */
|
|
403
|
+
export function bloombergCodeOf(symbol: string, exchange: string): string | null {
|
|
404
|
+
const code = isUsListingExchange(exchange) ? "US" : BLOOMBERG_CODE_OF_VENUE.get(exchange);
|
|
405
|
+
return code ? `${symbol} ${code}` : null;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/** A symbol typed nearly as a listing's: what was typed and the working form it reads as. */
|
|
409
|
+
export interface NearMissListing {
|
|
410
|
+
typed: string;
|
|
411
|
+
/** The working spelling: 0700.HK, 6758.T, BRK-B. */
|
|
412
|
+
symbol: string;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/** `BRK/B`: a US share class after a slash, as a broker writes it. One letter before the slash is a ratio or an abbreviation (P/E, N/A). */
|
|
416
|
+
const SLASH_CLASS = /^([A-Z]{2,5})\/([A-Z])$/;
|
|
417
|
+
/** `700.HK`: a Hong Kong code without its leading zeros. */
|
|
418
|
+
const SHORT_HONG_KONG = /^(\d{1,3})\.HK$/;
|
|
419
|
+
/** `6758.JP`, `MC.FP`: a symbol with a Bloomberg market code where a listing suffix goes. */
|
|
420
|
+
const MARKET_SUFFIX = /^([A-Z0-9]{1,10})\.([A-Z]{2})$/;
|
|
421
|
+
/**
|
|
422
|
+
* The market codes read after a dot: those no listing suffix uses and no one
|
|
423
|
+
* writes for another country. SE (Swiss, Sweden's ISO code), IT (Tel Aviv,
|
|
424
|
+
* Italy's), PL (Lisbon, Poland's), GR (Germany, Greece's) and the like stay
|
|
425
|
+
* as typed, and so does UN, which a Canadian unit trust writes (REI.UN).
|
|
426
|
+
*/
|
|
427
|
+
const MARKET_SUFFIX_CODES: ReadonlySet<string> = new Set([
|
|
428
|
+
"JP", "JT", "LN", "FP", "GY", "NA", "IM", "SM", "AU", "TT", "IN", "IB", "FH", "DC", "NO", "AV", "PW", "BB", "SJ", "MM", "BZ", "CT", "CV",
|
|
429
|
+
]);
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* A symbol written nearly as a listing is (`700.HK`, `6758.JP`, `BRK/B`),
|
|
433
|
+
* read as the working form (`0700.HK`, `6758.T`, `BRK-B`). A Bloomberg market
|
|
434
|
+
* code after the dot is that market's listing suffix (`MC.FP` is `MC.PA`),
|
|
435
|
+
* `MARKET_SUFFIX_CODES` only, so `600519.SS` stays Shanghai. Null for
|
|
436
|
+
* anything else.
|
|
437
|
+
*/
|
|
438
|
+
export function readNearMissListing(raw: string): NearMissListing | null {
|
|
439
|
+
const typed = raw.trim();
|
|
440
|
+
const upper = typed.toUpperCase();
|
|
441
|
+
const slash = SLASH_CLASS.exec(upper);
|
|
442
|
+
if (slash) return { typed, symbol: `${slash[1]}-${slash[2]}` };
|
|
443
|
+
const hongKong = SHORT_HONG_KONG.exec(upper);
|
|
444
|
+
if (hongKong) return { typed, symbol: `${hongKong[1]!.padStart(4, "0")}.HK` };
|
|
445
|
+
const suffixed = MARKET_SUFFIX.exec(upper);
|
|
446
|
+
if (!suffixed || !MARKET_SUFFIX_CODES.has(suffixed[2]!) || tickerHasListingSuffix(upper)) return null;
|
|
447
|
+
const venue = BLOOMBERG_MARKETS[suffixed[2]!]!.venues[0]!;
|
|
448
|
+
const symbol = getListingSymbol(suffixed[1]!, venue);
|
|
449
|
+
return tickerHasListingSuffix(symbol) ? { typed, symbol } : null;
|
|
74
450
|
}
|
|
75
451
|
|
|
76
452
|
/** `Read WFC.N as WFC:NYSE.`, for a command's warnings. */
|
|
77
|
-
export function terminalCodeReadAs(code: TerminalListingCode): string {
|
|
453
|
+
export function terminalCodeReadAs(code: Pick<TerminalListingCode, "typed" | "key">): string {
|
|
78
454
|
return `Read ${/\s/.test(code.typed) ? `"${code.typed}"` : code.typed} as ${code.key}.`;
|
|
79
455
|
}
|