@code-art/rx-helpers
Version:
A library with Rxjs operators that can be used in your Angular 8 projects.
103 lines • 14.4 kB
JavaScript
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
var DESTROY_SUBJECT_SYMBOL = Symbol();
var DECORATOR_APPLIED_SYMBOL = Symbol();
function isComponentType(type) {
return type && !!type.ɵcmp;
}
function isDirectiveType(type) {
return type && !!type.ɵdir;
}
function isPipeType(type) {
return type && !!type.ɵpipe;
}
function isProviderType(type) {
return type && !!type.ɵprov;
}
function doOnDestroy() {
var subject = this[DESTROY_SUBJECT_SYMBOL];
if (subject) {
subject.next(0);
subject.complete();
this[DESTROY_SUBJECT_SYMBOL] = undefined;
}
}
function applyOnDestroyHook(def, handler) {
var oldOnDestroy = def.onDestroy;
def.onDestroy = function () {
if (oldOnDestroy) {
oldOnDestroy.apply(this);
}
handler.apply(this);
};
}
function applyOnDestroyToProvider(def, handler) {
var oldOnDestroy = def.prototype.ngOnDestroy;
def.prototype.ngOnDestroy = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (oldOnDestroy) {
oldOnDestroy.apply(this, args);
}
handler.apply(this);
};
}
function applyOnDestroyToInstance(instance) {
if (!instance[DESTROY_SUBJECT_SYMBOL]) {
instance[DESTROY_SUBJECT_SYMBOL] = new Subject();
var constructor = instance.constructor;
if (typeof constructor === 'function') {
if (constructor[DECORATOR_APPLIED_SYMBOL]) {
return;
}
if (isPipeType(constructor)
|| isComponentType(constructor)
|| isDirectiveType(constructor)
|| isProviderType(constructor)) {
throw new Error("To use " + takeUntilDestroyed.name + " with Components, Pipes, Directives and Services add the @" + TakeUntilDestroyed.name + ".");
}
}
if (typeof instance.ngOnDestroy !== 'function') {
throw new Error(takeUntilDestroyed.name + " can only be applied to Components, Pipes, Directives and Services with @Injectable decorator or "
+ " to object instance implementing OnDestroy interface.");
}
var oldOnDestroy_1 = instance.ngOnDestroy;
instance.ngOnDestroy = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
oldOnDestroy_1.apply(instance, args);
doOnDestroy.apply(this);
};
}
}
function applyOnDestroyToClass(target) {
if (isComponentType(target)) {
applyOnDestroyHook(target.ɵcmp, doOnDestroy);
}
else if (isDirectiveType(target)) {
applyOnDestroyHook(target.ɵdir, doOnDestroy);
}
else if (isPipeType(target)) {
applyOnDestroyHook(target.ɵpipe, doOnDestroy);
}
else {
applyOnDestroyToProvider(target, doOnDestroy);
}
target[DECORATOR_APPLIED_SYMBOL] = true;
}
export function TakeUntilDestroyed() {
return applyOnDestroyToClass;
}
export function takeUntilDestroyed(instance) {
return function (source) {
var c = instance;
// const c = (component as any) as ComponentWithTakeUntilDestroy;
applyOnDestroyToInstance(c);
return source.pipe(takeUntil(c[DESTROY_SUBJECT_SYMBOL]));
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFrZVVudGlsRGVzdHJveWVkLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvZGUtYXJ0L3J4LWhlbHBlcnMvIiwic291cmNlcyI6WyJsaWIvb3BlcmF0b3JzL3Rha2VVbnRpbERlc3Ryb3llZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXdDLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsSUFBTSxzQkFBc0IsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUN4QyxJQUFNLHdCQUF3QixHQUFHLE1BQU0sRUFBRSxDQUFDO0FBcUMxQyxTQUFTLGVBQWUsQ0FBQyxJQUFjO0lBQ3JDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBRSxJQUFzQixDQUFDLElBQUksQ0FBQztBQUNoRCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBYztJQUNyQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUUsSUFBc0IsQ0FBQyxJQUFJLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWM7SUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFFLElBQWlCLENBQUMsS0FBSyxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFjO0lBQ3BDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBRSxJQUFxQixDQUFDLEtBQUssQ0FBQztBQUNoRCxDQUFDO0FBSUQsU0FBUyxXQUFXO0lBQ2xCLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdDLElBQUksT0FBTyxFQUFFO1FBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQixPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsU0FBUyxDQUFDO0tBQzFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsa0JB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MUMsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFJLFFBQWE7SUFDakQsT0FBTyxVQUFDLE1BQXFCO1FBQzNCLElBQU0sQ0FBQyxHQUFHLFFBQXdDLENBQUM7UUFDbkQsaUVBQWlFO1FBQ2pFLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFvQixDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5jb25zdCBERVNUUk9ZX1NVQkpFQ1RfU1lNQk9MID0gU3ltYm9sKCk7XHJcbmNvbnN0IERFQ09SQVRPUl9BUFBMSUVEX1NZTUJPTCA9IFN5bWJvbCgpO1xyXG5cclxuaW50ZXJmYWNlIEluc3RhbmNlV2l0aFRha2VVbnRpbERlc3Ryb3kgZXh0ZW5kcyBPbkRlc3Ryb3kge1xyXG4gIFtERVNUUk9ZX1NVQkpFQ1RfU1lNQk9MXT86IFN1YmplY3Q8bnVtYmVyPjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZ1bmN0aW9uV2l0aERlY29yYXRvciBleHRlbmRzIEZ1bmN0aW9uIHtcclxuICBbREVDT1JBVE9SX0FQUExJRURfU1lNQk9MXT86IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21wb25lbnREZWZpbml0aW9uIHtcclxuICBvbkRlc3Ryb3k6ICgoKSA9PiB2b2lkKSB8IG51bGw7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21wb25lbnRUeXBlIGV4dGVuZHMgRnVuY3Rpb25XaXRoRGVjb3JhdG9yIHtcclxuICDJtWNtcDogQ29tcG9uZW50RGVmaW5pdGlvbjtcclxufVxyXG5cclxudHlwZSBEaXJlY3RpdmVEZWZpbml0aW9uID0gQ29tcG9uZW50RGVmaW5pdGlvbjtcclxudHlwZSBQaXBlRGVmaW5pdGlvbiA9IENvbXBvbmVudERlZmluaXRpb247XHJcblxyXG5pbnRlcmZhY2UgQ29tcG9uZW50VHlwZSBleHRlbmRzIEZ1bmN0aW9uV2l0aERlY29yYXRvciB7XHJcbiAgybVjbXA6IENvbXBvbmVudERlZmluaXRpb247XHJcbn1cclxuXHJcbmludGVyZmFjZSBEaXJlY3RpdmVUeXBlIGV4dGVuZHMgRnVuY3Rpb25XaXRoRGVjb3JhdG9yIHtcclxuICDJtWRpcjogRGlyZWN0aXZlRGVmaW5pdGlvbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIFByb3ZpZGVyVHlwZSBleHRlbmRzIEZ1bmN0aW9uV2l0aERlY29yYXRvciB7XHJcbiAgybVwcm92OiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBQaXBlVHlwZSBleHRlbmRzIEZ1bmN0aW9uV2l0aERlY29yYXRvciB7XHJcbiAgybVwaXBlOiBEaXJlY3RpdmVEZWZpbml0aW9uO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0NvbXBvbmVudFR5cGUodHlwZTogRnVuY3Rpb24pOiB0eXBlIGlzIENvbXBvbmVudFR5cGUge1xyXG4gIHJldHVybiB0eXBlICYmICEhKHR5cGUgYXMgQ29tcG9uZW50VHlwZSkuybVjbXA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRGlyZWN0aXZlVHlwZSh0eXBlOiBGdW5jdGlvbik6IHR5cGUgaXMgRGlyZWN0aXZlVHlwZSB7XHJcbiAgcmV0dXJuIHR5cGUgJiYgISEodHlwZSBhcyBEaXJlY3RpdmVUeXBlKS7JtWRpcjtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQaXBlVHlwZSh0eXBlOiBGdW5jdGlvbik6IHR5cGUgaXMgUGlwZVR5cGUge1xyXG4gIHJldHVybiB0eXBlICYmICEhKHR5cGUgYXMgUGlwZVR5cGUpLsm1cGlwZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNQcm92aWRlclR5cGUodHlwZTogRnVuY3Rpb24pOiB0eXBlIGlzIFByb3ZpZGVyVHlwZSB7XHJcbiAgcmV0dXJuIHR5cGUgJiYgISEodHlwZSBhcyBQcm92aWRlclR5cGUpLsm1cHJvdjtcclxufVxyXG5cclxudHlwZSBIb29rYWJsZURlZmluaXRpb24gPSAoQ29tcG9uZW50RGVmaW5pdGlvbiB8IERpcmVjdGl2ZURlZmluaXRpb24gfCBQaXBlRGVmaW5pdGlvbik7XHJcblxyXG5mdW5jdGlvbiBkb09uRGVzdHJveSh0aGlzOiBJbnN0YW5jZVdpdGhUYWtlVW50aWxEZXN0cm95KSB7XHJcbiAgY29uc3Qgc3ViamVjdCA9IHRoaXNbREVTVFJPWV9TVUJKRUNUX1NZTUJPTF07XHJcbiAgaWYgKHN1YmplY3QpIHtcclxuICAgIHN1YmplY3QubmV4dCgwKTtcclxuICAgIHN1YmplY3QuY29tcGxldGUoKTtcclxuICAgIHRoaXNbREVTVFJPWV9TVUJKRUNUX1NZTUJPTF0gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseU9uRGVzdHJveUhvb2soZGVmOiBIb29rYWJsZURlZmluaXRpb24sIGhhbmRsZXI6ICh0aGlzOiBJbnN0YW5jZVdpdGhUYWtlVW50aWxEZXN0cm95KSA9PiB2b2lkKSB7XHJcbiAgY29uc3Qgb2xkT25EZXN0cm95ID0gZGVmLm9uRGVzdHJveTtcclxuICBkZWYub25EZXN0cm95ID0gZnVuY3Rpb24gKHRoaXM6IEluc3RhbmNlV2l0aFRha2VVbnRpbERlc3Ryb3kpOiB2b2lkIHtcclxuICAgIGlmIChvbGRPbkRlc3Ryb3kpIHtcclxuICAgICAgb2xkT25EZXN0cm95LmFwcGx5KHRoaXMpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlci5hcHBseSh0aGlzKTtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseU9uRGVzdHJveVRvUHJvdmlkZXIoZGVmOiBGdW5jdGlvbiwgaGFuZGxlcjogKHRoaXM6IEluc3RhbmNlV2l0aFRha2VVbnRpbERlc3Ryb3kpID0+IHZvaWQpIHtcclxuICBjb25zdCBvbGRPbkRlc3Ryb3kgPSBkZWYucHJvdG90eXBlLm5nT25EZXN0cm95O1xyXG4gIGRlZi5wcm90b3R5cGUubmdPbkRlc3Ryb3kgPSBmdW5jdGlvbiAodGhpczogSW5zdGFuY2VXaXRoVGFrZVVudGlsRGVzdHJveSwgLi4uYXJnczogW10pOiB2b2lkIHtcclxuICAgIGlmIChvbGRPbkRlc3Ryb3kpIHtcclxuICAgICAgb2xkT25EZXN0cm95LmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfVxyXG4gICAgaGFuZGxlci5hcHBseSh0aGlzKTtcclxuICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseU9uRGVzdHJveVRvSW5zdGFuY2UoaW5zdGFuY2U6IEluc3RhbmNlV2l0aFRha2VVbnRpbERlc3Ryb3kpOiB2b2lkIHtcclxuICBpZiAoIWluc3RhbmNlW0RFU1RST1lfU1VCSkVDVF9TWU1CT0xdKSB7XHJcbiAgICBpbnN0YW5jZVtERVNUUk9ZX1NVQkpFQ1RfU1lNQk9MXSA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcclxuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gaW5zdGFuY2UuY29uc3RydWN0b3IgYXMgRnVuY3Rpb25XaXRoRGVjb3JhdG9yO1xyXG4gICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpZiAoY29uc3RydWN0b3JbREVDT1JBVE9SX0FQUExJRURfU1lNQk9MXSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNQaXBlVHlwZShjb25zdHJ1Y3RvcilcclxuICAgICAgICB8fCBpc0NvbXBvbmVudFR5cGUoY29uc3RydWN0b3IpXHJcbiAgICAgICAgfHwgaXNEaXJlY3RpdmVUeXBlKGNvbnN0cnVjdG9yKVxyXG4gICAgICAgIHx8IGlzUHJvdmlkZXJUeXBlKGNvbnN0cnVjdG9yKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVG8gdXNlICR7XHJcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZC5uYW1lXHJcbiAgICAgICAgICB9IHdpdGggQ29tcG9uZW50cywgUGlwZXMsIERpcmVjdGl2ZXMgYW5kIFNlcnZpY2VzIGFkZCB0aGUgQCR7XHJcbiAgICAgICAgICBUYWtlVW50aWxEZXN0cm95ZWQubmFtZVxyXG4gICAgICAgICAgfS5gXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UubmdPbkRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1xyXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkLm5hbWVcclxuICAgICAgICB9IGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gQ29tcG9uZW50cywgUGlwZXMsIERpcmVjdGl2ZXMgYW5kIFNlcnZpY2VzIHdpdGggQEluamVjdGFibGUgZGVjb3JhdG9yIG9yIGBcclxuICAgICAgICArIGAgdG8gb2JqZWN0IGluc3RhbmNlIGltcGxlbWVudGluZyBPbkRlc3Ryb3kgaW50ZXJmYWNlLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9sZE9uRGVzdHJveSA9IGluc3RhbmNlLm5nT25EZXN0cm95O1xyXG4gICAgaW5zdGFuY2UubmdPbkRlc3Ryb3kgPSBmdW5jdGlvbiAodGhpczogSW5zdGFuY2VXaXRoVGFrZVVudGlsRGVzdHJveSwgLi4uYXJncykge1xyXG4gICAgICBvbGRPbkRlc3Ryb3kuYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xyXG4gICAgICBkb09uRGVzdHJveS5hcHBseSh0aGlzKTtcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseU9uRGVzdHJveVRvQ2xhc3ModGFyZ2V0OiBGdW5jdGlvbldpdGhEZWNvcmF0b3IpOiB2b2lkIHtcclxuICBpZiAoaXNDb21wb25lbnRUeXBlKHRhcmdldCkpIHtcclxuICAgIGFwcGx5T25EZXN0cm95SG9vayh0YXJnZXQuybVjbXAsIGRvT25EZXN0cm95KTtcclxuICB9IGVsc2UgaWYgKGlzRGlyZWN0aXZlVHlwZSh0YXJnZXQpKSB7XHJcbiAgICBhcHBseU9uRGVzdHJveUhvb2sodGFyZ2V0Lsm1ZGlyLCBkb09uRGVzdHJveSk7XHJcbiAgfSBlbHNlIGlmIChpc1BpcGVUeXBlKHRhcmdldCkpIHtcclxuICAgIGFwcGx5T25EZXN0cm95SG9vayh0YXJnZXQuybVwaXBlLCBkb09uRGVzdHJveSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGFwcGx5T25EZXN0cm95VG9Qcm92aWRlcih0YXJnZXQsIGRvT25EZXN0cm95KTtcclxuICB9XHJcbiAgdGFyZ2V0W0RFQ09SQVRPUl9BUFBMSUVEX1NZTUJPTF0gPSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVGFrZVVudGlsRGVzdHJveWVkKCk6IENsYXNzRGVjb3JhdG9yIHtcclxuICByZXR1cm4gYXBwbHlPbkRlc3Ryb3lUb0NsYXNzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdGFrZVVudGlsRGVzdHJveWVkPFQ+KGluc3RhbmNlOiBhbnkpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VD4ge1xyXG4gIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KSA9PiB7XHJcbiAgICBjb25zdCBjID0gaW5zdGFuY2UgYXMgSW5zdGFuY2VXaXRoVGFrZVVudGlsRGVzdHJveTtcclxuICAgIC8vIGNvbnN0IGMgPSAoY29tcG9uZW50IGFzIGFueSkgYXMgQ29tcG9uZW50V2l0aFRha2VVbnRpbERlc3Ryb3k7XHJcbiAgICBhcHBseU9uRGVzdHJveVRvSW5zdGFuY2UoYyk7XHJcbiAgICByZXR1cm4gc291cmNlLnBpcGUodGFrZVVudGlsKGNbREVTVFJPWV9TVUJKRUNUX1NZTUJPTF0gYXMgU3ViamVjdDxudW1iZXI+KSk7XHJcbiAgfTtcclxufVxyXG4iXX0=