UNPKG

@ngxs-labs/entity-state

Version:

<p align="center"> <img src="https://raw.githubusercontent.com/ngxs-labs/emitter/master/docs/assets/logo.png"> </p>

82 lines 9.36 kB
import { NoActiveEntityError } from './errors'; export const NGXS_META_KEY = 'NGXS_META'; /** * This function generates a new object for the ngxs Action with the given fn name * @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 */ export function generateActionObject(fn, store, payload) { const name = store[NGXS_META_KEY].path; const ReflectedAction = function (data) { this.payload = data; }; 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 * @param state the state of an entity state */ export function getActive(state) { return state.entities[state.active]; } /** * Returns the active entity. If none is present an error will be thrown. * @param state The state to act on */ export function mustGetActive(state) { 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 */ export function elvis(object, path) { return path ? path.split('.').reduce((value, key) => value && value[key], object) : object; } /** * Returns input as an array if it isn't one already * @param input The input to make an array if necessary */ 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 */ 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 */ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQVcvQyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDO0FBRXpDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxFQUFVLEVBQ1YsS0FBMkIsRUFDM0IsT0FBYTtJQUViLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkMsTUFBTSxlQUFlLEdBQUcsVUFBUyxJQUFPO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztJQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ3BFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUksS0FBMEI7SUFDckQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBSSxLQUEwQjtJQUN6RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxNQUFXLEVBQUUsSUFBWTtJQUM3QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDN0YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUksS0FBYztJQUN2QyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVc7SUFDcEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFhLEVBQUUsS0FBYSxFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2hGLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDVCxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQy9CO1NBQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLE9BQU8sR0FBRyxDQUFDO0tBQ1o7U0FBTSxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDdEIsT0FBTyxHQUFHLENBQUM7S0FDWjtTQUFNO1FBQ0wsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlTdGF0ZSB9IGZyb20gJy4vZW50aXR5LXN0YXRlJztcclxuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb0FjdGl2ZUVudGl0eUVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0ZU1vZGVsIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5cclxuLyoqXHJcbiAqIFR5cGUgYWxpYXMgZm9yIGFuIG9iamVjdCBsaXRlcmFsLlxyXG4gKiBPbmx5IGFsbG93cyBzdHJpbmdzIGFzIGtleXMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIERpY3Rpb25hcnk8VD4ge1xyXG4gIFtrZXk6IHN0cmluZ106IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOR1hTX01FVEFfS0VZID0gJ05HWFNfTUVUQSc7XHJcblxyXG4vKipcclxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBuZXcgb2JqZWN0IGZvciB0aGUgbmd4cyBBY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gZm4gbmFtZVxyXG4gKiBAcGFyYW0gZm4gVGhlIG5hbWUgb2YgdGhlIEFjdGlvbiB0byBzaW11bGF0ZSwgZS5nLiBcIlJlbW92ZVwiIG9yIFwiVXBkYXRlXCJcclxuICogQHBhcmFtIHN0b3JlIFRoZSBjbGFzcyBvZiB0aGUgdGFyZ2V0ZWQgZW50aXR5IHN0YXRlLCBlLmcuIFpvb1N0YXRlXHJcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIGZvciB0aGUgY3JlYXRlZCBhY3Rpb24gb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBY3Rpb25PYmplY3Q8VD4oXHJcbiAgZm46IHN0cmluZyxcclxuICBzdG9yZTogVHlwZTxFbnRpdHlTdGF0ZTxUPj4sXHJcbiAgcGF5bG9hZD86IGFueVxyXG4pIHtcclxuICBjb25zdCBuYW1lID0gc3RvcmVbTkdYU19NRVRBX0tFWV0ucGF0aDtcclxuICBjb25zdCBSZWZsZWN0ZWRBY3Rpb24gPSBmdW5jdGlvbihkYXRhOiBUKSB7XHJcbiAgICB0aGlzLnBheWxvYWQgPSBkYXRhO1xyXG4gIH07XHJcbiAgY29uc3Qgb2JqID0gbmV3IFJlZmxlY3RlZEFjdGlvbihwYXlsb2FkKTtcclxuICBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iaikuY29uc3RydWN0b3JbJ3R5cGUnXSA9IGBbJHtuYW1lfV0gJHtmbn1gO1xyXG4gIHJldHVybiBvYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgYWN0aXZlIGVudGl0eSBvZiB0aGUgZ2l2ZW4gc3RhdGVcclxuICogQHBhcmFtIHN0YXRlIHRoZSBzdGF0ZSBvZiBhbiBlbnRpdHkgc3RhdGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmU8VD4oc3RhdGU6IEVudGl0eVN0YXRlTW9kZWw8VD4pOiBUIHtcclxuICByZXR1cm4gc3RhdGUuZW50aXRpZXNbc3RhdGUuYWN0aXZlXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGFjdGl2ZSBlbnRpdHkuIElmIG5vbmUgaXMgcHJlc2VudCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cclxuICogQHBhcmFtIHN0YXRlIFRoZSBzdGF0ZSB0byBhY3Qgb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtdXN0R2V0QWN0aXZlPFQ+KHN0YXRlOiBFbnRpdHlTdGF0ZU1vZGVsPFQ+KTogeyBpZDogc3RyaW5nOyBhY3RpdmU6IFQgfSB7XHJcbiAgY29uc3QgYWN0aXZlID0gZ2V0QWN0aXZlKHN0YXRlKTtcclxuICBpZiAoYWN0aXZlID09PSB1bmRlZmluZWQpIHtcclxuICAgIHRocm93IG5ldyBOb0FjdGl2ZUVudGl0eUVycm9yKCk7XHJcbiAgfVxyXG4gIHJldHVybiB7IGlkOiBzdGF0ZS5hY3RpdmUsIGFjdGl2ZSB9O1xyXG59XHJcblxyXG4vKipcclxuICogVW5kZWZpbmVkLXNhZmUgZnVuY3Rpb24gdG8gYWNjZXNzIHRoZSBwcm9wZXJ0eSBnaXZlbiBieSBwYXRoIHBhcmFtZXRlclxyXG4gKiBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcmVhZCBmcm9tXHJcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBwcm9wZXJ0eVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGVsdmlzKG9iamVjdDogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gIHJldHVybiBwYXRoID8gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgodmFsdWUsIGtleSkgPT4gdmFsdWUgJiYgdmFsdWVba2V5XSwgb2JqZWN0KSA6IG9iamVjdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgaW5wdXQgYXMgYW4gYXJyYXkgaWYgaXQgaXNuJ3Qgb25lIGFscmVhZHlcclxuICogQHBhcmFtIGlucHV0IFRoZSBpbnB1dCB0byBtYWtlIGFuIGFycmF5IGlmIG5lY2Vzc2FyeVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXk8VD4oaW5wdXQ6IFQgfCBUW10pOiBUW10ge1xyXG4gIHJldHVybiBBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0IDogW2lucHV0XTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExpbWl0cyBhIG51bWJlciB0byB0aGUgZ2l2ZW4gYm91bmRhcmllc1xyXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGlucHV0IHZhbHVlXHJcbiAqIEBwYXJhbSBtaW4gVGhlIG1pbmltdW0gdmFsdWVcclxuICogQHBhcmFtIG1heCBUaGUgbWF4aW11bSB2YWx1ZVxyXG4gKi9cclxuZnVuY3Rpb24gY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICByZXR1cm4gTWF0aC5taW4obWF4LCBNYXRoLm1heChtaW4sIHZhbHVlKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VzIHRoZSBjbGFtcCBmdW5jdGlvbiBpcyB3cmFwIGlzIGZhbHNlLlxyXG4gKiBFbHNlIGl0IHdyYXAgdG8gdGhlIG1heCBvciBtaW4gdmFsdWUgcmVzcGVjdGl2ZWx5LlxyXG4gKiBAcGFyYW0gd3JhcCBGbGFnIHRvIGluZGljYXRlIGlmIHZhbHVlIHNob3VsZCBiZSB3cmFwcGVkXHJcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWVcclxuICogQHBhcmFtIG1pbiBUaGUgbWluaW11bSB2YWx1ZVxyXG4gKiBAcGFyYW0gbWF4IFRoZSBtYXhpbXVtIHZhbHVlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd3JhcE9yQ2xhbXAod3JhcDogYm9vbGVhbiwgdmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBpZiAoIXdyYXApIHtcclxuICAgIHJldHVybiBjbGFtcCh2YWx1ZSwgbWluLCBtYXgpO1xyXG4gIH0gZWxzZSBpZiAodmFsdWUgPCBtaW4pIHtcclxuICAgIHJldHVybiBtYXg7XHJcbiAgfSBlbHNlIGlmICh2YWx1ZSA+IG1heCkge1xyXG4gICAgcmV0dXJuIG1pbjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxufVxyXG4iXX0=