@orderly.network/hooks 0.0.92 → 0.0.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +69 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +70 -43
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -666,6 +666,14 @@ var reduceItems = (depth, level, data, asks = false) => {
|
|
|
666
666
|
} else {
|
|
667
667
|
priceKey = new utils.Decimal(Math.floor(price / depth)).mul(depth).toNumber();
|
|
668
668
|
}
|
|
669
|
+
if (depth < 1 && depth > 0) {
|
|
670
|
+
const priceStr = price.toString();
|
|
671
|
+
const index = priceStr.indexOf(".");
|
|
672
|
+
const decimal = priceStr.slice(index + 1);
|
|
673
|
+
const decimalDepth = depth.toString().slice(2).length;
|
|
674
|
+
const decimalStr = decimal.slice(0, ramda.min(decimal.length, decimalDepth));
|
|
675
|
+
priceKey = new utils.Decimal(priceStr.slice(0, index) + "." + decimalStr).toNumber();
|
|
676
|
+
}
|
|
669
677
|
if (prices.has(priceKey)) {
|
|
670
678
|
const item = prices.get(priceKey);
|
|
671
679
|
const itemPrice = new utils.Decimal(item[1]).add(quantity).toNumber();
|
|
@@ -686,48 +694,66 @@ var reduceItems = (depth, level, data, asks = false) => {
|
|
|
686
694
|
return result;
|
|
687
695
|
};
|
|
688
696
|
var reduceOrderbook = (depth, level, data) => {
|
|
689
|
-
|
|
690
|
-
|
|
697
|
+
let asks = reduceItems(depth, level, data.asks, true);
|
|
698
|
+
let bids = reduceItems(depth, level, data.bids);
|
|
699
|
+
if (asks.length !== 0 && bids.length !== 0 && asks[0][0] <= bids[0][0]) {
|
|
700
|
+
if (asks.length === 1) {
|
|
701
|
+
const [price, qty, newQuantity] = asks[0];
|
|
702
|
+
asks.shift();
|
|
703
|
+
asks.push([price + (depth === void 0 ? 0 : depth), qty, newQuantity]);
|
|
704
|
+
} else {
|
|
705
|
+
const [bidPrice] = bids[0];
|
|
706
|
+
while (asks.length > 0) {
|
|
707
|
+
const [askPrice, askQty, newQuantity] = asks[0];
|
|
708
|
+
if (askPrice <= bidPrice) {
|
|
709
|
+
asks.shift();
|
|
710
|
+
for (let index = 0; index < asks.length; index++) {
|
|
711
|
+
if (index === 0) {
|
|
712
|
+
asks[index][1] += askQty;
|
|
713
|
+
}
|
|
714
|
+
asks[index][2] += newQuantity;
|
|
715
|
+
}
|
|
716
|
+
} else {
|
|
717
|
+
break;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
asks = asks.reverse();
|
|
691
723
|
return {
|
|
692
724
|
asks: asks.length < level ? paddingFn(level - asks.length).concat(asks) : asks,
|
|
693
725
|
bids: bids.length < level ? bids.concat(paddingFn(level - bids.length)) : bids
|
|
694
726
|
};
|
|
695
727
|
};
|
|
696
|
-
var
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
} else
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
});
|
|
715
|
-
update.bids.forEach((element) => {
|
|
716
|
-
for (let index = 0; index < bids.length; index++) {
|
|
717
|
-
if (element[1] === 0) {
|
|
718
|
-
if (element[0] === bids[index][0]) {
|
|
719
|
-
bids.splice(index, 1);
|
|
720
|
-
break;
|
|
728
|
+
var mergeItems = (data, update) => {
|
|
729
|
+
if (data.length === 0)
|
|
730
|
+
return update;
|
|
731
|
+
data = data.filter(([price]) => !isNaN(price));
|
|
732
|
+
while (update.length > 0) {
|
|
733
|
+
const item = update.shift();
|
|
734
|
+
if (item) {
|
|
735
|
+
const [price, quantity] = item;
|
|
736
|
+
const index = data.findIndex(([p], index2) => p === price);
|
|
737
|
+
if (index === -1) {
|
|
738
|
+
if (quantity === 0)
|
|
739
|
+
continue;
|
|
740
|
+
data.push(item);
|
|
741
|
+
} else {
|
|
742
|
+
if (quantity === 0) {
|
|
743
|
+
data.splice(index, 1);
|
|
744
|
+
} else {
|
|
745
|
+
data[index] = item;
|
|
721
746
|
}
|
|
722
|
-
} else if (element[0] === bids[index][0]) {
|
|
723
|
-
bids[index] = element;
|
|
724
|
-
break;
|
|
725
|
-
} else if (element[0] > bids[index][0]) {
|
|
726
|
-
bids.splice(index, 0, element);
|
|
727
|
-
break;
|
|
728
747
|
}
|
|
729
748
|
}
|
|
730
|
-
}
|
|
749
|
+
}
|
|
750
|
+
return data;
|
|
751
|
+
};
|
|
752
|
+
var mergeOrderbook = (data, update) => {
|
|
753
|
+
let asks = [...data.asks];
|
|
754
|
+
let bids = [...data.bids];
|
|
755
|
+
asks = mergeItems(asks, update.asks).sort(asksSortFn);
|
|
756
|
+
bids = mergeItems(bids, update.bids).sort(bidsSortFn);
|
|
731
757
|
return {
|
|
732
758
|
asks,
|
|
733
759
|
bids
|
|
@@ -771,14 +797,12 @@ var useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
|
|
|
771
797
|
if (ignore)
|
|
772
798
|
return;
|
|
773
799
|
if (!!message) {
|
|
774
|
-
let bids = message.bids.sort(bidsSortFn);
|
|
775
|
-
bids = bids.filter((item) => !isNaN(item[0]));
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
asks = asks.filter((item) => !isNaN(item[0]));
|
|
779
|
-
asks = asks.filter((item) => item[1] > 0);
|
|
800
|
+
let bids = [...message.bids.sort(bidsSortFn)];
|
|
801
|
+
bids = bids.filter((item) => !isNaN(item[0]) && item[1] > 0);
|
|
802
|
+
let asks = [...message.asks.sort(asksSortFn)];
|
|
803
|
+
asks = asks.filter((item) => !isNaN(item[0]) && item[1] > 0);
|
|
780
804
|
setRequestData({ bids, asks });
|
|
781
|
-
setData({ bids, asks });
|
|
805
|
+
setData({ bids: [...bids], asks: [...asks] });
|
|
782
806
|
}
|
|
783
807
|
setIsLoading(false);
|
|
784
808
|
}
|
|
@@ -838,7 +862,10 @@ var useOrderbookStream = (symbol, initial = INIT_DATA, options) => {
|
|
|
838
862
|
React2.useEffect(() => {
|
|
839
863
|
prevMiddlePrice.current = middlePrice;
|
|
840
864
|
}, [middlePrice]);
|
|
841
|
-
const reducedData = reduceOrderbook(depth, level,
|
|
865
|
+
const reducedData = reduceOrderbook(depth, level, {
|
|
866
|
+
asks: [...data.asks],
|
|
867
|
+
bids: [...data.bids]
|
|
868
|
+
});
|
|
842
869
|
return [
|
|
843
870
|
{
|
|
844
871
|
asks: reducedData.asks.slice(-level),
|