UNPKG

@ngxs-labs/entity-state

Version:

This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.0.5.

117 lines 9.67 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { NoActiveEntityError } from './errors'; /** * type alias for javascript object literal * @record * @template T */ export function HashMap() { } /** @type {?} */ export var NGXS_META_KEY = 'NGXS_META'; /** * This function generates a new object for the ngxs Action with the given fn name * @template T * @param {?} fn The name of the Action to simulate, e.g. "Remove" or "Update" * @param {?} store The class of the targeted entity state, e.g. ZooState * @param {?=} payload The payload for the created action object * @return {?} */ export function generateActionObject(fn, store, payload) { /** @type {?} */ var name = store[NGXS_META_KEY].path; /** @type {?} */ var ReflectedAction = (/** * @param {?} data * @return {?} */ function (data) { this.payload = data; }); /** @type {?} */ var obj = new ReflectedAction(payload); Reflect.getPrototypeOf(obj).constructor['type'] = "[" + name + "] " + fn; return obj; } /** * Utility function that returns the active entity of the given state * @template T * @param {?} state the state of an entity state * @return {?} */ export function getActive(state) { return state.entities[state.active]; } /** * Returns the active entity. If none is present an error will be thrown. * @template T * @param {?} state The state to act on * @return {?} */ export function mustGetActive(state) { /** @type {?} */ var active = getActive(state); if (active === undefined) { throw new NoActiveEntityError(); } return { id: state.active, active: active }; } /** * Undefined-safe function to access the property given by path parameter * @param {?} object The object to read from * @param {?} path The path to the property * @return {?} */ export function elvis(object, path) { return path ? path.split('.').reduce((/** * @param {?} value * @param {?} key * @return {?} */ function (value, key) { return value && value[key]; }), object) : object; } /** * Returns input as an array if it isn't one already * @template T * @param {?} input The input to make an array if necessary * @return {?} */ export function asArray(input) { return Array.isArray(input) ? input : [input]; } /** * Limits a number to the given boundaries * @param {?} value The input value * @param {?} min The minimum value * @param {?} max The maximum value * @return {?} */ function clamp(value, min, max) { return Math.min(max, Math.max(min, value)); } /** * Uses the clamp function is wrap is false. * Else it wrap to the max or min value respectively. * @param {?} wrap Flag to indicate if value should be wrapped * @param {?} value The input value * @param {?} min The minimum value * @param {?} max The maximum value * @return {?} */ export function wrapOrClamp(wrap, value, min, max) { if (!wrap) { return clamp(value, min, max); } else if (value < min) { return max; } else if (value > max) { return min; } else { return value; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy1sYWJzL2VudGl0eS1zdGF0ZS8iLCJzb3VyY2VzIjpbImxpYi9pbnRlcm5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFNL0MsNkJBRUM7O0FBRUQsTUFBTSxLQUFPLGFBQWEsR0FBRyxXQUFXOzs7Ozs7Ozs7QUFReEMsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxFQUFVLEVBQ1YsS0FBMkIsRUFDM0IsT0FBYTs7UUFFUCxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUk7O1FBQ2hDLGVBQWU7Ozs7SUFBRyxVQUFTLElBQU87UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFBOztRQUNLLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFDeEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBSSxJQUFJLFVBQUssRUFBSSxDQUFDO0lBQ3BFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQzs7Ozs7OztBQU1ELE1BQU0sVUFBVSxTQUFTLENBQUksS0FBMEI7SUFDckQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDOzs7Ozs7O0FBTUQsTUFBTSxVQUFVLGFBQWEsQ0FBSSxLQUEwQjs7UUFDbkQsTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDL0IsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFBQSxFQUFFLENBQUM7QUFDdEMsQ0FBQzs7Ozs7OztBQU9ELE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBVyxFQUFFLElBQVk7SUFDN0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTs7Ozs7SUFBQyxVQUFDLEtBQUssRUFBRSxHQUFHLElBQUssT0FBQSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFuQixDQUFtQixHQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDN0YsQ0FBQzs7Ozs7OztBQU1ELE1BQU0sVUFBVSxPQUFPLENBQUksS0FBYztJQUN2QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDOzs7Ozs7OztBQVFELFNBQVMsS0FBSyxDQUFDLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztJQUNwRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQzs7Ozs7Ozs7OztBQVVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBYSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsR0FBVztJQUNoRixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUMvQjtTQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQztLQUNaO1NBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTTtRQUNMLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5U3RhdGUgfSBmcm9tICcuL2VudGl0eS1zdGF0ZSc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb0FjdGl2ZUVudGl0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgRW50aXR5U3RhdGVNb2RlbCB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiB0eXBlIGFsaWFzIGZvciBqYXZhc2NyaXB0IG9iamVjdCBsaXRlcmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFzaE1hcDxUPiB7XG4gIFtpZDogc3RyaW5nXTogVDtcbn1cblxuZXhwb3J0IGNvbnN0IE5HWFNfTUVUQV9LRVkgPSAnTkdYU19NRVRBJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIG5ldyBvYmplY3QgZm9yIHRoZSBuZ3hzIEFjdGlvbiB3aXRoIHRoZSBnaXZlbiBmbiBuYW1lXG4gKiBAcGFyYW0gZm4gVGhlIG5hbWUgb2YgdGhlIEFjdGlvbiB0byBzaW11bGF0ZSwgZS5nLiBcIlJlbW92ZVwiIG9yIFwiVXBkYXRlXCJcbiAqIEBwYXJhbSBzdG9yZSBUaGUgY2xhc3Mgb2YgdGhlIHRhcmdldGVkIGVudGl0eSBzdGF0ZSwgZS5nLiBab29TdGF0ZVxuICogQHBhcmFtIHBheWxvYWQgVGhlIHBheWxvYWQgZm9yIHRoZSBjcmVhdGVkIGFjdGlvbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWN0aW9uT2JqZWN0PFQ+KFxuICBmbjogc3RyaW5nLFxuICBzdG9yZTogVHlwZTxFbnRpdHlTdGF0ZTxUPj4sXG4gIHBheWxvYWQ/OiBhbnlcbikge1xuICBjb25zdCBuYW1lID0gc3RvcmVbTkdYU19NRVRBX0tFWV0ucGF0aDtcbiAgY29uc3QgUmVmbGVjdGVkQWN0aW9uID0gZnVuY3Rpb24oZGF0YTogVCkge1xuICAgIHRoaXMucGF5bG9hZCA9IGRhdGE7XG4gIH07XG4gIGNvbnN0IG9iaiA9IG5ldyBSZWZsZWN0ZWRBY3Rpb24ocGF5bG9hZCk7XG4gIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqKS5jb25zdHJ1Y3RvclsndHlwZSddID0gYFske25hbWV9XSAke2ZufWA7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGFjdGl2ZSBlbnRpdHkgb2YgdGhlIGdpdmVuIHN0YXRlXG4gKiBAcGFyYW0gc3RhdGUgdGhlIHN0YXRlIG9mIGFuIGVudGl0eSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlPFQ+KHN0YXRlOiBFbnRpdHlTdGF0ZU1vZGVsPFQ+KTogVCB7XG4gIHJldHVybiBzdGF0ZS5lbnRpdGllc1tzdGF0ZS5hY3RpdmVdO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGl2ZSBlbnRpdHkuIElmIG5vbmUgaXMgcHJlc2VudCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqIEBwYXJhbSBzdGF0ZSBUaGUgc3RhdGUgdG8gYWN0IG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdXN0R2V0QWN0aXZlPFQ+KHN0YXRlOiBFbnRpdHlTdGF0ZU1vZGVsPFQ+KTogeyBpZDogc3RyaW5nOyBhY3RpdmU6IFQgfSB7XG4gIGNvbnN0IGFjdGl2ZSA9IGdldEFjdGl2ZShzdGF0ZSk7XG4gIGlmIChhY3RpdmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBOb0FjdGl2ZUVudGl0eUVycm9yKCk7XG4gIH1cbiAgcmV0dXJuIHsgaWQ6IHN0YXRlLmFjdGl2ZSwgYWN0aXZlIH07XG59XG5cbi8qKlxuICogVW5kZWZpbmVkLXNhZmUgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBwcm9wZXJ0eSBnaXZlbiBieSBwYXRoIHBhcmFtZXRlclxuICogQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHJlYWQgZnJvbVxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbHZpcyhvYmplY3Q6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBhdGggPyBwYXRoLnNwbGl0KCcuJykucmVkdWNlKCh2YWx1ZSwga2V5KSA9PiB2YWx1ZSAmJiB2YWx1ZVtrZXldLCBvYmplY3QpIDogb2JqZWN0O1xufVxuXG4vKipcbiAqIFJldHVybnMgaW5wdXQgYXMgYW4gYXJyYXkgaWYgaXQgaXNuJ3Qgb25lIGFscmVhZHlcbiAqIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgdG8gbWFrZSBhbiBhcnJheSBpZiBuZWNlc3NhcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4oaW5wdXQ6IFQgfCBUW10pOiBUW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShpbnB1dCkgPyBpbnB1dCA6IFtpbnB1dF07XG59XG5cbi8qKlxuICogTGltaXRzIGEgbnVtYmVyIHRvIHRoZSBnaXZlbiBib3VuZGFyaWVzXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGlucHV0IHZhbHVlXG4gKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlXG4gKiBAcGFyYW0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cblxuLyoqXG4gKiBVc2VzIHRoZSBjbGFtcCBmdW5jdGlvbiBpcyB3cmFwIGlzIGZhbHNlLlxuICogRWxzZSBpdCB3cmFwIHRvIHRoZSBtYXggb3IgbWluIHZhbHVlIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSB3cmFwIEZsYWcgdG8gaW5kaWNhdGUgaWYgdmFsdWUgc2hvdWxkIGJlIHdyYXBwZWRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWVcbiAqIEBwYXJhbSBtaW4gVGhlIG1pbmltdW0gdmFsdWVcbiAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBPckNsYW1wKHdyYXA6IGJvb2xlYW4sIHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIGlmICghd3JhcCkge1xuICAgIHJldHVybiBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xuICB9IGVsc2UgaWYgKHZhbHVlIDwgbWluKSB7XG4gICAgcmV0dXJuIG1heDtcbiAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xuICAgIHJldHVybiBtaW47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=