@tacky/store
Version:
State management framework based on react
117 lines (87 loc) • 3.05 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isObject = isObject;
exports.isDomain = isDomain;
exports.isPlainObject = isPlainObject;
exports.includes = includes;
exports.isPrimitive = isPrimitive;
exports.convert2UniqueString = convert2UniqueString;
exports.nextTick = nextTick;
exports.is = is;
exports.bind = bind;
exports.shallowEqual = shallowEqual;
exports.hasOwn = exports.deduplicate = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _lang = require("./lang");
var _uuid = _interopRequireDefault(require("./uuid"));
var _domain = require("../core/domain");
function isObject(value) {
return value !== null && (0, _typeof2["default"])(value) === "object";
}
function isDomain(value) {
return value instanceof _domain.Domain;
} // {}
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 includes(array, item) {
return array.indexOf(item) > -1;
} // 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["default"])();
}
var deduplicate = function deduplicate(array) {
return Array.from(new Set(array));
};
exports.deduplicate = deduplicate;
var promise = Promise.resolve();
/**
* nextTick would flush promise micro task
*/
function nextTick(fn) {
return fn ? promise.then(fn) : promise;
}
var 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
exports.hasOwn = hasOwn;
function is(x, y) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
}
function bind(fn, ctx) {
function boundFn(a) {
var l = arguments.length;
return l ? l > 1 ? 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) {
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 = Object.keys(objA);
var 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;
}