{"version":3,"sources":["../src/index.js","../src/createAdapters.js","../src/createWebSpeechPonyfillFactory.js","../src/utils/withResolvers.js","../src/createTaskQueue.js","../node_modules/src/lib/misc.ts","../node_modules/src/lib/error-handler.ts","../node_modules/src/lib/global.ts","../node_modules/src/lib/warning-handler.ts","../node_modules/src/lib/warnings.ts","../node_modules/src/lib/event.ts","../node_modules/src/lib/dom-exception.ts","../node_modules/src/lib/event-wrapper.ts","../node_modules/src/lib/listener.ts","../node_modules/src/lib/listener-list.ts","../node_modules/src/lib/listener-list-map.ts","../node_modules/src/lib/event-target.ts","../node_modules/src/lib/event-attribute-handler.ts","../node_modules/src/lib/legacy.ts","../src/createMultiBufferingPlayer.js","../src/playCognitiveServicesStream.js","../src/playWhiteNoise.js","../src/SpeechSynthesisAudioStreamUtterance.js","../src/DirectLineSpeech.js","../src/shareObservable.js","../src/patchDialogServiceConnectorInline.js","../src/utils/fetchJSON.js","../src/utils/refreshDirectLineToken.js","../src/resolveFunctionOrReturnValue.js"],"sourcesContent":["/* global process:readonly */\nimport 'core-js/features/object/entries.js';\n\nimport createAdapters from './createAdapters';\n\nconst buildTool = process.env.build_tool;\nconst moduleFormat = process.env.module_format;\nconst version = process.env.npm_package_version;\n\nconst buildInfo = { buildTool, moduleFormat, version };\n\nexport { buildInfo, createAdapters };\n\nif (typeof HTMLDocument !== 'undefined' && typeof document !== 'undefined' && document instanceof HTMLDocument) {\n  const version = process.env.npm_package_version;\n  const versionMeta = document.createElement('meta');\n\n  versionMeta.setAttribute('name', 'botframework-directlinespeech:version');\n  versionMeta.setAttribute('content', version);\n\n  document.head.appendChild(versionMeta);\n\n  const packageMeta = document.createElement('meta');\n\n  packageMeta.setAttribute('name', 'botframework-directlinespeech');\n  packageMeta.setAttribute('content', `version=${version}; build_tool=${buildTool}; format=${moduleFormat}`);\n\n  document.head.appendChild(packageMeta);\n}\n","/* eslint complexity: [\"error\", 33] */\n\nimport {\n  AudioConfig,\n  BotFrameworkConfig,\n  DialogServiceConnector,\n  PropertyId\n} from 'microsoft-cognitiveservices-speech-sdk';\n\nimport createWebSpeechPonyfillFactory from './createWebSpeechPonyfillFactory';\nimport DirectLineSpeech from './DirectLineSpeech';\nimport patchDialogServiceConnectorInline from './patchDialogServiceConnectorInline';\nimport refreshDirectLineToken from './utils/refreshDirectLineToken';\nimport resolveFunctionOrReturnValue from './resolveFunctionOrReturnValue';\n\nconst DIRECT_LINE_TOKEN_RENEWAL_INTERVAL = 900000; // 15 minutes\nconst TOKEN_RENEWAL_INTERVAL = 120000;\n\n// eslint-disable-next-line complexity\nexport default async function create({\n  audioConfig,\n  audioContext,\n  audioInputDeviceId,\n  enableInternalHTTPSupport,\n  enableTelemetry,\n  fetchCredentials,\n  speechRecognitionEndpointId,\n  speechRecognitionLanguage = (typeof window !== 'undefined' &&\n    typeof window.navigator !== 'undefined' &&\n    window.navigator.language) ||\n    'en-US',\n  speechSynthesisDeploymentId,\n  speechSynthesisOutputFormat,\n  textNormalization,\n  userID,\n  username\n}) {\n  if (!fetchCredentials) {\n    throw new Error('\"fetchCredentials\" must be specified.');\n  }\n\n  const { authorizationToken, directLineToken, directLineSpeechHostname, region, subscriptionKey } =\n    await resolveFunctionOrReturnValue(fetchCredentials);\n\n  if (\n    (!authorizationToken && !subscriptionKey) ||\n    (authorizationToken && subscriptionKey) ||\n    (authorizationToken && typeof authorizationToken !== 'string') ||\n    (subscriptionKey && typeof subscriptionKey !== 'string') ||\n    (enableInternalHTTPSupport && !directLineToken)\n  ) {\n    throw new Error(\n      '\"fetchCredentials\" must return either \"authorizationToken\" or \"subscriptionKey\" as a non-empty string only. If enableInternalHTTPSupport is set to true, then it should also return a non-empty \"directLineToken\"'\n    );\n  }\n\n  if (typeof enableTelemetry !== 'undefined') {\n    console.warn(\n      'botframework-directlinespeech: Telemetry options are not yet supported. Please refer to Cognitive Services documentation for details.'\n    );\n  }\n\n  if ((directLineSpeechHostname && region) || (!directLineSpeechHostname && !region)) {\n    throw new Error(\n      '\"fetchCredentials\" must return either \"directLineSpeechHostname\" or \"region\" and it must not be an empty string.'\n    );\n  }\n\n  if (directLineSpeechHostname) {\n    if (typeof directLineSpeechHostname !== 'string') {\n      throw new Error('\"fetchCredentials\" must return \"directLineSpeechHostname\" as a string.');\n    }\n\n    if (enableInternalHTTPSupport) {\n      throw new Error(\n        '\"fetchCredentials\" must not return \"directLineSpeechHostname\" if \"enableInternalHTTPSupport\" is set.'\n      );\n    }\n  } else {\n    if (typeof region !== 'string') {\n      throw new Error('\"fetchCredentials\" must return \"region\" as a string.');\n    }\n  }\n\n  if (audioConfig && audioInputDeviceId) {\n    console.warn(\n      'botframework-directlinespeech-sdk: Only \"audioConfig\" or \"audioInputDeviceId\" can be specified, but not both; ignoring \"audioInputDeviceId\".'\n    );\n  } else if (!audioConfig) {\n    if (audioInputDeviceId) {\n      audioConfig = AudioConfig.fromMicrophoneInput(audioInputDeviceId);\n    } else {\n      audioConfig = AudioConfig.fromDefaultMicrophoneInput();\n    }\n  }\n\n  if (speechRecognitionEndpointId) {\n    console.warn(\n      'botframework-directlinespeech: Custom Speech is currently not supported; ignoring \"speechRecognitionEndpointId\".'\n    );\n  }\n\n  if (speechSynthesisDeploymentId) {\n    console.warn(\n      'botframework-directlinespeech: Custom Voice is currently not supported; ignoring \"speechSynthesisDeploymentId\".'\n    );\n  }\n\n  if (speechSynthesisOutputFormat) {\n    console.warn(\n      'botframework-directlinespeech: Synthesis output format is currently not supported; ignoring \"speechSynthesisOutputFormat\".'\n    );\n  }\n\n  if (textNormalization) {\n    console.warn(\n      'botframework-directlinespeech: Text normalization is currently not supported; ignoring \"textNormalization\".'\n    );\n  }\n\n  if (userID || username) {\n    console.warn(\n      'botframework-directlinespeech: Custom \"userId\" and \"username\" are currently not supported and are ignored.'\n    );\n  }\n\n  let config;\n\n  if (directLineSpeechHostname) {\n    if (authorizationToken) {\n      config = BotFrameworkConfig.fromHost(new URL(`wss://${directLineSpeechHostname}`));\n\n      config.setProperty(PropertyId.SpeechServiceAuthorization_Token, authorizationToken);\n    } else {\n      config = BotFrameworkConfig.fromHost(new URL(`wss://${directLineSpeechHostname}`), subscriptionKey);\n    }\n  } else {\n    if (authorizationToken) {\n      config = BotFrameworkConfig.fromAuthorizationToken(authorizationToken, region);\n    } else {\n      config = BotFrameworkConfig.fromSubscription(subscriptionKey, region);\n    }\n\n    // If internal HTTP support is enabled, switch the endpoint to Direct Line on Direct Line Speech service.\n    if (enableInternalHTTPSupport) {\n      config.setProperty(\n        PropertyId.SpeechServiceConnection_Endpoint,\n        `wss://${encodeURI(region)}.convai.speech.microsoft.com/directline/api/v1`\n      );\n\n      config.setProperty(PropertyId.Conversation_Agent_Connection_Id, directLineToken);\n    }\n  }\n\n  // Supported options can be found in DialogConnectorFactory.js.\n\n  // Set the language used for recognition.\n  config.setProperty(PropertyId.SpeechServiceConnection_RecoLanguage, speechRecognitionLanguage);\n\n  // The following code sets the output format.\n  // As advised by the Speech team, this API may be subject to future changes.\n  // We are not enabling output format option because it does not send detailed output format to the bot, rendering this option useless.\n  // config.setProperty(PropertyId.SpeechServiceResponse_OutputFormatOption, OutputFormat[OutputFormat.Detailed]);\n\n  // Set the user ID for starting the conversation.\n  userID && config.setProperty(PropertyId.Conversation_From_Id, userID);\n\n  // Set Custom Speech and Custom Voice.\n  // The following code is copied from C#, and it is not working yet.\n  // https://github.com/Azure-Samples/Cognitive-Services-Direct-Line-Speech-Client/blob/master/DLSpeechClient/MainWindow.xaml.cs\n  // speechRecognitionEndpointId && config.setServiceProperty('cid', speechRecognitionEndpointId, ServicePropertyChannel.UriQueryParameter);\n  // speechSynthesisDeploymentId && config.setProperty(PropertyId.conversation_Custom_Voice_Deployment_Ids, speechSynthesisDeploymentId);\n\n  const dialogServiceConnector = patchDialogServiceConnectorInline(new DialogServiceConnector(config, audioConfig));\n\n  // Renew token per interval.\n  if (authorizationToken) {\n    const interval = setInterval(async () => {\n      // #2660 If the connector has been disposed, we should stop renewing the token.\n\n      // TODO: We should use a public implementation if Speech SDK has one related to \"privIsDisposed\".\n      if (dialogServiceConnector.privIsDisposed) {\n        clearInterval(interval);\n      }\n\n      const {\n        authorizationToken,\n        directLineSpeechHostname: nextDirectLineSpeechHostname,\n        region: nextRegion\n      } = await resolveFunctionOrReturnValue(fetchCredentials);\n\n      if (!authorizationToken) {\n        return console.warn(\n          'botframework-directlinespeech-sdk: Renew token failed because \"fetchCredentials\" call returned no authorization token.'\n        );\n      }\n\n      if (directLineSpeechHostname) {\n        if (directLineSpeechHostname !== nextDirectLineSpeechHostname) {\n          return console.warn(\n            'botframework-directlinespeech-sdk: \"directLineSpeechHostname\" change is not supported for renewed token. Authorization token is not renewed.'\n          );\n        }\n      } else {\n        if (region !== nextRegion) {\n          return console.warn(\n            'botframework-directlinespeech-sdk: Region change is not supported for renewed token. Authorization token is not renewed.'\n          );\n        }\n      }\n\n      dialogServiceConnector.authorizationToken = authorizationToken; // eslint-disable-line require-atomic-updates\n    }, TOKEN_RENEWAL_INTERVAL);\n  }\n\n  // Renew token per interval.\n  if (enableInternalHTTPSupport) {\n    const interval = setInterval(async () => {\n      // #2660 If the connector has been disposed, we should stop renewing the token.\n\n      // TODO: We should use a public implementation if Speech SDK has one related to \"privIsDisposed\".\n      if (dialogServiceConnector.privIsDisposed) {\n        clearInterval(interval);\n      }\n\n      const refreshedDirectLineToken = await refreshDirectLineToken(directLineToken);\n\n      if (!refreshedDirectLineToken) {\n        return console.warn(\n          'botframework-directlinespeech-sdk: Renew token failed because call to refresh token Direct Line API did not return a new token.'\n        );\n      }\n\n      config.setProperty(PropertyId.Conversation_Agent_Connection_Id, refreshedDirectLineToken);\n\n      dialogServiceConnector.properties.setProperty(\n        PropertyId.Conversation_Agent_Connection_Id,\n        refreshedDirectLineToken\n      );\n      dialogServiceConnector.connect();\n    }, DIRECT_LINE_TOKEN_RENEWAL_INTERVAL);\n  }\n\n  const directLine = new DirectLineSpeech({ dialogServiceConnector });\n\n  const webSpeechPonyfillFactory = createWebSpeechPonyfillFactory({\n    audioContext,\n    enableTelemetry,\n    recognizer: dialogServiceConnector,\n    textNormalization\n  });\n\n  return {\n    directLine,\n    webSpeechPonyfillFactory\n  };\n}\n","/* eslint class-methods-use-this: [\"error\", { \"exceptMethods\": [\"cancel\", \"getVoices\", \"speak\"] }] */\n\nimport { createSpeechRecognitionPonyfillFromRecognizer } from 'web-speech-cognitive-services';\n\nimport createTaskQueue from './createTaskQueue';\nimport EventTarget, { getEventAttributeValue, setEventAttributeValue } from 'event-target-shim';\nimport playCognitiveServicesStream from './playCognitiveServicesStream';\nimport playWhiteNoise from './playWhiteNoise';\nimport SpeechSynthesisAudioStreamUtterance from './SpeechSynthesisAudioStreamUtterance';\n\nexport default function ({\n  audioContext,\n  enableTelemetry,\n  ponyfill = {\n    AudioContext: window.AudioContext || window.webkitAudioContext\n  },\n  recognizer,\n  textNormalization\n}) {\n  if (!ponyfill.AudioContext) {\n    console.warn(\n      'botframework-directlinespeech-sdk: This browser does not support Web Audio API. Speech support is disabled.'\n    );\n\n    return () => ({});\n  }\n\n  return () => {\n    const { SpeechGrammarList, SpeechRecognition } = createSpeechRecognitionPonyfillFromRecognizer({\n      createRecognizer: () => recognizer,\n      enableTelemetry,\n      looseEvents: true,\n      textNormalization\n    });\n\n    if (!audioContext) {\n      audioContext = new ponyfill.AudioContext();\n    }\n\n    const { cancelAll, push } = createTaskQueue();\n\n    class SpeechSynthesis extends EventTarget {\n      cancel() {\n        cancelAll();\n      }\n\n      // Returns an empty array.\n      // Synthesis is done on the bot side, the content of the voice list is not meaningful on the client side.\n      getVoices() {\n        return [];\n      }\n\n      speak(utterance) {\n        const { result } = push(() => {\n          const controller = new AbortController();\n          const { signal } = controller;\n\n          return {\n            abort: controller.abort.bind(controller),\n            result: (async () => {\n              utterance.dispatchEvent(new Event('start'));\n\n              try {\n                if (utterance.audioStream) {\n                  await playCognitiveServicesStream(audioContext, utterance.audioStream, { signal });\n                } else {\n                  await playWhiteNoise(audioContext);\n                }\n              } catch (error) {\n                // Either dispatch \"end\" or \"error\" event, but not both\n                if (error.message !== 'aborted') {\n                  return utterance.dispatchEvent(new ErrorEvent(error));\n                }\n              }\n\n              utterance.dispatchEvent(new Event('end'));\n            })()\n          };\n        });\n\n        // Catching the error to prevent uncaught promise error due to cancellation.\n        result.catch(error => {\n          if (!/^cancelled/iu.test(error.message)) {\n            throw error;\n          }\n        });\n      }\n\n      get onvoiceschanged() {\n        return getEventAttributeValue(this, 'voiceschanged');\n      }\n\n      set onvoiceschanged(value) {\n        setEventAttributeValue(this, 'voiceschanged', value);\n      }\n    }\n\n    return {\n      SpeechGrammarList,\n      SpeechRecognition,\n      speechSynthesis: new SpeechSynthesis(),\n      SpeechSynthesisUtterance: SpeechSynthesisAudioStreamUtterance\n    };\n  };\n}\n","import coreJSWithResolvers from 'core-js-pure/features/promise/with-resolvers.js';\n\nexport default function withResolvers() {\n  return coreJSWithResolvers();\n}\n","import withResolvers from './utils/withResolvers';\n\nexport default function createTaskQueue() {\n  let queueWithCurrent = [];\n\n  const queue = {\n    cancelAll: () => {\n      queueWithCurrent.forEach(({ cancel }) => cancel());\n    },\n    push: fn => {\n      const cancelWithResolvers = withResolvers();\n      const resultWithResolvers = withResolvers();\n      const entry = { promise: resultWithResolvers.promise };\n      let abort;\n\n      const cancel = (entry.cancel = () => {\n        // Override the \"fn\" so we don't call the actual \"fn\" later.\n        // In this approach, we can reuse the logic inside \"start\" to handle post-cancellation.\n        fn = () => ({ result: Promise.reject(new Error('cancelled before start')) });\n\n        // Abort the task if it is currently running.\n        abort && abort();\n        cancelWithResolvers.reject(new Error('cancelled in the midway'));\n      });\n\n      const start = async () => {\n        const { abort: abortFn, result } = fn();\n\n        abort = abortFn;\n\n        try {\n          // Either wait for the actual result, or the task is being cancelled.\n          resultWithResolvers.resolve(await Promise.race([result, cancelWithResolvers.promise]));\n        } catch (error) {\n          resultWithResolvers.reject(error);\n        }\n\n        queueWithCurrent = queueWithCurrent.filter(e => e !== entry);\n      };\n\n      const lastEntry = queueWithCurrent[queueWithCurrent.length - 1];\n      const lastPromise = (lastEntry && lastEntry.promise) || Promise.resolve();\n\n      queueWithCurrent.push(entry);\n\n      // After the last promise resolved/rejected, we will start this task.\n      // We will start even if the last promise rejected.\n      lastPromise.then(start, start);\n\n      return {\n        cancel,\n        result: resultWithResolvers.promise\n      };\n    }\n  };\n\n  Object.defineProperty(queue, 'length', { get: () => queueWithCurrent.length });\n\n  return queue;\n}\n","/**\n * Assert a condition.\n * @param condition The condition that it should satisfy.\n * @param message The error message.\n * @param args The arguments for replacing placeholders in the message.\n */\nexport function assertType(\n    condition: boolean,\n    message: string,\n    ...args: any[]\n): asserts condition {\n    if (!condition) {\n        throw new TypeError(format(message, args))\n    }\n}\n\n/**\n * Convert a text and arguments to one string.\n * @param message The formating text\n * @param args The arguments.\n */\nexport function format(message: string, args: any[]): string {\n    let i = 0\n    return message.replace(/%[os]/gu, () => anyToString(args[i++]))\n}\n\n/**\n * Convert a value to a string representation.\n * @param x The value to get the string representation.\n */\nexport function anyToString(x: any): string {\n    if (typeof x !== \"object\" || x === null) {\n        return String(x)\n    }\n    return Object.prototype.toString.call(x)\n}\n","import { anyToString, assertType } from \"./misc\"\n\ndeclare const console: any\ndeclare const dispatchEvent: any\ndeclare const ErrorEvent: any\ndeclare const process: any\n\nlet currentErrorHandler: setErrorHandler.ErrorHandler | undefined\n\n/**\n * Set the error handler.\n * @param value The error handler to set.\n */\nexport function setErrorHandler(\n    value: setErrorHandler.ErrorHandler | undefined,\n): void {\n    assertType(\n        typeof value === \"function\" || value === undefined,\n        \"The error handler must be a function or undefined, but got %o.\",\n        value,\n    )\n    currentErrorHandler = value\n}\nexport namespace setErrorHandler {\n    /**\n     * The error handler.\n     * @param error The thrown error object.\n     */\n    export type ErrorHandler = (error: Error) => void\n}\n\n/**\n * Print a error message.\n * @param maybeError The error object.\n */\nexport function reportError(maybeError: unknown): void {\n    try {\n        const error =\n            maybeError instanceof Error\n                ? maybeError\n                : new Error(anyToString(maybeError))\n\n        // Call the user-defined error handler if exists.\n        if (currentErrorHandler) {\n            currentErrorHandler(error)\n            return\n        }\n\n        // Dispatch an `error` event if this is on a browser.\n        if (\n            typeof dispatchEvent === \"function\" &&\n            typeof ErrorEvent === \"function\"\n        ) {\n            dispatchEvent(\n                new ErrorEvent(\"error\", { error, message: error.message }),\n            )\n        }\n\n        // Emit an `uncaughtException` event if this is on Node.js.\n        //istanbul ignore else\n        else if (\n            typeof process !== \"undefined\" &&\n            typeof process.emit === \"function\"\n        ) {\n            process.emit(\"uncaughtException\", error)\n            return\n        }\n\n        // Otherwise, print the error.\n        console.error(error)\n    } catch {\n        // ignore.\n    }\n}\n","declare const globalThis: any\ndeclare const window: any\ndeclare const self: any\ndeclare const global: any\n\n/**\n * The global object.\n */\n//istanbul ignore next\nexport const Global: any =\n    typeof window !== \"undefined\"\n        ? window\n        : typeof self !== \"undefined\"\n        ? self\n        : typeof global !== \"undefined\"\n        ? global\n        : typeof globalThis !== \"undefined\"\n        ? globalThis\n        : undefined\n","import { assertType } from \"./misc\"\n\ndeclare const console: any\n\nlet currentWarnHandler: setWarningHandler.WarningHandler | undefined\n\n/**\n * Set the warning handler.\n * @param value The warning handler to set.\n */\nexport function setWarningHandler(\n    value: setWarningHandler.WarningHandler | undefined,\n): void {\n    assertType(\n        typeof value === \"function\" || value === undefined,\n        \"The warning handler must be a function or undefined, but got %o.\",\n        value,\n    )\n    currentWarnHandler = value\n}\nexport namespace setWarningHandler {\n    /**\n     * The warning information.\n     */\n    export interface Warning {\n        /**\n         * The code of this warning.\n         */\n        code: string\n        /**\n         * The message in English.\n         */\n        message: string\n        /**\n         * The arguments for replacing placeholders in the text.\n         */\n        args: any[]\n    }\n\n    /**\n     * The warning handler.\n     * @param warning The warning.\n     */\n    export type WarningHandler = (warning: Warning) => void\n}\n\n/**\n * The warning information.\n */\nexport class Warning<TArgs extends any[]> {\n    readonly code: string\n    readonly message: string\n\n    constructor(code: string, message: string) {\n        this.code = code\n        this.message = message\n    }\n\n    /**\n     * Report this warning.\n     * @param args The arguments of the warning.\n     */\n    warn(...args: TArgs): void {\n        try {\n            // Call the user-defined warning handler if exists.\n            if (currentWarnHandler) {\n                currentWarnHandler({ ...this, args })\n                return\n            }\n\n            // Otherwise, print the warning.\n            const stack = (new Error().stack ?? \"\").replace(\n                /^(?:.+?\\n){2}/gu,\n                \"\\n\",\n            )\n            console.warn(this.message, ...args, stack)\n        } catch {\n            // Ignore.\n        }\n    }\n}\n","import { EventTarget } from \"./event-target\" // Used as only type, so no circular.\nimport { Warning } from \"./warning-handler\"\n\nexport const InitEventWasCalledWhileDispatching = new Warning<[]>(\n    \"W01\",\n    \"Unable to initialize event under dispatching.\",\n)\n\nexport const FalsyWasAssignedToCancelBubble = new Warning<[]>(\n    \"W02\",\n    \"Assigning any falsy value to 'cancelBubble' property has no effect.\",\n)\n\nexport const TruthyWasAssignedToReturnValue = new Warning<[]>(\n    \"W03\",\n    \"Assigning any truthy value to 'returnValue' property has no effect.\",\n)\n\nexport const NonCancelableEventWasCanceled = new Warning<[]>(\n    \"W04\",\n    \"Unable to preventDefault on non-cancelable events.\",\n)\n\nexport const CanceledInPassiveListener = new Warning<[]>(\n    \"W05\",\n    \"Unable to preventDefault inside passive event listener invocation.\",\n)\n\nexport const EventListenerWasDuplicated = new Warning<\n    [type: \"bubble\" | \"capture\", callback: EventTarget.EventListener<any, any>]\n>(\n    \"W06\",\n    \"An event listener wasn't added because it has been added already: %o, %o\",\n)\n\nexport const OptionWasIgnored = new Warning<\n    [name: \"passive\" | \"once\" | \"signal\"]\n>(\n    \"W07\",\n    \"The %o option value was abandoned because the event listener wasn't added as duplicated.\",\n)\n\nexport const InvalidEventListener = new Warning<\n    [callback: EventTarget.EventListener<any, any> | {} | null | undefined]\n>(\n    \"W08\",\n    \"The 'callback' argument must be a function or an object that has 'handleEvent' method: %o\",\n)\n\nexport const InvalidAttributeHandler = new Warning<\n    [callback: EventTarget.EventListener<any, any> | {}]\n>(\"W09\", \"Event attribute handler must be a function: %o\")\n","import { EventTarget } from \"./event-target\" // Used as only type, so no circular.\nimport { Global } from \"./global\"\nimport { assertType } from \"./misc\"\nimport {\n    CanceledInPassiveListener,\n    FalsyWasAssignedToCancelBubble,\n    InitEventWasCalledWhileDispatching,\n    NonCancelableEventWasCanceled,\n    TruthyWasAssignedToReturnValue,\n} from \"./warnings\"\n\n/*eslint-disable class-methods-use-this */\n\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * `EventTarget` shim can control the internal state of this `Event` objects.\n * @see https://dom.spec.whatwg.org/#event\n */\nexport class Event<TEventType extends string = string> {\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n    static get NONE(): number {\n        return NONE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n    static get CAPTURING_PHASE(): number {\n        return CAPTURING_PHASE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n    static get AT_TARGET(): number {\n        return AT_TARGET\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n    static get BUBBLING_PHASE(): number {\n        return BUBBLING_PHASE\n    }\n\n    /**\n     * Initialize this event instance.\n     * @param type The type of this event.\n     * @param eventInitDict Options to initialize.\n     * @see https://dom.spec.whatwg.org/#dom-event-event\n     */\n    constructor(type: TEventType, eventInitDict?: Event.EventInit) {\n        Object.defineProperty(this, \"isTrusted\", {\n            value: false,\n            enumerable: true,\n        })\n\n        const opts = eventInitDict ?? {}\n        internalDataMap.set(this, {\n            type: String(type),\n            bubbles: Boolean(opts.bubbles),\n            cancelable: Boolean(opts.cancelable),\n            composed: Boolean(opts.composed),\n            target: null,\n            currentTarget: null,\n            stopPropagationFlag: false,\n            stopImmediatePropagationFlag: false,\n            canceledFlag: false,\n            inPassiveListenerFlag: false,\n            dispatchFlag: false,\n            timeStamp: Date.now(),\n        })\n    }\n\n    /**\n     * The type of this event.\n     * @see https://dom.spec.whatwg.org/#dom-event-type\n     */\n    get type(): TEventType {\n        return $(this).type as TEventType\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-target\n     */\n    get target(): EventTarget | null {\n        return $(this).target\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @deprecated Use the `target` property instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-srcelement\n     */\n    get srcElement(): EventTarget | null {\n        return $(this).target\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * @see https://dom.spec.whatwg.org/#dom-event-currenttarget\n     */\n    get currentTarget(): EventTarget | null {\n        return $(this).currentTarget\n    }\n\n    /**\n     * The event target of the current dispatching.\n     * This doesn't support node tree.\n     * @see https://dom.spec.whatwg.org/#dom-event-composedpath\n     */\n    composedPath(): EventTarget[] {\n        const currentTarget = $(this).currentTarget\n        if (currentTarget) {\n            return [currentTarget]\n        }\n        return []\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-none\n     */\n    get NONE(): number {\n        return NONE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-capturing_phase\n     */\n    get CAPTURING_PHASE(): number {\n        return CAPTURING_PHASE\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-at_target\n     */\n    get AT_TARGET(): number {\n        return AT_TARGET\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbling_phase\n     */\n    get BUBBLING_PHASE(): number {\n        return BUBBLING_PHASE\n    }\n\n    /**\n     * The current event phase.\n     * @see https://dom.spec.whatwg.org/#dom-event-eventphase\n     */\n    get eventPhase(): number {\n        return $(this).dispatchFlag ? 2 : 0\n    }\n\n    /**\n     * Stop event bubbling.\n     * Because this shim doesn't support node tree, this merely changes the `cancelBubble` property value.\n     * @see https://dom.spec.whatwg.org/#dom-event-stoppropagation\n     */\n    stopPropagation(): void {\n        $(this).stopPropagationFlag = true\n    }\n\n    /**\n     * `true` if event bubbling was stopped.\n     * @deprecated\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n    get cancelBubble(): boolean {\n        return $(this).stopPropagationFlag\n    }\n\n    /**\n     * Stop event bubbling if `true` is set.\n     * @deprecated Use the `stopPropagation()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelbubble\n     */\n    set cancelBubble(value: boolean) {\n        if (value) {\n            $(this).stopPropagationFlag = true\n        } else {\n            FalsyWasAssignedToCancelBubble.warn()\n        }\n    }\n\n    /**\n     * Stop event bubbling and subsequent event listener callings.\n     * @see https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation\n     */\n    stopImmediatePropagation(): void {\n        const data = $(this)\n        data.stopPropagationFlag = data.stopImmediatePropagationFlag = true\n    }\n\n    /**\n     * `true` if this event will bubble.\n     * @see https://dom.spec.whatwg.org/#dom-event-bubbles\n     */\n    get bubbles(): boolean {\n        return $(this).bubbles\n    }\n\n    /**\n     * `true` if this event can be canceled by the `preventDefault()` method.\n     * @see https://dom.spec.whatwg.org/#dom-event-cancelable\n     */\n    get cancelable(): boolean {\n        return $(this).cancelable\n    }\n\n    /**\n     * `true` if the default behavior will act.\n     * @deprecated Use the `defaultPrevented` proeprty instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n    get returnValue(): boolean {\n        return !$(this).canceledFlag\n    }\n\n    /**\n     * Cancel the default behavior if `false` is set.\n     * @deprecated Use the `preventDefault()` method instead.\n     * @see https://dom.spec.whatwg.org/#dom-event-returnvalue\n     */\n    set returnValue(value: boolean) {\n        if (!value) {\n            setCancelFlag($(this))\n        } else {\n            TruthyWasAssignedToReturnValue.warn()\n        }\n    }\n\n    /**\n     * Cancel the default behavior.\n     * @see https://dom.spec.whatwg.org/#dom-event-preventdefault\n     */\n    preventDefault(): void {\n        setCancelFlag($(this))\n    }\n\n    /**\n     * `true` if the default behavior was canceled.\n     * @see https://dom.spec.whatwg.org/#dom-event-defaultprevented\n     */\n    get defaultPrevented(): boolean {\n        return $(this).canceledFlag\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-composed\n     */\n    get composed(): boolean {\n        return $(this).composed\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-istrusted\n     */\n    //istanbul ignore next\n    get isTrusted(): boolean {\n        return false\n    }\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-timestamp\n     */\n    get timeStamp(): number {\n        return $(this).timeStamp\n    }\n\n    /**\n     * @deprecated Don't use this method. The constructor did initialization.\n     */\n    initEvent(type: string, bubbles = false, cancelable = false) {\n        const data = $(this)\n        if (data.dispatchFlag) {\n            InitEventWasCalledWhileDispatching.warn()\n            return\n        }\n\n        internalDataMap.set(this, {\n            ...data,\n            type: String(type),\n            bubbles: Boolean(bubbles),\n            cancelable: Boolean(cancelable),\n            target: null,\n            currentTarget: null,\n            stopPropagationFlag: false,\n            stopImmediatePropagationFlag: false,\n            canceledFlag: false,\n        })\n    }\n}\n\n/*eslint-enable class-methods-use-this */\n\nexport namespace Event {\n    /**\n     * The options of the `Event` constructor.\n     * @see https://dom.spec.whatwg.org/#dictdef-eventinit\n     */\n    export interface EventInit {\n        bubbles?: boolean\n        cancelable?: boolean\n        composed?: boolean\n    }\n}\n\nexport { $ as getEventInternalData }\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nconst NONE = 0\nconst CAPTURING_PHASE = 1\nconst AT_TARGET = 2\nconst BUBBLING_PHASE = 3\n\n/**\n * Private data.\n */\ninterface EventInternalData {\n    /**\n     * The value of `type` attribute.\n     */\n    readonly type: string\n    /**\n     * The value of `bubbles` attribute.\n     */\n    readonly bubbles: boolean\n    /**\n     * The value of `cancelable` attribute.\n     */\n    readonly cancelable: boolean\n    /**\n     * The value of `composed` attribute.\n     */\n    readonly composed: boolean\n    /**\n     * The value of `timeStamp` attribute.\n     */\n    readonly timeStamp: number\n\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-target\n     */\n    target: EventTarget | null\n    /**\n     * @see https://dom.spec.whatwg.org/#dom-event-currenttarget\n     */\n    currentTarget: EventTarget | null\n    /**\n     * @see https://dom.spec.whatwg.org/#stop-propagation-flag\n     */\n    stopPropagationFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#stop-immediate-propagation-flag\n     */\n    stopImmediatePropagationFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#canceled-flag\n     */\n    canceledFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#in-passive-listener-flag\n     */\n    inPassiveListenerFlag: boolean\n    /**\n     * @see https://dom.spec.whatwg.org/#dispatch-flag\n     */\n    dispatchFlag: boolean\n}\n\n/**\n * Private data for event wrappers.\n */\nconst internalDataMap = new WeakMap<any, EventInternalData>()\n\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\nfunction $(event: unknown, name = \"this\"): EventInternalData {\n    const retv = internalDataMap.get(event)\n    assertType(\n        retv != null,\n        \"'%s' must be an object that Event constructor created, but got another one: %o\",\n        name,\n        event,\n    )\n    return retv\n}\n\n/**\n * https://dom.spec.whatwg.org/#set-the-canceled-flag\n * @param data private data.\n */\nfunction setCancelFlag(data: EventInternalData) {\n    if (data.inPassiveListenerFlag) {\n        CanceledInPassiveListener.warn()\n        return\n    }\n    if (!data.cancelable) {\n        NonCancelableEventWasCanceled.warn()\n        return\n    }\n\n    data.canceledFlag = true\n}\n\n// Set enumerable\nObject.defineProperty(Event, \"NONE\", { enumerable: true })\nObject.defineProperty(Event, \"CAPTURING_PHASE\", { enumerable: true })\nObject.defineProperty(Event, \"AT_TARGET\", { enumerable: true })\nObject.defineProperty(Event, \"BUBBLING_PHASE\", { enumerable: true })\nconst keys = Object.getOwnPropertyNames(Event.prototype)\nfor (let i = 0; i < keys.length; ++i) {\n    if (keys[i] === \"constructor\") {\n        continue\n    }\n    Object.defineProperty(Event.prototype, keys[i], { enumerable: true })\n}\n\n// Ensure `event instanceof window.Event` is `true`.\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n    Object.setPrototypeOf(Event.prototype, Global.Event.prototype)\n}\n","import { Global } from \"./global\"\n\n/**\n * Create a new InvalidStateError instance.\n * @param message The error message.\n */\nexport function createInvalidStateError(message: string): Error {\n    if (Global.DOMException) {\n        return new Global.DOMException(message, \"InvalidStateError\")\n    }\n\n    if (DOMException == null) {\n        DOMException = class DOMException extends Error {\n            constructor(msg: string) {\n                super(msg)\n                if ((Error as any).captureStackTrace) {\n                    ;(Error as any).captureStackTrace(this, DOMException)\n                }\n            }\n            // eslint-disable-next-line class-methods-use-this\n            get code() {\n                return 11\n            }\n            // eslint-disable-next-line class-methods-use-this\n            get name() {\n                return \"InvalidStateError\"\n            }\n        }\n        Object.defineProperties(DOMException.prototype, {\n            code: { enumerable: true },\n            name: { enumerable: true },\n        })\n        defineErrorCodeProperties(DOMException)\n        defineErrorCodeProperties(DOMException.prototype)\n    }\n    return new DOMException(message)\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\nlet DOMException: { new (message: string): Error } | undefined\n\nconst ErrorCodeMap = {\n    INDEX_SIZE_ERR: 1,\n    DOMSTRING_SIZE_ERR: 2,\n    HIERARCHY_REQUEST_ERR: 3,\n    WRONG_DOCUMENT_ERR: 4,\n    INVALID_CHARACTER_ERR: 5,\n    NO_DATA_ALLOWED_ERR: 6,\n    NO_MODIFICATION_ALLOWED_ERR: 7,\n    NOT_FOUND_ERR: 8,\n    NOT_SUPPORTED_ERR: 9,\n    INUSE_ATTRIBUTE_ERR: 10,\n    INVALID_STATE_ERR: 11,\n    SYNTAX_ERR: 12,\n    INVALID_MODIFICATION_ERR: 13,\n    NAMESPACE_ERR: 14,\n    INVALID_ACCESS_ERR: 15,\n    VALIDATION_ERR: 16,\n    TYPE_MISMATCH_ERR: 17,\n    SECURITY_ERR: 18,\n    NETWORK_ERR: 19,\n    ABORT_ERR: 20,\n    URL_MISMATCH_ERR: 21,\n    QUOTA_EXCEEDED_ERR: 22,\n    TIMEOUT_ERR: 23,\n    INVALID_NODE_TYPE_ERR: 24,\n    DATA_CLONE_ERR: 25,\n}\ntype ErrorCodeMap = typeof ErrorCodeMap\n\nfunction defineErrorCodeProperties(obj: any): void {\n    const keys = Object.keys(ErrorCodeMap) as (keyof ErrorCodeMap)[]\n    for (let i = 0; i < keys.length; ++i) {\n        const key = keys[i]\n        const value = ErrorCodeMap[key]\n        Object.defineProperty(obj, key, {\n            get() {\n                return value\n            },\n            configurable: true,\n            enumerable: true,\n        })\n    }\n}\n","import { Event } from \"./event\"\nimport { Global } from \"./global\"\nimport { assertType } from \"./misc\"\n\n/**\n * An implementation of `Event` interface, that wraps a given event object.\n * This class controls the internal state of `Event`.\n * @see https://dom.spec.whatwg.org/#interface-event\n */\nexport class EventWrapper<TEventType extends string> extends Event<TEventType> {\n    /**\n     * Wrap a given event object to control states.\n     * @param event The event-like object to wrap.\n     */\n    static wrap<T extends EventLike>(event: T): EventWrapperOf<T> {\n        return new (getWrapperClassOf(event))(event)\n    }\n\n    protected constructor(event: Event<TEventType>) {\n        super(event.type, {\n            bubbles: event.bubbles,\n            cancelable: event.cancelable,\n            composed: event.composed,\n        })\n\n        if (event.cancelBubble) {\n            super.stopPropagation()\n        }\n        if (event.defaultPrevented) {\n            super.preventDefault()\n        }\n\n        internalDataMap.set(this, { original: event })\n\n        // Define accessors\n        const keys = Object.keys(event)\n        for (let i = 0; i < keys.length; ++i) {\n            const key = keys[i]\n            if (!(key in this)) {\n                Object.defineProperty(\n                    this,\n                    key,\n                    defineRedirectDescriptor(event, key),\n                )\n            }\n        }\n    }\n\n    stopPropagation(): void {\n        super.stopPropagation()\n\n        const { original } = $(this)\n        if (\"stopPropagation\" in original) {\n            original.stopPropagation!()\n        }\n    }\n\n    get cancelBubble(): boolean {\n        return super.cancelBubble\n    }\n    set cancelBubble(value: boolean) {\n        super.cancelBubble = value\n\n        const { original } = $(this)\n        if (\"cancelBubble\" in original) {\n            original.cancelBubble = value\n        }\n    }\n\n    stopImmediatePropagation(): void {\n        super.stopImmediatePropagation()\n\n        const { original } = $(this)\n        if (\"stopImmediatePropagation\" in original) {\n            original.stopImmediatePropagation!()\n        }\n    }\n\n    get returnValue(): boolean {\n        return super.returnValue\n    }\n    set returnValue(value: boolean) {\n        super.returnValue = value\n\n        const { original } = $(this)\n        if (\"returnValue\" in original) {\n            original.returnValue = value\n        }\n    }\n\n    preventDefault(): void {\n        super.preventDefault()\n\n        const { original } = $(this)\n        if (\"preventDefault\" in original) {\n            original.preventDefault!()\n        }\n    }\n\n    get timeStamp(): number {\n        const { original } = $(this)\n        if (\"timeStamp\" in original) {\n            return original.timeStamp!\n        }\n        return super.timeStamp\n    }\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\ntype EventLike = { readonly type: string } & Partial<Event>\ntype EventWrapperOf<T extends EventLike> = Event<T[\"type\"]> &\n    Omit<T, keyof Event>\n\ninterface EventWrapperInternalData {\n    readonly original: EventLike\n}\n\n/**\n * Private data for event wrappers.\n */\nconst internalDataMap = new WeakMap<any, EventWrapperInternalData>()\n\n/**\n * Get private data.\n * @param event The event object to get private data.\n * @returns The private data of the event.\n */\nfunction $(event: unknown): EventWrapperInternalData {\n    const retv = internalDataMap.get(event)\n    assertType(\n        retv != null,\n        \"'this' is expected an Event object, but got\",\n        event,\n    )\n    return retv\n}\n\n/**\n * Cache for wrapper classes.\n * @type {WeakMap<Object, Function>}\n * @private\n */\nconst wrapperClassCache = new WeakMap()\n\n// Make association for wrappers.\nwrapperClassCache.set(Object.prototype, EventWrapper)\nif (typeof Global !== \"undefined\" && typeof Global.Event !== \"undefined\") {\n    wrapperClassCache.set(Global.Event.prototype, EventWrapper)\n}\n\n/**\n * Get the wrapper class of a given prototype.\n * @param originalEvent The event object to wrap.\n */\nfunction getWrapperClassOf<T extends EventLike>(\n    originalEvent: T,\n): { new (e: T): EventWrapperOf<T> } {\n    const prototype = Object.getPrototypeOf(originalEvent)\n    if (prototype == null) {\n        return EventWrapper as any\n    }\n\n    let wrapper: any = wrapperClassCache.get(prototype)\n    if (wrapper == null) {\n        wrapper = defineWrapper(getWrapperClassOf(prototype), prototype)\n        wrapperClassCache.set(prototype, wrapper)\n    }\n\n    return wrapper\n}\n\n/**\n * Define new wrapper class.\n * @param BaseEventWrapper The base wrapper class.\n * @param originalPrototype The prototype of the original event.\n */\nfunction defineWrapper(BaseEventWrapper: any, originalPrototype: any): any {\n    class CustomEventWrapper extends BaseEventWrapper {}\n\n    const keys = Object.keys(originalPrototype)\n    for (let i = 0; i < keys.length; ++i) {\n        Object.defineProperty(\n            CustomEventWrapper.prototype,\n            keys[i],\n            defineRedirectDescriptor(originalPrototype, keys[i]),\n        )\n    }\n\n    return CustomEventWrapper\n}\n\n/**\n * Get the property descriptor to redirect a given property.\n */\nfunction defineRedirectDescriptor(obj: any, key: string): PropertyDescriptor {\n    const d = Object.getOwnPropertyDescriptor(obj, key)!\n    return {\n        get() {\n            const original: any = $(this).original\n            const value = original[key]\n            if (typeof value === \"function\") {\n                return value.bind(original)\n            }\n            return value\n        },\n        set(value: any) {\n            const original: any = $(this).original\n            original[key] = value\n        },\n        configurable: d.configurable,\n        enumerable: d.enumerable,\n    }\n}\n","import { reportError } from \"./error-handler\"\nimport { Event } from \"./event\" // Used as only type, so no circular.\nimport { EventTarget } from \"./event-target\" // Used as only type, so no circular.\n\n/**\n * The event listener concept.\n * @see https://dom.spec.whatwg.org/#concept-event-listener\n */\nexport interface Listener {\n    /**\n     * The callback function.\n     */\n    readonly callback: Listener.Callback<any, any>\n    /**\n     * The flags of this listener.\n     * This is writable to add the removed flag.\n     */\n    flags: ListenerFlags\n    /**\n     * The `AbortSignal` to remove this listener.\n     */\n    readonly signal: Listener.AbortSignal | undefined\n    /**\n     * The `abort` event listener for the `signal`.\n     * To remove it from the `signal`.\n     */\n    readonly signalListener: (() => void) | undefined\n}\n\nexport namespace Listener {\n    export type Callback<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > = CallbackFunction<TEventTarget, TEvent> | CallbackObject<TEvent>\n\n    export interface CallbackFunction<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > {\n        (this: TEventTarget, event: TEvent): void\n    }\n\n    export interface CallbackObject<TEvent extends Event> {\n        handleEvent(event: TEvent): void\n    }\n\n    export interface AbortSignal {\n        addEventListener(type: string, callback: Callback<any, Event>): void\n        removeEventListener(type: string, callback: Callback<any, Event>): void\n    }\n}\n\n/**\n * Create a new listener.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n * @param signalListener The abort event listener for the abort signal.\n */\nexport function createListener(\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n    passive: boolean,\n    once: boolean,\n    signal: Listener.AbortSignal | undefined,\n    signalListener: (() => void) | undefined,\n): Listener {\n    return {\n        callback,\n        flags:\n            (capture ? ListenerFlags.Capture : 0) |\n            (passive ? ListenerFlags.Passive : 0) |\n            (once ? ListenerFlags.Once : 0),\n        signal,\n        signalListener,\n    }\n}\n\n/**\n * Set the `removed` flag to the given listener.\n * @param listener The listener to check.\n */\nexport function setRemoved(listener: Listener): void {\n    listener.flags |= ListenerFlags.Removed\n}\n\n/**\n * Check if the given listener has the `capture` flag or not.\n * @param listener The listener to check.\n */\nexport function isCapture(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Capture) === ListenerFlags.Capture\n}\n\n/**\n * Check if the given listener has the `passive` flag or not.\n * @param listener The listener to check.\n */\nexport function isPassive(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Passive) === ListenerFlags.Passive\n}\n\n/**\n * Check if the given listener has the `once` flag or not.\n * @param listener The listener to check.\n */\nexport function isOnce(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Once) === ListenerFlags.Once\n}\n\n/**\n * Check if the given listener has the `removed` flag or not.\n * @param listener The listener to check.\n */\nexport function isRemoved(listener: Listener): boolean {\n    return (listener.flags & ListenerFlags.Removed) === ListenerFlags.Removed\n}\n\n/**\n * Call an event listener.\n * @param listener The listener to call.\n * @param target The event target object for `thisArg`.\n * @param event The event object for the first argument.\n * @param attribute `true` if this callback is an event attribute handler.\n */\nexport function invokeCallback(\n    { callback }: Listener,\n    target: EventTarget<any, any>,\n    event: Event<any>,\n): void {\n    try {\n        if (typeof callback === \"function\") {\n            callback.call(target, event)\n        } else if (typeof callback.handleEvent === \"function\") {\n            callback.handleEvent(event)\n        }\n    } catch (thrownError) {\n        reportError(thrownError)\n    }\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * The flags of listeners.\n */\nconst enum ListenerFlags {\n    Capture = 0x01,\n    Passive = 0x02,\n    Once = 0x04,\n    Removed = 0x08,\n}\n","import { createListener, isCapture, Listener, setRemoved } from \"./listener\"\n\n/**\n * Information of an listener list.\n */\nexport interface ListenerList {\n    /**\n     * The callback function of the event attribute handler.\n     */\n    attrCallback: Listener.CallbackFunction<any, any> | undefined\n    /**\n     * The listener of the event attribute handler.\n     */\n    attrListener: Listener | undefined\n    /**\n     * `true` if the `dispatchEvent` method is traversing the current `listeners` array.\n     */\n    cow: boolean\n    /**\n     * The listeners.\n     * This is writable for copy-on-write.\n     */\n    listeners: Listener[]\n}\n\n/**\n * Find the index of given listener.\n * This returns `-1` if not found.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n */\nexport function findIndexOfListener(\n    { listeners }: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n): number {\n    for (let i = 0; i < listeners.length; ++i) {\n        if (\n            listeners[i].callback === callback &&\n            isCapture(listeners[i]) === capture\n        ) {\n            return i\n        }\n    }\n    return -1\n}\n\n/**\n * Add the given listener.\n * Does copy-on-write if needed.\n * @param list The listener list.\n * @param callback The callback function.\n * @param capture The capture flag.\n * @param passive The passive flag.\n * @param once The once flag.\n * @param signal The abort signal.\n */\nexport function addListener(\n    list: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n    passive: boolean,\n    once: boolean,\n    signal: Listener.AbortSignal | undefined,\n): Listener {\n    let signalListener: (() => void) | undefined\n    if (signal) {\n        signalListener = removeListener.bind(null, list, callback, capture)\n        signal.addEventListener(\"abort\", signalListener)\n    }\n\n    const listener = createListener(\n        callback,\n        capture,\n        passive,\n        once,\n        signal,\n        signalListener,\n    )\n\n    if (list.cow) {\n        list.cow = false\n        list.listeners = [...list.listeners, listener]\n    } else {\n        list.listeners.push(listener)\n    }\n\n    return listener\n}\n\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param callback The callback function to find.\n * @param capture The capture flag to find.\n * @returns `true` if it mutated the list directly.\n */\nexport function removeListener(\n    list: ListenerList,\n    callback: Listener.Callback<any, any>,\n    capture: boolean,\n): boolean {\n    const index = findIndexOfListener(list, callback, capture)\n    if (index !== -1) {\n        return removeListenerAt(list, index)\n    }\n    return false\n}\n\n/**\n * Remove a listener.\n * @param list The listener list.\n * @param index The index of the target listener.\n * @param disableCow Disable copy-on-write if true.\n * @returns `true` if it mutated the `listeners` array directly.\n */\nexport function removeListenerAt(\n    list: ListenerList,\n    index: number,\n    disableCow = false,\n): boolean {\n    const listener = list.listeners[index]\n\n    // Set the removed flag.\n    setRemoved(listener)\n\n    // Dispose the abort signal listener if exists.\n    if (listener.signal) {\n        listener.signal.removeEventListener(\"abort\", listener.signalListener!)\n    }\n\n    // Remove it from the array.\n    if (list.cow && !disableCow) {\n        list.cow = false\n        list.listeners = list.listeners.filter((_, i) => i !== index)\n        return false\n    }\n    list.listeners.splice(index, 1)\n    return true\n}\n","import { ListenerList } from \"./listener-list\"\n\n/**\n * The map from event types to each listener list.\n */\nexport interface ListenerListMap {\n    [type: string]: ListenerList | undefined\n}\n\n/**\n * Create a new `ListenerListMap` object.\n */\nexport function createListenerListMap(): ListenerListMap {\n    return Object.create(null)\n}\n\n/**\n * Get the listener list of the given type.\n * If the listener list has not been initialized, initialize and return it.\n * @param listenerMap The listener list map.\n * @param type The event type to get.\n */\nexport function ensureListenerList(\n    listenerMap: Record<string, ListenerList | undefined>,\n    type: string,\n): ListenerList {\n    return (listenerMap[type] ??= {\n        attrCallback: undefined,\n        attrListener: undefined,\n        cow: false,\n        listeners: [],\n    })\n}\n","import { createInvalidStateError } from \"./dom-exception\"\nimport { Event, getEventInternalData } from \"./event\"\nimport { EventWrapper } from \"./event-wrapper\"\nimport { Global } from \"./global\"\nimport {\n    invokeCallback,\n    isCapture,\n    isOnce,\n    isPassive,\n    isRemoved,\n    Listener,\n} from \"./listener\"\nimport {\n    addListener,\n    findIndexOfListener,\n    removeListener,\n    removeListenerAt,\n} from \"./listener-list\"\nimport {\n    createListenerListMap,\n    ensureListenerList,\n    ListenerListMap,\n} from \"./listener-list-map\"\nimport { assertType, format } from \"./misc\"\nimport {\n    EventListenerWasDuplicated,\n    InvalidEventListener,\n    OptionWasIgnored,\n} from \"./warnings\"\n\n/**\n * An implementation of the `EventTarget` interface.\n * @see https://dom.spec.whatwg.org/#eventtarget\n */\nexport class EventTarget<\n    TEventMap extends Record<string, Event> = Record<string, Event>,\n    TMode extends \"standard\" | \"strict\" = \"standard\"\n> {\n    /**\n     * Initialize this instance.\n     */\n    constructor() {\n        internalDataMap.set(this, createListenerListMap())\n    }\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    addEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options?: EventTarget.AddOptions,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    addEventListener(\n        type: string,\n        callback?: EventTarget.FallbackEventListener<this, TMode>,\n        options?: EventTarget.AddOptions,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    addEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback:\n            | EventTarget.EventListener<this, TEventMap[T]>\n            | null\n            | undefined,\n        capture: boolean,\n    ): void\n\n    /**\n     * Add an event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    addEventListener(\n        type: string,\n        callback: EventTarget.FallbackEventListener<this, TMode>,\n        capture: boolean,\n    ): void\n\n    // Implementation\n    addEventListener<T extends string & keyof TEventMap>(\n        type0: T,\n        callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options0?: boolean | EventTarget.AddOptions,\n    ): void {\n        const listenerMap = $(this)\n        const {\n            callback,\n            capture,\n            once,\n            passive,\n            signal,\n            type,\n        } = normalizeAddOptions(type0, callback0, options0)\n        if (callback == null || signal?.aborted) {\n            return\n        }\n        const list = ensureListenerList(listenerMap, type)\n\n        // Find existing listener.\n        const i = findIndexOfListener(list, callback, capture)\n        if (i !== -1) {\n            warnDuplicate(list.listeners[i], passive, once, signal)\n            return\n        }\n\n        // Add the new listener.\n        addListener(list, callback, capture, passive, once, signal)\n    }\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    removeEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options?: EventTarget.Options,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param options Options.\n     */\n    removeEventListener(\n        type: string,\n        callback?: EventTarget.FallbackEventListener<this, TMode>,\n        options?: EventTarget.Options,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    removeEventListener<T extends string & keyof TEventMap>(\n        type: T,\n        callback:\n            | EventTarget.EventListener<this, TEventMap[T]>\n            | null\n            | undefined,\n        capture: boolean,\n    ): void\n\n    /**\n     * Remove an added event listener.\n     * @param type The event type.\n     * @param callback The event listener.\n     * @param capture The capture flag.\n     * @deprecated Use `{capture: boolean}` object instead of a boolean value.\n     */\n    removeEventListener(\n        type: string,\n        callback: EventTarget.FallbackEventListener<this, TMode>,\n        capture: boolean,\n    ): void\n\n    // Implementation\n    removeEventListener<T extends string & keyof TEventMap>(\n        type0: T,\n        callback0?: EventTarget.EventListener<this, TEventMap[T]> | null,\n        options0?: boolean | EventTarget.Options,\n    ): void {\n        const listenerMap = $(this)\n        const { callback, capture, type } = normalizeOptions(\n            type0,\n            callback0,\n            options0,\n        )\n        const list = listenerMap[type]\n\n        if (callback != null && list) {\n            removeListener(list, callback, capture)\n        }\n    }\n\n    /**\n     * Dispatch an event.\n     * @param event The `Event` object to dispatch.\n     */\n    dispatchEvent<T extends string & keyof TEventMap>(\n        event: EventTarget.EventData<TEventMap, TMode, T>,\n    ): boolean\n\n    /**\n     * Dispatch an event.\n     * @param event The `Event` object to dispatch.\n     */\n    dispatchEvent(event: EventTarget.FallbackEvent<TMode>): boolean\n\n    // Implementation\n    dispatchEvent(\n        e:\n            | EventTarget.EventData<TEventMap, TMode, string>\n            | EventTarget.FallbackEvent<TMode>,\n    ): boolean {\n        const list = $(this)[String(e.type)]\n        if (list == null) {\n            return true\n        }\n\n        const event = e instanceof Event ? e : EventWrapper.wrap(e)\n        const eventData = getEventInternalData(event, \"event\")\n        if (eventData.dispatchFlag) {\n            throw createInvalidStateError(\"This event has been in dispatching.\")\n        }\n\n        eventData.dispatchFlag = true\n        eventData.target = eventData.currentTarget = this\n\n        if (!eventData.stopPropagationFlag) {\n            const { cow, listeners } = list\n\n            // Set copy-on-write flag.\n            list.cow = true\n\n            // Call listeners.\n            for (let i = 0; i < listeners.length; ++i) {\n                const listener = listeners[i]\n\n                // Skip if removed.\n                if (isRemoved(listener)) {\n                    continue\n                }\n\n                // Remove this listener if has the `once` flag.\n                if (isOnce(listener) && removeListenerAt(list, i, !cow)) {\n                    // Because this listener was removed, the next index is the\n                    // same as the current value.\n                    i -= 1\n                }\n\n                // Call this listener with the `passive` flag.\n                eventData.inPassiveListenerFlag = isPassive(listener)\n                invokeCallback(listener, this, event)\n                eventData.inPassiveListenerFlag = false\n\n                // Stop if the `event.stopImmediatePropagation()` method was called.\n                if (eventData.stopImmediatePropagationFlag) {\n                    break\n                }\n            }\n\n            // Restore copy-on-write flag.\n            if (!cow) {\n                list.cow = false\n            }\n        }\n\n        eventData.target = null\n        eventData.currentTarget = null\n        eventData.stopImmediatePropagationFlag = false\n        eventData.stopPropagationFlag = false\n        eventData.dispatchFlag = false\n\n        return !eventData.canceledFlag\n    }\n}\n\nexport namespace EventTarget {\n    /**\n     * The event listener.\n     */\n    export type EventListener<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > = CallbackFunction<TEventTarget, TEvent> | CallbackObject<TEvent>\n\n    /**\n     * The event listener function.\n     */\n    export interface CallbackFunction<\n        TEventTarget extends EventTarget<any, any>,\n        TEvent extends Event\n    > {\n        (this: TEventTarget, event: TEvent): void\n    }\n\n    /**\n     * The event listener object.\n     * @see https://dom.spec.whatwg.org/#callbackdef-eventlistener\n     */\n    export interface CallbackObject<TEvent extends Event> {\n        handleEvent(event: TEvent): void\n    }\n\n    /**\n     * The common options for both `addEventListener` and `removeEventListener` methods.\n     * @see https://dom.spec.whatwg.org/#dictdef-eventlisteneroptions\n     */\n    export interface Options {\n        capture?: boolean\n    }\n\n    /**\n     * The options for the `addEventListener` methods.\n     * @see https://dom.spec.whatwg.org/#dictdef-addeventlisteneroptions\n     */\n    export interface AddOptions extends Options {\n        passive?: boolean\n        once?: boolean\n        signal?: AbortSignal | null | undefined\n    }\n\n    /**\n     * The abort signal.\n     * @see https://dom.spec.whatwg.org/#abortsignal\n     */\n    export interface AbortSignal extends EventTarget<{ abort: Event }> {\n        readonly aborted: boolean\n        onabort: CallbackFunction<this, Event> | null\n    }\n\n    /**\n     * The event data to dispatch in strict mode.\n     */\n    export type EventData<\n        TEventMap extends Record<string, Event>,\n        TMode extends \"standard\" | \"strict\",\n        TEventType extends string\n    > = TMode extends \"strict\"\n        ? IsValidEventMap<TEventMap> extends true\n            ? ExplicitType<TEventType> &\n                  Omit<TEventMap[TEventType], keyof Event> &\n                  Partial<Omit<Event, \"type\">>\n            : never\n        : never\n\n    /**\n     * Define explicit `type` property if `T` is a string literal.\n     * Otherwise, never.\n     */\n    export type ExplicitType<T extends string> = string extends T\n        ? never\n        : { readonly type: T }\n\n    /**\n     * The event listener type in standard mode.\n     * Otherwise, never.\n     */\n    export type FallbackEventListener<\n        TEventTarget extends EventTarget<any, any>,\n        TMode extends \"standard\" | \"strict\"\n    > = TMode extends \"standard\"\n        ? EventListener<TEventTarget, Event> | null | undefined\n        : never\n\n    /**\n     * The event type in standard mode.\n     * Otherwise, never.\n     */\n    export type FallbackEvent<\n        TMode extends \"standard\" | \"strict\"\n    > = TMode extends \"standard\" ? Event : never\n\n    /**\n     * Check if given event map is valid.\n     * It's valid if the keys of the event map are narrower than `string`.\n     */\n    export type IsValidEventMap<T> = string extends keyof T ? false : true\n}\n\nexport { $ as getEventTargetInternalData }\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Internal data for EventTarget\n */\ntype EventTargetInternalData = ListenerListMap\n\n/**\n * Internal data.\n */\nconst internalDataMap = new WeakMap<any, EventTargetInternalData>()\n\n/**\n * Get private data.\n * @param target The event target object to get private data.\n * @param name The variable name to report.\n * @returns The private data of the event.\n */\nfunction $(target: any, name = \"this\"): EventTargetInternalData {\n    const retv = internalDataMap.get(target)\n    assertType(\n        retv != null,\n        \"'%s' must be an object that EventTarget constructor created, but got another one: %o\",\n        name,\n        target,\n    )\n    return retv\n}\n\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\nfunction normalizeAddOptions(\n    type: string,\n    callback: EventTarget.EventListener<any, any> | null | undefined,\n    options: boolean | EventTarget.AddOptions | undefined,\n): {\n    type: string\n    callback: EventTarget.EventListener<any, any> | undefined\n    capture: boolean\n    passive: boolean\n    once: boolean\n    signal: EventTarget.AbortSignal | undefined\n} {\n    assertCallback(callback)\n\n    if (typeof options === \"object\" && options !== null) {\n        return {\n            type: String(type),\n            callback: callback ?? undefined,\n            capture: Boolean(options.capture),\n            passive: Boolean(options.passive),\n            once: Boolean(options.once),\n            signal: options.signal ?? undefined,\n        }\n    }\n\n    return {\n        type: String(type),\n        callback: callback ?? undefined,\n        capture: Boolean(options),\n        passive: false,\n        once: false,\n        signal: undefined,\n    }\n}\n\n/**\n * Normalize options.\n * @param options The options to normalize.\n */\nfunction normalizeOptions(\n    type: string,\n    callback: EventTarget.EventListener<any, any> | null | undefined,\n    options: boolean | EventTarget.Options | undefined,\n): {\n    type: string\n    callback: EventTarget.EventListener<any, any> | undefined\n    capture: boolean\n} {\n    assertCallback(callback)\n\n    if (typeof options === \"object\" && options !== null) {\n        return {\n            type: String(type),\n            callback: callback ?? undefined,\n            capture: Boolean(options.capture),\n        }\n    }\n\n    return {\n        type: String(type),\n        callback: callback ?? undefined,\n        capture: Boolean(options),\n    }\n}\n\n/**\n * Assert the type of 'callback' argument.\n * @param callback The callback to check.\n */\nfunction assertCallback(callback: any): void {\n    if (\n        typeof callback === \"function\" ||\n        (typeof callback === \"object\" &&\n            callback !== null &&\n            typeof callback.handleEvent === \"function\")\n    ) {\n        return\n    }\n    if (callback == null || typeof callback === \"object\") {\n        InvalidEventListener.warn(callback)\n        return\n    }\n\n    throw new TypeError(format(InvalidEventListener.message, [callback]))\n}\n\n/**\n * Print warning for duplicated.\n * @param listener The current listener that is duplicated.\n * @param passive The passive flag of the new duplicated listener.\n * @param once The once flag of the new duplicated listener.\n * @param signal The signal object of the new duplicated listener.\n */\nfunction warnDuplicate(\n    listener: Listener,\n    passive: boolean,\n    once: boolean,\n    signal: EventTarget.AbortSignal | undefined,\n): void {\n    EventListenerWasDuplicated.warn(\n        isCapture(listener) ? \"capture\" : \"bubble\",\n        listener.callback,\n    )\n\n    if (isPassive(listener) !== passive) {\n        OptionWasIgnored.warn(\"passive\")\n    }\n    if (isOnce(listener) !== once) {\n        OptionWasIgnored.warn(\"once\")\n    }\n    if (listener.signal !== signal) {\n        OptionWasIgnored.warn(\"signal\")\n    }\n}\n\n// Set enumerable\nconst keys = Object.getOwnPropertyNames(EventTarget.prototype)\nfor (let i = 0; i < keys.length; ++i) {\n    if (keys[i] === \"constructor\") {\n        continue\n    }\n    Object.defineProperty(EventTarget.prototype, keys[i], { enumerable: true })\n}\n\n// Ensure `eventTarget instanceof window.EventTarget` is `true`.\nif (\n    typeof Global !== \"undefined\" &&\n    typeof Global.EventTarget !== \"undefined\"\n) {\n    Object.setPrototypeOf(EventTarget.prototype, Global.EventTarget.prototype)\n}\n","import { Event } from \"./event\"\nimport { EventTarget, getEventTargetInternalData } from \"./event-target\"\nimport { addListener, ListenerList, removeListener } from \"./listener-list\"\nimport { ensureListenerList } from \"./listener-list-map\"\nimport { InvalidAttributeHandler } from \"./warnings\"\n\n/**\n * Get the current value of a given event attribute.\n * @param target The `EventTarget` object to get.\n * @param type The event type.\n */\nexport function getEventAttributeValue<\n    TEventTarget extends EventTarget<any, any>,\n    TEvent extends Event\n>(\n    target: TEventTarget,\n    type: string,\n): EventTarget.CallbackFunction<TEventTarget, TEvent> | null {\n    const listMap = getEventTargetInternalData(target, \"target\")\n    return listMap[type]?.attrCallback ?? null\n}\n\n/**\n * Set an event listener to a given event attribute.\n * @param target The `EventTarget` object to set.\n * @param type The event type.\n * @param callback The event listener.\n */\nexport function setEventAttributeValue(\n    target: EventTarget<any, any>,\n    type: string,\n    callback: EventTarget.CallbackFunction<any, any> | null,\n): void {\n    if (callback != null && typeof callback !== \"function\") {\n        InvalidAttributeHandler.warn(callback)\n    }\n\n    if (\n        typeof callback === \"function\" ||\n        (typeof callback === \"object\" && callback !== null)\n    ) {\n        upsertEventAttributeListener(target, type, callback)\n    } else {\n        removeEventAttributeListener(target, type)\n    }\n}\n\n//------------------------------------------------------------------------------\n// Helpers\n//------------------------------------------------------------------------------\n\n/**\n * Update or insert the given event attribute handler.\n * @param target The `EventTarget` object to set.\n * @param type The event type.\n * @param callback The event listener.\n */\nfunction upsertEventAttributeListener<\n    TEventTarget extends EventTarget<any, any>\n>(\n    target: TEventTarget,\n    type: string,\n    callback: EventTarget.CallbackFunction<TEventTarget, any>,\n): void {\n    const list = ensureListenerList(\n        getEventTargetInternalData(target, \"target\"),\n        String(type),\n    )\n    list.attrCallback = callback\n\n    if (list.attrListener == null) {\n        list.attrListener = addListener(\n            list,\n            defineEventAttributeCallback(list),\n            false,\n            false,\n            false,\n            undefined,\n        )\n    }\n}\n\n/**\n * Remove the given event attribute handler.\n * @param target The `EventTarget` object to remove.\n * @param type The event type.\n * @param callback The event listener.\n */\nfunction removeEventAttributeListener(\n    target: EventTarget<any, any>,\n    type: string,\n): void {\n    const listMap = getEventTargetInternalData(target, \"target\")\n    const list = listMap[String(type)]\n    if (list && list.attrListener) {\n        removeListener(list, list.attrListener.callback, false)\n        list.attrCallback = list.attrListener = undefined\n    }\n}\n\n/**\n * Define the callback function for the given listener list object.\n * It calls `attrCallback` property if the property value is a function.\n * @param list The `ListenerList` object.\n */\nfunction defineEventAttributeCallback(\n    list: ListenerList,\n): EventTarget.CallbackFunction<any, any> {\n    return function (event) {\n        const callback = list.attrCallback\n        if (typeof callback === \"function\") {\n            callback.call(this, event)\n        }\n    }\n}\n","import { Event } from \"./event\"\nimport {\n    getEventAttributeValue,\n    setEventAttributeValue,\n} from \"./event-attribute-handler\"\nimport { EventTarget } from \"./event-target\"\n\n/**\n * Define an `EventTarget` class that has event attibutes.\n * @param types The types to define event attributes.\n * @deprecated Use `getEventAttributeValue`/`setEventAttributeValue` pair on your derived class instead because of static analysis friendly.\n */\nexport function defineCustomEventTarget<\n    TEventMap extends Record<string, Event>,\n    TMode extends \"standard\" | \"strict\" = \"standard\"\n>(\n    ...types: (string & keyof TEventMap)[]\n): defineCustomEventTarget.CustomEventTargetConstructor<TEventMap, TMode> {\n    class CustomEventTarget extends EventTarget {}\n    for (let i = 0; i < types.length; ++i) {\n        defineEventAttribute(CustomEventTarget.prototype, types[i])\n    }\n\n    return CustomEventTarget as any\n}\n\nexport namespace defineCustomEventTarget {\n    /**\n     * The interface of CustomEventTarget constructor.\n     */\n    export type CustomEventTargetConstructor<\n        TEventMap extends Record<string, Event>,\n        TMode extends \"standard\" | \"strict\"\n    > = {\n        /**\n         * Create a new instance.\n         */\n        new (): CustomEventTarget<TEventMap, TMode>\n        /**\n         * prototype object.\n         */\n        prototype: CustomEventTarget<TEventMap, TMode>\n    }\n\n    /**\n     * The interface of CustomEventTarget.\n     */\n    export type CustomEventTarget<\n        TEventMap extends Record<string, Event>,\n        TMode extends \"standard\" | \"strict\"\n    > = EventTarget<TEventMap, TMode> &\n        defineEventAttribute.EventAttributes<any, TEventMap>\n}\n\n/**\n * Define an event attribute.\n * @param target The `EventTarget` object to define an event attribute.\n * @param type The event type to define.\n * @param _eventClass Unused, but to infer `Event` class type.\n * @deprecated Use `getEventAttributeValue`/`setEventAttributeValue` pair on your derived class instead because of static analysis friendly.\n */\nexport function defineEventAttribute<\n    TEventTarget extends EventTarget,\n    TEventType extends string,\n    TEventConstrucor extends typeof Event\n>(\n    target: TEventTarget,\n    type: TEventType,\n    _eventClass?: TEventConstrucor,\n): asserts target is TEventTarget &\n    defineEventAttribute.EventAttributes<\n        TEventTarget,\n        Record<TEventType, InstanceType<TEventConstrucor>>\n    > {\n    Object.defineProperty(target, `on${type}`, {\n        get() {\n            return getEventAttributeValue(this, type)\n        },\n        set(value) {\n            setEventAttributeValue(this, type, value)\n        },\n        configurable: true,\n        enumerable: true,\n    })\n}\n\nexport namespace defineEventAttribute {\n    /**\n     * Definition of event attributes.\n     */\n    export type EventAttributes<\n        TEventTarget extends EventTarget<any, any>,\n        TEventMap extends Record<string, Event>\n    > = {\n        [P in string &\n            keyof TEventMap as `on${P}`]: EventTarget.CallbackFunction<\n            TEventTarget,\n            TEventMap[P]\n        > | null\n    }\n}\n","// Currently, Web Chat uses a triple-buffer approach.\nconst NUM_BUFFER = 3;\n\nfunction zeroBuffer(buffer) {\n  const channels = buffer.numberOfChannels;\n\n  for (let channel = 0; channel < channels; channel++) {\n    const audioData = buffer.getChannelData(channel);\n\n    [].fill.call(audioData, 0);\n  }\n}\n\nfunction copyBuffer(buffer, multiChannelArray) {\n  const channels = buffer.numberOfChannels;\n\n  for (let channel = 0; channel < channels; channel++) {\n    const float32Array = multiChannelArray[+channel];\n\n    // Note that Safari does not support AudioBuffer.copyToChannel yet.\n    if (buffer.copyToChannel) {\n      buffer.copyToChannel(float32Array, channel);\n    } else {\n      const { length: float32ArrayLength } = float32Array;\n      const perChannelBuffer = buffer.getChannelData(channel);\n\n      for (let offset = 0; offset < float32ArrayLength; offset++) {\n        perChannelBuffer[+offset] = float32Array[+offset];\n      }\n    }\n  }\n}\n\n// This is a multi-buffering player. Users can keep pushing buffer to Web Chat.\n// The buffer, realized as BufferSource, is queued to AudioContext.\n// Data will be queued as quickly and frequently as possible.\n// Web Chat does not support progressive buffering (pushing a partial buffer) and there are currently no plans to implement.\n\nexport default function createMultiBufferingPlayer(audioContext, { channels, samplesPerSec }, numSamplePerBuffer) {\n  const freeBuffers = new Array(NUM_BUFFER)\n    .fill()\n    .map(() => audioContext.createBuffer(channels, numSamplePerBuffer, samplesPerSec));\n  let queuedBufferSources = [];\n  let nextSchedule;\n\n  const queue = [];\n\n  const playNext = () => {\n    if (typeof nextSchedule !== 'number') {\n      nextSchedule = audioContext.currentTime;\n    }\n\n    const bufferSource = audioContext.createBufferSource();\n    const multiChannelArray = queue.shift();\n\n    if (typeof multiChannelArray === 'function') {\n      // If the queued item is a function, it is because the user called \"flush\".\n      // The \"flush\" function will callback when all queued buffers before the \"flush\" call have played.\n      multiChannelArray();\n    } else if (multiChannelArray) {\n      const nextBuffer = freeBuffers.shift();\n\n      // If all buffers are currently occupied, prepend the data back to the queue.\n      // When one of the buffers finish, it will call playNext() again to pick up items from the queue.\n      if (!nextBuffer) {\n        queue.unshift(multiChannelArray);\n\n        return;\n      }\n\n      zeroBuffer(nextBuffer);\n      copyBuffer(nextBuffer, multiChannelArray);\n\n      bufferSource.buffer = nextBuffer;\n      bufferSource.connect(audioContext.destination);\n      bufferSource.start(nextSchedule);\n\n      // All BufferSource data that is currently queued will be stored at the AudioContext, via bufferSource.start().\n      // This is for cancelAll() to effectively cancel all BufferSource queued at the AudioContext.\n      queuedBufferSources.push(bufferSource);\n\n      nextSchedule += nextBuffer.duration;\n\n      bufferSource.addEventListener('ended', () => {\n        queuedBufferSources = queuedBufferSources.filter(target => target !== bufferSource);\n\n        // Declare the buffer is free to pick up on the next iteration.\n        freeBuffers.push(nextBuffer);\n        playNext();\n      });\n    }\n  };\n\n  return {\n    cancelAll: () => {\n      queue.splice(0);\n\n      // Although all buffers are cleared, there are still some BufferSources queued at the AudioContext that need to be stopped.\n      queuedBufferSources.forEach(bufferSource => bufferSource.stop());\n    },\n    flush: () => new Promise(resolve => queue.push(resolve)),\n    push: multiChannelArray => {\n      if (!multiChannelArray) {\n        throw new Error('multiChannelArray must not be falsy.');\n      }\n\n      queue.push(multiChannelArray);\n\n      playNext();\n    }\n  };\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 8, 16, 32, 128, 1000, 16000, 32768, 96000, 2147483648] }] */\n/* eslint no-await-in-loop: \"off\" */\n/* eslint prefer-destructuring: \"off\" */\n\nimport createMultiBufferingPlayer from './createMultiBufferingPlayer';\n\n// Safari requires an audio buffer with a sample rate of 22050 Hz.\n// Using a minimum sample rate of 44100 Hz as an example, the Speech SDK's default 16000 Hz will be upsampled to 48000 Hz.\nconst MIN_SAMPLE_RATE = 44100;\n\n// The Speech SDK is hardcoded to chop packets to 4096 bytes.\n// Web Chat's multi-buffering player is set up with 3 buffers; each is 4096 bytes (2048 16-bit samples).\n// For simplicity, the multi-buffer player currently does not support progressive buffering.\n\n// Progressive buffering allows queuing at any sample size and will be concatenated.\n// If 1000 samples are queued, then 1048 samples are queued, they will be concatenated into a single buffer of size 2048.\n\n// For simplicity, data will be queued to two buffers.\n// The first buffer is 1000 samples followed by 1048 zeroes, and the second buffer is 1048 samples followed by 1000 zeroes.\n\n// There is no plan to support progressive buffering until the Speech SDK chops data at dynamic size.\nconst DEFAULT_BUFFER_SIZE = 4096;\n\nfunction average(array) {\n  return array.reduce((sum, value) => sum + value, 0) / array.length;\n}\n\nfunction formatTypedBitArrayToFloatArray(audioData, maxValue) {\n  const float32Data = new Float32Array(audioData.length);\n\n  for (let i = 0; i < audioData.length; i++) {\n    float32Data[+i] = audioData[+i] / maxValue;\n  }\n\n  return float32Data;\n}\n\nfunction formatAudioDataArrayBufferToFloatArray({ bitsPerSample }, arrayBuffer) {\n  switch (bitsPerSample) {\n    case 8:\n      return formatTypedBitArrayToFloatArray(new Int8Array(arrayBuffer), 128);\n\n    case 16:\n      return formatTypedBitArrayToFloatArray(new Int16Array(arrayBuffer), 32768);\n\n    case 32:\n      return formatTypedBitArrayToFloatArray(new Int32Array(arrayBuffer), 2147483648);\n\n    default:\n      throw new Error('Only WAVE_FORMAT_PCM (8/16/32 bps) format supported at this time');\n  }\n}\n\nfunction abortToReject(signal) {\n  return new Promise((_, reject) => {\n    signal.onabort = () => reject(new Error('aborted'));\n  });\n}\n\n// In a 2 channel audio (e.g. A/B), the data arrives as interleaved, like \"ABABABABAB\".\n// This function will take \"ABABABABAB\" and return an array [\"AAAAA\", \"BBBBB\"].\nfunction deinterleave(channelInterleavedAudioData, { channels }) {\n  const multiChannelArrayBuffer = new Array(channels);\n  const frameSize = channelInterleavedAudioData.length / channels;\n\n  for (let channel = 0; channel < channels; channel++) {\n    const audioData = new Float32Array(frameSize);\n\n    multiChannelArrayBuffer[+channel] = audioData;\n\n    for (let offset = 0; offset < frameSize; offset++) {\n      audioData[+offset] = channelInterleavedAudioData[offset * channels + channel];\n    }\n  }\n\n  return multiChannelArrayBuffer;\n}\n\n// This function upsamples the audio data via an integer multiplier.\n// Web Chat uses simple anti-aliasing. For simplicity, the anti-aliasing does not roll over to next buffer.\nfunction multiplySampleRate(source, sampleRateMultiplier) {\n  if (sampleRateMultiplier === 1) {\n    return source;\n  }\n\n  const lastValues = new Array(sampleRateMultiplier).fill(source[0]);\n  const target = new Float32Array(source.length * sampleRateMultiplier);\n\n  for (let sourceOffset = 0; sourceOffset < source.length; sourceOffset++) {\n    const value = source[+sourceOffset];\n    const targetOffset = sourceOffset * sampleRateMultiplier;\n\n    for (let multiplierIndex = 0; multiplierIndex < sampleRateMultiplier; multiplierIndex++) {\n      lastValues.shift();\n      lastValues.push(value);\n      target[targetOffset + multiplierIndex] = average(lastValues);\n    }\n  }\n\n  return target;\n}\n\nexport default async function playCognitiveServicesStream(audioContext, stream, { signal = {} } = {}) {\n  if (!audioContext) {\n    throw new Error('botframework-directlinespeech-sdk: audioContext must be specified.');\n  } else if (!stream) {\n    throw new Error('botframework-directlinespeech-sdk: stream must be specified.');\n  } else if (!stream.format) {\n    throw new Error('botframework-directlinespeech-sdk: stream is missing format.');\n  } else if (typeof stream.read !== 'function') {\n    throw new Error('botframework-directlinespeech-sdk: stream is missing read().');\n  }\n\n  const queuedBufferSourceNodes = [];\n\n  try {\n    const { format } = stream;\n    const abortPromise = abortToReject(signal);\n    const array = new Uint8Array(DEFAULT_BUFFER_SIZE);\n\n    const read = () =>\n      Promise.race([\n        abortPromise.catch(() => {\n          // Abort will gracefully end the queue. We will check signal.aborted later to throw abort exception.\n        }),\n        stream\n          .read(array.buffer)\n          .then(numBytes => (numBytes === array.byteLength ? array : numBytes ? array.slice(0, numBytes) : undefined))\n      ]);\n\n    if (signal.aborted) {\n      throw new Error('aborted');\n    }\n\n    let { samplesPerSec } = format;\n\n    // TODO: [P0] #3692 Remove the following if-condition block when the underlying bugs are resolved.\n    //       There is a bug in Speech SDK 1.15.0 that returns 24kHz instead of 16kHz.\n    //       Even if we explicitly specify the output audio format to 16kHz, there is another bug that ignored it.\n    //       In short, DLSpeech service currently always streams in RIFF WAV format, instead of MP3.\n    //       https://github.com/microsoft/cognitive-services-speech-sdk-js/issues/313\n    //       https://github.com/microsoft/cognitive-services-speech-sdk-js/issues/314\n    if (format.requestAudioFormatString === 'audio-24khz-48kbitrate-mono-mp3') {\n      samplesPerSec = 16000;\n    }\n\n    let newSamplesPerSec = samplesPerSec;\n    let sampleRateMultiplier = 1;\n\n    // Safari requires a minimum sample rate of 22100 Hz.\n    // A multiplier is calculated the the data meets the minimum sample rate.\n    // An integer-based multiplier to simplify our upsampler.\n    // For security, data will only be upsampled up to 96000 Hz.\n    while (newSamplesPerSec < MIN_SAMPLE_RATE && newSamplesPerSec < 96000) {\n      sampleRateMultiplier++;\n      newSamplesPerSec = samplesPerSec * sampleRateMultiplier;\n    }\n\n    // The third parameter is the sample size in bytes.\n    // For example, if the Speech SDK sends Web Chat 4096 bytes of 16-bit samples, there will be 2048 samples per channel.\n    // The multi-buffering player is set up to handle 2048 samples per buffer.\n    // If the multiplier 3x, it will handle 6144 samples per buffer.\n    const player = createMultiBufferingPlayer(\n      audioContext,\n      { ...format, samplesPerSec: newSamplesPerSec },\n      (DEFAULT_BUFFER_SIZE / (format.bitsPerSample / 8)) * sampleRateMultiplier\n    );\n\n    // For security, the maximum number of chunks handled will be 1000.\n    for (\n      let chunk = await read(), maxChunks = 0;\n      chunk && maxChunks < 1000 && !signal.aborted;\n      chunk = await read(), maxChunks++\n    ) {\n      if (signal.aborted) {\n        break;\n      }\n\n      // Data received from Speech SDK is interleaved; 2 channels (e.g. A and B) will be sent as \"ABABABABAB\"\n      // And each sample (A/B) will be an 8 to 32-bit number.\n\n      // Convert the 8 - 32-bit number into a floating-point number, as required by Web Audio API.\n      const interleavedArray = formatAudioDataArrayBufferToFloatArray(format, chunk.buffer);\n\n      // Deinterleave data back into two array buffer, e.g. \"AAAAA\" and \"BBBBB\".\n      const multiChannelArray = deinterleave(interleavedArray, format);\n\n      // Upsample data if necessary. If the multiplier is 2x, \"AAAAA\" will be upsampled to \"AAAAAAAAAA\" (with anti-alias).\n      const upsampledMultiChannelArray = multiChannelArray.map(array =>\n        multiplySampleRate(array, sampleRateMultiplier)\n      );\n\n      // Queue to the buffering player.\n      player.push(upsampledMultiChannelArray);\n    }\n\n    abortPromise.catch(() => player.cancelAll());\n\n    if (signal.aborted) {\n      throw new Error('aborted');\n    }\n\n    await Promise.race([abortPromise, player.flush()]);\n  } finally {\n    queuedBufferSourceNodes.forEach(node => node.stop());\n  }\n}\n","import { decode } from 'base64-arraybuffer';\nimport { EventAsPromise } from 'event-as-promise';\n\nconst EMPTY_MP3_BASE64 =\n  'SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU3LjU2LjEwMQAAAAAAAAAAAAAA//tAwAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAACAAABhgC7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7//////////////////////////////////////////////////////////////////8AAAAATGF2YzU3LjY0AAAAAAAAAAAAAAAAJAUHAAAAAAAAAYYoRBqpAAAAAAD/+xDEAAPAAAGkAAAAIAAANIAAAARMQU1FMy45OS41VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf/7EMQpg8AAAaQAAAAgAAA0gAAABFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV';\n\nfunction subscribeEvent(target, name, handler) {\n  target.addEventListener(name, handler);\n\n  return () => target.removeEventListener(name, handler);\n}\n\nfunction asyncDecodeAudioData(audioContext, arrayBuffer) {\n  return new Promise((resolve, reject) => {\n    const promise = audioContext.decodeAudioData(arrayBuffer, resolve, reject);\n\n    // Newer implementation of \"decodeAudioData\" will return a Promise\n    promise && typeof promise.then === 'function' && resolve(promise);\n  });\n}\n\nfunction playDecoded(audioContext, audioBuffer, source) {\n  return new Promise((resolve, reject) => {\n    const audioContextClosed = new EventAsPromise();\n    const sourceEnded = new EventAsPromise();\n    const unsubscribe = subscribeEvent(\n      audioContext,\n      'statechange',\n      ({ target: { state } }) => state === 'closed' && audioContextClosed.eventListener()\n    );\n\n    try {\n      source.buffer = audioBuffer;\n      // \"ended\" may not fire if the underlying AudioContext is closed prematurely\n      source.onended = sourceEnded.eventListener;\n\n      source.connect(audioContext.destination);\n      source.start(0);\n\n      Promise.race([audioContextClosed.upcoming(), sourceEnded.upcoming()]).then(resolve);\n    } catch (err) {\n      reject(err);\n    } finally {\n      unsubscribe();\n    }\n  });\n}\n\nexport default async function playWhiteNoise(audioContext) {\n  const source = audioContext.createBufferSource();\n  const audioBuffer = await asyncDecodeAudioData(audioContext, decode(EMPTY_MP3_BASE64));\n\n  await playDecoded(audioContext, audioBuffer, source);\n}\n","import EventTarget, { getEventAttributeValue, setEventAttributeValue } from 'event-target-shim';\n\nclass SpeechSynthesisAudioStreamUtterance extends EventTarget {\n  constructor(audioStream) {\n    super();\n\n    if (audioStream && !(audioStream.format && typeof audioStream.read === 'function')) {\n      throw new Error(\n        'botframework-directlinespeech-sdk: If the first argument is specified, it must be a Cognitive Services audio stream.'\n      );\n    }\n\n    this.audioStream = audioStream;\n  }\n\n  get onboundary() {\n    return getEventAttributeValue(this, 'boundary');\n  }\n\n  set onboundary(value) {\n    setEventAttributeValue(this, 'boundary', value);\n  }\n\n  get onend() {\n    return getEventAttributeValue(this, 'end');\n  }\n\n  set onend(value) {\n    setEventAttributeValue(this, 'end', value);\n  }\n\n  get onerror() {\n    return getEventAttributeValue(this, 'error');\n  }\n\n  set onerror(value) {\n    setEventAttributeValue(this, 'error', value);\n  }\n\n  get onstart() {\n    return getEventAttributeValue(this, 'start');\n  }\n\n  set onstart(value) {\n    setEventAttributeValue(this, 'start', value);\n  }\n}\n\nexport default SpeechSynthesisAudioStreamUtterance;\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2, 4, 36] }] */\n\nimport Observable from 'core-js/features/observable/index.js';\nimport random from 'math-random';\n\nimport shareObservable from './shareObservable';\nimport SpeechSynthesisAudioStreamUtterance from './SpeechSynthesisAudioStreamUtterance';\n\nfunction randomActivityId() {\n  return random().toString(36).substr(2);\n}\n\nexport default class DirectLineSpeech {\n  constructor({ dialogServiceConnector }) {\n    let connectionStatusObserver;\n\n    this.dialogServiceConnector = dialogServiceConnector;\n\n    this.activity$ = shareObservable(\n      new Observable(observer => {\n        this._activityObserver = observer;\n\n        connectionStatusObserver.next(0);\n        connectionStatusObserver.next(1);\n\n        dialogServiceConnector.connect(\n          () => {\n            connectionStatusObserver.next(2);\n          },\n          error => {\n            connectionStatusObserver.next(4);\n\n            console.warn('botframework-directlinespeech-sdk: Failed to connect', { error });\n          }\n        );\n      })\n    );\n\n    this.connectionStatus$ = shareObservable(\n      new Observable(observer => {\n        connectionStatusObserver = observer;\n      })\n    );\n\n    dialogServiceConnector.activityReceived = (_, { activity, audioStream }) => {\n      try {\n        this._activityObserver &&\n          this._activityObserver.next({\n            ...activity,\n            channelData: {\n              ...activity.channelData,\n              speechSynthesisUtterance: new SpeechSynthesisAudioStreamUtterance(audioStream)\n            },\n            from: {\n              ...activity.from,\n              // Since DLSpeech service never ACK our outgoing activity, this activity must be from bot.\n              role: 'bot'\n            },\n            // Since DLSpeech never ACK our outgoing activity, the \"replyToId\" will rarely able to point to an existing activity.\n            replyToId: undefined,\n            // Direct Line Speech server currently do not timestamp outgoing activities.\n            // Thus, it will be easier to just re-timestamp every incoming/outgoing activities using local time.\n            timestamp: new Date().toISOString()\n          });\n      } catch (error) {\n        console.error(error);\n      }\n    };\n  }\n\n  end() {\n    try {\n      this.dialogServiceConnector.close();\n    } catch (err) {\n      if (!~err.message.indexOf('already disposed')) {\n        throw err;\n      }\n    }\n  }\n\n  postActivity(activity) {\n    // Currently, Web Chat set user ID on all outgoing activities.\n    // As Direct Line Speech maintains its own user ID, Web Chat should not set the user ID.\n    // TODO: [P2] We should move user ID into options of DirectLineJS, instead of Web Chat.\n    activity = {\n      ...activity,\n      from: { role: 'user' }\n    };\n\n    try {\n      // TODO: [P1] Direct Line Speech server currently do not ack the outgoing activities with any activity ID or timestamp.\n      const pseudoActivityId = randomActivityId();\n      const isSpeech = !!activity.channelData?.speech;\n\n      // Do not send the activity if it was from speech.\n      if (!isSpeech) {\n        // Starting from Speech SDK 1.13.0, they accept JSON text instead of JavaScript object.\n        // https://github.com/microsoft/cognitive-services-speech-sdk-js/commit/2f3a35446692b6d492a6c68e3237a48de67e293f\n        this.dialogServiceConnector.sendActivityAsync(JSON.stringify(activity));\n      }\n\n      this._activityObserver &&\n        this._activityObserver.next({\n          ...activity,\n          id: pseudoActivityId,\n          timestamp: new Date().toISOString()\n        });\n\n      return Observable.of(pseudoActivityId);\n    } catch (err) {\n      return new Observable(observer => observer.error(err));\n    }\n  }\n}\n\n// Interfaces not yet implemented in Web Chat:\n// referenceGrammarId?: string,\n// getSessionId? : () => Observable<string>\n","/* global Observable */\n\nexport default function shareObservable(observable) {\n  let observers = [];\n  let subscription;\n\n  return new Observable(observer => {\n    if (!subscription) {\n      subscription = observable.subscribe({\n        complete() {\n          observers.forEach(observer => observer.complete());\n        },\n\n        error(err) {\n          observers.forEach(observer => observer.error(err));\n        },\n\n        next(value) {\n          observers.forEach(observer => observer.next(value));\n        }\n      });\n    }\n\n    observers.push(observer);\n\n    return () => {\n      observers = observers.filter(o => o !== observer);\n\n      if (!observers.length) {\n        subscription.unsubscribe();\n        subscription = null;\n      }\n    };\n  });\n}\n","import withResolvers from './utils/withResolvers';\n\n// Patching a function to add pre-processing of arguments and post-processing of result.\nfunction patchFunction(fn, pre, post) {\n  return (...args) => {\n    args = pre ? pre(...args) : args;\n\n    const result = fn(...args);\n\n    return post ? post(result) : result;\n  };\n}\n\nexport default function patchDialogServiceConnectorInline(dialogServiceConnector) {\n  // This function will patch DialogServiceConnector by modifying the object.\n  // The patches are intended to fill-in features to make DialogServiceConnector object works like the full-fledged Recognizer object.\n\n  let lastRecognitionWithResolvers;\n\n  dialogServiceConnector.listenOnceAsync = patchFunction(\n    dialogServiceConnector.listenOnceAsync.bind(dialogServiceConnector),\n    (resolve, reject, ...args) => {\n      lastRecognitionWithResolvers = withResolvers();\n\n      return [\n        patchFunction(resolve, null, result => {\n          lastRecognitionWithResolvers.resolve(result);\n\n          return result;\n        }),\n        patchFunction(reject, null, error => {\n          lastRecognitionWithResolvers.reject(error);\n\n          return error;\n        }),\n        ...args\n      ];\n    }\n  );\n\n  // TODO: [P1] #2664 startContinuousRecognitionAsync is not working yet in Speech SDK 1.15.0.\n  //       We need to polyfill to use listenOnceAsync instead, and disable stopContinuousRecognitionAsync.\n  dialogServiceConnector.startContinuousRecognitionAsync = (resolve, reject) => {\n    dialogServiceConnector.listenOnceAsync(\n      () => {\n        // We will resolve the Promise in a setTimeout.\n      },\n      err => {\n        resolve = null;\n        reject && reject(err);\n      }\n    );\n\n    setTimeout(() => {\n      reject = null;\n      resolve && resolve();\n    }, 0);\n  };\n\n  // TODO: stopContinuousRecognitionAsync is not working yet.\n  //       We will leave out the implementation as falsy, Web Chat will disable the microphone button after start dictate.\n  //       This will prevent user from aborting speech recognition.\n  // dialogServiceConnector.stopContinuousRecognitionAsync = resolve => {\n  // };\n\n  return dialogServiceConnector;\n}\n","// Helper function for fetching network resource as JSON\nexport default async function fetchJSON(url, options) {\n  const res = await fetch(url, {\n    ...options,\n    headers: {\n      ...options.headers,\n      accept: 'application/json'\n    }\n  });\n\n  if (!res.ok) {\n    throw new Error(`Failed to fetch JSON from server due to ${res.status}`);\n  }\n\n  return res.json();\n}\n","import fetchJSON from './fetchJSON';\n\n// Refreshes the given token\nexport default async function refreshDirectLineToken(token) {\n  const { token: refreshedToken } = await fetchJSON(\n    'https://directline.botframework.com/v3/directline/tokens/refresh',\n    {\n      headers: {\n        authorization: `Bearer ${token}`\n      },\n      method: 'POST'\n    }\n  );\n\n  return refreshedToken;\n}\n","export default function resolveFunctionOrReturnValue(fnOrValue) {\n  return typeof fnOrValue === 'function' ? fnOrValue() : fnOrValue;\n}\n"],"mappings":"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","names":["AudioConfig","BotFrameworkConfig","DialogServiceConnector","PropertyId","createSpeechRecognitionPonyfillFromRecognizer","coreJSWithResolvers","withResolvers","createTaskQueue","queueWithCurrent","queue","cancel","fn","cancelWithResolvers","withResolvers","resultWithResolvers","entry","abort","start","abortFn","result","error","e","lastEntry","lastPromise","assertType","condition","message","args","format","i","anyToString","x","currentErrorHandler","reportError","maybeError","error","anyToString","currentErrorHandler","Global","currentWarnHandler","Warning","code","message","args","currentWarnHandler","stack","_a","InitEventWasCalledWhileDispatching","FalsyWasAssignedToCancelBubble","TruthyWasAssignedToReturnValue","NonCancelableEventWasCanceled","CanceledInPassiveListener","EventListenerWasDuplicated","OptionWasIgnored","InvalidEventListener","InvalidAttributeHandler","Event","NONE","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","type","eventInitDict","opts","internalDataMap","$","currentTarget","value","data","setCancelFlag","bubbles","cancelable","event","name","retv","assertType","keys","i","Global","createInvalidStateError","DOMException","msg","defineErrorCodeProperties","ErrorCodeMap","obj","key","EventWrapper","getWrapperClassOf","defineRedirectDescriptor","original","wrapperClassCache","originalEvent","prototype","wrapper","defineWrapper","BaseEventWrapper","originalPrototype","CustomEventWrapper","d","createListener","callback","capture","passive","once","signal","signalListener","setRemoved","listener","isCapture","isPassive","isOnce","isRemoved","invokeCallback","target","thrownError","reportError","findIndexOfListener","listeners","addListener","list","removeListener","index","removeListenerAt","disableCow","_","createListenerListMap","ensureListenerList","listenerMap","EventTarget","type0","callback0","options0","normalizeAddOptions","warnDuplicate","normalizeOptions","eventData","getEventInternalData","cow","options","assertCallback","format","getEventAttributeValue","_b","getEventTargetInternalData","setEventAttributeValue","upsertEventAttributeListener","removeEventAttributeListener","defineEventAttributeCallback","zeroBuffer","buffer","channels","channel","audioData","copyBuffer","multiChannelArray","float32Array","float32ArrayLength","perChannelBuffer","offset","createMultiBufferingPlayer","audioContext","samplesPerSec","numSamplePerBuffer","freeBuffers","queuedBufferSources","nextSchedule","queue","playNext","bufferSource","nextBuffer","target","resolve","MIN_SAMPLE_RATE","DEFAULT_BUFFER_SIZE","average","array","sum","value","formatTypedBitArrayToFloatArray","audioData","maxValue","float32Data","i","formatAudioDataArrayBufferToFloatArray","bitsPerSample","arrayBuffer","abortToReject","signal","_","reject","deinterleave","channelInterleavedAudioData","channels","multiChannelArrayBuffer","frameSize","channel","offset","multiplySampleRate","source","sampleRateMultiplier","lastValues","target","sourceOffset","targetOffset","multiplierIndex","playCognitiveServicesStream","audioContext","stream","queuedBufferSourceNodes","format","abortPromise","read","numBytes","samplesPerSec","newSamplesPerSec","player","createMultiBufferingPlayer","chunk","maxChunks","interleavedArray","upsampledMultiChannelArray","node","decode","EventAsPromise","EMPTY_MP3_BASE64","subscribeEvent","target","name","handler","asyncDecodeAudioData","audioContext","arrayBuffer","resolve","reject","promise","playDecoded","audioBuffer","source","audioContextClosed","sourceEnded","unsubscribe","state","err","playWhiteNoise","SpeechSynthesisAudioStreamUtterance","event_target_shim_default","audioStream","getEventAttributeValue","value","setEventAttributeValue","SpeechSynthesisAudioStreamUtterance_default","createWebSpeechPonyfillFactory_default","audioContext","enableTelemetry","ponyfill","recognizer","textNormalization","SpeechGrammarList","SpeechRecognition","createSpeechRecognitionPonyfillFromRecognizer","cancelAll","push","createTaskQueue","SpeechSynthesis","event_target_shim_default","utterance","result","controller","signal","playCognitiveServicesStream","playWhiteNoise","error","getEventAttributeValue","value","setEventAttributeValue","SpeechSynthesisAudioStreamUtterance_default","Observable","random","shareObservable","observable","observers","subscription","observer","err","value","randomActivityId","random","DirectLineSpeech","dialogServiceConnector","connectionStatusObserver","shareObservable","Observable","observer","error","_","activity","audioStream","SpeechSynthesisAudioStreamUtterance_default","err","pseudoActivityId","patchFunction","fn","pre","post","args","result","patchDialogServiceConnectorInline","dialogServiceConnector","lastRecognitionWithResolvers","resolve","reject","withResolvers","error","err","fetchJSON","url","options","res","refreshDirectLineToken","token","refreshedToken","fetchJSON","resolveFunctionOrReturnValue","fnOrValue","DIRECT_LINE_TOKEN_RENEWAL_INTERVAL","TOKEN_RENEWAL_INTERVAL","create","audioConfig","audioContext","audioInputDeviceId","enableInternalHTTPSupport","enableTelemetry","fetchCredentials","speechRecognitionEndpointId","speechRecognitionLanguage","speechSynthesisDeploymentId","speechSynthesisOutputFormat","textNormalization","userID","username","authorizationToken","directLineToken","directLineSpeechHostname","region","subscriptionKey","resolveFunctionOrReturnValue","AudioConfig","config","BotFrameworkConfig","PropertyId","dialogServiceConnector","patchDialogServiceConnectorInline","DialogServiceConnector","interval","nextDirectLineSpeechHostname","nextRegion","refreshedDirectLineToken","refreshDirectLineToken","directLine","DirectLineSpeech","webSpeechPonyfillFactory","createWebSpeechPonyfillFactory_default","buildTool","moduleFormat","version","buildInfo","version","versionMeta","packageMeta","buildTool","moduleFormat"]}