Compare commits

..

5 Commits

Author SHA1 Message Date
d1744b570d 1.0.5 2017-11-01 17:01:33 +01:00
4d2ed1260d better tests 2017-11-01 17:01:30 +01:00
eb2d3e1b25 now has working intake 2017-11-01 14:59:28 +01:00
cd05c5c8d7 1.0.4 2017-10-30 08:22:54 +01:00
b1652cc2ed update docs 2017-10-30 08:22:51 +01:00
23 changed files with 378 additions and 59 deletions

4
dist/index.d.ts vendored
View File

@ -1,3 +1,5 @@
export declare let standardExport: string; export declare let standardExport: string;
export * from './smartrx.classes.observablemap'; export * from './smartrx.classes.observablemap';
export * from './smartrx.classes.observable'; export * from './smartrx.classes.observableintake';
import * as rxjs from 'rxjs';
export { rxjs };

6
dist/index.js vendored
View File

@ -5,5 +5,7 @@ function __export(m) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.standardExport = 'Hi there! :) This is a exported string'; exports.standardExport = 'Hi there! :) This is a exported string';
__export(require("./smartrx.classes.observablemap")); __export(require("./smartrx.classes.observablemap"));
__export(require("./smartrx.classes.observable")); __export(require("./smartrx.classes.observableintake"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVXLFFBQUEsY0FBYyxHQUFHLHdDQUF3QyxDQUFBO0FBQ3BFLHFEQUErQztBQUMvQyxrREFBNEMifQ== const rxjs = require("rxjs");
exports.rxjs = rxjs;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVXLFFBQUEsY0FBYyxHQUFHLHdDQUF3QyxDQUFBO0FBQ3BFLHFEQUErQztBQUMvQyx3REFBa0Q7QUFFbEQsNkJBQTRCO0FBRzFCLG9CQUFJIn0=

View File

@ -1,5 +0,0 @@
import { Observable as rxjsObservable } from 'rxjs';
export { rxjsObservable };
export declare class Observable<T> extends rxjsObservable<T> {
static fromIntake(): void;
}

View File

@ -1,9 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const rxjs_1 = require("rxjs");
exports.rxjsObservable = rxjs_1.Observable;
class Observable extends rxjs_1.Observable {
static fromIntake() { }
}
exports.Observable = Observable;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUFtRDtBQUVqRCx5QkFGcUIsaUJBQWMsQ0FFckI7QUFHaEIsZ0JBQTJCLFNBQVEsaUJBQWlCO0lBQ2xELE1BQU0sQ0FBQyxVQUFVLEtBQUssQ0FBQztDQUN4QjtBQUZELGdDQUVDIn0=

View File

@ -0,0 +1,38 @@
import { Observable, Subscription } from 'rxjs';
/**
* ObservableIntake
*/
export declare class ObservableIntake<T> {
observable: Observable<T>;
completed: Promise<void>;
private completedDeffered;
private observableFunctions;
private generator;
private buffered;
private payloadBuffer;
constructor();
setObservable(observableFunc: any): void;
push(payloadArg: T): void;
/**
* pushes many payloads as array
* @param payloadArgArray
*/
pushMany(payloadArgArray: T[]): void;
/**
* sets a generator to query the next pushed value
* @param generatorArg
*/
setGenerator(generatorArg: any): void;
makeBuffered(): void;
subscribe(...args: any[]): Subscription;
/**
* request the next values in the quantity specified
* @param howManyArg if a generator is set, of a buffer exists, this allows retrieving values
*/
request(howManyArg: number): void;
/**
* signals the completion of this observable
*/
signalComplete(): void;
private internalPush(payloadArg);
}

View File

@ -0,0 +1,97 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const plugins = require("./smartrx.plugins");
const rxjs_1 = require("rxjs");
/**
* ObservableIntake
*/
class ObservableIntake {
constructor() {
this.observableFunctions = {
next: (payloadArg) => {
// nothing
},
complete: (payloadArg) => {
// nothing
}
};
this.generator = null;
this.buffered = false;
this.payloadBuffer = [];
this.observable = rxjs_1.Observable.create((observerArg) => {
this.observableFunctions.next = (...args) => {
return observerArg.next(...args);
};
this.observableFunctions.complete = (...args) => {
this.completedDeffered.resolve();
return observerArg.complete(...args);
};
});
this.completedDeffered = plugins.smartq.defer();
this.completed = this.completedDeffered.promise;
}
setObservable(observableFunc) {
this.observable = observableFunc();
}
push(payloadArg) {
if (this.buffered) {
this.payloadBuffer.push(payloadArg);
}
else {
this.internalPush(payloadArg);
}
}
/**
* pushes many payloads as array
* @param payloadArgArray
*/
pushMany(payloadArgArray) {
for (let item of payloadArgArray) {
this.push(item);
}
}
/**
* sets a generator to query the next pushed value
* @param generatorArg
*/
setGenerator(generatorArg) {
this.generator = generatorArg;
}
makeBuffered() {
this.buffered = true;
}
subscribe(...args) {
return this.observable.subscribe(...args);
}
/**
* request the next values in the quantity specified
* @param howManyArg if a generator is set, of a buffer exists, this allows retrieving values
*/
request(howManyArg) {
if (howManyArg === 0) {
return;
}
else {
for (let i = 0; i !== howManyArg; i++) {
if (this.payloadBuffer.length > 0) {
this.internalPush(this.payloadBuffer.shift());
}
else {
const nextPayload = this.generator();
this.internalPush(nextPayload);
}
}
}
}
/**
* signals the completion of this observable
*/
signalComplete() {
this.observableFunctions.complete();
}
internalPush(payloadArg) {
this.observableFunctions.next(payloadArg);
}
}
exports.ObservableIntake = ObservableIntake;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVpbnRha2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUE0QztBQUM1QywrQkFBK0M7QUFHL0M7O0dBRUc7QUFDSDtJQWdCRTtRQVpRLHdCQUFtQixHQUFRO1lBQ2pDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUNuQixVQUFVO1lBQ1osQ0FBQztZQUNELFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUN2QixVQUFVO1lBQ1osQ0FBQztTQUNGLENBQUE7UUFDTyxjQUFTLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFDaEIsa0JBQWEsR0FBRyxFQUFFLENBQUE7UUFHeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxpQkFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO2dCQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO1lBQ2xDLENBQUMsQ0FBQTtZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ2hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7WUFDdEMsQ0FBQyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUE7SUFDakQsQ0FBQztJQUVELGFBQWEsQ0FBRSxjQUFjO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxFQUFFLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksQ0FBRSxVQUFhO1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUUsZUFBb0I7UUFDNUIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFFLFlBQVk7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUE7SUFDL0IsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtJQUN0QixDQUFDO0lBRUQsU0FBUyxDQUFFLEdBQUcsSUFBSTtRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFFLFVBQWtCO1FBQ3pCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQTtRQUNSLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO2dCQUMvQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtvQkFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNyQyxDQUFDO0lBRU8sWUFBWSxDQUFFLFVBQVU7UUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0NBQ0Y7QUFqR0QsNENBaUdDIn0=

View File

@ -1,6 +1,6 @@
/// <reference types="node" /> /// <reference types="node" />
import * as plugins from './smartrx.plugins'; import * as plugins from './smartrx.plugins';
import { rxjsObservable } from './smartrx.classes.observable'; import { Observable } from 'rxjs';
import { Objectmap } from 'lik'; import { Objectmap } from 'lik';
/** /**
* bundles an observable with an emitter * bundles an observable with an emitter
@ -19,5 +19,5 @@ export declare class Observablemap {
* creates a new observable if not yet registered for the same event. * creates a new observable if not yet registered for the same event.
* In case event has been registered before the same observable is returned. * In case event has been registered before the same observable is returned.
*/ */
getObservableForEmitterEvent(emitterArg: plugins.events.EventEmitter, eventArg: string): rxjsObservable<any>; getObservableForEmitterEvent(emitterArg: plugins.events.EventEmitter, eventArg: string): Observable<any>;
} }

