@tacky/store
Version:
State management framework based on react
80 lines (69 loc) • 2.37 kB
JavaScript
import _typeof from "@babel/runtime/helpers/esm/typeof";
import { isSymbol } from './lang';
import generateUUID from './uuid';
import { Domain } from '../core/domain';
export function isObject(value) {
return value !== null && _typeof(value) === "object";
}
export function isDomain(value) {
return value instanceof Domain;
} // {}
export function isPlainObject(value) {
if (value === null || _typeof(value) !== "object") return false;
var proto = Object.getPrototypeOf(value);
return proto === Object.prototype || proto === null;
}
export function includes(array, item) {
return array.indexOf(item) > -1;
} // boolean, string, number, undefined, null
export function isPrimitive(value) {
return value === null || _typeof(value) !== 'object' && typeof value !== 'function';
}
export function convert2UniqueString(key) {
if (!isSymbol(key)) {
return key.toString();
}
return key.toString() + generateUUID();
}
export var deduplicate = function deduplicate(array) {
return Array.from(new Set(array));
};
var promise = Promise.resolve();
/**
* nextTick would flush promise micro task
*/
export function nextTick(fn) {
return fn ? promise.then(fn) : promise;
}
export 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
export function is(x, y) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
}
export 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
export function shallowEqual(objA, objB) {
if (is(objA, objB)) return true;
if (_typeof(objA) !== 'object' || objA === null || _typeof(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;
}