{"version":3,"file":"data.cjs","names":[],"sources":["../../../src/messages/content/data.ts"],"sourcesContent":["import { BaseContentBlock } from \"./base.js\";\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type MessageContentText = {\n  type: \"text\";\n  text: string;\n};\n\n/**\n * @deprecated\n * Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type MessageContentImageUrl = {\n  type: \"image_url\";\n  image_url: string | { url: string; detail?: ImageDetail };\n};\n\n/**\n * @deprecated\n * Use {@link ContentBlock} instead.\n */\nexport type MessageContentComplex =\n  | MessageContentText\n  | MessageContentImageUrl\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  | (Record<string, any> & { type?: \"text\" | \"image_url\" | string })\n  // oxlint-disable-next-line @typescript-eslint/no-explicit-any\n  | (Record<string, any> & { type?: never });\n\nexport type Data = never;\n\n// oxlint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace Data {\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export interface BaseDataContentBlock extends BaseContentBlock {\n    mime_type?: string;\n    metadata?: Record<string, unknown>;\n  }\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export interface URLContentBlock extends BaseDataContentBlock {\n    type: \"image\" | \"audio\" | \"file\";\n    source_type: \"url\";\n    url: string;\n  }\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export interface Base64ContentBlock extends BaseDataContentBlock {\n    type: \"image\" | \"audio\" | \"file\";\n    source_type: \"base64\";\n    data: string;\n  }\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export interface PlainTextContentBlock extends BaseDataContentBlock {\n    type: \"file\" | \"text\";\n    source_type: \"text\";\n    text: string;\n  }\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export interface IDContentBlock extends BaseDataContentBlock {\n    type: \"image\" | \"audio\" | \"file\";\n    source_type: \"id\";\n    id: string;\n  }\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Standard} instead\n   */\n  export type DataContentBlock =\n    | URLContentBlock\n    | Base64ContentBlock\n    | PlainTextContentBlock\n    | IDContentBlock;\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Standard} instead\n   */\n  export type StandardImageBlock = (\n    | URLContentBlock\n    | Base64ContentBlock\n    | IDContentBlock\n  ) & {\n    type: \"image\";\n  };\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Standard} instead\n   */\n  export type StandardAudioBlock = (\n    | URLContentBlock\n    | Base64ContentBlock\n    | IDContentBlock\n  ) & {\n    type: \"audio\";\n  };\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Standard} instead\n   */\n  export type StandardFileBlock = (\n    | URLContentBlock\n    | Base64ContentBlock\n    | IDContentBlock\n    | PlainTextContentBlock\n  ) & {\n    type: \"file\";\n  };\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Standard} instead\n   */\n  export type StandardTextBlock = PlainTextContentBlock & {\n    type: \"text\";\n  };\n\n  /**\n   * @deprecated\n   * Use {@link ContentBlock.Multimodal.Data} instead\n   */\n  export type DataContentBlockType = DataContentBlock[\"type\"];\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isDataContentBlock(\n  content_block: object\n): content_block is Data.DataContentBlock {\n  return (\n    typeof content_block === \"object\" &&\n    content_block !== null &&\n    \"type\" in content_block &&\n    typeof content_block.type === \"string\" &&\n    \"source_type\" in content_block &&\n    (content_block.source_type === \"url\" ||\n      content_block.source_type === \"base64\" ||\n      content_block.source_type === \"text\" ||\n      content_block.source_type === \"id\")\n  );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isURLContentBlock(\n  content_block: object\n): content_block is Data.URLContentBlock {\n  return (\n    isDataContentBlock(content_block) &&\n    content_block.source_type === \"url\" &&\n    \"url\" in content_block &&\n    typeof content_block.url === \"string\"\n  );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isBase64ContentBlock(\n  content_block: object\n): content_block is Data.Base64ContentBlock {\n  return (\n    isDataContentBlock(content_block) &&\n    content_block.source_type === \"base64\" &&\n    \"data\" in content_block &&\n    typeof content_block.data === \"string\"\n  );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isPlainTextContentBlock(\n  content_block: object\n): content_block is Data.PlainTextContentBlock {\n  return (\n    isDataContentBlock(content_block) &&\n    content_block.source_type === \"text\" &&\n    \"text\" in content_block &&\n    typeof content_block.text === \"string\"\n  );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function isIDContentBlock(\n  content_block: object\n): content_block is Data.IDContentBlock {\n  return (\n    isDataContentBlock(content_block) &&\n    content_block.source_type === \"id\" &&\n    \"id\" in content_block &&\n    typeof content_block.id === \"string\"\n  );\n}\n\n/**\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function convertToOpenAIImageBlock(\n  content_block: Data.URLContentBlock | Data.Base64ContentBlock\n) {\n  if (isDataContentBlock(content_block)) {\n    if (content_block.source_type === \"url\") {\n      return {\n        type: \"image_url\",\n        image_url: {\n          url: content_block.url,\n        },\n      };\n    }\n    if (content_block.source_type === \"base64\") {\n      if (!content_block.mime_type) {\n        throw new Error(\"mime_type key is required for base64 data.\");\n      }\n      const mime_type = content_block.mime_type;\n      return {\n        type: \"image_url\",\n        image_url: {\n          url: `data:${mime_type};base64,${content_block.data}`,\n        },\n      };\n    }\n  }\n  throw new Error(\n    \"Unsupported source type. Only 'url' and 'base64' are supported.\"\n  );\n}\n\n/**\n * Utility function for ChatModelProviders. Parses a mime type into a type, subtype, and parameters.\n *\n * @param mime_type - The mime type to parse.\n * @returns An object containing the type, subtype, and parameters.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseMimeType(mime_type: string): {\n  type: string;\n  subtype: string;\n  parameters: Record<string, string>;\n} {\n  const parts = mime_type.split(\";\")[0].split(\"/\");\n  if (parts.length !== 2) {\n    throw new Error(\n      `Invalid mime type: \"${mime_type}\" - does not match type/subtype format.`\n    );\n  }\n\n  const type = parts[0].trim();\n  const subtype = parts[1].trim();\n\n  if (type === \"\" || subtype === \"\") {\n    throw new Error(\n      `Invalid mime type: \"${mime_type}\" - type or subtype is empty.`\n    );\n  }\n\n  const parameters: Record<string, string> = {};\n\n  for (const parameterKvp of mime_type.split(\";\").slice(1)) {\n    const parameterParts = parameterKvp.split(\"=\");\n    if (parameterParts.length !== 2) {\n      throw new Error(`Invalid parameter syntax in mime type: \"${mime_type}\".`);\n    }\n    const key = parameterParts[0].trim();\n    const value = parameterParts[1].trim();\n    if (key === \"\") {\n      throw new Error(`Invalid parameter syntax in mime type: \"${mime_type}\".`);\n    }\n\n    parameters[key] = value;\n  }\n\n  return {\n    type,\n    subtype,\n    parameters,\n  };\n}\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns An object containing the parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n  dataUrl,\n  asTypedArray,\n}: {\n  dataUrl: string;\n  asTypedArray: true;\n}): { data: Uint8Array; mime_type: string } | undefined;\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns The parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n  dataUrl,\n  asTypedArray,\n}: {\n  dataUrl: string;\n  asTypedArray?: false;\n}): { data: string; mime_type: string } | undefined;\n\n/**\n * Utility function for ChatModelProviders. Parses a base64 data URL into a typed array or string.\n *\n * @param dataUrl - The base64 data URL to parse.\n * @param asTypedArray - Whether to return the data as a typed array.\n * @returns The parsed data and mime type, or undefined if the data URL is invalid.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function parseBase64DataUrl({\n  dataUrl: data_url,\n  asTypedArray = false,\n}: {\n  dataUrl: string;\n  asTypedArray?: boolean;\n}): { data: string | Uint8Array; mime_type: string } | undefined {\n  const formatMatch = data_url.match(\n    /^data:(\\w+\\/\\w+);base64,([A-Za-z0-9+/]+=*)$/\n  );\n  let mime_type: string | undefined;\n\n  if (formatMatch) {\n    mime_type = formatMatch[1].toLowerCase();\n    const data = asTypedArray\n      ? Uint8Array.from(atob(formatMatch[2]), (c) => c.charCodeAt(0))\n      : formatMatch[2];\n    return {\n      mime_type,\n      data,\n    };\n  }\n\n  return undefined;\n}\n\n/**\n * A bag of provider-specific content block types.\n *\n * Allows implementations of {@link StandardContentBlockConverter} and related to be defined only in\n * terms of the types they support. Also allows for forward compatibility as the set of known\n * standard types grows, as the set of types can be extended without breaking existing\n * implementations of the aforementioned interfaces.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport type ProviderFormatTypes<\n  TextFormat = unknown,\n  ImageFormat = unknown,\n  AudioFormat = unknown,\n  FileFormat = unknown,\n  VideoFormat = unknown,\n> = {\n  text: TextFormat;\n  image: ImageFormat;\n  audio: AudioFormat;\n  file: FileFormat;\n  video: VideoFormat;\n};\n\n/**\n * Utility interface for converting between standard and provider-specific data content blocks, to be\n * used when implementing chat model providers.\n *\n * Meant to be used with {@link convertToProviderContentBlock} and\n * {@link convertToStandardContentBlock} rather than being consumed directly.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport interface StandardContentBlockConverter<\n  Formats extends Partial<ProviderFormatTypes>,\n> {\n  /**\n   * The name of the provider type that corresponds to the provider-specific content block types\n   * that this converter supports.\n   */\n  providerName: string;\n\n  /**\n   * Convert from a standard image block to a provider's proprietary image block format.\n   * @param block - The standard image block to convert.\n   * @returns The provider image block.\n   */\n  fromStandardImageBlock?(block: Data.StandardImageBlock): Formats[\"image\"];\n\n  /**\n   * Convert from a standard audio block to a provider's proprietary audio block format.\n   * @param block - The standard audio block to convert.\n   * @returns The provider audio block.\n   */\n  fromStandardAudioBlock?(block: Data.StandardAudioBlock): Formats[\"audio\"];\n\n  /**\n   * Convert from a standard file block to a provider's proprietary file block format.\n   * @param block - The standard file block to convert.\n   * @returns The provider file block.\n   */\n  fromStandardFileBlock?(block: Data.StandardFileBlock): Formats[\"file\"];\n\n  /**\n   * Convert from a standard text block to a provider's proprietary text block format.\n   * @param block - The standard text block to convert.\n   * @returns The provider text block.\n   */\n  fromStandardTextBlock?(block: Data.StandardTextBlock): Formats[\"text\"];\n}\n\n/**\n * Convert from a standard data content block to a provider's proprietary data content block format.\n *\n * Don't override this method. Instead, override the more specific conversion methods and use this\n * method unmodified.\n *\n * @param block - The standard data content block to convert.\n * @returns The provider data content block.\n * @throws An error if the standard data content block type is not supported.\n *\n * @deprecated Don't use data content blocks. Use {@link ContentBlock.Multimodal.Data} instead.\n */\nexport function convertToProviderContentBlock<\n  Formats extends Partial<ProviderFormatTypes>,\n>(\n  block: Data.DataContentBlock,\n  converter: StandardContentBlockConverter<Formats>\n): Formats[keyof Formats] {\n  if (block.type === \"text\") {\n    if (!converter.fromStandardTextBlock) {\n      throw new Error(\n        `Converter for ${converter.providerName} does not implement \\`fromStandardTextBlock\\` method.`\n      );\n    }\n    return converter.fromStandardTextBlock(block as Data.StandardTextBlock);\n  }\n  if (block.type === \"image\") {\n    if (!converter.fromStandardImageBlock) {\n      throw new Error(\n        `Converter for ${converter.providerName} does not implement \\`fromStandardImageBlock\\` method.`\n      );\n    }\n    return converter.fromStandardImageBlock(block as Data.StandardImageBlock);\n  }\n  if (block.type === \"audio\") {\n    if (!converter.fromStandardAudioBlock) {\n      throw new Error(\n        `Converter for ${converter.providerName} does not implement \\`fromStandardAudioBlock\\` method.`\n      );\n    }\n    return converter.fromStandardAudioBlock(block as Data.StandardAudioBlock);\n  }\n  if (block.type === \"file\") {\n    if (!converter.fromStandardFileBlock) {\n      throw new Error(\n        `Converter for ${converter.providerName} does not implement \\`fromStandardFileBlock\\` method.`\n      );\n    }\n    return converter.fromStandardFileBlock(block as Data.StandardFileBlock);\n  }\n  throw new Error(\n    `Unable to convert content block type '${block.type}' to provider-specific format: not recognized.`\n  );\n}\n"],"mappings":"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"}