View File

@ -32,4 +32,4 @@ class Observablemap {
} }
} }
exports.Observablemap = Observablemap; exports.Observablemap = Observablemap;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUE0QztBQUc1Qyw2QkFBK0I7QUFZL0I7O0dBRUc7QUFDSDtJQUFBO1FBQ0UscUNBQWdDLEdBQUcsSUFBSSxlQUFTLEVBQTJCLENBQUE7SUFzQjdFLENBQUM7SUFwQkM7OztPQUdHO0lBQ0gsNEJBQTRCLENBQUUsVUFBdUMsRUFBRSxRQUFnQjtRQUNyRixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDNUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxVQUFVLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQTtRQUMzRSxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUE7UUFDbEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQy9FLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLFVBQVUsRUFBRSxpQkFBaUI7Z0JBQzdCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixLQUFLLEVBQUUsUUFBUTthQUNoQixDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsaUJBQWlCLENBQUE7UUFDMUIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZCRCxzQ0F1QkMifQ== //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUE0QztBQUU1Qyw2QkFBK0I7QUFZL0I7O0dBRUc7QUFDSDtJQUFBO1FBQ0UscUNBQWdDLEdBQUcsSUFBSSxlQUFTLEVBQTJCLENBQUE7SUFzQjdFLENBQUM7SUFwQkM7OztPQUdHO0lBQ0gsNEJBQTRCLENBQUUsVUFBdUMsRUFBRSxRQUFnQjtRQUNyRixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDNUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxVQUFVLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQTtRQUMzRSxDQUFDLENBQUMsQ0FBQTtRQUNGLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUE7UUFDbEMsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQy9FLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hDLFVBQVUsRUFBRSxpQkFBaUI7Z0JBQzdCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixLQUFLLEVBQUUsUUFBUTthQUNoQixDQUFDLENBQUE7WUFDRixNQUFNLENBQUMsaUJBQWlCLENBQUE7UUFDMUIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXZCRCxzQ0F1QkMifQ==

