reactivedb
Advanced tools
Comparing version 0.10.4-alpha.4-diff to 0.10.4-alpha.5-diff
{ | ||
"name": "reactivedb", | ||
"version": "0.10.4-alpha.4-diff", | ||
"version": "0.10.4-alpha.5-diff", | ||
"description": "Reactive ORM for Lovefield", | ||
@@ -5,0 +5,0 @@ "main": "./index.js", |
@@ -176,3 +176,2 @@ import { Observable } from 'rxjs/Observable' | ||
) | ||
return new QueryToken<T>(selector$) | ||
@@ -179,0 +178,0 @@ } |
@@ -12,3 +12,2 @@ import { Observable } from 'rxjs/Observable' | ||
public request$: Observable<T[]> | ||
public lastEmit: T[] = [] | ||
@@ -20,3 +19,4 @@ private mapFn: (stream$: Observable<T[]>) => Observable<any> = mapFn | ||
public query: Query<T>, | ||
public tableName: string | ||
public tableName: string, | ||
public lastEmit?: T[], | ||
) { | ||
@@ -38,3 +38,3 @@ this.request$ = request$.pipe( | ||
getLastEmit(): T[] { | ||
getLastEmit(): T[] | undefined { | ||
return this.lastEmit | ||
@@ -41,0 +41,0 @@ } |
@@ -15,4 +15,3 @@ import { Observable } from 'rxjs/Observable' | ||
import { TokenConsumed } from '../../exception/token' | ||
// import { patch } from '../../utils/patch' | ||
import { Ops } from '../../utils/diff' | ||
import diff, { Ops } from '../../utils/diff' | ||
@@ -27,5 +26,6 @@ export type SelectorMeta<T> = Selector<T> | ProxySelector<T> | ||
public lastEmit: T[] = [] | ||
private consumed = false | ||
constructor(selector$: Observable<SelectorMeta<T>>) { | ||
constructor(selector$: Observable<SelectorMeta<T>>, lasEmit?: T[]) { | ||
this.selector$ = selector$.pipe( | ||
@@ -35,4 +35,13 @@ publishReplay(1), | ||
) | ||
this.lastEmit = lasEmit || [] | ||
} | ||
getLastEmit() { | ||
return this.lastEmit | ||
} | ||
setLastEmit(data: T[]) { | ||
this.lastEmit = data | ||
} | ||
map<K>(fn: OperatorFunction<T[], K[]>) { | ||
@@ -60,3 +69,3 @@ this.selector$ = this.selector$.pipe( | ||
return this.selector$.pipe( | ||
switchMap(s => s.changes()) | ||
switchMap(s => s.changes()), | ||
) | ||
@@ -66,8 +75,10 @@ } | ||
changesWithOps(pk?: string): Observable<{ result: T[], ops: Ops}> { | ||
assert(!this.consumed, TokenConsumed()) | ||
this.consumed = true | ||
return this.selector$.pipe( | ||
switchMap((s) => s.changesWithOps(pk)), | ||
) | ||
return this.changes() | ||
.pipe( | ||
map((result: T[]) => { | ||
const ops = diff(this.lastEmit, result, pk) | ||
return { result, ops } | ||
}), | ||
tap((data) => this.lastEmit = data.result), | ||
) | ||
} | ||
@@ -77,2 +88,6 @@ | ||
tokens.unshift(this) | ||
const lastEmit: T[] = tokens.reduce((acc, token) => { | ||
return acc.concat(token.getLastEmit()) | ||
}, [] as T[]) | ||
const newSelector$ = Observable.from(tokens).pipe( | ||
@@ -86,3 +101,3 @@ map(token => token.selector$.pipe(skipWhileProxySelector)), | ||
) | ||
return new QueryToken<T>(newSelector$) | ||
return new QueryToken<T>(newSelector$, lastEmit) | ||
} | ||
@@ -89,0 +104,0 @@ |
@@ -7,3 +7,2 @@ import { Observer } from 'rxjs/Observer' | ||
import { map } from 'rxjs/operators/map' | ||
import { tap } from 'rxjs/operators/tap' | ||
import { mergeMap } from 'rxjs/operators/mergeMap' | ||
@@ -22,3 +21,2 @@ import { publishReplay } from 'rxjs/operators/publishReplay' | ||
import { mapFn } from './mapFn' | ||
import diff, { Ops } from '../../utils/diff' | ||
@@ -43,10 +41,5 @@ export class Selector <T> { | ||
const lastEmit = metaDatas.reduce((acc, selector) => { | ||
return acc.concat(selector.getLastEmit() || []) | ||
}, [] as U[]) | ||
return new Selector( | ||
db, lselect, shape, predicateProvider, | ||
maxLimit.limit! + maxLimit.skip!, minSkip.skip, meta.orderDescriptions, | ||
lastEmit | ||
maxLimit.limit! + maxLimit.skip!, minSkip.skip, meta.orderDescriptions | ||
) | ||
@@ -201,3 +194,2 @@ .map<U>(meta.mapFn) | ||
private orderDescriptions?: OrderInfo[], | ||
public lastEmit?: T[], | ||
) { | ||
@@ -246,22 +238,6 @@ this.predicateProvider = this.normPredicateProvider(predicateProvider) | ||
getLastEmit(): T[] | undefined { | ||
return this.lastEmit | ||
} | ||
changes(): Observable<T[]> | never { | ||
return this.mapFn(this.change$.pipe( | ||
tap((result: T[]) => this.lastEmit = result) | ||
)) | ||
return this.mapFn(this.change$) | ||
} | ||
changesWithOps(pk?: string): Observable<{ result: T[], ops: Ops}> | never { | ||
return this.change$.pipe( | ||
map((result: T[]) => { | ||
const ops = diff(this.lastEmit || [], result, pk) | ||
return { result, ops } | ||
}), | ||
tap(({ result }) => this.lastEmit = result) | ||
) | ||
} | ||
map<K>(fn: OperatorFunction<T[], K[]>) { | ||
@@ -268,0 +244,0 @@ this.mapFn = fn |
@@ -1,4 +0,8 @@ | ||
import { Op, OpsType, Ops } from './diff' | ||
import { Op } from './diff' | ||
export const patch = <K, T extends Array<K>, R extends Array<K>>(ops: Op[], oldList: T, newList: T) => { | ||
if (!oldList.length) { | ||
return newList | ||
} | ||
return newList.map((data, i) => { | ||
@@ -13,14 +17,1 @@ const op = ops[i] | ||
} | ||
export const getPatchResult = <T>(opsResult: Ops, oldList: T[], newList: T[]): T[] => { | ||
const { type, ops } = opsResult | ||
switch (type) { | ||
case OpsType.Error: | ||
return newList | ||
case OpsType.SuccessAndSkip: | ||
return oldList | ||
case OpsType.Success: | ||
default: | ||
return patch(ops, oldList, newList) | ||
} | ||
} |
@@ -1,1 +0,1 @@ | ||
export default '0.10.4-alpha.4-diff' | ||
export default '0.10.4-alpha.5-diff-alpha0.10.4-alpha.5-diff-diff' |
@@ -8,9 +8,9 @@ import { Observable } from 'rxjs/Observable'; | ||
tableName: string; | ||
lastEmit: T[] | undefined; | ||
request$: Observable<T[]>; | ||
lastEmit: T[]; | ||
private mapFn; | ||
constructor(request$: Observable<T | T[]>, query: Query<T>, tableName: string); | ||
constructor(request$: Observable<T | T[]>, query: Query<T>, tableName: string, lastEmit?: T[] | undefined); | ||
values(): Observable<any>; | ||
changes(): Observable<any>; | ||
getLastEmit(): T[]; | ||
getLastEmit(): T[] | undefined; | ||
changesWithOps(pk?: string): Observable<{ | ||
@@ -17,0 +17,0 @@ result: T[]; |
@@ -8,6 +8,6 @@ "use strict"; | ||
var ProxySelector = /** @class */ (function () { | ||
function ProxySelector(request$, query, tableName) { | ||
function ProxySelector(request$, query, tableName, lastEmit) { | ||
this.query = query; | ||
this.tableName = tableName; | ||
this.lastEmit = []; | ||
this.lastEmit = lastEmit; | ||
this.mapFn = mapFn_1.mapFn; | ||
@@ -14,0 +14,0 @@ this.request$ = request$.pipe(map_1.map(function (r) { return Array.isArray(r) ? r : [r]; })); |
@@ -9,4 +9,7 @@ import { Observable } from 'rxjs/Observable'; | ||
selector$: Observable<SelectorMeta<T>>; | ||
lastEmit: T[]; | ||
private consumed; | ||
constructor(selector$: Observable<SelectorMeta<T>>); | ||
constructor(selector$: Observable<SelectorMeta<T>>, lasEmit?: T[]); | ||
getLastEmit(): T[]; | ||
setLastEmit(data: T[]): void; | ||
map<K>(fn: OperatorFunction<T[], K[]>): QueryToken<K>; | ||
@@ -13,0 +16,0 @@ values(): Observable<T[]>; |
@@ -15,8 +15,17 @@ "use strict"; | ||
var token_1 = require("../../exception/token"); | ||
var diff_1 = require("../../utils/diff"); | ||
var skipWhileProxySelector = skipWhile_1.skipWhile(function (v) { return v instanceof ProxySelector_1.ProxySelector; }); | ||
var QueryToken = /** @class */ (function () { | ||
function QueryToken(selector$) { | ||
function QueryToken(selector$, lasEmit) { | ||
this.lastEmit = []; | ||
this.consumed = false; | ||
this.selector$ = selector$.pipe(publishReplay_1.publishReplay(1), refCount_1.refCount()); | ||
this.lastEmit = lasEmit || []; | ||
} | ||
QueryToken.prototype.getLastEmit = function () { | ||
return this.lastEmit; | ||
}; | ||
QueryToken.prototype.setLastEmit = function (data) { | ||
this.lastEmit = data; | ||
}; | ||
QueryToken.prototype.map = function (fn) { | ||
@@ -37,5 +46,8 @@ this.selector$ = this.selector$.pipe(tap_1.tap(function (selector) { return selector.map(fn); })); | ||
QueryToken.prototype.changesWithOps = function (pk) { | ||
assert_1.assert(!this.consumed, token_1.TokenConsumed()); | ||
this.consumed = true; | ||
return this.selector$.pipe(switchMap_1.switchMap(function (s) { return s.changesWithOps(pk); })); | ||
var _this = this; | ||
return this.changes() | ||
.pipe(map_1.map(function (result) { | ||
var ops = diff_1.default(_this.lastEmit, result, pk); | ||
return { result: result, ops: ops }; | ||
}), tap_1.tap(function (data) { return _this.lastEmit = data.result; })); | ||
}; | ||
@@ -48,2 +60,5 @@ QueryToken.prototype.concat = function () { | ||
tokens.unshift(this); | ||
var lastEmit = tokens.reduce(function (acc, token) { | ||
return acc.concat(token.getLastEmit()); | ||
}, []); | ||
var newSelector$ = Observable_1.Observable.from(tokens).pipe(map_1.map(function (token) { return token.selector$.pipe(skipWhileProxySelector); }), combineAll_1.combineAll(), map_1.map(function (r) { | ||
@@ -54,3 +69,3 @@ var first = r.shift(); | ||
})); | ||
return new QueryToken(newSelector$); | ||
return new QueryToken(newSelector$, lastEmit); | ||
}; | ||
@@ -57,0 +72,0 @@ QueryToken.prototype.combine = function () { |
@@ -7,3 +7,2 @@ /// <reference types="lovefield" /> | ||
import { ShapeMatcher, OrderInfo } from '../../interface'; | ||
import { Ops } from '../../utils/diff'; | ||
export declare class Selector<T> { | ||
@@ -17,3 +16,2 @@ db: lf.Database; | ||
private orderDescriptions; | ||
lastEmit: T[] | undefined; | ||
private static concatFactory<U>(...metaDatas); | ||
@@ -31,3 +29,3 @@ private static combineFactory<U>(...metaDatas); | ||
private normPredicateProvider(pp?); | ||
constructor(db: lf.Database, lselect: lf.query.Select, shape: ShapeMatcher, predicateProvider?: PredicateProvider<T> | undefined, limit?: number | undefined, skip?: number | undefined, orderDescriptions?: OrderInfo[] | undefined, lastEmit?: T[] | undefined); | ||
constructor(db: lf.Database, lselect: lf.query.Select, shape: ShapeMatcher, predicateProvider?: PredicateProvider<T> | undefined, limit?: number | undefined, skip?: number | undefined, orderDescriptions?: OrderInfo[] | undefined); | ||
toString(): string; | ||
@@ -37,8 +35,3 @@ values(): Observable<T[]> | never; | ||
concat(...selectors: Selector<T>[]): Selector<T>; | ||
getLastEmit(): T[] | undefined; | ||
changes(): Observable<T[]> | never; | ||
changesWithOps(pk?: string): Observable<{ | ||
result: T[]; | ||
ops: Ops; | ||
}> | never; | ||
map<K>(fn: OperatorFunction<T[], K[]>): Selector<K>; | ||
@@ -45,0 +38,0 @@ private inPKs(pks); |
@@ -7,3 +7,2 @@ "use strict"; | ||
var map_1 = require("rxjs/operators/map"); | ||
var tap_1 = require("rxjs/operators/tap"); | ||
var mergeMap_1 = require("rxjs/operators/mergeMap"); | ||
@@ -21,5 +20,4 @@ var publishReplay_1 = require("rxjs/operators/publishReplay"); | ||
var mapFn_1 = require("./mapFn"); | ||
var diff_1 = require("../../utils/diff"); | ||
var Selector = /** @class */ (function () { | ||
function Selector(db, lselect, shape, predicateProvider, limit, skip, orderDescriptions, lastEmit) { | ||
function Selector(db, lselect, shape, predicateProvider, limit, skip, orderDescriptions) { | ||
this.db = db; | ||
@@ -32,3 +30,2 @@ this.lselect = lselect; | ||
this.orderDescriptions = orderDescriptions; | ||
this.lastEmit = lastEmit; | ||
this.mapFn = mapFn_1.mapFn; | ||
@@ -57,6 +54,3 @@ this._change$ = null; | ||
}); | ||
var lastEmit = metaDatas.reduce(function (acc, selector) { | ||
return acc.concat(selector.getLastEmit() || []); | ||
}, []); | ||
return new Selector(db, lselect, shape, predicateProvider, maxLimit.limit + maxLimit.skip, minSkip.skip, meta.orderDescriptions, lastEmit) | ||
return new Selector(db, lselect, shape, predicateProvider, maxLimit.limit + maxLimit.skip, minSkip.skip, meta.orderDescriptions) | ||
.map(meta.mapFn); | ||
@@ -221,19 +215,5 @@ }; | ||
}; | ||
Selector.prototype.getLastEmit = function () { | ||
return this.lastEmit; | ||
}; | ||
Selector.prototype.changes = function () { | ||
var _this = this; | ||
return this.mapFn(this.change$.pipe(tap_1.tap(function (result) { return _this.lastEmit = result; }))); | ||
return this.mapFn(this.change$); | ||
}; | ||
Selector.prototype.changesWithOps = function (pk) { | ||
var _this = this; | ||
return this.change$.pipe(map_1.map(function (result) { | ||
var ops = diff_1.default(_this.lastEmit || [], result, pk); | ||
return { result: result, ops: ops }; | ||
}), tap_1.tap(function (_a) { | ||
var result = _a.result; | ||
return _this.lastEmit = result; | ||
})); | ||
}; | ||
Selector.prototype.map = function (fn) { | ||
@@ -240,0 +220,0 @@ this.mapFn = fn; |
@@ -1,2 +0,2 @@ | ||
declare const _default: "0.10.4-alpha.4-diff"; | ||
declare const _default: "0.10.4-alpha.5-diff-alpha0.10.4-alpha.5-diff-diff"; | ||
export default _default; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.default = '0.10.4-alpha.4-diff'; | ||
exports.default = '0.10.4-alpha.5-diff-alpha0.10.4-alpha.5-diff-diff'; | ||
//# sourceMappingURL=version.js.map |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
299900
5453