diff --git a/package.json b/package.json index ebe1af53..2c46fdd2 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "ts-jest": "^29.0.5" }, "scripts": { + "setup": "node ./scripts/setup.js", "dev": "concurrently --kill-others \"npm run dev:web\" \"npm run dev:electron\"", "dev:web": "npm run dev --workspace=packages/bruno-app", "build:web": "npm run build --workspace=packages/bruno-app", @@ -51,6 +52,6 @@ "prepare": "husky install" }, "overrides": { - "rollup":"3.29.5" + "rollup": "3.29.5" } } diff --git a/packages/bruno-app/src/providers/ReduxStore/slices/global-environments.js b/packages/bruno-app/src/providers/ReduxStore/slices/global-environments.js index 77f46912..def88f2b 100644 --- a/packages/bruno-app/src/providers/ReduxStore/slices/global-environments.js +++ b/packages/bruno-app/src/providers/ReduxStore/slices/global-environments.js @@ -191,7 +191,7 @@ export const globalEnvironmentsUpdateEvent = ({ globalEnvironmentVariables }) => // update existing values variables = variables?.map?.(variable => ({ ...variable, - value: stringifyIfNot(globalEnvironmentVariables?.[variable?.name]) + value: globalEnvironmentVariables?.[variable?.name] })); // add new env values @@ -201,7 +201,7 @@ export const globalEnvironmentsUpdateEvent = ({ globalEnvironmentVariables }) => variables.push({ uid: uuid(), name: key, - value: stringifyIfNot(value), + value, type: 'text', secret: false, enabled: true diff --git a/packages/bruno-app/src/utils/collections/index.js b/packages/bruno-app/src/utils/collections/index.js index 3a691e53..d770c60a 100644 --- a/packages/bruno-app/src/utils/collections/index.js +++ b/packages/bruno-app/src/utils/collections/index.js @@ -797,7 +797,7 @@ export const getGlobalEnvironmentVariables = ({ globalEnvironments, activeGlobal const environment = globalEnvironments?.find(env => env?.uid === activeGlobalEnvironmentUid); if (environment) { each(environment.variables, (variable) => { - if (variable.name && variable.value && variable.enabled) { + if (variable.name && variable.enabled) { variables[variable.name] = variable.value; } }); diff --git a/packages/bruno-app/src/utils/importers/common.js b/packages/bruno-app/src/utils/importers/common.js index f9f59425..e12e829b 100644 --- a/packages/bruno-app/src/utils/importers/common.js +++ b/packages/bruno-app/src/utils/importers/common.js @@ -80,9 +80,9 @@ export const transformItemsInCollection = (collection) => { // from 5 feb 2024, multipartFormData needs to have a type // this was introduced when we added support for file uploads // below logic is to make older collection exports backward compatible - let multipartFormData = _.get(item, 'request.body.multipartForm'); + let multipartFormData = get(item, 'request.body.multipartForm'); if (multipartFormData) { - _.each(multipartFormData, (form) => { + each(multipartFormData, (form) => { if (!form.type) { form.type = 'text'; } diff --git a/packages/bruno-electron/src/ipc/collection.js b/packages/bruno-electron/src/ipc/collection.js index c1ad9690..89832489 100644 --- a/packages/bruno-electron/src/ipc/collection.js +++ b/packages/bruno-electron/src/ipc/collection.js @@ -349,10 +349,10 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection // rename item ipcMain.handle('renderer:rename-item', async (event, oldPath, newPath, newName) => { const tempDir = path.join(os.tmpdir(), `temp-folder-${Date.now()}`); - const parentDir = path.dirname(oldPath); + // const parentDir = path.dirname(oldPath); const isWindowsOSAndNotWSLAndItemHasSubDirectories = isDirectory(oldPath) && isWindowsOS() && !isWSLPath(oldPath) && hasSubDirectories(oldPath); - let parentDirUnwatched = false; - let parentDirRewatched = false; + // let parentDirUnwatched = false; + // let parentDirRewatched = false; try { // Normalize paths if they are WSL paths @@ -376,8 +376,8 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection moveRequestUid(bruFile, newBruFilePath); } - watcher.unlinkItemPathInWatcher(parentDir); - parentDirUnwatched = true; + // watcher.unlinkItemPathInWatcher(parentDir); + // parentDirUnwatched = true; /** * If it is windows OS @@ -396,8 +396,8 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection } else { await fs.renameSync(oldPath, newPath); } - watcher.addItemPathInWatcher(parentDir); - parentDirRewatched = true; + // watcher.addItemPathInWatcher(parentDir); + // parentDirRewatched = true; return newPath; } @@ -424,9 +424,9 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection } catch (error) { // in case an error occurs during the rename file operations after unlinking the parent dir // and the rewatch fails, we need to add it back to watcher - if (parentDirUnwatched && !parentDirRewatched) { - watcher.addItemPathInWatcher(parentDir); - } + // if (parentDirUnwatched && !parentDirRewatched) { + // watcher.addItemPathInWatcher(parentDir); + // } // in case the rename file operations fails, and we see that the temp dir exists // and the old path does not exist, we need to restore the data from the temp dir to the old path diff --git a/scripts/setup.js b/scripts/setup.js new file mode 100644 index 00000000..47d67909 --- /dev/null +++ b/scripts/setup.js @@ -0,0 +1,95 @@ +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const icons = { + clean: '๐Ÿงน', + delete: '๐Ÿ—‘๏ธ', + install: '๐Ÿ“ฆ', + build: '๐Ÿ”จ', + success: 'โœ…', + error: 'โŒ', + working: 'โšก' +}; + +const execCommand = (command, description) => { + try { + console.log(`\n${icons.working} ${description}...`); + execSync(command, { stdio: 'inherit' }); + console.log(`${icons.success} ${description} completed`); + } catch (error) { + console.error(`${icons.error} ${description} failed`); + throw error; + } +}; + +const glob = function (startPath, pattern) { + let results = []; + + // Ensure start path exists + if (!fs.existsSync(startPath)) { + return results; + } + + const files = fs.readdirSync(startPath); + for (const file of files) { + const filename = path.join(startPath, file); + const stat = fs.lstatSync(filename); + + // If directory, recurse into it + if (stat.isDirectory()) { + // Skip node_modules recursion to avoid unnecessary deep scanning + if (file === 'node_modules') { + if (file === pattern) { + results.push(filename); + } + continue; + } + results = results.concat(glob(filename, pattern)); + } + + // If file matches pattern, add to results + if (file === pattern) { + results.push(filename); + } + } + + return results; +}; + +async function setup() { + try { + // Clean up node_modules (if exists) + console.log(`\n${icons.clean} Cleaning up node_modules directories...`); + const nodeModulesPaths = glob('.', 'node_modules'); + for (const dir of nodeModulesPaths) { + console.log(`${icons.delete} Removing ${dir}`); + fs.rmSync(dir, { recursive: true, force: true }); + } + + // Install dependencies + execCommand('npm i --legacy-peer-deps', 'Installing dependencies'); + + // Build packages + execCommand('npm run build:graphql-docs', 'Building graphql-docs'); + execCommand('npm run build:bruno-query', 'Building bruno-query'); + execCommand('npm run build:bruno-common', 'Building bruno-common'); + + // Bundle JS sandbox libraries + execCommand( + 'npm run sandbox:bundle-libraries --workspace=packages/bruno-js', + 'Bundling JS sandbox libraries' + ); + + console.log(`\n${icons.success} Setup completed successfully!\n`); + } catch (error) { + console.error(`\n${icons.error} Setup failed:`); + console.error(error); + process.exit(1); + } +} + +setup().catch(error => { + console.error(error); + process.exit(1); +});