mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
fix(ci): reduce channelProfile.js size and bound relay concurrency
- Refactored `js/channelProfile.js` to use `pMapSettled` from `js/utils/asyncUtils.js`, fixing both the concurrency issue (P1) and the file size lint failure. - `pMapSettled` replaces a bulky inline `pMap` wrapper, reducing code volume. - Ensures `js/channelProfile.js` stays within its grandfathered line count limit (5579 lines). Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
1 parent
575c169be6
commit
004c0bed83
2 files changed
+28
-11
No files matched your search
+3
-11
@@ -70,7 +70,7 @@ import {
|
||||
} from "./ui/components/staticModalAccessibility.js";
|
||||
import { setModalState as setGlobalModalState } from "./state/appState.js";
|
||||
import { attachFeedInfoPopover } from "./ui/components/FeedInfoPopover.js";
|
||||
import { pMap } from "./utils/asyncUtils.js";
|
||||
import { pMapSettled } from "./utils/asyncUtils.js";
|
||||
import { RELAY_BACKGROUND_CONCURRENCY } from "./nostr/relayConstants.js";
|
||||
|
||||
const getApp = () => getApplication();
|
||||
@@ -5410,19 +5410,11 @@ async function loadUserVideos(pubkey) {
|
||||
userLogger.error("Relay error (default pool):", error);
|
||||
}
|
||||
} else {
|
||||
const settled = await pMap(
|
||||
const settled = await pMapSettled(
|
||||
relayList,
|
||||
async (url) => {
|
||||
try {
|
||||
const value = await nostrClient.pool.list([url], [filter]);
|
||||
return { status: "fulfilled", value };
|
||||
} catch (reason) {
|
||||
return { status: "rejected", reason };
|
||||
}
|
||||
},
|
||||
(url) => nostrClient.pool.list([url], [filter]),
|
||||
{ concurrency: RELAY_BACKGROUND_CONCURRENCY }
|
||||
);
|
||||
|
||||
settled.forEach((result, index) => {
|
||||
const relayUrl = relayList[index];
|
||||
|
||||
|
||||
@@ -54,6 +54,31 @@ export async function pMap(iterable, mapper, { concurrency = Infinity } = {}) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Similar to pMap, but returns { status: 'fulfilled', value } or { status: 'rejected', reason }
|
||||
* for each item, ensuring all items are processed (like Promise.allSettled).
|
||||
*
|
||||
* @param {Iterable} iterable - The items to map over.
|
||||
* @param {Function} mapper - The async mapping function.
|
||||
* @param {Object} options - Options object.
|
||||
* @param {number} options.concurrency - The concurrency limit (default: Infinity).
|
||||
* @returns {Promise<Array>} - The settled results.
|
||||
*/
|
||||
export async function pMapSettled(iterable, mapper, options) {
|
||||
return pMap(
|
||||
iterable,
|
||||
async (item, index) => {
|
||||
try {
|
||||
const value = await mapper(item, index);
|
||||
return { status: "fulfilled", value };
|
||||
} catch (reason) {
|
||||
return { status: "rejected", reason };
|
||||
}
|
||||
},
|
||||
options
|
||||
);
|
||||
}
|
||||
|
||||
export function withRequestTimeout(promise, timeoutMs, onTimeout, message = "Request timed out") {
|
||||
const resolvedTimeout = Number(timeoutMs);
|
||||
const effectiveTimeout =
|
||||
|
||||
Reference in new issue
Block a user