@zodiac-ui/ng-observable
Version:
Create powerful reactive components with Angular. AoT compatible and Ivy ready.
87 lines • 7.47 kB
JavaScript
var _a;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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
*/
export class InvokeSubject extends Callable {
/**
* Creates a new `InvokeSubject` instance
*
* @param {?=} nextFn A function to be called when the subject is invoked
*
*/
constructor(nextFn) {
super(nextFn ? nextFn : (/**
* @param {...?} args
* @return {?}
*/
(...args) => {
/** @type {?} */
const len = args.length;
if (len === 0) {
this.next();
}
else if (len === 1) {
this.next(args[0]);
}
else {
this.next(args);
}
}));
Object.assign(this, new Subject());
}
}
_a = mixins;
InvokeSubject[_a] = applyMixins(InvokeSubject, [Observable, Subject]);
if (false) {
/* Skipping unnamed member:
private static [mixins] = applyMixins(InvokeSubject, [Observable, Subject])*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlLXN1YmplY3QuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL25nLW9ic2VydmFibGUvIiwic291cmNlcyI6WyJsaWIvaW52b2tlLXN1YmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUQvQyxNQUFNLE9BQU8sYUFBaUIsU0FBUSxRQUFtQjs7Ozs7OztJQVNyRCxZQUFZLE1BQWtCO1FBQzFCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7O1FBQUMsQ0FBQyxHQUFHLElBQVMsRUFBRSxFQUFFOztrQkFDL0IsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQ3ZCLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7YUFDZDtpQkFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDckI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNsQjtRQUNMLENBQUMsQ0FBQSxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdEMsQ0FBQzs7S0FwQmUsTUFBTTtBQUFQLGlCQUFRLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCJcclxuaW1wb3J0IHsgYXBwbHlNaXhpbnMsIG1peGlucyB9IGZyb20gXCIuL2ludGVybmFscy9hcHBseS1taXhpbnNcIlxyXG5pbXBvcnQgeyBDYWxsYWJsZSB9IGZyb20gXCIuL2ludGVybmFscy9jYWxsYWJsZVwiXHJcblxyXG5leHBvcnQgdHlwZSBOZXh0Rm48VD4gPSAobmV4dDogVCkgPT4gdm9pZFxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnZva2VTdWJqZWN0PFQ+IGV4dGVuZHMgU3ViamVjdDxUPiB7XHJcbiAgICAobmV4dDogVCk6IHZvaWRcclxuICAgICguLi5uZXh0OiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBUIDogbmV2ZXJbXSk6IHZvaWRcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgc3ViamVjdCB0aGF0IGltcGxlbWVudHMgYm90aCBgU3ViamVjdDxUPmAgYW5kIGBGdW5jdGlvbmAgaW50ZXJmYWNlcy4gVXNpbmcgdGhpcyBzdWJqZWN0IGluIHBsYWNlIG9mIGEgbm9ybWFsXHJcbiAqIG1ldGhvZCB0dXJucyBhbGwgaW52b2NhdGlvbnMgb2YgdGhhdCBtZXRob2QgaW50byBhbiBvYnNlcnZhYmxlIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcgdG8gbW9kaWZ5IHRoZSBzb3VyY2Ugb2ZcclxuICogdGhlIGNhbGxlci4gV2hlbiBjYWxsZWQgd2l0aCBtdWx0aXBsZSBhcmd1bWVudHMgaXQgd2lsbCBlbWl0IHRoZSBhcmd1bWVudHMgYXMgYW4gYXJyYXkuXHJcbiAqXHJcbiAqIEB1c2FnZU5vdGVzXHJcbiAqXHJcbiAqIEJhc2ljIHVzYWdlXHJcbiAqXHJcbiAqIGBgYHRzXHJcbiAqIGNvbnN0IHN1YmplY3QgPSBuZXcgSW52b2tlU3ViamVjdDxzdHJpbmc+KCkgLy8gc2luZ2xlIGFyZ3VtZW50XHJcbiAqIGNvbnN0IHN1YmplY3QyID0gbmV3IEludm9rZVN1YmplY3Q8W3N0cmluZywgbnVtYmVyXT4oKSAvLyBtdWx0aXBsZSBhcmd1bWVudHNcclxuICpcclxuICogc3ViamVjdChcIm1lc3NhZ2VcIilcclxuICogc3ViamVjdDIoXCJtZXNzYWdlXCIsIDQyKVxyXG4gKlxyXG4gKiAvLyB3aXRoIGN1c3RvbSBpbnZva2UgZnVuY3Rpb25cclxuICogY29uc3Qgc3ViamVjdDMgPSBuZXcgSW52b2tlU3ViamVjdDxzdHJpbmc+KGZ1bmN0aW9uICgpIHtcclxuICogICAgIHN1YmplY3QzLm5leHQoXCJtZXNzYWdlXCIpIC8vIGNhbGwgXCJuZXh0XCIgdG8gZW1pdCB2YWx1ZVxyXG4gKiB9KVxyXG4gKiBgYGBcclxuICpcclxuICogQ29udmVydCBgQEhvc3RMaXN0ZW5lcmAgYW5kIGAoZXZlbnQpYCBiaW5kaW5ncyBpbnRvIG9ic2VydmFibGUgc3RyZWFtc1xyXG4gKlxyXG4gKiBgYGB0c1xyXG4gKiBAQ29tcG9uZW50KHtcclxuICogICAgIHRlbXBsYXRlOiBgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cImlucHV0Q2hhbmdlcygkZXZlbnQpXCIgLz5gXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAqICAgICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG4gKiAgICAgcmVhZG9ubHkgaG9zdENsaWNrID0gbmV3IEludm9rZVN1YmplY3Q8TW91c2VFdmVudD4oKVxyXG4gKiAgICAgcmVhZG9ubHkgaW5wdXRDaGFuZ2VzID0gbmV3IEludm9rZVN1YmplY3Q8RXZlbnQ+KClcclxuICpcclxuICogICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gKiAgICAgICAgIGhvc3RDbGljay5zdWJzY3JpYmUoZXZlbnQgPT4gY29uc29sZS5sb2coZXZlbnQpKVxyXG4gKiAgICAgICAgIGlucHV0Q2hhbmdlcy5zdWJzY3JpYmUoZXZlbnQgPT4gY29uc29sZS5sb2coZXZlbnQpKVxyXG4gKiAgICAgfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcHVibGljQXBpXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSW52b2tlU3ViamVjdDxUPiBleHRlbmRzIENhbGxhYmxlPE5leHRGbjxUPj4ge1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgW21peGluc10gPSBhcHBseU1peGlucyhJbnZva2VTdWJqZWN0LCBbT2JzZXJ2YWJsZSwgU3ViamVjdF0pXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGBJbnZva2VTdWJqZWN0YCBpbnN0YW5jZVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBuZXh0Rm4gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3ViamVjdCBpcyBpbnZva2VkXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihuZXh0Rm4/OiBOZXh0Rm48VD4pIHtcclxuICAgICAgICBzdXBlcihuZXh0Rm4gPyBuZXh0Rm4gOiAoLi4uYXJnczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGFyZ3MubGVuZ3RoXHJcbiAgICAgICAgICAgIGlmIChsZW4gPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVuID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5leHQoYXJnc1swXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV4dChhcmdzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG5ldyBTdWJqZWN0KCkpXHJcbiAgICB9XHJcbn1cclxuIl19