@agg-build/ui 1.2.9 → 1.2.10
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/{chunk-PFOSEY46.mjs → chunk-5MTIBPDY.mjs} +54 -14
- package/dist/{chunk-PYKD4W4T.mjs → chunk-XKADJNAJ.mjs} +1 -1
- package/dist/events.js +54 -14
- package/dist/events.mjs +1 -1
- package/dist/index.js +54 -14
- package/dist/index.mjs +2 -2
- package/dist/pages.js +54 -14
- package/dist/pages.mjs +2 -2
- package/dist/types/events/market-details/orderbook-aggregation.d.mts +16 -0
- package/dist/types/events/market-details/orderbook-aggregation.d.ts +16 -0
- package/package.json +1 -1
|
@@ -884,26 +884,66 @@ var collectEligibleVenueOutcomes = ({
|
|
|
884
884
|
venueMarkets,
|
|
885
885
|
selectedOutcomeLabel
|
|
886
886
|
}) => {
|
|
887
|
+
var _a;
|
|
887
888
|
if (!selectedOutcomeLabel) return [];
|
|
889
|
+
const semanticLabel = toSemanticOutcomeLabel(selectedOutcomeLabel);
|
|
890
|
+
const seenMarketIds = /* @__PURE__ */ new Set();
|
|
888
891
|
const seenOutcomeIds = /* @__PURE__ */ new Set();
|
|
889
|
-
|
|
890
|
-
|
|
892
|
+
const result = [];
|
|
893
|
+
for (const market of venueMarkets) {
|
|
894
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
895
|
+
const parentOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
891
896
|
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
892
897
|
);
|
|
893
|
-
if (!
|
|
894
|
-
|
|
898
|
+
if (!parentOutcome) continue;
|
|
899
|
+
const refs = (_a = parentOutcome.matchedVenueMarketOutcomes) != null ? _a : [];
|
|
900
|
+
if (refs.length === 0) continue;
|
|
901
|
+
seenMarketIds.add(market.id);
|
|
902
|
+
seenOutcomeIds.add(parentOutcome.id);
|
|
903
|
+
result.push({
|
|
904
|
+
venue: market.venue,
|
|
905
|
+
market,
|
|
906
|
+
outcome: parentOutcome,
|
|
907
|
+
outcomeId: parentOutcome.id,
|
|
908
|
+
semanticLabel
|
|
909
|
+
});
|
|
910
|
+
for (const ref of refs) {
|
|
911
|
+
if (seenMarketIds.has(ref.venueMarketId)) continue;
|
|
912
|
+
const sibling = venueMarkets.find((m) => m.id === ref.venueMarketId);
|
|
913
|
+
if (!sibling) continue;
|
|
914
|
+
const siblingOutcome = sibling.venueMarketOutcomes.find(
|
|
915
|
+
(o) => o.id === ref.venueMarketOutcomeId
|
|
916
|
+
);
|
|
917
|
+
if (!siblingOutcome || seenOutcomeIds.has(siblingOutcome.id)) continue;
|
|
918
|
+
seenMarketIds.add(sibling.id);
|
|
919
|
+
seenOutcomeIds.add(siblingOutcome.id);
|
|
920
|
+
result.push({
|
|
921
|
+
venue: sibling.venue,
|
|
922
|
+
market: sibling,
|
|
923
|
+
outcome: siblingOutcome,
|
|
924
|
+
outcomeId: siblingOutcome.id,
|
|
925
|
+
semanticLabel
|
|
926
|
+
});
|
|
895
927
|
}
|
|
928
|
+
break;
|
|
929
|
+
}
|
|
930
|
+
for (const market of venueMarkets) {
|
|
931
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
932
|
+
const matchedOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
933
|
+
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
934
|
+
);
|
|
935
|
+
if (!matchedOutcome || seenOutcomeIds.has(matchedOutcome.id)) continue;
|
|
936
|
+
seenMarketIds.add(market.id);
|
|
896
937
|
seenOutcomeIds.add(matchedOutcome.id);
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
});
|
|
938
|
+
result.push({
|
|
939
|
+
venue: market.venue,
|
|
940
|
+
market,
|
|
941
|
+
outcome: matchedOutcome,
|
|
942
|
+
outcomeId: matchedOutcome.id,
|
|
943
|
+
semanticLabel
|
|
944
|
+
});
|
|
945
|
+
}
|
|
946
|
+
return result;
|
|
907
947
|
};
|
|
908
948
|
var collectEligibleVenueOutcomeIds = ({
|
|
909
949
|
venueMarkets,
|
package/dist/events.js
CHANGED
|
@@ -8067,26 +8067,66 @@ var collectEligibleVenueOutcomes = ({
|
|
|
8067
8067
|
venueMarkets,
|
|
8068
8068
|
selectedOutcomeLabel
|
|
8069
8069
|
}) => {
|
|
8070
|
+
var _a;
|
|
8070
8071
|
if (!selectedOutcomeLabel) return [];
|
|
8072
|
+
const semanticLabel = toSemanticOutcomeLabel(selectedOutcomeLabel);
|
|
8073
|
+
const seenMarketIds = /* @__PURE__ */ new Set();
|
|
8071
8074
|
const seenOutcomeIds = /* @__PURE__ */ new Set();
|
|
8072
|
-
|
|
8073
|
-
|
|
8075
|
+
const result = [];
|
|
8076
|
+
for (const market of venueMarkets) {
|
|
8077
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
8078
|
+
const parentOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
8074
8079
|
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
8075
8080
|
);
|
|
8076
|
-
if (!
|
|
8077
|
-
|
|
8081
|
+
if (!parentOutcome) continue;
|
|
8082
|
+
const refs = (_a = parentOutcome.matchedVenueMarketOutcomes) != null ? _a : [];
|
|
8083
|
+
if (refs.length === 0) continue;
|
|
8084
|
+
seenMarketIds.add(market.id);
|
|
8085
|
+
seenOutcomeIds.add(parentOutcome.id);
|
|
8086
|
+
result.push({
|
|
8087
|
+
venue: market.venue,
|
|
8088
|
+
market,
|
|
8089
|
+
outcome: parentOutcome,
|
|
8090
|
+
outcomeId: parentOutcome.id,
|
|
8091
|
+
semanticLabel
|
|
8092
|
+
});
|
|
8093
|
+
for (const ref of refs) {
|
|
8094
|
+
if (seenMarketIds.has(ref.venueMarketId)) continue;
|
|
8095
|
+
const sibling = venueMarkets.find((m) => m.id === ref.venueMarketId);
|
|
8096
|
+
if (!sibling) continue;
|
|
8097
|
+
const siblingOutcome = sibling.venueMarketOutcomes.find(
|
|
8098
|
+
(o) => o.id === ref.venueMarketOutcomeId
|
|
8099
|
+
);
|
|
8100
|
+
if (!siblingOutcome || seenOutcomeIds.has(siblingOutcome.id)) continue;
|
|
8101
|
+
seenMarketIds.add(sibling.id);
|
|
8102
|
+
seenOutcomeIds.add(siblingOutcome.id);
|
|
8103
|
+
result.push({
|
|
8104
|
+
venue: sibling.venue,
|
|
8105
|
+
market: sibling,
|
|
8106
|
+
outcome: siblingOutcome,
|
|
8107
|
+
outcomeId: siblingOutcome.id,
|
|
8108
|
+
semanticLabel
|
|
8109
|
+
});
|
|
8078
8110
|
}
|
|
8111
|
+
break;
|
|
8112
|
+
}
|
|
8113
|
+
for (const market of venueMarkets) {
|
|
8114
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
8115
|
+
const matchedOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
8116
|
+
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
8117
|
+
);
|
|
8118
|
+
if (!matchedOutcome || seenOutcomeIds.has(matchedOutcome.id)) continue;
|
|
8119
|
+
seenMarketIds.add(market.id);
|
|
8079
8120
|
seenOutcomeIds.add(matchedOutcome.id);
|
|
8080
|
-
|
|
8081
|
-
|
|
8082
|
-
|
|
8083
|
-
|
|
8084
|
-
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8088
|
-
|
|
8089
|
-
});
|
|
8121
|
+
result.push({
|
|
8122
|
+
venue: market.venue,
|
|
8123
|
+
market,
|
|
8124
|
+
outcome: matchedOutcome,
|
|
8125
|
+
outcomeId: matchedOutcome.id,
|
|
8126
|
+
semanticLabel
|
|
8127
|
+
});
|
|
8128
|
+
}
|
|
8129
|
+
return result;
|
|
8090
8130
|
};
|
|
8091
8131
|
var collectEligibleVenueOutcomeIds = ({
|
|
8092
8132
|
venueMarkets,
|
package/dist/events.mjs
CHANGED
package/dist/index.js
CHANGED
|
@@ -11570,26 +11570,66 @@ var collectEligibleVenueOutcomes = ({
|
|
|
11570
11570
|
venueMarkets,
|
|
11571
11571
|
selectedOutcomeLabel
|
|
11572
11572
|
}) => {
|
|
11573
|
+
var _a;
|
|
11573
11574
|
if (!selectedOutcomeLabel) return [];
|
|
11575
|
+
const semanticLabel = toSemanticOutcomeLabel(selectedOutcomeLabel);
|
|
11576
|
+
const seenMarketIds = /* @__PURE__ */ new Set();
|
|
11574
11577
|
const seenOutcomeIds = /* @__PURE__ */ new Set();
|
|
11575
|
-
|
|
11576
|
-
|
|
11578
|
+
const result = [];
|
|
11579
|
+
for (const market of venueMarkets) {
|
|
11580
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
11581
|
+
const parentOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
11577
11582
|
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
11578
11583
|
);
|
|
11579
|
-
if (!
|
|
11580
|
-
|
|
11584
|
+
if (!parentOutcome) continue;
|
|
11585
|
+
const refs = (_a = parentOutcome.matchedVenueMarketOutcomes) != null ? _a : [];
|
|
11586
|
+
if (refs.length === 0) continue;
|
|
11587
|
+
seenMarketIds.add(market.id);
|
|
11588
|
+
seenOutcomeIds.add(parentOutcome.id);
|
|
11589
|
+
result.push({
|
|
11590
|
+
venue: market.venue,
|
|
11591
|
+
market,
|
|
11592
|
+
outcome: parentOutcome,
|
|
11593
|
+
outcomeId: parentOutcome.id,
|
|
11594
|
+
semanticLabel
|
|
11595
|
+
});
|
|
11596
|
+
for (const ref of refs) {
|
|
11597
|
+
if (seenMarketIds.has(ref.venueMarketId)) continue;
|
|
11598
|
+
const sibling = venueMarkets.find((m) => m.id === ref.venueMarketId);
|
|
11599
|
+
if (!sibling) continue;
|
|
11600
|
+
const siblingOutcome = sibling.venueMarketOutcomes.find(
|
|
11601
|
+
(o) => o.id === ref.venueMarketOutcomeId
|
|
11602
|
+
);
|
|
11603
|
+
if (!siblingOutcome || seenOutcomeIds.has(siblingOutcome.id)) continue;
|
|
11604
|
+
seenMarketIds.add(sibling.id);
|
|
11605
|
+
seenOutcomeIds.add(siblingOutcome.id);
|
|
11606
|
+
result.push({
|
|
11607
|
+
venue: sibling.venue,
|
|
11608
|
+
market: sibling,
|
|
11609
|
+
outcome: siblingOutcome,
|
|
11610
|
+
outcomeId: siblingOutcome.id,
|
|
11611
|
+
semanticLabel
|
|
11612
|
+
});
|
|
11581
11613
|
}
|
|
11614
|
+
break;
|
|
11615
|
+
}
|
|
11616
|
+
for (const market of venueMarkets) {
|
|
11617
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
11618
|
+
const matchedOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
11619
|
+
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
11620
|
+
);
|
|
11621
|
+
if (!matchedOutcome || seenOutcomeIds.has(matchedOutcome.id)) continue;
|
|
11622
|
+
seenMarketIds.add(market.id);
|
|
11582
11623
|
seenOutcomeIds.add(matchedOutcome.id);
|
|
11583
|
-
|
|
11584
|
-
|
|
11585
|
-
|
|
11586
|
-
|
|
11587
|
-
|
|
11588
|
-
|
|
11589
|
-
|
|
11590
|
-
|
|
11591
|
-
|
|
11592
|
-
});
|
|
11624
|
+
result.push({
|
|
11625
|
+
venue: market.venue,
|
|
11626
|
+
market,
|
|
11627
|
+
outcome: matchedOutcome,
|
|
11628
|
+
outcomeId: matchedOutcome.id,
|
|
11629
|
+
semanticLabel
|
|
11630
|
+
});
|
|
11631
|
+
}
|
|
11632
|
+
return result;
|
|
11593
11633
|
};
|
|
11594
11634
|
var collectEligibleVenueOutcomeIds = ({
|
|
11595
11635
|
venueMarkets,
|
package/dist/index.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
USER_PROFILE_TAB_POSITIONS,
|
|
11
11
|
UserProfilePage,
|
|
12
12
|
useHomePageModals
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-XKADJNAJ.mjs";
|
|
14
14
|
import {
|
|
15
15
|
EventList,
|
|
16
16
|
EventListItem,
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
mergeVenueOutcomeOrderbooks,
|
|
26
26
|
orderbookRowLimitDefault,
|
|
27
27
|
useCenterOrderbookSpread
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-5MTIBPDY.mjs";
|
|
29
29
|
import {
|
|
30
30
|
CARD_NETWORK_OPTIONS,
|
|
31
31
|
ConnectAccountsStep,
|
package/dist/pages.js
CHANGED
|
@@ -10164,26 +10164,66 @@ var collectEligibleVenueOutcomes = ({
|
|
|
10164
10164
|
venueMarkets,
|
|
10165
10165
|
selectedOutcomeLabel
|
|
10166
10166
|
}) => {
|
|
10167
|
+
var _a;
|
|
10167
10168
|
if (!selectedOutcomeLabel) return [];
|
|
10169
|
+
const semanticLabel = toSemanticOutcomeLabel(selectedOutcomeLabel);
|
|
10170
|
+
const seenMarketIds = /* @__PURE__ */ new Set();
|
|
10168
10171
|
const seenOutcomeIds = /* @__PURE__ */ new Set();
|
|
10169
|
-
|
|
10170
|
-
|
|
10172
|
+
const result = [];
|
|
10173
|
+
for (const market of venueMarkets) {
|
|
10174
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
10175
|
+
const parentOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
10171
10176
|
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
10172
10177
|
);
|
|
10173
|
-
if (!
|
|
10174
|
-
|
|
10178
|
+
if (!parentOutcome) continue;
|
|
10179
|
+
const refs = (_a = parentOutcome.matchedVenueMarketOutcomes) != null ? _a : [];
|
|
10180
|
+
if (refs.length === 0) continue;
|
|
10181
|
+
seenMarketIds.add(market.id);
|
|
10182
|
+
seenOutcomeIds.add(parentOutcome.id);
|
|
10183
|
+
result.push({
|
|
10184
|
+
venue: market.venue,
|
|
10185
|
+
market,
|
|
10186
|
+
outcome: parentOutcome,
|
|
10187
|
+
outcomeId: parentOutcome.id,
|
|
10188
|
+
semanticLabel
|
|
10189
|
+
});
|
|
10190
|
+
for (const ref of refs) {
|
|
10191
|
+
if (seenMarketIds.has(ref.venueMarketId)) continue;
|
|
10192
|
+
const sibling = venueMarkets.find((m) => m.id === ref.venueMarketId);
|
|
10193
|
+
if (!sibling) continue;
|
|
10194
|
+
const siblingOutcome = sibling.venueMarketOutcomes.find(
|
|
10195
|
+
(o) => o.id === ref.venueMarketOutcomeId
|
|
10196
|
+
);
|
|
10197
|
+
if (!siblingOutcome || seenOutcomeIds.has(siblingOutcome.id)) continue;
|
|
10198
|
+
seenMarketIds.add(sibling.id);
|
|
10199
|
+
seenOutcomeIds.add(siblingOutcome.id);
|
|
10200
|
+
result.push({
|
|
10201
|
+
venue: sibling.venue,
|
|
10202
|
+
market: sibling,
|
|
10203
|
+
outcome: siblingOutcome,
|
|
10204
|
+
outcomeId: siblingOutcome.id,
|
|
10205
|
+
semanticLabel
|
|
10206
|
+
});
|
|
10175
10207
|
}
|
|
10208
|
+
break;
|
|
10209
|
+
}
|
|
10210
|
+
for (const market of venueMarkets) {
|
|
10211
|
+
if (seenMarketIds.has(market.id)) continue;
|
|
10212
|
+
const matchedOutcome = sortOutcomes(market.venueMarketOutcomes).find(
|
|
10213
|
+
(outcome) => matchesSelectedOutcomeLabel(outcome, selectedOutcomeLabel)
|
|
10214
|
+
);
|
|
10215
|
+
if (!matchedOutcome || seenOutcomeIds.has(matchedOutcome.id)) continue;
|
|
10216
|
+
seenMarketIds.add(market.id);
|
|
10176
10217
|
seenOutcomeIds.add(matchedOutcome.id);
|
|
10177
|
-
|
|
10178
|
-
|
|
10179
|
-
|
|
10180
|
-
|
|
10181
|
-
|
|
10182
|
-
|
|
10183
|
-
|
|
10184
|
-
|
|
10185
|
-
|
|
10186
|
-
});
|
|
10218
|
+
result.push({
|
|
10219
|
+
venue: market.venue,
|
|
10220
|
+
market,
|
|
10221
|
+
outcome: matchedOutcome,
|
|
10222
|
+
outcomeId: matchedOutcome.id,
|
|
10223
|
+
semanticLabel
|
|
10224
|
+
});
|
|
10225
|
+
}
|
|
10226
|
+
return result;
|
|
10187
10227
|
};
|
|
10188
10228
|
var mergeVenueOutcomeOrderbooks = ({
|
|
10189
10229
|
eligibleOutcomes,
|
package/dist/pages.mjs
CHANGED
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
USER_PROFILE_TAB_POSITIONS,
|
|
8
8
|
UserProfilePage,
|
|
9
9
|
useHomePageModals
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-XKADJNAJ.mjs";
|
|
11
|
+
import "./chunk-5MTIBPDY.mjs";
|
|
12
12
|
import {
|
|
13
13
|
DEPOSIT_MODAL_OPEN_EVENT,
|
|
14
14
|
WITHDRAW_MODAL_OPEN_EVENT,
|
|
@@ -16,6 +16,22 @@ export type AggregatedOrderbookRows = {
|
|
|
16
16
|
includedOutcomeIds: string[];
|
|
17
17
|
missingOutcomeIds: string[];
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Pick the eligible outcome on each venue-market that corresponds to the
|
|
21
|
+
* user's selected side.
|
|
22
|
+
*
|
|
23
|
+
* MVMO-first: when one of the input markets is the "parent" (the queried
|
|
24
|
+
* market whose selected outcome carries `matchedVenueMarketOutcomes`
|
|
25
|
+
* refs), we walk those refs to align sibling outcomes by id — robust to
|
|
26
|
+
* inversely-framed binaries (e.g. UFC: Polymarket-No (Chimaev) maps via
|
|
27
|
+
* MVMO to Kalshi-Chimaev-Yes, NOT to Kalshi-Chimaev-No despite the
|
|
28
|
+
* matching label) and to multi-outcome markets that don't carry
|
|
29
|
+
* Yes/No labels at all.
|
|
30
|
+
*
|
|
31
|
+
* Label-fallback: for any sibling not covered by an MVMO ref (unmatched
|
|
32
|
+
* markets, or older API responses that pre-date the refs), fall back to
|
|
33
|
+
* label matching so we don't regress on the historically-correct cases.
|
|
34
|
+
*/
|
|
19
35
|
export declare const collectEligibleVenueOutcomes: ({ venueMarkets, selectedOutcomeLabel, }: {
|
|
20
36
|
venueMarkets: VenueMarket[];
|
|
21
37
|
selectedOutcomeLabel: string | null | undefined;
|
|
@@ -16,6 +16,22 @@ export type AggregatedOrderbookRows = {
|
|
|
16
16
|
includedOutcomeIds: string[];
|
|
17
17
|
missingOutcomeIds: string[];
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Pick the eligible outcome on each venue-market that corresponds to the
|
|
21
|
+
* user's selected side.
|
|
22
|
+
*
|
|
23
|
+
* MVMO-first: when one of the input markets is the "parent" (the queried
|
|
24
|
+
* market whose selected outcome carries `matchedVenueMarketOutcomes`
|
|
25
|
+
* refs), we walk those refs to align sibling outcomes by id — robust to
|
|
26
|
+
* inversely-framed binaries (e.g. UFC: Polymarket-No (Chimaev) maps via
|
|
27
|
+
* MVMO to Kalshi-Chimaev-Yes, NOT to Kalshi-Chimaev-No despite the
|
|
28
|
+
* matching label) and to multi-outcome markets that don't carry
|
|
29
|
+
* Yes/No labels at all.
|
|
30
|
+
*
|
|
31
|
+
* Label-fallback: for any sibling not covered by an MVMO ref (unmatched
|
|
32
|
+
* markets, or older API responses that pre-date the refs), fall back to
|
|
33
|
+
* label matching so we don't regress on the historically-correct cases.
|
|
34
|
+
*/
|
|
19
35
|
export declare const collectEligibleVenueOutcomes: ({ venueMarkets, selectedOutcomeLabel, }: {
|
|
20
36
|
venueMarkets: VenueMarket[];
|
|
21
37
|
selectedOutcomeLabel: string | null | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agg-build/ui",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.10",
|
|
4
4
|
"description": "Pre-built React component library for the AGG prediction market aggregator. Tailwind-based, themeable, with primitives, event surfaces, trading flows, full pages, and modals.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"license": "MIT",
|