Size:
{item?.size?.toFixed?.(2)} MB
@@ -67,7 +67,7 @@ const RequestNotLoaded = ({ collection, item }) => {
{item?.loading && (
<>
-
+
Loading...
diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
index 5d994a606..905576a2f 100644
--- a/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
+++ b/packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
@@ -59,7 +59,9 @@ export const collectionsSlice = createSlice({
updateCollectionMountStatus: (state, action) => {
const collection = findCollectionByUid(state.collections, action.payload.collectionUid);
if (collection) {
- collection.mountStatus = action.payload.mountStatus;
+ if (action.payload.mountStatus) {
+ collection.mountStatus = action.payload.mountStatus;
+ }
}
},
setCollectionSecurityConfig: (state, action) => {
diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js
index e119553e4..3ac612c62 100644
--- a/packages/bruno-app/src/utils/collections/index.js
+++ b/packages/bruno-app/src/utils/collections/index.js
@@ -137,6 +137,20 @@ export const areItemsLoading = (folder) => {
}, false);
}
+export const getItemsLoadStats = (folder) => {
+ let loadingCount = 0;
+ let flattenedItems = flattenItems(folder.items);
+ flattenedItems?.forEach(i => {
+ if(i?.loading) {
+ loadingCount += 1;
+ }
+ });
+ return {
+ loading: loadingCount,
+ total: flattenedItems?.length
+ };
+}
+
export const moveCollectionItem = (collection, draggedItem, targetItem) => {
let draggedItemParent = findParentItemInCollection(collection, draggedItem.uid);
diff --git a/packages/bruno-electron/src/bru/workers/scripts/bru-to-json.js b/packages/bruno-electron/src/bru/workers/scripts/bru-to-json.js
index c1bbb44e7..92086c4b6 100644
--- a/packages/bruno-electron/src/bru/workers/scripts/bru-to-json.js
+++ b/packages/bruno-electron/src/bru/workers/scripts/bru-to-json.js
@@ -1,14 +1,16 @@
-const { workerData, parentPort } = require('worker_threads');
+const { parentPort } = require('worker_threads');
const {
bruToJsonV2,
} = require('@usebruno/lang');
-try {
- const bru = workerData;
- const json = bruToJsonV2(bru);
- parentPort.postMessage(json);
-}
-catch(error) {
- console.error(error);
- parentPort.postMessage({ error: error?.message });
-}
\ No newline at end of file
+parentPort.on('message', (workerData) => {
+ try {
+ const bru = workerData;
+ const json = bruToJsonV2(bru);
+ parentPort.postMessage(json);
+ }
+ catch(error) {
+ console.error(error);
+ parentPort.postMessage({ error: error?.message });
+ }
+});
\ No newline at end of file
diff --git a/packages/bruno-electron/src/bru/workers/scripts/json-to-bru.js b/packages/bruno-electron/src/bru/workers/scripts/json-to-bru.js
index e08be60b9..c2a4f88e4 100644
--- a/packages/bruno-electron/src/bru/workers/scripts/json-to-bru.js
+++ b/packages/bruno-electron/src/bru/workers/scripts/json-to-bru.js
@@ -1,13 +1,16 @@
-const { workerData, parentPort } = require('worker_threads');
+const { parentPort } = require('worker_threads');
const {
jsonToBruV2,
} = require('@usebruno/lang');
-try {
- const json = workerData;
- const bru = jsonToBruV2(json);
- parentPort.postMessage(bru);
-}
-catch(error) {
- console.error(error);
- parentPort.postMessage({ error: error?.message });
-}
\ No newline at end of file
+
+parentPort.on('message', (workerData) => {
+ try {
+ const json = workerData;
+ const bru = jsonToBruV2(json);
+ parentPort.postMessage(bru);
+ }
+ catch(error) {
+ console.error(error);
+ parentPort.postMessage({ error: error?.message });
+ }
+});
\ No newline at end of file
diff --git a/packages/bruno-electron/src/ipc/collection.js b/packages/bruno-electron/src/ipc/collection.js
index 27a34d861..43a3a1283 100644
--- a/packages/bruno-electron/src/ipc/collection.js
+++ b/packages/bruno-electron/src/ipc/collection.js
@@ -40,9 +40,9 @@ const collectionSecurityStore = new CollectionSecurityStore();
const uiStateSnapshotStore = new UiStateSnapshotStore();
// size and file count limits to determine whether the bru files in the collection should be loaded asynchronously or not.
-const MAX_COLLECTION_SIZE_IN_MB = 5;
-const MAX_SINGLE_FILE_SIZE_IN_COLLECTION_IN_MB = 2;
-const MAX_COLLECTION_FILES_COUNT = 100;
+const MAX_COLLECTION_SIZE_IN_MB = 20;
+const MAX_SINGLE_FILE_SIZE_IN_COLLECTION_IN_MB = 5;
+const MAX_COLLECTION_FILES_COUNT = 2000;
const envHasSecrets = (environment = {}) => {
const secrets = _.filter(environment.variables, (v) => v.secret);
diff --git a/packages/bruno-electron/src/workers/index.js b/packages/bruno-electron/src/workers/index.js
index 04836e9fc..d1d1a1b74 100644
--- a/packages/bruno-electron/src/workers/index.js
+++ b/packages/bruno-electron/src/workers/index.js
@@ -4,8 +4,18 @@ class WorkerQueue {
constructor() {
this.queue = [];
this.isProcessing = false;
+ this.workers = {};
}
+ async getWorkerForScriptPath(scriptPath) {
+ if (!this.workers) this.workers = {};
+ let worker = this.workers[scriptPath];
+ if (!worker || worker.threadId === -1) {
+ this.workers[scriptPath] = worker = new Worker(scriptPath);
+ }
+ return worker;
+ }
+
async enqueue(task) {
const { priority, scriptPath, data } = task;
@@ -36,22 +46,20 @@ class WorkerQueue {
}
async runWorker({ scriptPath, data }) {
- return new Promise((resolve, reject) => {
- const worker = new Worker(scriptPath, { workerData: data });
+ return new Promise(async (resolve, reject) => {
+ let worker = await this.getWorkerForScriptPath(scriptPath);
+ worker.postMessage(data);
worker.on('message', (data) => {
if (data?.error) {
reject(new Error(data?.error));
}
resolve(data);
- worker.terminate();
});
worker.on('error', (error) => {
reject(error);
- worker.terminate();
});
worker.on('exit', (code) => {
reject(new Error(`stopped with ${code} exit code`));
- worker.terminate();
});
});
}