@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
JavaScript
/**
* @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==