@activejs/core
Version:
Pragmatic, Reactive State Management for JavaScript Apps
84 lines • 9.02 kB
JavaScript
import { Observable } from 'rxjs';
import { isFunction, isNumber, makeNonEnumerable } from '../utils/funcs';
import { Configuration } from './configuration';
import { UnitBase } from './abstract-unit-base';
import { Base } from './abstract-base';
/**
* NumUnit is a reactive storage Unit that emulates `number`.
*
* It only accepts `number` data type as its value.
* It ensures that at any point of time the value would always be `number`.
*
* NumUnit implements all the `Number.prototype` methods that are available
* in the environment/browser its running, including polyfills.
* e.g.: `toFixed`, `toPrecision`, etc.
*
* Learn more about Units [here](https://docs.activejs.dev/fundamentals/units). \
* Learn more about NumUnit [here](https://docs.activejs.dev/fundamentals/units/numunit).
*
* Just like every other ActiveJS Unit:
* - NumUnit extends {@link UnitBase}
* - Which further extends {@link Base} and `Observable`
*
* @category 1. Units
*/
export class NumUnit extends UnitBase {
constructor(config) {
super(Object.assign(Object.assign({}, Configuration.NUM_UNIT), config));
makeNonEnumerable(this);
}
/**
* Current value of the Unit.
* @default `0` (number zero)
*
* @category Access Value
*/
value() {
return this.rawValue();
}
/**
* @internal please do not use.
*/
defaultValue() {
return 0;
}
/**
* Extends {@link UnitBase.wouldDispatch} and adds additional check for type number,
* which cannot be bypassed even by using param `force`.
*
* @param value The value to be dispatched.
* @param force Whether dispatch-checks should be bypassed or not.
* @returns A boolean indicating whether the param `value` would pass the dispatch-checks if dispatched.
*
* @category Common Units
*/
wouldDispatch(value, force) {
return this.isValidValue(value) && super.wouldDispatch(value, force);
}
/**
* @internal please do not use.
*/
isValidValue(value) {
return isNumber(value);
}
}
/**
* @internal please do not use.
*/
const MethodsNotToImplement = [
...Object.getOwnPropertyNames(Observable.prototype),
...Object.getOwnPropertyNames(Base.prototype),
...Object.getOwnPropertyNames(UnitBase.prototype),
...Object.getOwnPropertyNames(NumUnit.prototype),
];
Object.getOwnPropertyNames(Number.prototype).forEach(method => {
if (!isFunction(Number.prototype[method]) || MethodsNotToImplement.includes(method)) {
return;
}
Object.defineProperty(NumUnit.prototype, method, {
value(...args) {
return Number.prototype[method].apply(this.value(), args);
},
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtLXVuaXQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvYWN0aXZlanMvYWN0aXZlanMvcGFja2FnZXMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvbnVtLXVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBS3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sT0FBUSxTQUFRLFFBQWdCO0lBa0IzQyxZQUFZLE1BQTJCO1FBQ3JDLEtBQUssaUNBQ0EsYUFBYSxDQUFDLFFBQVEsR0FDdEIsTUFBTSxFQUNULENBQUM7UUFFSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBeEJEOzs7OztPQUtHO0lBQ0gsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVk7UUFDcEIsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBV0Q7Ozs7Ozs7OztPQVNHO0lBQ0gsYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUFlO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZLENBQUMsS0FBVTtRQUMvQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBUUY7QUFFRDs7R0FFRztBQUNILE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNuRCxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzdDLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakQsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztDQUNqRCxDQUFDO0FBQ0YsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7SUFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ25GLE9BQU87S0FDUjtJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7UUFDL0MsS0FBSyxDQUFDLEdBQUcsSUFBSTtZQUNYLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1VuaXRDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge2lzRnVuY3Rpb24sIGlzTnVtYmVyLCBtYWtlTm9uRW51bWVyYWJsZX0gZnJvbSAnLi4vdXRpbHMvZnVuY3MnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuL2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtVbml0QmFzZX0gZnJvbSAnLi9hYnN0cmFjdC11bml0LWJhc2UnO1xuaW1wb3J0IHtCYXNlfSBmcm9tICcuL2Fic3RyYWN0LWJhc2UnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIE51bVVuaXQgZXh0ZW5kcyBOdW1iZXIge31cblxuLyoqXG4gKiBOdW1Vbml0IGlzIGEgcmVhY3RpdmUgc3RvcmFnZSBVbml0IHRoYXQgZW11bGF0ZXMgYG51bWJlcmAuXG4gKlxuICogSXQgb25seSBhY2NlcHRzIGBudW1iZXJgIGRhdGEgdHlwZSBhcyBpdHMgdmFsdWUuXG4gKiBJdCBlbnN1cmVzIHRoYXQgYXQgYW55IHBvaW50IG9mIHRpbWUgdGhlIHZhbHVlIHdvdWxkIGFsd2F5cyBiZSBgbnVtYmVyYC5cbiAqXG4gKiBOdW1Vbml0IGltcGxlbWVudHMgYWxsIHRoZSBgTnVtYmVyLnByb3RvdHlwZWAgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcbiAqIGluIHRoZSBlbnZpcm9ubWVudC9icm93c2VyIGl0cyBydW5uaW5nLCBpbmNsdWRpbmcgcG9seWZpbGxzLlxuICogZS5nLjogYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gLCBldGMuXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBVbml0cyBbaGVyZV0oaHR0cHM6Ly9kb2NzLmFjdGl2ZWpzLmRldi9mdW5kYW1lbnRhbHMvdW5pdHMpLiBcXFxuICogTGVhcm4gbW9yZSBhYm91dCBOdW1Vbml0IFtoZXJlXShodHRwczovL2RvY3MuYWN0aXZlanMuZGV2L2Z1bmRhbWVudGFscy91bml0cy9udW11bml0KS5cbiAqXG4gKiBKdXN0IGxpa2UgZXZlcnkgb3RoZXIgQWN0aXZlSlMgVW5pdDpcbiAqIC0gTnVtVW5pdCBleHRlbmRzIHtAbGluayBVbml0QmFzZX1cbiAqIC0gV2hpY2ggZnVydGhlciBleHRlbmRzIHtAbGluayBCYXNlfSBhbmQgYE9ic2VydmFibGVgXG4gKlxuICogQGNhdGVnb3J5IDEuIFVuaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBOdW1Vbml0IGV4dGVuZHMgVW5pdEJhc2U8bnVtYmVyPiB7XG4gIC8qKlxuICAgKiBDdXJyZW50IHZhbHVlIG9mIHRoZSBVbml0LlxuICAgKiBAZGVmYXVsdCBgMGAgKG51bWJlciB6ZXJvKVxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQWNjZXNzIFZhbHVlXG4gICAqL1xuICB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGRlZmF1bHRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY29uZmlnPzogVW5pdENvbmZpZzxudW1iZXI+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4uQ29uZmlndXJhdGlvbi5OVU1fVU5JVCxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9KTtcblxuICAgIG1ha2VOb25FbnVtZXJhYmxlKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZHMge0BsaW5rIFVuaXRCYXNlLndvdWxkRGlzcGF0Y2h9IGFuZCBhZGRzIGFkZGl0aW9uYWwgY2hlY2sgZm9yIHR5cGUgbnVtYmVyLFxuICAgKiB3aGljaCBjYW5ub3QgYmUgYnlwYXNzZWQgZXZlbiBieSB1c2luZyBwYXJhbSBgZm9yY2VgLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGRpc3BhdGNoZWQuXG4gICAqIEBwYXJhbSBmb3JjZSBXaGV0aGVyIGRpc3BhdGNoLWNoZWNrcyBzaG91bGQgYmUgYnlwYXNzZWQgb3Igbm90LlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBwYXJhbSBgdmFsdWVgIHdvdWxkIHBhc3MgdGhlIGRpc3BhdGNoLWNoZWNrcyBpZiBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBAY2F0ZWdvcnkgQ29tbW9uIFVuaXRzXG4gICAqL1xuICB3b3VsZERpc3BhdGNoKHZhbHVlOiBudW1iZXIsIGZvcmNlPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWRWYWx1ZSh2YWx1ZSkgJiYgc3VwZXIud291bGREaXNwYXRjaCh2YWx1ZSwgZm9yY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1ZhbGlkVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc051bWJlcih2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQGlnbm9yZVxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBzdGF0aWMgTnVtYmVyOiBhbnk7XG59XG5cbi8qKlxuICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICovXG5jb25zdCBNZXRob2RzTm90VG9JbXBsZW1lbnQgPSBbXG4gIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9ic2VydmFibGUucHJvdG90eXBlKSxcbiAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQmFzZS5wcm90b3R5cGUpLFxuICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhVbml0QmFzZS5wcm90b3R5cGUpLFxuICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhOdW1Vbml0LnByb3RvdHlwZSksXG5dO1xuT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTnVtYmVyLnByb3RvdHlwZSkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBpZiAoIWlzRnVuY3Rpb24oTnVtYmVyLnByb3RvdHlwZVttZXRob2RdKSB8fCBNZXRob2RzTm90VG9JbXBsZW1lbnQuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOdW1Vbml0LnByb3RvdHlwZSwgbWV0aG9kLCB7XG4gICAgdmFsdWUoLi4uYXJncykge1xuICAgICAgcmV0dXJuIE51bWJlci5wcm90b3R5cGVbbWV0aG9kXS5hcHBseSh0aGlzLnZhbHVlKCksIGFyZ3MpO1xuICAgIH0sXG4gIH0pO1xufSk7XG4iXX0=