@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
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 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=