{"version":3,"sources":["jsdelivr-header.js","/npm/bol@0.1.6/dist/index.mjs"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OCNS,UAAW,cAAiB,eAGrC,SAAS,kBAAkB,GAEzB,OAAI,UAAU,GAEP,UAAU,GAAW,KAAI,GAAM,UAAU,KAFf,CAAC,UAAU,GAG9C,CAEA,SAAS,eAAe,EAAgB,GACtC,IAAI,IAAI,KAAQ,EAAgB,CAC9B,IAAI,EAAc,EAAa,MAAK,GAAO,EAAI,OAAS,EAAK,OAC7D,GAAG,EAAa,OAAO,CACzB,CACF,CAEA,eAAe,KAAK,GAClB,OAAO,IAAI,SAAQ,IACjB,YAAW,IAAM,KAAW,EAAK,GAErC,CAGA,SAAS,kBAAkB,EAAU,GAInC,OADuB,eAFA,kBAAkB,GAEa,EAExD,CAIA,IAAI,eAAiB,EACrB,MAAM,IACJ,WAAA,CAAY,EAAe,qBAAqB,KAAE,EAAI,MAAE,EAAK,OAAE,GAAW,CAAC,KAAM,EAAG,MAAO,EAAG,OAAQ,IACpG,KAAK,aAAe,GACpB,KAAK,KAAO,EACZ,KAAK,MAAQ,EACb,KAAK,OAAS,EAEX,OAAO,KAAK,WAAW,SAAS,GACjC,KAAK,aAAe,EAEpB,KAAK,aAAe,oBAGtB,KAAK,OACL,KAAK,MAAQ,KAAK,MAAM,KAAK,MAC7B,KAAK,KAAO,KAAK,KAAK,KAAK,MAC3B,gBAAgB,gBAAkB,KAAK,IACzC,CAEA,IAAA,GACgC,oBAApB,kBACV,KAAK,aAAe,gBAAgB,YACtC,CAEA,WAAM,CAAM,EAAM,EAAW,MAC3B,GAAgC,IAA7B,KAAK,aAAa,QAAgB,eAAiB,GAGpD,aAFM,KAAK,KACX,iBACO,KAAK,MAAM,EAAM,GAG1B,MAAM,EAAQ,kBAAmB,GAAY,KAAK,aAAe,KAAK,cACtE,QAAQ,IAAI,KAAK,cACjB,MAAM,EAAY,IAAI,yBAAyB,GAW/C,OAVA,EAAU,MAAQ,GAAS,GAC3B,EAAU,SAAW,EAAM,UAAY,GACvC,EAAU,YAA0B,IAAhB,KAAK,QAAwC,OAAhB,KAAK,OAAmB,EAAI,KAAK,OAClF,EAAU,UAAsB,IAAd,KAAK,MAAoC,OAAd,KAAK,KAAiB,GAAK,KAAK,KAC7E,EAAU,WAAwB,IAAf,KAAK,OAAsC,OAAf,KAAK,MAAkB,EAAI,KAAK,MAC/E,EAAU,KAAO,EACjB,EAAU,KAAO,EAAM,MAAQ,QAE/B,gBAAgB,MAAM,GAEf,IAAI,SAAQ,IACjB,EAAU,MAAQ,IAChB,EAAQ,EAAE,YAAY,CACxB,GAEJ,iBAIa","file":"/npm/bol@0.1.6/dist/index.mjs","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/bol@0.1.6/dist/index.mjs\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { bolVoices, fallbacks } from './voices.mjs';\n\n// Helpers\nfunction getFallbackVoices(voiceName) {\n  // return first voice (Google UK English Female) if the voice does not exist in list\n  if(!bolVoices[voiceName]) return [fallbacks[0]];\n\n  return bolVoices[voiceName].map(id => fallbacks[id]);\n}\n\nfunction getCommonVoice(fallbackVoices, systemVoices) {\n  for(let item of fallbackVoices) {\n    let commonVoice = systemVoices.find(val => val.name === item.name);\n    if(commonVoice) return commonVoice;\n  }\n}\n\nasync function wait(time) {\n  return new Promise(resolve => {\n    setTimeout(() => resolve(), time);\n  })\n}\n\n\nfunction getSupportedVoice(bolVoice, systemVoices) {\n  const fallbackVoices = getFallbackVoices(bolVoice);\n  // getCommonValue returns common value between two arrays\n  const supportedVoice = getCommonVoice(fallbackVoices, systemVoices)\n  return supportedVoice;\n}\n\n// Helpers end\n\nlet retriesToSpeak = 0;\nclass Bol {\n  constructor(defaultVoice = 'UK English Female', { rate, pitch, volume } = {rate: 1, pitch: 1, volume: 1}) {\n    this.systemVoices = [];\n    this.rate = rate;\n    this.pitch = pitch;\n    this.volume = volume;\n\n    if(Object.keys(bolVoices).includes(defaultVoice)) {\n      this.defaultVoice = defaultVoice;\n    }else {\n      this.defaultVoice = 'UK English Female';\n    }\n    \n    this.init();\n    this.speak = this.speak.bind(this);\n    this.init = this.init.bind(this);\n    speechSynthesis.onvoiceschanged = this.init;\n  }\n\n  init() {\n    if(typeof speechSynthesis === 'undefined') return;\n    this.systemVoices = speechSynthesis.getVoices();\n  }\n\n  async speak(text, newVoice = null) {\n    if(this.systemVoices.length === 0 && retriesToSpeak < 10) {\n      await wait(600);\n      retriesToSpeak++;\n      return this.speak(text, newVoice);\n    }\n    \n    const voice = getSupportedVoice((newVoice || this.defaultVoice), this.systemVoices);\n    console.log(this.defaultVoice);\n    const utterThis = new SpeechSynthesisUtterance(text);\n    utterThis.voice = voice || '';\n    utterThis.voiceURI = voice.voiceURI || '';\n    utterThis.volume = (this.volume === undefined || this.volume === null) ? 1 : this.volume;\n    utterThis.rate = (this.rate === undefined || this.rate === null) ? .8 : this.rate;\n    utterThis.pitch = (this.pitch === undefined || this.pitch === null) ? 1 : this.pitch;\n    utterThis.text = text;\n    utterThis.lang = voice.lang || 'en-US';\n\n    speechSynthesis.speak(utterThis);\n    \n    return new Promise(resolve => {\n      utterThis.onend = e => {\n        resolve(e.elapsedTime);\n      }\n    })\n  }\n\n}\n\nexport default Bol;"]}