UNPKG

@tacky/store

Version:

State management framework based on react

117 lines (87 loc) 3.05 kB
"use strict"; 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; }