ngx-until-on-destroy
Version:
Allow you unsubscribe subscriptions when component was destroying. Can be used with Angular 5-10
137 lines (125 loc) • 4.9 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs'), require('@angular/core')) :
typeof define === 'function' && define.amd ? define('ngx-until-on-destroy', ['exports', 'rxjs', '@angular/core'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['ngx-until-on-destroy'] = {}, global.rxjs, global.ng.core));
}(this, (function (exports, rxjs, core) { 'use strict';
function decorateMethod(_a) {
var target = _a.target, hookName = _a.hookName, oldName = _a.oldName, wrappingFn = _a.wrappingFn;
var oldMethod = target[hookName];
target[oldName] = oldMethod;
return function () {
wrappingFn.call(this);
if (oldMethod) {
return oldMethod.call(this);
}
};
}
var componentDefKey = 'ɵcmp';
var factoryDefKey = 'ɵfac';
var directiveDefKey = 'ɵdir';
var isIvy = function (target) { return target.constructor[factoryDefKey]; };
function getIvyDef(target) {
return target.constructor[componentDefKey] || target.constructor[directiveDefKey];
}
function wrapIvyHook(_a) {
var target = _a.target, hookName = _a.hookName, oldName = _a.oldName, wrappingFn = _a.wrappingFn;
var ivyHookName = hookName.slice(0, 1).toLowerCase() + hookName.slice(1);
var ivyDef = getIvyDef(target);
ivyDef[ivyHookName] = decorateMethod({
target: ivyDef,
hookName: ivyHookName,
oldName: oldName,
wrappingFn: wrappingFn,
});
}
function getViewEngineError(hookName, constructorName) {
return new Error("You have to implements " + hookName + " in component (or directive) " + constructorName);
}
function wrapViewEngineHook(_a) {
var target = _a.target, hookName = _a.hookName, oldName = _a.oldName, wrappingFn = _a.wrappingFn;
var veHookName = 'ng' + hookName;
if (!target[veHookName] && +core.VERSION.major < 9) {
throw getViewEngineError(veHookName, target.constructor.name);
}
target[veHookName] = decorateMethod({
target: target,
hookName: veHookName,
oldName: oldName,
wrappingFn: wrappingFn
});
}
var subSymbol = Symbol('subscription');
var decoratedSymbol = Symbol('decorated');
var onInitSymbol = Symbol('onInit');
var onDestroySymbol = Symbol('onDestroy');
function markAsDecorated(target) {
target[decoratedSymbol] = true;
}
function isDecorated(target) {
return target.hasOwnProperty(decoratedSymbol);
}
function createMethodWrapper(originalMethod) {
return function () {
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var originalResult = originalMethod.apply(this, args);
if (originalResult instanceof rxjs.Subscription) {
this[subSymbol].add(originalResult);
}
else if (Array.isArray(originalResult)) {
originalResult.forEach(function (s) { return _this[subSymbol].add(s); });
}
else {
throw new Error('Decorated method must return Subscription or Subscription[]');
}
return originalResult;
};
}
function wrapOneHook(wrapParams) {
if (isIvy(wrapParams.target)) {
wrapIvyHook(wrapParams);
}
wrapViewEngineHook(wrapParams);
}
function wrapHooks(target) {
if (!isDecorated(target)) {
markAsDecorated(target);
wrapOneHook({
target: target,
hookName: 'OnInit',
oldName: onInitSymbol,
wrappingFn: function () {
this[subSymbol] = new rxjs.Subscription();
}
});
wrapOneHook({
target: target,
hookName: 'OnDestroy',
oldName: onDestroySymbol,
wrappingFn: function () {
this[subSymbol].unsubscribe();
}
});
}
}
function UntilOnDestroy() {
return function UntilOnDestroyDecorator(target, propertyKey) {
wrapHooks(target);
return {
value: createMethodWrapper(target[propertyKey]),
};
};
}
/*
* Public API Surface of ngx-until-on-destroy
*/
/**
* Generated bundle index. Do not edit.
*/
exports.UntilOnDestroy = UntilOnDestroy;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=ngx-until-on-destroy.umd.js.map