@zodiac-ui/ng-observable
Version:
Create powerful reactive components with Angular. AoT compatible and Ivy ready.
96 lines • 7.95 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Observable, Subject } from "rxjs";
import { applyMixins, mixins } from "./internals/apply-mixins";
import { Callable } from "./internals/callable";
// WARNING: interface has both a type and a value, skipping emit
/**
* A subject that implements both `Subject<T>` and `Function` interfaces. Using this subject in place of a normal
* method turns all invocations of that method into an observable stream without needing to modify the source of
* the caller. When called with multiple arguments it will emit the arguments as an array.
*
* \@usageNotes
*
* Basic usage
*
* ```ts
* const subject = new InvokeSubject<string>() // single argument
* const subject2 = new InvokeSubject<[string, number]>() // multiple arguments
*
* subject("message")
* subject2("message", 42)
*
* // with custom invoke function
* const subject3 = new InvokeSubject<string>(function () {
* subject3.next("message") // call "next" to emit value
* })
* ```
*
* Convert `\@HostListener` and `(event)` bindings into observable streams
*
* ```ts
* \@Component({
* template: `<input type="text" (input)="inputChanges($event)" />`
* })
* export class MyComponent implements OnDestroy {
* \@HostListener("click", ["$event"])
* readonly hostClick = new InvokeSubject<MouseEvent>()
* readonly inputChanges = new InvokeSubject<Event>()
*
* constructor() {
* hostClick.subscribe(event => console.log(event))
* inputChanges.subscribe(event => console.log(event))
* }
* }
* ```
*
* \@publicApi
* @template T
*/
var InvokeSubject = /** @class */ (function (_super) {
tslib_1.__extends(InvokeSubject, _super);
/**
* Creates a new `InvokeSubject` instance
*
* @param nextFn A function to be called when the subject is invoked
*
*/
function InvokeSubject(nextFn) {
var _this = _super.call(this, nextFn ? nextFn : (/**
* @param {...?} args
* @return {?}
*/
function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
/** @type {?} */
var len = args.length;
if (len === 0) {
_this.next();
}
else if (len === 1) {
_this.next(args[0]);
}
else {
_this.next(args);
}
})) || this;
Object.assign(_this, new Subject());
return _this;
}
var _a;
_a = mixins;
InvokeSubject[_a] = applyMixins(InvokeSubject, [Observable, Subject]);
return InvokeSubject;
}(Callable));
export { InvokeSubject };
if (false) {
/* Skipping unnamed member:
private static [mixins] = applyMixins(InvokeSubject, [Observable, Subject])*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlLXN1YmplY3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL25nLW9ic2VydmFibGUvIiwic291cmNlcyI6WyJsaWIvaW52b2tlLXN1YmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUQvQztJQUFzQyx5Q0FBbUI7SUFHckQ7Ozs7O09BS0c7SUFDSCx1QkFBWSxNQUFrQjtRQUE5QixZQUNJLGtCQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Ozs7UUFBQztZQUFDLGNBQVk7aUJBQVosVUFBWSxFQUFaLHFCQUFZLEVBQVosSUFBWTtnQkFBWix5QkFBWTs7O2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNYLEtBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTthQUNkO2lCQUFNLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDbEIsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNyQjtpQkFBTTtnQkFDSCxLQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ2xCO1FBQ0wsQ0FBQyxDQUFBLENBQUMsU0FFTDtRQURHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQTs7SUFDdEMsQ0FBQzs7U0FwQmUsTUFBTTtJQUFQLGlCQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBcUIvRSxvQkFBQztDQUFBLEFBdEJELENBQXNDLFFBQVEsR0FzQjdDO1NBdEJZLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIlxyXG5pbXBvcnQgeyBhcHBseU1peGlucywgbWl4aW5zIH0gZnJvbSBcIi4vaW50ZXJuYWxzL2FwcGx5LW1peGluc1wiXHJcbmltcG9ydCB7IENhbGxhYmxlIH0gZnJvbSBcIi4vaW50ZXJuYWxzL2NhbGxhYmxlXCJcclxuXHJcbmV4cG9ydCB0eXBlIE5leHRGbjxUPiA9IChuZXh0OiBUKSA9PiB2b2lkXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZVN1YmplY3Q8VD4gZXh0ZW5kcyBTdWJqZWN0PFQ+IHtcclxuICAgIChuZXh0OiBUKTogdm9pZFxyXG4gICAgKC4uLm5leHQ6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBVPiA/IFQgOiBuZXZlcltdKTogdm9pZFxyXG59XHJcblxyXG4vKipcclxuICogQSBzdWJqZWN0IHRoYXQgaW1wbGVtZW50cyBib3RoIGBTdWJqZWN0PFQ+YCBhbmQgYEZ1bmN0aW9uYCBpbnRlcmZhY2VzLiBVc2luZyB0aGlzIHN1YmplY3QgaW4gcGxhY2Ugb2YgYSBub3JtYWxcclxuICogbWV0aG9kIHR1cm5zIGFsbCBpbnZvY2F0aW9ucyBvZiB0aGF0IG1ldGhvZCBpbnRvIGFuIG9ic2VydmFibGUgc3RyZWFtIHdpdGhvdXQgbmVlZGluZyB0byBtb2RpZnkgdGhlIHNvdXJjZSBvZlxyXG4gKiB0aGUgY2FsbGVyLiBXaGVuIGNhbGxlZCB3aXRoIG11bHRpcGxlIGFyZ3VtZW50cyBpdCB3aWxsIGVtaXQgdGhlIGFyZ3VtZW50cyBhcyBhbiBhcnJheS5cclxuICpcclxuICogQHVzYWdlTm90ZXNcclxuICpcclxuICogQmFzaWMgdXNhZ2VcclxuICpcclxuICogYGBgdHNcclxuICogY29uc3Qgc3ViamVjdCA9IG5ldyBJbnZva2VTdWJqZWN0PHN0cmluZz4oKSAvLyBzaW5nbGUgYXJndW1lbnRcclxuICogY29uc3Qgc3ViamVjdDIgPSBuZXcgSW52b2tlU3ViamVjdDxbc3RyaW5nLCBudW1iZXJdPigpIC8vIG11bHRpcGxlIGFyZ3VtZW50c1xyXG4gKlxyXG4gKiBzdWJqZWN0KFwibWVzc2FnZVwiKVxyXG4gKiBzdWJqZWN0MihcIm1lc3NhZ2VcIiwgNDIpXHJcbiAqXHJcbiAqIC8vIHdpdGggY3VzdG9tIGludm9rZSBmdW5jdGlvblxyXG4gKiBjb25zdCBzdWJqZWN0MyA9IG5ldyBJbnZva2VTdWJqZWN0PHN0cmluZz4oZnVuY3Rpb24gKCkge1xyXG4gKiAgICAgc3ViamVjdDMubmV4dChcIm1lc3NhZ2VcIikgLy8gY2FsbCBcIm5leHRcIiB0byBlbWl0IHZhbHVlXHJcbiAqIH0pXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBDb252ZXJ0IGBASG9zdExpc3RlbmVyYCBhbmQgYChldmVudClgIGJpbmRpbmdzIGludG8gb2JzZXJ2YWJsZSBzdHJlYW1zXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiAgICAgdGVtcGxhdGU6IGA8aW5wdXQgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwiaW5wdXRDaGFuZ2VzKCRldmVudClcIiAvPmBcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICogICAgIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAqICAgICByZWFkb25seSBob3N0Q2xpY2sgPSBuZXcgSW52b2tlU3ViamVjdDxNb3VzZUV2ZW50PigpXHJcbiAqICAgICByZWFkb25seSBpbnB1dENoYW5nZXMgPSBuZXcgSW52b2tlU3ViamVjdDxFdmVudD4oKVxyXG4gKlxyXG4gKiAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAqICAgICAgICAgaG9zdENsaWNrLnN1YnNjcmliZShldmVudCA9PiBjb25zb2xlLmxvZyhldmVudCkpXHJcbiAqICAgICAgICAgaW5wdXRDaGFuZ2VzLnN1YnNjcmliZShldmVudCA9PiBjb25zb2xlLmxvZyhldmVudCkpXHJcbiAqICAgICB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqXHJcbiAqIEBwdWJsaWNBcGlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbnZva2VTdWJqZWN0PFQ+IGV4dGVuZHMgQ2FsbGFibGU8TmV4dEZuPFQ+PiB7XHJcbiAgICBwcml2YXRlIHN0YXRpYyBbbWl4aW5zXSA9IGFwcGx5TWl4aW5zKEludm9rZVN1YmplY3QsIFtPYnNlcnZhYmxlLCBTdWJqZWN0XSlcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYSBuZXcgYEludm9rZVN1YmplY3RgIGluc3RhbmNlXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5leHRGbiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdWJqZWN0IGlzIGludm9rZWRcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKG5leHRGbj86IE5leHRGbjxUPikge1xyXG4gICAgICAgIHN1cGVyKG5leHRGbiA/IG5leHRGbiA6ICguLi5hcmdzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gYXJncy5sZW5ndGhcclxuICAgICAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KClcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChsZW4gPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dChhcmdzWzBdKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IFN1YmplY3QoKSlcclxuICAgIH1cclxufVxyXG4iXX0=