feat: implement filtering of transient items across collection operations (#7062)

- Added `filterTransientItems` utility to recursively remove transient items from collections.
- Updated export functions for OpenCollection and Postman to filter out transient items before export.
- Enhanced collection handling in various components to skip transient requests during processing.
- Adjusted RunConfigurationPanel to exclude transient items from request handling.
This commit is contained in:
Chirag Chandrashekhar
2026-02-09 11:48:50 +05:30
committed by Bijin A B
parent 4a0000e10f
commit 3080c3e144
7 changed files with 50 additions and 4 deletions

View File

@@ -164,7 +164,7 @@ const RunConfigurationPanel = ({ collection, selectedItems, setSelectedItems })
if (!items?.length) return;
items.forEach((item) => {
if (isItemARequest(item) && !item.partial) {
if (isItemARequest(item) && !item.partial && !item.isTransient) {
const relativePath = path.relative(collection.pathname, path.dirname(item.pathname));
const folderPath = relativePath !== '.' ? relativePath : '';

View File

@@ -1,6 +1,7 @@
import * as FileSaver from 'file-saver';
import get from 'lodash/get';
import each from 'lodash/each';
import { filterTransientItems } from 'utils/collections';
export const deleteUidsInItems = (items) => {
each(items, (item) => {
@@ -101,6 +102,9 @@ export const exportCollection = (collection, version) => {
delete collection.processEnvVariables;
delete collection.workspaceProcessEnvVariables;
// filter out transient items
collection.items = filterTransientItems(collection.items);
deleteUidsInItems(collection.items);
deleteUidsInEnvs(collection.environments);
deleteSecretsInEnvs(collection.environments);

View File

@@ -294,6 +294,11 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {}
return;
}
// Skip transient requests
if (si.isTransient) {
return;
}
const isGrpcRequest = si.type === 'grpc-request';
const di = {
@@ -1159,7 +1164,7 @@ const getPathParams = (item) => {
export const getTotalRequestCountInCollection = (collection) => {
let count = 0;
each(collection.items, (item) => {
if (isItemARequest(item)) {
if (isItemARequest(item) && !item.isTransient) {
count++;
} else if (isItemAFolder(item)) {
count += getTotalRequestCountInCollection(item);
@@ -1468,7 +1473,7 @@ export const getRequestItemsForCollectionRun = ({ recursive, items = [], tags })
}
const requestTypes = ['http-request', 'graphql-request'];
requestItems = requestItems.filter((request) => requestTypes.includes(request.type));
requestItems = requestItems.filter((request) => requestTypes.includes(request.type) && !request.isTransient);
if (tags && tags.include && tags.exclude) {
const includeTags = tags.include ? tags.include : [];
@@ -1708,3 +1713,27 @@ export const generateUniqueRequestName = async (collection, baseName = 'Untitled
export const isItemTransientRequest = (item) => {
return isItemARequest(item) && item?.isTransient;
};
/**
* Recursively filter out transient items from a collection's items array.
* Used for collection runner, exports, and other operations that shouldn't include transient requests.
* @param {Array} items - The items array to filter
* @returns {Array} A new array with transient items removed
*/
export const filterTransientItems = (items) => {
if (!items || !Array.isArray(items)) {
return [];
}
return items
.filter((item) => !item?.isTransient)
.map((item) => {
if (item.items && item.items.length > 0) {
return {
...item,
items: filterTransientItems(item.items)
};
}
return item;
});
};

View File

@@ -2,8 +2,12 @@ import * as FileSaver from 'file-saver';
import jsyaml from 'js-yaml';
import { brunoToOpenCollection } from '@usebruno/converters';
import { sanitizeName } from 'utils/common/regex';
import { filterTransientItems } from 'utils/collections';
export const exportCollection = (collection, version) => {
// Filter out transient items before export
collection.items = filterTransientItems(collection.items);
const openCollection = brunoToOpenCollection(collection);
if (!openCollection.extensions) {

View File

@@ -1,7 +1,11 @@
import * as FileSaver from 'file-saver';
import { brunoToPostman } from '@usebruno/converters';
import { filterTransientItems } from 'utils/collections';
export const exportCollection = (collection) => {
// Filter out transient items before export
collection.items = filterTransientItems(collection.items);
const collectionToExport = brunoToPostman(collection);
const fileName = `${collection.name}.json`;

View File

@@ -1193,7 +1193,8 @@ const registerNetworkIpc = (mainWindow) => {
folderRequests = getAllRequestsInFolderRecursively(sortedFolder);
} else {
each(folder.items, (item) => {
if (item.request) {
// Skip transient requests
if (item.request && !item.isTransient) {
folderRequests.push(item);
}
});

View File

@@ -575,6 +575,10 @@ const getAllRequestsInFolderRecursively = (folder = {}) => {
if (folder.items && folder.items.length) {
folder.items.forEach((item) => {
// Skip transient requests
if (item.isTransient) {
return;
}
if (item.type !== 'folder') {
requests.push(item);
} else {