@bfchain/algorithm-stream-merger
Advanced tools
Comparing version 1.2.5 to 1.2.6
@@ -234,5 +234,7 @@ "use strict"; | ||
const result = []; | ||
const sourceResult = []; | ||
const { isEnd, endReason } = _parseEndCondition(result, order, options.end); | ||
const { filter } = options; | ||
const pushToResult = filter ? (item) => { | ||
sourceResult[sourceResult.length] = item; | ||
if (filter(item)) { | ||
@@ -242,2 +244,3 @@ result[result.length] = item; | ||
} : (item) => { | ||
sourceResult[sourceResult.length] = item; | ||
result[result.length] = item; | ||
@@ -262,6 +265,7 @@ }; | ||
if (options.sealEnd && reason === "endFrame" && frameToolkit.compare(result[result.length - 1], options.end.endFrame) !== 0) { | ||
result.push(options.end.endFrame); | ||
pushToResult(options.end.endFrame); | ||
} | ||
return { | ||
fragment: new BFChainAlgorithmFragment(result, order), | ||
sourceFragment: new BFChainAlgorithmFragment(sourceResult), | ||
fragment: result.length ? new BFChainAlgorithmFragment(result, order) : void 0, | ||
endReason: reason | ||
@@ -279,11 +283,11 @@ }; | ||
return [ | ||
this.clip(leftSealFrame, exports.ORDER.DOWN, { sealStart: true }).fragment, | ||
this.clip(rightSealFrame, exports.ORDER.UP, { sealStart: true }).fragment | ||
this.clip(leftSealFrame, exports.ORDER.DOWN, { sealStart: true }).sourceFragment, | ||
this.clip(rightSealFrame, exports.ORDER.UP, { sealStart: true }).sourceFragment | ||
]; | ||
} | ||
if (matedata.right === this) { | ||
return [this.clip(rightSealFrame, exports.ORDER.UP, { sealStart: true }).fragment]; | ||
return [this.clip(rightSealFrame, exports.ORDER.UP, { sealStart: true }).sourceFragment]; | ||
} | ||
if (matedata.left === this) { | ||
return [this.clip(leftSealFrame, exports.ORDER.DOWN, { sealStart: true }).fragment]; | ||
return [this.clip(leftSealFrame, exports.ORDER.DOWN, { sealStart: true }).sourceFragment]; | ||
} | ||
@@ -290,0 +294,0 @@ throw 1; |
@@ -231,5 +231,7 @@ class Comparable { | ||
const result = []; | ||
const sourceResult = []; | ||
const { isEnd, endReason } = _parseEndCondition(result, order, options.end); | ||
const { filter } = options; | ||
const pushToResult = filter ? (item) => { | ||
sourceResult[sourceResult.length] = item; | ||
if (filter(item)) { | ||
@@ -239,2 +241,3 @@ result[result.length] = item; | ||
} : (item) => { | ||
sourceResult[sourceResult.length] = item; | ||
result[result.length] = item; | ||
@@ -259,6 +262,7 @@ }; | ||
if (options.sealEnd && reason === "endFrame" && frameToolkit.compare(result[result.length - 1], options.end.endFrame) !== 0) { | ||
result.push(options.end.endFrame); | ||
pushToResult(options.end.endFrame); | ||
} | ||
return { | ||
fragment: new BFChainAlgorithmFragment(result, order), | ||
sourceFragment: new BFChainAlgorithmFragment(sourceResult), | ||
fragment: result.length ? new BFChainAlgorithmFragment(result, order) : void 0, | ||
endReason: reason | ||
@@ -276,11 +280,11 @@ }; | ||
return [ | ||
this.clip(leftSealFrame, ORDER.DOWN, { sealStart: true }).fragment, | ||
this.clip(rightSealFrame, ORDER.UP, { sealStart: true }).fragment | ||
this.clip(leftSealFrame, ORDER.DOWN, { sealStart: true }).sourceFragment, | ||
this.clip(rightSealFrame, ORDER.UP, { sealStart: true }).sourceFragment | ||
]; | ||
} | ||
if (matedata.right === this) { | ||
return [this.clip(rightSealFrame, ORDER.UP, { sealStart: true }).fragment]; | ||
return [this.clip(rightSealFrame, ORDER.UP, { sealStart: true }).sourceFragment]; | ||
} | ||
if (matedata.left === this) { | ||
return [this.clip(leftSealFrame, ORDER.DOWN, { sealStart: true }).fragment]; | ||
return [this.clip(leftSealFrame, ORDER.DOWN, { sealStart: true }).sourceFragment]; | ||
} | ||
@@ -287,0 +291,0 @@ throw 1; |
{ | ||
"name": "@bfchain/algorithm-stream-merger", | ||
"version": "1.2.5", | ||
"version": "1.2.6", | ||
"main": "./dist/algorithm-stream-merger.cjs.js", | ||
@@ -5,0 +5,0 @@ "exports": { |
@@ -43,3 +43,5 @@ declare namespace BFChainAlgorithm { | ||
type ClipResult<D> = { | ||
fragment: Fragment<D>; | ||
sourceFragment: Fragment<D>; | ||
/**maybe empty because of filter effect */ | ||
fragment?: Fragment<D>; | ||
endReason: Fragment.EndReason | false; | ||
@@ -51,2 +53,5 @@ } | undefined; | ||
end?: ClipEnd<D>; | ||
/**filter会影响end中offset/limit的作用,所以不可以先end再去filter | ||
* (除非提供迭代器接口) | ||
*/ | ||
filter?: (item: D) => boolean; | ||
@@ -53,0 +58,0 @@ }; |
33330
848