UNPKG

paypal-checkout

Version:

PayPal Checkout components, for integrating checkout products.

118 lines (88 loc) 3.02 kB
/* @flow */ export function loadScript(url : string, prop : string, attrs : Object, callback : (err : ?Error, res : ?mixed) => void) : void { if (window[prop]) { return callback(null, window[prop]); } // eslint-disable-next-line compat/compat const container = document.body || document.head; if (!container) { return callback(new Error(`Can not find container to insert script into`)); } const script = document.createElement('script'); script.src = url; script.addEventListener('load', () => { if (!window[prop]) { return callback(new Error(`Expected ${ prop } to be present on window`)); } return callback(null, window[prop]); }); // $FlowFixMe script.addEventListener('error', (err : Error) => { return callback(err); }); for (const attr of Object.keys(attrs)) { script.setAttribute(attr, attrs[attr]); } container.appendChild(script); } export function warn(...args : $ReadOnlyArray<string>) { const message = args.join(' '); if (window.console && window.console.warn) { window.console.warn(message); } else if (window.console && window.console.log) { window.console.log(message); } } export function parseQuery(queryString : string = window.location.search) : Object { const params = {}; if (queryString && queryString.indexOf('?') === 0) { queryString = queryString.slice(1); } if (!queryString) { return params; } if (queryString.indexOf('=') === -1) { throw new Error(`Can not parse query string params: ${ queryString }`); } for (let pair of queryString.split('&')) { pair = pair.split('='); if (pair[0] && pair[1]) { params[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); } } return params; } export function stringifyError(err : mixed, level : number = 1) : string { if (level >= 3) { return 'stringifyError stack overflow'; } try { if (!err) { return `<unknown error: ${ Object.prototype.toString.call(err) }>`; } if (typeof err === 'string') { return err; } if (err instanceof Error) { const stack = err && err.stack; const message = err && err.message; if (stack && message) { if (stack.indexOf(message) !== -1) { return stack; } else { return `${ message }\n${ stack }`; } } else if (stack) { return stack; } else if (message) { return message; } } if (typeof err.toString === 'function') { return err.toString(); } return Object.prototype.toString.call(err); } catch (newErr) { return `Error while stringifying error: ${ stringifyError(newErr, level + 1) }`; } }