{"ast":null,"code":"\"use strict\";\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.initScriptLoader = initScriptLoader;\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _headManagerContext = require(\"../next-server/lib/head-manager-context\");\n\nvar _headManager = require(\"./head-manager\");\n\nvar _requestIdleCallback = require(\"./request-idle-callback\");\n\nconst ScriptCache = new Map();\nconst LoadCache = new Set();\nconst ignoreProps = ['onLoad', 'dangerouslySetInnerHTML', 'children', 'onError', 'strategy', 'preload'];\n\nconst loadScript = props => {\n  const {\n    src,\n    id,\n    onLoad = () => {},\n    dangerouslySetInnerHTML,\n    children = '',\n    onError\n  } = props;\n  const cacheKey = id || src;\n\n  if (ScriptCache.has(src)) {\n    if (!LoadCache.has(cacheKey)) {\n      LoadCache.add(cacheKey); // Execute onLoad since the script loading has begun\n\n      ScriptCache.get(src).then(onLoad, onError);\n    }\n\n    return;\n  }\n\n  const el = document.createElement('script');\n  const loadPromise = new Promise((resolve, reject) => {\n    el.addEventListener('load', function () {\n      resolve();\n\n      if (onLoad) {\n        onLoad.call(this);\n      }\n    });\n    el.addEventListener('error', function () {\n      reject();\n\n      if (onError) {\n        onError();\n      }\n    });\n  });\n\n  if (src) {\n    ScriptCache.set(src, loadPromise);\n    LoadCache.add(cacheKey);\n  }\n\n  if (dangerouslySetInnerHTML) {\n    el.innerHTML = dangerouslySetInnerHTML.__html || '';\n  } else if (children) {\n    el.textContent = typeof children === 'string' ? children : Array.isArray(children) ? children.join('') : '';\n  } else if (src) {\n    el.src = src;\n  }\n\n  for (const [k, value] of Object.entries(props)) {\n    if (value === undefined || ignoreProps.includes(k)) {\n      continue;\n    }\n\n    const attr = _headManager.DOMAttributeNames[k] || k.toLowerCase();\n    el.setAttribute(attr, value);\n  }\n\n  document.body.appendChild(el);\n};\n\nfunction handleClientScriptLoad(props) {\n  const {\n    strategy = 'defer'\n  } = props;\n\n  if (strategy === 'defer') {\n    loadScript(props);\n  } else if (strategy === 'lazy') {\n    window.addEventListener('load', () => {\n      (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));\n    });\n  }\n}\n\nfunction loadLazyScript(props) {\n  if (document.readyState === 'complete') {\n    (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));\n  } else {\n    window.addEventListener('load', () => {\n      (0, _requestIdleCallback.requestIdleCallback)(() => loadScript(props));\n    });\n  }\n}\n\nfunction initScriptLoader(scriptLoaderItems) {\n  scriptLoaderItems.forEach(handleClientScriptLoad);\n}\n\nfunction Script(props) {\n  const {\n    src = '',\n    onLoad = () => {},\n    dangerouslySetInnerHTML,\n    children = '',\n    strategy = 'defer',\n    onError,\n    preload = false\n  } = props,\n        restProps = (0, _objectWithoutPropertiesLoose2.default)(props, [\"src\", \"onLoad\", \"dangerouslySetInnerHTML\", \"children\", \"strategy\", \"onError\", \"preload\"]); // Context is available only during SSR\n\n  const {\n    updateScripts,\n    scripts\n  } = (0, _react.useContext)(_headManagerContext.HeadManagerContext);\n  (0, _react.useEffect)(() => {\n    if (strategy === 'defer') {\n      loadScript(props);\n    } else if (strategy === 'lazy') {\n      loadLazyScript(props);\n    }\n  }, [props, strategy]);\n\n  if (!process.env.__NEXT_SCRIPT_LOADER) {\n    return null;\n  }\n\n  if (strategy === 'dangerouslyBlockRendering') {\n    const syncProps = (0, _extends2.default)({}, restProps);\n\n    for (const [k, value] of Object.entries({\n      src,\n      onLoad,\n      onError,\n      dangerouslySetInnerHTML,\n      children\n    })) {\n      if (!value) {\n        continue;\n      }\n\n      if (k === 'children') {\n        syncProps.dangerouslySetInnerHTML = {\n          __html: typeof value === 'string' ? value : Array.isArray(value) ? value.join('') : ''\n        };\n      } else {\n        ;\n        syncProps[k] = value;\n      }\n    }\n\n    return /*#__PURE__*/_react.default.createElement(\"script\", syncProps);\n  } else if (strategy === 'defer') {\n    if (updateScripts && preload) {\n      scripts.defer = (scripts.defer || []).concat([src]);\n      updateScripts(scripts);\n    }\n  } else if (strategy === 'eager') {\n    if (updateScripts) {\n      scripts.eager = (scripts.eager || []).concat([(0, _extends2.default)({\n        src,\n        onLoad,\n        onError\n      }, restProps)]);\n      updateScripts(scripts);\n    }\n  }\n\n  return null;\n}\n\nvar _default = Script;\nexports.default = _default;","map":{"version":3,"sources":["../../client/experimental-script.tsx"],"names":["ScriptCache","LoadCache","ignoreProps","loadScript","props","onLoad","children","cacheKey","id","el","document","loadPromise","resolve","reject","onError","dangerouslySetInnerHTML","Array","Object","value","attr","DOMAttributeNames","k","strategy","window","scriptLoaderItems","src","preload","restProps","HeadManagerContext","loadLazyScript","process","syncProps","__html","updateScripts","scripts","Script"],"mappings":"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","sourcesContent":["import React, { useEffect, useContext } from 'react'\nimport { ScriptHTMLAttributes } from 'react'\nimport { HeadManagerContext } from '../next-server/lib/head-manager-context'\nimport { DOMAttributeNames } from './head-manager'\nimport { requestIdleCallback } from './request-idle-callback'\n\nconst ScriptCache = new Map()\nconst LoadCache = new Set()\n\nexport interface Props extends ScriptHTMLAttributes<HTMLScriptElement> {\n  strategy?: 'defer' | 'lazy' | 'dangerouslyBlockRendering' | 'eager'\n  id?: string\n  onLoad?: () => void\n  onError?: () => void\n  children?: React.ReactNode\n  preload?: boolean\n}\n\nconst ignoreProps = [\n  'onLoad',\n  'dangerouslySetInnerHTML',\n  'children',\n  'onError',\n  'strategy',\n  'preload',\n]\n\nconst loadScript = (props: Props): void => {\n  const {\n    src,\n    id,\n    onLoad = () => {},\n    dangerouslySetInnerHTML,\n    children = '',\n    onError,\n  } = props\n\n  const cacheKey = id || src\n  if (ScriptCache.has(src)) {\n    if (!LoadCache.has(cacheKey)) {\n      LoadCache.add(cacheKey)\n      // Execute onLoad since the script loading has begun\n      ScriptCache.get(src).then(onLoad, onError)\n    }\n    return\n  }\n\n  const el = document.createElement('script')\n\n  const loadPromise = new Promise((resolve, reject) => {\n    el.addEventListener('load', function () {\n      resolve()\n      if (onLoad) {\n        onLoad.call(this)\n      }\n    })\n    el.addEventListener('error', function () {\n      reject()\n      if (onError) {\n        onError()\n      }\n    })\n  })\n\n  if (src) {\n    ScriptCache.set(src, loadPromise)\n    LoadCache.add(cacheKey)\n  }\n\n  if (dangerouslySetInnerHTML) {\n    el.innerHTML = dangerouslySetInnerHTML.__html || ''\n  } else if (children) {\n    el.textContent =\n      typeof children === 'string'\n        ? children\n        : Array.isArray(children)\n        ? children.join('')\n        : ''\n  } else if (src) {\n    el.src = src\n  }\n\n  for (const [k, value] of Object.entries(props)) {\n    if (value === undefined || ignoreProps.includes(k)) {\n      continue\n    }\n\n    const attr = DOMAttributeNames[k] || k.toLowerCase()\n    el.setAttribute(attr, value)\n  }\n\n  document.body.appendChild(el)\n}\n\nfunction handleClientScriptLoad(props: Props) {\n  const { strategy = 'defer' } = props\n  if (strategy === 'defer') {\n    loadScript(props)\n  } else if (strategy === 'lazy') {\n    window.addEventListener('load', () => {\n      requestIdleCallback(() => loadScript(props))\n    })\n  }\n}\n\nfunction loadLazyScript(props: Props) {\n  if (document.readyState === 'complete') {\n    requestIdleCallback(() => loadScript(props))\n  } else {\n    window.addEventListener('load', () => {\n      requestIdleCallback(() => loadScript(props))\n    })\n  }\n}\n\nexport function initScriptLoader(scriptLoaderItems: Props[]) {\n  scriptLoaderItems.forEach(handleClientScriptLoad)\n}\n\nfunction Script(props: Props): JSX.Element | null {\n  const {\n    src = '',\n    onLoad = () => {},\n    dangerouslySetInnerHTML,\n    children = '',\n    strategy = 'defer',\n    onError,\n    preload = false,\n    ...restProps\n  } = props\n\n  // Context is available only during SSR\n  const { updateScripts, scripts } = useContext(HeadManagerContext)\n\n  useEffect(() => {\n    if (strategy === 'defer') {\n      loadScript(props)\n    } else if (strategy === 'lazy') {\n      loadLazyScript(props)\n    }\n  }, [props, strategy])\n\n  if (!process.env.__NEXT_SCRIPT_LOADER) {\n    return null\n  }\n\n  if (strategy === 'dangerouslyBlockRendering') {\n    const syncProps: Props = { ...restProps }\n\n    for (const [k, value] of Object.entries({\n      src,\n      onLoad,\n      onError,\n      dangerouslySetInnerHTML,\n      children,\n    })) {\n      if (!value) {\n        continue\n      }\n      if (k === 'children') {\n        syncProps.dangerouslySetInnerHTML = {\n          __html:\n            typeof value === 'string'\n              ? value\n              : Array.isArray(value)\n              ? value.join('')\n              : '',\n        }\n      } else {\n        ;(syncProps as any)[k] = value\n      }\n    }\n\n    return <script {...syncProps} />\n  } else if (strategy === 'defer') {\n    if (updateScripts && preload) {\n      scripts.defer = (scripts.defer || []).concat([src])\n      updateScripts(scripts)\n    }\n  } else if (strategy === 'eager') {\n    if (updateScripts) {\n      scripts.eager = (scripts.eager || []).concat([\n        {\n          src,\n          onLoad,\n          onError,\n          ...restProps,\n        },\n      ])\n      updateScripts(scripts)\n    }\n  }\n\n  return null\n}\n\nexport default Script\n"]},"metadata":{},"sourceType":"script"}