{"version":3,"file":"qrcodeParser.cjs","sources":["../src/utils.ts","../src/index.ts","../src/b64toBlob.ts"],"sourcesContent":["import jsQR from 'jsqr'\n\nexport const blob2text = (blob: Blob): Promise<string> => {\n  return new Promise((resolve, reject) => {\n    const image = new Image()\n    image.src = URL.createObjectURL(blob)\n    image.addEventListener('load', () => {\n      try {\n        const canvas = document.createElement('canvas')\n        canvas.width = image.width\n        canvas.height = image.height\n        const context = canvas.getContext('2d')\n\n        if (!context)\n          return reject(new Error('decode failed'))\n\n        context.imageSmoothingEnabled = false\n        context.drawImage(image, 0, 0)\n        const imageData = context.getImageData(0, 0, image.width, image.height)\n\n        const code = jsQR(imageData.data, image.width, image.height)\n        if (code !== null)\n          return resolve(code.data)\n        else\n          return reject(new Error('decode failed'))\n      }\n      catch (err) {\n        if (typeof err === 'string')\n          return reject(new Error(err))\n\n        if (err instanceof Error)\n          return reject(new Error(err.message))\n      }\n    })\n  })\n}\n\nexport const isBase64 = (str: string): boolean => {\n  try {\n    return btoa(atob(str)) === str\n  }\n  catch (err) {\n    return false\n  }\n}\n\n// Copy from https://github.com/sindresorhus/is-url-superb\nexport const isUrl = (string: string): boolean => {\n  if (typeof string !== 'string')\n    throw new TypeError('Expected a string')\n\n  string = string.trim()\n  if (string.includes(' '))\n    return false\n\n  try {\n    new URL(string) // eslint-disable-line no-new\n    return true\n  }\n  catch {\n    return false\n  }\n}\n","import b64toBlob from './b64toBlob'\nimport { blob2text, isBase64, isUrl } from './utils'\n\nexport type Input = string | File\n\nexport default (input: Input): Promise<string> => {\n  let blob: Blob\n\n  if (\n    input instanceof File\n    && Object.prototype.toString.call(input) === '[object File]'\n  ) {\n    blob = input.slice()\n    return blob2text(blob)\n  }\n  else if (typeof input === 'string' && isBase64(input)) {\n    blob = b64toBlob(input)\n    return blob2text(blob)\n  }\n  else if (typeof input === 'string' && isUrl(input)) {\n    return new Promise((resolve, reject) => {\n      const xhr = new XMLHttpRequest()\n      xhr.open('GET', input)\n      xhr.responseType = 'blob' // force the HTTP response, response-type header to be blob\n      xhr.onload = () => {\n        if (xhr.status >= 200 && xhr.status < 300) {\n          blob = xhr.response // xhr.response is now a blob object\n          blob2text(blob)\n            .then(ret => resolve(ret))\n            .catch(e => reject(e))\n        }\n        else {\n          reject(xhr.statusText)\n        }\n      }\n      xhr.onerror = () => reject(xhr.statusText)\n      xhr.send()\n    })\n  }\n  else {\n    return Promise.reject(new Error('The input type is invalid'))\n  }\n}\n","//  Ref: https://stackoverflow.com/a/16245768\n\nconst b64toBlob = (\n  b64Data: string,\n  contentType = '',\n  sliceSize = 512,\n): Blob => {\n  const byteCharacters = atob(b64Data)\n  const byteArrays = []\n  for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n    const slice = byteCharacters.slice(offset, offset + sliceSize)\n    const byteNumbers = new Array(slice.length)\n    for (let i = 0; i < slice.length; i++)\n      byteNumbers[i] = slice.charCodeAt(i)\n\n    const byteArray = new Uint8Array(byteNumbers)\n\n    byteArrays.push(byteArray)\n  }\n\n  const blob = new Blob(byteArrays, { type: contentType })\n  return blob\n}\n\nexport default b64toBlob\n"],"names":["blob2text","blob","Promise","resolve","reject","image","Image","src","URL","createObjectURL","addEventListener","canvas","document","createElement","width","height","context","getContext","Error","imageSmoothingEnabled","drawImage","imageData","getImageData","code","jsQR","data","err","message","input","File","Object","prototype","toString","call","slice","str","btoa","atob","isBase64","b64Data","contentType","sliceSize","byteCharacters","byteArrays","offset","length","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","push","Blob","type","b64toBlob","string","TypeError","trim","includes","isUrl","xhr","XMLHttpRequest","open","responseType","onload","status","response","then","ret","e","statusText","onerror","send"],"mappings":"8GAEaA,EAAY,SAACC,GACxB,WAAWC,QAAQ,SAACC,EAASC,GAC3B,IAAMC,EAAQ,IAAIC,MAClBD,EAAME,IAAMC,IAAIC,gBAAgBR,GAChCI,EAAMK,iBAAiB,OAAQ,WAC7B,IACE,IAAMC,EAASC,SAASC,cAAc,UACtCF,EAAOG,MAAQT,EAAMS,MACrBH,EAAOI,OAASV,EAAMU,OACtB,IAAMC,EAAUL,EAAOM,WAAW,MAElC,IAAKD,EACH,OAAOZ,EAAO,IAAIc,MAAM,kBAE1BF,EAAQG,uBAAwB,EAChCH,EAAQI,UAAUf,EAAO,EAAG,GAC5B,IAAMgB,EAAYL,EAAQM,aAAa,EAAG,EAAGjB,EAAMS,MAAOT,EAAMU,QAE1DQ,EAAOC,UAAKH,EAAUI,KAAMpB,EAAMS,MAAOT,EAAMU,QACrD,OAAa,OAATQ,EACKpB,EAAQoB,EAAKE,MAEbrB,EAAO,IAAIc,MAAM,kBAE5B,MAAOQ,GACL,GAAmB,iBAARA,EACT,OAAOtB,EAAO,IAAIc,MAAMQ,IAE1B,GAAIA,aAAeR,MACjB,OAAOd,EAAO,IAAIc,MAAMQ,EAAIC,wCC1BtBC,GACd,IAAI3B,EAEJ,OACE2B,aAAiBC,MAC4B,kBAA1CC,OAAOC,UAAUC,SAASC,KAAKL,IAElC3B,EAAO2B,EAAMM,QACNlC,EAAUC,IAEO,iBAAV2B,GDsBM,SAACO,GACvB,IACE,OAAOC,KAAKC,KAAKF,MAAUA,EAE7B,MAAOT,GACL,UC3BoCY,CAASV,IAC7C3B,ECdc,SAChBsC,EACAC,EACAC,YADAD,IAAAA,EAAc,aACdC,IAAAA,EAAY,KAIZ,IAFA,IAAMC,EAAiBL,KAAKE,GACtBI,EAAa,GACVC,EAAS,EAAGA,EAASF,EAAeG,OAAQD,GAAUH,EAAW,CAGxE,IAFA,IAAMP,EAAQQ,EAAeR,MAAMU,EAAQA,EAASH,GAC9CK,EAAc,IAAIC,MAAMb,EAAMW,QAC3BG,EAAI,EAAGA,EAAId,EAAMW,OAAQG,IAChCF,EAAYE,GAAKd,EAAMe,WAAWD,GAEpC,IAAME,EAAY,IAAIC,WAAWL,GAEjCH,EAAWS,KAAKF,GAIlB,OADa,IAAIG,KAAKV,EAAY,CAAEW,KAAMd,IDJjCe,CAAU3B,GACV5B,EAAUC,IAEO,iBAAV2B,GD4BG,SAAC4B,GACpB,GAAsB,iBAAXA,EACT,UAAUC,UAAU,qBAGtB,IADAD,EAASA,EAAOE,QACLC,SAAS,KAClB,SAEF,IAEE,OADA,IAAInD,IAAIgD,MAGV,SACE,UCzCoCI,CAAMhC,OAC/B1B,QAAQ,SAACC,EAASC,GAC3B,IAAMyD,EAAM,IAAIC,eAChBD,EAAIE,KAAK,MAAOnC,GAChBiC,EAAIG,aAAe,OACnBH,EAAII,OAAS,WACPJ,EAAIK,QAAU,KAAOL,EAAIK,OAAS,IAEpClE,EADAC,EAAO4D,EAAIM,UAERC,KAAK,SAAAC,UAAOlE,EAAQkE,WACd,SAAAC,UAAKlE,EAAOkE,KAGrBlE,EAAOyD,EAAIU,aAGfV,EAAIW,QAAU,kBAAMpE,EAAOyD,EAAIU,aAC/BV,EAAIY,SAICvE,QAAQE,OAAO,IAAIc,MAAM"}