UNPKG

@activejs/core

Version:

Pragmatic, Reactive State Management for JavaScript Apps

96 lines 10.1 kB
import { Observable } from 'rxjs'; import { Base } from './abstract-base'; import { UnitBase } from './abstract-unit-base'; import { Configuration } from './configuration'; import { isFunction, IteratorSymbol, makeNonEnumerable } from '../utils/funcs'; /** * StringUnit is a reactive storage Unit that emulates `string`. * * It only accepts `string` data type as its value. * It ensures that at any point of time the value would always be `string`. * * StringUnit implements all the `String.prototype` methods that are available * in the environment/browser its running, including polyfills. * e.g.: `trim`, `match`, `includes`, etc. * * Learn more about Units [here](https://docs.activejs.dev/fundamentals/units). \ * Learn more about StringUnit [here](https://docs.activejs.dev/fundamentals/units/stringunit). * * Just like every other ActiveJS Unit: * - StringUnit extends {@link UnitBase} * - Which further extends {@link Base} and `Observable` * * @category 1. Units */ export class StringUnit extends UnitBase { constructor(config) { super(Object.assign(Object.assign({}, Configuration.STRING_UNIT), config)); makeNonEnumerable(this); } /** * Length of the string {@link value}. */ get length() { return this.rawValue().length; } /** * Current value of the Unit. * @default `''` (empty string) * * @category Access Value */ value() { return this.rawValue(); } /** * @internal please do not use. */ defaultValue() { return ''; } /** * Extends {@link UnitBase.wouldDispatch} and adds additional check for type string, * which cannot be bypassed even by using {@link 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 typeof value === 'string'; } /** * @internal please do not use. */ [IteratorSymbol]() { return String.prototype[IteratorSymbol].call(this.value()); } } /** * @internal please do not use. */ const MethodsNotToImplement = [ ...Object.getOwnPropertyNames(Observable.prototype), ...Object.getOwnPropertyNames(Base.prototype), ...Object.getOwnPropertyNames(UnitBase.prototype), ...Object.getOwnPropertyNames(StringUnit.prototype), ]; Object.getOwnPropertyNames(String.prototype).forEach(method => { if (!isFunction(String.prototype[method]) || MethodsNotToImplement.includes(method)) { return; } Object.defineProperty(StringUnit.prototype, method, { value(...args) { return String.prototype[method].apply(this.value(), args); }, }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXVuaXQuanMiLCJzb3VyY2VSb290IjoiL2hvbWUvcnVubmVyL3dvcmsvYWN0aXZlanMvYWN0aXZlanMvcGFja2FnZXMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvc3RyaW5nLXVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLFFBQWdCO0lBeUI5QyxZQUFZLE1BQTJCO1FBQ3JDLEtBQUssaUNBQ0EsYUFBYSxDQUFDLFdBQVcsR0FDekIsTUFBTSxFQUNULENBQUM7UUFFSCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBL0JEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQVdEOzs7Ozs7Ozs7T0FTRztJQUNILGFBQWEsQ0FBQyxLQUFhLEVBQUUsS0FBZTtRQUMxQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOztPQUVHO0lBQ08sWUFBWSxDQUFDLEtBQVU7UUFDL0IsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsQ0FBQyxjQUFjLENBQUM7UUFDZCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FRRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRztJQUM1QixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ25ELEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0MsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNqRCxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0NBQ3BELENBQUM7QUFDRixNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtJQUM1RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbkYsT0FBTztLQUNSO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtRQUNsRCxLQUFLLENBQUMsR0FBRyxJQUFJO1lBQ1gsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7VW5pdENvbmZpZ30gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7QmFzZX0gZnJvbSAnLi9hYnN0cmFjdC1iYXNlJztcbmltcG9ydCB7VW5pdEJhc2V9IGZyb20gJy4vYWJzdHJhY3QtdW5pdC1iYXNlJztcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSAnLi9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7aXNGdW5jdGlvbiwgSXRlcmF0b3JTeW1ib2wsIG1ha2VOb25FbnVtZXJhYmxlfSBmcm9tICcuLi91dGlscy9mdW5jcyc7XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ1VuaXQgZXh0ZW5kcyBTdHJpbmcge31cblxuLyoqXG4gKiBTdHJpbmdVbml0IGlzIGEgcmVhY3RpdmUgc3RvcmFnZSBVbml0IHRoYXQgZW11bGF0ZXMgYHN0cmluZ2AuXG4gKlxuICogSXQgb25seSBhY2NlcHRzIGBzdHJpbmdgIGRhdGEgdHlwZSBhcyBpdHMgdmFsdWUuXG4gKiBJdCBlbnN1cmVzIHRoYXQgYXQgYW55IHBvaW50IG9mIHRpbWUgdGhlIHZhbHVlIHdvdWxkIGFsd2F5cyBiZSBgc3RyaW5nYC5cbiAqXG4gKiBTdHJpbmdVbml0IGltcGxlbWVudHMgYWxsIHRoZSBgU3RyaW5nLnByb3RvdHlwZWAgbWV0aG9kcyB0aGF0IGFyZSBhdmFpbGFibGVcbiAqIGluIHRoZSBlbnZpcm9ubWVudC9icm93c2VyIGl0cyBydW5uaW5nLCBpbmNsdWRpbmcgcG9seWZpbGxzLlxuICogZS5nLjogYHRyaW1gLCBgbWF0Y2hgLCBgaW5jbHVkZXNgLCBldGMuXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCBVbml0cyBbaGVyZV0oaHR0cHM6Ly9kb2NzLmFjdGl2ZWpzLmRldi9mdW5kYW1lbnRhbHMvdW5pdHMpLiBcXFxuICogTGVhcm4gbW9yZSBhYm91dCBTdHJpbmdVbml0IFtoZXJlXShodHRwczovL2RvY3MuYWN0aXZlanMuZGV2L2Z1bmRhbWVudGFscy91bml0cy9zdHJpbmd1bml0KS5cbiAqXG4gKiBKdXN0IGxpa2UgZXZlcnkgb3RoZXIgQWN0aXZlSlMgVW5pdDpcbiAqIC0gU3RyaW5nVW5pdCBleHRlbmRzIHtAbGluayBVbml0QmFzZX1cbiAqIC0gV2hpY2ggZnVydGhlciBleHRlbmRzIHtAbGluayBCYXNlfSBhbmQgYE9ic2VydmFibGVgXG4gKlxuICogQGNhdGVnb3J5IDEuIFVuaXRzXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdVbml0IGV4dGVuZHMgVW5pdEJhc2U8c3RyaW5nPiB7XG4gIC8qKlxuICAgKiBMZW5ndGggb2YgdGhlIHN0cmluZyB7QGxpbmsgdmFsdWV9LlxuICAgKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlKCkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgdmFsdWUgb2YgdGhlIFVuaXQuXG4gICAqIEBkZWZhdWx0IGAnJ2AgKGVtcHR5IHN0cmluZylcbiAgICpcbiAgICogQGNhdGVnb3J5IEFjY2VzcyBWYWx1ZVxuICAgKi9cbiAgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBwbGVhc2UgZG8gbm90IHVzZS5cbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjb25maWc/OiBVbml0Q29uZmlnPHN0cmluZz4pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5Db25maWd1cmF0aW9uLlNUUklOR19VTklULFxuICAgICAgLi4uY29uZmlnLFxuICAgIH0pO1xuXG4gICAgbWFrZU5vbkVudW1lcmFibGUodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0ZW5kcyB7QGxpbmsgVW5pdEJhc2Uud291bGREaXNwYXRjaH0gYW5kIGFkZHMgYWRkaXRpb25hbCBjaGVjayBmb3IgdHlwZSBzdHJpbmcsXG4gICAqIHdoaWNoIGNhbm5vdCBiZSBieXBhc3NlZCBldmVuIGJ5IHVzaW5nIHtAbGluayBmb3JjZX0uXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgZGlzcGF0Y2hlZC5cbiAgICogQHBhcmFtIGZvcmNlIFdoZXRoZXIgZGlzcGF0Y2gtY2hlY2tzIHNob3VsZCBiZSBieXBhc3NlZCBvciBub3QuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHBhcmFtIGB2YWx1ZWAgd291bGQgcGFzcyB0aGUgZGlzcGF0Y2gtY2hlY2tzIGlmIGRpc3BhdGNoZWQuXG4gICAqXG4gICAqIEBjYXRlZ29yeSBDb21tb24gVW5pdHNcbiAgICovXG4gIHdvdWxkRGlzcGF0Y2godmFsdWU6IHN0cmluZywgZm9yY2U/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZFZhbHVlKHZhbHVlKSAmJiBzdXBlci53b3VsZERpc3BhdGNoKHZhbHVlLCBmb3JjZSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVmFsaWRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICAgKi9cbiAgW0l0ZXJhdG9yU3ltYm9sXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPHN0cmluZz4ge1xuICAgIHJldHVybiBTdHJpbmcucHJvdG90eXBlW0l0ZXJhdG9yU3ltYm9sXS5jYWxsKHRoaXMudmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogQGlnbm9yZVxuICAgKiBAaW50ZXJuYWwgcGxlYXNlIGRvIG5vdCB1c2UuXG4gICAqL1xuICBzdGF0aWMgU3RyaW5nOiBhbnk7XG59XG5cbi8qKlxuICogQGludGVybmFsIHBsZWFzZSBkbyBub3QgdXNlLlxuICovXG5jb25zdCBNZXRob2RzTm90VG9JbXBsZW1lbnQgPSBbXG4gIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9ic2VydmFibGUucHJvdG90eXBlKSxcbiAgLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQmFzZS5wcm90b3R5cGUpLFxuICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhVbml0QmFzZS5wcm90b3R5cGUpLFxuICAuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhTdHJpbmdVbml0LnByb3RvdHlwZSksXG5dO1xuT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3RyaW5nLnByb3RvdHlwZSkuZm9yRWFjaChtZXRob2QgPT4ge1xuICBpZiAoIWlzRnVuY3Rpb24oU3RyaW5nLnByb3RvdHlwZVttZXRob2RdKSB8fCBNZXRob2RzTm90VG9JbXBsZW1lbnQuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmdVbml0LnByb3RvdHlwZSwgbWV0aG9kLCB7XG4gICAgdmFsdWUoLi4uYXJncykge1xuICAgICAgcmV0dXJuIFN0cmluZy5wcm90b3R5cGVbbWV0aG9kXS5hcHBseSh0aGlzLnZhbHVlKCksIGFyZ3MpO1xuICAgIH0sXG4gIH0pO1xufSk7XG4iXX0=