{"version":3,"sources":["../src/index.tsx","../src/config.ts","../src/modules/helpers.ts","../src/modules/cache.ts","../src/modules/hooks.tsx","../src/modules/utils.ts"],"sourcesContent":["import {\n  cloneElement,\n  isValidElement,\n  ReactElement,\n  useCallback,\n  useEffect,\n  useReducer,\n  useRef,\n  useState,\n} from 'react';\nimport convert from 'react-from-dom';\n\nimport { STATUS } from './config';\nimport CacheStore from './modules/cache';\nimport { canUseDOM, isSupportedEnvironment, omit, randomString, request } from './modules/helpers';\nimport { usePrevious } from './modules/hooks';\nimport { getNode } from './modules/utils';\nimport { FetchError, Props, State, Status } from './types';\n\n// eslint-disable-next-line import/no-mutable-exports\nexport let cacheStore: CacheStore;\n\nfunction ReactInlineSVG(props: Props) {\n  const {\n    cacheRequests = true,\n    children = null,\n    description,\n    fetchOptions,\n    innerRef,\n    loader = null,\n    onError,\n    onLoad,\n    src,\n    title,\n    uniqueHash,\n  } = props;\n  const [state, setState] = useReducer(\n    (previousState: State, nextState: Partial<State>) => ({\n      ...previousState,\n      ...nextState,\n    }),\n    {\n      content: '',\n      element: null,\n\n      isCached: cacheRequests && cacheStore.isCached(props.src),\n      status: STATUS.IDLE,\n    },\n  );\n  const { content, element, isCached, status } = state;\n  const previousProps = usePrevious(props);\n  const previousState = usePrevious(state);\n\n  const hash = useRef(uniqueHash ?? randomString(8));\n  const isActive = useRef(false);\n  const isInitialized = useRef(false);\n\n  const handleError = useCallback(\n    (error: Error | FetchError) => {\n      if (isActive.current) {\n        setState({\n          status:\n            error.message === 'Browser does not support SVG' ? STATUS.UNSUPPORTED : STATUS.FAILED,\n        });\n\n        onError?.(error);\n      }\n    },\n    [onError],\n  );\n\n  const handleLoad = useCallback((loadedContent: string, hasCache = false) => {\n    if (isActive.current) {\n      setState({\n        content: loadedContent,\n        isCached: hasCache,\n        status: STATUS.LOADED,\n      });\n    }\n  }, []);\n\n  const fetchContent = useCallback(async () => {\n    const responseContent: string = await request(src, fetchOptions);\n\n    handleLoad(responseContent);\n  }, [fetchOptions, handleLoad, src]);\n\n  const getElement = useCallback(() => {\n    try {\n      const node = getNode({ ...props, handleError, hash: hash.current, content }) as Node;\n      const convertedElement = convert(node);\n\n      if (!convertedElement || !isValidElement(convertedElement)) {\n        throw new Error('Could not convert the src to a React element');\n      }\n\n      setState({\n        element: convertedElement,\n        status: STATUS.READY,\n      });\n    } catch (error: any) {\n      handleError(new Error(error.message));\n    }\n  }, [content, handleError, props]);\n\n  const getContent = useCallback(async () => {\n    const dataURI = /^data:image\\/svg[^,]*?(;base64)?,(.*)/u.exec(src);\n    let inlineSrc;\n\n    if (dataURI) {\n      inlineSrc = dataURI[1] ? window.atob(dataURI[2]) : decodeURIComponent(dataURI[2]);\n    } else if (src.includes('<svg')) {\n      inlineSrc = src;\n    }\n\n    if (inlineSrc) {\n      handleLoad(inlineSrc);\n\n      return;\n    }\n\n    try {\n      if (cacheRequests) {\n        const cachedContent = await cacheStore.get(src, fetchOptions);\n\n        handleLoad(cachedContent, true);\n      } else {\n        await fetchContent();\n      }\n    } catch (error: any) {\n      handleError(error);\n    }\n  }, [cacheRequests, fetchContent, fetchOptions, handleError, handleLoad, src]);\n\n  const load = useCallback(async () => {\n    if (isActive.current) {\n      setState({\n        content: '',\n        element: null,\n        isCached: false,\n        status: STATUS.LOADING,\n      });\n    }\n  }, []);\n\n  // Run on mount\n  useEffect(\n    () => {\n      isActive.current = true;\n\n      if (!canUseDOM() || isInitialized.current) {\n        return () => undefined;\n      }\n\n      try {\n        if (status === STATUS.IDLE) {\n          if (!isSupportedEnvironment()) {\n            throw new Error('Browser does not support SVG');\n          }\n\n          if (!src) {\n            throw new Error('Missing src');\n          }\n\n          load();\n        }\n      } catch (error: any) {\n        handleError(error);\n      }\n\n      isInitialized.current = true;\n\n      return () => {\n        isActive.current = false;\n      };\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [],\n  );\n\n  // Handle prop changes\n  useEffect(() => {\n    if (!canUseDOM()) {\n      return;\n    }\n\n    if (!previousProps) {\n      return;\n    }\n\n    if (previousProps.src !== src) {\n      if (!src) {\n        handleError(new Error('Missing src'));\n\n        return;\n      }\n\n      load();\n    } else if (previousProps.title !== title || previousProps.description !== description) {\n      getElement();\n    }\n  }, [description, getElement, handleError, load, previousProps, src, title]);\n\n  // handle state\n  useEffect(() => {\n    if (!previousState) {\n      return;\n    }\n\n    if (previousState.status !== STATUS.LOADING && status === STATUS.LOADING) {\n      getContent();\n    }\n\n    if (previousState.status !== STATUS.LOADED && status === STATUS.LOADED) {\n      getElement();\n    }\n\n    if (previousState.status !== STATUS.READY && status === STATUS.READY) {\n      onLoad?.(src, isCached);\n    }\n  }, [getContent, getElement, isCached, onLoad, previousState, src, status]);\n\n  const elementProps = omit(\n    props,\n    'baseURL',\n    'cacheRequests',\n    'children',\n    'description',\n    'fetchOptions',\n    'innerRef',\n    'loader',\n    'onError',\n    'onLoad',\n    'preProcessor',\n    'src',\n    'title',\n    'uniqueHash',\n    'uniquifyIDs',\n  );\n\n  if (!canUseDOM()) {\n    return loader;\n  }\n\n  if (element) {\n    return cloneElement(element as ReactElement, { ref: innerRef, ...elementProps });\n  }\n\n  if (([STATUS.UNSUPPORTED, STATUS.FAILED] as Status[]).includes(status)) {\n    return children;\n  }\n\n  return loader;\n}\n\nexport default function InlineSVG(props: Props) {\n  if (!cacheStore) {\n    cacheStore = new CacheStore();\n  }\n\n  const { loader } = props;\n  const hasCallback = useRef(false);\n  const [isReady, setReady] = useState(cacheStore.isReady);\n\n  useEffect(() => {\n    if (!hasCallback.current) {\n      cacheStore.onReady(() => {\n        setReady(true);\n      });\n\n      hasCallback.current = true;\n    }\n  }, []);\n\n  if (!isReady) {\n    return loader;\n  }\n\n  return <ReactInlineSVG {...props} />;\n}\n\nexport * from './types';\n","export const CACHE_NAME = 'react-inlinesvg';\nexport const CACHE_MAX_RETRIES = 10;\n\nexport const STATUS = {\n  IDLE: 'idle',\n  LOADING: 'loading',\n  LOADED: 'loaded',\n  FAILED: 'failed',\n  READY: 'ready',\n  UNSUPPORTED: 'unsupported',\n} as const;\n","import type { PlainObject } from '../types';\n\nexport function canUseDOM(): boolean {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\n\nexport function isSupportedEnvironment(): boolean {\n  return supportsInlineSVG() && typeof window !== 'undefined' && window !== null;\n}\n\nexport async function request(url: string, options?: RequestInit) {\n  const response = await fetch(url, options);\n  const contentType = response.headers.get('content-type');\n  const [fileType] = (contentType ?? '').split(/ ?; ?/);\n\n  if (response.status > 299) {\n    throw new Error('Not found');\n  }\n\n  if (!['image/svg+xml', 'text/plain'].some(d => fileType.includes(d))) {\n    throw new Error(`Content type isn't valid: ${fileType}`);\n  }\n\n  return response.text();\n}\n\nexport function sleep(seconds = 1) {\n  return new Promise(resolve => {\n    setTimeout(resolve, seconds * 1000);\n  });\n}\n\nexport function supportsInlineSVG(): boolean {\n  /* c8 ignore next 3 */\n  if (!document) {\n    return false;\n  }\n\n  const div = document.createElement('div');\n\n  div.innerHTML = '<svg />';\n  const svg = div.firstChild as SVGSVGElement;\n\n  return !!svg && svg.namespaceURI === 'http://www.w3.org/2000/svg';\n}\n\nfunction randomCharacter(character: string) {\n  return character[Math.floor(Math.random() * character.length)];\n}\n\nexport function randomString(length: number): string {\n  const letters = 'abcdefghijklmnopqrstuvwxyz';\n  const numbers = '1234567890';\n  const charset = `${letters}${letters.toUpperCase()}${numbers}`;\n\n  let R = '';\n\n  for (let index = 0; index < length; index++) {\n    R += randomCharacter(charset);\n  }\n\n  return R;\n}\n\n/**\n *  Remove properties from an object\n */\nexport function omit<T extends PlainObject, K extends keyof T>(\n  input: T,\n  ...filter: K[]\n): Omit<T, K> {\n  const output: any = {};\n\n  for (const key in input) {\n    if ({}.hasOwnProperty.call(input, key)) {\n      if (!filter.includes(key as unknown as K)) {\n        output[key] = input[key];\n      }\n    }\n  }\n\n  return output as Omit<T, K>;\n}\n","import { canUseDOM, request, sleep } from './helpers';\n\nimport { CACHE_MAX_RETRIES, CACHE_NAME, STATUS } from '../config';\nimport { StorageItem } from '../types';\n\nexport default class CacheStore {\n  private cacheApi: Cache | undefined;\n  private readonly cacheStore: Map<string, StorageItem>;\n  private readonly subscribers: Array<() => void> = [];\n  public isReady = false;\n\n  constructor() {\n    this.cacheStore = new Map<string, StorageItem>();\n\n    let cacheName = CACHE_NAME;\n    let usePersistentCache = false;\n\n    if (canUseDOM()) {\n      cacheName = window.REACT_INLINESVG_CACHE_NAME ?? CACHE_NAME;\n      usePersistentCache = !!window.REACT_INLINESVG_PERSISTENT_CACHE && 'caches' in window;\n    }\n\n    if (usePersistentCache) {\n      caches\n        .open(cacheName)\n        .then(cache => {\n          this.cacheApi = cache;\n          this.isReady = true;\n\n          this.subscribers.forEach(callback => callback());\n        })\n        .catch(error => {\n          this.isReady = true;\n\n          // eslint-disable-next-line no-console\n          console.error(`Failed to open cache: ${error.message}`);\n        });\n    } else {\n      this.isReady = true;\n    }\n  }\n\n  public onReady(callback: () => void) {\n    if (this.isReady) {\n      callback();\n    } else {\n      this.subscribers.push(callback);\n    }\n  }\n\n  public async get(url: string, fetchOptions?: RequestInit) {\n    await (this.cacheApi\n      ? this.fetchAndAddToPersistentCache(url, fetchOptions)\n      : this.fetchAndAddToInternalCache(url, fetchOptions));\n\n    return this.cacheStore.get(url)?.content ?? '';\n  }\n\n  public set(url: string, data: StorageItem) {\n    this.cacheStore.set(url, data);\n  }\n\n  public isCached(url: string) {\n    return this.cacheStore.get(url)?.status === STATUS.LOADED;\n  }\n\n  private async fetchAndAddToInternalCache(url: string, fetchOptions?: RequestInit) {\n    const cache = this.cacheStore.get(url);\n\n    if (cache?.status === STATUS.LOADING) {\n      await this.handleLoading(url, async () => {\n        this.cacheStore.set(url, { content: '', status: STATUS.IDLE });\n        await this.fetchAndAddToInternalCache(url, fetchOptions);\n      });\n\n      return;\n    }\n\n    if (!cache?.content) {\n      this.cacheStore.set(url, { content: '', status: STATUS.LOADING });\n\n      try {\n        const content = await request(url, fetchOptions);\n\n        this.cacheStore.set(url, { content, status: STATUS.LOADED });\n      } catch (error: any) {\n        this.cacheStore.set(url, { content: '', status: STATUS.FAILED });\n        throw error;\n      }\n    }\n  }\n\n  private async fetchAndAddToPersistentCache(url: string, fetchOptions?: RequestInit) {\n    const cache = this.cacheStore.get(url);\n\n    if (cache?.status === STATUS.LOADED) {\n      return;\n    }\n\n    if (cache?.status === STATUS.LOADING) {\n      await this.handleLoading(url, async () => {\n        this.cacheStore.set(url, { content: '', status: STATUS.IDLE });\n        await this.fetchAndAddToPersistentCache(url, fetchOptions);\n      });\n\n      return;\n    }\n\n    this.cacheStore.set(url, { content: '', status: STATUS.LOADING });\n\n    const data = await this.cacheApi?.match(url);\n\n    if (data) {\n      const content = await data.text();\n\n      this.cacheStore.set(url, { content, status: STATUS.LOADED });\n\n      return;\n    }\n\n    try {\n      await this.cacheApi?.add(new Request(url, fetchOptions));\n\n      const response = await this.cacheApi?.match(url);\n      const content = (await response?.text()) ?? '';\n\n      this.cacheStore.set(url, { content, status: STATUS.LOADED });\n    } catch (error: any) {\n      this.cacheStore.set(url, { content: '', status: STATUS.FAILED });\n      throw error;\n    }\n  }\n\n  private async handleLoading(url: string, callback: () => Promise<void>) {\n    let retryCount = 0;\n\n    while (this.cacheStore.get(url)?.status === STATUS.LOADING && retryCount < CACHE_MAX_RETRIES) {\n      // eslint-disable-next-line no-await-in-loop\n      await sleep(0.1);\n      retryCount += 1;\n    }\n\n    if (retryCount >= CACHE_MAX_RETRIES) {\n      await callback();\n    }\n  }\n\n  public keys(): Array<string> {\n    return [...this.cacheStore.keys()];\n  }\n\n  public data(): Array<Record<string, StorageItem>> {\n    return [...this.cacheStore.entries()].map(([key, value]) => ({ [key]: value }));\n  }\n\n  public async delete(url: string) {\n    if (this.cacheApi) {\n      await this.cacheApi.delete(url);\n    }\n\n    this.cacheStore.delete(url);\n  }\n\n  public async clear() {\n    if (this.cacheApi) {\n      const keys = await this.cacheApi.keys();\n\n      for (const key of keys) {\n        // eslint-disable-next-line no-await-in-loop\n        await this.cacheApi.delete(key);\n      }\n    }\n\n    this.cacheStore.clear();\n  }\n}\n","import { useEffect, useRef } from 'react';\n\nexport function usePrevious<T>(state: T): T | undefined {\n  const ref = useRef<T>();\n\n  useEffect(() => {\n    ref.current = state;\n  });\n\n  return ref.current;\n}\n","import convert from 'react-from-dom';\n\nimport { Props, State } from '../types';\n\ninterface GetNodeOptions extends Props, Pick<State, 'content'> {\n  handleError: (error: Error) => void;\n  hash: string;\n}\n\ninterface UpdateSVGAttributesOptions extends Pick<Props, 'baseURL' | 'uniquifyIDs'> {\n  hash: string;\n}\n\nexport function getNode(options: GetNodeOptions) {\n  const {\n    baseURL,\n    content,\n    description,\n    handleError,\n    hash,\n    preProcessor,\n    title,\n    uniquifyIDs = false,\n  } = options;\n\n  try {\n    const svgText = processSVG(content, preProcessor);\n    const node = convert(svgText, { nodeOnly: true });\n\n    if (!node || !(node instanceof SVGSVGElement)) {\n      throw new Error('Could not convert the src to a DOM Node');\n    }\n\n    const svg = updateSVGAttributes(node, { baseURL, hash, uniquifyIDs });\n\n    if (description) {\n      const originalDesc = svg.querySelector('desc');\n\n      if (originalDesc?.parentNode) {\n        originalDesc.parentNode.removeChild(originalDesc);\n      }\n\n      const descElement = document.createElementNS('http://www.w3.org/2000/svg', 'desc');\n\n      descElement.innerHTML = description;\n      svg.prepend(descElement);\n    }\n\n    if (typeof title !== 'undefined') {\n      const originalTitle = svg.querySelector('title');\n\n      if (originalTitle?.parentNode) {\n        originalTitle.parentNode.removeChild(originalTitle);\n      }\n\n      if (title) {\n        const titleElement = document.createElementNS('http://www.w3.org/2000/svg', 'title');\n\n        titleElement.innerHTML = title;\n        svg.prepend(titleElement);\n      }\n    }\n\n    return svg;\n  } catch (error: any) {\n    return handleError(error);\n  }\n}\n\nexport function processSVG(content: string, preProcessor?: Props['preProcessor']) {\n  if (preProcessor) {\n    return preProcessor(content);\n  }\n\n  return content;\n}\n\nexport function updateSVGAttributes(\n  node: SVGSVGElement,\n  options: UpdateSVGAttributesOptions,\n): SVGSVGElement {\n  const { baseURL = '', hash, uniquifyIDs } = options;\n  const replaceableAttributes = ['id', 'href', 'xlink:href', 'xlink:role', 'xlink:arcrole'];\n  const linkAttributes = ['href', 'xlink:href'];\n  const isDataValue = (name: string, value: string) =>\n    linkAttributes.includes(name) && (value ? !value.includes('#') : false);\n\n  if (!uniquifyIDs) {\n    return node;\n  }\n\n  [...node.children].forEach(d => {\n    if (d.attributes?.length) {\n      const attributes = Object.values(d.attributes).map(a => {\n        const attribute = a;\n        const match = /url\\((.*?)\\)/.exec(a.value);\n\n        if (match?.[1]) {\n          attribute.value = a.value.replace(match[0], `url(${baseURL}${match[1]}__${hash})`);\n        }\n\n        return attribute;\n      });\n\n      replaceableAttributes.forEach(r => {\n        const attribute = attributes.find(a => a.name === r);\n\n        if (attribute && !isDataValue(r, attribute.value)) {\n          attribute.value = `${attribute.value}__${hash}`;\n        }\n      });\n    }\n\n    if (d.children.length) {\n      return updateSVGAttributes(d as SVGSVGElement, options);\n    }\n\n    return d;\n  });\n\n  return node;\n}\n"],"mappings":"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","names":["useEffect","useRef","convert","previousState","useRef","convert","useEffect"]}