UNPKG

@tacky/store

Version:

State management framework based on react

80 lines (69 loc) 2.37 kB
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; }