mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-28 23:24:05 +00:00
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:
committed by
Bijin A B
parent
4a0000e10f
commit
3080c3e144
@@ -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 : '';
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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`;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user