View File

@ -2,4 +2,7 @@ import 'typings-global';
import * as events from 'events'; import * as events from 'events';
import * as lik from 'lik'; import * as lik from 'lik';
import * as rxjs from 'rxjs'; import * as rxjs from 'rxjs';
export { events, lik, rxjs }; import * as smartevent from 'smartevent';
import * as smartq from 'smartq';
import 'typings-global';
export { events, lik, rxjs, smartevent, smartq };

View File

@ -7,4 +7,9 @@ const lik = require("lik");
exports.lik = lik; exports.lik = lik;
const rxjs = require("rxjs"); const rxjs = require("rxjs");
exports.rxjs = rxjs; exports.rxjs = rxjs;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRyeC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQXVCO0FBQ3ZCLGlDQUFnQztBQUs5Qix3QkFBTTtBQUpSLDJCQUEwQjtBQUt4QixrQkFBRztBQUpMLDZCQUE0QjtBQUsxQixvQkFBSSJ9 const smartevent = require("smartevent");
exports.smartevent = smartevent;
const smartq = require("smartq");
exports.smartq = smartq;
require("typings-global");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRyeC5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRyeC5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMEJBQXVCO0FBQ3ZCLGlDQUFnQztBQVE5Qix3QkFBTTtBQVBSLDJCQUEwQjtBQVF4QixrQkFBRztBQVBMLDZCQUE0QjtBQVExQixvQkFBSTtBQVBOLHlDQUF3QztBQVF0QyxnQ0FBVTtBQVBaLGlDQUFnQztBQVE5Qix3QkFBTTtBQVBSLDBCQUF1QiJ9

