forgeplus-react/node_modules/react-player/lib/utils.js

298 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.parseStartTime = parseStartTime;
exports.parseEndTime = parseEndTime;
exports.randomString = randomString;
exports.queryString = queryString;
exports.getSDK = getSDK;
exports.getConfig = getConfig;
exports.omit = omit;
exports.callPlayer = callPlayer;
exports.isObject = isObject;
exports.isEqual = isEqual;
exports.isMediaStream = isMediaStream;
var _react = require("react");
var _loadScript = _interopRequireDefault(require("load-script"));
var _deepmerge = _interopRequireDefault(require("deepmerge"));
var _props = require("./props");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var MATCH_START_QUERY = /[?&#](?:start|t)=([0-9hms]+)/;
var MATCH_END_QUERY = /[?&#]end=([0-9hms]+)/;
var MATCH_START_STAMP = /(\d+)(h|m|s)/g;
var MATCH_NUMERIC = /^\d+$/; // Parse YouTube URL for a start time param, ie ?t=1h14m30s
// and return the start time in seconds
function parseTimeParam(url, pattern) {
var match = url.match(pattern);
if (match) {
var stamp = match[1];
if (stamp.match(MATCH_START_STAMP)) {
return parseTimeString(stamp);
}
if (MATCH_NUMERIC.test(stamp)) {
return parseInt(stamp);
}
}
return undefined;
}
function parseTimeString(stamp) {
var seconds = 0;
var array = MATCH_START_STAMP.exec(stamp);
while (array !== null) {
var _array = array,
_array2 = _slicedToArray(_array, 3),
count = _array2[1],
period = _array2[2];
if (period === 'h') seconds += parseInt(count, 10) * 60 * 60;
if (period === 'm') seconds += parseInt(count, 10) * 60;
if (period === 's') seconds += parseInt(count, 10);
array = MATCH_START_STAMP.exec(stamp);
}
return seconds;
}
function parseStartTime(url) {
return parseTimeParam(url, MATCH_START_QUERY);
}
function parseEndTime(url) {
return parseTimeParam(url, MATCH_END_QUERY);
} // http://stackoverflow.com/a/38622545
function randomString() {
return Math.random().toString(36).substr(2, 5);
}
function queryString(object) {
return Object.keys(object).map(function (key) {
return "".concat(key, "=").concat(object[key]);
}).join('&');
} // Util function to load an external SDK
// or return the SDK if it is already loaded
var requests = {};
function getSDK(url, sdkGlobal) {
var sdkReady = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var isLoaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {
return true;
};
var fetchScript = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _loadScript["default"];
if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {
return Promise.resolve(window[sdkGlobal]);
}
return new Promise(function (resolve, reject) {
// If we are already loading the SDK, add the resolve and reject
// functions to the existing array of requests
if (requests[url]) {
requests[url].push({
resolve: resolve,
reject: reject
});
return;
}
requests[url] = [{
resolve: resolve,
reject: reject
}];
var onLoaded = function onLoaded(sdk) {
// When loaded, resolve all pending request promises
requests[url].forEach(function (request) {
return request.resolve(sdk);
});
};
if (sdkReady) {
var previousOnReady = window[sdkReady];
window[sdkReady] = function () {
if (previousOnReady) previousOnReady();
onLoaded(window[sdkGlobal]);
};
}
fetchScript(url, function (err) {
if (err) {
// Loading the SDK failed reject all requests and
// reset the array of requests for this SDK
requests[url].forEach(function (request) {
return request.reject(err);
});
requests[url] = null;
} else if (!sdkReady) {
onLoaded(window[sdkGlobal]);
}
});
});
}
function getConfig(props, defaultProps, showWarning) {
var config = (0, _deepmerge["default"])(defaultProps.config, props.config);
var _iterator = _createForOfIteratorHelper(_props.DEPRECATED_CONFIG_PROPS),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var p = _step.value;
if (props[p]) {
var key = p.replace(/Config$/, '');
config = (0, _deepmerge["default"])(config, _defineProperty({}, key, props[p]));
if (showWarning) {
var link = 'https://github.com/CookPete/react-player#config-prop';
var message = "ReactPlayer: %c".concat(p, " %cis deprecated, please use the config prop instead \u2013 ").concat(link);
console.warn(message, 'font-weight: bold', '');
}
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return config;
}
function omit(object) {
var _ref;
for (var _len = arguments.length, arrays = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
arrays[_key - 1] = arguments[_key];
}
var omitKeys = (_ref = []).concat.apply(_ref, arrays);
var output = {};
var keys = Object.keys(object);
for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {
var key = _keys[_i2];
if (omitKeys.indexOf(key) === -1) {
output[key] = object[key];
}
}
return output;
}
function callPlayer(method) {
var _this$player;
// Util method for calling a method on this.player
// but guard against errors and console.warn instead
if (!this.player || !this.player[method]) {
var message = "ReactPlayer: ".concat(this.constructor.displayName, " player could not call %c").concat(method, "%c \u2013 ");
if (!this.player) {
message += 'The player was not available';
} else if (!this.player[method]) {
message += 'The method was not available';
}
console.warn(message, 'font-weight: bold', '');
return null;
}
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
return (_this$player = this.player)[method].apply(_this$player, args);
}
function isObject(val) {
return val !== null && _typeof(val) === 'object';
} // Deep comparison of two objects, but ignoring functions
// and React elements, for use in shouldComponentUpdate
function isEqual(a, b) {
if (typeof a === 'function' && typeof b === 'function') {
return true;
}
if ((0, _react.isValidElement)(a) && (0, _react.isValidElement)(b)) {
return true;
}
if (a instanceof Array && b instanceof Array) {
if (a.length !== b.length) {
return false;
}
for (var i = 0; i !== a.length; i++) {
if (!isEqual(a[i], b[i])) {
return false;
}
}
return true;
}
if (isObject(a) && isObject(b)) {
if (Object.keys(a).length !== Object.keys(b).length) {
return false;
}
for (var _i3 = 0, _Object$keys = Object.keys(a); _i3 < _Object$keys.length; _i3++) {
var key = _Object$keys[_i3];
if (!isEqual(a[key], b[key])) {
return false;
}
}
return true;
}
return a === b;
}
function isMediaStream(url) {
return typeof window !== 'undefined' && typeof window.MediaStream !== 'undefined' && url instanceof window.MediaStream;
}