UNPKG

@activejs/core

Version:

Pragmatic, Reactive State Management for JavaScript Apps

36 lines 8.15 kB
import { GenericUnit } from './generic-unit'; import { BoolUnit } from './bool-unit'; import { generateAsyncSystemIds } from '../utils/funcs'; import { AsyncSystemBase } from './async-system-base'; import { Configuration } from './configuration'; /** * AsyncSystem is a reactive storage System, to store, replay and wait for simple async tasks. * * An AsyncSystem is a systematic combination of four Units. * one each for every aspect of an asynchronous task or API, \ * e.g.: XHR, fetch or a third party abstraction like Angular's HttpClient. * * See {@link https://docs.activejs.dev/fundamentals/systems/asyncsystem} for more details. * * - AsyncSystem extends {@link AsyncSystemBase}, * which further extends {@link Base} and `Observable` * * @category 3. Systems */ export class AsyncSystem extends AsyncSystemBase { constructor(config) { super(...(() => { config = Object.assign(Object.assign({}, Configuration.ASYNC_SYSTEM), config); const { id: systemId, initialValue, QUERY_UNIT, DATA_UNIT, ERROR_UNIT, PENDING_UNIT, UNITS, } = config; const { queryUnitId, dataUnitId, errorUnitId, pendingUnitId } = generateAsyncSystemIds(systemId, QUERY_UNIT, DATA_UNIT, ERROR_UNIT, PENDING_UNIT); // no need to check these, as Units ignore undefined as initialValue anyway const { query, data, error, pending } = initialValue || {}; const queryUnit = new GenericUnit(Object.assign(Object.assign(Object.assign({ initialValue: query }, UNITS), QUERY_UNIT), { id: queryUnitId })); const dataUnit = new GenericUnit(Object.assign(Object.assign(Object.assign({ initialValue: data }, UNITS), DATA_UNIT), { id: dataUnitId })); const errorUnit = new GenericUnit(Object.assign(Object.assign(Object.assign({ initialValue: error }, UNITS), ERROR_UNIT), { id: errorUnitId })); const pendingUnit = new BoolUnit(Object.assign(Object.assign(Object.assign({ initialValue: pending }, UNITS), PENDING_UNIT), { id: pendingUnitId })); return [queryUnit, dataUnit, errorUnit, pendingUnit, config]; })()); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc3lzdGVtLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3J1bm5lci93b3JrL2FjdGl2ZWpzL2FjdGl2ZWpzL3BhY2thZ2VzL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FzeW5jLXN5c3RlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTlDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8sV0FBZ0MsU0FBUSxlQUlwRDtJQU9DLFlBQVksTUFBOEM7UUFDeEQsS0FBSyxDQUNILEdBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLG1DQUFPLGFBQWEsQ0FBQyxZQUFZLEdBQUssTUFBTSxDQUFDLENBQUM7WUFDcEQsTUFBTSxFQUNKLEVBQUUsRUFBRSxRQUFRLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEdBQ04sR0FBMEMsTUFBTSxDQUFDO1lBRWxELE1BQU0sRUFBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUMsR0FBRyxzQkFBc0IsQ0FDbEYsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksQ0FDYixDQUFDO1lBRUYsMkVBQTJFO1lBQzNFLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsR0FDakMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUVyQixNQUFNLFNBQVMsR0FBRyxJQUFJLFdBQVcsNkNBQy9CLFlBQVksRUFBRSxLQUFLLElBQ2hCLEtBQUssR0FDTCxVQUFVLEtBQ2IsRUFBRSxFQUFFLFdBQVcsSUFDZixDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLDZDQUM5QixZQUFZLEVBQUUsSUFBSSxJQUNmLEtBQUssR0FDTCxTQUFTLEtBQ1osRUFBRSxFQUFFLFVBQVUsSUFDZCxDQUFDO1lBRUgsTUFBTSxTQUFTLEdBQUcsSUFBSSxXQUFXLDZDQUMvQixZQUFZLEVBQUUsS0FBSyxJQUNoQixLQUFLLEdBQ0wsVUFBVSxLQUNiLEVBQUUsRUFBRSxXQUFXLElBQ2YsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLElBQUksUUFBUSw2Q0FDOUIsWUFBWSxFQUFFLE9BQU8sSUFDbEIsS0FBSyxHQUNMLFlBQVksS0FDZixFQUFFLEVBQUUsYUFBYSxJQUNqQixDQUFDO1lBRUgsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsRUFNQSxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2V9IGZyb20gJy4vYWJzdHJhY3QtYmFzZSc7XG5pbXBvcnQge0dlbmVyaWNVbml0fSBmcm9tICcuL2dlbmVyaWMtdW5pdCc7XG5pbXBvcnQge0Jvb2xVbml0fSBmcm9tICcuL2Jvb2wtdW5pdCc7XG5pbXBvcnQge2dlbmVyYXRlQXN5bmNTeXN0ZW1JZHN9IGZyb20gJy4uL3V0aWxzL2Z1bmNzJztcbmltcG9ydCB7QXN5bmNTeXN0ZW1Db25maWcsIEFzeW5jU3lzdGVtVmFsdWV9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0FzeW5jU3lzdGVtQmFzZX0gZnJvbSAnLi9hc3luYy1zeXN0ZW0tYmFzZSc7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gJy4vY29uZmlndXJhdGlvbic7XG5cbi8qKlxuICogQXN5bmNTeXN0ZW0gaXMgYSByZWFjdGl2ZSBzdG9yYWdlIFN5c3RlbSwgdG8gc3RvcmUsIHJlcGxheSBhbmQgd2FpdCBmb3Igc2ltcGxlIGFzeW5jIHRhc2tzLlxuICpcbiAqIEFuIEFzeW5jU3lzdGVtIGlzIGEgc3lzdGVtYXRpYyBjb21iaW5hdGlvbiBvZiBmb3VyIFVuaXRzLlxuICogb25lIGVhY2ggZm9yIGV2ZXJ5IGFzcGVjdCBvZiBhbiBhc3luY2hyb25vdXMgdGFzayBvciBBUEksIFxcXG4gKiBlLmcuOiBYSFIsIGZldGNoIG9yIGEgdGhpcmQgcGFydHkgYWJzdHJhY3Rpb24gbGlrZSBBbmd1bGFyJ3MgSHR0cENsaWVudC5cbiAqXG4gKiBTZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5hY3RpdmVqcy5kZXYvZnVuZGFtZW50YWxzL3N5c3RlbXMvYXN5bmNzeXN0ZW19IGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogLSBBc3luY1N5c3RlbSBleHRlbmRzIHtAbGluayBBc3luY1N5c3RlbUJhc2V9LFxuICogICB3aGljaCBmdXJ0aGVyIGV4dGVuZHMge0BsaW5rIEJhc2V9IGFuZCBgT2JzZXJ2YWJsZWBcbiAqXG4gKiBAY2F0ZWdvcnkgMy4gU3lzdGVtc1xuICovXG5leHBvcnQgY2xhc3MgQXN5bmNTeXN0ZW08UXVlcnksIERhdGEsIEVycm9yPiBleHRlbmRzIEFzeW5jU3lzdGVtQmFzZTxcbiAgR2VuZXJpY1VuaXQ8UXVlcnk+LFxuICBHZW5lcmljVW5pdDxEYXRhPixcbiAgR2VuZXJpY1VuaXQ8RXJyb3I+XG4+IHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZWQgb3B0aW9ucy4gXFxcbiAgICogQ29tYmluYXRpb24gb2YgZ2xvYmFsLW9wdGlvbnMge0BsaW5rIEdsb2JhbEFzeW5jU3lzdGVtQ29uZmlnfSBhbmQgdGhlIG9wdGlvbnMgcGFzc2VkIG9uIGluc3RhbnRpYXRpb24uXG4gICAqL1xuICByZWFkb25seSBjb25maWc6IFJlYWRvbmx5PEFzeW5jU3lzdGVtQ29uZmlnPFF1ZXJ5LCBEYXRhLCBFcnJvcj4+O1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IEFzeW5jU3lzdGVtQ29uZmlnPFF1ZXJ5LCBEYXRhLCBFcnJvcj4pIHtcbiAgICBzdXBlcihcbiAgICAgIC4uLigoKCkgPT4ge1xuICAgICAgICBjb25maWcgPSB7Li4uQ29uZmlndXJhdGlvbi5BU1lOQ19TWVNURU0sIC4uLmNvbmZpZ307XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpZDogc3lzdGVtSWQsXG4gICAgICAgICAgaW5pdGlhbFZhbHVlLFxuICAgICAgICAgIFFVRVJZX1VOSVQsXG4gICAgICAgICAgREFUQV9VTklULFxuICAgICAgICAgIEVSUk9SX1VOSVQsXG4gICAgICAgICAgUEVORElOR19VTklULFxuICAgICAgICAgIFVOSVRTLFxuICAgICAgICB9OiBBc3luY1N5c3RlbUNvbmZpZzxRdWVyeSwgRGF0YSwgRXJyb3I+ID0gY29uZmlnO1xuXG4gICAgICAgIGNvbnN0IHtxdWVyeVVuaXRJZCwgZGF0YVVuaXRJZCwgZXJyb3JVbml0SWQsIHBlbmRpbmdVbml0SWR9ID0gZ2VuZXJhdGVBc3luY1N5c3RlbUlkcyhcbiAgICAgICAgICBzeXN0ZW1JZCxcbiAgICAgICAgICBRVUVSWV9VTklULFxuICAgICAgICAgIERBVEFfVU5JVCxcbiAgICAgICAgICBFUlJPUl9VTklULFxuICAgICAgICAgIFBFTkRJTkdfVU5JVFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG5vIG5lZWQgdG8gY2hlY2sgdGhlc2UsIGFzIFVuaXRzIGlnbm9yZSB1bmRlZmluZWQgYXMgaW5pdGlhbFZhbHVlIGFueXdheVxuICAgICAgICBjb25zdCB7cXVlcnksIGRhdGEsIGVycm9yLCBwZW5kaW5nfTogQXN5bmNTeXN0ZW1WYWx1ZTxRdWVyeSwgRGF0YSwgRXJyb3I+ID1cbiAgICAgICAgICBpbml0aWFsVmFsdWUgfHwge307XG5cbiAgICAgICAgY29uc3QgcXVlcnlVbml0ID0gbmV3IEdlbmVyaWNVbml0PFF1ZXJ5Pih7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlOiBxdWVyeSxcbiAgICAgICAgICAuLi5VTklUUyxcbiAgICAgICAgICAuLi5RVUVSWV9VTklULFxuICAgICAgICAgIGlkOiBxdWVyeVVuaXRJZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZGF0YVVuaXQgPSBuZXcgR2VuZXJpY1VuaXQ8RGF0YT4oe1xuICAgICAgICAgIGluaXRpYWxWYWx1ZTogZGF0YSxcbiAgICAgICAgICAuLi5VTklUUyxcbiAgICAgICAgICAuLi5EQVRBX1VOSVQsXG4gICAgICAgICAgaWQ6IGRhdGFVbml0SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVycm9yVW5pdCA9IG5ldyBHZW5lcmljVW5pdDxFcnJvcj4oe1xuICAgICAgICAgIGluaXRpYWxWYWx1ZTogZXJyb3IsXG4gICAgICAgICAgLi4uVU5JVFMsXG4gICAgICAgICAgLi4uRVJST1JfVU5JVCxcbiAgICAgICAgICBpZDogZXJyb3JVbml0SWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdVbml0ID0gbmV3IEJvb2xVbml0KHtcbiAgICAgICAgICBpbml0aWFsVmFsdWU6IHBlbmRpbmcsXG4gICAgICAgICAgLi4uVU5JVFMsXG4gICAgICAgICAgLi4uUEVORElOR19VTklULFxuICAgICAgICAgIGlkOiBwZW5kaW5nVW5pdElkLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gW3F1ZXJ5VW5pdCwgZGF0YVVuaXQsIGVycm9yVW5pdCwgcGVuZGluZ1VuaXQsIGNvbmZpZ107XG4gICAgICB9KSgpIGFzIFtcbiAgICAgICAgR2VuZXJpY1VuaXQ8UXVlcnk+LFxuICAgICAgICBHZW5lcmljVW5pdDxEYXRhPixcbiAgICAgICAgR2VuZXJpY1VuaXQ8RXJyb3I+LFxuICAgICAgICBCb29sVW5pdCxcbiAgICAgICAgQXN5bmNTeXN0ZW1Db25maWc8UXVlcnksIERhdGEsIEVycm9yPlxuICAgICAgXSlcbiAgICApO1xuICB9XG59XG4iXX0=