29
docs/index.md Normal file
View File

@ -0,0 +1,29 @@
# smartrx
smart wrapper for rxjs
## Availabililty
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/smartrx)
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartrx)
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartrx)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartrx/)
## Status for master
[![build status](https://GitLab.com/pushrocks/smartrx/badges/master/build.svg)](https://GitLab.com/pushrocks/smartrx/commits/master)
[![coverage report](https://GitLab.com/pushrocks/smartrx/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartrx/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/smartrx.svg)](https://www.npmjs.com/package/smartrx)
[![Dependency Status](https://david-dm.org/pushrocks/smartrx.svg)](https://david-dm.org/pushrocks/smartrx)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartrx/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartrx/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartrx/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartrx)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
## Usage
Use TypeScript for best in class instellisense.
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

8
docs/observablemap.md Normal file
View File

@ -0,0 +1,8 @@
# class Observablemap
Event Emitters are nice. However often times you end up with registering multiple listeners for the exact same thing.
Observables have a smaller footprint and a more manageable subscribe logic.
Observablemap registers only one rxjs observable per event and then continues to reference
the same observable that you can subscribe to.
For further information read the linked docs at the top of this README.

View File

@ -6,5 +6,10 @@
}, },
"npmdocker": { "npmdocker": {
"command": "rm -r node_modules && yarn install && yarn test" "command": "rm -r node_modules && yarn install && yarn test"
},
"npmts": {
"testConfig": {
"parallel": false
}
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "smartrx", "name": "smartrx",
"version": "1.0.3", "version": "1.0.5",
"description": "smart wrapper for rxjs", "description": "smart wrapper for rxjs",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
@ -10,12 +10,13 @@
"test": "(npmts)" "test": "(npmts)"
}, },
"devDependencies": { "devDependencies": {
"tapbundle": "^1.0.13" "tapbundle": "^1.1.8"
}, },
"dependencies": { "dependencies": {
"lik": "^1.0.43", "lik": "^2.0.1",
"rxjs": "^5.5.2", "rxjs": "^5.5.2",
"smartevent": "^1.0.1",
"smartq": "^1.1.6", "smartq": "^1.1.6",
"typings-global": "^1.0.16" "typings-global": "^1.0.23"
} }
} }

View File

@ -0,0 +1,40 @@
import { tap, expect } from 'tapbundle'
import * as smartrx from '../ts/index'
tap.test('should create a valid instance of observableinstake', async () => {
const testObservableIntake = new smartrx.ObservableIntake()
expect(testObservableIntake).to.be.instanceOf(smartrx.ObservableIntake)
})
tap.test('expect testObserservableIntake to push things', async (tools) => {
const testObserservableIntake = new smartrx.ObservableIntake()
testObserservableIntake.subscribe(value => {
console.log(value)
})
testObserservableIntake.push('hi')
testObserservableIntake.push('wow')
testObserservableIntake.signalComplete()
await testObserservableIntake.completed
})
tap.test('expect testObserservableIntake to push things', async (tools) => {
const testObserservableIntake = new smartrx.ObservableIntake()
testObserservableIntake.push('hi')
testObserservableIntake.push('wow')
testObserservableIntake.makeBuffered()
testObserservableIntake.push('jo')
testObserservableIntake.subscribe(value => {
console.log(value)
testObserservableIntake.signalComplete()
})
testObserservableIntake.request(1)
await testObserservableIntake.completed
})
tap.test('', async () => {
})
tap.start()

View File

@ -27,10 +27,8 @@ tap.test('should accept a new emitter', async () => {
}) })
testObservable2 = testObservablemap.getObservableForEmitterEvent(testEmitter, 'event1') testObservable2 = testObservablemap.getObservableForEmitterEvent(testEmitter, 'event1')
testObservable3 = testObservablemap.getObservableForEmitterEvent(testEmitter, 'event2') testObservable3 = testObservablemap.getObservableForEmitterEvent(testEmitter, 'event2')
// tslint:disable-next-line:no-unused-expression expect(testObservable1 === testObservable2).be.true()
expect(testObservable1 === testObservable2).be.true expect(testObservable1 === testObservable3).be.false()
// tslint:disable-next-line:no-unused-expression
expect(testObservable1 === testObservable3).be.false
testEmitter.emit('event1') testEmitter.emit('event1')
await done.promise await done.promise
}) })

