From 9529e78647941f2c734e588ffd60699f1a836373 Mon Sep 17 00:00:00 2001 From: Francesco Stasi Date: Thu, 13 Jan 2022 17:02:45 +0100 Subject: [PATCH 01/40] Improve build instructions (#706) --- BUILDING.md | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 27d1cbfe2..c902af1f9 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -40,22 +40,32 @@ The _frontend_ is running as an Electron renderer process and can invoke service ## Build from source If you’re familiar with TypeScript, the [Theia IDE](https://theia-ide.org/), and if you want to contribute to the -project, you should be able to build the Arduino IDE locally. Please refer to the [Theia IDE prerequisites](https://github.com/theia-ide/theia/blob/master/doc/) documentation for the setup instructions. +project, you should be able to build the Arduino IDE locally. +Please refer to the [Theia IDE prerequisites](https://github.com/theia-ide/theia/blob/master/doc/) documentation for the setup instructions. -### Build -```sh -yarn -``` +Once you have all the tools installed, you can build the editor following these steps -### Rebuild the native dependencies -```sh -yarn rebuild:electron -``` +1. Install the dependencies and build + ```sh + yarn + ``` -### Start -```sh -yarn start -``` +2. Rebuild the dependencies + ```sh + yarn rebuild:browser + ``` + +3. Rebuild the electron dependencies + ```sh + cd electron-app + yarn rebuild:browser + cd .. + ``` + +4. Start the application + ```sh + yarn start + ``` ### CI From e0b6dbbf2a3fec9c0aee3b20324900e4d9c1ca39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 17:03:42 +0100 Subject: [PATCH 02/40] Updated translation files (#723) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- i18n/bg.json | 200 +++++++++--------- i18n/el.json | 112 +++++----- i18n/fa.json | 334 ++++++++++++++++++++++++++++++ i18n/fil.json | 334 ++++++++++++++++++++++++++++++ i18n/fr.json | 172 ++++++++-------- i18n/hu.json | 528 ++++++++++++++++++++++++------------------------ i18n/it.json | 162 +++++++-------- i18n/my_MM.json | 334 ++++++++++++++++++++++++++++++ i18n/ne.json | 8 +- i18n/pl.json | 18 +- i18n/tr.json | 334 ++++++++++++++++++++++++++++++ i18n/uk_UA.json | 334 ++++++++++++++++++++++++++++++ yarn.lock | 8 +- 13 files changed, 2274 insertions(+), 604 deletions(-) create mode 100644 i18n/fa.json create mode 100644 i18n/fil.json create mode 100644 i18n/my_MM.json create mode 100644 i18n/tr.json create mode 100644 i18n/uk_UA.json diff --git a/i18n/bg.json b/i18n/bg.json index 685624dbd..2995dac6c 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -186,149 +186,149 @@ "exportBinary": "Експортиране на компилиран двоичен файл", "verify": "Потвърдете", "doneCompiling": "Готово е компилирането.", - "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", - "openSketchInNewWindow": "Open Sketch in New Window", - "openFolder": "Open Folder", - "titleLocalSketchbook": "Local Sketchbook", - "titleSketchbook": "Sketchbook", - "close": "Are you sure you want to close the sketch?" + "couldNotConnectToSerial": "Не можа да се свърже отново със серийния порт. {0}", + "openSketchInNewWindow": "Отвори скицата в нов прозорец", + "openFolder": "Отвори папка", + "titleLocalSketchbook": "Локален скицник", + "titleSketchbook": "Скицник", + "close": "Наистина ли искате да затворите скицата?" }, "bootloader": { - "burnBootloader": "Burn Bootloader", - "doneBurningBootloader": "Done burning bootloader." + "burnBootloader": "Запишете буутлоудъра", + "doneBurningBootloader": "Записването на буутлоудъра приключи." }, "editor": { - "copyForForum": "Copy for Forum (Markdown)", - "commentUncomment": "Comment/Uncomment", - "increaseIndent": "Increase Indent", - "decreaseIndent": "Decrease Indent", - "increaseFontSize": "Increase Font Size", - "decreaseFontSize": "Decrease Font Size", - "autoFormat": "Auto Format" + "copyForForum": "Копиране за форум (Markdown)", + "commentUncomment": "Коментиране/Премахване на коментар", + "increaseIndent": "Увеличете отстъпа", + "decreaseIndent": "Намаляване на отстъпа", + "increaseFontSize": "Увеличете размера на шрифта", + "decreaseFontSize": "Намаляване на размера на шрифта", + "autoFormat": "Автоматично форматиране" }, "examples": { - "menu": "Examples", - "couldNotInitializeExamples": "Could not initialize built-in examples.", - "builtInExamples": "Built-in examples", - "customLibrary": "Examples from Custom Libraries", - "for": "Examples for {0}", - "forAny": "Examples for any board" + "menu": "Примери", + "couldNotInitializeExamples": "Не можа да се инициализира вградените примери.", + "builtInExamples": "Вградени примери", + "customLibrary": "Примери от персонализирани библиотеки", + "for": "Примери за {0}", + "forAny": "Примери за всяка платка" }, "help": { - "search": "Search on Arduino.cc", - "keyword": "Type a keyword", - "gettingStarted": "Getting Started", - "environment": "Environment", - "troubleshooting": "Troubleshooting", - "reference": "Reference", - "findInReference": "Find in Reference", - "faq": "Frequently Asked Questions", - "visit": "Visit Arduino.cc" + "search": "Търсете в Arduino.cc", + "keyword": "Въведете ключова дума", + "gettingStarted": "Да започнем", + "environment": "Околна среда", + "troubleshooting": "Отстраняване на неизправности", + "reference": "Референция", + "findInReference": "Намерете в Референцията", + "faq": "Често задавани въпроси", + "visit": "Посетете Arduino.cc" }, "certificate": { - "uploadRootCertificates": "Upload SSL Root Certificates", - "openContext": "Open context", - "remove": "Remove", - "upload": "Upload", - "addURL": "Add URL to fetch SSL certificate", - "enterURL": "Enter URL", - "selectCertificateToUpload": "1. Select certificate to upload", - "addNew": "Add New", - "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", - "uploadingCertificates": "Uploading certificates.", - "certificatesUploaded": "Certificates uploaded.", - "uploadFailed": "Upload failed. Please try again.", - "selectBoard": "Select a board...", - "boardAtPort": "{0} at {1}", - "noSupportedBoardConnected": "No supported board connected" + "uploadRootCertificates": "Качете SSL коренни сертификати", + "openContext": "Отворен контекст", + "remove": "Премахване", + "upload": "Качване", + "addURL": "Добавете URL за извличане на SSL сертификат", + "enterURL": "Въведете URL", + "selectCertificateToUpload": "1. Изберете сертификат за качване", + "addNew": "Добави нов", + "selectDestinationBoardToUpload": "2. Изберете платка и качете сертификат", + "uploadingCertificates": "Качване на сертификати.", + "certificatesUploaded": "Качени сертификати.", + "uploadFailed": "Качването не бе успешно. Моля, опитайте отново.", + "selectBoard": "Изберете платка,,,", + "boardAtPort": "{0} в {1}", + "noSupportedBoardConnected": "Няма свързана поддържана платка" }, "firmware": { - "updater": "WiFi101 / WiFiNINA Firmware Updater", - "selectBoard": "Select Board", - "checkUpdates": "Check Updates", - "selectVersion": "Select firmware version", - "install": "Install", - "overwriteSketch": "Installation will overwrite the Sketch on the board.", - "installingFirmware": "Installing firmware.", - "successfullyInstalled": "Firmware succesfully installed.", - "failedInstall": "Installation failed. Please try again." + "updater": "WiFi101 / WiFiNINA Обновяване на фърмуера", + "selectBoard": "Изберете платка", + "checkUpdates": "Проверете актуализации", + "selectVersion": "Изберете версия на фърмуера", + "install": "Инсталирай", + "overwriteSketch": "Инсталацията ще презапише скицата на платката.", + "installingFirmware": "Инсталиране на фърмуер.", + "successfullyInstalled": "Фърмуерът е инсталиран успешно.", + "failedInstall": "Неуспешно инсталиране. Моля, опитайте отново." }, "dialog": { - "dontAskAgain": "Don't ask again" + "dontAskAgain": "Не питай отново" }, "userFields": { - "cancel": "Cancel", - "upload": "Upload" + "cancel": "Отмяна", + "upload": "Качване" }, "serial": { - "toggleTimestamp": "Toggle Timestamp", - "autoscroll": "Autoscroll", - "timestamp": "Timestamp", - "noLineEndings": "No Line Ending", - "newLine": "New Line", + "toggleTimestamp": "Превключване на клеймото за време", + "autoscroll": "Автоматично превъртане", + "timestamp": "Печат за време", + "noLineEndings": "Без край на реда", + "newLine": "Нов ред", "carriageReturn": "Carriage Return", - "newLineCarriageReturn": "Both NL & CR", - "notConnected": "Not connected. Select a board and a port to connect automatically.", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", - "connectionBusy": "Connection failed. Serial port is busy: {0}", - "disconnected": "Disconnected {0} from {1}.", - "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", - "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", - "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + "newLineCarriageReturn": "Както NL, така и CR", + "notConnected": "Няма връзка. Изберете платка и порт за автоматично свързване.", + "message": "Съобщение ({0} + Enter, за да изпратите съобщение до „{1}“ на „{2}“", + "connectionBusy": "Свързването е неуспешно. Серийният порт е зает: {0}", + "disconnected": "Прекъснато е връзката на {0} с {1}.", + "unexpectedError": "Неочаквана грешка. Повторно свързване на {0} на порт {1}.", + "failedReconnect": "Неуспешно свързване на {0} към серийния порт след 10 последователни опита. Серийният порт {1} е зает.", + "reconnect": "Повторно свързване на {0} към {1} след {2} секунди..." }, "component": { - "uninstall": "Uninstall", - "uninstallMsg": "Do you want to uninstall {0}?", - "by": "by", - "version": "Version {0}", - "moreInfo": "More info", - "install": "INSTALL", - "filterSearch": "Filter your search..." + "uninstall": "Деинсталиране", + "uninstallMsg": "Искате ли да деинсталирате {0}?", + "by": "от", + "version": "Версия {0}", + "moreInfo": "Повече информация", + "install": "ИНСТАЛИРАЙ", + "filterSearch": "Филтрирайте търсенето си..." }, "electron": { - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "unsavedChanges": "Any unsaved changes will not be saved." + "couldNotSave": "Скицата не можа да бъде запазена. Моля, копирайте незапазената си работа в любимия си текстов редактор и рестартирайте IDE-то.", + "unsavedChanges": "Всички незапазени промени няма да бъдат запазени." }, "compile": { - "error": "Compilation error: {0}" + "error": "Грешка при компилация: {0}" }, "upload": { - "error": "{0} error: {1}" + "error": "{0} грешка: {1}" }, "burnBootloader": { - "error": "Error while burning the bootloader: {0}" + "error": "Грешка при записване на зареждащия инструмент: {0}" } }, "theia": { "core": { - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "offline": "Offline", - "daemonOffline": "CLI Daemon Offline", - "cannotConnectBackend": "Cannot connect to the backend.", - "cannotConnectDaemon": "Cannot connect to the CLI daemon." + "couldNotSave": "Скицата не можа да бъде запазена. Моля, копирайте незапазената си работа в любимия си текстов редактор и рестартирайте IDE-то.", + "offline": "Офлайн", + "daemonOffline": "CLI Daemon офлайн", + "cannotConnectBackend": "Не може да се свърже с бекенда.", + "cannotConnectDaemon": "Не може да се свърже с демона на CLI." }, "debug": { - "start": "Start...", - "typeNotSupported": "The debug session type \"{0}\" is not supported.", - "startError": "There was an error starting the debug session, check the logs for more details." + "start": "Започнете...", + "typeNotSupported": "Типът на сесията за отстраняване на грешки „{0}“ не се поддържа.", + "startError": "Възникна грешка при стартиране на сесията за отстраняване на грешки, проверете регистрационните файлове за повече подробности." }, "editor": { - "unsavedTitle": "Unsaved – {0}" + "unsavedTitle": "Незапазено – {0}" }, "messages": { - "expand": "Expand", - "collapse": "Collapse" + "expand": "Разгънете", + "collapse": "Свиване" }, "workspace": { - "fileNewName": "Name for new file", - "invalidFilename": "Invalid filename.", - "invalidExtension": ".{0} is not a valid extension", - "newFileName": "New name for file", - "deleteCurrentSketch": "Do you want to delete the current sketch?", - "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." + "fileNewName": "Име за нов файл", + "invalidFilename": "Невалидно име на файла.", + "invalidExtension": ".{0} не е валидно разширение", + "newFileName": "Ново име на файла", + "deleteCurrentSketch": "Искате ли да изтриете текущата скица?", + "sketchDirectoryError": "При създаването на директорията на скицата възникна грешка. Вижте дневника за повече подробности. Приложението вероятно няма да работи според очакванията." } }, "cloud": { - "GoToCloud": "GO TO CLOUD" + "GoToCloud": "КЪМ ОБЛАКА" } } diff --git a/i18n/el.json b/i18n/el.json index a27cb47e6..81cd609ff 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -54,42 +54,42 @@ "automatic": "Αυτόματο", "compile": "μεταγλώττιση", "upload": "ανέβασμα", - "verifyAfterUpload": "Verify code after upload", - "checkForUpdates": "Check for updates on startup", + "verifyAfterUpload": "Επιβεβαίωση κώδικα μετά το ανέβασμα", + "checkForUpdates": "Έλεγχος ενημερώσεων κατά την εκκίνηση", "editorQuickSuggestions": "Editor Quick Suggestions", - "additionalManagerURLs": "Additional Boards Manager URLs", + "additionalManagerURLs": "Πρόσθετοι Σύνδεσμοι Διαχειριστή Πλακετών", "noProxy": "No proxy", "manualProxy": "Manual proxy configuration", - "newSketchbookLocation": "Select new sketchbook location", - "choose": "Choose", - "enterAdditionalURLs": "Enter additional URLs, one for each row", - "unofficialBoardSupport": "Click for a list of unofficial board support URLs", - "invalid.sketchbook.location": "Invalid sketchbook location: {0}", - "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", - "invalid.theme": "Invalid theme." + "newSketchbookLocation": "Επιλογή νέας τοποθεσίας σχεδίων", + "choose": "Επιλογή", + "enterAdditionalURLs": "Τοποθετήστε πρόσθετους Συνδέσμους, ένα σε κάθε σειρά", + "unofficialBoardSupport": "Κλικ για λίστα Συνδέσμων ανεπίσημης υποστήριξης πλακετών", + "invalid.sketchbook.location": "Μη-έγκυρη τοποθεσία σχεδίων: {0}", + "invalid.editorFontSize": "Μη-έγκυρο μέγεθος γραμματοσειράς συντάκτη. Πρέπει να είναι θετικός ακέραιος.", + "invalid.theme": "Μη-έγκυρο θέμα." }, "cloud": { - "signIn": "SIGN IN", - "signOut": "Sign Out", - "chooseSketchVisibility": "Choose visibility of your Sketch:", - "privateVisibility": "Private. Only you can view the Sketch.", - "publicVisibility": "Public. Anyone with the link can view the Sketch.", - "link": "Link:", - "embed": "Embed:", - "cloudSketchbook": "Cloud Sketchbook", - "shareSketch": "Share Sketch", - "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", + "signIn": "ΣΥΥΝΔΕΣΗ", + "signOut": "Αποσύνδεση", + "chooseSketchVisibility": "Επίλεξε την ορατότητα του Σχεδίου σου:", + "privateVisibility": "Ιδιωτικό. Μόνο εσύ μπορείς να δεις το Σχέδιο.", + "publicVisibility": "Δημόσιο. Οποιόσδηποτε με το σύνδεσμο μπορεί να δει το Σχέδιο.", + "link": "Σύνδεσμος:", + "embed": "Ενσωμάτωση:", + "cloudSketchbook": "Σχέδια Cloud", + "shareSketch": "Κοινοποίηση Σχεδίου", + "showHideRemoveSketchbook": "Εμφάνιση/Απόκρυψη Απομακρυνσμένων Σχεδίων", "pullSketch": "Pull Sketch", - "openInCloudEditor": "Open in Cloud Editor", - "options": "Options...", - "share": "Share...", - "remote": "Remote", - "emptySketchbook": "Your Sketchbook is empty", - "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", - "signInToCloud": "Sign in to Arduino Cloud", - "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", - "learnMore": "Learn more", - "continue": "Continue", + "openInCloudEditor": "Άνοιγμα σε Συντάκτη Cloud", + "options": "Επιλογές...", + "share": "Κοινοποίηση...", + "remote": "Απομακρυνσμένο", + "emptySketchbook": "Τα Σχέδια σου είναι άδεια.", + "visitArduinoCloud": "Επισκέψου το Arduino Cloud για δημιουργία Σχεδίων Cloud.", + "signInToCloud": "Σύνδεση στο Arduino Cloud", + "syncEditSketches": "Συγχρονισμός και τροποποίηση των Arduino Cloud Σχεδίων σου.", + "learnMore": "Μάθε περισσότερα", + "continue": "Συνέχεια", "pushSketch": "Push Sketch", "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", "pull": "Pull", @@ -101,38 +101,38 @@ "donePushing": "Done pushing ‘{0}’.", "connected": "Συνδέθηκε", "offline": "Εκτός Σύνδεσης", - "profilePicture": "Profile picture" + "profilePicture": "Εικόνα προφίλ" }, "board": { - "installManually": "Install Manually", - "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "installManually": "Χειροκίνητη Εγκατάσταση", + "installNow": "Ο πυρήνας \"{0} {1}\" πρέπει να εγκατασταθεί για την επιλεγμένη πλακέτα {2}. Θέλεις να την εγκαταστήσεις τώρα;", "configDialogTitle": "Επιλέξτε Άλλη Πλακέτα & Θύρα", - "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", - "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", - "pleasePickBoard": "Please pick a board connected to the port you have selected.", - "showAllAvailablePorts": "Shows all available ports when enabled", - "programmer": "Programmer", - "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", - "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", - "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", - "reselectLater": "Reselect later", - "noneSelected": "No boards selected.", - "noPortsSelected": "No ports selected for board: '{0}'.", + "configDialog1": "Επίλεξε και Πλακέτα και Θύρα αν θέλεις να ανεβάσεις ένα σχέδιο.", + "configDialog2": "Αν επιλέξεις μονο Πλακέτα θα μπορείς να κάνεις μόνο μεταγγλώτιση, αλλά οχι να ανεβάσεις το σχέδιο.", + "pleasePickBoard": "Πσρακαλώ επίλεξε μια πλακέτα που συνδέθηκε στην θύρα που έχεις επιλέξει.", + "showAllAvailablePorts": "Εμφανίζει όλες τις διαθέσιμες θύρες όταν είναι ενεργοποιημένο.", + "programmer": "Προγραμματιστής", + "succesfullyInstalledPlatform": "Επιτυχής εγκατάσταση πλατφόρμας {0}:{1}", + "succesfullyUninstalledPlatform": "Επιτυχής απεγκατάσταση πλατφόρμας {0}:{1}", + "couldNotFindPreviouslySelected": "Δεν έγινε εντοπισμός της προηγουμένως επιλεγμένης πλακέτας '{0}' στην εγκατεστημένη πλατφόρμα '{1}'. Παρακαλώ επίλεξε πάλι χειροκίνητα την πλακέτα που θέλεις να χρησιμοποιήσεις. Θέλεις να την επιλέξεις τώρα;", + "reselectLater": "Επιλογή αργότερα", + "noneSelected": "Δεν επιλέχθηκε πλακέτα", + "noPortsSelected": "Δεν επιλέχθηκε θύρα για την πλακέτα: '{0}'.", "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", - "openBoardsConfig": "Select other board and port…", - "boardListItem": "{0} at {1}", - "selectBoardForInfo": "Please select a board to obtain board info.", - "platformMissing": "The platform for the selected '{0}' board is not installed.", - "selectPortForInfo": "Please select a port to obtain board info.", - "boardInfo": "Board Info", - "board": "Board{0}", - "port": "Port{0}", - "getBoardInfo": "Get Board Info", - "inSketchbook": " (in Sketchbook)" + "openBoardsConfig": "Επιλογή διαφορετικής πλακέτας και θύρας...", + "boardListItem": "{0} στο {1}", + "selectBoardForInfo": "Παρακαλώ επίλεξε μια πλακέτα για εμφάνιση πληροφοριών πλακέτας.", + "platformMissing": "Η πλατφόρμα για την επιλεγμένη πλακέτα '{0}' δεν έχει εγκατασταθεί.", + "selectPortForInfo": "Παρακαλώ επίλεξε μια θύρα για εμφάνιση πληροφοριών πλακέτας.", + "boardInfo": "Πληροφορίες Πλακέτας", + "board": "Πλακέτα{0}", + "port": "Θύρα{0}", + "getBoardInfo": "Εμφάνιση Πληροφοριών Πλακέτας", + "inSketchbook": "(στα Σχέδια)" }, - "boardsManager": "Boards Manager", + "boardsManager": "Διαχειριστής Πλακετών", "about": { - "label": "About {0}", + "label": "Σχετικά με {0}", "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" }, "contributions": { diff --git a/i18n/fa.json b/i18n/fa.json new file mode 100644 index 000000000..a3fd2c1b2 --- /dev/null +++ b/i18n/fa.json @@ -0,0 +1,334 @@ +{ + "arduino": { + "common": { + "offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.", + "noBoardSelected": "بردی انتخاب نشده", + "selectedOn": "روشن {0}", + "notConnected": "[not connected]", + "serialMonitor": "Serial Monitor", + "oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?", + "later": "بعدا", + "selectBoard": "انتخاب برد", + "unknown": "نامعلوم", + "processing": "در حال محاسبه", + "saveChangesToSketch": "Do you want to save changes to this sketch before closing?", + "loseChanges": "اگر ذخیره نکنید، تغییراتتون اعمال نمی شوند." + }, + "menu": { + "sketch": "Sketch", + "tools": "ابزار ها" + }, + "debug": { + "optimizeForDebugging": "Optimize for Debugging", + "debugWithMessage": "Debug - {0}", + "noPlatformInstalledFor": "Platform is not installed for '{0}'", + "debuggingNotSupported": "Debugging is not supported by '{0}'" + }, + "preferences": { + "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", + "compile.verbose": "True for verbose compile output. False by default", + "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", + "upload.verbose": "True for verbose upload output. False by default.", + "window.autoScale": "True if the user interface automatically scales with the font size.", + "window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.", + "ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.", + "board.certificates": "List of certificates that can be uploaded to boards", + "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", + "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", + "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", + "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", + "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", + "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", + "auth.clientID": "The OAuth2 client ID.", + "auth.domain": "The OAuth2 domain.", + "auth.audience": "The OAuth2 audience.", + "auth.registerUri": "The URI used to register a new user.", + "network": "نتورک", + "sketchbook.location": "Sketchbook location", + "browse": "Browse", + "files.inside.sketches": "Show files inside Sketches", + "editorFontSize": "Editor font size", + "interfaceScale": "Interface scale", + "showVerbose": "Show verbose output during", + "compilerWarnings": "هشدار های کامپایلر", + "automatic": "اتوماتیک", + "compile": "compile", + "upload": "آپلود", + "verifyAfterUpload": "تائید کد بعد از آپلود", + "checkForUpdates": "Check for updates on startup", + "editorQuickSuggestions": "Editor Quick Suggestions", + "additionalManagerURLs": "Additional Boards Manager URLs", + "noProxy": "No proxy", + "manualProxy": "Manual proxy configuration", + "newSketchbookLocation": "Select new sketchbook location", + "choose": "انتخاب", + "enterAdditionalURLs": "Enter additional URLs, one for each row", + "unofficialBoardSupport": "Click for a list of unofficial board support URLs", + "invalid.sketchbook.location": "Invalid sketchbook location: {0}", + "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", + "invalid.theme": "Invalid theme." + }, + "cloud": { + "signIn": "ورود کاربر", + "signOut": "خروج کاربر", + "chooseSketchVisibility": "Choose visibility of your Sketch:", + "privateVisibility": "Private. Only you can view the Sketch.", + "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "link": "لینک:", + "embed": "Embed:", + "cloudSketchbook": "Cloud Sketchbook", + "shareSketch": "Share Sketch", + "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", + "pullSketch": "Pull Sketch", + "openInCloudEditor": "Open in Cloud Editor", + "options": "تنظیمات...", + "share": "اشتراک گذاری...", + "remote": "Remote", + "emptySketchbook": "Your Sketchbook is empty", + "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", + "signInToCloud": "Sign in to Arduino Cloud", + "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", + "learnMore": "Learn more", + "continue": "ادامه", + "pushSketch": "Push Sketch", + "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", + "pull": "Pull", + "pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?", + "donePulling": "Done pulling ‘{0}’.", + "notYetPulled": "Cannot push to Cloud. It is not yet pulled.", + "push": "Push", + "pullFirst": "You have to pull first to be able to push to the Cloud.", + "donePushing": "Done pushing ‘{0}’.", + "connected": "Connected", + "offline": "آفلاین", + "profilePicture": "عکس پروفایل" + }, + "board": { + "installManually": "Install Manually", + "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "configDialogTitle": "Select Other Board & Port", + "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", + "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", + "pleasePickBoard": "Please pick a board connected to the port you have selected.", + "showAllAvailablePorts": "Shows all available ports when enabled", + "programmer": "Programmer", + "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", + "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", + "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", + "reselectLater": "بعدا انتخاب کنید", + "noneSelected": "No boards selected.", + "noPortsSelected": "No ports selected for board: '{0}'.", + "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", + "openBoardsConfig": "Select other board and port…", + "boardListItem": "{0} در {1}", + "selectBoardForInfo": "Please select a board to obtain board info.", + "platformMissing": "The platform for the selected '{0}' board is not installed.", + "selectPortForInfo": "Please select a port to obtain board info.", + "boardInfo": "مشخصات برد", + "board": "بورد {0}", + "port": "پورت {0}", + "getBoardInfo": "Get Board Info", + "inSketchbook": " (in Sketchbook)" + }, + "boardsManager": "Boards Manager", + "about": { + "label": "درباره {0}", + "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + }, + "contributions": { + "addFile": "فایل اظافه کن", + "replaceTitle": "جایگذاری", + "fileAdded": "One file added to the sketch." + }, + "replaceMsg": "Replace the existing version of {0}?", + "library": { + "addZip": "Add .ZIP Library...", + "zipLibrary": "کتابخانه", + "overwriteExistingLibrary": "Do you want to overwrite the existing library?", + "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", + "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", + "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", + "include": "Include Library", + "manageLibraries": "Manage Libraries...", + "arduinoLibraries": "Arduino libraries", + "contributedLibraries": "Contributed libraries", + "title": "Library Manager", + "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", + "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", + "installOneMissingDependency": "Would you like to install the missing dependency?", + "installMissingDependencies": "Would you like to install all the missing dependencies?", + "dependenciesForLibrary": "Dependencies for library {0}:{1}", + "installAll": "نصب همه", + "installOnly": "فقط {0} را نصب کن", + "installedSuccessfully": "Successfully installed library {0}:{1}", + "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" + }, + "selectZip": "Select a zip file containing the library you'd like to add", + "sketch": { + "archiveSketch": "Archive Sketch", + "saveSketchAs": "Save sketch folder as...", + "createdArchive": "Created archive '{0}'.", + "new": "New", + "openRecent": "Open Recent", + "showFolder": "Show Sketch Folder", + "sketch": "Sketch", + "moving": "Moving", + "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", + "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", + "saveFolderAs": "Save sketch folder as...", + "sketchbook": "Sketchbook", + "upload": "آپلود", + "uploadUsingProgrammer": "Upload Using Programmer", + "userFieldsNotFoundError": "Can't find user fields for connected board", + "doneUploading": "Done uploading.", + "configureAndUpload": "Configure And Upload", + "verifyOrCompile": "Verify/Compile", + "exportBinary": "Export Compiled Binary", + "verify": "Verify", + "doneCompiling": "Done compiling.", + "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", + "openSketchInNewWindow": "Open Sketch in New Window", + "openFolder": "Open Folder", + "titleLocalSketchbook": "Local Sketchbook", + "titleSketchbook": "Sketchbook", + "close": "Are you sure you want to close the sketch?" + }, + "bootloader": { + "burnBootloader": "Burn Bootloader", + "doneBurningBootloader": "Done burning bootloader." + }, + "editor": { + "copyForForum": "Copy for Forum (Markdown)", + "commentUncomment": "Comment/Uncomment", + "increaseIndent": "Increase Indent", + "decreaseIndent": "Decrease Indent", + "increaseFontSize": "Increase Font Size", + "decreaseFontSize": "Decrease Font Size", + "autoFormat": "Auto Format" + }, + "examples": { + "menu": "Examples", + "couldNotInitializeExamples": "Could not initialize built-in examples.", + "builtInExamples": "Built-in examples", + "customLibrary": "Examples from Custom Libraries", + "for": "Examples for {0}", + "forAny": "Examples for any board" + }, + "help": { + "search": "Search on Arduino.cc", + "keyword": "Type a keyword", + "gettingStarted": "Getting Started", + "environment": "Environment", + "troubleshooting": "Troubleshooting", + "reference": "Reference", + "findInReference": "Find in Reference", + "faq": "Frequently Asked Questions", + "visit": "Visit Arduino.cc" + }, + "certificate": { + "uploadRootCertificates": "Upload SSL Root Certificates", + "openContext": "Open context", + "remove": "Remove", + "upload": "آپلود", + "addURL": "Add URL to fetch SSL certificate", + "enterURL": "Enter URL", + "selectCertificateToUpload": "1. Select certificate to upload", + "addNew": "Add New", + "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", + "uploadingCertificates": "Uploading certificates.", + "certificatesUploaded": "Certificates uploaded.", + "uploadFailed": "آپلود ناموفق بود. لطفا دوباره سعی کنید.", + "selectBoard": "Select a board...", + "boardAtPort": "{0} at {1}", + "noSupportedBoardConnected": "No supported board connected" + }, + "firmware": { + "updater": "WiFi101 / WiFiNINA Firmware Updater", + "selectBoard": "Select Board", + "checkUpdates": "Check Updates", + "selectVersion": "Select firmware version", + "install": "نصب", + "overwriteSketch": "Installation will overwrite the Sketch on the board.", + "installingFirmware": "Installing firmware.", + "successfullyInstalled": "Firmware succesfully installed.", + "failedInstall": "Installation failed. Please try again." + }, + "dialog": { + "dontAskAgain": "Don't ask again" + }, + "userFields": { + "cancel": "لغو", + "upload": "Upload" + }, + "serial": { + "toggleTimestamp": "Toggle Timestamp", + "autoscroll": "Autoscroll", + "timestamp": "Timestamp", + "noLineEndings": "No Line Ending", + "newLine": "New Line", + "carriageReturn": "Carriage Return", + "newLineCarriageReturn": "Both NL & CR", + "notConnected": "Not connected. Select a board and a port to connect automatically.", + "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", + "connectionBusy": "Connection failed. Serial port is busy: {0}", + "disconnected": "Disconnected {0} from {1}.", + "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", + "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", + "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + }, + "component": { + "uninstall": "Uninstall", + "uninstallMsg": "Do you want to uninstall {0}?", + "by": "by", + "version": "Version {0}", + "moreInfo": "More info", + "install": "INSTALL", + "filterSearch": "Filter your search..." + }, + "electron": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "unsavedChanges": "Any unsaved changes will not be saved." + }, + "compile": { + "error": "Compilation error: {0}" + }, + "upload": { + "error": "{0} error: {1}" + }, + "burnBootloader": { + "error": "Error while burning the bootloader: {0}" + } + }, + "theia": { + "core": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "offline": "Offline", + "daemonOffline": "CLI Daemon Offline", + "cannotConnectBackend": "Cannot connect to the backend.", + "cannotConnectDaemon": "Cannot connect to the CLI daemon." + }, + "debug": { + "start": "Start...", + "typeNotSupported": "The debug session type \"{0}\" is not supported.", + "startError": "There was an error starting the debug session, check the logs for more details." + }, + "editor": { + "unsavedTitle": "Unsaved – {0}" + }, + "messages": { + "expand": "Expand", + "collapse": "Collapse" + }, + "workspace": { + "fileNewName": "Name for new file", + "invalidFilename": "Invalid filename.", + "invalidExtension": ".{0} is not a valid extension", + "newFileName": "New name for file", + "deleteCurrentSketch": "Do you want to delete the current sketch?", + "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." + } + }, + "cloud": { + "GoToCloud": "GO TO CLOUD" + } +} diff --git a/i18n/fil.json b/i18n/fil.json new file mode 100644 index 000000000..085ea6284 --- /dev/null +++ b/i18n/fil.json @@ -0,0 +1,334 @@ +{ + "arduino": { + "common": { + "offlineIndicator": "Mukhang ikaw ay offline. Kung walang internet, maaaring hindi madownload ng Arduino CLI ang mga kakailanganin nitong resources at mag-malfunction. Kumonekta sa internet at i-restart ang application. ", + "noBoardSelected": "Walang board na pinili. ", + "selectedOn": "on {0}", + "notConnected": "[hindi konektado] ", + "serialMonitor": "Serial Monitor", + "oldFormat": "Ang '{0}' ay gumagamit pa ng lumang `.pde` format. Gusto mo bang gamitin ang bagong `.ino` extension?", + "later": "Mamaya", + "selectBoard": "Pumili ng board", + "unknown": "Hindi alam", + "processing": "Pinoproseso", + "saveChangesToSketch": "Gusto mo bang i-save ang mga pagbabago sa sketch na ito bago tuluyang isara? ", + "loseChanges": "Kung hindi ka magsi-save, mawawala ang iyong mga binago. " + }, + "menu": { + "sketch": "Sketch", + "tools": "Mga Tools" + }, + "debug": { + "optimizeForDebugging": "Pinahusay para sa Debugging", + "debugWithMessage": "Debug - {0}", + "noPlatformInstalledFor": "Ang platform ay hindi naka-install para sa '{0}'", + "debuggingNotSupported": "Ang debugging ay hindi suportado ng '{0}'" + }, + "preferences": { + "language.log": "True, kung dapat na gumawa ng log files ang Arduino Language Server sa mismong sketch folder. False naman kung hindi. Ito ay false, by default. ", + "compile.verbose": "True para sa verbose compile output. Ito ay naka-false by default.", + "compile.warnings": "Ipapaalam sa gcc kung anong lebel ng mga paalala ang gagamitin. Ito ay naka-set sa wala o 'None' by default.", + "upload.verbose": "True para sa verbose upload output. Ito ay naka-false by default.", + "window.autoScale": "True kung nais mong awtomatikong mag-adjust ang scaling ng user interface depende sa laki ng font o letra sa screen.", + "window.zoomLevel": "Baguhin ang lebel ng pagka-zoom ng window. Ang orihinal na laki ay 0 at bawat dagdag (halimbawa +1) o bawas (halimbawa -1) ay katumbas ng 20% na pagtaas o pagbaba sa zoom. Pwede kang mag-enter ng decimals para mas makontrol mo ang pag-adjust ng lebel ng zoom. ", + "ide.autoUpdate": "True kung gusto mong awtomatikong maghanap ng updates. Ang IDE ay awtomatikong maghahanap ng updates pana-panahon. ", + "board.certificates": "Listahan ng mga sertipikong maaaring ma-upload sa ma board.", + "sketchbook.showAllFiles": "True para ipakita lahat ng sketch files sa loob ng isang sketch. Ito ay false by default.", + "cloud.enabled": "True kapag ang sketch sync function ay gumagana. Ito ay true by default.", + "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", + "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", + "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", + "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", + "auth.clientID": "The OAuth2 client ID.", + "auth.domain": "The OAuth2 domain.", + "auth.audience": "The OAuth2 audience.", + "auth.registerUri": "The URI used to register a new user.", + "network": "Network", + "sketchbook.location": "Sketchbook location", + "browse": "Browse", + "files.inside.sketches": "Show files inside Sketches", + "editorFontSize": "Editor font size", + "interfaceScale": "Interface scale", + "showVerbose": "Show verbose output during", + "compilerWarnings": "Compiler warnings", + "automatic": "Automatic", + "compile": "compile", + "upload": "upload", + "verifyAfterUpload": "Verify code after upload", + "checkForUpdates": "Check for updates on startup", + "editorQuickSuggestions": "Editor Quick Suggestions", + "additionalManagerURLs": "Additional Boards Manager URLs", + "noProxy": "No proxy", + "manualProxy": "Manual proxy configuration", + "newSketchbookLocation": "Select new sketchbook location", + "choose": "Choose", + "enterAdditionalURLs": "Enter additional URLs, one for each row", + "unofficialBoardSupport": "Click for a list of unofficial board support URLs", + "invalid.sketchbook.location": "Invalid sketchbook location: {0}", + "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", + "invalid.theme": "Invalid theme." + }, + "cloud": { + "signIn": "SIGN IN", + "signOut": "Sign Out", + "chooseSketchVisibility": "Choose visibility of your Sketch:", + "privateVisibility": "Private. Only you can view the Sketch.", + "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "link": "Link:", + "embed": "Embed:", + "cloudSketchbook": "Cloud Sketchbook", + "shareSketch": "Share Sketch", + "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", + "pullSketch": "Pull Sketch", + "openInCloudEditor": "Open in Cloud Editor", + "options": "Options...", + "share": "Share...", + "remote": "Remote", + "emptySketchbook": "Your Sketchbook is empty", + "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", + "signInToCloud": "Sign in to Arduino Cloud", + "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", + "learnMore": "Learn more", + "continue": "Continue", + "pushSketch": "Push Sketch", + "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", + "pull": "Pull", + "pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?", + "donePulling": "Done pulling ‘{0}’.", + "notYetPulled": "Cannot push to Cloud. It is not yet pulled.", + "push": "Push", + "pullFirst": "You have to pull first to be able to push to the Cloud.", + "donePushing": "Done pushing ‘{0}’.", + "connected": "Connected", + "offline": "Offline", + "profilePicture": "Profile picture" + }, + "board": { + "installManually": "Install Manually", + "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "configDialogTitle": "Select Other Board & Port", + "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", + "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", + "pleasePickBoard": "Please pick a board connected to the port you have selected.", + "showAllAvailablePorts": "Shows all available ports when enabled", + "programmer": "Programmer", + "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", + "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", + "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", + "reselectLater": "Reselect later", + "noneSelected": "No boards selected.", + "noPortsSelected": "No ports selected for board: '{0}'.", + "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", + "openBoardsConfig": "Select other board and port…", + "boardListItem": "{0} at {1}", + "selectBoardForInfo": "Please select a board to obtain board info.", + "platformMissing": "The platform for the selected '{0}' board is not installed.", + "selectPortForInfo": "Please select a port to obtain board info.", + "boardInfo": "Board Info", + "board": "Board{0}", + "port": "Port{0}", + "getBoardInfo": "Get Board Info", + "inSketchbook": " (in Sketchbook)" + }, + "boardsManager": "Boards Manager", + "about": { + "label": "About {0}", + "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + }, + "contributions": { + "addFile": "Add File", + "replaceTitle": "Replace", + "fileAdded": "One file added to the sketch." + }, + "replaceMsg": "Replace the existing version of {0}?", + "library": { + "addZip": "Add .ZIP Library...", + "zipLibrary": "Library", + "overwriteExistingLibrary": "Do you want to overwrite the existing library?", + "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", + "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", + "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", + "include": "Include Library", + "manageLibraries": "Manage Libraries...", + "arduinoLibraries": "Arduino libraries", + "contributedLibraries": "Contributed libraries", + "title": "Library Manager", + "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", + "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", + "installOneMissingDependency": "Would you like to install the missing dependency?", + "installMissingDependencies": "Would you like to install all the missing dependencies?", + "dependenciesForLibrary": "Dependencies for library {0}:{1}", + "installAll": "Install all", + "installOnly": "Install {0} only", + "installedSuccessfully": "Successfully installed library {0}:{1}", + "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" + }, + "selectZip": "Select a zip file containing the library you'd like to add", + "sketch": { + "archiveSketch": "Archive Sketch", + "saveSketchAs": "Save sketch folder as...", + "createdArchive": "Created archive '{0}'.", + "new": "New", + "openRecent": "Open Recent", + "showFolder": "Show Sketch Folder", + "sketch": "Sketch", + "moving": "Moving", + "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", + "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", + "saveFolderAs": "Save sketch folder as...", + "sketchbook": "Sketchbook", + "upload": "Upload", + "uploadUsingProgrammer": "Upload Using Programmer", + "userFieldsNotFoundError": "Can't find user fields for connected board", + "doneUploading": "Done uploading.", + "configureAndUpload": "Configure And Upload", + "verifyOrCompile": "Verify/Compile", + "exportBinary": "Export Compiled Binary", + "verify": "Verify", + "doneCompiling": "Done compiling.", + "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", + "openSketchInNewWindow": "Open Sketch in New Window", + "openFolder": "Open Folder", + "titleLocalSketchbook": "Local Sketchbook", + "titleSketchbook": "Sketchbook", + "close": "Are you sure you want to close the sketch?" + }, + "bootloader": { + "burnBootloader": "Burn Bootloader", + "doneBurningBootloader": "Done burning bootloader." + }, + "editor": { + "copyForForum": "Copy for Forum (Markdown)", + "commentUncomment": "Comment/Uncomment", + "increaseIndent": "Increase Indent", + "decreaseIndent": "Decrease Indent", + "increaseFontSize": "Increase Font Size", + "decreaseFontSize": "Decrease Font Size", + "autoFormat": "Auto Format" + }, + "examples": { + "menu": "Examples", + "couldNotInitializeExamples": "Could not initialize built-in examples.", + "builtInExamples": "Built-in examples", + "customLibrary": "Examples from Custom Libraries", + "for": "Examples for {0}", + "forAny": "Examples for any board" + }, + "help": { + "search": "Search on Arduino.cc", + "keyword": "Type a keyword", + "gettingStarted": "Getting Started", + "environment": "Environment", + "troubleshooting": "Troubleshooting", + "reference": "Reference", + "findInReference": "Find in Reference", + "faq": "Frequently Asked Questions", + "visit": "Visit Arduino.cc" + }, + "certificate": { + "uploadRootCertificates": "Upload SSL Root Certificates", + "openContext": "Open context", + "remove": "Remove", + "upload": "Upload", + "addURL": "Add URL to fetch SSL certificate", + "enterURL": "Enter URL", + "selectCertificateToUpload": "1. Select certificate to upload", + "addNew": "Add New", + "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", + "uploadingCertificates": "Uploading certificates.", + "certificatesUploaded": "Certificates uploaded.", + "uploadFailed": "Upload failed. Please try again.", + "selectBoard": "Select a board...", + "boardAtPort": "{0} at {1}", + "noSupportedBoardConnected": "No supported board connected" + }, + "firmware": { + "updater": "WiFi101 / WiFiNINA Firmware Updater", + "selectBoard": "Select Board", + "checkUpdates": "Check Updates", + "selectVersion": "Select firmware version", + "install": "Install", + "overwriteSketch": "Installation will overwrite the Sketch on the board.", + "installingFirmware": "Installing firmware.", + "successfullyInstalled": "Firmware succesfully installed.", + "failedInstall": "Installation failed. Please try again." + }, + "dialog": { + "dontAskAgain": "Don't ask again" + }, + "userFields": { + "cancel": "Cancel", + "upload": "Upload" + }, + "serial": { + "toggleTimestamp": "Toggle Timestamp", + "autoscroll": "Autoscroll", + "timestamp": "Timestamp", + "noLineEndings": "No Line Ending", + "newLine": "New Line", + "carriageReturn": "Carriage Return", + "newLineCarriageReturn": "Both NL & CR", + "notConnected": "Not connected. Select a board and a port to connect automatically.", + "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", + "connectionBusy": "Connection failed. Serial port is busy: {0}", + "disconnected": "Disconnected {0} from {1}.", + "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", + "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", + "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + }, + "component": { + "uninstall": "Uninstall", + "uninstallMsg": "Do you want to uninstall {0}?", + "by": "by", + "version": "Version {0}", + "moreInfo": "More info", + "install": "INSTALL", + "filterSearch": "Filter your search..." + }, + "electron": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "unsavedChanges": "Any unsaved changes will not be saved." + }, + "compile": { + "error": "Compilation error: {0}" + }, + "upload": { + "error": "{0} error: {1}" + }, + "burnBootloader": { + "error": "Error while burning the bootloader: {0}" + } + }, + "theia": { + "core": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "offline": "Offline", + "daemonOffline": "CLI Daemon Offline", + "cannotConnectBackend": "Cannot connect to the backend.", + "cannotConnectDaemon": "Cannot connect to the CLI daemon." + }, + "debug": { + "start": "Start...", + "typeNotSupported": "The debug session type \"{0}\" is not supported.", + "startError": "There was an error starting the debug session, check the logs for more details." + }, + "editor": { + "unsavedTitle": "Unsaved – {0}" + }, + "messages": { + "expand": "Expand", + "collapse": "Collapse" + }, + "workspace": { + "fileNewName": "Name for new file", + "invalidFilename": "Invalid filename.", + "invalidExtension": ".{0} is not a valid extension", + "newFileName": "New name for file", + "deleteCurrentSketch": "Do you want to delete the current sketch?", + "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." + } + }, + "cloud": { + "GoToCloud": "GO TO CLOUD" + } +} diff --git a/i18n/fr.json b/i18n/fr.json index 108f9768d..81ddf2ac7 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -2,15 +2,15 @@ "arduino": { "common": { "offlineIndicator": "Il semblerais que vous êtes hors-ligne. Sans connexion internet, l'Arduino CLI sera incapable de télécharger les ressources nécessaire et de communiquer avec le cloud. Merci de vous reconnectez et de redémarrer l'application.", - "noBoardSelected": "Aucune carte n'a été sélectionné ", + "noBoardSelected": "Aucune carte sélectionnée.", "selectedOn": "sur [0]", - "notConnected": "[not connected]", + "notConnected": "[hors ligne]", "serialMonitor": "Moniteur série", "oldFormat": "Le \"[0]\" continue d'utiliser l'ancien format `.pde`. Souhaitez-vous utiliser le nouveau format `.ino`?", "later": "Plus tard", "selectBoard": "Selectionner une carte", "unknown": "Inconnu", - "processing": "Traitement", + "processing": "Traitement en cours", "saveChangesToSketch": "Souhaitez-vous enregistrer les modifications apportées au croquis avant la fermeture ?", "loseChanges": "Si vous n'enregistrez pas, les modifications apportées seront perdues." }, @@ -21,7 +21,7 @@ "debug": { "optimizeForDebugging": "Optimisé pour le déboggage.", "debugWithMessage": "Débogage - [0]", - "noPlatformInstalledFor": "la plateforme n'est pas installé pour '{0}'", + "noPlatformInstalledFor": "la plateforme n'est pas installée pour '{0}'", "debuggingNotSupported": "Le débogage n'est pas supporté pour '{0}'" }, "preferences": { @@ -94,11 +94,11 @@ "pushSketchMsg": "Ceci est un croquis public. Avant de le publier, assurez-vous que les informations sensibles sont bien définies dans le fichier arduino_secrets.h. Vous pouvez rendre priver le croquis à partir du panneau de Partage.", "pull": "Tirer", "pullSketchMsg": "Pousser le croquis à partir du Cloud va écraser la version locale. Êtes-vous sûr de vouloir continuer ?", - "donePulling": "Done pulling ‘{0}’.", + "donePulling": "Récupération de '{0}' terminée.", "notYetPulled": "Impossible de push sur le Cloud. Rien n'a été pull jusque la.", "push": "Push", "pullFirst": "Vous devez tout d'abord pull vos modifications avant de pouvoir de pouvoir push à partir du Cloud.", - "donePushing": "Done pushing ‘{0}’.", + "donePushing": "Téléchargement terminé pour '{0}'", "connected": "Connecté", "offline": "Hors-ligne", "profilePicture": "Photo de profil" @@ -116,52 +116,52 @@ "succesfullyUninstalledPlatform": "Plateforme désinstallée avec succès {0}:{1}", "couldNotFindPreviouslySelected": "Impossible de trouver la carte précédente sélectionnée \"{0}\" dans les plateformes installées \"{1}\". Merci de re-sélectionner manuellement la carte que vous souhaitez utiliser. Souhaitez vous la re-sélectionner maintenant ?", "reselectLater": "Re-sélectionner plus tard", - "noneSelected": "Aucune cartes sélectionnée.", + "noneSelected": "Aucune carte sélectionnée.", "noPortsSelected": "Aucun porte sélectionné pour la carte : '{0}'", "noFQBN": "Le FQBN n'est pas disponible pour la carte sélectionnée \"{0}\". Avez installé le cœur correspondant ?", "openBoardsConfig": "Sélectionner une autre carte et un autre port ...", "boardListItem": "{0} à {1}", - "selectBoardForInfo": "Please select a board to obtain board info.", + "selectBoardForInfo": "Merci de choisir une carte pour obtenir ses informations.", "platformMissing": "La plateforme pour la carte '{0}' sélectionnée n'est pas installée.", - "selectPortForInfo": "Please select a port to obtain board info.", + "selectPortForInfo": "Merci de choisir un port pour obtenir des informations sur la carte.", "boardInfo": "Information de la carte", - "board": "Board{0}", + "board": "Carte{0}", "port": "Port{0}", - "getBoardInfo": "Get Board Info", - "inSketchbook": " (in Sketchbook)" + "getBoardInfo": "Obtenir les informations sur la carte", + "inSketchbook": "(dans le Croquis)" }, "boardsManager": "Gestionnaire de carte", "about": { - "label": "About {0}", - "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + "label": "A propos de {0}", + "detail": "Version: {0}Date: {1}{2} Version CLI: {3}{4} [{5}]{6}" }, "contributions": { "addFile": "Ajouter un fichier", - "replaceTitle": "Replace", - "fileAdded": "One file added to the sketch." + "replaceTitle": "Remplacer", + "fileAdded": "Un fichier a été ajouté au croquis" }, - "replaceMsg": "Replace the existing version of {0}?", + "replaceMsg": "Remplacer la version existante de {0} ?", "library": { "addZip": "Ajouter la bibliothèque .ZIP...", - "zipLibrary": "Library", + "zipLibrary": "Bibliothèque", "overwriteExistingLibrary": "Souhaitez-vous écraser la librairie existante ?", - "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", - "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", + "successfullyInstalledZipLibrary": "Bibliothèque correctement installée depuis l'archive {0}", + "namedLibraryAlreadyExists": "Un dossier de bibliothèque s'appelant {0} existe déjà. Voulez vous l'écraser ?", "libraryAlreadyExists": "Cette librairie existe déjà. Souhaitez-vous l'écraser ?", - "include": "Include Library", - "manageLibraries": "Manage Libraries...", - "arduinoLibraries": "Arduino libraries", - "contributedLibraries": "Contributed libraries", - "title": "Library Manager", - "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", - "needsMultipleDependencies": "La librairie {0}:{1}à besoin de d'autres dépendantes qui ne sont actuellement pas installé:", - "installOneMissingDependency": "Souhaitez-vous installer la dépendance manquante?", - "installMissingDependencies": "Souhaitez vous installer toutes les dépendances manquantes ?", - "dependenciesForLibrary": "Dépendances pour la libraire {0}:{1}", + "include": "Importer une bibliothèque", + "manageLibraries": "Gérer les bibliothèques...", + "arduinoLibraries": "Bibliothèques Arduino", + "contributedLibraries": "Bibliothèques tierce-partie", + "title": "Gestionnaire de bibliothèque", + "needsOneDependency": "La bibliothèque {0}:{1} dépend d'une autre ressource qui n'est actuellement pas installée :", + "needsMultipleDependencies": "La bibliothèque {0}:{1} dépend d'autres ressources qui ne sont actuellement pas installées :", + "installOneMissingDependency": "Souhaitez-vous installer la ressource liée manquante?", + "installMissingDependencies": "Souhaitez vous installer toutes les ressources liées manquantes ?", + "dependenciesForLibrary": "Ressources liées pour la libraire {0}:{1}", "installAll": "Tout installer", "installOnly": "Installer {0} seulement", "installedSuccessfully": "Librairie installée avec succès {0}:{1}", - "uninstalledSuccessfully": "Librairie désinstallée avec succès {0}:{1}" + "uninstalledSuccessfully": "Bibliothèque désinstallée avec succès {0}:{1}" }, "selectZip": "Sélectionnez un fichier zip contenant la bibliothèque que vous souhaitez ajouter", "sketch": { @@ -227,108 +227,108 @@ }, "certificate": { "uploadRootCertificates": "Téléverser les certificats racine SSL", - "openContext": "Open context", + "openContext": "Ouvrir le contexte", "remove": "Supprimer ", "upload": "Téléverser", - "addURL": "Add URL to fetch SSL certificate", - "enterURL": "Enter URL", - "selectCertificateToUpload": "1. Select certificate to upload", - "addNew": "Add New", - "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", - "uploadingCertificates": "Uploading certificates.", - "certificatesUploaded": "Certificates uploaded.", - "uploadFailed": "Upload failed. Please try again.", - "selectBoard": "Select a board...", - "boardAtPort": "{0} at {1}", - "noSupportedBoardConnected": "No supported board connected" + "addURL": "Ajoutez une URL pour récupérer le certificat SSL", + "enterURL": "Saisir une URL", + "selectCertificateToUpload": "1. Sélectionner le certificat à transférer", + "addNew": "Ajouter un nouveau", + "selectDestinationBoardToUpload": "2. Sélectionner la carte de destination et transférer le certificat", + "uploadingCertificates": "Transfert des certificats", + "certificatesUploaded": "Certificats transférés", + "uploadFailed": "Erreur de transfert. Merci de réessayer. ", + "selectBoard": "Selectionner une carte", + "boardAtPort": "{0} à {1}", + "noSupportedBoardConnected": "Aucune carte supportée n'est connectée" }, "firmware": { - "updater": "WiFi101 / WiFiNINA Firmware Updater", + "updater": "Mise à jour du Firmware WiFi101 / WiFiNINA", "selectBoard": "Selectionner une carte", - "checkUpdates": "Check Updates", - "selectVersion": "Select firmware version", + "checkUpdates": "Vérifier les mises à jour", + "selectVersion": "Choisir la version du firmware", "install": "Installer", - "overwriteSketch": "Installation will overwrite the Sketch on the board.", - "installingFirmware": "Installing firmware.", - "successfullyInstalled": "Firmware succesfully installed.", - "failedInstall": "Installation failed. Please try again." + "overwriteSketch": "L'installation va remplacer le croquis présent sur la carte.", + "installingFirmware": "Installation du firmware.", + "successfullyInstalled": "Firmware installé correctement.", + "failedInstall": "Erreur d'installation. Merci de réessayer." }, "dialog": { - "dontAskAgain": "Don't ask again" + "dontAskAgain": "Ne plus demander." }, "userFields": { - "cancel": "Cancel", + "cancel": "Annuler", "upload": "Téléverser" }, "serial": { - "toggleTimestamp": "Toggle Timestamp", + "toggleTimestamp": "Activer l'horodatage", "autoscroll": "Défilement automatique", - "timestamp": "Timestamp", + "timestamp": "horodatage", "noLineEndings": "Pas de fin de ligne", "newLine": "Nouvelle ligne", "carriageReturn": "Retour chariot", "newLineCarriageReturn": "Les deux, NL et CR", - "notConnected": "No connecté. Sélectionnez une carte ainsi qu'un port à connecter automatiquement.", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", - "connectionBusy": "Connection failed. Serial port is busy: {0}", + "notConnected": "Déconnecté. Sélectionnez une carte ainsi qu'un port pour vous connecter automatiquement.", + "message": "Message ({0} + Entrée pour envoyer le message à '{1}' sur '{2}'", + "connectionBusy": "Erreur de connexion. Le port série est occupé : {0}", "disconnected": "{0} déconnecté de {1}.", - "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", - "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", - "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + "unexpectedError": "Erreur inattendue. Reconnexion de {0} sur le port {1}.", + "failedReconnect": "Impossible de reconnecter {0} au port série après 10 essai consécutif. Le port série {1} est occupé.", + "reconnect": "Reconnexion de {0} à {1} dans {2} secondes..." }, "component": { - "uninstall": "Uninstall", - "uninstallMsg": "Do you want to uninstall {0}?", - "by": "by", + "uninstall": "Désinstaller", + "uninstallMsg": "Voulez vous désinstaller {0}?", + "by": "par", "version": "Version {0}", - "moreInfo": "More info", - "install": "Installer", - "filterSearch": "Filtrez votre recherche" + "moreInfo": "Plus d'information", + "install": "INSTALLER", + "filterSearch": "Filtrez votre recherche..." }, "electron": { - "couldNotSave": "Impossible d'enregistrer le croquis. Merci de faire une copie de votre travail non-enregistré dans votre éditeur de texte favoris, et redémarrez votre IDE.", - "unsavedChanges": "Any unsaved changes will not be saved." + "couldNotSave": "Impossible d'enregistrer le croquis. Veuillez copier votre travail non enregistré dans votre éditeur de texte favori et redémarrer l'IDE.", + "unsavedChanges": "Les modifications non enregistrées seront perdues." }, "compile": { - "error": "Compilation error: {0}" + "error": "Erreur de compilation : {0}" }, "upload": { - "error": "{0} error: {1}" + "error": "{0} erreur : {1}" }, "burnBootloader": { - "error": "Error while burning the bootloader: {0}" + "error": "Erreur lors de la gravure du bootloader : {0}" } }, "theia": { "core": { - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "offline": "Offline", - "daemonOffline": "CLI Daemon Offline", - "cannotConnectBackend": "Cannot connect to the backend.", - "cannotConnectDaemon": "Cannot connect to the CLI daemon." + "couldNotSave": "Impossible d'enregistrer le croquis. Veuillez copier votre travail non enregistré dans votre éditeur de texte favori et redémarrer l'IDE.", + "offline": "Hors-ligne", + "daemonOffline": "CLI Deamon hors ligne", + "cannotConnectBackend": "Impossible de se connecter au backend.", + "cannotConnectDaemon": "Impossible de se connecter au CLI Deamon." }, "debug": { - "start": "Start...", - "typeNotSupported": "The debug session type \"{0}\" is not supported.", + "start": "Commencer...", + "typeNotSupported": "Le type de session de débogage \"{0}\" n'est pas pris en charge.", "startError": "Une erreur est survenue lors du démarrage du débogage, consultez les logs pour plus de détails." }, "editor": { - "unsavedTitle": "Unsaved – {0}" + "unsavedTitle": "Non enregistré – {0}" }, "messages": { - "expand": "Expand", - "collapse": "Collapse" + "expand": "Replier", + "collapse": "Replier" }, "workspace": { - "fileNewName": "Name for new file", - "invalidFilename": "Invalid filename.", + "fileNewName": "Nouveau nom pour le fichier", + "invalidFilename": "Nom de fichier non valide", "invalidExtension": "« .{0} » n''est pas une extension valide.", - "newFileName": "New name for file", - "deleteCurrentSketch": "Do you want to delete the current sketch?", + "newFileName": "Nouveau nom pour le fichier", + "deleteCurrentSketch": "Voulez-vous supprimer le croquis en cours ?", "sketchDirectoryError": "Une erreur est survenue lors de la création du dossier du croquis. Consultez les logs pour plus de détails. L'application ne fonctionnera probablement pas comme attendu." } }, "cloud": { - "GoToCloud": "GO TO CLOUD" + "GoToCloud": "ALLER AU CLOUD" } } diff --git a/i18n/hu.json b/i18n/hu.json index 459770646..6ee173062 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -1,334 +1,334 @@ { "arduino": { "common": { - "offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.", - "noBoardSelected": "No board selected", - "selectedOn": "on {0}", - "notConnected": "[not connected]", - "serialMonitor": "Serial Monitor", - "oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?", - "later": "Later", - "selectBoard": "Select Board", - "unknown": "Unknown", - "processing": "Processing", - "saveChangesToSketch": "Do you want to save changes to this sketch before closing?", - "loseChanges": "If you don't save, your changes will be lost." + "offlineIndicator": "Az internet nem érhető el. Internetkapcsolat nélkül előfordulhat, hogy az Arduino CLI nem tudja letölteni a szükséges erőforrásokat, és hibás működést okozhat. Csatlakozz az internethez és indítsd újra az alkalmazást. ", + "noBoardSelected": "Nincsen alappanel kiválasztva", + "selectedOn": "{0}-n", + "notConnected": "[nem csatlakozik]", + "serialMonitor": "Soros monitor", + "oldFormat": "A „{0}” továbbra is a régi „.pde” formátumot használja. Szeretnéd átírni az új `.ino` kiterjesztésre? ", + "later": "később", + "selectBoard": "Alaplap választás", + "unknown": "ismeretlen", + "processing": "Feldolgozás", + "saveChangesToSketch": "Menteni szeretnéd a vázlat módosításait a bezárás előtt? ", + "loseChanges": "Ha nem mented, akkor a módosítások elvesznek. " }, "menu": { "sketch": "Sketch", - "tools": "Tools" + "tools": "Eszközök" }, "debug": { - "optimizeForDebugging": "Optimize for Debugging", - "debugWithMessage": "Debug - {0}", - "noPlatformInstalledFor": "Platform is not installed for '{0}'", - "debuggingNotSupported": "Debugging is not supported by '{0}'" + "optimizeForDebugging": "Optimalizálás hibakereséséhez", + "debugWithMessage": "Hibakeresés/Debug - {0}", + "noPlatformInstalledFor": "A platform nincs telepítve a következőhöz: „{0}” ", + "debuggingNotSupported": "A hibakeresést a '{0}' nem támogatja " }, "preferences": { - "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", - "compile.verbose": "True for verbose compile output. False by default", - "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", - "upload.verbose": "True for verbose upload output. False by default.", - "window.autoScale": "True if the user interface automatically scales with the font size.", - "window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.", - "ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.", - "board.certificates": "List of certificates that can be uploaded to boards", - "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", - "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", - "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", - "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", - "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", - "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", - "auth.clientID": "The OAuth2 client ID.", - "auth.domain": "The OAuth2 domain.", - "auth.audience": "The OAuth2 audience.", - "auth.registerUri": "The URI used to register a new user.", - "network": "Network", - "sketchbook.location": "Sketchbook location", - "browse": "Browse", - "files.inside.sketches": "Show files inside Sketches", - "editorFontSize": "Editor font size", - "interfaceScale": "Interface scale", - "showVerbose": "Show verbose output during", - "compilerWarnings": "Compiler warnings", - "automatic": "Automatic", - "compile": "compile", - "upload": "upload", - "verifyAfterUpload": "Verify code after upload", - "checkForUpdates": "Check for updates on startup", - "editorQuickSuggestions": "Editor Quick Suggestions", - "additionalManagerURLs": "Additional Boards Manager URLs", - "noProxy": "No proxy", - "manualProxy": "Manual proxy configuration", - "newSketchbookLocation": "Select new sketchbook location", - "choose": "Choose", - "enterAdditionalURLs": "Enter additional URLs, one for each row", - "unofficialBoardSupport": "Click for a list of unofficial board support URLs", - "invalid.sketchbook.location": "Invalid sketchbook location: {0}", - "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", - "invalid.theme": "Invalid theme." + "language.log": "Igaz/kipipálva/, ha az Arduino Language Server naplófájlokat generál a vázlat mappába. Ellenkező esetben hamis/nincs kipipálva. Alapértelmezés szerint: hamis. ", + "compile.verbose": "Kipipálva: a részletes fordítási üzenetek képernyőre írása. Alapértelmezés szerint: nincs kipipálva.", + "compile.warnings": "Beállítja a gcc fordítónak, hogy melyik figyelmeztetési szintet kell használni. Ez alapértelmezés szerint: „Nincs/None”. ", + "upload.verbose": "Kipipálva: a részletes feltöltési üzenetek kiírása a képernyőre. Alapértelmezés szerint hamis/nincs kipipálva.", + "window.autoScale": "Kipipálva, ha a felhasználói felület automatikusan méreteződik a betűmérettel együtt. ", + "window.zoomLevel": "Ablak nagyítási szintjének megadása. Az eredeti méret: 0, és minden lépés növelése (pl. 1) vagy csökkentése (pl. -1) 20%-kal nagyobb vagy kisebb nagyítást jelent. Tizedesjegyeket is meg lehet adni a nagyítási szint finomabb beállításához. ", + "ide.autoUpdate": "Kipipálva: engedélyezi az automatikus frissítést. A keretrendszer automatikusan és rendszeresen ellenőrzi a megjelenő frissítéseket.", + "board.certificates": "Az alaplapokra feltölthető tanúsítványok listája", + "sketchbook.showAllFiles": "Kipipálva: az összes vázlatfájl/sketch megjelenítése a vázlaton/sketch-en belül. Alapértelmezés szerint: nincs kipipálva.", + "cloud.enabled": "Kipipálva: a vázlat/sketch-szinkronizálás engedélyezve van. Alapértelmezés: kipipálva. ", + "cloud.pull.warn": "Kipipálva: figyelmeztetés megjelenítése a vázlat/sketch felhőből letöltése előtt. Alapértelmezés szerint: kipipálva.", + "cloud.push.warn": "Kipipálva: figyelmeztetés megjelenítése a vázlat/sketch felhőből való letöltése előtt. Alapértelmezés: kipipálva. ", + "cloud.pushpublic.warn": "Kipipálva: figyelmeztetés megjelenítése a nyilvános vázlat/sketch felhőbe küldése előtt. Alapértelmezés szerint: kipipálva.", + "cloud.sketchSyncEnpoint": "A végpont/endpoint a vázlatok/sketch-ek háttéből történő letöltésére illetve publikálására szolgál. Alapértelmezés szerint az Arduino Cloud API-ra mutat. ", + "auth.clientID": "OAuth2 client ID.", + "auth.domain": "OAuth2 domain.", + "auth.audience": "Az OAuth2 közönség/audience. ", + "auth.registerUri": "Új felhasználó regisztrálására használt URI.", + "network": "Hálózat", + "sketchbook.location": "SketchBook elérési helye ", + "browse": "Tallóz", + "files.inside.sketches": "Fájlok mutatása a Vázlat/Sketch-en belül", + "editorFontSize": "Szerkesztő betűméret", + "interfaceScale": "Interfész skála", + "showVerbose": "Részletes kimenet megjelenítése eközben: ", + "compilerWarnings": "Fordítóprogram figyelmeztetései / Compiler warnings", + "automatic": "Automatikus", + "compile": "fordítás", + "upload": "feltöltés", + "verifyAfterUpload": "Kód ellenőrzése feltöltés után", + "checkForUpdates": "Frissítések ellenőrzése a program indításakor", + "editorQuickSuggestions": "Szerkesztői gyorstippek", + "additionalManagerURLs": "Kiegészítő alaplapok URL-jei", + "noProxy": "Nincs proxy", + "manualProxy": "Kézi proxy konfiguráció", + "newSketchbookLocation": "Új Vázlatfüzet/Sketchbook elérési út", + "choose": "Választás", + "enterAdditionalURLs": "Adj meg további URL-eket - soronként egyet ", + "unofficialBoardSupport": "Kattints ide a nem hivatalos alaplapok fordítási URL-jeinek listájához ", + "invalid.sketchbook.location": "Érvénytelen elérési út a vázlatfüzethez/sketchbook-hoz: {0} ", + "invalid.editorFontSize": "A szerkesztő betűmérete érvénytelen. Pozitív egész számnak kell lennie. ", + "invalid.theme": "Érvénytelen megjelenési felület/téma. " }, "cloud": { - "signIn": "SIGN IN", - "signOut": "Sign Out", - "chooseSketchVisibility": "Choose visibility of your Sketch:", - "privateVisibility": "Private. Only you can view the Sketch.", - "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "signIn": "BEJELENTKEZÉS", + "signOut": "Kijelentkezés", + "chooseSketchVisibility": "Válaszd ki a vázlat/sketch láthatóságát: ", + "privateVisibility": "Privát. Csak Te láthatod a vázlatot/sketch-et. ", + "publicVisibility": "Nyilvános. A link birtokában bárki megtekintheti a vázlatot/sketch-et. ", "link": "Link:", - "embed": "Embed:", - "cloudSketchbook": "Cloud Sketchbook", - "shareSketch": "Share Sketch", - "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", - "pullSketch": "Pull Sketch", - "openInCloudEditor": "Open in Cloud Editor", - "options": "Options...", - "share": "Share...", - "remote": "Remote", - "emptySketchbook": "Your Sketchbook is empty", - "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", - "signInToCloud": "Sign in to Arduino Cloud", - "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", - "learnMore": "Learn more", - "continue": "Continue", - "pushSketch": "Push Sketch", - "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", - "pull": "Pull", - "pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?", - "donePulling": "Done pulling ‘{0}’.", - "notYetPulled": "Cannot push to Cloud. It is not yet pulled.", - "push": "Push", - "pullFirst": "You have to pull first to be able to push to the Cloud.", - "donePushing": "Done pushing ‘{0}’.", - "connected": "Connected", - "offline": "Offline", - "profilePicture": "Profile picture" + "embed": "Beágyazva:", + "cloudSketchbook": "Felhő vázlatfüzet/sketchbook ", + "shareSketch": "Vázlat/sketch megosztása", + "showHideRemoveSketchbook": "Távoli vázlatfüzet/sketch megjelenítése/elrejtése ", + "pullSketch": "Sketch letöltése", + "openInCloudEditor": "Megnyitás a Cloud Editorban", + "options": "Opciók...", + "share": "Megosztás...", + "remote": "Távoli", + "emptySketchbook": "A vázlatfüzeted/Sketchbook-od üres ", + "visitArduinoCloud": "Látogasd meg az Arduino Cloud webhelyet, hogy a felhőben vázlatokat hozhass létre. ", + "signInToCloud": "Bejelentkezés az Arduino Cloudba ", + "syncEditSketches": "Arduino felhővázlatok szinkronizálása és szerkesztése", + "learnMore": "Tudj meg többet", + "continue": "Tovább", + "pushSketch": "Vázlat/sketch feltöltése", + "pushSketchMsg": "Ez egy nyilvános vázlat/sketch. A beküldés előtt győződj meg arról, hogy minden érzékeny információ definiálva van az arduino_secrets.h fájlokban. A vázlatot priváttá tehet tenni a Megosztás panelen. ", + "pull": "Letöltés", + "pullSketchMsg": "Ennek a vázlatnak a felhőből való letöltése felülírja a helyi verzióját. Biztos, hogy akarod folytatni? ", + "donePulling": "Letöltés kész: '{0}'.", + "notYetPulled": "Nem küldhető a felhőbe. Még nem lett letöltve. ", + "push": "Feltöltés", + "pullFirst": "Először le kell töltened, hogy a Felhőbe fel tudd tölteni utána. ", + "donePushing": "Feltöltés kész: '{0}'.", + "connected": "Kapcsolódva", + "offline": "Offline / nincs hálózat", + "profilePicture": "Profilkép" }, "board": { - "installManually": "Install Manually", - "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", - "configDialogTitle": "Select Other Board & Port", - "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", - "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", - "pleasePickBoard": "Please pick a board connected to the port you have selected.", - "showAllAvailablePorts": "Shows all available ports when enabled", - "programmer": "Programmer", - "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", - "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", - "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", - "reselectLater": "Reselect later", - "noneSelected": "No boards selected.", - "noPortsSelected": "No ports selected for board: '{0}'.", - "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", - "openBoardsConfig": "Select other board and port…", - "boardListItem": "{0} at {1}", - "selectBoardForInfo": "Please select a board to obtain board info.", - "platformMissing": "The platform for the selected '{0}' board is not installed.", - "selectPortForInfo": "Please select a port to obtain board info.", - "boardInfo": "Board Info", - "board": "Board{0}", - "port": "Port{0}", - "getBoardInfo": "Get Board Info", - "inSketchbook": " (in Sketchbook)" + "installManually": "Kézi telepítés", + "installNow": "A \"{0} {1}\" támogatást telepíteni kell az aktuálisan kiválasztott \"{2}\" alaplaphoz. Most szeretnéd telepíteni? ", + "configDialogTitle": "Egyéb Alaplap és Port választása", + "configDialog1": "Válassz ki egy alaplapot és egy portot is - csak ekkor lehetséges a feltöltés. ", + "configDialog2": "Ha csak az alaplap van kiválasztva, akkor csak lefordítani lehet a vázlatot/sketch-et - feltölteni az alaplapra nem.", + "pleasePickBoard": "Válassz alaplapot, amely a kiválasztott porthoz csatlakozik. ", + "showAllAvailablePorts": "Elérhető portok mutatása - ha engedélyezett", + "programmer": "Programozó", + "succesfullyInstalledPlatform": "Sikeresen telepített platform {0}:{1}", + "succesfullyUninstalledPlatform": "A platform sikeresen eltávolítva: {0}:{1} ", + "couldNotFindPreviouslySelected": "Nem található a korábban kiválasztott '{0}' alaplap a/az '{1}' telepített platformon. Válaszd ki újra a használni kívánt alaplapot. Szeretnéd most újra megadni?", + "reselectLater": "Később újra válaszd ki", + "noneSelected": "Nincs alaplap kiválasztva", + "noPortsSelected": "Nincsen port kiválasztva a alaplaphoz: '{0}'. ", + "noFQBN": "Az FQBN nem érhető el a kiválasztott „{0}” alaplapon. A megfelelő mag/core telepítve van? ", + "openBoardsConfig": "Válassz másik alaplapot és portot… ", + "boardListItem": "{0} a/az {1} esetén", + "selectBoardForInfo": "Válassz egy alaplapot az információinak megtekintéséhez. ", + "platformMissing": "A kiválasztott '{0}' alaplap platformja nincs telepítve. ", + "selectPortForInfo": "Válassz egy portot az alaplap információinak megtekintéséhez. ", + "boardInfo": "Alaplapi információk", + "board": "Alaplap {0}", + "port": "Port {0}", + "getBoardInfo": "Alaplap információk beszerzése", + "inSketchbook": "(a vázlatfüzetben/sketchbook-ban) " }, - "boardsManager": "Boards Manager", + "boardsManager": "Alaplap-kezelő", "about": { "label": "About {0}", - "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + "detail": "Verziószám: {0}\nDátum: {1}{2}\nCLI Verziószám: {3}{4} [{5}]\n\n{6}" }, "contributions": { - "addFile": "Add File", - "replaceTitle": "Replace", - "fileAdded": "One file added to the sketch." + "addFile": "Fájl hozzáadása", + "replaceTitle": "Csere", + "fileAdded": "Egy fájl hozzáadása megtörtént a vázlathoz/sketch-hez. " }, - "replaceMsg": "Replace the existing version of {0}?", + "replaceMsg": "Lecseréled a/az {0} meglévő verzióját? ", "library": { - "addZip": "Add .ZIP Library...", - "zipLibrary": "Library", - "overwriteExistingLibrary": "Do you want to overwrite the existing library?", - "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", - "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", - "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", - "include": "Include Library", - "manageLibraries": "Manage Libraries...", - "arduinoLibraries": "Arduino libraries", - "contributedLibraries": "Contributed libraries", - "title": "Library Manager", - "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", - "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", - "installOneMissingDependency": "Would you like to install the missing dependency?", - "installMissingDependencies": "Would you like to install all the missing dependencies?", - "dependenciesForLibrary": "Dependencies for library {0}:{1}", - "installAll": "Install all", - "installOnly": "Install {0} only", - "installedSuccessfully": "Successfully installed library {0}:{1}", - "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" + "addZip": "ZIP könyvtár hozzáadása...", + "zipLibrary": "Könyvtár", + "overwriteExistingLibrary": "Felül akarod írni a meglévő könyvtárat? ", + "successfullyInstalledZipLibrary": "A könyvtár sikeresen telepítve a/az {0} archívumból ", + "namedLibraryAlreadyExists": "A/az {0} nevű könyvtármappa már létezik. Felül akarod írni? ", + "libraryAlreadyExists": "Már létezik a könyvtár. Felül akarod írni? ", + "include": "Tartalmazza a könyvtárat", + "manageLibraries": "Könyvtárak kezelése... ", + "arduinoLibraries": "Arduino könyvtárak", + "contributedLibraries": "Közreműködő könyvtárak ", + "title": "Könyvtárkezelő", + "needsOneDependency": "A/az {0}:{1} könyvtárnak egy másik, jelenleg nem telepített függőségre van szüksége: ", + "needsMultipleDependencies": "A/az {0}:{1} könyvtárnak további, jelenleg nem telepített függőségekre van szüksége: ", + "installOneMissingDependency": "Szeretnéd telepíteni a hiányzó függőséget? ", + "installMissingDependencies": "Szeretnéd telepíteni az összes hiányzó függőséget?", + "dependenciesForLibrary": "A/az {0} könyvtár függőségei: {1}", + "installAll": "Minden telepítése", + "installOnly": "Csak {0} telepítése", + "installedSuccessfully": "Sikeresen telepített könyvtár {0}:{1}", + "uninstalledSuccessfully": "A könyvtár sikeresen eltávolítva: {0}:{1} " }, - "selectZip": "Select a zip file containing the library you'd like to add", + "selectZip": "Válaszd ki a hozzáadni kívánt könyvtárat tartalmazó ZIP-fájlt ", "sketch": { - "archiveSketch": "Archive Sketch", - "saveSketchAs": "Save sketch folder as...", - "createdArchive": "Created archive '{0}'.", - "new": "New", - "openRecent": "Open Recent", - "showFolder": "Show Sketch Folder", - "sketch": "Sketch", - "moving": "Moving", - "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", - "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", - "saveFolderAs": "Save sketch folder as...", - "sketchbook": "Sketchbook", - "upload": "Upload", - "uploadUsingProgrammer": "Upload Using Programmer", - "userFieldsNotFoundError": "Can't find user fields for connected board", - "doneUploading": "Done uploading.", - "configureAndUpload": "Configure And Upload", - "verifyOrCompile": "Verify/Compile", - "exportBinary": "Export Compiled Binary", - "verify": "Verify", - "doneCompiling": "Done compiling.", - "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", - "openSketchInNewWindow": "Open Sketch in New Window", - "openFolder": "Open Folder", - "titleLocalSketchbook": "Local Sketchbook", - "titleSketchbook": "Sketchbook", - "close": "Are you sure you want to close the sketch?" + "archiveSketch": "Vázlat/sketch archiválása", + "saveSketchAs": "Vázlat-/sketch-mappa mentése másként... ", + "createdArchive": "Archívum létrehozva: {0}. ", + "new": "Új", + "openRecent": "Legutóbbi megnyitása", + "showFolder": "Vázlat-/sketch-mappa megjelenítése", + "sketch": "Vázlat/sketch", + "moving": "Mozgatás", + "movingMsg": "A/az {0} fájlnak egy {1} nevű vázlat-/sketch-mappában kell lennie. Létrehozzam ezt a mappát, áthelyezzem a fájlt, és folytassam a műveletet?", + "cantOpen": "Már létezik a/az {0} nevű mappa. A vázlat/sketch nem nyitható meg. ", + "saveFolderAs": "Vázlat-/sketch-mappa mentése másként... ", + "sketchbook": "Vázlatfüzet/sketchbook ", + "upload": "Feltöltés", + "uploadUsingProgrammer": "Feltöltés programozó segítségével", + "userFieldsNotFoundError": "Nem találhatók felhasználói adatok a csatlakoztatott kártyához", + "doneUploading": "Feltöltés kész.", + "configureAndUpload": "Konfigurálás és feltöltés", + "verifyOrCompile": "Ellenőrzés/fordítás", + "exportBinary": "Összeállított bináris exportálása", + "verify": "Ellenőrzés", + "doneCompiling": "Fordítás kész.", + "couldNotConnectToSerial": "Nem sikerült újracsatlakozni a {0} soros porthoz.", + "openSketchInNewWindow": "Vázlat/sketch megnyitása új ablakban", + "openFolder": "Mappa megnyitása", + "titleLocalSketchbook": "Helyi vázlatfüzet/sketchbook ", + "titleSketchbook": "Vázlatfüzet/sketchbook ", + "close": "Biztosan bezárod a vázlatot/sketch-et? " }, "bootloader": { - "burnBootloader": "Burn Bootloader", - "doneBurningBootloader": "Done burning bootloader." + "burnBootloader": "Bootloader égetése", + "doneBurningBootloader": "Bootloader égetés kész." }, "editor": { - "copyForForum": "Copy for Forum (Markdown)", - "commentUncomment": "Comment/Uncomment", - "increaseIndent": "Increase Indent", - "decreaseIndent": "Decrease Indent", - "increaseFontSize": "Increase Font Size", - "decreaseFontSize": "Decrease Font Size", - "autoFormat": "Auto Format" + "copyForForum": "Másolás a fórumba beillesztéshez (formázással)", + "commentUncomment": "Megjegyzés / Megjegyzés visszavonása ", + "increaseIndent": "Behúzás növelése", + "decreaseIndent": "Behúzás csökkentése", + "increaseFontSize": "Betűméret növelése", + "decreaseFontSize": "Betűméret csökkentése", + "autoFormat": "Automatikus formázás" }, "examples": { - "menu": "Examples", - "couldNotInitializeExamples": "Could not initialize built-in examples.", - "builtInExamples": "Built-in examples", - "customLibrary": "Examples from Custom Libraries", - "for": "Examples for {0}", - "forAny": "Examples for any board" + "menu": "Példák", + "couldNotInitializeExamples": "Nem sikerült inicializálni/előhívni a beépített példákat. ", + "builtInExamples": "Beépített példák", + "customLibrary": "Példák egyéni könyvtárakból", + "for": "Példák a {0} -hoz", + "forAny": "Példák valamennyi alaplapra" }, "help": { - "search": "Search on Arduino.cc", - "keyword": "Type a keyword", - "gettingStarted": "Getting Started", - "environment": "Environment", - "troubleshooting": "Troubleshooting", - "reference": "Reference", - "findInReference": "Find in Reference", - "faq": "Frequently Asked Questions", - "visit": "Visit Arduino.cc" + "search": "Keresés az Arduino.cc oldalon", + "keyword": "Írj be egy kulcsszót", + "gettingStarted": "Kezdés", + "environment": "Környezet", + "troubleshooting": "Hibaelhárítás", + "reference": "Referencia ", + "findInReference": "Keresse meg a Referenciákban", + "faq": "Gyakran ismételt kérdések", + "visit": "Arduino.cc meglátogatása" }, "certificate": { - "uploadRootCertificates": "Upload SSL Root Certificates", - "openContext": "Open context", - "remove": "Remove", - "upload": "Upload", - "addURL": "Add URL to fetch SSL certificate", - "enterURL": "Enter URL", - "selectCertificateToUpload": "1. Select certificate to upload", - "addNew": "Add New", - "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", - "uploadingCertificates": "Uploading certificates.", - "certificatesUploaded": "Certificates uploaded.", - "uploadFailed": "Upload failed. Please try again.", - "selectBoard": "Select a board...", - "boardAtPort": "{0} at {1}", - "noSupportedBoardConnected": "No supported board connected" + "uploadRootCertificates": "SSL gyökér-/root-tanúsítványok feltöltése ", + "openContext": "Nyitott kontextus ", + "remove": "Eltávolítás", + "upload": "Feltöltés", + "addURL": "Adj hozzá URL-t az SSL-tanúsítvány lekéréséhez ", + "enterURL": "URL megadása", + "selectCertificateToUpload": "1. Válaszd ki a feltölteni kívánt tanúsítványt ", + "addNew": "Új hozzáadása", + "selectDestinationBoardToUpload": "2. Válaszd ki az alaplapot, és töltsd fel a tanúsítványt ", + "uploadingCertificates": "Tanúsítványok feltöltése ", + "certificatesUploaded": "Tanúsítáványok feltöltve.", + "uploadFailed": "A feltöltés nem sikerült. Próbáld meg újra.", + "selectBoard": "Alaplap kiválasztása...", + "boardAtPort": "{0} a/az {1} eseténél", + "noSupportedBoardConnected": "Nincs támogatott alaplap csatlakoztatva " }, "firmware": { - "updater": "WiFi101 / WiFiNINA Firmware Updater", - "selectBoard": "Select Board", - "checkUpdates": "Check Updates", - "selectVersion": "Select firmware version", - "install": "Install", - "overwriteSketch": "Installation will overwrite the Sketch on the board.", - "installingFirmware": "Installing firmware.", - "successfullyInstalled": "Firmware succesfully installed.", - "failedInstall": "Installation failed. Please try again." + "updater": "WiFi101 / WiFiNINA Firmware feltöltés", + "selectBoard": "Alaplap választás", + "checkUpdates": "Frissítések ellenőrzése", + "selectVersion": "Firmware verzió kiválasztása", + "install": "Telepítés", + "overwriteSketch": "A telepítés felülírja a Sketch-et az alaplapon. ", + "installingFirmware": "Firmware telepítése.", + "successfullyInstalled": "Firmware telepítése sikeres.", + "failedInstall": "A feltöltés nem sikerült. Próbáld meg újra." }, "dialog": { - "dontAskAgain": "Don't ask again" + "dontAskAgain": "Ne kérdezd meg még egyszer" }, "userFields": { - "cancel": "Cancel", - "upload": "Upload" + "cancel": "Mégsem", + "upload": "Feltöltés" }, "serial": { - "toggleTimestamp": "Toggle Timestamp", - "autoscroll": "Autoscroll", - "timestamp": "Timestamp", - "noLineEndings": "No Line Ending", - "newLine": "New Line", - "carriageReturn": "Carriage Return", - "newLineCarriageReturn": "Both NL & CR", - "notConnected": "Not connected. Select a board and a port to connect automatically.", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", - "connectionBusy": "Connection failed. Serial port is busy: {0}", - "disconnected": "Disconnected {0} from {1}.", - "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", - "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", - "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + "toggleTimestamp": "Időbélyeg váltása", + "autoscroll": "Automatikus görgetés", + "timestamp": "Időbélyeg", + "noLineEndings": "Nincs sorvége ", + "newLine": "Új sor", + "carriageReturn": "Kocsi vissza", + "newLineCarriageReturn": "Mindkettő: Új sor és Kocsi vissza - NL&CR", + "notConnected": "Nincs kapcsolat. Válassz ki egy alaplapot és egy portot az automatikus csatlakozáshoz. ", + "message": "Üzenet ({0} + Enter az üzenet elküldéséhez az {1} itt: {2}", + "connectionBusy": "Kapcsolat nem jött létre. A {0} soros port foglalt.", + "disconnected": "Megszakadt a/az {0} és a/az {1} kapcsolata. ", + "unexpectedError": "Váratlan hiba. A/az {0} újracsatlakozása a/az {1} porton. ", + "failedReconnect": "10 egymást követő próbálkozás után nem sikerült újracsatlakozni a/az {0} soros porthoz. A/az {1} soros port foglalt. ", + "reconnect": "A/az {0} és a/az {1} újracsatlakozása {2} másodperc múlva... " }, "component": { - "uninstall": "Uninstall", - "uninstallMsg": "Do you want to uninstall {0}?", - "by": "by", - "version": "Version {0}", - "moreInfo": "More info", - "install": "INSTALL", - "filterSearch": "Filter your search..." + "uninstall": "Eltávolítás", + "uninstallMsg": "El szeretnéd távolítani a következőt: {0}? ", + "by": "által", + "version": "Verzió: {0}", + "moreInfo": "Több info", + "install": "TELEPÍTÉS", + "filterSearch": "Keresési eredmény szűrése... " }, "electron": { - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "unsavedChanges": "Any unsaved changes will not be saved." + "couldNotSave": "Nem sikerült menteni a vázlatot/sketch-et. Másold át a nem mentett munkát kedvenc szövegszerkesztődbe és indítsd újra az IDE-t. ", + "unsavedChanges": "A nem mentett módosítások nem kerülnek mentésre. " }, "compile": { - "error": "Compilation error: {0}" + "error": "Összeállítási hiba: {0} " }, "upload": { - "error": "{0} error: {1}" + "error": "{0} hiba: {1}" }, "burnBootloader": { - "error": "Error while burning the bootloader: {0}" + "error": "Hiba a bootloader írása közben: {0} " } }, "theia": { "core": { - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "offline": "Offline", - "daemonOffline": "CLI Daemon Offline", - "cannotConnectBackend": "Cannot connect to the backend.", - "cannotConnectDaemon": "Cannot connect to the CLI daemon." + "couldNotSave": "Nem sikerült menteni a vázlatot/sketch-et. Másold át a nem mentett munkát kedvenc szövegszerkesztődbe és indítsd újra az IDE-t. ", + "offline": "Offline / nincs hálózat", + "daemonOffline": "CLI Daemon offline/elérhetetlen ", + "cannotConnectBackend": "Nem lehet csatlakozni a háttérrendszerhez/backend-hez. ", + "cannotConnectDaemon": "Nem lehet csatlakozni a CLI daemon-hoz." }, "debug": { "start": "Start...", - "typeNotSupported": "The debug session type \"{0}\" is not supported.", - "startError": "There was an error starting the debug session, check the logs for more details." + "typeNotSupported": "A {0} hibakeresési munkamenet típusa nem támogatott. ", + "startError": "Hiba történt a hibakeresési munkamenet indításakor. További részletekért ellenőrizd a naplókat. " }, "editor": { - "unsavedTitle": "Unsaved – {0}" + "unsavedTitle": "Nincs mentve – {0}" }, "messages": { - "expand": "Expand", - "collapse": "Collapse" + "expand": "Bővebb", + "collapse": "Összecsuk" }, "workspace": { - "fileNewName": "Name for new file", - "invalidFilename": "Invalid filename.", - "invalidExtension": ".{0} is not a valid extension", - "newFileName": "New name for file", - "deleteCurrentSketch": "Do you want to delete the current sketch?", - "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." + "fileNewName": "Az új fájl neve", + "invalidFilename": "Hibás fájlnév.", + "invalidExtension": "A .{0} nem érvényes kiterjesztés", + "newFileName": "A fájl új neve", + "deleteCurrentSketch": "Törlöd az aktuális vázlatot/sketch-et? ", + "sketchDirectoryError": "Hiba történt a vázlatkönyvtár/sketchbook létrehozásakor. További részletekért lásd a naplót. Az alkalmazás valószínűleg nem fog megfelelően működni. " } }, "cloud": { - "GoToCloud": "GO TO CLOUD" + "GoToCloud": "UGRÁS A FELHŐHÖZ " } } diff --git a/i18n/it.json b/i18n/it.json index e809e7649..2b771b266 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -7,46 +7,46 @@ "notConnected": "[non connesso]", "serialMonitor": "Monitor seriale", "oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?", - "later": "Later", + "later": "Dopo", "selectBoard": "Seleziona Scheda", - "unknown": "Unknown", - "processing": "Processing", - "saveChangesToSketch": "Do you want to save changes to this sketch before closing?", - "loseChanges": "If you don't save, your changes will be lost." + "unknown": "Sconosciuto", + "processing": "In elaborazione", + "saveChangesToSketch": "Vuoi salvare i cambiamenti a questo sketch prima di chiudere?", + "loseChanges": "Se non salvi, tutti i cambiamenti saranno persi." }, "menu": { "sketch": "Sketch", "tools": "Strumenti" }, "debug": { - "optimizeForDebugging": "Optimize for Debugging", + "optimizeForDebugging": "Ottimizzato per il Debug.", "debugWithMessage": "Debug - {0}", - "noPlatformInstalledFor": "Platform is not installed for '{0}'", - "debuggingNotSupported": "Debugging is not supported by '{0}'" + "noPlatformInstalledFor": "La piattaforma non è ancora stata installata per '{0}'", + "debuggingNotSupported": "Il debug non è supportato da '{0}'" }, "preferences": { "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", - "compile.verbose": "True for verbose compile output. False by default", + "compile.verbose": "Vero per compilazione esplicita. Falso come opzione predefinita", "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", "upload.verbose": "True for verbose upload output. False by default.", "window.autoScale": "True if the user interface automatically scales with the font size.", - "window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.", - "ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.", - "board.certificates": "List of certificates that can be uploaded to boards", - "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", + "window.zoomLevel": "Regola il livello di zoom della finestra. La dimensione originale è 0 e ogni incremento sopra (es. 1) o sotto (es. -1) rappresenta lo zoom del 20% in più o in meno. Puoi anche inserire i decimali per regolare il livello di zoom con una granularità più fine.", + "ide.autoUpdate": "Vero per abilitare i controlli automatici degli aggiornamenti. L'IDE controllerà gli aggiornamenti periodicamente in automatico.", + "board.certificates": "Lista dei certificati che possono essere caricati nelle schede", + "sketchbook.showAllFiles": "Vero per mostrare tutti i file relativi contenuti all'interno dello sketch. L'opzione predefinita è falso.", "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", - "auth.clientID": "The OAuth2 client ID.", - "auth.domain": "The OAuth2 domain.", + "auth.clientID": "il Client ID OAuth2.", + "auth.domain": "Dominio OAuth2.", "auth.audience": "The OAuth2 audience.", "auth.registerUri": "The URI used to register a new user.", "network": "Rete", "sketchbook.location": "Percorso della cartella degli sketch", "browse": "Sfoglia", - "files.inside.sketches": "Show files inside Sketches", + "files.inside.sketches": "Mostra i file all'interno degli Sketch", "editorFontSize": "Dimensione del carattere dell'editor", "interfaceScale": "Scalabilità dell'interfaccia", "showVerbose": "Mostra un output dettagliato durante", @@ -60,8 +60,8 @@ "additionalManagerURLs": "URL aggiuntive per il Gestore schede", "noProxy": "Nessun proxy", "manualProxy": "Configurazione manuale del proxy", - "newSketchbookLocation": "Select new sketchbook location", - "choose": "Choose", + "newSketchbookLocation": "Seleziona un percorso per il nuovo sketchbook", + "choose": "Scegli", "enterAdditionalURLs": "Enter additional URLs, one for each row", "unofficialBoardSupport": "Click for a list of unofficial board support URLs", "invalid.sketchbook.location": "Invalid sketchbook location: {0}", @@ -81,14 +81,14 @@ "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", "pullSketch": "Pull Sketch", "openInCloudEditor": "Open in Cloud Editor", - "options": "Options...", - "share": "Share...", - "remote": "Remote", - "emptySketchbook": "Your Sketchbook is empty", - "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", + "options": "Opzioni...", + "share": "Condividi...", + "remote": "Remoto", + "emptySketchbook": "Lo Sketchbook è vuoto", + "visitArduinoCloud": "Visita Arduino Cloud per creare Cloud Sketch ", "signInToCloud": "Sign in to Arduino Cloud", "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", - "learnMore": "Learn more", + "learnMore": "Più informazioni", "continue": "Continua", "pushSketch": "Push Sketch", "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", @@ -99,34 +99,34 @@ "push": "Push", "pullFirst": "You have to pull first to be able to push to the Cloud.", "donePushing": "Done pushing ‘{0}’.", - "connected": "Connected", - "offline": "Offline", + "connected": "Connesso", + "offline": "Fuori linea", "profilePicture": "Profile picture" }, "board": { - "installManually": "Install Manually", + "installManually": "Installa manualmente", "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", - "configDialogTitle": "Select Other Board & Port", - "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", + "configDialogTitle": "Seleziona un'altra scheda o porta", + "configDialog1": "Seleziona una scheda ed una porta se vuoi inviare lo sketch.", "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", "pleasePickBoard": "Please pick a board connected to the port you have selected.", "showAllAvailablePorts": "Shows all available ports when enabled", - "programmer": "Programmer", + "programmer": "Programmatore", "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", "reselectLater": "Reselect later", - "noneSelected": "No boards selected.", + "noneSelected": "Nessuna scheda selezionata.", "noPortsSelected": "No ports selected for board: '{0}'.", "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", "openBoardsConfig": "Select other board and port…", - "boardListItem": "{0} at {1}", + "boardListItem": "{0} a {1}", "selectBoardForInfo": "Please select a board to obtain board info.", "platformMissing": "The platform for the selected '{0}' board is not installed.", "selectPortForInfo": "Please select a port to obtain board info.", "boardInfo": "Informazioni sulla scheda", - "board": "Board{0}", - "port": "Port{0}", + "board": "Scheda{0}", + "port": "Porta{0}", "getBoardInfo": "Get Board Info", "inSketchbook": " (in Sketchbook)" }, @@ -137,42 +137,42 @@ }, "contributions": { "addFile": "Aggiungi file...", - "replaceTitle": "Replace", + "replaceTitle": "Sostituisci", "fileAdded": "One file added to the sketch." }, "replaceMsg": "Replace the existing version of {0}?", "library": { "addZip": "Aggiungi libreria da file .ZIP...", - "zipLibrary": "Library", + "zipLibrary": "Libreria", "overwriteExistingLibrary": "Do you want to overwrite the existing library?", "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", - "include": "Include Library", - "manageLibraries": "Manage Libraries...", - "arduinoLibraries": "Arduino libraries", + "include": "Includi Libreria", + "manageLibraries": "Gestisci Librerie", + "arduinoLibraries": "Librerie Arduino", "contributedLibraries": "Contributed libraries", - "title": "Library Manager", + "title": "Gestore Librerie", "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", "installOneMissingDependency": "Would you like to install the missing dependency?", "installMissingDependencies": "Would you like to install all the missing dependencies?", "dependenciesForLibrary": "Dependencies for library {0}:{1}", - "installAll": "Install all", - "installOnly": "Install {0} only", + "installAll": "Installa tutto", + "installOnly": "Installa {0} solamente", "installedSuccessfully": "Successfully installed library {0}:{1}", "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" }, "selectZip": "Select a zip file containing the library you'd like to add", "sketch": { "archiveSketch": "Archivia sketch", - "saveSketchAs": "Save sketch folder as...", + "saveSketchAs": "Salva la cartella dello sketch come...", "createdArchive": "Created archive '{0}'.", "new": "Nuovo", - "openRecent": "Open Recent", - "showFolder": "Show Sketch Folder", + "openRecent": "Apri recenti", + "showFolder": "Mostra la cartella dello Sketch", "sketch": "Sketch", - "moving": "Moving", + "moving": "Spostando", "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", "cantOpen": "Una cartella di nome \"{0}\" esiste già. Impossibile aprire lo sketch.", "saveFolderAs": "Save sketch folder as...", @@ -184,14 +184,14 @@ "configureAndUpload": "Configure And Upload", "verifyOrCompile": "Verifica/Compila", "exportBinary": "Esporta sketch compilato", - "verify": "Verify", + "verify": "Verifica", "doneCompiling": "Compilazione completata.", "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", "openSketchInNewWindow": "Open Sketch in New Window", - "openFolder": "Open Folder", + "openFolder": "Apri Cartella", "titleLocalSketchbook": "Local Sketchbook", "titleSketchbook": "Sketchbook", - "close": "Are you sure you want to close the sketch?" + "close": "Sei sicuro di voler chiudere lo sketch?" }, "bootloader": { "burnBootloader": "Scrivi il bootloader", @@ -200,9 +200,9 @@ "editor": { "copyForForum": "Copia per il forum (Markdown)", "commentUncomment": "Commenta / togli commento", - "increaseIndent": "Increase Indent", - "decreaseIndent": "Decrease Indent", - "increaseFontSize": "Increase Font Size", + "increaseIndent": "Aumenta indentazione", + "decreaseIndent": "Riduci indentazione", + "increaseFontSize": "Aumenta la dimensione del font", "decreaseFontSize": "Riduci la dimensione del testo", "autoFormat": "Formattazione automatica" }, @@ -211,16 +211,16 @@ "couldNotInitializeExamples": "Could not initialize built-in examples.", "builtInExamples": "Esempi integrati", "customLibrary": "Examples from Custom Libraries", - "for": "Examples for {0}", - "forAny": "Examples for any board" + "for": "Esempi per {0}", + "forAny": "Esempi per tutte le schede" }, "help": { - "search": "Search on Arduino.cc", - "keyword": "Type a keyword", + "search": "Cerca su Arduino.cc", + "keyword": "Digita una parola chiave", "gettingStarted": "Getting Started", "environment": "Environment", "troubleshooting": "Troubleshooting", - "reference": "Reference", + "reference": "Riferimenti", "findInReference": "Find in Reference", "faq": "Frequently Asked Questions", "visit": "Visit Arduino.cc" @@ -228,36 +228,36 @@ "certificate": { "uploadRootCertificates": "Upload SSL Root Certificates", "openContext": "Open context", - "remove": "Remove", + "remove": "Rimuovi", "upload": "Carica", "addURL": "Add URL to fetch SSL certificate", - "enterURL": "Enter URL", + "enterURL": "Inserisci URL", "selectCertificateToUpload": "1. Select certificate to upload", - "addNew": "Add New", + "addNew": "Aggiungi nuovo", "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", "uploadingCertificates": "Uploading certificates.", "certificatesUploaded": "Certificates uploaded.", "uploadFailed": "Upload failed. Please try again.", - "selectBoard": "Select a board...", - "boardAtPort": "{0} at {1}", + "selectBoard": "Seleziona una scheda...", + "boardAtPort": "{0} a {1}", "noSupportedBoardConnected": "No supported board connected" }, "firmware": { "updater": "WiFi101 / WiFiNINA Firmware Updater", - "selectBoard": "Select Board", - "checkUpdates": "Check Updates", - "selectVersion": "Select firmware version", + "selectBoard": "Seleziona la scheda", + "checkUpdates": "Verifica aggiornamenti", + "selectVersion": "Selezione la versione del firmware", "install": "Installa", "overwriteSketch": "Installation will overwrite the Sketch on the board.", - "installingFirmware": "Installing firmware.", - "successfullyInstalled": "Firmware succesfully installed.", - "failedInstall": "Installation failed. Please try again." + "installingFirmware": "Installazione del firmware", + "successfullyInstalled": "Firmware installato con successo", + "failedInstall": "Installazione fallita. Riprova" }, "dialog": { - "dontAskAgain": "Don't ask again" + "dontAskAgain": "Non chiedere più" }, "userFields": { - "cancel": "Cancel", + "cancel": "Annulla", "upload": "Carica" }, "serial": { @@ -277,11 +277,11 @@ "reconnect": "Reconnecting {0} to {1} in {2} seconds..." }, "component": { - "uninstall": "Uninstall", + "uninstall": "Disinstalla", "uninstallMsg": "Do you want to uninstall {0}?", "by": "by", "version": "Versione {0}", - "moreInfo": "More info", + "moreInfo": "Maggiori informazioni", "install": "Installa", "filterSearch": "Filtra la tua ricerca..." }, @@ -304,11 +304,11 @@ "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", "offline": "Offline", "daemonOffline": "CLI Daemon Offline", - "cannotConnectBackend": "Cannot connect to the backend.", - "cannotConnectDaemon": "Cannot connect to the CLI daemon." + "cannotConnectBackend": "Non reisco a collegarmi al backend", + "cannotConnectDaemon": "Non riesco a collegarmi al demone CLI" }, "debug": { - "start": "Start...", + "start": "Inizio...", "typeNotSupported": "The debug session type \"{0}\" is not supported.", "startError": "There was an error starting the debug session, check the logs for more details." }, @@ -316,19 +316,19 @@ "unsavedTitle": "Unsaved – {0}" }, "messages": { - "expand": "Expand", - "collapse": "Collapse" + "expand": "Espandi", + "collapse": "Collassa" }, "workspace": { - "fileNewName": "Name for new file", - "invalidFilename": "Invalid filename.", + "fileNewName": "Nome per il nuovo file", + "invalidFilename": "Nome del file invalido", "invalidExtension": "\".{0}\" non è un'estensione valida", - "newFileName": "New name for file", + "newFileName": "Nuovo nome del file", "deleteCurrentSketch": "Do you want to delete the current sketch?", "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." } }, "cloud": { - "GoToCloud": "GO TO CLOUD" + "GoToCloud": "Vai al Cloud" } } diff --git a/i18n/my_MM.json b/i18n/my_MM.json new file mode 100644 index 000000000..563460b93 --- /dev/null +++ b/i18n/my_MM.json @@ -0,0 +1,334 @@ +{ + "arduino": { + "common": { + "offlineIndicator": "အော့ဖ်လိုင်းဖြစ်နေသည်။ အင်တာနက်မရှိလျှင် Arduino CLIသည် လိုအပ်သော ဒေတာများမရယူနိုင်သောကြောင့် လုပ်ဆောင်ချက်ချို့ယွင်းမှုဖြစ်ပေါ်မည်။ အင်တာနက်နှင့်ချိတ်ဆက်ပြီး အပ္ပလီကေးရှင်းကို ပြန်စတင်ပေးပါ။", + "noBoardSelected": "ဘုတ် မရွေးချယ်ထားပါ", + "selectedOn": "{0}တွင်", + "notConnected": "[မချိတ်ဆက်ထားပါ]", + "serialMonitor": "အတန်းလိုက်ဆက်သွယ်မှုမော်နီတာ", + "oldFormat": "'{0}'သည် မူပုံစံအဟောင်း `.pde`ကိုအသုံးပြုထားသည်။ ဖိုင်လ်တိုးချဲ့အမှတ်အသားအသစ် `.ino` သို့ ပြောင်းလဲမှာလား။", + "later": "နောက်မှ", + "selectBoard": "ဘုတ်ရွေးချယ်မည်", + "unknown": "မသိ", + "processing": "အဆင့်ဆင့်ဆောင်ရွက်နေသည်", + "saveChangesToSketch": "မပိတ်မီ ပြောင်းလဲမှုများသိမ်းဆည်းလိုပါသလား။", + "loseChanges": "မသိမ်းဆည်းပါက ပြောင်းလဲမှုအားလုံး ဆုံးရှုံးမည်။" + }, + "menu": { + "sketch": "ကုတ်ဖိုင်လ်ဆိုင်ရာ", + "tools": "ကိရိယာများ" + }, + "debug": { + "optimizeForDebugging": "ကုတ်ပြစ်ချက်ရှာဖွေရန်အတွက်ဦးစားပေးမည်", + "debugWithMessage": "ပြစ်ချက်ရှာဖွေချက် - {0}", + "noPlatformInstalledFor": "Platform is not installed for '{0}'", + "debuggingNotSupported": "ကုတ်ပြစ်ချက်ရှာဖွေမှုကို '{0}'မှ မပေးထားပါ" + }, + "preferences": { + "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", + "compile.verbose": "True for verbose compile output. False by default", + "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", + "upload.verbose": "True for verbose upload output. False by default.", + "window.autoScale": "True if the user interface automatically scales with the font size.", + "window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.", + "ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.", + "board.certificates": "List of certificates that can be uploaded to boards", + "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", + "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", + "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", + "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", + "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", + "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", + "auth.clientID": "The OAuth2 client ID.", + "auth.domain": "The OAuth2 domain.", + "auth.audience": "The OAuth2 audience.", + "auth.registerUri": "The URI used to register a new user.", + "network": "ကွန်ရက်", + "sketchbook.location": "Sketchbook location", + "browse": "လျှောက်ကြည့်မည်", + "files.inside.sketches": "Show files inside Sketches", + "editorFontSize": "အယ်ဒီတာဖောင့်အရွယ်အစား", + "interfaceScale": "အင်တာဖေ့စ်စကေး", + "showVerbose": "နောက်ပါလုပ်နေစဉ် အချက်အလက်များပိုမိုများပြားစွာပြမည်", + "compilerWarnings": "စက်ဘာသာပြန်ကိရိယာသတိပေးချက်များ", + "automatic": "အလိုအလျောက်", + "compile": "စက်ဘာသာပြန်", + "upload": "အပ်လုတ်တင်", + "verifyAfterUpload": "အပ်လုတ်တင်ပြီးလျှင်ကုတ်ကိုစစ်ဆေးပါ", + "checkForUpdates": "စတင်စဉ်တွင် အပ်ဒိတ်ရှိ၊ မရှိ စစ်ဆေးပါ", + "editorQuickSuggestions": "Editor Quick Suggestions", + "additionalManagerURLs": "Additional Boards Manager URLs", + "noProxy": "ကြားခံကွန်ရက်မရှိ", + "manualProxy": "Manual proxy configuration", + "newSketchbookLocation": "Select new sketchbook location", + "choose": "ရွေးချယ်မည်", + "enterAdditionalURLs": "Enter additional URLs, one for each row", + "unofficialBoardSupport": "Click for a list of unofficial board support URLs", + "invalid.sketchbook.location": "Invalid sketchbook location: {0}", + "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", + "invalid.theme": "Invalid theme." + }, + "cloud": { + "signIn": "လက်မှတ်ထိုးဝင်", + "signOut": "လက်မှတ်ထိုးထွက်", + "chooseSketchVisibility": "Choose visibility of your Sketch:", + "privateVisibility": "Private. Only you can view the Sketch.", + "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "link": "လင့်ခ်-", + "embed": "မြှုပ်သွင်းထားသော -", + "cloudSketchbook": "Cloudကုတ်ဖိုင်လ်စာအုပ်", + "shareSketch": "ကုတ်ဖိုင်လ်ဝေမျှမည်", + "showHideRemoveSketchbook": "အဝေးကုတ်ဖိုင်လ်စာအုပ် ပြ၊ ဖွက်မည်", + "pullSketch": "ကုတ်ဖိုင်လ်ဆွဲယူမည်", + "openInCloudEditor": "Cloudအယ်ဒီတာတွင်ဖွင့်မည်", + "options": "ရွေးချယ်ချက်များ…", + "share": "ဝေမျှမည်…", + "remote": "အဝေး", + "emptySketchbook": "Your Sketchbook is empty", + "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", + "signInToCloud": "Arduino Cloudသို့ လက်မှတ်ထိုးဝင်ရောက်ပါ", + "syncEditSketches": "သင်၏Arduino Cloud ကုတ်ဖိုင်လ်များကို အင်တာနက်မှတဆင့် အချိန်နှင့်တပြေးညီ ရယူကိုက်ညီစေပြီး တည်းဖြတ်လိုက်ပါ", + "learnMore": "ပိုမိုလေ့လာလိုက်ပါ", + "continue": "ဆက်မည်", + "pushSketch": "ကုတ်ဖိုင်လ်တင်မည်", + "pushSketchMsg": "ဤကုတ်ဖိုင်လ်သည် အများသုံးဖြစ်သည်။ မတင်မီ လျှိုဝှက်သင့်သောအချက်အလက်ကို arduino_secrets.h ဖိုင်လ်များတွင် သတ်မှတ်ထားပေးပါ။ သင်အနေဖြင့် 'ဝေမျှမည်'ပန်နယ်တွင် ကုတ်ဖိုင်လ်ကို ပုဂ္ဂလိကအဖြစ်သတ်မှတ်နိုင်သည်။", + "pull": "ဆွဲယူမည်", + "pullSketchMsg": "ဤကုတ်ဖိုင်လ်ကို Cloudမှဆွဲယူခြင်းသည် သင့်စက်တွင်းရှိပြီးသားဖိုင်လ်အားအစားထိုးသွားမည်ဖြစ်သည်။ သင် ဆက်လုပ်ချင်ပါသလား။", + "donePulling": "‘{0}’ကိုဆွဲယူပြီးပါပြီ။", + "notYetPulled": "Cloudသို့တွန်းပို့၍မရသေးပါ။ မဆွဲယူရသေးသောကြောင့်ဖြစ်သည်။", + "push": "တွန်းပို့မည်", + "pullFirst": "Cloudသို့တွန်းပို့နိုင်ရန် အရင် ဆွဲယူရမည်ဖြစ်သည်။", + "donePushing": "‘{0}’တွန်းပို့ပြီးပါပြီ။", + "connected": "ချိတ်ဆက်ထားသည်", + "offline": "အော့ဖ်လိုင်း", + "profilePicture": "ပရိုဖိုင်ပုံ" + }, + "board": { + "installManually": "ကိုယ်တိုင်တပ်ဆင်မည်", + "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "configDialogTitle": "Select Other Board & Port", + "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", + "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", + "pleasePickBoard": "Please pick a board connected to the port you have selected.", + "showAllAvailablePorts": "အမှန်ခြစ်ထားပါက ရရှိနိုင်သောကွန်ရက်ဆိပ်ကမ်းအားလုံးပြမည်", + "programmer": "ပရိုဂရမ်မာ", + "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", + "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", + "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", + "reselectLater": "နောက်မှ ပြန်ရွေးချယ်မည်", + "noneSelected": "ဘုတ်မရွေးချယ်ထားပါ။", + "noPortsSelected": "No ports selected for board: '{0}'.", + "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", + "openBoardsConfig": "Select other board and port…", + "boardListItem": "{1} တွင် {0}", + "selectBoardForInfo": "လျှပ်စစ်ဘုတ်ဆိုင်ရာအချက်အလက်ရရှိရန် ဘုတ်ရွေးချယ်ပါ", + "platformMissing": "The platform for the selected '{0}' board is not installed.", + "selectPortForInfo": "Please select a port to obtain board info.", + "boardInfo": "ဘုတ်ဆိုင်ရာအချက်အလက်", + "board": "ဘုတ်{0}", + "port": "ဆိပ်ကမ်း{0}", + "getBoardInfo": "ဘုတ်ဆိုင်ရာအချက်အလက်ရယူမည်", + "inSketchbook": " (in Sketchbook)" + }, + "boardsManager": "ဘုတ်မန်နေဂျာ", + "about": { + "label": "{0}အကြောင်း", + "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + }, + "contributions": { + "addFile": "ဖိုင်လ်ထည့်မည်", + "replaceTitle": "အစားထိုးမည်", + "fileAdded": "One file added to the sketch." + }, + "replaceMsg": "Replace the existing version of {0}?", + "library": { + "addZip": "ကုတ်ကြည့်တိုက် .ZIPထည့်မည်…", + "zipLibrary": "ကုတ်ကြည့်တိုက်", + "overwriteExistingLibrary": "Do you want to overwrite the existing library?", + "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", + "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", + "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", + "include": "Include Library", + "manageLibraries": "Manage Libraries...", + "arduinoLibraries": "Arduinoကုတ်ကြည့်တိုက်များ", + "contributedLibraries": "Contributed libraries", + "title": "ကုတ်ကြည့်တိုက်မန်နေဂျာ", + "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", + "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", + "installOneMissingDependency": "Would you like to install the missing dependency?", + "installMissingDependencies": "Would you like to install all the missing dependencies?", + "dependenciesForLibrary": "Dependencies for library {0}:{1}", + "installAll": "အားလုံးတပ်ဆင်မည်", + "installOnly": "{0}ကိုသာတပ်ဆင်မည်", + "installedSuccessfully": "Successfully installed library {0}:{1}", + "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" + }, + "selectZip": "Select a zip file containing the library you'd like to add", + "sketch": { + "archiveSketch": "Archive Sketch", + "saveSketchAs": "Save sketch folder as...", + "createdArchive": "Created archive '{0}'.", + "new": "အသစ်", + "openRecent": "Open Recent", + "showFolder": "ကုတ်ပုံကြမ်းဖိုလ်ဒါပြမည်", + "sketch": "ကုတ်ပုံကြမ်း", + "moving": "ရွှေ့နေသည်", + "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", + "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", + "saveFolderAs": "Save sketch folder as...", + "sketchbook": "Sketchbook", + "upload": "Upload", + "uploadUsingProgrammer": "Upload Using Programmer", + "userFieldsNotFoundError": "Can't find user fields for connected board", + "doneUploading": "Done uploading.", + "configureAndUpload": "Configure And Upload", + "verifyOrCompile": "Verify/Compile", + "exportBinary": "Export Compiled Binary", + "verify": "Verify", + "doneCompiling": "Done compiling.", + "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", + "openSketchInNewWindow": "Open Sketch in New Window", + "openFolder": "ဖိုလ်ဒါဖွင့်မည်", + "titleLocalSketchbook": "Local Sketchbook", + "titleSketchbook": "Sketchbook", + "close": "Are you sure you want to close the sketch?" + }, + "bootloader": { + "burnBootloader": "Burn Bootloader", + "doneBurningBootloader": "Done burning bootloader." + }, + "editor": { + "copyForForum": "Copy for Forum (Markdown)", + "commentUncomment": "Comment/Uncomment", + "increaseIndent": "အင်တင်းခြင်းတိုးမည်", + "decreaseIndent": "အင်တင်းခြင်းလျော့မည်", + "increaseFontSize": "ဖောင့်အရွယ်အစားတိုးမည်", + "decreaseFontSize": "ဖောင့်အရွယ်အစားလျော့မည်", + "autoFormat": "အလိုအလျောက် ကုတ်ပုံစံချမည်" + }, + "examples": { + "menu": "ဥပမာများ", + "couldNotInitializeExamples": "Could not initialize built-in examples.", + "builtInExamples": "Built-in examples", + "customLibrary": "Examples from Custom Libraries", + "for": "Examples for {0}", + "forAny": "Examples for any board" + }, + "help": { + "search": "Search on Arduino.cc", + "keyword": "သော့ချက်စကားလုံးရိုက်လိုက်ပါ", + "gettingStarted": "Getting Started", + "environment": "Environment", + "troubleshooting": "ပြဿနာဖြေရှင်းခြင်း", + "reference": "Reference", + "findInReference": "Find in Reference", + "faq": "Frequently Asked Questions", + "visit": "Visit Arduino.cc" + }, + "certificate": { + "uploadRootCertificates": "Upload SSL Root Certificates", + "openContext": "Open context", + "remove": "ဖယ်ရှားမည်", + "upload": "အပ်လုတ်တင်မည်", + "addURL": "Add URL to fetch SSL certificate", + "enterURL": "URLရေးသွင်းပါ", + "selectCertificateToUpload": "1. Select certificate to upload", + "addNew": "အသစ်ထည့်မည်", + "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", + "uploadingCertificates": "Uploading certificates.", + "certificatesUploaded": "Certificates uploaded.", + "uploadFailed": "Upload failed. Please try again.", + "selectBoard": "Select a board...", + "boardAtPort": "{1} တွင် {0}", + "noSupportedBoardConnected": "No supported board connected" + }, + "firmware": { + "updater": "WiFi101 / WiFiNINA Firmware Updater", + "selectBoard": "ဘုတ်ရွေးချယ်မည်", + "checkUpdates": "အပ်ဒိတ်စစ်မည်", + "selectVersion": "Select firmware version", + "install": "တပ်ဆင်မည်", + "overwriteSketch": "Installation will overwrite the Sketch on the board.", + "installingFirmware": "Installing firmware.", + "successfullyInstalled": "Firmware succesfully installed.", + "failedInstall": "Installation failed. Please try again." + }, + "dialog": { + "dontAskAgain": "နောက်ထပ်မမေးပါနှင့်" + }, + "userFields": { + "cancel": "ပယ်ဖျက်မည်", + "upload": "အပ်လုတ်တင်မည်" + }, + "serial": { + "toggleTimestamp": "Toggle Timestamp", + "autoscroll": "အလိုအလျောက်လှိမ့်ဆွဲခြင်း", + "timestamp": "အချိန်တံဆိပ်ခေါင်း", + "noLineEndings": "စာကြောင်းအဆုံးသတ်အက္ခရာမရှိ", + "newLine": "စာကြောင်းအသစ်အက္ခရာ", + "carriageReturn": "လက်နှိပ်စက်အတံပြန်အက္ခရာ", + "newLineCarriageReturn": "စာကြောင်းအသစ်နှင့်လက်နှိပ်စက်အတံပြန်အက္ခရာနှစ်ခုလုံး", + "notConnected": "Not connected. Select a board and a port to connect automatically.", + "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", + "connectionBusy": "Connection failed. Serial port is busy: {0}", + "disconnected": "Disconnected {0} from {1}.", + "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", + "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", + "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + }, + "component": { + "uninstall": "Uninstall", + "uninstallMsg": "Do you want to uninstall {0}?", + "by": "by", + "version": "Version {0}", + "moreInfo": "နောက်ထပ်အချက်အလက်များ", + "install": "တပ်ဆင်မည်", + "filterSearch": "Filter your search..." + }, + "electron": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "unsavedChanges": "Any unsaved changes will not be saved." + }, + "compile": { + "error": "Compilation error: {0}" + }, + "upload": { + "error": "{0} error: {1}" + }, + "burnBootloader": { + "error": "Error while burning the bootloader: {0}" + } + }, + "theia": { + "core": { + "couldNotSave": "ကုတ်ဖိုင်လ်ကိုမသိမ်းဆည်းနိုင်ခဲ့ပါ။ မသိမ်းဆည်းရသေးသော ကုတ်များကို သင်နှစ်သက်ရာစာသားတည်းဖြတ်ပရိုဂရမ်သို့ ကူးယူပြီး အိုင်ဒီအီး ပြန်စတင်ပါ။", + "offline": "အော့ဖ်လိုင်း", + "daemonOffline": "CLIနောက်ကွယ်လုပ်ဆောင်ပရိုဂရမ် အော့ဖ်လိုင်းဖြစ်နေသည်", + "cannotConnectBackend": "ကျောရိုးပရိုဂရမ်သို့ ချိတ်ဆက်၍မရခဲ့ပါ။", + "cannotConnectDaemon": "CLIနောက်ကွယ်လုပ်ဆောင်ပရိုဂရမ်သို့ ဆက်သွယ်၍မရခဲ့ပါ။" + }, + "debug": { + "start": "စတင်မည်…", + "typeNotSupported": "ပြစ်ချက်ရှာဖွေမှုဆက်ရှင်အမျိုးအစား \"{0}\" ကိုမထောက်ပံ့ထားပါ။", + "startError": "ပြစ်ချက်ရှာဖွေမှုဆက်ရှင်စတင်ရာတွင် အမှားအယွင်းဖြစ်ပေါ်ခဲ့သည်။ အသေးစိတ်သိလိုပါက မှတ်တမ်းကို ကြည့်ပါ။" + }, + "editor": { + "unsavedTitle": "မသိမ်းဆည်းရသေး – {0}" + }, + "messages": { + "expand": "ချဲ့မည်", + "collapse": "စုမည်" + }, + "workspace": { + "fileNewName": "ဖိုင်လ်အသစ်အတွက်အမည်", + "invalidFilename": "မမှန်ကန်သောဖိုင်လ်အမည်။", + "invalidExtension": ".{0}သည် မှန်ကန်သော တိုးချဲ့အမှတ်အသားမဟုတ်ပါ", + "newFileName": "ဖိုင်လ်အတွက်အမည်အသစ်", + "deleteCurrentSketch": "လက်ရှိကုတ်ဖိုင်လ်ကို ဖျက်ပစ်ချင်ပါသလား။", + "sketchDirectoryError": "ကုတ်ဖိုင်လ်ဒါရိုက်ထရီဖန်တီးရာတွင် အမှားအယွင်းဖြစ်ပေါ်ခဲ့သည်။ အသေးအစိတ်သိလိုပါက မှတ်တမ်းကို ကြည့်ပါ။ အပ္ပလီကေးရှင်းသည် မျှော်မှန်းထားသလို အလုပ်လုပ်မည်မဟုတ်ပါ။" + } + }, + "cloud": { + "GoToCloud": "CLOUDသို့သွားမည်" + } +} diff --git a/i18n/ne.json b/i18n/ne.json index 459770646..f8282a21f 100644 --- a/i18n/ne.json +++ b/i18n/ne.json @@ -1,11 +1,11 @@ { "arduino": { "common": { - "offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.", - "noBoardSelected": "No board selected", + "offlineIndicator": "तपाईं अफलाइन हुनुहुन्छ। इन्टरनेट जडान बिना, Arduino CLI आवश्यक स्रोतहरू डाउनलोड गर्न सक्षम नहुन सक्छ र यसले खराबी निम्त्याउन सक्छ। कृपया इन्टरनेट जडान गर्नुहोस् र एप पुन: सुरु गर्नुहोस्।", + "noBoardSelected": "बोर्ड चयन गरिएको छैन।", "selectedOn": "on {0}", - "notConnected": "[not connected]", - "serialMonitor": "Serial Monitor", + "notConnected": "[ जोडिएको छैन ]", + "serialMonitor": "सिरियल मनिटर", "oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?", "later": "Later", "selectBoard": "Select Board", diff --git a/i18n/pl.json b/i18n/pl.json index ba21c602a..e0303f86a 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -5,13 +5,13 @@ "noBoardSelected": "Nie wybrano płytki", "selectedOn": "on {0}", "notConnected": "[nie podłączone]", - "serialMonitor": "Serial Monitor", + "serialMonitor": "Monitor portu szeregowego", "oldFormat": "'{0}' nadal używa starego formatu `.pde`. Czy chcesz się przełączyć na nowe rozszerzenie `.ino`?", "later": "Później", "selectBoard": "Wybierz płytkę", "unknown": "Nieznany", "processing": "Przetwarzanie", - "saveChangesToSketch": "Do you want to save changes to this sketch before closing?", + "saveChangesToSketch": "Czy chcesz zapisać zmiany w tym sketchu przed zamknięciem?", "loseChanges": "Jeśli nie zapiszesz, zmiany zostaną utracone." }, "menu": { @@ -22,18 +22,18 @@ "optimizeForDebugging": "Optymalizuj pod kątem debugowania", "debugWithMessage": "Debug - {0}", "noPlatformInstalledFor": "Platforma nie jest zainstalowana dla '{0}'", - "debuggingNotSupported": "Debugging is not supported by '{0}'" + "debuggingNotSupported": "Debugowanie nie jest wspierane przez '{0}'" }, "preferences": { - "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", - "compile.verbose": "True for verbose compile output. False by default", - "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", - "upload.verbose": "True for verbose upload output. False by default.", + "language.log": "Prawda, jeśli Arduino Language Server ma generować pliki z logami do folderu ze sketchem. W przeciwnym wypadku fałsz. Fałsz jest wartością domyślną.", + "compile.verbose": "Prawda, aby pokazywać szczegółowe informacje podczas kompilacji. Fałsz jest wartością domyślną.", + "compile.warnings": "Ustawia poziom ostrzeżeń w kompilatorze gcc. Domyślną wartością jest 'Brak'", + "upload.verbose": "Prawda, aby pokazywać szczegółowe informacje podczas wgrywania. Fałsz jest wartością domyślną.", "window.autoScale": "Prawda, jeśli interfejs użytkownika skaluje się automatycznie z rozmiarem czcionki.", "window.zoomLevel": "Dostosuj poziom powiększenia okna. Oryginalny rozmiar to 0, a każdy przyrost powyżej (np. 1) lub poniżej (np. -1) oznacza odpowiednio powiększenie lub pomniejszenie o 20%. Możesz również wprowadzić ułamki dziesiętne, aby dostosować poziom powiększenia z większą dokładnością.", "ide.autoUpdate": "Prawda, aby włączyć automatyczne sprawdzanie aktualizacji. IDE będzie automatycznie i okresowo sprawdzać dostępność aktualizacji.", "board.certificates": "Lista certyfikatów, które można przesłać do płytki", - "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", + "sketchbook.showAllFiles": "Prawda, aby wyświetlać wszystkie pliki ze sketcha. Fałsz jest wartością domyślną.", "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", @@ -322,7 +322,7 @@ "workspace": { "fileNewName": "Nazwa nowego pliku", "invalidFilename": "Nieprawidłowa nazwa pliku.", - "invalidExtension": ".{0} niw jest prawidłowym rozszerzeniem", + "invalidExtension": ".{0} nie jest prawidłowym rozszerzeniem", "newFileName": "Nowa nazwa pliku", "deleteCurrentSketch": "Do you want to delete the current sketch?", "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." diff --git a/i18n/tr.json b/i18n/tr.json new file mode 100644 index 000000000..0002d7b4f --- /dev/null +++ b/i18n/tr.json @@ -0,0 +1,334 @@ +{ + "arduino": { + "common": { + "offlineIndicator": "Çevrimdışı görünüyorsunuz. Arduino CLI internet bağlantısı olmadan gerekli kaynakları indiremeyebilir ve hatalı çalışabilir. Lütfen internete bağlanın ve uygulamayı yeniden başlatın.", + "noBoardSelected": "Kart seçili değil", + "selectedOn": "{0}'da", + "notConnected": "[bağlı değil]", + "serialMonitor": "Seri Port Ekranı", + "oldFormat": "'{0}' hala eski `.pde` biçimini kullanıyor. Yeni `.ino` uzantısına geçmek istiyor musunuz?", + "later": "Daha sonra", + "selectBoard": "Kart Seç", + "unknown": "Bilinmeyen", + "processing": "Processing", + "saveChangesToSketch": "Kapatmadan önce bu eskizdeki değişiklikleri kaydetmek istiyor musunuz?", + "loseChanges": "Kaydetmezseniz değişiklikleriniz kaybolacak." + }, + "menu": { + "sketch": "Eskiz", + "tools": "Araçlar" + }, + "debug": { + "optimizeForDebugging": "Debug için Optimize et", + "debugWithMessage": "Debug - {0}", + "noPlatformInstalledFor": "'{0}' için platform kurulmadı", + "debuggingNotSupported": "Debug '{0}' tarafından desteklenmiyor" + }, + "preferences": { + "language.log": "Arduino Language Server eskiz klasörüne log dosyaları oluşturacaksa True. Aksi takdirde false. Varsayılan: false.", + "compile.verbose": "Ayrıntılı derleme çıktısı için True. Varsayılan: False", + "compile.warnings": "gcc'ye hangi uyarı seviyesinin kullanılacağını söyler. Varsayılan: 'None'", + "upload.verbose": " Ayrıntılı yükleme çıktısı için True. Varsayılan: False", + "window.autoScale": "Kullanıcı arayüzü yazı tipi boyutu ile otomatik olarak ölçeklenecekse True", + "window.zoomLevel": "Pencerenin yakınlaştırma seviyesini ayarlar. Orijinal boyut 0'dır ve her yukarı artış (örn. 1) veya düşüş (örn. -1) %20 daha büyük veya daha küçük anlamına gelir. Aynı zamanda yakınlaştırma seviyesini daha hassas ayarlamak için ondalıklar da girebilirsiniz.", + "ide.autoUpdate": "Otomatik güncelleme kontrollerini açmak için True. IDE güncellemeleri otomatik ve periyodik olarak kontrol eder.", + "board.certificates": "Kartlara yüklenebilecek sertifikaların listesi", + "sketchbook.showAllFiles": "Tüm eskiz dosyalarını eskiz içinde görüntülemek için True. Varsayılan: false.", + "cloud.enabled": "Eskiz eşitleme fonksiyonları etkinse True. Varsayılan: True.", + "cloud.pull.warn": "Kullanıcılar bir bulut eskizini çekmeden önce uyarılacaksa True. Varsayılan: True.", + "cloud.push.warn": "Kullanıcılar bir bulut eskizini göndermeden önce uyarılacaksa True. Varsayılan: True.", + "cloud.pushpublic.warn": "Kullanıcılar buluta herkese açık bir eskiz yüklemeden önce uyarılacaksa True. Varsayılan: True.", + "cloud.sketchSyncEnpoint": "Ana yapıdan eskizler çekmek veya göndermek için son nokta kullanılır. Varsayılan: Arduino Cloud API.", + "auth.clientID": "OAuth2 istemci ID.", + "auth.domain": "OAuth2 domain.", + "auth.audience": "OAuth2 audience.", + "auth.registerUri": "URI yeni bir kullanıcı kaydetmek için kullanılır.", + "network": "Ağ", + "sketchbook.location": "Eskiz Defteri konumu", + "browse": "Araştır", + "files.inside.sketches": "Eskizlerin içindeki dosyaları görüntüle", + "editorFontSize": "Editör yazı tipi boyutu", + "interfaceScale": "Arayüz ölçeği", + "showVerbose": "Ayrıntılı çıktıyı görüntüle", + "compilerWarnings": "Derleyici uyarıları", + "automatic": "Otomatik", + "compile": "derle", + "upload": "yükle", + "verifyAfterUpload": "Yüklemeden sonra kodu doğrula", + "checkForUpdates": "Açılışta güncellemeleri kontrol et", + "editorQuickSuggestions": "Editör Hızlı Önerileri", + "additionalManagerURLs": "Ek Kart Yöneticisi URL'leri", + "noProxy": "Vekil yok", + "manualProxy": "Elle vekil ayarlama", + "newSketchbookLocation": "Yeni eskiz defteri konumu seç", + "choose": "Seç", + "enterAdditionalURLs": "Ek URL'leri gir, her satıra bir adet", + "unofficialBoardSupport": "Desteklenmeyen kart destek URL'leri listesi için tıklayın", + "invalid.sketchbook.location": "Hatalı eskiz defteri konumu: {0}", + "invalid.editorFontSize": "Hatalı editör yazı tipi boyutu. Pozitif bir tam sayı olmalı.", + "invalid.theme": "Hatalı tema." + }, + "cloud": { + "signIn": "GİRİŞ YAP", + "signOut": "Çıkış Yap", + "chooseSketchVisibility": "Eskizinizin görünürlüğünü seçin", + "privateVisibility": "Gizli. Eskizi sadece siz görebilirsiniz.", + "publicVisibility": "Herkese açık. Bağlantıya sahip herkes Eskiz'i görebilir.", + "link": "Bağlantı:", + "embed": "Yerleştir:", + "cloudSketchbook": "Bulut Eskiz Defteri", + "shareSketch": "Eskiz'i Paylaş", + "showHideRemoveSketchbook": "Uzak Eskiz Defteri'ni Göster/Gizle", + "pullSketch": "Eskizi Çek", + "openInCloudEditor": "Bulut Düzenleyici'de Aç", + "options": "Seçenekler...", + "share": "Paylaş...", + "remote": "Uzak", + "emptySketchbook": "Eskiz Defteri'niz boş", + "visitArduinoCloud": "Bulut Eskizleri oluşturmak için Arduino Cloud'u ziyaret edin.", + "signInToCloud": "Arduino Cloud'a giriş yap", + "syncEditSketches": "Arduino Cloud eskizlerinizi eşitleyin ve düzenleyin", + "learnMore": "Daha fazlasını öğren", + "continue": "Devam et", + "pushSketch": "Eskizi Gönder", + "pushSketchMsg": "Bu bir Herkese Açık Eskiz. Göndermeden önce tüm hassas bilgilerin arduino_secrets.h dosyaları içinde tanımlandığından emin olun. Eskizleri Paylaş panelinden gizli yapabilirsiniz.", + "pull": "Çek", + "pullSketchMsg": "Bu Eskizi Bulut'dan çekmek yerel versiyonunun üzerine yazacak. Devam etmek istediğinizden emin misiniz?", + "donePulling": "Çekme bitti: ‘{0}’.", + "notYetPulled": "Bulut'a gönderilemedi. Henüz çekilmemiş.", + "push": "Gönder", + "pullFirst": "Bulut'a göndermeden önce çekmeniz gerekiyor.", + "donePushing": "Gönderme bitti: ‘{0}’.", + "connected": "Bağlandı", + "offline": "Çevrimdışı", + "profilePicture": "Profil resmi" + }, + "board": { + "installManually": "Elle Kur", + "installNow": "Mevcut seçili \"{2}\" kartı için \"{0} {1}\" çekirdeğinin kurulması gerekiyor. Bunu şimdi kurmak istiyor musunuz?", + "configDialogTitle": "Diğer Kart ve Port Seç", + "configDialog1": "Bir eskiz yüklemek istiyorsanız Kart ve Port seçmelisiniz.", + "configDialog2": "Sadece Kart seçerseniz eskizinizi derleyebilir, ancak yükleyemezsiniz.", + "pleasePickBoard": "Lütfen seçtiğiniz porta bağlı kartı seçin.", + "showAllAvailablePorts": "Etkinleştirildiğinde tüm mevcut portları görüntüler", + "programmer": "Programlayıcı", + "succesfullyInstalledPlatform": "Platform başarıyla kuruldu {0}:{1}", + "succesfullyUninstalledPlatform": "Platform başarıyla kaldırıldı {0}:{1}", + "couldNotFindPreviouslySelected": "Kurulu '{1}' platformunda daha önce seçili kart '{0}' bulunamadı. Lütfen kullanmak istediğiniz kartı elle yeniden seçin. Şimdi tekrar seçmek istiyor musunuz?", + "reselectLater": "Daha sonra tekrar seç", + "noneSelected": "Kart seçilmedi.", + "noPortsSelected": "'{0}' kartı için port seçilmedi", + "noFQBN": "FQBN seçili kart \"{0}\" için mevcut değil. İlgili çekirdeği kurdunuz mu?", + "openBoardsConfig": "Diğer kart ve portu seç...", + "boardListItem": "{0} / {1}", + "selectBoardForInfo": "Kart bilgisi almak için lütfen bir kart seçin.", + "platformMissing": "Seçili '{0}' kart için platform kurulmadı.", + "selectPortForInfo": "Kart bilgisi almak için lütfen bir port seçin.", + "boardInfo": "Kart Bilgisi", + "board": "Kart{0}", + "port": "Port{0}", + "getBoardInfo": "Kart Bilgisini Al", + "inSketchbook": "(Eskiz Defteri'nde)" + }, + "boardsManager": "Kart Yöneticisi", + "about": { + "label": "{0} Hakkında", + "detail": "Versiyon: {0}\nDate: {1}{2}\nCLI Versiyonu: {3}{4} [{5}]\n\n{6}" + }, + "contributions": { + "addFile": "Dosya Ekle", + "replaceTitle": "Değiştir", + "fileAdded": "Eskize bir dosya eklendi." + }, + "replaceMsg": "{0}'un mevcut versiyonu değiştirilsin mi?", + "library": { + "addZip": ".ZIP Kütüphanesi Ekle...", + "zipLibrary": "Kütüphane", + "overwriteExistingLibrary": "Mevcut kütüphanenin üzerine yazmak istiyor musunuz?", + "successfullyInstalledZipLibrary": "{0} arşivindeki kütüphane başarıyla kuruldu", + "namedLibraryAlreadyExists": " {0} adında bir kütüphane klasörü zaten mevcut. Üzerine yazmak istiyor musunuz?", + "libraryAlreadyExists": "Kütüphane zaten mevcut. Üzerine yazmak istiyor musunuz?", + "include": "Kütüphane Ekle", + "manageLibraries": "Kütüphaneleri Yönet...", + "arduinoLibraries": "Arduino kütüphaneleri", + "contributedLibraries": "Eklenmiş kütüphaneler", + "title": "Kütüphane Yöneticisi", + "needsOneDependency": " {0}:{1} kütüphanesinin henüz kurulu olmayan bir diğer gerekliliğe ihtiyaç duyuyor:", + "needsMultipleDependencies": " {0}:{1} kütüphanesi henüz kurulu olmayan diğer bazı gerekliliklere ihtiyaç duyuyor:", + "installOneMissingDependency": "Eksik gereklilikleri kurmak istiyor musunuz?", + "installMissingDependencies": "Tüm eksik gereklilikleri kurmak ister misiniz?", + "dependenciesForLibrary": "{0}:{1} kütüphanesi için gereklilikler", + "installAll": "Tümünü kur", + "installOnly": "Sadece {0}'u kur", + "installedSuccessfully": "{0}:{1} kütüphanesi başarıyla kuruldu", + "uninstalledSuccessfully": "{0}:{1} kütüphanesi başarıyla kaldırıldı" + }, + "selectZip": "Eklemek istediğiniz kütüphaneyi içeren ZIP dosyasını seçin", + "sketch": { + "archiveSketch": "Eskiz'i Arşivle", + "saveSketchAs": "Eskiz klasörünü farklı kaydet...", + "createdArchive": "'{0}' arşivi oluşturuldu.", + "new": "Yeni", + "openRecent": "Yakın Geçmiş", + "showFolder": "Eskiz Klasörünü Göster", + "sketch": "Eskiz", + "moving": "Taşınıyor", + "movingMsg": "\"{0}\" dosyasının \"{1}\" isminde bir eskiz klasörünün içinde olması gerekiyor.\nKlasörü oluştur, dosyayı taşı ve devam et?", + "cantOpen": "\"{0}\" klasörü zaten mevcut. Eskiz açılamadı.", + "saveFolderAs": "Eskiz klasörünü farklı kaydet...", + "sketchbook": "Eskiz Defteri", + "upload": "Yükle", + "uploadUsingProgrammer": "Programlayıcı Kullanarak Yükle", + "userFieldsNotFoundError": "Bağlı kart için kullanıcı alanları bulunamadı", + "doneUploading": "Yükleme bitti.", + "configureAndUpload": "Ayarla ve Yükle", + "verifyOrCompile": "Doğrula/Derle", + "exportBinary": "Derlenmiş Dosyayı Dışa Aktar", + "verify": "Doğrula", + "doneCompiling": "Derleme bitti.", + "couldNotConnectToSerial": "Seri Port'a tekrar bağlanılamadı. {0}", + "openSketchInNewWindow": "Eskiz'i Yeni Pencerede Aç", + "openFolder": "Klasörü Aç", + "titleLocalSketchbook": "Yerel Eskiz Defteri", + "titleSketchbook": "Eskiz Defteri", + "close": "Eskizi kapatmak istediğinizden emin misiniz?" + }, + "bootloader": { + "burnBootloader": "Bootloader'ı Yükle", + "doneBurningBootloader": "Bootloader yüklemesi bitti." + }, + "editor": { + "copyForForum": "Forum için Kopyala (Markdown)", + "commentUncomment": "Yorum yap/Yorumu kaldır", + "increaseIndent": "Girintiyi Artır", + "decreaseIndent": "Girintiyi Azalt", + "increaseFontSize": "Yazı Tipi Boyutunu Büyüt", + "decreaseFontSize": "Yazı Tipi Boyutunu Küçült", + "autoFormat": "Otomatik Biçimlendir" + }, + "examples": { + "menu": "Örnekler", + "couldNotInitializeExamples": "Dahili örnekler bulunamadı.", + "builtInExamples": "Dahili örnekler", + "customLibrary": "Eklenen Kütüphanelerin Örnekleri", + "for": "{0} Örnekleri", + "forAny": "Herhangi bir kart için örnekler" + }, + "help": { + "search": "Arduino.cc'de Ara", + "keyword": "Bir anahtar kelime yazın", + "gettingStarted": "Başlarken", + "environment": "Ortam", + "troubleshooting": "Sorun Giderme", + "reference": "Başvuru", + "findInReference": "Başvuruda Bul", + "faq": "Sıkça Sorulan Sorular", + "visit": "Arduino.cc'yi Ziyaret Et" + }, + "certificate": { + "uploadRootCertificates": "SSL Kök Sertifikalarını Yükle", + "openContext": "İçeriği aç", + "remove": "Kaldır", + "upload": "Yükle", + "addURL": "SSL sertifikasını almak için URL ekle", + "enterURL": "URL Gir", + "selectCertificateToUpload": "1. Yüklenecek sertifikayı seç", + "addNew": "Yeni Ekle", + "selectDestinationBoardToUpload": "2. Hedef kartı seç ve sertifikayı yükle", + "uploadingCertificates": "Sertifikalar yükleniyor.", + "certificatesUploaded": "Sertifikalar yüklendi.", + "uploadFailed": "Yükleme başarısız. Lütfen tekrar deneyin.", + "selectBoard": "Kart Seçin...", + "boardAtPort": "{0} / {1}", + "noSupportedBoardConnected": "Bağlı desteklenen kart yok" + }, + "firmware": { + "updater": "WiFi101 / WiFiNINA Firmware Güncelleyici", + "selectBoard": "Kart Seç", + "checkUpdates": "Güncellemeleri Kontrol Et", + "selectVersion": "Firmware versiyonunu seç", + "install": "Kur", + "overwriteSketch": "Kurulum karttaki Eskiz'in üzerine yazacak.", + "installingFirmware": "Firmware kuruluyor.", + "successfullyInstalled": "Firmware başarıyla kuruldu.", + "failedInstall": "Kurulum başarısız. Lütfen tekrar deneyin." + }, + "dialog": { + "dontAskAgain": "Tekrar sorma" + }, + "userFields": { + "cancel": "İptal", + "upload": "Yükle" + }, + "serial": { + "toggleTimestamp": "Zaman Damgasını Göster", + "autoscroll": "Otomatik Kaydırma", + "timestamp": "Zaman", + "noLineEndings": "Satır Sonu Yok", + "newLine": "Yeni Satır", + "carriageReturn": "Satır Başı", + "newLineCarriageReturn": "NL ve CR ile Birlikte", + "notConnected": "Bağlı değil. Otomatik olarak bağlanacak bir kart ve bir port seçin.", + "message": "Mesaj ({0} + Mesaj göndermek için Enter '{1}' / '{2}'", + "connectionBusy": "Bağlantı başarısız. Seri Port meşgul: {0}", + "disconnected": "{1} bağlantısı koptu {0}.", + "unexpectedError": "Beklenmeyen hata. Yeniden bağlanılıyor {0} / {1}.", + "failedReconnect": "Peş peşe 10 denemeden sonra {0}'a bağlanılamadı. {1} Seri Portu meşgul.", + "reconnect": "Yeniden bağlanılıyor {0} / {1} - {2} saniye" + }, + "component": { + "uninstall": "Kaldır", + "uninstallMsg": "{0} kaldırılsın mı?", + "by": "-", + "version": "Versiyon {0}", + "moreInfo": "Daha fazla bilgi", + "install": "KUR", + "filterSearch": "Aramayı Filtrele..." + }, + "electron": { + "couldNotSave": "Eskiz kaydedilemedi. Lütfen kaydedilmeyen işinizi favori metin düzenleyicinize kopyalayın ve IDE'yi yeniden başlatın.", + "unsavedChanges": "Kaydedilmemiş değişiklikler kaybedilecek." + }, + "compile": { + "error": "Derleme hatası: {0}" + }, + "upload": { + "error": "{0} hata: {1}" + }, + "burnBootloader": { + "error": "Bootloaderı yüklerken hata: {0}" + } + }, + "theia": { + "core": { + "couldNotSave": "Eskiz kaydedilemedi. Lütfen kaydedilmeyen işinizi favori metin düzenleyicinize kopyalayın ve IDE'yi yeniden başlatın.", + "offline": "Çevrimdışı", + "daemonOffline": "CLI Daemon Çevrimdışı", + "cannotConnectBackend": "Ana yapıya bağlanılamadı.", + "cannotConnectDaemon": "CLI daemon'a bağlanılamadı." + }, + "debug": { + "start": "Başla...", + "typeNotSupported": "\"{0}\" debug oturum tipi desteklenmiyor.", + "startError": "Debug oturumunu başlatırken bir hata oluştu, daha fazla bilgi için logları kontrol edin." + }, + "editor": { + "unsavedTitle": "Kaydedilmedi – {0}" + }, + "messages": { + "expand": "Genişlet", + "collapse": "Daralt" + }, + "workspace": { + "fileNewName": "Yeni dosya için isim", + "invalidFilename": "Hatalı dosya adı.", + "invalidExtension": ".{0} geçerli bir uzantı değil", + "newFileName": "Dosya için yeni isim", + "deleteCurrentSketch": "Mevcut eskizi silmek istiyor musunuz?", + "sketchDirectoryError": "Eskiz klasörünü oluştururken bir hata oluştur. Daha fazla bilgi için log'a bakın. Uygulama muhtemelen beklendiği şekilde çalışmayacak." + } + }, + "cloud": { + "GoToCloud": "BULUTA GİT" + } +} diff --git a/i18n/uk_UA.json b/i18n/uk_UA.json new file mode 100644 index 000000000..459770646 --- /dev/null +++ b/i18n/uk_UA.json @@ -0,0 +1,334 @@ +{ + "arduino": { + "common": { + "offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.", + "noBoardSelected": "No board selected", + "selectedOn": "on {0}", + "notConnected": "[not connected]", + "serialMonitor": "Serial Monitor", + "oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?", + "later": "Later", + "selectBoard": "Select Board", + "unknown": "Unknown", + "processing": "Processing", + "saveChangesToSketch": "Do you want to save changes to this sketch before closing?", + "loseChanges": "If you don't save, your changes will be lost." + }, + "menu": { + "sketch": "Sketch", + "tools": "Tools" + }, + "debug": { + "optimizeForDebugging": "Optimize for Debugging", + "debugWithMessage": "Debug - {0}", + "noPlatformInstalledFor": "Platform is not installed for '{0}'", + "debuggingNotSupported": "Debugging is not supported by '{0}'" + }, + "preferences": { + "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", + "compile.verbose": "True for verbose compile output. False by default", + "compile.warnings": "Tells gcc which warning level to use. It's 'None' by default", + "upload.verbose": "True for verbose upload output. False by default.", + "window.autoScale": "True if the user interface automatically scales with the font size.", + "window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.", + "ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.", + "board.certificates": "List of certificates that can be uploaded to boards", + "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", + "cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.", + "cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.", + "cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.", + "cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.", + "cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", + "auth.clientID": "The OAuth2 client ID.", + "auth.domain": "The OAuth2 domain.", + "auth.audience": "The OAuth2 audience.", + "auth.registerUri": "The URI used to register a new user.", + "network": "Network", + "sketchbook.location": "Sketchbook location", + "browse": "Browse", + "files.inside.sketches": "Show files inside Sketches", + "editorFontSize": "Editor font size", + "interfaceScale": "Interface scale", + "showVerbose": "Show verbose output during", + "compilerWarnings": "Compiler warnings", + "automatic": "Automatic", + "compile": "compile", + "upload": "upload", + "verifyAfterUpload": "Verify code after upload", + "checkForUpdates": "Check for updates on startup", + "editorQuickSuggestions": "Editor Quick Suggestions", + "additionalManagerURLs": "Additional Boards Manager URLs", + "noProxy": "No proxy", + "manualProxy": "Manual proxy configuration", + "newSketchbookLocation": "Select new sketchbook location", + "choose": "Choose", + "enterAdditionalURLs": "Enter additional URLs, one for each row", + "unofficialBoardSupport": "Click for a list of unofficial board support URLs", + "invalid.sketchbook.location": "Invalid sketchbook location: {0}", + "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", + "invalid.theme": "Invalid theme." + }, + "cloud": { + "signIn": "SIGN IN", + "signOut": "Sign Out", + "chooseSketchVisibility": "Choose visibility of your Sketch:", + "privateVisibility": "Private. Only you can view the Sketch.", + "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "link": "Link:", + "embed": "Embed:", + "cloudSketchbook": "Cloud Sketchbook", + "shareSketch": "Share Sketch", + "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", + "pullSketch": "Pull Sketch", + "openInCloudEditor": "Open in Cloud Editor", + "options": "Options...", + "share": "Share...", + "remote": "Remote", + "emptySketchbook": "Your Sketchbook is empty", + "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.", + "signInToCloud": "Sign in to Arduino Cloud", + "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", + "learnMore": "Learn more", + "continue": "Continue", + "pushSketch": "Push Sketch", + "pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.", + "pull": "Pull", + "pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?", + "donePulling": "Done pulling ‘{0}’.", + "notYetPulled": "Cannot push to Cloud. It is not yet pulled.", + "push": "Push", + "pullFirst": "You have to pull first to be able to push to the Cloud.", + "donePushing": "Done pushing ‘{0}’.", + "connected": "Connected", + "offline": "Offline", + "profilePicture": "Profile picture" + }, + "board": { + "installManually": "Install Manually", + "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "configDialogTitle": "Select Other Board & Port", + "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", + "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", + "pleasePickBoard": "Please pick a board connected to the port you have selected.", + "showAllAvailablePorts": "Shows all available ports when enabled", + "programmer": "Programmer", + "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", + "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", + "couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", + "reselectLater": "Reselect later", + "noneSelected": "No boards selected.", + "noPortsSelected": "No ports selected for board: '{0}'.", + "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", + "openBoardsConfig": "Select other board and port…", + "boardListItem": "{0} at {1}", + "selectBoardForInfo": "Please select a board to obtain board info.", + "platformMissing": "The platform for the selected '{0}' board is not installed.", + "selectPortForInfo": "Please select a port to obtain board info.", + "boardInfo": "Board Info", + "board": "Board{0}", + "port": "Port{0}", + "getBoardInfo": "Get Board Info", + "inSketchbook": " (in Sketchbook)" + }, + "boardsManager": "Boards Manager", + "about": { + "label": "About {0}", + "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}" + }, + "contributions": { + "addFile": "Add File", + "replaceTitle": "Replace", + "fileAdded": "One file added to the sketch." + }, + "replaceMsg": "Replace the existing version of {0}?", + "library": { + "addZip": "Add .ZIP Library...", + "zipLibrary": "Library", + "overwriteExistingLibrary": "Do you want to overwrite the existing library?", + "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", + "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", + "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", + "include": "Include Library", + "manageLibraries": "Manage Libraries...", + "arduinoLibraries": "Arduino libraries", + "contributedLibraries": "Contributed libraries", + "title": "Library Manager", + "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", + "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", + "installOneMissingDependency": "Would you like to install the missing dependency?", + "installMissingDependencies": "Would you like to install all the missing dependencies?", + "dependenciesForLibrary": "Dependencies for library {0}:{1}", + "installAll": "Install all", + "installOnly": "Install {0} only", + "installedSuccessfully": "Successfully installed library {0}:{1}", + "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}" + }, + "selectZip": "Select a zip file containing the library you'd like to add", + "sketch": { + "archiveSketch": "Archive Sketch", + "saveSketchAs": "Save sketch folder as...", + "createdArchive": "Created archive '{0}'.", + "new": "New", + "openRecent": "Open Recent", + "showFolder": "Show Sketch Folder", + "sketch": "Sketch", + "moving": "Moving", + "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", + "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", + "saveFolderAs": "Save sketch folder as...", + "sketchbook": "Sketchbook", + "upload": "Upload", + "uploadUsingProgrammer": "Upload Using Programmer", + "userFieldsNotFoundError": "Can't find user fields for connected board", + "doneUploading": "Done uploading.", + "configureAndUpload": "Configure And Upload", + "verifyOrCompile": "Verify/Compile", + "exportBinary": "Export Compiled Binary", + "verify": "Verify", + "doneCompiling": "Done compiling.", + "couldNotConnectToSerial": "Could not reconnect to serial port. {0}", + "openSketchInNewWindow": "Open Sketch in New Window", + "openFolder": "Open Folder", + "titleLocalSketchbook": "Local Sketchbook", + "titleSketchbook": "Sketchbook", + "close": "Are you sure you want to close the sketch?" + }, + "bootloader": { + "burnBootloader": "Burn Bootloader", + "doneBurningBootloader": "Done burning bootloader." + }, + "editor": { + "copyForForum": "Copy for Forum (Markdown)", + "commentUncomment": "Comment/Uncomment", + "increaseIndent": "Increase Indent", + "decreaseIndent": "Decrease Indent", + "increaseFontSize": "Increase Font Size", + "decreaseFontSize": "Decrease Font Size", + "autoFormat": "Auto Format" + }, + "examples": { + "menu": "Examples", + "couldNotInitializeExamples": "Could not initialize built-in examples.", + "builtInExamples": "Built-in examples", + "customLibrary": "Examples from Custom Libraries", + "for": "Examples for {0}", + "forAny": "Examples for any board" + }, + "help": { + "search": "Search on Arduino.cc", + "keyword": "Type a keyword", + "gettingStarted": "Getting Started", + "environment": "Environment", + "troubleshooting": "Troubleshooting", + "reference": "Reference", + "findInReference": "Find in Reference", + "faq": "Frequently Asked Questions", + "visit": "Visit Arduino.cc" + }, + "certificate": { + "uploadRootCertificates": "Upload SSL Root Certificates", + "openContext": "Open context", + "remove": "Remove", + "upload": "Upload", + "addURL": "Add URL to fetch SSL certificate", + "enterURL": "Enter URL", + "selectCertificateToUpload": "1. Select certificate to upload", + "addNew": "Add New", + "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", + "uploadingCertificates": "Uploading certificates.", + "certificatesUploaded": "Certificates uploaded.", + "uploadFailed": "Upload failed. Please try again.", + "selectBoard": "Select a board...", + "boardAtPort": "{0} at {1}", + "noSupportedBoardConnected": "No supported board connected" + }, + "firmware": { + "updater": "WiFi101 / WiFiNINA Firmware Updater", + "selectBoard": "Select Board", + "checkUpdates": "Check Updates", + "selectVersion": "Select firmware version", + "install": "Install", + "overwriteSketch": "Installation will overwrite the Sketch on the board.", + "installingFirmware": "Installing firmware.", + "successfullyInstalled": "Firmware succesfully installed.", + "failedInstall": "Installation failed. Please try again." + }, + "dialog": { + "dontAskAgain": "Don't ask again" + }, + "userFields": { + "cancel": "Cancel", + "upload": "Upload" + }, + "serial": { + "toggleTimestamp": "Toggle Timestamp", + "autoscroll": "Autoscroll", + "timestamp": "Timestamp", + "noLineEndings": "No Line Ending", + "newLine": "New Line", + "carriageReturn": "Carriage Return", + "newLineCarriageReturn": "Both NL & CR", + "notConnected": "Not connected. Select a board and a port to connect automatically.", + "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", + "connectionBusy": "Connection failed. Serial port is busy: {0}", + "disconnected": "Disconnected {0} from {1}.", + "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", + "failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.", + "reconnect": "Reconnecting {0} to {1} in {2} seconds..." + }, + "component": { + "uninstall": "Uninstall", + "uninstallMsg": "Do you want to uninstall {0}?", + "by": "by", + "version": "Version {0}", + "moreInfo": "More info", + "install": "INSTALL", + "filterSearch": "Filter your search..." + }, + "electron": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "unsavedChanges": "Any unsaved changes will not be saved." + }, + "compile": { + "error": "Compilation error: {0}" + }, + "upload": { + "error": "{0} error: {1}" + }, + "burnBootloader": { + "error": "Error while burning the bootloader: {0}" + } + }, + "theia": { + "core": { + "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", + "offline": "Offline", + "daemonOffline": "CLI Daemon Offline", + "cannotConnectBackend": "Cannot connect to the backend.", + "cannotConnectDaemon": "Cannot connect to the CLI daemon." + }, + "debug": { + "start": "Start...", + "typeNotSupported": "The debug session type \"{0}\" is not supported.", + "startError": "There was an error starting the debug session, check the logs for more details." + }, + "editor": { + "unsavedTitle": "Unsaved – {0}" + }, + "messages": { + "expand": "Expand", + "collapse": "Collapse" + }, + "workspace": { + "fileNewName": "Name for new file", + "invalidFilename": "Invalid filename.", + "invalidExtension": ".{0} is not a valid extension", + "newFileName": "New name for file", + "deleteCurrentSketch": "Do you want to delete the current sketch?", + "sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected." + } + }, + "cloud": { + "GoToCloud": "GO TO CLOUD" + } +} diff --git a/yarn.lock b/yarn.lock index 74f56a70d..6a31364ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4052,10 +4052,10 @@ archive-type@^4.0.0: dependencies: file-type "^4.2.0" -arduino-serial-plotter-webapp@0.0.16: - version "0.0.16" - resolved "https://registry.yarnpkg.com/arduino-serial-plotter-webapp/-/arduino-serial-plotter-webapp-0.0.16.tgz#b3c7e8572af4ef4df78a07e5f6bf5a5f32c3a0a2" - integrity sha512-PyaRj1Vc9XWhHjYDHiFhVTtDgrLJenLd+hOLzQgF8fOnRBjqFU88iJGWuQGTYZLklljayHZFslmCZ4WDeSXIiw== +arduino-serial-plotter-webapp@0.0.17: + version "0.0.17" + resolved "https://registry.yarnpkg.com/arduino-serial-plotter-webapp/-/arduino-serial-plotter-webapp-0.0.17.tgz#9a304df2a2fc95d9ec812b0d56288643292dd151" + integrity sha512-JGXFm2uJ+izzhk45ayq1ioXJOi5IZyK9De9fjCHCJKvc3BSGqBToZmRr3r1W5GPMfO88ySrGn9pfzZQtgI8Isg== are-we-there-yet@~1.1.2: version "1.1.5" From fcdf16a93724e148fc3183e7a4b7d72b830073a8 Mon Sep 17 00:00:00 2001 From: Francesco Stasi Date: Fri, 14 Jan 2022 12:12:17 +0100 Subject: [PATCH 03/40] Update BUILDING.md --- BUILDING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILDING.md b/BUILDING.md index c902af1f9..4936d59cb 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -58,7 +58,7 @@ Once you have all the tools installed, you can build the editor following these 3. Rebuild the electron dependencies ```sh cd electron-app - yarn rebuild:browser + yarn rebuild:electron cd .. ``` From a5891f9884f42a048cd0b700e40f1c09e9ab326b Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 12 Jan 2022 23:14:19 -0800 Subject: [PATCH 04/40] Update development docs for current repository The original location of the project repository was `bcmi-labs/arduino-editor` and some of the internal development documentation for the project contains references to the repository. This documentation was not updated at the time the repository was moved to the current home in `arduino/arduino-ide`. --- docs/internal/Arm.md | 6 +++--- docs/internal/Ubuntu.md | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/internal/Arm.md b/docs/internal/Arm.md index f95cf9264..95642c196 100644 --- a/docs/internal/Arm.md +++ b/docs/internal/Arm.md @@ -42,10 +42,10 @@ Building the Pro IDE on Linux `armv7l` (aka `armhf`) and `aarch64` (aka `arm64`) - `libx11-dev`, and - `libxkbfile-dev` -4. [Build it](https://github.com/bcmi-labs/arduino-editor#build-from-source) from the source: +4. [Build it](../../BUILDING.md#build-from-source) from the source: ``` - git clone https://github.com/bcmi-labs/arduino-editor.git \ - && cd arduino-editor \ + git clone https://github.com/arduino/arduino-ide.git \ + && cd arduino-ide \ && yarn \ && yarn rebuild:electron \ && yarn --cwd ./electron-app start diff --git a/docs/internal/Ubuntu.md b/docs/internal/Ubuntu.md index 9aba9b206..d4ba25543 100644 --- a/docs/internal/Ubuntu.md +++ b/docs/internal/Ubuntu.md @@ -1,6 +1,6 @@ ### Building and start the app from the sources on Ubuntu Linux -Tested and verified on Ubuntu 18.04.4. The source will be checked out to `~/dev/git/arduino-editor`. +Tested and verified on Ubuntu 18.04.4. The source will be checked out to `~/dev/git/arduino-ide`. ``` #!/bin/bash -i @@ -25,9 +25,9 @@ sudo apt update \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list \ && sudo apt update && sudo apt install --no-install-recommends yarn \ && mkdir -p ~/dev/git/ \ -&& rm -rf ~/dev/git/arduino-editor \ -&& git clone --depth 1 https://github.com/bcmi-labs/arduino-editor.git ~/dev/git/arduino-editor \ -&& yarn --cwd ~/dev/git/arduino-editor \ -&& yarn --cwd ~/dev/git/arduino-editor rebuild:electron \ -&& yarn --cwd ~/dev/git/arduino-editor/electron-app start +&& rm -rf ~/dev/git/arduino-ide \ +&& git clone --depth 1 https://github.com/arduino/arduino-ide.git ~/dev/git/arduino-ide \ +&& yarn --cwd ~/dev/git/arduino-ide \ +&& yarn --cwd ~/dev/git/arduino-ide rebuild:electron \ +&& yarn --cwd ~/dev/git/arduino-ide/electron-app start ``` From bc365f4a8d8c305b269e1b3186a9a03eee8713a7 Mon Sep 17 00:00:00 2001 From: per1234 Date: Wed, 12 Jan 2022 23:13:14 -0800 Subject: [PATCH 05/40] Correct minor typos in UI text and documentation --- BUILDING.md | 2 +- .../src/browser/boards/boards-config-dialog.ts | 2 +- .../src/browser/contributions/open-sketch.ts | 2 +- .../src/browser/contributions/upload-firmware.ts | 2 +- .../firmware-uploader/firmware-uploader-component.tsx | 2 +- .../serial/monitor/serial-monitor-send-input.tsx | 2 +- docs/README.md | 2 +- docs/internal/Arm.md | 2 +- i18n/en.json | 10 +++++----- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 4936d59cb..820adb751 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -127,7 +127,7 @@ git add . \ git tag -a 0.2.0 -m "0.2.0" \ && git push origin 0.2.0 ``` - - The release build starts automatically and uploads the artifacts with the changelog to the [release page](https://github.com/arduino/arduino-ide/releases). + - The release build starts automatically and uploads the artifacts with the changelog to the [release page](https://github.com/arduino/arduino-ide/releases). - If you do not want to release the `EXE` and `MSI` installers, wipe them manually. - If you do not like the generated changelog, modify it and update the GH release. diff --git a/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts b/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts index 0ef4bad3c..545e8067a 100644 --- a/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts +++ b/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts @@ -84,7 +84,7 @@ export class BoardsConfigDialog extends AbstractDialog { ), nls.localize( 'arduino/board/configDialog2', - 'If you only select a Board you will be able just to compile, but not to upload your sketch.' + 'If you only select a Board you will be able to compile, but not to upload your sketch.' ), ]) { const p = document.createElement('div'); diff --git a/arduino-ide-extension/src/browser/contributions/open-sketch.ts b/arduino-ide-extension/src/browser/contributions/open-sketch.ts index 1c77491ca..6e80becc1 100644 --- a/arduino-ide-extension/src/browser/contributions/open-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/open-sketch.ts @@ -190,7 +190,7 @@ export class OpenSketch extends SketchContribution { ], message: nls.localize( 'arduino/sketch/movingMsg', - 'The file "{0}" needs to be inside a sketch folder named as "{1}".\nCreate this folder, move the file, and continue?', + 'The file "{0}" needs to be inside a sketch folder named "{1}".\nCreate this folder, move the file, and continue?', nameWithExt, name ), diff --git a/arduino-ide-extension/src/browser/contributions/upload-firmware.ts b/arduino-ide-extension/src/browser/contributions/upload-firmware.ts index 6b706a551..43af8b14f 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-firmware.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-firmware.ts @@ -45,7 +45,7 @@ export namespace UploadFirmware { id: 'arduino-upload-firmware-open', label: nls.localize( 'arduino/firmware/updater', - 'WiFi101 / WiFiNINA Firmware Updater' + 'WiFi101 / WiFiNINA Firmware Updater' ), category: 'Arduino', }; diff --git a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx index 04a4c8e11..8e5c6d32d 100644 --- a/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx +++ b/arduino-ide-extension/src/browser/dialogs/firmware-uploader/firmware-uploader-component.tsx @@ -201,7 +201,7 @@ export const FirmwareUploaderComponent = ({ {nls.localize( 'arduino/firmware/successfullyInstalled', - 'Firmware succesfully installed.' + 'Firmware successfully installed.' )} )} diff --git a/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx b/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx index 5b730c17a..1f6d24836 100644 --- a/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx +++ b/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx @@ -80,7 +80,7 @@ export class SerialMonitorSendInput extends React.Component< const { board, port } = serialConfig; return nls.localize( 'arduino/serial/message', - "Message ({0} + Enter to send message to '{1}' on '{2}'", + "Message ({0} + Enter to send message to '{1}' on '{2}')", isOSX ? '⌘' : nls.localize('vscode/keybindingLabels/ctrlKey', 'Ctrl'), board ? Board.toString(board, { diff --git a/docs/README.md b/docs/README.md index 189fa677f..c5d9cf00f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,7 +6,7 @@ Arduino IDE provides a Remote Sketchbook feature that can be used to upload sket In order to use this feature, a user must be registered on [Arduino Cloud](https://store.arduino.cc/digital/create) and logged in. -This feature is completely optional and can be disabled in the IDE via _"File > Advanced > Hide Remote Sketchbook"_ menu item. +This feature is completely optional and can be disabled in the IDE via the _"File > Advanced > Hide Remote Sketchbook"_ menu item. ## Developer guide A developer could use the content of this repo to create a customized version of this feature and implement a different remote storage as follows: diff --git a/docs/internal/Arm.md b/docs/internal/Arm.md index 95642c196..dc912c016 100644 --- a/docs/internal/Arm.md +++ b/docs/internal/Arm.md @@ -2,7 +2,7 @@ Building the Pro IDE on Linux `armv7l` (aka `armhf`) and `aarch64` (aka `arm64`): -1. Install Node.js 10.x with [nvm](https://github.com/nvm-sh/nvm#install--update-script): +1. Install Node.js 12.x with [nvm](https://github.com/nvm-sh/nvm#install--update-script): ``` wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash ``` diff --git a/i18n/en.json b/i18n/en.json index 459770646..dd93d03a7 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -108,7 +108,7 @@ "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", "configDialogTitle": "Select Other Board & Port", "configDialog1": "Select both a Board and a Port if you want to upload a sketch.", - "configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.", + "configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.", "pleasePickBoard": "Please pick a board connected to the port you have selected.", "showAllAvailablePorts": "Shows all available ports when enabled", "programmer": "Programmer", @@ -173,7 +173,7 @@ "showFolder": "Show Sketch Folder", "sketch": "Sketch", "moving": "Moving", - "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?", + "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?", "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", "saveFolderAs": "Save sketch folder as...", "sketchbook": "Sketchbook", @@ -243,14 +243,14 @@ "noSupportedBoardConnected": "No supported board connected" }, "firmware": { - "updater": "WiFi101 / WiFiNINA Firmware Updater", + "updater": "WiFi101 / WiFiNINA Firmware Updater", "selectBoard": "Select Board", "checkUpdates": "Check Updates", "selectVersion": "Select firmware version", "install": "Install", "overwriteSketch": "Installation will overwrite the Sketch on the board.", "installingFirmware": "Installing firmware.", - "successfullyInstalled": "Firmware succesfully installed.", + "successfullyInstalled": "Firmware successfully installed.", "failedInstall": "Installation failed. Please try again." }, "dialog": { @@ -269,7 +269,7 @@ "carriageReturn": "Carriage Return", "newLineCarriageReturn": "Both NL & CR", "notConnected": "Not connected. Select a board and a port to connect automatically.", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}'", + "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", "connectionBusy": "Connection failed. Serial port is busy: {0}", "disconnected": "Disconnected {0} from {1}.", "unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.", From 66fc27e58ca62e6dd1e6b86b52b5129db73da5de Mon Sep 17 00:00:00 2001 From: per1234 Date: Fri, 14 Jan 2022 14:22:57 -0800 Subject: [PATCH 06/40] Remove stray brace from compilation error output An extra brace was inadvertently introduced into a template literal used to format output text in the event of an error during compilation. This caused the text to end in a pointless `}` For example: ``` Compilation error: exit status 1} ``` After this change, the output text is as expected: ``` Compilation error: exit status 1 ``` --- arduino-ide-extension/src/node/core-service-impl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arduino-ide-extension/src/node/core-service-impl.ts b/arduino-ide-extension/src/node/core-service-impl.ts index f0319f511..8d538b257 100644 --- a/arduino-ide-extension/src/node/core-service-impl.ts +++ b/arduino-ide-extension/src/node/core-service-impl.ts @@ -96,7 +96,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService { e.details ); this.responseService.appendToOutput({ - chunk: `${errorMessage}}\n`, + chunk: `${errorMessage}\n`, severity: 'error', }); throw new Error(errorMessage); From a71ac4c44d781c020ca31cfa52a0a97a4eebd914 Mon Sep 17 00:00:00 2001 From: Francesco Stasi Date: Fri, 21 Jan 2022 10:47:12 +0100 Subject: [PATCH 07/40] Update BUILDING.md --- BUILDING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILDING.md b/BUILDING.md index 820adb751..a19d8ef78 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -58,7 +58,7 @@ Once you have all the tools installed, you can build the editor following these 3. Rebuild the electron dependencies ```sh cd electron-app - yarn rebuild:electron + yarn theia rebuild:electron cd .. ``` From 1d88263c853cd9a431ff580227a9e5bb8edd64e5 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Mon, 24 Jan 2022 17:21:19 +0100 Subject: [PATCH 08/40] update ls to 0.6.0and clangd to 13.0.0 (#738) --- arduino-ide-extension/package.json | 6 + arduino-ide-extension/scripts/download-ls.js | 61 ++++-- arduino-ide-extension/scripts/downloader.js | 183 ++++++++++-------- .../src/node/executable-service-impl.ts | 2 +- .../src/test/node/exec-util.test.ts | 2 +- 5 files changed, 148 insertions(+), 106 deletions(-) diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index f1e56c4ea..ce092b8bc 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -155,6 +155,12 @@ }, "fwuploader": { "version": "2.0.0" + }, + "clangd": { + "version": "13.0.0" + }, + "languageServer": { + "version": "0.6.0" } } } diff --git a/arduino-ide-extension/scripts/download-ls.js b/arduino-ide-extension/scripts/download-ls.js index 2b65023b2..f00a8e625 100755 --- a/arduino-ide-extension/scripts/download-ls.js +++ b/arduino-ide-extension/scripts/download-ls.js @@ -4,13 +4,38 @@ // - https://downloads.arduino.cc/arduino-language-server/clangd/clangd_${VERSION}_${SUFFIX} (() => { - const DEFAULT_ALS_VERSION = '0.5.0'; - const DEFAULT_CLANGD_VERSION = 'snapshot_20210124'; - const path = require('path'); const shell = require('shelljs'); const downloader = require('./downloader'); + const [DEFAULT_ALS_VERSION, DEFAULT_CLANGD_VERSION] = (() => { + const pkg = require(path.join(__dirname, '..', 'package.json')); + if (!pkg) return undefined; + + const { arduino } = pkg; + if (!arduino) return undefined; + + const { languageServer, clangd } = arduino; + if (!languageServer) return undefined; + if (!clangd) return undefined; + + return [languageServer.version, clangd.version]; + })(); + + if (!DEFAULT_ALS_VERSION) { + shell.echo( + `Could not retrieve Arduino Language Server version info from the 'package.json'.` + ); + shell.exit(1); + } + + if (!DEFAULT_CLANGD_VERSION) { + shell.echo( + `Could not retrieve clangd version info from the 'package.json'.` + ); + shell.exit(1); + } + const yargs = require('yargs') .option('ls-version', { alias: 'lv', @@ -20,7 +45,7 @@ .option('clangd-version', { alias: 'cv', default: DEFAULT_CLANGD_VERSION, - choices: ['snapshot_20210124'], + choices: [DEFAULT_CLANGD_VERSION, 'snapshot_20210124'], describe: `The version of 'clangd' to download. Defaults to ${DEFAULT_CLANGD_VERSION}.`, }) .option('force-download', { @@ -35,32 +60,32 @@ const clangdVersion = yargs['clangd-version']; const force = yargs['force-download']; const { platform, arch } = process; - + const platformArch = platform + '-' + arch; const build = path.join(__dirname, '..', 'build'); const lsExecutablePath = path.join( build, `arduino-language-server${platform === 'win32' ? '.exe' : ''}` ); + let clangdExecutablePath, lsSuffix, clangdSuffix; - let clangdExecutablePath, lsSuffix, clangdPrefix; - switch (platform) { - case 'darwin': - clangdExecutablePath = path.join(build, 'bin', 'clangd'); + switch (platformArch) { + case 'darwin-x64': + clangdExecutablePath = path.join(build, 'clangd'); lsSuffix = 'macOS_64bit.tar.gz'; - clangdPrefix = 'mac'; + clangdSuffix = 'macOS_64bit'; break; - case 'linux': - clangdExecutablePath = path.join(build, 'bin', 'clangd'); + case 'linux-x64': + clangdExecutablePath = path.join(build, 'clangd'); lsSuffix = 'Linux_64bit.tar.gz'; - clangdPrefix = 'linux'; + clangdSuffix = 'Linux_64bit'; break; - case 'win32': - clangdExecutablePath = path.join(build, 'bin', 'clangd.exe'); + case 'win32-x64': + clangdExecutablePath = path.join(build, 'clangd.exe'); lsSuffix = 'Windows_64bit.zip'; - clangdPrefix = 'windows'; + clangdSuffix = 'Windows_64bit'; break; } - if (!lsSuffix) { + if (!lsSuffix || !clangdSuffix) { shell.echo( `The arduino-language-server is not available for ${platform} ${arch}.` ); @@ -74,7 +99,7 @@ }_${lsSuffix}`; downloader.downloadUnzipAll(alsUrl, build, lsExecutablePath, force); - const clangdUrl = `https://downloads.arduino.cc/arduino-language-server/clangd/clangd-${clangdPrefix}-${clangdVersion}.zip`; + const clangdUrl = `https://downloads.arduino.cc/tools/clangd_${clangdVersion}_${clangdSuffix}.tar.bz2`; downloader.downloadUnzipAll(clangdUrl, build, clangdExecutablePath, force, { strip: 1, }); // `strip`: the new clangd (12.x) is zipped into a folder, so we have to strip the outmost folder. diff --git a/arduino-ide-extension/scripts/downloader.js b/arduino-ide-extension/scripts/downloader.js index 6e81d480d..775aa0435 100644 --- a/arduino-ide-extension/scripts/downloader.js +++ b/arduino-ide-extension/scripts/downloader.js @@ -5,16 +5,17 @@ const download = require('download'); const decompress = require('decompress'); const unzip = require('decompress-unzip'); const untargz = require('decompress-targz'); +const untarbz2 = require('decompress-tarbz2'); process.on('unhandledRejection', (reason, _) => { - shell.echo(String(reason)); - shell.exit(1); - throw reason; + shell.echo(String(reason)); + shell.exit(1); + throw reason; }); -process.on('uncaughtException', error => { - shell.echo(String(error)); - shell.exit(1); - throw error; +process.on('uncaughtException', (error) => { + shell.echo(String(error)); + shell.exit(1); + throw error; }); /** @@ -23,55 +24,62 @@ process.on('uncaughtException', error => { * @param filePrefix {string} Prefix of the file name found in the archive * @param force {boolean} Whether to download even if the target file exists. `false` by default. */ -exports.downloadUnzipFile = async (url, targetFile, filePrefix, force = false) => { - if (fs.existsSync(targetFile) && !force) { - shell.echo(`Skipping download because file already exists: ${targetFile}`); - return; - } - if (!fs.existsSync(path.dirname(targetFile))) { - if (shell.mkdir('-p', path.dirname(targetFile)).code !== 0) { - shell.echo('Could not create new directory.'); - shell.exit(1); - } +exports.downloadUnzipFile = async ( + url, + targetFile, + filePrefix, + force = false +) => { + if (fs.existsSync(targetFile) && !force) { + shell.echo(`Skipping download because file already exists: ${targetFile}`); + return; + } + if (!fs.existsSync(path.dirname(targetFile))) { + if (shell.mkdir('-p', path.dirname(targetFile)).code !== 0) { + shell.echo('Could not create new directory.'); + shell.exit(1); } + } - const downloads = path.join(__dirname, '..', 'downloads'); - if (shell.rm('-rf', targetFile, downloads).code !== 0) { - shell.exit(1); - } + const downloads = path.join(__dirname, '..', 'downloads'); + if (shell.rm('-rf', targetFile, downloads).code !== 0) { + shell.exit(1); + } - shell.echo(`>>> Downloading from '${url}'...`); - const data = await download(url); - shell.echo(`<<< Download succeeded.`); + shell.echo(`>>> Downloading from '${url}'...`); + const data = await download(url); + shell.echo(`<<< Download succeeded.`); - shell.echo('>>> Decompressing...'); - const files = await decompress(data, downloads, { - plugins: [ - unzip(), - untargz() - ] - }); - if (files.length === 0) { - shell.echo('Error ocurred while decompressing the archive.'); - shell.exit(1); - } - const fileIndex = files.findIndex(f => f.path.startsWith(filePrefix)); - if (fileIndex === -1) { - shell.echo(`The downloaded artifact does not contain any file with prefix ${filePrefix}.`); - shell.exit(1); - } - shell.echo('<<< Decompressing succeeded.'); + shell.echo('>>> Decompressing...'); + const files = await decompress(data, downloads, { + plugins: [unzip(), untargz(), untarbz2()], + }); + if (files.length === 0) { + shell.echo('Error ocurred while decompressing the archive.'); + shell.exit(1); + } + const fileIndex = files.findIndex((f) => f.path.startsWith(filePrefix)); + if (fileIndex === -1) { + shell.echo( + `The downloaded artifact does not contain any file with prefix ${filePrefix}.` + ); + shell.exit(1); + } + shell.echo('<<< Decompressing succeeded.'); - if (shell.mv('-f', path.join(downloads, files[fileIndex].path), targetFile).code !== 0) { - shell.echo(`Could not move file to target path: ${targetFile}`); - shell.exit(1); - } - if (!fs.existsSync(targetFile)) { - shell.echo(`Could not find file: ${targetFile}`); - shell.exit(1); - } - shell.echo(`Done: ${targetFile}`); -} + if ( + shell.mv('-f', path.join(downloads, files[fileIndex].path), targetFile) + .code !== 0 + ) { + shell.echo(`Could not move file to target path: ${targetFile}`); + shell.exit(1); + } + if (!fs.existsSync(targetFile)) { + shell.echo(`Could not find file: ${targetFile}`); + shell.exit(1); + } + shell.echo(`Done: ${targetFile}`); +}; /** * @param url {string} Download URL @@ -79,42 +87,45 @@ exports.downloadUnzipFile = async (url, targetFile, filePrefix, force = false) = * @param targetFile {string} Path to the main file expected after decompressing * @param force {boolean} Whether to download even if the target file exists */ -exports.downloadUnzipAll = async (url, targetDir, targetFile, force, decompressOptions = undefined) => { - if (fs.existsSync(targetFile) && !force) { - shell.echo(`Skipping download because file already exists: ${targetFile}`); - return; - } - if (!fs.existsSync(targetDir)) { - if (shell.mkdir('-p', targetDir).code !== 0) { - shell.echo('Could not create new directory.'); - shell.exit(1); - } +exports.downloadUnzipAll = async ( + url, + targetDir, + targetFile, + force, + decompressOptions = undefined +) => { + if (fs.existsSync(targetFile) && !force) { + shell.echo(`Skipping download because file already exists: ${targetFile}`); + return; + } + if (!fs.existsSync(targetDir)) { + if (shell.mkdir('-p', targetDir).code !== 0) { + shell.echo('Could not create new directory.'); + shell.exit(1); } + } - shell.echo(`>>> Downloading from '${url}'...`); - const data = await download(url); - shell.echo(`<<< Download succeeded.`); + shell.echo(`>>> Downloading from '${url}'...`); + const data = await download(url); + shell.echo(`<<< Download succeeded.`); - shell.echo('>>> Decompressing...'); - let options = { - plugins: [ - unzip(), - untargz() - ] - }; - if (decompressOptions) { - options = Object.assign(options, decompressOptions) - } - const files = await decompress(data, targetDir, options); - if (files.length === 0) { - shell.echo('Error ocurred while decompressing the archive.'); - shell.exit(1); - } - shell.echo('<<< Decompressing succeeded.'); + shell.echo('>>> Decompressing...'); + let options = { + plugins: [unzip(), untargz(), untarbz2()], + }; + if (decompressOptions) { + options = Object.assign(options, decompressOptions); + } + const files = await decompress(data, targetDir, options); + if (files.length === 0) { + shell.echo('Error ocurred while decompressing the archive.'); + shell.exit(1); + } + shell.echo('<<< Decompressing succeeded.'); - if (!fs.existsSync(targetFile)) { - shell.echo(`Could not find file: ${targetFile}`); - shell.exit(1); - } - shell.echo(`Done: ${targetFile}`); -} + if (!fs.existsSync(targetFile)) { + shell.echo(`Could not find file: ${targetFile}`); + shell.exit(1); + } + shell.echo(`Done: ${targetFile}`); +}; diff --git a/arduino-ide-extension/src/node/executable-service-impl.ts b/arduino-ide-extension/src/node/executable-service-impl.ts index 8ebede450..0dbace0e3 100644 --- a/arduino-ide-extension/src/node/executable-service-impl.ts +++ b/arduino-ide-extension/src/node/executable-service-impl.ts @@ -17,7 +17,7 @@ export class ExecutableServiceImpl implements ExecutableService { }> { const [ls, clangd, cli, fwuploader] = await Promise.all([ getExecPath('arduino-language-server', this.onError.bind(this)), - getExecPath('clangd', this.onError.bind(this), undefined, true), + getExecPath('clangd', this.onError.bind(this), undefined), getExecPath('arduino-cli', this.onError.bind(this)), getExecPath('arduino-fwuploader', this.onError.bind(this)), ]); diff --git a/arduino-ide-extension/src/test/node/exec-util.test.ts b/arduino-ide-extension/src/test/node/exec-util.test.ts index b72c02018..ffbd1fbf6 100644 --- a/arduino-ide-extension/src/test/node/exec-util.test.ts +++ b/arduino-ide-extension/src/test/node/exec-util.test.ts @@ -22,7 +22,7 @@ describe('getExecPath', () => { }); it('should resolve clangd', async () => { - const actual = await getExecPath('clangd', onError, '--version', true); + const actual = await getExecPath('clangd', onError, '--version'); const expected = os.platform() === 'win32' ? '\\clangd.exe' : '/clangd'; expect(actual).to.endsWith(expected); }); From 0230071b5f5fccaff1309ef7e189ae8864e457d0 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Mon, 24 Jan 2022 15:51:25 +0100 Subject: [PATCH 09/40] add script to compose full changelog --- .../scripts/compose-changelog.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 arduino-ide-extension/scripts/compose-changelog.js diff --git a/arduino-ide-extension/scripts/compose-changelog.js b/arduino-ide-extension/scripts/compose-changelog.js new file mode 100755 index 000000000..a1539ce31 --- /dev/null +++ b/arduino-ide-extension/scripts/compose-changelog.js @@ -0,0 +1,50 @@ +// @ts-check + +(async () => { + const { Octokit } = require('@octokit/rest'); + + const octokit = new Octokit({ + userAgent: 'Arduino IDE compose-changelog.js', + }); + + const response = await octokit.rest.repos.listReleases({ + owner: 'arduino', + repo: 'arduino-ide', + }); + + if (!response || response.status !== 200) { + console.log('fancù'); + return; + } + const releases = response.data; + + let fullChangelog = releases.reduce((acc, item) => { + return acc + `\n\n${item.body}`; + }, ''); + + fullChangelog = replaceIssueNumber(fullChangelog); + fullChangelog = replaceIssueLink(fullChangelog); + fullChangelog = replaceCompareLink(fullChangelog); + + console.log(fullChangelog); +})(); + +const replaceIssueLink = (str) => { + const regex = + /(https:\/\/github\.com\/arduino\/arduino-ide\/(issues|pull)\/(\d*))/gm; + const substr = `[#$3]($1)`; + return str.replace(regex, substr); +}; + +const replaceIssueNumber = (str) => { + const regex = /#(\d+)/gm; + const subst = `[#$1](https://github.com/arduino/arduino-ide/pull/$1)`; + return str.replace(regex, subst); +}; + +const replaceCompareLink = (str) => { + const regex = + /(https:\/\/github.com\/arduino\/arduino-ide\/compare\/(.*))\s/gm; + const subst = `[\`$2\`]($1)`; + return str.replace(regex, subst); +}; From e8477b14f3dd043bc4645901e8e1fa6fe6020b81 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Tue, 25 Jan 2022 15:06:09 +0100 Subject: [PATCH 10/40] Fix substitutions issues with compose-changelog script --- arduino-ide-extension/package.json | 1 + .../scripts/compose-changelog.js | 90 ++++++++----- yarn.lock | 122 ++++++++++++++++++ 3 files changed, 184 insertions(+), 29 deletions(-) diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index ce092b8bc..b5e26543c 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -92,6 +92,7 @@ "which": "^1.3.1" }, "devDependencies": { + "@octokit/rest": "^18.12.0", "@types/chai": "^4.2.7", "@types/chai-string": "^1.4.2", "@types/mocha": "^5.2.7", diff --git a/arduino-ide-extension/scripts/compose-changelog.js b/arduino-ide-extension/scripts/compose-changelog.js index a1539ce31..a5f73d0c8 100755 --- a/arduino-ide-extension/scripts/compose-changelog.js +++ b/arduino-ide-extension/scripts/compose-changelog.js @@ -10,41 +10,73 @@ const response = await octokit.rest.repos.listReleases({ owner: 'arduino', repo: 'arduino-ide', - }); + }).catch(err => { + console.error(err); + process.exit(1); + }) - if (!response || response.status !== 200) { - console.log('fancù'); - return; - } const releases = response.data; let fullChangelog = releases.reduce((acc, item) => { - return acc + `\n\n${item.body}`; + // Process each line separately + const body = item.body.split('\n').map(processLine).join('\n') + // item.name is the name of the release changelog + return acc + `# ${item.name}\n\n${body}\n\n---\n\n`; }, ''); - fullChangelog = replaceIssueNumber(fullChangelog); - fullChangelog = replaceIssueLink(fullChangelog); - fullChangelog = replaceCompareLink(fullChangelog); - console.log(fullChangelog); })(); -const replaceIssueLink = (str) => { - const regex = - /(https:\/\/github\.com\/arduino\/arduino-ide\/(issues|pull)\/(\d*))/gm; - const substr = `[#$3]($1)`; - return str.replace(regex, substr); -}; - -const replaceIssueNumber = (str) => { - const regex = /#(\d+)/gm; - const subst = `[#$1](https://github.com/arduino/arduino-ide/pull/$1)`; - return str.replace(regex, subst); -}; - -const replaceCompareLink = (str) => { - const regex = - /(https:\/\/github.com\/arduino\/arduino-ide\/compare\/(.*))\s/gm; - const subst = `[\`$2\`]($1)`; - return str.replace(regex, subst); -}; + +// processLine applies different substitutions to line string. +// We're assuming that there are no more than one substitution +// per line to be applied. +const processLine = (line) => { + // Check if a link with one of the following format exists: + // * [#123](https://github.com/arduino/arduino-ide/pull/123) + // * [#123](https://github.com/arduino/arduino-ide/issues/123) + // * [#123](https://github.com/arduino/arduino-ide/pull/123/) + // * [#123](https://github.com/arduino/arduino-ide/issues/123/) + // If it does return the line as is. + let r = /(\(|\[)#\d+(\)|\])(\(|\[)https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?(\)|\])/gm; + if (r.test(line)) { + return line; + } + + // Check if a issue or PR link with the following format exists: + // * #123 + // If it does it's changed to: + // * [#123](https://github.com/arduino/arduino-ide/pull/123) + r = /#(\d+)/gm; + if (r.test(line)) { + return line.replace(r, `[#$1](https://github.com/arduino/arduino-ide/pull/$1)`) + } + + // Check if a link with one of the following format exists: + // * https://github.com/arduino/arduino-ide/pull/123 + // * https://github.com/arduino/arduino-ide/issues/123 + // * https://github.com/arduino/arduino-ide/pull/123/ + // * https://github.com/arduino/arduino-ide/issues/123/ + // If it does it's changed respectively to: + // * [#123](https://github.com/arduino/arduino-ide/pull/123) + // * [#123](https://github.com/arduino/arduino-ide/issues/123) + // * [#123](https://github.com/arduino/arduino-ide/pull/123/) + // * [#123](https://github.com/arduino/arduino-ide/issues/123/) + r = /(https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?)/gm; + if (r.test(line)) { + return line.replace(r, `[#$3]($1)`); + } + + // Check if a link with the following format exists: + // * https://github.com/arduino/arduino-ide/compare/2.0.0-rc2...2.0.0-rc3 + // * https://github.com/arduino/arduino-ide/compare/2.0.0-rc2...2.0.0-rc3/ + // If it does it's changed to: + // * [`2.0.0-rc2...2.0.0-rc3`](https://github.com/arduino/arduino-ide/compare/2.0.0-rc2...2.0.0-rc3) + r = /(https:\/\/github\.com\/arduino\/arduino-ide\/compare\/([^\/]*))\/?\s?/gm; + if (r.test(line)) { + return line.replace(r, '[`$2`]($1)');; + } + + // If nothing matches just return the line as is + return line; +} diff --git a/yarn.lock b/yarn.lock index 6a31364ba..e8323cd7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1824,6 +1824,26 @@ dependencies: "@octokit/types" "^6.0.3" +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" + integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.0" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + "@octokit/endpoint@^6.0.1": version "6.0.11" resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.11.tgz#082adc2aebca6dcefa1fb383f5efb3ed081949d1" @@ -1833,6 +1853,20 @@ is-plain-object "^5.0.0" universal-user-agent "^6.0.0" +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^11.2.0": + version "11.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" + integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== + "@octokit/openapi-types@^5.3.2": version "5.3.2" resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-5.3.2.tgz#b8ac43c5c3d00aef61a34cf744e315110c78deb4" @@ -1850,11 +1884,23 @@ dependencies: "@octokit/types" "^2.0.1" +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" + integrity sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw== + dependencies: + "@octokit/types" "^6.34.0" + "@octokit/plugin-request-log@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.3.tgz#70a62be213e1edc04bb8897ee48c311482f9700d" integrity sha512-4RFU4li238jMJAzLgAwkBAw+4Loile5haQMQr+uhFq27BmyJXcXSKvoQKqh0agsZEiUlW6iSv3FAgvmGkur7OQ== +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + "@octokit/plugin-rest-endpoint-methods@2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" @@ -1863,6 +1909,14 @@ "@octokit/types" "^2.0.1" deprecation "^2.3.1" +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" + integrity sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA== + dependencies: + "@octokit/types" "^6.34.0" + deprecation "^2.3.1" + "@octokit/request-error@^1.0.2": version "1.2.1" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" @@ -1881,6 +1935,15 @@ deprecation "^2.0.0" once "^1.4.0" +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + "@octokit/request@^5.2.0": version "5.4.14" resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.14.tgz#ec5f96f78333bb2af390afa5ff66f114b063bc96" @@ -1895,6 +1958,18 @@ once "^1.4.0" universal-user-agent "^6.0.0" +"@octokit/request@^5.6.0": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" + integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.7" + universal-user-agent "^6.0.0" + "@octokit/rest@^16.28.4": version "16.43.2" resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.2.tgz#c53426f1e1d1044dee967023e3279c50993dd91b" @@ -1917,6 +1992,16 @@ once "^1.4.0" universal-user-agent "^4.0.0" +"@octokit/rest@^18.12.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + "@octokit/types@^2.0.0", "@octokit/types@^2.0.1": version "2.16.2" resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2" @@ -1931,6 +2016,13 @@ dependencies: "@octokit/openapi-types" "^5.3.2" +"@octokit/types@^6.16.1", "@octokit/types@^6.34.0": + version "6.34.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" + integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== + dependencies: + "@octokit/openapi-types" "^11.2.0" + "@phosphor/algorithm@1", "@phosphor/algorithm@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@phosphor/algorithm/-/algorithm-1.2.0.tgz#4a19aa59261b7270be696672dc3f0663f7bef152" @@ -4430,6 +4522,11 @@ before-after-hook@^2.0.0: resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.0.tgz#09c40d92e936c64777aa385c4e9b904f8147eaf0" integrity sha512-jH6rKQIfroBbhEXVmI7XmXe3ix5S/PgJqpzdDPnR8JGLHWNYLsYZ6tK5iWOF/Ra3oqEX0NobXGlzbiylIzVphQ== +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + bent@^7.1.0: version "7.3.12" resolved "https://registry.yarnpkg.com/bent/-/bent-7.3.12.tgz#e0a2775d4425e7674c64b78b242af4f49da6b035" @@ -10295,6 +10392,13 @@ node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-gyp@^5.0.2: version "5.1.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" @@ -13864,6 +13968,11 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + trash@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/trash/-/trash-6.1.1.tgz#8fb863421b31f32571f2650b53534934d5e63025" @@ -14494,6 +14603,11 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -14581,6 +14695,14 @@ whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" From dcebd863cc149dbb3ad4a63dde3adf630f1368ab Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Wed, 26 Jan 2022 11:41:14 +0100 Subject: [PATCH 11/40] Changelog file is now written to file --- arduino-ide-extension/package.json | 1 + .../scripts/compose-changelog.js | 20 ++++++++++++++++++- package.json | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index b5e26543c..5730290f7 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -6,6 +6,7 @@ "scripts": { "prepare": "yarn download-cli && yarn download-fwuploader && yarn download-ls && yarn copy-serial-plotter && yarn clean && yarn download-examples && yarn build && yarn test", "clean": "rimraf lib", + "compose-changelog": "node ./scripts/compose-changelog.js", "download-cli": "node ./scripts/download-cli.js", "download-fwuploader": "node ./scripts/download-fwuploader.js", "copy-serial-plotter": "npx ncp ../node_modules/arduino-serial-plotter-webapp ./build/arduino-serial-plotter-webapp", diff --git a/arduino-ide-extension/scripts/compose-changelog.js b/arduino-ide-extension/scripts/compose-changelog.js index a5f73d0c8..1a6a7f062 100755 --- a/arduino-ide-extension/scripts/compose-changelog.js +++ b/arduino-ide-extension/scripts/compose-changelog.js @@ -1,7 +1,10 @@ // @ts-check + (async () => { const { Octokit } = require('@octokit/rest'); + const fs = require("fs"); + const path = require("path"); const octokit = new Octokit({ userAgent: 'Arduino IDE compose-changelog.js', @@ -24,7 +27,22 @@ return acc + `# ${item.name}\n\n${body}\n\n---\n\n`; }, ''); - console.log(fullChangelog); + const changelogFile = path.resolve(process.argv[process.argv.length - 1]); + + await fs.writeFile( + changelogFile, + fullChangelog, + { + flag: "w+", + }, + err => { + if (err) { + console.error(err); + process.exit(1); + } + console.log("Changelog written to", changelogFile); + } + ) })(); diff --git a/package.json b/package.json index ebc83f527..467053316 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,8 @@ "i18n:generate": "theia nls-extract -e vscode -f \"+(arduino-ide-extension|browser-app|electron|electron-app|plugins)/**/*.ts?(x)\" -o ./i18n/en.json", "i18n:check": "yarn i18n:generate && git add -N ./i18n && git diff --exit-code ./i18n", "i18n:push": "node ./scripts/i18n/transifex-push.js ./i18n/en.json", - "i18n:pull": "node ./scripts/i18n/transifex-pull.js ./i18n/" + "i18n:pull": "node ./scripts/i18n/transifex-pull.js ./i18n/", + "compose-changelog": "yarn --cwd ./arduino-ide-extension compose-changelog" }, "lint-staged": { "./arduino-ide-extension/**/*.{ts,tsx}": [ From cf0a2161affa40c0a41be975a10f2d5b8f693e71 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Wed, 26 Jan 2022 15:45:14 +0100 Subject: [PATCH 12/40] Add step to generate full changelog on release --- .github/workflows/build.yml | 120 +++++++++++++++++++++--------------- 1 file changed, 72 insertions(+), 48 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d9db57aa3..b9b62e229 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,9 +15,9 @@ on: env: JOB_TRANSFER_ARTIFACT: build-artifacts + CHANGELOG_ARTIFACTS: changelog jobs: - build: if: github.repository == 'arduino/arduino-ide' strategy: @@ -56,29 +56,29 @@ jobs: IS_RELEASE: ${{ startsWith(github.ref, 'refs/tags/') }} IS_FORK: ${{ github.event.pull_request.head.repo.fork == true }} run: | - # See: https://www.electron.build/code-signing - if [ $IS_FORK = true ]; then - echo "Skipping the app signing: building from a fork." - else - if [ "${{ runner.OS }}" = "macOS" ]; then - export CSC_LINK="${{ runner.temp }}/signing_certificate.p12" - # APPLE_SIGNING_CERTIFICATE_P12 secret was produced by following the procedure from: - # https://www.kencochrane.com/2020/08/01/build-and-sign-golang-binaries-for-macos-with-github-actions/#exporting-the-developer-certificate - echo "${{ secrets.APPLE_SIGNING_CERTIFICATE_P12 }}" | base64 --decode > "$CSC_LINK" + # See: https://www.electron.build/code-signing + if [ $IS_FORK = true ]; then + echo "Skipping the app signing: building from a fork." + else + if [ "${{ runner.OS }}" = "macOS" ]; then + export CSC_LINK="${{ runner.temp }}/signing_certificate.p12" + # APPLE_SIGNING_CERTIFICATE_P12 secret was produced by following the procedure from: + # https://www.kencochrane.com/2020/08/01/build-and-sign-golang-binaries-for-macos-with-github-actions/#exporting-the-developer-certificate + echo "${{ secrets.APPLE_SIGNING_CERTIFICATE_P12 }}" | base64 --decode > "$CSC_LINK" - export CSC_KEY_PASSWORD="${{ secrets.KEYCHAIN_PASSWORD }}" + export CSC_KEY_PASSWORD="${{ secrets.KEYCHAIN_PASSWORD }}" - elif [ "${{ runner.OS }}" = "Windows" ]; then - export CSC_LINK="${{ runner.temp }}/signing_certificate.pfx" - npm config set msvs_version 2017 --global - echo "${{ secrets.WINDOWS_SIGNING_CERTIFICATE_PFX }}" | base64 --decode > "$CSC_LINK" + elif [ "${{ runner.OS }}" = "Windows" ]; then + export CSC_LINK="${{ runner.temp }}/signing_certificate.pfx" + npm config set msvs_version 2017 --global + echo "${{ secrets.WINDOWS_SIGNING_CERTIFICATE_PFX }}" | base64 --decode > "$CSC_LINK" - export CSC_KEY_PASSWORD="${{ secrets.WINDOWS_SIGNING_CERTIFICATE_PASSWORD }}" - fi + export CSC_KEY_PASSWORD="${{ secrets.WINDOWS_SIGNING_CERTIFICATE_PASSWORD }}" fi + fi - yarn --cwd ./electron/packager/ - yarn --cwd ./electron/packager/ package + yarn --cwd ./electron/packager/ + yarn --cwd ./electron/packager/ package - name: Upload [GitHub Actions] uses: actions/upload-artifact@v2 @@ -95,15 +95,15 @@ jobs: strategy: matrix: artifact: - - path: "*Linux_64bit.zip" + - path: '*Linux_64bit.zip' name: Linux_X86-64 - - path: "*macOS_64bit.dmg" + - path: '*macOS_64bit.dmg' name: macOS - - path: "*Windows_64bit.exe" + - path: '*Windows_64bit.exe' name: Windows_X86-64_interactive_installer - - path: "*Windows_64bit.msi" + - path: '*Windows_64bit.msi' name: Windows_X86-64_MSI - - path: "*Windows_64bit.zip" + - path: '*Windows_64bit.zip' name: Windows_X86-64_zip steps: @@ -112,7 +112,7 @@ jobs: with: name: ${{ env.JOB_TRANSFER_ARTIFACT }} path: ${{ env.JOB_TRANSFER_ARTIFACT }} - + - name: Upload tester build artifact uses: actions/upload-artifact@v2 with: @@ -135,24 +135,24 @@ jobs: env: IS_RELEASE: ${{ startsWith(github.ref, 'refs/tags/') }} run: | - export LATEST_TAG=$(git describe --abbrev=0) - export GIT_LOG=$(git log --pretty=" - %s [%h]" $LATEST_TAG..HEAD | sed 's/ *$//g') - if [ "$IS_RELEASE" = true ]; then - export BODY=$(echo -e "$GIT_LOG") - else - export LATEST_TAG_WITH_LINK=$(echo "[$LATEST_TAG](https://github.com/arduino/arduino-ide/releases/tag/$LATEST_TAG)") - if [ -z "$GIT_LOG" ]; then - export BODY="There were no changes since version $LATEST_TAG_WITH_LINK." - else - export BODY=$(echo -e "Changes since version $LATEST_TAG_WITH_LINK:\n$GIT_LOG") - fi + export LATEST_TAG=$(git describe --abbrev=0) + export GIT_LOG=$(git log --pretty=" - %s [%h]" $LATEST_TAG..HEAD | sed 's/ *$//g') + if [ "$IS_RELEASE" = true ]; then + export BODY=$(echo -e "$GIT_LOG") + else + export LATEST_TAG_WITH_LINK=$(echo "[$LATEST_TAG](https://github.com/arduino/arduino-ide/releases/tag/$LATEST_TAG)") + if [ -z "$GIT_LOG" ]; then + export BODY="There were no changes since version $LATEST_TAG_WITH_LINK." + else + export BODY=$(echo -e "Changes since version $LATEST_TAG_WITH_LINK:\n$GIT_LOG") fi - echo -e "$BODY" - OUTPUT_SAFE_BODY="${BODY//'%'/'%25'}" - OUTPUT_SAFE_BODY="${OUTPUT_SAFE_BODY//$'\n'/'%0A'}" - OUTPUT_SAFE_BODY="${OUTPUT_SAFE_BODY//$'\r'/'%0D'}" - echo "::set-output name=BODY::$OUTPUT_SAFE_BODY" - echo "$BODY" > CHANGELOG.txt + fi + echo -e "$BODY" + OUTPUT_SAFE_BODY="${BODY//'%'/'%25'}" + OUTPUT_SAFE_BODY="${OUTPUT_SAFE_BODY//$'\n'/'%0A'}" + OUTPUT_SAFE_BODY="${OUTPUT_SAFE_BODY//$'\r'/'%0D'}" + echo "::set-output name=BODY::$OUTPUT_SAFE_BODY" + echo "$BODY" > CHANGELOG.txt - name: Upload Changelog [GitHub Actions] if: github.event_name == 'schedule' || (github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') @@ -175,9 +175,9 @@ jobs: - name: Publish Nightly [S3] uses: docker://plugins/s3 env: - PLUGIN_SOURCE: "${{ env.JOB_TRANSFER_ARTIFACT }}/*" - PLUGIN_STRIP_PREFIX: "${{ env.JOB_TRANSFER_ARTIFACT }}/" - PLUGIN_TARGET: "/arduino-ide/nightly" + PLUGIN_SOURCE: '${{ env.JOB_TRANSFER_ARTIFACT }}/*' + PLUGIN_STRIP_PREFIX: '${{ env.JOB_TRANSFER_ARTIFACT }}/' + PLUGIN_TARGET: '/arduino-ide/nightly' PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -198,6 +198,20 @@ jobs: run: | echo ::set-output name=TAG_NAME::${GITHUB_REF#refs/tags/} + - name: Create full changelog + id: full-changelog + run: | + mkdir "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}" + + # Get the changelog file name to build + CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-${date --iso-8601=s}.md" + + # Create manifest file pointing to latest changelog file name + echo "$CHANGELOG_FILE_NAME" >> "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/latest.txt" + + # Compose changelog + yarn run compose-changelog "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/$CHANGELOG_FILE_NAME" + - name: Publish Release [GitHub] uses: svenstaro/upload-release-action@2.2.0 with: @@ -208,12 +222,22 @@ jobs: file_glob: true body: ${{ needs.changelog.outputs.BODY }} + - name: Publish Changelog [S3] + uses: docker://plugins/s3 + env: + PLUGIN_SOURCE: '${{ env.CHANGELOG_ARTIFACTS }}/*' + PLUGIN_STRIP_PREFIX: '${{ env.CHANGELOG_ARTIFACTS }}/' + PLUGIN_TARGET: '/arduino-ide/changelog' + PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + - name: Publish Release [S3] uses: docker://plugins/s3 env: - PLUGIN_SOURCE: "${{ env.JOB_TRANSFER_ARTIFACT }}/*" - PLUGIN_STRIP_PREFIX: "${{ env.JOB_TRANSFER_ARTIFACT }}/" - PLUGIN_TARGET: "/arduino-ide" + PLUGIN_SOURCE: '${{ env.JOB_TRANSFER_ARTIFACT }}/*' + PLUGIN_STRIP_PREFIX: '${{ env.JOB_TRANSFER_ARTIFACT }}/' + PLUGIN_TARGET: '/arduino-ide' PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} From f1a5d87ab258b44d367fd372a1362deb031b302b Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 27 Jan 2022 15:53:13 +0100 Subject: [PATCH 13/40] Full changelog is now created from separate workflow --- .github/workflows/build.yml | 24 ---------- .github/workflows/compose-full-changelog.yaml | 45 +++++++++++++++++++ 2 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/compose-full-changelog.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b9b62e229..854666a9f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -198,20 +198,6 @@ jobs: run: | echo ::set-output name=TAG_NAME::${GITHUB_REF#refs/tags/} - - name: Create full changelog - id: full-changelog - run: | - mkdir "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}" - - # Get the changelog file name to build - CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-${date --iso-8601=s}.md" - - # Create manifest file pointing to latest changelog file name - echo "$CHANGELOG_FILE_NAME" >> "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/latest.txt" - - # Compose changelog - yarn run compose-changelog "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/$CHANGELOG_FILE_NAME" - - name: Publish Release [GitHub] uses: svenstaro/upload-release-action@2.2.0 with: @@ -222,16 +208,6 @@ jobs: file_glob: true body: ${{ needs.changelog.outputs.BODY }} - - name: Publish Changelog [S3] - uses: docker://plugins/s3 - env: - PLUGIN_SOURCE: '${{ env.CHANGELOG_ARTIFACTS }}/*' - PLUGIN_STRIP_PREFIX: '${{ env.CHANGELOG_ARTIFACTS }}/' - PLUGIN_TARGET: '/arduino-ide/changelog' - PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - - name: Publish Release [S3] uses: docker://plugins/s3 env: diff --git a/.github/workflows/compose-full-changelog.yaml b/.github/workflows/compose-full-changelog.yaml new file mode 100644 index 000000000..9aafcc206 --- /dev/null +++ b/.github/workflows/compose-full-changelog.yaml @@ -0,0 +1,45 @@ +name: Compose full changelog + +on: + release: + types: [created, edited] + +env: + CHANGELOG_ARTIFACTS: changelog + +jobs: + create-changelog: + if: github.repository == 'arduino/arduino-ide' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Get Tag + id: tag_name + run: | + echo ::set-output name=TAG_NAME::${GITHUB_REF#refs/tags/} + + - name: Create full changelog + id: full-changelog + run: | + mkdir "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}" + + # Get the changelog file name to build + CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-${date --iso-8601=s}.md" + + # Create manifest file pointing to latest changelog file name + echo "$CHANGELOG_FILE_NAME" >> "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/latest.txt" + + # Compose changelog + yarn run compose-changelog "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/$CHANGELOG_FILE_NAME" + + - name: Publish Changelog [S3] + uses: docker://plugins/s3 + env: + PLUGIN_SOURCE: '${{ env.CHANGELOG_ARTIFACTS }}/*' + PLUGIN_STRIP_PREFIX: '${{ env.CHANGELOG_ARTIFACTS }}/' + PLUGIN_TARGET: '/arduino-ide/changelog' + PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} From 8a0454db51c66c6b41810824ecc476a78bff76e5 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 27 Jan 2022 18:00:50 +0100 Subject: [PATCH 14/40] Fix compose full changelog workflow --- .github/workflows/compose-full-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/compose-full-changelog.yaml b/.github/workflows/compose-full-changelog.yaml index 9aafcc206..987841fcc 100644 --- a/.github/workflows/compose-full-changelog.yaml +++ b/.github/workflows/compose-full-changelog.yaml @@ -26,7 +26,7 @@ jobs: mkdir "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}" # Get the changelog file name to build - CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-${date --iso-8601=s}.md" + CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-$(date --iso-8601=s).md" # Create manifest file pointing to latest changelog file name echo "$CHANGELOG_FILE_NAME" >> "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/latest.txt" From b3b22795f86dd23573b112b9423cc5da80d699ba Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 27 Jan 2022 18:24:57 +0100 Subject: [PATCH 15/40] Fix compose-changelog.js overwriting itself when called with no arguments --- arduino-ide-extension/scripts/compose-changelog.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arduino-ide-extension/scripts/compose-changelog.js b/arduino-ide-extension/scripts/compose-changelog.js index 1a6a7f062..36b5c94c0 100755 --- a/arduino-ide-extension/scripts/compose-changelog.js +++ b/arduino-ide-extension/scripts/compose-changelog.js @@ -27,7 +27,12 @@ return acc + `# ${item.name}\n\n${body}\n\n---\n\n`; }, ''); - const changelogFile = path.resolve(process.argv[process.argv.length - 1]); + const args = process.argv.slice(2) + if (args.length == 0) { + console.error("Missing argument to destination file") + process.exit(1) + } + const changelogFile = path.resolve(args[0]); await fs.writeFile( changelogFile, From af33dce0f63d219ee8c49ad37b0501afb1f78565 Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Wed, 22 Dec 2021 16:46:19 +0100 Subject: [PATCH 16/40] Solve ports conflicts with same address and different protocol --- .../browser/arduino-frontend-contribution.tsx | 3 +- .../src/browser/boards/boards-config.tsx | 16 ++--- .../browser/boards/boards-service-provider.ts | 29 +++++---- .../browser/contributions/board-selection.ts | 29 +++++---- .../monitor/serial-monitor-send-input.tsx | 4 +- .../serial/serial-connection-manager.ts | 13 ++-- .../src/common/protocol/boards-service.ts | 59 ++++++------------- .../src/node/board-discovery.ts | 40 ++++++++----- .../src/node/core-service-impl.ts | 6 +- .../src/node/serial/serial-service-impl.ts | 16 ++--- .../src/test/browser/fixtures/boards.ts | 22 ++++++- .../src/test/node/serial-service-impl.test.ts | 8 +-- 12 files changed, 124 insertions(+), 121 deletions(-) diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index b72ba4e29..5224b54f8 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -3,7 +3,6 @@ import * as React from 'react'; import { remote } from 'electron'; import { BoardsService, - Port, SketchesService, ExecutableService, Sketch, @@ -216,7 +215,7 @@ export class ArduinoFrontendContribution ? nls.localize( 'arduino/common/selectedOn', 'on {0}', - Port.toString(selectedPort) + selectedPort.address ) : nls.localize('arduino/common/notConnected', '[not connected]'), className: 'arduino-selected-port', diff --git a/arduino-ide-extension/src/browser/boards/boards-config.tsx b/arduino-ide-extension/src/browser/boards/boards-config.tsx index 6d614745c..392710c6d 100644 --- a/arduino-ide-extension/src/browser/boards/boards-config.tsx +++ b/arduino-ide-extension/src/browser/boards/boards-config.tsx @@ -167,7 +167,7 @@ export class BoardsConfig extends React.Component< this.queryPorts(Promise.resolve(ports)).then(({ knownPorts }) => { let { selectedPort } = this.state; // If the currently selected port is not available anymore, unset the selected port. - if (removedPorts.some((port) => Port.equals(port, selectedPort))) { + if (removedPorts.some((port) => Port.sameAs(port, selectedPort))) { selectedPort = undefined; } this.setState({ knownPorts, selectedPort }, () => @@ -213,11 +213,11 @@ export class BoardsConfig extends React.Component< } else if (left.protocol === right.protocol) { // We show ports, including those that have guessed // or unrecognized boards, so we must sort those too. - const leftBoard = this.availableBoards.find((board) => - Port.sameAs(board.port, left) + const leftBoard = this.availableBoards.find( + (board) => board.port === left ); - const rightBoard = this.availableBoards.find((board) => - Port.sameAs(board.port, right) + const rightBoard = this.availableBoards.find( + (board) => board.port === right ); if (leftBoard && !rightBoard) { return -1; @@ -348,10 +348,10 @@ export class BoardsConfig extends React.Component<
{ports.map((port) => ( - key={Port.toString(port)} + key={`${port.id}`} item={port} label={Port.toString(port)} - selected={Port.equals(this.state.selectedPort, port)} + selected={Port.sameAs(this.state.selectedPort, port)} onClick={this.selectPort} /> ))} @@ -410,7 +410,7 @@ export namespace BoardsConfig { return options.default; } const { name } = selectedBoard; - return `${name}${port ? ' at ' + Port.toString(port) : ''}`; + return `${name}${port ? ` at ${port.address}` : ''}`; } export function setConfig( diff --git a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts index f1edefe14..26e3729ea 100644 --- a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts +++ b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts @@ -185,8 +185,8 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { const selectedAvailableBoard = AvailableBoard.is(selectedBoard) ? selectedBoard : this._availableBoards.find((availableBoard) => - Board.sameAs(availableBoard, selectedBoard) - ); + Board.sameAs(availableBoard, selectedBoard) + ); if ( selectedAvailableBoard && selectedAvailableBoard.selected && @@ -244,7 +244,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { } set boardsConfig(config: BoardsConfig.Config) { - this.doSetBoardsConfig(config); + this.setBoardsConfig(config); this.saveState().finally(() => this.reconcileAvailableBoards().finally(() => this.onBoardsConfigChangedEmitter.fire(this._boardsConfig) @@ -256,7 +256,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { return this._boardsConfig; } - protected doSetBoardsConfig(config: BoardsConfig.Config): void { + protected setBoardsConfig(config: BoardsConfig.Config): void { this.logger.info('Board config changed: ', JSON.stringify(config)); this._boardsConfig = config; this.latestBoardsConfig = this._boardsConfig; @@ -370,19 +370,19 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { const find = (needle: Board & { port: Port }, haystack: AvailableBoard[]) => haystack.find( (board) => - Board.equals(needle, board) && Port.equals(needle.port, board.port) + Board.equals(needle, board) && Port.sameAs(needle.port, board.port) ); const timeoutTask = !!timeout && timeout > 0 ? new Promise((_, reject) => - setTimeout( - () => reject(new Error(`Timeout after ${timeout} ms.`)), - timeout - ) + setTimeout( + () => reject(new Error(`Timeout after ${timeout} ms.`)), + timeout ) + ) : new Promise(() => { - /* never */ - }); + /* never */ + }); const waitUntilTask = new Promise((resolve) => { let candidate = find(what, this.availableBoards); if (candidate) { @@ -409,7 +409,7 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { Port.sameAs(port, this.boardsConfig.selectedPort) ) ) { - this.doSetBoardsConfig({ + this.setBoardsConfig({ selectedBoard: this.boardsConfig.selectedBoard, selectedPort: undefined, }); @@ -533,9 +533,8 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { protected getLastSelectedBoardOnPortKey(port: Port | string): string { // TODO: we lose the port's `protocol` info (`serial`, `network`, etc.) here if the `port` is a `string`. - return `last-selected-board-on-port:${ - typeof port === 'string' ? port : Port.toString(port) - }`; + return `last-selected-board-on-port:${typeof port === 'string' ? port : port.address + }`; } protected async loadState(): Promise { diff --git a/arduino-ide-extension/src/browser/contributions/board-selection.ts b/arduino-ide-extension/src/browser/contributions/board-selection.ts index bcca5a8ce..dc6824814 100644 --- a/arduino-ide-extension/src/browser/contributions/board-selection.ts +++ b/arduino-ide-extension/src/browser/contributions/board-selection.ts @@ -204,10 +204,9 @@ PID: ${PID}`; const packageLabel = packageName + - `${ - manuallyInstalled - ? nls.localize('arduino/board/inSketchbook', ' (in Sketchbook)') - : '' + `${manuallyInstalled + ? nls.localize('arduino/board/inSketchbook', ' (in Sketchbook)') + : '' }`; // Platform submenu const platformMenuPath = [...boardsPackagesGroup, packageId]; @@ -255,8 +254,8 @@ PID: ${PID}`; protocolOrder: number, ports: AvailablePorts ) => { - const addresses = Object.keys(ports); - if (!addresses.length) { + const portIDs = Object.keys(ports); + if (!portIDs.length) { return; } @@ -279,27 +278,27 @@ PID: ${PID}`; // First we show addresses with recognized boards connected, // then all the rest. - const sortedAddresses = Object.keys(ports); - sortedAddresses.sort((left: string, right: string): number => { + const sortedIDs = Object.keys(ports); + sortedIDs.sort((left: string, right: string): number => { const [, leftBoards] = ports[left]; const [, rightBoards] = ports[right]; return rightBoards.length - leftBoards.length; }); - for (let i = 0; i < sortedAddresses.length; i++) { - const address = sortedAddresses[i]; - const [port, boards] = ports[address]; - let label = `${address}`; + for (let i = 0; i < sortedIDs.length; i++) { + const portID = sortedIDs[i]; + const [port, boards] = ports[portID]; + let label = `${port.address}`; if (boards.length) { const boardsList = boards.map((board) => board.name).join(', '); label = `${label} (${boardsList})`; } - const id = `arduino-select-port--${address}`; + const id = `arduino-select-port--${portID}`; const command = { id }; const handler = { execute: () => { if ( - !Port.equals( + !Port.sameAs( port, this.boardsServiceProvider.boardsConfig.selectedPort ) @@ -312,7 +311,7 @@ PID: ${PID}`; } }, isToggled: () => - Port.equals( + Port.sameAs( port, this.boardsServiceProvider.boardsConfig.selectedPort ), diff --git a/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx b/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx index 1f6d24836..e15d55eac 100644 --- a/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx +++ b/arduino-ide-extension/src/browser/serial/monitor/serial-monitor-send-input.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { Key, KeyCode } from '@theia/core/lib/browser/keys'; -import { Board, Port } from '../../../common/protocol/boards-service'; +import { Board } from '../../../common/protocol/boards-service'; import { isOSX } from '@theia/core/lib/common/os'; import { DisposableCollection, nls } from '@theia/core/lib/common'; import { SerialConnectionManager } from '../serial-connection-manager'; @@ -87,7 +87,7 @@ export class SerialMonitorSendInput extends React.Component< useFqbn: false, }) : 'unknown', - port ? Port.toString(port) : 'unknown' + port ? port.address : 'unknown' ); } diff --git a/arduino-ide-extension/src/browser/serial/serial-connection-manager.ts b/arduino-ide-extension/src/browser/serial/serial-connection-manager.ts index 5c29cf566..e3fb2476e 100644 --- a/arduino-ide-extension/src/browser/serial/serial-connection-manager.ts +++ b/arduino-ide-extension/src/browser/serial/serial-connection-manager.ts @@ -10,7 +10,6 @@ import { } from '../../common/protocol/serial-service'; import { BoardsServiceProvider } from '../boards/boards-service-provider'; import { - Port, Board, BoardsService, } from '../../common/protocol/boards-service'; @@ -217,7 +216,7 @@ export class SerialConnectionManager { nls.localize( 'arduino/serial/connectionBusy', 'Connection failed. Serial port is busy: {0}', - Port.toString(port) + port.address ), options ); @@ -232,7 +231,7 @@ export class SerialConnectionManager { Board.toString(board, { useFqbn: false, }), - Port.toString(port) + port.address ), options ); @@ -244,7 +243,7 @@ export class SerialConnectionManager { 'arduino/serial/unexpectedError', 'Unexpected error. Reconnecting {0} on port {1}.', Board.toString(board), - Port.toString(port) + port.address ), options ); @@ -262,7 +261,7 @@ export class SerialConnectionManager { Board.toString(board, { useFqbn: false, }), - Port.toString(port) + port.address ) ); this.serialErrors.length = 0; @@ -280,7 +279,7 @@ export class SerialConnectionManager { Board.toString(board, { useFqbn: false, }), - Port.toString(port), + port.address, attempts.toString() ) ); @@ -351,7 +350,7 @@ export namespace Serial { export function toString(config: Partial): string { if (!isSerialConfig(config)) return ''; const { board, port } = config; - return `${Board.toString(board)} ${Port.toString(port)}`; + return `${Board.toString(board)} ${port.address}`; } } } diff --git a/arduino-ide-extension/src/common/protocol/boards-service.ts b/arduino-ide-extension/src/common/protocol/boards-service.ts index b0ef9fe75..b199fad20 100644 --- a/arduino-ide-extension/src/common/protocol/boards-service.ts +++ b/arduino-ide-extension/src/common/protocol/boards-service.ts @@ -7,13 +7,13 @@ export type AvailablePorts = Record]>; export namespace AvailablePorts { export function byProtocol(availablePorts: AvailablePorts): Map { const grouped = new Map(); - for (const address of Object.keys(availablePorts)) { - const [port, boards] = availablePorts[address]; + for (const portID of Object.keys(availablePorts)) { + const [port, boards] = availablePorts[portID]; let ports = grouped.get(port.protocol); if (!ports) { ports = {} as AvailablePorts; } - ports[address] = [port, boards]; + ports[portID] = [port, boards]; grouped.set(port.protocol, ports); } return grouped; @@ -43,7 +43,7 @@ export namespace AttachedBoardsChangeEvent { const visitedDetachedPorts: Port[] = []; for (const board of attached.boards) { const port = board.port - ? ` on ${Port.toString(board.port, { useLabel: true })}` + ? ` on ${Port.toString(board.port)}` : ''; rows.push(` - Attached board: ${Board.toString(board)}${port}`); if (board.port) { @@ -52,7 +52,7 @@ export namespace AttachedBoardsChangeEvent { } for (const board of detached.boards) { const port = board.port - ? ` from ${Port.toString(board.port, { useLabel: true })}` + ? ` from ${Port.toString(board.port)}` : ''; rows.push(` - Detached board: ${Board.toString(board)}${port}`); if (board.port) { @@ -62,18 +62,14 @@ export namespace AttachedBoardsChangeEvent { for (const port of attached.ports) { if (!visitedAttachedPorts.find((p) => Port.sameAs(port, p))) { rows.push( - ` - New port is available on ${Port.toString(port, { - useLabel: true, - })}` + ` - New port is available on ${Port.toString(port)}` ); } } for (const port of detached.ports) { if (!visitedDetachedPorts.find((p) => Port.sameAs(port, p))) { rows.push( - ` - Port is no longer available on ${Port.toString(port, { - useLabel: true, - })}` + ` - Port is no longer available on ${Port.toString(port)}` ); } } @@ -147,12 +143,14 @@ export interface BoardsService } export interface Port { + // id is the combination of address and protocol + // formatted like "
|" used + // to univocally recognize a port + readonly id: string; readonly address: string; + readonly addressLabel: string; readonly protocol: string; - /** - * Optional label for the protocol. For example: `Serial Port (USB)`. - */ - readonly label?: string; + readonly protocolLabel: string; } export namespace Port { export function is(arg: any): arg is Port { @@ -165,14 +163,8 @@ export namespace Port { ); } - export function toString( - port: Port, - options: { useLabel: boolean } = { useLabel: false } - ): string { - if (options.useLabel && port.label) { - return `${port.address} ${port.label}`; - } - return port.address; + export function toString(port: Port): string { + return `${port.addressLabel} ${port.protocolLabel}`; } export function compare(left: Port, right: Port): number { @@ -192,29 +184,12 @@ export namespace Port { return naturalCompare(left.address!, right.address!); } - export function equals( + export function sameAs( left: Port | undefined, right: Port | undefined ): boolean { if (left && right) { - return ( - left.address === right.address && - left.protocol === right.protocol && - (left.label || '') === (right.label || '') - ); - } - return left === right; - } - - export function sameAs( - left: Port | undefined, - right: Port | string | undefined - ) { - if (left && right) { - if (typeof right === 'string') { - return left.address === right; - } - return left.address === right.address; + return left.address === right.address && left.protocol === right.protocol; } return false; } diff --git a/arduino-ide-extension/src/node/board-discovery.ts b/arduino-ide-extension/src/node/board-discovery.ts index e612979e1..ee297cbd8 100644 --- a/arduino-ide-extension/src/node/board-discovery.ts +++ b/arduino-ide-extension/src/node/board-discovery.ts @@ -124,8 +124,22 @@ export class BoardDiscovery extends CoreClientAware { const address = (detectedPort as any).getPort().getAddress(); const protocol = (detectedPort as any).getPort().getProtocol(); + // Different discoveries can detect the same port with different + // protocols, so we consider the combination of address and protocol + // to be the id of a certain port to distinguish it from others. + // If we'd use only the address of a port to store it in a map + // we can have conflicts the same port is found with multiple + // protocols. + const portID = `${address}|${protocol}`; const label = (detectedPort as any).getPort().getLabel(); - const port = { address, protocol, label }; + const protocolLabel = (detectedPort as any).getPort().getProtocolLabel(); + const port = { + id: portID, + address, + addressLabel: label, + protocol, + protocolLabel, + }; const boards: Board[] = []; for (const item of detectedPort.getMatchingBoardsList()) { boards.push({ @@ -136,23 +150,21 @@ export class BoardDiscovery extends CoreClientAware { } if (eventType === 'add') { - if (newState[port.address]) { - const [, knownBoards] = newState[port.address]; + if (newState[portID]) { + const [, knownBoards] = newState[portID]; console.warn( - `Port '${ - port.address - }' was already available. Known boards before override: ${JSON.stringify( + `Port '${Port.toString(port)}' was already available. Known boards before override: ${JSON.stringify( knownBoards )}` ); } - newState[port.address] = [port, boards]; + newState[portID] = [port, boards]; } else if (eventType === 'remove') { - if (!newState[port.address]) { - console.warn(`Port '${port.address}' was not available. Skipping`); + if (!newState[portID]) { + console.warn(`Port '${Port.toString(port)}' was not available. Skipping`); return; } - delete newState[port.address]; + delete newState[portID]; } const oldAvailablePorts = this.getAvailablePorts(oldState); @@ -179,8 +191,8 @@ export class BoardDiscovery extends CoreClientAware { getAttachedBoards(state: AvailablePorts = this.state): Board[] { const attachedBoards: Board[] = []; - for (const address of Object.keys(state)) { - const [, boards] = state[address]; + for (const portID of Object.keys(state)) { + const [, boards] = state[portID]; attachedBoards.push(...boards); } return attachedBoards; @@ -188,8 +200,8 @@ export class BoardDiscovery extends CoreClientAware { getAvailablePorts(state: AvailablePorts = this.state): Port[] { const availablePorts: Port[] = []; - for (const address of Object.keys(state)) { - const [port] = state[address]; + for (const portID of Object.keys(state)) { + const [port] = state[portID]; availablePorts.push(port); } return availablePorts; diff --git a/arduino-ide-extension/src/node/core-service-impl.ts b/arduino-ide-extension/src/node/core-service-impl.ts index 8d538b257..85a5af6a1 100644 --- a/arduino-ide-extension/src/node/core-service-impl.ts +++ b/arduino-ide-extension/src/node/core-service-impl.ts @@ -159,8 +159,9 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService { const p = new Port(); if (port) { p.setAddress(port.address); - p.setLabel(port.label || ''); + p.setLabel(port.addressLabel); p.setProtocol(port.protocol); + p.setProtocolLabel(port.protocolLabel); } req.setPort(p); if (programmer) { @@ -229,8 +230,9 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService { const p = new Port(); if (port) { p.setAddress(port.address); - p.setLabel(port.label || ''); + p.setLabel(port.addressLabel); p.setProtocol(port.protocol); + p.setProtocolLabel(port.protocolLabel); } burnReq.setPort(p); if (programmer) { diff --git a/arduino-ide-extension/src/node/serial/serial-service-impl.ts b/arduino-ide-extension/src/node/serial/serial-service-impl.ts index 7b288ac10..db094d31e 100644 --- a/arduino-ide-extension/src/node/serial/serial-service-impl.ts +++ b/arduino-ide-extension/src/node/serial/serial-service-impl.ts @@ -16,7 +16,7 @@ import { MonitorConfig as GrpcMonitorConfig, } from '../cli-protocol/cc/arduino/cli/monitor/v1/monitor_pb'; import { MonitorClientProvider } from './monitor-client-provider'; -import { Board, Port } from '../../common/protocol/boards-service'; +import { Board } from '../../common/protocol/boards-service'; import { WebSocketService } from '../web-socket/web-socket-service'; import { SerialPlotter } from '../../browser/serial/plotter/protocol'; import { Disposable } from '@theia/core/shared/vscode-languageserver-protocol'; @@ -88,7 +88,7 @@ export class SerialServiceImpl implements SerialService { @inject(WebSocketService) protected readonly webSocketService: WebSocketService - ) {} + ) { } async isSerialPortOpen(): Promise { return !!this.serialConnection; @@ -153,7 +153,7 @@ export class SerialServiceImpl implements SerialService { this.logger.info( `>>> Creating serial connection for ${Board.toString( this.serialConfig.board - )} on port ${Port.toString(this.serialConfig.port)}...` + )} on port ${this.serialConfig.port.address}...` ); if (this.serialConnection) { @@ -225,7 +225,7 @@ export class SerialServiceImpl implements SerialService { default: break; } - } catch (error) {} + } catch (error) { } } ); @@ -272,12 +272,12 @@ export class SerialServiceImpl implements SerialService { serialConnection.duplex.write(req, () => { const boardName = this.serialConfig?.board ? Board.toString(this.serialConfig.board, { - useFqbn: false, - }) + useFqbn: false, + }) : 'unknown board'; const portName = this.serialConfig?.port - ? Port.toString(this.serialConfig.port) + ? this.serialConfig.port.address : 'unknown port'; this.logger.info( `<<< Serial connection created for ${boardName} on port ${portName}.` @@ -330,7 +330,7 @@ export class SerialServiceImpl implements SerialService { this.logger.info( `<<< Disposed serial connection for ${Board.toString(config.board, { useFqbn: false, - })} on port ${Port.toString(config.port)}.` + })} on port ${config.port.address}.` ); duplex.cancel(); diff --git a/arduino-ide-extension/src/test/browser/fixtures/boards.ts b/arduino-ide-extension/src/test/browser/fixtures/boards.ts index a9783f026..c00ded48a 100644 --- a/arduino-ide-extension/src/test/browser/fixtures/boards.ts +++ b/arduino-ide-extension/src/test/browser/fixtures/boards.ts @@ -4,11 +4,20 @@ import { Board, BoardsPackage, Port } from '../../../common/protocol'; export const aBoard: Board = { fqbn: 'some:board:fqbn', name: 'Some Arduino Board', - port: { address: '/lol/port1234', protocol: 'serial' }, + port: { + id: '/lol/port1234|serial', + address: '/lol/port1234', + addressLabel: '/lol/port1234', + protocol: 'serial', + protocolLabel: 'Serial Port (USB)', + }, }; export const aPort: Port = { + id: aBoard.port!.id, address: aBoard.port!.address, + addressLabel: aBoard.port!.addressLabel, protocol: aBoard.port!.protocol, + protocolLabel: aBoard.port!.protocolLabel, }; export const aBoardConfig: BoardsConfig.Config = { selectedBoard: aBoard, @@ -17,11 +26,20 @@ export const aBoardConfig: BoardsConfig.Config = { export const anotherBoard: Board = { fqbn: 'another:board:fqbn', name: 'Another Arduino Board', - port: { address: '/kek/port5678', protocol: 'serial' }, + port: { + id: '/kek/port5678|serial', + address: '/kek/port5678', + addressLabel: '/kek/port5678', + protocol: 'serial', + protocolLabel: 'Serial Port (USB)', + }, }; export const anotherPort: Port = { + id: anotherBoard.port!.id, address: anotherBoard.port!.address, + addressLabel: anotherBoard.port!.addressLabel, protocol: anotherBoard.port!.protocol, + protocolLabel: anotherBoard.port!.protocolLabel, }; export const anotherBoardConfig: BoardsConfig.Config = { selectedBoard: anotherBoard, diff --git a/arduino-ide-extension/src/test/node/serial-service-impl.test.ts b/arduino-ide-extension/src/test/node/serial-service-impl.test.ts index a4ddcbe43..141c240a3 100644 --- a/arduino-ide-extension/src/test/node/serial-service-impl.test.ts +++ b/arduino-ide-extension/src/test/node/serial-service-impl.test.ts @@ -86,7 +86,7 @@ describe('SerialServiceImpl', () => { context('when a disconnection is requested', () => { const sandbox = createSandbox(); - beforeEach(() => {}); + beforeEach(() => { }); afterEach(function () { sandbox.restore(); @@ -132,11 +132,11 @@ describe('SerialServiceImpl', () => { return { streamingOpen: () => { return { - on: (str: string, cb: any) => {}, + on: (str: string, cb: any) => { }, write: (chunk: any, cb: any) => { cb(); }, - cancel: () => {}, + cancel: () => { }, }; }, } as MonitorServiceClient; @@ -146,7 +146,7 @@ describe('SerialServiceImpl', () => { await subject.setSerialConfig({ board: { name: 'test' }, - port: { address: 'test', protocol: 'test' }, + port: { id: 'test|test', address: 'test', addressLabel: 'test', protocol: 'test', protocolLabel: 'test' }, }); }); From ef2be1c086880e2218291dde2aa770c4d548e28a Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Mon, 31 Jan 2022 16:38:38 +0100 Subject: [PATCH 17/40] Small code fix --- .../src/browser/contributions/board-selection.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/board-selection.ts b/arduino-ide-extension/src/browser/contributions/board-selection.ts index dc6824814..f8bf63aed 100644 --- a/arduino-ide-extension/src/browser/contributions/board-selection.ts +++ b/arduino-ide-extension/src/browser/contributions/board-selection.ts @@ -278,8 +278,7 @@ PID: ${PID}`; // First we show addresses with recognized boards connected, // then all the rest. - const sortedIDs = Object.keys(ports); - sortedIDs.sort((left: string, right: string): number => { + const sortedIDs = Object.keys(ports).sort((left: string, right: string): number => { const [, leftBoards] = ports[left]; const [, rightBoards] = ports[right]; return rightBoards.length - leftBoards.length; From a20899ff43d8cfe1ef908faeedb24e560891f887 Mon Sep 17 00:00:00 2001 From: Ben <57039667+ben-qnimble@users.noreply.github.com> Date: Tue, 1 Feb 2022 08:35:21 -0500 Subject: [PATCH 18/40] When a new port is connected and checking to connect to it because previously connected board matches the name / fqbn, also check that the protocol matches. (#792) --- .../src/browser/boards/boards-service-provider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts index 26e3729ea..190d5de3a 100644 --- a/arduino-ide-extension/src/browser/boards/boards-service-provider.ts +++ b/arduino-ide-extension/src/browser/boards/boards-service-provider.ts @@ -230,7 +230,8 @@ export class BoardsServiceProvider implements FrontendApplicationContribution { )) { if ( this.latestValidBoardsConfig.selectedBoard.fqbn === board.fqbn && - this.latestValidBoardsConfig.selectedBoard.name === board.name + this.latestValidBoardsConfig.selectedBoard.name === board.name && + this.latestValidBoardsConfig.selectedPort.protocol === board.port?.protocol ) { this.boardsConfig = { ...this.latestValidBoardsConfig, From 69ac1f4779589d0d21ce3d37c180b3393ad6156c Mon Sep 17 00:00:00 2001 From: Mark Sujew Date: Fri, 11 Feb 2022 10:57:44 +0100 Subject: [PATCH 19/40] Open all closed workspaces on startup (#780) --- .../src/browser/arduino-workspace-resolver.ts | 11 +-- .../theia/electron-main-application.ts | 95 +++++++++++++++++++ 2 files changed, 98 insertions(+), 8 deletions(-) diff --git a/arduino-ide-extension/src/browser/arduino-workspace-resolver.ts b/arduino-ide-extension/src/browser/arduino-workspace-resolver.ts index 8158808b4..547e44229 100644 --- a/arduino-ide-extension/src/browser/arduino-workspace-resolver.ts +++ b/arduino-ide-extension/src/browser/arduino-workspace-resolver.ts @@ -1,5 +1,4 @@ -import { toUnix } from 'upath'; -import URI from '@theia/core/lib/common/uri'; +import { URI } from '@theia/core/shared/vscode-uri'; import { isWindows } from '@theia/core/lib/common/os'; import { notEmpty } from '@theia/core/lib/common/objects'; import { MaybePromise } from '@theia/core/lib/common/types'; @@ -61,12 +60,8 @@ export class ArduinoWorkspaceRootResolver { // - https://github.com/eclipse-theia/theia/blob/8196e9dcf9c8de8ea0910efeb5334a974f426966/packages/workspace/src/browser/workspace-service.ts#L423 protected hashToUri(hash: string | undefined): string | undefined { if (hash && hash.length > 1 && hash.startsWith('#')) { - const path = hash.slice(1); // Trim the leading `#`. - return new URI( - toUnix(path.slice(isWindows && hash.startsWith('/') ? 1 : 0)) - ) - .withScheme('file') - .toString(); + const path = decodeURI(hash.slice(1)).replace(/\\/g, '/'); // Trim the leading `#`, decode the URI and replace Windows separators + return URI.file(path.slice(isWindows && hash.startsWith('/') ? 1 : 0)).toString(); } return undefined; } diff --git a/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts b/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts index e625a8288..1b7c58cae 100644 --- a/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts +++ b/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts @@ -8,22 +8,39 @@ import { import { fork } from 'child_process'; import { AddressInfo } from 'net'; import { join } from 'path'; +import * as fs from 'fs-extra'; import { initSplashScreen } from '../splash/splash-screen'; import { MaybePromise } from '@theia/core/lib/common/types'; import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token'; import { FrontendApplicationConfig } from '@theia/application-package/lib/application-props'; import { ElectronMainApplication as TheiaElectronMainApplication, + ElectronMainExecutionParams, TheiaBrowserWindowOptions, } from '@theia/core/lib/electron-main/electron-main-application'; import { SplashServiceImpl } from '../splash/splash-service-impl'; import { ipcMain } from '@theia/core/shared/electron'; +import { URI } from '@theia/core/shared/vscode-uri'; app.commandLine.appendSwitch('disable-http-cache'); +interface WorkspaceOptions { + file: string + x: number + y: number + width: number + height: number + isMaximized: boolean + isFullScreen: boolean + time: number +} + +const WORKSPACES = 'workspaces'; + @injectable() export class ElectronMainApplication extends TheiaElectronMainApplication { protected _windows: BrowserWindow[] = []; + protected startup = false; @inject(SplashServiceImpl) protected readonly splashService: SplashServiceImpl; @@ -36,6 +53,45 @@ export class ElectronMainApplication extends TheiaElectronMainApplication { return super.start(config); } + protected async launch(params: ElectronMainExecutionParams): Promise { + this.startup = true; + const workspaces: WorkspaceOptions[] | undefined = this.electronStore.get(WORKSPACES); + let useDefault = true; + if (workspaces && workspaces.length > 0) { + for (const workspace of workspaces) { + const file = workspace.file; + if (typeof file === 'string' && await fs.pathExists(file)) { + useDefault = false; + await this.openSketch(workspace); + } + } + } + this.startup = false; + if (useDefault) { + super.launch(params); + } + } + + protected async openSketch(workspace: WorkspaceOptions): Promise { + const options = await this.getLastWindowOptions(); + options.x = workspace.x; + options.y = workspace.y; + options.width = workspace.width; + options.height = workspace.height; + options.isMaximized = workspace.isMaximized; + options.isFullScreen = workspace.isFullScreen; + const [uri, electronWindow] = await Promise.all([this.createWindowUri(), this.createWindow(options)]); + electronWindow.loadURL(uri.withFragment(encodeURI(workspace.file)).toString(true)); + return electronWindow; + } + + protected avoidOverlap(options: TheiaBrowserWindowOptions): TheiaBrowserWindowOptions { + if (this.startup) { + return options; + } + return super.avoidOverlap(options); + } + protected getTitleBarStyle(): 'native' | 'custom' { return 'native'; } @@ -148,6 +204,7 @@ export class ElectronMainApplication extends TheiaElectronMainApplication { } } }); + this.attachClosedWorkspace(electronWindow); this.attachReadyToShow(electronWindow); this.attachSaveWindowState(electronWindow); this.attachGlobalShortcuts(electronWindow); @@ -218,6 +275,44 @@ export class ElectronMainApplication extends TheiaElectronMainApplication { } } + protected closedWorkspaces: WorkspaceOptions[] = []; + + protected attachClosedWorkspace(window: BrowserWindow): void { + // Since the `before-quit` event is only fired when closing the *last* window + // We need to keep track of recently closed windows/workspaces manually + window.on('close', () => { + const url = window.webContents.getURL(); + const workspace = URI.parse(url).fragment; + if (workspace) { + const workspaceUri = URI.file(workspace); + const bounds = window.getNormalBounds(); + this.closedWorkspaces.push({ + ...bounds, + isMaximized: window.isMaximized(), + isFullScreen: window.isFullScreen(), + file: workspaceUri.fsPath, + time: Date.now() + }) + } + }); + } + + protected onWillQuit(event: Electron.Event): void { + // Only add workspaces which were closed within the last second (1000 milliseconds) + const threshold = Date.now() - 1000; + const visited = new Set(); + const workspaces = this.closedWorkspaces.filter(e => { + if (e.time < threshold || visited.has(e.file)) { + return false; + } + visited.add(e.file); + return true; + }).sort((a, b) => a.file.localeCompare(b.file)); + this.electronStore.set(WORKSPACES, workspaces); + + super.onWillQuit(event); + } + get windows(): BrowserWindow[] { return this._windows.slice(); } From 112153fb965f63d952d126c8244cd3f84f0a1a1b Mon Sep 17 00:00:00 2001 From: Mark Sujew Date: Fri, 11 Feb 2022 15:25:35 +0100 Subject: [PATCH 20/40] Update Theia to 1.22.1 (#791) --- .github/workflows/build.yml | 8 +- .github/workflows/check-i18n-task.yml | 4 +- .github/workflows/i18n-nightly-push.yml | 4 +- .github/workflows/i18n-weekly-pull.yml | 4 +- .vscode/launch.json | 16 + BUILDING.md | 5 +- arduino-ide-extension/package.json | 33 +- .../browser/arduino-frontend-contribution.tsx | 2 +- .../src/browser/contributions/about.ts | 2 +- .../src/browser/contributions/add-file.ts | 2 +- .../browser/contributions/add-zip-library.ts | 2 +- .../browser/contributions/archive-sketch.ts | 2 +- .../browser/contributions/board-selection.ts | 2 +- .../src/browser/contributions/close.ts | 2 +- .../contributions/open-sketch-external.ts | 2 +- .../src/browser/contributions/open-sketch.ts | 2 +- .../src/browser/contributions/quit-app.ts | 2 +- .../browser/contributions/save-as-sketch.ts | 2 +- .../plotter/plotter-frontend-contribution.ts | 2 +- .../theia/debug/debug-session-manager.ts | 14 +- .../workspace/workspace-delete-handler.ts | 2 +- .../theia/workspace/workspace-service.ts | 5 +- .../sketchbook-widget-contribution.ts | 4 +- .../electron-window-service.ts | 2 +- .../theia/core/electron-main-menu-factory.ts | 9 +- .../theia/electron-main-application.ts | 10 +- browser-app/package.json | 34 +- docs/internal/Arm.md | 7 +- docs/internal/Ubuntu.md | 6 +- electron-app/package.json | 37 +- electron/build/template-package.json | 15 +- electron/packager/config.js | 4 +- electron/packager/index.js | 1 + electron/packager/package.json | 2 +- package.json | 8 +- yarn.lock | 1880 +++++------------ 36 files changed, 727 insertions(+), 1411 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 854666a9f..651d77e9a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,16 +33,16 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Install Node.js 12.x + - name: Install Node.js 14.x uses: actions/setup-node@v1 with: - node-version: '12.14.1' + node-version: '14.x' registry-url: 'https://registry.npmjs.org' - - name: Install Python 2.7 + - name: Install Python 3.x uses: actions/setup-python@v2 with: - python-version: '2.7' + python-version: '3.x' - name: Package shell: bash diff --git a/.github/workflows/check-i18n-task.yml b/.github/workflows/check-i18n-task.yml index 121a9a844..e8c01a8b6 100644 --- a/.github/workflows/check-i18n-task.yml +++ b/.github/workflows/check-i18n-task.yml @@ -25,10 +25,10 @@ jobs: - name: Checkout repository uses: actions/checkout@v2 - - name: Install Node.js 12.x + - name: Install Node.js 14.x uses: actions/setup-node@v2 with: - node-version: '12.14.1' + node-version: '14.x' registry-url: 'https://registry.npmjs.org' - name: Install dependencies diff --git a/.github/workflows/i18n-nightly-push.yml b/.github/workflows/i18n-nightly-push.yml index c62f16a7f..670cf3184 100644 --- a/.github/workflows/i18n-nightly-push.yml +++ b/.github/workflows/i18n-nightly-push.yml @@ -12,10 +12,10 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Install Node.js 12.x + - name: Install Node.js 14.x uses: actions/setup-node@v2 with: - node-version: '12.14.1' + node-version: '14.x' registry-url: 'https://registry.npmjs.org' - name: Install dependencies diff --git a/.github/workflows/i18n-weekly-pull.yml b/.github/workflows/i18n-weekly-pull.yml index 1a361febe..d6db2312c 100644 --- a/.github/workflows/i18n-weekly-pull.yml +++ b/.github/workflows/i18n-weekly-pull.yml @@ -12,10 +12,10 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Install Node.js 12.x + - name: Install Node.js 14.x uses: actions/setup-node@v2 with: - node-version: '12.14.1' + node-version: '14.x' registry-url: 'https://registry.npmjs.org' - name: Install dependencies diff --git a/.vscode/launch.json b/.vscode/launch.json index 5c336c081..d6ed25954 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,6 +37,13 @@ "internalConsoleOptions": "openOnSessionStart", "outputCapture": "std" }, + { + "type": "chrome", + "request": "attach", + "name": "Attach to Electron Frontend", + "port": 9222, + "webRoot": "${workspaceFolder}/electron-app" + }, { "type": "node", "request": "launch", @@ -104,5 +111,14 @@ "program": "${workspaceRoot}/electron/packager/index.js", "cwd": "${workspaceFolder}/electron/packager" } + ], + "compounds": [ + { + "name": "Launch Electron Backend & Frontend", + "configurations": [ + "App (Electron)", + "Attach to Electron Frontend" + ] + } ] } diff --git a/BUILDING.md b/BUILDING.md index a19d8ef78..a9e10f47e 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -42,6 +42,7 @@ The _frontend_ is running as an Electron renderer process and can invoke service If you’re familiar with TypeScript, the [Theia IDE](https://theia-ide.org/), and if you want to contribute to the project, you should be able to build the Arduino IDE locally. Please refer to the [Theia IDE prerequisites](https://github.com/theia-ide/theia/blob/master/doc/) documentation for the setup instructions. +> **Note**: Node.js 14 must be used instead of the version 12 recommended at the link above. Once you have all the tools installed, you can build the editor following these steps @@ -57,9 +58,7 @@ Once you have all the tools installed, you can build the editor following these 3. Rebuild the electron dependencies ```sh - cd electron-app - yarn theia rebuild:electron - cd .. + yarn rebuild:electron ``` 4. Start the application diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index 5730290f7..364148625 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -21,22 +21,23 @@ }, "dependencies": { "@grpc/grpc-js": "^1.3.7", - "@theia/application-package": "1.19.0", - "@theia/core": "1.19.0", - "@theia/editor": "1.19.0", - "@theia/editor-preview": "1.19.0", - "@theia/filesystem": "1.19.0", - "@theia/git": "1.19.0", - "@theia/keymaps": "1.19.0", - "@theia/markers": "1.19.0", - "@theia/monaco": "1.19.0", - "@theia/navigator": "1.19.0", - "@theia/outline-view": "1.19.0", - "@theia/output": "1.19.0", - "@theia/preferences": "1.19.0", - "@theia/search-in-workspace": "1.19.0", - "@theia/terminal": "1.19.0", - "@theia/workspace": "1.19.0", + "@theia/application-package": "1.22.1", + "@theia/core": "1.22.1", + "@theia/editor": "1.22.1", + "@theia/editor-preview": "1.22.1", + "@theia/electron": "1.22.1", + "@theia/filesystem": "1.22.1", + "@theia/git": "1.22.1", + "@theia/keymaps": "1.22.1", + "@theia/markers": "1.22.1", + "@theia/monaco": "1.22.1", + "@theia/navigator": "1.22.1", + "@theia/outline-view": "1.22.1", + "@theia/output": "1.22.1", + "@theia/preferences": "1.22.1", + "@theia/search-in-workspace": "1.22.1", + "@theia/terminal": "1.22.1", + "@theia/workspace": "1.22.1", "@tippyjs/react": "^4.2.5", "@types/atob": "^2.1.2", "@types/auth0-js": "^9.14.0", diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 5224b54f8..b493bd3bf 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -1,6 +1,6 @@ import { inject, injectable, postConstruct } from 'inversify'; import * as React from 'react'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { BoardsService, SketchesService, diff --git a/arduino-ide-extension/src/browser/contributions/about.ts b/arduino-ide-extension/src/browser/contributions/about.ts index 662781a00..3f93adba2 100644 --- a/arduino-ide-extension/src/browser/contributions/about.ts +++ b/arduino-ide-extension/src/browser/contributions/about.ts @@ -1,6 +1,6 @@ import { inject, injectable } from 'inversify'; import * as moment from 'moment'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { isOSX, isWindows } from '@theia/core/lib/common/os'; import { ClipboardService } from '@theia/core/lib/browser/clipboard-service'; import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider'; diff --git a/arduino-ide-extension/src/browser/contributions/add-file.ts b/arduino-ide-extension/src/browser/contributions/add-file.ts index d6155d927..94316a1f4 100644 --- a/arduino-ide-extension/src/browser/contributions/add-file.ts +++ b/arduino-ide-extension/src/browser/contributions/add-file.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { ArduinoMenus } from '../menu/arduino-menus'; import { SketchContribution, diff --git a/arduino-ide-extension/src/browser/contributions/add-zip-library.ts b/arduino-ide-extension/src/browser/contributions/add-zip-library.ts index 6b97c3ec2..a03d056f2 100644 --- a/arduino-ide-extension/src/browser/contributions/add-zip-library.ts +++ b/arduino-ide-extension/src/browser/contributions/add-zip-library.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import URI from '@theia/core/lib/common/uri'; import { ConfirmDialog } from '@theia/core/lib/browser/dialogs'; import { EnvVariablesServer } from '@theia/core/lib/common/env-variables'; diff --git a/arduino-ide-extension/src/browser/contributions/archive-sketch.ts b/arduino-ide-extension/src/browser/contributions/archive-sketch.ts index 315ad5156..2ab62dc22 100644 --- a/arduino-ide-extension/src/browser/contributions/archive-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/archive-sketch.ts @@ -1,5 +1,5 @@ import { injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import * as dateFormat from 'dateformat'; import URI from '@theia/core/lib/common/uri'; import { ArduinoMenus } from '../menu/arduino-menus'; diff --git a/arduino-ide-extension/src/browser/contributions/board-selection.ts b/arduino-ide-extension/src/browser/contributions/board-selection.ts index f8bf63aed..9dc085fbf 100644 --- a/arduino-ide-extension/src/browser/contributions/board-selection.ts +++ b/arduino-ide-extension/src/browser/contributions/board-selection.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { MenuModelRegistry } from '@theia/core/lib/common/menu'; import { DisposableCollection, diff --git a/arduino-ide-extension/src/browser/contributions/close.ts b/arduino-ide-extension/src/browser/contributions/close.ts index b134873f2..1b335fa82 100644 --- a/arduino-ide-extension/src/browser/contributions/close.ts +++ b/arduino-ide-extension/src/browser/contributions/close.ts @@ -1,6 +1,6 @@ import { inject, injectable } from 'inversify'; import { toArray } from '@phosphor/algorithm'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor'; import { EditorManager } from '@theia/editor/lib/browser/editor-manager'; import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell'; diff --git a/arduino-ide-extension/src/browser/contributions/open-sketch-external.ts b/arduino-ide-extension/src/browser/contributions/open-sketch-external.ts index 0f66a27ea..976902588 100644 --- a/arduino-ide-extension/src/browser/contributions/open-sketch-external.ts +++ b/arduino-ide-extension/src/browser/contributions/open-sketch-external.ts @@ -1,5 +1,5 @@ import { injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import URI from '@theia/core/lib/common/uri'; import { ArduinoMenus } from '../menu/arduino-menus'; import { diff --git a/arduino-ide-extension/src/browser/contributions/open-sketch.ts b/arduino-ide-extension/src/browser/contributions/open-sketch.ts index 6e80becc1..879ab144f 100644 --- a/arduino-ide-extension/src/browser/contributions/open-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/open-sketch.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { MaybePromise } from '@theia/core/lib/common/types'; import { Widget, ContextMenuRenderer } from '@theia/core/lib/browser'; import { diff --git a/arduino-ide-extension/src/browser/contributions/quit-app.ts b/arduino-ide-extension/src/browser/contributions/quit-app.ts index a37bad9a6..c0e784726 100644 --- a/arduino-ide-extension/src/browser/contributions/quit-app.ts +++ b/arduino-ide-extension/src/browser/contributions/quit-app.ts @@ -1,5 +1,5 @@ import { injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { isOSX } from '@theia/core/lib/common/os'; import { Contribution, diff --git a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts index fbf81f8af..0c265d0c2 100644 --- a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts @@ -1,5 +1,5 @@ import { injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import * as dateFormat from 'dateformat'; import { ArduinoMenus } from '../menu/arduino-menus'; import { diff --git a/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts b/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts index a7ca8b1de..f4e957063 100644 --- a/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts @@ -10,7 +10,7 @@ import { SerialModel } from '../serial-model'; import { ArduinoMenus } from '../../menu/arduino-menus'; import { Contribution } from '../../contributions/contribution'; import { Endpoint, FrontendApplication } from '@theia/core/lib/browser'; -import { ipcRenderer } from '@theia/core/shared/electron'; +import { ipcRenderer } from '@theia/electron/shared/electron'; import { SerialConfig } from '../../../common/protocol'; import { SerialConnectionManager } from '../serial-connection-manager'; import { SerialPlotter } from './protocol'; diff --git a/arduino-ide-extension/src/browser/theia/debug/debug-session-manager.ts b/arduino-ide-extension/src/browser/theia/debug/debug-session-manager.ts index 3bbde36f6..424e41622 100644 --- a/arduino-ide-extension/src/browser/theia/debug/debug-session-manager.ts +++ b/arduino-ide-extension/src/browser/theia/debug/debug-session-manager.ts @@ -62,9 +62,15 @@ export class DebugSessionManager extends TheiaDebugSessionManager { } ); } - // TODO: remove as https://github.com/eclipse-theia/theia/issues/10164 is fixed - async terminateSessions(): Promise { - await super.terminateSessions(); - this.destroy(this.currentSession?.id); + async terminateSession(session?: DebugSession): Promise { + if (!session) { + this.updateCurrentSession(this._currentSession); + session = this._currentSession; + } + // The cortex-debug extension does not respond to close requests + // So we simply terminate the debug session immediately + // Alternatively the `super.terminateSession` call will terminate it after 5 seconds without a response + await this.debug.terminateDebugSession(session!.id); + await super.terminateSession(session); } } diff --git a/arduino-ide-extension/src/browser/theia/workspace/workspace-delete-handler.ts b/arduino-ide-extension/src/browser/theia/workspace/workspace-delete-handler.ts index 0c4a157ef..7c88e8ba7 100644 --- a/arduino-ide-extension/src/browser/theia/workspace/workspace-delete-handler.ts +++ b/arduino-ide-extension/src/browser/theia/workspace/workspace-delete-handler.ts @@ -1,5 +1,5 @@ import { inject, injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import URI from '@theia/core/lib/common/uri'; import { WorkspaceDeleteHandler as TheiaWorkspaceDeleteHandler } from '@theia/workspace/lib/browser/workspace-delete-handler'; import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl'; diff --git a/arduino-ide-extension/src/browser/theia/workspace/workspace-service.ts b/arduino-ide-extension/src/browser/theia/workspace/workspace-service.ts index 691740a47..2ae44272b 100644 --- a/arduino-ide-extension/src/browser/theia/workspace/workspace-service.ts +++ b/arduino-ide-extension/src/browser/theia/workspace/workspace-service.ts @@ -18,6 +18,7 @@ import { ArduinoWorkspaceRootResolver } from '../../arduino-workspace-resolver'; import { BoardsServiceProvider } from '../../boards/boards-service-provider'; import { BoardsConfig } from '../../boards/boards-config'; import { nls } from '@theia/core/lib/common'; +import { URI as VSCodeUri } from '@theia/core/shared/vscode-uri'; @injectable() export class WorkspaceService extends TheiaWorkspaceService { @@ -67,7 +68,7 @@ export class WorkspaceService extends TheiaWorkspaceService { this.workspaceUri = (async () => { try { const hash = window.location.hash; - const [recentWorkspaces, recentSketches] = await Promise.all([ + const [recentWorkspacesPaths, recentSketches] = await Promise.all([ this.server.getRecentWorkspaces(), this.sketchService .getSketches({}) @@ -75,6 +76,8 @@ export class WorkspaceService extends TheiaWorkspaceService { SketchContainer.toArray(container).map((s) => s.uri) ), ]); + // On Dindows, `getRecentWorkspaces` returns only file paths, not URIs as expected by the `isValid` method. + const recentWorkspaces = recentWorkspacesPaths.map(e => VSCodeUri.file(e).toString()); const toOpen = await new ArduinoWorkspaceRootResolver({ isValid: this.isValid.bind(this), }).resolve({ hash, recentWorkspaces, recentSketches }); diff --git a/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-widget-contribution.ts b/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-widget-contribution.ts index 15e1a8e25..a60be2bfa 100644 --- a/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-widget-contribution.ts +++ b/arduino-ide-extension/src/browser/widgets/sketchbook/sketchbook-widget-contribution.ts @@ -1,4 +1,4 @@ -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { inject, injectable } from 'inversify'; import { CommandRegistry } from '@theia/core/lib/common/command'; import { MenuModelRegistry } from '@theia/core/lib/common/menu'; @@ -80,7 +80,7 @@ export class SketchbookWidgetContribution } onStart(): void { - this.shell.currentChanged.connect(() => + this.shell.onDidChangeCurrentWidget(() => this.onCurrentWidgetChangedHandler() ); diff --git a/arduino-ide-extension/src/electron-browser/electron-window-service.ts b/arduino-ide-extension/src/electron-browser/electron-window-service.ts index ee7587118..1011afd3c 100644 --- a/arduino-ide-extension/src/electron-browser/electron-window-service.ts +++ b/arduino-ide-extension/src/electron-browser/electron-window-service.ts @@ -1,5 +1,5 @@ import { inject, injectable, postConstruct } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { ConnectionStatus, diff --git a/arduino-ide-extension/src/electron-browser/theia/core/electron-main-menu-factory.ts b/arduino-ide-extension/src/electron-browser/theia/core/electron-main-menu-factory.ts index 370f3251f..e96cb4196 100644 --- a/arduino-ide-extension/src/electron-browser/theia/core/electron-main-menu-factory.ts +++ b/arduino-ide-extension/src/electron-browser/theia/core/electron-main-menu-factory.ts @@ -1,5 +1,5 @@ import { injectable } from 'inversify'; -import { remote } from 'electron'; +import * as remote from '@theia/core/electron-shared/@electron/remote'; import { isOSX } from '@theia/core/lib/common/os'; import { Keybinding } from '@theia/core/lib/common/keybinding'; import { @@ -15,7 +15,6 @@ import { ArduinoMenus, PlaceholderMenuNode, } from '../../../browser/menu/arduino-menus'; -import electron = require('@theia/core/shared/electron'); @injectable() export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory { @@ -35,9 +34,9 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory { await this.preferencesService.ready; const createdMenuBar = this.createElectronMenuBar(); if (isOSX) { - electron.remote.Menu.setApplicationMenu(createdMenuBar); + remote.Menu.setApplicationMenu(createdMenuBar); } else { - electron.remote.getCurrentWindow().setMenu(createdMenuBar); + remote.getCurrentWindow().setMenu(createdMenuBar); } } @@ -81,7 +80,7 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory { protected createOSXMenu(): Electron.MenuItemConstructorOptions { const { submenu } = super.createOSXMenu(); const label = 'Arduino IDE'; - if (!!submenu && !(submenu instanceof remote.Menu)) { + if (!!submenu && Array.isArray(submenu)) { const [, , /* about */ /* preferences */ ...rest] = submenu; const about = this.fillMenuTemplate( [], diff --git a/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts b/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts index 1b7c58cae..9a26d81fd 100644 --- a/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts +++ b/arduino-ide-extension/src/electron-main/theia/electron-main-application.ts @@ -1,10 +1,5 @@ import { inject, injectable } from 'inversify'; -import { - app, - BrowserWindow, - BrowserWindowConstructorOptions, - screen, -} from 'electron'; +import { app, BrowserWindow, BrowserWindowConstructorOptions, ipcMain, screen } from '@theia/core/electron-shared/electron'; import { fork } from 'child_process'; import { AddressInfo } from 'net'; import { join } from 'path'; @@ -19,8 +14,8 @@ import { TheiaBrowserWindowOptions, } from '@theia/core/lib/electron-main/electron-main-application'; import { SplashServiceImpl } from '../splash/splash-service-impl'; -import { ipcMain } from '@theia/core/shared/electron'; import { URI } from '@theia/core/shared/vscode-uri'; +import * as electronRemoteMain from '@theia/core/electron-shared/@electron/remote/main'; app.commandLine.appendSwitch('disable-http-cache'); @@ -209,6 +204,7 @@ export class ElectronMainApplication extends TheiaElectronMainApplication { this.attachSaveWindowState(electronWindow); this.attachGlobalShortcuts(electronWindow); this.restoreMaximizedState(electronWindow, options); + electronRemoteMain.enable(electronWindow.webContents); return electronWindow; } diff --git a/browser-app/package.json b/browser-app/package.json index ebc7354fe..731a07623 100644 --- a/browser-app/package.json +++ b/browser-app/package.json @@ -4,26 +4,26 @@ "version": "2.0.0-rc3", "license": "AGPL-3.0-or-later", "dependencies": { - "@theia/core": "1.19.0", - "@theia/debug": "1.19.0", - "@theia/editor": "1.19.0", - "@theia/editor-preview": "1.19.0", - "@theia/file-search": "1.19.0", - "@theia/filesystem": "1.19.0", - "@theia/keymaps": "1.19.0", - "@theia/messages": "1.19.0", - "@theia/monaco": "1.19.0", - "@theia/navigator": "1.19.0", - "@theia/plugin-ext": "1.19.0", - "@theia/plugin-ext-vscode": "1.19.0", - "@theia/preferences": "1.19.0", - "@theia/process": "1.19.0", - "@theia/terminal": "1.19.0", - "@theia/workspace": "1.19.0", + "@theia/core": "1.22.1", + "@theia/debug": "1.22.1", + "@theia/editor": "1.22.1", + "@theia/editor-preview": "1.22.1", + "@theia/file-search": "1.22.1", + "@theia/filesystem": "1.22.1", + "@theia/keymaps": "1.22.1", + "@theia/messages": "1.22.1", + "@theia/monaco": "1.22.1", + "@theia/navigator": "1.22.1", + "@theia/plugin-ext": "1.22.1", + "@theia/plugin-ext-vscode": "1.22.1", + "@theia/preferences": "1.22.1", + "@theia/process": "1.22.1", + "@theia/terminal": "1.22.1", + "@theia/workspace": "1.22.1", "arduino-ide-extension": "2.0.0-rc3" }, "devDependencies": { - "@theia/cli": "1.19.0" + "@theia/cli": "1.22.1" }, "scripts": { "prepare": "theia build --mode development", diff --git a/docs/internal/Arm.md b/docs/internal/Arm.md index dc912c016..8bcca9db4 100644 --- a/docs/internal/Arm.md +++ b/docs/internal/Arm.md @@ -2,19 +2,18 @@ Building the Pro IDE on Linux `armv7l` (aka `armhf`) and `aarch64` (aka `arm64`): -1. Install Node.js 12.x with [nvm](https://github.com/nvm-sh/nvm#install--update-script): +1. Install Node.js 14.x with [nvm](https://github.com/nvm-sh/nvm#install--update-script): ``` wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash ``` Restart your shell then: ``` - nvm install 12.14.1 - nvm use 12.14.1 + nvm install 14 + nvm use 14 ``` Verify: ``` node -v - v12.14.1 ``` 2. Install [Yarn](https://classic.yarnpkg.com/en/docs/install/#debian-stable): diff --git a/docs/internal/Ubuntu.md b/docs/internal/Ubuntu.md index d4ba25543..5c67b516a 100644 --- a/docs/internal/Ubuntu.md +++ b/docs/internal/Ubuntu.md @@ -18,9 +18,9 @@ sudo apt update \ build-essential \ && wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash \ && source ~/.bashrc \ -&& nvm install 12.14.1 \ -&& nvm use 12.14.1 \ -&& nvm alias default 12.14.1 \ +&& nvm install 14 \ +&& nvm use 14 \ +&& nvm alias default 14 \ && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list \ && sudo apt update && sudo apt install --no-install-recommends yarn \ diff --git a/electron-app/package.json b/electron-app/package.json index c154fe248..5cf039a8f 100644 --- a/electron-app/package.json +++ b/electron-app/package.json @@ -5,27 +5,28 @@ "license": "AGPL-3.0-or-later", "main": "src-gen/frontend/electron-main.js", "dependencies": { - "@theia/core": "1.19.0", - "@theia/debug": "1.19.0", - "@theia/editor": "1.19.0", - "@theia/editor-preview": "1.19.0", - "@theia/electron": "1.19.0", - "@theia/file-search": "1.19.0", - "@theia/filesystem": "1.19.0", - "@theia/keymaps": "1.19.0", - "@theia/messages": "1.19.0", - "@theia/monaco": "1.19.0", - "@theia/navigator": "1.19.0", - "@theia/plugin-ext": "1.19.0", - "@theia/plugin-ext-vscode": "1.19.0", - "@theia/preferences": "1.19.0", - "@theia/process": "1.19.0", - "@theia/terminal": "1.19.0", - "@theia/workspace": "1.19.0", + "@theia/core": "1.22.1", + "@theia/debug": "1.22.1", + "@theia/editor": "1.22.1", + "@theia/editor-preview": "1.22.1", + "@theia/electron": "1.22.1", + "@theia/file-search": "1.22.1", + "@theia/filesystem": "1.22.1", + "@theia/keymaps": "1.22.1", + "@theia/messages": "1.22.1", + "@theia/monaco": "1.22.1", + "@theia/navigator": "1.22.1", + "@theia/plugin-ext": "1.22.1", + "@theia/plugin-ext-vscode": "1.22.1", + "@theia/preferences": "1.22.1", + "@theia/process": "1.22.1", + "@theia/terminal": "1.22.1", + "@theia/workspace": "1.22.1", "arduino-ide-extension": "2.0.0-rc3" }, "devDependencies": { - "@theia/cli": "1.19.0" + "@theia/cli": "1.22.1", + "electron": "^15.3.5" }, "scripts": { "prepare": "theia build --mode development", diff --git a/electron/build/template-package.json b/electron/build/template-package.json index 274776b46..38bc38bc8 100644 --- a/electron/build/template-package.json +++ b/electron/build/template-package.json @@ -3,15 +3,17 @@ "author": "Arduino SA", "resolutions": { "**/fs-extra": "^4.0.3", - "electron-builder": "22.7.0" + "electron-builder": "22.10.5", + "find-git-exec": "0.0.4", + "dugite-extra": "0.1.15" }, "dependencies": { "node-log-rotate": "^0.1.5" }, "devDependencies": { - "@theia/cli": "1.19.0", + "@theia/cli": "1.22.1", "cross-env": "^7.0.2", - "electron-builder": "22.7.0", + "electron-builder": "22.10.5", "electron-notarize": "^0.3.0", "is-ci": "^2.0.0", "ncp": "^2.0.0", @@ -20,13 +22,14 @@ "scripts": { "build": "yarn download:plugins && theia build --mode development && yarn patch", "build:publish": "yarn download:plugins && theia build --mode production && yarn patch", + "rebuild": "yarn theia rebuild:electron", "package": "cross-env DEBUG=* && electron-builder --publish=never", "package:publish": "cross-env DEBUG=* && electron-builder --publish=always", "download:plugins": "theia download:plugins", "patch": "ncp ./patch/main.js ./src-gen/backend/main.js" }, "engines": { - "node": ">=12.14.1 <13" + "node": ">=14.0.0 <15" }, "repository": { "type": "git", @@ -51,6 +54,7 @@ "build": { "productName": "Arduino IDE", "asar": false, + "npmRebuild": false, "directories": { "buildResources": "resources" }, @@ -65,8 +69,7 @@ "!node_modules/@theia/**/lib/*browser/*", "node_modules/@theia/core/lib/browser/*", "!node_modules/@typefox/monaco-editor-core/*", - "!node_modules/oniguruma/*", - "!node_modules/onigasm/*" + "!node_modules/electron/**" ], "extraResources": [ { diff --git a/electron/packager/config.js b/electron/packager/config.js index 033186575..2bf92c362 100644 --- a/electron/packager/config.js +++ b/electron/packager/config.js @@ -72,9 +72,9 @@ function getVersion() { } if (!isRelease) { if (isNightly) { - version = `${version}-nightly.${timestamp()}`; + version = `${version}-nightly-${timestamp()}`; } else { - version = `${version}-snapshot.${currentCommitish()}`; + version = `${version}-snapshot-${currentCommitish()}`; } if (!semver.valid(version)) { throw new Error(`Invalid patched version: '${version}'.`); diff --git a/electron/packager/index.js b/electron/packager/index.js index 32a5295a2..70ddc014f 100644 --- a/electron/packager/index.js +++ b/electron/packager/index.js @@ -178,6 +178,7 @@ ${fs.readFileSync(path('..', 'build', 'package.json')).toString()} //-------------------------------------------------------------------------------------------+ exec(`yarn --network-timeout 1000000 --cwd ${path('..', 'build')}`, 'Installing dependencies'); exec(`yarn --network-timeout 1000000 --cwd ${path('..', 'build')} build${isElectronPublish ? ':publish' : ''}`, `Building the ${productName} application`); + exec(`yarn --network-timeout 1000000 --cwd ${path('..', 'build')} rebuild`, 'Rebuild native dependencies'); //------------------------------------------------------------------------------+ // Create a throw away dotenv file which we use to feed the builder with input. | diff --git a/electron/packager/package.json b/electron/packager/package.json index 4caf2a5a8..6ffbeb1ef 100644 --- a/electron/packager/package.json +++ b/electron/packager/package.json @@ -31,7 +31,7 @@ "yargs": "^12.0.5" }, "engines": { - "node": ">=12.14.1 <13" + "node": ">=14.0.0 <15" }, "mocha": { "reporter": "spec", diff --git a/package.json b/package.json index 467053316..0f1a760df 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,10 @@ "license": "AGPL-3.0-or-later", "private": true, "engines": { - "node": ">=12.14.1 <13" + "node": ">=14.0.0 <15" }, "devDependencies": { - "@theia/cli": "1.19.0", + "@theia/cli": "1.22.1", "@types/sinon": "^2.3.5", "@types/jsdom": "^11.0.4", "@typescript-eslint/eslint-plugin": "^4.27.0", @@ -33,6 +33,10 @@ "typescript": "^3.9.2", "jsdom": "^11.5.1" }, + "resolutions": { + "find-git-exec": "0.0.4", + "dugite-extra": "0.1.15" + }, "scripts": { "prepare": "cross-env THEIA_ELECTRON_SKIP_REPLACE_FFMPEG=1 lerna run prepare && yarn download:plugins", "cleanup": "npx rimraf ./**/node_modules && rm -rf ./node_modules ./.browser_modules ./arduino-ide-extension/build ./arduino-ide-extension/downloads ./arduino-ide-extension/Examples ./arduino-ide-extension/lib ./browser-app/lib ./browser-app/src-gen ./browser-app/gen-webpack.config.js ./electron-app/lib ./electron-app/src-gen ./electron-app/gen-webpack.config.js", diff --git a/yarn.lock b/yarn.lock index e8323cd7b..ad3488736 100644 --- a/yarn.lock +++ b/yarn.lock @@ -878,10 +878,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz#9283c9ce5b289a3c4f61c12757469e59377f81f3" integrity sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA== -"@electron/get@^1.0.1": - version "1.12.4" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab" - integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg== +"@electron/get@^1.12.4": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.0.tgz#95c6bcaff4f9a505ea46792424f451efea89228c" + integrity sha512-+SjZhRuRo+STTO1Fdhzqnv9D2ZhjxXP6egsJ9kiO8dtP68cDx7dFCwWi64dlMQV7sWcfW1OYCW4wviEBzmRsfQ== dependencies: debug "^4.1.1" env-paths "^2.2.0" @@ -894,10 +894,10 @@ global-agent "^2.0.2" global-tunnel-ng "^2.7.1" -"@electron/get@^1.12.4": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.0.tgz#95c6bcaff4f9a505ea46792424f451efea89228c" - integrity sha512-+SjZhRuRo+STTO1Fdhzqnv9D2ZhjxXP6egsJ9kiO8dtP68cDx7dFCwWi64dlMQV7sWcfW1OYCW4wviEBzmRsfQ== +"@electron/get@^1.13.0": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368" + integrity sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA== dependencies: debug "^4.1.1" env-paths "^2.2.0" @@ -907,9 +907,14 @@ semver "^6.2.0" sumchecker "^3.0.1" optionalDependencies: - global-agent "^2.0.2" + global-agent "^3.0.0" global-tunnel-ng "^2.7.1" +"@electron/remote@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.4.tgz#c3dae436aed79d1b8adcefc5a4963c06750ad5d8" + integrity sha512-8m2P/d2RH986PmMW5lKygbPEjEYJ7RgCe37Y8DQ1wujKMH6VjmLIB+Y+DP2SA611svCZc58TRSd8FraGvcfGZw== + "@emotion/cache@^10.0.27", "@emotion/cache@^10.0.9": version "10.0.29" resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" @@ -2210,28 +2215,31 @@ dependencies: defer-to-connect "^1.0.1" -"@theia/application-manager@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/application-manager/-/application-manager-1.19.0.tgz#e608e55e1bc5252b185e6f8917ea274de2a8dc7a" - integrity sha512-h4PspeMtDyHnpz3qELTKwUeWTFmpXe4OzDmET6u6NgXh93ba94gnIh0OZg7xjDD/3vrJLz1yQhVc263FioxBjw== +"@theia/application-manager@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/application-manager/-/application-manager-1.22.1.tgz#3acc0ec661ffeae9b4c1a794b1af711791ebdca3" + integrity sha512-h+3txYDqizTNWFfz6g8H9S5r1XLqJG+r3nM8pXHr2881oL+MXGpNAWk6LAy9SOKLxsX7zQRik57dPJCo6mzS8A== dependencies: "@babel/core" "^7.10.0" "@babel/plugin-transform-classes" "^7.10.0" "@babel/plugin-transform-runtime" "^7.10.0" "@babel/preset-env" "^7.10.0" - "@theia/application-package" "1.19.0" - "@theia/compression-webpack-plugin" "^3.0.0" + "@theia/application-package" "1.22.1" + "@theia/ffmpeg" "1.22.1" "@types/fs-extra" "^4.0.2" + "@types/semver" "^7.3.8" babel-loader "^8.2.2" buffer "^6.0.3" circular-dependency-plugin "^5.2.2" + compression-webpack-plugin "^9.0.0" copy-webpack-plugin "^8.1.1" css-loader "^6.2.0" - electron-rebuild "^1.8.6" - font-awesome-webpack "0.0.5-beta.2" + electron-rebuild "^1.11.0" fs-extra "^4.0.2" ignore-loader "^0.1.2" less "^3.0.3" + node-abi "*" + semver "^7.3.5" setimmediate "^1.0.5" source-map-loader "^2.0.1" source-map-support "^0.5.19" @@ -2242,10 +2250,10 @@ worker-loader "^3.0.8" yargs "^15.3.1" -"@theia/application-package@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/application-package/-/application-package-1.19.0.tgz#a6045bec3ebcc7acb80dbfbb644c7fd429799aeb" - integrity sha512-+WToWAofmvFafuY6kmsNAKz1IRwWwurHmj4U7JYpJ2jgey3H7lcO6qUMd8ZfWt3wK9ckPqlnuasuI7nHTZgcrA== +"@theia/application-package@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/application-package/-/application-package-1.22.1.tgz#f6fc3ca8bb7505b47c16b6924d38e64f79e01952" + integrity sha512-nJhU5W3vuXP9s5iQuwjT0OZ7uV+2H/Yrga7rFk1QHSDrVhHHukGluYlXxADRhBDxVaXUlcgbUspTtmBY40oAWw== dependencies: "@types/fs-extra" "^4.0.2" "@types/request" "^2.0.3" @@ -2259,36 +2267,37 @@ semver "^5.4.1" write-json-file "^2.2.0" -"@theia/bulk-edit@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/bulk-edit/-/bulk-edit-1.19.0.tgz#f822e8db865d745eca027ada0e98739250bf88de" - integrity sha512-acwWHfIYccMy8KAVXV1Pmrk+CJCzdJ878iqJy9W3f+lH8UY8IKpAvxobRIiMVywCS+cxiPE+IlJtH4I2Qhm1rg== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/workspace" "1.19.0" - -"@theia/callhierarchy@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/callhierarchy/-/callhierarchy-1.19.0.tgz#24f7bd8b3abdb55ff5c120b7200235b099b96c11" - integrity sha512-xRjTWobnx/RThneL1E7wx+mvAfjroFaofdpDpgaP8f1+CtkeDMtPKK0Q5eCzkXPt7b4nM3R8xTboxOQ0VJWYQA== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/monaco" "1.19.0" +"@theia/bulk-edit@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/bulk-edit/-/bulk-edit-1.22.1.tgz#6b2c3dd4ca41b1d75cac0a7e51afe7f3899b0636" + integrity sha512-VQ120BYssHbYe1ilp7wh07Iy9vIk1U1dXecJmuarEWbHUnAMvWQXB+1z88T+jt/CiZvMzd4nvoimIyPfVBvKaw== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/workspace" "1.22.1" + +"@theia/callhierarchy@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/callhierarchy/-/callhierarchy-1.22.1.tgz#dad24e699bd57b6f98c78050cdd1c096643a57ec" + integrity sha512-gLeXGgkBblj/3T8FGaM3mMr1PnbEhSqSkCyNWbXyxUzntISFfKu08K9aSexFWn7t99ox6VF9E/wRbd8VUNdiBg== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/monaco" "1.22.1" ts-md5 "^1.2.2" -"@theia/cli@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/cli/-/cli-1.19.0.tgz#d9316b5e294ad5e7c4f66fd6d44efd9419d60955" - integrity sha512-qMpI4cjVWzYbStN/+9wxyWCimKCVmrP+uSykRqlRFnRJcsLQC1om8ED98//9BgwYW5y3zSwB7rmBd/S0Io8tsQ== +"@theia/cli@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/cli/-/cli-1.22.1.tgz#e3f2d1ffcfe29f3bcb897074e72816d23530466b" + integrity sha512-JfXAFgMt7EZ5njoXjD38ISIvWKyWCyZMhEOC2kMQGbirPWJcFZHPOK5hhhWWH7/V0QOsLygluZSSNN/1ad+5XA== dependencies: - "@theia/application-manager" "1.19.0" - "@theia/application-package" "1.19.0" - "@theia/localization-manager" "1.19.0" - "@theia/ovsx-client" "1.19.0" + "@theia/application-manager" "1.22.1" + "@theia/application-package" "1.22.1" + "@theia/ffmpeg" "1.22.1" + "@theia/localization-manager" "1.22.1" + "@theia/ovsx-client" "1.22.1" "@types/chai" "^4.2.7" "@types/mkdirp" "^0.5.2" "@types/mocha" "^5.2.7" @@ -2297,42 +2306,31 @@ "@types/requestretry" "^1.12.3" "@types/tar" "^4.0.3" chai "^4.2.0" - colors "^1.4.0" + chalk "4.0.0" decompress "^4.2.1" https-proxy-agent "^5.0.0" mocha "^7.0.0" - node-fetch "^2.6.0" + node-fetch "^2.6.7" proxy-from-env "^1.1.0" puppeteer "^2.0.0" puppeteer-to-istanbul "^1.2.2" temp "^0.9.1" + unzipper "^0.9.11" yargs "^15.3.1" -"@theia/compression-webpack-plugin@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@theia/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz#3d1b932327caf33b218fd5d3d1a64a5dbee4324a" - integrity sha512-s9s8cZGisG5p+RsznZkhu4WKsgawpcxPX2GacQPok+SAuQHpORGBpAHxHOIOIsXMpJkheVmeBEpB0LfSzoV5bQ== - dependencies: - cacache "^11.2.0" - find-cache-dir "^3.0.0" - neo-async "^2.5.0" - schema-utils "^1.0.0" - serialize-javascript "^1.4.0" - webpack-sources "^1.0.1" - -"@theia/console@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/console/-/console-1.19.0.tgz#79a594b68cb525304cfd11a28d3654d61c2c89d3" - integrity sha512-Ze/qqH/bekVEB0QLI10tBxQ4NGMwQvuUW7OYZTuIwMM7iUSY/krgMe+1WJlh9802hSNPNZiOhMtnvBqw8kCNtg== +"@theia/console@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/console/-/console-1.22.1.tgz#4e7b3c78e815202139b3dd42f43c2383ebaad005" + integrity sha512-oJ5VP5pvgU2kz4PadFT/iYG9gOU10bAPEiGXixvcLZznAhozTrQwf0iL2BUsZVkW++HNY/gsrgn+p6W43ZC2tQ== dependencies: - "@theia/core" "1.19.0" - "@theia/monaco" "1.19.0" + "@theia/core" "1.22.1" + "@theia/monaco" "1.22.1" anser "^2.0.1" -"@theia/core@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/core/-/core-1.19.0.tgz#b198f7eabd4e751cf1d20f8bfcc57ef2e8857b52" - integrity sha512-4o90p0D+GYhFr8yN8oiyr1Ak6bwoEKxGJxRC5xiQiNR6ZIOfCxMOEWiQntGq5jB+1VO0TYdImyGRzgvJX+/Hig== +"@theia/core@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/core/-/core-1.22.1.tgz#b5af739a46de49b56fb18d1bb4ebd92522ba4c3b" + integrity sha512-fAVGz4ktV8UjDS6vwLqAR2bAjVLfy67DPj9hNK5c16q2Osw0GD+dvAf71gny2dDZHGAusfirA7ePXCgQE7lVlw== dependencies: "@babel/runtime" "^7.10.0" "@phosphor/algorithm" "1" @@ -2346,7 +2344,7 @@ "@phosphor/virtualdom" "1" "@phosphor/widgets" "1" "@primer/octicons-react" "^9.0.0" - "@theia/application-package" "1.19.0" + "@theia/application-package" "1.22.1" "@types/body-parser" "^1.16.4" "@types/cookie" "^0.3.3" "@types/dompurify" "^2.2.2" @@ -2354,6 +2352,7 @@ "@types/fs-extra" "^4.0.2" "@types/lodash.debounce" "4.0.3" "@types/lodash.throttle" "^4.1.3" + "@types/markdown-it" "^12.2.3" "@types/react" "^16.8.0" "@types/react-dom" "^16.8.0" "@types/react-virtualized" "^9.18.3" @@ -2361,7 +2360,7 @@ "@types/safer-buffer" "^2.1.0" "@types/ws" "^5.1.2" "@types/yargs" "^15" - "@vscode/codicons" "^0.0.21" + "@vscode/codicons" "*" ajv "^6.5.3" body-parser "^1.17.2" cookie "^0.4.0" @@ -2379,6 +2378,7 @@ keytar "7.2.0" lodash.debounce "^4.0.8" lodash.throttle "^4.1.1" + markdown-it "^12.3.2" nsfw "^2.1.2" p-debounce "^2.1.0" perfect-scrollbar "^1.3.0" @@ -2392,31 +2392,30 @@ safer-buffer "^2.1.2" uuid "^8.3.2" vscode-languageserver-protocol "~3.15.3" - vscode-languageserver-types "^3.15.1" vscode-uri "^2.1.1" vscode-ws-jsonrpc "^0.2.0" ws "^7.1.2" yargs "^15.3.1" -"@theia/debug@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/debug/-/debug-1.19.0.tgz#e4d6cb67666dfea18b9b0a278d05fc0e62f47f5a" - integrity sha512-Bcv6JEB8Fmt9ZkBVPOcpbN6iP1WL7pXsXig+4DqsENIHFJucITks0579GU87cd6WveIm37sjmcOdEMPeNxEKWg== - dependencies: - "@theia/console" "1.19.0" - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/markers" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/output" "1.19.0" - "@theia/preferences" "1.19.0" - "@theia/process" "1.19.0" - "@theia/task" "1.19.0" - "@theia/terminal" "1.19.0" - "@theia/userstorage" "1.19.0" - "@theia/variable-resolver" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/debug@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/debug/-/debug-1.22.1.tgz#1c97fb6845e615f9330fdeeb8ffe593199039be4" + integrity sha512-nYDQkaVnvJYNMv/1MvSmdH6asolDQRDyePIlRdsV2rFpAssj3p9H/YBkhEmxoxemUBWVodV73I4MXWS4guZokQ== + dependencies: + "@theia/console" "1.22.1" + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/markers" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/output" "1.22.1" + "@theia/preferences" "1.22.1" + "@theia/process" "1.22.1" + "@theia/task" "1.22.1" + "@theia/terminal" "1.22.1" + "@theia/userstorage" "1.22.1" + "@theia/variable-resolver" "1.22.1" + "@theia/workspace" "1.22.1" jsonc-parser "^2.2.0" mkdirp "^0.5.0" p-debounce "^2.1.0" @@ -2425,58 +2424,62 @@ unzip-stream "^0.3.0" vscode-debugprotocol "^1.32.0" -"@theia/editor-preview@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/editor-preview/-/editor-preview-1.19.0.tgz#3d1db40b55569e61d6b4dd30aff9a800758eada1" - integrity sha512-/9XKYhp+bB1F99lJfwTxAUeNwHns8kKLlQCpPwtkE2K9yS10vNqM3wL6mKL7sMgwI6a81gWW1fqI9uI562idow== +"@theia/editor-preview@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/editor-preview/-/editor-preview-1.22.1.tgz#1aaa299321275de48fc4fa8a3b9f82ecfc6a9036" + integrity sha512-fVOCZeRs3tHt89hlsdAwIQ89kY3TlAaYBlGET1LZGFEubW8qDuvLo/RWHhppTC3+hXbraTnnoJpimCSHpITd0A== dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/navigator" "1.19.0" + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/navigator" "1.22.1" -"@theia/editor@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/editor/-/editor-1.19.0.tgz#66a1699ca78cc65a7a5527f6dbcd280d833f5c42" - integrity sha512-7CUjp3lUg/0vtZlvikWvhKTWl4ys8p9WcvH/rcUDuvcJ85IYv+Sz2rwQUHuN8/XPIsHnMDZGhNkX0u/4lznlLw== +"@theia/editor@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/editor/-/editor-1.22.1.tgz#15027a18a3a2bc068783d539d2afa3827514aca0" + integrity sha512-ltDIdfrywKKu5mbbm3g7vN4ZpGVq/kimTKfvpjja6gcBsZ0RcASjdzEth/v8ZIVovp/UbSUFdT2+7i76iYbSFA== dependencies: - "@theia/core" "1.19.0" - "@theia/variable-resolver" "1.19.0" + "@theia/core" "1.22.1" + "@theia/variable-resolver" "1.22.1" "@types/base64-arraybuffer" "0.1.0" base64-arraybuffer "^0.1.5" -"@theia/electron@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/electron/-/electron-1.19.0.tgz#82a667365246d7dc714380e98e64f45781bf9d72" - integrity sha512-D/fYYuCMWZIdWfocU3kx+968jB6Epb/3aKZKmia4mheu4iXeQ0ANIHO8DM0XNWYy7IZGqh7GlGONgHmjWjR9WQ== +"@theia/electron@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/electron/-/electron-1.22.1.tgz#3e1750a0d6d8213d5daf14d91604e23d07f4d722" + integrity sha512-SLSptp9hyTxI0PWSDiufxuxgIO96Ng3A1q67uaQKCOdeFcN76OlnT5uM47EhVZm9QUfLceX7PC2NsrKjiE3uOw== dependencies: - "@electron/get" "^1.12.4" - electron "^9.0.2" - electron-store "^5.1.1" + "@electron/remote" "^2.0.1" + electron-store "^8.0.0" fix-path "^3.0.0" - native-keymap "^2.1.2" - node-gyp "^7.0.0" + native-keymap "^2.2.1" + +"@theia/ffmpeg@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/ffmpeg/-/ffmpeg-1.22.1.tgz#87cbe5c2eb6e377fd31ae824f66a270380addddb" + integrity sha512-APoyq533evMBP1hFK2g6WbX3c86rr/UI02hgvOkRj/z+N3jRlPXrA+peAUmXbayweauHU9kX/Bf/nwHdIWw+WA== + dependencies: + "@electron/get" "^1.12.4" unzipper "^0.9.11" - yargs "^15.3.1" -"@theia/file-search@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/file-search/-/file-search-1.19.0.tgz#f9f7f8c3b378c83d269d1ce1c86aabc2edd4e87b" - integrity sha512-YtiTLlh8EV5qGkj8bif6PiFkF/gaElSPSS2u+IeXCJl6+NE0aE3WZu51VE1GeKW8eZHFwYj32OsC7bqcOl4b+g== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/process" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/file-search@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/file-search/-/file-search-1.22.1.tgz#59371529997dba05409b4f5f2fc9e68b644a5b1a" + integrity sha512-3bLifb26Hw/MjiZvtJ5ymV29p+JzVH+Q5sT8zj58p6nzKshkMayF4UN5NMBkrhwagj+HaOZiN7p8TwF8q/Yxmw== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/process" "1.22.1" + "@theia/workspace" "1.22.1" vscode-ripgrep "^1.2.4" -"@theia/filesystem@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/filesystem/-/filesystem-1.19.0.tgz#1abddbcca544801b3194fe04947d23d60c4b72e5" - integrity sha512-ETGWpg+jOTIeWeUTS7ve8bQxE1YoI9wDDPomaBzZtdv+2veSfqAEyau5hx9ZabrvdCflxFXGom/fOKd1mchZUw== +"@theia/filesystem@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/filesystem/-/filesystem-1.22.1.tgz#d49f8bb74359aea2a608c4ecb5ab17ed7e03f711" + integrity sha512-108Ldmmcsg+2pFpJzuxloOVAMgrbX8mUPnRTnzAFaLjYgK/wfsGnmFmDNbvWkREQlsKV/4QDcfsfPsNh9Mh4Sw== dependencies: - "@theia/core" "1.19.0" + "@theia/core" "1.22.1" "@types/body-parser" "^1.17.0" "@types/multer" "^1.4.7" "@types/rimraf" "^2.0.2" @@ -2494,19 +2497,19 @@ uuid "^8.0.0" vscode-languageserver-textdocument "^1.0.1" -"@theia/git@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/git/-/git-1.19.0.tgz#48ad2ad1d28fdcb63ad7366ef509d402e0420101" - integrity sha512-cPFJGlKrkv6nz8+AhVrO6fpvQl+PmWfx4lDvYE1OAzuCaCnifGqqF8oaBcIL43kBIMnMJCSRVeJPdk2kAURrIQ== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/scm" "1.19.0" - "@theia/scm-extra" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/git@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/git/-/git-1.22.1.tgz#902ff74e50d077301e48978c8ba553faa70a5148" + integrity sha512-7H2y6X3qA7Zkqez2pWJX01BsYd0gls8ag979i7xwrAjuPV03UDNfFa+m1/89Bq2A3bgM64vJzifYeSz5cY7zBw== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/scm" "1.22.1" + "@theia/scm-extra" "1.22.1" + "@theia/workspace" "1.22.1" "@types/diff" "^3.2.2" "@types/p-queue" "^2.3.1" diff "^3.4.0" @@ -2518,23 +2521,22 @@ p-queue "^2.4.2" ts-md5 "^1.2.2" -"@theia/keymaps@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/keymaps/-/keymaps-1.19.0.tgz#f449cadb8fa8bc8ed110a3a0b38cd6a0fb351ada" - integrity sha512-1o+t4kq3VKoKXmGUTdBOpMZxsKnAf9gfXJPyFeow2Qjsl+kdDsBurL8If4LH1PRYi6C+ATkyo7YycZ4/60BsuQ== +"@theia/keymaps@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/keymaps/-/keymaps-1.22.1.tgz#0eafe7118832e4ca4f82dfc2c7c4eb51e554c448" + integrity sha512-Yw6LNAFyBGqV6ZZkrf4lme64x8EMAWGsCBKS5yBpU8X9FrPj0bCCLFifwVbwOyiX6b0v+LhLHY30EuIaJcIWkg== dependencies: - "@theia/core" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/userstorage" "1.19.0" - "@theia/workspace" "1.19.0" + "@theia/core" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/userstorage" "1.22.1" + "@theia/workspace" "1.22.1" "@types/lodash.debounce" "4.0.3" - ajv "^6.5.3" jsonc-parser "^2.2.0" -"@theia/localization-manager@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/localization-manager/-/localization-manager-1.19.0.tgz#6b6eab185c032b376f72c0ddc2a07e6a51ebd4ea" - integrity sha512-bzVZNraNU181CyRI7EVKbkFSM7Q/gZ79avXoZISTWNQSZBdU7mHJiSDDZIIl9qzJdjo5fxtml5oUI98TRw0lnA== +"@theia/localization-manager@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/localization-manager/-/localization-manager-1.22.1.tgz#1e47daaf06ecc780488395230bad655aa59379c9" + integrity sha512-EHwHGCNIfEEoAhU285crzBDZe56LRiXIrZyPr3vHfV9sI88ZGqiIcQYpBS7tIzQdc+NMBwoQyfk/BWM4xllXcg== dependencies: "@types/fs-extra" "^4.0.2" deepmerge "^4.2.2" @@ -2542,23 +2544,22 @@ glob "^7.2.0" typescript "^4.4.3" -"@theia/markers@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/markers/-/markers-1.19.0.tgz#5926256dbc6a3ca1e5f3587ba87ebf747e18f8f3" - integrity sha512-kvjPL8llku578ChNB60YtL1dnaqRU74PDOInnhZYvqo8M1TQFbqlgXco9VujZacrZCi3nhtWshJxf0td3hKeQg== +"@theia/markers@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/markers/-/markers-1.22.1.tgz#fe423c2e872a93e4be7b1111dc27474b418e8fc9" + integrity sha512-0obkcawh4Xz5Vr31E4RZVdJ0yffrDd1FaMT/Eo+GYVKRscBjTV7xhJ97+3mr8rDGW7w+wFqYnWk8K1n8g5y9sg== dependencies: - "@theia/core" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/workspace" "1.19.0" + "@theia/core" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/workspace" "1.22.1" -"@theia/messages@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/messages/-/messages-1.19.0.tgz#f0e9f9b8e4567f281e00982e925506a1948db494" - integrity sha512-ancIsyoR6FhqL1AzWwBYTzINUzReZ1pANaG6S3sDGaP8qWeFVXReRAM7qSCkSUiFkknTuCqfQ8RLSSRg+8VXpA== +"@theia/messages@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/messages/-/messages-1.22.1.tgz#3fae69b12240249287578cc66cd4f0e2878bb84a" + integrity sha512-Yio28WemJIaNraWcHKQVAkjmCYm4xr/a5m2aDU+J9i4W7bAlqZH5hOXgIIWTMjjfnKMJ9SLkngPbCXl0/3TGvg== dependencies: - "@theia/core" "1.19.0" - markdown-it "^8.4.0" + "@theia/core" "1.22.1" react-perfect-scrollbar "^1.5.3" ts-md5 "^1.2.2" @@ -2567,116 +2568,108 @@ resolved "https://registry.yarnpkg.com/@theia/monaco-editor-core/-/monaco-editor-core-0.23.0.tgz#7a1cbb7a857a509ce8e75c9965abea752bd76e80" integrity sha512-WyrotTd6ZfeXAX4icgFALTzlqE356tAQ5nRuwa2E0Qdp2YIO9GDcw5G2l2NJ8INO2ygujbE5pEdD5kJM5N4TOQ== -"@theia/monaco@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/monaco/-/monaco-1.19.0.tgz#ce4c2db38763201ef3c5d1e4c6b58796dd1e42d6" - integrity sha512-1k4rBQn7TA+v0TEsnmTMgGHfvSWlXrDbrxh5Iv9JsfgGYNaofKVyUD/v8ZVSrb4kqybhabHVhIBZe6UWzLDBpw== +"@theia/monaco@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/monaco/-/monaco-1.22.1.tgz#b9e588dcd5671d8a0a982b2b2147a433902c89d7" + integrity sha512-1JyqViYDcAKmAOBb8ZuvZ0cGsucO+LnmXnfn6+zXLvxk81mZ9LUPPJ7OzfUKdyWOEWDWF7Q6H0ygTSJKPec6PA== dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/markers" "1.19.0" + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/markers" "1.22.1" "@theia/monaco-editor-core" "0.23.0" - "@theia/outline-view" "1.19.0" - "@theia/workspace" "1.19.0" + "@theia/outline-view" "1.22.1" + "@theia/workspace" "1.22.1" fast-plist "^0.1.2" idb "^4.0.5" jsonc-parser "^2.2.0" onigasm "^2.2.0" vscode-textmate "^4.4.0" -"@theia/navigator@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/navigator/-/navigator-1.19.0.tgz#0541a032297840d9f74c348d9879a8d8e3c4fcfb" - integrity sha512-zZOI6+qrluodmsW96y7LWTWlWLGJPILw05+oTTJv4alIBxl+geKA8J7HH3ibVWXX6hK2FNe25UohzTQ7Uqwjbg== +"@theia/navigator@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/navigator/-/navigator-1.22.1.tgz#d715776e17de6bd7d0a28acadf4f04fcc8155c40" + integrity sha512-uv9wA2pQf4GT+4CbzpH75MUHW0Zub0x9ICzS3xLafmUCXkcF38rvG1u1x/qz4ZHJcPUmsZhfLSrml7cZoclOVg== dependencies: - "@theia/core" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/workspace" "1.19.0" + "@theia/core" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/workspace" "1.22.1" minimatch "^3.0.4" -"@theia/node-pty@0.9.0-theia.6": - version "0.9.0-theia.6" - resolved "https://registry.yarnpkg.com/@theia/node-pty/-/node-pty-0.9.0-theia.6.tgz#b34710419a0b4917cc97e6a7f4d1b5535cae03ab" - integrity sha512-TvzoyV1dXWIldBldc7emPNqj9Iy8hWmlNZt/kV6m4bW1NyQrG2/P2MGOy8Ei85IA6G8GVcfZms8TwNiqscC0TA== +"@theia/outline-view@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/outline-view/-/outline-view-1.22.1.tgz#015b42359ced414cb21f372cddf413d4c9b488f9" + integrity sha512-xk2cM/F62iFHnEgntihDlirrdpKnL4oyzdcdxoTDn7oND+oY0GDkV+tTxf70Ox4MPP7iE7UwUv2GrzuSNhLoVQ== dependencies: - nan "^2.14.0" - -"@theia/outline-view@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/outline-view/-/outline-view-1.19.0.tgz#6fc34a3fd7ec73586405208a203ad25a93d9ac4f" - integrity sha512-mUH1hjr/n8P7JcofTBtsx2CCpDHA9dUCG3J2i2fs6KdrWRou2WuFdnW9EG/PKDRqTTMQiJBgYOb9dBfbi7vBgw== - dependencies: - "@theia/core" "1.19.0" + "@theia/core" "1.22.1" perfect-scrollbar "^1.3.0" -"@theia/output@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/output/-/output-1.19.0.tgz#71d83f1fb4a5505bfbfec5acc4cfdbff46777a3b" - integrity sha512-H9EedIxLzYxmP7vzFvgB4PWBLsVtf8WPu/x6nOblaPwiEQVQdIzB6yvqXx1oZgSay1RwPVJzuHpv70F7NEbwPA== +"@theia/output@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/output/-/output-1.22.1.tgz#6f4ab3b4cad9a5d58cd6362a42e17bb397255851" + integrity sha512-OMs2dryRk8OlheC93cyy0kfqaTsQR9nDZkVdclODxOChZnMIT4pqJPz19OGFXY4sdEdwZxeJFMiFRFJQOrDhsQ== dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/monaco" "1.19.0" + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/monaco" "1.22.1" "@types/p-queue" "^2.3.1" p-queue "^2.4.2" -"@theia/ovsx-client@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/ovsx-client/-/ovsx-client-1.19.0.tgz#6d350c831c7e3280a10269b1ce72f4312896d441" - integrity sha512-TCdEURZTywMv7TbvFZpYjCF/mrB2ltu+9gVIk49eGAQISbmyWOoq3h9D4p+r+HTC+9TvBwAP6LSkvfHjuu+3tw== +"@theia/ovsx-client@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/ovsx-client/-/ovsx-client-1.22.1.tgz#5cdd4ebcec2434411080fc868db1d6bedc5902fe" + integrity sha512-FgLqEgag3yf9tR+peWjq/lUM/Nj8m9SzBgxzNI9FQscV+pP4L9PdgcMb6AgasXgXENlVBG+mg7T52/gh2XHNlQ== dependencies: "@types/bent" "^7.0.1" bent "^7.1.0" semver "^5.4.1" -"@theia/plugin-ext-vscode@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/plugin-ext-vscode/-/plugin-ext-vscode-1.19.0.tgz#85d129d6dd7ad77a337547b21051dd2fff625f4b" - integrity sha512-OdXDXNBI7pU2Wziy2WY10m8tpQ/Mcj5oCkmO/kkBQk/TsbyNxJjIdDQWU/sGUiupOXjJZcuuCbNwJC+n5bFhug== - dependencies: - "@theia/callhierarchy" "1.19.0" - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/plugin" "1.19.0" - "@theia/plugin-ext" "1.19.0" - "@theia/terminal" "1.19.0" - "@theia/userstorage" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/plugin-ext-vscode@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/plugin-ext-vscode/-/plugin-ext-vscode-1.22.1.tgz#bd2b35fe3b823d1a81baeb07640b985d22bf62a9" + integrity sha512-v2v1XFR0ELxb2iRs/P37x/MMUTojQ2uTdBtkKKazQpdNB43Nv4r10yG2a+l4PvIlKt83S4Q+V1d5qXr+cThJFQ== + dependencies: + "@theia/callhierarchy" "1.22.1" + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/plugin" "1.22.1" + "@theia/plugin-ext" "1.22.1" + "@theia/terminal" "1.22.1" + "@theia/userstorage" "1.22.1" + "@theia/workspace" "1.22.1" "@types/request" "^2.0.3" filenamify "^4.1.0" request "^2.82.0" -"@theia/plugin-ext@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/plugin-ext/-/plugin-ext-1.19.0.tgz#9b9a4bd0b1992f1d631609e167465e22194647ff" - integrity sha512-fxx6hMPUkwiIwYzxJ1KOwcb2U+659Uge/aRZf4dEC9ESqeLEo5LqpfXkOLABfym8MDLSXHaUjX2hnbgFpIOAxA== - dependencies: - "@theia/bulk-edit" "1.19.0" - "@theia/callhierarchy" "1.19.0" - "@theia/console" "1.19.0" - "@theia/core" "1.19.0" - "@theia/debug" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/file-search" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/markers" "1.19.0" - "@theia/messages" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/output" "1.19.0" - "@theia/plugin" "1.19.0" - "@theia/preferences" "1.19.0" - "@theia/scm" "1.19.0" - "@theia/search-in-workspace" "1.19.0" - "@theia/task" "1.19.0" - "@theia/terminal" "1.19.0" - "@theia/timeline" "1.19.0" - "@theia/workspace" "1.19.0" - "@types/markdown-it" "*" +"@theia/plugin-ext@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/plugin-ext/-/plugin-ext-1.22.1.tgz#4e3b5b79e13749d92e5b26bff561321ff20ed902" + integrity sha512-vDYC7BDqAB28g+Lcj6tlzyAaZJCbqhNWRWuMxGItleujBsgLFs6jpATYnTWBZvgRZvc+mMnsYUj5XaHhG5VMrw== + dependencies: + "@theia/bulk-edit" "1.22.1" + "@theia/callhierarchy" "1.22.1" + "@theia/console" "1.22.1" + "@theia/core" "1.22.1" + "@theia/debug" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/file-search" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/markers" "1.22.1" + "@theia/messages" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/output" "1.22.1" + "@theia/plugin" "1.22.1" + "@theia/preferences" "1.22.1" + "@theia/scm" "1.22.1" + "@theia/search-in-workspace" "1.22.1" + "@theia/task" "1.22.1" + "@theia/terminal" "1.22.1" + "@theia/timeline" "1.22.1" + "@theia/workspace" "1.22.1" "@types/mime" "^2.0.1" decompress "^4.2.1" escape-html "^1.0.3" @@ -2685,7 +2678,6 @@ jsonc-parser "^2.2.0" lodash.clonedeep "^4.5.0" macaddress "^0.2.9" - markdown-it "^8.4.0" mime "^2.4.4" ps-tree "^1.2.0" request "^2.82.0" @@ -2694,140 +2686,141 @@ vscode-debugprotocol "^1.32.0" vscode-textmate "^4.0.1" -"@theia/plugin@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/plugin/-/plugin-1.19.0.tgz#0582e954070a8ce03ec784ef39e0b8a3f3e43640" - integrity sha512-Afhjg4RZPM4tyFQ2yjqf6LrEI+3aSAkaibGw99Jdcv2m/IXpARa3VdyZX00VDbEgMLiFtfXHckiCp5L8yhY7ug== - -"@theia/preferences@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/preferences/-/preferences-1.19.0.tgz#2bc870e3fb686c05b1582cef4878f766fa7715f6" - integrity sha512-c1wnvbFThqEFZZtcj18MHOZSkMxk0A3dHPW02+aKQYt2eIaRX1D8Whn7rxIRKs8WziggMk2xvKgjN/phZ99ERw== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/userstorage" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/plugin@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/plugin/-/plugin-1.22.1.tgz#dc3b39b9bd5f338f2f67336988d68848015308ae" + integrity sha512-aUrprrcsBfmctQE2Ju4ADJjbLF09988GSUbWRMiNp5OvnDXQsb9V3BfXTQUQqcHsCTBds7KVqCC3WA0D9PoAWQ== + +"@theia/preferences@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/preferences/-/preferences-1.22.1.tgz#463e93b6fe6e469555334783444c1555204b8289" + integrity sha512-11Zs3iOJas185QFDnV6cjv2VDxKKuoQ0wCPhuW6laz67y6mrvsw2O8vuDfobp7WTnFNf8mr2ydr1fyaTxh+D9w== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/userstorage" "1.22.1" + "@theia/workspace" "1.22.1" + async-mutex "^0.3.1" jsonc-parser "^2.2.0" -"@theia/process@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/process/-/process-1.19.0.tgz#c2b00608ad39c7b73f9ab9b9bbbf11208f7270e4" - integrity sha512-yn4UxC3Y2cWGeEpX4vCVp8T332v8lu5OB+Zb+xtprQ5O7MODMrYbnNgrp9HparYJfu/K7xO9S2J0hQV6QO5B9g== +"@theia/process@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/process/-/process-1.22.1.tgz#0d9381a5ddff6d3c6bc5d51553ba4db000719942" + integrity sha512-zQTtgO8FHomtYkrVPF3oOd549yoV0UTsPGwVqHYNDO1vCGBSE/wE/LXV3/nbjBcUnHMrvH+AjiteN0CSlVVvLQ== dependencies: - "@theia/core" "1.19.0" - "@theia/node-pty" "0.9.0-theia.6" + "@theia/core" "1.22.1" + node-pty "0.11.0-beta17" string-argv "^0.1.1" -"@theia/scm-extra@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/scm-extra/-/scm-extra-1.19.0.tgz#2bc3b8863518d909d2b58c970648564dd1517fdd" - integrity sha512-ihXvl6RVIoEXwyoR580UWqr6p7cp0k+iAHssjfsPWbgVf916PWJFL/qE8xyixYtzKwp+kwifff6CrewxBvXnwQ== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/scm" "1.19.0" - -"@theia/scm@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/scm/-/scm-1.19.0.tgz#f4848970181084ad689835db79cc2154b025e6b9" - integrity sha512-rc4e60p16a2/TEU9kAhR3XF89GdTcGmJxeuQRGrq8NzZjbIyHmW2CMdmFY8T6vwBRA80vlwfDmqr2F0zL5cCXQ== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/navigator" "1.19.0" +"@theia/scm-extra@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/scm-extra/-/scm-extra-1.22.1.tgz#8fef0e067e2422aadc0826ea5397f16689f53d17" + integrity sha512-6HQ+4Kzd37LzCSGBe3IKtOwkeBEq4RivYocHUFhXp8IcDIgsyeRpCLELYy50Egjok4rv9w0IyFP8IkFcqBAPxg== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/scm" "1.22.1" + +"@theia/scm@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/scm/-/scm-1.22.1.tgz#c86269d6bf7dcc72d5e1e15eca1e90534fda42df" + integrity sha512-eQ0u0EIVQRmOCXhxJLzaaQySt8jBfMQnFBz4Uk8Bn0ganMYhysn/yxYG3R4g+nOd/lnSkNyyqnAuIpjpwD1o2g== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/navigator" "1.22.1" "@types/diff" "^3.2.2" diff "^3.4.0" p-debounce "^2.1.0" react-autosize-textarea "^7.0.0" ts-md5 "^1.2.2" -"@theia/search-in-workspace@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/search-in-workspace/-/search-in-workspace-1.19.0.tgz#20fa0da70a7650751d0a0642225604bcabf53521" - integrity sha512-7gCgDNCvWphaJjftqXLL0+XEww6Kyz5tnRAffNkURR8X8FnBbptWMePq1sUCewdsWrkxQeRBoGagVV2jy/qLxA== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/navigator" "1.19.0" - "@theia/process" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/search-in-workspace@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/search-in-workspace/-/search-in-workspace-1.22.1.tgz#4a7319bc847010cbd551a86a0c97761fc12f81f7" + integrity sha512-StheMzeNToN28NRR1rCcP0G6H79dd1vLz1eEGZmAf9IH84hIgDTpqJlN6daBI1TQk/ntAXPge+ChVIUQxkGHdA== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/navigator" "1.22.1" + "@theia/process" "1.22.1" + "@theia/workspace" "1.22.1" minimatch "^3.0.4" vscode-ripgrep "^1.2.4" -"@theia/task@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/task/-/task-1.19.0.tgz#4089ef3f2d1b8fe3c800f3dde276d93d66910152" - integrity sha512-gGbVK08Ve5we1pO/X7HyjW3WJCjXBKG/G9G7taLhgzOjLrbXrJIDyEzxGm9BIeN5oJ9KfoaEJ5Y0NRz98ZKaTQ== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/markers" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/preferences" "1.19.0" - "@theia/process" "1.19.0" - "@theia/terminal" "1.19.0" - "@theia/userstorage" "1.19.0" - "@theia/variable-resolver" "1.19.0" - "@theia/workspace" "1.19.0" +"@theia/task@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/task/-/task-1.22.1.tgz#f5229aa5cb568413e08a95dae47df8ea1453eecb" + integrity sha512-dnxk1emRKCoQQ2BTbUAkDuTE6BTAtJI55r8Fo5M/FOpByRrb+9iKzED7Ehge4VzqDXeYtJDTMlIFrzBiJ1avQg== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/markers" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/preferences" "1.22.1" + "@theia/process" "1.22.1" + "@theia/terminal" "1.22.1" + "@theia/userstorage" "1.22.1" + "@theia/variable-resolver" "1.22.1" + "@theia/workspace" "1.22.1" ajv "^6.5.3" async-mutex "^0.3.1" jsonc-parser "^2.2.0" p-debounce "^2.1.0" -"@theia/terminal@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/terminal/-/terminal-1.19.0.tgz#3ed47a50830708f681d27d5514f9626ab08e10f2" - integrity sha512-WOLJ/YKjtjCpvI2px3AlbifTxN1DIytOe/nVjc2yOZZLKD/hFYVPGqzMghpS1JOSfSvYdwxgzCwDZOlSAEnFkA== - dependencies: - "@theia/core" "1.19.0" - "@theia/editor" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/monaco" "1.19.0" - "@theia/process" "1.19.0" - "@theia/workspace" "1.19.0" - xterm "~4.11.0" - xterm-addon-fit "~0.5.0" - xterm-addon-search "~0.8.0" - -"@theia/timeline@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/timeline/-/timeline-1.19.0.tgz#453baa24a0241ff7e459a42414d9a86f496c85f9" - integrity sha512-/wcBYdmN2pde65/DjbByZkqJTTuemXGndokjhW6OaQvuPUOLIYQaAlrhypJXtED4X3RDoykVYkQqbYtdUBAn1A== - dependencies: - "@theia/core" "1.19.0" - "@theia/navigator" "1.19.0" - -"@theia/userstorage@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/userstorage/-/userstorage-1.19.0.tgz#1a226ebe099f395f36e792077f3eb1e6eb7bbde2" - integrity sha512-azCZX3p/C6Z+K0qPNCIOkS80c2yCYHu5jU4FsPkM8UXfcM2ilprxMDmpZVCTsPno6vohm+aT3W5r1oyhLRA1IQ== - dependencies: - "@theia/core" "1.19.0" - "@theia/filesystem" "1.19.0" - -"@theia/variable-resolver@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/variable-resolver/-/variable-resolver-1.19.0.tgz#fb728ac5bec6ad0a8edb6e1a2330183109bbae59" - integrity sha512-1VV1XC1HZpVGDbS5QAGga6XVnLkm0arT8Bh4UaYUrGQtR4WyfdVktjCrF6J2TUmqQXOendixk7g2UEEq/pehIA== - dependencies: - "@theia/core" "1.19.0" - -"@theia/workspace@1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@theia/workspace/-/workspace-1.19.0.tgz#09aa42264d38504c8e390317e6275730558b0473" - integrity sha512-FTZwuvHbrQwRbFxLZbgfdvLT53UCi4qXEAaPFLYK4g5z2oAwoAhxOQzhuIOn21c3sjJzlFirKZgU6Rmvdx++Lg== - dependencies: - "@theia/core" "1.19.0" - "@theia/filesystem" "1.19.0" - "@theia/variable-resolver" "1.19.0" +"@theia/terminal@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/terminal/-/terminal-1.22.1.tgz#b4156d13f88c56263f1b8a024049d69f14496919" + integrity sha512-ilQj+jWbzXjdb2fR8Y6TYvDPzXeGCz+m5GhAfLBsN0r2W++fG+vYjtkq9G4UKcBd+PqrTf+hCHjs2zlgRShShQ== + dependencies: + "@theia/core" "1.22.1" + "@theia/editor" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/monaco" "1.22.1" + "@theia/process" "1.22.1" + "@theia/workspace" "1.22.1" + xterm "^4.16.0" + xterm-addon-fit "^0.5.0" + xterm-addon-search "^0.8.2" + +"@theia/timeline@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/timeline/-/timeline-1.22.1.tgz#46b947dd4841c581c0defa2fabbbf3a2e93aee15" + integrity sha512-78kgOR9h0dorv4Dx/uRgTZIEBCbbwPcZGoneEO2KLDSXf4OYaxzXWK3/nKPgT6VbMs//jZIg4O4C1mBPtigIQw== + dependencies: + "@theia/core" "1.22.1" + "@theia/navigator" "1.22.1" + +"@theia/userstorage@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/userstorage/-/userstorage-1.22.1.tgz#95790c5a7394b1a8c9d0ba11c31404e963537717" + integrity sha512-Rg5O4yoPc8aWzVIi6YegmY4YaQrsV1O1I3SIp9PWWNqrYZjfDn9JFW4RmDtuUoI8n/mmjDUO8AhCwzY9jBB5fA== + dependencies: + "@theia/core" "1.22.1" + "@theia/filesystem" "1.22.1" + +"@theia/variable-resolver@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/variable-resolver/-/variable-resolver-1.22.1.tgz#504fcf12c360e4700a9bb4fcd1b30c0b75726b86" + integrity sha512-1QMqE6g6L7MMsZH+45nulAXbKEBbpwBkwYUx8c7msT+McWrQ9os+0Ff47i5P2FFvYY4WUR6uxA67JIu7EuaYoQ== + dependencies: + "@theia/core" "1.22.1" + +"@theia/workspace@1.22.1": + version "1.22.1" + resolved "https://registry.yarnpkg.com/@theia/workspace/-/workspace-1.22.1.tgz#a280f5e36fbf686cada4fb1bcb25298b7d71ea2a" + integrity sha512-E8F3LScvLUshSvb1k1pT9lXWSWMlFOauqkEqR+5pgB3NXWGguFVzXeztkrVBeNJBd10IIZcBO/Wt/G8aJzuXbw== + dependencies: + "@theia/core" "1.22.1" + "@theia/filesystem" "1.22.1" + "@theia/variable-resolver" "1.22.1" ajv "^6.5.3" jsonc-parser "^2.2.0" moment "2.24.0" @@ -3037,7 +3030,7 @@ "@types/tough-cookie" "*" parse5 "^4.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.8": +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -3090,7 +3083,7 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== -"@types/markdown-it@*": +"@types/markdown-it@^12.2.3": version "12.2.3" resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51" integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== @@ -3179,10 +3172,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.55.tgz#a147f282edec679b894d4694edb5abeb595fecbd" integrity sha512-koZJ89uLZufDvToeWO5BrC4CR4OUfHnUz2qoPs/daQH6qq3IN62QFxCTZ+bKaCE0xaoCAJYE4AXre8AbghCrhg== -"@types/node@^12.0.12": - version "12.20.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.6.tgz#7b73cce37352936e628c5ba40326193443cfba25" - integrity sha512-sRVq8d+ApGslmkE9e3i+D3gFGk7aZHAT+G4cIpIEdLJYPsWiSPwcAnJEjddLQQDqV3Ra2jOclX/Sv6YrvGYiWA== +"@types/node@^14.6.2": + version "14.18.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.9.tgz#0e5944eefe2b287391279a19b407aa98bd14436d" + integrity sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3344,6 +3337,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== +"@types/semver@^7.3.8": + version "7.3.9" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" + integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== + "@types/serve-static@*": version "1.13.9" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" @@ -3516,10 +3514,10 @@ "@typescript-eslint/types" "4.28.0" eslint-visitor-keys "^2.0.0" -"@vscode/codicons@^0.0.21": - version "0.0.21" - resolved "https://registry.yarnpkg.com/@vscode/codicons/-/codicons-0.0.21.tgz#20ef724b141fdddba3ad86e85f34aaad29e4d3a0" - integrity sha512-oUfqbWTaEc2NIVLUxOK2Vi8AB/ixFfp52CkmR+pYZcWAr82IVIDDn50pdEDRXfJNIc4giHDSc5F5ZTsVMZK9Sg== +"@vscode/codicons@*": + version "0.0.27" + resolved "https://registry.yarnpkg.com/@vscode/codicons/-/codicons-0.0.27.tgz#3b842cbcfb478e1c9e1dc6efbbdedd059cc3e567" + integrity sha512-NpLkfzPfEOO6s2HH+ISITlaXKYB2XeoYZQY2IV39EaJV3NIBygiLqybHrVtKbaDFfeXyP8McmvvnbWd6YykpGg== "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -3788,17 +3786,26 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: +ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3: +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3808,6 +3815,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.6.3, ajv@^8.8.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ajv@^8.0.1: version "8.6.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" @@ -3818,11 +3835,6 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" -alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - anser@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/anser/-/anser-2.0.1.tgz#8d9069291fee18306ffaf2e364a690dcc8ed78ad" @@ -4064,11 +4076,6 @@ ansi-strikethrough@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -4164,6 +4171,11 @@ argparse@^1.0.10, argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -4345,6 +4357,11 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +atomically@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" + integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== + auth0-js@^9.14.0: version "9.15.0" resolved "https://registry.yarnpkg.com/auth0-js/-/auth0-js-9.15.0.tgz#ebb88aa87e9aee313f084e3295a57eadaf2d4f8c" @@ -4365,18 +4382,6 @@ autolinker@~0.28.0: dependencies: gulp-header "^1.7.1" -autoprefixer@^6.3.1: - version "6.7.7" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" - integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ= - dependencies: - browserslist "^1.7.6" - caniuse-db "^1.0.30000634" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^5.2.16" - postcss-value-parser "^3.2.3" - autosize@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.2.tgz#073cfd07c8bf45da4b9fd153437f5bafbba1e4c9" @@ -4392,15 +4397,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-code-frame@^6.11.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - babel-loader@^8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" @@ -4477,11 +4473,6 @@ back@~0.1.5: resolved "https://registry.yarnpkg.com/back/-/back-0.1.5.tgz#342b96b804657b03ec9a31f248a11f200608dcc2" integrity sha1-NCuWuARlewPsmjHySKEfIAYI3MI= -balanced-match@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" - integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg= - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -4541,11 +4532,6 @@ big-integer@^1.6.17: resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -4660,14 +4646,6 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: - version "1.7.7" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" - integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk= - dependencies: - caniuse-db "^1.0.30000639" - electron-to-chromium "^1.2.7" - browserslist@^4.14.5, browserslist@^4.16.3: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" @@ -4783,26 +4761,6 @@ bytesish@^0.4.1: resolved "https://registry.yarnpkg.com/bytesish/-/bytesish-0.4.4.tgz#f3b535a0f1153747427aee27256748cff92347e6" integrity sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ== -cacache@^11.2.0: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cacache@^12.0.0, cacache@^12.0.3: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -4943,21 +4901,6 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-api@^1.5.2: - version "1.6.1" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" - integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw= - dependencies: - browserslist "^1.3.6" - caniuse-db "^1.0.30000529" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30001204" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001204.tgz#95959fa4ebf08c871eff3274518e382cd0f8a223" - integrity sha512-Q4X8pJp5li4mEiNmQMamOFrWbFB29anrWNe9U9/Qcuh7nseuH4D8XNIq7rHy/dt264SuoVOX+36qRMyhTvGnHQ== - caniuse-lite@^1.0.30001181: version "1.0.30001204" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" @@ -5002,18 +4945,15 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= +chalk@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72" + integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A== dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" + ansi-styles "^4.1.0" + supports-color "^7.1.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5112,13 +5052,6 @@ circular-json@^0.3.1: resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== -clap@^1.0.9: - version "1.2.3" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" - integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA== - dependencies: - chalk "^1.1.3" - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -5252,13 +5185,6 @@ clsx@^1.0.4, clsx@^1.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== -coa@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" - integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0= - dependencies: - q "^1.1.2" - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -5272,7 +5198,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0, color-convert@^1.9.0: +color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -5291,51 +5217,21 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" - integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= - dependencies: - color-name "^1.0.0" - -color@^0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" - integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= - dependencies: - clone "^1.0.2" - color-convert "^1.3.0" - color-string "^0.3.0" - colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colormin@^1.0.5: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" - integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM= - dependencies: - color "^0.11.0" - css-color-names "0.0.4" - has "^1.0.1" - -colors@^1.3.3, colors@^1.4.0: +colors@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - colour@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" @@ -5384,6 +5280,14 @@ component-emitter@^1.2.1, component-emitter@^1.3.0: resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +compression-webpack-plugin@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== + dependencies: + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + computed-style@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" @@ -5421,21 +5325,21 @@ concat-with-sourcemaps@*: dependencies: source-map "^0.6.1" -conf@^6.2.1: - version "6.2.4" - resolved "https://registry.yarnpkg.com/conf/-/conf-6.2.4.tgz#49d23c4e21ef2ac2860f7b5ed25b7b7e484f769f" - integrity sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ== - dependencies: - ajv "^6.10.2" - debounce-fn "^3.0.1" - dot-prop "^5.0.0" - env-paths "^2.2.0" - json-schema-typed "^7.0.1" - make-dir "^3.0.0" - onetime "^5.1.0" - pkg-up "^3.0.1" - semver "^6.2.0" - write-file-atomic "^3.0.0" +conf@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/conf/-/conf-10.1.1.tgz#ff08046d5aeeee0eaff55d57f5b4319193c3dfda" + integrity sha512-z2civwq/k8TMYtcn3SVP0Peso4otIWnHtcTuHhQ0zDZDdP4NTxqEc8owfkz4zBsdMYdn/LFcE+ZhbCeqkhtq3Q== + dependencies: + ajv "^8.6.3" + ajv-formats "^2.1.1" + atomically "^1.7.0" + debounce-fn "^4.0.0" + dot-prop "^6.0.1" + env-paths "^2.2.1" + json-schema-typed "^7.0.3" + onetime "^5.1.2" + pkg-up "^3.1.0" + semver "^7.3.5" config-chain@^1.1.11: version "1.1.12" @@ -5728,11 +5632,6 @@ crypto-js@^3.2.1: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== -css-color-names@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - css-element-queries@^1.2.0: version "1.2.3" resolved "https://registry.yarnpkg.com/css-element-queries/-/css-element-queries-1.2.3.tgz#e14940b1fcd4bf0da60ea4145d05742d7172e516" @@ -5752,83 +5651,11 @@ css-loader@^6.2.0: postcss-value-parser "^4.1.0" semver "^7.3.5" -css-loader@~0.26.1: - version "0.26.4" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.26.4.tgz#b61e9e30db94303e6ffc892f10ecd09ad025a1fd" - integrity sha1-th6eMNuUMD5v/IkvEOzQmtAlof0= - dependencies: - babel-code-frame "^6.11.0" - css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" - loader-utils "^1.0.2" - lodash.camelcase "^4.3.0" - object-assign "^4.0.1" - postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" - source-list-map "^0.1.7" - -css-selector-tokenizer@^0.7.0: - version "0.7.3" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" - integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -"cssnano@>=2.6.1 <4": - version "3.10.0" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" - integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg= - dependencies: - autoprefixer "^6.3.1" - decamelize "^1.1.2" - defined "^1.0.0" - has "^1.0.1" - object-assign "^4.0.1" - postcss "^5.0.14" - postcss-calc "^5.2.0" - postcss-colormin "^2.1.8" - postcss-convert-values "^2.3.4" - postcss-discard-comments "^2.0.4" - postcss-discard-duplicates "^2.0.1" - postcss-discard-empty "^2.0.1" - postcss-discard-overridden "^0.1.1" - postcss-discard-unused "^2.2.1" - postcss-filter-plugins "^2.0.0" - postcss-merge-idents "^2.1.5" - postcss-merge-longhand "^2.0.1" - postcss-merge-rules "^2.0.3" - postcss-minify-font-values "^1.0.2" - postcss-minify-gradients "^1.0.1" - postcss-minify-params "^1.0.4" - postcss-minify-selectors "^2.0.4" - postcss-normalize-charset "^1.1.0" - postcss-normalize-url "^3.0.7" - postcss-ordered-values "^2.1.0" - postcss-reduce-idents "^2.2.2" - postcss-reduce-initial "^1.0.0" - postcss-reduce-transforms "^1.0.3" - postcss-svgo "^2.1.1" - postcss-unique-selectors "^2.0.2" - postcss-value-parser "^3.2.3" - postcss-zindex "^2.0.1" - -csso@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" - integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U= - dependencies: - clap "^1.0.9" - source-map "^0.5.3" - cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" @@ -5898,12 +5725,12 @@ dateformat@^3.0.0, dateformat@^3.0.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debounce-fn@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680" - integrity sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q== +debounce-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" + integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== dependencies: - mimic-fn "^2.1.0" + mimic-fn "^3.0.0" debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.5.1, debug@^2.6.9: version "2.6.9" @@ -6130,11 +5957,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -6256,13 +6078,20 @@ dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" -dot-prop@^5.0.0, dot-prop@^5.1.0: +dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + download@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" @@ -6291,15 +6120,15 @@ drivelist@^9.0.2: nan "^2.14.0" prebuild-install "^5.2.4" -dugite-extra@0.1.14: - version "0.1.14" - resolved "https://registry.yarnpkg.com/dugite-extra/-/dugite-extra-0.1.14.tgz#514c89b6c597bf8b748b4febd53382559a2a8fdd" - integrity sha512-apUiaj322iSSBx5X7/8Dg3GP6mDLl5y6RaeEWBpLUHfBKxQyTTVHG0YpzYCKe2ke1EbrSmreVNo1FwDnIb3qlw== +dugite-extra@0.1.14, dugite-extra@0.1.15: + version "0.1.15" + resolved "https://registry.yarnpkg.com/dugite-extra/-/dugite-extra-0.1.15.tgz#322406b628ea5515c5c6fcd65e4d040543d6268a" + integrity sha512-beLmQcIXLA8aXqWQZF/ooECoZvYKpBywIFwgqAoYnV04NdWUXDtZ6mMcjQf5eAz5PjXGXAYSuQ31zkPL8J85+A== dependencies: byline "^5.0.0" dugite-no-gpl "1.69.0" - find-git-exec "^0.0.3" - upath "^1.0.0" + find-git-exec "^0.0.4" + upath "^2.0.1" dugite-no-gpl@1.69.0: version "1.69.0" @@ -6353,7 +6182,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-rebuild@^1.8.6: +electron-rebuild@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.11.0.tgz#e384773a9ad30fe0a6a5bbb326b779d51f668b6a" integrity sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA== @@ -6368,26 +6197,26 @@ electron-rebuild@^1.8.6: spawn-rx "^3.0.0" yargs "^14.2.0" -electron-store@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-5.2.0.tgz#a15718fc1fa21acfd07af55f9b94f9fa6a536665" - integrity sha512-iU3WDqEDAYNYR9XV7p0tJajq/zs9z7Nrn0sAoR5nDyn8h/9dr9kusKbTxD8NtVEBD1TB1pkGMqcbIt/y6knDwQ== +electron-store@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-8.0.1.tgz#9b598c1d2edeffebee9d8c1cd957ad368c528925" + integrity sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w== dependencies: - conf "^6.2.1" - type-fest "^0.7.1" + conf "^10.0.3" + type-fest "^1.0.2" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.649: +electron-to-chromium@^1.3.649: version "1.3.695" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.695.tgz#955f419cf99137226180cc4cca2e59015a4e248d" integrity sha512-lz66RliUqLHU1Ojxx1A4QUxKydjiQ79Y4dZyPobs2Dmxj5aVL2TM3KoQ2Gs7HS703Bfny+ukI3KOxwAB0xceHQ== -electron@^9.0.2: - version "9.4.4" - resolved "https://registry.yarnpkg.com/electron/-/electron-9.4.4.tgz#2a74a0655a74bd326216672c5ae6ed3a44451446" - integrity sha512-dcPlTrMWQu5xuSm6sYV42KK/BRIqh3erM8v/WtZqaDmG7pkCeJpvw26Dgbqhdt78XmqqGiN96giEe6A3S9vpAQ== +electron@^15.3.5: + version "15.3.6" + resolved "https://registry.yarnpkg.com/electron/-/electron-15.3.6.tgz#19b9aee1e063b1983b3d7f535567d90e0e1b4d04" + integrity sha512-mOOTcZH/Vlq9GP3B8G3aMvZQ4eZyCjUZZpLccABqsPyLUMEixcdx750DQ7M+iHYyo0BWxj/JuHblzQXgNnPkfg== dependencies: - "@electron/get" "^1.0.1" - "@types/node" "^12.0.12" + "@electron/get" "^1.13.0" + "@types/node" "^14.6.2" extract-zip "^1.0.3" emoji-regex@^7.0.1: @@ -6400,11 +6229,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -6449,12 +6273,12 @@ ent@^2.2.0: resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= -entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +entities@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== -env-paths@^2.2.0: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -6733,11 +6557,6 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -7066,11 +6885,6 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -7197,7 +7011,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: +find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -7206,10 +7020,10 @@ find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" -find-git-exec@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/find-git-exec/-/find-git-exec-0.0.3.tgz#4ce941859ebe7f359fb8e56aafd2acf3c955b52c" - integrity sha512-cGsuku5hwdOpToV6axI0fRCABuw1yozFtQv13pVK0j7BjILU8buDtHKmSrsZN340Sjj3Z42n8fcF1Xu4nRuBbA== +find-git-exec@0.0.4, find-git-exec@^0.0.3, find-git-exec@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/find-git-exec/-/find-git-exec-0.0.4.tgz#f1d0d35f93ad99bc81aacd357388d00ae902bc92" + integrity sha512-klzQwno+dpdeahtHhvZZ5Yn6K+zme1Aj+YJ4ZD+DywSLrQoyCywTrsubUZa1hHRehmfwBThoeKjS7fsaxhpfNA== dependencies: "@types/node" "^10.14.22" "@types/which" "^1.3.2" @@ -7284,11 +7098,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg== - flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -7297,15 +7106,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -font-awesome-webpack@0.0.5-beta.2: - version "0.0.5-beta.2" - resolved "https://registry.yarnpkg.com/font-awesome-webpack/-/font-awesome-webpack-0.0.5-beta.2.tgz#9ea5f22f0615d08e76d8db341563649a726286d6" - integrity sha1-nqXyLwYV0I522Ns0FWNkmnJihtY= - dependencies: - css-loader "~0.26.1" - less-loader "~2.2.3" - style-loader "~0.13.1" - font-awesome@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" @@ -7738,6 +7538,18 @@ global-agent@^2.0.2: semver "^7.3.2" serialize-error "^7.0.1" +global-agent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" + integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q== + dependencies: + boolean "^3.0.1" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + global-tunnel-ng@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" @@ -7855,7 +7667,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== @@ -7998,23 +7810,11 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - has-bigints@^1.0.0, has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -8078,7 +7878,7 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -8143,11 +7943,6 @@ hosted-git-info@^4.0.1: dependencies: lru-cache "^6.0.0" -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -8277,11 +8072,6 @@ iconv-lite@^0.6.0, iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -8405,11 +8195,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - infer-owner@^1.0.3, infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" @@ -8528,11 +8313,6 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -8874,13 +8654,6 @@ is-string@^1.0.6: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== -is-svg@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" - integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk= - dependencies: - html-comment-regex "^1.1.0" - is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -8895,7 +8668,7 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -8988,11 +8761,6 @@ jest-worker@^27.0.6: merge-stream "^2.0.0" supports-color "^8.0.0" -js-base64@^2.1.9: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== - js-cookie@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" @@ -9003,11 +8771,6 @@ js-cookie@^2.2.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-yaml@3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -9024,14 +8787,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@~3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A= - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - jsbn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" @@ -9114,7 +8869,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema-typed@^7.0.1: +json-schema-typed@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== @@ -9134,11 +8889,6 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -9302,13 +9052,6 @@ lerna@^3.20.2: import-local "^2.0.0" npmlog "^4.1.2" -less-loader@~2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-2.2.3.tgz#b6d8f8139c8493df09d992a93a00734b08f84528" - integrity sha1-ttj4E5yEk98J2ZKpOgBzSwj4RSg= - dependencies: - loader-utils "^0.2.5" - less@^3.0.3: version "3.13.1" resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" @@ -9353,10 +9096,10 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -linkify-it@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf" - integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw== +linkify-it@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" + integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== dependencies: uc.micro "^1.0.1" @@ -9436,17 +9179,7 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^0.2.5: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.0.3, loader-utils@^1.4.0: +loader-utils@^1.0.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -9527,11 +9260,6 @@ lodash.ismatch@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -9788,14 +9516,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-it@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" - integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ== +markdown-it@^12.3.2: + version "12.3.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" + integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== dependencies: - argparse "^1.0.7" - entities "~1.1.1" - linkify-it "^2.0.0" + argparse "^2.0.1" + entities "~2.1.0" + linkify-it "^3.0.1" mdurl "^1.0.1" uc.micro "^1.0.5" @@ -9806,11 +9534,6 @@ matcher@^3.0.0: dependencies: escape-string-regexp "^4.0.0" -math-expression-evaluator@^1.2.14: - version "1.3.7" - resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz#1b62225db86af06f7ea1fd9576a34af605a5b253" - integrity sha512-nrbaifCl42w37hYd6oRLvoymFK42tWB+WQTMFtksDGQMi5GvlJwnz/CsS30FFAISFLtX+A0csJ0xLiuuyyec7w== - mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -9979,6 +9702,11 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -10099,7 +9827,7 @@ mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1: +mkdirp@0.5.5, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -10286,10 +10014,10 @@ napi-build-utils@^1.0.1: resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== -native-keymap@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/native-keymap/-/native-keymap-2.2.1.tgz#537023ec6e73591a68659f6a14eba8e1965b0633" - integrity sha512-rsEf2gbFFNEy3MxxQocCn9XpNyqBa8kMFFrjXFWCp3lWuhk3svHnWYZOj3Or8lNoAIjVxAPLdMClraLXHz6dnw== +native-keymap@^2.2.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/native-keymap/-/native-keymap-2.5.0.tgz#4d567497efb0d2efbfd53048f14093f25984c2b4" + integrity sha512-EfdMpTcX40mlHBJSWidFV4WLpwwaebK3D3JFuO/42voOAnG2WHgDdg6JerbqcxXvRhvIg934GV+9PjB3jzfu9A== native-request@^1.0.5: version "1.0.8" @@ -10320,7 +10048,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.2: +neo-async@^2.6.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -10346,17 +10074,17 @@ nise@^5.1.0: just-extend "^4.0.2" path-to-regexp "^1.7.0" -node-abi@^2.11.0, node-abi@^2.7.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.21.0.tgz#c2dc9ebad6f4f53d6ea9b531e7b8faad81041d48" - integrity sha512-smhrivuPqEM3H5LmnY3KU6HfYv0u4QklgAxfFyRNujKUzbUcYZ+Jc2EhukB9SRcD2VpqhxM7n/MIcp1Ua1/JMg== +node-abi@*: + version "3.5.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248" + integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw== dependencies: - semver "^5.4.1" + semver "^7.3.5" -node-abi@^2.21.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.26.0.tgz#355d5d4bc603e856f74197adbf3f5117a396ba40" - integrity sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ== +node-abi@^2.11.0, node-abi@^2.21.0, node-abi@^2.7.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" + integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== dependencies: semver "^5.4.1" @@ -10387,7 +10115,7 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.5.0, node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@^2.5.0, node-fetch@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -10433,22 +10161,6 @@ node-gyp@^6.0.1: tar "^4.4.12" which "^1.3.1" -node-gyp@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" - integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.3" - nopt "^5.0.0" - npmlog "^4.1.2" - request "^2.88.2" - rimraf "^3.0.2" - semver "^7.3.2" - tar "^6.0.2" - which "^2.0.2" - node-pre-gyp@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087" @@ -10465,6 +10177,13 @@ node-pre-gyp@^0.15.0: semver "^5.3.0" tar "^4.4.2" +node-pty@0.11.0-beta17: + version "0.11.0-beta17" + resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.11.0-beta17.tgz#7df6a60dced6bf7a3a282b65cf51980c68954af6" + integrity sha512-JALo4LgYKmzmmXI23CIfS6DpCuno647YJpNg3RT6jCKTHWrt+RHeB6JAlb/pJG9dFNSeaiIAWD+0waEg2AzlfA== + dependencies: + nan "^2.14.0" + node-releases@^1.1.70: version "1.1.71" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" @@ -10520,11 +10239,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - normalize-url@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" @@ -10534,16 +10248,6 @@ normalize-url@2.0.1: query-string "^5.0.1" sort-keys "^2.0.0" -normalize-url@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - normalize-url@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -10654,11 +10358,6 @@ nsfw@^2.1.2: dependencies: node-addon-api "*" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -11329,7 +11028,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^3.0.1: +pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== @@ -11353,164 +11052,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-calc@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" - integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14= - dependencies: - postcss "^5.0.2" - postcss-message-helpers "^2.0.0" - reduce-css-calc "^1.2.6" - -postcss-colormin@^2.1.8: - version "2.2.2" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" - integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks= - dependencies: - colormin "^1.0.5" - postcss "^5.0.13" - postcss-value-parser "^3.2.3" - -postcss-convert-values@^2.3.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" - integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0= - dependencies: - postcss "^5.0.11" - postcss-value-parser "^3.1.2" - -postcss-discard-comments@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" - integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0= - dependencies: - postcss "^5.0.14" - -postcss-discard-duplicates@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" - integrity sha1-uavye4isGIFYpesSq8riAmO5GTI= - dependencies: - postcss "^5.0.4" - -postcss-discard-empty@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" - integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= - dependencies: - postcss "^5.0.14" - -postcss-discard-overridden@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" - integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg= - dependencies: - postcss "^5.0.16" - -postcss-discard-unused@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" - integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= - dependencies: - postcss "^5.0.14" - uniqs "^2.0.0" - -postcss-filter-plugins@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" - integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ== - dependencies: - postcss "^5.0.4" - -postcss-merge-idents@^2.1.5: - version "2.1.7" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" - integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA= - dependencies: - has "^1.0.1" - postcss "^5.0.10" - postcss-value-parser "^3.1.1" - -postcss-merge-longhand@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" - integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg= - dependencies: - postcss "^5.0.4" - -postcss-merge-rules@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" - integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE= - dependencies: - browserslist "^1.5.2" - caniuse-api "^1.5.2" - postcss "^5.0.4" - postcss-selector-parser "^2.2.2" - vendors "^1.0.0" - -postcss-message-helpers@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" - integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4= - -postcss-minify-font-values@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" - integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k= - dependencies: - object-assign "^4.0.1" - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-minify-gradients@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" - integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE= - dependencies: - postcss "^5.0.12" - postcss-value-parser "^3.3.0" - -postcss-minify-params@^1.0.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" - integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.2" - postcss-value-parser "^3.0.2" - uniqs "^2.0.0" - -postcss-minify-selectors@^2.0.4: - version "2.1.1" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" - integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8= - dependencies: - alphanum-sort "^1.0.2" - has "^1.0.1" - postcss "^5.0.14" - postcss-selector-parser "^2.0.0" - -postcss-modules-extract-imports@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== - dependencies: - postcss "^6.0.1" - postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - postcss-modules-local-by-default@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" @@ -11520,14 +11066,6 @@ postcss-modules-local-by-default@^4.0.0: postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - postcss-modules-scope@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" @@ -11535,14 +11073,6 @@ postcss-modules-scope@^3.0.0: dependencies: postcss-selector-parser "^6.0.4" -postcss-modules-values@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - postcss-modules-values@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" @@ -11550,64 +11080,6 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-normalize-charset@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" - integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E= - dependencies: - postcss "^5.0.5" - -postcss-normalize-url@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" - integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI= - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^1.4.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - -postcss-ordered-values@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" - integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.1" - -postcss-reduce-idents@^2.2.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" - integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM= - dependencies: - postcss "^5.0.4" - postcss-value-parser "^3.0.2" - -postcss-reduce-initial@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" - integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo= - dependencies: - postcss "^5.0.4" - -postcss-reduce-transforms@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" - integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE= - dependencies: - has "^1.0.1" - postcss "^5.0.8" - postcss-value-parser "^3.0.1" - -postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" - integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A= - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.6" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" @@ -11616,63 +11088,11 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^2.1.1: - version "2.1.6" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" - integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0= - dependencies: - is-svg "^2.0.0" - postcss "^5.0.14" - postcss-value-parser "^3.2.3" - svgo "^0.7.0" - -postcss-unique-selectors@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" - integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0= - dependencies: - alphanum-sort "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss-zindex@^2.0.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" - integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI= - dependencies: - has "^1.0.1" - postcss "^5.0.4" - uniqs "^2.0.0" - -postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - postcss@^8.2.15: version "8.3.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" @@ -11738,11 +11158,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -11948,7 +11363,7 @@ puppeteer@^2.0.0: rimraf "^2.6.1" ws "^6.1.0" -q@^1.1.2, q@^1.5.1: +q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= @@ -11970,14 +11385,6 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - query-string@^5.0.1: version "5.1.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" @@ -12375,22 +11782,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -reduce-css-calc@^1.2.6: - version "1.3.0" - resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" - integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY= - dependencies: - balanced-match "^0.4.2" - math-expression-evaluator "^1.2.14" - reduce-function-call "^1.0.1" - -reduce-function-call@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f" - integrity sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ== - dependencies: - balanced-match "^1.0.0" - reflect-metadata@^0.1.10: version "0.1.13" resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" @@ -12523,7 +11914,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.82.0, request@^2.86.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.82.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -12759,7 +12150,7 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4, sax@~1.2.1: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -12772,15 +12163,6 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -12799,6 +12181,16 @@ schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + seek-bzip@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" @@ -12864,11 +12256,6 @@ serialize-error@^7.0.1: dependencies: type-fest "^0.13.1" -serialize-javascript@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -13136,16 +12523,6 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" - integrity sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY= - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - source-map-js@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" @@ -13184,7 +12561,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -13582,13 +12959,6 @@ style-loader@^2.0.0: loader-utils "^2.0.0" schema-utils "^3.0.0" -style-loader@~0.13.1: - version "0.13.2" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" - integrity sha1-dFMzhM9pjHEEx5URULSXF63C87s= - dependencies: - loader-utils "^1.0.2" - success-symbol@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/success-symbol/-/success-symbol-0.1.0.tgz#24022e486f3bf1cdca094283b769c472d3b72897" @@ -13625,19 +12995,7 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -13658,19 +13016,6 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" -svgo@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" - integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U= - dependencies: - coa "~1.0.1" - colors "~1.1.2" - csso "~2.3.1" - js-yaml "~3.7.0" - mkdirp "~0.5.1" - sax "~1.2.1" - whet.extend "~0.9.9" - symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -13750,18 +13095,6 @@ tar@^4.0.0, tar@^4.0.2, tar@^4.4.10, tar@^4.4.12, tar@^4.4.2, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz#d1724e9bcc04b977b18d5c573b333a2207229a83" - integrity sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - tar@^6.1.0: version "6.1.11" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -14118,16 +13451,16 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -14136,13 +13469,6 @@ type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -14269,16 +13595,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -14362,11 +13678,16 @@ unzipper@^0.9.11: readable-stream "~2.3.6" setimmediate "~1.0.4" -upath@^1.0.0, upath@^1.1.2, upath@^1.2.0: +upath@^1.1.2, upath@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -14485,11 +13806,6 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -14544,11 +13860,6 @@ vscode-languageserver-types@3.15.1: resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de" integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== -vscode-languageserver-types@^3.15.1: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== - vscode-ripgrep@^1.2.4: version "1.11.2" resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.11.2.tgz#a1d9c717a20f625b7e14680cc7db25ffafd132d4" @@ -14640,14 +13951,6 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^1.0.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - webpack-sources@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.1.tgz#251a7d9720d75ada1469ca07dbb62f3641a05b6d" @@ -14726,11 +14029,6 @@ when@^3.7.7: resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" integrity sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I= -whet.extend@~0.9.9: - version "0.9.9" - resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" - integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= - which-boxed-primitive@^1.0.1, which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -14759,7 +14057,7 @@ which@1.3.1, which@^1.2.8, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -14867,16 +14165,6 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - write-json-file@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" @@ -14956,20 +14244,20 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xterm-addon-fit@~0.5.0: +xterm-addon-fit@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== -xterm-addon-search@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.0.tgz#e33eab918df7eac7e7baf95dd2b3d14133754881" - integrity sha512-MPJGPVPpHRUw9cLIuqQbrVepmENMOybVUSxIALz5h1ryyQBrVqVujq2hL5aroX5/dZJoHx9lGHQTVLQ07SKgKA== +xterm-addon-search@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032" + integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg== -xterm@~4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0.tgz#d7dabc7af5299579e4663fedf2b3a179af9aaff9" - integrity sha512-NeJH909WTO2vth/ZlC0gkP3AGzupbvVHVlmtrpBw56/sGFXaF9bNdKgqKa3tf8qbGvXMzL2JhCcHVklqFztIRw== +xterm@^4.16.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.16.0.tgz#af25223c72917438842121e1bcd1b60ffd7e8476" + integrity sha512-nAbuigL9CYkI075mdfqpnB8cHZNKxENCj1CQ9Tm5gSvWkMtkanmRN2mkHGjSaET1/3+X9BqISFFo7Pd2mXVjiQ== y18n@^3.2.0, y18n@^3.2.1: version "3.2.2" From 2f9bf86d75fa919ef4b56dda7d3f423ef228cc29 Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Fri, 11 Feb 2022 15:50:56 +0100 Subject: [PATCH 21/40] update arduino-cli to 0.21.0 (#820) --- arduino-ide-extension/package.json | 4 +- .../cli/commands/v1/commands_grpc_pb.d.ts | 51 +++ .../cli/commands/v1/commands_grpc_pb.js | 103 +++++ .../arduino/cli/commands/v1/commands_pb.d.ts | 54 +++ .../cc/arduino/cli/commands/v1/commands_pb.js | 387 ++++++++++++++++++ .../cc/arduino/cli/commands/v1/common_pb.d.ts | 29 ++ .../cc/arduino/cli/commands/v1/common_pb.js | 214 +++++++++- .../arduino/cli/commands/v1/compile_pb.d.ts | 21 + .../cc/arduino/cli/commands/v1/compile_pb.js | 155 ++++++- .../cc/arduino/cli/commands/v1/upload_pb.d.ts | 4 + .../cc/arduino/cli/commands/v1/upload_pb.js | 32 +- .../arduino/cli/monitor/v1/monitor_grpc_pb.js | 5 +- 12 files changed, 1053 insertions(+), 6 deletions(-) diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index 364148625..2d6ff2b63 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -154,7 +154,7 @@ ], "arduino": { "cli": { - "version": "0.20.2" + "version": "0.21.0" }, "fwuploader": { "version": "2.0.0" @@ -166,4 +166,4 @@ "version": "0.6.0" } } -} +} \ No newline at end of file diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.d.ts b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.d.ts index 511bf22d1..9f34ff24f 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.d.ts +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.d.ts @@ -12,6 +12,7 @@ import * as cc_arduino_cli_commands_v1_common_pb from "../../../../../cc/arduino import * as cc_arduino_cli_commands_v1_board_pb from "../../../../../cc/arduino/cli/commands/v1/board_pb"; import * as cc_arduino_cli_commands_v1_compile_pb from "../../../../../cc/arduino/cli/commands/v1/compile_pb"; import * as cc_arduino_cli_commands_v1_core_pb from "../../../../../cc/arduino/cli/commands/v1/core_pb"; +import * as cc_arduino_cli_commands_v1_monitor_pb from "../../../../../cc/arduino/cli/commands/v1/monitor_pb"; import * as cc_arduino_cli_commands_v1_upload_pb from "../../../../../cc/arduino/cli/commands/v1/upload_pb"; import * as cc_arduino_cli_commands_v1_lib_pb from "../../../../../cc/arduino/cli/commands/v1/lib_pb"; @@ -25,6 +26,7 @@ interface IArduinoCoreServiceService extends grpc.ServiceDefinition { @@ -137,6 +141,15 @@ interface IArduinoCoreServiceService_IVersion extends grpc.MethodDefinition; responseDeserialize: grpc.deserialize; } +interface IArduinoCoreServiceService_INewSketch extends grpc.MethodDefinition { + path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/NewSketch"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} interface IArduinoCoreServiceService_ILoadSketch extends grpc.MethodDefinition { path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/LoadSketch"; requestStream: false; @@ -398,6 +411,24 @@ interface IArduinoCoreServiceService_ILibraryList extends grpc.MethodDefinition< responseSerialize: grpc.serialize; responseDeserialize: grpc.deserialize; } +interface IArduinoCoreServiceService_IMonitor extends grpc.MethodDefinition { + path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/Monitor"; + requestStream: true; + responseStream: true; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} +interface IArduinoCoreServiceService_IEnumerateMonitorPortSettings extends grpc.MethodDefinition { + path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/EnumerateMonitorPortSettings"; + requestStream: false; + responseStream: false; + requestSerialize: grpc.serialize; + requestDeserialize: grpc.deserialize; + responseSerialize: grpc.serialize; + responseDeserialize: grpc.deserialize; +} export const ArduinoCoreServiceService: IArduinoCoreServiceService; @@ -411,6 +442,7 @@ export interface IArduinoCoreServiceServer { outdated: grpc.handleUnaryCall; upgrade: grpc.handleServerStreamingCall; version: grpc.handleUnaryCall; + newSketch: grpc.handleUnaryCall; loadSketch: grpc.handleUnaryCall; archiveSketch: grpc.handleUnaryCall; boardDetails: grpc.handleUnaryCall; @@ -440,6 +472,8 @@ export interface IArduinoCoreServiceServer { libraryResolveDependencies: grpc.handleUnaryCall; librarySearch: grpc.handleUnaryCall; libraryList: grpc.handleUnaryCall; + monitor: grpc.handleBidiStreamingCall; + enumerateMonitorPortSettings: grpc.handleUnaryCall; } export interface IArduinoCoreServiceClient { @@ -465,6 +499,9 @@ export interface IArduinoCoreServiceClient { version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; + newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; + newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; + newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; @@ -537,6 +574,12 @@ export interface IArduinoCoreServiceClient { libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; + monitor(): grpc.ClientDuplexStream; + monitor(options: Partial): grpc.ClientDuplexStream; + monitor(metadata: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream; + enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; + enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; + enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; } export class ArduinoCoreServiceClient extends grpc.Client implements IArduinoCoreServiceClient { @@ -563,6 +606,9 @@ export class ArduinoCoreServiceClient extends grpc.Client implements IArduinoCor public version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; public version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; public version(request: cc_arduino_cli_commands_v1_commands_pb.VersionRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.VersionResponse) => void): grpc.ClientUnaryCall; + public newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; + public newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; + public newSketch(request: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse) => void): grpc.ClientUnaryCall; public loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; public loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; public loadSketch(request: cc_arduino_cli_commands_v1_commands_pb.LoadSketchRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse) => void): grpc.ClientUnaryCall; @@ -634,4 +680,9 @@ export class ArduinoCoreServiceClient extends grpc.Client implements IArduinoCor public libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; public libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; public libraryList(request: cc_arduino_cli_commands_v1_lib_pb.LibraryListRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_lib_pb.LibraryListResponse) => void): grpc.ClientUnaryCall; + public monitor(options?: Partial): grpc.ClientDuplexStream; + public monitor(metadata?: grpc.Metadata, options?: Partial): grpc.ClientDuplexStream; + public enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; + public enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; + public enumerateMonitorPortSettings(request: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, metadata: grpc.Metadata, options: Partial, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse) => void): grpc.ClientUnaryCall; } diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.js index 182fd17f4..8358c89e2 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_grpc_pb.js @@ -23,6 +23,7 @@ var cc_arduino_cli_commands_v1_common_pb = require('../../../../../cc/arduino/cl var cc_arduino_cli_commands_v1_board_pb = require('../../../../../cc/arduino/cli/commands/v1/board_pb.js'); var cc_arduino_cli_commands_v1_compile_pb = require('../../../../../cc/arduino/cli/commands/v1/compile_pb.js'); var cc_arduino_cli_commands_v1_core_pb = require('../../../../../cc/arduino/cli/commands/v1/core_pb.js'); +var cc_arduino_cli_commands_v1_monitor_pb = require('../../../../../cc/arduino/cli/commands/v1/monitor_pb.js'); var cc_arduino_cli_commands_v1_upload_pb = require('../../../../../cc/arduino/cli/commands/v1/upload_pb.js'); var cc_arduino_cli_commands_v1_lib_pb = require('../../../../../cc/arduino/cli/commands/v1/lib_pb.js'); @@ -268,6 +269,28 @@ function deserialize_cc_arduino_cli_commands_v1_DestroyResponse(buffer_arg) { return cc_arduino_cli_commands_v1_commands_pb.DestroyResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsRequest(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsRequest(buffer_arg) { + return cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsResponse(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.EnumerateMonitorPortSettingsResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsResponse(buffer_arg) { + return cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_cc_arduino_cli_commands_v1_GitLibraryInstallRequest(arg) { if (!(arg instanceof cc_arduino_cli_commands_v1_lib_pb.GitLibraryInstallRequest)) { throw new Error('Expected argument of type cc.arduino.cli.commands.v1.GitLibraryInstallRequest'); @@ -510,6 +533,50 @@ function deserialize_cc_arduino_cli_commands_v1_LoadSketchResponse(buffer_arg) { return cc_arduino_cli_commands_v1_commands_pb.LoadSketchResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_cc_arduino_cli_commands_v1_MonitorRequest(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_monitor_pb.MonitorRequest)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.MonitorRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_MonitorRequest(buffer_arg) { + return cc_arduino_cli_commands_v1_monitor_pb.MonitorRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_cc_arduino_cli_commands_v1_MonitorResponse(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_monitor_pb.MonitorResponse)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.MonitorResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_MonitorResponse(buffer_arg) { + return cc_arduino_cli_commands_v1_monitor_pb.MonitorResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_cc_arduino_cli_commands_v1_NewSketchRequest(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.NewSketchRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_NewSketchRequest(buffer_arg) { + return cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_cc_arduino_cli_commands_v1_NewSketchResponse(arg) { + if (!(arg instanceof cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse)) { + throw new Error('Expected argument of type cc.arduino.cli.commands.v1.NewSketchResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_cc_arduino_cli_commands_v1_NewSketchResponse(buffer_arg) { + return cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_cc_arduino_cli_commands_v1_OutdatedRequest(arg) { if (!(arg instanceof cc_arduino_cli_commands_v1_commands_pb.OutdatedRequest)) { throw new Error('Expected argument of type cc.arduino.cli.commands.v1.OutdatedRequest'); @@ -974,6 +1041,18 @@ version: { responseSerialize: serialize_cc_arduino_cli_commands_v1_VersionResponse, responseDeserialize: deserialize_cc_arduino_cli_commands_v1_VersionResponse, }, + // Create a new Sketch +newSketch: { + path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/NewSketch', + requestStream: false, + responseStream: false, + requestType: cc_arduino_cli_commands_v1_commands_pb.NewSketchRequest, + responseType: cc_arduino_cli_commands_v1_commands_pb.NewSketchResponse, + requestSerialize: serialize_cc_arduino_cli_commands_v1_NewSketchRequest, + requestDeserialize: deserialize_cc_arduino_cli_commands_v1_NewSketchRequest, + responseSerialize: serialize_cc_arduino_cli_commands_v1_NewSketchResponse, + responseDeserialize: deserialize_cc_arduino_cli_commands_v1_NewSketchResponse, + }, // Returns all files composing a Sketch loadSketch: { path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/LoadSketch', @@ -1331,6 +1410,30 @@ libraryList: { responseSerialize: serialize_cc_arduino_cli_commands_v1_LibraryListResponse, responseDeserialize: deserialize_cc_arduino_cli_commands_v1_LibraryListResponse, }, + // Open a monitor connection to a board port +monitor: { + path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/Monitor', + requestStream: true, + responseStream: true, + requestType: cc_arduino_cli_commands_v1_monitor_pb.MonitorRequest, + responseType: cc_arduino_cli_commands_v1_monitor_pb.MonitorResponse, + requestSerialize: serialize_cc_arduino_cli_commands_v1_MonitorRequest, + requestDeserialize: deserialize_cc_arduino_cli_commands_v1_MonitorRequest, + responseSerialize: serialize_cc_arduino_cli_commands_v1_MonitorResponse, + responseDeserialize: deserialize_cc_arduino_cli_commands_v1_MonitorResponse, + }, + // Returns the parameters that can be set in the MonitorRequest calls +enumerateMonitorPortSettings: { + path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/EnumerateMonitorPortSettings', + requestStream: false, + responseStream: false, + requestType: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsRequest, + responseType: cc_arduino_cli_commands_v1_monitor_pb.EnumerateMonitorPortSettingsResponse, + requestSerialize: serialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsRequest, + requestDeserialize: deserialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsRequest, + responseSerialize: serialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsResponse, + responseDeserialize: deserialize_cc_arduino_cli_commands_v1_EnumerateMonitorPortSettingsResponse, + }, }; // BOOTSTRAP COMMANDS diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.d.ts b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.d.ts index f1f2e7ae6..94ceab14f 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.d.ts +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.d.ts @@ -10,6 +10,7 @@ import * as cc_arduino_cli_commands_v1_common_pb from "../../../../../cc/arduino import * as cc_arduino_cli_commands_v1_board_pb from "../../../../../cc/arduino/cli/commands/v1/board_pb"; import * as cc_arduino_cli_commands_v1_compile_pb from "../../../../../cc/arduino/cli/commands/v1/compile_pb"; import * as cc_arduino_cli_commands_v1_core_pb from "../../../../../cc/arduino/cli/commands/v1/core_pb"; +import * as cc_arduino_cli_commands_v1_monitor_pb from "../../../../../cc/arduino/cli/commands/v1/monitor_pb"; import * as cc_arduino_cli_commands_v1_upload_pb from "../../../../../cc/arduino/cli/commands/v1/upload_pb"; import * as cc_arduino_cli_commands_v1_lib_pb from "../../../../../cc/arduino/cli/commands/v1/lib_pb"; @@ -489,6 +490,59 @@ export namespace VersionResponse { } } +export class NewSketchRequest extends jspb.Message { + + hasInstance(): boolean; + clearInstance(): void; + getInstance(): cc_arduino_cli_commands_v1_common_pb.Instance | undefined; + setInstance(value?: cc_arduino_cli_commands_v1_common_pb.Instance): NewSketchRequest; + + getSketchName(): string; + setSketchName(value: string): NewSketchRequest; + + getSketchDir(): string; + setSketchDir(value: string): NewSketchRequest; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): NewSketchRequest.AsObject; + static toObject(includeInstance: boolean, msg: NewSketchRequest): NewSketchRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: NewSketchRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): NewSketchRequest; + static deserializeBinaryFromReader(message: NewSketchRequest, reader: jspb.BinaryReader): NewSketchRequest; +} + +export namespace NewSketchRequest { + export type AsObject = { + instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject, + sketchName: string, + sketchDir: string, + } +} + +export class NewSketchResponse extends jspb.Message { + getMainFile(): string; + setMainFile(value: string): NewSketchResponse; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): NewSketchResponse.AsObject; + static toObject(includeInstance: boolean, msg: NewSketchResponse): NewSketchResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: NewSketchResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): NewSketchResponse; + static deserializeBinaryFromReader(message: NewSketchResponse, reader: jspb.BinaryReader): NewSketchResponse; +} + +export namespace NewSketchResponse { + export type AsObject = { + mainFile: string, + } +} + export class LoadSketchRequest extends jspb.Message { hasInstance(): boolean; diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.js index 8f9cb0b78..1937aa229 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/commands_pb.js @@ -25,6 +25,8 @@ var cc_arduino_cli_commands_v1_compile_pb = require('../../../../../cc/arduino/c goog.object.extend(proto, cc_arduino_cli_commands_v1_compile_pb); var cc_arduino_cli_commands_v1_core_pb = require('../../../../../cc/arduino/cli/commands/v1/core_pb.js'); goog.object.extend(proto, cc_arduino_cli_commands_v1_core_pb); +var cc_arduino_cli_commands_v1_monitor_pb = require('../../../../../cc/arduino/cli/commands/v1/monitor_pb.js'); +goog.object.extend(proto, cc_arduino_cli_commands_v1_monitor_pb); var cc_arduino_cli_commands_v1_upload_pb = require('../../../../../cc/arduino/cli/commands/v1/upload_pb.js'); goog.object.extend(proto, cc_arduino_cli_commands_v1_upload_pb); var cc_arduino_cli_commands_v1_lib_pb = require('../../../../../cc/arduino/cli/commands/v1/lib_pb.js'); @@ -41,6 +43,8 @@ goog.exportSymbol('proto.cc.arduino.cli.commands.v1.InitResponse.MessageCase', n goog.exportSymbol('proto.cc.arduino.cli.commands.v1.InitResponse.Progress', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.LoadSketchRequest', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.LoadSketchResponse', null, global); +goog.exportSymbol('proto.cc.arduino.cli.commands.v1.NewSketchRequest', null, global); +goog.exportSymbol('proto.cc.arduino.cli.commands.v1.NewSketchResponse', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.OutdatedRequest', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.OutdatedResponse', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.UpdateCoreLibrariesIndexRequest', null, global); @@ -452,6 +456,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.cc.arduino.cli.commands.v1.VersionResponse.displayName = 'proto.cc.arduino.cli.commands.v1.VersionResponse'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.cc.arduino.cli.commands.v1.NewSketchRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.cc.arduino.cli.commands.v1.NewSketchRequest.displayName = 'proto.cc.arduino.cli.commands.v1.NewSketchRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.cc.arduino.cli.commands.v1.NewSketchResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.cc.arduino.cli.commands.v1.NewSketchResponse.displayName = 'proto.cc.arduino.cli.commands.v1.NewSketchResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -3508,6 +3554,347 @@ proto.cc.arduino.cli.commands.v1.VersionResponse.prototype.setVersion = function +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.toObject = function(opt_includeInstance) { + return proto.cc.arduino.cli.commands.v1.NewSketchRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.toObject = function(includeInstance, msg) { + var f, obj = { + instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f), + sketchName: jspb.Message.getFieldWithDefault(msg, 2, ""), + sketchDir: jspb.Message.getFieldWithDefault(msg, 3, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.cc.arduino.cli.commands.v1.NewSketchRequest; + return proto.cc.arduino.cli.commands.v1.NewSketchRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new cc_arduino_cli_commands_v1_common_pb.Instance; + reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.Instance.deserializeBinaryFromReader); + msg.setInstance(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setSketchName(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setSketchDir(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.cc.arduino.cli.commands.v1.NewSketchRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getInstance(); + if (f != null) { + writer.writeMessage( + 1, + f, + cc_arduino_cli_commands_v1_common_pb.Instance.serializeBinaryToWriter + ); + } + f = message.getSketchName(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getSketchDir(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } +}; + + +/** + * optional Instance instance = 1; + * @return {?proto.cc.arduino.cli.commands.v1.Instance} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.getInstance = function() { + return /** @type{?proto.cc.arduino.cli.commands.v1.Instance} */ ( + jspb.Message.getWrapperField(this, cc_arduino_cli_commands_v1_common_pb.Instance, 1)); +}; + + +/** + * @param {?proto.cc.arduino.cli.commands.v1.Instance|undefined} value + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} returns this +*/ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.setInstance = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} returns this + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.clearInstance = function() { + return this.setInstance(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.hasInstance = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional string sketch_name = 2; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.getSketchName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} returns this + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.setSketchName = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string sketch_dir = 3; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.getSketchDir = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchRequest} returns this + */ +proto.cc.arduino.cli.commands.v1.NewSketchRequest.prototype.setSketchDir = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.prototype.toObject = function(opt_includeInstance) { + return proto.cc.arduino.cli.commands.v1.NewSketchResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.toObject = function(includeInstance, msg) { + var f, obj = { + mainFile: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.cc.arduino.cli.commands.v1.NewSketchResponse; + return proto.cc.arduino.cli.commands.v1.NewSketchResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setMainFile(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.cc.arduino.cli.commands.v1.NewSketchResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getMainFile(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string main_file = 1; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.prototype.getMainFile = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.NewSketchResponse} returns this + */ +proto.cc.arduino.cli.commands.v1.NewSketchResponse.prototype.setMainFile = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.d.ts b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.d.ts index b3d3f1e70..571b58afe 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.d.ts +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.d.ts @@ -74,6 +74,9 @@ export class TaskProgress extends jspb.Message { getCompleted(): boolean; setCompleted(value: boolean): TaskProgress; + getPercent(): number; + setPercent(value: number): TaskProgress; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): TaskProgress.AsObject; @@ -90,6 +93,7 @@ export namespace TaskProgress { name: string, message: string, completed: boolean, + percent: number, } } @@ -181,6 +185,31 @@ export namespace Platform { } } +export class PlatformReference extends jspb.Message { + getId(): string; + setId(value: string): PlatformReference; + + getVersion(): string; + setVersion(value: string): PlatformReference; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): PlatformReference.AsObject; + static toObject(includeInstance: boolean, msg: PlatformReference): PlatformReference.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: PlatformReference, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): PlatformReference; + static deserializeBinaryFromReader(message: PlatformReference, reader: jspb.BinaryReader): PlatformReference; +} + +export namespace PlatformReference { + export type AsObject = { + id: string, + version: string, + } +} + export class Board extends jspb.Message { getName(): string; setName(value: string): Board; diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.js index 7cad6b29c..efd86871e 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/common_pb.js @@ -19,6 +19,7 @@ goog.exportSymbol('proto.cc.arduino.cli.commands.v1.Board', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.DownloadProgress', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.Instance', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.Platform', null, global); +goog.exportSymbol('proto.cc.arduino.cli.commands.v1.PlatformReference', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.Programmer', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.TaskProgress', null, global); /** @@ -126,6 +127,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.cc.arduino.cli.commands.v1.Platform.displayName = 'proto.cc.arduino.cli.commands.v1.Platform'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.cc.arduino.cli.commands.v1.PlatformReference = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.cc.arduino.cli.commands.v1.PlatformReference, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.cc.arduino.cli.commands.v1.PlatformReference.displayName = 'proto.cc.arduino.cli.commands.v1.PlatformReference'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -561,7 +583,8 @@ proto.cc.arduino.cli.commands.v1.TaskProgress.toObject = function(includeInstanc var f, obj = { name: jspb.Message.getFieldWithDefault(msg, 1, ""), message: jspb.Message.getFieldWithDefault(msg, 2, ""), - completed: jspb.Message.getBooleanFieldWithDefault(msg, 3, false) + completed: jspb.Message.getBooleanFieldWithDefault(msg, 3, false), + percent: jspb.Message.getFloatingPointFieldWithDefault(msg, 4, 0.0) }; if (includeInstance) { @@ -610,6 +633,10 @@ proto.cc.arduino.cli.commands.v1.TaskProgress.deserializeBinaryFromReader = func var value = /** @type {boolean} */ (reader.readBool()); msg.setCompleted(value); break; + case 4: + var value = /** @type {number} */ (reader.readFloat()); + msg.setPercent(value); + break; default: reader.skipField(); break; @@ -660,6 +687,13 @@ proto.cc.arduino.cli.commands.v1.TaskProgress.serializeBinaryToWriter = function f ); } + f = message.getPercent(); + if (f !== 0.0) { + writer.writeFloat( + 4, + f + ); + } }; @@ -717,6 +751,24 @@ proto.cc.arduino.cli.commands.v1.TaskProgress.prototype.setCompleted = function( }; +/** + * optional float percent = 4; + * @return {number} + */ +proto.cc.arduino.cli.commands.v1.TaskProgress.prototype.getPercent = function() { + return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 4, 0.0)); +}; + + +/** + * @param {number} value + * @return {!proto.cc.arduino.cli.commands.v1.TaskProgress} returns this + */ +proto.cc.arduino.cli.commands.v1.TaskProgress.prototype.setPercent = function(value) { + return jspb.Message.setProto3FloatField(this, 4, value); +}; + + @@ -1340,6 +1392,166 @@ proto.cc.arduino.cli.commands.v1.Platform.prototype.setDeprecated = function(val +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.toObject = function(opt_includeInstance) { + return proto.cc.arduino.cli.commands.v1.PlatformReference.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.cc.arduino.cli.commands.v1.PlatformReference} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.toObject = function(includeInstance, msg) { + var f, obj = { + id: jspb.Message.getFieldWithDefault(msg, 1, ""), + version: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.cc.arduino.cli.commands.v1.PlatformReference} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.cc.arduino.cli.commands.v1.PlatformReference; + return proto.cc.arduino.cli.commands.v1.PlatformReference.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.cc.arduino.cli.commands.v1.PlatformReference} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.cc.arduino.cli.commands.v1.PlatformReference} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setId(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setVersion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.cc.arduino.cli.commands.v1.PlatformReference.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.cc.arduino.cli.commands.v1.PlatformReference} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getId(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getVersion(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string id = 1; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.getId = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.PlatformReference} returns this + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.setId = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string version = 2; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.getVersion = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.PlatformReference} returns this + */ +proto.cc.arduino.cli.commands.v1.PlatformReference.prototype.setVersion = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.d.ts b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.d.ts index 4f9c74b2f..7613a69fd 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.d.ts +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.d.ts @@ -149,6 +149,24 @@ export class CompileResponse extends jspb.Message { addExecutableSectionsSize(value?: ExecutableSectionSize, index?: number): ExecutableSectionSize; + hasBoardPlatform(): boolean; + clearBoardPlatform(): void; + getBoardPlatform(): cc_arduino_cli_commands_v1_common_pb.PlatformReference | undefined; + setBoardPlatform(value?: cc_arduino_cli_commands_v1_common_pb.PlatformReference): CompileResponse; + + + hasBuildPlatform(): boolean; + clearBuildPlatform(): void; + getBuildPlatform(): cc_arduino_cli_commands_v1_common_pb.PlatformReference | undefined; + setBuildPlatform(value?: cc_arduino_cli_commands_v1_common_pb.PlatformReference): CompileResponse; + + + hasProgress(): boolean; + clearProgress(): void; + getProgress(): cc_arduino_cli_commands_v1_common_pb.TaskProgress | undefined; + setProgress(value?: cc_arduino_cli_commands_v1_common_pb.TaskProgress): CompileResponse; + + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): CompileResponse.AsObject; static toObject(includeInstance: boolean, msg: CompileResponse): CompileResponse.AsObject; @@ -166,6 +184,9 @@ export namespace CompileResponse { buildPath: string, usedLibrariesList: Array, executableSectionsSizeList: Array, + boardPlatform?: cc_arduino_cli_commands_v1_common_pb.PlatformReference.AsObject, + buildPlatform?: cc_arduino_cli_commands_v1_common_pb.PlatformReference.AsObject, + progress?: cc_arduino_cli_commands_v1_common_pb.TaskProgress.AsObject, } } diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.js index 1229aaf6c..1d2bd8977 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/compile_pb.js @@ -971,7 +971,10 @@ proto.cc.arduino.cli.commands.v1.CompileResponse.toObject = function(includeInst usedLibrariesList: jspb.Message.toObjectList(msg.getUsedLibrariesList(), cc_arduino_cli_commands_v1_lib_pb.Library.toObject, includeInstance), executableSectionsSizeList: jspb.Message.toObjectList(msg.getExecutableSectionsSizeList(), - proto.cc.arduino.cli.commands.v1.ExecutableSectionSize.toObject, includeInstance) + proto.cc.arduino.cli.commands.v1.ExecutableSectionSize.toObject, includeInstance), + boardPlatform: (f = msg.getBoardPlatform()) && cc_arduino_cli_commands_v1_common_pb.PlatformReference.toObject(includeInstance, f), + buildPlatform: (f = msg.getBuildPlatform()) && cc_arduino_cli_commands_v1_common_pb.PlatformReference.toObject(includeInstance, f), + progress: (f = msg.getProgress()) && cc_arduino_cli_commands_v1_common_pb.TaskProgress.toObject(includeInstance, f) }; if (includeInstance) { @@ -1030,6 +1033,21 @@ proto.cc.arduino.cli.commands.v1.CompileResponse.deserializeBinaryFromReader = f reader.readMessage(value,proto.cc.arduino.cli.commands.v1.ExecutableSectionSize.deserializeBinaryFromReader); msg.addExecutableSectionsSize(value); break; + case 6: + var value = new cc_arduino_cli_commands_v1_common_pb.PlatformReference; + reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.PlatformReference.deserializeBinaryFromReader); + msg.setBoardPlatform(value); + break; + case 7: + var value = new cc_arduino_cli_commands_v1_common_pb.PlatformReference; + reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.PlatformReference.deserializeBinaryFromReader); + msg.setBuildPlatform(value); + break; + case 8: + var value = new cc_arduino_cli_commands_v1_common_pb.TaskProgress; + reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.TaskProgress.deserializeBinaryFromReader); + msg.setProgress(value); + break; default: reader.skipField(); break; @@ -1096,6 +1114,30 @@ proto.cc.arduino.cli.commands.v1.CompileResponse.serializeBinaryToWriter = funct proto.cc.arduino.cli.commands.v1.ExecutableSectionSize.serializeBinaryToWriter ); } + f = message.getBoardPlatform(); + if (f != null) { + writer.writeMessage( + 6, + f, + cc_arduino_cli_commands_v1_common_pb.PlatformReference.serializeBinaryToWriter + ); + } + f = message.getBuildPlatform(); + if (f != null) { + writer.writeMessage( + 7, + f, + cc_arduino_cli_commands_v1_common_pb.PlatformReference.serializeBinaryToWriter + ); + } + f = message.getProgress(); + if (f != null) { + writer.writeMessage( + 8, + f, + cc_arduino_cli_commands_v1_common_pb.TaskProgress.serializeBinaryToWriter + ); + } }; @@ -1277,6 +1319,117 @@ proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.clearExecutableSectio }; +/** + * optional PlatformReference board_platform = 6; + * @return {?proto.cc.arduino.cli.commands.v1.PlatformReference} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.getBoardPlatform = function() { + return /** @type{?proto.cc.arduino.cli.commands.v1.PlatformReference} */ ( + jspb.Message.getWrapperField(this, cc_arduino_cli_commands_v1_common_pb.PlatformReference, 6)); +}; + + +/** + * @param {?proto.cc.arduino.cli.commands.v1.PlatformReference|undefined} value + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this +*/ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.setBoardPlatform = function(value) { + return jspb.Message.setWrapperField(this, 6, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.clearBoardPlatform = function() { + return this.setBoardPlatform(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.hasBoardPlatform = function() { + return jspb.Message.getField(this, 6) != null; +}; + + +/** + * optional PlatformReference build_platform = 7; + * @return {?proto.cc.arduino.cli.commands.v1.PlatformReference} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.getBuildPlatform = function() { + return /** @type{?proto.cc.arduino.cli.commands.v1.PlatformReference} */ ( + jspb.Message.getWrapperField(this, cc_arduino_cli_commands_v1_common_pb.PlatformReference, 7)); +}; + + +/** + * @param {?proto.cc.arduino.cli.commands.v1.PlatformReference|undefined} value + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this +*/ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.setBuildPlatform = function(value) { + return jspb.Message.setWrapperField(this, 7, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.clearBuildPlatform = function() { + return this.setBuildPlatform(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.hasBuildPlatform = function() { + return jspb.Message.getField(this, 7) != null; +}; + + +/** + * optional TaskProgress progress = 8; + * @return {?proto.cc.arduino.cli.commands.v1.TaskProgress} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.getProgress = function() { + return /** @type{?proto.cc.arduino.cli.commands.v1.TaskProgress} */ ( + jspb.Message.getWrapperField(this, cc_arduino_cli_commands_v1_common_pb.TaskProgress, 8)); +}; + + +/** + * @param {?proto.cc.arduino.cli.commands.v1.TaskProgress|undefined} value + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this +*/ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.setProgress = function(value) { + return jspb.Message.setWrapperField(this, 8, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.cc.arduino.cli.commands.v1.CompileResponse} returns this + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.clearProgress = function() { + return this.setProgress(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.cc.arduino.cli.commands.v1.CompileResponse.prototype.hasProgress = function() { + return jspb.Message.getField(this, 8) != null; +}; + + diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.d.ts b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.d.ts index 4427473a6..1c1ca38ca 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.d.ts +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.d.ts @@ -371,6 +371,9 @@ export class SupportedUserFieldsRequest extends jspb.Message { getProtocol(): string; setProtocol(value: string): SupportedUserFieldsRequest; + getAddress(): string; + setAddress(value: string): SupportedUserFieldsRequest; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): SupportedUserFieldsRequest.AsObject; @@ -387,6 +390,7 @@ export namespace SupportedUserFieldsRequest { instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject, fqbn: string, protocol: string, + address: string, } } diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.js index 8841575ad..87914c167 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/upload_pb.js @@ -2718,7 +2718,8 @@ proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.toObject = function( var f, obj = { instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f), fqbn: jspb.Message.getFieldWithDefault(msg, 2, ""), - protocol: jspb.Message.getFieldWithDefault(msg, 3, "") + protocol: jspb.Message.getFieldWithDefault(msg, 3, ""), + address: jspb.Message.getFieldWithDefault(msg, 4, "") }; if (includeInstance) { @@ -2768,6 +2769,10 @@ proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.deserializeBinaryFro var value = /** @type {string} */ (reader.readString()); msg.setProtocol(value); break; + case 4: + var value = /** @type {string} */ (reader.readString()); + msg.setAddress(value); + break; default: reader.skipField(); break; @@ -2819,6 +2824,13 @@ proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.serializeBinaryToWri f ); } + f = message.getAddress(); + if (f.length > 0) { + writer.writeString( + 4, + f + ); + } }; @@ -2895,6 +2907,24 @@ proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.prototype.setProtoco }; +/** + * optional string address = 4; + * @return {string} + */ +proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.prototype.getAddress = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "")); +}; + + +/** + * @param {string} value + * @return {!proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest} returns this + */ +proto.cc.arduino.cli.commands.v1.SupportedUserFieldsRequest.prototype.setAddress = function(value) { + return jspb.Message.setProto3StringField(this, 4, value); +}; + + diff --git a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb.js b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb.js index 7d6570b99..f20982617 100644 --- a/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb.js +++ b/arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb.js @@ -43,7 +43,10 @@ function deserialize_cc_arduino_cli_monitor_v1_StreamingOpenResponse(buffer_arg) } -// MonitorService provides services for boards monitor +// MonitorService provides services for boards monitor. +// DEPRECATION WARNING: MonitorService is deprecated and will be removed in a +// future release. Use ArduinoCoreService.Monitor and +// ArduinoCoreService.EnumerateMonitorPortSettings instead. var MonitorServiceService = exports['cc.arduino.cli.monitor.v1.MonitorService'] = { // Open a bidirectional monitor stream. This can be used to implement // something similar to the Arduino IDE's Serial Monitor. From 877c1a15591d0568fa0908c07edf375ce11c3f97 Mon Sep 17 00:00:00 2001 From: Silvano Cerza <3314350+silvanocerza@users.noreply.github.com> Date: Mon, 14 Feb 2022 10:12:18 +0100 Subject: [PATCH 22/40] Fix board options not shown for manually installed platforms (#826) --- .../src/browser/boards/boards-data-store.ts | 75 +++---------------- 1 file changed, 11 insertions(+), 64 deletions(-) diff --git a/arduino-ide-extension/src/browser/boards/boards-data-store.ts b/arduino-ide-extension/src/browser/boards/boards-data-store.ts index fea413eb0..d1a9de5d0 100644 --- a/arduino-ide-extension/src/browser/boards/boards-data-store.ts +++ b/arduino-ide-extension/src/browser/boards/boards-data-store.ts @@ -1,7 +1,6 @@ import { injectable, inject, named } from 'inversify'; import { ILogger } from '@theia/core/lib/common/logger'; import { deepClone } from '@theia/core/lib/common/objects'; -import { MaybePromise } from '@theia/core/lib/common/types'; import { Event, Emitter } from '@theia/core/lib/common/event'; import { FrontendApplicationContribution, @@ -11,7 +10,6 @@ import { notEmpty } from '../../common/utils'; import { BoardsService, ConfigOption, - Installable, BoardDetails, Programmer, } from '../../common/protocol'; @@ -36,16 +34,12 @@ export class BoardsDataStore implements FrontendApplicationContribution { onStart(): void { this.notificationCenter.onPlatformInstalled(async ({ item }) => { - const { installedVersion: version } = item; - if (!version) { - return; - } let shouldFireChanged = false; for (const fqbn of item.boards .map(({ fqbn }) => fqbn) .filter(notEmpty) .filter((fqbn) => !!fqbn)) { - const key = this.getStorageKey(fqbn, version); + const key = this.getStorageKey(fqbn); let data = await this.storageService.getData< ConfigOption[] | undefined >(key); @@ -72,33 +66,20 @@ export class BoardsDataStore implements FrontendApplicationContribution { async appendConfigToFqbn( fqbn: string | undefined, - boardsPackageVersion: MaybePromise< - Installable.Version | undefined - > = this.getBoardsPackageVersion(fqbn) ): Promise { if (!fqbn) { return undefined; } - - const { configOptions } = await this.getData(fqbn, boardsPackageVersion); + const { configOptions } = await this.getData(fqbn); return ConfigOption.decorate(fqbn, configOptions); } - async getData( - fqbn: string | undefined, - boardsPackageVersion: MaybePromise< - Installable.Version | undefined - > = this.getBoardsPackageVersion(fqbn) - ): Promise { + async getData(fqbn: string | undefined): Promise { if (!fqbn) { return BoardsDataStore.Data.EMPTY; } - const version = await boardsPackageVersion; - if (!version) { - return BoardsDataStore.Data.EMPTY; - } - const key = this.getStorageKey(fqbn, version); + const key = this.getStorageKey(fqbn); let data = await this.storageService.getData< BoardsDataStore.Data | undefined >(key, undefined); @@ -124,25 +105,16 @@ export class BoardsDataStore implements FrontendApplicationContribution { fqbn, selectedProgrammer, }: { fqbn: string; selectedProgrammer: Programmer }, - boardsPackageVersion: MaybePromise< - Installable.Version | undefined - > = this.getBoardsPackageVersion(fqbn) ): Promise { - const data = deepClone(await this.getData(fqbn, boardsPackageVersion)); + const data = deepClone(await this.getData(fqbn)); const { programmers } = data; if (!programmers.find((p) => Programmer.equals(selectedProgrammer, p))) { return false; } - const version = await boardsPackageVersion; - if (!version) { - return false; - } - await this.setData({ fqbn, data: { ...data, selectedProgrammer }, - version, }); this.fireChanged(); return true; @@ -153,12 +125,9 @@ export class BoardsDataStore implements FrontendApplicationContribution { fqbn, option, selectedValue, - }: { fqbn: string; option: string; selectedValue: string }, - boardsPackageVersion: MaybePromise< - Installable.Version | undefined - > = this.getBoardsPackageVersion(fqbn) + }: { fqbn: string; option: string; selectedValue: string } ): Promise { - const data = deepClone(await this.getData(fqbn, boardsPackageVersion)); + const data = deepClone(await this.getData(fqbn)); const { configOptions } = data; const configOption = configOptions.find((c) => c.option === option); if (!configOption) { @@ -176,12 +145,7 @@ export class BoardsDataStore implements FrontendApplicationContribution { if (!updated) { return false; } - const version = await boardsPackageVersion; - if (!version) { - return false; - } - - await this.setData({ fqbn, data, version }); + await this.setData({ fqbn, data }); this.fireChanged(); return true; } @@ -189,18 +153,16 @@ export class BoardsDataStore implements FrontendApplicationContribution { protected async setData({ fqbn, data, - version, }: { fqbn: string; data: BoardsDataStore.Data; - version: Installable.Version; }): Promise { - const key = this.getStorageKey(fqbn, version); + const key = this.getStorageKey(fqbn); return this.storageService.setData(key, data); } - protected getStorageKey(fqbn: string, version: Installable.Version): string { - return `.arduinoIDE-configOptions-${version}-${fqbn}`; + protected getStorageKey(fqbn: string): string { + return `.arduinoIDE-configOptions-${fqbn}`; } protected async getBoardDetailsSafe( @@ -231,21 +193,6 @@ export class BoardsDataStore implements FrontendApplicationContribution { protected fireChanged(): void { this.onChangedEmitter.fire(); } - - protected async getBoardsPackageVersion( - fqbn: string | undefined - ): Promise { - if (!fqbn) { - return undefined; - } - const boardsPackage = await this.boardsService.getContainerBoardPackage({ - fqbn, - }); - if (!boardsPackage) { - return undefined; - } - return boardsPackage.installedVersion; - } } export namespace BoardsDataStore { From 5ab3a747a6e8bf551b5c0e59a98154d387e0a200 Mon Sep 17 00:00:00 2001 From: Silvano Cerza <3314350+silvanocerza@users.noreply.github.com> Date: Mon, 14 Feb 2022 12:39:48 +0100 Subject: [PATCH 23/40] Add gRPC user agent (#834) --- arduino-ide-extension/src/node/grpc-client-provider.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arduino-ide-extension/src/node/grpc-client-provider.ts b/arduino-ide-extension/src/node/grpc-client-provider.ts index c4e5655c7..af5695dc4 100644 --- a/arduino-ide-extension/src/node/grpc-client-provider.ts +++ b/arduino-ide-extension/src/node/grpc-client-provider.ts @@ -1,4 +1,5 @@ import { inject, injectable, postConstruct } from 'inversify'; +import { app } from 'electron'; import { ILogger } from '@theia/core/lib/common/logger'; import { MaybePromise } from '@theia/core/lib/common/types'; import { ConfigServiceImpl } from './config-service-impl'; @@ -73,6 +74,7 @@ export abstract class GrpcClientProvider { return { 'grpc.max_send_message_length': 512 * 1024 * 1024, 'grpc.max_receive_message_length': 512 * 1024 * 1024, + 'grpc.primary_user_agent': `arduino-ide/${app.getVersion()}` }; } } From 9ecff86bbefe3a34549e0e546d95ee1ff3439f97 Mon Sep 17 00:00:00 2001 From: Silvano Cerza <3314350+silvanocerza@users.noreply.github.com> Date: Tue, 15 Feb 2022 16:52:13 +0100 Subject: [PATCH 24/40] Fix version retrieval in node process (#837) --- arduino-ide-extension/src/node/grpc-client-provider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arduino-ide-extension/src/node/grpc-client-provider.ts b/arduino-ide-extension/src/node/grpc-client-provider.ts index af5695dc4..8c1ff0dc3 100644 --- a/arduino-ide-extension/src/node/grpc-client-provider.ts +++ b/arduino-ide-extension/src/node/grpc-client-provider.ts @@ -1,5 +1,4 @@ import { inject, injectable, postConstruct } from 'inversify'; -import { app } from 'electron'; import { ILogger } from '@theia/core/lib/common/logger'; import { MaybePromise } from '@theia/core/lib/common/types'; import { ConfigServiceImpl } from './config-service-impl'; @@ -71,10 +70,11 @@ export abstract class GrpcClientProvider { protected abstract close(client: C): void; protected get channelOptions(): Record { + const pjson = require('../../package.json') || { "version": "0.0.0" } return { 'grpc.max_send_message_length': 512 * 1024 * 1024, 'grpc.max_receive_message_length': 512 * 1024 * 1024, - 'grpc.primary_user_agent': `arduino-ide/${app.getVersion()}` + 'grpc.primary_user_agent': `arduino-ide/${pjson.version}` }; } } From f660058c7550aaeeab81a6bc59f060d1ca2b901a Mon Sep 17 00:00:00 2001 From: Alberto Iannaccone Date: Tue, 15 Feb 2022 18:01:19 +0100 Subject: [PATCH 25/40] Check for IDE update at startup (#797) * Remove check for updates on startup setting * Remove useless exported function * Update template-package.json used to package IDE * Add function to get channel file during packaging step * Add updates check * move ide updater on backend * configure updater options * add auto update preferences * TMP check updates on start and download * index on check-update-startup: fcb8f6e TMP check updates on start and download * set version to skip on local storage * add IDE setting to toggle update check on start-up * comment out check for updates on startup and auto update settings * Update Theia to 1.22.1 * updated CI * download changelog and show it in IDE updater dialog * remove useless file * remove useless code * add i18n to updater dialog * fix i18n * refactor UpdateInfo typing * add macos zip to artifacts * Simply use `--ignore-engines` * Use correct --ignore-engines * Fix semver#valid call * Use C++17 * updated documentation * add update channel preference * update updater url * updated documentation * Fix the C++ version * Build flag for cpp * add disclaimer with correct node version * Update `electron-builder` * Fix `Electron.Menu` issue * Skip electron rebuild * Rebuild native dependencies beforehand * Use resolutions section * Update template-package.json as well * move ide-updater to electron application * refactor ide-updater service * update yarn.lock * update i18n * Revert "Add gRPC user agent (#834)" This reverts commit 5ab3a747a6e8bf551b5c0e59a98154d387e0a200. * fix ide download url * update latest file in CI * fix i18n check Co-authored-by: Silvano Cerza Co-authored-by: Francesco Stasi Co-authored-by: Mark Sujew --- .github/workflows/build.yml | 17 +- arduino-ide-extension/package.json | 2 + .../scripts/compose-changelog.js | 67 +- .../browser/arduino-frontend-contribution.tsx | 31 +- .../browser/arduino-ide-frontend-module.ts | 62 +- .../src/browser/arduino-preferences.ts | 26 +- .../src/browser/components/ProgressBar.tsx | 28 + .../ide-updater/ide-updater-component.tsx | 159 +++++ .../ide-updater/ide-updater-dialog.tsx | 166 +++++ .../dialogs/settings/settings-component.tsx | 78 +-- .../src/browser/dialogs/settings/settings.tsx | 41 +- .../ide-updater/ide-updater-client-impl.ts | 40 ++ .../ide-updater/ide-updater-commands.ts | 71 +++ .../src/browser/style/ide-logo.png | Bin 0 -> 13170 bytes .../src/browser/style/ide-updater-dialog.css | 67 ++ .../src/browser/style/index.css | 2 + .../src/browser/style/progress-bar.css | 32 + .../src/common/protocol/ide-updater.ts | 71 +++ .../arduino-electron-main-module.ts | 30 +- .../src/node/grpc-client-provider.ts | 4 +- .../src/node/ide-updater/ide-updater-impl.ts | 128 ++++ browser-app/package.json | 4 +- electron-app/package.json | 2 +- electron/build/template-package.json | 10 +- electron/packager/config.js | 200 +++--- electron/packager/index.js | 9 +- electron/packager/utils.js | 289 +++++---- electron/packager/yarn.lock | 2 +- i18n/en.json | 17 +- yarn.lock | 598 +++++++++++++++++- 30 files changed, 1911 insertions(+), 342 deletions(-) create mode 100644 arduino-ide-extension/src/browser/components/ProgressBar.tsx create mode 100644 arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-component.tsx create mode 100644 arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-dialog.tsx create mode 100644 arduino-ide-extension/src/browser/ide-updater/ide-updater-client-impl.ts create mode 100644 arduino-ide-extension/src/browser/ide-updater/ide-updater-commands.ts create mode 100644 arduino-ide-extension/src/browser/style/ide-logo.png create mode 100644 arduino-ide-extension/src/browser/style/ide-updater-dialog.css create mode 100644 arduino-ide-extension/src/browser/style/progress-bar.css create mode 100644 arduino-ide-extension/src/common/protocol/ide-updater.ts create mode 100644 arduino-ide-extension/src/node/ide-updater/ide-updater-impl.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 651d77e9a..d0bdd278a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -60,7 +60,9 @@ jobs: if [ $IS_FORK = true ]; then echo "Skipping the app signing: building from a fork." else + export BUILD_SUFFIX="linux"; if [ "${{ runner.OS }}" = "macOS" ]; then + export BUILD_SUFFIX="mac"; export CSC_LINK="${{ runner.temp }}/signing_certificate.p12" # APPLE_SIGNING_CERTIFICATE_P12 secret was produced by following the procedure from: # https://www.kencochrane.com/2020/08/01/build-and-sign-golang-binaries-for-macos-with-github-actions/#exporting-the-developer-certificate @@ -69,6 +71,7 @@ jobs: export CSC_KEY_PASSWORD="${{ secrets.KEYCHAIN_PASSWORD }}" elif [ "${{ runner.OS }}" = "Windows" ]; then + export BUILD_SUFFIX=""; export CSC_LINK="${{ runner.temp }}/signing_certificate.pfx" npm config set msvs_version 2017 --global echo "${{ secrets.WINDOWS_SIGNING_CERTIFICATE_PFX }}" | base64 --decode > "$CSC_LINK" @@ -78,7 +81,15 @@ jobs: fi yarn --cwd ./electron/packager/ - yarn --cwd ./electron/packager/ package + yarn --cwd ./electron/packager/ package + + export BUILD_PREFIX="stable" + if [ "$IS_NIGHTLY" = true ]; then + export BUILD_PREFIX="nightly" + fi + + mv electron/build/dist/latest-$BUILD_SUFFIX.yml electron/build/dist/$BUILD_PREFIX-$BUILD_SUFFIX.yml + rm electron/build/dist/alpha* electron/build/dist/beta* - name: Upload [GitHub Actions] uses: actions/upload-artifact@v2 @@ -98,7 +109,9 @@ jobs: - path: '*Linux_64bit.zip' name: Linux_X86-64 - path: '*macOS_64bit.dmg' - name: macOS + name: macOS_dmg + - path: '*macOS_64bit.zip' + name: macOS_zip - path: '*Windows_64bit.exe' name: Windows_X86-64_interactive_installer - path: '*Windows_64bit.msi' diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index 2d6ff2b63..3f21181c1 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -65,6 +65,7 @@ "css-element-queries": "^1.2.0", "dateformat": "^3.0.3", "deepmerge": "2.0.1", + "electron-updater": "^4.6.5", "fuzzy": "^0.1.3", "glob": "^7.1.6", "google-protobuf": "^3.11.4", @@ -82,6 +83,7 @@ "ps-tree": "^1.2.0", "query-string": "^7.0.1", "react-disable": "^0.1.0", + "react-markdown": "^8.0.0", "react-select": "^3.0.4", "react-tabs": "^3.1.2", "react-window": "^1.8.6", diff --git a/arduino-ide-extension/scripts/compose-changelog.js b/arduino-ide-extension/scripts/compose-changelog.js index 36b5c94c0..aba9dae46 100755 --- a/arduino-ide-extension/scripts/compose-changelog.js +++ b/arduino-ide-extension/scripts/compose-changelog.js @@ -1,36 +1,42 @@ // @ts-check - (async () => { const { Octokit } = require('@octokit/rest'); - const fs = require("fs"); - const path = require("path"); + const fs = require('fs'); + const path = require('path'); const octokit = new Octokit({ userAgent: 'Arduino IDE compose-changelog.js', }); - const response = await octokit.rest.repos.listReleases({ - owner: 'arduino', - repo: 'arduino-ide', - }).catch(err => { - console.error(err); - process.exit(1); - }) + const response = await octokit.rest.repos + .listReleases({ + owner: 'arduino', + repo: 'arduino-ide', + }) + .catch((err) => { + console.error(err); + process.exit(1); + }); const releases = response.data; - let fullChangelog = releases.reduce((acc, item) => { + let fullChangelog = releases.reduce((acc, item, index) => { // Process each line separately - const body = item.body.split('\n').map(processLine).join('\n') + const body = item.body.split('\n').map(processLine).join('\n'); // item.name is the name of the release changelog - return acc + `# ${item.name}\n\n${body}\n\n---\n\n`; + return ( + acc + + `## ${item.name}\n\n${body}${ + index !== releases.length - 1 ? '\n\n---\n\n' : '\n' + }` + ); }, ''); - const args = process.argv.slice(2) + const args = process.argv.slice(2); if (args.length == 0) { - console.error("Missing argument to destination file") - process.exit(1) + console.error('Missing argument to destination file'); + process.exit(1); } const changelogFile = path.resolve(args[0]); @@ -38,19 +44,18 @@ changelogFile, fullChangelog, { - flag: "w+", + flag: 'w+', }, - err => { + (err) => { if (err) { console.error(err); process.exit(1); } - console.log("Changelog written to", changelogFile); + console.log('Changelog written to', changelogFile); } - ) + ); })(); - // processLine applies different substitutions to line string. // We're assuming that there are no more than one substitution // per line to be applied. @@ -61,7 +66,8 @@ const processLine = (line) => { // * [#123](https://github.com/arduino/arduino-ide/pull/123/) // * [#123](https://github.com/arduino/arduino-ide/issues/123/) // If it does return the line as is. - let r = /(\(|\[)#\d+(\)|\])(\(|\[)https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?(\)|\])/gm; + let r = + /(\(|\[)#\d+(\)|\])(\(|\[)https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?(\)|\])/gm; if (r.test(line)) { return line; } @@ -70,9 +76,12 @@ const processLine = (line) => { // * #123 // If it does it's changed to: // * [#123](https://github.com/arduino/arduino-ide/pull/123) - r = /#(\d+)/gm; + r = /(? { // * [#123](https://github.com/arduino/arduino-ide/issues/123) // * [#123](https://github.com/arduino/arduino-ide/pull/123/) // * [#123](https://github.com/arduino/arduino-ide/issues/123/) - r = /(https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?)/gm; + r = + /(https:\/\/github\.com\/arduino\/arduino-ide\/(pull|issues)\/(\d+)\/?)/gm; if (r.test(line)) { return line.replace(r, `[#$3]($1)`); } @@ -95,11 +105,12 @@ const processLine = (line) => { // * https://github.com/arduino/arduino-ide/compare/2.0.0-rc2...2.0.0-rc3/ // If it does it's changed to: // * [`2.0.0-rc2...2.0.0-rc3`](https://github.com/arduino/arduino-ide/compare/2.0.0-rc2...2.0.0-rc3) - r = /(https:\/\/github\.com\/arduino\/arduino-ide\/compare\/([^\/]*))\/?\s?/gm; + r = + /(https:\/\/github\.com\/arduino\/arduino-ide\/compare\/([^\/]*))\/?\s?/gm; if (r.test(line)) { - return line.replace(r, '[`$2`]($1)');; + return line.replace(r, '[`$2`]($1)'); } // If nothing matches just return the line as is return line; -} +}; diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index b493bd3bf..7b0184bdd 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -68,8 +68,12 @@ import { ArduinoPreferences } from './arduino-preferences'; import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-client-impl'; import { SaveAsSketch } from './contributions/save-as-sketch'; import { SketchbookWidgetContribution } from './widgets/sketchbook/sketchbook-widget-contribution'; +import { IDEUpdaterCommands } from './ide-updater/ide-updater-commands'; +import { IDEUpdaterDialog } from './dialogs/ide-updater/ide-updater-dialog'; +import { IDEUpdater } from '../common/protocol/ide-updater'; const INIT_LIBS_AND_PACKAGES = 'initializedLibsAndPackages'; +export const SKIP_IDE_VERSION = 'skipIDEVersion'; @injectable() export class ArduinoFrontendContribution @@ -78,8 +82,7 @@ export class ArduinoFrontendContribution TabBarToolbarContribution, CommandContribution, MenuContribution, - ColorContribution -{ + ColorContribution { @inject(ILogger) protected logger: ILogger; @@ -157,6 +160,15 @@ export class ArduinoFrontendContribution @inject(LocalStorageService) protected readonly localStorageService: LocalStorageService; + @inject(IDEUpdaterCommands) + protected readonly updater: IDEUpdaterCommands; + + @inject(IDEUpdaterDialog) + protected readonly updaterDialog: IDEUpdaterDialog; + + @inject(IDEUpdater) + protected readonly updaterService: IDEUpdater; + protected invalidConfigPopup: | Promise | undefined; @@ -251,7 +263,7 @@ export class ArduinoFrontendContribution }); } - onStart(app: FrontendApplication): void { + async onStart(app: FrontendApplication): Promise { // Initialize all `pro-mode` widgets. This is a NOOP if in normal mode. for (const viewContribution of [ this.fileNavigatorContributions, @@ -266,6 +278,19 @@ export class ArduinoFrontendContribution viewContribution.initializeLayout(app); } } + + this.updaterService.init( + this.arduinoPreferences.get('arduino.ide.updateChannel') + ); + this.updater.checkForUpdates().then(async (updateInfo) => { + if (!updateInfo) return; + const versionToSkip = await this.localStorageService.getData( + SKIP_IDE_VERSION + ); + if (versionToSkip === updateInfo.version) return; + this.updaterDialog.open(updateInfo); + }); + const start = async ({ selectedBoard }: BoardsConfig.Config) => { if (selectedBoard) { const { name, fqbn } = selectedBoard; diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index 700012bbd..5ceae9179 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -262,6 +262,19 @@ import { UserFieldsDialogWidget, } from './dialogs/user-fields/user-fields-dialog'; import { nls } from '@theia/core/lib/common'; +import { IDEUpdaterCommands } from './ide-updater/ide-updater-commands'; +import { + IDEUpdater, + IDEUpdaterClient, + IDEUpdaterPath, +} from '../common/protocol/ide-updater'; +import { IDEUpdaterClientImpl } from './ide-updater/ide-updater-client-impl'; +import { + IDEUpdaterDialog, + IDEUpdaterDialogProps, + IDEUpdaterDialogWidget, +} from './dialogs/ide-updater/ide-updater-dialog'; +import { ElectronIpcConnectionProvider } from '@theia/core/lib/electron-browser/messaging/electron-ipc-connection-provider'; const ElementQueries = require('css-element-queries/src/ElementQueries'); @@ -407,8 +420,9 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { bind(SerialService) .toDynamicValue((context) => { const connection = context.container.get(WebSocketConnectionProvider); - const client = - context.container.get(SerialServiceClient); + const client = context.container.get( + SerialServiceClient + ); return connection.createProxy(SerialServicePath, client); }) .inSingletonScope(); @@ -472,12 +486,11 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { .inSingletonScope(); rebind(TheiaEditorWidgetFactory).to(EditorWidgetFactory).inSingletonScope(); rebind(TabBarToolbarFactory).toFactory( - ({ container: parentContainer }) => - () => { - const container = parentContainer.createChild(); - container.bind(TabBarToolbar).toSelf().inSingletonScope(); - return container.get(TabBarToolbar); - } + ({ container: parentContainer }) => () => { + const container = parentContainer.createChild(); + container.bind(TabBarToolbar).toSelf().inSingletonScope(); + return container.get(TabBarToolbar); + } ); bind(OutputWidget).toSelf().inSingletonScope(); rebind(TheiaOutputWidget).toService(OutputWidget); @@ -642,13 +655,15 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { // Enable the dirty indicator on uncloseable widgets. rebind(TabBarRendererFactory).toFactory((context) => () => { - const contextMenuRenderer = - context.container.get(ContextMenuRenderer); + const contextMenuRenderer = context.container.get( + ContextMenuRenderer + ); const decoratorService = context.container.get( TabBarDecoratorService ); - const iconThemeService = - context.container.get(IconThemeService); + const iconThemeService = context.container.get( + IconThemeService + ); return new TabBarRenderer( contextMenuRenderer, decoratorService, @@ -756,9 +771,32 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { title: 'UploadCertificate', }); + bind(IDEUpdaterDialogWidget).toSelf().inSingletonScope(); + bind(IDEUpdaterDialog).toSelf().inSingletonScope(); + bind(IDEUpdaterDialogProps).toConstantValue({ + title: 'IDEUpdater', + }); + bind(UserFieldsDialogWidget).toSelf().inSingletonScope(); bind(UserFieldsDialog).toSelf().inSingletonScope(); bind(UserFieldsDialogProps).toConstantValue({ title: 'UserFields', }); + + bind(IDEUpdaterCommands).toSelf().inSingletonScope(); + bind(CommandContribution).toService(IDEUpdaterCommands); + + // Frontend binding for the IDE Updater service + bind(IDEUpdaterClientImpl).toSelf().inSingletonScope(); + bind(IDEUpdaterClient).toService(IDEUpdaterClientImpl); + bind(IDEUpdater) + .toDynamicValue((context) => { + const client = context.container.get(IDEUpdaterClientImpl); + return ElectronIpcConnectionProvider.createProxy( + context.container, + IDEUpdaterPath, + client + ); + }) + .inSingletonScope(); }); diff --git a/arduino-ide-extension/src/browser/arduino-preferences.ts b/arduino-ide-extension/src/browser/arduino-preferences.ts index 5e1013a1d..910d724bc 100644 --- a/arduino-ide-extension/src/browser/arduino-preferences.ts +++ b/arduino-ide-extension/src/browser/arduino-preferences.ts @@ -9,6 +9,11 @@ import { import { nls } from '@theia/core/lib/common'; import { CompilerWarningLiterals, CompilerWarnings } from '../common/protocol'; +export enum UpdateChannel { + Stable = 'stable', + Nightly = 'nightly', +} + export const ArduinoConfigSchema: PreferenceSchema = { type: 'object', properties: { @@ -64,13 +69,14 @@ export const ArduinoConfigSchema: PreferenceSchema = { ), default: 0, }, - 'arduino.ide.autoUpdate': { - type: 'boolean', + 'arduino.ide.updateChannel': { + type: 'string', + enum: Object.values(UpdateChannel) as UpdateChannel[], + default: UpdateChannel.Stable, description: nls.localize( - 'arduino/preferences/ide.autoUpdate', - 'True to enable automatic update checks. The IDE will check for updates automatically and periodically.' + 'arduino/preferences/ide.updateChannel', + "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build." ), - default: true, }, 'arduino.board.certificates': { type: 'string', @@ -171,7 +177,7 @@ export interface ArduinoConfiguration { 'arduino.upload.verify': boolean; 'arduino.window.autoScale': boolean; 'arduino.window.zoomLevel': number; - 'arduino.ide.autoUpdate': boolean; + 'arduino.ide.updateChannel': UpdateChannel; 'arduino.board.certificates': string; 'arduino.sketchbook.showAllFiles': boolean; 'arduino.cloud.enabled': boolean; @@ -188,16 +194,10 @@ export interface ArduinoConfiguration { export const ArduinoPreferences = Symbol('ArduinoPreferences'); export type ArduinoPreferences = PreferenceProxy; -export function createArduinoPreferences( - preferences: PreferenceService -): ArduinoPreferences { - return createPreferenceProxy(preferences, ArduinoConfigSchema); -} - export function bindArduinoPreferences(bind: interfaces.Bind): void { bind(ArduinoPreferences).toDynamicValue((ctx) => { const preferences = ctx.container.get(PreferenceService); - return createArduinoPreferences(preferences); + return createPreferenceProxy(preferences, ArduinoConfigSchema); }); bind(PreferenceContribution).toConstantValue({ schema: ArduinoConfigSchema, diff --git a/arduino-ide-extension/src/browser/components/ProgressBar.tsx b/arduino-ide-extension/src/browser/components/ProgressBar.tsx new file mode 100644 index 000000000..f91c9f991 --- /dev/null +++ b/arduino-ide-extension/src/browser/components/ProgressBar.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; + +export type ProgressBarProps = { + percent?: number; + showPercentage?: boolean; +}; + +export default function ProgressBar({ + percent = 0, + showPercentage = false, +}: ProgressBarProps): React.ReactElement { + const roundedPercent = Math.round(percent); + return ( +
+
+
+
+ {showPercentage && ( +
+
{roundedPercent}%
+
+ )} +
+ ); +} diff --git a/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-component.tsx b/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-component.tsx new file mode 100644 index 000000000..3c1c4911e --- /dev/null +++ b/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-component.tsx @@ -0,0 +1,159 @@ +import { nls } from '@theia/core/lib/common'; +import { shell } from 'electron'; +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; +import ReactMarkdown from 'react-markdown'; +import { ProgressInfo, UpdateInfo } from '../../../common/protocol/ide-updater'; +import ProgressBar from '../../components/ProgressBar'; + +export type IDEUpdaterComponentProps = { + updateInfo: UpdateInfo; + downloadFinished?: boolean; + downloadStarted?: boolean; + progress?: ProgressInfo; + error?: Error; + onDownload: () => void; + onClose: () => void; + onSkipVersion: () => void; + onCloseAndInstall: () => void; +}; + +export const IDEUpdaterComponent = ({ + updateInfo: { version, releaseNotes }, + downloadStarted = false, + downloadFinished = false, + progress, + error, + onDownload, + onClose, + onSkipVersion, + onCloseAndInstall, +}: IDEUpdaterComponentProps): React.ReactElement => { + const changelogDivRef = React.useRef() as React.MutableRefObject< + HTMLDivElement + >; + React.useEffect(() => { + if (!!releaseNotes) { + let changelog: string; + if (typeof releaseNotes === 'string') changelog = releaseNotes; + else + changelog = releaseNotes.reduce((acc, item) => { + return item.note ? (acc += `${item.note}\n\n`) : acc; + }, ''); + ReactDOM.render( + ( + href && shell.openExternal(href)} {...props}> + {children} + + ), + }} + > + {changelog} + , + changelogDivRef.current + ); + } + }, [releaseNotes]); + const closeButton = ( + + ); + + return ( +
+ {downloadFinished ? ( +
+
+ {nls.localize( + 'arduino/ide-updater/versionDownloaded', + 'Arduino IDE {0} has been downloaded.', + version + )} +
+
+ {nls.localize( + 'arduino/ide-updater/closeToInstallNotice', + 'Close the software and install the update on your machine.' + )} +
+
+ {closeButton} + +
+
+ ) : downloadStarted ? ( +
+
+ {nls.localize( + 'arduino/ide-updater/downloadingNotice', + 'Downloading the latest version of the Arduino IDE.' + )} +
+ +
+ ) : ( +
+
+
+
+
+
+
+ {nls.localize( + 'arduino/ide-updater/updateAvailable', + 'Update Available' + )} +
+
+
+ {nls.localize( + 'arduino/ide-updater/newVersionAvailable', + 'A new version of Arduino IDE ({0}) is available for download.', + version + )} +
+ {releaseNotes && ( +
+
+
+ )} +
+ +
+ {closeButton} + +
+
+
+ )} + {!!error &&
{error}
} +
+ ); +}; diff --git a/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-dialog.tsx b/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-dialog.tsx new file mode 100644 index 000000000..56b8c84f5 --- /dev/null +++ b/arduino-ide-extension/src/browser/dialogs/ide-updater/ide-updater-dialog.tsx @@ -0,0 +1,166 @@ +import * as React from 'react'; +import { inject, injectable } from 'inversify'; +import { DialogProps } from '@theia/core/lib/browser/dialogs'; +import { AbstractDialog } from '../../theia/dialogs/dialogs'; +import { Widget } from '@phosphor/widgets'; +import { Message } from '@phosphor/messaging'; +import { ReactWidget } from '@theia/core/lib/browser/widgets/react-widget'; +import { nls } from '@theia/core'; +import { IDEUpdaterComponent } from './ide-updater-component'; +import { IDEUpdaterCommands } from '../../ide-updater/ide-updater-commands'; +import { + IDEUpdaterClient, + ProgressInfo, + UpdateInfo, +} from '../../../common/protocol/ide-updater'; +import { LocalStorageService } from '@theia/core/lib/browser'; +import { SKIP_IDE_VERSION } from '../../arduino-frontend-contribution'; + +@injectable() +export class IDEUpdaterDialogWidget extends ReactWidget { + protected isOpen = new Object(); + updateInfo: UpdateInfo; + progressInfo: ProgressInfo | undefined; + error: Error | undefined; + downloadFinished: boolean; + downloadStarted: boolean; + onClose: () => void; + + @inject(IDEUpdaterCommands) + protected readonly updater: IDEUpdaterCommands; + + @inject(IDEUpdaterClient) + protected readonly updaterClient: IDEUpdaterClient; + + @inject(LocalStorageService) + protected readonly localStorageService: LocalStorageService; + + init(updateInfo: UpdateInfo, onClose: () => void): void { + this.updateInfo = updateInfo; + this.progressInfo = undefined; + this.error = undefined; + this.downloadStarted = false; + this.downloadFinished = false; + this.onClose = onClose; + + this.updaterClient.onError((e) => { + this.error = e; + this.update(); + }); + this.updaterClient.onDownloadProgressChanged((e) => { + this.progressInfo = e; + this.update(); + }); + this.updaterClient.onDownloadFinished((e) => { + this.downloadFinished = true; + this.update(); + }); + } + + async onSkipVersion(): Promise { + this.localStorageService.setData( + SKIP_IDE_VERSION, + this.updateInfo.version + ); + this.close(); + } + + close(): void { + super.close(); + this.onClose(); + } + + onDispose(): void { + if (this.downloadStarted && !this.downloadFinished) + this.updater.stopDownload(); + } + + async onDownload(): Promise { + this.progressInfo = undefined; + this.downloadStarted = true; + this.error = undefined; + this.updater.downloadUpdate(); + this.update(); + } + + onCloseAndInstall(): void { + this.updater.quitAndInstall(); + } + + protected render(): React.ReactNode { + return !!this.updateInfo ? ( +
+ + + ) : null; + } +} + +@injectable() +export class IDEUpdaterDialogProps extends DialogProps {} + +@injectable() +export class IDEUpdaterDialog extends AbstractDialog { + @inject(IDEUpdaterDialogWidget) + protected readonly widget: IDEUpdaterDialogWidget; + + constructor( + @inject(IDEUpdaterDialogProps) + protected readonly props: IDEUpdaterDialogProps + ) { + super({ + title: nls.localize( + 'arduino/updater/ideUpdaterDialog', + 'Software Update' + ), + }); + this.contentNode.classList.add('ide-updater-dialog'); + this.acceptButton = undefined; + } + + get value(): UpdateInfo { + return this.widget.updateInfo; + } + + protected onAfterAttach(msg: Message): void { + if (this.widget.isAttached) { + Widget.detach(this.widget); + } + Widget.attach(this.widget, this.contentNode); + super.onAfterAttach(msg); + this.update(); + } + + async open( + data: UpdateInfo | undefined = undefined + ): Promise { + if (data && data.version) { + this.widget.init(data, this.close.bind(this)); + return super.open(); + } + } + + protected onUpdateRequest(msg: Message): void { + super.onUpdateRequest(msg); + this.widget.update(); + } + + protected onActivateRequest(msg: Message): void { + super.onActivateRequest(msg); + this.widget.activate(); + } + + close(): void { + this.widget.dispose(); + super.close(); + } +} diff --git a/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx b/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx index 62c166c5e..e7fa7a060 100644 --- a/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx +++ b/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx @@ -260,18 +260,6 @@ export class SettingsComponent extends React.Component< 'Verify code after upload' )} -