UNPKG

react-async-script-loader

Version:

A decorator for script lazy loading on react component

131 lines (115 loc) 3.68 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var isDefined = exports.isDefined = function isDefined(val) { return val != null; }; var isFunction = exports.isFunction = function isFunction(val) { return typeof val === 'function'; }; var noop = exports.noop = function noop(_) {}; var newScript = exports.newScript = function newScript(src) { return function (cb) { var script = document.createElement('script'); script.src = src; script.addEventListener('load', function () { return cb(null, src); }); script.addEventListener('error', function () { return cb(true, src); }); document.body.appendChild(script); return script; }; }; var keyIterator = function keyIterator(cols) { var keys = Object.keys(cols); var i = -1; return { next: function next() { i++; // inc if (i >= keys.length) return null;else return keys[i]; } }; }; // tasks should be a collection of thunk var parallel = exports.parallel = function parallel() { for (var _len = arguments.length, tasks = Array(_len), _key = 0; _key < _len; _key++) { tasks[_key] = arguments[_key]; } return function (each) { return function (cb) { var hasError = false; var successed = 0; var ret = []; tasks = tasks.filter(isFunction); if (tasks.length <= 0) cb(null);else { tasks.forEach(function (task, i) { var thunk = task; thunk(function (err) { for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } if (err) hasError = true;else { // collect result if (args.length <= 1) args = args[0]; ret[i] = args; successed++; } if (isFunction(each)) each.call(null, err, args, i); if (hasError) cb(true);else if (tasks.length === successed) { cb(null, ret); } }); }); } }; }; }; // tasks should be a collection of thunk var series = exports.series = function series() { for (var _len3 = arguments.length, tasks = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { tasks[_key3] = arguments[_key3]; } return function (each) { return function (cb) { tasks = tasks.filter(function (val) { return val != null; }); var nextKey = keyIterator(tasks); var nextThunk = function nextThunk() { var key = nextKey.next(); var thunk = tasks[key]; if (Array.isArray(thunk)) thunk = parallel.apply(null, thunk).call(null, each); return [+key, thunk]; // convert `key` to number }; var key = void 0, thunk = void 0; var next = nextThunk(); key = next[0]; thunk = next[1]; if (thunk == null) return cb(null); var ret = []; var iterator = function iterator() { thunk(function (err) { for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } if (args.length <= 1) args = args[0]; if (isFunction(each)) each.call(null, err, args, key); if (err) cb(err);else { // collect result ret.push(args); next = nextThunk(); key = next[0]; thunk = next[1]; if (thunk == null) return cb(null, ret); // finished else iterator(); } }); }; iterator(); }; }; };