View File

@ -1,8 +0,0 @@
import { expect, tap } from 'tapbundle'
import * as smartrx from '../ts/index'
tap.test('first test', async () => {
console.log(smartrx.standardExport)
})
tap.start()

View File

@ -2,4 +2,10 @@ import * as plugins from './smartrx.plugins'
export let standardExport = 'Hi there! :) This is a exported string' export let standardExport = 'Hi there! :) This is a exported string'
export * from './smartrx.classes.observablemap' export * from './smartrx.classes.observablemap'
export * from './smartrx.classes.observable' export * from './smartrx.classes.observableintake'
import * as rxjs from 'rxjs'
export {
rxjs
}

View File

@ -1,8 +0,0 @@
import { Observable as rxjsObservable } from 'rxjs'
export {
rxjsObservable
}
export class Observable<T> extends rxjsObservable<T> {
static fromIntake () {}
}

View File

@ -0,0 +1,105 @@
import * as plugins from './smartrx.plugins'
import { Observable, Subscription } from 'rxjs'
import { Deferred } from 'smartq'
/**
* ObservableIntake
*/
export class ObservableIntake<T> {
observable: Observable<T>
completed: Promise<void>
private completedDeffered: Deferred<void>
private observableFunctions: any = {
next: (payloadArg) => {
// nothing
},
complete: (payloadArg) => {
// nothing
}
}
private generator = null
private buffered = false
private payloadBuffer = []
constructor () {
this.observable = Observable.create((observerArg) => {
this.observableFunctions.next = (...args) => {
return observerArg.next(...args)
}
this.observableFunctions.complete = (...args) => {
this.completedDeffered.resolve()
return observerArg.complete(...args)
}
})
this.completedDeffered = plugins.smartq.defer()
this.completed = this.completedDeffered.promise
}
setObservable (observableFunc) {
this.observable = observableFunc()
}
push (payloadArg: T) {
if (this.buffered) {
this.payloadBuffer.push(payloadArg)
} else {
this.internalPush(payloadArg)
}
}
/**
* pushes many payloads as array
* @param payloadArgArray
*/
pushMany (payloadArgArray: T[]) {
for (let item of payloadArgArray) {
this.push(item)
}
}
/**
* sets a generator to query the next pushed value
* @param generatorArg
*/
setGenerator (generatorArg) {
this.generator = generatorArg
}
makeBuffered() {
this.buffered = true
}
subscribe (...args) {
return this.observable.subscribe(...args)
}
/**
* request the next values in the quantity specified
* @param howManyArg if a generator is set, of a buffer exists, this allows retrieving values
*/
request (howManyArg: number) {
if (howManyArg === 0) {
return
} else {
for (let i = 0; i !== howManyArg; i++) {
if (this.payloadBuffer.length > 0) {
this.internalPush(this.payloadBuffer.shift())
} else {
const nextPayload = this.generator()
this.internalPush(nextPayload)
}
}
}
}
/**
* signals the completion of this observable
*/
signalComplete () {
this.observableFunctions.complete()
}
private internalPush (payloadArg) {
this.observableFunctions.next(payloadArg)
}
}

View File

@ -1,6 +1,5 @@
import * as plugins from './smartrx.plugins' import * as plugins from './smartrx.plugins'
import { Observable, rxjsObservable } from './smartrx.classes.observable' import { Observable } from 'rxjs'
import { Objectmap } from 'lik' import { Objectmap } from 'lik'
import { Stringmap } from 'lik' import { Stringmap } from 'lik'

