Compare commits

..

3 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
20 changed files with 336 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

View File

@ -1,6 +1,6 @@
{ {
"name": "smartrx", "name": "smartrx",
"version": "1.0.4", "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"