{"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":null,"metadata":{},"sourceType":"script"}