diff --git a/contributing.md b/contributing.md index a474f320..8916dd10 100644 --- a/contributing.md +++ b/contributing.md @@ -1,4 +1,4 @@ -**English** | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | [Español](/contributing_es.md) +**English** | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | [Deutsch](/contributing_de.md) | [Español](/contributing_es.md) ## Lets make bruno better, together !! diff --git a/contributing_de.md b/contributing_de.md new file mode 100644 index 00000000..06909348 --- /dev/null +++ b/contributing_de.md @@ -0,0 +1,37 @@ +[English](/contributing.md) | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | **Deutsch** | [Español](/contributing_es.md) + +## Lass uns Bruno noch besser machen, gemeinsam !! + +Ich freue mich, dass Du Bruno verbessern möchtest. Hier findest Du eine Anleitung, mit der Du Bruno auf Deinem Computer einrichten kannst. + +### Technologie Stack + +Bruno ist mit NextJs und React erstellt. Außerdem benötigen wir electron für die Desktop Version (die lokale Sammlungen unterstützt). + +Bibliotheken die wir benutzen + +- CSS - Tailwind +- Code Editoren - Codemirror +- State Management - Redux +- Icons - Tabler Icons +- Formulare - formik +- Schema Validierung - Yup +- Request Client - axios +- Dateisystem Watcher - chokidar + +### Abhängigkeiten + +Du benötigst [Node v18.x oder die neuste LTS Version](https://nodejs.org/en/) und npm 8.x. Wir benutzen npm workspaces in dem Projekt. + +### Lass uns coden + +Eine Anleitung zum Ausführen einer lokalen Entwicklungsumgebung findest Du in [development.md](docs/development_de.md). + +### Pull Request erstellen + +- Bitte halte die PRs klein und begrenzt auf eine Sache +- Bitte halte Dich beim Erstellen eines Branches an das folgende Format + - feature/[feature name]: Dieser Branch soll Änderungen für ein bestimmtes Feature enthalten + - Beispiel: feature/dark-mode + - bugfix/[bug name]: Dieser Branch soll ausschließlich Bugfixes für einen bestimmten Bug enthalten + - Beispiel: bugfix/bug-1 diff --git a/contributing_es.md b/contributing_es.md index 14fe870b..6874f214 100644 --- a/contributing_es.md +++ b/contributing_es.md @@ -1,4 +1,4 @@ -[English](/contributing.md) | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | **Español** +[English](/contributing.md) | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | [Deutsch](/contributing_de.md) | **Español** ## ¡Juntos, hagamos a Bruno mejor! diff --git a/contributing_ru.md b/contributing_ru.md index 0fabe7fe..8d281f79 100644 --- a/contributing_ru.md +++ b/contributing_ru.md @@ -1,4 +1,4 @@ -[English](/contributing.md) | [Українська](/contributing_ua.md) | **Русский** | [Türkçe](/contributing_tr.md) | [Español](/contributing_es.md) +[English](/contributing.md) | [Українська](/contributing_ua.md) | **Русский** | [Türkçe](/contributing_tr.md) | [Deutsch](/contributing_de.md) | [Español](/contributing_es.md) ## Давайте вместе сделаем Бруно лучше!!! diff --git a/contributing_tr.md b/contributing_tr.md index 5237a084..2ca3f323 100644 --- a/contributing_tr.md +++ b/contributing_tr.md @@ -1,4 +1,4 @@ -[English](/readme.md) | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | **Türkçe** | [Español](/contributing_es.md) +[English](/readme.md) | [Українська](/contributing_ua.md) | [Русский](/contributing_ru.md) | **Türkçe** | [Deutsch](/contributing_de.md) | [Español](/contributing_es.md) ## Bruno'yu birlikte daha iyi hale getirelim !! diff --git a/contributing_ua.md b/contributing_ua.md index 5335f9f5..27740981 100644 --- a/contributing_ua.md +++ b/contributing_ua.md @@ -1,4 +1,4 @@ -[English](/contributing.md) | **Українська** | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | [Español](/contributing_es.md) +[English](/contributing.md) | **Українська** | [Русский](/contributing_ru.md) | [Türkçe](/contributing_tr.md) | [Deutsch](/contributing_de.md) | [Español](/contributing_es.md) ## Давайте зробимо Bruno краще, разом !! diff --git a/docs/development.md b/docs/development.md index b358a218..43cd56d6 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,4 +1,4 @@ -**English** | [Українська](/docs/development_ua.md) | [Русский](/docs/development_ru.md) | [Español](/docs/development_es.md) +**English** | [Українська](/docs/development_ua.md) | [Русский](/docs/development_ru.md) | [Deutsch](/docs/development_de.md) | [Español](/docs/development_es.md) ## Development diff --git a/docs/development_de.md b/docs/development_de.md new file mode 100644 index 00000000..272e649d --- /dev/null +++ b/docs/development_de.md @@ -0,0 +1,55 @@ +[English](/docs/development.md) | [Українська](/docs/development_ua.md) | [Русский](/docs/development_ru.md) | **Deutsch** | [Español](/docs/development_es.md) + +## Entwicklung + +Bruno wird als Desktop-Anwendung entwickelt. Um die App zu starten, musst Du zuerst die NextJs-App in einem Terminal ausführen und anschließend in einem anderen Terminal die Electron-App. + +### Abhängigkeiten + +- NodeJS v18 + +### Lokales Entwickeln + +```bash +# use nodejs 18 version +nvm use + +# install deps +npm i --legacy-peer-deps + +# build graphql docs +npm run build:graphql-docs + +# build bruno query +npm run build:bruno-query + +# run next app (terminal 1) +npm run dev:web + +# run electron app (terminal 2) +npm run dev:electron +``` + +### Troubleshooting + +Es kann sein, dass Du einen `Unsupported platform`-Fehler bekommst, wenn Du `npm install` ausführst. Um dies zu beheben, musst Du `node_modules` und `package-lock.json` löschen und `npm install` erneut ausführen. Dies sollte alle notwendigen Pakete installieren, die zum Ausführen der Anwendung benötigt werden. + +```shell +# Delete node_modules in sub-directories +find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do + rm -rf "$dir" +done + +# Delete package-lock in sub-directories +find . -type f -name "package-lock.json" -delete +``` + +### Testen + +```bash +# bruno-schema +npm test --workspace=packages/bruno-schema + +# bruno-lang +npm test --workspace=packages/bruno-lang +``` diff --git a/docs/development_es.md b/docs/development_es.md index 942e83fc..0718dc93 100644 --- a/docs/development_es.md +++ b/docs/development_es.md @@ -1,4 +1,4 @@ -[English](/docs/development.md) | [Українська](/docs/development_ua.md) | [Русский](/docs/development_ru.md) | **Español** +[English](/docs/development.md) | [Українська](/docs/development_ua.md) | [Русский](/docs/development_ru.md) | [Deutsch](/docs/development_de.md) | **Español** ## Desarrollo diff --git a/docs/development_ru.md b/docs/development_ru.md index a8d7024a..002f238a 100644 --- a/docs/development_ru.md +++ b/docs/development_ru.md @@ -1,4 +1,4 @@ -[English](/docs/development.md) | [Українська](/docs/development_ua.md) | **Русский** | [Español](/docs/development_es.md) +[English](/docs/development.md) | [Українська](/docs/development_ua.md) | **Русский** | [Deutsch](/docs/development_de.md) | [Español](/docs/development_es.md) ## Разработка diff --git a/docs/development_ua.md b/docs/development_ua.md index 286a8539..42fb4ee5 100644 --- a/docs/development_ua.md +++ b/docs/development_ua.md @@ -1,4 +1,4 @@ -[English](/docs/development.md) | **Українська** | [Русский](/docs/development_ru.md) | [Español](/docs/development_es.md) +[English](/docs/development.md) | **Українська** | [Русский](/docs/development_ru.md) | [Deutsch](/docs/development_de.md) | [Español](/docs/development_es.md) ## Розробка diff --git a/package-lock.json b/package-lock.json index f02cb8c4..5dddfd54 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5534,75 +5534,6 @@ "node": ">=10.12.0" } }, - "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/autoprefixer/node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "dev": true, @@ -5998,6 +5929,7 @@ }, "node_modules/browserslist": { "version": "4.21.4", + "dev": true, "funding": [ { "type": "opencollective", @@ -7919,7 +7851,8 @@ "node_modules/electron-to-chromium": { "version": "1.4.554", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", - "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==" + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", + "dev": true }, "node_modules/electron-util": { "version": "0.17.2", @@ -8664,19 +8597,6 @@ "node": ">= 0.6" } }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "peer": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, "node_modules/fresh": { "version": "0.5.2", "license": "MIT", @@ -11856,7 +11776,8 @@ "node_modules/node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -11889,15 +11810,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-url": { "version": "6.1.0", "dev": true, @@ -15843,6 +15755,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -16717,10 +16630,10 @@ }, "packages/bruno-electron": { "name": "bruno", - "version": "v0.27.0", + "version": "v0.27.1", "dependencies": { "@aws-sdk/credential-providers": "^3.425.0", - "@usebruno/js": "0.9.0", + "@usebruno/js": "0.9.1", "@usebruno/lang": "0.9.0", "@usebruno/schema": "0.6.0", "about-window": "^1.15.2", @@ -16766,38 +16679,6 @@ "dev": true, "license": "MIT" }, - "packages/bruno-electron/node_modules/@usebruno/js": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@usebruno/js/-/js-0.9.0.tgz", - "integrity": "sha512-kR5CRi7PgOPQdnUoeyb+MLVBPf0KoJ5jRjkM/79RK/AFZ/ZHfakWta/UOnWnbukQZjS4RjKpW0LBA9wEYfnToQ==", - "dependencies": { - "@usebruno/query": "0.1.0", - "ajv": "^8.12.0", - "atob": "^2.1.2", - "axios": "^0.26.0", - "btoa": "^1.2.1", - "chai": "^4.3.7", - "crypto-js": "^4.1.1", - "handlebars": "^4.7.8", - "json-query": "^2.2.2", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "nanoid": "3.3.4", - "node-fetch": "2.*", - "uuid": "^9.0.0" - }, - "peerDependencies": { - "vm2": "^3.9.13" - } - }, - "packages/bruno-electron/node_modules/@usebruno/js/node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "dependencies": { - "follow-redirects": "^1.14.8" - } - }, "packages/bruno-electron/node_modules/agent-base": { "version": "7.1.0", "license": "MIT", @@ -16808,21 +16689,6 @@ "node": ">= 14" } }, - "packages/bruno-electron/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "packages/bruno-electron/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -16955,11 +16821,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "packages/bruno-electron/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "packages/bruno-electron/node_modules/uuid": { "version": "9.0.0", "license": "MIT", @@ -21377,34 +21238,6 @@ "atomically": { "version": "1.7.0" }, - "autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", - "peer": true, - "requires": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "dependencies": { - "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" - } - } - } - }, "aws-sign2": { "version": "0.7.0", "dev": true @@ -21666,6 +21499,7 @@ }, "browserslist": { "version": "4.21.4", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -21677,7 +21511,7 @@ "version": "file:packages/bruno-electron", "requires": { "@aws-sdk/credential-providers": "^3.425.0", - "@usebruno/js": "0.9.0", + "@usebruno/js": "0.9.1", "@usebruno/lang": "0.9.0", "@usebruno/schema": "0.6.0", "about-window": "^1.15.2", @@ -21718,54 +21552,12 @@ "version": "16.18.11", "dev": true }, - "@usebruno/js": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@usebruno/js/-/js-0.9.0.tgz", - "integrity": "sha512-kR5CRi7PgOPQdnUoeyb+MLVBPf0KoJ5jRjkM/79RK/AFZ/ZHfakWta/UOnWnbukQZjS4RjKpW0LBA9wEYfnToQ==", - "requires": { - "@usebruno/query": "0.1.0", - "ajv": "^8.12.0", - "atob": "^2.1.2", - "axios": "^0.26.0", - "btoa": "^1.2.1", - "chai": "^4.3.7", - "crypto-js": "^4.1.1", - "handlebars": "^4.7.8", - "json-query": "^2.2.2", - "lodash": "^4.17.21", - "moment": "^2.29.4", - "nanoid": "3.3.4", - "node-fetch": "2.*", - "uuid": "^9.0.0" - }, - "dependencies": { - "axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", - "requires": { - "follow-redirects": "^1.14.8" - } - } - } - }, "agent-base": { "version": "7.1.0", "requires": { "debug": "^4.3.4" } }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -21849,11 +21641,6 @@ "argparse": "^2.0.1" } }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "uuid": { "version": "9.0.0" } @@ -23078,7 +22865,8 @@ "electron-to-chromium": { "version": "1.4.554", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", - "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==" + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==", + "dev": true }, "electron-util": { "version": "0.17.2", @@ -23559,12 +23347,6 @@ "forwarded": { "version": "0.2.0" }, - "fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "peer": true - }, "fresh": { "version": "0.5.2" }, @@ -25573,7 +25355,8 @@ "node-releases": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true }, "normalize-package-data": { "version": "2.5.0", @@ -25598,12 +25381,6 @@ "normalize-path": { "version": "3.0.0" }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "peer": true - }, "normalize-url": { "version": "6.1.0", "dev": true @@ -28050,6 +27827,7 @@ "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" diff --git a/packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/index.js b/packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/index.js index cd8291af..11382b1f 100644 --- a/packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/index.js +++ b/packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/index.js @@ -18,7 +18,7 @@ const RemoveCollection = ({ onClose, collection }) => { return ( - Are you sure you want to delete collection {collection.name} ? + Are you sure you want to remove collection {collection.name} ? ); }; diff --git a/packages/bruno-app/src/components/Sidebar/index.js b/packages/bruno-app/src/components/Sidebar/index.js index b0504148..89076197 100644 --- a/packages/bruno-app/src/components/Sidebar/index.js +++ b/packages/bruno-app/src/components/Sidebar/index.js @@ -105,7 +105,7 @@ const Sidebar = () => { Star -
v0.27.0
+
v0.27.2
diff --git a/packages/bruno-app/src/utils/importers/insomnia-collection.js b/packages/bruno-app/src/utils/importers/insomnia-collection.js index 8b7b7fb6..8d8113b4 100644 --- a/packages/bruno-app/src/utils/importers/insomnia-collection.js +++ b/packages/bruno-app/src/utils/importers/insomnia-collection.js @@ -1,3 +1,4 @@ +import jsyaml from 'js-yaml'; import each from 'lodash/each'; import get from 'lodash/get'; import fileDialog from 'file-dialog'; @@ -8,7 +9,22 @@ import { validateSchema, transformItemsInCollection, hydrateSeqInCollection } fr const readFile = (files) => { return new Promise((resolve, reject) => { const fileReader = new FileReader(); - fileReader.onload = (e) => resolve(e.target.result); + fileReader.onload = (e) => { + try { + // try to load JSON + const parsedData = JSON.parse(e.target.result); + resolve(parsedData); + } catch (jsonError) { + // not a valid JSOn, try yaml + try { + const parsedData = jsyaml.load(e.target.result); + resolve(parsedData); + } catch (yamlError) { + console.error('Error parsing the file :', jsonError, yamlError); + reject(new BrunoError('Import collection failed')); + } + } + }; fileReader.onerror = (err) => reject(err); fileReader.readAsText(files[0]); }); @@ -167,7 +183,7 @@ const parseInsomniaCollection = (data) => { return new Promise((resolve, reject) => { try { - const insomniaExport = JSON.parse(data); + const insomniaExport = data; const insomniaResources = get(insomniaExport, 'resources', []); const insomniaCollection = insomniaResources.find((resource) => resource._type === 'workspace'); @@ -213,7 +229,7 @@ const parseInsomniaCollection = (data) => { const importCollection = () => { return new Promise((resolve, reject) => { - fileDialog({ accept: 'application/json' }) + fileDialog({ accept: '.json, .yaml, .yml, application/json, application/yaml, application/x-yaml' }) .then(readFile) .then(parseInsomniaCollection) .then(transformItemsInCollection) @@ -221,8 +237,8 @@ const importCollection = () => { .then(validateSchema) .then((collection) => resolve(collection)) .catch((err) => { - console.log(err); - reject(new BrunoError('Import collection failed')); + console.error(err); + reject(new BrunoError('Import collection failed: ' + err.message)); }); }); }; diff --git a/packages/bruno-app/src/utils/importers/openapi-collection.js b/packages/bruno-app/src/utils/importers/openapi-collection.js index 1f648516..5fbccb8d 100644 --- a/packages/bruno-app/src/utils/importers/openapi-collection.js +++ b/packages/bruno-app/src/utils/importers/openapi-collection.js @@ -53,9 +53,15 @@ const buildEmptyJsonBody = (bodySchema) => { const transformOpenapiRequestItem = (request) => { let _operationObject = request.operationObject; + + let operationName = _operationObject.operationId || _operationObject.summary || _operationObject.description; + if (!operationName) { + operationName = `${request.method} ${request.path}`; + } + const brunoRequestItem = { uid: uuid(), - name: _operationObject.operationId, + name: operationName, type: 'http-request', request: { url: ensureUrl(request.global.server + '/' + request.path), @@ -100,7 +106,7 @@ const transformOpenapiRequestItem = (request) => { let auth; // allow operation override - if (_operationObject.security) { + if (_operationObject.security && _operationObject.security.length > 0) { let schemeName = Object.keys(_operationObject.security[0])[0]; auth = request.global.security.getScheme(schemeName); } else if (request.global.security.supported.length > 0) { @@ -320,17 +326,21 @@ const parseOpenApiCollection = (data) => { let allRequests = Object.entries(collectionData.paths) .map(([path, methods]) => { - return Object.entries(methods).map(([method, operationObject]) => { - return { - method: method, - path: path, - operationObject: operationObject, - global: { - server: baseUrl, - security: securityConfig - } - }; - }); + return Object.entries(methods) + .filter(([method, op]) => { + ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'].includes(method.toLowerCase()); + }) + .map(([method, operationObject]) => { + return { + method: method, + path: path, + operationObject: operationObject, + global: { + server: baseUrl, + security: securityConfig + } + }; + }); }) .reduce((acc, val) => acc.concat(val), []); // flatten diff --git a/packages/bruno-app/src/utils/importers/postman-collection.js b/packages/bruno-app/src/utils/importers/postman-collection.js index 10df985b..499196bd 100644 --- a/packages/bruno-app/src/utils/importers/postman-collection.js +++ b/packages/bruno-app/src/utils/importers/postman-collection.js @@ -68,13 +68,21 @@ const importPostmanV2CollectionItem = (brunoParent, item) => { if (!brunoRequestItem.request.script) { brunoRequestItem.request.script = {}; } - brunoRequestItem.request.script.req = `/* ${event.script.exec[0]} */`; + if (Array.isArray(event.script.exec[0])) { + brunoRequestItem.request.script.req = event.script.exec[0].map((line) => `// ${line}`).join('\n'); + } else { + brunoRequestItem.request.script.req = `// ${event.script.exec[0]} `; + } } if (event.listen === 'test' && event.script && event.script.exec) { if (!brunoRequestItem.request.tests) { brunoRequestItem.request.tests = {}; } - brunoRequestItem.request.tests = `/* ${event.script.exec[0]} */`; + if (Array.isArray(event.script.exec[0])) { + brunoRequestItem.request.tests = event.script.exec[0].map((line) => `// ${line}`).join('\n'); + } else { + brunoRequestItem.request.tests = `// ${event.script.exec[0]} `; + } } }); } diff --git a/packages/bruno-electron/package.json b/packages/bruno-electron/package.json index a7477931..83f6005c 100644 --- a/packages/bruno-electron/package.json +++ b/packages/bruno-electron/package.json @@ -1,5 +1,5 @@ { - "version": "v0.27.0", + "version": "v0.27.2", "name": "bruno", "description": "Opensource API Client for Exploring and Testing APIs", "homepage": "https://www.usebruno.com", @@ -20,7 +20,7 @@ }, "dependencies": { "@aws-sdk/credential-providers": "^3.425.0", - "@usebruno/js": "0.9.0", + "@usebruno/js": "0.9.1", "@usebruno/lang": "0.9.0", "@usebruno/schema": "0.6.0", "about-window": "^1.15.2", diff --git a/readme.md b/readme.md index a625809a..f9d480b9 100644 --- a/readme.md +++ b/readme.md @@ -10,7 +10,7 @@ [![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) [![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) -**English** | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | [Español](/readme_es.md) +**English** | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | [Deutsch](/readme_de.md) | [Español](/readme_es.md) Bruno is a new and innovative API client, aimed at revolutionizing the status quo represented by Postman and similar tools out there. diff --git a/readme_de.md b/readme_de.md new file mode 100644 index 00000000..58b88001 --- /dev/null +++ b/readme_de.md @@ -0,0 +1,95 @@ +
+ + +### Bruno - Opensource IDE zum Erkunden und Testen von APIs. + +[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%bruno) +[![CI](https://github.com/usebruno/bruno/actions/workflows/unit-tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/workflows/unit-tests.yml) +[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse) +[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno) +[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) +[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) + +[English](/readme.md) | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | **Deutsch** | [Español](/readme_es.md) + +Bruno ist ein neuer und innovativer API-Client, der den Status Quo von Postman und ähnlichen Tools revolutionieren soll. + +Bruno speichert Deine Sammlungen direkt in einem Ordner in Deinem Dateisystem. Wir verwenden eine einfache Textauszeichnungssprache - Bru - um Informationen über API-Anfragen zu speichern. + +Du kannst Git oder eine andere Versionskontrolle deiner Wahl verwenden, um an deinen API-Sammlungen gemeinsam mit anderen zu arbeiten. + +Bruno ist ein reines Offline-Tool. Es gibt keine Pläne, Bruno eine Cloud-Synchronisation hinzuzufügen. Wir schätzen den Schutz Deiner Daten und glauben, dass sie auf Deinem Gerät bleiben sollten. Lies unsere Langzeit-Vision [hier](https://github.com/usebruno/bruno/discussions/269). + +![bruno](assets/images/landing-2.png)

+ +### Einsatz auf verschiedensten Plattformen 🖥️ + +![bruno](assets/images/run-anywhere.png)

+ +### Zusammenarbeiten mit Git 👩‍💻🧑‍💻 + +oder eine Versionskontrolle Deiner Wahl + +![bruno](assets/images/version-control.png)

+ +### Wichtige Links 📌 + +- [Unsere Langzeit-Vision](https://github.com/usebruno/bruno/discussions/269) +- [Roadmap](https://github.com/usebruno/bruno/discussions/384) +- [Dokumentation](https://docs.usebruno.com) +- [Webseite](https://www.usebruno.com) +- [Preise](https://www.usebruno.com/pricing) +- [Download](https://www.usebruno.com/downloads) + +### Showcase 🎥 + +- [Erfahrungsberichte](https://github.com/usebruno/bruno/discussions/343) +- [Wissenswertes](https://github.com/usebruno/bruno/discussions/386) +- [Scriptmania](https://github.com/usebruno/bruno/discussions/385) + +### Unterstützung ❤️ + +Wuff! Wenn Du dieses Projekt magst, klick den ⭐ Button !! + +### Teile Erfahrungsberichte 📣 + +Wenn Bruno Dir bei Deiner Arbeit und in Deinen Teams geholfen hat, vergiss bitte nicht, Deine [Erfahrungsberichte auf unserer GitHub-Diskussion](https://github.com/usebruno/bruno/discussions/343) zu teilen. + +### Veröffentlichung in neuen Paketmanagern + +Bitte [hier](publishing.md) für mehr Informationen lesen. + +### Mitmachen 👩‍💻🧑‍💻 + +Ich freue mich, dass Du Bruno verbessern willst. Bitte schau Dir den [Leitfaden zum Mitmachen](contributing_de.md) an. + +Auch wenn Du nicht in der Lage bist, einen Beitrag in Form von Code zu leisten, zögere bitte nicht, uns Fehler und Funktionswünsche mitzuteilen, die implementiert werden müssen, um Deinen Anwendungsfall zu unterstützen. + +### Autoren + +
+ + + +
+ +### In Verbindung bleiben 🌐 + +[Twitter](https://twitter.com/use_bruno)
+[Webseite](https://www.usebruno.com)
+[Discord](https://discord.com/invite/KgcZUncpjq)
+[LinkedIn](https://www.linkedin.com/company/usebruno) + +### Markenzeichen + +**Name** + +`Bruno` ist ein Markenzeichen von [Anoop M D](https://www.helloanoop.com/) + +**Logo** + +Das Logo stammt von [OpenMoji](https://openmoji.org/library/emoji-1F436/). Lizenz: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) + +### Lizenz 📄 + +[MIT](license.md) diff --git a/readme_es.md b/readme_es.md index c75d40a8..19ee6e49 100644 --- a/readme_es.md +++ b/readme_es.md @@ -10,7 +10,7 @@ [![Sitio Web](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) [![Descargas](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) -[English](/readme.md) | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | **Español** +[English](/readme.md) | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | [Deutsch](/readme_de.md) | **Español** Bruno un cliente de APIs nuevo e innovador, creado con el objetivo de revolucionar el panorama actual representado por Postman y otras herramientas similares. diff --git a/readme_ru.md b/readme_ru.md index 74e224ec..af299acd 100644 --- a/readme_ru.md +++ b/readme_ru.md @@ -10,7 +10,7 @@ [![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) [![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) -[English](/readme.md) | [Українська](/readme_ua.md) | **Русский** | [Türkçe](/readme_tr.md) | [Español](/readme_es.md) +[English](/readme.md) | [Українська](/readme_ua.md) | **Русский** | [Türkçe](/readme_tr.md) | [Deutsch](/readme_de.md) | [Español](/readme_es.md) Bruno - новый и инновационный клиент API, направленный на революцию в установившейся ситуации, представленной Postman и подобными инструментами. diff --git a/readme_tr.md b/readme_tr.md index e8e6f880..6cb2b77a 100644 --- a/readme_tr.md +++ b/readme_tr.md @@ -10,7 +10,7 @@ [![Web Sitesi](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) [![İndir](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) -[English](/readme.md) | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | **Türkçe** | [Español](/readme_es.md) +[English](/readme.md) | [Українська](/readme_ua.md) | [Русский](/readme_ru.md) | **Türkçe** | [Deutsch](/readme_de.md) | [Español](/readme_es.md) Bruno, Postman ve benzeri araçlar tarafından temsil edilen statükoda devrim yaratmayı amaçlayan yeni ve yenilikçi bir API istemcisidir. diff --git a/readme_ua.md b/readme_ua.md index 00aa41e6..2e7038eb 100644 --- a/readme_ua.md +++ b/readme_ua.md @@ -10,7 +10,7 @@ [![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com) [![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads) -[English](/readme.md) | **Українська** | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | [Español](/readme_es.md) +[English](/readme.md) | **Українська** | [Русский](/readme_ru.md) | [Türkçe](/readme_tr.md) | [Deutsch](/readme_de.md) | [Español](/readme_es.md) Bruno це новий та іноваційний API клієнт, націлений на революційну зміну статус кво, запровадженого інструментами на кшталт Postman.