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.64 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 const 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 {?} */ const name = store[NGXS_META_KEY].path; /** @type {?} */ const ReflectedAction = (/** * @param {?} data * @return {?} */ function (data) { this.payload = data; }); /** @type {?} */ const 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 {?} */ const active = getActive(state); if (active === undefined) { throw new NoActiveEntityError(); } return { id: state.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 {?} */ (value, key) => 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4cy1sYWJzL2VudGl0eS1zdGF0ZS8iLCJzb3VyY2VzIjpbImxpYi9pbnRlcm5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFNL0MsNkJBRUM7O0FBRUQsTUFBTSxPQUFPLGFBQWEsR0FBRyxXQUFXOzs7Ozs7Ozs7QUFReEMsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxFQUFVLEVBQ1YsS0FBMkIsRUFDM0IsT0FBYTs7VUFFUCxJQUFJLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUk7O1VBQ2hDLGVBQWU7Ozs7SUFBRyxVQUFTLElBQU87UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQyxDQUFBOztVQUNLLEdBQUcsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUM7SUFDeEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7SUFDcEUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDOzs7Ozs7O0FBTUQsTUFBTSxVQUFVLFNBQVMsQ0FBSSxLQUEwQjtJQUNyRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7Ozs7Ozs7QUFNRCxNQUFNLFVBQVUsYUFBYSxDQUFJLEtBQTBCOztVQUNuRCxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUMvQixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDeEIsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7S0FDakM7SUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDdEMsQ0FBQzs7Ozs7OztBQU9ELE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBVyxFQUFFLElBQVk7SUFDN0MsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTTs7Ozs7SUFBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3RixDQUFDOzs7Ozs7O0FBTUQsTUFBTSxVQUFVLE9BQU8sQ0FBSSxLQUFjO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUM7Ozs7Ozs7O0FBUUQsU0FBUyxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QyxDQUFDOzs7Ozs7Ozs7O0FBVUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFhLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2hGLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQy9CO1NBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTSxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDdEIsT0FBTyxHQUFHLENBQUM7S0FDWjtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vQWN0aXZlRW50aXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBFbnRpdHlTdGF0ZU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG4vKipcbiAqIHR5cGUgYWxpYXMgZm9yIGphdmFzY3JpcHQgb2JqZWN0IGxpdGVyYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYXNoTWFwPFQ+IHtcbiAgW2lkOiBzdHJpbmddOiBUO1xufVxuXG5leHBvcnQgY29uc3QgTkdYU19NRVRBX0tFWSA9ICdOR1hTX01FVEEnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgbmV3IG9iamVjdCBmb3IgdGhlIG5neHMgQWN0aW9uIHdpdGggdGhlIGdpdmVuIGZuIG5hbWVcbiAqIEBwYXJhbSBmbiBUaGUgbmFtZSBvZiB0aGUgQWN0aW9uIHRvIHNpbXVsYXRlLCBlLmcuIFwiUmVtb3ZlXCIgb3IgXCJVcGRhdGVcIlxuICogQHBhcmFtIHN0b3JlIFRoZSBjbGFzcyBvZiB0aGUgdGFyZ2V0ZWQgZW50aXR5IHN0YXRlLCBlLmcuIFpvb1N0YXRlXG4gKiBAcGFyYW0gcGF5bG9hZCBUaGUgcGF5bG9hZCBmb3IgdGhlIGNyZWF0ZWQgYWN0aW9uIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBY3Rpb25PYmplY3Q8VD4oXG4gIGZuOiBzdHJpbmcsXG4gIHN0b3JlOiBUeXBlPEVudGl0eVN0YXRlPFQ+PixcbiAgcGF5bG9hZD86IGFueVxuKSB7XG4gIGNvbnN0IG5hbWUgPSBzdG9yZVtOR1hTX01FVEFfS0VZXS5wYXRoO1xuICBjb25zdCBSZWZsZWN0ZWRBY3Rpb24gPSBmdW5jdGlvbihkYXRhOiBUKSB7XG4gICAgdGhpcy5wYXlsb2FkID0gZGF0YTtcbiAgfTtcbiAgY29uc3Qgb2JqID0gbmV3IFJlZmxlY3RlZEFjdGlvbihwYXlsb2FkKTtcbiAgUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmopLmNvbnN0cnVjdG9yWyd0eXBlJ10gPSBgWyR7bmFtZX1dICR7Zm59YDtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYWN0aXZlIGVudGl0eSBvZiB0aGUgZ2l2ZW4gc3RhdGVcbiAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgb2YgYW4gZW50aXR5IHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmU8VD4oc3RhdGU6IEVudGl0eVN0YXRlTW9kZWw8VD4pOiBUIHtcbiAgcmV0dXJuIHN0YXRlLmVudGl0aWVzW3N0YXRlLmFjdGl2ZV07XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0aXZlIGVudGl0eS4gSWYgbm9uZSBpcyBwcmVzZW50IGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBhY3Qgb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG11c3RHZXRBY3RpdmU8VD4oc3RhdGU6IEVudGl0eVN0YXRlTW9kZWw8VD4pOiB7IGlkOiBzdHJpbmc7IGFjdGl2ZTogVCB9IHtcbiAgY29uc3QgYWN0aXZlID0gZ2V0QWN0aXZlKHN0YXRlKTtcbiAgaWYgKGFjdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IE5vQWN0aXZlRW50aXR5RXJyb3IoKTtcbiAgfVxuICByZXR1cm4geyBpZDogc3RhdGUuYWN0aXZlLCBhY3RpdmUgfTtcbn1cblxuLyoqXG4gKiBVbmRlZmluZWQtc2FmZSBmdW5jdGlvbiB0byBhY2Nlc3MgdGhlIHByb3BlcnR5IGdpdmVuIGJ5IHBhdGggcGFyYW1ldGVyXG4gKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcmVhZCBmcm9tXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byB0aGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVsdmlzKG9iamVjdDogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcGF0aCA/IHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKHZhbHVlLCBrZXkpID0+IHZhbHVlICYmIHZhbHVlW2tleV0sIG9iamVjdCkgOiBvYmplY3Q7XG59XG5cbi8qKlxuICogUmV0dXJucyBpbnB1dCBhcyBhbiBhcnJheSBpZiBpdCBpc24ndCBvbmUgYWxyZWFkeVxuICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCB0byBtYWtlIGFuIGFycmF5IGlmIG5lY2Vzc2FyeVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPihpbnB1dDogVCB8IFRbXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0IDogW2lucHV0XTtcbn1cblxuLyoqXG4gKiBMaW1pdHMgYSBudW1iZXIgdG8gdGhlIGdpdmVuIGJvdW5kYXJpZXNcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWVcbiAqIEBwYXJhbSBtaW4gVGhlIG1pbmltdW0gdmFsdWVcbiAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuXG4vKipcbiAqIFVzZXMgdGhlIGNsYW1wIGZ1bmN0aW9uIGlzIHdyYXAgaXMgZmFsc2UuXG4gKiBFbHNlIGl0IHdyYXAgdG8gdGhlIG1heCBvciBtaW4gdmFsdWUgcmVzcGVjdGl2ZWx5LlxuICogQHBhcmFtIHdyYXAgRmxhZyB0byBpbmRpY2F0ZSBpZiB2YWx1ZSBzaG91bGQgYmUgd3JhcHBlZFxuICogQHBhcmFtIHZhbHVlIFRoZSBpbnB1dCB2YWx1ZVxuICogQHBhcmFtIG1pbiBUaGUgbWluaW11bSB2YWx1ZVxuICogQHBhcmFtIG1heCBUaGUgbWF4aW11bSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcE9yQ2xhbXAod3JhcDogYm9vbGVhbiwgdmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCF3cmFwKSB7XG4gICAgcmV0dXJuIGNsYW1wKHZhbHVlLCBtaW4sIG1heCk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPCBtaW4pIHtcbiAgICByZXR1cm4gbWF4O1xuICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgcmV0dXJuIG1pbjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbiJdfQ==