From 4b920220f03dfe58aff4e6a9aea91d2168fa264b Mon Sep 17 00:00:00 2001 From: Sid Date: Thu, 20 Aug 2026 15:46:10 +0530 Subject: [PATCH] chore: update swagger-ui-react to version 5.32.14 and adjust related imports in the build configuration --- package-lock.json | 307 +++++++++--------- packages/bruno-app/package.json | 2 +- packages/bruno-app/rsbuild.config.mjs | 16 +- .../Renderers/Swagger/StyledWrapper.js | 79 ++++- 4 files changed, 233 insertions(+), 171 deletions(-) diff --git a/package-lock.json b/package-lock.json index c830a366a8b..0b05bc7760c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30130,19 +30130,6 @@ "pure-color": "^1.2.0" } }, - "node_modules/react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", - "license": "MIT", - "dependencies": { - "copy-to-clipboard": "^3.3.1", - "prop-types": "^15.8.1" - }, - "peerDependencies": { - "react": "^15.3.0 || 16 || 17 || 18" - } - }, "node_modules/react-debounce-input": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz", @@ -33549,147 +33536,6 @@ "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.12.0" } }, - "node_modules/swagger-ui-react": { - "version": "5.31.2", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.31.2.tgz", - "integrity": "sha512-0BwMRS07mJ30rPSZrjAsZP/vJxWTvIjxiRCm7GAoLQ/0259vy2uHtz+GtVuAbohOpmziE/F4l6QQLf0w34MuQw==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime-corejs3": "^7.27.1", - "@scarf/scarf": "=1.4.0", - "base64-js": "^1.5.1", - "buffer": "^6.0.3", - "classnames": "^2.5.1", - "css.escape": "1.5.1", - "deep-extend": "0.6.0", - "dompurify": "=3.2.6", - "ieee754": "^1.2.1", - "immutable": "^3.x.x", - "js-file-download": "^0.4.12", - "js-yaml": "=4.1.1", - "lodash": "^4.17.21", - "prop-types": "^15.8.1", - "randexp": "^0.5.3", - "randombytes": "^2.1.0", - "react-copy-to-clipboard": "5.1.0", - "react-debounce-input": "=3.3.0", - "react-immutable-proptypes": "2.2.0", - "react-immutable-pure-component": "^2.2.0", - "react-inspector": "^6.0.1", - "react-redux": "^9.2.0", - "react-syntax-highlighter": "^16.0.0", - "redux": "^5.0.1", - "redux-immutable": "^4.0.0", - "remarkable": "^2.0.1", - "reselect": "^5.1.1", - "serialize-error": "^8.1.0", - "sha.js": "^2.4.12", - "swagger-client": "^3.36.2", - "url-parse": "^1.5.10", - "xml": "=1.0.1", - "xml-but-prettier": "^1.0.1", - "zenscroll": "^4.0.2" - }, - "peerDependencies": { - "react": ">=16.8.0 <20", - "react-dom": ">=16.8.0 <20" - } - }, - "node_modules/swagger-ui-react/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/swagger-ui-react/node_modules/immutable": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.4.tgz", - "integrity": "sha512-ZQv17KolYrYmsDoDB8N67zhIKsNi9mGYlk96y/yuxyAqJB2hLzSGSM7k/sB0/ZvO4kx27U9+fBeD/XlLGh/uXQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swagger-ui-react/node_modules/react-redux": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", - "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", - "license": "MIT", - "dependencies": { - "@types/use-sync-external-store": "^0.0.6", - "use-sync-external-store": "^1.4.0" - }, - "peerDependencies": { - "@types/react": "^18.2.25 || ^19", - "react": "^18.0 || ^19", - "redux": "^5.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "redux": { - "optional": true - } - } - }, - "node_modules/swagger-ui-react/node_modules/redux": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" - }, - "node_modules/swagger-ui-react/node_modules/reselect": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", - "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", - "license": "MIT" - }, - "node_modules/swagger-ui-react/node_modules/serialize-error": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", - "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/swagger-ui-react/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -36599,7 +36445,7 @@ "shell-quote": "^1.9.0", "strip-json-comments": "^5.0.1", "styled-components": "^5.3.3", - "swagger-ui-react": "5.31.2", + "swagger-ui-react": "5.32.14", "system": "^2.0.1", "tiptap-markdown": "^0.8.10", "url": "^0.11.3", @@ -37892,6 +37738,30 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "packages/bruno-app/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "packages/bruno-app/node_modules/caniuse-lite": { "version": "1.0.30001718", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", @@ -38057,6 +37927,12 @@ "node": ">=12.0.0" } }, + "packages/bruno-app/node_modules/immutable": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.9.tgz", + "integrity": "sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==", + "license": "MIT" + }, "packages/bruno-app/node_modules/jsonpath-plus": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", @@ -38172,6 +38048,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "packages/bruno-app/node_modules/react-copy-to-clipboard": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz", + "integrity": "sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==", + "license": "MIT", + "dependencies": { + "copy-to-clipboard": "^3.3.3", + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "react": ">=15.3.0" + } + }, "packages/bruno-app/node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -38192,6 +38081,18 @@ "react-dom": ">=16 || >=17 || >= 18 || >=19" } }, + "packages/bruno-app/node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "packages/bruno-app/node_modules/reselect": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", + "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", + "license": "MIT" + }, "packages/bruno-app/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -38203,6 +38104,102 @@ "node": ">=10" } }, + "packages/bruno-app/node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/bruno-app/node_modules/swagger-ui-react": { + "version": "5.32.14", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.32.14.tgz", + "integrity": "sha512-6LAVBeC78DplbJ7kutm/YeBYo22nPzGOca4bIZAvQG4w2eSetnYDdazaUfY0qzQUlg/H90HnYZX3rg67EmENOw==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.27.1", + "@scarf/scarf": "=1.4.0", + "base64-js": "^1.5.1", + "buffer": "^6.0.3", + "classnames": "^2.5.1", + "css.escape": "1.5.1", + "deep-extend": "0.6.0", + "dompurify": "^3.4.13", + "ieee754": "^1.2.1", + "immutable": "^4.3.9", + "js-file-download": "^0.4.12", + "js-yaml": "=4.3.1", + "lodash": "^4.18.1", + "prop-types": "^15.8.1", + "randexp": "^0.5.3", + "randombytes": "^2.1.0", + "react-copy-to-clipboard": "5.1.1", + "react-debounce-input": "=3.3.0", + "react-immutable-proptypes": "2.2.0", + "react-immutable-pure-component": "^2.2.0", + "react-inspector": "^6.0.1", + "react-redux": "^9.3.0", + "react-syntax-highlighter": "^16.0.0", + "redux": "^5.0.1", + "redux-immutable": "^4.0.0", + "remarkable": "^2.0.1", + "reselect": "^5.1.1", + "serialize-error": "^8.1.0", + "sha.js": "^2.4.12", + "swagger-client": "^3.38.0", + "url-parse": "^1.5.10", + "xml": "=1.0.1", + "xml-but-prettier": "^1.0.1", + "zenscroll": "^4.0.2" + }, + "peerDependencies": { + "react": ">=16.8.0 <20", + "react-dom": ">=16.8.0 <20" + } + }, + "packages/bruno-app/node_modules/swagger-ui-react/node_modules/react-redux": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", + "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", + "redux": "^5.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "packages/bruno-app/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "packages/bruno-app/node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", diff --git a/packages/bruno-app/package.json b/packages/bruno-app/package.json index ad041529c52..e151610ec34 100644 --- a/packages/bruno-app/package.json +++ b/packages/bruno-app/package.json @@ -110,7 +110,7 @@ "shell-quote": "^1.9.0", "strip-json-comments": "^5.0.1", "styled-components": "^5.3.3", - "swagger-ui-react": "5.31.2", + "swagger-ui-react": "5.32.14", "system": "^2.0.1", "tiptap-markdown": "^0.8.10", "url": "^0.11.3", diff --git a/packages/bruno-app/rsbuild.config.mjs b/packages/bruno-app/rsbuild.config.mjs index 6d5eb3313a9..51c4f65415f 100644 --- a/packages/bruno-app/rsbuild.config.mjs +++ b/packages/bruno-app/rsbuild.config.mjs @@ -1,3 +1,5 @@ +import path from 'node:path'; +import { createRequire } from 'node:module'; import { defineConfig } from '@rsbuild/core'; import { pluginReact } from '@rsbuild/plugin-react'; import { pluginBabel } from '@rsbuild/plugin-babel'; @@ -6,6 +8,10 @@ import { pluginSass } from '@rsbuild/plugin-sass'; import { pluginNodePolyfill } from '@rsbuild/plugin-node-polyfill'; import { pluginRemoteImages } from './plugins/remote-images/index.mjs'; +const require = createRequire(import.meta.url); +const swaggerUiDir = path.dirname(require.resolve('swagger-ui-react')); +const swaggerImmutable = require.resolve('immutable', { paths: [swaggerUiDir] }); + const remoteImageDomains = (process.env.BRUNO_REMOTE_IMAGE_DOMAINS || 'd3icksk7srk4uh.cloudfront.net') .split(',') .map((d) => d.trim()) @@ -34,7 +40,12 @@ export default defineConfig({ '**/test-utils/**', '**/*.test.*', '**/*.spec.*' - ] + ], + // swagger-ui-react needs immutable@4 (CJS default export). sass hoists + // immutable@5 to the repo root; redux-immutable is hoisted there too. + alias: { + immutable$: swaggerImmutable + } }, html: { title: 'Bruno' @@ -78,5 +89,4 @@ export default defineConfig({ } }, } -}); -`` \ No newline at end of file +}); \ No newline at end of file diff --git a/packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/StyledWrapper.js b/packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/StyledWrapper.js index 66eb74c5c78..dd484b6fee8 100644 --- a/packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/StyledWrapper.js +++ b/packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/StyledWrapper.js @@ -156,13 +156,18 @@ const StyledWrapper = styled.div` font-size: ${(props) => props.theme.font.size.xs}; color: ${(props) => props.theme.colors.text.muted}; } + } - .opblock-summary-control { - svg { - fill: ${(props) => props.theme.colors.text.muted}; - width: 14px; - height: 14px; - } + .opblock-control-arrow { + color: inherit; + background: none; + border: none; + + svg, + svg path { + fill: ${(props) => props.theme.text}; + width: 12px; + height: 12px; } } @@ -216,8 +221,12 @@ const StyledWrapper = styled.div` /* Lock / authorization icons */ .authorization__btn { + color: inherit; + background: none; + border: none; - svg { + svg, + svg path { fill: ${(props) => props.theme.colors.text.muted}; width: 14px; height: 14px; @@ -282,7 +291,17 @@ const StyledWrapper = styled.div` padding: 6px 10px; margin: 0; - svg { + svg, + svg path { + fill: ${(props) => props.theme.colors.text.muted}; + width: 16px; + height: 16px; + } + } + + .models-control { + svg, + svg path { fill: ${(props) => props.theme.colors.text.muted}; width: 16px; height: 16px; @@ -372,6 +391,7 @@ const StyledWrapper = styled.div` .models-control, .opblock-summary, .opblock-summary-control, + .opblock-control-arrow, .opblock-tag { outline: none !important; box-shadow: none !important; @@ -402,7 +422,8 @@ const StyledWrapper = styled.div` } /* chevron / arrow icon */ - .json-schema-2020-12-accordion__icon { + .json-schema-2020-12-accordion__icon, + .json-schema-2020-12-accordion__icon path { fill: ${(props) => props.theme.colors.text.muted} !important; } @@ -636,18 +657,30 @@ const StyledWrapper = styled.div` } /* ── SVGs / icons ── */ - svg { + svg:not(.opblock-summary-method) { fill: ${(props) => props.theme.colors.text.muted}; } - svg.arrow { + svg:not(.opblock-summary-method) path { + fill: currentColor; + } + + svg.arrow, + svg.arrow path { fill: ${(props) => props.theme.text}; width: 12px; height: 12px; margin-left: 4px; } - .expand-operation svg { + .expand-operation { + color: inherit; + background: none; + border: none; + } + + .expand-operation svg, + .expand-operation svg path { fill: ${(props) => props.theme.colors.text.muted}; width: 14px; height: 14px; @@ -723,6 +756,21 @@ const StyledWrapper = styled.div` } } + .opblock-summary .view-line-link.copy-to-clipboard { + min-width: 0; + overflow: hidden; + } + + .view-line-link.copy-to-clipboard button { + background: none; + border: none; + padding: 0; + height: auto; + min-width: unset; + flex-grow: unset; + flex-shrink: unset; + } + /* Dialog / modal overrides */ .dialog-ux { .modal-ux { @@ -866,8 +914,15 @@ const StyledWrapper = styled.div` } /* Authorize / Close buttons */ + .auth-btn-wrapper { + display: flex; + gap: 8px; + margin-top: 12px; + } + .btn-done, .auth-btn-wrapper .btn { + margin: 0; font-size: ${(props) => props.theme.font.size.sm}; border-radius: 4px; padding: 6px 16px;