UNPKG

react-render-props-script-loader

Version:
111 lines (110 loc) 4.33 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; exports.getState = getState; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _excluded = ["scriptsRegistry", "onLoad", "onError", "children", "act"]; /* eslint-env browser */ var nonce; function getNonce() { var _nonce; if (nonce === undefined) { var _node$getAttribute; var node = document.querySelector('meta[property="csp-nonce"], meta[name="csp-nonce"]'); nonce = node ? (_node$getAttribute = node.getAttribute('content')) !== null && _node$getAttribute !== void 0 ? _node$getAttribute : null : null; } return (_nonce = nonce) !== null && _nonce !== void 0 ? _nonce : null; } var loadScript = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) { var scriptsRegistry, onLoad, onError, children, act, props, src; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: scriptsRegistry = _ref.scriptsRegistry, onLoad = _ref.onLoad, onError = _ref.onError, children = _ref.children, act = _ref.act, props = (0, _objectWithoutProperties2["default"])(_ref, _excluded); src = props.src; if (!scriptsRegistry) { _context.next = 6; break; } scriptsRegistry.results[src] = { error: undefined }; scriptsRegistry.scripts.push(props); return _context.abrupt("return"); case 6: if (!(typeof document === 'undefined')) { _context.next = 8; break; } throw new Error('you must pass a scriptsRegistry if calling on the server side'); case 8: if (!(typeof document.querySelector === 'function')) { _context.next = 12; break; } if (!document.querySelector("script[src=\"".concat(src, "\"]"))) { _context.next = 12; break; } results[src] = { error: undefined }; return _context.abrupt("return"); case 12: return _context.abrupt("return", new Promise(function (resolve, reject) { var script = document.createElement('script'); script.src = src; script.nonce = getNonce(); Object.keys(props).forEach(function (key) { return script.setAttribute(key, props[key]); }); script.onload = resolve; script.onerror = reject; if (document.body) document.body.appendChild(script); })); case 13: case "end": return _context.stop(); } }, _callee); })); return function loadScript(_x) { return _ref2.apply(this, arguments); }; }(); var results = {}; var promises = {}; var _default = exports["default"] = function _default(props) { var scriptsRegistry = props.scriptsRegistry; var _promises = scriptsRegistry ? scriptsRegistry.promises : promises; var _results = scriptsRegistry ? scriptsRegistry.results : results; return _promises[props.src] || (_promises[props.src] = loadScript(props).then(function () { return _results[props.src] = { error: null }; }, function () { var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Error("failed to load ".concat(props.src)); _results[props.src] = { error: error }; throw error; })); }; function getState(_ref3) { var src = _ref3.src, scriptsRegistry = _ref3.scriptsRegistry; var result = scriptsRegistry ? scriptsRegistry.results[src] : results[src]; var promise = scriptsRegistry ? scriptsRegistry.promises[src] : promises[src]; return { loading: result == null, loaded: result ? !result.error : false, error: result && result.error, promise: promise }; }