@turbox3d/shared
Version:
turbox shared internal utility
193 lines (192 loc) • 5.79 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.batchRemove = batchRemove;
exports.batchRemoveFromSet = batchRemoveFromSet;
exports.bind = bind;
exports.convert2UniqueString = convert2UniqueString;
exports.dummy = exports.deduplicate = void 0;
exports.getContextEnv = getContextEnv;
exports.getContextParam = getContextParam;
exports.hasOwn = void 0;
exports.includes = includes;
exports.is = is;
exports.isObject = isObject;
exports.isPlainObject = isPlainObject;
exports.isPrimitive = isPrimitive;
exports.isPromise = isPromise;
exports.loadJSON = loadJSON;
exports.nextTick = nextTick;
exports.remove = remove;
exports.shallowEqual = shallowEqual;
exports.sortBy = sortBy;
exports.updateQueryStringParameter = updateQueryStringParameter;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _lang = require("./lang");
var _uuid = require("./uuid");
function isObject(value) {
return value !== null && (0, _typeof2["default"])(value) === 'object';
}
function isPromise(value) {
return value && typeof value.then === 'function';
}
// {}
function isPlainObject(value) {
if (value === null || (0, _typeof2["default"])(value) !== 'object') return false;
var proto = Object.getPrototypeOf(value);
return proto === Object.prototype || proto === null;
}
/**
* 对数组从小到大排序
*/
function sortBy(arr, func) {
var length = arr.length;
for (var i = 0; i < length; i++) {
for (var j = i + 1; j < length; j++) {
var itemI = arr[i];
var itemJ = arr[j];
var indicatorI = func ? func(itemI) : itemI;
var indicatorJ = func ? func(itemJ) : itemJ;
if (indicatorJ < indicatorI) {
arr[i] = itemJ;
arr[j] = itemI;
}
}
}
return arr;
}
function includes(array, item) {
return array.indexOf(item) > -1;
}
function remove(array, item) {
var index = array.indexOf(item);
if (index > -1) {
array.splice(index, 1);
}
}
function batchRemove(array, items) {
items.forEach(function (item) {
var index = array.indexOf(item);
if (index > -1) {
array.splice(index, 1);
}
});
}
function batchRemoveFromSet(set, items) {
items.forEach(function (item) {
set["delete"](item);
});
}
// boolean, string, number, undefined, null
function isPrimitive(value) {
return value === null || (0, _typeof2["default"])(value) !== 'object' && typeof value !== 'function';
}
function convert2UniqueString(key) {
if (!(0, _lang.isSymbol)(key)) {
return key.toString();
}
return key.toString() + (0, _uuid.generateUUID)();
}
var deduplicate = exports.deduplicate = function deduplicate(array) {
return Array.from(new Set(array));
};
var promise = Promise.resolve();
/**
* nextTick would flush promise micro task
*/
function nextTick(fn) {
return fn ? promise.then(fn) : promise;
}
var hasOwn = exports.hasOwn = function hasOwn(val, key) {
return Object.prototype.hasOwnProperty.call(val, key);
};
// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
function is(x, y) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
}
// eslint-disable-next-line no-self-compare
return x !== x && y !== y;
}
function bind(fn, ctx) {
function boundFn(a) {
var l = arguments.length;
// eslint-disable-next-line no-nested-ternary
return l ? l > 1
// eslint-disable-next-line prefer-rest-params
? fn.apply(ctx, arguments) : fn.call(ctx, a) : fn.call(ctx);
}
return boundFn;
}
// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js
function shallowEqual(objA, objB) {
var ignoreKeys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
if (is(objA, objB)) return true;
if ((0, _typeof2["default"])(objA) !== 'object' || objA === null || (0, _typeof2["default"])(objB) !== 'object' || objB === null) {
return false;
}
var keysA = [];
var keysB = [];
if (ignoreKeys && ignoreKeys.length > 0) {
var ignoreSet = new Set(ignoreKeys);
keysA = Object.keys(objA).filter(function (key) {
return !ignoreSet.has(key);
});
keysB = Object.keys(objB).filter(function (key) {
return !ignoreSet.has(key);
});
} else {
keysA = Object.keys(objA);
keysB = Object.keys(objB);
}
if (keysA.length !== keysB.length) return false;
for (var i = 0; i < keysA.length; i++) {
if (!objB.hasOwnProperty(keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
return false;
}
}
return true;
}
var dummy = exports.dummy = function dummy() {
//
};
function loadJSON(url) {
return new Promise(function (resolve) {
var xhr = new XMLHttpRequest();
xhr.overrideMimeType('application/json');
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
resolve(JSON.parse(xhr.responseText || '{}'));
}
};
xhr.send(null);
});
}
function updateQueryStringParameter(url, key, value) {
if (!value) {
return url;
}
var re = new RegExp("([?&])".concat(key, "=.*?(&|$)"), 'i');
var separator = url.indexOf('?') !== -1 ? '&' : '?';
if (url.match(re)) {
return url.replace(re, "$1".concat(key, "=").concat(value, "$2"));
}
return "".concat(url).concat(separator).concat(key, "=").concat(value);
}
function getContextEnv() {
return typeof window !== 'undefined' ? 'browser' : 'vm';
}
function getContextParam(key) {
var value;
var env = getContextEnv();
if (env === 'browser') {
value = window[key];
}
if (env === 'vm') {
value = global[key];
}
return value;
}