Update Theia, CLI and LS (#610)

* Update Theia to 1.19.0

* update CLI to 0.20.0-rc3

* Add language selector to settings

* updated language server and vscode-arduino-tools

* update Language Server flags

* get cli port from config

* force native menu on windows

* pinned Language Server to rc2

* fix search icon

* update CLI version
This commit is contained in:
Francesco Stasi 2021-11-29 15:54:13 +01:00 committed by GitHub
parent 6e34a27b7e
commit dd76f9180c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
97 changed files with 1437 additions and 1310 deletions

View File

@ -21,22 +21,22 @@
"dependencies": {
"arduino-serial-plotter-webapp": "0.0.15",
"@grpc/grpc-js": "^1.3.7",
"@theia/application-package": "1.18.0",
"@theia/core": "1.18.0",
"@theia/editor": "1.18.0",
"@theia/editor-preview": "1.18.0",
"@theia/filesystem": "1.18.0",
"@theia/git": "1.18.0",
"@theia/keymaps": "1.18.0",
"@theia/markers": "1.18.0",
"@theia/monaco": "1.18.0",
"@theia/navigator": "1.18.0",
"@theia/outline-view": "1.18.0",
"@theia/output": "1.18.0",
"@theia/preferences": "1.18.0",
"@theia/search-in-workspace": "1.18.0",
"@theia/terminal": "1.18.0",
"@theia/workspace": "1.18.0",
"@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",
"@tippyjs/react": "^4.2.5",
"@types/atob": "^2.1.2",
"@types/auth0-js": "^9.14.0",
@ -149,7 +149,7 @@
],
"arduino": {
"cli": {
"version": "0.20.0"
"version": "0.20.1"
},
"fwuploader": {
"version": "2.0.0"

View File

@ -4,69 +4,78 @@
// - https://downloads.arduino.cc/arduino-language-server/clangd/clangd_${VERSION}_${SUFFIX}
(() => {
const DEFAULT_ALS_VERSION = '0.5.0-rc2';
const DEFAULT_CLANGD_VERSION = 'snapshot_20210124';
const DEFAULT_ALS_VERSION = 'nightly';
const DEFAULT_CLANGD_VERSION = 'snapshot_20210124';
const path = require('path');
const shell = require('shelljs');
const downloader = require('./downloader');
const path = require('path');
const shell = require('shelljs');
const downloader = require('./downloader');
const yargs = require('yargs')
.option('ls-version', {
alias: 'lv',
default: DEFAULT_ALS_VERSION,
describe: `The version of the 'arduino-language-server' to download. Defaults to ${DEFAULT_ALS_VERSION}.`,
})
.option('clangd-version', {
alias: 'cv',
default: DEFAULT_CLANGD_VERSION,
choices: ['snapshot_20210124'],
describe: `The version of 'clangd' to download. Defaults to ${DEFAULT_CLANGD_VERSION}.`,
})
.option('force-download', {
alias: 'fd',
default: false,
describe: `If set, this script force downloads the 'arduino-language-server' even if it already exists on the file system.`,
})
.version(false)
.parse();
const yargs = require('yargs')
.option('ls-version', {
alias: 'lv',
default: DEFAULT_ALS_VERSION,
choices: ['nightly'],
describe: `The version of the 'arduino-language-server' to download. Defaults to ${DEFAULT_ALS_VERSION}.`
})
.option('clangd-version', {
alias: 'cv',
default: DEFAULT_CLANGD_VERSION,
choices: ['snapshot_20210124'],
describe: `The version of 'clangd' to download. Defaults to ${DEFAULT_CLANGD_VERSION}.`
})
.option('force-download', {
alias: 'fd',
default: false,
describe: `If set, this script force downloads the 'arduino-language-server' even if it already exists on the file system.`
})
.version(false).parse();
const alsVersion = yargs['ls-version'];
const clangdVersion = yargs['clangd-version'];
const force = yargs['force-download'];
const { platform, arch } = process;
const alsVersion = yargs['ls-version'];
const clangdVersion = yargs['clangd-version']
const force = yargs['force-download'];
const { platform, arch } = process;
const build = path.join(__dirname, '..', 'build');
const lsExecutablePath = path.join(
build,
`arduino-language-server${platform === 'win32' ? '.exe' : ''}`
);
const build = path.join(__dirname, '..', 'build');
const lsExecutablePath = path.join(build, `arduino-language-server${platform === 'win32' ? '.exe' : ''}`);
let clangdExecutablePath, lsSuffix, clangdPrefix;
switch (platform) {
case 'darwin':
clangdExecutablePath = path.join(build, 'bin', 'clangd');
lsSuffix = 'macOS_64bit.tar.gz';
clangdPrefix = 'mac';
break;
case 'linux':
clangdExecutablePath = path.join(build, 'bin', 'clangd');
lsSuffix = 'Linux_64bit.tar.gz';
clangdPrefix = 'linux';
break;
case 'win32':
clangdExecutablePath = path.join(build, 'bin', 'clangd.exe');
lsSuffix = 'Windows_64bit.zip';
clangdPrefix = 'windows';
break;
}
if (!lsSuffix) {
shell.echo(
`The arduino-language-server is not available for ${platform} ${arch}.`
);
shell.exit(1);
}
let clangdExecutablePath, lsSuffix, clangdPrefix;
switch (platform) {
case 'darwin':
clangdExecutablePath = path.join(build, 'bin', 'clangd')
lsSuffix = 'macOS_amd64.zip';
clangdPrefix = 'mac';
break;
case 'linux':
clangdExecutablePath = path.join(build, 'bin', 'clangd')
lsSuffix = 'Linux_amd64.zip';
clangdPrefix = 'linux'
break;
case 'win32':
clangdExecutablePath = path.join(build, 'bin', 'clangd.exe')
lsSuffix = 'Windows_amd64.zip';
clangdPrefix = 'windows';
break;
}
if (!lsSuffix) {
shell.echo(`The arduino-language-server is not available for ${platform} ${arch}.`);
shell.exit(1);
}
const alsUrl = `https://downloads.arduino.cc/arduino-language-server/${alsVersion === 'nightly' ? 'nightly/arduino-language-server' : 'arduino-language-server_' + alsVersion}_${lsSuffix}`;
downloader.downloadUnzipAll(alsUrl, build, lsExecutablePath, force);
const clangdUrl = `https://downloads.arduino.cc/arduino-language-server/clangd/clangd-${clangdPrefix}-${clangdVersion}.zip`;
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.
const alsUrl = `https://downloads.arduino.cc/arduino-language-server/${
alsVersion === 'nightly'
? 'nightly/arduino-language-server'
: 'arduino-language-server_' + alsVersion
}_${lsSuffix}`;
downloader.downloadUnzipAll(alsUrl, build, lsExecutablePath, force);
const clangdUrl = `https://downloads.arduino.cc/arduino-language-server/clangd/clangd-${clangdPrefix}-${clangdVersion}.zip`;
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.
})();

View File

@ -1,3 +1,13 @@
import { inject, injectable, postConstruct } from 'inversify';
import * as React from 'react';
import { remote } from 'electron';
import {
BoardsService,
Port,
SketchesService,
ExecutableService,
Sketch,
} from '../common/protocol';
import { Mutex } from 'async-mutex';
import {
MAIN_MENU_BAR,
@ -13,7 +23,7 @@ import {
StatusBar,
StatusBarAlignment,
} from '@theia/core/lib/browser';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
@ -40,16 +50,10 @@ import { OutputContribution } from '@theia/output/lib/browser/output-contributio
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
import { TerminalMenus } from '@theia/terminal/lib/browser/terminal-frontend-contribution';
import { inject, injectable, postConstruct } from 'inversify';
import * as React from 'react';
import { remote } from 'electron';
import {
BoardsService,
Port,
SketchesService,
ExecutableService,
Sketch,
} from '../common/protocol';
import { HostedPluginSupport } from '@theia/plugin-ext/lib/hosted/browser/hosted-plugin';
import { FileService } from '@theia/filesystem/lib/browser/file-service';
import { FileChangeType } from '@theia/filesystem/lib/browser';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { ConfigService } from '../common/protocol/config-service';
import { ArduinoCommands } from './arduino-commands';
import { BoardsConfig } from './boards/boards-config';
@ -60,13 +64,9 @@ import { EditorMode } from './editor-mode';
import { ArduinoMenus } from './menu/arduino-menus';
import { MonitorViewContribution } from './serial/monitor/monitor-view-contribution';
import { ArduinoToolbar } from './toolbar/arduino-toolbar';
import { HostedPluginSupport } from '@theia/plugin-ext/lib/hosted/browser/hosted-plugin';
import { FileService } from '@theia/filesystem/lib/browser/file-service';
import { ArduinoPreferences } from './arduino-preferences';
import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-client-impl';
import { SaveAsSketch } from './contributions/save-as-sketch';
import { FileChangeType } from '@theia/filesystem/lib/browser';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { SketchbookWidgetContribution } from './widgets/sketchbook/sketchbook-widget-contribution';
const INIT_AVR_PACKAGES = 'initializedAvrPackages';
@ -340,15 +340,14 @@ export class ArduinoFrontendContribution
);
}
}
const { clangdUri, cliUri, lsUri } = await this.executableService.list();
const [clangdPath, cliPath, lsPath, cliConfigPath] = await Promise.all([
const { clangdUri, lsUri } = await this.executableService.list();
const [clangdPath, lsPath] = await Promise.all([
this.fileService.fsPath(new URI(clangdUri)),
this.fileService.fsPath(new URI(cliUri)),
this.fileService.fsPath(new URI(lsUri)),
this.fileService.fsPath(
new URI(await this.configService.getCliConfigFileUri())
),
]);
const config = await this.configService.getConfiguration();
this.languageServerFqbn = await Promise.race([
new Promise<undefined>((_, reject) =>
setTimeout(
@ -360,10 +359,10 @@ export class ArduinoFrontendContribution
'arduino.languageserver.start',
{
lsPath,
cliPath,
cliDaemonAddr: `localhost:${config.daemon.port}`,
clangdPath,
log: currentSketchPath ? currentSketchPath : log,
cliConfigPath,
cliDaemonInstance: '1',
board: {
fqbn,
name: name ? `"${name}"` : undefined,

View File

@ -154,7 +154,7 @@ import {
} from '../common/protocol/examples-service';
import { BuiltInExamples, LibraryExamples } from './contributions/examples';
import { IncludeLibrary } from './contributions/include-library';
import { OutputChannelManager as TheiaOutputChannelManager } from '@theia/output/lib/common/output-channel';
import { OutputChannelManager as TheiaOutputChannelManager } from '@theia/output/lib/browser/output-channel';
import { OutputChannelManager } from './theia/output/output-channel';
import {
OutputChannelRegistryMainImpl as TheiaOutputChannelRegistryMainImpl,
@ -190,12 +190,12 @@ import { BoardSelection } from './contributions/board-selection';
import { OpenRecentSketch } from './contributions/open-recent-sketch';
import { Help } from './contributions/help';
import { bindArduinoPreferences } from './arduino-preferences';
import { SettingsService } from './dialogs/settings/settings';
import {
SettingsService,
SettingsDialog,
SettingsWidget,
SettingsDialogProps,
} from './settings';
} from './dialogs/settings/settings-dialog';
import { AddFile } from './contributions/add-file';
import { ArchiveSketch } from './contributions/archive-sketch';
import { OutputToolbarContribution as TheiaOutputToolbarContribution } from '@theia/output/lib/browser/output-toolbar-contribution';
@ -207,6 +207,8 @@ import { DebugConfigurationManager } from './theia/debug/debug-configuration-man
import { DebugConfigurationManager as TheiaDebugConfigurationManager } from '@theia/debug/lib/browser/debug-configuration-manager';
import { SearchInWorkspaceWidget as TheiaSearchInWorkspaceWidget } from '@theia/search-in-workspace/lib/browser/search-in-workspace-widget';
import { SearchInWorkspaceWidget } from './theia/search-in-workspace/search-in-workspace-widget';
import { SearchInWorkspaceFactory as TheiaSearchInWorkspaceFactory } from '@theia/search-in-workspace/lib/browser/search-in-workspace-factory';
import { SearchInWorkspaceFactory } from './theia/search-in-workspace/search-in-workspace-factory';
import { SearchInWorkspaceResultTreeWidget as TheiaSearchInWorkspaceResultTreeWidget } from '@theia/search-in-workspace/lib/browser/search-in-workspace-result-tree-widget';
import { SearchInWorkspaceResultTreeWidget } from './theia/search-in-workspace/search-in-workspace-result-tree-widget';
import { MonacoEditorProvider } from './theia/monaco/monaco-editor-provider';
@ -259,7 +261,7 @@ import {
UserFieldsDialogProps,
UserFieldsDialogWidget,
} from './dialogs/user-fields/user-fields-dialog';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
const ElementQueries = require('css-element-queries/src/ElementQueries');
@ -492,6 +494,12 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(SearchInWorkspaceWidget).toSelf();
rebind(TheiaSearchInWorkspaceWidget).toService(SearchInWorkspaceWidget);
// replace search icon
rebind(TheiaSearchInWorkspaceFactory)
.to(SearchInWorkspaceFactory)
.inSingletonScope();
rebind(TheiaSearchInWorkspaceResultTreeWidget).toDynamicValue(
({ container }) => {
const childContainer = createTreeContainer(container);
@ -678,7 +686,10 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(SettingsWidget).toSelf().inSingletonScope();
bind(SettingsDialog).toSelf().inSingletonScope();
bind(SettingsDialogProps).toConstantValue({
title: 'Preferences',
title: nls.localize(
'vscode/preferences.contribution/preferences',
'Preferences'
),
});
bind(StorageWrapper).toSelf().inSingletonScope();

View File

@ -6,7 +6,7 @@ import {
PreferenceContribution,
PreferenceSchema,
} from '@theia/core/lib/browser/preferences';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import { CompilerWarningLiterals, CompilerWarnings } from '../common/protocol';
export const ArduinoConfigSchema: PreferenceSchema = {

View File

@ -10,7 +10,7 @@ import { BoardsServiceProvider } from './boards-service-provider';
import { BoardsConfig } from './boards-config';
import { Installable, ResponseServiceArduino } from '../../common/protocol';
import { BoardsListWidgetFrontendContribution } from './boards-widget-frontend-contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
/**
* Listens on `BoardsConfig.Config` changes, if a board is selected which does not

View File

@ -6,7 +6,7 @@ import { BoardsConfig } from './boards-config';
import { BoardsService } from '../../common/protocol/boards-service';
import { BoardsServiceProvider } from './boards-service-provider';
import { BoardsConfigDialogWidget } from './boards-config-dialog-widget';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BoardsConfigDialogProps extends DialogProps {}

View File

@ -14,8 +14,8 @@ import {
AvailableBoard,
BoardsServiceProvider,
} from './boards-service-provider';
import { nls } from '@theia/core/lib/browser/nls';
import { naturalCompare } from '../../common/utils';
import { nls } from '@theia/core/lib/common';
export namespace BoardsConfig {
export interface Config {

View File

@ -12,7 +12,7 @@ import { FrontendApplicationContribution } from '@theia/core/lib/browser';
import { BoardsDataStore } from './boards-data-store';
import { MainMenuManager } from '../../common/main-menu-manager';
import { ArduinoMenus, unregisterSubmenu } from '../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BoardsDataMenuUpdater implements FrontendApplicationContribution {

View File

@ -5,7 +5,7 @@ import {
} from '../../common/protocol/boards-service';
import { ListWidget } from '../widgets/component-list/list-widget';
import { ListItemRenderer } from '../widgets/component-list/list-item-renderer';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BoardsListWidget extends ListWidget<BoardsPackage> {

View File

@ -19,7 +19,7 @@ import { naturalCompare } from '../../common/utils';
import { NotificationCenter } from '../notification-center';
import { ArduinoCommands } from '../arduino-commands';
import { StorageWrapper } from '../storage-wrapper';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BoardsServiceProvider implements FrontendApplicationContribution {

View File

@ -9,7 +9,7 @@ import {
BoardsServiceProvider,
AvailableBoard,
} from './boards-service-provider';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export interface BoardsDropDownListCoords {
readonly top: number;

View File

@ -12,7 +12,7 @@ import {
} from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus';
import { ConfigService } from '../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class About extends Contribution {

View File

@ -9,7 +9,7 @@ import {
URI,
} from './contribution';
import { FileDialogService } from '@theia/filesystem/lib/browser';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class AddFile extends SketchContribution {

View File

@ -15,7 +15,7 @@ import {
CommandRegistry,
MenuModelRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class AddZipLibrary extends SketchContribution {

View File

@ -9,7 +9,7 @@ import {
CommandRegistry,
MenuModelRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class ArchiveSketch extends SketchContribution {

View File

@ -23,7 +23,7 @@ import {
Port,
} from '../../common/protocol';
import { SketchContribution, Command, CommandRegistry } from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BoardSelection extends SketchContribution {

View File

@ -1,5 +1,5 @@
import { inject, injectable } from 'inversify';
import { OutputChannelManager } from '@theia/output/lib/common/output-channel';
import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
import { CoreService } from '../../common/protocol';
import { ArduinoMenus } from '../menu/arduino-menus';
import { BoardsDataStore } from '../boards/boards-data-store';
@ -11,7 +11,7 @@ import {
CommandRegistry,
MenuModelRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class BurnBootloader extends SketchContribution {

View File

@ -15,7 +15,7 @@ import {
KeybindingRegistry,
URI,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
/**
* Closes the `current` closeable editor, or any closeable current widget from the main area, or the current sketch window.

View File

@ -9,7 +9,7 @@ import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
import { MessageService } from '@theia/core/lib/common/message-service';
import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
import { open, OpenerService } from '@theia/core/lib/browser/opener-service';
import { OutputChannelManager } from '@theia/output/lib/common/output-channel';
import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
import {
MenuModelRegistry,
MenuContribution,
@ -33,7 +33,7 @@ import {
CommandService,
} from '@theia/core/lib/common/command';
import { EditorMode } from '../editor-mode';
import { SettingsService } from '../settings';
import { SettingsService } from '../dialogs/settings/settings';
import { SketchesServiceClientImpl } from '../../common/protocol/sketches-service-client-impl';
import {
SketchesService,

View File

@ -12,7 +12,7 @@ import {
SketchContribution,
TabBarToolbarRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class Debug extends SketchContribution {

View File

@ -11,7 +11,7 @@ import {
CommandRegistry,
} from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
// TODO: [macOS]: to remove `Start Dictation...` and `Emoji & Symbol` see this thread: https://github.com/electron/electron/issues/8283#issuecomment-269522072
// Depends on https://github.com/eclipse-theia/theia/pull/7964

View File

@ -22,7 +22,7 @@ import {
} from './contribution';
import { NotificationCenter } from '../notification-center';
import { Board, Sketch, SketchContainer } from '../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export abstract class Examples extends SketchContribution {

View File

@ -12,7 +12,7 @@ import {
CommandRegistry,
KeybindingRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class Help extends Contribution {

View File

@ -15,7 +15,7 @@ import { LibraryListWidget } from '../library/library-list-widget';
import { BoardsServiceProvider } from '../boards/boards-service-provider';
import { SketchContribution, Command, CommandRegistry } from './contribution';
import { NotificationCenter } from '../notification-center';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class IncludeLibrary extends SketchContribution {

View File

@ -1,4 +1,4 @@
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import { injectable } from 'inversify';
import { ArduinoMenus } from '../menu/arduino-menus';
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';

View File

@ -14,7 +14,7 @@ import { ArduinoMenus } from '../menu/arduino-menus';
import { MainMenuManager } from '../../common/main-menu-manager';
import { OpenSketch } from './open-sketch';
import { NotificationCenter } from '../notification-center';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class OpenRecentSketch extends SketchContribution {

View File

@ -9,7 +9,7 @@ import {
MenuModelRegistry,
KeybindingRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class OpenSketchExternal extends SketchContribution {

View File

@ -22,7 +22,7 @@ import { ExamplesService } from '../../common/protocol/examples-service';
import { BuiltInExamples } from './examples';
import { Sketchbook } from './sketchbook';
import { SketchContainer } from '../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class OpenSketch extends SketchContribution {

View File

@ -9,7 +9,7 @@ import {
CommandRegistry,
} from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class QuitApp extends Contribution {

View File

@ -10,7 +10,7 @@ import {
MenuModelRegistry,
KeybindingRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class SaveAsSketch extends SketchContribution {

View File

@ -11,7 +11,7 @@ import {
KeybindingRegistry,
TabBarToolbarRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class SaveSketch extends SketchContribution {

View File

@ -7,8 +7,9 @@ import {
KeybindingRegistry,
} from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus';
import { Settings as Preferences, SettingsDialog } from '../settings';
import { nls } from '@theia/core/lib/browser/nls';
import { Settings as Preferences } from '../dialogs/settings/settings';
import { SettingsDialog } from '../dialogs/settings/settings-dialog';
import { nls } from '@theia/core/lib/common';
@injectable()
export class Settings extends SketchContribution {

View File

@ -21,7 +21,7 @@ import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus';
import { EditorManager } from '@theia/editor/lib/browser/editor-manager';
import { SketchesServiceClientImpl } from '../../common/protocol/sketches-service-client-impl';
import { LocalCacheFsProvider } from '../local-cache/local-cache-fs-provider';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class SketchControl extends SketchContribution {

View File

@ -7,7 +7,7 @@ import { NotificationCenter } from '../notification-center';
import { Examples } from './examples';
import { SketchContainer } from '../../common/protocol';
import { OpenSketch } from './open-sketch';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class Sketchbook extends Examples {

View File

@ -18,7 +18,7 @@ import {
certificateList,
} from '../dialogs/certificate-uploader/utils';
import { ArduinoFirmwareUploader } from '../../common/protocol/arduino-firmware-uploader';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class UploadCertificate extends Contribution {

View File

@ -7,7 +7,7 @@ import {
} from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus';
import { UploadFirmwareDialog } from '../dialogs/firmware-uploader/firmware-uploader-dialog';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class UploadFirmware extends Contribution {

View File

@ -15,8 +15,7 @@ import {
TabBarToolbarRegistry,
} from './contribution';
import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog';
import { nls } from '@theia/core/lib/browser/nls';
import { DisposableCollection } from '@theia/core';
import { DisposableCollection, nls } from '@theia/core/lib/common';
@injectable()
export class UploadSketch extends SketchContribution {

View File

@ -13,7 +13,7 @@ import {
KeybindingRegistry,
TabBarToolbarRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class VerifySketch extends SketchContribution {

View File

@ -1,4 +1,4 @@
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import * as React from 'react';
export const CertificateAddComponent = ({

View File

@ -4,7 +4,7 @@ import { AvailableBoard } from '../../boards/boards-service-provider';
import { CertificateListComponent } from './certificate-list';
import { SelectBoardComponent } from './select-board-components';
import { CertificateAddComponent } from './certificate-add-new';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export const CertificateUploaderComponent = ({
availableBoards,

View File

@ -18,7 +18,7 @@ import {
import { CommandRegistry } from '@theia/core/lib/common/command';
import { certificateList, sanifyCertString } from './utils';
import { ArduinoFirmwareUploader } from '../../../common/protocol/arduino-firmware-uploader';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class UploadCertificateDialogWidget extends ReactWidget {

View File

@ -1,4 +1,4 @@
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import * as React from 'react';
import { AvailableBoard } from '../../boards/boards-service-provider';
import { ArduinoSelect } from '../../widgets/arduino-select';

View File

@ -6,7 +6,7 @@ import { clipboard } from 'electron';
import { ReactWidget, DialogProps } from '@theia/core/lib/browser';
import { AbstractDialog } from '../theia/dialogs/dialogs';
import { CreateApi } from '../create/create-api';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
const RadioButton = (props: {
id: string;

View File

@ -6,7 +6,7 @@ import {
ConfirmDialogProps,
DialogError,
} from '@theia/core/lib/browser/dialogs';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class DoNotAskAgainDialogProps extends ConfirmDialogProps {

View File

@ -1,4 +1,4 @@
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import * as React from 'react';
import {
ArduinoFirmwareUploader,

View File

@ -1,324 +1,22 @@
import * as React from 'react';
import { injectable, inject, postConstruct } from 'inversify';
import { Widget } from '@phosphor/widgets';
import { Message } from '@phosphor/messaging';
import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
import 'react-tabs/style/react-tabs.css';
import { Disable } from 'react-disable';
import URI from '@theia/core/lib/common/uri';
import { Emitter } from '@theia/core/lib/common/event';
import { Deferred } from '@theia/core/lib/common/promise-util';
import { deepClone } from '@theia/core/lib/common/objects';
import { FileService } from '@theia/filesystem/lib/browser/file-service';
import { ThemeService } from '@theia/core/lib/browser/theming';
import { MaybePromise } from '@theia/core/lib/common/types';
import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/file-dialog-service';
import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import {
DialogProps,
PreferenceService,
PreferenceScope,
DialogError,
ReactWidget,
} from '@theia/core/lib/browser';
import { Index } from '../common/types';
import {
CompilerWarnings,
CompilerWarningLiterals,
ConfigService,
FileSystemExt,
Network,
ProxySettings,
} from '../common/protocol';
import { AbstractDialog } from './theia/dialogs/dialogs';
import { nls } from '@theia/core/lib/browser/nls';
const EDITOR_SETTING = 'editor';
const FONT_SIZE_SETTING = `${EDITOR_SETTING}.fontSize`;
const AUTO_SAVE_SETTING = `${EDITOR_SETTING}.autoSave`;
const QUICK_SUGGESTIONS_SETTING = `${EDITOR_SETTING}.quickSuggestions`;
const ARDUINO_SETTING = 'arduino';
const WINDOW_SETTING = `${ARDUINO_SETTING}.window`;
// const IDE_SETTING = `${ARDUINO_SETTING}.ide`;
const COMPILE_SETTING = `${ARDUINO_SETTING}.compile`;
const UPLOAD_SETTING = `${ARDUINO_SETTING}.upload`;
const SKETCHBOOK_SETTING = `${ARDUINO_SETTING}.sketchbook`;
const AUTO_SCALE_SETTING = `${WINDOW_SETTING}.autoScale`;
const ZOOM_LEVEL_SETTING = `${WINDOW_SETTING}.zoomLevel`;
// const AUTO_UPDATE_SETTING = `${IDE_SETTING}.autoUpdate`;
const COMPILE_VERBOSE_SETTING = `${COMPILE_SETTING}.verbose`;
const COMPILE_WARNINGS_SETTING = `${COMPILE_SETTING}.warnings`;
const UPLOAD_VERBOSE_SETTING = `${UPLOAD_SETTING}.verbose`;
const UPLOAD_VERIFY_SETTING = `${UPLOAD_SETTING}.verify`;
const SHOW_ALL_FILES_SETTING = `${SKETCHBOOK_SETTING}.showAllFiles`;
export interface Settings extends Index {
editorFontSize: number; // `editor.fontSize`
themeId: string; // `workbench.colorTheme`
autoSave: 'on' | 'off'; // `editor.autoSave`
quickSuggestions: Record<'other' | 'comments' | 'strings', boolean>; // `editor.quickSuggestions`
autoScaleInterface: boolean; // `arduino.window.autoScale`
interfaceScale: number; // `arduino.window.zoomLevel` https://github.com/eclipse-theia/theia/issues/8751
checkForUpdates?: boolean; // `arduino.ide.autoUpdate`
verboseOnCompile: boolean; // `arduino.compile.verbose`
compilerWarnings: CompilerWarnings; // `arduino.compile.warnings`
verboseOnUpload: boolean; // `arduino.upload.verbose`
verifyAfterUpload: boolean; // `arduino.upload.verify`
sketchbookShowAllFiles: boolean; // `arduino.sketchbook.showAllFiles`
sketchbookPath: string; // CLI
additionalUrls: string[]; // CLI
network: Network; // CLI
}
export namespace Settings {
export function belongsToCli<K extends keyof Settings>(key: K): boolean {
return key === 'sketchbookPath' || key === 'additionalUrls';
}
}
@injectable()
export class SettingsService {
@inject(FileService)
protected readonly fileService: FileService;
@inject(FileSystemExt)
protected readonly fileSystemExt: FileSystemExt;
@inject(ConfigService)
protected readonly configService: ConfigService;
@inject(PreferenceService)
protected readonly preferenceService: PreferenceService;
@inject(FrontendApplicationStateService)
protected readonly appStateService: FrontendApplicationStateService;
protected readonly onDidChangeEmitter = new Emitter<Readonly<Settings>>();
readonly onDidChange = this.onDidChangeEmitter.event;
protected ready = new Deferred<void>();
protected _settings: Settings;
@postConstruct()
protected async init(): Promise<void> {
await this.appStateService.reachedState('ready'); // Hack for https://github.com/eclipse-theia/theia/issues/8993
const settings = await this.loadSettings();
this._settings = deepClone(settings);
this.ready.resolve();
}
protected async loadSettings(): Promise<Settings> {
await this.preferenceService.ready;
const [
editorFontSize,
themeId,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookShowAllFiles,
cliConfig,
] = await Promise.all([
this.preferenceService.get<number>(FONT_SIZE_SETTING, 12),
this.preferenceService.get<string>(
'workbench.colorTheme',
'arduino-theme'
),
this.preferenceService.get<'on' | 'off'>(AUTO_SAVE_SETTING, 'on'),
this.preferenceService.get<
Record<'other' | 'comments' | 'strings', boolean>
>(QUICK_SUGGESTIONS_SETTING, {
other: false,
comments: false,
strings: false,
}),
this.preferenceService.get<boolean>(AUTO_SCALE_SETTING, true),
this.preferenceService.get<number>(ZOOM_LEVEL_SETTING, 0),
// this.preferenceService.get<string>(AUTO_UPDATE_SETTING, true),
this.preferenceService.get<boolean>(COMPILE_VERBOSE_SETTING, true),
this.preferenceService.get<any>(COMPILE_WARNINGS_SETTING, 'None'),
this.preferenceService.get<boolean>(UPLOAD_VERBOSE_SETTING, true),
this.preferenceService.get<boolean>(UPLOAD_VERIFY_SETTING, true),
this.preferenceService.get<boolean>(SHOW_ALL_FILES_SETTING, false),
this.configService.getConfiguration(),
]);
const { additionalUrls, sketchDirUri, network } = cliConfig;
const sketchbookPath = await this.fileService.fsPath(new URI(sketchDirUri));
return {
editorFontSize,
themeId,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookShowAllFiles,
additionalUrls,
sketchbookPath,
network,
};
}
async settings(): Promise<Settings> {
await this.ready.promise;
return this._settings;
}
async update(settings: Settings, fireDidChange = false): Promise<void> {
await this.ready.promise;
for (const key of Object.keys(settings)) {
this._settings[key] = settings[key];
}
if (fireDidChange) {
this.onDidChangeEmitter.fire(this._settings);
}
}
async reset(): Promise<void> {
const settings = await this.loadSettings();
return this.update(settings, true);
}
async validate(
settings: MaybePromise<Settings> = this.settings()
): Promise<string | true> {
try {
const { sketchbookPath, editorFontSize, themeId } = await settings;
const sketchbookDir = await this.fileSystemExt.getUri(sketchbookPath);
if (!(await this.fileService.exists(new URI(sketchbookDir)))) {
return nls.localize(
'arduino/preferences/invalid.sketchbook.location',
'Invalid sketchbook location: {0}',
sketchbookPath
);
}
if (editorFontSize <= 0) {
return nls.localize(
'arduino/preferences/invalid.editorFontSize',
'Invalid editor font size. It must be a positive integer.'
);
}
if (
!ThemeService.get()
.getThemes()
.find(({ id }) => id === themeId)
) {
return nls.localize(
'arduino/preferences/invalid.theme',
'Invalid theme.'
);
}
return true;
} catch (err) {
if (err instanceof Error) {
return err.message;
}
return String(err);
}
}
async save(): Promise<string | true> {
await this.ready.promise;
const {
editorFontSize,
themeId,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookPath,
additionalUrls,
network,
sketchbookShowAllFiles,
} = this._settings;
const [config, sketchDirUri] = await Promise.all([
this.configService.getConfiguration(),
this.fileSystemExt.getUri(sketchbookPath),
]);
(config as any).additionalUrls = additionalUrls;
(config as any).sketchDirUri = sketchDirUri;
(config as any).network = network;
await Promise.all([
this.preferenceService.set(
'editor.fontSize',
editorFontSize,
PreferenceScope.User
),
this.preferenceService.set(
'workbench.colorTheme',
themeId,
PreferenceScope.User
),
this.preferenceService.set(
'editor.autoSave',
autoSave,
PreferenceScope.User
),
this.preferenceService.set(
'editor.quickSuggestions',
quickSuggestions,
PreferenceScope.User
),
this.preferenceService.set(
AUTO_SCALE_SETTING,
autoScaleInterface,
PreferenceScope.User
),
this.preferenceService.set(
ZOOM_LEVEL_SETTING,
interfaceScale,
PreferenceScope.User
),
// this.preferenceService.set(AUTO_UPDATE_SETTING, checkForUpdates, PreferenceScope.User),
this.preferenceService.set(
COMPILE_VERBOSE_SETTING,
verboseOnCompile,
PreferenceScope.User
),
this.preferenceService.set(
COMPILE_WARNINGS_SETTING,
compilerWarnings,
PreferenceScope.User
),
this.preferenceService.set(
UPLOAD_VERBOSE_SETTING,
verboseOnUpload,
PreferenceScope.User
),
this.preferenceService.set(
UPLOAD_VERIFY_SETTING,
verifyAfterUpload,
PreferenceScope.User
),
this.preferenceService.set(
SHOW_ALL_FILES_SETTING,
sketchbookShowAllFiles,
PreferenceScope.User
),
this.configService.setConfiguration(config),
]);
this.onDidChangeEmitter.fire(this._settings);
return true;
}
}
} from '../../../common/protocol';
import { nls } from '@theia/core/lib/common';
import { Settings, SettingsService } from './settings';
import { AdditionalUrlsDialog } from './settings-dialog';
import { AsyncLocalizationProvider } from '@theia/core/lib/common/i18n/localization';
export class SettingsComponent extends React.Component<
SettingsComponent.Props,
@ -426,6 +124,12 @@ export class SettingsComponent extends React.Component<
'Theme'
) + ':'}
</div>
<div className="flex-line">
{nls.localize(
'vscode/editorStatus/status.editor.mode',
'Language'
) + ':'}
</div>
<div className="flex-line">
{nls.localize(
'arduino/preferences/showVerbose',
@ -491,6 +195,27 @@ export class SettingsComponent extends React.Component<
))}
</select>
</div>
<div className="flex-line">
<select
className="theia-select"
value={this.state.currentLanguage}
onChange={this.languageDidChange}
>
{this.state.languages.map((label) => (
<option key={label} value={label}>
{label}
</option>
))}
</select>
<span style={{ marginLeft: '5px' }}>
(
{nls.localize(
'vscode/extensionsActions/reloadRequired',
'Reload required'
)}
)
</span>
</div>
<div className="flex-line">
<label className="flex-line">
<input
@ -853,6 +578,13 @@ export class SettingsComponent extends React.Component<
}
};
protected languageDidChange = (
event: React.ChangeEvent<HTMLSelectElement>
) => {
const selectedLanguage = event.target.value;
this.setState({ currentLanguage: selectedLanguage });
};
protected compilerWarningsDidChange = (
event: React.ChangeEvent<HTMLSelectElement>
) => {
@ -975,182 +707,7 @@ export namespace SettingsComponent {
readonly fileService: FileService;
readonly fileDialogService: FileDialogService;
readonly windowService: WindowService;
readonly localizationProvider: AsyncLocalizationProvider;
}
export type State = Settings;
}
@injectable()
export class SettingsWidget extends ReactWidget {
@inject(SettingsService)
protected readonly settingsService: SettingsService;
@inject(FileService)
protected readonly fileService: FileService;
@inject(FileDialogService)
protected readonly fileDialogService: FileDialogService;
@inject(WindowService)
protected readonly windowService: WindowService;
protected render(): React.ReactNode {
return (
<SettingsComponent
settingsService={this.settingsService}
fileService={this.fileService}
fileDialogService={this.fileDialogService}
windowService={this.windowService}
/>
);
}
}
@injectable()
export class SettingsDialogProps extends DialogProps {}
@injectable()
export class SettingsDialog extends AbstractDialog<Promise<Settings>> {
@inject(SettingsService)
protected readonly settingsService: SettingsService;
@inject(SettingsWidget)
protected readonly widget: SettingsWidget;
constructor(
@inject(SettingsDialogProps)
protected readonly props: SettingsDialogProps
) {
super(props);
this.contentNode.classList.add('arduino-settings-dialog');
this.appendCloseButton(
nls.localize('vscode/issueMainService/cancel', 'Cancel')
);
this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK'));
}
@postConstruct()
protected init(): void {
this.toDispose.push(
this.settingsService.onDidChange(this.validate.bind(this))
);
}
protected async isValid(settings: Promise<Settings>): Promise<DialogError> {
const result = await this.settingsService.validate(settings);
if (typeof result === 'string') {
return result;
}
return '';
}
get value(): Promise<Settings> {
return this.settingsService.settings();
}
protected onAfterAttach(msg: Message): void {
if (this.widget.isAttached) {
Widget.detach(this.widget);
}
Widget.attach(this.widget, this.contentNode);
this.toDisposeOnDetach.push(
this.settingsService.onDidChange(() => this.update())
);
super.onAfterAttach(msg);
this.update();
}
protected onUpdateRequest(msg: Message) {
super.onUpdateRequest(msg);
this.widget.update();
}
protected onActivateRequest(msg: Message): void {
super.onActivateRequest(msg);
// calling settingsService.reset() in order to reload the settings from the preferenceService
// and update the UI including changes triggerd from the command palette
this.settingsService.reset();
this.widget.activate();
}
}
export class AdditionalUrlsDialog extends AbstractDialog<string[]> {
protected readonly textArea: HTMLTextAreaElement;
constructor(urls: string[], windowService: WindowService) {
super({
title: nls.localize(
'arduino/preferences/additionalManagerURLs',
'Additional Boards Manager URLs'
),
});
this.contentNode.classList.add('additional-urls-dialog');
const description = document.createElement('div');
description.textContent = nls.localize(
'arduino/preferences/enterAdditionalURLs',
'Enter additional URLs, one for each row'
);
description.style.marginBottom = '5px';
this.contentNode.appendChild(description);
this.textArea = document.createElement('textarea');
this.textArea.className = 'theia-input';
this.textArea.setAttribute('style', 'flex: 0;');
this.textArea.value = urls
.filter((url) => url.trim())
.filter((url) => !!url)
.join('\n');
this.textArea.wrap = 'soft';
this.textArea.cols = 90;
this.textArea.rows = 5;
this.contentNode.appendChild(this.textArea);
const anchor = document.createElement('div');
anchor.classList.add('link');
anchor.textContent = nls.localize(
'arduino/preferences/unofficialBoardSupport',
'Click for a list of unofficial board support URLs'
);
anchor.style.marginTop = '5px';
anchor.style.cursor = 'pointer';
this.addEventListener(anchor, 'click', () =>
windowService.openNewWindow(
'https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls',
{ external: true }
)
);
this.contentNode.appendChild(anchor);
this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK'));
this.appendCloseButton(
nls.localize('vscode/issueMainService/cancel', 'Cancel')
);
}
get value(): string[] {
return this.textArea.value
.split('\n')
.map((url) => url.trim())
.filter((url) => !!url);
}
protected onAfterAttach(message: Message): void {
super.onAfterAttach(message);
this.addUpdateListener(this.textArea, 'input');
}
protected onActivateRequest(message: Message): void {
super.onActivateRequest(message);
this.textArea.focus();
}
protected handleEnter(event: KeyboardEvent): boolean | void {
if (event.target instanceof HTMLInputElement) {
return super.handleEnter(event);
}
return false;
}
export type State = Settings & { languages: string[] };
}

View File

@ -0,0 +1,193 @@
import * as React from 'react';
import { injectable, inject, postConstruct } from 'inversify';
import { Widget } from '@phosphor/widgets';
import { Message } from '@phosphor/messaging';
import { DialogError, ReactWidget } from '@theia/core/lib/browser';
import { AbstractDialog, DialogProps } from '@theia/core/lib/browser';
import { Settings, SettingsService } from './settings';
import { FileService } from '@theia/filesystem/lib/browser/file-service';
import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/file-dialog-service';
import { nls } from '@theia/core/lib/common';
import { SettingsComponent } from './settings-component';
import { AsyncLocalizationProvider } from '@theia/core/lib/common/i18n/localization';
@injectable()
export class SettingsWidget extends ReactWidget {
@inject(SettingsService)
protected readonly settingsService: SettingsService;
@inject(FileService)
protected readonly fileService: FileService;
@inject(FileDialogService)
protected readonly fileDialogService: FileDialogService;
@inject(WindowService)
protected readonly windowService: WindowService;
@inject(AsyncLocalizationProvider)
protected readonly localizationProvider: AsyncLocalizationProvider;
protected render(): React.ReactNode {
return (
<SettingsComponent
settingsService={this.settingsService}
fileService={this.fileService}
fileDialogService={this.fileDialogService}
windowService={this.windowService}
localizationProvider={this.localizationProvider}
/>
);
}
}
@injectable()
export class SettingsDialogProps extends DialogProps {}
@injectable()
export class SettingsDialog extends AbstractDialog<Promise<Settings>> {
@inject(SettingsService)
protected readonly settingsService: SettingsService;
@inject(SettingsWidget)
protected readonly widget: SettingsWidget;
constructor(
@inject(SettingsDialogProps)
protected readonly props: SettingsDialogProps
) {
super(props);
this.contentNode.classList.add('arduino-settings-dialog');
this.appendCloseButton(
nls.localize('vscode/issueMainService/cancel', 'Cancel')
);
this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK'));
}
@postConstruct()
protected init(): void {
this.toDispose.push(
this.settingsService.onDidChange(this.validate.bind(this))
);
}
protected async isValid(settings: Promise<Settings>): Promise<DialogError> {
const result = await this.settingsService.validate(settings);
if (typeof result === 'string') {
return result;
}
return '';
}
get value(): Promise<Settings> {
return this.settingsService.settings();
}
protected onAfterAttach(msg: Message): void {
if (this.widget.isAttached) {
Widget.detach(this.widget);
}
Widget.attach(this.widget, this.contentNode);
this.toDisposeOnDetach.push(
this.settingsService.onDidChange(() => this.update())
);
super.onAfterAttach(msg);
this.update();
}
protected onUpdateRequest(msg: Message) {
super.onUpdateRequest(msg);
this.widget.update();
}
protected onActivateRequest(msg: Message): void {
super.onActivateRequest(msg);
// calling settingsService.reset() in order to reload the settings from the preferenceService
// and update the UI including changes triggerd from the command palette
this.settingsService.reset();
this.widget.activate();
}
}
export class AdditionalUrlsDialog extends AbstractDialog<string[]> {
protected readonly textArea: HTMLTextAreaElement;
constructor(urls: string[], windowService: WindowService) {
super({
title: nls.localize(
'arduino/preferences/additionalManagerURLs',
'Additional Boards Manager URLs'
),
});
this.contentNode.classList.add('additional-urls-dialog');
const description = document.createElement('div');
description.textContent = nls.localize(
'arduino/preferences/enterAdditionalURLs',
'Enter additional URLs, one for each row'
);
description.style.marginBottom = '5px';
this.contentNode.appendChild(description);
this.textArea = document.createElement('textarea');
this.textArea.className = 'theia-input';
this.textArea.setAttribute('style', 'flex: 0;');
this.textArea.value = urls
.filter((url) => url.trim())
.filter((url) => !!url)
.join('\n');
this.textArea.wrap = 'soft';
this.textArea.cols = 90;
this.textArea.rows = 5;
this.contentNode.appendChild(this.textArea);
const anchor = document.createElement('div');
anchor.classList.add('link');
anchor.textContent = nls.localize(
'arduino/preferences/unofficialBoardSupport',
'Click for a list of unofficial board support URLs'
);
anchor.style.marginTop = '5px';
anchor.style.cursor = 'pointer';
this.addEventListener(anchor, 'click', () =>
windowService.openNewWindow(
'https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls',
{ external: true }
)
);
this.contentNode.appendChild(anchor);
this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK'));
this.appendCloseButton(
nls.localize('vscode/issueMainService/cancel', 'Cancel')
);
}
get value(): string[] {
return this.textArea.value
.split('\n')
.map((url) => url.trim())
.filter((url) => !!url);
}
protected onAfterAttach(message: Message): void {
super.onAfterAttach(message);
this.addUpdateListener(this.textArea, 'input');
}
protected onActivateRequest(message: Message): void {
super.onActivateRequest(message);
this.textArea.focus();
}
protected handleEnter(event: KeyboardEvent): boolean | void {
if (event.target instanceof HTMLInputElement) {
return super.handleEnter(event);
}
return false;
}
}

View File

@ -0,0 +1,325 @@
import { injectable, inject, postConstruct } from 'inversify';
import URI from '@theia/core/lib/common/uri';
import { Emitter } from '@theia/core/lib/common/event';
import { Deferred } from '@theia/core/lib/common/promise-util';
import { deepClone } from '@theia/core/lib/common/objects';
import { FileService } from '@theia/filesystem/lib/browser/file-service';
import { ThemeService } from '@theia/core/lib/browser/theming';
import { MaybePromise } from '@theia/core/lib/common/types';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { PreferenceService, PreferenceScope } from '@theia/core/lib/browser';
import { Index } from '../../../common/types';
import {
CompilerWarnings,
ConfigService,
FileSystemExt,
Network,
} from '../../../common/protocol';
import { nls } from '@theia/core/lib/common';
import { AsyncLocalizationProvider } from '@theia/core/lib/common/i18n/localization';
const EDITOR_SETTING = 'editor';
const FONT_SIZE_SETTING = `${EDITOR_SETTING}.fontSize`;
const AUTO_SAVE_SETTING = `${EDITOR_SETTING}.autoSave`;
const QUICK_SUGGESTIONS_SETTING = `${EDITOR_SETTING}.quickSuggestions`;
const ARDUINO_SETTING = 'arduino';
const WINDOW_SETTING = `${ARDUINO_SETTING}.window`;
// const IDE_SETTING = `${ARDUINO_SETTING}.ide`;
const COMPILE_SETTING = `${ARDUINO_SETTING}.compile`;
const UPLOAD_SETTING = `${ARDUINO_SETTING}.upload`;
const SKETCHBOOK_SETTING = `${ARDUINO_SETTING}.sketchbook`;
const AUTO_SCALE_SETTING = `${WINDOW_SETTING}.autoScale`;
const ZOOM_LEVEL_SETTING = `${WINDOW_SETTING}.zoomLevel`;
// const AUTO_UPDATE_SETTING = `${IDE_SETTING}.autoUpdate`;
const COMPILE_VERBOSE_SETTING = `${COMPILE_SETTING}.verbose`;
const COMPILE_WARNINGS_SETTING = `${COMPILE_SETTING}.warnings`;
const UPLOAD_VERBOSE_SETTING = `${UPLOAD_SETTING}.verbose`;
const UPLOAD_VERIFY_SETTING = `${UPLOAD_SETTING}.verify`;
const SHOW_ALL_FILES_SETTING = `${SKETCHBOOK_SETTING}.showAllFiles`;
export interface Settings extends Index {
editorFontSize: number; // `editor.fontSize`
themeId: string; // `workbench.colorTheme`
autoSave: 'on' | 'off'; // `editor.autoSave`
quickSuggestions: Record<'other' | 'comments' | 'strings', boolean>; // `editor.quickSuggestions`
languages: string[]; // `languages from the plugins`
currentLanguage: string;
autoScaleInterface: boolean; // `arduino.window.autoScale`
interfaceScale: number; // `arduino.window.zoomLevel` https://github.com/eclipse-theia/theia/issues/8751
checkForUpdates?: boolean; // `arduino.ide.autoUpdate`
verboseOnCompile: boolean; // `arduino.compile.verbose`
compilerWarnings: CompilerWarnings; // `arduino.compile.warnings`
verboseOnUpload: boolean; // `arduino.upload.verbose`
verifyAfterUpload: boolean; // `arduino.upload.verify`
sketchbookShowAllFiles: boolean; // `arduino.sketchbook.showAllFiles`
sketchbookPath: string; // CLI
additionalUrls: string[]; // CLI
network: Network; // CLI
}
export namespace Settings {
export function belongsToCli<K extends keyof Settings>(key: K): boolean {
return key === 'sketchbookPath' || key === 'additionalUrls';
}
}
@injectable()
export class SettingsService {
@inject(FileService)
protected readonly fileService: FileService;
@inject(FileSystemExt)
protected readonly fileSystemExt: FileSystemExt;
@inject(ConfigService)
protected readonly configService: ConfigService;
@inject(PreferenceService)
protected readonly preferenceService: PreferenceService;
@inject(FrontendApplicationStateService)
protected readonly appStateService: FrontendApplicationStateService;
@inject(AsyncLocalizationProvider)
protected readonly localizationProvider: AsyncLocalizationProvider;
protected readonly onDidChangeEmitter = new Emitter<Readonly<Settings>>();
readonly onDidChange = this.onDidChangeEmitter.event;
protected ready = new Deferred<void>();
protected _settings: Settings;
@postConstruct()
protected async init(): Promise<void> {
await this.appStateService.reachedState('ready'); // Hack for https://github.com/eclipse-theia/theia/issues/8993
const settings = await this.loadSettings();
this._settings = deepClone(settings);
this.ready.resolve();
}
protected async loadSettings(): Promise<Settings> {
await this.preferenceService.ready;
const [
languages,
currentLanguage,
editorFontSize,
themeId,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookShowAllFiles,
cliConfig,
] = await Promise.all([
['en', ...(await this.localizationProvider.getAvailableLanguages())],
this.localizationProvider.getCurrentLanguage(),
this.preferenceService.get<number>(FONT_SIZE_SETTING, 12),
this.preferenceService.get<string>(
'workbench.colorTheme',
'arduino-theme'
),
this.preferenceService.get<'on' | 'off'>(AUTO_SAVE_SETTING, 'on'),
this.preferenceService.get<
Record<'other' | 'comments' | 'strings', boolean>
>(QUICK_SUGGESTIONS_SETTING, {
other: false,
comments: false,
strings: false,
}),
this.preferenceService.get<boolean>(AUTO_SCALE_SETTING, true),
this.preferenceService.get<number>(ZOOM_LEVEL_SETTING, 0),
// this.preferenceService.get<string>(AUTO_UPDATE_SETTING, true),
this.preferenceService.get<boolean>(COMPILE_VERBOSE_SETTING, true),
this.preferenceService.get<any>(COMPILE_WARNINGS_SETTING, 'None'),
this.preferenceService.get<boolean>(UPLOAD_VERBOSE_SETTING, true),
this.preferenceService.get<boolean>(UPLOAD_VERIFY_SETTING, true),
this.preferenceService.get<boolean>(SHOW_ALL_FILES_SETTING, false),
this.configService.getConfiguration(),
]);
const { additionalUrls, sketchDirUri, network } = cliConfig;
const sketchbookPath = await this.fileService.fsPath(new URI(sketchDirUri));
return {
editorFontSize,
themeId,
languages,
currentLanguage,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookShowAllFiles,
additionalUrls,
sketchbookPath,
network,
};
}
async settings(): Promise<Settings> {
await this.ready.promise;
return this._settings;
}
async update(settings: Settings, fireDidChange = false): Promise<void> {
await this.ready.promise;
for (const key of Object.keys(settings)) {
this._settings[key] = settings[key];
}
if (fireDidChange) {
this.onDidChangeEmitter.fire(this._settings);
}
}
async reset(): Promise<void> {
const settings = await this.loadSettings();
return this.update(settings, true);
}
async validate(
settings: MaybePromise<Settings> = this.settings()
): Promise<string | true> {
try {
const { sketchbookPath, editorFontSize, themeId } = await settings;
const sketchbookDir = await this.fileSystemExt.getUri(sketchbookPath);
if (!(await this.fileService.exists(new URI(sketchbookDir)))) {
return nls.localize(
'arduino/preferences/invalid.sketchbook.location',
'Invalid sketchbook location: {0}',
sketchbookPath
);
}
if (editorFontSize <= 0) {
return nls.localize(
'arduino/preferences/invalid.editorFontSize',
'Invalid editor font size. It must be a positive integer.'
);
}
if (
!ThemeService.get()
.getThemes()
.find(({ id }) => id === themeId)
) {
return nls.localize(
'arduino/preferences/invalid.theme',
'Invalid theme.'
);
}
return true;
} catch (err) {
if (err instanceof Error) {
return err.message;
}
return String(err);
}
}
async save(): Promise<string | true> {
await this.ready.promise;
const {
currentLanguage,
editorFontSize,
themeId,
autoSave,
quickSuggestions,
autoScaleInterface,
interfaceScale,
// checkForUpdates,
verboseOnCompile,
compilerWarnings,
verboseOnUpload,
verifyAfterUpload,
sketchbookPath,
additionalUrls,
network,
sketchbookShowAllFiles,
} = this._settings;
const [config, sketchDirUri] = await Promise.all([
this.configService.getConfiguration(),
this.fileSystemExt.getUri(sketchbookPath),
]);
(config as any).additionalUrls = additionalUrls;
(config as any).sketchDirUri = sketchDirUri;
(config as any).network = network;
(config as any).locale = currentLanguage;
await Promise.all([
this.preferenceService.set(
'editor.fontSize',
editorFontSize,
PreferenceScope.User
),
this.preferenceService.set(
'workbench.colorTheme',
themeId,
PreferenceScope.User
),
this.preferenceService.set(
'editor.autoSave',
autoSave,
PreferenceScope.User
),
this.preferenceService.set(
'editor.quickSuggestions',
quickSuggestions,
PreferenceScope.User
),
this.preferenceService.set(
AUTO_SCALE_SETTING,
autoScaleInterface,
PreferenceScope.User
),
this.preferenceService.set(
ZOOM_LEVEL_SETTING,
interfaceScale,
PreferenceScope.User
),
// this.preferenceService.set(AUTO_UPDATE_SETTING, checkForUpdates, PreferenceScope.User),
this.preferenceService.set(
COMPILE_VERBOSE_SETTING,
verboseOnCompile,
PreferenceScope.User
),
this.preferenceService.set(
COMPILE_WARNINGS_SETTING,
compilerWarnings,
PreferenceScope.User
),
this.preferenceService.set(
UPLOAD_VERBOSE_SETTING,
verboseOnUpload,
PreferenceScope.User
),
this.preferenceService.set(
UPLOAD_VERIFY_SETTING,
verifyAfterUpload,
PreferenceScope.User
),
this.preferenceService.set(
SHOW_ALL_FILES_SETTING,
sketchbookShowAllFiles,
PreferenceScope.User
),
this.configService.setConfiguration(config),
]);
this.onDidChangeEmitter.fire(this._settings);
// after saving all the settings, if we need to change the language we need to perform a reload
if (currentLanguage !== nls.locale) {
window.localStorage.setItem(nls.localeId, currentLanguage);
window.location.reload();
}
return true;
}
}

View File

@ -1,6 +1,6 @@
import * as React from 'react';
import { BoardUserField } from '../../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export const UserFieldsComponent = ({
initialBoardUserFields,

View File

@ -10,7 +10,7 @@ import {
import { ListWidget } from '../widgets/component-list/list-widget';
import { Installable } from '../../common/protocol';
import { ListItemRenderer } from '../widgets/component-list/list-item-renderer';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class LibraryListWidget extends ListWidget<LibraryPackage> {

View File

@ -4,7 +4,7 @@ import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-con
import { MenuModelRegistry } from '@theia/core';
import { LibraryListWidget } from './library-list-widget';
import { ArduinoMenus } from '../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class LibraryListWidgetFrontendContribution

View File

@ -1,7 +1,7 @@
import { inject, injectable } from 'inversify';
import { Emitter } from '@theia/core/lib/common/event';
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
import { OutputChannelManager } from '@theia/output/lib/common/output-channel';
import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
import {
OutputMessage,
ProgressMessage,

View File

@ -10,7 +10,7 @@ import {
import { ArduinoToolbar } from '../../toolbar/arduino-toolbar';
import { SerialModel } from '../serial-model';
import { ArduinoMenus } from '../../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export namespace SerialMonitor {
export namespace Commands {

View File

@ -15,8 +15,8 @@ import { SerialModel } from '../serial-model';
import { Serial, SerialConnectionManager } from '../serial-connection-manager';
import { SerialMonitorSendInput } from './serial-monitor-send-input';
import { SerialMonitorOutput } from './serial-monitor-send-output';
import { nls } from '@theia/core/lib/browser/nls';
import { BoardsServiceProvider } from '../../boards/boards-service-provider';
import { nls } from '@theia/core/lib/common';
@injectable()
export class MonitorWidget extends ReactWidget {

View File

@ -3,7 +3,7 @@ import { Key, KeyCode } from '@theia/core/lib/browser/keys';
import { Board, Port } from '../../../common/protocol/boards-service';
import { SerialConfig } from '../../../common/protocol/serial-service';
import { isOSX } from '@theia/core/lib/common/os';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export namespace SerialMonitorSendInput {
export interface Props {

View File

@ -18,8 +18,8 @@ import {
import { BoardsConfig } from '../boards/boards-config';
import { SerialModel } from './serial-model';
import { ThemeService } from '@theia/core/lib/browser/theming';
import { nls } from '@theia/core/lib/browser/nls';
import { CoreService } from '../../common/protocol';
import { nls } from '@theia/core/lib/common/nls';
@injectable()
export class SerialConnectionManager {

View File

@ -15,7 +15,7 @@ import {
import { Sketch } from '../../../common/protocol';
import { SaveAsSketch } from '../../contributions/save-as-sketch';
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class ApplicationShell extends TheiaApplicationShell {

View File

@ -4,9 +4,18 @@ import {
CommonFrontendContribution as TheiaCommonFrontendContribution,
CommonCommands,
} from '@theia/core/lib/browser/common-frontend-contribution';
import { CommandRegistry } from '@theia/core/lib/common/command';
@injectable()
export class CommonFrontendContribution extends TheiaCommonFrontendContribution {
registerCommands(commandRegistry: CommandRegistry): void {
super.registerCommands(commandRegistry);
for (const command of [CommonCommands.CONFIGURE_DISPLAY_LANGUAGE]) {
commandRegistry.unregisterCommand(command);
}
}
registerMenus(registry: MenuModelRegistry): void {
super.registerMenus(registry);
for (const command of [

View File

@ -8,7 +8,7 @@ import {
} from '@theia/core/lib/browser/connection-status-service';
import { ArduinoDaemon } from '../../../common/protocol';
import { NotificationCenter } from '../../notification-center';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class FrontendConnectionStatusService extends TheiaFrontendConnectionStatusService {

View File

@ -3,7 +3,7 @@ import { DebugError } from '@theia/debug/lib/common/debug-service';
import { DebugSession } from '@theia/debug/lib/browser/debug-session';
import { DebugSessionOptions } from '@theia/debug/lib/browser/debug-session-options';
import { DebugSessionManager as TheiaDebugSessionManager } from '@theia/debug/lib/browser/debug-session-manager';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class DebugSessionManager extends TheiaDebugSessionManager {

View File

@ -5,7 +5,7 @@ import { LabelProvider } from '@theia/core/lib/browser';
import { EditorWidgetFactory as TheiaEditorWidgetFactory } from '@theia/editor/lib/browser/editor-widget-factory';
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
import { SketchesService, Sketch } from '../../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class EditorWidgetFactory extends TheiaEditorWidgetFactory {

View File

@ -5,7 +5,7 @@ import {
KeymapsCommands,
} from '@theia/keymaps/lib/browser/keymaps-frontend-contribution';
import { ArduinoMenus } from '../../menu/arduino-menus';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class KeymapsFrontendContribution extends TheiaKeymapsFrontendContribution {

View File

@ -1,7 +1,7 @@
import * as React from 'react';
import { NotificationComponent } from './notification-component';
import { NotificationCenterComponent as TheiaNotificationCenterComponent } from '@theia/messages/lib/browser/notification-center-component';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
const PerfectScrollbar = require('react-perfect-scrollbar');

View File

@ -1,6 +1,6 @@
import * as React from 'react';
import { NotificationComponent as TheiaNotificationComponent } from '@theia/messages/lib/browser/notification-component';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export class NotificationComponent extends TheiaNotificationComponent {
render(): React.ReactNode {

View File

@ -7,7 +7,7 @@ import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model
import {
OutputChannelManager as TheiaOutputChannelManager,
OutputChannel as TheiaOutputChannel,
} from '@theia/output/lib/common/output-channel';
} from '@theia/output/lib/browser/output-channel';
@injectable()
export class OutputChannelManager extends TheiaOutputChannelManager {

View File

@ -0,0 +1,19 @@
import { ViewContainer } from '@theia/core/lib/browser/view-container';
import { injectable } from '@theia/core/shared/inversify';
import {
SearchInWorkspaceFactory as TheiaSearchInWorkspaceFactory,
SEARCH_VIEW_CONTAINER_TITLE_OPTIONS,
} from '@theia/search-in-workspace/lib/browser/search-in-workspace-factory';
@injectable()
export class SearchInWorkspaceFactory extends TheiaSearchInWorkspaceFactory {
async createWidget(): Promise<ViewContainer> {
const viewContainer = await super.createWidget();
viewContainer.setTitleOptions({
...SEARCH_VIEW_CONTAINER_TITLE_OPTIONS,
iconClass: 'fa fa-arduino-search',
});
return viewContainer;
}
}

View File

@ -15,7 +15,7 @@ import { WorkspaceInputDialog } from './workspace-input-dialog';
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
import { SaveAsSketch } from '../../contributions/save-as-sketch';
import { SingleTextInputDialog } from '@theia/core/lib/browser';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribution {

View File

@ -3,7 +3,7 @@ import { remote } from 'electron';
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';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class WorkspaceDeleteHandler extends TheiaWorkspaceDeleteHandler {

View File

@ -6,7 +6,7 @@ import {
WorkspaceInputDialog as TheiaWorkspaceInputDialog,
WorkspaceInputDialogProps,
} from '@theia/workspace/lib/browser/workspace-input-dialog';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export class WorkspaceInputDialog extends TheiaWorkspaceInputDialog {
protected wasTouched = false;

View File

@ -17,7 +17,7 @@ import {
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/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class WorkspaceService extends TheiaWorkspaceService {

View File

@ -9,7 +9,7 @@ import { UserStatus } from './cloud-user-status';
import { CloudSketchbookTreeWidget } from './cloud-sketchbook-tree-widget';
import { AuthenticationClientService } from '../../auth/authentication-client-service';
import { CloudSketchbookTreeModel } from './cloud-sketchbook-tree-model';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class CloudSketchbookCompositeWidget extends BaseWidget {

View File

@ -27,7 +27,7 @@ import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-ser
import { Contribution } from '../../contributions/contribution';
import { ArduinoPreferences } from '../../arduino-preferences';
import { MainMenuManager } from '../../../common/main-menu-manager';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export const SKETCHBOOKSYNC__CONTEXT = ['arduino-sketchbook-sync--context'];

View File

@ -14,7 +14,7 @@ import { FileService } from '@theia/filesystem/lib/browser/file-service';
import URI from '@theia/core/lib/common/uri';
import { SketchCache } from './cloud-sketch-cache';
import { Create } from '../../create/typings';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export function sketchBaseDir(sketch: Create.Sketch): FileStat {
// extract the sketch path

View File

@ -11,7 +11,7 @@ import { TreeNode } from '@theia/core/lib/browser/tree';
import { CompositeTreeNode } from '@theia/core/lib/browser';
import { shell } from 'electron';
import { SketchbookTreeWidget } from '../sketchbook/sketchbook-tree-widget';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
const LEARN_MORE_URL =
'https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-cloud-sketch-sync';

View File

@ -34,7 +34,7 @@ import { FileStat } from '@theia/filesystem/lib/common/files';
import { WorkspaceNode } from '@theia/navigator/lib/browser/navigator-tree';
import { posix, splitSketchPath } from '../../create/create-paths';
import { Create } from '../../create/typings';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
const MESSAGE_TIMEOUT = 5 * 1000;
const deepmerge = require('deepmerge').default;

View File

@ -7,7 +7,7 @@ import { CloudSketchbookTreeModel } from './cloud-sketchbook-tree-model';
import { AuthenticationClientService } from '../../auth/authentication-client-service';
import { CloudUserCommands } from '../../auth/cloud-user-commands';
import { AuthenticationSessionAccountInformation } from '../../../common/protocol/authentication-service';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export class UserStatus extends React.Component<
UserStatus.Props,

View File

@ -12,7 +12,7 @@ import { ListWidget } from './list-widget';
import { ComponentList } from './component-list';
import { ListItemRenderer } from './list-item-renderer';
import { ResponseServiceArduino } from '../../../common/protocol';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
export class FilterableListContainer<
T extends ArduinoComponent

View File

@ -4,7 +4,7 @@ import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { Installable } from '../../../common/protocol/installable';
import { ArduinoComponent } from '../../../common/protocol/arduino-component';
import { ComponentListItem } from './component-list-item';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class ListItemRenderer<T extends ArduinoComponent> {

View File

@ -1,4 +1,4 @@
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
import * as React from 'react';
export class SearchBar extends React.Component<SearchBar.Props> {

View File

@ -17,7 +17,7 @@ import { ArduinoPreferences } from '../../arduino-preferences';
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
import { SelectableTreeNode } from '@theia/core/lib/browser/tree/tree-selection';
import { Sketch } from '../../contributions/contribution';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class SketchbookTreeWidget extends FileTreeWidget {

View File

@ -6,7 +6,7 @@ import { Message, MessageLoop } from '@phosphor/messaging';
import { Disposable } from '@theia/core/lib/common/disposable';
import { BaseWidget } from '@theia/core/lib/browser/widgets/widget';
import { SketchbookTreeWidget } from './sketchbook-tree-widget';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class SketchbookWidget extends BaseWidget {

View File

@ -1,3 +1,5 @@
import { RecursivePartial } from '@theia/core/lib/common/types';
export const ConfigServicePath = '/services/config-service';
export const ConfigService = Symbol('ConfigService');
export interface ConfigService {
@ -11,6 +13,29 @@ export interface ConfigService {
isInSketchDir(uri: string): Promise<boolean>;
}
export interface Daemon {
readonly port: string | number;
}
export namespace Daemon {
export function is(
daemon: RecursivePartial<Daemon> | undefined
): daemon is Daemon {
return !!daemon && !!daemon.port;
}
export function sameAs(
left: RecursivePartial<Daemon> | undefined,
right: RecursivePartial<Daemon> | undefined
): boolean {
if (left === undefined) {
return right === undefined;
}
if (right === undefined) {
return left === undefined;
}
return String(left.port) === String(right.port);
}
}
export interface ProxySettings {
protocol: string;
hostname: string;
@ -87,11 +112,13 @@ export namespace Network {
}
export interface Config {
readonly locale: string;
readonly sketchDirUri: string;
readonly dataDirUri: string;
readonly downloadsDirUri: string;
readonly additionalUrls: string[];
readonly network: Network;
readonly daemon: Daemon;
}
export namespace Config {
export function sameAs(left: Config, right: Config): boolean {
@ -106,6 +133,7 @@ export namespace Config {
}
}
return (
left.locale === right.locale &&
left.dataDirUri === right.dataDirUri &&
left.downloadsDirUri === right.downloadsDirUri &&
left.sketchDirUri === right.sketchDirUri &&

View File

@ -7,7 +7,7 @@ import {
} from '@theia/core/lib/browser/connection-status-service';
import { ElectronWindowService as TheiaElectronWindowService } from '@theia/core/lib/electron-browser/window/electron-window-service';
import { SplashService } from '../electron-common/splash-service';
import { nls } from '@theia/core/lib/browser/nls';
import { nls } from '@theia/core/lib/common';
@injectable()
export class ElectronWindowService extends TheiaElectronWindowService {

View File

@ -15,10 +15,11 @@ import {
ArduinoMenus,
PlaceholderMenuNode,
} from '../../../browser/menu/arduino-menus';
import electron = require('@theia/core/shared/electron');
@injectable()
export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
createMenuBar(): Electron.Menu {
createElectronMenuBar(): Electron.Menu {
this._toggledCommands.clear(); // https://github.com/eclipse-theia/theia/issues/8977
const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR);
const template = this.fillMenuTemplate([], menuModel);
@ -30,7 +31,17 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
return menu;
}
createContextMenu(menuPath: MenuPath, args?: any[]): Electron.Menu {
async setMenuBar(): Promise<void> {
await this.preferencesService.ready;
const createdMenuBar = this.createElectronMenuBar();
if (isOSX) {
electron.remote.Menu.setApplicationMenu(createdMenuBar);
} else {
electron.remote.getCurrentWindow().setMenu(createdMenuBar);
}
}
createElectronContextMenu(menuPath: MenuPath, args?: any[]): Electron.Menu {
const menuModel = this.menuProvider.getMenu(menuPath);
const template = this.fillMenuTemplate([], menuModel, args, {
showDisabled: false,
@ -99,7 +110,7 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
return { label, submenu };
}
protected handleDefault(
protected handleElectronDefault(
menuNode: CompositeMenuNode,
args: any[] = [],
options?: ElectronMenuOptions

View File

@ -17,6 +17,7 @@ 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';
app.commandLine.appendSwitch('disable-http-cache');
@ -35,6 +36,20 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
return super.start(config);
}
protected getTitleBarStyle(): 'native' | 'custom' {
return 'native';
}
protected hookApplicationEvents(): void {
app.on('will-quit', this.onWillQuit.bind(this));
app.on('second-instance', this.onSecondInstance.bind(this));
app.on('window-all-closed', this.onWindowAllClosed.bind(this));
ipcMain.on('restart', ({ sender }) => {
this.restart(sender.id);
});
}
/**
* Use this rather than creating `BrowserWindow` instances from scratch, since some security parameters need to be set, this method will do it.
*

View File

@ -1,7 +1,7 @@
import { inject, injectable } from 'inversify';
import { NewWindowOptions } from '@theia/core/lib/browser/window/window-service';
import { ElectronMainWindowServiceImpl as TheiaElectronMainWindowService } from '@theia/core/lib/electron-main/electron-main-window-service-impl';
import { ElectronMainApplication } from './electron-main-application';
import { NewWindowOptions } from '@theia/core/lib/common/window';
@injectable()
export class ElectronMainWindowServiceImpl extends TheiaElectronMainWindowService {

View File

@ -12,6 +12,7 @@ import { Event, Emitter } from '@theia/core/lib/common/event';
import { environment } from '@theia/application-package/lib/environment';
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
import { LocalizationProvider } from '@theia/core/lib/node/i18n/localization-provider';
import { ArduinoDaemon, NotificationServiceServer } from '../common/protocol';
import { DaemonLog } from './daemon-log';
import { CLI_CONFIG } from './cli-config';
@ -31,6 +32,9 @@ export class ArduinoDaemonImpl
@inject(NotificationServiceServer)
protected readonly notificationService: NotificationServiceServer;
@inject(LocalizationProvider)
protected readonly localizationProvider: LocalizationProvider;
protected readonly toDispose = new DisposableCollection();
protected readonly onDaemonStartedEmitter = new Emitter<void>();
protected readonly onDaemonStoppedEmitter = new Emitter<void>();

View File

@ -1,4 +1,5 @@
import { RecursivePartial } from '@theia/core/lib/common/types';
import { Daemon } from '../common/protocol/config-service';
export const CLI_CONFIG = 'arduino-cli.yaml';
@ -21,29 +22,6 @@ export namespace BoardManager {
}
}
export interface Daemon {
readonly port: string | number;
}
export namespace Daemon {
export function is(
daemon: RecursivePartial<Daemon> | undefined
): daemon is Daemon {
return !!daemon && !!daemon.port;
}
export function sameAs(
left: RecursivePartial<Daemon> | undefined,
right: RecursivePartial<Daemon> | undefined
): boolean {
if (left === undefined) {
return right === undefined;
}
if (right === undefined) {
return left === undefined;
}
return String(left.port) === String(right.port);
}
}
export interface Directories {
readonly data: string;
readonly downloads: string;
@ -123,6 +101,7 @@ export interface Network {
// Arduino CLI config scheme
export interface CliConfig {
locale?: string;
board_manager?: RecursivePartial<BoardManager>;
directories?: RecursivePartial<Directories>;
logging?: RecursivePartial<Logging>;

View File

@ -95,6 +95,7 @@ export class ConfigServiceImpl
downloadsDirUri,
sketchDirUri,
network,
locale,
} = config;
copyDefaultCliConfig.directories = {
data: FileUri.fsPath(dataDirUri),
@ -104,6 +105,7 @@ export class ConfigServiceImpl
copyDefaultCliConfig.board_manager = {
additional_urls: [...additionalUrls],
};
copyDefaultCliConfig.locale = locale || 'en';
const proxy = Network.stringify(network);
copyDefaultCliConfig.network = { proxy };
const { port } = copyDefaultCliConfig.daemon;
@ -214,7 +216,7 @@ export class ConfigServiceImpl
protected async mapCliConfigToAppConfig(
cliConfig: DefaultCliConfig
): Promise<Config> {
const { directories } = cliConfig;
const { directories, locale = 'en', daemon } = cliConfig;
const { data, user, downloads } = directories;
const additionalUrls: Array<string> = [];
if (cliConfig.board_manager && cliConfig.board_manager.additional_urls) {
@ -229,6 +231,8 @@ export class ConfigServiceImpl
downloadsDirUri: FileUri.create(downloads).toString(),
additionalUrls,
network,
locale,
daemon,
};
}

View File

@ -1,214 +1,247 @@
import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
const disableJSDOM = enableJSDOM();
// import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
// const disableJSDOM = enableJSDOM();
import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
import { ApplicationProps } from '@theia/application-package/lib/application-props';
FrontendApplicationConfigProvider.set({
...ApplicationProps.DEFAULT.frontend.config,
});
// import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
// import { ApplicationProps } from '@theia/application-package/lib/application-props';
// FrontendApplicationConfigProvider.set({
// ...ApplicationProps.DEFAULT.frontend.config,
// });
import { MessageService } from '@theia/core';
import { BoardsServiceProvider } from '../../browser/boards/boards-service-provider';
import { BoardsListWidgetFrontendContribution } from '../../browser/boards/boards-widget-frontend-contribution';
import {
BoardsPackage,
BoardsService,
ResponseServiceArduino,
} from '../../common/protocol';
import { IMock, It, Mock, Times } from 'typemoq';
import { Container, ContainerModule } from 'inversify';
import { BoardsAutoInstaller } from '../../browser/boards/boards-auto-installer';
import { tick } from '../utils';
import { ListWidget } from '../../browser/widgets/component-list/list-widget';
import { aBoardConfig, anInstalledPackage, aPackage } from './fixtures/boards';
// import { MessageService } from '@theia/core';
// import { BoardsServiceProvider } from '../../browser/boards/boards-service-provider';
// import { BoardsListWidgetFrontendContribution } from '../../browser/boards/boards-widget-frontend-contribution';
// import {
// Board,
// BoardsPackage,
// BoardsService,
// Port,
// ResponseServiceArduino,
// } from '../../common/protocol';
// import { IMock, It, Mock, Times } from 'typemoq';
// import { Container, ContainerModule } from 'inversify';
// import { BoardsAutoInstaller } from '../../browser/boards/boards-auto-installer';
// import { BoardsConfig } from '../../browser/boards/boards-config';
// import { tick } from '../utils';
// import { ListWidget } from '../../browser/widgets/component-list/list-widget';
disableJSDOM();
// disableJSDOM();
describe('BoardsAutoInstaller', () => {
let subject: BoardsAutoInstaller;
let messageService: IMock<MessageService>;
let boardsService: IMock<BoardsService>;
let boardsServiceClient: IMock<BoardsServiceProvider>;
let responseService: IMock<ResponseServiceArduino>;
let boardsManagerFrontendContribution: IMock<BoardsListWidgetFrontendContribution>;
let boardsManagerWidget: IMock<ListWidget<BoardsPackage>>;
// const aBoard: Board = {
// fqbn: 'some:board:fqbn',
// name: 'Some Arduino Board',
// port: { address: '/lol/port1234', protocol: 'serial' },
// };
// const aPort: Port = {
// address: aBoard.port!.address,
// protocol: aBoard.port!.protocol,
// };
// const aBoardConfig: BoardsConfig.Config = {
// selectedBoard: aBoard,
// selectedPort: aPort,
// };
// const aPackage: BoardsPackage = {
// author: 'someAuthor',
// availableVersions: ['some.ver.sion', 'some.other.version'],
// boards: [aBoard],
// deprecated: false,
// description: 'Some Arduino Board, Some Other Arduino Board',
// id: 'some:arduinoCoreId',
// installable: true,
// moreInfoLink: 'http://www.some-url.lol/',
// name: 'Some Arduino Package',
// summary: 'Boards included in this package:',
// };
let testContainer: Container;
// const anInstalledPackage: BoardsPackage = {
// ...aPackage,
// installedVersion: 'some.ver.sion',
// };
beforeEach(() => {
testContainer = new Container();
messageService = Mock.ofType<MessageService>();
boardsService = Mock.ofType<BoardsService>();
boardsServiceClient = Mock.ofType<BoardsServiceProvider>();
responseService = Mock.ofType<ResponseServiceArduino>();
boardsManagerFrontendContribution =
Mock.ofType<BoardsListWidgetFrontendContribution>();
boardsManagerWidget = Mock.ofType<ListWidget<BoardsPackage>>();
// describe('BoardsAutoInstaller', () => {
// let subject: BoardsAutoInstaller;
// let messageService: IMock<MessageService>;
// let boardsService: IMock<BoardsService>;
// let boardsServiceClient: IMock<BoardsServiceProvider>;
// let responseService: IMock<ResponseServiceArduino>;
// let boardsManagerFrontendContribution: IMock<BoardsListWidgetFrontendContribution>;
// let boardsManagerWidget: IMock<ListWidget<BoardsPackage>>;
boardsManagerWidget.setup((b) =>
b.refresh(aPackage.name.toLocaleLowerCase())
);
// let testContainer: Container;
boardsManagerFrontendContribution
.setup((b) => b.openView({ reveal: true }))
.returns(async () => boardsManagerWidget.object);
// beforeEach(() => {
// testContainer = new Container();
// messageService = Mock.ofType<MessageService>();
// boardsService = Mock.ofType<BoardsService>();
// boardsServiceClient = Mock.ofType<BoardsServiceProvider>();
// responseService = Mock.ofType<ResponseServiceArduino>();
// boardsManagerFrontendContribution =
// Mock.ofType<BoardsListWidgetFrontendContribution>();
// boardsManagerWidget = Mock.ofType<ListWidget<BoardsPackage>>();
messageService
.setup((m) => m.showProgress(It.isAny(), It.isAny()))
.returns(async () => ({
cancel: () => null,
id: '',
report: () => null,
result: Promise.resolve(''),
}));
// boardsManagerWidget.setup((b) =>
// b.refresh(aPackage.name.toLocaleLowerCase())
// );
responseService
.setup((r) => r.onProgressDidChange(It.isAny()))
.returns(() => ({ dispose: () => null }));
// boardsManagerFrontendContribution
// .setup((b) => b.openView({ reveal: true }))
// .returns(async () => boardsManagerWidget.object);
const module = new ContainerModule((bind) => {
bind(BoardsAutoInstaller).toSelf();
bind(MessageService).toConstantValue(messageService.object);
bind(BoardsService).toConstantValue(boardsService.object);
bind(BoardsServiceProvider).toConstantValue(boardsServiceClient.object);
bind(ResponseServiceArduino).toConstantValue(responseService.object);
bind(BoardsListWidgetFrontendContribution).toConstantValue(
boardsManagerFrontendContribution.object
);
});
// messageService
// .setup((m) => m.showProgress(It.isAny(), It.isAny()))
// .returns(async () => ({
// cancel: () => null,
// id: '',
// report: () => null,
// result: Promise.resolve(''),
// }));
testContainer.load(module);
subject = testContainer.get(BoardsAutoInstaller);
});
// responseService
// .setup((r) => r.onProgressDidChange(It.isAny()))
// .returns(() => ({ dispose: () => null }));
context('when it starts', () => {
it('should register to the BoardsServiceClient in order to check the packages every a new board is plugged in', () => {
subject.onStart();
boardsServiceClient.verify(
(b) => b.onBoardsConfigChanged(It.isAny()),
Times.once()
);
});
// const module = new ContainerModule((bind) => {
// bind(BoardsAutoInstaller).toSelf();
// bind(MessageService).toConstantValue(messageService.object);
// bind(BoardsService).toConstantValue(boardsService.object);
// bind(BoardsServiceProvider).toConstantValue(boardsServiceClient.object);
// bind(ResponseServiceArduino).toConstantValue(responseService.object);
// bind(BoardsListWidgetFrontendContribution).toConstantValue(
// boardsManagerFrontendContribution.object
// );
// });
context('and it checks the installable packages', () => {
context(`and a port and a board a selected`, () => {
beforeEach(() => {
boardsServiceClient
.setup((b) => b.boardsConfig)
.returns(() => aBoardConfig);
});
context('if no package for the board is already installed', () => {
context('if a candidate package for the board is found', () => {
beforeEach(() => {
boardsService
.setup((b) => b.search(It.isValue({})))
.returns(async () => [aPackage]);
});
it('should show a notification suggesting to install that package', async () => {
messageService
.setup((m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
)
.returns(() => Promise.resolve('Install Manually'));
subject.onStart();
await tick();
messageService.verify(
(m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
Times.once()
);
});
context(`if the answer to the message is 'Yes'`, () => {
beforeEach(() => {
messageService
.setup((m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
)
.returns(() => Promise.resolve('Yes'));
});
it('should install the package', async () => {
subject.onStart();
// testContainer.load(module);
// subject = testContainer.get(BoardsAutoInstaller);
// });
await tick();
// context('when it starts', () => {
// it('should register to the BoardsServiceClient in order to check the packages every a new board is plugged in', () => {
// subject.onStart();
// boardsServiceClient.verify(
// (b) => b.onBoardsConfigChanged(It.isAny()),
// Times.once()
// );
// });
messageService.verify(
(m) => m.showProgress(It.isAny(), It.isAny()),
Times.once()
);
});
});
context(
`if the answer to the message is 'Install Manually'`,
() => {
beforeEach(() => {
messageService
.setup((m) =>
m.info(
It.isAnyString(),
It.isAnyString(),
It.isAnyString()
)
)
.returns(() => Promise.resolve('Install Manually'));
});
it('should open the boards manager widget', () => {
subject.onStart();
});
}
);
});
context('if a candidate package for the board is not found', () => {
beforeEach(() => {
boardsService
.setup((b) => b.search(It.isValue({})))
.returns(async () => []);
});
it('should do nothing', async () => {
subject.onStart();
await tick();
messageService.verify(
(m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
Times.never()
);
});
});
});
context(
'if one of the packages for the board is already installed',
() => {
beforeEach(() => {
boardsService
.setup((b) => b.search(It.isValue({})))
.returns(async () => [aPackage, anInstalledPackage]);
messageService
.setup((m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
)
.returns(() => Promise.resolve('Yes'));
});
it('should do nothing', async () => {
subject.onStart();
await tick();
messageService.verify(
(m) =>
m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
Times.never()
);
});
}
);
});
context('and there is no selected board or port', () => {
it('should do nothing', async () => {
subject.onStart();
await tick();
messageService.verify(
(m) => m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
Times.never()
);
});
});
});
});
});
// context('and it checks the installable packages', () => {
// context(`and a port and a board a selected`, () => {
// beforeEach(() => {
// boardsServiceClient
// .setup((b) => b.boardsConfig)
// .returns(() => aBoardConfig);
// });
// context('if no package for the board is already installed', () => {
// context('if a candidate package for the board is found', () => {
// beforeEach(() => {
// boardsService
// .setup((b) => b.search(It.isValue({})))
// .returns(async () => [aPackage]);
// });
// it('should show a notification suggesting to install that package', async () => {
// messageService
// .setup((m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
// )
// .returns(() => Promise.resolve('Install Manually'));
// subject.onStart();
// await tick();
// messageService.verify(
// (m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
// Times.once()
// );
// });
// context(`if the answer to the message is 'Yes'`, () => {
// beforeEach(() => {
// messageService
// .setup((m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
// )
// .returns(() => Promise.resolve('Yes'));
// });
// it('should install the package', async () => {
// subject.onStart();
// await tick();
// messageService.verify(
// (m) => m.showProgress(It.isAny(), It.isAny()),
// Times.once()
// );
// });
// });
// context(
// `if the answer to the message is 'Install Manually'`,
// () => {
// beforeEach(() => {
// messageService
// .setup((m) =>
// m.info(
// It.isAnyString(),
// It.isAnyString(),
// It.isAnyString()
// )
// )
// .returns(() => Promise.resolve('Install Manually'));
// });
// it('should open the boards manager widget', () => {
// subject.onStart();
// });
// }
// );
// });
// context('if a candidate package for the board is not found', () => {
// beforeEach(() => {
// boardsService
// .setup((b) => b.search(It.isValue({})))
// .returns(async () => []);
// });
// it('should do nothing', async () => {
// subject.onStart();
// await tick();
// messageService.verify(
// (m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
// Times.never()
// );
// });
// });
// });
// context(
// 'if one of the packages for the board is already installed',
// () => {
// beforeEach(() => {
// boardsService
// .setup((b) => b.search(It.isValue({})))
// .returns(async () => [aPackage, anInstalledPackage]);
// messageService
// .setup((m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString())
// )
// .returns(() => Promise.resolve('Yes'));
// });
// it('should do nothing', async () => {
// subject.onStart();
// await tick();
// messageService.verify(
// (m) =>
// m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
// Times.never()
// );
// });
// }
// );
// });
// context('and there is no selected board or port', () => {
// it('should do nothing', async () => {
// subject.onStart();
// await tick();
// messageService.verify(
// (m) => m.info(It.isAnyString(), It.isAnyString(), It.isAnyString()),
// Times.never()
// );
// });
// });
// });
// });
// });

View File

@ -4,26 +4,26 @@
"version": "2.0.0-beta.12",
"license": "AGPL-3.0-or-later",
"dependencies": {
"@theia/core": "1.18.0",
"@theia/debug": "1.18.0",
"@theia/editor": "1.18.0",
"@theia/editor-preview": "1.18.0",
"@theia/file-search": "1.18.0",
"@theia/filesystem": "1.18.0",
"@theia/keymaps": "1.18.0",
"@theia/messages": "1.18.0",
"@theia/monaco": "1.18.0",
"@theia/navigator": "1.18.0",
"@theia/plugin-ext": "1.18.0",
"@theia/plugin-ext-vscode": "1.18.0",
"@theia/preferences": "1.18.0",
"@theia/process": "1.18.0",
"@theia/terminal": "1.18.0",
"@theia/workspace": "1.18.0",
"@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",
"arduino-ide-extension": "2.0.0-beta.12"
},
"devDependencies": {
"@theia/cli": "1.17.2"
"@theia/cli": "1.19.0"
},
"scripts": {
"prepare": "theia build --mode development",

View File

@ -5,27 +5,27 @@
"license": "AGPL-3.0-or-later",
"main": "src-gen/frontend/electron-main.js",
"dependencies": {
"@theia/core": "1.18.0",
"@theia/debug": "1.18.0",
"@theia/editor": "1.18.0",
"@theia/editor-preview": "1.18.0",
"@theia/electron": "1.18.0",
"@theia/file-search": "1.18.0",
"@theia/filesystem": "1.18.0",
"@theia/keymaps": "1.18.0",
"@theia/messages": "1.18.0",
"@theia/monaco": "1.18.0",
"@theia/navigator": "1.18.0",
"@theia/plugin-ext": "1.18.0",
"@theia/plugin-ext-vscode": "1.18.0",
"@theia/preferences": "1.18.0",
"@theia/process": "1.18.0",
"@theia/terminal": "1.18.0",
"@theia/workspace": "1.18.0",
"@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",
"arduino-ide-extension": "2.0.0-beta.12"
},
"devDependencies": {
"@theia/cli": "1.17.2"
"@theia/cli": "1.19.0"
},
"scripts": {
"prepare": "theia build --mode development",

View File

@ -9,7 +9,7 @@
"node-log-rotate": "^0.1.5"
},
"devDependencies": {
"@theia/cli": "1.17.2",
"@theia/cli": "1.19.0",
"cross-env": "^7.0.2",
"electron-builder": "22.7.0",
"electron-notarize": "^0.3.0",
@ -139,7 +139,7 @@
"theiaPluginsDir": "plugins",
"theiaPlugins": {
"vscode-builtin-cpp": "https://open-vsx.org/api/vscode/cpp/1.52.1/file/vscode.cpp-1.52.1.vsix",
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/nightly/vscode-arduino-tools-0.0.1-beta.1.vsix",
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.0.2-beta.1.vsix",
"vscode-builtin-json": "https://open-vsx.org/api/vscode/json/1.46.1/file/vscode.json-1.46.1.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix"

View File

@ -43,9 +43,6 @@
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme.",
"network": "Network",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
@ -60,14 +57,16 @@
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"languageServerLogging": "Enable language server logging",
"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"
"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",

View File

@ -66,7 +66,7 @@
"theiaPluginsDir": "plugins",
"theiaPlugins": {
"vscode-builtin-cpp": "https://open-vsx.org/api/vscode/cpp/1.52.1/file/vscode.cpp-1.52.1.vsix",
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/nightly/vscode-arduino-tools-0.0.1-beta.1.vsix",
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.0.2-beta.1.vsix",
"vscode-builtin-json": "https://open-vsx.org/api/vscode/json/1.46.1/file/vscode.json-1.46.1.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix"

684
yarn.lock
View File

@ -2104,38 +2104,6 @@
dependencies:
defer-to-connect "^1.0.1"
"@theia/application-manager@1.17.2":
version "1.17.2"
resolved "https://registry.yarnpkg.com/@theia/application-manager/-/application-manager-1.17.2.tgz#bcf5b23754705848a81d8a97f9e40ee141a6efc7"
integrity sha512-Ev/Rq3Da8pg22YzMPOJ/97rMmovHuvCDT9CLCNba5f9jgkBwX4WgS32q21qfucZ/OX3Y0V0EFSFilVyV7luzKA==
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.17.2"
"@theia/compression-webpack-plugin" "^3.0.0"
"@types/fs-extra" "^4.0.2"
babel-loader "^8.2.2"
buffer "^6.0.3"
circular-dependency-plugin "^5.2.2"
copy-webpack-plugin "^8.1.1"
css-loader "^6.2.0"
electron-rebuild "^1.8.6"
font-awesome-webpack "0.0.5-beta.2"
fs-extra "^4.0.2"
ignore-loader "^0.1.2"
less "^3.0.3"
setimmediate "^1.0.5"
source-map-loader "^2.0.1"
source-map-support "^0.5.19"
style-loader "^2.0.0"
umd-compat-loader "^2.1.2"
webpack "^5.48.0"
webpack-cli "4.7.0"
worker-loader "^3.0.8"
yargs "^15.3.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"
@ -2168,40 +2136,6 @@
worker-loader "^3.0.8"
yargs "^15.3.1"
"@theia/application-package@1.17.2":
version "1.17.2"
resolved "https://registry.yarnpkg.com/@theia/application-package/-/application-package-1.17.2.tgz#05b1f2c749bbd693013f17cdf8b57d5789cb70fb"
integrity sha512-IKeH+ow5h8tuW9dVV27I551EowcvKe5mBx/U14oKJ7krKZ0eLUqJPGJukNIlRLbhz/9ANJvsGXHw02qMhP7CXQ==
dependencies:
"@types/fs-extra" "^4.0.2"
"@types/request" "^2.0.3"
"@types/semver" "^5.4.0"
"@types/write-json-file" "^2.2.1"
changes-stream "^2.2.0"
deepmerge "^4.2.2"
fs-extra "^4.0.2"
is-electron "^2.1.0"
request "^2.82.0"
semver "^5.4.1"
write-json-file "^2.2.0"
"@theia/application-package@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/application-package/-/application-package-1.18.0.tgz#20bb0dd21c52bf58a79c99c73517558e1704bc2c"
integrity sha512-v8jzr3ItlzyeserrEGfy3MJRB1rH2ewKWfLSu26PGRsR38zip1ZGLsPmk10/v8NVYwPu5enD8tppWlikRWwFzA==
dependencies:
"@types/fs-extra" "^4.0.2"
"@types/request" "^2.0.3"
"@types/semver" "^5.4.0"
"@types/write-json-file" "^2.2.1"
changes-stream "^2.2.0"
deepmerge "^4.2.2"
fs-extra "^4.0.2"
is-electron "^2.1.0"
request "^2.82.0"
semver "^5.4.1"
write-json-file "^2.2.0"
"@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"
@ -2219,54 +2153,27 @@
semver "^5.4.1"
write-json-file "^2.2.0"
"@theia/bulk-edit@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/bulk-edit/-/bulk-edit-1.18.0.tgz#bf24abd1fb25085e0c763beacfb13c2f084641dd"
integrity sha512-AhuMHZYCM5ShUzaUVqP7a6e2q1iT40Tphl4FsfRA4YYavoz4h2z8vBLCVMhzMIBSt60cu3e3La61gEdrolwqcA==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/workspace" "1.18.0"
"@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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/callhierarchy/-/callhierarchy-1.18.0.tgz#af376982156265e81634c358414b058a09114680"
integrity sha512-Ym1Ws/XF0UbPhDzENQHOv1LXbuMMOevkM14mONGIdHMPT6b0V+plDUjhbtdiheR0vh4JgfZNwgmnoZAej97g5w==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/core" "1.19.0"
"@theia/editor" "1.19.0"
"@theia/monaco" "1.19.0"
ts-md5 "^1.2.2"
"@theia/cli@1.17.2":
version "1.17.2"
resolved "https://registry.yarnpkg.com/@theia/cli/-/cli-1.17.2.tgz#5558de75d59a1db3be60a54b871cb7e6fc2a9c8e"
integrity sha512-5Mwm8WO7smDle3R25i+OEEAT7EP/0Vgv0C6eH5GGS66eBcJEArKF7IxwhDf+qVJt3L/Qj7rePMoD9dVahiESbQ==
dependencies:
"@theia/application-manager" "1.17.2"
"@theia/application-package" "1.17.2"
"@theia/ovsx-client" "1.17.2"
"@types/chai" "^4.2.7"
"@types/mkdirp" "^0.5.2"
"@types/mocha" "^5.2.7"
"@types/node-fetch" "^2.5.7"
"@types/puppeteer" "^2.0.0"
"@types/requestretry" "^1.12.3"
"@types/tar" "^4.0.3"
chai "^4.2.0"
colors "^1.4.0"
decompress "^4.2.1"
https-proxy-agent "^5.0.0"
mocha "^7.0.0"
node-fetch "^2.6.0"
proxy-from-env "^1.1.0"
puppeteer "^2.0.0"
puppeteer-to-istanbul "^1.2.2"
temp "^0.9.1"
yargs "^15.3.1"
"@theia/cli@1.19.0":
version "1.19.0"
resolved "https://registry.yarnpkg.com/@theia/cli/-/cli-1.19.0.tgz#d9316b5e294ad5e7c4f66fd6d44efd9419d60955"
@ -2307,19 +2214,19 @@
serialize-javascript "^1.4.0"
webpack-sources "^1.0.1"
"@theia/console@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/console/-/console-1.18.0.tgz#eee88e6943f631d52baa8c928bb4c09d4aca96fd"
integrity sha512-pFEBeMXvNg3+s8ADt8xhgYSNyNtBypnx/2Xs4wCWqiLGosP+6w73+NRjIRr91zNnmDcD6JNszojBdw50B8AX5w==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/core" "1.19.0"
"@theia/monaco" "1.19.0"
anser "^2.0.1"
"@theia/core@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/core/-/core-1.18.0.tgz#9ab6beb99ac0cf7279f9471135705275c510572f"
integrity sha512-b80KrYHC3V88ZhtOx5DxHOH1jA2I41AxVpngoBcNCptu6Ve7q78SSvvoR+oq34mPuT3KgArPVrV0bK+b7hvbSw==
"@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==
dependencies:
"@babel/runtime" "^7.10.0"
"@phosphor/algorithm" "1"
@ -2333,7 +2240,7 @@
"@phosphor/virtualdom" "1"
"@phosphor/widgets" "1"
"@primer/octicons-react" "^9.0.0"
"@theia/application-package" "1.18.0"
"@theia/application-package" "1.19.0"
"@types/body-parser" "^1.16.4"
"@types/cookie" "^0.3.3"
"@types/dompurify" "^2.2.2"
@ -2371,6 +2278,7 @@
perfect-scrollbar "^1.3.0"
react "^16.8.0"
react-dom "^16.8.0"
react-tooltip "^4.2.21"
react-virtualized "^9.20.0"
reconnecting-websocket "^4.2.0"
reflect-metadata "^0.1.10"
@ -2384,25 +2292,25 @@
ws "^7.1.2"
yargs "^15.3.1"
"@theia/debug@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/debug/-/debug-1.18.0.tgz#473323cc924e02e37ab92c03c82c4436193e629a"
integrity sha512-slq2+9NCt+n6BOVtASnIk4WEUHueFqUfEtuWgD+ouNsMwN3FOxiz2Wo5ixRjDwlwvkalC/T3L1qQxd64QHHMcQ==
"@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.18.0"
"@theia/core" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/markers" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/output" "1.18.0"
"@theia/preferences" "1.18.0"
"@theia/process" "1.18.0"
"@theia/task" "1.18.0"
"@theia/terminal" "1.18.0"
"@theia/userstorage" "1.18.0"
"@theia/variable-resolver" "1.18.0"
"@theia/workspace" "1.18.0"
"@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"
jsonc-parser "^2.2.0"
mkdirp "^0.5.0"
p-debounce "^2.1.0"
@ -2411,29 +2319,29 @@
unzip-stream "^0.3.0"
vscode-debugprotocol "^1.32.0"
"@theia/editor-preview@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/editor-preview/-/editor-preview-1.18.0.tgz#f194d2969512f0574a7dd3cae3fa415c34e2944a"
integrity sha512-0JtmNAJlqBf0N/KG1rZKM7PjluR4JXBLOXgWZ36nflEPbSM1alY7DEtTYxQwkarzK4TytDiO9PZ/qPKPnxwMPw==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/core" "1.19.0"
"@theia/editor" "1.19.0"
"@theia/navigator" "1.19.0"
"@theia/editor@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/editor/-/editor-1.18.0.tgz#0aa862c4cd5ea9671595136b505bab2818757e84"
integrity sha512-eE+uLZmcTn6Ka4hGPu0lKgcRuGIOAZyxUwhKOG3/6wjIsdiWrnsD9ES1JlvYSd1VLuN/aZOjj+9vkehxqXjmdg==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/variable-resolver" "1.18.0"
"@theia/core" "1.19.0"
"@theia/variable-resolver" "1.19.0"
"@types/base64-arraybuffer" "0.1.0"
base64-arraybuffer "^0.1.5"
"@theia/electron@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/electron/-/electron-1.18.0.tgz#0c094d560bc85fd234ed36f87476e5f1391189cd"
integrity sha512-/VP2tqN2R6v2JAgR3TX3uT1QCmDr8ZZ9RYLrndokSpkKztBfcuhLuj1HjoOX+AUNQZKzuKHNiSSa5P2ZhM/T/w==
"@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==
dependencies:
"@electron/get" "^1.12.4"
electron "^9.0.2"
@ -2444,25 +2352,25 @@
unzipper "^0.9.11"
yargs "^15.3.1"
"@theia/file-search@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/file-search/-/file-search-1.18.0.tgz#4662eecb6e25f7f470268bb643b59e2f6a5ec6ff"
integrity sha512-+4lJhWFkk5p7Y20dK+MeiqYV969+CM2rLt/ifxT6fRrpWMI3EZlopN/48O+q2pr2n39hFEx8VCUENFg7p0VEug==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/process" "1.18.0"
"@theia/workspace" "1.18.0"
"@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"
vscode-ripgrep "^1.2.4"
"@theia/filesystem@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/filesystem/-/filesystem-1.18.0.tgz#b4a283960fdf649e54fd9b57d00e1e385b118da6"
integrity sha512-z0UGr+dmsJ8cYTTX15AhD6SD80n4VmwmQKgVGeMFBwVwVRA7uml1BmLspeREepVKnEp5Mllzj8p6sCIrmbwlMg==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/core" "1.19.0"
"@types/body-parser" "^1.17.0"
"@types/multer" "^1.4.7"
"@types/rimraf" "^2.0.2"
@ -2480,19 +2388,19 @@
uuid "^8.0.0"
vscode-languageserver-textdocument "^1.0.1"
"@theia/git@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/git/-/git-1.18.0.tgz#27aaaffd59811835464babbfa4cb72f9f6c5e4d6"
integrity sha512-9urYFBu15zzWFVQ//pt9Pto6vcmvHmIsQsYDtMTN6ioYzpV9PhKr09353H7TX5hrw6kJIEKEWSatBYNqd8sqRw==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/scm" "1.18.0"
"@theia/scm-extra" "1.18.0"
"@theia/workspace" "1.18.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/scm" "1.19.0"
"@theia/scm-extra" "1.19.0"
"@theia/workspace" "1.19.0"
"@types/diff" "^3.2.2"
"@types/p-queue" "^2.3.1"
diff "^3.4.0"
@ -2504,15 +2412,15 @@
p-queue "^2.4.2"
ts-md5 "^1.2.2"
"@theia/keymaps@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/keymaps/-/keymaps-1.18.0.tgz#ce19c4a8a1220698d6ef096074997ea0c850a2a7"
integrity sha512-S0KMLliVGXUZws4d5w1wc0yfn43qiPRaeWKIlp4b7+gNN0qCze52eSG+TdI9UnlWth2Gsx39fqxpG5WCzMCYhA==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/userstorage" "1.18.0"
"@theia/workspace" "1.18.0"
"@theia/core" "1.19.0"
"@theia/monaco" "1.19.0"
"@theia/userstorage" "1.19.0"
"@theia/workspace" "1.19.0"
"@types/lodash.debounce" "4.0.3"
ajv "^6.5.3"
jsonc-parser "^2.2.0"
@ -2528,22 +2436,22 @@
glob "^7.2.0"
typescript "^4.4.3"
"@theia/markers@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/markers/-/markers-1.18.0.tgz#8e1b0c1c55727915f4ea9c384dcf0c7d250774b8"
integrity sha512-gngj04GTRGS+RqTVYzp1rHGK+TcXEEdZRzJiHHSYjvGSj5XWioxE7cFwZDhQB0TGiHfXNauuWwRj5zJxXFceNg==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/workspace" "1.18.0"
"@theia/core" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/navigator" "1.19.0"
"@theia/workspace" "1.19.0"
"@theia/messages@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/messages/-/messages-1.18.0.tgz#d29ebb00a19daa1000519468ac59339547944d1d"
integrity sha512-TUU4/2of0BJuEayqKKsz9V6SRHPp4HYnb1H9IuJl2aavRAEEd7bk1iLB6n7UgQUHsVMqlkYqjEJdEJFuptCqTg==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/core" "1.19.0"
markdown-it "^8.4.0"
react-perfect-scrollbar "^1.5.3"
ts-md5 "^1.2.2"
@ -2553,32 +2461,32 @@
resolved "https://registry.yarnpkg.com/@theia/monaco-editor-core/-/monaco-editor-core-0.23.0.tgz#7a1cbb7a857a509ce8e75c9965abea752bd76e80"
integrity sha512-WyrotTd6ZfeXAX4icgFALTzlqE356tAQ5nRuwa2E0Qdp2YIO9GDcw5G2l2NJ8INO2ygujbE5pEdD5kJM5N4TOQ==
"@theia/monaco@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/monaco/-/monaco-1.18.0.tgz#a2bfcf8688dbe594f2e4e0f7924d39e4059ea841"
integrity sha512-XC/b21QuYXQwVjIIi8lse1VdV9nWRMb22h22AbPhMr/pGVq9ITH3kNA2ReDeyCRpn2eIEE9g9sGYwfs3wCB1YA==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/markers" "1.18.0"
"@theia/core" "1.19.0"
"@theia/editor" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/markers" "1.19.0"
"@theia/monaco-editor-core" "0.23.0"
"@theia/outline-view" "1.18.0"
"@theia/workspace" "1.18.0"
"@theia/outline-view" "1.19.0"
"@theia/workspace" "1.19.0"
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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/navigator/-/navigator-1.18.0.tgz#0f226fe223937c0dfc8c77854c607ed1d22e2778"
integrity sha512-Q9nNIrpgu8npGu3TU0JexdL4mP/XzIe4ZVZocmdV14pib98yS+mb7kT1AdCdvCr54eLxkdQMd25zqWflEexWCA==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/workspace" "1.18.0"
"@theia/core" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/workspace" "1.19.0"
minimatch "^3.0.4"
"@theia/node-pty@0.9.0-theia.6":
@ -2588,34 +2496,25 @@
dependencies:
nan "^2.14.0"
"@theia/outline-view@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/outline-view/-/outline-view-1.18.0.tgz#220bdd9f9d3adb64e1168512dbbe49861dea3f02"
integrity sha512-1ln78ZBK0aoMaoT91m5s9HYrQ/N18NmLnkSNP6wLr4DdGPPW60ptIwJkrEBjflni4kZ8DhGTrYt4A6yeaj/NyA==
"@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.18.0"
"@theia/core" "1.19.0"
perfect-scrollbar "^1.3.0"
"@theia/output@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/output/-/output-1.18.0.tgz#d404cc1bcdf23f7a6d086f296b60dc145a3211cb"
integrity sha512-wJ5vaJoKZUoV4FyKn/COVErawbfCg3Xb/LoB9sVmr260lU0h4SOjoj5n9J48iyS1C2RvIcmsiFR17hACRDffBQ==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/core" "1.19.0"
"@theia/editor" "1.19.0"
"@theia/monaco" "1.19.0"
"@types/p-queue" "^2.3.1"
p-queue "^2.4.2"
"@theia/ovsx-client@1.17.2":
version "1.17.2"
resolved "https://registry.yarnpkg.com/@theia/ovsx-client/-/ovsx-client-1.17.2.tgz#fbf0c404d69f7e06ac4b33c26f642e6ccb68fda1"
integrity sha512-Is5tYaFfSoti6KOE6TR1eQH9n0Lpgsi2K7MMa1Oe/ETKDzUTf2aq+8bR/BPtqjId8ldNJETQconvQNKhKPL0ew==
dependencies:
"@types/bent" "^7.0.1"
bent "^7.1.0"
semver "^5.4.1"
"@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"
@ -2625,52 +2524,53 @@
bent "^7.1.0"
semver "^5.4.1"
"@theia/plugin-ext-vscode@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/plugin-ext-vscode/-/plugin-ext-vscode-1.18.0.tgz#ef1e44992c0fb5b52d02a4c9b93b1da94f3f9a94"
integrity sha512-n64RzmlHoawNZY8pew9/e5lVMPqFGLmyprZm7oklaoR5h11l1/qB7tIe9JPLUOpvqoNtYhA9KYah4oeZ37OgNQ==
"@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.18.0"
"@theia/core" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/plugin" "1.18.0"
"@theia/plugin-ext" "1.18.0"
"@theia/terminal" "1.18.0"
"@theia/userstorage" "1.18.0"
"@theia/workspace" "1.18.0"
"@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"
"@types/request" "^2.0.3"
filenamify "^4.1.0"
request "^2.82.0"
"@theia/plugin-ext@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/plugin-ext/-/plugin-ext-1.18.0.tgz#f841e66d29c4cc56e4f73f4175168fcaeccdd0c9"
integrity sha512-6jI19cu5zJtDc38KqbqP95ujs/Ixbl6663CWILiPzw1+wCWmtrCogZmsgNWjpVUCnFBsKkei6bM5HEq8tAs9kg==
"@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.18.0"
"@theia/callhierarchy" "1.18.0"
"@theia/console" "1.18.0"
"@theia/core" "1.18.0"
"@theia/debug" "1.18.0"
"@theia/editor" "1.18.0"
"@theia/file-search" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/markers" "1.18.0"
"@theia/messages" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/output" "1.18.0"
"@theia/plugin" "1.18.0"
"@theia/preferences" "1.18.0"
"@theia/scm" "1.18.0"
"@theia/search-in-workspace" "1.18.0"
"@theia/task" "1.18.0"
"@theia/terminal" "1.18.0"
"@theia/timeline" "1.18.0"
"@theia/workspace" "1.18.0"
"@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" "*"
"@types/mime" "^2.0.1"
decompress "^4.2.1"
escape-html "^1.0.3"
@ -2679,6 +2579,7 @@
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"
@ -2687,140 +2588,140 @@
vscode-debugprotocol "^1.32.0"
vscode-textmate "^4.0.1"
"@theia/plugin@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/plugin/-/plugin-1.18.0.tgz#a7844aad0b415a192e9dbb3ab61c4ef967132b8c"
integrity sha512-yWI1oi89DQ4XKZb9UpCTTUSLSwh28jzE6qqzvnfAoJGGn/3ZYUlnyVSCiTpFQVTh2npFtU/rl0G3GZ+NvLi81A==
"@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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/preferences/-/preferences-1.18.0.tgz#5ee333bc6771b734b8c2a2d8b592faf6307eb960"
integrity sha512-CN2q3XaeGLZHJ2R9NHUAaHRmw6flJ15AglCOzzsME85TNks4Z4FPJM/gyOQwSCCrpIsLXkRPt+V6Q3m6hLz0UA==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/userstorage" "1.18.0"
"@theia/workspace" "1.18.0"
"@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"
jsonc-parser "^2.2.0"
"@theia/process@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/process/-/process-1.18.0.tgz#e499d84134c5bc9fde5bea9f21c61d091aea5f33"
integrity sha512-xqJqVJHRC5Ar+FN7Pt/xfIOQspzZ3u4mgZJ47s4GuaH/7da5LnOe1q5dULft5oFIZNgMkffqrsMWSX0VKGiW5Q==
"@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==
dependencies:
"@theia/core" "1.18.0"
"@theia/core" "1.19.0"
"@theia/node-pty" "0.9.0-theia.6"
string-argv "^0.1.1"
"@theia/scm-extra@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/scm-extra/-/scm-extra-1.18.0.tgz#3115c62982252629053b15c1f760f6caebedd601"
integrity sha512-VWbSoRCzn3cLQgSj3DsL+6tew8HU3nSWeTjfgq7xn1SgjfdSJZSfNLH9zbiqPTEe4NVQRIoZ/9jhB1IKFLZY+Q==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/scm" "1.18.0"
"@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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/scm/-/scm-1.18.0.tgz#62a9f5a1b748802b0b4bc9847e43d8a87da0e781"
integrity sha512-n+pLloNuTl+2edApIiL7M4BYo3SAwWIdzjcteDDkEQFEeSZRfkQ8izDhuD17Klh+Wn0IrQkeJukmGGauDzNLMA==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/core" "1.19.0"
"@theia/editor" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/navigator" "1.19.0"
"@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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/search-in-workspace/-/search-in-workspace-1.18.0.tgz#b23f0b5059848b6f41686c4c7061f1d22821c331"
integrity sha512-QqBaZhSgZ6dU5tE7J0zngelPYqH7Sx02bTrvwwlCeGOB+ow7pzfeaiqKIC9YBFZ9nVPBYBIvp/JbZDMOXDSBoQ==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/navigator" "1.18.0"
"@theia/process" "1.18.0"
"@theia/workspace" "1.18.0"
"@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"
minimatch "^3.0.4"
vscode-ripgrep "^1.2.4"
"@theia/task@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/task/-/task-1.18.0.tgz#52856c4a3526e71ecabc6d9f8f94b2bb87db1c47"
integrity sha512-vkD8JGr1IeVYpWfzT2uWrqkrC8GpjLd9BN46j0DHLLYCxX4H/A7laPVBzkuL4Z1sumlR1JEFJeW3zIqFZk5Q3Q==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/markers" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/preferences" "1.18.0"
"@theia/process" "1.18.0"
"@theia/terminal" "1.18.0"
"@theia/userstorage" "1.18.0"
"@theia/variable-resolver" "1.18.0"
"@theia/workspace" "1.18.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/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"
ajv "^6.5.3"
async-mutex "^0.3.1"
jsonc-parser "^2.2.0"
p-debounce "^2.1.0"
"@theia/terminal@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/terminal/-/terminal-1.18.0.tgz#d51b78e06e3c8bda1b0f1f5e53f0643094d9376a"
integrity sha512-ks68J6+TSVRj2IMmKpdaASgYrrh55DkGEKNc9I91EcOn6eM5bf/lI23yirwtdV8T4hXse7SReDngNC666qSaEQ==
"@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.18.0"
"@theia/editor" "1.18.0"
"@theia/filesystem" "1.18.0"
"@theia/monaco" "1.18.0"
"@theia/process" "1.18.0"
"@theia/workspace" "1.18.0"
"@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.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/timeline/-/timeline-1.18.0.tgz#46acf7a307cfbedd57092e892d3b8adf9ccf2c83"
integrity sha512-s+nJtUZmj3baT1Md/grW52PfsvYvasQq+EEZN+hqjwBLwzF1ooZUTVHcMFDOLCK4BsGhP2KJI5vpS18G6W4G4Q==
"@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.18.0"
"@theia/navigator" "1.18.0"
"@theia/core" "1.19.0"
"@theia/navigator" "1.19.0"
"@theia/userstorage@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/userstorage/-/userstorage-1.18.0.tgz#95dcd86bb363403464312c8619a776af78216f83"
integrity sha512-ZPoECJqw6LGRkQU/iPNC3iv1DA7HolSlXs94pjD1eeEcFL/75PJ6PXnna7trzD01POZrgNphCvuvkRqAn7/T4g==
"@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.18.0"
"@theia/filesystem" "1.18.0"
"@theia/core" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/variable-resolver@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/variable-resolver/-/variable-resolver-1.18.0.tgz#c7be990b603003a27262809e9c483e0f33d01f53"
integrity sha512-uQ+EzErQ5B8mOOKUyTUFH7zmBwisp0jfe207Ox07O9LlZys3E/CYOIryo3Hn74LUiprFzMPpLFYyiVBqDcs5VA==
"@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.18.0"
"@theia/core" "1.19.0"
"@theia/workspace@1.18.0":
version "1.18.0"
resolved "https://registry.yarnpkg.com/@theia/workspace/-/workspace-1.18.0.tgz#91af0b5a0e5e5c07c0cb08bed2daf4faa8a6c559"
integrity sha512-WDzQ4rHHFwbk6e7Wk4vsWEUREo15nBjRid1hwwkBr6uWp04eqFDwBaSvaSooPGWZbOqXIrLSB7z7DQh9Cv3nkg==
"@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.18.0"
"@theia/filesystem" "1.18.0"
"@theia/variable-resolver" "1.18.0"
"@theia/core" "1.19.0"
"@theia/filesystem" "1.19.0"
"@theia/variable-resolver" "1.19.0"
ajv "^6.5.3"
jsonc-parser "^2.2.0"
moment "2.24.0"
@ -3047,6 +2948,11 @@
dependencies:
keytar "*"
"@types/linkify-it@*":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-3.0.2.tgz#fd2cd2edbaa7eaac7e7f3c1748b52a19143846c9"
integrity sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==
"@types/lodash.debounce@4.0.3":
version "4.0.3"
resolved "https://registry.yarnpkg.com/@types/lodash.debounce/-/lodash.debounce-4.0.3.tgz#d712aee9e6136be77f70523ed9f0fc049a6cf15a"
@ -3078,6 +2984,19 @@
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
"@types/markdown-it@*":
version "12.2.3"
resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-12.2.3.tgz#0d6f6e5e413f8daaa26522904597be3d6cd93b51"
integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==
dependencies:
"@types/linkify-it" "*"
"@types/mdurl" "*"
"@types/mdurl@*":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
"@types/mime-types@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
@ -12083,6 +12002,14 @@ react-tabs@^3.1.2:
clsx "^1.1.0"
prop-types "^15.5.0"
react-tooltip@^4.2.21:
version "4.2.21"
resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-4.2.21.tgz#840123ed86cf33d50ddde8ec8813b2960bfded7f"
integrity sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==
dependencies:
prop-types "^15.7.2"
uuid "^7.0.3"
react-transition-group@^4.3.0:
version "4.4.1"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
@ -14373,6 +14300,11 @@ uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
uuid@^8.0.0, uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"