add collection and folder data to exported bruno collection json (#2560)

* add collection and folder data to exported bruno collection json

* folder root data order
This commit is contained in:
lohit 2024-07-04 13:18:40 +05:30 committed by GitHub
parent 71353b0404
commit 2aa7d26a89
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 73 additions and 11 deletions

View File

@ -380,6 +380,25 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {}
} }
} }
if (si?.root) {
di.root = {
request: {
headers: si?.root?.request?.headers,
script: si?.root?.request?.script,
vars: si?.root?.request?.vars,
tests: si?.root?.request?.tests
},
docs: si?.root?.request?.docs,
meta: {
name: si?.root?.meta?.name
}
};
di.root.request.auth = {
mode: get(si.root.request, 'auth.mode', 'none')
};
}
if (si.type === 'js') { if (si.type === 'js') {
di.fileContent = si.raw; di.fileContent = si.raw;
} }
@ -402,6 +421,7 @@ export const transformCollectionToSaveToExportAsFile = (collection, options = {}
collectionToSave.items = []; collectionToSave.items = [];
collectionToSave.activeEnvironmentUid = collection.activeEnvironmentUid; collectionToSave.activeEnvironmentUid = collection.activeEnvironmentUid;
collectionToSave.environments = collection.environments || []; collectionToSave.environments = collection.environments || [];
collectionToSave.root = collection.root || {};
collectionToSave.brunoConfig = cloneDeep(collection?.brunoConfig); collectionToSave.brunoConfig = cloneDeep(collection?.brunoConfig);

View File

@ -13,7 +13,6 @@ const collectionBruToJson = (bru) => {
const transformedJson = { const transformedJson = {
request: { request: {
params: _.get(json, 'params', []),
headers: _.get(json, 'headers', []), headers: _.get(json, 'headers', []),
auth: _.get(json, 'auth', {}), auth: _.get(json, 'auth', {}),
script: _.get(json, 'script', {}), script: _.get(json, 'script', {}),

View File

@ -14,7 +14,6 @@ const collectionBruToJson = (bru) => {
const transformedJson = { const transformedJson = {
request: { request: {
params: _.get(json, 'params', []),
headers: _.get(json, 'headers', []), headers: _.get(json, 'headers', []),
auth: _.get(json, 'auth', {}), auth: _.get(json, 'auth', {}),
script: _.get(json, 'script', {}), script: _.get(json, 'script', {}),
@ -29,8 +28,7 @@ const collectionBruToJson = (bru) => {
// in the future, all of this will be replaced by standard bru lang // in the future, all of this will be replaced by standard bru lang
if (json.meta) { if (json.meta) {
transformedJson.meta = { transformedJson.meta = {
name: json.meta.name, name: json.meta.name
seq: json.meta.seq
}; };
} }
@ -43,7 +41,6 @@ const collectionBruToJson = (bru) => {
const jsonToCollectionBru = (json) => { const jsonToCollectionBru = (json) => {
try { try {
const collectionBruJson = { const collectionBruJson = {
params: _.get(json, 'request.params', []),
headers: _.get(json, 'request.headers', []), headers: _.get(json, 'request.headers', []),
auth: _.get(json, 'request.auth', {}), auth: _.get(json, 'request.auth', {}),
script: { script: {
@ -61,10 +58,9 @@ const jsonToCollectionBru = (json) => {
// add meta if it exists // add meta if it exists
// this is only for folder bru file // this is only for folder bru file
// in the future, all of this will be replaced by standard bru lang // in the future, all of this will be replaced by standard bru lang
if (json.meta) { if (json?.meta) {
collectionBruJson.meta = { collectionBruJson.meta = {
name: json.meta.name, name: json.meta.name
seq: json.meta.seq
}; };
} }
@ -123,7 +119,6 @@ const bruToJson = (bru) => {
} }
const sequence = _.get(json, 'meta.seq'); const sequence = _.get(json, 'meta.seq');
const transformedJson = { const transformedJson = {
type: requestType, type: requestType,
name: _.get(json, 'meta.name'), name: _.get(json, 'meta.name'),
@ -170,11 +165,12 @@ const jsonToBru = (json) => {
type = 'http'; type = 'http';
} }
const sequence = _.get(json, 'meta.seq');
const bruJson = { const bruJson = {
meta: { meta: {
name: _.get(json, 'name'), name: _.get(json, 'name'),
type: type, type: type,
seq: _.get(json, 'seq') seq: !isNaN(sequence) ? Number(sequence) : 1
}, },
http: { http: {
method: _.lowerCase(_.get(json, 'request.method')), method: _.lowerCase(_.get(json, 'request.method')),

View File

@ -439,6 +439,11 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection
const folderPath = path.join(currentPath, item.name); const folderPath = path.join(currentPath, item.name);
fs.mkdirSync(folderPath); fs.mkdirSync(folderPath);
const folderBruFilePath = path.join(folderPath, 'folder.bru');
const folderContent = jsonToCollectionBru(item.root);
console.log('folder COntent', item.root, folderContent);
fs.writeFileSync(folderBruFilePath, folderContent);
if (item.items && item.items.length) { if (item.items && item.items.length) {
parseCollectionItems(item.items, folderPath); parseCollectionItems(item.items, folderPath);
} }
@ -488,6 +493,9 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection
// Write the Bruno configuration to a file // Write the Bruno configuration to a file
await writeFile(path.join(collectionPath, 'bruno.json'), stringifiedBrunoConfig); await writeFile(path.join(collectionPath, 'bruno.json'), stringifiedBrunoConfig);
const collectionContent = jsonToCollectionBru(collection.root);
await writeFile(path.join(collectionPath, 'collection.bru'), collectionContent);
mainWindow.webContents.send('main:collection-opened', collectionPath, uid, brunoConfig); mainWindow.webContents.send('main:collection-opened', collectionPath, uid, brunoConfig);
ipcMain.emit('main:collection-opened', mainWindow, collectionPath, uid, brunoConfig); ipcMain.emit('main:collection-opened', mainWindow, collectionPath, uid, brunoConfig);

View File

@ -231,6 +231,39 @@ const requestSchema = Yup.object({
.noUnknown(true) .noUnknown(true)
.strict(); .strict();
const folderRootSchema = Yup.object({
request: Yup.object({
headers: Yup.array().of(keyValueSchema).required('headers are required'),
auth: authSchema,
script: Yup.object({
req: Yup.string().nullable(),
res: Yup.string().nullable()
})
.noUnknown(true)
.strict(),
vars: Yup.object({
req: Yup.array().of(varsSchema).nullable(),
res: Yup.array().of(varsSchema).nullable()
})
.noUnknown(true)
.strict()
.nullable(),
tests: Yup.string().nullable()
})
.noUnknown(true)
.strict()
.nullable(),
docs: Yup.string().nullable(),
meta: Yup.object({
name: Yup.string().nullable()
})
.noUnknown(true)
.strict()
.nullable()
})
.noUnknown(true)
.nullable();
const itemSchema = Yup.object({ const itemSchema = Yup.object({
uid: uidSchema, uid: uidSchema,
type: Yup.string().oneOf(['http-request', 'graphql-request', 'folder', 'js']).required('type is required'), type: Yup.string().oneOf(['http-request', 'graphql-request', 'folder', 'js']).required('type is required'),
@ -248,6 +281,11 @@ const itemSchema = Yup.object({
// For all other types, the fileContent field is not required and can be null. // For all other types, the fileContent field is not required and can be null.
otherwise: Yup.string().nullable() otherwise: Yup.string().nullable()
}), }),
root: Yup.mixed().when('type', {
is: 'folder',
then: folderRootSchema,
otherwise: Yup.mixed().nullable().notRequired()
}),
items: Yup.lazy(() => Yup.array().of(itemSchema)), items: Yup.lazy(() => Yup.array().of(itemSchema)),
filename: Yup.string().nullable(), filename: Yup.string().nullable(),
pathname: Yup.string().nullable() pathname: Yup.string().nullable()
@ -270,7 +308,8 @@ const collectionSchema = Yup.object({
items: Yup.array() items: Yup.array()
}), }),
collectionVariables: Yup.object(), collectionVariables: Yup.object(),
brunoConfig: Yup.object() brunoConfig: Yup.object(),
root: folderRootSchema
}) })
.noUnknown(true) .noUnknown(true)
.strict(); .strict();