{"version":3,"file":"file-BdP8crPU.cjs","names":["isUrlString"],"sources":["../src/stream/aisdk/v5/file.ts"],"sourcesContent":["import { convertBase64ToUint8Array, convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\nimport { isUrlString } from './compat/content';\n\n/**\n * A generated file.\n */\nexport interface GeneratedFile {\n  /**\n  File as a base64 encoded string.\n       */\n  readonly base64: string;\n\n  /**\n  File as a Uint8Array.\n       */\n  readonly uint8Array: Uint8Array;\n\n  /**\n  The IANA media type of the file.\n  \n  @see https://www.iana.org/assignments/media-types/media-types.xhtml\n     */\n  readonly mediaType: string;\n}\n\nexport class DefaultGeneratedFile implements GeneratedFile {\n  private base64Data: string | undefined;\n  private uint8ArrayData: Uint8Array | undefined;\n\n  readonly mediaType: string;\n\n  constructor({ data, mediaType }: { data: string | Uint8Array; mediaType: string }) {\n    const isUint8Array = data instanceof Uint8Array;\n    this.base64Data = isUint8Array ? undefined : data;\n    this.uint8ArrayData = isUint8Array ? data : undefined;\n    this.mediaType = mediaType;\n  }\n\n  // lazy conversion with caching to avoid unnecessary conversion overhead:\n  get base64() {\n    if (this.base64Data == null) {\n      this.base64Data = convertUint8ArrayToBase64(this.uint8ArrayData!);\n    }\n    return this.base64Data;\n  }\n\n  // lazy conversion with caching to avoid unnecessary conversion overhead:\n  get uint8Array() {\n    if (this.uint8ArrayData == null) {\n      // URL-backed generated files (AI SDK v7 models) store the URL string in\n      // place of base64. Fail loudly instead of decoding the URL as base64.\n      if (isUrlString(this.base64Data!)) {\n        throw new Error(\n          `Cannot convert URL-backed generated file to Uint8Array. Download the file from ${this.base64Data} instead.`,\n        );\n      }\n      this.uint8ArrayData = convertBase64ToUint8Array(this.base64Data!);\n    }\n    return this.uint8ArrayData;\n  }\n}\n\nexport class DefaultGeneratedFileWithType extends DefaultGeneratedFile {\n  readonly type = 'file';\n\n  constructor(options: { data: string | Uint8Array; mediaType: string }) {\n    super(options);\n  }\n}\n"],"mappings":";;;AAyBA,IAAa,uBAAb,MAA2D;CACzD;CACA;CAEA;CAEA,YAAY,EAAE,MAAM,aAA+D;EACjF,MAAM,eAAe,gBAAgB;EACrC,KAAK,aAAa,eAAe,KAAA,IAAY;EAC7C,KAAK,iBAAiB,eAAe,OAAO,KAAA;EAC5C,KAAK,YAAY;CACnB;CAGA,IAAI,SAAS;EACX,IAAI,KAAK,cAAc,MACrB,KAAK,cAAA,GAAA,0BAAA,0BAAA,CAAuC,KAAK,cAAe;EAElE,OAAO,KAAK;CACd;CAGA,IAAI,aAAa;EACf,IAAI,KAAK,kBAAkB,MAAM;GAG/B,IAAIA,gBAAAA,YAAY,KAAK,UAAW,GAC9B,MAAM,IAAI,MACR,kFAAkF,KAAK,WAAW,UACpG;GAEF,KAAK,kBAAA,GAAA,0BAAA,0BAAA,CAA2C,KAAK,UAAW;EAClE;EACA,OAAO,KAAK;CACd;AACF;AAEA,IAAa,+BAAb,cAAkD,qBAAqB;CACrE,OAAgB;CAEhB,YAAY,SAA2D;EACrE,MAAM,OAAO;CACf;AACF"}