{
  "version": 3,
  "sources": ["../src/ticker.ts", "../src/quotes.ts", "../src/render.ts"],
  "sourcesContent": ["import { join } from \"node:path\";\nimport {\n\ttype ExtensionAPI,\n\ttype ExtensionCommandContext,\n\ttype ExtensionContext,\n\tgetAgentDir,\n\ttype Theme,\n} from \"@earendil-works/pi-coding-agent\";\nimport type { AutocompleteItem } from \"@earendil-works/pi-tui\";\nimport { sanitizeTerminalText } from \"@narumitw/pi-tui-kit/terminal-text\";\nimport { fetchQuotes, QuoteRequestTimeoutError } from \"./quotes.js\";\nimport {\n\tformatTickerPlain,\n\tmergeQuoteResults,\n\trenderTickerWidget,\n\ttype TickerItem,\n\ttype TickerView,\n} from \"./render.js\";\nimport { createSettingsWriter, loadSettings, normalizeSymbols, parseSymbols } from \"./settings.js\";\n\nexport interface StockTickerDependencies {\n\tcreateSettingsWriter: typeof createSettingsWriter;\n\tloadSettings: typeof loadSettings;\n}\n\nexport const WIDGET_KEY = \"ticker\";\nexport const SETTINGS_FILE_NAME = \"pi-ticker.json\";\nexport const POLL_INTERVAL_MS = 30_000;\nexport const REQUEST_TIMEOUT_MS = 10_000;\n\nconst HELP = \"Usage: /ticker [SYMBOL ...] | /ticker refresh | /ticker reset | /ticker help\";\nconst COMPLETIONS: AutocompleteItem[] = [\n\t{ value: \"refresh\", label: \"refresh\", description: \"Refresh quotes now\" },\n\t{ value: \"reset\", label: \"reset\", description: \"Explain why no default reset is available\" },\n\t{ value: \"help\", label: \"help\", description: \"Show command usage\" },\n];\n\nexport default function stockTicker(\n\tpi: ExtensionAPI,\n\tdependencies: Partial<StockTickerDependencies> = {},\n): void {\n\tlet activeSession: ExtensionContext[\"sessionManager\"] | undefined;\n\tlet generation = 0;\n\tlet cycleVersion = 0;\n\tlet pollTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet requestController: AbortController | undefined;\n\tlet sessionController: AbortController | undefined;\n\tconst activeMenus = new Set<Promise<void>>();\n\tlet symbols: string[] = [];\n\tlet widgetEnabled = true;\n\tlet view: TickerView = createInitialView(symbols);\n\tconst settingsWriter = (dependencies.createSettingsWriter ?? createSettingsWriter)();\n\tconst readSettings = dependencies.loadSettings ?? loadSettings;\n\n\tconst ownsSession = (ctx: ExtensionContext, expectedGeneration = generation): boolean =>\n\t\tctx.sessionManager === activeSession && expectedGeneration === generation;\n\n\tconst publish = (ctx: ExtensionContext): void => {\n\t\tif (!ctx.hasUI || !ownsSession(ctx)) return;\n\t\tif (!widgetEnabled || view.items.length === 0) {\n\t\t\tctx.ui.setWidget(WIDGET_KEY, undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst snapshot = cloneView(view);\n\t\tif (ctx.mode === \"tui\") {\n\t\t\tctx.ui.setWidget(\n\t\t\t\tWIDGET_KEY,\n\t\t\t\t(_tui: unknown, theme: Theme) => ({\n\t\t\t\t\trender: (width: number) => renderTickerWidget(snapshot, theme, width),\n\t\t\t\t\tinvalidate: () => {},\n\t\t\t\t}),\n\t\t\t\t{ placement: \"aboveEditor\" },\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tctx.ui.setWidget(WIDGET_KEY, formatTickerPlain(snapshot), { placement: \"aboveEditor\" });\n\t};\n\n\tconst stopPolling = (): void => {\n\t\tcycleVersion += 1;\n\t\tif (pollTimer) clearTimeout(pollTimer);\n\t\tpollTimer = undefined;\n\t\trequestController?.abort();\n\t\trequestController = undefined;\n\t};\n\n\tconst clearWidget = (ctx: ExtensionContext): void => {\n\t\tif (ctx.hasUI) ctx.ui.setWidget(WIDGET_KEY, undefined);\n\t};\n\n\tconst runCycle = async (\n\t\tctx: ExtensionContext,\n\t\texpectedGeneration: number,\n\t\texpectedCycle: number,\n\t): Promise<void> => {\n\t\tif (!ownsSession(ctx, expectedGeneration) || expectedCycle !== cycleVersion) return;\n\t\tview = { ...view, loading: true };\n\t\tpublish(ctx);\n\n\t\tconst controller = new AbortController();\n\t\trequestController = controller;\n\t\tconst timeout = setTimeout(() => {\n\t\t\tcontroller.abort(new QuoteRequestTimeoutError());\n\t\t}, REQUEST_TIMEOUT_MS);\n\t\ttry {\n\t\t\tconst results = await fetchQuotes(symbols, controller.signal);\n\t\t\tif (!ownsSession(ctx, expectedGeneration) || expectedCycle !== cycleVersion) return;\n\t\t\tview = {\n\t\t\t\titems: mergeQuoteResults(view.items, results),\n\t\t\t\tloading: false,\n\t\t\t\tupdatedAt: results.some((result) => result.quote) ? Date.now() : view.updatedAt,\n\t\t\t};\n\t\t\tpublish(ctx);\n\t\t} catch {\n\t\t\tif (\n\t\t\t\t!controller.signal.aborted &&\n\t\t\t\townsSession(ctx, expectedGeneration) &&\n\t\t\t\texpectedCycle === cycleVersion\n\t\t\t) {\n\t\t\t\tview = {\n\t\t\t\t\titems: view.items.map((item) => ({\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\tstale: Boolean(item.quote),\n\t\t\t\t\t\terror: \"unavailable\",\n\t\t\t\t\t})),\n\t\t\t\t\tloading: false,\n\t\t\t\t\tupdatedAt: view.updatedAt,\n\t\t\t\t};\n\t\t\t\tpublish(ctx);\n\t\t\t}\n\t\t} finally {\n\t\t\tclearTimeout(timeout);\n\t\t\tif (requestController === controller) requestController = undefined;\n\t\t}\n\t};\n\n\tconst startCycle = (ctx: ExtensionContext, expectedGeneration = generation): void => {\n\t\tif (!ownsSession(ctx, expectedGeneration)) return;\n\t\tif (!widgetEnabled || symbols.length === 0) {\n\t\t\tstopPolling();\n\t\t\tpublish(ctx);\n\t\t\treturn;\n\t\t}\n\t\tif (pollTimer) clearTimeout(pollTimer);\n\t\trequestController?.abort();\n\t\tconst expectedCycle = ++cycleVersion;\n\t\tvoid runCycle(ctx, expectedGeneration, expectedCycle).finally(() => {\n\t\t\tif (!ownsSession(ctx, expectedGeneration) || expectedCycle !== cycleVersion) return;\n\t\t\tpollTimer = setTimeout(() => startCycle(ctx, expectedGeneration), POLL_INTERVAL_MS);\n\t\t});\n\t};\n\n\tconst openMenu = async (ctx: ExtensionCommandContext): Promise<void> => {\n\t\tconst controller = sessionController;\n\t\tconst expectedGeneration = generation;\n\t\tif (!controller || controller.signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\tconst running = (async () => {\n\t\t\tconst { showTickerMenu } = await import(\"./menu.js\");\n\t\t\tif (controller.signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\t\tawait showTickerMenu(ctx, {\n\t\t\t\tsignal: controller.signal,\n\t\t\t\tisCurrent: () => !controller.signal.aborted && ownsSession(ctx, expectedGeneration),\n\t\t\t\tgetSymbols: () => [...symbols],\n\t\t\t\tapplySymbols: async (nextSymbols, signal) => {\n\t\t\t\t\tif (signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\t\t\t\tconst normalized = normalizeSymbols(nextSymbols, true);\n\t\t\t\t\tawait settingsWriter.save(settingsPath(), normalized);\n\t\t\t\t\tif (signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\t\t\t\tsymbols = normalized;\n\t\t\t\t\tview = createInitialView(symbols);\n\t\t\t\t\tpublish(ctx);\n\t\t\t\t\tstartCycle(ctx, expectedGeneration);\n\t\t\t\t},\n\t\t\t\tgetWidgetEnabled: () => widgetEnabled,\n\t\t\t\tapplyWidgetEnabled: async (nextWidgetEnabled, signal) => {\n\t\t\t\t\tif (signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\t\t\t\tawait settingsWriter.saveWidgetEnabled(settingsPath(), nextWidgetEnabled);\n\t\t\t\t\tif (signal.aborted || !ownsSession(ctx, expectedGeneration)) return;\n\t\t\t\t\twidgetEnabled = nextWidgetEnabled;\n\t\t\t\t\tif (!widgetEnabled) stopPolling();\n\t\t\t\t\tpublish(ctx);\n\t\t\t\t\tif (widgetEnabled) startCycle(ctx, expectedGeneration);\n\t\t\t\t},\n\t\t\t\trefresh: () => {\n\t\t\t\t\tif (!ownsSession(ctx, expectedGeneration)) return;\n\t\t\t\t\tif (!widgetEnabled) {\n\t\t\t\t\t\tnotify(ctx, \"Ticker widget is disabled. Enable it before refreshing.\", \"warning\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstartCycle(ctx, expectedGeneration);\n\t\t\t\t},\n\t\t\t});\n\t\t})();\n\t\tactiveMenus.add(running);\n\t\ttry {\n\t\t\tawait running;\n\t\t} finally {\n\t\t\tactiveMenus.delete(running);\n\t\t}\n\t};\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsessionController?.abort();\n\t\tstopPolling();\n\t\tactiveSession = ctx.sessionManager;\n\t\tsessionController = new AbortController();\n\t\tconst expectedGeneration = ++generation;\n\t\tsymbols = [];\n\t\twidgetEnabled = true;\n\t\tview = createInitialView(symbols);\n\t\tpublish(ctx);\n\n\t\tawait settingsWriter.flush();\n\t\tif (!ownsSession(ctx, expectedGeneration)) return;\n\t\tconst loaded = await readSettings(settingsPath());\n\t\tif (!ownsSession(ctx, expectedGeneration)) return;\n\t\tsymbols = loaded.settings.symbols;\n\t\twidgetEnabled = loaded.settings.widgetEnabled;\n\t\tview = createInitialView(symbols);\n\t\tpublish(ctx);\n\t\tif (loaded.warning) notify(ctx, loaded.warning, \"warning\");\n\t\tif (ctx.hasUI && widgetEnabled && symbols.length > 0) startCycle(ctx, expectedGeneration);\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tif (!ownsSession(ctx)) return;\n\t\tsessionController?.abort();\n\t\tstopPolling();\n\t\tclearWidget(ctx);\n\t\tactiveSession = undefined;\n\t\tsessionController = undefined;\n\t\tgeneration += 1;\n\t\tawait Promise.allSettled([...activeMenus]);\n\t\tawait settingsWriter.flush();\n\t});\n\n\tpi.registerCommand(\"ticker\", {\n\t\tdescription: \"Show or change the stock ticker symbols\",\n\t\tgetArgumentCompletions: completeArguments,\n\t\thandler: async (argumentsText, ctx) => {\n\t\t\tif (!ctx.hasUI) {\n\t\t\t\tthrow new Error(\"The /ticker command requires TUI or RPC mode.\");\n\t\t\t}\n\t\t\tconst input = argumentsText.trim();\n\t\t\tif (!input) {\n\t\t\t\tawait openMenu(ctx);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst words = input.split(/\\s+/);\n\t\t\tconst route = words[0]?.toLowerCase();\n\t\t\tif ([\"help\", \"refresh\", \"reset\"].includes(route ?? \"\") && words.length > 1) {\n\t\t\t\tnotify(ctx, `${route} does not accept trailing arguments.`, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (route === \"help\") {\n\t\t\t\tnotify(ctx, HELP);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (route === \"refresh\") {\n\t\t\t\tif (!widgetEnabled) {\n\t\t\t\t\tnotify(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\"Ticker widget is disabled. Enable it with /ticker before refreshing.\",\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ownsSession(ctx)) startCycle(ctx);\n\t\t\t\tnotify(ctx, \"Refreshing stock quotes.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (route === \"reset\") {\n\t\t\t\tnotify(\n\t\t\t\t\tctx,\n\t\t\t\t\t\"No default ticker list is configured. Use /ticker SYMBOL ... instead.\",\n\t\t\t\t\t\"error\",\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet nextSymbols: string[];\n\t\t\ttry {\n\t\t\t\tnextSymbols = parseSymbols([input]);\n\t\t\t} catch (error) {\n\t\t\t\tnotify(ctx, errorMessage(error), \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait settingsWriter.save(settingsPath(), nextSymbols);\n\t\t\t} catch (error) {\n\t\t\t\tnotify(ctx, `Could not save stock ticker settings: ${errorMessage(error)}`, \"error\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!ownsSession(ctx)) return;\n\t\t\tsymbols = nextSymbols;\n\t\t\tview = createInitialView(symbols);\n\t\t\tpublish(ctx);\n\t\t\tstartCycle(ctx);\n\t\t\tnotify(ctx, `Stock ticker symbols: ${symbols.join(\" \")}`);\n\t\t},\n\t});\n}\n\nexport function settingsPath(): string {\n\treturn join(getAgentDir(), SETTINGS_FILE_NAME);\n}\n\nexport function completeArguments(prefix: string): AutocompleteItem[] | null {\n\tif (/\\s/.test(prefix)) return null;\n\tconst normalized = prefix.toLowerCase();\n\tconst matches = COMPLETIONS.filter((item) => item.value.toLowerCase().startsWith(normalized));\n\treturn matches.length > 0 ? matches : null;\n}\n\nfunction createInitialView(symbols: readonly string[]): TickerView {\n\treturn {\n\t\titems: symbols.map((symbol): TickerItem => ({ symbol })),\n\t\tloading: true,\n\t};\n}\n\nfunction cloneView(view: TickerView): TickerView {\n\treturn {\n\t\t...view,\n\t\titems: view.items.map((item) => ({ ...item, quote: item.quote && { ...item.quote } })),\n\t};\n}\n\nfunction notify(\n\tctx: ExtensionContext,\n\tmessage: string,\n\ttype: \"info\" | \"warning\" | \"error\" = \"info\",\n): void {\n\tif (ctx.hasUI) ctx.ui.notify(sanitizeTerminalText(message), type);\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "export const QUOTE_ENDPOINT = \"https://query1.finance.yahoo.com/v8/finance/chart\";\n\nexport interface Quote {\n\tsymbol: string;\n\tprice: number;\n\tpreviousClose: number;\n\tchange: number;\n\tchangePercent: number;\n\tcurrency?: string;\n\tmarketTime?: number;\n}\n\nexport interface QuoteResult {\n\tsymbol: string;\n\tquote?: Quote;\n\terror?: string;\n}\n\nexport class QuoteRequestTimeoutError extends Error {\n\tconstructor() {\n\t\tsuper(\"Quote request timed out.\");\n\t\tthis.name = \"QuoteRequestTimeoutError\";\n\t}\n}\n\nexport async function fetchQuotes(\n\tsymbols: readonly string[],\n\tsignal: AbortSignal,\n\tfetchImplementation: typeof fetch = fetch,\n): Promise<QuoteResult[]> {\n\treturn Promise.all(\n\t\tsymbols.map(async (symbol): Promise<QuoteResult> => {\n\t\t\ttry {\n\t\t\t\tconst quote = await fetchQuote(symbol, signal, fetchImplementation);\n\t\t\t\treturn { symbol, quote };\n\t\t\t} catch (error) {\n\t\t\t\tif (signal.aborted) {\n\t\t\t\t\tif (!(signal.reason instanceof QuoteRequestTimeoutError)) throw error;\n\t\t\t\t\treturn { symbol, error: signal.reason.message };\n\t\t\t\t}\n\t\t\t\treturn { symbol, error: errorMessage(error) };\n\t\t\t}\n\t\t}),\n\t);\n}\n\nasync function fetchQuote(\n\tsymbol: string,\n\tsignal: AbortSignal,\n\tfetchImplementation: typeof fetch,\n): Promise<Quote> {\n\tconst url = `${QUOTE_ENDPOINT}/${encodeURIComponent(symbol)}?interval=1m&range=1d`;\n\tconst response = await fetchImplementation(url, {\n\t\theaders: { \"User-Agent\": \"pi-ticker/1.0\" },\n\t\tsignal,\n\t});\n\tif (!response.ok) throw new Error(`Quote request failed with HTTP ${response.status}.`);\n\treturn parseQuote(symbol, await response.json());\n}\n\nexport function parseQuote(requestedSymbol: string, payload: unknown): Quote {\n\tconst chart = asRecord(payload)?.chart;\n\tconst result = asRecord(chart)?.result;\n\tconst first = Array.isArray(result) ? asRecord(result[0]) : undefined;\n\tconst meta = asRecord(first?.meta);\n\tconst price = finiteNumber(meta?.regularMarketPrice);\n\tconst previousClose = finiteNumber(meta?.previousClose) ?? finiteNumber(meta?.chartPreviousClose);\n\tif (price === undefined || previousClose === undefined || previousClose === 0) {\n\t\tthrow new Error(\"Quote response did not include a usable price and previous close.\");\n\t}\n\tconst change = price - previousClose;\n\tconst currency = safeCurrency(meta?.currency);\n\tconst marketTimeSeconds = finiteNumber(meta?.regularMarketTime);\n\treturn {\n\t\tsymbol: requestedSymbol,\n\t\tprice,\n\t\tpreviousClose,\n\t\tchange,\n\t\tchangePercent: (change / previousClose) * 100,\n\t\t...(currency ? { currency } : {}),\n\t\t...(marketTimeSeconds === undefined ? {} : { marketTime: marketTimeSeconds * 1000 }),\n\t};\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn value && typeof value === \"object\" && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction finiteNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction safeCurrency(value: unknown): string | undefined {\n\tif (value === \"GBp\") return value;\n\tif (typeof value !== \"string\") return undefined;\n\tconst normalized = value.toUpperCase();\n\treturn /^[A-Z]{3}$/.test(normalized) ? normalized : undefined;\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n", "import type { Theme } from \"@earendil-works/pi-coding-agent\";\nimport { truncateToWidth, visibleWidth, wrapTextWithAnsi } from \"@earendil-works/pi-tui\";\nimport type { Quote } from \"./quotes.js\";\n\nexport interface TickerItem {\n\tsymbol: string;\n\tquote?: Quote;\n\terror?: string;\n\tstale?: boolean;\n}\n\nexport interface TickerView {\n\titems: TickerItem[];\n\tloading: boolean;\n\tupdatedAt?: number;\n}\n\nexport function renderTickerWidget(view: TickerView, theme: Theme, width: number): string[] {\n\tconst renderWidth = Math.max(0, width);\n\tif (renderWidth === 0) return [\"\"];\n\tconst heading = renderHeading(view, theme);\n\tconst separator = theme.fg(\"dim\", \"  \u2502  \");\n\tconst quotes = packItems(\n\t\tview.items.map((item) => renderItem(item, theme)),\n\t\tseparator,\n\t\trenderWidth,\n\t);\n\treturn [\n\t\ttheme.fg(\"borderMuted\", \"\u2500\".repeat(renderWidth)),\n\t\t...fitLines(heading, renderWidth),\n\t\t...quotes,\n\t];\n}\n\nexport function formatTickerPlain(view: TickerView): string[] {\n\tconst status = view.loading\n\t\t? \"Stocks \u00B7 updating\"\n\t\t: view.updatedAt\n\t\t\t? `Stocks \u00B7 updated ${new Date(view.updatedAt).toLocaleTimeString()}`\n\t\t\t: \"Stocks\";\n\treturn [status, ...view.items.map(formatItemPlain)];\n}\n\nexport function mergeQuoteResults(\n\tcurrent: readonly TickerItem[],\n\tresults: ReadonlyArray<{ symbol: string; quote?: Quote; error?: string }>,\n): TickerItem[] {\n\tconst previous = new Map(current.map((item) => [item.symbol, item]));\n\treturn results.map((result) => {\n\t\tif (result.quote) return { symbol: result.symbol, quote: result.quote };\n\t\tconst existing = previous.get(result.symbol);\n\t\treturn existing?.quote\n\t\t\t? { symbol: result.symbol, quote: existing.quote, error: result.error, stale: true }\n\t\t\t: { symbol: result.symbol, error: result.error };\n\t});\n}\n\nfunction renderHeading(view: TickerView, theme: Theme): string {\n\tif (view.loading) return theme.fg(\"muted\", \"Stocks \u00B7 updating\u2026\");\n\tif (view.updatedAt) {\n\t\treturn theme.fg(\"muted\", `Stocks \u00B7 updated ${new Date(view.updatedAt).toLocaleTimeString()}`);\n\t}\n\treturn theme.fg(\"muted\", \"Stocks\");\n}\n\nfunction renderItem(item: TickerItem, theme: Theme): string {\n\tconst symbol = theme.fg(\"accent\", theme.bold(item.symbol));\n\tif (!item.quote) return `${symbol} ${theme.fg(\"error\", \"unavailable\")}`;\n\tconst changeRole = item.quote.change >= 0 ? \"success\" : \"error\";\n\tconst content = `${symbol} ${theme.fg(\"text\", formatPrice(item.quote))} ${theme.fg(\n\t\tchangeRole,\n\t\tformatChange(item.quote),\n\t)}`;\n\treturn item.stale ? `${content} ${theme.fg(\"warning\", \"stale\")}` : content;\n}\n\nfunction formatItemPlain(item: TickerItem): string {\n\tif (!item.quote) return `${item.symbol} unavailable`;\n\tconst content = `${item.symbol} ${formatPrice(item.quote)} ${formatChange(item.quote)}`;\n\treturn item.stale ? `${content} stale` : content;\n}\n\nfunction formatPrice(quote: Quote): string {\n\tconst value = formatMarketNumber(quote.price);\n\tif (quote.currency === \"GBp\") return `${value}p`;\n\treturn `${currencyPrefix(quote.currency)}${value}`;\n}\n\nfunction formatChange(quote: Quote): string {\n\tconst sign = quote.change >= 0 ? \"+\" : \"\";\n\treturn `${sign}${formatMarketNumber(quote.change)} (${sign}${quote.changePercent.toFixed(2)}%)`;\n}\n\nfunction formatMarketNumber(value: number): string {\n\tconst absolute = Math.abs(value);\n\tif (absolute === 0) return \"0.00\";\n\tconst magnitude = Math.floor(Math.log10(absolute));\n\tconst significantDecimals = 6 - magnitude - 1;\n\tconst formatted =\n\t\tsignificantDecimals > 8\n\t\t\t? value.toPrecision(6)\n\t\t\t: value.toFixed(Math.max(2, significantDecimals));\n\treturn trimNumericZeros(formatted);\n}\n\nfunction trimNumericZeros(value: string): string {\n\tconst [coefficient, exponent] = value.split(\"e\");\n\tconst [integer = value, fraction = \"\"] = coefficient?.split(\".\") ?? [value, \"\"];\n\tlet trimmedFraction = fraction;\n\tconst minimumFractionDigits = exponent === undefined ? 2 : 0;\n\twhile (trimmedFraction.length > minimumFractionDigits && trimmedFraction.endsWith(\"0\")) {\n\t\ttrimmedFraction = trimmedFraction.slice(0, -1);\n\t}\n\tconst trimmed = trimmedFraction ? `${integer}.${trimmedFraction}` : integer;\n\treturn exponent === undefined ? trimmed : `${trimmed}e${exponent}`;\n}\n\nfunction currencyPrefix(currency: string | undefined): string {\n\tswitch (currency) {\n\t\tcase \"USD\":\n\t\t\treturn \"$\";\n\t\tcase \"EUR\":\n\t\t\treturn \"\u20AC\";\n\t\tcase \"GBP\":\n\t\t\treturn \"\u00A3\";\n\t\tcase \"JPY\":\n\t\t\treturn \"\u00A5\";\n\t\tcase \"CAD\":\n\t\t\treturn \"C$\";\n\t\tcase \"HKD\":\n\t\t\treturn \"HK$\";\n\t\tcase \"TWD\":\n\t\t\treturn \"NT$\";\n\t\tdefault:\n\t\t\treturn currency ? `${currency} ` : \"\";\n\t}\n}\n\nfunction packItems(items: readonly string[], separator: string, width: number): string[] {\n\tconst rows: string[] = [];\n\tlet current = \"\";\n\tfor (const item of items) {\n\t\tif (visibleWidth(item) > width) {\n\t\t\tif (current) rows.push(current);\n\t\t\trows.push(...fitLines(item, width));\n\t\t\tcurrent = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tconst candidate = current ? `${current}${separator}${item}` : item;\n\t\tif (visibleWidth(candidate) <= width) {\n\t\t\tcurrent = candidate;\n\t\t\tcontinue;\n\t\t}\n\t\trows.push(current);\n\t\tcurrent = item;\n\t}\n\tif (current) rows.push(current);\n\treturn rows;\n}\n\nfunction fitLines(content: string, width: number): string[] {\n\treturn wrapTextWithAnsi(content, width).map((line) => truncateToWidth(line, width, \"\"));\n}\n"],
  "mappings": "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",
  "names": ["errorMessage"]
}
