diff --git a/buildspec/lint.yml b/buildspec/lint.yml index 7a03a10e262..d44799d1186 100644 --- a/buildspec/lint.yml +++ b/buildspec/lint.yml @@ -26,7 +26,8 @@ phases: build: commands: - export HOME=/home/codebuild-user - - npm run testCompile + - npm run compile -w packages/core + - npm run testCompile -w packages/ --if-present - npm run lint - VCS_COMMIT_ID="${CODEBUILD_RESOLVED_SOURCE_VERSION}" - CI_BUILD_URL=$(echo $CODEBUILD_BUILD_URL | sed 's/#/%23/g') # Encode `#` in the URL because otherwise the url is clipped in the Codecov.io site diff --git a/buildspec/windowsTests.yml b/buildspec/windowsTests.yml index bc182bec1e1..820c9fa608a 100644 --- a/buildspec/windowsTests.yml +++ b/buildspec/windowsTests.yml @@ -30,7 +30,8 @@ phases: build: commands: - - npm run testCompile + - npm run compile -w packages/core + - npm run testCompile -w packages/ --if-present - npm run lint - $env:TEST_REPORT_DIR="$env:CODEBUILD_SRC_DIR/.test_reports"; npm run test - | diff --git a/docs/TESTPLAN.md b/docs/TESTPLAN.md index 59f86404385..0323ce3165f 100644 --- a/docs/TESTPLAN.md +++ b/docs/TESTPLAN.md @@ -45,8 +45,7 @@ The test suite has the following categories of tests: ## Test files -Currently, most if not all testing code lives in the subproject `packages/core/`. -For more information, see [arch_develop.md](./arch_develop.md#monorepo-structure) +Currently, most testing code lives in the subproject `packages/core/` due to the move to monorepo. See [arch_develop.md](./arch_develop.md#monorepo-structure). - `src/test/` : unit tests - `src/test/globalSetup.test.ts` : @@ -60,6 +59,8 @@ For more information, see [arch_develop.md](./arch_develop.md#monorepo-structure - `.vscode/launch.json` : defines VSCode launch configs useful for Toolkit developers, e.g. the `Extension Tests` config runs all tests in `src/test/`. +Many tests required running in an activated extension environment, but the core-lib is just a library and does not have any extension to activate itself. Core-lib tests are run from `packages/toolkit`, and web tests are run from `packages/amazonq`. + ## How we test VSCode documentation describes an [extension testing](https://code.visualstudio.com/api/working-with-extensions/testing-extension) diff --git a/docs/arch_develop.md b/docs/arch_develop.md index 1d9a5d8f48a..4880d5493c5 100644 --- a/docs/arch_develop.md +++ b/docs/arch_develop.md @@ -23,7 +23,7 @@ If you are considering contributing, please consider whether your implementation library or in `packages/toolkit`. If your work could be re-used by other packages (e.g. auth mechanisms, utilities), then it may belong in the core library. If instead you are adding something toolkit specific (eg. an integration to a new AWS service in the Explorer Tree), consider putting it in `packages/toolkit`. -To import from the core library, please export your desired code using `index.ts` files, and add an appropriate `exports` statement +To import from the core library, please export your desired code using `index.ts` files and add an appropriate `exports` statement in `packages/core/package.json`. Unless otherwise stated, the documentation throughout this project is referring to the code and @@ -51,25 +51,9 @@ Current quirks of the current monorepo status that should be resolved/evaluated - Pre-release only publishes packages/toolkit extension directly. It should be extended to other added extensions. See [`release.yml`](../.github/workflows/release.yml) - VSCode does not support inheriting/extending `.vscode/` settings: https://github.com/microsoft/vscode/issues/15909 -Additional quirks introduced by creating a core library from the original extension code: - -- Tests are ran from `packages/core/` -- Extension runs from `packages/toolkit` -- Extension tests run from the core lib. Since some of the tests require an extension context/sandbox, we initiate a "fake" extension to run these tests. This is also why there are vscode extension properties in the package.json -- Some of original extension code (that now lives in `packages/core`) depends on the package.json, specifically the contributes section. This section is very large AND needs to be present in both the core library and toolkit extension package.jsons. The core library code needs access to this section to create types, set up SAM debuggers, etc. The toolkit needs this section during packaging/debugging so that the extension can run in vscode. The short term solution was to creat a [build script](../packages/toolkit/scripts/build/handlePackageJson.ts) to copy necessary fields over to the toolkit extension during packaging and debugging. - ### Contributes and Settings -Some components of the core library depend on the `package.json`s of the extensions. One example of this is compile time checking of the extension's settings values. However, VSCode also requires a complete local `package.json` for the individual extensions during packaging. As a temporary workaround to this, we are using scripts to auto-populate the `package.json`s for the individual extensions from the core `package.json`. - -- [`packages/toolkit/../handlePackageJson.ts`](../packages/toolkit/scripts/build/handlePackageJson.ts) - - Copies the entirety of the `contributes` and `engine` sections, except for `configuration.properties` relating to `packages/amazon`. - - Restores to the original barebones `package.json` after packaging/debugging, to avoid a large amount of duplicate code. - - To develop for the Toolkit extension: add all changes to `packages/core/package.json` -- [`packages/amazonq/../syncPackageJson.ts`](../packages/amazonq/scripts/build/syncPackageJson.ts) - - Moves all Amazon Q related `configuration.properties` to the local `package.json` only, overwriting anything that exists with the same name locally. - - Does not restore, it is a superset of what exists in `packages/core` for `configuration.properties`. - - To develop for the Amazon Q extension: add all changes to `packages/amazonq/package.json`, EXCEPT for settings that are references by code in the core library, or settings that already exist in the core `package.json` +`packages/toolkit/` and `packages/amazonq` have independent extension packageJSON files. They do not rely on `packages/core/package.json`. However, to get typed icons in the core-lib we require a place to store the icon entries. This currently happens in `packages/core/package.json`. See [`icons.md`](./icons.md) for more information. If you are modifying or registering new debuggers in VS Code via the `debuggers` contribution point, you may need to regenerate the [definitions file](../packages/core/src/shared/sam/debugger/awsSamDebugConfiguration.gen.ts). After updating ['toolkit/package.json'](../packages/toolkit/package.json), run `npm run generateConfigurationAttributes -w packages/toolkit` diff --git a/package-lock.json b/package-lock.json index cba78c3f2b5..35da2da9e22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19446,12 +19446,15 @@ "packages/toolkit": { "name": "aws-toolkit-vscode", "version": "3.27.0-SNAPSHOT", - "engines": "This field will be autopopulated from the core module during debugging and packaging.", "license": "Apache-2.0", "dependencies": { "aws-core-vscode": "file:../core/" }, - "devDependencies": {} + "devDependencies": {}, + "engines": { + "npm": "^10.1.0", + "vscode": "^1.68.0" + } }, "plugins/eslint-plugin-aws-toolkits": { "version": "1.0.0", diff --git a/packages/amazonq/.vscode/launch.json b/packages/amazonq/.vscode/launch.json index a1fde10e9ef..120eacdb44d 100644 --- a/packages/amazonq/.vscode/launch.json +++ b/packages/amazonq/.vscode/launch.json @@ -99,6 +99,25 @@ "order": 2 } }, + { + "name": "Extension Tests (web)", + "type": "extensionHost", + "debugWebWorkerHost": true, + "request": "launch", + "args": [ + "--disable-extension=amazonwebservices.aws-toolkit-vscode", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionDevelopmentKind=web", + "--extensionTestsPath=${workspaceFolder}/dist/test/web/testRunnerWebCore", + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "webRun", + "presentation": { + "group": "3_ExtensionTests", + "order": 3 + } + }, { "name": "E2E Test (current file)", "type": "extensionHost", diff --git a/packages/amazonq/.vscode/tasks.json b/packages/amazonq/.vscode/tasks.json index 0647eb8792a..9fefd8ec182 100644 --- a/packages/amazonq/.vscode/tasks.json +++ b/packages/amazonq/.vscode/tasks.json @@ -109,7 +109,6 @@ // Since `webpack --watch` never terminates (but finishes packaging at some point), // VS Code uses this to parse the CLI output to pattern match something that indicates it is done "problemMatcher": "$ts-webpack-watch", - "dependsOn": ["copyPackageJson"], "options": { "cwd": "${workspaceFolder}/../../packages/core" } @@ -124,7 +123,7 @@ "label": "webRunTerminate", "command": "echo ${input:webRunTerminate}", "type": "shell", - "dependsOn": ["restorePackageJson"] + "dependsOn": [] }, // ---------- End: Web Mode Tasks ---------- { diff --git a/packages/amazonq/package.json b/packages/amazonq/package.json index 0f60e5c36f3..ade2c5160e1 100644 --- a/packages/amazonq/package.json +++ b/packages/amazonq/package.json @@ -46,19 +46,20 @@ "browser": "./dist/src/extensionWeb", "scripts": { "vscode:prepublish": "npm run clean && npm run buildScripts && webpack --mode production", - "buildScripts": "npm run generateNonCodeFiles && npm run copyFiles && npm run generateIcons && npm run generateSettings && npm run syncPackageJson && tsc -p ./ --noEmit", + "buildScripts": "npm run generateNonCodeFiles && npm run copyFiles && npm run generateIcons && npm run generateSettings && tsc -p ./ --noEmit", "generateNonCodeFiles": "ts-node ../../scripts/generateNonCodeFiles.ts", "copyFiles": "ts-node ./scripts/build/copyFiles.ts", - "syncPackageJson": "ts-node ./scripts/build/syncPackageJson.ts", "clean": "ts-node ../../scripts/clean.ts dist/ LICENSE NOTICE", - "compile": "npm run clean && npm run buildScripts && webpack --mode development", + "compile": "npm run clean && npm run buildScripts && webpack", + "compileDev": "npm run testCompile && webpack --mode development", "compileOnly": "tsc -p ./", "package": "ts-node ../../scripts/package.ts", "lint": "true", "watch": "npm run clean && npm run buildScripts && tsc -watch -p ./", "testCompile": "npm run clean && npm run buildScripts && npm run compileOnly", - "test": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/test.ts dist/test/unit/index.js ../core/dist/src/testFixtures/workspaceFolder", - "testE2E": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/testE2E.ts dist/test/e2e/index.js ../core/dist/src/testFixtures/workspaceFolder", + "test": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts unit dist/test/unit/index.js ../core/dist/src/testFixtures/workspaceFolder", + "testE2E": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts e2e dist/test/e2e/index.js ../core/dist/src/testFixtures/workspaceFolder", + "testWeb": "npm run compileDev && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts web dist/test/web/testRunnerWebCore.js", "webRun": "npx @vscode/test-web --open-devtools --browserOption=--disable-web-security --waitForDebugger=9222 --extensionDevelopmentPath=. .", "webWatch": "npm run clean && npm run buildScripts && webpack --mode development --watch", "serve": "webpack serve --config-name mainServe --mode development", diff --git a/packages/amazonq/scripts/build/syncPackageJson.ts b/packages/amazonq/scripts/build/syncPackageJson.ts deleted file mode 100644 index 654078fbdb2..00000000000 --- a/packages/amazonq/scripts/build/syncPackageJson.ts +++ /dev/null @@ -1,37 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * We are currently in the process of splitting the toolkit into a core library and separate extensions. - * A lot of the core toolkit code depends on contents of its package.json. However, in order for - * individual extensions to function, they need to have the same entries in their local package.jsons as well. - * - * Unlike the Toolkit extension, the Amazon Q extension only needs to copy its settings from the core. - * Settings type checking is performed at compile time in core/src/shared/settings.ts, so it needs to - * exist in the core package.json as well. - * - * TODO: Drop settings initialization into respective extensions. - */ - -import * as fs from 'fs-extra' - -function main() { - const packageJsonFile = './package.json' - const coreLibPackageJsonFile = '../core/package.json' - - const packageJson = JSON.parse(fs.readFileSync(packageJsonFile, { encoding: 'utf-8' })) - const coreLibPackageJson = JSON.parse(fs.readFileSync(coreLibPackageJsonFile, { encoding: 'utf-8' })) - - const coreSettings = coreLibPackageJson.contributes.configuration.properties - Object.keys(coreSettings).forEach((key) => { - if (key.startsWith('amazonQ')) { - packageJson.contributes.configuration.properties[key] = coreSettings[key] - } - }) - - fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, undefined, ' ') + '\n') -} - -main() diff --git a/packages/amazonq/test/e2e/index.ts b/packages/amazonq/test/e2e/index.ts index 168d4028f57..065a2cd8bc8 100644 --- a/packages/amazonq/test/e2e/index.ts +++ b/packages/amazonq/test/e2e/index.ts @@ -7,9 +7,7 @@ import { runTests } from 'aws-core-vscode/test' import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' export function run(): Promise { - return runTests( - process.env.TEST_DIR ?? 'test/e2e', - ['../../core/dist/src/testInteg/globalSetup.test.ts'], - VSCODE_EXTENSION_ID.amazonq - ) + return runTests(process.env.TEST_DIR ?? 'test/e2e', VSCODE_EXTENSION_ID.amazonq, [ + '../../core/dist/src/testInteg/globalSetup.test.ts', + ]) } diff --git a/packages/amazonq/test/unit/codewhisperer/util/zipUtil.test.ts b/packages/amazonq/test/unit/codewhisperer/util/zipUtil.test.ts index d7fd10242a4..a5d79bb2fe3 100644 --- a/packages/amazonq/test/unit/codewhisperer/util/zipUtil.test.ts +++ b/packages/amazonq/test/unit/codewhisperer/util/zipUtil.test.ts @@ -7,7 +7,7 @@ import assert from 'assert' import vscode from 'vscode' import sinon from 'sinon' import { join } from 'path' -import { getTestWorkspaceFolder } from 'aws-core-vscode/testInteg' +import { getTestWorkspaceFolder } from 'aws-core-vscode/test' import { CodeAnalysisScope, ZipUtil } from 'aws-core-vscode/codewhisperer' import { codeScanTruncDirPrefix } from 'aws-core-vscode/codewhisperer' import { ToolkitError } from 'aws-core-vscode/shared' diff --git a/packages/amazonq/test/unit/index.ts b/packages/amazonq/test/unit/index.ts index 982ac5bac1f..cc1ad0d22ca 100644 --- a/packages/amazonq/test/unit/index.ts +++ b/packages/amazonq/test/unit/index.ts @@ -7,9 +7,7 @@ import { runTests } from 'aws-core-vscode/test' import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' export function run(): Promise { - return runTests( - process.env.TEST_DIR ?? 'test/unit', - ['../../core/dist/src/test/globalSetup.test.ts'], - VSCODE_EXTENSION_ID.amazonq - ) + return runTests(process.env.TEST_DIR ?? ['test/unit'], VSCODE_EXTENSION_ID.amazonq, [ + '../../core/dist/src/test/globalSetup.test.ts', + ]) } diff --git a/packages/core/src/testWeb/extension.test.ts b/packages/amazonq/test/web/extension.test.ts similarity index 64% rename from packages/core/src/testWeb/extension.test.ts rename to packages/amazonq/test/web/extension.test.ts index eb1d7eb22aa..de685bf10f7 100644 --- a/packages/core/src/testWeb/extension.test.ts +++ b/packages/amazonq/test/web/extension.test.ts @@ -4,10 +4,10 @@ */ import assert from 'assert' -import globals from '../shared/extensionGlobals' +import { globals, ToolkitGlobals } from 'aws-core-vscode/shared' describe('activation', async () => { it('defines a region provider that can provide regions when in web mode', async () => { - assert(globals.regionProvider.getRegions().length > 0) + assert((globals as unknown as ToolkitGlobals).regionProvider.getRegions().length > 0) }) }) diff --git a/packages/core/src/testWeb/shared/crypto.test.ts b/packages/amazonq/test/web/shared/crypto.test.ts similarity index 94% rename from packages/core/src/testWeb/shared/crypto.test.ts rename to packages/amazonq/test/web/shared/crypto.test.ts index 6f64f4d0214..01da83cdf25 100644 --- a/packages/core/src/testWeb/shared/crypto.test.ts +++ b/packages/amazonq/test/web/shared/crypto.test.ts @@ -4,7 +4,7 @@ */ import assert from 'assert' -import { randomUUID } from '../../shared/crypto' +import { randomUUID } from 'aws-core-vscode/shared' describe('crypto', function () { describe('randomUUID()', function () { diff --git a/packages/core/src/testWeb/shared/fs.test.ts b/packages/amazonq/test/web/shared/fs.test.ts similarity index 88% rename from packages/core/src/testWeb/shared/fs.test.ts rename to packages/amazonq/test/web/shared/fs.test.ts index 1251ecf053f..df3e677b287 100644 --- a/packages/core/src/testWeb/shared/fs.test.ts +++ b/packages/amazonq/test/web/shared/fs.test.ts @@ -4,8 +4,7 @@ */ import assert from 'assert' -import globals from '../../shared/extensionGlobals' -import fs from '../../shared/fs/fs' +import { fs, globals } from 'aws-core-vscode/shared' describe('FileSystem', function () { it('getUserHomeDir()', async () => { diff --git a/packages/core/src/testWeb/shared/utilities/timeoutUtils.test.ts b/packages/amazonq/test/web/shared/utilities/timeoutUtils.test.ts similarity index 79% rename from packages/core/src/testWeb/shared/utilities/timeoutUtils.test.ts rename to packages/amazonq/test/web/shared/utilities/timeoutUtils.test.ts index 1496345f46e..1885c8918d0 100644 --- a/packages/core/src/testWeb/shared/utilities/timeoutUtils.test.ts +++ b/packages/amazonq/test/web/shared/utilities/timeoutUtils.test.ts @@ -9,5 +9,5 @@ * * Any web specific tests should be made within their own `describe()`. */ -import { timeoutUtilsDescribe } from '../../../test/shared/utilities/timeoutUtils.test' +import { timeoutUtilsDescribe } from 'aws-core-vscode/testWeb' timeoutUtilsDescribe diff --git a/packages/core/src/testWeb/testRunner.ts b/packages/amazonq/test/web/testRunner.ts similarity index 78% rename from packages/core/src/testWeb/testRunner.ts rename to packages/amazonq/test/web/testRunner.ts index e120e096440..a2c8f8e90cc 100644 --- a/packages/core/src/testWeb/testRunner.ts +++ b/packages/amazonq/test/web/testRunner.ts @@ -7,12 +7,12 @@ * The following was influenced by this guide: https://code.visualstudio.com/api/extension-guides/web-extensions */ +import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' import 'mocha' // Imports mocha for the browser, defining the `mocha` global. import * as vscode from 'vscode' -import { VSCODE_EXTENSION_ID } from '../shared/extensions' export async function run(): Promise { - await activateToolkitExtension() + await activateExtension() return new Promise(async (resolve, reject) => { setupMocha() gatherTestFiles() @@ -45,8 +45,13 @@ function gatherTestFiles() { * * So this function ensures the extension has fully activated. */ -async function activateToolkitExtension() { - await vscode.extensions.getExtension(VSCODE_EXTENSION_ID.awstoolkitcore)?.activate() +async function activateExtension() { + const extId = VSCODE_EXTENSION_ID.amazonq + const ext = vscode.extensions.getExtension(extId) + if (!ext) { + throw new Error(`Extension '${extId}' not found, can't activate it to run tests.`) + } + await vscode.extensions.getExtension(VSCODE_EXTENSION_ID.amazonq)?.activate() } function runMochaTests(resolve: (value: void | PromiseLike) => void, reject: (reason?: any) => void) { diff --git a/packages/core/src/testWeb/utils.test.ts b/packages/amazonq/test/web/utils.test.ts similarity index 88% rename from packages/core/src/testWeb/utils.test.ts rename to packages/amazonq/test/web/utils.test.ts index b1f64523acc..30965ffb500 100644 --- a/packages/core/src/testWeb/utils.test.ts +++ b/packages/amazonq/test/web/utils.test.ts @@ -4,7 +4,7 @@ */ import * as assert from 'assert' -import { isWeb } from '../shared/extensionGlobals' +import { isWeb } from 'aws-core-vscode/shared' describe('isWeb', function () { it('returns true when in web mode', function () { diff --git a/packages/amazonq/webpack.config.js b/packages/amazonq/webpack.config.js index f606cd0517a..44e01684754 100644 --- a/packages/amazonq/webpack.config.js +++ b/packages/amazonq/webpack.config.js @@ -18,6 +18,7 @@ module.exports = (env, argv) => { ...baseWebConfigsFactory(env, argv), entry: { 'src/extensionWeb': './src/extensionWeb.ts', + 'test/web/testRunnerWebCore': './test/web/testRunner.ts', }, } diff --git a/packages/core/.vscode/launch.json b/packages/core/.vscode/launch.json index 61ae90f5470..ac06b7c2550 100644 --- a/packages/core/.vscode/launch.json +++ b/packages/core/.vscode/launch.json @@ -5,138 +5,6 @@ { "version": "0.2.0", "configurations": [ - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extensions", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/test/index", - "${workspaceRoot}/dist/src/testFixtures/workspaceFolder" - ], - "env": { - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "preLaunchTask": "build", - "presentation": { - "group": "3_ExtensionTests", - "order": 1 - } - }, - { - "name": "Extension Tests (current file)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extensions", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/test/index.js", - "${workspaceRoot}/dist/src/testFixtures/workspaceFolder" - ], - "env": { - "TEST_FILE": "${relativeFile}", - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "preLaunchTask": "build", - "presentation": { - "group": "2_ExtensionTestsCurrentFile", - "order": 1 - } - }, - { - "name": "Extension Tests (web)", - "type": "extensionHost", - "debugWebWorkerHost": true, - "request": "launch", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionDevelopmentKind=web", - "--extensionTestsPath=${workspaceFolder}/dist/src/testWeb/testRunnerWebCore", - "${workspaceRoot}/dist/src/testFixtures/workspaceFolder" - ], - "outFiles": ["${workspaceFolder}/dist/src/**/*.js"], - "preLaunchTask": "testsBuildWatch", - "presentation": { - "group": "3_ExtensionTests", - "order": 3 - } - }, - { - "name": "Integration Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "${workspaceFolder}/dist/src/testFixtures/workspaceFolder", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/testInteg/index.js" - ], - "env": { - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "preLaunchTask": "build", - "presentation": { - "group": "6_IntegrationTests", - "order": 1 - } - }, - { - "name": "Integration Tests (current file)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "${workspaceFolder}/dist/src/testFixtures/workspaceFolder", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/testInteg/index.js" - ], - "env": { - "TEST_FILE": "${relativeFile}", - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "preLaunchTask": "build", - "presentation": { - "group": "5_IntegrationTestsCurrentFile", - "order": 1 - } - }, - { - "name": "E2E Test (current file)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--disable-extension=amazonwebservices.aws-toolkit-vscode", - "${workspaceFolder}/dist/src/testFixtures/workspaceFolder", - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/dist/src/testE2E/index.js" - ], - "env": { - "TEST_FILE": "${relativeFile}", - "DEVELOPMENT_PATH": "${workspaceFolder}", - "AWS_TOOLKIT_AUTOMATION": "local" - }, - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "preLaunchTask": "build", - "presentation": { - "group": "4_E2ETestCurrentFile", - "order": 1 - } - }, { "name": "Test Lint", "type": "node", diff --git a/packages/core/.vscode/tasks.json b/packages/core/.vscode/tasks.json index 850565e29a1..1ed850a21b7 100644 --- a/packages/core/.vscode/tasks.json +++ b/packages/core/.vscode/tasks.json @@ -22,14 +22,6 @@ "isBackground": true, "problemMatcher": "$ts-webpack-watch" }, - { - "label": "testsBuildWatch", - "command": "npm run compileDev -- --watch", - "detail": "Build that is sufficient for Web mode tests", - "type": "shell", - "isBackground": true, - "problemMatcher": "$ts-webpack-watch" - }, /** After we stop debugging our browser, we also want to stop the web server. When this task is ran it will stop the web server. diff --git a/packages/core/package.json b/packages/core/package.json index 7fa00eeb0ac..3bfab8d1b2d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,30 +2,11 @@ "name": "aws-core-vscode", "description": "Core library used AWS IDE extensions for VSCode.", "version": "1.0.0", - "extensionKind": [ - "workspace" - ], - "publisher": "amazonwebservices", "license": "Apache-2.0", "engines": { "npm": "^10.1.0", "vscode": "^1.68.0" }, - "activationEvents": [ - "onStartupFinished", - "onUri", - "onDebugResolve:aws-sam", - "onDebugInitialConfigurations", - "onLanguage:javascript", - "onLanguage:java", - "onLanguage:python", - "onLanguage:csharp", - "onLanguage:yaml", - "onFileSystem:s3", - "onFileSystem:s3-readonly" - ], - "main": "./dist/src/extensionNode.js", - "browser": "./dist/src/extensionWebCore.js", "exports": { ".": "./dist/src/extension.js", "./node": "./dist/src/extensionNode.js", @@ -41,7 +22,7 @@ "./amazonqFeatureDev": "./dist/src/amazonqFeatureDev/index.js", "./codewhispererChat": "./dist/src/codewhispererChat/index.js", "./test": "./dist/src/test/index.js", - "./testInteg": "./dist/src/testInteg/index.js", + "./testWeb": "./dist/src/testWeb/index.js", "./login": "./dist/src/login/webview/index.js", "./utils": "./dist/src/shared/utilities/index.js", "./feedback": "./dist/src/feedback/index.js", @@ -49,3636 +30,6 @@ "./dev": "./dist/src/dev/index.js" }, "contributes": { - "configuration": { - "type": "object", - "title": "%AWS.productName%", - "cloud9": { - "cn": { - "title": "%AWS.productName.cn%" - } - }, - "properties": { - "aws.profile": { - "type": "string", - "deprecationMessage": "The current profile is now stored internally by the Toolkit.", - "description": "%AWS.configuration.profileDescription%" - }, - "aws.ecs.openTerminalCommand": { - "type": "string", - "default": "/bin/sh", - "markdownDescription": "%AWS.configuration.description.ecs.openTerminalCommand%" - }, - "aws.iot.maxItemsPerPage": { - "type": "number", - "default": 100, - "minimum": 1, - "maximum": 250, - "markdownDescription": "%AWS.configuration.description.iot.maxItemsPerPage%" - }, - "aws.s3.maxItemsPerPage": { - "type": "number", - "default": 300, - "minimum": 3, - "maximum": 1000, - "markdownDescription": "%AWS.configuration.description.s3.maxItemsPerPage%" - }, - "aws.samcli.location": { - "type": "string", - "scope": "machine", - "default": "", - "markdownDescription": "%AWS.configuration.description.samcli.location%" - }, - "aws.samcli.lambdaTimeout": { - "type": "number", - "default": 90000, - "markdownDescription": "%AWS.configuration.description.samcli.lambdaTimeout%" - }, - "aws.samcli.legacyDeploy": { - "type": "boolean", - "default": false, - "markdownDescription": "%AWS.configuration.description.samcli.legacyDeploy%" - }, - "aws.telemetry": { - "type": "boolean", - "default": true, - "markdownDescription": "%AWS.configuration.description.telemetry%", - "cloud9": { - "cn": { - "markdownDescription": "%AWS.configuration.description.telemetry.cn%" - } - } - }, - "aws.stepfunctions.asl.format.enable": { - "type": "boolean", - "scope": "window", - "default": true, - "description": "%AWS.stepFunctions.asl.format.enable.desc%" - }, - "aws.stepfunctions.asl.maxItemsComputed": { - "type": "number", - "default": 5000, - "description": "%AWS.stepFunctions.asl.maxItemsComputed.desc%" - }, - "aws.ssmDocument.ssm.maxItemsComputed": { - "type": "number", - "default": 5000, - "description": "%AWS.ssmDocument.ssm.maxItemsComputed.desc%" - }, - "aws.cwl.limit": { - "type": "number", - "default": 10000, - "description": "%AWS.cwl.limit.desc%", - "maximum": 10000 - }, - "aws.samcli.manuallySelectedBuckets": { - "type": "object", - "description": "%AWS.samcli.deploy.bucket.recentlyUsed%", - "default": [] - }, - "aws.samcli.enableCodeLenses": { - "type": "boolean", - "description": "%AWS.configuration.enableCodeLenses%", - "default": false - }, - "aws.suppressPrompts": { - "type": "object", - "description": "%AWS.configuration.description.suppressPrompts%", - "default": {}, - "properties": { - "apprunnerNotifyPricing": { - "type": "boolean", - "default": false - }, - "apprunnerNotifyPause": { - "type": "boolean", - "default": false - }, - "ecsRunCommand": { - "type": "boolean", - "default": false - }, - "ecsRunCommandEnable": { - "type": "boolean", - "default": false - }, - "ecsRunCommandDisable": { - "type": "boolean", - "default": false - }, - "regionAddAutomatically": { - "type": "boolean", - "default": false - }, - "yamlExtPrompt": { - "type": "boolean", - "default": false - }, - "fileViewerEdit": { - "type": "boolean", - "default": false - }, - "createCredentialsProfile": { - "type": "boolean", - "default": false - }, - "samcliConfirmDevStack": { - "type": "boolean", - "default": false - }, - "remoteConnected": { - "type": "boolean", - "default": false - }, - "codeCatalystConnectionExpired": { - "type": "boolean", - "default": false - }, - "ssoCacheError": { - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "aws.experiments": { - "type": "object", - "markdownDescription": "%AWS.configuration.description.experiments%", - "default": { - "jsonResourceModification": false - }, - "properties": { - "jsonResourceModification": { - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "aws.resources.enabledResources": { - "type": "array", - "description": "%AWS.configuration.description.resources.enabledResources%", - "items": { - "type": "string" - } - }, - "aws.lambda.recentlyUploaded": { - "type": "object", - "description": "%AWS.configuration.description.lambda.recentlyUploaded%", - "default": [] - }, - "aws.accessAnalyzer.policyChecks.checkNoNewAccessFilePath": { - "type": "string", - "default": "", - "description": "File path or S3 path to a text document for CheckNoNewAccess custom check.", - "scope": "window" - }, - "aws.accessAnalyzer.policyChecks.checkAccessNotGrantedFilePath": { - "type": "string", - "default": "", - "description": "File path or S3 path to a text document for CheckAccessNotGranted custom check.", - "scope": "window" - }, - "aws.accessAnalyzer.policyChecks.cloudFormationParameterFilePath": { - "type": "string", - "default": "", - "description": "A JSON formatted file that specifies template parameter values, a stack policy, and tags. Only parameters are used from this file.", - "scope": "machine-overridable" - }, - "amazonQ.telemetry": { - "type": "boolean", - "default": true, - "markdownDescription": "%AWS.configuration.description.amazonq.telemetry%" - }, - "amazonQ.suppressPrompts": { - "type": "object", - "description": "%AWS.configuration.description.suppressPrompts%", - "default": {}, - "properties": { - "createCredentialsProfile": { - "type": "boolean", - "default": false - }, - "codeWhispererNewWelcomeMessage": { - "type": "boolean", - "default": false - }, - "codeWhispererConnectionExpired": { - "type": "boolean", - "default": false - }, - "amazonQWelcomePage": { - "type": "boolean", - "default": false - }, - "amazonQSessionConfigurationMessage": { - "type": "boolean", - "default": false - }, - "ssoCacheError": { - "type": "boolean", - "default": false - } - }, - "additionalProperties": false - }, - "amazonQ.showInlineCodeSuggestionsWithCodeReferences": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq%", - "default": true - }, - "amazonQ.importRecommendationForInlineCodeSuggestions": { - "type": "boolean", - "description": "%AWS.configuration.description.amazonq.importRecommendation%", - "default": true - }, - "amazonQ.shareContentWithAWS": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.shareContentWithAWS%", - "default": true, - "scope": "application" - }, - "amazonQ.workspaceIndex": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndex%", - "default": false, - "scope": "application" - }, - "amazonQ.workspaceIndexWorkerThreads": { - "type": "number", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexWorkerThreads%", - "default": 0, - "scope": "application" - }, - "amazonQ.workspaceIndexUseGPU": { - "type": "boolean", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexUseGPU%", - "default": false, - "scope": "application" - }, - "amazonQ.workspaceIndexMaxSize": { - "type": "number", - "markdownDescription": "%AWS.configuration.description.amazonq.workspaceIndexMaxSize%", - "default": 250, - "scope": "application" - } - } - }, - "debuggers": [ - { - "type": "aws-sam", - "when": "isCloud9 || !aws.isWebExtHost", - "label": "%AWS.configuration.description.awssam.debug.label%", - "configurationAttributes": { - "direct-invoke": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AwsSamDebuggerConfiguration", - "additionalProperties": false, - "properties": { - "aws": { - "title": "AWS Connection", - "description": "%AWS.configuration.description.awssam.debug.aws%", - "properties": { - "credentials": { - "description": "%AWS.configuration.description.awssam.debug.credentials%", - "type": "string", - "cloud9": { - "cn": { - "description": "%AWS.configuration.description.awssam.debug.credentials.cn%" - } - } - }, - "region": { - "description": "%AWS.configuration.description.awssam.debug.region%", - "type": "string" - } - }, - "additionalProperties": false, - "type": "object" - }, - "invokeTarget": { - "oneOf": [ - { - "title": "Template Target Properties", - "description": "%AWS.configuration.description.awssam.debug.invokeTarget%", - "properties": { - "templatePath": { - "description": "%AWS.configuration.description.awssam.debug.templatePath%", - "type": "string" - }, - "logicalId": { - "description": "%AWS.configuration.description.awssam.debug.logicalId%", - "type": "string" - }, - "target": { - "description": "%AWS.configuration.description.awssam.debug.target%", - "type": "string", - "enum": [ - "template" - ] - } - }, - "additionalProperties": false, - "required": [ - "templatePath", - "logicalId", - "target" - ], - "type": "object" - }, - { - "title": "Code Target Properties", - "description": "%AWS.configuration.description.awssam.debug.invokeTarget%", - "properties": { - "lambdaHandler": { - "description": "%AWS.configuration.description.awssam.debug.lambdaHandler%", - "type": "string" - }, - "projectRoot": { - "description": "%AWS.configuration.description.awssam.debug.projectRoot%", - "type": "string" - }, - "target": { - "description": "%AWS.configuration.description.awssam.debug.target%", - "type": "string", - "enum": [ - "code" - ] - }, - "architecture": { - "description": "%AWS.configuration.description.awssam.debug.architecture%", - "type": "string", - "enum": [ - "x86_64", - "arm64" - ] - } - }, - "additionalProperties": false, - "required": [ - "lambdaHandler", - "projectRoot", - "target" - ], - "type": "object" - }, - { - "title": "API Target Properties", - "description": "%AWS.configuration.description.awssam.debug.invokeTarget%", - "properties": { - "templatePath": { - "description": "%AWS.configuration.description.awssam.debug.templatePath%", - "type": "string" - }, - "logicalId": { - "description": "%AWS.configuration.description.awssam.debug.logicalId%", - "type": "string" - }, - "target": { - "description": "%AWS.configuration.description.awssam.debug.target%", - "type": "string", - "enum": [ - "api" - ] - } - }, - "additionalProperties": false, - "required": [ - "templatePath", - "logicalId", - "target" - ], - "type": "object" - } - ] - }, - "lambda": { - "title": "Lambda Properties", - "description": "%AWS.configuration.description.awssam.debug.lambda%", - "properties": { - "environmentVariables": { - "description": "%AWS.configuration.description.awssam.debug.envvars%", - "additionalProperties": { - "type": [ - "string" - ] - }, - "type": "object" - }, - "payload": { - "description": "%AWS.configuration.description.awssam.debug.event%", - "properties": { - "json": { - "description": "%AWS.configuration.description.awssam.debug.event.json%", - "type": "object" - }, - "path": { - "description": "%AWS.configuration.description.awssam.debug.event.path%", - "type": "string" - } - }, - "additionalProperties": false, - "type": "object" - }, - "memoryMb": { - "description": "%AWS.configuration.description.awssam.debug.memoryMb%", - "type": "number" - }, - "runtime": { - "description": "%AWS.configuration.description.awssam.debug.runtime%", - "type": "string" - }, - "timeoutSec": { - "description": "%AWS.configuration.description.awssam.debug.timeout%", - "type": "number" - }, - "pathMappings": { - "type:": "array", - "items": { - "title": "Path Mapping", - "type": "object", - "properties": { - "localRoot": { - "type": "string" - }, - "remoteRoot": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "localRoot", - "remoteRoot" - ] - } - } - }, - "additionalProperties": false, - "type": "object" - }, - "sam": { - "title": "SAM CLI Properties", - "description": "%AWS.configuration.description.awssam.debug.sam%", - "properties": { - "buildArguments": { - "description": "%AWS.configuration.description.awssam.debug.buildArguments%", - "type": "array", - "items": { - "type": "string" - } - }, - "buildDir": { - "description": "%AWS.configuration.description.awssam.debug.buildDir%", - "type": "string" - }, - "containerBuild": { - "description": "%AWS.configuration.description.awssam.debug.containerBuild%", - "type": "boolean" - }, - "dockerNetwork": { - "description": "%AWS.configuration.description.awssam.debug.dockerNetwork%", - "type": "string" - }, - "localArguments": { - "description": "%AWS.configuration.description.awssam.debug.localArguments%", - "type": "array", - "items": { - "type": "string" - } - }, - "skipNewImageCheck": { - "description": "%AWS.configuration.description.awssam.debug.skipNewImageCheck%", - "type": "boolean" - }, - "template": { - "description": "%AWS.configuration.description.awssam.debug.template%", - "properties": { - "parameters": { - "description": "%AWS.configuration.description.awssam.debug.templateParameters%", - "additionalProperties": { - "type": [ - "string", - "number" - ] - }, - "type": "object" - } - }, - "type": "object", - "additionalProperties": false - } - }, - "additionalProperties": false, - "type": "object" - }, - "api": { - "title": "API Gateway Properties", - "description": "%AWS.configuration.description.awssam.debug.api%", - "properties": { - "path": { - "description": "%AWS.configuration.description.awssam.debug.api.path%", - "type": "string" - }, - "httpMethod": { - "description": "%AWS.configuration.description.awssam.debug.api.httpMethod%", - "type": "string", - "enum": [ - "delete", - "get", - "head", - "options", - "patch", - "post", - "put" - ] - }, - "payload": { - "description": "%AWS.configuration.description.awssam.debug.event%", - "properties": { - "json": { - "description": "%AWS.configuration.description.awssam.debug.event.json%", - "type": "object" - }, - "path": { - "description": "%AWS.configuration.description.awssam.debug.event.path%", - "type": "string" - } - }, - "additionalProperties": false, - "type": "object" - }, - "headers": { - "description": "%AWS.configuration.description.awssam.debug.api.headers%", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "querystring": { - "description": "%AWS.configuration.description.awssam.debug.api.queryString%", - "type": "string" - }, - "stageVariables": { - "description": "%AWS.configuration.description.awssam.debug.api.stageVariables%", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "clientCertificateId": { - "description": "%AWS.configuration.description.awssam.debug.api.clientCertId%", - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "path", - "httpMethod" - ], - "type": "object" - } - }, - "required": [ - "invokeTarget" - ], - "type": "object" - } - }, - "configurationSnippets": [ - { - "label": "%AWS.configuration.description.awssam.debug.snippets.lambdaCode.label%", - "description": "%AWS.configuration.description.awssam.debug.snippets.lambdaCode.description%", - "body": { - "type": "aws-sam", - "request": "direct-invoke", - "name": "${3:Invoke Lambda}", - "invokeTarget": { - "target": "code", - "lambdaHandler": "${1:Function Handler}", - "projectRoot": "^\"\\${workspaceFolder}\"" - }, - "lambda": { - "runtime": "${2:Lambda Runtime}", - "payload": { - "json": {} - } - } - }, - "cloud9": { - "cn": { - "label": "%AWS.configuration.description.awssam.debug.snippets.lambdaCode.label.cn%", - "description": "%AWS.configuration.description.awssam.debug.snippets.lambdaCode.description.cn%" - } - } - }, - { - "label": "%AWS.configuration.description.awssam.debug.snippets.lambdaTemplate.label%", - "description": "%AWS.configuration.description.awssam.debug.snippets.lambdaTemplate.description%", - "body": { - "type": "aws-sam", - "request": "direct-invoke", - "name": "${3:Invoke Lambda}", - "invokeTarget": { - "target": "template", - "templatePath": "${1:Template Location}", - "logicalId": "${2:Function Logical ID}" - }, - "lambda": { - "payload": { - "json": {} - } - } - }, - "cloud9": { - "cn": { - "label": "%AWS.configuration.description.awssam.debug.snippets.lambdaTemplate.label.cn%", - "description": "%AWS.configuration.description.awssam.debug.snippets.lambdaTemplate.description.cn%" - } - } - }, - { - "label": "%AWS.configuration.description.awssam.debug.snippets.api.label%", - "description": "%AWS.configuration.description.awssam.debug.snippets.api.description%", - "body": { - "type": "aws-sam", - "request": "direct-invoke", - "name": "${5:Invoke Lambda with API Gateway}", - "invokeTarget": { - "target": "api", - "templatePath": "${1:Template Location}", - "logicalId": "${2:Function Logical ID}" - }, - "api": { - "path": "${3:Path}", - "httpMethod": "${4:Method}", - "payload": { - "json": {} - } - } - }, - "cloud9": { - "cn": { - "label": "%AWS.configuration.description.awssam.debug.snippets.api.label.cn%", - "description": "%AWS.configuration.description.awssam.debug.snippets.api.description.cn%" - } - } - } - ] - } - ], - "viewsContainers": { - "activitybar": [ - { - "id": "aws-explorer", - "title": "%AWS.title%", - "icon": "resources/aws-logo.svg", - "cloud9": { - "cn": { - "title": "%AWS.title.cn%", - "icon": "resources/aws-cn-logo.svg" - } - } - } - ] - }, - "views": { - "aws-explorer": [ - { - "id": "aws.amazonq.codewhisperer", - "name": "%AWS.amazonq.codewhisperer.title%", - "when": "!isCloud9 && !aws.isSageMaker && !aws.toolkit.amazonq.dismissed && !aws.explorer.showAuthView" - }, - { - "id": "aws.explorer", - "name": "%AWS.lambda.explorerTitle%", - "when": "(isCloud9 || !aws.isWebExtHost) && !aws.explorer.showAuthView" - }, - { - "id": "aws.cdk", - "name": "%AWS.cdk.explorerTitle%", - "when": "!aws.explorer.showAuthView" - }, - { - "id": "aws.codecatalyst", - "name": "%AWS.codecatalyst.explorerTitle%", - "when": "(!isCloud9 && !aws.isSageMaker || isCloud9CodeCatalyst) && !aws.explorer.showAuthView" - }, - { - "type": "webview", - "id": "aws.toolkit.AmazonCommonAuth", - "name": "%AWS.amazonq.login%", - "when": "!isCloud9 && !aws.isSageMaker && aws.explorer.showAuthView" - } - ] - }, - "submenus": [ - { - "id": "aws.toolkit.auth", - "label": "%AWS.submenu.auth.title%", - "icon": "$(ellipsis)", - "when": "isCloud9 || !aws.isWebExtHost" - }, - { - "id": "aws.codecatalyst.submenu", - "label": "%AWS.codecatalyst.submenu.title%", - "icon": "$(ellipsis)", - "when": "isCloud9 || !aws.isWebExtHost" - }, - { - "label": "%AWS.generic.feedback%", - "id": "aws.toolkit.submenu.feedback" - }, - { - "label": "%AWS.generic.help%", - "id": "aws.toolkit.submenu.help" - } - ], - "menus": { - "commandPalette": [ - { - "command": "aws.apig.copyUrl", - "when": "false" - }, - { - "command": "aws.apig.invokeRemoteRestApi", - "when": "false" - }, - { - "command": "aws.deleteCloudFormation", - "when": "false" - }, - { - "command": "aws.downloadStateMachineDefinition", - "when": "false" - }, - { - "command": "aws.ecr.createRepository", - "when": "false" - }, - { - "command": "aws.executeStateMachine", - "when": "false" - }, - { - "command": "aws.copyArn", - "when": "false" - }, - { - "command": "aws.copyName", - "when": "false" - }, - { - "command": "aws.listCommands", - "when": "false" - }, - { - "command": "aws.codecatalyst.listCommands", - "when": "false" - }, - { - "command": "aws.codecatalyst.manageConnections", - "when": "false" - }, - { - "command": "aws.codecatalyst.openDevEnv", - "when": "!isCloud9" - }, - { - "command": "aws.codecatalyst.createDevEnv", - "when": "!isCloud9" - }, - { - "command": "aws.downloadSchemaItemCode", - "when": "false" - }, - { - "command": "aws.deleteLambda", - "when": "false" - }, - { - "command": "aws.downloadLambda", - "when": "false" - }, - { - "command": "aws.invokeLambda", - "when": "false" - }, - { - "command": "aws.copyLambdaUrl", - "when": "false" - }, - { - "command": "aws.viewSchemaItem", - "when": "false" - }, - { - "command": "aws.searchSchema", - "when": "false" - }, - { - "command": "aws.searchSchemaPerRegistry", - "when": "false" - }, - { - "command": "aws.refreshAwsExplorer", - "when": "false" - }, - { - "command": "aws.cdk.refresh", - "when": "false" - }, - { - "command": "aws.cdk.viewDocs", - "when": "false" - }, - { - "command": "aws.ssmDocument.openLocalDocument", - "when": "false" - }, - { - "command": "aws.ssmDocument.openLocalDocumentJson", - "when": "false" - }, - { - "command": "aws.ssmDocument.openLocalDocumentYaml", - "when": "false" - }, - { - "command": "aws.ssmDocument.deleteDocument", - "when": "false" - }, - { - "command": "aws.ssmDocument.updateDocumentVersion", - "when": "false" - }, - { - "command": "aws.copyLogResource", - "when": "resourceScheme == aws-cwl" - }, - { - "command": "aws.saveCurrentLogDataContent", - "when": "resourceScheme == aws-cwl" - }, - { - "command": "aws.s3.editFile", - "when": "resourceScheme == s3-readonly" - }, - { - "command": "aws.cwl.viewLogStream", - "when": "false" - }, - { - "command": "aws.cwl.changeFilterPattern", - "when": "false" - }, - { - "command": "aws.cwl.changeTimeFilter", - "when": "false" - }, - { - "command": "aws.ecr.deleteRepository", - "when": "false" - }, - { - "command": "aws.ecr.copyTagUri", - "when": "false" - }, - { - "command": "aws.ecr.copyRepositoryUri", - "when": "false" - }, - { - "command": "aws.ecr.deleteTag", - "when": "false" - }, - { - "command": "aws.iot.createThing", - "when": "false" - }, - { - "command": "aws.iot.deleteThing", - "when": "false" - }, - { - "command": "aws.iot.createCert", - "when": "false" - }, - { - "command": "aws.iot.deleteCert", - "when": "false" - }, - { - "command": "aws.iot.attachCert", - "when": "false" - }, - { - "command": "aws.iot.attachPolicy", - "when": "false" - }, - { - "command": "aws.iot.activateCert", - "when": "false" - }, - { - "command": "aws.iot.deactivateCert", - "when": "false" - }, - { - "command": "aws.iot.revokeCert", - "when": "false" - }, - { - "command": "aws.iot.createPolicy", - "when": "false" - }, - { - "command": "aws.iot.deletePolicy", - "when": "false" - }, - { - "command": "aws.iot.createPolicyVersion", - "when": "false" - }, - { - "command": "aws.iot.deletePolicyVersion", - "when": "false" - }, - { - "command": "aws.iot.detachCert", - "when": "false" - }, - { - "command": "aws.iot.detachPolicy", - "when": "false" - }, - { - "command": "aws.iot.viewPolicyVersion", - "when": "false" - }, - { - "command": "aws.iot.setDefaultPolicy", - "when": "false" - }, - { - "command": "aws.iot.copyEndpoint", - "when": "false" - }, - { - "command": "aws.deploySamApplication", - "when": "config.aws.samcli.legacyDeploy" - }, - { - "command": "aws.redshift.editConnection", - "when": "false" - }, - { - "command": "aws.redshift.deleteConnection", - "when": "false" - }, - { - "command": "aws.samcli.sync", - "when": "!config.aws.samcli.legacyDeploy" - }, - { - "command": "aws.s3.copyPath", - "when": "false" - }, - { - "command": "aws.s3.createBucket", - "when": "false" - }, - { - "command": "aws.s3.createFolder", - "when": "false" - }, - { - "command": "aws.s3.deleteBucket", - "when": "false" - }, - { - "command": "aws.s3.deleteFile", - "when": "false" - }, - { - "command": "aws.s3.downloadFileAs", - "when": "false" - }, - { - "command": "aws.s3.openFile", - "when": "false" - }, - { - "command": "aws.s3.editFile", - "when": "false" - }, - { - "command": "aws.s3.uploadFileToParent", - "when": "false" - }, - { - "command": "aws.apprunner.startDeployment", - "when": "false" - }, - { - "command": "aws.apprunner.createService", - "when": "false" - }, - { - "command": "aws.apprunner.pauseService", - "when": "false" - }, - { - "command": "aws.apprunner.resumeService", - "when": "false" - }, - { - "command": "aws.apprunner.copyServiceUrl", - "when": "false" - }, - { - "command": "aws.apprunner.open", - "when": "false" - }, - { - "command": "aws.apprunner.deleteService", - "when": "false" - }, - { - "command": "aws.apprunner.createServiceFromEcr", - "when": "false" - }, - { - "command": "aws.resources.copyIdentifier", - "when": "false" - }, - { - "command": "aws.resources.openResourcePreview", - "when": "false" - }, - { - "command": "aws.resources.createResource", - "when": "false" - }, - { - "command": "aws.resources.deleteResource", - "when": "false" - }, - { - "command": "aws.resources.updateResource", - "when": "false" - }, - { - "command": "aws.resources.updateResourceInline", - "when": "false" - }, - { - "command": "aws.resources.saveResource", - "when": "false" - }, - { - "command": "aws.resources.closeResource", - "when": "false" - }, - { - "command": "aws.resources.viewDocs", - "when": "false" - }, - { - "command": "aws.ecs.runCommandInContainer", - "when": "false" - }, - { - "command": "aws.ecs.openTaskInTerminal", - "when": "false" - }, - { - "command": "aws.ecs.enableEcsExec", - "when": "false" - }, - { - "command": "aws.ecs.disableEcsExec", - "when": "false" - }, - { - "command": "aws.ecs.viewDocumentation", - "when": "false" - }, - { - "command": "aws.renderStateMachineGraph", - "when": "false" - }, - { - "command": "aws.toolkit.auth.addConnection", - "when": "false" - }, - { - "command": "aws.toolkit.auth.switchConnections", - "when": "false" - }, - { - "command": "aws.toolkit.auth.help", - "when": "false" - }, - { - "command": "aws.toolkit.auth.manageConnections" - }, - { - "command": "aws.ec2.openRemoteConnection", - "when": "aws.isDevMode" - }, - { - "command": "aws.ec2.openTerminal", - "when": "aws.isDevMode" - }, - { - "command": "aws.ec2.linkToLaunch", - "when": "aws.isDevMode" - }, - { - "command": "aws.ec2.startInstance", - "when": "aws.isDevMode" - }, - { - "command": "aws.ec2.stopInstance", - "when": "aws.isDevMode" - }, - { - "command": "aws.ec2.rebootInstance", - "when": "aws.isDevMode" - }, - { - "command": "aws.dev.openMenu", - "when": "aws.isDevMode || isCloud9" - }, - { - "command": "aws.openInApplicationComposer", - "when": "false" - }, - { - "command": "aws.toolkit.amazonq.learnMore", - "when": "false" - }, - { - "command": "aws.toolkit.amazonq.extensionpage", - "when": "false" - }, - { - "command": "aws.newThreatComposerFile", - "when": "false" - } - ], - "editor/title": [ - { - "command": "aws.previewStateMachine", - "when": "editorLangId == asl || editorLangId == asl-yaml", - "group": "navigation" - }, - { - "command": "aws.saveCurrentLogDataContent", - "when": "resourceScheme == aws-cwl", - "group": "navigation" - }, - { - "command": "aws.cwl.changeFilterPattern", - "when": "resourceScheme == aws-cwl", - "group": "navigation" - }, - { - "command": "aws.cwl.changeTimeFilter", - "when": "resourceScheme == aws-cwl", - "group": "navigation" - }, - { - "command": "aws.s3.editFile", - "when": "resourceScheme == s3-readonly", - "group": "navigation" - }, - { - "command": "aws.ssmDocument.publishDocument", - "when": "editorLangId =~ /^(ssm-yaml|ssm-json)$/", - "group": "navigation" - }, - { - "command": "aws.resources.updateResourceInline", - "when": "resourceScheme == awsResource && !isCloud9 && config.aws.experiments.jsonResourceModification", - "group": "navigation" - }, - { - "command": "aws.resources.closeResource", - "when": "resourcePath =~ /^.+(awsResource.json)$/", - "group": "navigation" - }, - { - "command": "aws.resources.saveResource", - "when": "resourcePath =~ /^.+(awsResource.json)$/", - "group": "navigation" - }, - { - "command": "aws.openInApplicationComposer", - "when": "(editorLangId == json && !(resourceFilename =~ /^.*\\.tc\\.json$/)) || editorLangId == yaml || resourceFilename =~ /^.*\\.(template)$/", - "group": "navigation" - } - ], - "editor/title/context": [ - { - "command": "aws.copyLogResource", - "when": "resourceScheme == aws-cwl", - "group": "1_cutcopypaste@1" - } - ], - "view/title": [ - { - "command": "aws.toolkit.submitFeedback", - "when": "view == aws.explorer && !aws.isWebExtHost", - "group": "navigation@6" - }, - { - "command": "aws.refreshAwsExplorer", - "when": "view == aws.explorer", - "group": "navigation@5" - }, - { - "command": "aws.cdk.refresh", - "when": "view == aws.cdk", - "group": "navigation@1" - }, - { - "command": "aws.toolkit.login", - "when": "view == aws.explorer", - "group": "1_account@1" - }, - { - "command": "aws.showRegion", - "when": "view == aws.explorer", - "group": "1_account@2" - }, - { - "command": "aws.listCommands", - "when": "view == aws.explorer && !isCloud9", - "group": "1_account@3" - }, - { - "command": "aws.lambda.createNewSamApp", - "when": "view == aws.explorer", - "group": "3_lambda@1" - }, - { - "command": "aws.launchConfigForm", - "when": "view == aws.explorer", - "group": "3_lambda@2" - }, - { - "command": "aws.deploySamApplication", - "when": "config.aws.samcli.legacyDeploy && view == aws.explorer", - "group": "3_lambda@3" - }, - { - "command": "aws.samcli.sync", - "when": "!config.aws.samcli.legacyDeploy && view == aws.explorer", - "group": "3_lambda@3" - }, - { - "submenu": "aws.toolkit.submenu.feedback", - "when": "view =~ /^aws\\./ && view != aws.AmazonQChatView && view != aws.amazonq.AmazonCommonAuth", - "group": "y_toolkitMeta@1" - }, - { - "submenu": "aws.toolkit.submenu.help", - "when": "view =~ /^aws\\./ && view != aws.AmazonQChatView && view != aws.amazonq.AmazonCommonAuth", - "group": "y_toolkitMeta@2" - }, - { - "command": "aws.codecatalyst.cloneRepo", - "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", - "group": "1_codeCatalyst@1" - }, - { - "command": "aws.codecatalyst.createDevEnv", - "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", - "group": "1_codeCatalyst@1" - }, - { - "command": "aws.codecatalyst.listCommands", - "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", - "group": "1_codeCatalyst@1" - }, - { - "command": "aws.codecatalyst.openDevEnv", - "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", - "group": "1_codeCatalyst@1" - }, - { - "command": "aws.codecatalyst.manageConnections", - "when": "view == aws.codecatalyst && !isCloud9 && !aws.codecatalyst.connected", - "group": "2_codeCatalyst@1" - }, - { - "command": "aws.codecatalyst.signout", - "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", - "group": "2_codeCatalyst@1" - } - ], - "explorer/context": [ - { - "command": "aws.deploySamApplication", - "when": "config.aws.samcli.legacyDeploy && isFileSystemResource && resourceFilename =~ /^template\\.(json|yml|yaml)$/", - "group": "z_aws@1" - }, - { - "command": "aws.samcli.sync", - "when": "!config.aws.samcli.legacyDeploy && isFileSystemResource && resourceFilename =~ /^(template\\.(json|yml|yaml))|(samconfig\\.toml)$/", - "group": "z_aws@1" - }, - { - "command": "aws.uploadLambda", - "when": "explorerResourceIsFolder || isFileSystemResource && resourceFilename =~ /^template\\.(json|yml|yaml)$/", - "group": "z_aws@3" - }, - { - "command": "aws.openInApplicationComposer", - "when": "isFileSystemResource && !(resourceFilename =~ /^.*\\.tc\\.json$/) && resourceFilename =~ /^.*\\.(json|yml|yaml|template)$/", - "group": "z_aws@1" - } - ], - "view/item/context": [ - { - "command": "aws.apig.invokeRemoteRestApi", - "when": "view == aws.explorer && viewItem =~ /^(awsApiGatewayNode)$/", - "group": "0@1" - }, - { - "command": "aws.ec2.openTerminal", - "group": "0@1", - "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" - }, - { - "command": "aws.ec2.openTerminal", - "group": "inline@1", - "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" - }, - { - "command": "aws.ec2.linkToLaunch", - "group": "0@1", - "when": "viewItem =~ /^(awsEc2ParentNode)$/" - }, - { - "command": "aws.ec2.linkToLaunch", - "group": "inline@1", - "when": "viewItem =~ /^(awsEc2ParentNode)$/" - }, - { - "command": "aws.ec2.openRemoteConnection", - "group": "0@1", - "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" - }, - { - "command": "aws.ec2.openRemoteConnection", - "group": "inline@1", - "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" - }, - { - "command": "aws.ec2.startInstance", - "group": "0@1", - "when": "viewItem == awsEc2StoppedNode" - }, - { - "command": "aws.ec2.startInstance", - "group": "inline@1", - "when": "viewItem == awsEc2StoppedNode" - }, - { - "command": "aws.ec2.stopInstance", - "group": "0@1", - "when": "viewItem == awsEc2RunningNode" - }, - { - "command": "aws.ec2.stopInstance", - "group": "inline@1", - "when": "viewItem == awsEc2RunningNode" - }, - { - "command": "aws.ec2.rebootInstance", - "group": "0@1", - "when": "viewItem == awsEc2RunningNode" - }, - { - "command": "aws.ec2.rebootInstance", - "group": "inline@1", - "when": "viewItem == awsEc2RunningNode" - }, - { - "command": "aws.ecr.createRepository", - "when": "view == aws.explorer && viewItem == awsEcrNode", - "group": "inline@1" - }, - { - "command": "aws.iot.createThing", - "when": "view == aws.explorer && viewItem == awsIotThingsNode", - "group": "inline@1" - }, - { - "command": "aws.iot.createCert", - "when": "view == aws.explorer && viewItem == awsIotCertsNode", - "group": "inline@1" - }, - { - "command": "aws.iot.createPolicy", - "when": "view == aws.explorer && viewItem == awsIotPoliciesNode", - "group": "inline@1" - }, - { - "command": "aws.iot.attachCert", - "when": "view == aws.explorer && viewItem == awsIotThingNode", - "group": "inline@1" - }, - { - "command": "aws.iot.attachPolicy", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies)/", - "group": "inline@1" - }, - { - "command": "aws.redshift.editConnection", - "when": "view == aws.explorer && viewItem == awsRedshiftWarehouseNode", - "group": "0@1" - }, - { - "command": "aws.redshift.deleteConnection", - "when": "view == aws.explorer && viewItem == awsRedshiftWarehouseNode", - "group": "0@2" - }, - { - "command": "aws.s3.openFile", - "when": "view == aws.explorer && viewItem == awsS3FileNode && !isCloud9", - "group": "0@1" - }, - { - "command": "aws.s3.editFile", - "when": "view == aws.explorer && viewItem == awsS3FileNode && !isCloud9", - "group": "inline@1" - }, - { - "command": "aws.s3.downloadFileAs", - "when": "view == aws.explorer && viewItem == awsS3FileNode", - "group": "inline@2" - }, - { - "command": "aws.s3.createBucket", - "when": "view == aws.explorer && viewItem == awsS3Node", - "group": "inline@1" - }, - { - "command": "aws.s3.createFolder", - "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", - "group": "inline@1" - }, - { - "command": "aws.ssmDocument.openLocalDocument", - "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/", - "group": "inline@1" - }, - { - "command": "aws.s3.uploadFile", - "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", - "group": "inline@2" - }, - { - "command": "aws.showRegion", - "when": "view == aws.explorer && viewItem == awsRegionNode", - "group": "0@1" - }, - { - "command": "aws.lambda.createNewSamApp", - "when": "view == aws.explorer && viewItem == awsLambdaNode || viewItem == awsRegionNode", - "group": "1@1" - }, - { - "command": "aws.launchConfigForm", - "when": "view == aws.explorer && viewItem == awsLambdaNode || viewItem == awsRegionNode || viewItem == awsCloudFormationRootNode", - "group": "1@1" - }, - { - "command": "aws.deploySamApplication", - "when": "config.aws.samcli.legacyDeploy && view == aws.explorer && viewItem =~ /^(awsLambdaNode|awsRegionNode|awsCloudFormationRootNode)$/", - "group": "1@2" - }, - { - "command": "aws.samcli.sync", - "when": "!config.aws.samcli.legacyDeploy && view == aws.explorer && viewItem =~ /^(awsLambdaNode|awsRegionNode|awsCloudFormationRootNode)$/", - "group": "1@2" - }, - { - "command": "aws.ec2.copyInstanceId", - "when": "view == aws.explorer && viewItem =~ /^(awsEc2(Running|Stopped|Pending)Node)$/", - "group": "2@0" - }, - { - "command": "aws.ecr.copyTagUri", - "when": "view == aws.explorer && viewItem == awsEcrTagNode", - "group": "2@1" - }, - { - "command": "aws.ecr.deleteTag", - "when": "view == aws.explorer && viewItem == awsEcrTagNode", - "group": "3@1" - }, - { - "command": "aws.ecr.copyRepositoryUri", - "when": "view == aws.explorer && viewItem == awsEcrRepositoryNode", - "group": "2@1" - }, - { - "command": "aws.ecr.createRepository", - "when": "view == aws.explorer && viewItem == awsEcrNode", - "group": "0@1" - }, - { - "command": "aws.ecr.deleteRepository", - "when": "view == aws.explorer && viewItem == awsEcrRepositoryNode", - "group": "3@1" - }, - { - "command": "aws.invokeLambda", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode)$/", - "group": "0@1" - }, - { - "command": "aws.downloadLambda", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", - "group": "0@2" - }, - { - "command": "aws.uploadLambda", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", - "group": "1@1" - }, - { - "command": "aws.deleteLambda", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", - "group": "4@1" - }, - { - "command": "aws.copyLambdaUrl", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", - "group": "2@0" - }, - { - "command": "aws.deleteCloudFormation", - "when": "view == aws.explorer && viewItem == awsCloudFormationNode", - "group": "3@5" - }, - { - "command": "aws.searchSchema", - "when": "view == aws.explorer && viewItem == awsSchemasNode", - "group": "0@1" - }, - { - "command": "aws.searchSchemaPerRegistry", - "when": "view == aws.explorer && viewItem == awsRegistryItemNode", - "group": "0@1" - }, - { - "command": "aws.viewSchemaItem", - "when": "view == aws.explorer && viewItem == awsSchemaItemNode", - "group": "0@1" - }, - { - "command": "aws.stepfunctions.createStateMachineFromTemplate", - "when": "view == aws.explorer && viewItem == awsStepFunctionsNode", - "group": "0@1" - }, - { - "command": "aws.downloadStateMachineDefinition", - "when": "view == aws.explorer && viewItem == awsStateMachineNode", - "group": "0@1" - }, - { - "command": "aws.renderStateMachineGraph", - "when": "view == aws.explorer && viewItem == awsStateMachineNode", - "group": "0@2" - }, - { - "command": "aws.cdk.renderStateMachineGraph", - "when": "viewItem == awsCdkStateMachineNode", - "group": "inline@1" - }, - { - "command": "aws.cdk.renderStateMachineGraph", - "when": "viewItem == awsCdkStateMachineNode", - "group": "0@1" - }, - { - "command": "aws.executeStateMachine", - "when": "view == aws.explorer && viewItem == awsStateMachineNode", - "group": "0@3" - }, - { - "command": "aws.iot.createThing", - "when": "view == aws.explorer && viewItem == awsIotThingsNode", - "group": "0@1" - }, - { - "command": "aws.iot.createCert", - "when": "view == aws.explorer && viewItem == awsIotCertsNode", - "group": "0@1" - }, - { - "command": "aws.iot.createPolicy", - "when": "view == aws.explorer && viewItem == awsIotPoliciesNode", - "group": "0@1" - }, - { - "command": "aws.iot.createPolicyVersion", - "when": "view == aws.explorer && viewItem == awsIotPolicyNode.WithVersions", - "group": "0@1" - }, - { - "command": "aws.iot.viewPolicyVersion", - "when": "view == aws.explorer && viewItem =~ /^awsIotPolicyVersionNode./", - "group": "0@1" - }, - { - "command": "aws.iot.attachCert", - "when": "view == aws.explorer && viewItem == awsIotThingNode", - "group": "0@1" - }, - { - "command": "aws.iot.attachPolicy", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies)/", - "group": "0@1" - }, - { - "command": "aws.s3.createBucket", - "when": "view == aws.explorer && viewItem == awsS3Node", - "group": "0@1" - }, - { - "command": "aws.s3.downloadFileAs", - "when": "view == aws.explorer && viewItem == awsS3FileNode", - "group": "0@1" - }, - { - "command": "aws.s3.uploadFile", - "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", - "group": "0@1" - }, - { - "command": "aws.s3.uploadFileToParent", - "when": "view == aws.explorer && viewItem == awsS3FileNode", - "group": "1@1" - }, - { - "command": "aws.s3.createFolder", - "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", - "group": "1@1" - }, - { - "command": "aws.iot.deactivateCert", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).ACTIVE$/", - "group": "1@1" - }, - { - "command": "aws.iot.activateCert", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).INACTIVE$/", - "group": "1@1" - }, - { - "command": "aws.iot.revokeCert", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).(ACTIVE|INACTIVE)$/", - "group": "1@2" - }, - { - "command": "aws.iot.setDefaultPolicy", - "when": "view == aws.explorer && viewItem == awsIotPolicyVersionNode.NONDEFAULT", - "group": "1@1" - }, - { - "command": "aws.iot.copyEndpoint", - "when": "view == aws.explorer && viewItem == awsIotNode", - "group": "2@1" - }, - { - "command": "aws.copyName", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode|awsStateMachineNode|awsCloudFormationNode|awsS3BucketNode|awsS3FolderNode|awsS3FileNode|awsApiGatewayNode|awsIotThingNode)$|^(awsAppRunnerServiceNode|awsIotCertificateNode|awsIotPolicyNode|awsIotPolicyVersionNode|(awsEc2(Running|Pending|Stopped)Node))/", - "group": "2@1" - }, - { - "command": "aws.copyArn", - "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode|awsStateMachineNode|awsCloudFormationNode|awsCloudWatchLogNode|awsS3BucketNode|awsS3FolderNode|awsS3FileNode|awsApiGatewayNode|awsEcrRepositoryNode|awsIotThingNode)$|^(awsAppRunnerServiceNode|awsEcsServiceNode|awsIotCertificateNode|awsIotPolicyNode|awsIotPolicyVersionNode|awsMdeInstanceNode|(awsEc2(Running|Pending|Stopped)Node))/", - "group": "2@2" - }, - { - "command": "aws.cwl.searchLogGroup", - "group": "0@1", - "when": "view == aws.explorer && viewItem =~ /^awsCloudWatchLogNode|awsCloudWatchLogParentNode$/" - }, - { - "command": "aws.cwl.searchLogGroup", - "group": "inline@1", - "when": "view == aws.explorer && viewItem =~ /^awsCloudWatchLogNode|awsCloudWatchLogParentNode$/" - }, - { - "command": "aws.apig.copyUrl", - "when": "view == aws.explorer && viewItem =~ /^(awsApiGatewayNode)$/", - "group": "2@0" - }, - { - "command": "aws.s3.copyPath", - "when": "view == aws.explorer && viewItem =~ /^(awsS3FolderNode|awsS3FileNode)$/", - "group": "2@3" - }, - { - "command": "aws.s3.presignedURL", - "when": "view == aws.explorer && viewItem =~ /^(awsS3FileNode)$/", - "group": "2@4" - }, - { - "command": "aws.iot.detachCert", - "when": "view == aws.explorer && viewItem =~ /^(awsIotCertificateNode.Things)/", - "group": "3@1" - }, - { - "command": "aws.iot.detachPolicy", - "when": "view == aws.explorer && viewItem == awsIotPolicyNode.Certificates", - "group": "3@1" - }, - { - "command": "aws.iot.deleteThing", - "when": "view == aws.explorer && viewItem == awsIotThingNode", - "group": "3@1" - }, - { - "command": "aws.iot.deleteCert", - "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.Policies/", - "group": "3@1" - }, - { - "command": "aws.iot.deletePolicy", - "when": "view == aws.explorer && viewItem == awsIotPolicyNode.WithVersions", - "group": "3@1" - }, - { - "command": "aws.iot.deletePolicyVersion", - "when": "view == aws.explorer && viewItem == awsIotPolicyVersionNode.NONDEFAULT", - "group": "3@1" - }, - { - "command": "aws.s3.deleteBucket", - "when": "view == aws.explorer && viewItem == awsS3BucketNode", - "group": "3@1" - }, - { - "command": "aws.s3.deleteFile", - "when": "view == aws.explorer && viewItem == awsS3FileNode", - "group": "3@1" - }, - { - "command": "aws.downloadSchemaItemCode", - "when": "view == aws.explorer && viewItem == awsSchemaItemNode", - "group": "1@1" - }, - { - "command": "aws.cwl.viewLogStream", - "group": "0@1", - "when": "view == aws.explorer && viewItem == awsCloudWatchLogNode" - }, - { - "command": "aws.ssmDocument.openLocalDocumentYaml", - "group": "0@1", - "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/" - }, - { - "command": "aws.ssmDocument.openLocalDocumentJson", - "group": "0@2", - "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/" - }, - { - "command": "aws.ssmDocument.updateDocumentVersion", - "group": "2@1", - "when": "view == aws.explorer && viewItem == awsDocumentItemNodeWriteable" - }, - { - "command": "aws.ssmDocument.deleteDocument", - "group": "3@2", - "when": "view == aws.explorer && viewItem == awsDocumentItemNodeWriteable" - }, - { - "command": "aws.ecs.runCommandInContainer", - "group": "0@1", - "when": "view == aws.explorer && viewItem =~ /^(awsEcsContainerNodeExec)(.*)$/" - }, - { - "command": "aws.ecs.openTaskInTerminal", - "group": "0@2", - "when": "view == aws.explorer && viewItem =~ /^(awsEcsContainerNodeExec)(.*)$/ && !isCloud9" - }, - { - "command": "aws.ecs.enableEcsExec", - "group": "0@2", - "when": "view == aws.explorer && viewItem == awsEcsServiceNode.DISABLED" - }, - { - "command": "aws.ecs.disableEcsExec", - "group": "0@2", - "when": "view == aws.explorer && viewItem == awsEcsServiceNode.ENABLED" - }, - { - "command": "aws.ecs.viewDocumentation", - "group": "1@3", - "when": "view == aws.explorer && viewItem =~ /^(awsEcsClusterNode|awsEcsContainerNode)$|^awsEcsServiceNode/" - }, - { - "command": "aws.resources.configure", - "when": "view == aws.explorer && viewItem == resourcesRootNode", - "group": "1@1" - }, - { - "command": "aws.resources.configure", - "when": "view == aws.explorer && viewItem == resourcesRootNode", - "group": "inline@1" - }, - { - "command": "aws.resources.openResourcePreview", - "when": "view == aws.explorer && viewItem =~ /^(.*)(ResourceNode)$/", - "group": "1@1" - }, - { - "command": "aws.resources.copyIdentifier", - "when": "view == aws.explorer && viewItem =~ /^(.*)(ResourceNode)$/", - "group": "1@1" - }, - { - "command": "aws.resources.viewDocs", - "when": "view == aws.explorer && viewItem =~ /^(.*)(Documented)(.*)(ResourceTypeNode)$/", - "group": "1@1" - }, - { - "command": "aws.resources.createResource", - "when": "view == aws.explorer && viewItem =~ /^(.*)(Creatable)(.*)(ResourceTypeNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", - "group": "2@1" - }, - { - "command": "aws.resources.createResource", - "when": "view == aws.explorer && viewItem =~ /^(.*)(Creatable)(.*)(ResourceTypeNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", - "group": "inline@1" - }, - { - "command": "aws.resources.updateResource", - "when": "view == aws.explorer && viewItem =~ /^(.*)(Updatable)(.*)(ResourceNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", - "group": "2@1" - }, - { - "command": "aws.resources.deleteResource", - "when": "view == aws.explorer && viewItem =~ /^(.*)(Deletable)(.*)(ResourceNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", - "group": "2@2" - }, - { - "command": "aws.apprunner.createServiceFromEcr", - "group": "0@2", - "when": "view == aws.explorer && viewItem =~ /awsEcrTagNode|awsEcrRepositoryNode/" - }, - { - "command": "aws.apprunner.startDeployment", - "group": "0@1", - "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" - }, - { - "command": "aws.apprunner.createService", - "group": "0@2", - "when": "view == aws.explorer && viewItem == awsAppRunnerNode" - }, - { - "command": "aws.apprunner.pauseService", - "group": "0@3", - "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" - }, - { - "command": "aws.apprunner.resumeService", - "group": "0@3", - "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.PAUSED" - }, - { - "command": "aws.apprunner.copyServiceUrl", - "group": "1@1", - "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" - }, - { - "command": "aws.apprunner.open", - "group": "1@2", - "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" - }, - { - "command": "aws.apprunner.deleteService", - "group": "3@1", - "when": "view == aws.explorer && viewItem =~ /awsAppRunnerServiceNode.[RUNNING|PAUSED|CREATE_FAILED]/" - }, - { - "command": "aws.cloudFormation.newTemplate", - "group": "0@1", - "when": "view == aws.explorer && viewItem == awsCloudFormationRootNode" - }, - { - "command": "aws.sam.newTemplate", - "group": "0@2", - "when": "view == aws.explorer && viewItem == awsCloudFormationRootNode" - }, - { - "command": "aws.cdk.viewDocs", - "when": "viewItem == awsCdkRootNode", - "group": "0@2" - }, - { - "command": "aws.toolkit.auth.addConnection", - "when": "viewItem == awsAuthNode", - "group": "0@1" - }, - { - "command": "aws.toolkit.auth.switchConnections", - "when": "viewItem == awsAuthNode", - "group": "0@2" - }, - { - "command": "aws.toolkit.auth.signout", - "when": "viewItem == awsAuthNode && !isCloud9", - "group": "0@3" - }, - { - "command": "aws.toolkit.auth.help", - "when": "viewItem == awsAuthNode", - "group": "inline@1" - }, - { - "submenu": "aws.toolkit.auth", - "when": "viewItem == awsAuthNode", - "group": "inline@2" - }, - { - "submenu": "aws.codecatalyst.submenu", - "when": "viewItem =~ /^awsCodeCatalystNode/", - "group": "inline@1" - }, - { - "command": "aws.codecatalyst.manageConnections", - "when": "viewItem =~ /^awsCodeCatalystNode/", - "group": "0@1" - }, - { - "command": "aws.codecatalyst.signout", - "when": "viewItem =~ /^awsCodeCatalystNode/&& !isCloud9 && aws.codecatalyst.connected", - "group": "0@2" - } - ], - "aws.toolkit.auth": [ - { - "command": "aws.toolkit.auth.manageConnections", - "group": "0@1" - }, - { - "command": "aws.toolkit.auth.switchConnections", - "group": "0@2" - }, - { - "command": "aws.toolkit.auth.signout", - "enablement": "!isCloud9", - "group": "0@3" - } - ], - "aws.toolkit.submenu.feedback": [ - { - "command": "aws.toolkit.submitFeedback", - "when": "!aws.isWebExtHost", - "group": "1_feedback@1" - }, - { - "command": "aws.toolkit.createIssueOnGitHub", - "group": "1_feedback@2" - } - ], - "aws.toolkit.submenu.help": [ - { - "command": "aws.quickStart", - "when": "isCloud9", - "group": "1_help@1" - }, - { - "command": "aws.toolkit.help", - "group": "1_help@2" - }, - { - "command": "aws.toolkit.github", - "group": "1_help@3" - }, - { - "command": "aws.toolkit.aboutExtension", - "group": "1_help@4" - }, - { - "command": "aws.toolkit.viewLogs", - "group": "1_help@5" - } - ], - "file/newFile": [ - { - "command": "aws.newThreatComposerFile" - } - ] - }, - "commands": [ - { - "command": "aws.accessanalyzer.iamPolicyChecks", - "title": "%AWS.command.accessanalyzer.iamPolicyChecks%", - "category": "%AWS.title%" - }, - { - "command": "aws.launchConfigForm", - "title": "%AWS.command.launchConfigForm.title%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apig.copyUrl", - "title": "%AWS.command.apig.copyUrl%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apig.invokeRemoteRestApi", - "title": "%AWS.command.apig.invokeRemoteRestApi%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%", - "title": "%AWS.command.apig.invokeRemoteRestApi.cn%" - } - } - }, - { - "command": "aws.lambda.createNewSamApp", - "title": "%AWS.command.createNewSamApp%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.login", - "title": "%AWS.command.login%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "title": "%AWS.command.login.cn%", - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.credentials.profile.create", - "title": "%AWS.command.credentials.profile.create%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.credentials.edit", - "title": "%AWS.command.credentials.edit%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.codecatalyst.openOrg", - "title": "%AWS.command.codecatalyst.openOrg%", - "category": "AWS", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.openProject", - "title": "%AWS.command.codecatalyst.openProject%", - "category": "AWS", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.openRepo", - "title": "%AWS.command.codecatalyst.openRepo%", - "category": "AWS", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.openDevEnv", - "title": "%AWS.command.codecatalyst.openDevEnv%", - "category": "AWS", - "enablement": "!isCloud9 && !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.listCommands", - "title": "%AWS.command.codecatalyst.listCommands%", - "category": "AWS", - "enablement": "!isCloud9 && !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.cloneRepo", - "title": "%AWS.command.codecatalyst.cloneRepo%", - "category": "AWS", - "enablement": "!isCloud9 && !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.createDevEnv", - "title": "%AWS.command.codecatalyst.createDevEnv%", - "category": "AWS", - "enablement": "!isCloud9 && !aws.isWebExtHost" - }, - { - "command": "aws.codecatalyst.signout", - "title": "%AWS.command.codecatalyst.signout%", - "category": "AWS", - "icon": "$(debug-disconnect)", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.toolkit.auth.addConnection", - "title": "%AWS.command.auth.addConnection%", - "category": "%AWS.title%" - }, - { - "command": "aws.toolkit.auth.manageConnections", - "title": "%AWS.command.auth.showConnectionsPage%", - "category": "%AWS.title%" - }, - { - "command": "aws.codecatalyst.manageConnections", - "title": "%AWS.command.auth.showConnectionsPage%", - "category": "%AWS.title%" - }, - { - "command": "aws.toolkit.auth.switchConnections", - "title": "%AWS.command.auth.switchConnections%", - "category": "%AWS.title%" - }, - { - "command": "aws.toolkit.auth.signout", - "title": "%AWS.command.auth.signout%", - "category": "%AWS.title%", - "enablement": "!isCloud9" - }, - { - "command": "aws.toolkit.auth.help", - "title": "%AWS.generic.viewDocs%", - "category": "%AWS.title%", - "icon": "$(question)" - }, - { - "command": "aws.toolkit.createIssueOnGitHub", - "title": "%AWS.command.createIssueOnGitHub%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.openTerminal", - "title": "%AWS.command.ec2.openTerminal%", - "icon": "$(terminal-view-icon)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.linkToLaunch", - "title": "%AWS.command.ec2.linkToLaunch%", - "icon": "$(add)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.openRemoteConnection", - "title": "%AWS.command.ec2.openRemoteConnection%", - "icon": "$(remote-explorer)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.startInstance", - "title": "%AWS.command.ec2.startInstance%", - "icon": "$(debug-start)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.stopInstance", - "title": "%AWS.command.ec2.stopInstance%", - "icon": "$(debug-stop)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.rebootInstance", - "title": "%AWS.command.ec2.rebootInstance%", - "icon": "$(debug-restart)", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ec2.copyInstanceId", - "title": "%AWS.command.ec2.copyInstanceId%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecr.copyTagUri", - "title": "%AWS.command.ecr.copyTagUri%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecr.deleteTag", - "title": "%AWS.command.ecr.deleteTag%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecr.copyRepositoryUri", - "title": "%AWS.command.ecr.copyRepositoryUri%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecr.createRepository", - "title": "%AWS.command.ecr.createRepository%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(add)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecr.deleteRepository", - "title": "%AWS.command.ecr.deleteRepository%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.showRegion", - "title": "%AWS.command.showRegion%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.createThing", - "title": "%AWS.command.iot.createThing%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(add)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.deleteThing", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.createCert", - "title": "%AWS.command.iot.createCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(add)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.deleteCert", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.attachCert", - "title": "%AWS.command.iot.attachCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(aws-generic-attach-file)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.attachPolicy", - "title": "%AWS.command.iot.attachPolicy%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(aws-generic-attach-file)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.activateCert", - "title": "%AWS.command.iot.activateCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.deactivateCert", - "title": "%AWS.command.iot.deactivateCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.revokeCert", - "title": "%AWS.command.iot.revokeCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.createPolicy", - "title": "%AWS.command.iot.createPolicy%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(add)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.deletePolicy", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.createPolicyVersion", - "title": "%AWS.command.iot.createPolicyVersion%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.deletePolicyVersion", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.detachCert", - "title": "%AWS.command.iot.detachCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.detachPolicy", - "title": "%AWS.command.iot.detachCert%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.viewPolicyVersion", - "title": "%AWS.command.iot.viewPolicyVersion%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.setDefaultPolicy", - "title": "%AWS.command.iot.setDefaultPolicy%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.iot.copyEndpoint", - "title": "%AWS.command.iot.copyEndpoint%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.redshift.editConnection", - "title": "Edit connection", - "category": "%AWS.title%" - }, - { - "command": "aws.redshift.deleteConnection", - "title": "Delete connection", - "category": "%AWS.title%" - }, - { - "command": "aws.s3.presignedURL", - "title": "%AWS.command.s3.presignedURL%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.s3.copyPath", - "title": "%AWS.command.s3.copyPath%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.downloadFileAs", - "title": "%AWS.command.s3.downloadFileAs%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(cloud-download)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.openFile", - "title": "%AWS.command.s3.openFile%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(open-preview)" - }, - { - "command": "aws.s3.editFile", - "title": "%AWS.command.s3.editFile%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(edit)" - }, - { - "command": "aws.s3.uploadFile", - "title": "%AWS.command.s3.uploadFile%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(cloud-upload)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.uploadFileToParent", - "title": "%AWS.command.s3.uploadFileToParent%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.createFolder", - "title": "%AWS.command.s3.createFolder%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(new-folder)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.createBucket", - "title": "%AWS.command.s3.createBucket%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(aws-s3-create-bucket)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.deleteBucket", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.s3.deleteFile", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.invokeLambda", - "title": "%AWS.command.invokeLambda%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "title": "%AWS.command.invokeLambda.cn%", - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.downloadLambda", - "title": "%AWS.command.downloadLambda%", - "category": "%AWS.title%", - "enablement": "viewItem == awsRegionFunctionNodeDownloadable", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.uploadLambda", - "title": "%AWS.command.uploadLambda%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.deleteLambda", - "title": "%AWS.generic.promptDelete%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.copyLambdaUrl", - "title": "%AWS.generic.copyUrl%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.deploySamApplication", - "title": "%AWS.command.deploySamApplication%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.submitFeedback", - "title": "%AWS.command.submitFeedback%", - "enablement": "!aws.isWebExtHost", - "category": "%AWS.title%", - "icon": "$(comment)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.refreshAwsExplorer", - "title": "%AWS.command.refreshAwsExplorer%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "icon": { - "dark": "resources/icons/vscode/dark/refresh.svg", - "light": "resources/icons/vscode/light/refresh.svg" - } - }, - { - "command": "aws.samcli.detect", - "title": "%AWS.command.samcli.detect%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.deleteCloudFormation", - "title": "%AWS.command.deleteCloudFormation%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.downloadStateMachineDefinition", - "title": "%AWS.command.downloadStateMachineDefinition%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.executeStateMachine", - "title": "%AWS.command.executeStateMachine%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.renderStateMachineGraph", - "title": "%AWS.command.renderStateMachineGraph%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.copyArn", - "title": "%AWS.command.copyArn%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.copyName", - "title": "%AWS.command.copyName%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.listCommands", - "title": "%AWS.command.listCommands%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "title": "%AWS.command.listCommands.cn%", - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.viewSchemaItem", - "title": "%AWS.command.viewSchemaItem%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.searchSchema", - "title": "%AWS.command.searchSchema%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.searchSchemaPerRegistry", - "title": "%AWS.command.searchSchemaPerRegistry%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.downloadSchemaItemCode", - "title": "%AWS.command.downloadSchemaItemCode%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.viewLogs", - "title": "%AWS.command.viewLogs%", - "category": "%AWS.title%" - }, - { - "command": "aws.toolkit.help", - "title": "%AWS.command.help%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toolkit.github", - "title": "%AWS.command.github%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.quickStart", - "title": "%AWS.command.quickStart%", - "category": "%AWS.title%", - "enablement": "isCloud9", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cdk.refresh", - "title": "%AWS.command.refreshCdkExplorer%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": { - "dark": "resources/icons/vscode/dark/refresh.svg", - "light": "resources/icons/vscode/light/refresh.svg" - }, - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cdk.viewDocs", - "title": "%AWS.generic.viewDocs%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.stepfunctions.createStateMachineFromTemplate", - "title": "%AWS.command.stepFunctions.createStateMachineFromTemplate%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.stepfunctions.publishStateMachine", - "title": "%AWS.command.stepFunctions.publishStateMachine%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.previewStateMachine", - "title": "%AWS.command.stepFunctions.previewStateMachine%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(aws-stepfunctions-preview)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cdk.renderStateMachineGraph", - "title": "%AWS.command.cdk.previewStateMachine%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "AWS", - "icon": "$(aws-stepfunctions-preview)" - }, - { - "command": "aws.toolkit.aboutExtension", - "title": "%AWS.command.aboutToolkit%", - "category": "%AWS.title%" - }, - { - "command": "aws.cwl.viewLogStream", - "title": "%AWS.command.viewLogStream%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.createLocalDocument", - "title": "%AWS.command.ssmDocument.createLocalDocument%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.openLocalDocument", - "title": "%AWS.command.ssmDocument.openLocalDocument%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(cloud-download)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.openLocalDocumentJson", - "title": "%AWS.command.ssmDocument.openLocalDocumentJson%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.openLocalDocumentYaml", - "title": "%AWS.command.ssmDocument.openLocalDocumentYaml%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.deleteDocument", - "title": "%AWS.command.ssmDocument.deleteDocument%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.publishDocument", - "title": "%AWS.command.ssmDocument.publishDocument%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(cloud-upload)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ssmDocument.updateDocumentVersion", - "title": "%AWS.command.ssmDocument.updateDocumentVersion%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.copyLogResource", - "title": "%AWS.command.copyLogResource%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(files)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cwl.searchLogGroup", - "title": "%AWS.command.cloudWatchLogs.searchLogGroup%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(search-view-icon)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.saveCurrentLogDataContent", - "title": "%AWS.command.saveCurrentLogDataContent%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(save)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cwl.changeFilterPattern", - "title": "%AWS.command.cwl.changeFilterPattern%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(search-view-icon)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cwl.changeTimeFilter", - "title": "%AWS.command.cwl.changeTimeFilter%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(calendar)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.addSamDebugConfig", - "title": "%AWS.command.addSamDebugConfig%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.toggleSamCodeLenses", - "title": "%AWS.command.toggleSamCodeLenses%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecs.runCommandInContainer", - "title": "%AWS.ecs.runCommandInContainer%", - "category": "%AWS.title%", - "enablement": "viewItem == awsEcsContainerNodeExecEnabled", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecs.openTaskInTerminal", - "title": "%AWS.ecs.openTaskInTerminal%", - "category": "%AWS.title%", - "enablement": "viewItem == awsEcsContainerNodeExecEnabled", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecs.enableEcsExec", - "title": "%AWS.ecs.enableEcsExec%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecs.viewDocumentation", - "title": "%AWS.generic.viewDocs%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.copyIdentifier", - "title": "%AWS.command.resources.copyIdentifier%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.openResourcePreview", - "title": "%AWS.generic.preview%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(open-preview)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.createResource", - "title": "%AWS.generic.create%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(add)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.deleteResource", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.updateResource", - "title": "%AWS.generic.promptUpdate%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(pencil)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.updateResourceInline", - "title": "%AWS.generic.promptUpdate%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(pencil)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.saveResource", - "title": "%AWS.generic.save%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(save)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.closeResource", - "title": "%AWS.generic.close%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(close)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.viewDocs", - "title": "%AWS.generic.viewDocs%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(book)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.resources.configure", - "title": "%AWS.command.resources.configure%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "icon": "$(gear)", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.createService", - "title": "%AWS.command.apprunner.createService%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.ecs.disableEcsExec", - "title": "%AWS.ecs.disableEcsExec%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.createServiceFromEcr", - "title": "%AWS.command.apprunner.createServiceFromEcr%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.pauseService", - "title": "%AWS.command.apprunner.pauseService%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.resumeService", - "title": "%AWS.command.apprunner.resumeService%", - "category": "AWS", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.copyServiceUrl", - "title": "%AWS.command.apprunner.copyServiceUrl%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.open", - "title": "%AWS.command.apprunner.open%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.deleteService", - "title": "%AWS.generic.promptDelete%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.apprunner.startDeployment", - "title": "%AWS.command.apprunner.startDeployment%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.cloudFormation.newTemplate", - "title": "%AWS.command.cloudFormation.newTemplate%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.sam.newTemplate", - "title": "%AWS.command.sam.newTemplate%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.samcli.sync", - "title": "%AWS.command.samcli.sync%", - "category": "%AWS.title%", - "enablement": "isCloud9 || !aws.isWebExtHost" - }, - { - "command": "aws.toolkit.amazonq.learnMore", - "title": "%AWS.amazonq.learnMore%", - "category": "%AWS.title%" - }, - { - "command": "aws.toolkit.amazonq.extensionpage", - "title": "Open Amazon Q Extension", - "category": "%AWS.title%" - }, - { - "command": "aws.dev.openMenu", - "title": "Open Developer Menu", - "category": "AWS (Developer)", - "enablement": "aws.isDevMode" - }, - { - "command": "aws.dev.viewLogs", - "title": "Watch Logs", - "category": "AWS (Developer)" - }, - { - "command": "aws.openInApplicationComposerDialog", - "title": "%AWS.command.applicationComposer.openDialog%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.openInApplicationComposer", - "title": "%AWS.command.applicationComposer.open%", - "category": "%AWS.title%", - "icon": { - "dark": "resources/icons/aws/applicationcomposer/icon-dark.svg", - "light": "resources/icons/aws/applicationcomposer/icon.svg" - }, - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.createNewThreatComposer", - "title": "%AWS.command.threatComposer.createNew%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - }, - { - "command": "aws.newThreatComposerFile", - "title": "%AWS.command.threatComposer.newFile%", - "category": "%AWS.title%", - "cloud9": { - "cn": { - "category": "%AWS.title.cn%" - } - } - } - ], - "jsonValidation": [ - { - "fileMatch": ".aws/templates.json", - "url": "./dist/src/templates/templates.json" - }, - { - "fileMatch": "*ecs-task-def.json", - "url": "https://ecs-intellisense.s3-us-west-2.amazonaws.com/task-definition/schema.json" - } - ], - "languages": [ - { - "id": "asl", - "extensions": [ - ".asl.json", - ".asl" - ], - "aliases": [ - "Amazon States Language" - ] - }, - { - "id": "asl-yaml", - "aliases": [ - "Amazon States Language (YAML)" - ], - "extensions": [ - ".asl.yaml", - ".asl.yml" - ] - }, - { - "id": "ssm-json", - "extensions": [ - ".ssm.json" - ], - "aliases": [ - "AWS Systems Manager Document (JSON)" - ] - }, - { - "id": "ssm-yaml", - "extensions": [ - ".ssm.yaml", - ".ssm.yml" - ], - "aliases": [ - "AWS Systems Manager Document (YAML)" - ] - } - ], - "keybindings": [ - { - "command": "aws.previewStateMachine", - "key": "ctrl+shift+v", - "mac": "cmd+shift+v", - "when": "editorTextFocus && editorLangId == asl || editorTextFocus && editorLangId == asl-yaml" - } - ], - "grammars": [ - { - "language": "asl", - "scopeName": "source.asl", - "path": "./syntaxes/ASL.tmLanguage" - }, - { - "language": "asl-yaml", - "scopeName": "source.asl.yaml", - "path": "./syntaxes/asl-yaml.tmLanguage.json" - }, - { - "language": "ssm-json", - "scopeName": "source.ssmjson", - "path": "./syntaxes/SSMJSON.tmLanguage" - }, - { - "language": "ssm-yaml", - "scopeName": "source.ssmyaml", - "path": "./syntaxes/SSMYAML.tmLanguage" - } - ], - "resourceLabelFormatters": [ - { - "scheme": "aws-cwl", - "formatting": { - "label": "${path}", - "separator": "/" - } - }, - { - "scheme": "s3*", - "formatting": { - "label": "[S3] ${path}", - "separator": "/" - } - } - ], - "walkthroughs": [], "icons": { "aws-amazonq-q-gradient": { "description": "AWS Contributed Icon", @@ -4023,33 +374,6 @@ "fontCharacter": "\\f1da" } } - }, - "notebooks": [ - { - "type": "aws-redshift-sql-notebook", - "displayName": "Redshift SQL notebook", - "selector": [ - { - "filenamePattern": "*.redshiftnb" - } - ] - } - ], - "customEditors": [ - { - "viewType": "threatComposer.tc.json", - "displayName": "%AWS.threatComposer.title%", - "selector": [ - { - "filenamePattern": "*.tc.json" - } - ] - } - ], - "configurationDefaults": { - "workbench.editorAssociations": { - "{git,gitlens,conflictResolution,vscode-local-history}:/**/*.tc.json": "default" - } } }, "scripts": { @@ -4057,17 +381,12 @@ "clean": "ts-node ../../scripts/clean.ts dist/", "copyFiles": "ts-node ./scripts/build/copyFiles.ts", "buildScripts": "npm run generateClients && npm run generateIcons && npm run copyFiles", - "compile": "npm run testCompile && webpack", + "compile": "npm run clean && npm run buildScripts && npm run compileOnly && webpack", "compileOnly": "tsc -p ./", "compileDev": "npm run compile -- --mode development", "webpackDev": "webpack --mode development", "serveVue": "webpack serve --config-name vue --mode development", - "watch": "npm run testCompile -- -- --watch", - "testCompile": "npm run clean && npm run buildScripts && npm run compileOnly", - "test": "npm run testCompile && c8 ts-node ./scripts/test/test.ts dist/src/test/index.js", - "testWeb": "npm run compileDev && c8 ts-node ./scripts/test/testWeb.ts", - "testE2E": "npm run testCompile && c8 ts-node ./scripts/test/testE2E.ts dist/src/testE2E/index.js", - "testInteg": "npm run testCompile && c8 ts-node ./scripts/test/testInteg.ts", + "watch": "npm run clean && npm run buildScripts && npm run compileOnly -- --watch", "lint": "ts-node ./scripts/lint/testLint.ts", "generateClients": "ts-node ./scripts/build/generateServiceClient.ts ", "generateIcons": "ts-node ../../scripts/generateIcons.ts", diff --git a/packages/core/scripts/test/launchTest.ts b/packages/core/scripts/test/launchTest.ts new file mode 100644 index 00000000000..27ac83bd43f --- /dev/null +++ b/packages/core/scripts/test/launchTest.ts @@ -0,0 +1,37 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * This script is used to run unit tests from an npm script defined in package.json. + * TODO: Generalize and use named args system from root/scripts/package.ts + * + * Usage: + * node ./test/runToolkitTests.js + * + * where: + * - suite_name, e.g. 'unit', 'integration', 'e2e' + * - relative path to entrypoint: test entry point file built in .js, e.g. 'amazonq/dist/test/unit/index.js' + * - relative path to workspace folder: folder to open the test VSC instance in (optional) + * + * See examples in any subproject's package.json `test` scripts. + */ + +import 'source-map-support/register' + +import { runToolkitTests, SuiteName } from './launchTestUtilities' +void (async () => { + const suiteName = process.argv[2] as SuiteName + if (!suiteName) { + throw new Error('A test suite name is required.') + } + + const relativeEntrypoint = process.argv[3] + if (!relativeEntrypoint) { + throw new Error('A path relative to core is required.') + } + + const relativeWorkspaceFolder = process.argv[4] + await runToolkitTests(suiteName, relativeEntrypoint, relativeWorkspaceFolder) +})() diff --git a/packages/core/scripts/test/launchTestUtilities.ts b/packages/core/scripts/test/launchTestUtilities.ts index 2e73c8e5d4e..87031d065ef 100644 --- a/packages/core/scripts/test/launchTestUtilities.ts +++ b/packages/core/scripts/test/launchTestUtilities.ts @@ -18,7 +18,8 @@ const minimum = 'minimum' const disableWorkspaceTrust = '--disable-workspace-trust' -type SuiteName = 'integration' | 'e2e' | 'unit' | 'web' +const suiteNames = ['integration', 'e2e', 'unit', 'web'] as const +export type SuiteName = (typeof suiteNames)[number] /** * This is the generalized method that is used by different test suites (unit, integration, ...) in CI to @@ -35,6 +36,10 @@ export async function runToolkitTests( env?: Record ) { try { + if (!suiteNames.includes(suite)) { + throw new Error(`Invalid suite name: '${suite}'. Must be one of: ${suiteNames.join(',')}`) + } + console.log(`Running ${suite} test suite...`) const args = await getVSCodeCliArgs({ diff --git a/packages/core/scripts/test/test.ts b/packages/core/scripts/test/test.ts deleted file mode 100644 index c18a9f7036c..00000000000 --- a/packages/core/scripts/test/test.ts +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runToolkitTests } from './launchTestUtilities' -void (async () => { - const relativeEntrypoint = process.argv[2] - if (!relativeEntrypoint) { - throw new Error('A path relative to core is required') - } - - const relativeWorkspaceFolder = process.argv[3] - await runToolkitTests('unit', relativeEntrypoint, relativeWorkspaceFolder) -})() diff --git a/packages/core/scripts/test/testE2E.ts b/packages/core/scripts/test/testE2E.ts deleted file mode 100644 index 95aff8fa28b..00000000000 --- a/packages/core/scripts/test/testE2E.ts +++ /dev/null @@ -1,15 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runToolkitTests } from './launchTestUtilities' -void (async () => { - const relativeEntrypoint = process.argv[2] - if (!relativeEntrypoint) { - throw new Error('Relative entrypoint is required') - } - - const relativeWorkspaceFolder = process.argv[3] - await runToolkitTests('e2e', relativeEntrypoint, relativeWorkspaceFolder) -})() diff --git a/packages/core/scripts/test/testInteg.ts b/packages/core/scripts/test/testInteg.ts deleted file mode 100644 index 2fc412c3ba5..00000000000 --- a/packages/core/scripts/test/testInteg.ts +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runToolkitTests } from './launchTestUtilities' -void (async () => { - await runToolkitTests('integration', 'dist/src/testInteg/index.js') -})() diff --git a/packages/core/scripts/test/testWeb.ts b/packages/core/scripts/test/testWeb.ts deleted file mode 100644 index c6eca1469b2..00000000000 --- a/packages/core/scripts/test/testWeb.ts +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runToolkitTests } from './launchTestUtilities' -void (async () => { - await runToolkitTests('web', 'dist/src/testWeb/testRunnerWebCore.js') -})() diff --git a/packages/core/src/shared/extensionGlobals.ts b/packages/core/src/shared/extensionGlobals.ts index 4bcb2ea0162..0dd9cdf61f1 100644 --- a/packages/core/src/shared/extensionGlobals.ts +++ b/packages/core/src/shared/extensionGlobals.ts @@ -172,7 +172,7 @@ export { globals as default } * Namespace for common variables used globally in the extension. * All variables here must be initialized in the activate() method of extension.ts */ -interface ToolkitGlobals { +export interface ToolkitGlobals { readonly context: ExtensionContext /** Global, shared (with all vscode instances, including remote!), mutable, persisted state (survives IDE restart), namespaced to the extension (not shared with other vscode extensions). */ readonly globalState: GlobalState diff --git a/packages/core/src/shared/extensionUtilities.ts b/packages/core/src/shared/extensionUtilities.ts index 15d57e6642f..513ed2c519d 100644 --- a/packages/core/src/shared/extensionUtilities.ts +++ b/packages/core/src/shared/extensionUtilities.ts @@ -26,7 +26,7 @@ const notInitialized = 'notInitialized' function _isAmazonQ() { const id = globals.context.extension.id - const isToolkit = id === VSCODE_EXTENSION_ID.awstoolkit || id === VSCODE_EXTENSION_ID.awstoolkitcore + const isToolkit = id === VSCODE_EXTENSION_ID.awstoolkit const isQ = id === VSCODE_EXTENSION_ID.amazonq if (!isToolkit && !isQ) { throw Error(`unexpected extension id: ${id}`) // sanity check diff --git a/packages/core/src/shared/extensions.ts b/packages/core/src/shared/extensions.ts index ece9fcbb9bc..a4682cc3a18 100644 --- a/packages/core/src/shared/extensions.ts +++ b/packages/core/src/shared/extensions.ts @@ -15,7 +15,6 @@ import { UriHandler } from './vscode/uriHandler' export const VSCODE_EXTENSION_ID = { awstoolkit: 'amazonwebservices.aws-toolkit-vscode', amazonq: 'amazonwebservices.amazon-q-vscode', - awstoolkitcore: 'amazonwebservices.aws-core-vscode', // Core "extension" for tests - not a real extension. python: 'ms-python.python', // python depends on jupyter plugin jupyter: 'ms-toolsai.jupyter', diff --git a/packages/core/src/shared/index.ts b/packages/core/src/shared/index.ts index 3e456d4d2b8..3abc5d58f7b 100644 --- a/packages/core/src/shared/index.ts +++ b/packages/core/src/shared/index.ts @@ -8,7 +8,7 @@ */ export { ExtContext } from './extensions' -export { initialize, default as globals } from './extensionGlobals' +export { initialize, isWeb, ToolkitGlobals, default as globals } from './extensionGlobals' export { activate as activateLogger } from './logger/activation' export { activate as activateTelemetry } from './telemetry/activation' export { DefaultAwsContext } from './awsContext' @@ -36,6 +36,7 @@ export { CodewhispererUserDecision, CodewhispererSecurityScan, } from './telemetry/telemetry.gen' +export { randomUUID } from './crypto' export * from './environmentVariables' export * from './vscode/setContext' export * from './utilities/textUtilities' diff --git a/packages/core/src/test/codewhisperer/commands/startSecurityScan.test.ts b/packages/core/src/test/codewhisperer/commands/startSecurityScan.test.ts index 2e8f6673894..f3efda3e040 100644 --- a/packages/core/src/test/codewhisperer/commands/startSecurityScan.test.ts +++ b/packages/core/src/test/codewhisperer/commands/startSecurityScan.test.ts @@ -14,7 +14,13 @@ import { FakeExtensionContext } from '../../fakeExtensionContext' import * as diagnosticsProvider from '../../../codewhisperer/service/diagnosticsProvider' import { getTestWorkspaceFolder } from '../../../testInteg/integrationTestsUtilities' import { join } from 'path' -import { assertTelemetry, closeAllEditors, createTestWorkspaceFolder, toFile } from '../../testUtil' +import { + assertTelemetry, + closeAllEditors, + createTestWorkspaceFolder, + getFetchStubWithResponse, + toFile, +} from '../../testUtil' import { stub } from '../../utilities/stubber' import { AWSError, HttpResponse } from 'aws-sdk' import { getTestWindow } from '../../shared/vscode/window' @@ -30,7 +36,6 @@ import * as model from '../../../codewhisperer/models/model' import { CodewhispererSecurityScan } from '../../../shared/telemetry/telemetry.gen' import * as errors from '../../../shared/errors' import * as timeoutUtils from '../../../shared/utilities/timeoutUtils' -import { getFetchStubWithResponse } from '../../index' import { performanceTest } from '../../../shared/performance/performance' const mockCreateCodeScanResponse = { diff --git a/packages/core/src/test/globalSetup.test.ts b/packages/core/src/test/globalSetup.test.ts index 09c2333475b..dc804a56bbc 100644 --- a/packages/core/src/test/globalSetup.test.ts +++ b/packages/core/src/test/globalSetup.test.ts @@ -53,8 +53,16 @@ export async function mochaGlobalSetup(extensionId: string) { // Shows the full error chain when tests fail mapTestErrors(this, normalizeError) + const ext = vscode.extensions.getExtension(extensionId) + if (!ext) { + setTimeout(() => process.exit(1), 4000) // Test process will hang otherwise, but give time to report thrown error. + throw new Error( + `Could not activate extension for tests: ${extensionId} not found. Is 'extensionDevelopmentPath' configured correctly?` + + ' Does the path have a proper vscode extension package.json?' + ) + } + await ext.activate() - await vscode.extensions.getExtension(extensionId)?.activate() const fakeContext = await FakeExtensionContext.create() fakeContext.globalStorageUri = (await testUtil.createTestWorkspaceFolder('globalStoragePath')).uri fakeContext.extensionPath = globals.context.extensionPath diff --git a/packages/core/src/test/index.ts b/packages/core/src/test/index.ts index 3011c35cbee..282fdac2bfc 100644 --- a/packages/core/src/test/index.ts +++ b/packages/core/src/test/index.ts @@ -3,11 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { runTests } from './testRunner' - -export function run(): Promise { - return runTests(process.env.TEST_DIR ?? 'src/test', ['src/test/globalSetup.test.ts']) -} +/** + * Some imports in this file are node compatible only. + * For web-based test imports, see {@link file://./../testWeb/index.ts} + */ export { registerAuthHook, using } from './setupUtil' export { runTests } from './testRunner' @@ -19,16 +18,9 @@ export { SeverityLevel } from './shared/vscode/message' export { getTestLogger } from './globalSetup.test' export { testCommand } from './shared/vscode/testUtils' export { FakeAwsContext } from './utilities/fakeAwsContext' +export { getTestWorkspaceFolder } from '../testInteg/integrationTestsUtilities' export * from './codewhisperer/testUtil' export * from './credentials/testUtil' export * from './testUtil' export * from './amazonqFeatureDev/utils' export * from './fake/mockFeatureConfigData' - -import request from '../shared/request' -import { stub } from 'sinon' - -// Returns a stubbed fetch for other tests. -export function getFetchStubWithResponse(response: Partial) { - return stub(request, 'fetch').returns({ response: new Promise((res, _) => res(response)) } as any) -} diff --git a/packages/core/src/test/shared/utilities/vscodeUtils.test.ts b/packages/core/src/test/shared/utilities/vscodeUtils.test.ts index e56de51a1c9..450a378589f 100644 --- a/packages/core/src/test/shared/utilities/vscodeUtils.test.ts +++ b/packages/core/src/test/shared/utilities/vscodeUtils.test.ts @@ -18,8 +18,8 @@ describe('vscodeUtils', async function () { assert.deepStrictEqual(vscodeUtil.isExtensionActive('invalid.extension'), false) - await vscodeUtil.activateExtension(VSCODE_EXTENSION_ID.awstoolkitcore, false) - assert.deepStrictEqual(vscodeUtil.isExtensionActive(VSCODE_EXTENSION_ID.awstoolkitcore), true) + await vscodeUtil.activateExtension(VSCODE_EXTENSION_ID.awstoolkit, false) + assert.deepStrictEqual(vscodeUtil.isExtensionActive(VSCODE_EXTENSION_ID.awstoolkit), true) }) it('globDirPatterns()', async function () { diff --git a/packages/core/src/test/testRunner.ts b/packages/core/src/test/testRunner.ts index 68b391af116..5702f112a7e 100644 --- a/packages/core/src/test/testRunner.ts +++ b/packages/core/src/test/testRunner.ts @@ -8,7 +8,6 @@ import * as path from 'path' import Mocha from 'mocha' import { glob } from 'glob' import * as fs from 'fs-extra' -import { VSCODE_EXTENSION_ID } from '../shared/utilities' // Set explicit timezone to ensure that tests run locally do not use the user's actual timezone, otherwise // the test can pass on one persons machine but not anothers. @@ -20,9 +19,9 @@ process.env.TZ = 'US/Pacific' * @param initTests List of relative paths to test files containing root hooks: https://mochajs.org/#available-root-hooks */ export async function runTests( - testFolder: string, + testFolder: string | string[], + extensionId: string, initTests: string[] = [], - extensionId: string = VSCODE_EXTENSION_ID.awstoolkitcore, testFiles?: string[] ): Promise { if (!process.env['AWS_TOOLKIT_AUTOMATION']) { @@ -36,6 +35,9 @@ export async function runTests( } /** + * Tests are not run for core at the moment, but leaving this here because it may be useful in the future. + * It might also explain why `import { global } ...` works in web tests but `import global ...` does not. + * * Node's `require` caches modules by case-sensitive paths, regardless of the underlying * file system. This is normally not a problem, but VS Code also happens to normalize paths * on Windows to use lowercase drive letters when using its bootstrap loader. This means @@ -59,12 +61,7 @@ export async function runTests( * lower case module ids (since the tests live inside of core itself) */ const [drive, ...rest] = abs.split(':') - return rest.length === 0 - ? abs - : [ - extensionId === VSCODE_EXTENSION_ID.awstoolkitcore ? drive.toLowerCase() : drive.toUpperCase(), - ...rest, - ].join(':') + return rest.length === 0 ? abs : [drive.toUpperCase(), ...rest].join(':') } const root = getRoot() @@ -87,7 +84,12 @@ export async function runTests( const dist = path.resolve(root, 'dist') const testFile = process.env['TEST_FILE']?.replace('.ts', '.js') - const testFilePath = testFile ? path.resolve(dist, testFile) : undefined + let testFilePath: string | undefined + if (testFile?.includes('../core/')) { + testFilePath = path.resolve(root, testFile.replace('../core/', '../core/dist/')) + } else { + testFilePath = testFile ? path.resolve(dist, testFile) : undefined + } if (testFile && testFiles) { throw new Error('Individual file and list of files given to run tests on. One must be chosen.') @@ -139,7 +141,15 @@ export async function runTests( console.log('No test coverage found') } } - const files = testFiles ?? (await glob(testFilePath ?? `**/${testFolder}/**/**.test.js`, { cwd: dist })) + + let files: string[] = [] + if (testFiles) { + files = testFiles + } else { + for (const f of Array.isArray(testFolder) ? testFolder : [testFolder]) { + files = [...files, ...(await glob(testFilePath ?? `**/${f}/**/**.test.js`, { cwd: dist }))] + } + } await runMocha(files) await writeCoverage() diff --git a/packages/core/src/test/testUtil.ts b/packages/core/src/test/testUtil.ts index 17fe68df9d7..026faf4fd50 100644 --- a/packages/core/src/test/testUtil.ts +++ b/packages/core/src/test/testUtil.ts @@ -19,6 +19,8 @@ import { DeclaredCommand } from '../shared/vscode/commands2' import { mkdirSync, existsSync } from 'fs' import * as nodefs from 'fs/promises' import { randomBytes } from 'crypto' +import request from '../shared/request' +import { stub } from 'sinon' const testTempDirs: string[] = [] @@ -480,7 +482,13 @@ export async function closeAllEditors(): Promise { // - `vscode.OutputChannel` name prefixed with "extension-output". https://github.com/microsoft/vscode/issues/148993#issuecomment-1167654358 // - `vscode.LogOutputChannel` name (created with `vscode.window.createOutputChannel(…,{log:true})` // Maybe we can close these with a command? - const ignorePatterns = [/extension-output/, /tasks/, /amazonwebservices\.aws-core-vscode\./] + // For nullExtensionDescription, see https://github.com/aws/aws-toolkit-vscode/issues/4658 + const ignorePatterns = [ + /extension-output/, + /tasks/, + /amazonwebservices\.[a-z\-]+-vscode\./, + /nullExtensionDescription./, // Sometimes exists instead of the prior line, see https://github.com/aws/aws-toolkit-vscode/issues/4658 + ] const editors: vscode.TextEditor[] = [] const noVisibleEditor: boolean | undefined = await waitUntil( @@ -607,3 +615,8 @@ export function tryRegister(command: DeclaredCommand<() => Promise>) { } } } + +// Returns a stubbed fetch for other tests. +export function getFetchStubWithResponse(response: Partial) { + return stub(request, 'fetch').returns({ response: new Promise((res, _) => res(response)) } as any) +} diff --git a/packages/core/src/testE2E/index.ts b/packages/core/src/testE2E/index.ts deleted file mode 100644 index fc8caf56814..00000000000 --- a/packages/core/src/testE2E/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runTests } from '../test/testRunner' - -export function run(): Promise { - return runTests(process.env.TEST_DIR ?? 'src/testE2E', ['src/testInteg/globalSetup.test.ts']) -} diff --git a/packages/core/src/testInteg/index.ts b/packages/core/src/testInteg/index.ts deleted file mode 100644 index cdb21f1091c..00000000000 --- a/packages/core/src/testInteg/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -import { runTests } from '../test/testRunner' - -export function run(): Promise { - return runTests(process.env.TEST_DIR ?? 'src/testInteg', ['src/testInteg/globalSetup.test.ts']) -} - -export { getTestWorkspaceFolder } from './integrationTestsUtilities' diff --git a/packages/core/src/testWeb/index.ts b/packages/core/src/testWeb/index.ts new file mode 100644 index 00000000000..5a2f96dfb51 --- /dev/null +++ b/packages/core/src/testWeb/index.ts @@ -0,0 +1,8 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** Web-compatible tests and test utilities. */ + +export { timeoutUtilsDescribe } from '../test/shared/utilities/timeoutUtils.test' diff --git a/packages/core/webpack.config.js b/packages/core/webpack.config.js index b9ae7010acd..95827191571 100644 --- a/packages/core/webpack.config.js +++ b/packages/core/webpack.config.js @@ -36,18 +36,5 @@ module.exports = (env, argv) => { }, } - const webConfig = { - ...baseWebConfigsFactory(env, argv), - entry: { - // We webpack AND compile at the same time in certain build scripts. - // Both webpack and compile can output the same named file, overwriting one another. - // Due to this we must ensure the webpack `entry` files have a different - // name from the actual source files so we do not overwrite the output - // from the compilation. - 'src/extensionWebCore': './src/extensionWeb.ts', - 'src/testWeb/testRunnerWebCore': './src/testWeb/testRunner.ts', - }, - } - - return [config, vueConfig, webConfig] + return [config, vueConfig] } diff --git a/packages/toolkit/.vscode/launch.json b/packages/toolkit/.vscode/launch.json index 3cabb56182f..f8596e05190 100644 --- a/packages/toolkit/.vscode/launch.json +++ b/packages/toolkit/.vscode/launch.json @@ -54,6 +54,116 @@ "order": 3 } }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/dist/test/unit/index", + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" + ], + "env": { + "DEVELOPMENT_PATH": "${workspaceFolder}", + "AWS_TOOLKIT_AUTOMATION": "local" + }, + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "watch", + "presentation": { + "group": "3_ExtensionTests", + "order": 2 + } + }, + { + "name": "Extension Tests (current file)", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/dist/test/unit/index", + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder" + ], + "env": { + "TEST_FILE": "${relativeFile}", + "DEVELOPMENT_PATH": "${workspaceFolder}", + "AWS_TOOLKIT_AUTOMATION": "local" + }, + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "watch", + "presentation": { + "group": "2_ExtensionTestsCurrentFile", + "order": 2 + } + }, + { + "name": "Integration Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/dist/test/integ/index.js" + ], + "env": { + "DEVELOPMENT_PATH": "${workspaceFolder}", + "AWS_TOOLKIT_AUTOMATION": "local" + }, + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "extensionInit", + "presentation": { + "group": "6_IntegrationTests", + "order": 1 + } + }, + { + "name": "Integration Tests (current file)", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/dist/test/integ/index.js" + ], + "env": { + "TEST_FILE": "${relativeFile}", + "DEVELOPMENT_PATH": "${workspaceFolder}", + "AWS_TOOLKIT_AUTOMATION": "local" + }, + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "extensionInit", + "presentation": { + "group": "5_IntegrationTestsCurrentFile", + "order": 1 + } + }, + { + "name": "E2E Test (current file)", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/../core/dist/src/testFixtures/workspaceFolder", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/dist/test/e2e/index.js" + ], + "env": { + "TEST_FILE": "${relativeFile}", + "DEVELOPMENT_PATH": "${workspaceFolder}", + "AWS_TOOLKIT_AUTOMATION": "local" + }, + "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../core/dist/**/*.js"], + "preLaunchTask": "watch", + "presentation": { + "group": "4_E2ETestCurrentFile", + "order": 2 + } + }, { "name": "Test Lint", "type": "node", diff --git a/packages/toolkit/.vscode/tasks.json b/packages/toolkit/.vscode/tasks.json index c83a34570e1..abb5e707775 100644 --- a/packages/toolkit/.vscode/tasks.json +++ b/packages/toolkit/.vscode/tasks.json @@ -7,7 +7,7 @@ "label": "extensionInit", "type": "shell", "command": "echo 'extensionInit'", - "dependsOn": ["copyPackageJson", "watch"], + "dependsOn": ["watch"], "presentation": { "close": true } @@ -55,33 +55,6 @@ "cwd": "${workspaceFolder}/../../packages/core" } }, - { - "label": "copyPackageJson", - "type": "shell", - "command": "npm run copyPackageJson -- --development", - "isBackground": false, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "close": true - } - }, - { - "label": "restorePackageJson", - "type": "npm", - "script": "restorePackageJson", - "problemMatcher": [], - "isBackground": false, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "close": true - } - }, { "label": "extensionTerminate", "command": "echo run terminate", @@ -89,7 +62,7 @@ "presentation": { "close": true }, - "dependsOn": ["restorePackageJson"] + "dependsOn": [] }, // ---------- Start: Web Mode Tasks ---------- { @@ -146,7 +119,6 @@ // Since `webpack --watch` never terminates (but finishes packaging at some point), // VS Code uses this to parse the CLI output to pattern match something that indicates it is done "problemMatcher": "$ts-webpack-watch", - "dependsOn": ["copyPackageJson"], "options": { "cwd": "${workspaceFolder}/../../packages/core" } @@ -161,7 +133,7 @@ "label": "webRunTerminate", "command": "echo ${input:webRunTerminate}", "type": "shell", - "dependsOn": ["restorePackageJson"] + "dependsOn": [] }, // ---------- End: Web Mode Tasks ---------- { @@ -177,7 +149,7 @@ { "type": "npm", "script": "compile", - "dependsOn": ["Kill Tasks", "copyPackageJson"], + "dependsOn": ["Kill Tasks"], "problemMatcher": "$tsc" }, { diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index f6518cecefa..948b3c75151 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -51,7 +51,10 @@ ], "main": "./dist/src/extensionNode", "browser": "./dist/src/extensionWeb", - "engines": "This field will be autopopulated from the core module during debugging and packaging.", + "engines": { + "npm": "^10.1.0", + "vscode": "^1.68.0" + }, "scripts": { "vscode:prepublish": "npm run clean && npm run buildScripts && webpack --mode production", "buildScripts": "npm run generateNonCodeFiles && npm run copyFiles && npm run generateIcons && npm run generateSettings && npm run generateConfigurationAttributes && tsc -p ./ --noEmit", @@ -60,16 +63,20 @@ "copyFiles": "ts-node ./scripts/build/copyFiles.ts", "clean": "ts-node ../../scripts/clean.ts dist/ LICENSE NOTICE quickStart*", "compile": "npm run clean && npm run buildScripts && webpack", + "compileDev": "npm run compile -- --mode development", + "compileOnly": "tsc -p ./", "webWatch": "npm run clean && npm run buildScripts && webpack --mode development --watch", "webCompile": "npm run clean && npm run buildScripts && webpack --config-name web", "webRun": "npx @vscode/test-web --open-devtools --browserOption=--disable-web-security --waitForDebugger=9222 --extensionDevelopmentPath=. .", - "package": "npm run copyPackageJson && ts-node ../../scripts/package.ts", + "testCompile": "npm run clean && npm run buildScripts && npm run compileOnly", + "test": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts unit dist/test/unit/index.js ../core/dist/src/testFixtures/workspaceFolder", + "testE2E": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts e2e dist/test/e2e/index.js ../core/dist/src/testFixtures/workspaceFolder", + "testInteg": "npm run testCompile && c8 --allowExternal ts-node ../core/scripts/test/launchTest.ts integration dist/test/integ/index.js ../core/dist/src/testFixtures/workspaceFolder", + "package": "ts-node ../../scripts/package.ts", "lint": "true", "createRelease": "ts-node ../../scripts/createRelease.ts", "newChange": "ts-node ../../scripts/newChange.ts", "watch": "npm run clean && npm run buildScripts && tsc -watch -p ./", - "copyPackageJson": "ts-node ./scripts/build/handlePackageJson", - "restorePackageJson": "ts-node ./scripts/build/handlePackageJson --restore", "generateIcons": "ts-node ../../scripts/generateIcons.ts", "generateSettings": "ts-node ../../scripts/generateSettings.ts" }, @@ -673,119 +680,3073 @@ ] } ], - "icons": { - "aws-amazonq-q-gradient": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1aa" - } - }, - "aws-amazonq-q-squid-ink": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ab" - } - }, - "aws-amazonq-q-white": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ac" - } - }, - "aws-amazonq-transform-arrow-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ad" - } - }, - "aws-amazonq-transform-arrow-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1ae" - } - }, - "aws-amazonq-transform-default-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1af" - } - }, - "aws-amazonq-transform-default-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b0" - } - }, - "aws-amazonq-transform-dependencies-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b1" + "viewsContainers": { + "activitybar": [ + { + "id": "aws-explorer", + "title": "%AWS.title%", + "icon": "resources/aws-logo.svg", + "cloud9": { + "cn": { + "title": "%AWS.title.cn%", + "icon": "resources/aws-cn-logo.svg" + } + } } - }, - "aws-amazonq-transform-dependencies-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b2" + ] + }, + "views": { + "aws-explorer": [ + { + "id": "aws.amazonq.codewhisperer", + "name": "%AWS.amazonq.codewhisperer.title%", + "when": "!isCloud9 && !aws.isSageMaker && !aws.toolkit.amazonq.dismissed && !aws.explorer.showAuthView" + }, + { + "id": "aws.explorer", + "name": "%AWS.lambda.explorerTitle%", + "when": "(isCloud9 || !aws.isWebExtHost) && !aws.explorer.showAuthView" + }, + { + "id": "aws.cdk", + "name": "%AWS.cdk.explorerTitle%", + "when": "!aws.explorer.showAuthView" + }, + { + "id": "aws.codecatalyst", + "name": "%AWS.codecatalyst.explorerTitle%", + "when": "(!isCloud9 && !aws.isSageMaker || isCloud9CodeCatalyst) && !aws.explorer.showAuthView" + }, + { + "type": "webview", + "id": "aws.toolkit.AmazonCommonAuth", + "name": "%AWS.amazonq.login%", + "when": "!isCloud9 && !aws.isSageMaker && aws.explorer.showAuthView" } + ] + }, + "submenus": [ + { + "id": "aws.toolkit.auth", + "label": "%AWS.submenu.auth.title%", + "icon": "$(ellipsis)", + "when": "isCloud9 || !aws.isWebExtHost" }, - "aws-amazonq-transform-file-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b3" - } + { + "id": "aws.codecatalyst.submenu", + "label": "%AWS.codecatalyst.submenu.title%", + "icon": "$(ellipsis)", + "when": "isCloud9 || !aws.isWebExtHost" }, - "aws-amazonq-transform-file-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b4" - } + { + "label": "%AWS.generic.feedback%", + "id": "aws.toolkit.submenu.feedback" }, - "aws-amazonq-transform-logo": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b5" + { + "label": "%AWS.generic.help%", + "id": "aws.toolkit.submenu.help" + } + ], + "menus": { + "commandPalette": [ + { + "command": "aws.apig.copyUrl", + "when": "false" + }, + { + "command": "aws.apig.invokeRemoteRestApi", + "when": "false" + }, + { + "command": "aws.deleteCloudFormation", + "when": "false" + }, + { + "command": "aws.downloadStateMachineDefinition", + "when": "false" + }, + { + "command": "aws.ecr.createRepository", + "when": "false" + }, + { + "command": "aws.executeStateMachine", + "when": "false" + }, + { + "command": "aws.copyArn", + "when": "false" + }, + { + "command": "aws.copyName", + "when": "false" + }, + { + "command": "aws.listCommands", + "when": "false" + }, + { + "command": "aws.codecatalyst.listCommands", + "when": "false" + }, + { + "command": "aws.codecatalyst.manageConnections", + "when": "false" + }, + { + "command": "aws.codecatalyst.openDevEnv", + "when": "!isCloud9" + }, + { + "command": "aws.codecatalyst.createDevEnv", + "when": "!isCloud9" + }, + { + "command": "aws.downloadSchemaItemCode", + "when": "false" + }, + { + "command": "aws.deleteLambda", + "when": "false" + }, + { + "command": "aws.downloadLambda", + "when": "false" + }, + { + "command": "aws.invokeLambda", + "when": "false" + }, + { + "command": "aws.copyLambdaUrl", + "when": "false" + }, + { + "command": "aws.viewSchemaItem", + "when": "false" + }, + { + "command": "aws.searchSchema", + "when": "false" + }, + { + "command": "aws.searchSchemaPerRegistry", + "when": "false" + }, + { + "command": "aws.refreshAwsExplorer", + "when": "false" + }, + { + "command": "aws.cdk.refresh", + "when": "false" + }, + { + "command": "aws.cdk.viewDocs", + "when": "false" + }, + { + "command": "aws.ssmDocument.openLocalDocument", + "when": "false" + }, + { + "command": "aws.ssmDocument.openLocalDocumentJson", + "when": "false" + }, + { + "command": "aws.ssmDocument.openLocalDocumentYaml", + "when": "false" + }, + { + "command": "aws.ssmDocument.deleteDocument", + "when": "false" + }, + { + "command": "aws.ssmDocument.updateDocumentVersion", + "when": "false" + }, + { + "command": "aws.copyLogResource", + "when": "resourceScheme == aws-cwl" + }, + { + "command": "aws.saveCurrentLogDataContent", + "when": "resourceScheme == aws-cwl" + }, + { + "command": "aws.s3.editFile", + "when": "resourceScheme == s3-readonly" + }, + { + "command": "aws.cwl.viewLogStream", + "when": "false" + }, + { + "command": "aws.cwl.changeFilterPattern", + "when": "false" + }, + { + "command": "aws.cwl.changeTimeFilter", + "when": "false" + }, + { + "command": "aws.ecr.deleteRepository", + "when": "false" + }, + { + "command": "aws.ecr.copyTagUri", + "when": "false" + }, + { + "command": "aws.ecr.copyRepositoryUri", + "when": "false" + }, + { + "command": "aws.ecr.deleteTag", + "when": "false" + }, + { + "command": "aws.iot.createThing", + "when": "false" + }, + { + "command": "aws.iot.deleteThing", + "when": "false" + }, + { + "command": "aws.iot.createCert", + "when": "false" + }, + { + "command": "aws.iot.deleteCert", + "when": "false" + }, + { + "command": "aws.iot.attachCert", + "when": "false" + }, + { + "command": "aws.iot.attachPolicy", + "when": "false" + }, + { + "command": "aws.iot.activateCert", + "when": "false" + }, + { + "command": "aws.iot.deactivateCert", + "when": "false" + }, + { + "command": "aws.iot.revokeCert", + "when": "false" + }, + { + "command": "aws.iot.createPolicy", + "when": "false" + }, + { + "command": "aws.iot.deletePolicy", + "when": "false" + }, + { + "command": "aws.iot.createPolicyVersion", + "when": "false" + }, + { + "command": "aws.iot.deletePolicyVersion", + "when": "false" + }, + { + "command": "aws.iot.detachCert", + "when": "false" + }, + { + "command": "aws.iot.detachPolicy", + "when": "false" + }, + { + "command": "aws.iot.viewPolicyVersion", + "when": "false" + }, + { + "command": "aws.iot.setDefaultPolicy", + "when": "false" + }, + { + "command": "aws.iot.copyEndpoint", + "when": "false" + }, + { + "command": "aws.deploySamApplication", + "when": "config.aws.samcli.legacyDeploy" + }, + { + "command": "aws.redshift.editConnection", + "when": "false" + }, + { + "command": "aws.redshift.deleteConnection", + "when": "false" + }, + { + "command": "aws.samcli.sync", + "when": "!config.aws.samcli.legacyDeploy" + }, + { + "command": "aws.s3.copyPath", + "when": "false" + }, + { + "command": "aws.s3.createBucket", + "when": "false" + }, + { + "command": "aws.s3.createFolder", + "when": "false" + }, + { + "command": "aws.s3.deleteBucket", + "when": "false" + }, + { + "command": "aws.s3.deleteFile", + "when": "false" + }, + { + "command": "aws.s3.downloadFileAs", + "when": "false" + }, + { + "command": "aws.s3.openFile", + "when": "false" + }, + { + "command": "aws.s3.editFile", + "when": "false" + }, + { + "command": "aws.s3.uploadFileToParent", + "when": "false" + }, + { + "command": "aws.apprunner.startDeployment", + "when": "false" + }, + { + "command": "aws.apprunner.createService", + "when": "false" + }, + { + "command": "aws.apprunner.pauseService", + "when": "false" + }, + { + "command": "aws.apprunner.resumeService", + "when": "false" + }, + { + "command": "aws.apprunner.copyServiceUrl", + "when": "false" + }, + { + "command": "aws.apprunner.open", + "when": "false" + }, + { + "command": "aws.apprunner.deleteService", + "when": "false" + }, + { + "command": "aws.apprunner.createServiceFromEcr", + "when": "false" + }, + { + "command": "aws.resources.copyIdentifier", + "when": "false" + }, + { + "command": "aws.resources.openResourcePreview", + "when": "false" + }, + { + "command": "aws.resources.createResource", + "when": "false" + }, + { + "command": "aws.resources.deleteResource", + "when": "false" + }, + { + "command": "aws.resources.updateResource", + "when": "false" + }, + { + "command": "aws.resources.updateResourceInline", + "when": "false" + }, + { + "command": "aws.resources.saveResource", + "when": "false" + }, + { + "command": "aws.resources.closeResource", + "when": "false" + }, + { + "command": "aws.resources.viewDocs", + "when": "false" + }, + { + "command": "aws.ecs.runCommandInContainer", + "when": "false" + }, + { + "command": "aws.ecs.openTaskInTerminal", + "when": "false" + }, + { + "command": "aws.ecs.enableEcsExec", + "when": "false" + }, + { + "command": "aws.ecs.disableEcsExec", + "when": "false" + }, + { + "command": "aws.ecs.viewDocumentation", + "when": "false" + }, + { + "command": "aws.renderStateMachineGraph", + "when": "false" + }, + { + "command": "aws.toolkit.auth.addConnection", + "when": "false" + }, + { + "command": "aws.toolkit.auth.switchConnections", + "when": "false" + }, + { + "command": "aws.toolkit.auth.help", + "when": "false" + }, + { + "command": "aws.toolkit.auth.manageConnections" + }, + { + "command": "aws.ec2.openRemoteConnection", + "when": "aws.isDevMode" + }, + { + "command": "aws.ec2.openTerminal", + "when": "aws.isDevMode" + }, + { + "command": "aws.ec2.linkToLaunch", + "when": "aws.isDevMode" + }, + { + "command": "aws.ec2.startInstance", + "when": "aws.isDevMode" + }, + { + "command": "aws.ec2.stopInstance", + "when": "aws.isDevMode" + }, + { + "command": "aws.ec2.rebootInstance", + "when": "aws.isDevMode" + }, + { + "command": "aws.dev.openMenu", + "when": "aws.isDevMode || isCloud9" + }, + { + "command": "aws.openInApplicationComposer", + "when": "false" + }, + { + "command": "aws.toolkit.amazonq.learnMore", + "when": "false" + }, + { + "command": "aws.toolkit.amazonq.extensionpage", + "when": "false" + }, + { + "command": "aws.newThreatComposerFile", + "when": "false" } - }, - "aws-amazonq-transform-step-into-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b6" + ], + "editor/title": [ + { + "command": "aws.previewStateMachine", + "when": "editorLangId == asl || editorLangId == asl-yaml", + "group": "navigation" + }, + { + "command": "aws.saveCurrentLogDataContent", + "when": "resourceScheme == aws-cwl", + "group": "navigation" + }, + { + "command": "aws.cwl.changeFilterPattern", + "when": "resourceScheme == aws-cwl", + "group": "navigation" + }, + { + "command": "aws.cwl.changeTimeFilter", + "when": "resourceScheme == aws-cwl", + "group": "navigation" + }, + { + "command": "aws.s3.editFile", + "when": "resourceScheme == s3-readonly", + "group": "navigation" + }, + { + "command": "aws.ssmDocument.publishDocument", + "when": "editorLangId =~ /^(ssm-yaml|ssm-json)$/", + "group": "navigation" + }, + { + "command": "aws.resources.updateResourceInline", + "when": "resourceScheme == awsResource && !isCloud9 && config.aws.experiments.jsonResourceModification", + "group": "navigation" + }, + { + "command": "aws.resources.closeResource", + "when": "resourcePath =~ /^.+(awsResource.json)$/", + "group": "navigation" + }, + { + "command": "aws.resources.saveResource", + "when": "resourcePath =~ /^.+(awsResource.json)$/", + "group": "navigation" + }, + { + "command": "aws.openInApplicationComposer", + "when": "(editorLangId == json && !(resourceFilename =~ /^.*\\.tc\\.json$/)) || editorLangId == yaml || resourceFilename =~ /^.*\\.(template)$/", + "group": "navigation" } - }, - "aws-amazonq-transform-step-into-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b7" + ], + "editor/title/context": [ + { + "command": "aws.copyLogResource", + "when": "resourceScheme == aws-cwl", + "group": "1_cutcopypaste@1" } - }, - "aws-amazonq-transform-variables-dark": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b8" + ], + "view/title": [ + { + "command": "aws.toolkit.submitFeedback", + "when": "view == aws.explorer && !aws.isWebExtHost", + "group": "navigation@6" + }, + { + "command": "aws.refreshAwsExplorer", + "when": "view == aws.explorer", + "group": "navigation@5" + }, + { + "command": "aws.cdk.refresh", + "when": "view == aws.cdk", + "group": "navigation@1" + }, + { + "command": "aws.toolkit.login", + "when": "view == aws.explorer", + "group": "1_account@1" + }, + { + "command": "aws.showRegion", + "when": "view == aws.explorer", + "group": "1_account@2" + }, + { + "command": "aws.listCommands", + "when": "view == aws.explorer && !isCloud9", + "group": "1_account@3" + }, + { + "command": "aws.lambda.createNewSamApp", + "when": "view == aws.explorer", + "group": "3_lambda@1" + }, + { + "command": "aws.launchConfigForm", + "when": "view == aws.explorer", + "group": "3_lambda@2" + }, + { + "command": "aws.deploySamApplication", + "when": "config.aws.samcli.legacyDeploy && view == aws.explorer", + "group": "3_lambda@3" + }, + { + "command": "aws.samcli.sync", + "when": "!config.aws.samcli.legacyDeploy && view == aws.explorer", + "group": "3_lambda@3" + }, + { + "submenu": "aws.toolkit.submenu.feedback", + "when": "view =~ /^aws\\./ && view != aws.AmazonQChatView && view != aws.amazonq.AmazonCommonAuth", + "group": "y_toolkitMeta@1" + }, + { + "submenu": "aws.toolkit.submenu.help", + "when": "view =~ /^aws\\./ && view != aws.AmazonQChatView && view != aws.amazonq.AmazonCommonAuth", + "group": "y_toolkitMeta@2" + }, + { + "command": "aws.codecatalyst.cloneRepo", + "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", + "group": "1_codeCatalyst@1" + }, + { + "command": "aws.codecatalyst.createDevEnv", + "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", + "group": "1_codeCatalyst@1" + }, + { + "command": "aws.codecatalyst.listCommands", + "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", + "group": "1_codeCatalyst@1" + }, + { + "command": "aws.codecatalyst.openDevEnv", + "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", + "group": "1_codeCatalyst@1" + }, + { + "command": "aws.codecatalyst.manageConnections", + "when": "view == aws.codecatalyst && !isCloud9 && !aws.codecatalyst.connected", + "group": "2_codeCatalyst@1" + }, + { + "command": "aws.codecatalyst.signout", + "when": "view == aws.codecatalyst && !isCloud9 && aws.codecatalyst.connected", + "group": "2_codeCatalyst@1" } - }, - "aws-amazonq-transform-variables-light": { - "description": "AWS Contributed Icon", - "default": { - "fontPath": "./resources/fonts/aws-toolkit-icons.woff", - "fontCharacter": "\\f1b9" + ], + "explorer/context": [ + { + "command": "aws.deploySamApplication", + "when": "config.aws.samcli.legacyDeploy && isFileSystemResource && resourceFilename =~ /^template\\.(json|yml|yaml)$/", + "group": "z_aws@1" + }, + { + "command": "aws.samcli.sync", + "when": "!config.aws.samcli.legacyDeploy && isFileSystemResource && resourceFilename =~ /^(template\\.(json|yml|yaml))|(samconfig\\.toml)$/", + "group": "z_aws@1" + }, + { + "command": "aws.uploadLambda", + "when": "explorerResourceIsFolder || isFileSystemResource && resourceFilename =~ /^template\\.(json|yml|yaml)$/", + "group": "z_aws@3" + }, + { + "command": "aws.openInApplicationComposer", + "when": "isFileSystemResource && !(resourceFilename =~ /^.*\\.tc\\.json$/) && resourceFilename =~ /^.*\\.(json|yml|yaml|template)$/", + "group": "z_aws@1" } - }, + ], + "view/item/context": [ + { + "command": "aws.apig.invokeRemoteRestApi", + "when": "view == aws.explorer && viewItem =~ /^(awsApiGatewayNode)$/", + "group": "0@1" + }, + { + "command": "aws.ec2.openTerminal", + "group": "0@1", + "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" + }, + { + "command": "aws.ec2.openTerminal", + "group": "inline@1", + "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" + }, + { + "command": "aws.ec2.linkToLaunch", + "group": "0@1", + "when": "viewItem =~ /^(awsEc2ParentNode)$/" + }, + { + "command": "aws.ec2.linkToLaunch", + "group": "inline@1", + "when": "viewItem =~ /^(awsEc2ParentNode)$/" + }, + { + "command": "aws.ec2.openRemoteConnection", + "group": "0@1", + "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" + }, + { + "command": "aws.ec2.openRemoteConnection", + "group": "inline@1", + "when": "viewItem =~ /^(awsEc2(Parent|Running)Node)$/" + }, + { + "command": "aws.ec2.startInstance", + "group": "0@1", + "when": "viewItem == awsEc2StoppedNode" + }, + { + "command": "aws.ec2.startInstance", + "group": "inline@1", + "when": "viewItem == awsEc2StoppedNode" + }, + { + "command": "aws.ec2.stopInstance", + "group": "0@1", + "when": "viewItem == awsEc2RunningNode" + }, + { + "command": "aws.ec2.stopInstance", + "group": "inline@1", + "when": "viewItem == awsEc2RunningNode" + }, + { + "command": "aws.ec2.rebootInstance", + "group": "0@1", + "when": "viewItem == awsEc2RunningNode" + }, + { + "command": "aws.ec2.rebootInstance", + "group": "inline@1", + "when": "viewItem == awsEc2RunningNode" + }, + { + "command": "aws.ecr.createRepository", + "when": "view == aws.explorer && viewItem == awsEcrNode", + "group": "inline@1" + }, + { + "command": "aws.iot.createThing", + "when": "view == aws.explorer && viewItem == awsIotThingsNode", + "group": "inline@1" + }, + { + "command": "aws.iot.createCert", + "when": "view == aws.explorer && viewItem == awsIotCertsNode", + "group": "inline@1" + }, + { + "command": "aws.iot.createPolicy", + "when": "view == aws.explorer && viewItem == awsIotPoliciesNode", + "group": "inline@1" + }, + { + "command": "aws.iot.attachCert", + "when": "view == aws.explorer && viewItem == awsIotThingNode", + "group": "inline@1" + }, + { + "command": "aws.iot.attachPolicy", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies)/", + "group": "inline@1" + }, + { + "command": "aws.redshift.editConnection", + "when": "view == aws.explorer && viewItem == awsRedshiftWarehouseNode", + "group": "0@1" + }, + { + "command": "aws.redshift.deleteConnection", + "when": "view == aws.explorer && viewItem == awsRedshiftWarehouseNode", + "group": "0@2" + }, + { + "command": "aws.s3.openFile", + "when": "view == aws.explorer && viewItem == awsS3FileNode && !isCloud9", + "group": "0@1" + }, + { + "command": "aws.s3.editFile", + "when": "view == aws.explorer && viewItem == awsS3FileNode && !isCloud9", + "group": "inline@1" + }, + { + "command": "aws.s3.downloadFileAs", + "when": "view == aws.explorer && viewItem == awsS3FileNode", + "group": "inline@2" + }, + { + "command": "aws.s3.createBucket", + "when": "view == aws.explorer && viewItem == awsS3Node", + "group": "inline@1" + }, + { + "command": "aws.s3.createFolder", + "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", + "group": "inline@1" + }, + { + "command": "aws.ssmDocument.openLocalDocument", + "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/", + "group": "inline@1" + }, + { + "command": "aws.s3.uploadFile", + "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", + "group": "inline@2" + }, + { + "command": "aws.showRegion", + "when": "view == aws.explorer && viewItem == awsRegionNode", + "group": "0@1" + }, + { + "command": "aws.lambda.createNewSamApp", + "when": "view == aws.explorer && viewItem == awsLambdaNode || viewItem == awsRegionNode", + "group": "1@1" + }, + { + "command": "aws.launchConfigForm", + "when": "view == aws.explorer && viewItem == awsLambdaNode || viewItem == awsRegionNode || viewItem == awsCloudFormationRootNode", + "group": "1@1" + }, + { + "command": "aws.deploySamApplication", + "when": "config.aws.samcli.legacyDeploy && view == aws.explorer && viewItem =~ /^(awsLambdaNode|awsRegionNode|awsCloudFormationRootNode)$/", + "group": "1@2" + }, + { + "command": "aws.samcli.sync", + "when": "!config.aws.samcli.legacyDeploy && view == aws.explorer && viewItem =~ /^(awsLambdaNode|awsRegionNode|awsCloudFormationRootNode)$/", + "group": "1@2" + }, + { + "command": "aws.ec2.copyInstanceId", + "when": "view == aws.explorer && viewItem =~ /^(awsEc2(Running|Stopped|Pending)Node)$/", + "group": "2@0" + }, + { + "command": "aws.ecr.copyTagUri", + "when": "view == aws.explorer && viewItem == awsEcrTagNode", + "group": "2@1" + }, + { + "command": "aws.ecr.deleteTag", + "when": "view == aws.explorer && viewItem == awsEcrTagNode", + "group": "3@1" + }, + { + "command": "aws.ecr.copyRepositoryUri", + "when": "view == aws.explorer && viewItem == awsEcrRepositoryNode", + "group": "2@1" + }, + { + "command": "aws.ecr.createRepository", + "when": "view == aws.explorer && viewItem == awsEcrNode", + "group": "0@1" + }, + { + "command": "aws.ecr.deleteRepository", + "when": "view == aws.explorer && viewItem == awsEcrRepositoryNode", + "group": "3@1" + }, + { + "command": "aws.invokeLambda", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode)$/", + "group": "0@1" + }, + { + "command": "aws.downloadLambda", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", + "group": "0@2" + }, + { + "command": "aws.uploadLambda", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", + "group": "1@1" + }, + { + "command": "aws.deleteLambda", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", + "group": "4@1" + }, + { + "command": "aws.copyLambdaUrl", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable)$/", + "group": "2@0" + }, + { + "command": "aws.deleteCloudFormation", + "when": "view == aws.explorer && viewItem == awsCloudFormationNode", + "group": "3@5" + }, + { + "command": "aws.searchSchema", + "when": "view == aws.explorer && viewItem == awsSchemasNode", + "group": "0@1" + }, + { + "command": "aws.searchSchemaPerRegistry", + "when": "view == aws.explorer && viewItem == awsRegistryItemNode", + "group": "0@1" + }, + { + "command": "aws.viewSchemaItem", + "when": "view == aws.explorer && viewItem == awsSchemaItemNode", + "group": "0@1" + }, + { + "command": "aws.stepfunctions.createStateMachineFromTemplate", + "when": "view == aws.explorer && viewItem == awsStepFunctionsNode", + "group": "0@1" + }, + { + "command": "aws.downloadStateMachineDefinition", + "when": "view == aws.explorer && viewItem == awsStateMachineNode", + "group": "0@1" + }, + { + "command": "aws.renderStateMachineGraph", + "when": "view == aws.explorer && viewItem == awsStateMachineNode", + "group": "0@2" + }, + { + "command": "aws.cdk.renderStateMachineGraph", + "when": "viewItem == awsCdkStateMachineNode", + "group": "inline@1" + }, + { + "command": "aws.cdk.renderStateMachineGraph", + "when": "viewItem == awsCdkStateMachineNode", + "group": "0@1" + }, + { + "command": "aws.executeStateMachine", + "when": "view == aws.explorer && viewItem == awsStateMachineNode", + "group": "0@3" + }, + { + "command": "aws.iot.createThing", + "when": "view == aws.explorer && viewItem == awsIotThingsNode", + "group": "0@1" + }, + { + "command": "aws.iot.createCert", + "when": "view == aws.explorer && viewItem == awsIotCertsNode", + "group": "0@1" + }, + { + "command": "aws.iot.createPolicy", + "when": "view == aws.explorer && viewItem == awsIotPoliciesNode", + "group": "0@1" + }, + { + "command": "aws.iot.createPolicyVersion", + "when": "view == aws.explorer && viewItem == awsIotPolicyNode.WithVersions", + "group": "0@1" + }, + { + "command": "aws.iot.viewPolicyVersion", + "when": "view == aws.explorer && viewItem =~ /^awsIotPolicyVersionNode./", + "group": "0@1" + }, + { + "command": "aws.iot.attachCert", + "when": "view == aws.explorer && viewItem == awsIotThingNode", + "group": "0@1" + }, + { + "command": "aws.iot.attachPolicy", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies)/", + "group": "0@1" + }, + { + "command": "aws.s3.createBucket", + "when": "view == aws.explorer && viewItem == awsS3Node", + "group": "0@1" + }, + { + "command": "aws.s3.downloadFileAs", + "when": "view == aws.explorer && viewItem == awsS3FileNode", + "group": "0@1" + }, + { + "command": "aws.s3.uploadFile", + "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", + "group": "0@1" + }, + { + "command": "aws.s3.uploadFileToParent", + "when": "view == aws.explorer && viewItem == awsS3FileNode", + "group": "1@1" + }, + { + "command": "aws.s3.createFolder", + "when": "view == aws.explorer && viewItem =~ /^(awsS3BucketNode|awsS3FolderNode)$/", + "group": "1@1" + }, + { + "command": "aws.iot.deactivateCert", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).ACTIVE$/", + "group": "1@1" + }, + { + "command": "aws.iot.activateCert", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).INACTIVE$/", + "group": "1@1" + }, + { + "command": "aws.iot.revokeCert", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.(Things|Policies).(ACTIVE|INACTIVE)$/", + "group": "1@2" + }, + { + "command": "aws.iot.setDefaultPolicy", + "when": "view == aws.explorer && viewItem == awsIotPolicyVersionNode.NONDEFAULT", + "group": "1@1" + }, + { + "command": "aws.iot.copyEndpoint", + "when": "view == aws.explorer && viewItem == awsIotNode", + "group": "2@1" + }, + { + "command": "aws.copyName", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode|awsStateMachineNode|awsCloudFormationNode|awsS3BucketNode|awsS3FolderNode|awsS3FileNode|awsApiGatewayNode|awsIotThingNode)$|^(awsAppRunnerServiceNode|awsIotCertificateNode|awsIotPolicyNode|awsIotPolicyVersionNode|(awsEc2(Running|Pending|Stopped)Node))/", + "group": "2@1" + }, + { + "command": "aws.copyArn", + "when": "view == aws.explorer && viewItem =~ /^(awsRegionFunctionNode|awsRegionFunctionNodeDownloadable|awsCloudFormationFunctionNode|awsStateMachineNode|awsCloudFormationNode|awsCloudWatchLogNode|awsS3BucketNode|awsS3FolderNode|awsS3FileNode|awsApiGatewayNode|awsEcrRepositoryNode|awsIotThingNode)$|^(awsAppRunnerServiceNode|awsEcsServiceNode|awsIotCertificateNode|awsIotPolicyNode|awsIotPolicyVersionNode|awsMdeInstanceNode|(awsEc2(Running|Pending|Stopped)Node))/", + "group": "2@2" + }, + { + "command": "aws.cwl.searchLogGroup", + "group": "0@1", + "when": "view == aws.explorer && viewItem =~ /^awsCloudWatchLogNode|awsCloudWatchLogParentNode$/" + }, + { + "command": "aws.cwl.searchLogGroup", + "group": "inline@1", + "when": "view == aws.explorer && viewItem =~ /^awsCloudWatchLogNode|awsCloudWatchLogParentNode$/" + }, + { + "command": "aws.apig.copyUrl", + "when": "view == aws.explorer && viewItem =~ /^(awsApiGatewayNode)$/", + "group": "2@0" + }, + { + "command": "aws.s3.copyPath", + "when": "view == aws.explorer && viewItem =~ /^(awsS3FolderNode|awsS3FileNode)$/", + "group": "2@3" + }, + { + "command": "aws.s3.presignedURL", + "when": "view == aws.explorer && viewItem =~ /^(awsS3FileNode)$/", + "group": "2@4" + }, + { + "command": "aws.iot.detachCert", + "when": "view == aws.explorer && viewItem =~ /^(awsIotCertificateNode.Things)/", + "group": "3@1" + }, + { + "command": "aws.iot.detachPolicy", + "when": "view == aws.explorer && viewItem == awsIotPolicyNode.Certificates", + "group": "3@1" + }, + { + "command": "aws.iot.deleteThing", + "when": "view == aws.explorer && viewItem == awsIotThingNode", + "group": "3@1" + }, + { + "command": "aws.iot.deleteCert", + "when": "view == aws.explorer && viewItem =~ /^awsIotCertificateNode.Policies/", + "group": "3@1" + }, + { + "command": "aws.iot.deletePolicy", + "when": "view == aws.explorer && viewItem == awsIotPolicyNode.WithVersions", + "group": "3@1" + }, + { + "command": "aws.iot.deletePolicyVersion", + "when": "view == aws.explorer && viewItem == awsIotPolicyVersionNode.NONDEFAULT", + "group": "3@1" + }, + { + "command": "aws.s3.deleteBucket", + "when": "view == aws.explorer && viewItem == awsS3BucketNode", + "group": "3@1" + }, + { + "command": "aws.s3.deleteFile", + "when": "view == aws.explorer && viewItem == awsS3FileNode", + "group": "3@1" + }, + { + "command": "aws.downloadSchemaItemCode", + "when": "view == aws.explorer && viewItem == awsSchemaItemNode", + "group": "1@1" + }, + { + "command": "aws.cwl.viewLogStream", + "group": "0@1", + "when": "view == aws.explorer && viewItem == awsCloudWatchLogNode" + }, + { + "command": "aws.ssmDocument.openLocalDocumentYaml", + "group": "0@1", + "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/" + }, + { + "command": "aws.ssmDocument.openLocalDocumentJson", + "group": "0@2", + "when": "view == aws.explorer && viewItem =~ /^(awsDocumentItemNode|awsDocumentItemNodeWriteable)$/" + }, + { + "command": "aws.ssmDocument.updateDocumentVersion", + "group": "2@1", + "when": "view == aws.explorer && viewItem == awsDocumentItemNodeWriteable" + }, + { + "command": "aws.ssmDocument.deleteDocument", + "group": "3@2", + "when": "view == aws.explorer && viewItem == awsDocumentItemNodeWriteable" + }, + { + "command": "aws.ecs.runCommandInContainer", + "group": "0@1", + "when": "view == aws.explorer && viewItem =~ /^(awsEcsContainerNodeExec)(.*)$/" + }, + { + "command": "aws.ecs.openTaskInTerminal", + "group": "0@2", + "when": "view == aws.explorer && viewItem =~ /^(awsEcsContainerNodeExec)(.*)$/ && !isCloud9" + }, + { + "command": "aws.ecs.enableEcsExec", + "group": "0@2", + "when": "view == aws.explorer && viewItem == awsEcsServiceNode.DISABLED" + }, + { + "command": "aws.ecs.disableEcsExec", + "group": "0@2", + "when": "view == aws.explorer && viewItem == awsEcsServiceNode.ENABLED" + }, + { + "command": "aws.ecs.viewDocumentation", + "group": "1@3", + "when": "view == aws.explorer && viewItem =~ /^(awsEcsClusterNode|awsEcsContainerNode)$|^awsEcsServiceNode/" + }, + { + "command": "aws.resources.configure", + "when": "view == aws.explorer && viewItem == resourcesRootNode", + "group": "1@1" + }, + { + "command": "aws.resources.configure", + "when": "view == aws.explorer && viewItem == resourcesRootNode", + "group": "inline@1" + }, + { + "command": "aws.resources.openResourcePreview", + "when": "view == aws.explorer && viewItem =~ /^(.*)(ResourceNode)$/", + "group": "1@1" + }, + { + "command": "aws.resources.copyIdentifier", + "when": "view == aws.explorer && viewItem =~ /^(.*)(ResourceNode)$/", + "group": "1@1" + }, + { + "command": "aws.resources.viewDocs", + "when": "view == aws.explorer && viewItem =~ /^(.*)(Documented)(.*)(ResourceTypeNode)$/", + "group": "1@1" + }, + { + "command": "aws.resources.createResource", + "when": "view == aws.explorer && viewItem =~ /^(.*)(Creatable)(.*)(ResourceTypeNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", + "group": "2@1" + }, + { + "command": "aws.resources.createResource", + "when": "view == aws.explorer && viewItem =~ /^(.*)(Creatable)(.*)(ResourceTypeNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", + "group": "inline@1" + }, + { + "command": "aws.resources.updateResource", + "when": "view == aws.explorer && viewItem =~ /^(.*)(Updatable)(.*)(ResourceNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", + "group": "2@1" + }, + { + "command": "aws.resources.deleteResource", + "when": "view == aws.explorer && viewItem =~ /^(.*)(Deletable)(.*)(ResourceNode)$/ && !isCloud9 && config.aws.experiments.jsonResourceModification", + "group": "2@2" + }, + { + "command": "aws.apprunner.createServiceFromEcr", + "group": "0@2", + "when": "view == aws.explorer && viewItem =~ /awsEcrTagNode|awsEcrRepositoryNode/" + }, + { + "command": "aws.apprunner.startDeployment", + "group": "0@1", + "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" + }, + { + "command": "aws.apprunner.createService", + "group": "0@2", + "when": "view == aws.explorer && viewItem == awsAppRunnerNode" + }, + { + "command": "aws.apprunner.pauseService", + "group": "0@3", + "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" + }, + { + "command": "aws.apprunner.resumeService", + "group": "0@3", + "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.PAUSED" + }, + { + "command": "aws.apprunner.copyServiceUrl", + "group": "1@1", + "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" + }, + { + "command": "aws.apprunner.open", + "group": "1@2", + "when": "view == aws.explorer && viewItem == awsAppRunnerServiceNode.RUNNING" + }, + { + "command": "aws.apprunner.deleteService", + "group": "3@1", + "when": "view == aws.explorer && viewItem =~ /awsAppRunnerServiceNode.[RUNNING|PAUSED|CREATE_FAILED]/" + }, + { + "command": "aws.cloudFormation.newTemplate", + "group": "0@1", + "when": "view == aws.explorer && viewItem == awsCloudFormationRootNode" + }, + { + "command": "aws.sam.newTemplate", + "group": "0@2", + "when": "view == aws.explorer && viewItem == awsCloudFormationRootNode" + }, + { + "command": "aws.cdk.viewDocs", + "when": "viewItem == awsCdkRootNode", + "group": "0@2" + }, + { + "command": "aws.toolkit.auth.addConnection", + "when": "viewItem == awsAuthNode", + "group": "0@1" + }, + { + "command": "aws.toolkit.auth.switchConnections", + "when": "viewItem == awsAuthNode", + "group": "0@2" + }, + { + "command": "aws.toolkit.auth.signout", + "when": "viewItem == awsAuthNode && !isCloud9", + "group": "0@3" + }, + { + "command": "aws.toolkit.auth.help", + "when": "viewItem == awsAuthNode", + "group": "inline@1" + }, + { + "submenu": "aws.toolkit.auth", + "when": "viewItem == awsAuthNode", + "group": "inline@2" + }, + { + "submenu": "aws.codecatalyst.submenu", + "when": "viewItem =~ /^awsCodeCatalystNode/", + "group": "inline@1" + }, + { + "command": "aws.codecatalyst.manageConnections", + "when": "viewItem =~ /^awsCodeCatalystNode/", + "group": "0@1" + }, + { + "command": "aws.codecatalyst.signout", + "when": "viewItem =~ /^awsCodeCatalystNode/&& !isCloud9 && aws.codecatalyst.connected", + "group": "0@2" + } + ], + "aws.toolkit.auth": [ + { + "command": "aws.toolkit.auth.manageConnections", + "group": "0@1" + }, + { + "command": "aws.toolkit.auth.switchConnections", + "group": "0@2" + }, + { + "command": "aws.toolkit.auth.signout", + "enablement": "!isCloud9", + "group": "0@3" + } + ], + "aws.toolkit.submenu.feedback": [ + { + "command": "aws.toolkit.submitFeedback", + "when": "!aws.isWebExtHost", + "group": "1_feedback@1" + }, + { + "command": "aws.toolkit.createIssueOnGitHub", + "group": "1_feedback@2" + } + ], + "aws.toolkit.submenu.help": [ + { + "command": "aws.quickStart", + "when": "isCloud9", + "group": "1_help@1" + }, + { + "command": "aws.toolkit.help", + "group": "1_help@2" + }, + { + "command": "aws.toolkit.github", + "group": "1_help@3" + }, + { + "command": "aws.toolkit.aboutExtension", + "group": "1_help@4" + }, + { + "command": "aws.toolkit.viewLogs", + "group": "1_help@5" + } + ], + "file/newFile": [ + { + "command": "aws.newThreatComposerFile" + } + ] + }, + "commands": [ + { + "command": "aws.accessanalyzer.iamPolicyChecks", + "title": "%AWS.command.accessanalyzer.iamPolicyChecks%", + "category": "%AWS.title%" + }, + { + "command": "aws.launchConfigForm", + "title": "%AWS.command.launchConfigForm.title%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apig.copyUrl", + "title": "%AWS.command.apig.copyUrl%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apig.invokeRemoteRestApi", + "title": "%AWS.command.apig.invokeRemoteRestApi%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%", + "title": "%AWS.command.apig.invokeRemoteRestApi.cn%" + } + } + }, + { + "command": "aws.lambda.createNewSamApp", + "title": "%AWS.command.createNewSamApp%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.login", + "title": "%AWS.command.login%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "title": "%AWS.command.login.cn%", + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.credentials.profile.create", + "title": "%AWS.command.credentials.profile.create%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.credentials.edit", + "title": "%AWS.command.credentials.edit%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.codecatalyst.openOrg", + "title": "%AWS.command.codecatalyst.openOrg%", + "category": "AWS", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.openProject", + "title": "%AWS.command.codecatalyst.openProject%", + "category": "AWS", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.openRepo", + "title": "%AWS.command.codecatalyst.openRepo%", + "category": "AWS", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.openDevEnv", + "title": "%AWS.command.codecatalyst.openDevEnv%", + "category": "AWS", + "enablement": "!isCloud9 && !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.listCommands", + "title": "%AWS.command.codecatalyst.listCommands%", + "category": "AWS", + "enablement": "!isCloud9 && !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.cloneRepo", + "title": "%AWS.command.codecatalyst.cloneRepo%", + "category": "AWS", + "enablement": "!isCloud9 && !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.createDevEnv", + "title": "%AWS.command.codecatalyst.createDevEnv%", + "category": "AWS", + "enablement": "!isCloud9 && !aws.isWebExtHost" + }, + { + "command": "aws.codecatalyst.signout", + "title": "%AWS.command.codecatalyst.signout%", + "category": "AWS", + "icon": "$(debug-disconnect)", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.toolkit.auth.addConnection", + "title": "%AWS.command.auth.addConnection%", + "category": "%AWS.title%" + }, + { + "command": "aws.toolkit.auth.manageConnections", + "title": "%AWS.command.auth.showConnectionsPage%", + "category": "%AWS.title%" + }, + { + "command": "aws.codecatalyst.manageConnections", + "title": "%AWS.command.auth.showConnectionsPage%", + "category": "%AWS.title%" + }, + { + "command": "aws.toolkit.auth.switchConnections", + "title": "%AWS.command.auth.switchConnections%", + "category": "%AWS.title%" + }, + { + "command": "aws.toolkit.auth.signout", + "title": "%AWS.command.auth.signout%", + "category": "%AWS.title%", + "enablement": "!isCloud9" + }, + { + "command": "aws.toolkit.auth.help", + "title": "%AWS.generic.viewDocs%", + "category": "%AWS.title%", + "icon": "$(question)" + }, + { + "command": "aws.toolkit.createIssueOnGitHub", + "title": "%AWS.command.createIssueOnGitHub%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.openTerminal", + "title": "%AWS.command.ec2.openTerminal%", + "icon": "$(terminal-view-icon)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.linkToLaunch", + "title": "%AWS.command.ec2.linkToLaunch%", + "icon": "$(add)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.openRemoteConnection", + "title": "%AWS.command.ec2.openRemoteConnection%", + "icon": "$(remote-explorer)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.startInstance", + "title": "%AWS.command.ec2.startInstance%", + "icon": "$(debug-start)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.stopInstance", + "title": "%AWS.command.ec2.stopInstance%", + "icon": "$(debug-stop)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.rebootInstance", + "title": "%AWS.command.ec2.rebootInstance%", + "icon": "$(debug-restart)", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ec2.copyInstanceId", + "title": "%AWS.command.ec2.copyInstanceId%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecr.copyTagUri", + "title": "%AWS.command.ecr.copyTagUri%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecr.deleteTag", + "title": "%AWS.command.ecr.deleteTag%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecr.copyRepositoryUri", + "title": "%AWS.command.ecr.copyRepositoryUri%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecr.createRepository", + "title": "%AWS.command.ecr.createRepository%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(add)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecr.deleteRepository", + "title": "%AWS.command.ecr.deleteRepository%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.showRegion", + "title": "%AWS.command.showRegion%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.createThing", + "title": "%AWS.command.iot.createThing%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(add)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.deleteThing", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.createCert", + "title": "%AWS.command.iot.createCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(add)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.deleteCert", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.attachCert", + "title": "%AWS.command.iot.attachCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(aws-generic-attach-file)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.attachPolicy", + "title": "%AWS.command.iot.attachPolicy%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(aws-generic-attach-file)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.activateCert", + "title": "%AWS.command.iot.activateCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.deactivateCert", + "title": "%AWS.command.iot.deactivateCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.revokeCert", + "title": "%AWS.command.iot.revokeCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.createPolicy", + "title": "%AWS.command.iot.createPolicy%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(add)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.deletePolicy", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.createPolicyVersion", + "title": "%AWS.command.iot.createPolicyVersion%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.deletePolicyVersion", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.detachCert", + "title": "%AWS.command.iot.detachCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.detachPolicy", + "title": "%AWS.command.iot.detachCert%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.viewPolicyVersion", + "title": "%AWS.command.iot.viewPolicyVersion%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.setDefaultPolicy", + "title": "%AWS.command.iot.setDefaultPolicy%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.iot.copyEndpoint", + "title": "%AWS.command.iot.copyEndpoint%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.redshift.editConnection", + "title": "Edit connection", + "category": "%AWS.title%" + }, + { + "command": "aws.redshift.deleteConnection", + "title": "Delete connection", + "category": "%AWS.title%" + }, + { + "command": "aws.s3.presignedURL", + "title": "%AWS.command.s3.presignedURL%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.s3.copyPath", + "title": "%AWS.command.s3.copyPath%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.downloadFileAs", + "title": "%AWS.command.s3.downloadFileAs%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(cloud-download)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.openFile", + "title": "%AWS.command.s3.openFile%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(open-preview)" + }, + { + "command": "aws.s3.editFile", + "title": "%AWS.command.s3.editFile%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(edit)" + }, + { + "command": "aws.s3.uploadFile", + "title": "%AWS.command.s3.uploadFile%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(cloud-upload)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.uploadFileToParent", + "title": "%AWS.command.s3.uploadFileToParent%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.createFolder", + "title": "%AWS.command.s3.createFolder%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(new-folder)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.createBucket", + "title": "%AWS.command.s3.createBucket%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(aws-s3-create-bucket)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.deleteBucket", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.s3.deleteFile", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.invokeLambda", + "title": "%AWS.command.invokeLambda%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "title": "%AWS.command.invokeLambda.cn%", + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.downloadLambda", + "title": "%AWS.command.downloadLambda%", + "category": "%AWS.title%", + "enablement": "viewItem == awsRegionFunctionNodeDownloadable", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.uploadLambda", + "title": "%AWS.command.uploadLambda%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.deleteLambda", + "title": "%AWS.generic.promptDelete%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.copyLambdaUrl", + "title": "%AWS.generic.copyUrl%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.deploySamApplication", + "title": "%AWS.command.deploySamApplication%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.submitFeedback", + "title": "%AWS.command.submitFeedback%", + "enablement": "!aws.isWebExtHost", + "category": "%AWS.title%", + "icon": "$(comment)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.refreshAwsExplorer", + "title": "%AWS.command.refreshAwsExplorer%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "icon": { + "dark": "resources/icons/vscode/dark/refresh.svg", + "light": "resources/icons/vscode/light/refresh.svg" + } + }, + { + "command": "aws.samcli.detect", + "title": "%AWS.command.samcli.detect%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.deleteCloudFormation", + "title": "%AWS.command.deleteCloudFormation%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.downloadStateMachineDefinition", + "title": "%AWS.command.downloadStateMachineDefinition%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.executeStateMachine", + "title": "%AWS.command.executeStateMachine%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.renderStateMachineGraph", + "title": "%AWS.command.renderStateMachineGraph%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.copyArn", + "title": "%AWS.command.copyArn%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.copyName", + "title": "%AWS.command.copyName%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.listCommands", + "title": "%AWS.command.listCommands%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "title": "%AWS.command.listCommands.cn%", + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.viewSchemaItem", + "title": "%AWS.command.viewSchemaItem%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.searchSchema", + "title": "%AWS.command.searchSchema%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.searchSchemaPerRegistry", + "title": "%AWS.command.searchSchemaPerRegistry%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.downloadSchemaItemCode", + "title": "%AWS.command.downloadSchemaItemCode%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.viewLogs", + "title": "%AWS.command.viewLogs%", + "category": "%AWS.title%" + }, + { + "command": "aws.toolkit.help", + "title": "%AWS.command.help%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toolkit.github", + "title": "%AWS.command.github%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.quickStart", + "title": "%AWS.command.quickStart%", + "category": "%AWS.title%", + "enablement": "isCloud9", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cdk.refresh", + "title": "%AWS.command.refreshCdkExplorer%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": { + "dark": "resources/icons/vscode/dark/refresh.svg", + "light": "resources/icons/vscode/light/refresh.svg" + }, + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cdk.viewDocs", + "title": "%AWS.generic.viewDocs%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.stepfunctions.createStateMachineFromTemplate", + "title": "%AWS.command.stepFunctions.createStateMachineFromTemplate%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.stepfunctions.publishStateMachine", + "title": "%AWS.command.stepFunctions.publishStateMachine%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.previewStateMachine", + "title": "%AWS.command.stepFunctions.previewStateMachine%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(aws-stepfunctions-preview)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cdk.renderStateMachineGraph", + "title": "%AWS.command.cdk.previewStateMachine%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "AWS", + "icon": "$(aws-stepfunctions-preview)" + }, + { + "command": "aws.toolkit.aboutExtension", + "title": "%AWS.command.aboutToolkit%", + "category": "%AWS.title%" + }, + { + "command": "aws.cwl.viewLogStream", + "title": "%AWS.command.viewLogStream%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.createLocalDocument", + "title": "%AWS.command.ssmDocument.createLocalDocument%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.openLocalDocument", + "title": "%AWS.command.ssmDocument.openLocalDocument%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(cloud-download)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.openLocalDocumentJson", + "title": "%AWS.command.ssmDocument.openLocalDocumentJson%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.openLocalDocumentYaml", + "title": "%AWS.command.ssmDocument.openLocalDocumentYaml%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.deleteDocument", + "title": "%AWS.command.ssmDocument.deleteDocument%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.publishDocument", + "title": "%AWS.command.ssmDocument.publishDocument%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(cloud-upload)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ssmDocument.updateDocumentVersion", + "title": "%AWS.command.ssmDocument.updateDocumentVersion%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.copyLogResource", + "title": "%AWS.command.copyLogResource%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(files)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cwl.searchLogGroup", + "title": "%AWS.command.cloudWatchLogs.searchLogGroup%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(search-view-icon)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.saveCurrentLogDataContent", + "title": "%AWS.command.saveCurrentLogDataContent%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(save)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cwl.changeFilterPattern", + "title": "%AWS.command.cwl.changeFilterPattern%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(search-view-icon)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cwl.changeTimeFilter", + "title": "%AWS.command.cwl.changeTimeFilter%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(calendar)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.addSamDebugConfig", + "title": "%AWS.command.addSamDebugConfig%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.toggleSamCodeLenses", + "title": "%AWS.command.toggleSamCodeLenses%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecs.runCommandInContainer", + "title": "%AWS.ecs.runCommandInContainer%", + "category": "%AWS.title%", + "enablement": "viewItem == awsEcsContainerNodeExecEnabled", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecs.openTaskInTerminal", + "title": "%AWS.ecs.openTaskInTerminal%", + "category": "%AWS.title%", + "enablement": "viewItem == awsEcsContainerNodeExecEnabled", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecs.enableEcsExec", + "title": "%AWS.ecs.enableEcsExec%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecs.viewDocumentation", + "title": "%AWS.generic.viewDocs%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.copyIdentifier", + "title": "%AWS.command.resources.copyIdentifier%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.openResourcePreview", + "title": "%AWS.generic.preview%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(open-preview)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.createResource", + "title": "%AWS.generic.create%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(add)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.deleteResource", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.updateResource", + "title": "%AWS.generic.promptUpdate%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(pencil)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.updateResourceInline", + "title": "%AWS.generic.promptUpdate%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(pencil)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.saveResource", + "title": "%AWS.generic.save%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(save)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.closeResource", + "title": "%AWS.generic.close%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(close)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.viewDocs", + "title": "%AWS.generic.viewDocs%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(book)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.resources.configure", + "title": "%AWS.command.resources.configure%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "icon": "$(gear)", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.createService", + "title": "%AWS.command.apprunner.createService%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.ecs.disableEcsExec", + "title": "%AWS.ecs.disableEcsExec%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.createServiceFromEcr", + "title": "%AWS.command.apprunner.createServiceFromEcr%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.pauseService", + "title": "%AWS.command.apprunner.pauseService%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.resumeService", + "title": "%AWS.command.apprunner.resumeService%", + "category": "AWS", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.copyServiceUrl", + "title": "%AWS.command.apprunner.copyServiceUrl%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.open", + "title": "%AWS.command.apprunner.open%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.deleteService", + "title": "%AWS.generic.promptDelete%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.apprunner.startDeployment", + "title": "%AWS.command.apprunner.startDeployment%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.cloudFormation.newTemplate", + "title": "%AWS.command.cloudFormation.newTemplate%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.sam.newTemplate", + "title": "%AWS.command.sam.newTemplate%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.samcli.sync", + "title": "%AWS.command.samcli.sync%", + "category": "%AWS.title%", + "enablement": "isCloud9 || !aws.isWebExtHost" + }, + { + "command": "aws.toolkit.amazonq.learnMore", + "title": "%AWS.amazonq.learnMore%", + "category": "%AWS.title%" + }, + { + "command": "aws.toolkit.amazonq.extensionpage", + "title": "Open Amazon Q Extension", + "category": "%AWS.title%" + }, + { + "command": "aws.dev.openMenu", + "title": "Open Developer Menu", + "category": "AWS (Developer)", + "enablement": "aws.isDevMode" + }, + { + "command": "aws.dev.viewLogs", + "title": "Watch Logs", + "category": "AWS (Developer)" + }, + { + "command": "aws.openInApplicationComposerDialog", + "title": "%AWS.command.applicationComposer.openDialog%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.openInApplicationComposer", + "title": "%AWS.command.applicationComposer.open%", + "category": "%AWS.title%", + "icon": { + "dark": "resources/icons/aws/applicationcomposer/icon-dark.svg", + "light": "resources/icons/aws/applicationcomposer/icon.svg" + }, + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.createNewThreatComposer", + "title": "%AWS.command.threatComposer.createNew%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + }, + { + "command": "aws.newThreatComposerFile", + "title": "%AWS.command.threatComposer.newFile%", + "category": "%AWS.title%", + "cloud9": { + "cn": { + "category": "%AWS.title.cn%" + } + } + } + ], + "jsonValidation": [ + { + "fileMatch": ".aws/templates.json", + "url": "./dist/src/templates/templates.json" + }, + { + "fileMatch": "*ecs-task-def.json", + "url": "https://ecs-intellisense.s3-us-west-2.amazonaws.com/task-definition/schema.json" + } + ], + "languages": [ + { + "id": "asl", + "extensions": [ + ".asl.json", + ".asl" + ], + "aliases": [ + "Amazon States Language" + ] + }, + { + "id": "asl-yaml", + "aliases": [ + "Amazon States Language (YAML)" + ], + "extensions": [ + ".asl.yaml", + ".asl.yml" + ] + }, + { + "id": "ssm-json", + "extensions": [ + ".ssm.json" + ], + "aliases": [ + "AWS Systems Manager Document (JSON)" + ] + }, + { + "id": "ssm-yaml", + "extensions": [ + ".ssm.yaml", + ".ssm.yml" + ], + "aliases": [ + "AWS Systems Manager Document (YAML)" + ] + } + ], + "keybindings": [ + { + "command": "aws.previewStateMachine", + "key": "ctrl+shift+v", + "mac": "cmd+shift+v", + "when": "editorTextFocus && editorLangId == asl || editorTextFocus && editorLangId == asl-yaml" + } + ], + "grammars": [ + { + "language": "asl", + "scopeName": "source.asl", + "path": "./syntaxes/ASL.tmLanguage" + }, + { + "language": "asl-yaml", + "scopeName": "source.asl.yaml", + "path": "./syntaxes/asl-yaml.tmLanguage.json" + }, + { + "language": "ssm-json", + "scopeName": "source.ssmjson", + "path": "./syntaxes/SSMJSON.tmLanguage" + }, + { + "language": "ssm-yaml", + "scopeName": "source.ssmyaml", + "path": "./syntaxes/SSMYAML.tmLanguage" + } + ], + "resourceLabelFormatters": [ + { + "scheme": "aws-cwl", + "formatting": { + "label": "${path}", + "separator": "/" + } + }, + { + "scheme": "s3*", + "formatting": { + "label": "[S3] ${path}", + "separator": "/" + } + } + ], + "walkthroughs": [], + "icons": { + "aws-amazonq-q-gradient": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1aa" + } + }, + "aws-amazonq-q-squid-ink": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1ab" + } + }, + "aws-amazonq-q-white": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1ac" + } + }, + "aws-amazonq-transform-arrow-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1ad" + } + }, + "aws-amazonq-transform-arrow-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1ae" + } + }, + "aws-amazonq-transform-default-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1af" + } + }, + "aws-amazonq-transform-default-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b0" + } + }, + "aws-amazonq-transform-dependencies-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b1" + } + }, + "aws-amazonq-transform-dependencies-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b2" + } + }, + "aws-amazonq-transform-file-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b3" + } + }, + "aws-amazonq-transform-file-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b4" + } + }, + "aws-amazonq-transform-logo": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b5" + } + }, + "aws-amazonq-transform-step-into-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b6" + } + }, + "aws-amazonq-transform-step-into-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b7" + } + }, + "aws-amazonq-transform-variables-dark": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b8" + } + }, + "aws-amazonq-transform-variables-light": { + "description": "AWS Contributed Icon", + "default": { + "fontPath": "./resources/fonts/aws-toolkit-icons.woff", + "fontCharacter": "\\f1b9" + } + }, "aws-applicationcomposer-icon": { "description": "AWS Contributed Icon", "default": { @@ -1017,6 +3978,33 @@ "fontCharacter": "\\f1da" } } + }, + "notebooks": [ + { + "type": "aws-redshift-sql-notebook", + "displayName": "Redshift SQL notebook", + "selector": [ + { + "filenamePattern": "*.redshiftnb" + } + ] + } + ], + "customEditors": [ + { + "viewType": "threatComposer.tc.json", + "displayName": "%AWS.threatComposer.title%", + "selector": [ + { + "filenamePattern": "*.tc.json" + } + ] + } + ], + "configurationDefaults": { + "workbench.editorAssociations": { + "{git,gitlens,conflictResolution,vscode-local-history}:/**/*.tc.json": "default" + } } }, "devDependencies": {}, diff --git a/packages/toolkit/scripts/build/handlePackageJson.ts b/packages/toolkit/scripts/build/handlePackageJson.ts deleted file mode 100644 index 8d12787d153..00000000000 --- a/packages/toolkit/scripts/build/handlePackageJson.ts +++ /dev/null @@ -1,96 +0,0 @@ -/*! - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0 - */ - -/** - * We are currently in the process of splitting the toolkit into a core library and separate extensions. - * A lot of the core toolkit code depends on contents of its package.json. However, in order for - * individual extensions to function, they need to have the same entries in their local package.jsons as well. - * To avoid having duplicate code, we copy the necessary fields from the core library to the separate toolkit - * extension when required (e.g. debugging, packaging). - * - * TODO: IDE-12831 tracks work to eliminate this script. - * - * Args: - * --restore: reverts the package json changes to the original state - * --development: performs actions that should only be done during development and not production - */ - -import * as fs from 'fs-extra' - -function main() { - const args = process.argv.slice(2) - const restoreMode = args.includes('--restore') - - if (args.includes('--development')) { - /** When we actually package the extension the null extension does not occur, so we will skip this hack */ - // fixNullExtensionIssue(restoreMode) - } - - const packageJsonFile = './package.json' - const backupJsonFile = `${packageJsonFile}.handlePackageJson.bk` - const coreLibPackageJsonFile = '../core/package.json' - - if (restoreMode) { - // TODO: IDE-12831 will eliminate this entire script. - try { - fs.copyFileSync(backupJsonFile, packageJsonFile) - fs.unlinkSync(backupJsonFile) - } catch (err) { - console.log(`Could not restore package.json. Error: ${err}`) - } - } else { - fs.copyFileSync(packageJsonFile, backupJsonFile) - const packageJson = JSON.parse(fs.readFileSync(packageJsonFile, { encoding: 'utf-8' })) - const coreLibPackageJson = JSON.parse(fs.readFileSync(coreLibPackageJsonFile, { encoding: 'utf-8' })) - const coreSettings = coreLibPackageJson.contributes.configuration.properties - - // Remove Amazon Q extension settings stored in core - Object.keys(coreSettings).forEach((key) => { - if (key.startsWith('amazonQ')) { - delete coreSettings[key] - } - }) - - packageJson.contributes = { - ...coreLibPackageJson.contributes, - } - packageJson.engines = { - ...coreLibPackageJson.engines, - } - fs.writeFileSync(packageJsonFile, JSON.stringify(packageJson, undefined, ' ')) - } -} - -/** - * HACK: - * - * During **Debug mode** the extension is not detected, this breaks things like the VS Code URI handler. - * A TEMPORARY fix has been narrowed down to setting `engines.vscode` to `*` temporarily in the core package.json. - * When this field is copied to the toolkit/amazonq package.json by this script, the error stops. - * - * Github Issue: https://github.com/aws/aws-toolkit-vscode/issues/4658 - */ -export function fixNullExtensionIssue(restoreMode: boolean) { - const corePackageJsonFile = '../core/package.json' - const backupJsonFile = `${corePackageJsonFile}.core.bk` - - if (restoreMode) { - try { - fs.copyFileSync(backupJsonFile, corePackageJsonFile) - fs.unlinkSync(backupJsonFile) - } catch (err) { - console.log(`Could not restore package.json. Error: ${err}`) - } - } else { - fs.copyFileSync(corePackageJsonFile, backupJsonFile) - const corePackageJson = JSON.parse(fs.readFileSync(corePackageJsonFile, { encoding: 'utf-8' })) - - corePackageJson.engines.vscode = '*' - - fs.writeFileSync(corePackageJsonFile, JSON.stringify(corePackageJson, undefined, ' ')) - } -} - -main() diff --git a/packages/toolkit/test/e2e/index.ts b/packages/toolkit/test/e2e/index.ts new file mode 100644 index 00000000000..e6c624889c6 --- /dev/null +++ b/packages/toolkit/test/e2e/index.ts @@ -0,0 +1,15 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { runTests } from 'aws-core-vscode/test' +import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' + +export function run(): Promise { + return runTests( + process.env.TEST_DIR ?? ['test/e2e', '../../core/dist/src/testE2E'], + VSCODE_EXTENSION_ID.awstoolkit, + ['../../core/dist/src/testInteg/globalSetup.test.ts'] + ) +} diff --git a/packages/toolkit/test/integ/index.ts b/packages/toolkit/test/integ/index.ts new file mode 100644 index 00000000000..1bad70fe545 --- /dev/null +++ b/packages/toolkit/test/integ/index.ts @@ -0,0 +1,15 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { runTests } from 'aws-core-vscode/test' +import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' + +export function run(): Promise { + return runTests( + process.env.TEST_DIR ?? ['test/integ', '../../core/dist/src/testInteg'], + VSCODE_EXTENSION_ID.awstoolkit, + ['../../core/dist/src/testInteg/globalSetup.test.ts'] + ) +} diff --git a/packages/toolkit/test/unit/index.ts b/packages/toolkit/test/unit/index.ts new file mode 100644 index 00000000000..998953c7fd4 --- /dev/null +++ b/packages/toolkit/test/unit/index.ts @@ -0,0 +1,13 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { runTests } from 'aws-core-vscode/test' +import { VSCODE_EXTENSION_ID } from 'aws-core-vscode/utils' + +export function run(): Promise { + return runTests(process.env.TEST_DIR ?? ['test/unit', '../../core/dist/src/test'], VSCODE_EXTENSION_ID.awstoolkit, [ + '../../core/dist/src/test/globalSetup.test.ts', + ]) +} diff --git a/scripts/package.ts b/scripts/package.ts index d5a944c42f6..34071c71089 100644 --- a/scripts/package.ts +++ b/scripts/package.ts @@ -86,22 +86,6 @@ function isBeta(): boolean { } } -/** - * Restores package.json after `scripts/build/handlePackageJson.ts` overwrote it. - * - * TODO: remove this after IDE-12831 is resolved. - */ -function restorePackageJson() { - const packageJsonFile = './package.json' - const backupJsonFile = `${packageJsonFile}.handlePackageJson.bk` - - if (fs.existsSync(backupJsonFile)) { - fs.copyFileSync(backupJsonFile, packageJsonFile) - fs.unlinkSync(backupJsonFile) - console.log(`package.ts: restored package.json from ${backupJsonFile}`) - } -} - /** * Gets a suffix to append to the version-string, or empty for release builds. * @@ -209,7 +193,6 @@ function main() { fs.copyFileSync(backupWebpackConfigFile, webpackConfigJsFile) fs.unlinkSync(backupWebpackConfigFile) } - restorePackageJson() } }