{
  "version": 3,
  "sources": ["../../src/utils/constant.ts", "../../src/errors.ts", "../../src/utils/browser-script.ts", "../../src/utils/fetch.ts", "../../src/stocks/shared/capabilities.ts", "../../src/stocks/shared/kline.ts", "../../src/utils/array.ts", "../../src/utils/iconv.ts", "../../src/stocks/shared/normalize.ts", "../../src/stocks/shared/provider.ts", "../../src/stocks/base/utils/constant.ts", "../../src/stocks/eastmoney/transforms/common-code.ts", "../../src/stocks/eastmoney/transforms/stock.ts", "../../src/stocks/eastmoney/index.ts", "../../src/stocks/sina/transforms/stock.ts", "../../src/stocks/sina/utils/constant.ts", "../../src/stocks/shared/code-mapper.ts", "../../src/stocks/sina/transforms/common-code.ts", "../../src/stocks/sina/index.ts", "../../src/stocks/tencent/transforms/stock.ts", "../../src/stocks/tencent/utils/constant.ts", "../../src/stocks/tencent/transforms/common-code.ts", "../../src/stocks/tencent/index.ts", "../../src/stocks/auto/index.ts", "../../src/stocks/base/index.ts", "../../src/stocks/index.ts", "../../src/index.ts"],
  "sourcesContent": ["// \u9ED8\u8BA4\u80A1\u7968\u540D\u79F0\u5E38\u91CF\nexport const DEFAULT_NUMBER = 0;\nexport const DEFAULT_STRING = \"---\";\n\n// \u9ED8\u8BA4\u9519\u8BEF\u63D0\u793A\u5E38\u91CF\nexport const ERROR_API_CODE = \"\u8BF7\u68C0\u67E5\u80A1\u7968\u4EE3\u7801\u662F\u5426\u6B63\u786E\";\nexport const ERROR_COMMON_CODE = \"\u8BF7\u68C0\u67E5\u7EDF\u4E00\u4EE3\u7801\u662F\u5426\u6B63\u786E\";\n\nexport const ERROR_UNDEFINED_GET_STOCK = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u80A1\u7968\u6570\u636E\";\nexport const ERROR_UNDEFINED_GET_STOCKS = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u80A1\u7968\u6570\u636E\u7EC4\";\nexport const ERROR_UNDEFINED_GET_KLINES = \"\u672A\u5B9E\u73B0\u83B7\u53D6 K \u7EBF\u6570\u636E\";\nexport const ERROR_UNDEFINED_SEARCH_STOCK = \"\u672A\u5B9E\u73B0\u641C\u7D22\u80A1\u7968\u4EE3\u7801\";\n\nexport const ERROR_UNDEFINED_COMMON_CODE = \"\u672A\u5B9E\u73B0\u7EDF\u4E00\u4EE3\u7801\u8F6C\u6362\u80A1\u7968\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_SZ_COMMON_CODE =\n  \"\u672A\u5B9E\u73B0\u6DF1\u4EA4\u6240\u7EDF\u4E00\u4EE3\u7801\u8F6C\u6362\u80A1\u7968\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_SH_COMMON_CODE =\n  \"\u672A\u5B9E\u73B0\u4E0A\u4EA4\u6240\u7EDF\u4E00\u4EE3\u7801\u8F6C\u6362\u80A1\u7968\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_HK_COMMON_CODE =\n  \"\u672A\u5B9E\u73B0\u6E2F\u4EA4\u6240\u7EDF\u4E00\u4EE3\u7801\u8F6C\u6362\u80A1\u7968\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_US_COMMON_CODE =\n  \"\u672A\u5B9E\u73B0\u7F8E\u4EA4\u6240\u7EDF\u4E00\u4EE3\u7801\u8F6C\u6362\u80A1\u7968\u4EE3\u7801\";\n\nexport const ERROR_UNDEFINED_API_CODE = \"\u672A\u5B9E\u73B0\u80A1\u7968\u4EE3\u7801\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_API_CODES = \"\u672A\u5B9E\u73B0\u80A1\u7968\u4EE3\u7801\u7EC4\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\u7EC4\";\nexport const ERROR_UNDEFINED_SZ_API_CODE = \"\u672A\u5B9E\u73B0\u6DF1\u4EA4\u6240\u80A1\u7968\u4EE3\u7801\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_SH_API_CODE = \"\u672A\u5B9E\u73B0\u4E0A\u4EA4\u6240\u80A1\u7968\u4EE3\u7801\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_HK_API_CODE = \"\u672A\u5B9E\u73B0\u6E2F\u4EA4\u6240\u80A1\u7968\u4EE3\u7801\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_US_API_CODE = \"\u672A\u5B9E\u73B0\u7F8E\u4EA4\u6240\u80A1\u7968\u4EE3\u7801\u8F6C\u6362\u7EDF\u4E00\u4EE3\u7801\";\n\nexport const ERROR_UNDEFINED_GET_CODE = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u4EE3\u7801\";\nexport const ERROR_UNDEFINED_GET_NAME = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u540D\u79F0\";\nexport const ERROR_UNDEFINED_GET_NOW = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u73B0\u4EF7\";\nexport const ERROR_UNDEFINED_GET_LOW = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u6700\u4F4E\u4EF7\";\nexport const ERROR_UNDEFINED_GET_HIGH = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u6700\u9AD8\u4EF7\";\nexport const ERROR_UNDEFINED_GET_PERCENT = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u6DA8\u8DCC\";\nexport const ERROR_UNDEFINED_GET_YESTERDAY = \"\u672A\u5B9E\u73B0\u83B7\u53D6\u6628\u65E5\u6536\u76D8\u4EF7\";\n\n// \u9ED8\u8BA4\u80A1\u7968\u6570\u636E\u5E38\u91CF\nexport const DEFAULT_STOCK = {\n  code: DEFAULT_STRING,\n  name: DEFAULT_STRING,\n  percent: DEFAULT_NUMBER,\n\n  now: DEFAULT_NUMBER,\n  low: DEFAULT_NUMBER,\n  high: DEFAULT_NUMBER,\n  yesterday: DEFAULT_NUMBER,\n};\n", "export class StockApiError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = new.target.name;\n  }\n}\n\nexport class StockRequestError extends StockApiError {}\n\nexport class StockCodeError extends StockApiError {}\n\nexport class StockParseError extends StockApiError {}\n", "import { StockRequestError } from \"../errors\";\n\ntype BrowserNode = {\n  appendChild(node: BrowserScriptElement): unknown;\n  removeChild?(node: BrowserScriptElement): unknown;\n};\n\ntype BrowserScriptElement = {\n  async: boolean;\n  charset: string;\n  onerror: (() => void) | null;\n  onload: (() => void) | null;\n  parentNode?: BrowserNode | null;\n  src: string;\n};\n\ntype BrowserDocument = {\n  body?: BrowserNode;\n  createElement(tagName: string): BrowserScriptElement;\n  documentElement?: BrowserNode;\n  head?: BrowserNode;\n};\n\ntype BrowserRuntime = typeof globalThis & {\n  document?: BrowserDocument;\n  [key: string]: unknown;\n};\n\nexport function isBrowserRuntime(): boolean {\n  return Boolean((globalThis as BrowserRuntime).document);\n}\n\nexport async function loadBrowserScript(options: {\n  charset?: string;\n  timeout?: number;\n  url: string;\n}): Promise<void> {\n  const runtime = globalThis as BrowserRuntime;\n  const document = runtime.document;\n  const parent = document?.head || document?.body || document?.documentElement;\n\n  if (!document || !parent) {\n    throw new StockRequestError(\"Browser document is not available\");\n  }\n\n  await new Promise<void>((resolve, reject) => {\n    const script = document.createElement(\"script\");\n    const timeout = options.timeout || 15000;\n    const timeoutId = setTimeout(() => {\n      cleanup();\n      reject(new StockRequestError(`Script request timed out after ${timeout}ms`));\n    }, timeout);\n\n    function cleanup(): void {\n      clearTimeout(timeoutId);\n      script.onload = null;\n      script.onerror = null;\n      script.parentNode?.removeChild?.(script);\n    }\n\n    script.async = true;\n    script.charset = options.charset || \"utf-8\";\n    script.onload = () => {\n      cleanup();\n      resolve();\n    };\n    script.onerror = () => {\n      cleanup();\n      reject(new StockRequestError(\"Script request failed\"));\n    };\n    script.src = options.url;\n\n    parent.appendChild(script);\n  });\n}\n\nexport async function loadBrowserScriptValue(options: {\n  charset?: string;\n  timeout?: number;\n  url: string;\n  variableName: string;\n}): Promise<string> {\n  const runtime = globalThis as BrowserRuntime;\n\n  await loadBrowserScript(options);\n\n  const value = runtime[options.variableName];\n  delete runtime[options.variableName];\n\n  return typeof value === \"string\" ? value : \"\";\n}\n\nexport async function loadBrowserJsonp<T>(options: {\n  callbackParam?: string;\n  charset?: string;\n  timeout?: number;\n  url: string;\n}): Promise<T> {\n  const runtime = globalThis as BrowserRuntime;\n  const callbackParam = options.callbackParam || \"callback\";\n  const callbackName = `stockApiJsonp${Date.now()}${Math.floor(\n    Math.random() * 100000\n  )}`;\n  let result: T | undefined;\n\n  runtime[callbackName] = (value: T) => {\n    result = value;\n  };\n\n  try {\n    const url = appendQueryParam(options.url, callbackParam, callbackName);\n\n    await loadBrowserScript({\n      charset: options.charset,\n      timeout: options.timeout,\n      url,\n    });\n  } finally {\n    delete runtime[callbackName];\n  }\n\n  if (result === undefined) {\n    throw new StockRequestError(\"JSONP response did not invoke callback\");\n  }\n\n  return result;\n}\n\nfunction appendQueryParam(url: string, name: string, value: string): string {\n  const separator = url.includes(\"?\") ? \"&\" : \"?\";\n  return `${url}${separator}${encodeURIComponent(name)}=${encodeURIComponent(\n    value\n  )}`;\n}\n", "import { StockRequestError } from \"../errors\";\n\ntype HeaderValue = string | string[] | undefined;\n\nexport interface Response {\n  body: ArrayBuffer;\n  headers: Record<string, HeaderValue>;\n  status: number;\n  text: string;\n}\n\ntype RequestOptions = {\n  headers: Record<string, string>;\n  retries: number;\n  timeout: number;\n};\n\nclass RequestBuilder implements PromiseLike<Response> {\n  private options: RequestOptions = {\n    headers: {\n      Accept: \"*/*\",\n      \"User-Agent\": \"Mozilla/5.0 (compatible; stock-api/2.0)\",\n    },\n    retries: 2,\n    timeout: 15000,\n  };\n\n  constructor(private readonly url: string) {}\n\n  set(name: string, value: string): this {\n    this.options.headers[name] = value;\n    return this;\n  }\n\n  responseType(_type: string): this {\n    return this;\n  }\n\n  retries(count: number): this {\n    this.options.retries = count;\n    return this;\n  }\n\n  timeout(ms: number): this {\n    this.options.timeout = ms;\n    return this;\n  }\n\n  then<TResult1 = Response, TResult2 = never>(\n    onfulfilled?:\n      | ((value: Response) => TResult1 | PromiseLike<TResult1>)\n      | undefined\n      | null,\n    onrejected?:\n      | ((reason: unknown) => TResult2 | PromiseLike<TResult2>)\n      | undefined\n      | null\n  ): PromiseLike<TResult1 | TResult2> {\n    return this.send().then(onfulfilled, onrejected);\n  }\n\n  private async send(): Promise<Response> {\n    let lastError: unknown;\n\n    for (let attempt = 0; attempt <= this.options.retries; attempt++) {\n      try {\n        return await request(this.url, this.options);\n      } catch (error) {\n        lastError = error;\n      }\n    }\n\n    throw lastError;\n  }\n}\n\nasync function request(url: string, options: RequestOptions): Promise<Response> {\n  if (typeof globalThis.fetch !== \"function\") {\n    throw new StockRequestError(\"globalThis.fetch is not available\");\n  }\n\n  const controller = new AbortController();\n  const timeoutId = setTimeout(() => controller.abort(), options.timeout);\n\n  try {\n    const response = await globalThis.fetch(url, {\n      headers: createRequestHeaders(options.headers),\n      redirect: \"follow\",\n      signal: controller.signal,\n    });\n\n    const status = response.status;\n    const body = await response.arrayBuffer();\n    const result = {\n      body,\n      headers: getResponseHeaders(response.headers),\n      status,\n      text: new TextDecoder(\"utf-8\").decode(body),\n    };\n\n    if (!response.ok) {\n      throw new StockRequestError(`Request failed with status ${status}`);\n    }\n\n    return result;\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw new StockRequestError(`Request timed out after ${options.timeout}ms`);\n    }\n\n    throw error;\n  } finally {\n    clearTimeout(timeoutId);\n  }\n}\n\nfunction createRequestHeaders(headers: Record<string, string>): Headers {\n  const result = new Headers();\n\n  for (const [name, value] of Object.entries(headers)) {\n    if (isBrowserForbiddenHeader(name)) {\n      continue;\n    }\n\n    result.set(name, value);\n  }\n\n  return result;\n}\n\nfunction getResponseHeaders(headers: Headers): Record<string, HeaderValue> {\n  const result: Record<string, HeaderValue> = {};\n\n  headers.forEach((value, name) => {\n    result[name] = value;\n  });\n\n  return result;\n}\n\nfunction isBrowserForbiddenHeader(name: string): boolean {\n  if (!isBrowser()) {\n    return false;\n  }\n\n  return [\"referer\", \"user-agent\"].includes(name.toLowerCase());\n}\n\nfunction isBrowser(): boolean {\n  return \"window\" in globalThis && \"document\" in globalThis;\n}\n\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof DOMException && error.name === \"AbortError\";\n}\n\nconst requestClient = {\n  get(url: string) {\n    return new RequestBuilder(url);\n  },\n};\n\nexport default requestClient;\n", "import { StockRequestError } from \"../../errors\";\nimport { isBrowserRuntime } from \"../../utils/browser-script\";\nimport { StockSource } from \"../../types/utils/stock\";\n\nexport type StockProviderFeature = \"kline\" | \"quote\" | \"search\";\nexport type StockProviderRuntime = \"browser\" | \"node\";\nexport type StockProviderSupport = {\n  supported: boolean;\n  note?: string;\n};\n\nexport type StockProviderCapability = {\n  browser: Record<StockProviderFeature, StockProviderSupport>;\n  node: Record<StockProviderFeature, StockProviderSupport>;\n  source: Exclude<StockSource, \"base\">;\n};\n\nconst supported: StockProviderSupport = { supported: true };\nconst sinaBrowserUnsupported: StockProviderSupport = {\n  supported: false,\n  note:\n    \"Sina requires a valid Referer that browser JavaScript cannot set. Use stocks.auto, Node.js, or a backend proxy.\",\n};\n\nconst capabilities: Record<\n  Exclude<StockSource, \"base\">,\n  StockProviderCapability\n> = {\n  eastmoney: {\n    browser: {\n      kline: supported,\n      quote: supported,\n      search: supported,\n    },\n    node: {\n      kline: supported,\n      quote: supported,\n      search: supported,\n    },\n    source: \"eastmoney\",\n  },\n  sina: {\n    browser: {\n      kline: supported,\n      quote: sinaBrowserUnsupported,\n      search: sinaBrowserUnsupported,\n    },\n    node: {\n      kline: supported,\n      quote: supported,\n      search: supported,\n    },\n    source: \"sina\",\n  },\n  tencent: {\n    browser: {\n      kline: supported,\n      quote: supported,\n      search: supported,\n    },\n    node: {\n      kline: supported,\n      quote: supported,\n      search: supported,\n    },\n    source: \"tencent\",\n  },\n};\n\nexport function getProviderCapabilities(): StockProviderCapability[] {\n  return Object.values(capabilities).map((capability) => ({\n    browser: cloneRuntimeCapability(capability.browser),\n    node: cloneRuntimeCapability(capability.node),\n    source: capability.source,\n  }));\n}\n\nexport function assertProviderFeatureSupported(\n  source: Exclude<StockSource, \"base\">,\n  feature: StockProviderFeature\n): void {\n  const runtime: StockProviderRuntime = isBrowserRuntime() ? \"browser\" : \"node\";\n  const support = capabilities[source][runtime][feature];\n\n  if (!support.supported) {\n    throw new StockRequestError(\n      `${source} ${feature} is not available in ${runtime}. ${support.note || \"\"}`.trim()\n    );\n  }\n}\n\nfunction cloneRuntimeCapability(\n  capability: Record<StockProviderFeature, StockProviderSupport>\n): Record<StockProviderFeature, StockProviderSupport> {\n  return {\n    kline: { ...capability.kline },\n    quote: { ...capability.quote },\n    search: { ...capability.search },\n  };\n}\n", "import Kline, {\n  KlineAdjust,\n  KlineOptions,\n  KlinePeriod,\n} from \"../../types/utils/kline\";\nimport { StockSource } from \"../../types/utils/stock\";\n\nconst defaultOptions: Required<KlineOptions> = {\n  adjust: \"none\",\n  count: 120,\n  period: \"day\",\n};\n\nexport function normalizeKlineOptions(options: KlineOptions = {}): Required<KlineOptions> {\n  return {\n    adjust: normalizeAdjust(options.adjust),\n    count: normalizeCount(options.count),\n    period: normalizePeriod(options.period),\n  };\n}\n\nexport function parseKlineNumber(value: unknown): number {\n  const number = Number(value);\n  return Number.isFinite(number) ? number : 0;\n}\n\nexport function createKline(row: {\n  close: unknown;\n  date: string;\n  high: unknown;\n  low: unknown;\n  open: unknown;\n  source: Exclude<StockSource, \"base\">;\n  volume?: unknown;\n}): Kline {\n  const kline: Kline = {\n    close: parseKlineNumber(row.close),\n    date: row.date,\n    high: parseKlineNumber(row.high),\n    low: parseKlineNumber(row.low),\n    open: parseKlineNumber(row.open),\n    source: row.source,\n  };\n\n  if (row.volume !== undefined) {\n    kline.volume = parseKlineNumber(row.volume);\n  }\n\n  return kline;\n}\n\nexport function isAvailableKlines(klines: Kline[]): boolean {\n  return klines.length > 0;\n}\n\nfunction normalizePeriod(period: KlinePeriod | undefined): KlinePeriod {\n  return period || defaultOptions.period;\n}\n\nfunction normalizeAdjust(adjust: KlineAdjust | undefined): KlineAdjust {\n  return adjust || defaultOptions.adjust;\n}\n\nfunction normalizeCount(count: number | undefined): number {\n  if (count === undefined) {\n    return defaultOptions.count;\n  }\n\n  if (!Number.isFinite(count) || count <= 0) {\n    return defaultOptions.count;\n  }\n\n  return Math.floor(count);\n}\n", "export function uniq<T>(items: T[]): T[] {\n  return Array.from(new Set(items));\n}\n", "function normalizeEncoding(encoding: string): string {\n  return encoding.toLowerCase() === \"gbk\" ? \"gb18030\" : encoding;\n}\n\nconst iconv = {\n  decode(body: ArrayBuffer, encoding: string): string {\n    return new TextDecoder(normalizeEncoding(encoding)).decode(body);\n  },\n};\n\nexport default iconv;\n", "import Stock, { StockSource } from \"../../types/utils/stock\";\n\nexport function normalizeStock(\n  stock: Stock,\n  source: StockSource\n): Stock {\n  return {\n    ...stock,\n    source,\n  };\n}\n", "import { uniq } from \"../../utils/array\";\nimport { isBrowserRuntime } from \"../../utils/browser-script\";\nimport fetch from \"../../utils/fetch\";\nimport iconv from \"../../utils/iconv\";\nimport { DEFAULT_STOCK } from \"../../utils/constant\";\nimport StockApi from \"../../types/stocks\";\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport Stock, { StockSource } from \"../../types/utils/stock\";\nimport { assertProviderFeatureSupported } from \"./capabilities\";\nimport { normalizeStock } from \"./normalize\";\n\ntype CodeTransform = {\n  transform(code: string): string;\n  transforms(codes: string[]): string[];\n};\n\ntype Header = readonly [name: string, value: string];\n\ntype QuoteConfig = {\n  browserRequestText?: (apiCodes: string[]) => Promise<string>;\n  codeTransform: CodeTransform;\n  delimiter: string;\n  encoding: string;\n  headers?: readonly Header[];\n  getUrl(apiCodes: string[]): string;\n  isMissing(row: string, apiCode: string): boolean;\n  parseStock(code: string, params: string[]): Stock;\n};\n\ntype SearchConfig = {\n  browserRequestText?: (key: string) => Promise<string>;\n  encoding: string;\n  headers?: readonly Header[];\n  getUrl(key: string): string;\n  parseCodes(body: string): string[];\n};\n\ntype KlineConfig = {\n  getKlines(code: string, options?: KlineOptions): Promise<Kline[]>;\n};\n\nexport type StockProviderConfig = {\n  kline: KlineConfig;\n  source: Exclude<StockSource, \"base\">;\n  quote: QuoteConfig;\n  search: SearchConfig;\n};\n\nexport type StockInspectionStatus = \"empty\" | \"error\" | \"success\";\n\nexport type StockProviderInspection = {\n  code: string;\n  source: Exclude<StockSource, \"base\">;\n  status: StockInspectionStatus;\n  stock?: Stock;\n  error?: string;\n};\n\nexport interface StockProviderApi extends StockApi {\n  inspectStock(code: string): Promise<StockProviderInspection>;\n}\n\nexport function normalizeCodes(codes: string[]): string[] {\n  return uniq(codes.filter((code) => code !== \"\"));\n}\n\nexport function createMissingStock(code: string): Stock {\n  return { ...DEFAULT_STOCK, code };\n}\n\nexport function splitRows(body: string): string[] {\n  return body.split(\";\\n\").filter((row) => row !== \"\");\n}\n\nexport function getAssignedValue(row: string): string {\n  const [, value = \"\"] = row.split(\"=\");\n  return value;\n}\n\nexport function getDelimitedParams(row: string, delimiter: string): string[] {\n  return getAssignedValue(row).replace('\"', \"\").split(delimiter);\n}\n\nexport function createStockProvider(config: StockProviderConfig): StockProviderApi {\n  async function getStocks(codes: string[]): Promise<Stock[]> {\n    const normalizedCodes = normalizeCodes(codes);\n\n    if (normalizedCodes.length === 0) {\n      return [];\n    }\n\n    assertProviderFeatureSupported(config.source, \"quote\");\n\n    const apiCodes = config.quote.codeTransform.transforms(normalizedCodes);\n    const body = await requestQuoteText(config.quote, apiCodes);\n    const rows = splitRows(body);\n\n    return normalizedCodes.map((code, index) => {\n      const apiCode = apiCodes[index];\n      const row = rows.find((item) => item.includes(apiCode)) || \"\";\n\n      if (config.quote.isMissing(row, apiCode)) {\n        return createMissingStock(code);\n      }\n\n      const params = getDelimitedParams(row, config.quote.delimiter);\n      return config.quote.parseStock(code, params);\n    });\n  }\n\n  async function requestQuoteText(\n    quote: QuoteConfig,\n    apiCodes: string[]\n  ): Promise<string> {\n    if (isBrowserRuntime() && quote.browserRequestText) {\n      return quote.browserRequestText(apiCodes);\n    }\n\n    return requestText({\n      encoding: quote.encoding,\n      headers: quote.headers,\n      url: quote.getUrl(apiCodes),\n    });\n  }\n\n  const api: StockProviderApi = {\n    async getStock(code: string): Promise<Stock> {\n      const [stock] = await getStocks([code]);\n      return stock || createMissingStock(code);\n    },\n\n    getStocks,\n\n    getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n      return config.kline.getKlines(code, options);\n    },\n\n    async searchStocks(key: string): Promise<Stock[]> {\n      assertProviderFeatureSupported(config.source, \"search\");\n\n      const body = await requestSearchText(config.search, key);\n      return getStocks(config.search.parseCodes(body));\n    },\n\n    async inspectStock(code: string): Promise<StockProviderInspection> {\n      return createStockInspection(config.source, code, api.getStock);\n    },\n  };\n\n  return api;\n}\n\nasync function requestSearchText(\n  search: SearchConfig,\n  key: string\n): Promise<string> {\n  if (isBrowserRuntime() && search.browserRequestText) {\n    return search.browserRequestText(key);\n  }\n\n  return requestText({\n    encoding: search.encoding,\n    headers: search.headers,\n    url: search.getUrl(key),\n  });\n}\n\nexport async function createStockInspection(\n  source: Exclude<StockSource, \"base\">,\n  code: string,\n  getStock: (code: string) => Promise<Stock>\n): Promise<StockProviderInspection> {\n  try {\n    const stock = normalizeStock(await getStock(code), source);\n\n    return {\n      code,\n      source,\n      status: isAvailableStock(stock) ? \"success\" : \"empty\",\n      stock,\n    };\n  } catch (error) {\n    return {\n      code,\n      source,\n      status: \"error\",\n      error: getErrorMessage(error),\n    };\n  }\n}\n\nfunction isAvailableStock(stock: Stock | undefined): stock is Stock {\n  return Boolean(stock && stock.name !== DEFAULT_STOCK.name);\n}\n\nfunction getErrorMessage(error: unknown): string {\n  return error instanceof Error ? error.message : String(error);\n}\n\nasync function requestText(options: {\n  encoding: string;\n  headers?: readonly Header[];\n  url: string;\n}): Promise<string> {\n  const req = fetch.get(options.url).responseType(\"blob\");\n\n  for (const [name, value] of options.headers || []) {\n    req.set(name, value);\n  }\n\n  const res = await req;\n  return iconv.decode(res.body, options.encoding);\n}\n", "// \u9ED8\u8BA4\u4EA4\u6613\u6240\u5E38\u91CF\nexport const COMMON_SZ = \"SZ\"; // \u6DF1\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const COMMON_SH = \"SH\"; // \u4E0A\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const COMMON_HK = \"HK\"; // \u6E2F\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const COMMON_US = \"US\"; // \u7F8E\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\n", "import {\n  COMMON_SH,\n  COMMON_SZ,\n} from \"../../base/utils/constant\";\nimport { StockCodeError } from \"../../../errors\";\nimport { ERROR_COMMON_CODE } from \"../../../utils/constant\";\n\nexport function transformEastmoneyCommonCode(code: string): string {\n  const normalizedCode = String(code).toUpperCase();\n\n  if (normalizedCode.startsWith(COMMON_SH)) {\n    return `1.${normalizedCode.slice(COMMON_SH.length)}`;\n  }\n\n  if (normalizedCode.startsWith(COMMON_SZ)) {\n    return `0.${normalizedCode.slice(COMMON_SZ.length)}`;\n  }\n\n  throw new StockCodeError(ERROR_COMMON_CODE);\n}\n\nconst EastmoneyCommonCodeTransform = {\n  transform: transformEastmoneyCommonCode,\n  transforms(codes: string[]): string[] {\n    return codes.map(transformEastmoneyCommonCode);\n  },\n};\n\nexport default EastmoneyCommonCodeTransform;\n", "import Stock from \"../../../types/utils/stock\";\nimport { DEFAULT_NUMBER, DEFAULT_STRING } from \"../../../utils/constant\";\n\nexport type EastmoneyQuote = {\n  f2?: number | string;\n  f3?: number | string;\n  f12?: string;\n  f14?: string;\n  f15?: number | string;\n  f16?: number | string;\n  f18?: number | string;\n  f43?: number | string;\n  f44?: number | string;\n  f45?: number | string;\n  f57?: string;\n  f58?: string;\n  f60?: number | string;\n  f170?: number | string;\n};\n\nexport function parseEastmoneyStock(code: string, quote?: EastmoneyQuote): Stock {\n  const now = getEastmoneyStockNow(quote);\n  const yesterday = getEastmoneyStockYesterday(quote);\n  const percentValue = numberValue(quote?.f170 ?? quote?.f3);\n\n  return {\n    code: getEastmoneyStockCode(code),\n    name: getEastmoneyStockName(quote),\n    percent: percentValue ? percentValue / 100 : now && yesterday ? now / yesterday - 1 : DEFAULT_NUMBER,\n    now,\n    low: getEastmoneyStockLow(quote),\n    high: getEastmoneyStockHigh(quote),\n    yesterday,\n  };\n}\n\nexport function getEastmoneyStockCode(code: string): string {\n  return String(code).toUpperCase();\n}\n\nexport function getEastmoneyStockName(quote?: EastmoneyQuote): string {\n  return String(quote?.f58 || quote?.f14 || DEFAULT_STRING);\n}\n\nexport function getEastmoneyStockNow(quote?: EastmoneyQuote): number {\n  return numberValue(quote?.f43 ?? quote?.f2);\n}\n\nexport function getEastmoneyStockLow(quote?: EastmoneyQuote): number {\n  return numberValue(quote?.f45 ?? quote?.f16);\n}\n\nexport function getEastmoneyStockHigh(quote?: EastmoneyQuote): number {\n  return numberValue(quote?.f44 ?? quote?.f15);\n}\n\nexport function getEastmoneyStockYesterday(quote?: EastmoneyQuote): number {\n  return numberValue(quote?.f60 ?? quote?.f18);\n}\n\nexport function getEastmoneyStockPercent(quote?: EastmoneyQuote): number {\n  const percentValue = numberValue(quote?.f170 ?? quote?.f3);\n  if (percentValue) return percentValue / 100;\n\n  const now = getEastmoneyStockNow(quote);\n  const yesterday = getEastmoneyStockYesterday(quote);\n  return now && yesterday ? now / yesterday - 1 : DEFAULT_NUMBER;\n}\n\nconst EastmoneyStockTransform = {\n  parse: parseEastmoneyStock,\n  getCode: getEastmoneyStockCode,\n  getName: getEastmoneyStockName,\n  getNow: getEastmoneyStockNow,\n  getLow: getEastmoneyStockLow,\n  getHigh: getEastmoneyStockHigh,\n  getYesterday: getEastmoneyStockYesterday,\n  getPercent: getEastmoneyStockPercent,\n  getStock: parseEastmoneyStock,\n};\n\nfunction numberValue(value: number | string | undefined): number {\n  if (value === undefined || value === null || value === \"-\") return DEFAULT_NUMBER;\n\n  const next = Number(value);\n  return Number.isFinite(next) ? next : DEFAULT_NUMBER;\n}\n\nexport default EastmoneyStockTransform;\n", "import Stock from \"../../types/utils/stock\";\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport { isBrowserRuntime, loadBrowserJsonp } from \"../../utils/browser-script\";\nimport { DEFAULT_STOCK } from \"../../utils/constant\";\nimport fetch from \"../../utils/fetch\";\nimport { assertProviderFeatureSupported } from \"../shared/capabilities\";\nimport {\n  createKline,\n  normalizeKlineOptions,\n} from \"../shared/kline\";\nimport {\n  createStockInspection,\n  normalizeCodes,\n  StockProviderApi,\n} from \"../shared/provider\";\nimport EastmoneyCommonCodeTransform from \"./transforms/common-code\";\nimport {\n  EastmoneyQuote,\n  parseEastmoneyStock,\n} from \"./transforms/stock\";\n\ntype EastmoneyQuoteResponse = {\n  data?: EastmoneyQuote | null;\n};\n\ntype EastmoneySuggestItem = {\n  Code?: string;\n  Name?: string;\n  MktNum?: string;\n  QuoteID?: string;\n};\n\ntype EastmoneySuggestResponse = {\n  QuotationCodeTable?: {\n    Data?: EastmoneySuggestItem[];\n  };\n};\n\ntype EastmoneyKlineResponse = {\n  data?: {\n    klines?: string[];\n  } | null;\n};\n\nconst quoteFields = \"f43,f44,f45,f57,f58,f60,f170\";\nconst klineFields = \"f51,f52,f53,f54,f55,f56\";\nconst suggestToken = \"D43BF722C8E33BDC906FB84D85E326E8\";\nconst requestTimeoutMs = 4000;\nconst defaultPush2Host = \"push2delay.eastmoney.com\";\nconst defaultPush2HisHost = \"push2his.eastmoney.com\";\nconst push2HisHosts = [\n  defaultPush2HisHost,\n  \"7.push2his.eastmoney.com\",\n  \"33.push2his.eastmoney.com\",\n  \"63.push2his.eastmoney.com\",\n  \"91.push2his.eastmoney.com\",\n];\n\nfunction getSuggestUrl(key: string): string {\n  return `https://searchapi.eastmoney.com/api/suggest/get?input=${encodeURIComponent(\n    key\n  )}&type=14&token=${suggestToken}`;\n}\n\nasync function getStocks(codes: string[]): Promise<Stock[]> {\n  const normalizedCodes = normalizeCodes(codes);\n\n  if (normalizedCodes.length === 0) {\n    return [];\n  }\n\n  assertProviderFeatureSupported(\"eastmoney\", \"quote\");\n\n  return Promise.all(normalizedCodes.map(fetchOneStock));\n}\n\nconst Eastmoney: StockProviderApi = {\n  async getStock(code: string): Promise<Stock> {\n    const [stock] = await getStocks([code]);\n    return stock || createMissingStock(code);\n  },\n\n  getStocks,\n\n  async getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n    return getKlines(code, options);\n  },\n\n  async searchStocks(key: string): Promise<Stock[]> {\n    assertProviderFeatureSupported(\"eastmoney\", \"search\");\n\n    const response = await requestSuggestJson(key);\n    const codes = (response.QuotationCodeTable?.Data || [])\n      .map(parseSuggestCode)\n      .filter(Boolean) as string[];\n\n    return getStocks(codes);\n  },\n\n  async inspectStock(code: string) {\n    return createStockInspection(\"eastmoney\", code, Eastmoney.getStock);\n  },\n};\n\nasync function getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n  assertProviderFeatureSupported(\"eastmoney\", \"kline\");\n\n  const normalizedOptions = normalizeKlineOptions(options);\n  const apiCode = EastmoneyCommonCodeTransform.transform(code);\n  const url = `https://${defaultPush2HisHost}/api/qt/stock/kline/get?fields1=f1,f2,f3,f4,f5,f6&fields2=${klineFields}&ut=7eea3edcaed734bea9cbfc24409ed989&klt=${getKlinePeriodCode(\n    normalizedOptions.period\n  )}&fqt=${getAdjustCode(normalizedOptions.adjust)}&secid=${encodeURIComponent(\n    apiCode\n  )}&beg=19700101&end=20500101&lmt=${normalizedOptions.count}`;\n  const response = await requestJsonFromHosts<EastmoneyKlineResponse>(\n    url,\n    push2HisHosts\n  );\n  const rows = response.data?.klines || [];\n\n  return rows.map((line) => {\n    const [date, open, close, high, low, volume] = line.split(\",\");\n    return createKline({\n      close,\n      date,\n      high,\n      low,\n      open,\n      source: \"eastmoney\",\n      volume,\n    });\n  });\n}\n\nasync function fetchOneStock(code: string): Promise<Stock> {\n  const apiCode = EastmoneyCommonCodeTransform.transform(code);\n  const url = `https://${defaultPush2Host}/api/qt/stock/get?fltt=2&invt=2&secid=${encodeURIComponent(\n    apiCode\n  )}&fields=${quoteFields}`;\n  const quote = await requestQuote(url);\n\n  if (!quote?.f57 && !quote?.f58) {\n    return createMissingStock(code);\n  }\n\n  return parseEastmoneyStock(code, quote);\n}\n\nasync function requestQuote(url: string): Promise<EastmoneyQuote | undefined> {\n  const response = await requestJson<EastmoneyQuoteResponse>(url, 1);\n  const quote = response.data;\n\n  if (quote?.f57 || quote?.f58) {\n    return quote;\n  }\n\n  return undefined;\n}\n\nasync function requestJson<T>(url: string, retries = 0): Promise<T> {\n  let lastError: unknown;\n\n  for (let attempt = 0; attempt <= retries; attempt++) {\n    try {\n      const response = await fetch\n        .get(url)\n        .set(\"Accept\", \"application/json,text/plain,*/*\")\n        .set(\"Referer\", \"https://quote.eastmoney.com/\")\n        .retries(0)\n        .timeout(requestTimeoutMs);\n\n      return JSON.parse(response.text) as T;\n    } catch (error) {\n      lastError = error;\n    }\n  }\n\n  throw lastError;\n}\n\nfunction getKlinePeriodCode(period: KlineOptions[\"period\"]): string {\n  switch (period) {\n    case \"week\":\n      return \"102\";\n    case \"month\":\n      return \"103\";\n    case \"day\":\n    default:\n      return \"101\";\n  }\n}\n\nfunction getAdjustCode(adjust: KlineOptions[\"adjust\"]): string {\n  switch (adjust) {\n    case \"qfq\":\n      return \"1\";\n    case \"hfq\":\n      return \"2\";\n    case \"none\":\n    default:\n      return \"0\";\n  }\n}\n\nasync function requestSuggestJson(key: string): Promise<EastmoneySuggestResponse> {\n  const url = getSuggestUrl(key);\n\n  if (isBrowserRuntime()) {\n    return loadBrowserJsonp<EastmoneySuggestResponse>({\n      callbackParam: \"cb\",\n      url,\n    });\n  }\n\n  return requestJson<EastmoneySuggestResponse>(url, 1);\n}\n\nfunction parseSuggestCode(item: EastmoneySuggestItem): string {\n  const quoteId = item.QuoteID || \"\";\n  const code = item.Code || quoteId.split(\".\")[1] || \"\";\n  const market = item.MktNum || quoteId.split(\".\")[0] || \"\";\n\n  if (!code) return \"\";\n  if (market === \"1\") return `SH${code}`;\n  if (market === \"0\") return `SZ${code}`;\n  return \"\";\n}\n\nfunction createMissingStock(code: string): Stock {\n  return { ...DEFAULT_STOCK, code };\n}\n\nasync function requestJsonFromHosts<T>(\n  url: string,\n  hosts: string[]\n): Promise<T> {\n  let lastError: unknown;\n\n  for (const host of hosts) {\n    try {\n      return await requestJson<T>(replaceUrlHost(url, host));\n    } catch (error) {\n      lastError = error;\n    }\n  }\n\n  throw lastError;\n}\n\nfunction replaceUrlHost(url: string, host: string): string {\n  const parsedUrl = new URL(url);\n  parsedUrl.hostname = host;\n  return parsedUrl.toString();\n}\n\nexport default Eastmoney;\n", "import {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../../../stocks/base/utils/constant\";\nimport Stock from \"../../../types/utils/stock\";\nimport { DEFAULT_NUMBER, DEFAULT_STRING } from \"../../../utils/constant\";\n\ntype SinaMarketFields = {\n  name: number;\n  now: number;\n  low: number;\n  high: number;\n  yesterday: number;\n};\n\nconst fieldMap: Record<string, SinaMarketFields> = {\n  [COMMON_SH]: { name: 0, now: 3, low: 5, high: 4, yesterday: 2 },\n  [COMMON_SZ]: { name: 0, now: 3, low: 5, high: 4, yesterday: 2 },\n  [COMMON_HK]: { name: 1, now: 6, low: 5, high: 4, yesterday: 3 },\n  [COMMON_US]: { name: 0, now: 1, low: 7, high: 6, yesterday: 26 },\n};\n\nexport function parseSinaStock(code: string, params: string[]): Stock {\n  const fields = fieldMap[code.slice(0, 2)];\n  const now = fields ? numberAt(params, fields.now) : DEFAULT_NUMBER;\n  const yesterday = fields ? numberAt(params, fields.yesterday) : DEFAULT_NUMBER;\n\n  return {\n    code: String(code).toUpperCase(),\n    name: fields ? stringAt(params, fields.name) : DEFAULT_STRING,\n    percent: now ? now / yesterday - 1 : DEFAULT_NUMBER,\n    now,\n    low: fields ? numberAt(params, fields.low) : DEFAULT_NUMBER,\n    high: fields ? numberAt(params, fields.high) : DEFAULT_NUMBER,\n    yesterday,\n  };\n}\n\nexport function getSinaStockCode(code: string): string {\n  return String(code).toUpperCase();\n}\n\nexport function getSinaStockName(code: string, params: string[]): string {\n  const fields = fieldMap[code.slice(0, 2)];\n  return fields ? stringAt(params, fields.name) : DEFAULT_STRING;\n}\n\nexport function getSinaStockNow(code: string, params: string[]): number {\n  return getSinaStockNumber(code, params, \"now\");\n}\n\nexport function getSinaStockLow(code: string, params: string[]): number {\n  return getSinaStockNumber(code, params, \"low\");\n}\n\nexport function getSinaStockHigh(code: string, params: string[]): number {\n  return getSinaStockNumber(code, params, \"high\");\n}\n\nexport function getSinaStockYesterday(code: string, params: string[]): number {\n  return getSinaStockNumber(code, params, \"yesterday\");\n}\n\nexport function getSinaStockPercent(code: string, params: string[]): number {\n  const now = getSinaStockNow(code, params);\n  const yesterday = getSinaStockYesterday(code, params);\n  return now ? now / yesterday - 1 : DEFAULT_NUMBER;\n}\n\nconst SinaStockTransform = {\n  parse: parseSinaStock,\n  getCode: getSinaStockCode,\n  getName: getSinaStockName,\n  getNow: getSinaStockNow,\n  getLow: getSinaStockLow,\n  getHigh: getSinaStockHigh,\n  getYesterday: getSinaStockYesterday,\n  getPercent: getSinaStockPercent,\n  getStock: parseSinaStock,\n};\n\nfunction getSinaStockNumber(\n  code: string,\n  params: string[],\n  field: Exclude<keyof SinaMarketFields, \"name\">\n): number {\n  const fields = fieldMap[code.slice(0, 2)];\n  return fields ? numberAt(params, fields[field]) : DEFAULT_NUMBER;\n}\n\nfunction numberAt(params: string[], index: number): number {\n  return Number(params[index] || DEFAULT_NUMBER);\n}\n\nfunction stringAt(params: string[], index: number): string {\n  return String(params[index] || DEFAULT_STRING);\n}\n\nexport default SinaStockTransform;\n", "// \u9ED8\u8BA4\u4EA4\u6613\u6240\u5E38\u91CF\nexport const SINA_SZ = \"sz\"; // \u6DF1\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const SINA_SH = \"sh\"; // \u4E0A\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const SINA_HK = \"hk\"; // \u6E2F\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const SINA_US = \"gb_\"; // \u7F8E\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\n", "import {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../base/utils/constant\";\nimport { StockCodeError } from \"../../errors\";\n\ntype Market = \"SZ\" | \"SH\" | \"HK\" | \"US\";\n\nexport type CodeMapper = {\n  transform(code: string): string;\n  transforms(codes: string[]): string[];\n  SZTransform(code: string): string;\n  SHTransform(code: string): string;\n  HKTransform(code: string): string;\n  USTransform(code: string): string;\n};\n\ntype PrefixMap = Record<Market, string>;\ntype ErrorMap = Record<Market, string>;\n\nconst commonPrefixes: PrefixMap = {\n  SZ: COMMON_SZ,\n  SH: COMMON_SH,\n  HK: COMMON_HK,\n  US: COMMON_US,\n};\n\nexport function createCodeMapper(options: {\n  inputPrefixes: PrefixMap;\n  outputPrefixes: PrefixMap;\n  unknownError: string;\n  marketErrors?: ErrorMap;\n  formatOutputCode?: (market: Market, code: string) => string;\n}): CodeMapper {\n  function transformByMarket(market: Market, code: string): string {\n    const inputPrefix = options.inputPrefixes[market];\n\n    if (code.indexOf(inputPrefix) !== 0) {\n      throw new StockCodeError(\n        options.marketErrors?.[market] || options.unknownError\n      );\n    }\n\n    const value = code.replace(inputPrefix, \"\");\n    const normalizedValue = options.formatOutputCode\n      ? options.formatOutputCode(market, value)\n      : value;\n\n    return options.outputPrefixes[market] + normalizedValue;\n  }\n\n  const mapper: CodeMapper = {\n    transform(code: string): string {\n      const market = getMarket(code, options.inputPrefixes);\n\n      if (!market) {\n        throw new StockCodeError(options.unknownError);\n      }\n\n      return transformByMarket(market, code);\n    },\n\n    transforms(codes: string[]): string[] {\n      return codes.map((code) => mapper.transform(code));\n    },\n\n    SZTransform(code: string): string {\n      return transformByMarket(\"SZ\", code);\n    },\n\n    SHTransform(code: string): string {\n      return transformByMarket(\"SH\", code);\n    },\n\n    HKTransform(code: string): string {\n      return transformByMarket(\"HK\", code);\n    },\n\n    USTransform(code: string): string {\n      return transformByMarket(\"US\", code);\n    },\n  };\n\n  return mapper;\n}\n\nexport function createUnimplementedCodeMapper(options: {\n  unknownError: string;\n  marketErrors: ErrorMap;\n}): CodeMapper {\n  function fail(market: Market): never {\n    throw new StockCodeError(options.marketErrors[market]);\n  }\n\n  const mapper: CodeMapper = {\n    transform(code: string): string {\n      const market = getMarket(code, commonPrefixes);\n\n      if (!market) {\n        throw new StockCodeError(options.unknownError);\n      }\n\n      return fail(market);\n    },\n\n    transforms(codes: string[]): string[] {\n      return codes.map((code) => mapper.transform(code));\n    },\n\n    SZTransform(): string {\n      return fail(\"SZ\");\n    },\n\n    SHTransform(): string {\n      return fail(\"SH\");\n    },\n\n    HKTransform(): string {\n      return fail(\"HK\");\n    },\n\n    USTransform(): string {\n      return fail(\"US\");\n    },\n  };\n\n  return mapper;\n}\n\nexport { commonPrefixes };\n\nfunction getMarket(code: string, prefixes: PrefixMap): Market | undefined {\n  return (Object.keys(prefixes) as Market[]).find((market) =>\n    code.startsWith(prefixes[market])\n  );\n}\n", "import {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../../../stocks/base/utils/constant\";\nimport {\n  SINA_HK,\n  SINA_SH,\n  SINA_SZ,\n  SINA_US,\n} from \"../../../stocks/sina/utils/constant\";\nimport { ERROR_COMMON_CODE } from \"../../../utils/constant\";\nimport { createCodeMapper } from \"../../shared/code-mapper\";\n\nconst SinaCommonCodeTransform = createCodeMapper({\n  inputPrefixes: {\n    SZ: COMMON_SZ,\n    SH: COMMON_SH,\n    HK: COMMON_HK,\n    US: COMMON_US,\n  },\n  outputPrefixes: {\n    SZ: SINA_SZ,\n    SH: SINA_SH,\n    HK: SINA_HK,\n    US: SINA_US,\n  },\n  unknownError: ERROR_COMMON_CODE,\n  formatOutputCode(market, code) {\n    return market === \"US\" ? code.toLowerCase() : code;\n  },\n});\n\nexport default SinaCommonCodeTransform;\n", "// Stocks\nimport { parseSinaStock } from \"../../stocks/sina/transforms/stock\";\nimport SinaCommonCodeTransform from \"../../stocks/sina/transforms/common-code\";\n\n// Utils\nimport {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../../stocks/base/utils/constant\";\nimport {\n  createStockProvider,\n  getAssignedValue,\n  normalizeCodes,\n} from \"../shared/provider\";\nimport { assertProviderFeatureSupported } from \"../shared/capabilities\";\nimport {\n  createKline,\n  normalizeKlineOptions,\n} from \"../shared/kline\";\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport fetch from \"../../utils/fetch\";\n\ntype SinaKlineRow = {\n  close?: string;\n  day?: string;\n  high?: string;\n  low?: string;\n  open?: string;\n  volume?: string;\n};\n\nconst refererHeader = [[\"Referer\", \"https://finance.sina.com.cn/\"]] as const;\n\nfunction getQuoteUrl(apiCodes: string[]): string {\n  return `https://hq.sinajs.cn/list=${apiCodes.join(\",\")}`;\n}\n\nfunction getSearchUrl(key: string): string {\n  return `https://suggest3.sinajs.cn/suggest/type=2&key=${encodeURIComponent(\n    key\n  )}`;\n}\n\nfunction getKlineUrl(apiCode: string, options: Required<KlineOptions>): string {\n  return `https://quotes.sina.cn/cn/api/json_v2.php/CN_MarketData.getKLineData?symbol=${apiCode}&scale=${getScale(\n    options.period\n  )}&ma=no&datalen=${options.count}`;\n}\n\nasync function getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n  assertProviderFeatureSupported(\"sina\", \"kline\");\n\n  const normalizedOptions = normalizeKlineOptions(options);\n\n  if (normalizedOptions.adjust !== \"none\") {\n    return [];\n  }\n\n  const apiCode = SinaCommonCodeTransform.transform(code);\n  const rows = await requestJson<SinaKlineRow[]>(\n    getKlineUrl(apiCode, normalizedOptions)\n  );\n\n  if (!Array.isArray(rows)) {\n    return [];\n  }\n\n  return rows.map((row) =>\n    createKline({\n      close: row.close,\n      date: row.day || \"\",\n      high: row.high,\n      low: row.low,\n      open: row.open,\n      source: \"sina\",\n      volume: row.volume,\n    })\n  );\n}\n\nasync function requestJson<T>(url: string): Promise<T> {\n  const response = await fetch\n    .get(url)\n    .set(\"Accept\", \"application/json,text/plain,*/*\")\n    .set(\"Referer\", \"https://finance.sina.com.cn/\");\n\n  return JSON.parse(response.text) as T;\n}\n\nfunction getScale(period: KlineOptions[\"period\"]): string {\n  switch (period) {\n    case \"week\":\n      return \"1200\";\n    case \"month\":\n      return \"7200\";\n    case \"day\":\n    default:\n      return \"240\";\n  }\n}\n\n/**\n * \u65B0\u6D6A\u80A1\u7968\u4EE3\u7801\u63A5\u53E3\n */\nconst Sina = createStockProvider({\n  kline: { getKlines },\n  source: \"sina\",\n  quote: {\n    codeTransform: SinaCommonCodeTransform,\n    delimiter: \",\",\n    encoding: \"gb18030\",\n    headers: refererHeader,\n    getUrl(apiCodes) {\n      return getQuoteUrl(apiCodes);\n    },\n    isMissing(row) {\n      return getAssignedValue(row) === '\"\"';\n    },\n    parseStock(code, params) {\n      return parseSinaStock(code, params);\n    },\n  },\n  search: {\n    encoding: \"gb18030\",\n    headers: refererHeader,\n    getUrl(key) {\n      return getSearchUrl(key);\n    },\n    parseCodes(body) {\n      const rows = body\n        .replace('var suggestvalue=\"', \"\")\n        .replace('\";', \"\")\n        .split(\";\");\n\n      const codes = rows.flatMap((row) => {\n        const code = row.split(\",\")[0];\n\n        if (code.indexOf(\"us\") === 0) {\n          return [COMMON_US + code.replace(\"us\", \"\")];\n        }\n\n        if (code.indexOf(\"sz\") === 0) {\n          return [COMMON_SZ + code.replace(\"sz\", \"\")];\n        }\n\n        if (code.indexOf(\"sh\") === 0) {\n          return [COMMON_SH + code.replace(\"sh\", \"\")];\n        }\n\n        if (code.indexOf(\"hk\") === 0) {\n          return [COMMON_HK + code.replace(\"hk\", \"\")];\n        }\n\n        if (code.indexOf(\"of\") === 0) {\n          const fundCode = code.replace(\"of\", \"\");\n          return [COMMON_SZ + fundCode, COMMON_SH + fundCode];\n        }\n\n        return [];\n      });\n\n      return normalizeCodes(codes);\n    },\n  },\n});\n\nexport default Sina;\n", "import Stock from \"../../../types/utils/stock\";\nimport { DEFAULT_NUMBER, DEFAULT_STRING } from \"../../../utils/constant\";\n\nexport function parseTencentStock(code: string, params: string[]): Stock {\n  const now = getTencentStockNow(params);\n  const yesterday = getTencentStockYesterday(params);\n\n  return {\n    code: getTencentStockCode(code),\n    name: getTencentStockName(params),\n    percent: now ? now / yesterday - 1 : DEFAULT_NUMBER,\n    now,\n    low: getTencentStockLow(params),\n    high: getTencentStockHigh(params),\n    yesterday,\n  };\n}\n\nexport function getTencentStockCode(code: string): string {\n  return String(code).toUpperCase();\n}\n\nexport function getTencentStockName(params: string[]): string {\n  return String(params[1] || DEFAULT_STRING);\n}\n\nexport function getTencentStockNow(params: string[]): number {\n  return numberAt(params, 3);\n}\n\nexport function getTencentStockLow(params: string[]): number {\n  return numberAt(params, 34);\n}\n\nexport function getTencentStockHigh(params: string[]): number {\n  return numberAt(params, 33);\n}\n\nexport function getTencentStockYesterday(params: string[]): number {\n  return numberAt(params, 4);\n}\n\nexport function getTencentStockPercent(params: string[]): number {\n  const now = getTencentStockNow(params);\n  const yesterday = getTencentStockYesterday(params);\n  return now ? now / yesterday - 1 : DEFAULT_NUMBER;\n}\n\nconst TencentStockTransform = {\n  parse: parseTencentStock,\n  getCode: getTencentStockCode,\n  getName: getTencentStockName,\n  getNow: getTencentStockNow,\n  getLow: getTencentStockLow,\n  getHigh: getTencentStockHigh,\n  getYesterday: getTencentStockYesterday,\n  getPercent: getTencentStockPercent,\n  getStock: parseTencentStock,\n};\n\nfunction numberAt(params: string[], index: number): number {\n  return Number(params[index] || DEFAULT_NUMBER);\n}\n\nexport default TencentStockTransform;\n", "// \u9ED8\u8BA4\u4EA4\u6613\u6240\u5E38\u91CF\nexport const TENCENT_SZ = \"sz\"; // \u6DF1\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const TENCENT_SH = \"sh\"; // \u4E0A\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const TENCENT_HK = \"hk\"; // \u6E2F\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\nexport const TENCENT_US = \"us\"; // \u7F8E\u4EA4\u6240\u76F8\u5173\u5E38\u91CF\n", "import {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../../../stocks/base/utils/constant\";\nimport {\n  TENCENT_HK,\n  TENCENT_SH,\n  TENCENT_SZ,\n  TENCENT_US,\n} from \"../../../stocks/tencent/utils/constant\";\nimport { ERROR_COMMON_CODE } from \"../../../utils/constant\";\nimport { createCodeMapper } from \"../../shared/code-mapper\";\n\nconst TencentCommonCodeTransform = createCodeMapper({\n  inputPrefixes: {\n    SZ: COMMON_SZ,\n    SH: COMMON_SH,\n    HK: COMMON_HK,\n    US: COMMON_US,\n  },\n  outputPrefixes: {\n    SZ: TENCENT_SZ,\n    SH: TENCENT_SH,\n    HK: TENCENT_HK,\n    US: TENCENT_US,\n  },\n  unknownError: ERROR_COMMON_CODE,\n  formatOutputCode(market, code) {\n    return market === \"HK\" || market === \"US\" ? code.toUpperCase() : code;\n  },\n});\n\nexport default TencentCommonCodeTransform;\n", "// Stocks\nimport { parseTencentStock } from \"../../stocks/tencent/transforms/stock\";\nimport TencentCommonCodeTransform from \"../../stocks/tencent/transforms/common-code\";\n\n// Utils\nimport {\n  COMMON_HK,\n  COMMON_SH,\n  COMMON_SZ,\n  COMMON_US,\n} from \"../../stocks/base/utils/constant\";\nimport { createStockProvider, normalizeCodes } from \"../shared/provider\";\nimport { assertProviderFeatureSupported } from \"../shared/capabilities\";\nimport {\n  createKline,\n  normalizeKlineOptions,\n} from \"../shared/kline\";\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport fetch from \"../../utils/fetch\";\nimport { loadBrowserScriptValue } from \"../../utils/browser-script\";\n\ntype TencentKlineResponse = {\n  data?: Record<string, Record<string, string[][]>>;\n};\n\nfunction getSearchUrl(key: string): string {\n  return `https://smartbox.gtimg.cn/s3/?v=2&t=all&c=1&q=${encodeURIComponent(\n    key\n  )}`;\n}\n\nasync function requestBrowserSearchText(key: string): Promise<string> {\n  const value = await loadBrowserScriptValue({\n    charset: \"gbk\",\n    url: getSearchUrl(key),\n    variableName: \"v_hint\",\n  });\n\n  return `v_hint=\"${value}\"`;\n}\n\nasync function getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n  assertProviderFeatureSupported(\"tencent\", \"kline\");\n\n  const normalizedOptions = normalizeKlineOptions(options);\n  const apiCode = TencentCommonCodeTransform.transform(code);\n  const endpoint =\n    normalizedOptions.adjust === \"none\" ? \"kline/kline\" : \"fqkline/get\";\n  const adjustPrefix =\n    normalizedOptions.adjust === \"none\" ? \"\" : normalizedOptions.adjust;\n  const dataKey = `${adjustPrefix}${normalizedOptions.period}`;\n  const adjustParam =\n    normalizedOptions.adjust === \"none\" ? \"\" : `,${normalizedOptions.adjust}`;\n  const url = `https://web.ifzq.gtimg.cn/appstock/app/${endpoint}?param=${apiCode},${normalizedOptions.period},,,${normalizedOptions.count}${adjustParam}`;\n  const response = await requestJson<TencentKlineResponse>(url);\n  const rows = response.data?.[apiCode]?.[dataKey] || [];\n\n  return rows.map(([date, open, close, high, low, volume]) =>\n    createKline({\n      close,\n      date,\n      high,\n      low,\n      open,\n      source: \"tencent\",\n      volume,\n    })\n  );\n}\n\nasync function requestJson<T>(url: string): Promise<T> {\n  const response = await fetch.get(url).set(\"Accept\", \"application/json,text/plain,*/*\");\n  return JSON.parse(response.text) as T;\n}\n\n/**\n * \u817E\u8BAF\u80A1\u7968\u4EE3\u7801\u63A5\u53E3\n */\nconst Tencent = createStockProvider({\n  kline: { getKlines },\n  source: \"tencent\",\n  quote: {\n    codeTransform: TencentCommonCodeTransform,\n    delimiter: \"~\",\n    encoding: \"gbk\",\n    getUrl(apiCodes) {\n      return `https://qt.gtimg.cn/q=${apiCodes.join(\",\")}`;\n    },\n    isMissing(row, apiCode) {\n      return !row.includes(apiCode);\n    },\n    parseStock(code, params) {\n      return parseTencentStock(code, params);\n    },\n  },\n  search: {\n    browserRequestText: requestBrowserSearchText,\n    encoding: \"gbk\",\n    getUrl(key) {\n      return getSearchUrl(key);\n    },\n    parseCodes(body) {\n      const rows = body.replace('v_hint=\"', \"\").replace('\"', \"\").split(\"^\");\n      const codes = rows.map((row) => {\n        const [type, code] = row.split(\"~\");\n\n        switch (type) {\n          case \"sz\":\n            return COMMON_SZ + code;\n          case \"sh\":\n            return COMMON_SH + code;\n          case \"hk\":\n            return COMMON_HK + code;\n          case \"us\":\n            return COMMON_US + code.split(\".\")[0].toUpperCase();\n          default:\n            return \"\";\n        }\n      });\n\n      return normalizeCodes(codes);\n    },\n  },\n});\n\nexport default Tencent;\n", "import { DEFAULT_STOCK } from \"../../utils/constant\";\nimport StockApi from \"../../types/stocks\";\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport Stock, { StockSource } from \"../../types/utils/stock\";\nimport eastmoney from \"../eastmoney\";\nimport sina from \"../sina\";\nimport { normalizeStock } from \"../shared/normalize\";\nimport {\n  normalizeCodes,\n  StockProviderApi,\n  StockProviderInspection,\n} from \"../shared/provider\";\nimport tencent from \"../tencent\";\n\nexport type AutoStockProvider = {\n  name: Exclude<StockSource, \"base\">;\n  api: StockProviderApi;\n};\n\nexport type AutoStockInspection = {\n  code: string;\n  source: StockSource;\n  stock: Stock;\n  sources: StockProviderInspection[];\n};\n\nexport interface AutoStockApi extends StockApi {\n  inspectStock(code: string): Promise<AutoStockInspection>;\n}\n\nconst providers: AutoStockProvider[] = [\n  { name: \"tencent\", api: tencent },\n  { name: \"sina\", api: sina },\n  { name: \"eastmoney\", api: eastmoney },\n];\n\nexport function createAutoStockApi(autoProviders: AutoStockProvider[]): AutoStockApi {\n  const api: AutoStockApi = {\n    async getStock(code: string): Promise<Stock> {\n      return (await api.inspectStock(code)).stock;\n    },\n\n    async getStocks(codes: string[]): Promise<Stock[]> {\n      return Promise.all(normalizeCodes(codes).map((code) => api.getStock(code)));\n    },\n\n    async getKlines(code: string, options?: KlineOptions): Promise<Kline[]> {\n      for (const provider of getKlineProviders(autoProviders)) {\n        const klines = await getProviderKlines(provider, code, options);\n\n        if (klines.length > 0) {\n          return klines;\n        }\n      }\n\n      return [];\n    },\n\n    async searchStocks(key: string): Promise<Stock[]> {\n      for (const provider of autoProviders) {\n        const stocks = await searchProviderStocks(provider, key);\n        const availableStocks = stocks.filter(isAvailableStock);\n\n        if (availableStocks.length > 0) {\n          return availableStocks.map((stock) =>\n            normalizeStock(stock, provider.name)\n          );\n        }\n      }\n\n      return [];\n    },\n\n    async inspectStock(code: string): Promise<AutoStockInspection> {\n      const sources: StockProviderInspection[] = [];\n      let selectedStock: Stock | undefined;\n      let selectedSource: StockSource = \"base\";\n\n      for (const provider of autoProviders) {\n        const inspection = await provider.api.inspectStock(code);\n        sources.push(inspection);\n\n        if (!selectedStock && inspection.status === \"success\" && inspection.stock) {\n          selectedStock = inspection.stock;\n          selectedSource = inspection.source;\n        }\n      }\n\n      const stock = selectedStock || normalizeStock({ ...DEFAULT_STOCK, code }, \"base\");\n\n      return {\n        code,\n        source: selectedSource,\n        stock,\n        sources,\n      };\n    },\n  };\n\n  return api;\n}\n\nconst Auto = createAutoStockApi(providers);\n\nfunction getKlineProviders(autoProviders: AutoStockProvider[]): AutoStockProvider[] {\n  const order = new Map<AutoStockProvider[\"name\"], number>([\n    [\"tencent\", 0],\n    [\"sina\", 1],\n    [\"eastmoney\", 2],\n  ]);\n\n  return [...autoProviders].sort(\n    (left, right) =>\n      (order.get(left.name) ?? Number.MAX_SAFE_INTEGER) -\n      (order.get(right.name) ?? Number.MAX_SAFE_INTEGER)\n  );\n}\n\nasync function getProviderKlines(\n  provider: AutoStockProvider,\n  code: string,\n  options?: KlineOptions\n): Promise<Kline[]> {\n  try {\n    return await provider.api.getKlines(code, options);\n  } catch {\n    return [];\n  }\n}\n\nasync function searchProviderStocks(\n  provider: AutoStockProvider,\n  key: string\n): Promise<Stock[]> {\n  try {\n    return await provider.api.searchStocks(key);\n  } catch {\n    return [];\n  }\n}\n\nfunction isAvailableStock(stock: Stock | undefined): stock is Stock {\n  return Boolean(stock && stock.name !== DEFAULT_STOCK.name);\n}\n\nexport default Auto;\n", "// Utils\nimport {\n  ERROR_UNDEFINED_GET_STOCK,\n  ERROR_UNDEFINED_GET_STOCKS,\n  ERROR_UNDEFINED_GET_KLINES,\n  ERROR_UNDEFINED_SEARCH_STOCK,\n} from \"../../utils/constant\";\n\n// Types\nimport Kline, { KlineOptions } from \"../../types/utils/kline\";\nimport Stock from \"../../types/utils/stock\";\nimport StockApi from \"../../types/stocks/index\";\n\n/**\n * \u57FA\u7840\u80A1\u7968\u4EE3\u7801\u63A5\u53E3\n */\nconst Base: StockApi = {\n  /**\n   * \u83B7\u53D6\u80A1\u7968\u6570\u636E\n   * @param code \u80A1\u7968\u4EE3\u7801\n   */\n  async getStock(_code: string): Promise<Stock> {\n    throw new Error(ERROR_UNDEFINED_GET_STOCK);\n  },\n\n  /**\n   * \u83B7\u53D6\u80A1\u7968\u6570\u636E\u7EC4\n   * @param codes \u80A1\u7968\u4EE3\u7801\u7EC4\n   */\n  async getStocks(_codes: string[]): Promise<Stock[]> {\n    throw new Error(ERROR_UNDEFINED_GET_STOCKS);\n  },\n\n  /**\n   * \u83B7\u53D6 K \u7EBF\u6570\u636E\n   * @param code \u80A1\u7968\u4EE3\u7801\n   */\n  async getKlines(_code: string, _options?: KlineOptions): Promise<Kline[]> {\n    throw new Error(ERROR_UNDEFINED_GET_KLINES);\n  },\n\n  /**\n   * \u641C\u7D22\u80A1\u7968\u4EE3\u7801\n   * @param key \u5173\u952E\u5B57\n   */\n  async searchStocks(_key: string): Promise<Stock[]> {\n    throw new Error(ERROR_UNDEFINED_SEARCH_STOCK);\n  },\n};\n\nexport default Base;\n", "// Stocks\nimport auto from \"./auto\";\nimport base from \"./base\";\nimport eastmoney from \"./eastmoney\";\nimport sina from \"./sina\";\nimport tencent from \"./tencent\";\nimport { getProviderCapabilities } from \"./shared/capabilities\";\n\nexport type StockProviderName = \"eastmoney\" | \"sina\" | \"tencent\";\n\nconst sourceNames: StockProviderName[] = [\"tencent\", \"sina\", \"eastmoney\"];\n\nexport function getSources(): StockProviderName[] {\n  return [...sourceNames];\n}\n\nexport { auto, base, eastmoney, getProviderCapabilities, sina, tencent };\n\nexport default {\n  auto,\n  base,\n  eastmoney,\n  getProviderCapabilities,\n  getSources,\n  sina,\n  tencent,\n};\n", "// Stocks\nimport stocks from \"./stocks/index\";\n\nexport { stocks };\nexport {\n  StockApiError,\n  StockCodeError,\n  StockParseError,\n  StockRequestError,\n} from \"./errors\";\nexport default { stocks };\n"],
  "mappings": "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",
  "names": ["getStocks", "createMissingStock", "common_code_default", "getKlines", "common_code_default", "requestJson", "numberAt", "numberAt", "common_code_default", "getSearchUrl", "getKlines", "common_code_default", "requestJson", "isAvailableStock"]
}
