UNPKG

@activejs/core

Version:

Pragmatic, Reactive State Management for JavaScript Apps

78 lines 8.75 kB
import { Configuration } from './configuration'; import { NonPrimitiveUnitBase } from './abstract-non-primitive-unit-base'; import { findIndex, findIndexBackwards, makeNonEnumerable } from '../utils/funcs'; /** * GenericUnit is a reactive storage Unit that doesn't pertain to any specific data type. * * GenericUnit accepts all data types as its value. * * Learn more about Units [here](https://docs.activejs.dev/fundamentals/units). \ * Learn more about GenericUnit [here](https://docs.activejs.dev/fundamentals/units/genericunit). * * Just like every other Non-Primitive ActiveJS Unit: * - GenericUnit extends {@link NonPrimitiveUnitBase} * - Which further extends {@link UnitBase}, {@link Base} and `Observable` * * @category 1. Units */ export class GenericUnit extends NonPrimitiveUnitBase { constructor(config) { super(Object.assign(Object.assign({}, Configuration.GENERIC_UNIT), config)); makeNonEnumerable(this); } /** * The underlying method that makes `skipNilValues` possible for {@link goBack} and {@link goForward}. * * @param direction The direction to find the non `null` or `undefined` value in. * * @hidden * @category Cache Navigation */ goToNonNilValue(direction) { if (this.isFrozen) { return false; } const lastNonNilValueIndex = direction === 'BACK' ? findIndexBackwards(this._cachedValues, v => v != null, this.cacheIndex - 1) : findIndex(this._cachedValues, v => v != null, this.cacheIndex + 1); if (lastNonNilValueIndex === -1) { return false; } return this.jump(lastNonNilValueIndex - this.cacheIndex); } /** * It extends {@link UnitBase.goBack}, and allows skipping over nil (null or undefined) values. \ * To skip over nil values pass `true` as `skipNilValues`. * * @param skipNilValues Should the `null` and `undefined` values be skipped over. * * @category Cache Navigation */ goBack(skipNilValues = false) { if (skipNilValues === true) { return this.goToNonNilValue('BACK'); } return super.goBack(); } /** * It extends {@link UnitBase.goForward}, and allows skipping over nil (null or undefined) values. \ * To skip over nil values pass `true` as `skipNilValues`. * * @param skipNilValues Should the `null` and `undefined` values be skipped over. * * @category Cache Navigation */ goForward(skipNilValues = false) { if (skipNilValues === true) { return this.goToNonNilValue('FORWARD'); } return super.goForward(); } /** * @internal please do not use. */ isValidValue(value) { return true; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy11bml0LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL2FjdGl2ZWpzL2FjdGl2ZWpzL3BhY2thZ2VzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2dlbmVyaWMtdW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR2hGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8sV0FJWCxTQUFRLG9CQUF1QjtJQUMvQixZQUFZLE1BQXNCO1FBQ2hDLEtBQUssaUNBQ0EsYUFBYSxDQUFDLFlBQVksR0FDMUIsTUFBTSxFQUNULENBQUM7UUFFSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLGVBQWUsQ0FBQyxTQUE2QjtRQUNuRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE1BQU0sb0JBQW9CLEdBQ3hCLFNBQVMsS0FBSyxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztZQUM3RSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxhQUFhLEdBQUcsS0FBSztRQUMxQixJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUs7UUFDN0IsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4QztRQUVELE9BQU8sS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVksQ0FBQyxLQUFVO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuL2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtVbml0QmFzZX0gZnJvbSAnLi9hYnN0cmFjdC11bml0LWJhc2UnO1xuaW1wb3J0IHtOb25QcmltaXRpdmVVbml0QmFzZX0gZnJvbSAnLi9hYnN0cmFjdC1ub24tcHJpbWl0aXZlLXVuaXQtYmFzZSc7XG5pbXBvcnQge2ZpbmRJbmRleCwgZmluZEluZGV4QmFja3dhcmRzLCBtYWtlTm9uRW51bWVyYWJsZX0gZnJvbSAnLi4vdXRpbHMvZnVuY3MnO1xuaW1wb3J0IHtLT2YsIFVuaXRDb25maWd9IGZyb20gJy4uL21vZGVscyc7XG5cbi8qKlxuICogR2VuZXJpY1VuaXQgaXMgYSByZWFjdGl2ZSBzdG9yYWdlIFVuaXQgdGhhdCBkb2Vzbid0IHBlcnRhaW4gdG8gYW55IHNwZWNpZmljIGRhdGEgdHlwZS5cbiAqXG4gKiBHZW5lcmljVW5pdCBhY2NlcHRzIGFsbCBkYXRhIHR5cGVzIGFzIGl0cyB2YWx1ZS5cbiAqXG4gKiBMZWFybiBtb3JlIGFib3V0IFVuaXRzIFtoZXJlXShodHRwczovL2RvY3MuYWN0aXZlanMuZGV2L2Z1bmRhbWVudGFscy91bml0cykuIFxcXG4gKiBMZWFybiBtb3JlIGFib3V0IEdlbmVyaWNVbml0IFtoZXJlXShodHRwczovL2RvY3MuYWN0aXZlanMuZGV2L2Z1bmRhbWVudGFscy91bml0cy9nZW5lcmljdW5pdCkuXG4gKlxuICogSnVzdCBsaWtlIGV2ZXJ5IG90aGVyIE5vbi1QcmltaXRpdmUgQWN0aXZlSlMgVW5pdDpcbiAqIC0gR2VuZXJpY1VuaXQgZXh0ZW5kcyB7QGxpbmsgTm9uUHJpbWl0aXZlVW5pdEJhc2V9XG4gKiAtIFdoaWNoIGZ1cnRoZXIgZXh0ZW5kcyB7QGxpbmsgVW5pdEJhc2V9LCB7QGxpbmsgQmFzZX0gYW5kIGBPYnNlcnZhYmxlYFxuICpcbiAqIEBjYXRlZ29yeSAxLiBVbml0c1xuICovXG5leHBvcnQgY2xhc3MgR2VuZXJpY1VuaXQ8XG4gIFQsXG4gIEsgZXh0ZW5kcyBLT2Y8VD4gPSBLT2Y8VD4sXG4gIFYgZXh0ZW5kcyBUW0tdID0gVFtLXVxuPiBleHRlbmRzIE5vblByaW1pdGl2ZVVuaXRCYXNlPFQ+IHtcbiAgY29uc3RydWN0b3IoY29uZmlnPzogVW5pdENvbmZpZzxUPikge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLkNvbmZpZ3VyYXRpb24uR0VORVJJQ19VTklULFxuICAgICAgLi4uY29uZmlnLFxuICAgIH0pO1xuXG4gICAgbWFrZU5vbkVudW1lcmFibGUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgbWV0aG9kIHRoYXQgbWFrZXMgYHNraXBOaWxWYWx1ZXNgIHBvc3NpYmxlIGZvciB7QGxpbmsgZ29CYWNrfSBhbmQge0BsaW5rIGdvRm9yd2FyZH0uXG4gICAqXG4gICAqIEBwYXJhbSBkaXJlY3Rpb24gVGhlIGRpcmVjdGlvbiB0byBmaW5kIHRoZSBub24gYG51bGxgIG9yIGB1bmRlZmluZWRgIHZhbHVlIGluLlxuICAgKlxuICAgKiBAaGlkZGVuXG4gICAqIEBjYXRlZ29yeSBDYWNoZSBOYXZpZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGdvVG9Ob25OaWxWYWx1ZShkaXJlY3Rpb246ICdCQUNLJyB8ICdGT1JXQVJEJyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRnJvemVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxhc3ROb25OaWxWYWx1ZUluZGV4ID1cbiAgICAgIGRpcmVjdGlvbiA9PT0gJ0JBQ0snXG4gICAgICAgID8gZmluZEluZGV4QmFja3dhcmRzKHRoaXMuX2NhY2hlZFZhbHVlcywgdiA9PiB2ICE9IG51bGwsIHRoaXMuY2FjaGVJbmRleCAtIDEpXG4gICAgICAgIDogZmluZEluZGV4KHRoaXMuX2NhY2hlZFZhbHVlcywgdiA9PiB2ICE9IG51bGwsIHRoaXMuY2FjaGVJbmRleCArIDEpO1xuICAgIGlmIChsYXN0Tm9uTmlsVmFsdWVJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuanVtcChsYXN0Tm9uTmlsVmFsdWVJbmRleCAtIHRoaXMuY2FjaGVJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogSXQgZXh0ZW5kcyB7QGxpbmsgVW5pdEJhc2UuZ29CYWNrfSwgYW5kIGFsbG93cyBza2lwcGluZyBvdmVyIG5pbCAobnVsbCBvciB1bmRlZmluZWQpIHZhbHVlcy4gXFxcbiAgICogVG8gc2tpcCBvdmVyIG5pbCB2YWx1ZXMgcGFzcyBgdHJ1ZWAgYXMgYHNraXBOaWxWYWx1ZXNgLlxuICAgKlxuICAgKiBAcGFyYW0gc2tpcE5pbFZhbHVlcyBTaG91bGQgdGhlIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzIGJlIHNraXBwZWQgb3Zlci5cbiAgICpcbiAgICogQGNhdGVnb3J5IENhY2hlIE5hdmlnYXRpb25cbiAgICovXG4gIGdvQmFjayhza2lwTmlsVmFsdWVzID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2tpcE5pbFZhbHVlcyA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ29Ub05vbk5pbFZhbHVlKCdCQUNLJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmdvQmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGV4dGVuZHMge0BsaW5rIFVuaXRCYXNlLmdvRm9yd2FyZH0sIGFuZCBhbGxvd3Mgc2tpcHBpbmcgb3ZlciBuaWwgKG51bGwgb3IgdW5kZWZpbmVkKSB2YWx1ZXMuIFxcXG4gICAqIFRvIHNraXAgb3ZlciBuaWwgdmFsdWVzIHBhc3MgYHRydWVgIGFzIGBza2lwTmlsVmFsdWVzYC5cbiAgICpcbiAgICogQHBhcmFtIHNraXBOaWxWYWx1ZXMgU2hvdWxkIHRoZSBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIHZhbHVlcyBiZSBza2lwcGVkIG92ZXIuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBDYWNoZSBOYXZpZ2F0aW9uXG4gICAqL1xuICBnb0ZvcndhcmQoc2tpcE5pbFZhbHVlcyA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHNraXBOaWxWYWx1ZXMgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdvVG9Ob25OaWxWYWx1ZSgnRk9SV0FSRCcpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5nb0ZvcndhcmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZFZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19