View File

@ -2,9 +2,14 @@ import 'typings-global'
import * as events from 'events' import * as events from 'events'
import * as lik from 'lik' import * as lik from 'lik'
import * as rxjs from 'rxjs' import * as rxjs from 'rxjs'
import * as smartevent from 'smartevent'
import * as smartq from 'smartq'
import 'typings-global'
export { export {
events, events,
lik, lik,
rxjs rxjs,
smartevent,
smartq
} }

View File

@ -193,15 +193,14 @@ left-pad@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.1.3.tgz#612f61c033f3a9e08e939f1caebeea41b6f3199a"
lik@^1.0.43: lik@^2.0.1:
version "1.0.43" version "2.0.1"
resolved "https://registry.yarnpkg.com/lik/-/lik-1.0.43.tgz#e81709290fb85ff61dabfa008791ba9ffed0c666" resolved "https://registry.yarnpkg.com/lik/-/lik-2.0.1.tgz#828be73de3e356d12ee020d1499b9a99538cfa3d"
dependencies: dependencies:
"@types/lodash" "^4.14.74" "@types/lodash" "^4.14.74"
"@types/minimatch" "3.x.x" "@types/minimatch" "3.x.x"
lodash "^4.17.4" lodash "^4.17.4"
minimatch "^3.0.4" minimatch "^3.0.4"
rxjs "^5.4.3"
smartq "^1.1.6" smartq "^1.1.6"
typings-global "^1.0.20" typings-global "^1.0.20"
@ -271,7 +270,7 @@ resolve@^1.1.6:
dependencies: dependencies:
path-parse "^1.0.5" path-parse "^1.0.5"
rxjs@^5.4.3, rxjs@^5.5.2: rxjs@^5.5.2:
version "5.5.2" version "5.5.2"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.2.tgz#28d403f0071121967f18ad665563255d54236ac3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.2.tgz#28d403f0071121967f18ad665563255d54236ac3"
dependencies: dependencies:
@ -304,6 +303,13 @@ smartdelay@^1.0.3:
smartq "^1.1.1" smartq "^1.1.1"
typings-global "^1.0.16" typings-global "^1.0.16"
smartevent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/smartevent/-/smartevent-1.0.1.tgz#13d2bf2cf094ebdf17813fa0d46041f817a302aa"
dependencies:
smartq "^1.1.1"
typings-global "^1.0.16"
smartq@^1.1.1, smartq@^1.1.6: smartq@^1.1.1, smartq@^1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.6.tgz#0c1ff4336d95e95b4f1fdd8ccd7e2c5a323b8412" resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.6.tgz#0c1ff4336d95e95b4f1fdd8ccd7e2c5a323b8412"
@ -326,7 +332,7 @@ symbol-observable@^1.0.1:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
tapbundle@^1.0.13: tapbundle@^1.1.8:
version "1.1.8" version "1.1.8"
resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.1.8.tgz#e08aee0e100a830d8a26a583a85d37ce53312e02" resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-1.1.8.tgz#e08aee0e100a830d8a26a583a85d37ce53312e02"
dependencies: dependencies:
@ -338,9 +344,9 @@ tapbundle@^1.0.13:
smartq "^1.1.1" smartq "^1.1.1"
typings-global "^1.0.19" typings-global "^1.0.19"
typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19, typings-global@^1.0.20: typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.23:
version "1.0.20" version "1.0.23"
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.20.tgz#3da769c54db538247c5d877d1d9e97eb2ec981ff" resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.23.tgz#cdd085803049dd07d95b2e1475243c6b2db378ab"
dependencies: dependencies:
semver "^5.3.0" semver "^5.3.0"
smartshell "^1.0.6" smartshell "^1.0.6"