From 0954953fd2cc132374ff52bfc8ad6c1c82a2e272 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 10:50:21 -0800 Subject: [PATCH 1/8] Initial scripting to validate and fix unordered telemetry definitions --- .gitignore | 1 + telemetry/validation/jest.config.js | 200 + telemetry/validation/package-lock.json | 3765 +++++++++++++++++ telemetry/validation/package.json | 21 + telemetry/validation/src/fix.ts | 28 + telemetry/validation/src/reorder.test.ts | 38 + telemetry/validation/src/reorder.ts | 15 + telemetry/validation/src/sorting.ts | 13 + .../validation/src/telemetryDefinitions.ts | 31 + telemetry/validation/src/validate.ts | 34 + telemetry/validation/src/validation.test.ts | 32 + telemetry/validation/src/validation.ts | 47 + telemetry/validation/tsconfig.json | 109 + 13 files changed, 4334 insertions(+) create mode 100644 telemetry/validation/jest.config.js create mode 100644 telemetry/validation/package-lock.json create mode 100644 telemetry/validation/package.json create mode 100644 telemetry/validation/src/fix.ts create mode 100644 telemetry/validation/src/reorder.test.ts create mode 100644 telemetry/validation/src/reorder.ts create mode 100644 telemetry/validation/src/sorting.ts create mode 100644 telemetry/validation/src/telemetryDefinitions.ts create mode 100644 telemetry/validation/src/validate.ts create mode 100644 telemetry/validation/src/validation.test.ts create mode 100644 telemetry/validation/src/validation.ts create mode 100644 telemetry/validation/tsconfig.json diff --git a/.gitignore b/.gitignore index 8607edfa..81918dbc 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ build .gradle .idea **/node_modules +**/dist **/out **/*.tgz .testresults/** diff --git a/telemetry/validation/jest.config.js b/telemetry/validation/jest.config.js new file mode 100644 index 00000000..6e9d6d52 --- /dev/null +++ b/telemetry/validation/jest.config.js @@ -0,0 +1,200 @@ +/** + * For a detailed explanation regarding each configuration property, visit: + * https://jestjs.io/docs/configuration + */ + +/** @type {import('jest').Config} */ +const config = { + // All imported modules in your tests should be mocked automatically + // automock: false, + + // Stop running tests after `n` failures + // bail: 0, + + // The directory where Jest should store its cached dependency information + // cacheDirectory: "C:\\Users\\chrstou\\AppData\\Local\\Temp\\jest", + + // Automatically clear mock calls, instances, contexts and results before every test + clearMocks: true, + + // Indicates whether the coverage information should be collected while executing the test + // collectCoverage: false, + + // An array of glob patterns indicating a set of files for which coverage information should be collected + // collectCoverageFrom: undefined, + + // The directory where Jest should output its coverage files + // coverageDirectory: undefined, + + // An array of regexp pattern strings used to skip coverage collection + // coveragePathIgnorePatterns: [ + // "\\\\node_modules\\\\" + // ], + + // Indicates which provider should be used to instrument code for coverage + coverageProvider: "v8", + + // A list of reporter names that Jest uses when writing coverage reports + // coverageReporters: [ + // "json", + // "text", + // "lcov", + // "clover" + // ], + + // An object that configures minimum threshold enforcement for coverage results + // coverageThreshold: undefined, + + // A path to a custom dependency extractor + // dependencyExtractor: undefined, + + // Make calling deprecated APIs throw helpful error messages + // errorOnDeprecated: false, + + // The default configuration for fake timers + // fakeTimers: { + // "enableGlobally": false + // }, + + // Force coverage collection from ignored files using an array of glob patterns + // forceCoverageMatch: [], + + // A path to a module which exports an async function that is triggered once before all test suites + // globalSetup: undefined, + + // A path to a module which exports an async function that is triggered once after all test suites + // globalTeardown: undefined, + + // A set of global variables that need to be available in all test environments + // globals: {}, + + // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. + // maxWorkers: "50%", + + // An array of directory names to be searched recursively up from the requiring module's location + // moduleDirectories: [ + // "node_modules" + // ], + + // An array of file extensions your modules use + // moduleFileExtensions: [ + // "js", + // "mjs", + // "cjs", + // "jsx", + // "ts", + // "tsx", + // "json", + // "node" + // ], + + // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module + // moduleNameMapper: {}, + + // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader + // modulePathIgnorePatterns: [], + + // Activates notifications for test results + // notify: false, + + // An enum that specifies notification mode. Requires { notify: true } + // notifyMode: "failure-change", + + // A preset that is used as a base for Jest's configuration + // preset: undefined, + + // Run tests from one or more projects + // projects: undefined, + + // Use this configuration option to add custom reporters to Jest + // reporters: undefined, + + // Automatically reset mock state before every test + // resetMocks: false, + + // Reset the module registry before running each individual test + // resetModules: false, + + // A path to a custom resolver + // resolver: undefined, + + // Automatically restore mock state and implementation before every test + // restoreMocks: false, + + // The root directory that Jest should scan for tests and modules within + // rootDir: undefined, + + // A list of paths to directories that Jest should use to search for files in + roots: [ + "dist" + ], + + // Allows you to use a custom runner instead of Jest's default test runner + // runner: "jest-runner", + + // The paths to modules that run some code to configure or set up the testing environment before each test + // setupFiles: [], + + // A list of paths to modules that run some code to configure or set up the testing framework before each test + // setupFilesAfterEnv: [], + + // The number of seconds after which a test is considered as slow and reported as such in the results. + // slowTestThreshold: 5, + + // A list of paths to snapshot serializer modules Jest should use for snapshot testing + // snapshotSerializers: [], + + // The test environment that will be used for testing + // testEnvironment: "jest-environment-node", + testEnvironment: "node", + + // Options that will be passed to the testEnvironment + // testEnvironmentOptions: {}, + + // Adds a location field to test results + // testLocationInResults: false, + + // The glob patterns Jest uses to detect test files + // testMatch: [ + // "**/__tests__/**/*.[jt]s?(x)", + // "**/?(*.)+(spec|test).[tj]s?(x)" + // ], + + // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped + // testPathIgnorePatterns: [ + // "\\\\node_modules\\\\" + // ], + + // The regexp pattern or array of patterns that Jest uses to detect test files + // testRegex: [], + + // This option allows the use of a custom results processor + // testResultsProcessor: undefined, + + // This option allows use of a custom test runner + // testRunner: "jest-circus/runner", + + // A map from regular expressions to paths to transformers + // transform: undefined, + transform: {'^.+\\.tsx?$': 'ts-jest'} + + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation + // transformIgnorePatterns: [ + // "\\\\node_modules\\\\", + // "\\.pnp\\.[^\\\\]+$" + // ], + + // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them + // unmockedModulePathPatterns: undefined, + + // Indicates whether each individual test should be reported during the run + // verbose: undefined, + + // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode + // watchPathIgnorePatterns: [], + + // Whether to use watchman for file crawling + // watchman: true, +}; + +module.exports = config; diff --git a/telemetry/validation/package-lock.json b/telemetry/validation/package-lock.json new file mode 100644 index 00000000..9b16c17d --- /dev/null +++ b/telemetry/validation/package-lock.json @@ -0,0 +1,3765 @@ +{ + "name": "toolkit-telemetry-validation", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "toolkit-telemetry-validation", + "version": "1.0.0", + "devDependencies": { + "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", + "jest": "^29.7.0", + "ts-jest": "^29.1.2", + "typescript": "^5.3.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.688", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.688.tgz", + "integrity": "sha512-3/tHg2ChPF00eukURIB8cSVt3/9oeS1oTUIEt3ivngBInUaEcBhG2VdyEDejhwQdR6SLqaiEAEc0dHS0V52pOw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", + "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/telemetry/validation/package.json b/telemetry/validation/package.json new file mode 100644 index 00000000..6ffaed15 --- /dev/null +++ b/telemetry/validation/package.json @@ -0,0 +1,21 @@ +{ + "name": "toolkit-telemetry-validation", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "build": "tsc", + "watch": "tsc --watch", + "validate": "npm run build && node dist/validate.js ../definitions/commonDefinitions.json", + "fix": "npm run build && node dist/fix.js ../definitions/commonDefinitions.json", + "test": "jest" + }, + "author": "", + "devDependencies": { + "@types/jest": "^29.5.12", + "@types/node": "^20.11.24", + "jest": "^29.7.0", + "ts-jest": "^29.1.2", + "typescript": "^5.3.3" + } +} diff --git a/telemetry/validation/src/fix.ts b/telemetry/validation/src/fix.ts new file mode 100644 index 00000000..082a46b2 --- /dev/null +++ b/telemetry/validation/src/fix.ts @@ -0,0 +1,28 @@ +import { reorder } from './reorder' +import { TelemetryDefinitions, loadTelemetryDefinitions, saveTelemetryDefinitions } from './telemetryDefinitions' + +/** + * Performs automated fixes for certain validation checks on the given file. + * To use: call this script with the json file to fix + * "node fix.js foo.json" + */ +async function main() { + if (process.argv.length < 3) { + throw new Error('args is missing the file to validate') + } + + const jsonPath = process.argv[2] + const definitions = await loadTelemetryDefinitions(jsonPath) + + fix(definitions) + + await saveTelemetryDefinitions(definitions, jsonPath) +} + +export function fix(definitions: TelemetryDefinitions): void { + reorder(definitions) +} + +;(async () => { + await main() +})() diff --git a/telemetry/validation/src/reorder.test.ts b/telemetry/validation/src/reorder.test.ts new file mode 100644 index 00000000..d4f0e5a4 --- /dev/null +++ b/telemetry/validation/src/reorder.test.ts @@ -0,0 +1,38 @@ +import { validate } from './validation' +import { TelemetryDefinitions } from './telemetryDefinitions' +import { reorder } from './reorder' + +test('reordering passes validation check', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + const validations = validate(data) + expect(validations).toHaveLength(0) +}) + +test('reorder types', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + + expect(data.types[0].name).toBe('apple') + expect(data.types[1].name).toBe('banana') +}) + +test('reorder metrics', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + + expect(data.metrics[0].name).toBe('aaa') + expect(data.metrics[1].name).toBe('zzz') +}) + +function createUnorderedData(): TelemetryDefinitions { + const unsortedData: TelemetryDefinitions = { + types: [{ name: 'banana' }, { name: 'apple' }], + metrics: [{ name: 'zzz' }, { name: 'aaa' }] + } + + return unsortedData +} diff --git a/telemetry/validation/src/reorder.ts b/telemetry/validation/src/reorder.ts new file mode 100644 index 00000000..c4271507 --- /dev/null +++ b/telemetry/validation/src/reorder.ts @@ -0,0 +1,15 @@ +import { fieldSort, metricSort } from './sorting' +import { TelemetryDefinitions } from './telemetryDefinitions' + +export function reorder(definitions: TelemetryDefinitions): void { + orderTypes(definitions) + orderMetrics(definitions) +} + +function orderTypes(definitions: TelemetryDefinitions): void { + definitions.types.sort(fieldSort) +} + +function orderMetrics(definitions: TelemetryDefinitions): void { + definitions.metrics.sort(metricSort) +} diff --git a/telemetry/validation/src/sorting.ts b/telemetry/validation/src/sorting.ts new file mode 100644 index 00000000..923a6a80 --- /dev/null +++ b/telemetry/validation/src/sorting.ts @@ -0,0 +1,13 @@ +import { Metric, TelemetryField } from './telemetryDefinitions' + +export function fieldSort(a: TelemetryField, b: TelemetryField): number { + return a.name.localeCompare(b.name) +} + +export function metricSort(a: Metric, b: Metric): number { + return a.name.localeCompare(b.name) +} + +export function stringSort(a: string, b: string): number { + return a.localeCompare(b) +} diff --git a/telemetry/validation/src/telemetryDefinitions.ts b/telemetry/validation/src/telemetryDefinitions.ts new file mode 100644 index 00000000..5f512817 --- /dev/null +++ b/telemetry/validation/src/telemetryDefinitions.ts @@ -0,0 +1,31 @@ +import * as fs from 'fs/promises' + +export interface TelemetryField { + name: string + // there are other fields not used by this scripting +} + +export interface Metric { + name: string + // there are other fields not used by this scripting +} + +export interface TelemetryDefinitions { + types: TelemetryField[] + metrics: Metric[] +} + +export async function loadTelemetryDefinitions(path: string): Promise { + const json = await fs.readFile(path, { + encoding: 'utf8' + }) + + return JSON.parse(json) as TelemetryDefinitions +} + +export async function saveTelemetryDefinitions(definitions: TelemetryDefinitions, path: string): Promise { + const json = JSON.stringify(definitions, undefined, 4) + await fs.writeFile(path, json, { + encoding: 'utf8' + }) +} diff --git a/telemetry/validation/src/validate.ts b/telemetry/validation/src/validate.ts new file mode 100644 index 00000000..0ac049f4 --- /dev/null +++ b/telemetry/validation/src/validate.ts @@ -0,0 +1,34 @@ +import { loadTelemetryDefinitions } from './telemetryDefinitions' +import { validate } from './validation' + +/** + * Performs validation checks on the given file. + * To use: call this script with the json file to validate + * "node validate.js foo.json" + * This script will throw an Error if there are any validation failures. + * Pass or fail, details will be written to the console. + */ +async function main() { + if (process.argv.length < 3) { + throw new Error('args is missing the file to validate') + } + + const jsonPath = process.argv[2] + const definitions = await loadTelemetryDefinitions(jsonPath) + + const validations = validate(definitions) + + if (validations.length > 0) { + console.log(`❌ Validation checks fail: ${jsonPath}`) + validations.forEach(v => console.log(`- ${v}`)) + console.log() + + throw new Error('Validation failed. Run `npm run fix` to fix issues.') + } else { + console.log(`✅ Validation checks pass: ${jsonPath}`) + } +} + +;(async () => { + await main() +})() diff --git a/telemetry/validation/src/validation.test.ts b/telemetry/validation/src/validation.test.ts new file mode 100644 index 00000000..fa3f61d6 --- /dev/null +++ b/telemetry/validation/src/validation.test.ts @@ -0,0 +1,32 @@ +import { validate } from './validation' +import { TelemetryDefinitions } from './telemetryDefinitions' + +test('valid definition', () => { + const data: TelemetryDefinitions = { + types: [{ name: 'apple' }, { name: 'banana' }], + metrics: [{ name: 'aaa' }, { name: 'zzz' }] + } + + const validations = validate(data) + expect(validations).toHaveLength(0) +}) + +test('flag unsorted fields', () => { + const data: TelemetryDefinitions = { + types: [{ name: 'banana' }, { name: 'apple' }], + metrics: [] + } + + const validations = validate(data) + expect(validations).toHaveLength(1) +}) + +test('flag unsorted metrics', () => { + const data: TelemetryDefinitions = { + types: [], + metrics: [{ name: 'zzz' }, { name: 'aaa' }] + } + + const validations = validate(data) + expect(validations).toHaveLength(1) +}) diff --git a/telemetry/validation/src/validation.ts b/telemetry/validation/src/validation.ts new file mode 100644 index 00000000..06c077cd --- /dev/null +++ b/telemetry/validation/src/validation.ts @@ -0,0 +1,47 @@ +import { stringSort } from './sorting' +import { TelemetryDefinitions } from './telemetryDefinitions' + +export function validate(definitions: TelemetryDefinitions): string[] { + const validations: string[] = [] + + validations.push(...validateTypeOrder(definitions)) + validations.push(...validateMetricsOrder(definitions)) + + return validations +} + +function validateTypeOrder(definitions: TelemetryDefinitions): string[] { + const validations = [] + + const sortedNames = definitions.types.map(t => t.name).sort(stringSort) + + for (let i = 0; i < definitions.types.length; i++) { + const inputType = definitions.types[i] + const sortedName = sortedNames[i] + + if (inputType.name != sortedName) { + validations.push(`Telemetry Types are not sorted. Expected: ${sortedName}, Found: ${inputType.name}`) + break + } + } + + return validations +} + +function validateMetricsOrder(definitions: TelemetryDefinitions): string[] { + const validations = [] + + const sortedNames = definitions.metrics.map(t => t.name).sort(stringSort) + + for (let i = 0; i < definitions.metrics.length; i++) { + const inputMetric = definitions.metrics[i] + const sortedName = sortedNames[i] + + if (inputMetric.name != sortedName) { + validations.push(`Telemetry Metrics are not sorted. Expected: ${sortedName}, Found: ${inputMetric.name}`) + break + } + } + + return validations +} diff --git a/telemetry/validation/tsconfig.json b/telemetry/validation/tsconfig.json new file mode 100644 index 00000000..4fb9462f --- /dev/null +++ b/telemetry/validation/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "NodeNext" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "NodeNext" /* Specify how TypeScript looks up a file from a given module specifier. */, + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} From 3da43edc91f9ef5b307fff52f247364174b43637 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 15:27:59 -0800 Subject: [PATCH 2/8] Define GitHub Action --- .../workflows/lint-telemetry-definitions.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/lint-telemetry-definitions.yaml diff --git a/.github/workflows/lint-telemetry-definitions.yaml b/.github/workflows/lint-telemetry-definitions.yaml new file mode 100644 index 00000000..2dde2f4b --- /dev/null +++ b/.github/workflows/lint-telemetry-definitions.yaml @@ -0,0 +1,26 @@ +name: Lint Telemetry Definitions +on: + push: + branches: [main] + pull_request: + branches: [main, feature/*] + +jobs: + build: + name: Build and Test + runs-on: ubuntu-latest + steps: + - name: Sync Code + uses: actions/checkout@v3 + + - name: Compile the Validation code + run: | + cd telemetry/validation + npm install + npm run build + npm run test + + - name: Validate the telemetry definitions + run: | + cd telemetry/validation + npm run validate From b5e0fceba2900220437303103ab22b748b4e5a8d Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 15:38:52 -0800 Subject: [PATCH 3/8] Update readme --- telemetry/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/telemetry/README.md b/telemetry/README.md index 1561cdb2..26d6e302 100644 --- a/telemetry/README.md +++ b/telemetry/README.md @@ -74,7 +74,17 @@ and change `name`, `description`, and the values in `allowedValues` Then rerun the generator. This example will generate a new type that can be imported or used in telemetry calls. +CI jobs run validation checks on the telemetry definitions file. For example, entries are expected to exist in alphabetical order. You may want to check this yourself before creating a PR, by switching to the `telemetry/validation` folder, and running: + +``` +npm install +npm run validate +``` + +You can also run `npm run fix` to apply simple fixes to the file (like re-ordering). + ### Overriding existing telemetry + In VSCode and JetBrains, extra telemetry files will take precedence over existing definitions. For example, if you have a metric for `lambda_update`, adding another `lambda_update` in the repo's extra telemetry files will override all of the values of it. Types work similarly, and will also be overwritten by extra telemetry files. From fbf332c71ee012d3be926a5335a851740f428769 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 15:33:36 -0800 Subject: [PATCH 4/8] Re-order the existing telemetry definitions file --- telemetry/definitions/commonDefinitions.json | 6607 +++++++++++------- 1 file changed, 4069 insertions(+), 2538 deletions(-) diff --git a/telemetry/definitions/commonDefinitions.json b/telemetry/definitions/commonDefinitions.json index 6427e09b..2d26759b 100644 --- a/telemetry/definitions/commonDefinitions.json +++ b/telemetry/definitions/commonDefinitions.json @@ -1,17 +1,107 @@ { "types": [ + { + "name": "amazonqCodeGenerationResult", + "type": "string", + "description": "Captures if code generation result is Complete, Failed, etc." + }, + { + "name": "amazonqConversationId", + "type": "string", + "description": "Uniquely identifies a message with which the user interacts." + }, + { + "name": "amazonqEndOfTheConversationLatency", + "type": "double", + "description": "Total time from start to end" + }, + { + "name": "amazonqGenerateApproachIteration", + "type": "double", + "description": "Order of approach iteration. For initial code changes it is 0" + }, + { + "name": "amazonqGenerateApproachLatency", + "type": "double", + "description": "The time it takes to generate approach response" + }, + { + "name": "amazonqGenerateCodeIteration", + "type": "double", + "description": "Order of code generation iteration. For initial code changes it is 0" + }, + { + "name": "amazonqGenerateCodeResponseLatency", + "type": "double", + "description": "The time it takes to generate code generation response" + }, + { + "name": "amazonqNumberOfFilesAccepted", + "type": "double", + "description": "Captures the number of accepted files as a part of code generation iteration" + }, + { + "name": "amazonqNumberOfFilesGenerated", + "type": "double", + "description": "Captures the number of files generated as a part of code generation iteration" + }, + { + "name": "amazonqNumberOfReferences", + "type": "double", + "description": "Captures the number of references" + }, + { + "name": "amazonqRepositorySize", + "type": "double", + "description": "Captures the size of the source code" + }, + { + "name": "amazonqUploadIntent", + "type": "string", + "description": "The intent of the upload", + "allowedValues": [ + "TRANSFORMATION", + "TASK_ASSIST_PLANNING" + ] + }, { "name": "appRunnerServiceSource", "type": "string", - "allowedValues": ["ecr", "ecrPublic", "repository"], + "allowedValues": [ + "ecr", + "ecrPublic", + "repository" + ], "description": "The source artifact of an App Runner service" }, { "name": "appRunnerServiceStatus", "type": "string", - "allowedValues": ["CREATE_FAILED", "RUNNING", "DELETED", "DELETE_FAILED", "PAUSED", "OPERATION_IN_PROGRESS"], + "allowedValues": [ + "CREATE_FAILED", + "RUNNING", + "DELETED", + "DELETE_FAILED", + "PAUSED", + "OPERATION_IN_PROGRESS" + ], "description": "The current state of the App Runner service" }, + { + "name": "artifactsUploadDuration", + "type": "int", + "description": "Time taken to fetch the upload URL and upload the artifacts in milliseconds" + }, + { + "name": "attempts", + "type": "int", + "description": "A generic number of attempts" + }, + { + "name": "authConnectionsCount", + "type": "int", + "description": "Current number of authentication connections the user has" + }, { "name": "awsFiletype", "type": "string", @@ -32,771 +122,886 @@ ], "description": "AWS filetype kind" }, + { + "name": "causedBy", + "allowedValues": [ + "user", + "service", + "client", + "unknown" + ], + "description": "High level categorization indicating the cause of the error" + }, { "name": "cloudWatchLogsPresentation", - "allowedValues": ["ui", "text"], + "allowedValues": [ + "ui", + "text" + ], "description": "Presentation mode used in a CloudWatch Logs operation" }, { "name": "cloudWatchResourceType", - "allowedValues": ["logGroup", "logGroupList", "logStream"], + "allowedValues": [ + "logGroup", + "logGroupList", + "logStream" + ], "description": "CloudWatch Logs entity" }, { - "name": "duration", - "type": "double", - "description": "The duration of the operation in milliseconds" - }, - { - "name": "result", - "allowedValues": ["Succeeded", "Failed", "Cancelled"], - "description": "The result of the operation" - }, - { - "name": "component", - "allowedValues": ["editor", "viewer", "filesystem", "explorer", "infobar", "hover", "webview", "quickfix"], - "description": "The IDE or OS component used for the action. (Examples: S3 download to filesystem, S3 upload from editor, ...)" - }, - { - "name": "hasTextFilter", - "type": "boolean", - "description": "A text based filter was used" + "name": "codecatalyst_createDevEnvironmentRepoType", + "type": "string", + "description": "Type of Git repository provided to the Amazon CodeCatalyst dev environment create wizard", + "allowedValues": [ + "linked", + "unlinked", + "none" + ] }, { - "name": "hasTimeFilter", - "type": "boolean", - "description": "A time based filter was used" + "name": "codecatalyst_devEnvironmentWorkflowError", + "type": "string", + "description": "Workflow error name" }, { - "name": "iamResourceType", - "allowedValues": ["group", "role", "user"], - "description": "The type of IAM resource referenced by a metric or operation" + "name": "codecatalyst_devEnvironmentWorkflowStep", + "type": "string", + "description": "Workflow step name" }, { - "name": "lambdaPackageType", - "allowedValues": ["Zip", "Image"], - "description": "The Lambda Package type of the function" + "name": "codecatalyst_updateDevEnvironmentLocationType", + "type": "string", + "description": "Locality of the Amazon CodeCatalyst update dev environment request (i.e., from the thin client or the local IDE instance)", + "allowedValues": [ + "remote", + "local" + ] }, { - "name": "lambdaArchitecture", - "allowedValues": ["x86_64", "arm64"], - "description": "Lambda architecture identifier" + "name": "codeScanServiceInvocationsDuration", + "type": "int", + "description": "Time taken to invoke code scan service APIs in milliseconds" }, { - "name": "serviceType", + "name": "codeTransformApiErrorMessage", "type": "string", - "description": "The name of the AWS service acted on. These values come from the AWS SDK. To find them in the JAVA SDK search for SERVICE_NAME in each service client, or look for serviceId in metadata in the service2.json" + "description": "Any API-specific errors" }, { - "name": "requestServiceType", + "name": "codeTransformApiNames", "type": "string", - "description": "Per-request service identifier. Unlike `serviceType` (which describes the originator of the request), this describes the request itself." + "description": "Names of allowed API calls", + "allowedValues": [ + "StartTransformation", + "StopTransformation", + "GetTransformation", + "GetTransformationPlan", + "UploadZip", + "CreateUploadUrl", + "ExportResultArchive" + ] }, { - "name": "requestId", + "name": "codeTransformCancelSrcComponents", "type": "string", - "description": "A generic request ID field. The semantics are contextual based off of other fields (e.g. `requestServiceType`). For example, an event with `requestServiceType: s3` means that the request ID is associated with an S3 API call. Events that cover mutliple API calls should use the request ID of the most recent call." + "description": "Names of components that can cancel a transformation", + "allowedValues": [ + "apiError", + "loadingPanelStopButton", + "devToolsStopButton", + "bottomPanelSideNavButton" + ] }, { - "name": "name", + "name": "codeTransformJavaSourceVersionsAllowed", "type": "string", - "description": "A generic name metadata" + "description": "Allowed Java versions to transform from", + "allowedValues": [ + "JDK_1_8", + "JDK_11", + "Other" + ] }, { - "name": "id", + "name": "codeTransformJavaTargetVersionsAllowed", "type": "string", - "description": "A generic ID metadata" + "description": "Allowed Java versions to transform to", + "allowedValues": [ + "JDK_17" + ] }, { - "name": "filenameExt", + "name": "codeTransformJobId", "type": "string", - "description": "Filename extension (examples: .txt, .yml, .yaml, .asl.yaml, ...), or empty string if the filename does not contain dot (.) between two chars." - }, - { - "name": "attempts", - "type": "int", - "description": "A generic number of attempts" + "description": "The ID of the job currently running" }, { - "name": "version", + "name": "codeTransformLocalJavaVersion", "type": "string", - "description": "A generic version metadata" + "description": "The Java version on the user's machine" }, { - "name": "variant", + "name": "codeTransformLocalMavenVersion", "type": "string", - "description": "A generic variant metadata" + "description": "The Maven version on the user's machine" }, { - "name": "credentialModification", + "name": "codeTransformMavenBuildCommand", "type": "string", - "allowedValues": ["Add", "Edit", "Delete"], - "description": "The type of modification performed on the credentials" + "description": "Type of maven command", + "allowedValues": [ + "mvnw.cmd", + "mvnw", + "mvn", + "IDEBundledMaven" + ] }, { - "name": "source", + "name": "codeTransformPatchViewerCancelSrcComponents", "type": "string", - "description": "The source of the operation" + "description": "Names of components that can cancel the diff viewer", + "allowedValues": [ + "apiError", + "cancelButton" + ] }, { - "name": "reason", + "name": "codeTransformPreValidationError", "type": "string", - "description": "The reason for a metric or exception depending on context. It describes a certain theme of errors usually the exception class name eg. FileIOException" + "description": "Names of the pre-validation errors that can occur", + "allowedValues": [ + "NoPom", + "NoJavaProject", + "MixedLanguages", + "UnsupportedJavaVersion", + "ProjectJDKDiffersFromMavenJDK", + "NonMavenProject", + "EmptyProject", + "NonSsoLogin", + "RemoteRunProject" + ] }, { - "name": "errorCode", + "name": "codeTransformRequestId", "type": "string", - "description": "User-friendly error codes describing a failed operation" + "description": "The API request ID" }, { - "name": "causedBy", - "allowedValues": [ "user", "service", "client", "unknown" ], - "description": "High level categorization indicating the cause of the error" + "name": "codeTransformResultStatusMessage", + "type": "string", + "description": "The outcome of the transformation" }, { - "name": "httpStatusCode", + "name": "codeTransformRuntimeError", "type": "string", - "description": "Describes the HTTP status code for request made. The semantics are contextual based off of other fields (e.g. `requestId`)" + "description": "Any runtime errors" }, { - "name": "url", - "type": "string", - "description": "The url associated with a metric" + "name": "codeTransformRunTimeLatency", + "type": "int", + "description": "A millisecond value of the total run time" }, { - "name": "eventBridgeSchema", + "name": "codeTransformSessionId", "type": "string", - "description": "The name of the EventBridge Schema used in the operation" + "description": "Represents the IDE session from which users start the transformation process" }, { - "name": "runtime", + "name": "codeTransformStartSrcComponents", "type": "string", + "description": "Names of components that can start a transformation", "allowedValues": [ - "dotnetcore3.1", - "dotnetcore2.1", - "dotnet5.0", - "dotnet6", - "dotnet7", - "dotnet8", - "nodejs20.x", - "nodejs18.x", - "nodejs16.x", - "nodejs14.x", - "nodejs12.x", - "nodejs10.x", - "nodejs8.10", - "ruby2.5", - "java8", - "java8.al2", - "java11", - "java17", - "java21", - "go1.x", - "python3.12", - "python3.11", - "python3.10", - "python3.9", - "python3.8", - "python3.7", - "python3.6", - "python2.7" - ], - "description": "The lambda runtime" + "devToolsStartButton", + "bottomPanelSideNavButton", + "chatPrompt" + ] }, { - "name": "runtimeString", + "name": "codeTransformStatus", "type": "string", - "description": "A free-text field to record runtimes that may be separate from Lambda runtimes" + "description": "The current transformation job's status" }, { - "name": "templateName", - "type": "string", - "description": "Generic name of a template" + "name": "codeTransformTotalByteSize", + "type": "int", + "description": "The byte size of the upload or download." }, { - "name": "debug", - "type": "boolean", - "description": "If the action was run in debug mode or not" + "name": "codeTransformUploadId", + "type": "string", + "description": "A unique upload ID for S3" }, { - "name": "httpMethod", + "name": "codeTransformVCSViewerSrcComponents", "type": "string", - "description": "Any valid HTTP method (GET/HEAD/etc)" + "description": "Names of components that can initiate the diff viewer", + "allowedValues": [ + "toastNotification", + "treeView", + "treeViewHeader" + ] }, { - "name": "oldVersion", - "type": "string", - "description": "The old version of something. Useful when updating dependent resources." + "name": "codewhispererAcceptedTokens", + "type": "int", + "description": "The metrics accepted on suggested CodeWhisperer code" }, { - "name": "update", - "type": "boolean", - "description": "If the operation was an update or not" + "name": "codewhispererAllCompletionsLatency", + "type": "double", + "description": "The time it takes for the last GenerateCompletions response to be received after plugin makes a first call to GenerateCompletions API." }, { - "name": "schemaLanguage", + "name": "codewhispererAutomatedTriggerType", "type": "string", - "allowedValues": ["Java8", "Python36", "TypeScript3"], - "description": "Languages targeted by the schemas service" + "description": "The type of the Automated trigger to send request to CodeWhisperer service", + "allowedValues": [ + "KeyStrokeCount", + "SpecialCharacters", + "Enter", + "IntelliSenseAcceptance", + "IdleTime", + "Classifier" + ] }, { - "name": "sessionDuration", + "name": "codewhispererCharactersAccepted", "type": "int", - "description": "Length of time, in milliseconds, that an authentication session has lived for. Useful for determining how frequently a user has to reauthenticate." + "description": "The number of characters user has accepted through partial acceptance." }, { - "name": "language", - "type": "string", - "description": "Language used for the project." + "name": "codewhispererCharactersRecommended", + "type": "int", + "description": "The number of characters originally recommended to the user in partial acceptance scenario." }, { - "name": "workflowToken", - "type": "string", - "description": "A token used for flow metrics to link calls together" + "name": "codewhispererClassifierResult", + "type": "double", + "description": "The result from Classifier trigger." }, { - "name": "enabled", - "type": "boolean", - "description": "True if turned on, false if turned off" + "name": "codewhispererClassifierThreshold", + "type": "double", + "description": "The threshold of Classifier trigger." }, { - "name": "credentialSourceId", - "type": "string", - "description": "Where credentials are stored or retrieved from", - "allowedValues": ["sharedCredentials", "sdkStore", "ec2", "ecs", "envVars", "awsId", "iamIdentityCenter", "memory", "other"] + "name": "codewhispererCodeScanBuildPayloadBytes", + "type": "int", + "description": "The uncompressed payload size in bytes of the build files in customer project context sent for security scan" }, { - "name": "credentialType", - "type": "string", - "description": "The type of credential that was selected", - "allowedValues": [ - "staticProfile", - "staticSessionProfile", - "credentialProcessProfile", - "assumeRoleProfile", - "assumeMfaRoleProfile", - "assumeSamlRoleProfile", - "ssoProfile", - "ecsMetatdata", - "ec2Metadata", - "bearerToken", - "other" - ] + "name": "codewhispererCodeScanBuildZipFileBytes", + "type": "int", + "description": "The compressed payload size of built jars in bytes of customer project context sent for security scan. This is only applicable for Java project" }, { - "name": "partitionId", + "name": "codewhispererCodeScanIssuesWithFixes", + "type": "int", + "description": "The number of security issues detected with suggested fixes" + }, + { + "name": "codewhispererCodeScanJobId", "type": "string", - "description": "The ID of the partition that was selected" + "description": "The ID of the security scan job" }, { - "name": "initialDeploy", - "type": "boolean", - "description": "Whether or not the deploy targets a new destination (true) or an existing destination (false)" + "name": "codewhispererCodeScanLines", + "type": "int", + "description": "How many lines of code being sent for security scan" }, { - "name": "framework", - "type": "string", - "description": "Application framework being used" + "name": "codewhispererCodeScanProjectBytes", + "type": "double", + "description": "The total size in bytes of customer project to perform security scan on" }, { - "name": "xrayEnabled", - "type": "boolean", - "description": "Whether or not AWS X-Ray is enabled" + "name": "codewhispererCodeScanSrcPayloadBytes", + "type": "int", + "description": "The uncompressed payload size in bytes of the source files in customer project context sent for security scan" }, { - "name": "enhancedHealthEnabled", - "type": "boolean", - "description": "Whether or not Elastic Beanstalk enhanced health reporting and monitoring is being used" + "name": "codewhispererCodeScanSrcZipFileBytes", + "type": "int", + "description": "The compressed payload size of source files in bytes of customer project context sent for security scan" }, { - "name": "databaseEngine", - "type": "string", - "description": "The database engine used (mysql/postgres/redshift)" + "name": "codewhispererCodeScanTotalIssues", + "type": "int", + "description": "The number of security issues been detected" }, { - "name": "databaseCredentials", + "name": "codewhispererCompletionType", "type": "string", - "allowedValues": ["IAM", "SecretsManager"], - "description": "How the database credentials are being retrieved" + "description": "Completion Type of the inference results returned from CodeWhisperer model layer", + "allowedValues": [ + "Line", + "Block" + ] }, { - "name": "sqsQueueType", - "allowedValues": ["standard", "fifo"], - "description": "The type of an SQS Queue" + "name": "codewhispererCredentialFetchingLatency", + "type": "double", + "description": "The time it takes to get the Sono/SSO credential for the invocation." }, { - "name": "presigned", - "type": "boolean", - "description": "Whether or not it was a presigned request" + "name": "codewhispererCursorOffset", + "type": "int", + "description": "cursor location offset in the editor when invoking CodeWhisperer for recommendation" }, { - "name": "platform", + "name": "codewhispererCustomizationArn", "type": "string", - "description": "Language-specific identification. Examples: v4.6.1, netcoreapp3.1, nodejs12.x. Not AWS Lambda specific. Allows for additional details when other fields are opaque, such as the Lambda runtime value 'provided'." - }, - { - "name": "insightsDialogOpenSource", - "allowedValues": ["explorer", "resultsWindow", "logGroup"], - "description": "Dialog open trigger source location" + "description": "The currently selected customization arn(None if using the base model)" }, { - "name": "insightsQueryTimeType", - "allowedValues": ["relative", "absolute"], - "description": "User-selected time range type while starting an insights query" + "name": "codewhispererEndToEndLatency", + "type": "double", + "description": "The time it takes for the first completion to be shown in the IDE after the user performs the CW trigger action." }, { - "name": "insightsQueryStringType", - "allowedValues": ["insights", "searchTerm"], - "description": "User-specified search string type while starting an insights query" + "name": "codewhispererFeatureEvaluations", + "type": "string", + "description": "Feature assignments for a particular user" }, { - "name": "ec2ConnectionType", - "allowedValues": ["remoteDesktop", "ssh", "scp"], - "description": "Ways to connect to an EC2 Instance" + "name": "codewhispererFirstCompletionLatency", + "type": "double", + "description": "The time it takes for the response to be received after the plugin makes a first GenerateCompletions API call." }, { - "name": "ec2InstanceState", - "allowedValues": ["start", "stop", "reboot", "terminate"], - "description": "Actions that can affect an EC2 Instance state" + "name": "codewhispererFirstRequestId", + "type": "string", + "description": "The request id of the first request in a paginated session." }, { - "name": "ecsLaunchType", - "allowedValues": ["ec2", "fargate"], - "description": "Infrastructure type used by ECS tasks and services" + "name": "codewhispererGettingStartedTask", + "type": "string", + "description": "The task type selected by the user in getting started page", + "allowedValues": [ + "autoTrigger", + "manualTrigger", + "commentAsPrompt", + "unitTest", + "navigation" + ] }, { - "name": "ecsExecuteCommandType", - "allowedValues": ["command", "shell"], - "description": "Type of execution selected while running the execute command" + "name": "codewhispererImportRecommendationEnabled", + "type": "boolean", + "description": "Whether Import Recommendation is enabled." }, { - "name": "ecrDeploySource", - "allowedValues": ["dockerfile", "tag"], - "description": "The source content specified in the ECR deployment request" + "name": "codewhispererIsPartialAcceptance", + "type": "boolean", + "description": "If user has accepted only part of the recommendation or not." }, { - "name": "dynamoDbFetchType", - "allowedValues": ["scan", "query"], - "description": "The type of fetch being performed" + "name": "codewhispererLanguage", + "type": "string", + "description": "Programming language of the CodeWhisperer recommendation", + "allowedValues": [ + "java", + "python", + "javascript", + "plaintext", + "jsx", + "typescript", + "tsx", + "csharp", + "c", + "cpp", + "go", + "kotlin", + "php", + "ruby", + "rust", + "scala", + "shell", + "sql", + "json", + "jsonc", + "yaml", + "yml", + "hcl", + "tf" + ] }, { - "name": "dynamoDbIndexType", - "allowedValues": ["primary", "localSecondary", "globalSecondary"], - "description": "The type of index being hit for the query/scan operation" + "name": "codewhispererLastSuggestionIndex", + "type": "int", + "description": "The last index of recommendation from a particular response" }, { - "name": "dynamoDbTarget", - "allowedValues": ["table", "tableProperties", "tableStream"], - "description": "The type of DynamoDB entity referenced by a metric or operation" + "name": "codewhispererLineNumber", + "type": "int", + "description": "The line number of the cursor when the event happens" }, { - "name": "resourceType", - "type": "string", - "description": "The dynamic resource type being interacted with" + "name": "codewhispererModificationPercentage", + "type": "double", + "description": "The percentage of user modifications on the suggested code" }, { - "name": "dynamicResourceOperation", - "allowedValues": ["Create", "Update", "Delete"], - "description": "The dynamic resource operation being executed" + "name": "codewhispererPaginationProgress", + "type": "int", + "description": "The number of recommendations received so far when user makes a decision" }, { - "name": "experimentState", - "type": "string", - "allowedValues": ["activated", "deactivated"], - "description": "The experiment action taken action taken" + "name": "codewhispererPartialAcceptanceCount", + "type": "int", + "description": "The number of times the user accept part of the recommendations." }, { - "name": "experimentId", - "type": "string", - "description": "The id of the experiment being activated or deactivated" + "name": "codewhispererPercentage", + "type": "int", + "description": "The percentage of acceptance on suggested CodeWhisperer code on the overall code" }, { - "name": "settingId", - "type": "string", - "description": "The id of the setting being changed. Consistent namespace should be used for the id, e.g. codewhisperer_autoSuggestionActivation" + "name": "codewhispererPostprocessingLatency", + "type": "double", + "description": "The time it takes for the first completions to be displayed in the IDE after the plugin receives the initial Completions object." }, { - "name": "settingState", - "type": "string", - "description": "The state of the setting being changed to. This should not be recorded for free-form settings like file-system paths. Instead, stick to things like flags, numbers, and enums." + "name": "codewhispererPreprocessingLatency", + "type": "double", + "description": "The time it takes for the plugin to make the first GenerateCompletions API call after the user performs the CW trigger action." }, { - "name": "toolId", + "name": "codewhispererPreviousSuggestionState", "type": "string", - "description": "The tool being installed", - "allowedValues": ["session-manager-plugin", "dotnet-lambda-deploy", "dotnet-deploy-cli", "aws-cli", "sam-cli"] + "description": "The aggregated user decision from previous trigger. ", + "allowedValues": [ + "Accept", + "Reject", + "Discard", + "Empty" + ] }, { - "name": "elementId", + "name": "codewhispererRequestId", "type": "string", - "description": "An identifier associated with a UI element" - }, - { - "name": "successCount", - "type": "int", - "description": "The number of successful operations" - }, - { - "name": "failedCount", - "type": "int", - "description": "The number of failed operations" + "description": "The ID of the request to CodeWhisperer service" }, { - "name": "codewhispererAcceptedTokens", - "type": "int", - "description": "The metrics accepted on suggested CodeWhisperer code" + "name": "codewhispererRuntime", + "type": "string", + "allowedValues": [ + "java8", + "java11", + "java16", + "python2", + "python3", + "javascript", + "unknown" + ], + "description": "the pre-defined set of values for runtime version of the language of CodeWhisperer recommendation" }, { - "name": "codewhispererAutomatedTriggerType", + "name": "codewhispererRuntimeSource", "type": "string", - "description": "The type of the Automated trigger to send request to CodeWhisperer service", - "allowedValues": ["KeyStrokeCount", "SpecialCharacters", "Enter", "IntelliSenseAcceptance", "IdleTime", "Classifier"] + "description": "the original (free-text) of the runtime version of the language of CodeWhisperer recommendation" }, - { - "name": "codewhispererCodeScanJobId", + "name": "codewhispererSessionId", "type": "string", - "description": "The ID of the security scan job" + "description": "The unique identifier for a CodeWhisperer session(which can contain multiple requests)" }, { - "name": "codewhispererCodeScanLines", + "name": "codewhispererSuggestionCount", "type": "int", - "description": "How many lines of code being sent for security scan" + "description": "The total number of code suggestions in a paginated session." }, { - "name": "codewhispererCodeScanProjectBytes", - "type": "double", - "description": "The total size in bytes of customer project to perform security scan on" + "name": "codewhispererSuggestionImportCount", + "type": "int", + "description": "The number of import statements included with recommendation." }, { - "name": "codewhispererCodeScanSrcPayloadBytes", + "name": "codewhispererSuggestionIndex", "type": "int", - "description": "The uncompressed payload size in bytes of the source files in customer project context sent for security scan" + "description": "The index for each suggestion, respectively, in the list of suggestions returned from service invocation" }, { - "name": "codewhispererCodeScanBuildPayloadBytes", + "name": "codewhispererSuggestionReferenceCount", "type": "int", - "description": "The uncompressed payload size in bytes of the build files in customer project context sent for security scan" + "description": "Number of references the particular suggestion is referenced with." }, { - "name": "codewhispererCodeScanSrcZipFileBytes", - "type": "int", - "description": "The compressed payload size of source files in bytes of customer project context sent for security scan" + "name": "codewhispererSuggestionReferences", + "type": "string", + "description": "The list of unique license names for a particular suggestion" }, { - "name": "codewhispererCodeScanBuildZipFileBytes", - "type": "int", - "description": "The compressed payload size of built jars in bytes of customer project context sent for security scan. This is only applicable for Java project" + "name": "codewhispererSuggestionState", + "type": "string", + "description": "User decision of each of the suggestion returned from CodeWhisperer", + "allowedValues": [ + "Accept", + "Reject", + "Discard", + "Ignore", + "Filter", + "Unseen", + "Empty" + ] }, { - "name": "contextTruncationDuration", - "type": "int", - "description": "Time taken for context truncation in milliseconds" + "name": "codewhispererSupplementalContextIsUtg", + "type": "boolean", + "description": "If the supplemental context is for test file(UTG) or src file" }, { - "name": "artifactsUploadDuration", - "type": "int", - "description": "Time taken to fetch the upload URL and upload the artifacts in milliseconds" + "name": "codewhispererSupplementalContextLatency", + "type": "double", + "description": "Latency to obtain supplemental context" }, { - "name": "codeScanServiceInvocationsDuration", + "name": "codewhispererSupplementalContextLength", "type": "int", - "description": "Time taken to invoke code scan service APIs in milliseconds" + "description": "Length of codewhisperer supplemental context extracted from files" }, { - "name": "codewhispererCodeScanTotalIssues", - "type": "int", - "description": "The number of security issues been detected" + "name": "codewhispererSupplementalContextStrategyId", + "type": "string", + "description": "Name tag or identifier for supplemental context fetching strategy being used for us to easier analyze corresponding acceptance rate" }, { - "name": "codewhispererCodeScanIssuesWithFixes", - "type": "int", - "description": "The number of security issues detected with suggested fixes" + "name": "codewhispererSupplementalContextTimeout", + "type": "boolean", + "description": "If the supplemental context fetching timeout or not" }, { - "name": "codewhispererCompletionType", - "type": "string", - "description": "Completion Type of the inference results returned from CodeWhisperer model layer", - "allowedValues": ["Line", "Block"] + "name": "codewhispererTimeSinceLastDocumentChange", + "type": "double", + "description": "The time from last document change to the current document change. " }, { - "name": "codewhispererCursorOffset", - "type": "int", - "description": "cursor location offset in the editor when invoking CodeWhisperer for recommendation" + "name": "codewhispererTimeSinceLastUserDecision", + "type": "double", + "description": "The time from last user decision to current invocation. " }, { - "name": "codewhispererCustomizationArn", - "type": "string", - "description": "The currently selected customization arn(None if using the base model)" + "name": "codewhispererTimeToFirstRecommendation", + "type": "double", + "description": "The time from user trigger to the first recommendation is received. " }, { - "name": "codewhispererFeatureEvaluations", - "type": "string", - "description": "Feature assignments for a particular user" + "name": "codewhispererTotalShownTime", + "type": "double", + "description": "The time that recommendations are shown to the user in a paginated session." }, { - "name": "codewhispererLanguage", + "name": "codewhispererTotalTokens", + "type": "int", + "description": "The metrics generated by the user and acceptance of suggested CodeWhisperer code in the language CodeWhisperer supports." + }, + { + "name": "codewhispererTriggerCharacter", "type": "string", - "description": "Programming language of the CodeWhisperer recommendation", - "allowedValues": ["java", "python", "javascript", "plaintext", "jsx", "typescript", "tsx", "csharp", - "c", "cpp", "go", "kotlin", "php", "ruby", "rust", "scala", "shell", "sql", "json", "jsonc", "yaml", "yml", "hcl", "tf"] + "description": "The character that triggered recommendation for special characters trigger." }, { - "name": "codewhispererGettingStartedTask", + "name": "codewhispererTriggerType", "type": "string", - "description": "The task type selected by the user in getting started page", + "description": "The type of the user trigger to send request to CodeWhisperer service", "allowedValues": [ - "autoTrigger", - "manualTrigger", - "commentAsPrompt", - "unitTest", - "navigation" + "OnDemand", + "AutoTrigger" ] }, { - "name": "codewhispererLastSuggestionIndex", - "type": "int", - "description": "The last index of recommendation from a particular response" - }, - { - "name": "codewhispererLineNumber", + "name": "codewhispererTypeaheadLength", "type": "int", - "description": "The line number of the cursor when the event happens" + "description": "The length of additional characters inputted by the user since the invocation. " }, { - "name": "codewhispererModificationPercentage", - "type": "double", - "description": "The percentage of user modifications on the suggested code" + "name": "codewhispererUserGroup", + "type": "string", + "description": "The user group identifier we assign to the customer and it should be unique identifier across different IDE platforms, i.e. Classifier, CrossFile etc." }, { - "name": "codewhispererPaginationProgress", - "type": "int", - "description": "The number of recommendations received so far when user makes a decision" + "name": "component", + "allowedValues": [ + "editor", + "viewer", + "filesystem", + "explorer", + "infobar", + "hover", + "webview", + "quickfix" + ], + "description": "The IDE or OS component used for the action. (Examples: S3 download to filesystem, S3 upload from editor, ...)" }, { - "name": "codewhispererPercentage", + "name": "contextTruncationDuration", "type": "int", - "description": "The percentage of acceptance on suggested CodeWhisperer code on the overall code" + "description": "Time taken for context truncation in milliseconds" }, { - "name": "codewhispererRequestId", + "name": "credentialModification", "type": "string", - "description": "The ID of the request to CodeWhisperer service" + "allowedValues": [ + "Add", + "Edit", + "Delete" + ], + "description": "The type of modification performed on the credentials" }, { - "name": "codewhispererRuntime", + "name": "credentialSourceId", "type": "string", - "allowedValues": ["java8", "java11", "java16", "python2", "python3", "javascript", "unknown"], - "description": "the pre-defined set of values for runtime version of the language of CodeWhisperer recommendation" + "description": "Where credentials are stored or retrieved from", + "allowedValues": [ + "sharedCredentials", + "sdkStore", + "ec2", + "ecs", + "envVars", + "awsId", + "iamIdentityCenter", + "memory", + "other" + ] }, { - "name": "codewhispererRuntimeSource", + "name": "credentialStartUrl", "type": "string", - "description": "the original (free-text) of the runtime version of the language of CodeWhisperer recommendation" + "description": "The start URL of current SSO connection" }, { - "name": "codewhispererSessionId", + "name": "credentialType", "type": "string", - "description": "The unique identifier for a CodeWhisperer session(which can contain multiple requests)" + "description": "The type of credential that was selected", + "allowedValues": [ + "staticProfile", + "staticSessionProfile", + "credentialProcessProfile", + "assumeRoleProfile", + "assumeMfaRoleProfile", + "assumeSamlRoleProfile", + "ssoProfile", + "ecsMetatdata", + "ec2Metadata", + "bearerToken", + "other" + ] }, { - "name": "codewhispererSuggestionIndex", - "type": "int", - "description": "The index for each suggestion, respectively, in the list of suggestions returned from service invocation" + "name": "databaseCredentials", + "type": "string", + "allowedValues": [ + "IAM", + "SecretsManager" + ], + "description": "How the database credentials are being retrieved" }, { - "name": "codewhispererSuggestionReferences", + "name": "databaseEngine", "type": "string", - "description": "The list of unique license names for a particular suggestion" + "description": "The database engine used (mysql/postgres/redshift)" }, { - "name": "codewhispererSuggestionReferenceCount", - "type": "int", - "description": "Number of references the particular suggestion is referenced with." + "name": "debug", + "type": "boolean", + "description": "If the action was run in debug mode or not" }, { - "name": "codewhispererSuggestionImportCount", - "type": "int", - "description": "The number of import statements included with recommendation." - }, - { - "name": "codewhispererSupplementalContextTimeout", - "type": "boolean", - "description": "If the supplemental context fetching timeout or not" - }, - { - "name": "codewhispererSupplementalContextIsUtg", - "type": "boolean", - "description": "If the supplemental context is for test file(UTG) or src file" + "name": "detectorId", + "type": "string", + "description": "The id of the detector which produced the code scan issue" }, { - "name": "codewhispererSupplementalContextLatency", + "name": "duration", "type": "double", - "description": "Latency to obtain supplemental context" - }, - { - "name": "codewhispererSupplementalContextLength", - "type": "int", - "description": "Length of codewhisperer supplemental context extracted from files" - }, - { - "name": "codewhispererSupplementalContextStrategyId", - "type": "string", - "description": "Name tag or identifier for supplemental context fetching strategy being used for us to easier analyze corresponding acceptance rate" + "description": "The duration of the operation in milliseconds" }, { - "name": "codewhispererImportRecommendationEnabled", - "type": "boolean", - "description": "Whether Import Recommendation is enabled." + "name": "dynamicResourceOperation", + "allowedValues": [ + "Create", + "Update", + "Delete" + ], + "description": "The dynamic resource operation being executed" }, { - "name": "codewhispererSuggestionState", - "type": "string", - "description": "User decision of each of the suggestion returned from CodeWhisperer", - "allowedValues": ["Accept", "Reject", "Discard", "Ignore", "Filter", "Unseen", "Empty"] + "name": "dynamoDbFetchType", + "allowedValues": [ + "scan", + "query" + ], + "description": "The type of fetch being performed" }, { - "name": "codewhispererTotalTokens", - "type": "int", - "description": "The metrics generated by the user and acceptance of suggested CodeWhisperer code in the language CodeWhisperer supports." + "name": "dynamoDbIndexType", + "allowedValues": [ + "primary", + "localSecondary", + "globalSecondary" + ], + "description": "The type of index being hit for the query/scan operation" }, { - "name": "codewhispererTriggerType", - "type": "string", - "description": "The type of the user trigger to send request to CodeWhisperer service", - "allowedValues": ["OnDemand", "AutoTrigger"] + "name": "dynamoDbTarget", + "allowedValues": [ + "table", + "tableProperties", + "tableStream" + ], + "description": "The type of DynamoDB entity referenced by a metric or operation" }, { - "name": "codewhispererFirstCompletionLatency", - "type": "double", - "description": "The time it takes for the response to be received after the plugin makes a first GenerateCompletions API call." + "name": "ec2ConnectionType", + "allowedValues": [ + "remoteDesktop", + "ssh", + "scp" + ], + "description": "Ways to connect to an EC2 Instance" }, { - "name": "codewhispererEndToEndLatency", - "type": "double", - "description": "The time it takes for the first completion to be shown in the IDE after the user performs the CW trigger action." + "name": "ec2InstanceState", + "allowedValues": [ + "start", + "stop", + "reboot", + "terminate" + ], + "description": "Actions that can affect an EC2 Instance state" }, { - "name": "codewhispererAllCompletionsLatency", - "type": "double", - "description": "The time it takes for the last GenerateCompletions response to be received after plugin makes a first call to GenerateCompletions API." + "name": "ecrDeploySource", + "allowedValues": [ + "dockerfile", + "tag" + ], + "description": "The source content specified in the ECR deployment request" }, { - "name": "codewhispererPostprocessingLatency", - "type": "double", - "description": "The time it takes for the first completions to be displayed in the IDE after the plugin receives the initial Completions object." + "name": "ecsExecuteCommandType", + "allowedValues": [ + "command", + "shell" + ], + "description": "Type of execution selected while running the execute command" }, { - "name": "codewhispererPreprocessingLatency", - "type": "double", - "description": "The time it takes for the plugin to make the first GenerateCompletions API call after the user performs the CW trigger action." + "name": "ecsLaunchType", + "allowedValues": [ + "ec2", + "fargate" + ], + "description": "Infrastructure type used by ECS tasks and services" }, { - "name": "codewhispererCredentialFetchingLatency", - "type": "double", - "description": "The time it takes to get the Sono/SSO credential for the invocation." + "name": "elementId", + "type": "string", + "description": "An identifier associated with a UI element" }, - { - "name": "codewhispererIsPartialAcceptance", + "name": "enabled", "type": "boolean", - "description": "If user has accepted only part of the recommendation or not." - }, - { - "name": "codewhispererPartialAcceptanceCount", - "type": "int", - "description": "The number of times the user accept part of the recommendations." + "description": "True if turned on, false if turned off" }, { - "name": "codewhispererCharactersAccepted", - "type": "int", - "description": "The number of characters user has accepted through partial acceptance." + "name": "enabledAuthConnections", + "type": "string", + "description": "Comma delimited list of enabled auth connections" }, { - "name": "codewhispererCharactersRecommended", - "type": "int", - "description": "The number of characters originally recommended to the user in partial acceptance scenario." + "name": "enhancedHealthEnabled", + "type": "boolean", + "description": "Whether or not Elastic Beanstalk enhanced health reporting and monitoring is being used" }, { - "name": "codewhispererFirstRequestId", + "name": "errorCode", "type": "string", - "description": "The request id of the first request in a paginated session." + "description": "User-friendly error codes describing a failed operation" }, { - "name": "codewhispererSuggestionCount", - "type": "int", - "description": "The total number of code suggestions in a paginated session." + "name": "eventBridgeSchema", + "type": "string", + "description": "The name of the EventBridge Schema used in the operation" }, { - "name": "codewhispererTotalShownTime", - "type": "double", - "description": "The time that recommendations are shown to the user in a paginated session." + "name": "experimentId", + "type": "string", + "description": "The id of the experiment being activated or deactivated" }, { - "name": "codewhispererTriggerCharacter", + "name": "experimentState", "type": "string", - "description": "The character that triggered recommendation for special characters trigger." + "allowedValues": [ + "activated", + "deactivated" + ], + "description": "The experiment action taken action taken" }, { - "name": "codewhispererTypeaheadLength", + "name": "failedCount", "type": "int", - "description": "The length of additional characters inputted by the user since the invocation. " + "description": "The number of failed operations" }, { - "name": "codewhispererTimeSinceLastDocumentChange", - "type": "double", - "description": "The time from last document change to the current document change. " + "name": "featureId", + "type": "string", + "description": "The id of the feature the user is interacting in.", + "allowedValues": [ + "awsExplorer", + "codewhisperer", + "codecatalyst" + ] }, { - "name": "codewhispererTimeSinceLastUserDecision", - "type": "double", - "description": "The time from last user decision to current invocation. " + "name": "filenameExt", + "type": "string", + "description": "Filename extension (examples: .txt, .yml, .yaml, .asl.yaml, ...), or empty string if the filename does not contain dot (.) between two chars." }, { - "name": "codewhispererTimeToFirstRecommendation", - "type": "double", - "description": "The time from user trigger to the first recommendation is received. " + "name": "findingId", + "type": "string", + "description": "The id of a security finding from a code scan" }, { - "name": "codewhispererPreviousSuggestionState", + "name": "framework", "type": "string", - "description": "The aggregated user decision from previous trigger. ", - "allowedValues": [ - "Accept", - "Reject", - "Discard", - "Empty" - ] + "description": "Application framework being used" }, { - "name": "codewhispererClassifierResult", - "type": "double", - "description": "The result from Classifier trigger." + "name": "hasTextFilter", + "type": "boolean", + "description": "A text based filter was used" }, { - "name": "codewhispererClassifierThreshold", - "type": "double", - "description": "The threshold of Classifier trigger." + "name": "hasTimeFilter", + "type": "boolean", + "description": "A time based filter was used" }, { - "name": "codewhispererUserGroup", + "name": "httpMethod", "type": "string", - "description": "The user group identifier we assign to the customer and it should be unique identifier across different IDE platforms, i.e. Classifier, CrossFile etc." + "description": "Any valid HTTP method (GET/HEAD/etc)" }, { - "name": "findingId", - "type": "string", - "description": "The id of a security finding from a code scan" + "name": "httpStatusCode", + "type": "string", + "description": "Describes the HTTP status code for request made. The semantics are contextual based off of other fields (e.g. `requestId`)" }, { - "name": "detectorId", - "type": "string", - "description": "The id of the detector which produced the code scan issue" + "name": "iamResourceType", + "allowedValues": [ + "group", + "role", + "user" + ], + "description": "The type of IAM resource referenced by a metric or operation" }, { - "name": "ruleId", + "name": "id", "type": "string", - "description": "The id of the rule which produced the code scan issue" + "description": "A generic ID metadata" }, { "name": "includesFix", @@ -804,74 +1009,75 @@ "description": "Whether the security issue includes a suggested fix" }, { - "name": "syncedResources", - "type": "string", - "description": "Describes which parts of an application (that we know of) were synced to the cloud. \"Code\" resources follow the SAM spec: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html", - "allowedValues": ["AllResources", "CodeOnly"] + "name": "initialDeploy", + "type": "boolean", + "description": "Whether or not the deploy targets a new destination (true) or an existing destination (false)" }, { - "name": "credentialStartUrl", - "type": "string", - "description": "The start URL of current SSO connection" + "name": "insightsDialogOpenSource", + "allowedValues": [ + "explorer", + "resultsWindow", + "logGroup" + ], + "description": "Dialog open trigger source location" }, { - "name": "codecatalyst_createDevEnvironmentRepoType", - "type": "string", - "description": "Type of Git repository provided to the Amazon CodeCatalyst dev environment create wizard", + "name": "insightsQueryStringType", "allowedValues": [ - "linked", - "unlinked", - "none" - ] + "insights", + "searchTerm" + ], + "description": "User-specified search string type while starting an insights query" }, { - "name": "codecatalyst_updateDevEnvironmentLocationType", - "type": "string", - "description": "Locality of the Amazon CodeCatalyst update dev environment request (i.e., from the thin client or the local IDE instance)", + "name": "insightsQueryTimeType", "allowedValues": [ - "remote", - "local" - ] + "relative", + "absolute" + ], + "description": "User-selected time range type while starting an insights query" }, { - "name": "userId", + "name": "invalidInputFields", "type": "string", - "description": "Opaque AWS Builder ID identifier" + "description": "Comma delimited list of input fields that user has invalid inputs typed. e.g. 'profileName,accessKey,startUrl'" }, { - "name": "codecatalyst_devEnvironmentWorkflowError", - "type": "string", - "description": "Workflow error name" + "name": "isAggregated", + "type": "boolean", + "description": "Whether this was an individual point or an aggregation of points." }, { - "name": "codecatalyst_devEnvironmentWorkflowStep", - "type": "string", - "description": "Workflow step name" + "name": "lambdaArchitecture", + "allowedValues": [ + "x86_64", + "arm64" + ], + "description": "Lambda architecture identifier" }, { - "name": "authConnectionsCount", - "type": "int", - "description": "Current number of authentication connections the user has" + "name": "lambdaPackageType", + "allowedValues": [ + "Zip", + "Image" + ], + "description": "The Lambda Package type of the function" }, { - "name": "newAuthConnectionsCount", - "type": "int", - "description": "Number of new authentication connections the user has" + "name": "language", + "type": "string", + "description": "Language used for the project." }, { - "name": "featureId", + "name": "name", "type": "string", - "description": "The id of the feature the user is interacting in.", - "allowedValues": [ - "awsExplorer", - "codewhisperer", - "codecatalyst" - ] + "description": "A generic name metadata" }, { - "name": "enabledAuthConnections", - "type": "string", - "description": "Comma delimited list of enabled auth connections" + "name": "newAuthConnectionsCount", + "type": "int", + "description": "Number of new authentication connections the user has" }, { "name": "newEnabledAuthConnections", @@ -879,3169 +1085,4494 @@ "description": "Comma delimited list of NEW enabled auth connections" }, { - "name": "isAggregated", - "type": "boolean", - "description": "Whether this was an individual point or an aggregation of points." - }, - { - "name": "invalidInputFields", + "name": "oldVersion", "type": "string", - "description": "Comma delimited list of input fields that user has invalid inputs typed. e.g. 'profileName,accessKey,startUrl'" + "description": "The old version of something. Useful when updating dependent resources." }, { - "name": "userChoice", + "name": "partitionId", "type": "string", - "description": "User selection from a predefined menu (not user-provided input)" + "description": "The ID of the partition that was selected" }, { - "name": "amazonqConversationId", + "name": "platform", "type": "string", - "description": "Uniquely identifies a message with which the user interacts." - }, - { - "name": "amazonqGenerateApproachIteration", - "type": "double", - "description": "Order of approach iteration. For initial code changes it is 0" - }, - { - "name": "amazonqGenerateApproachLatency", - "type": "double", - "description": "The time it takes to generate approach response" - }, - { - "name": "amazonqGenerateCodeIteration", - "type": "double", - "description": "Order of code generation iteration. For initial code changes it is 0" + "description": "Language-specific identification. Examples: v4.6.1, netcoreapp3.1, nodejs12.x. Not AWS Lambda specific. Allows for additional details when other fields are opaque, such as the Lambda runtime value 'provided'." }, { - "name": "amazonqGenerateCodeResponseLatency", - "type": "double", - "description": "The time it takes to generate code generation response" + "name": "presigned", + "type": "boolean", + "description": "Whether or not it was a presigned request" }, { - "name": "amazonqCodeGenerationResult", + "name": "reason", "type": "string", - "description": "Captures if code generation result is Complete, Failed, etc." - }, - { - "name": "amazonqNumberOfFilesGenerated", - "type": "double", - "description": "Captures the number of files generated as a part of code generation iteration" - }, - { - "name": "amazonqNumberOfFilesAccepted", - "type": "double", - "description": "Captures the number of accepted files as a part of code generation iteration" + "description": "The reason for a metric or exception depending on context. It describes a certain theme of errors usually the exception class name eg. FileIOException" }, { - "name": "amazonqRepositorySize", - "type": "double", - "description": "Captures the size of the source code" + "name": "requestId", + "type": "string", + "description": "A generic request ID field. The semantics are contextual based off of other fields (e.g. `requestServiceType`). For example, an event with `requestServiceType: s3` means that the request ID is associated with an S3 API call. Events that cover mutliple API calls should use the request ID of the most recent call." }, { - "name": "amazonqUploadIntent", + "name": "requestServiceType", "type": "string", - "description": "The intent of the upload", - "allowedValues": ["TRANSFORMATION", "TASK_ASSIST_PLANNING"] + "description": "Per-request service identifier. Unlike `serviceType` (which describes the originator of the request), this describes the request itself." }, { - "name": "amazonqNumberOfReferences", - "type": "double", - "description": "Captures the number of references" + "name": "resourceType", + "type": "string", + "description": "The dynamic resource type being interacted with" }, { - "name": "amazonqEndOfTheConversationLatency", - "type": "double", - "description": "Total time from start to end" + "name": "result", + "allowedValues": [ + "Succeeded", + "Failed", + "Cancelled" + ], + "description": "The result of the operation" }, { - "name": "codeTransformJavaSourceVersionsAllowed", + "name": "ruleId", "type": "string", - "description": "Allowed Java versions to transform from", - "allowedValues": [ - "JDK_1_8", - "JDK_11", - "Other" - ] + "description": "The id of the rule which produced the code scan issue" }, { - "name": "codeTransformJavaTargetVersionsAllowed", + "name": "runtime", "type": "string", - "description": "Allowed Java versions to transform to", "allowedValues": [ - "JDK_17" - ] + "dotnetcore3.1", + "dotnetcore2.1", + "dotnet5.0", + "dotnet6", + "dotnet7", + "dotnet8", + "nodejs20.x", + "nodejs18.x", + "nodejs16.x", + "nodejs14.x", + "nodejs12.x", + "nodejs10.x", + "nodejs8.10", + "ruby2.5", + "java8", + "java8.al2", + "java11", + "java17", + "java21", + "go1.x", + "python3.12", + "python3.11", + "python3.10", + "python3.9", + "python3.8", + "python3.7", + "python3.6", + "python2.7" + ], + "description": "The lambda runtime" }, { - "name": "codeTransformJobId", + "name": "runtimeString", "type": "string", - "description": "The ID of the job currently running" + "description": "A free-text field to record runtimes that may be separate from Lambda runtimes" }, { - "name": "codeTransformStatus", + "name": "schemaLanguage", "type": "string", - "description": "The current transformation job's status" + "allowedValues": [ + "Java8", + "Python36", + "TypeScript3" + ], + "description": "Languages targeted by the schemas service" }, { - "name": "codeTransformRequestId", + "name": "serviceType", "type": "string", - "description": "The API request ID" + "description": "The name of the AWS service acted on. These values come from the AWS SDK. To find them in the JAVA SDK search for SERVICE_NAME in each service client, or look for serviceId in metadata in the service2.json" }, { - "name": "codeTransformTotalByteSize", + "name": "sessionDuration", "type": "int", - "description": "The byte size of the upload or download." + "description": "Length of time, in milliseconds, that an authentication session has lived for. Useful for determining how frequently a user has to reauthenticate." }, { - "name": "codeTransformUploadId", + "name": "settingId", "type": "string", - "description": "A unique upload ID for S3" + "description": "The id of the setting being changed. Consistent namespace should be used for the id, e.g. codewhisperer_autoSuggestionActivation" }, { - "name": "codeTransformResultStatusMessage", + "name": "settingState", "type": "string", - "description": "The outcome of the transformation" + "description": "The state of the setting being changed to. This should not be recorded for free-form settings like file-system paths. Instead, stick to things like flags, numbers, and enums." }, { - "name": "codeTransformLocalJavaVersion", + "name": "source", "type": "string", - "description": "The Java version on the user's machine" + "description": "The source of the operation" }, { - "name": "codeTransformLocalMavenVersion", - "type": "string", - "description": "The Maven version on the user's machine" + "name": "sqsQueueType", + "allowedValues": [ + "standard", + "fifo" + ], + "description": "The type of an SQS Queue" }, { - "name": "codeTransformRuntimeError", - "type": "string", - "description": "Any runtime errors" + "name": "successCount", + "type": "int", + "description": "The number of successful operations" }, { - "name": "codeTransformApiErrorMessage", + "name": "syncedResources", "type": "string", - "description": "Any API-specific errors" + "description": "Describes which parts of an application (that we know of) were synced to the cloud. \"Code\" resources follow the SAM spec: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-sync.html", + "allowedValues": [ + "AllResources", + "CodeOnly" + ] }, { - "name": "codeTransformSessionId", + "name": "templateName", "type": "string", - "description": "Represents the IDE session from which users start the transformation process" - }, - { - "name": "codeTransformRunTimeLatency", - "type": "int", - "description": "A millisecond value of the total run time" + "description": "Generic name of a template" }, { - "name": "codeTransformStartSrcComponents", + "name": "toolId", "type": "string", - "description": "Names of components that can start a transformation", + "description": "The tool being installed", "allowedValues": [ - "devToolsStartButton", - "bottomPanelSideNavButton", - "chatPrompt" + "session-manager-plugin", + "dotnet-lambda-deploy", + "dotnet-deploy-cli", + "aws-cli", + "sam-cli" ] }, { - "name": "codeTransformCancelSrcComponents", - "type": "string", - "description": "Names of components that can cancel a transformation", - "allowedValues": [ - "apiError", - "loadingPanelStopButton", - "devToolsStopButton", - "bottomPanelSideNavButton" - ] + "name": "update", + "type": "boolean", + "description": "If the operation was an update or not" }, { - "name": "codeTransformVCSViewerSrcComponents", + "name": "url", "type": "string", - "description": "Names of components that can initiate the diff viewer", - "allowedValues": [ - "toastNotification", - "treeView", - "treeViewHeader" - ] + "description": "The url associated with a metric" }, { - "name": "codeTransformPatchViewerCancelSrcComponents", + "name": "userChoice", "type": "string", - "description": "Names of components that can cancel the diff viewer", - "allowedValues": [ - "apiError", - "cancelButton" - ] + "description": "User selection from a predefined menu (not user-provided input)" }, { - "name": "codeTransformApiNames", + "name": "userId", "type": "string", - "description": "Names of allowed API calls", - "allowedValues": [ - "StartTransformation", - "StopTransformation", - "GetTransformation", - "GetTransformationPlan", - "UploadZip", - "CreateUploadUrl", - "ExportResultArchive" - ] + "description": "Opaque AWS Builder ID identifier" }, { - "name": "codeTransformPreValidationError", + "name": "variant", "type": "string", - "description": "Names of the pre-validation errors that can occur", - "allowedValues": [ - "NoPom", - "NoJavaProject", - "MixedLanguages", - "UnsupportedJavaVersion", - "ProjectJDKDiffersFromMavenJDK", - "NonMavenProject", - "EmptyProject", - "NonSsoLogin", - "RemoteRunProject" - ] + "description": "A generic variant metadata" }, { - "name": "codeTransformMavenBuildCommand", + "name": "version", "type": "string", - "description": "Type of maven command", - "allowedValues": [ - "mvnw.cmd", - "mvnw", - "mvn", - "IDEBundledMaven" - ] + "description": "A generic version metadata" + }, + { + "name": "workflowToken", + "type": "string", + "description": "A token used for flow metrics to link calls together" + }, + { + "name": "xrayEnabled", + "type": "boolean", + "description": "Whether or not AWS X-Ray is enabled" } ], "metrics": [ { - "name": "apigateway_copyUrl", - "description": "Copying an API Gateway remote URL", - "metadata": [{ "type": "result" }] - }, - { - "name": "apigateway_invokeLocal", - "description": "Invoking one simulated API Gateway call using the SAM cli", + "name": "amazonq_approachInvoke", + "description": "Captures Approach generation process", "metadata": [ - { "type": "runtime", "required": false }, - { "type": "httpMethod", "required": false }, - { "type": "result" }, - { "type": "debug" }, - { "type": "lambdaArchitecture", "required": false } + { + "type": "amazonqConversationId" + }, + { + "type": "amazonqGenerateApproachIteration" + }, + { + "type": "amazonqGenerateApproachLatency" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "apigateway_invokeRemote", - "description": "Calling a remote API Gateway", - "metadata": [{ "type": "result" }, { "type": "httpMethod", "required": false }] - }, - { - "name": "apigateway_startLocalServer", - "description": "Called when starting a local API Gateway server simulator with SAM. Only called when starting it for long running testing, not for single invokes", - "metadata": [{ "type": "result" }] - }, - { - "name": "apprunner_openServiceUrl", - "description": "Open the service URL in a browser" - }, - { - "name": "apprunner_copyServiceUrl", - "description": "Copy the service URL" - }, - { - "name": "apprunner_createService", - "description": "Create an App Runner service", + "name": "amazonq_approachThumbsDown", + "description": "User clicked on the thumbs down button to say that they are unsatisfied", + "unit": "Count", "metadata": [ - { "type": "result" }, - { "type": "appRunnerServiceSource" }, - { "type": "reason", "required": false } + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "apprunner_pauseService", - "description": "Pause a running App Runner service", - "metadata": [{ "type": "result" }] - }, - { - "name": "apprunner_resumeService", - "description": "Resume a paused App Runner service", - "metadata": [{ "type": "result" }] - }, - { - "name": "apprunner_deleteService", - "description": "Delete an App Runner service", + "name": "amazonq_approachThumbsUp", + "description": "User clicked on the thumbs up button, to mention that they are satisfied", + "unit": "Count", "metadata": [ - { "type": "result" }, - { "type": "appRunnerServiceStatus", "required": false } + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "apprunner_startDeployment", - "description": "Start a new deployment for an App Runner service", - "metadata": [{ "type": "result" }] - }, - { - "name": "apprunner_viewApplicationLogs", - "description": "View the App Runner application logs (the logs for your running service)" - }, - { - "name": "apprunner_viewServiceLogs", - "description": "View the App Runner service logs (the logs produced by App Runner)" - }, - { - "name": "auth_addConnection", - "description": "Captures the result of adding a new connection in the 'Add New Connection' workflow", + "name": "amazonq_codeGenerationInvoke", + "description": "Captures Code Generation generation process", "metadata": [ - { "type": "source"}, - { "type": "featureId"}, - { "type": "credentialSourceId"}, - { "type": "isAggregated"}, - { "type": "result"}, - { "type": "attempts", "required": false}, - { "type": "invalidInputFields", "required": false}, - { "type": "reason", "required": false} + { + "type": "amazonqConversationId" + }, + { + "type": "amazonqGenerateCodeIteration" + }, + { + "type": "amazonqGenerateCodeResponseLatency" + }, + { + "type": "amazonqCodeGenerationResult" + }, + { + "type": "amazonqNumberOfFilesGenerated", + "required": false + }, + { + "type": "amazonqRepositorySize" + }, + { + "type": "amazonqNumberOfReferences", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "auth_addedConnections", - "description": "The diff/change in Auth connections", + "name": "amazonq_codeGenerationThumbsDown", + "description": "User clicked on the thumbs down button to say that they are unsatisfied", + "unit": "Count", "metadata": [ - { "type": "source"}, - { "type": "authConnectionsCount"}, - { "type": "newAuthConnectionsCount"}, - { "type": "enabledAuthConnections"}, - { "type": "newEnabledAuthConnections"}, - { "type": "attempts"}, - { "type": "result"}, - { "type": "reason", "required": false} + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "auth_switchRoles", - "description": "Called when user clicks yes or no to switch role upon adding new connection", + "name": "amazonq_codeGenerationThumbsUp", + "description": "User clicked on the thumbs up button to say that they are unsatisfied", + "unit": "Count", "metadata": [ - { "type": "authConnectionsCount"}, - { "type": "userChoice"} + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "aws_copyArn", - "description": "Copy the ARN of an AWS resource", - "metadata": [{ "type": "serviceType" }] - }, - { - "name": "aws_deleteResource", - "description": "Delete an AWS resource", - "metadata": [{ "type": "serviceType" }, { "type": "result" }] - }, - { - "name": "aws_setCredentials", - "description": "Select a credentials profile", + "name": "amazonq_createUpload", + "description": "Captures createUploadUrl invocation process", "metadata": [ - { "type": "credentialType", "required": false }, - { "type": "credentialSourceId", "required": false } + { + "type": "amazonqConversationId" + }, + { + "type": "amazonqRepositorySize", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "amazonqUploadIntent", + "required": false + } ] }, { - "name": "aws_setRegion", - "description": "A region change occurred", - "metadata": [] - }, - { - "name": "aws_setPartition", - "description": "A partition change occurred", - "metadata": [{ "type": "partitionId" }] + "name": "amazonq_endChat", + "description": "Captures end of the conversation with amazonq /dev", + "metadata": [ + { + "type": "amazonqConversationId" + }, + { + "type": "amazonqEndOfTheConversationLatency", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } + ] }, { - "name": "aws_openCredentials", - "description": "Open the credentials file", - "metadata": [{ "type": "result" }] + "name": "amazonq_isAcceptedCodeChanges", + "description": "User applied code changes generated for the task.", + "metadata": [ + { + "type": "enabled" + }, + { + "type": "amazonqConversationId" + }, + { + "type": "amazonqNumberOfFilesAccepted" + }, + { + "type": "credentialStartUrl", + "required": false + } + ] }, { - "name": "aws_openUrl", - "description": "Opens a url", + "name": "amazonq_isApproachAccepted", + "description": "User has accepted the approach generated", "metadata": [ - { "type": "result" }, - { "type": "url", "required": false }, - { "type": "source", "required": false } + { + "type": "enabled" + }, + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "aws_saveCredentials", - "description": "Save credentials" + "name": "amazonq_isProvideFeedbackForCodeGen", + "description": "User asked to regenerate code generation with a comment", + "metadata": [ + { + "type": "enabled" + }, + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } + ] }, { - "name": "aws_modifyCredentials", - "description": "Modify credentials (e.g. Add, Edit, Delete)", + "name": "amazonq_isReviewedChanges", + "description": "User reviewed changes", + "passive": true, "metadata": [ - { "type": "result" }, - { "type": "credentialModification" }, - { "type": "source" }, - { "type": "serviceType", "required": false } + { + "type": "enabled" + }, + { + "type": "amazonqConversationId" + }, + { + "type": "credentialStartUrl", + "required": false + } ] }, { - "name": "aws_loadCredentials", - "description": "Load credentials from a credential source", - "unit": "Count", - "metadata": [{ "type": "credentialSourceId" }], - "passive": true - }, - { - "name": "aws_createCredentials", - "description": "Create a new credentials file" - }, - { - "name": "aws_injectCredentials", - "description": "Inject selected AWS credentials into a third-party run (e.g. RunConfiguration)", - "metadata": [{ "type": "result" }, { "type": "runtimeString", "required": false }] - }, - { - "name": "aws_validateCredentials", - "description": "Validate credentials when selecting new credentials", + "name": "amazonq_startConversationInvoke", + "description": "Captures startConversation invocation process", "metadata": [ - { "type": "result" }, - { "type": "credentialType", "required": false }, - { "type": "credentialSourceId", "required": false } - ], - "passive": true + { + "type": "amazonqConversationId", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } + ] }, { - "name": "aws_refreshCredentials", - "description": "Emitted when credentials are automatically refreshed by the AWS SDK or Toolkit", - "passive": true, + "name": "apigateway_copyUrl", + "description": "Copying an API Gateway remote URL", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false }, - { "type": "credentialType", "required": false }, - { "type": "credentialSourceId", "required": false }, - { "type": "sessionDuration", "required": false } + { + "type": "result" + } ] }, { - "name": "aws_loginWithBrowser", - "description": "Called when a connection requires login using the browser", + "name": "apigateway_invokeLocal", + "description": "Invoking one simulated API Gateway call using the SAM cli", "metadata": [ - { "type": "result" }, - { "type": "credentialType", "required": false }, - { "type": "credentialSourceId", "required": false } + { + "type": "runtime", + "required": false + }, + { + "type": "httpMethod", + "required": false + }, + { + "type": "result" + }, + { + "type": "debug" + }, + { + "type": "lambdaArchitecture", + "required": false + } ] }, { - "name": "aws_help", - "description": "Open docs for the extension", - "metadata": [{ "type": "name", "required": false }] - }, - { - "name": "aws_helpQuickstart", - "description": "Open the quickstart guide", - "metadata": [{ "type": "result" }], - "passive": true - }, - { - "name": "aws_showExtensionSource", - "description": "Open the repo for the extension" - }, - { - "name": "aws_refreshExplorer", - "description": "Refresh the AWS explorer window" - }, - { - "name": "aws_expandExplorerNode", - "description": "Expand a service root node in the AWS explorer window", - "metadata": [{ "type": "serviceType" }] - }, - { - "name": "aws_reportPluginIssue", - "description": "Report an issue with the plugin" - }, - { - "name": "beanstalk_deploy", - "description": "Called when deploying an application to Elastic Beanstalk", + "name": "apigateway_invokeRemote", + "description": "Calling a remote API Gateway", "metadata": [ - { "type": "result" }, - { "type": "initialDeploy" }, - { "type": "duration", "required": false }, - { "type": "name", "required": false }, - { "type": "framework", "required": false }, - { "type": "xrayEnabled", "required": false }, - { "type": "enhancedHealthEnabled", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} + { + "type": "result" + }, + { + "type": "httpMethod", + "required": false + } ] }, { - "name": "beanstalk_publishWizard", - "description": "Called when user completes the Elastic Beanstalk publish wizard", + "name": "apigateway_startLocalServer", + "description": "Called when starting a local API Gateway server simulator with SAM. Only called when starting it for long running testing, not for single invokes", "metadata": [ - { "type": "result" }, - { "type": "duration", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} + { + "type": "result" + } ] }, { - "name": "beanstalk_openApplication", - "description": "Open a window to view the status of the Beanstalk Application", - "metadata": [{ "type": "result" }] + "name": "apprunner_copyServiceUrl", + "description": "Copy the service URL" }, { - "name": "beanstalk_openEnvironment", - "description": "Open a window to view the status of the Beanstalk Environment", - "metadata": [{ "type": "result" }] + "name": "apprunner_createService", + "description": "Create an App Runner service", + "metadata": [ + { + "type": "result" + }, + { + "type": "appRunnerServiceSource" + }, + { + "type": "reason", + "required": false + } + ] }, { - "name": "beanstalk_deleteApplication", - "description": "Called when user deletes a Beanstalk application", - "metadata": [{ "type": "result" }] + "name": "apprunner_deleteService", + "description": "Delete an App Runner service", + "metadata": [ + { + "type": "result" + }, + { + "type": "appRunnerServiceStatus", + "required": false + } + ] }, { - "name": "beanstalk_deleteEnvironment", - "description": "Called when user deletes a Beanstalk environment", - "metadata": [{ "type": "result" }] + "name": "apprunner_openServiceUrl", + "description": "Open the service URL in a browser" }, { - "name": "beanstalk_restartApplication", - "description": "Restart application server for a Beanstalk environment", - "metadata": [{ "type": "result" }] + "name": "apprunner_pauseService", + "description": "Pause a running App Runner service", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "beanstalk_rebuildEnvironment", - "description": "Rebuild a Beanstalk environment", - "metadata": [{ "type": "result" }] + "name": "apprunner_resumeService", + "description": "Resume a paused App Runner service", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "beanstalk_editEnvironment", - "description": "Edit configuration of a Beanstalk environment", - "metadata": [{ "type": "result" }] + "name": "apprunner_startDeployment", + "description": "Start a new deployment for an App Runner service", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "cloudfront_openDistribution", - "description": "Open a window to view the status of the CloudFront Distribution", - "metadata": [{ "type": "result" }] + "name": "apprunner_viewApplicationLogs", + "description": "View the App Runner application logs (the logs for your running service)" }, { - "name": "cloudfront_openStreamingDistribution", - "description": "Open a window to view the status of the CloudFront Streaming Distribution", - "metadata": [{ "type": "result" }] + "name": "apprunner_viewServiceLogs", + "description": "View the App Runner service logs (the logs produced by App Runner)" }, { - "name": "cloudfront_openInvalidationRequest", - "description": "Open a window to view the Cloudfront Invalidation requests", - "metadata": [{ "type": "result" }] + "name": "auth_addConnection", + "description": "Captures the result of adding a new connection in the 'Add New Connection' workflow", + "metadata": [ + { + "type": "source" + }, + { + "type": "featureId" + }, + { + "type": "credentialSourceId" + }, + { + "type": "isAggregated" + }, + { + "type": "result" + }, + { + "type": "attempts", + "required": false + }, + { + "type": "invalidInputFields", + "required": false + }, + { + "type": "reason", + "required": false + } + ] }, { - "name": "cloudfront_deleteDistribution", - "description": "Called when user deletes a CloudFront Distribution", - "metadata": [{ "type": "result" }] + "name": "auth_addedConnections", + "description": "The diff/change in Auth connections", + "metadata": [ + { + "type": "source" + }, + { + "type": "authConnectionsCount" + }, + { + "type": "newAuthConnectionsCount" + }, + { + "type": "enabledAuthConnections" + }, + { + "type": "newEnabledAuthConnections" + }, + { + "type": "attempts" + }, + { + "type": "result" + }, + { + "type": "reason", + "required": false + } + ] }, { - "name": "cloudfront_deleteStreamingDistribution", - "description": "Called when user deletes a CloudFront Streaming Distribution", - "metadata": [{ "type": "result" }] + "name": "auth_switchRoles", + "description": "Called when user clicks yes or no to switch role upon adding new connection", + "metadata": [ + { + "type": "authConnectionsCount" + }, + { + "type": "userChoice" + } + ] }, { - "name": "cloudfront_createDistribution", - "description": "Create a CloudFront Distribution", - "metadata": [{ "type": "result" }] + "name": "aws_copyArn", + "description": "Copy the ARN of an AWS resource", + "metadata": [ + { + "type": "serviceType" + } + ] }, { - "name": "cloudfront_createStreamingDistribution", - "description": "Create a CloudFront Streaming Distribution", - "metadata": [{ "type": "result" }] + "name": "aws_createCredentials", + "description": "Create a new credentials file" }, { - "name": "cloudwatchlogs_copyArn", - "description": "Copy the ARN of a CloudWatch Logs entity", + "name": "aws_deleteResource", + "description": "Delete an AWS resource", "metadata": [ - { "type": "result" }, - { "type": "cloudWatchResourceType" } + { + "type": "serviceType" + }, + { + "type": "result" + } ] }, { - "name": "cloudwatchlogs_open", - "description": "Open a CloudWatch Logs entity. ServiceType and source indicate where the request came from (example: while viewing an ECS container)", + "name": "aws_expandExplorerNode", + "description": "Expand a service root node in the AWS explorer window", "metadata": [ - { "type": "result" }, - { "type": "cloudWatchResourceType" }, - { "type": "cloudWatchLogsPresentation", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "hasTextFilter", "required": false }, - { "type": "hasTimeFilter", "required": false }, - { "type": "source" } + { + "type": "serviceType" + } ] }, { - "name": "cloudwatchlogs_openGroup", - "description": "Open the CloudWatch Logs group window. ServiceType indicates that it was opened from a different service (like directly from an ECS container) (Deprecated - use cloudwatchlogs_open)", - "metadata": [{ "type": "result" }, { "type": "serviceType", "required": false }] - }, - { - "name": "cloudwatchlogs_openStream", - "description": "Open a CloudWatch Logs stream in the window. ServiceType indicates that it was opened from a different service (like directly from an ECS container) (Deprecated - use cloudwatchlogs_open)", - "metadata": [{ "type": "result" }, { "type": "serviceType", "required": false }] - }, - { - "name": "cloudwatchlogs_delete", - "description": "Delete a CloudWatch Logs entity.", + "name": "aws_experimentActivation", + "description": "An experiment was activated or deactivated in the Toolkit", "metadata": [ - { "type": "result" }, - { "type": "cloudWatchResourceType" } + { + "type": "experimentId" + }, + { + "type": "experimentState" + } ] }, { - "name": "cloudwatchlogs_download", - "unit": "Bytes", - "description": "Download a CloudWatch Logs entity. Value indicates the final size of the formatted stream in bytes.", + "name": "aws_help", + "description": "Open docs for the extension", "metadata": [ - { "type": "result" }, - { "type": "cloudWatchResourceType" } + { + "type": "name", + "required": false + } ] }, { - "name": "cloudwatchlogs_downloadStreamToFile", - "unit": "Bytes", - "description": "Download a stream to a file on disk. Value indicates the final size of the formatted stream. (Deprecated - use cloudwatchlogs_download)", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchlogs_openStreamInEditor", - "description": "Download a stream to memory then open in an editor.", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchlogs_viewCurrentMessagesInEditor", - "description": "Copy the currently open (possibly filtered) messages to an editor", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchlogs_wrapEvents", - "description": "Word wrap events off/on", - "metadata": [{ "type": "enabled" }] - }, - { - "name": "cloudwatchlogs_tailStream", - "description": "Tail stream off/on", - "metadata": [{ "type": "enabled" }] - }, - { - "name": "cloudwatchlogs_refresh", - "description": "Refresh a CloudWatch Logs entity", - "metadata": [{ "type": "cloudWatchResourceType" }] - }, - { - "name": "cloudwatchlogs_refreshGroup", - "description": "Refresh group is pressed (Deprecated, use cloudwatchlogs_refresh)" - }, - { - "name": "cloudwatchlogs_refreshStream", - "description": "Refresh stream is pressed (Deprecated, use cloudwatchlogs_refresh)" - }, - { - "name": "cloudwatchlogs_filter", - "description": "Filters a CloudWatch Logs entity. (Essentially a subset of cloudwatchlogs_open)", + "name": "aws_helpQuickstart", + "description": "Open the quickstart guide", "metadata": [ - { "type": "result" }, - { "type": "cloudWatchResourceType" }, - { "type": "source", "required": false }, - { "type": "hasTextFilter", "required": false }, - { "type": "hasTimeFilter", "required": false } - ] - }, - { - "name": "cloudwatchlogs_searchStream", - "description": "Called when a stream is searched", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchlogs_searchGroup", - "description": "Called when a group is searched", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchlogs_showEventsAround", - "description": "Show event around a time period in ms specified by Value", - "unit": "Milliseconds", - "metadata": [{ "type": "result" }] + { + "type": "result" + } + ], + "passive": true }, { - "name": "cloudformation_createProject", - "description": "Called when creating a CloudFormation project", + "name": "aws_injectCredentials", + "description": "Inject selected AWS credentials into a third-party run (e.g. RunConfiguration)", "metadata": [ - { "type": "result" }, - { "type": "templateName" } + { + "type": "result" + }, + { + "type": "runtimeString", + "required": false + } ] }, { - "name": "cloudformation_deploy", - "description": "Called when deploying a CloudFormation template", + "name": "aws_loadCredentials", + "description": "Load credentials from a credential source", + "unit": "Count", "metadata": [ - { "type": "result" }, - { "type": "initialDeploy" }, - { "type": "duration", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} - ] + { + "type": "credentialSourceId" + } + ], + "passive": true }, { - "name": "cloudformation_publishWizard", - "description": "Called when user completes the CloudFormation template publish wizard", + "name": "aws_loginWithBrowser", + "description": "Called when a connection requires login using the browser", "metadata": [ - { "type": "result" }, - { "type": "duration", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} + { + "type": "result" + }, + { + "type": "credentialType", + "required": false + }, + { + "type": "credentialSourceId", + "required": false + } ] }, { - "name": "cloudformation_open", - "description": "Open a CloudFormation stack in the stack viewer", - "metadata": [{ "type": "result" }] - }, - { - "name": "codecommit_cloneRepo", - "description": "A repo is cloned from CodeCommit", + "name": "aws_modifyCredentials", + "description": "Modify credentials (e.g. Add, Edit, Delete)", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false } + { + "type": "result" + }, + { + "type": "credentialModification" + }, + { + "type": "source" + }, + { + "type": "serviceType", + "required": false + } ] }, { - "name": "codecommit_createRepo", - "description": "A repo is created in CodeCommit", + "name": "aws_modifySetting", + "description": "An setting was changed by users in the Toolkit. This metric can optionally provide the new state of the setting via settingState.", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false } + { + "type": "settingId" + }, + { + "type": "settingState", + "required": false + } ] }, { - "name": "codecommit_setCredentials", - "description": "A connection is established to CodeCommit to perform actions on repos", - "metadata": [ - { "type": "result" }, - { "type": "credentialType", "required": false } - ], - "passive": true - }, - { - "name": "dynamodb_createTable", - "description": "Create a DynamoDB table", + "name": "aws_openCredentials", + "description": "Open the credentials file", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false } + { + "type": "result" + } ] }, { - "name": "dynamodb_deleteTable", - "description": "Delete a DynamoDB table", + "name": "aws_openUrl", + "description": "Opens a url", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false } + { + "type": "result" + }, + { + "type": "url", + "required": false + }, + { + "type": "source", + "required": false + } ] }, { - "name": "dynamodb_edit", - "description": "Modify a DynamoDB entity", + "name": "aws_refreshCredentials", + "description": "Emitted when credentials are automatically refreshed by the AWS SDK or Toolkit", + "passive": true, "metadata": [ - { "type": "result" }, - { "type": "dynamoDbTarget" }, - { "type": "reason", "required": false } + { + "type": "result" + }, + { + "type": "reason", + "required": false + }, + { + "type": "credentialType", + "required": false + }, + { + "type": "credentialSourceId", + "required": false + }, + { + "type": "sessionDuration", + "required": false + } ] }, { - "name": "dynamodb_fetchRecords", - "description": "Fetch records from a DynamoDB table in the table browser", - "metadata": [ - { "type": "result" }, - { "type": "dynamoDbFetchType" }, - { "type": "dynamoDbIndexType", "required": false } - ] + "name": "aws_refreshExplorer", + "description": "Refresh the AWS explorer window" }, { - "name": "dynamodb_openTable", - "description": "Open a DynamoDB table in the table browser", - "metadata": [{ "type": "result" }] + "name": "aws_reportPluginIssue", + "description": "Report an issue with the plugin" }, { - "name": "dynamodb_view", - "description": "View a DynamoDB entity", - "metadata": [ - { "type": "result" }, - { "type": "dynamoDbTarget" }, - { "type": "reason", "required": false } - ] + "name": "aws_saveCredentials", + "description": "Save credentials" }, { - "name": "ec2_changeState", - "description": "Change the state of an EC2 Instance", + "name": "aws_setCredentials", + "description": "Select a credentials profile", "metadata": [ - { "type": "result" }, - { "type": "ec2InstanceState" } + { + "type": "credentialType", + "required": false + }, + { + "type": "credentialSourceId", + "required": false + } ] }, { - "name": "ec2_clearPrivateKey", - "unit": "Count", - "description": "Remove the private key of an EC2 Key Pair from internal storage", + "name": "aws_setPartition", + "description": "A partition change occurred", "metadata": [ - { "type": "result" } + { + "type": "partitionId" + } ] }, { - "name": "ec2_connectToInstance", - "description": "Perform a connection to an EC2 Instance", - "metadata": [ - { "type": "result" }, - { "type": "ec2ConnectionType" } - ] + "name": "aws_setRegion", + "description": "A region change occurred", + "metadata": [] }, { - "name": "ec2_copyAmiToRegion", - "description": "Copy AMI image to another region", - "metadata": [ - { "type": "result" } - ] + "name": "aws_showExtensionSource", + "description": "Open the repo for the extension" }, { - "name": "ec2_createAmi", - "description": "Create an image from an EC2 Instance", + "name": "aws_toolInstallation", + "description": "An external tool was installed automatically", "metadata": [ - { "type": "result" } - ] + { + "type": "toolId" + }, + { + "type": "result" + } + ], + "passive": true }, { - "name": "ec2_createElasticIp", - "description": "Create (allocate) an Elastic IP address", - "metadata": [ - { "type": "result" } - ] + "name": "aws_validateCredentials", + "description": "Validate credentials when selecting new credentials", + "metadata": [ + { + "type": "result" + }, + { + "type": "credentialType", + "required": false + }, + { + "type": "credentialSourceId", + "required": false + } + ], + "passive": true }, { - "name": "ec2_createKeyPair", - "description": "Create an EC2 Key Pair", + "name": "beanstalk_deleteApplication", + "description": "Called when user deletes a Beanstalk application", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_createSecurityGroup", - "description": "Create an EC2 security group", + "name": "beanstalk_deleteEnvironment", + "description": "Called when user deletes a Beanstalk environment", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_createSnapshot", - "description": "Create an EC2 volume snapshot", + "name": "beanstalk_deploy", + "description": "Called when deploying an application to Elastic Beanstalk", "metadata": [ - { "type": "result" } + { + "type": "result" + }, + { + "type": "initialDeploy" + }, + { + "type": "duration", + "required": false + }, + { + "type": "name", + "required": false + }, + { + "type": "framework", + "required": false + }, + { + "type": "xrayEnabled", + "required": false + }, + { + "type": "enhancedHealthEnabled", + "required": false + }, + { + "type": "serviceType", + "required": false + }, + { + "type": "source", + "required": false + } ] }, { - "name": "ec2_createVolume", - "description": "Create an EC2 volume", + "name": "beanstalk_editEnvironment", + "description": "Edit configuration of a Beanstalk environment", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_deleteAmi", - "unit": "Count", - "description": "Delete (de-register) an AMI image", + "name": "beanstalk_openApplication", + "description": "Open a window to view the status of the Beanstalk Application", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_deleteElasticIp", - "description": "Delete (release) an Elastic IP address", + "name": "beanstalk_openEnvironment", + "description": "Open a window to view the status of the Beanstalk Environment", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_deleteKeyPair", - "unit": "Count", - "description": "Delete an EC2 Key Pair", + "name": "beanstalk_publishWizard", + "description": "Called when user completes the Elastic Beanstalk publish wizard", "metadata": [ - { "type": "result" } + { + "type": "result" + }, + { + "type": "duration", + "required": false + }, + { + "type": "serviceType", + "required": false + }, + { + "type": "source", + "required": false + } ] }, { - "name": "ec2_deleteSecurityGroup", - "unit": "Count", - "description": "Delete an EC2 security group", + "name": "beanstalk_rebuildEnvironment", + "description": "Rebuild a Beanstalk environment", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_deleteSnapshot", - "unit": "Count", - "description": "Delete an EC2 Volume Snapshot", + "name": "beanstalk_restartApplication", + "description": "Restart application server for a Beanstalk environment", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_deleteVolume", - "unit": "Count", - "description": "Delete an EC2 Volume", + "name": "cloudformation_createProject", + "description": "Called when creating a CloudFormation project", "metadata": [ - { "type": "result" } + { + "type": "result" + }, + { + "type": "templateName" + } ] }, { - "name": "ec2_editAmiPermission", - "description": "Edit AMI image permissions", + "name": "cloudformation_delete", + "description": "Called when deleting a cloudformation stack", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_editInstanceElasticIp", - "description": "Associate or disassociate an Elastic IP with an EC2 Instance", + "name": "cloudformation_deploy", + "description": "Called when deploying a CloudFormation template", "metadata": [ - { "type": "result" }, - { "type": "enabled", "required": false} + { + "type": "result" + }, + { + "type": "initialDeploy" + }, + { + "type": "duration", + "required": false + }, + { + "type": "serviceType", + "required": false + }, + { + "type": "source", + "required": false + } ] }, { - "name": "ec2_editInstanceShutdownBehavior", - "description": "Adjust the shutdown behavior of an EC2 Instance", + "name": "cloudformation_open", + "description": "Open a CloudFormation stack in the stack viewer", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_editInstanceTerminationProtection", - "description": "Adjust the termination protection of an EC2 Instance", + "name": "cloudformation_publishWizard", + "description": "Called when user completes the CloudFormation template publish wizard", "metadata": [ - { "type": "result" }, - { "type": "enabled", "required": false} + { + "type": "result" + }, + { + "type": "duration", + "required": false + }, + { + "type": "serviceType", + "required": false + }, + { + "type": "source", + "required": false + } ] }, { - "name": "ec2_editInstanceType", - "description": "Adjust the instance type of an EC2 Instance", + "name": "cloudfront_createDistribution", + "description": "Create a CloudFront Distribution", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_editInstanceUserData", - "description": "Adjust an EC2 Instance's user data", + "name": "cloudfront_createStreamingDistribution", + "description": "Create a CloudFront Streaming Distribution", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_editSecurityGroupPermission", - "description": "Alter an EC2 security group permission", + "name": "cloudfront_deleteDistribution", + "description": "Called when user deletes a CloudFront Distribution", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_editVolumeAttachment", - "description": "Attach (enabled = true) or detach a volume", + "name": "cloudfront_deleteStreamingDistribution", + "description": "Called when user deletes a CloudFront Streaming Distribution", "metadata": [ - { "type": "result" }, - { "type": "enabled" } + { + "type": "result" + } ] }, { - "name": "ec2_exportPrivateKey", - "description": "Save the private key of an EC2 Key Pair out to disk", + "name": "cloudfront_openDistribution", + "description": "Open a window to view the status of the CloudFront Distribution", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_importPrivateKey", - "description": "Store the private key of an EC2 Key Pair in internal storage", + "name": "cloudfront_openInvalidationRequest", + "description": "Open a window to view the Cloudfront Invalidation requests", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_launchInstance", - "description": "Launch an EC2 Instance", + "name": "cloudfront_openStreamingDistribution", + "description": "Open a window to view the status of the CloudFront Streaming Distribution", "metadata": [ - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "ec2_openInstances", - "description": "Open a window to view EC2 Instances", - "metadata": [{ "type": "result" }] - }, - { - "name": "ec2_openAMIs", - "description": "Open a window to view EC2 AMIs", - "metadata": [{ "type": "result" }] + "name": "cloudwatchinsights_executeQuery", + "description": "Start an insights query", + "metadata": [ + { + "type": "result" + }, + { + "type": "insightsQueryTimeType" + }, + { + "type": "insightsQueryStringType" + } + ] }, { - "name": "ec2_openElasticIPs", - "description": "Open a window to view EC2 Elastic IPs", - "metadata": [{ "type": "result" }] + "name": "cloudwatchinsights_openDetailedLogRecord", + "description": "Get all details for the selected log record", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "ec2_openKeyPairs", - "description": "Open to view EC2 Key pairs", - "metadata": [{ "type": "result" }] - }, - { - "name": "ec2_openSecurityGroups", - "description": "Open a window to view EC2 Security Groups", - "metadata": [{ "type": "result" }] - }, - { - "name": "ec2_openVolumes", - "description": "Open a window to view EC2 Volumes", - "metadata": [{ "type": "result" }] - }, - { - "name": "ec2_viewInstanceSystemLog", - "description": "View the system log of an EC2 Instance", - "metadata": [{ "type": "result" }] - }, - { - "name": "ecs_openCluster", - "description": "Open to view status of an ECS Cluster", - "metadata": [{ "type": "result" }] - }, - { - "name": "ec2_viewInstanceUserData", - "description": "View an EC2 Instance's user data", + "name": "cloudwatchinsights_openEditor", + "description": "Open the insights query editor", "metadata": [ - { "type": "result" } + { + "type": "insightsDialogOpenSource" + } ] }, { - "name": "ecs_enableExecuteCommand", - "description": "Called when ECS execute command is enabled", - "metadata": [{ "type": "result" }] - }, - { - "name": "ecs_disableExecuteCommand", - "description": "Called when ECS execute command is disabled", - "metadata": [{ "type": "result" }] - }, - { - "name": "ecs_runExecuteCommand", - "description": "Called when the ECS execute command is run", - "metadata": [{ "type": "result" }, { "type": "ecsExecuteCommandType" }] - }, - { - "name": "ecr_copyRepositoryUri", - "description": "Called when the user copies the repository uri from a node" - }, - { - "name": "ecr_copyTagUri", - "description": "Called when the user copies the repository tag uri from a node. The tag uri is the repository uri + : + the tag name" - }, - { - "name": "ecr_createRepository", - "description": "Called when creating a new ECR repository", - "metadata": [{ "type": "result" }] - }, - { - "name": "ecr_deleteRepository", - "description": "Called when deleting an existing ECR repository", - "metadata": [{ "type": "result" }] + "name": "cloudwatchinsights_retrieveQuery", + "description": "Retrieve list of available saved queries from AWS", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "ecr_deleteTags", - "unit": "Count", - "description": "Called when deleting a tag in an ECR repository. The operation is a batch operation by default, value represents the number of tags deleted.", - "metadata": [{ "type": "result" }] + "name": "cloudwatchinsights_saveQuery", + "description": "Save query parameters to AWS", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "ecr_deployImage", - "description": "Called when deploying an image to ECR", + "name": "cloudwatchlogs_copyArn", + "description": "Copy the ARN of a CloudWatch Logs entity", "metadata": [ - { "type": "result" }, - { "type": "ecrDeploySource", "required": false }, - { "type": "duration", "required": false } + { + "type": "result" + }, + { + "type": "cloudWatchResourceType" + } ] }, { - "name": "ecs_deployScheduledTask", - "description": "Called when deploying a scheduled task to an ECS cluster", + "name": "cloudwatchlogs_delete", + "description": "Delete a CloudWatch Logs entity.", "metadata": [ - { "type": "result" }, - { "type": "ecsLaunchType" }, - { "type": "duration", "required": false } + { + "type": "result" + }, + { + "type": "cloudWatchResourceType" + } ] }, { - "name": "ecs_deployService", - "description": "Called when deploying a service to an ECS cluster", + "name": "cloudwatchlogs_download", + "unit": "Bytes", + "description": "Download a CloudWatch Logs entity. Value indicates the final size of the formatted stream in bytes.", "metadata": [ - { "type": "result" }, - { "type": "ecsLaunchType" }, - { "type": "duration", "required": false } + { + "type": "result" + }, + { + "type": "cloudWatchResourceType" + } ] }, { - "name": "ecs_deployTask", - "description": "Called when deploying a task to an ECS cluster", + "name": "cloudwatchlogs_downloadStreamToFile", + "unit": "Bytes", + "description": "Download a stream to a file on disk. Value indicates the final size of the formatted stream. (Deprecated - use cloudwatchlogs_download)", "metadata": [ - { "type": "result" }, - { "type": "ecsLaunchType" }, - { "type": "duration", "required": false } + { + "type": "result" + } ] }, { - "name": "ecs_publishWizard", - "description": "Called when user completes the ECS publish wizard", + "name": "cloudwatchlogs_filter", + "description": "Filters a CloudWatch Logs entity. (Essentially a subset of cloudwatchlogs_open)", "metadata": [ - { "type": "result" }, - { "type": "duration", "required": false } + { + "type": "result" + }, + { + "type": "cloudWatchResourceType" + }, + { + "type": "source", + "required": false + }, + { + "type": "hasTextFilter", + "required": false + }, + { + "type": "hasTimeFilter", + "required": false + } ] }, { - "name": "ecs_openRepository", - "description": "Open to view status of an ECS Repository", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_open", + "description": "Open a CloudWatch Logs entity. ServiceType and source indicate where the request came from (example: while viewing an ECS container)", + "metadata": [ + { + "type": "result" + }, + { + "type": "cloudWatchResourceType" + }, + { + "type": "cloudWatchLogsPresentation", + "required": false + }, + { + "type": "serviceType", + "required": false + }, + { + "type": "hasTextFilter", + "required": false + }, + { + "type": "hasTimeFilter", + "required": false + }, + { + "type": "source" + } + ] }, { - "name": "ecs_deleteService", - "description": "Called when user deletes an ECS service", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_openGroup", + "description": "Open the CloudWatch Logs group window. ServiceType indicates that it was opened from a different service (like directly from an ECS container) (Deprecated - use cloudwatchlogs_open)", + "metadata": [ + { + "type": "result" + }, + { + "type": "serviceType", + "required": false + } + ] }, { - "name": "ecs_editService", - "description": "Edit configuration of an ECS service", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_openStream", + "description": "Open a CloudWatch Logs stream in the window. ServiceType indicates that it was opened from a different service (like directly from an ECS container) (Deprecated - use cloudwatchlogs_open)", + "metadata": [ + { + "type": "result" + }, + { + "type": "serviceType", + "required": false + } + ] }, { - "name": "ecs_deleteCluster", - "description": "Delete an ECS cluster", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_openStreamInEditor", + "description": "Download a stream to memory then open in an editor.", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "ecs_stopTask", - "unit": "Count", - "description": "Stop ECS task(s)", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_refresh", + "description": "Refresh a CloudWatch Logs entity", + "metadata": [ + { + "type": "cloudWatchResourceType" + } + ] }, { - "name": "ecs_deleteScheduledTask", - "unit": "Count", - "description": "Delete ECS Scheduled task(s)", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_refreshGroup", + "description": "Refresh group is pressed (Deprecated, use cloudwatchlogs_refresh)" }, { - "name": "feedback_result", - "description": "Called while submitting in-IDE feedback", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_refreshStream", + "description": "Refresh stream is pressed (Deprecated, use cloudwatchlogs_refresh)" }, { - "name": "file_editAwsFile", - "description": "Use authoring features such as autocompletion, syntax checking, and highlighting, for AWS filetypes (CFN, SAM, etc.). Emit this _once_ per file-editing session for a given file. Ideally this is emitted only if authoring features are used, rather than merely opening or touching a file.", + "name": "cloudwatchlogs_searchGroup", + "description": "Called when a group is searched", "metadata": [ - { "type": "result" }, - { "type": "awsFiletype", "required": true}, - { "type": "filenameExt", "required": false} + { + "type": "result" + } ] }, { - "name": "iam_openRole", - "description": "Open a window to view/edit IAM Role Policy", - "metadata": [{ "type": "result" }] - }, - { - "name": "iam_openGroup", - "description": "Open a window to view/edit IAM Group Policy", - "metadata": [{ "type": "result" }] - }, - { - "name": "iam_openUser", - "description": "Open a window to view/edit IAM User Configuration", - "metadata": [{ "type": "result" }] + "name": "cloudwatchlogs_searchStream", + "description": "Called when a stream is searched", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "iam_open", - "description": "Open a window to view/edit an IAM resource", + "name": "cloudwatchlogs_showEventsAround", + "description": "Show event around a time period in ms specified by Value", + "unit": "Milliseconds", "metadata": [ - { "type": "result" }, - { "type": "iamResourceType" } + { + "type": "result" + } ] }, { - "name": "iam_create", - "description": "Create an IAM resource", + "name": "cloudwatchlogs_tailStream", + "description": "Tail stream off/on", "metadata": [ - { "type": "result" }, - { "type": "iamResourceType" } + { + "type": "enabled" + } ] }, { - "name": "iam_delete", - "description": "Delete an IAM resource", + "name": "cloudwatchlogs_viewCurrentMessagesInEditor", + "description": "Copy the currently open (possibly filtered) messages to an editor", "metadata": [ - { "type": "result" }, - { "type": "iamResourceType" } + { + "type": "result" + } ] }, { - "name": "iam_edit", - "description": "Edits policy/configuration associated with an IAM resource", + "name": "cloudwatchlogs_wrapEvents", + "description": "Word wrap events off/on", "metadata": [ - { "type": "result" }, - { "type": "iamResourceType" } + { + "type": "enabled" + } ] }, { - "name": "iam_createUserAccessKey", - "description": "Create Access Key for an IAM user", - "metadata": [{ "type": "result" }] - }, - { - "name": "iam_deleteUserAccessKey", - "description": "Delete Access Key for an IAM user", - "metadata": [{ "type": "result" }] - }, - { - "name": "lambda_delete", - "description": "called when deleting lambdas remotely", - "unit": "None", - "metadata": [{ "type": "duration" }, { "type": "result" }] - }, - { - "name": "lambda_configure", - "description": "Called when opening the local configuration of a Lambda to edit", - "metadata": [{ "type": "result" }] - }, - { - "name": "lambda_create", - "description": "Called when creating lambdas remotely", - "metadata": [{ "type": "runtime" }] - }, - { - "name": "lambda_createProject", - "description": "Called when creating a lambda project", + "name": "codecatalyst_connect", + "description": "Connect to a Amazon CodeCatalyst dev environment", "metadata": [ - { "type": "result" }, - { "type": "language" }, - { "type": "templateName" }, - { "type": "variant", "required": false } + { + "type": "userId" + }, + { + "type": "result" + } ] }, { - "name": "lambda_goToHandler", - "description": "Jump to a lambda handler from elsewhere", - "metadata": [{ "type": "result" }] - }, - { - "name": "lambda_editFunction", - "description": "Called when creating lambdas remotely", - "metadata": [{ "type": "update", "required": false }, { "type": "lambdaPackageType" }, { "type": "result" }] - }, - { - "name": "lambda_invokeRemote", - "description": "Called when invoking lambdas remotely", - "metadata": [{ "type": "runtime", "required": false }, { "type": "result" }] - }, - { - "name": "lambda_invokeLocal", - "description": "Called when invoking lambdas locally (with SAM in most toolkits)", + "name": "codecatalyst_createDevEnvironment", + "description": "Create an Amazon CodeCatalyst Dev Environment", "metadata": [ - { "type": "runtime", "required": false }, - { "type": "version", "required": false }, - { "type": "lambdaPackageType" }, - { "type": "result" }, - { "type": "debug" }, - { "type": "lambdaArchitecture", "required": false } + { + "type": "userId" + }, + { + "type": "result" + }, + { + "type": "codecatalyst_createDevEnvironmentRepoType", + "required": false + } ] }, { - "name": "lambda_import", - "description": "Called when importing a remote Lambda function", - "metadata": [{ "type": "runtime", "required": false }, { "type": "result" }] - }, - { - "name": "lambda_updateFunctionCode", - "description": "Called when updating a Lambda function's code outside the context of a SAM template", - "metadata": [{ "type": "runtime", "required": false }, { "type": "result" }] - }, - { - "name": "lambda_deploy", - "description": "Called when deploying a Lambda Function", + "name": "codecatalyst_devEnvironmentWorkflowStatistic", + "description": "Workflow statistic for connecting to a dev environment", + "passive": true, "metadata": [ - { "type": "lambdaPackageType" }, - { "type": "result" }, - { "type": "initialDeploy" }, - { "type": "duration", "required": false }, - { "type": "runtime", "required": false }, - { "type": "platform", "required": false }, - { "type": "lambdaArchitecture", "required": false }, - { "type": "language", "required": false }, - { "type": "xrayEnabled", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} + { + "type": "userId" + }, + { + "type": "result" + }, + { + "type": "duration" + }, + { + "type": "codecatalyst_devEnvironmentWorkflowStep" + }, + { + "type": "codecatalyst_devEnvironmentWorkflowError", + "required": false + } ] }, { - "name": "lambda_publishWizard", - "description": "Called when user completes the Lambda publish wizard", + "name": "codecatalyst_localClone", + "description": "Clone a Amazon CodeCatalyst code repository locally", "metadata": [ - { "type": "result" }, - { "type": "duration", "required": false }, - { "type": "serviceType", "required": false }, - { "type": "source" , "required": false} + { + "type": "userId" + }, + { + "type": "result" + } ] }, { - "name": "cloudformation_delete", - "description": "Called when deleting a cloudformation stack", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_getCredentials", - "description": "Called when getting IAM/SecretsManager credentials for a RDS database. Value represents how long it takes in ms.", - "unit": "Milliseconds", - "metadata": [{ "type": "result" }, { "type": "databaseCredentials" }, { "type": "databaseEngine" }] - }, - { - "name": "rds_openInstances", - "description": "Open a window to view RDS DB Instances", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_openSecurityGroups", - "description": "Open a window to view RDS Security Groups", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_openSubnets", - "description": "Open a window to view RDS Subnet Groups", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_launchInstance", - "description": "Launch a RDS DB instance", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_createSecurityGroup", - "description": "Create a RDS security group", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_createSubnetGroup", - "description": "Create a RDS subnet group", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_deleteInstance", - "description": "Delete a RDS DB instance", - "metadata": [{ "type": "result" }] - }, - { - "name": "rds_deleteSecurityGroup", - "unit": "Count", - "description": "Delete RDS security group(s)", - "metadata": [{ "type": "result" }] + "name": "codecatalyst_updateDevEnvironmentSettings", + "description": "Update properties of a Amazon CodeCatalyst Dev Environment", + "metadata": [ + { + "type": "userId" + }, + { + "type": "result" + }, + { + "type": "codecatalyst_updateDevEnvironmentLocationType" + } + ] }, { - "name": "rds_deleteSubnetGroup", - "unit": "Count", - "description": "Delete RDS subnet group(s)", - "metadata": [{ "type": "result" }] + "name": "codecatalyst_updateDevfile", + "description": "Trigger a devfile update on a Amazon CodeCatalyst dev environment", + "metadata": [ + { + "type": "userId" + }, + { + "type": "result" + } + ] }, { - "name": "rds_createConnectionConfiguration", - "description": "Called when creating a new database connection configuration to for a RDS database. In Datagrip we do not get this infromation if it is created directly, so this is only counts actions.", + "name": "codecommit_cloneRepo", + "description": "A repo is cloned from CodeCommit", "metadata": [ - { "type": "result" }, - { "type": "databaseCredentials" }, - { "type": "databaseEngine", "required": false } + { + "type": "result" + }, + { + "type": "reason", + "required": false + } ] }, { - "name": "redshift_getCredentials", - "description": "Called when getting IAM/SecretsManager credentials for a Redshift database. Value represents how long it takes in ms.", - "unit": "Milliseconds", - "metadata": [{ "type": "result" }, { "type": "databaseCredentials" }] + "name": "codecommit_createRepo", + "description": "A repo is created in CodeCommit", + "metadata": [ + { + "type": "result" + }, + { + "type": "reason", + "required": false + } + ] }, { - "name": "redshift_createConnectionConfiguration", - "description": "Called when creating a new database connection configuration to for a Redshift database. In Datagrip we do not get this infromation if it is created directly, so this only counts actions.", - "metadata": [{ "type": "result" }, { "type": "databaseCredentials" }] + "name": "codecommit_setCredentials", + "description": "A connection is established to CodeCommit to perform actions on repos", + "metadata": [ + { + "type": "result" + }, + { + "type": "credentialType", + "required": false + } + ], + "passive": true }, { - "name": "sam_deploy", - "description": "Called when deploying a SAM application", + "name": "codeTransform_configurationFileSelectedChanged", + "description": "Fire a change event when users select a new configuration/module file from the dropdown.", "metadata": [ - { "type": "result" }, - { "type": "version", "required": false } + { + "type": "codeTransformSessionId", + "required": true + } ] }, { - "name": "sam_sync", - "description": "Called when syncing a SAM application", + "name": "codeTransform_dependenciesCopied", + "description": "The repo copies over at least one dependency successfully.", "metadata": [ - { "type": "result" }, - { "type": "syncedResources" }, - { "type": "lambdaPackageType", "required": false }, - { "type": "reason", "required": false }, - { "type": "version", "required": false } + { + "type": "codeTransformSessionId", + "required": true + } ] }, { - "name": "sam_init", - "description": "Called when initing a SAM application", + "name": "codeTransform_isDoubleClickedToTriggerInvalidProject", + "description": "The code transform button in the devtools to initiate the job but there is a validation error.", "metadata": [ - { "type": "result" }, - { "type": "runtime", "required": false }, - { "type": "templateName", "required": false }, - { "type": "version", "required": false }, - { "type": "lambdaPackageType", "required": false }, - { "type": "reason", "required": false }, - { "type": "eventBridgeSchema", "required": false }, - { "type": "lambdaArchitecture", "required": false } + { + "type": "codeTransformPreValidationError", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRuntimeError", + "required": false + }, + { + "type": "result", + "required": true + }, + { + "type": "reason", + "required": true + } ] }, { - "name": "sam_info", - "description": "Called when checking if the SAM executable on the local machine is valid with a valid version", - "passive": true, + "name": "codeTransform_isDoubleClickedToTriggerUserModal", + "description": "The code transform button in the devtools to initiate the pre transform user modal window.", "metadata": [ - { "type": "result" }, - { "type": "reason", "required": false }, - { "type": "version", "required": false } + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformStartSrcComponents", + "required": true + } ] }, { - "name": "schemas_view", - "description": "Called when selecting an EventBridge schema to view", - "metadata": [{ "type": "result" }] - }, - { - "name": "schemas_download", - "description": "Called when downloading an EventBridge schema", - "metadata": [{ "type": "result" }, { "type": "schemaLanguage", "required": false }] - }, - { - "name": "schemas_search", - "description": "Called when searching an EventBridge schema registry", - "metadata": [{ "type": "result" }] - }, - { - "name": "session_start", - "description": "Called when starting the plugin", + "name": "codeTransform_jobArtifactDownloadAndDeserializeTime", + "description": "A timestamp for when the job is ending download zip contents", + "metadata": [ + { + "type": "codeTransformJobId", + "required": true + }, + { + "type": "codeTransformTotalByteSize", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRunTimeLatency", + "required": true + }, + { + "type": "codeTransformRuntimeError", + "required": false + } + ] + }, + { + "name": "codeTransform_jobCreateZipEndTime", + "description": "A timestamp for when the job is ending upload zip contents", + "metadata": [ + { + "type": "codeTransformTotalByteSize", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRunTimeLatency", + "required": true + } + ] + }, + { + "name": "codeTransform_jobIsCanceledFromUserPopupClick", + "description": "The code transform button to initiate the pre transform user modal.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + } + ] + }, + { + "name": "codeTransform_jobIsCancelledByUser", + "description": "After a job is running the user has the ability to cancel the job.", + "metadata": [ + { + "type": "codeTransformCancelSrcComponents", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRuntimeError", + "required": false + } + ] + }, + { + "name": "codeTransform_jobIsClosedDuringIdeRun", + "description": "The user closes their IDE and stops viewing the transformation.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": true + }, + { + "type": "codeTransformStatus", + "required": true + } + ] + }, + { + "name": "codeTransform_jobIsResumedAfterIdeClose", + "description": "The user was previously running a transformation and came back to IDE to see it still running", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": true + }, + { + "type": "codeTransformStatus", + "required": true + } + ] + }, + { + "name": "codeTransform_jobIsStartedFromChatPrompt", + "description": "The user initiates a transform job from Amazon Q chat prompt.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + } + ] + }, + { + "name": "codeTransform_jobIsStartedFromUserPopupClick", + "description": "The user initiates a transform job from the pre transform user modal window.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + } + ] + }, + { + "name": "codeTransform_jobStartedCompleteFromPopupDialog", + "passive": true, + "description": "After modal validation of inputs, code execution will start and we will fire this event.", + "metadata": [ + { + "type": "codeTransformJavaSourceVersionsAllowed", + "required": true + }, + { + "type": "codeTransformJavaTargetVersionsAllowed", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + } + ] + }, + { + "name": "codeTransform_jobStatusChanged", + "passive": true, + "description": "During the transformation progress, log the status steps returning from the API.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": true + }, + { + "type": "codeTransformStatus", + "required": true + } + ] + }, + { + "name": "codeTransform_logApiError", + "passive": true, + "description": "A general logging measure for all client side API errors.", + "metadata": [ + { + "type": "codeTransformApiErrorMessage", + "required": true + }, + { + "type": "codeTransformApiNames", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRequestId", + "required": false + }, + { + "type": "codeTransformJobId", + "required": false + } + ] + }, + { + "name": "codeTransform_logApiLatency", + "passive": true, + "description": "A general logging measure for all client side API's latency.", + "metadata": [ + { + "type": "codeTransformApiNames", + "required": true + }, + { + "type": "codeTransformRunTimeLatency", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRequestId", + "required": false + }, + { + "type": "codeTransformJobId", + "required": false + }, + { + "type": "codeTransformUploadId", + "required": false + }, + { + "type": "codeTransformTotalByteSize", + "required": false + } + ] + }, + { + "name": "codeTransform_logGeneralError", + "passive": true, + "description": "A general logging measure for all client side API errors.", + "metadata": [ + { + "type": "codeTransformApiErrorMessage", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": false + } + ] + }, + { + "name": "codeTransform_mvnBuildFailed", + "description": "The maven command build failed.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformMavenBuildCommand", + "required": true + }, + { + "type": "reason", + "required": false + } + ] + }, + { + "name": "codeTransform_projectDetails", + "description": "Transform initiates project validation before user interaction and we want to gather project details then.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "result", + "required": true + }, + { + "type": "reason", + "required": false + }, + { + "type": "codeTransformPreValidationError", + "required": false + }, + { + "type": "codeTransformLocalJavaVersion", + "required": false + } + ] + }, + { + "name": "codeTransform_totalRunTime", + "passive": true, + "description": "We want to log the total run time in the users experience for the IDE. The total runtime should end when all API's have finished running and the users is prompted for next step actions.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformRunTimeLatency", + "required": true + }, + { + "type": "codeTransformResultStatusMessage", + "required": false + }, + { + "type": "codeTransformLocalJavaVersion", + "required": false + }, + { + "type": "codeTransformLocalMavenVersion", + "required": false + } + ] + }, + { + "name": "codeTransform_vcsDiffViewerVisible", + "description": "A timestamp for when the diff view is being displayed to the user.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": false + } + ] + }, + { + "name": "codeTransform_vcsViewerCanceled", + "description": "An interactivity measured when users cancel a patch view.", + "metadata": [ + { + "type": "codeTransformPatchViewerCancelSrcComponents", + "required": true + }, + { + "type": "codeTransformRuntimeError", + "required": false + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": false + }, + { + "type": "codeTransformStatus", + "required": true + } + ] + }, + { + "name": "codeTransform_vcsViewerClicked", + "description": "An interactivity measured when users click to view diff results.", + "metadata": [ + { + "type": "codeTransformVCSViewerSrcComponents", + "required": true + }, + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": false + } + ] + }, + { + "name": "codeTransform_vcsViewerSubmitted", + "description": "An interactivity measured when users submit their patch view results.", + "metadata": [ + { + "type": "codeTransformSessionId", + "required": true + }, + { + "type": "codeTransformJobId", + "required": false + }, + { + "type": "codeTransformStatus", + "required": true + } + ] + }, + { + "name": "codewhisperer_blockedInvocation", + "description": "Client side invocation blocked by another invocation in progress", + "metadata": [ + { + "type": "codewhispererAutomatedTriggerType", + "required": false + }, + { + "type": "codewhispererCursorOffset" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererLineNumber" + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_clientComponentLatency", + "description": "The latency from each CodeWhisperer components in milliseconds", + "passive": true, + "metadata": [ + { + "type": "codewhispererRequestId" + }, + { + "type": "codewhispererSessionId" + }, + { + "type": "codewhispererPreprocessingLatency" + }, + { + "type": "codewhispererCredentialFetchingLatency" + }, + { + "type": "codewhispererPostprocessingLatency" + }, + { + "type": "codewhispererFirstCompletionLatency" + }, + { + "type": "codewhispererEndToEndLatency" + }, + { + "type": "codewhispererAllCompletionsLatency" + }, + { + "type": "codewhispererCompletionType" + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererUserGroup" + } + ] + }, + { + "name": "codewhisperer_codePercentage", + "description": "Percentage of user tokens against suggestions until 5 mins of time", + "metadata": [ + { + "type": "codewhispererAcceptedTokens" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererPercentage" + }, + { + "type": "codewhispererTotalTokens" + }, + { + "type": "codewhispererUserGroup" + }, + { + "type": "reason", + "required": false + }, + { + "type": "successCount" + }, + { + "type": "codewhispererCustomizationArn", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } + ], "passive": true }, { - "name": "session_end", - "description": "Called when stopping the IDE on a best effort basis", + "name": "codewhisperer_codeScanIssueApplyFix", + "description": "Called when a code scan issue suggested fix is applied", + "metadata": [ + { + "type": "findingId" + }, + { + "type": "detectorId" + }, + { + "type": "component" + }, + { + "type": "ruleId", + "required": false + }, + { + "type": "result" + }, + { + "type": "reason", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_codeScanIssueHover", + "description": "Called when a code scan issue is hovered over", + "metadata": [ + { + "type": "findingId" + }, + { + "type": "detectorId" + }, + { + "type": "ruleId", + "required": false + }, + { + "type": "includesFix" + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_codeScanIssueViewDetails", + "description": "Called when a code scan issue webview is opened", + "metadata": [ + { + "type": "findingId" + }, + { + "type": "detectorId" + }, + { + "type": "ruleId", + "required": false + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_enabled", + "description": "Whether or not CodeWhisperer is enabled", + "passive": true, + "metadata": [ + { + "type": "source", + "required": true + }, + { + "type": "enabled", + "required": true + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_onboardingClick", + "description": "This metric provides the particular language and task type selected by the user in the onboarding page by clicking on the Try Example button.", + "metadata": [ + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererGettingStartedTask" + } + ] + }, + { + "name": "codewhisperer_perceivedLatency", + "description": "The duration from user last modification to the first recommendation shown in milliseconds", + "metadata": [ + { + "type": "codewhispererRequestId" + }, + { + "type": "codewhispererSessionId", + "required": false + }, + { + "type": "duration" + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "codewhispererCompletionType" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererUserGroup" + } + ] + }, + { + "name": "codewhisperer_securityScan", + "description": "Client side invocation of the CodeWhisperer Security Scan", + "metadata": [ + { + "type": "codewhispererCodeScanLines" + }, + { + "type": "codewhispererCodeScanJobId", + "required": false + }, + { + "type": "codewhispererCodeScanProjectBytes", + "required": false + }, + { + "type": "codewhispererCodeScanSrcPayloadBytes" + }, + { + "type": "codewhispererCodeScanBuildPayloadBytes", + "required": false + }, + { + "type": "codewhispererCodeScanSrcZipFileBytes" + }, + { + "type": "codewhispererCodeScanBuildZipFileBytes", + "required": false + }, + { + "type": "codewhispererCodeScanTotalIssues" + }, + { + "type": "codewhispererCodeScanIssuesWithFixes", + "required": false + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "duration" + }, + { + "type": "contextTruncationDuration" + }, + { + "type": "artifactsUploadDuration" + }, + { + "type": "codeScanServiceInvocationsDuration" + }, + { + "type": "reason", + "required": false + }, + { + "type": "result" + }, + { + "type": "credentialStartUrl", + "required": false + } + ] + }, + { + "name": "codewhisperer_serviceInvocation", + "description": "Client side invocation of the CodeWhisperer service for suggestion", + "metadata": [ + { + "type": "codewhispererAutomatedTriggerType", + "required": false + }, + { + "type": "codewhispererCompletionType", + "required": false + }, + { + "type": "codewhispererCursorOffset" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererGettingStartedTask", + "required": false + }, + { + "type": "codewhispererLastSuggestionIndex", + "required": false + }, + { + "type": "codewhispererLineNumber" + }, + { + "type": "codewhispererRequestId", + "required": false + }, + { + "type": "codewhispererRuntime", + "required": false + }, + { + "type": "codewhispererRuntimeSource", + "required": false + }, + { + "type": "codewhispererSessionId", + "required": false + }, + { + "type": "codewhispererSupplementalContextTimeout", + "required": false + }, + { + "type": "codewhispererSupplementalContextIsUtg", + "required": false + }, + { + "type": "codewhispererSupplementalContextLatency", + "required": false + }, + { + "type": "codewhispererSupplementalContextLength", + "required": false + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "duration" + }, + { + "type": "reason", + "required": false + }, + { + "type": "result" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererImportRecommendationEnabled", + "required": false + }, + { + "type": "codewhispererUserGroup" + }, + { + "type": "codewhispererCustomizationArn", + "required": false + } + ] + }, + { + "name": "codewhisperer_userDecision", + "description": "User acceptance or rejection of each suggestion returned by the CodeWhisperer service request", + "metadata": [ + { + "type": "codewhispererCompletionType" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererGettingStartedTask", + "required": false + }, + { + "type": "codewhispererPaginationProgress", + "required": false + }, + { + "type": "codewhispererRequestId" + }, + { + "type": "codewhispererRuntime", + "required": false + }, + { + "type": "codewhispererRuntimeSource", + "required": false + }, + { + "type": "codewhispererSessionId", + "required": false + }, + { + "type": "codewhispererSuggestionIndex" + }, + { + "type": "codewhispererSuggestionReferenceCount" + }, + { + "type": "codewhispererSuggestionReferences", + "required": false + }, + { + "type": "codewhispererSuggestionImportCount", + "required": false + }, + { + "type": "codewhispererSuggestionState" + }, + { + "type": "codewhispererSupplementalContextTimeout", + "required": false + }, + { + "type": "codewhispererSupplementalContextIsUtg", + "required": false + }, + { + "type": "codewhispererSupplementalContextLength", + "required": false + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererUserGroup" + } + ] + }, + { + "name": "codewhisperer_userModification", + "description": "Percentage of user modifications for the selected suggestion until a fixed period of time", + "metadata": [ + { + "type": "codewhispererCompletionType" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererModificationPercentage" + }, + { + "type": "codewhispererRequestId" + }, + { + "type": "codewhispererRuntime", + "required": false + }, + { + "type": "codewhispererRuntimeSource", + "required": false + }, + { + "type": "codewhispererSessionId", + "required": false + }, + { + "type": "codewhispererSuggestionIndex" + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererUserGroup" + } + ] + }, + { + "name": "codewhisperer_userTriggerDecision", + "description": "User decision aggregated at trigger level", + "metadata": [ + { + "type": "codewhispererSessionId", + "required": false + }, + { + "type": "codewhispererFirstRequestId" + }, + { + "type": "credentialStartUrl", + "required": false + }, + { + "type": "codewhispererIsPartialAcceptance", + "required": false + }, + { + "type": "codewhispererPartialAcceptanceCount", + "required": false + }, + { + "type": "codewhispererCharactersAccepted", + "required": false + }, + { + "type": "codewhispererCharactersRecommended", + "required": false + }, + { + "type": "reason", + "required": false + }, + { + "type": "codewhispererCompletionType" + }, + { + "type": "codewhispererLanguage" + }, + { + "type": "codewhispererGettingStartedTask", + "required": false + }, + { + "type": "codewhispererTriggerType" + }, + { + "type": "codewhispererAutomatedTriggerType", + "required": false + }, + { + "type": "codewhispererLineNumber" + }, + { + "type": "codewhispererCursorOffset" + }, + { + "type": "codewhispererSuggestionCount" + }, + { + "type": "codewhispererSuggestionImportCount" + }, + { + "type": "codewhispererTotalShownTime", + "required": false + }, + { + "type": "codewhispererTriggerCharacter", + "required": false + }, + { + "type": "codewhispererTypeaheadLength" + }, + { + "type": "codewhispererTimeSinceLastDocumentChange", + "required": false + }, + { + "type": "codewhispererTimeSinceLastUserDecision", + "required": false + }, + { + "type": "codewhispererTimeToFirstRecommendation", + "required": false + }, + { + "type": "codewhispererPreviousSuggestionState", + "required": false + }, + { + "type": "codewhispererSuggestionState" + }, + { + "type": "codewhispererClassifierResult", + "required": false + }, + { + "type": "codewhispererSupplementalContextTimeout", + "required": false + }, + { + "type": "codewhispererSupplementalContextIsUtg", + "required": false + }, + { + "type": "codewhispererSupplementalContextLength", + "required": false + }, + { + "type": "codewhispererSupplementalContextStrategyId", + "required": false + }, + { + "type": "codewhispererClassifierThreshold", + "required": false + }, + { + "type": "codewhispererUserGroup" + }, + { + "type": "codewhispererCustomizationArn", + "required": false + }, + { + "type": "codewhispererFeatureEvaluations", + "required": false + } + ] + }, + { + "name": "deeplink_open", + "description": "User requested that a resource be opened in the browser using the deeplink service", + "metadata": [ + { + "type": "source" + }, + { + "type": "result" + }, + { + "type": "serviceType", + "required": false + } + ], "passive": true }, { - "name": "s3_copyBucketName", - "description": "Copy the bucket name to the clipboard" + "name": "dynamicresource_copyIdentifier", + "description": "Copy the dynamic resource identifier", + "metadata": [ + { + "type": "resourceType" + } + ] }, { - "name": "s3_copyPath", - "description": "Copy the path of a S3 object to the clipboard" + "name": "dynamicresource_getResource", + "description": "Open the dynamic resource model in the IDE", + "metadata": [ + { + "type": "result" + }, + { + "type": "resourceType" + } + ] + }, + { + "name": "dynamicresource_listResource", + "description": "Expand a Resource Type node", + "metadata": [ + { + "type": "result" + }, + { + "type": "resourceType" + } + ] + }, + { + "name": "dynamicresource_mutateResource", + "description": "A dynamic resource mutation request completed", + "metadata": [ + { + "type": "result" + }, + { + "type": "resourceType" + }, + { + "type": "dynamicResourceOperation" + }, + { + "type": "duration" + } + ] + }, + { + "name": "dynamicresource_selectResources", + "description": "Change the list of available dynamic resources in the AWS Explorer" + }, + { + "name": "dynamodb_createTable", + "description": "Create a DynamoDB table", + "metadata": [ + { + "type": "result" + }, + { + "type": "reason", + "required": false + } + ] + }, + { + "name": "dynamodb_deleteTable", + "description": "Delete a DynamoDB table", + "metadata": [ + { + "type": "result" + }, + { + "type": "reason", + "required": false + } + ] + }, + { + "name": "dynamodb_edit", + "description": "Modify a DynamoDB entity", + "metadata": [ + { + "type": "result" + }, + { + "type": "dynamoDbTarget" + }, + { + "type": "reason", + "required": false + } + ] + }, + { + "name": "dynamodb_fetchRecords", + "description": "Fetch records from a DynamoDB table in the table browser", + "metadata": [ + { + "type": "result" + }, + { + "type": "dynamoDbFetchType" + }, + { + "type": "dynamoDbIndexType", + "required": false + } + ] + }, + { + "name": "dynamodb_openTable", + "description": "Open a DynamoDB table in the table browser", + "metadata": [ + { + "type": "result" + } + ] + }, + { + "name": "dynamodb_view", + "description": "View a DynamoDB entity", + "metadata": [ + { + "type": "result" + }, + { + "type": "dynamoDbTarget" + }, + { + "type": "reason", + "required": false + } + ] }, { - "name": "s3_copyUri", - "description": "Copy the S3 URI of a S3 object to the clipboard (e.g. s3:///abc.txt)", - "metadata": [{ "type": "result" }] + "name": "ec2_changeState", + "description": "Change the state of an EC2 Instance", + "metadata": [ + { + "type": "result" + }, + { + "type": "ec2InstanceState" + } + ] }, { - "name": "s3_copyUrl", - "description": "Copy the URL of a S3 object to the clipboard", - "metadata": [{ "type": "result" }, { "type": "presigned" }] + "name": "ec2_clearPrivateKey", + "unit": "Count", + "description": "Remove the private key of an EC2 Key Pair from internal storage", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_createBucket", - "description": "Create a S3 bucket", - "metadata": [{ "type": "result" }] + "name": "ec2_connectToInstance", + "description": "Perform a connection to an EC2 Instance", + "metadata": [ + { + "type": "result" + }, + { + "type": "ec2ConnectionType" + } + ] }, { - "name": "s3_deleteBucket", - "description": "Delete a S3 bucket", - "metadata": [{ "type": "result" }] + "name": "ec2_copyAmiToRegion", + "description": "Copy AMI image to another region", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_deleteObject", - "description": "Delete S3 object(s)", + "name": "ec2_createAmi", + "description": "Create an image from an EC2 Instance", "metadata": [ - { "type": "result" }, - { "type": "successCount", "required": false}, - { "type": "failedCount", "required": false} + { + "type": "result" + } ] }, { - "name": "s3_createFolder", - "description": "Create an S3 folder", - "metadata": [{ "type": "result" }] + "name": "ec2_createElasticIp", + "description": "Create (allocate) an Elastic IP address", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_downloadObject", - "description": "Download S3 object(s)", + "name": "ec2_createKeyPair", + "description": "Create an EC2 Key Pair", "metadata": [ - { "type": "result" }, - { "type": "successCount", "required": false}, - { "type": "failedCount", "required": false}, - { "type": "component", "required": false} + { + "type": "result" + } ] }, { - "name": "s3_downloadObjects", - "description": "Download multiple S3 objects", - "unit": "Count", - "metadata": [{ "type": "result" }] + "name": "ec2_createSecurityGroup", + "description": "Create an EC2 security group", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_uploadObject", - "description": "Upload S3 object(s)", + "name": "ec2_createSnapshot", + "description": "Create an EC2 volume snapshot", "metadata": [ - { "type": "result" }, - { "type": "successCount", "required": false}, - { "type": "failedCount", "required": false}, - { "type": "component", "required": false} + { + "type": "result" + } ] }, { - "name": "s3_renameObject", - "description": "Rename a single S3 object", - "metadata": [{ "type": "result" }] + "name": "ec2_createVolume", + "description": "Create an EC2 volume", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_uploadObjects", - "description": "Upload multiple S3 objects", + "name": "ec2_deleteAmi", "unit": "Count", - "metadata": [{ "type": "result" }] - }, - { - "name": "s3_openEditor", - "description": "Open a view of a S3 bucket", - "metadata": [{ "type": "result" }] - }, - { - "name": "s3_editObject", - "description": "Edit or view one or more S3 objects in the IDE", - "unit": "Count", + "description": "Delete (de-register) an AMI image", "metadata": [ - { "type": "result" }, - { "type": "component", "required": false} + { + "type": "result" + } ] }, { - "name": "s3_openBucketProperties", - "description": "Open a window to view S3 bucket properties", - "metadata": [{ "type": "result" }] + "name": "ec2_deleteElasticIp", + "description": "Delete (release) an Elastic IP address", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "s3_openMultipartUpload", - "description": "Open a window to view S3 Multipart upload", - "metadata": [{ "type": "result" }] + "name": "ec2_deleteKeyPair", + "unit": "Count", + "description": "Delete an EC2 Key Pair", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "toolkit_init", - "description": "The Toolkit has completed initialization", + "name": "ec2_deleteSecurityGroup", + "unit": "Count", + "description": "Delete an EC2 security group", "metadata": [ - { "type": "result", "required": false }, - { "type": "duration", "required": false } - ], - "passive": true + { + "type": "result" + } + ] }, { - "name": "toolkit_viewLogs", - "description": "View logs for the toolkit" + "name": "ec2_deleteSnapshot", + "unit": "Count", + "description": "Delete an EC2 Volume Snapshot", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_openQueue", - "description": "Open an SQS queue. Initially opens to either the send message pane or poll messages pane.", - "metadata": [{ "type": "sqsQueueType" }] + "name": "ec2_deleteVolume", + "unit": "Count", + "description": "Delete an EC2 Volume", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_createQueue", - "description": "Create a new SQS queue", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType", "required": false }] + "name": "ec2_editAmiPermission", + "description": "Edit AMI image permissions", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_sendMessage", - "description": "Send a message to an SQS queue", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editInstanceElasticIp", + "description": "Associate or disassociate an Elastic IP with an EC2 Instance", + "metadata": [ + { + "type": "result" + }, + { + "type": "enabled", + "required": false + } + ] }, { - "name": "sqs_deleteMessages", - "description": "Delete one or more messages from an SQS queue. Value indicates the number of messages that we tried to delete.", - "unit": "Count", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editInstanceShutdownBehavior", + "description": "Adjust the shutdown behavior of an EC2 Instance", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_subscribeSns", - "description": "Subscribe the queue to messages from an sns topic", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editInstanceTerminationProtection", + "description": "Adjust the termination protection of an EC2 Instance", + "metadata": [ + { + "type": "result" + }, + { + "type": "enabled", + "required": false + } + ] }, { - "name": "sqs_configureLambdaTrigger", - "description": "Configure the queue as a trigger for a Lambda", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editInstanceType", + "description": "Adjust the instance type of an EC2 Instance", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_editQueueParameters", - "description": "Edit the Queue parameters", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editInstanceUserData", + "description": "Adjust an EC2 Instance's user data", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_purgeQueue", - "description": "Purge all messages from the queue", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType" }] + "name": "ec2_editSecurityGroupPermission", + "description": "Alter an EC2 security group permission", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sqs_deleteQueue", - "description": "Called when user deletes a SQS queue", - "metadata": [{ "type": "result" }, { "type": "sqsQueueType", "required": false }] + "name": "ec2_editVolumeAttachment", + "description": "Attach (enabled = true) or detach a volume", + "metadata": [ + { + "type": "result" + }, + { + "type": "enabled" + } + ] }, { - "name": "sns_createTopic", - "description": "Create a SNS Topic", - "metadata": [{ "type": "result" }] + "name": "ec2_exportPrivateKey", + "description": "Save the private key of an EC2 Key Pair out to disk", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_createSubscription", - "description": "Create a SNS Subscription", - "metadata": [{ "type": "result" }] + "name": "ec2_importPrivateKey", + "description": "Store the private key of an EC2 Key Pair in internal storage", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_openTopic", - "description": "Open a window to view details of SNS Topic", - "metadata": [{ "type": "result" }] + "name": "ec2_launchInstance", + "description": "Launch an EC2 Instance", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_openSubscriptions", - "description": "Open a window to view SNS Subscriptions", - "metadata": [{ "type": "result" }] + "name": "ec2_openAMIs", + "description": "Open a window to view EC2 AMIs", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_deleteTopic", - "description": "Called when user deletes a SNS Topic", - "metadata": [{ "type": "result" }] + "name": "ec2_openElasticIPs", + "description": "Open a window to view EC2 Elastic IPs", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_deleteSubscription", - "description": "Called when user deletes SNS subscription(s)", - "unit": "Count", - "metadata": [{ "type": "result" }] + "name": "ec2_openInstances", + "description": "Open a window to view EC2 Instances", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "sns_publishMessage", - "description": "Publish message to a SNS topic", - "metadata": [{ "type": "result" }] + "name": "ec2_openKeyPairs", + "description": "Open to view EC2 Key pairs", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "vpc_openRouteTables", - "description": "Open a window to view VPC RouteTable", - "metadata": [{ "type": "result" }] + "name": "ec2_openSecurityGroups", + "description": "Open a window to view EC2 Security Groups", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "vpc_openGateways", - "description": "Open a window to view VPC Internet Gateway", - "metadata": [{ "type": "result" }] + "name": "ec2_openVolumes", + "description": "Open a window to view EC2 Volumes", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "vpc_openACLs", - "description": "Open a window to view VPC Network ACLs", - "metadata": [{ "type": "result" }] + "name": "ec2_viewInstanceSystemLog", + "description": "View the system log of an EC2 Instance", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "vpc_openSubnets", - "description": "Open a window to view VPC Subnets", - "metadata": [{ "type": "result" }] + "name": "ec2_viewInstanceUserData", + "description": "View an EC2 Instance's user data", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "vpc_openVPCs", - "description": "Open a window to view VPC details", - "metadata": [{ "type": "result" }] + "name": "ecr_copyRepositoryUri", + "description": "Called when the user copies the repository uri from a node" }, { - "name": "cloudwatchinsights_openEditor", - "description": "Open the insights query editor", - "metadata": [{ "type": "insightsDialogOpenSource" }] + "name": "ecr_copyTagUri", + "description": "Called when the user copies the repository tag uri from a node. The tag uri is the repository uri + : + the tag name" }, { - "name": "cloudwatchinsights_executeQuery", - "description": "Start an insights query", + "name": "ecr_createRepository", + "description": "Called when creating a new ECR repository", "metadata": [ - { "type": "result" }, - { "type": "insightsQueryTimeType" }, - { "type": "insightsQueryStringType" } + { + "type": "result" + } ] }, { - "name": "cloudwatchinsights_saveQuery", - "description": "Save query parameters to AWS", - "metadata": [{ "type": "result" }] - }, - { - "name": "cloudwatchinsights_retrieveQuery", - "description": "Retrieve list of available saved queries from AWS", - "metadata": [{ "type": "result" }] + "name": "ecr_deleteRepository", + "description": "Called when deleting an existing ECR repository", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "cloudwatchinsights_openDetailedLogRecord", - "description": "Get all details for the selected log record", - "metadata": [{ "type": "result" }] + "name": "ecr_deleteTags", + "unit": "Count", + "description": "Called when deleting a tag in an ECR repository. The operation is a batch operation by default, value represents the number of tags deleted.", + "metadata": [ + { + "type": "result" + } + ] }, { - "name": "toolkit_getExternalResource", - "description": "The toolkit tried to retrieve blob data from a url", + "name": "ecr_deployImage", + "description": "Called when deploying an image to ECR", "metadata": [ { - "type": "url", - "required": true + "type": "result" }, { - "type": "result", - "required": true + "type": "ecrDeploySource", + "required": false }, { - "type": "reason", + "type": "duration", "required": false } - ], - "passive": true + ] }, { - "name": "toolkit_showNotification", - "description": "The toolkit tried to show a notification message", + "name": "ecs_deleteCluster", + "description": "Delete an ECS cluster", "metadata": [ { - "type": "result", - "required": true - }, - { - "type": "id", - "required": true - }, - { - "type": "component", - "required": true - }, - { - "type": "reason", - "required": false + "type": "result" } - ], - "passive": true + ] }, { - "name": "toolkit_showAction", - "description": "The toolkit tried to show an action. Source represents the notification that produced the action", + "name": "ecs_deleteScheduledTask", + "unit": "Count", + "description": "Delete ECS Scheduled task(s)", "metadata": [ { - "type": "result", - "required": true - }, + "type": "result" + } + ] + }, + { + "name": "ecs_deleteService", + "description": "Called when user deletes an ECS service", + "metadata": [ { - "type": "id", - "required": true - }, + "type": "result" + } + ] + }, + { + "name": "ecs_deployScheduledTask", + "description": "Called when deploying a scheduled task to an ECS cluster", + "metadata": [ { - "type": "source", - "required": true + "type": "result" }, { - "type": "component", - "required": true + "type": "ecsLaunchType" }, { - "type": "reason", + "type": "duration", "required": false } - ], - "passive": true + ] }, { - "name": "toolkit_invokeAction", - "description": "A user invoked an action. Source represents the notification that produced the action", + "name": "ecs_deployService", + "description": "Called when deploying a service to an ECS cluster", "metadata": [ { - "type": "result", - "required": true - }, - { - "type": "id", - "required": true - }, - { - "type": "source", - "required": true + "type": "result" }, { - "type": "component", - "required": true + "type": "ecsLaunchType" }, { - "type": "reason", + "type": "duration", "required": false } ] }, { - "name": "dynamicresource_getResource", - "description": "Open the dynamic resource model in the IDE", + "name": "ecs_deployTask", + "description": "Called when deploying a task to an ECS cluster", "metadata": [ { "type": "result" }, { - "type": "resourceType" + "type": "ecsLaunchType" + }, + { + "type": "duration", + "required": false } ] }, { - "name": "dynamicresource_listResource", - "description": "Expand a Resource Type node", + "name": "ecs_disableExecuteCommand", + "description": "Called when ECS execute command is disabled", "metadata": [ { "type": "result" - }, - { - "type": "resourceType" } ] }, { - "name": "dynamicresource_selectResources", - "description": "Change the list of available dynamic resources in the AWS Explorer" - }, - { - "name": "dynamicresource_copyIdentifier", - "description": "Copy the dynamic resource identifier", + "name": "ecs_editService", + "description": "Edit configuration of an ECS service", "metadata": [ { - "type": "resourceType" + "type": "result" } ] }, { - "name": "dynamicresource_mutateResource", - "description": "A dynamic resource mutation request completed", + "name": "ecs_enableExecuteCommand", + "description": "Called when ECS execute command is enabled", "metadata": [ { "type": "result" - }, - { - "type": "resourceType" - }, - { - "type": "dynamicResourceOperation" - }, - { - "type": "duration" } ] }, { - "name": "aws_experimentActivation", - "description": "An experiment was activated or deactivated in the Toolkit", + "name": "ecs_openCluster", + "description": "Open to view status of an ECS Cluster", "metadata": [ { - "type": "experimentId" - }, - { - "type": "experimentState" + "type": "result" } ] }, { - "name": "aws_toolInstallation", - "description": "An external tool was installed automatically", + "name": "ecs_openRepository", + "description": "Open to view status of an ECS Repository", "metadata": [ - { - "type": "toolId" - }, { "type": "result" } - ], - "passive": true + ] }, { - "name": "aws_modifySetting", - "description": "An setting was changed by users in the Toolkit. This metric can optionally provide the new state of the setting via settingState.", + "name": "ecs_publishWizard", + "description": "Called when user completes the ECS publish wizard", "metadata": [ { - "type": "settingId" + "type": "result" }, { - "type": "settingState", + "type": "duration", "required": false } ] }, { - "name": "ui_click", - "description": "User clicked/activated a UI element. This does not necessarily have to be an explicit mouse click. Any user action that has the same behavior as a mouse click can use this event.", - "metadata": [{ "type": "elementId" }] - }, - { - "name": "deeplink_open", - "description": "User requested that a resource be opened in the browser using the deeplink service", + "name": "ecs_runExecuteCommand", + "description": "Called when the ECS execute command is run", "metadata": [ - { - "type": "source" - }, { "type": "result" }, { - "type": "serviceType", - "required": false + "type": "ecsExecuteCommandType" } - ], - "passive": true + ] }, { - "name": "amazonq_endChat", - "description": "Captures end of the conversation with amazonq /dev", + "name": "ecs_stopTask", + "unit": "Count", + "description": "Stop ECS task(s)", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "amazonqEndOfTheConversationLatency", "required": false }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_approachInvoke", - "description": "Captures Approach generation process", + "name": "feedback_result", + "description": "Called while submitting in-IDE feedback", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "amazonqGenerateApproachIteration" }, - { "type": "amazonqGenerateApproachLatency" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_startConversationInvoke", - "description": "Captures startConversation invocation process", + "name": "file_editAwsFile", + "description": "Use authoring features such as autocompletion, syntax checking, and highlighting, for AWS filetypes (CFN, SAM, etc.). Emit this _once_ per file-editing session for a given file. Ideally this is emitted only if authoring features are used, rather than merely opening or touching a file.", "metadata": [ - { "type": "amazonqConversationId", "required": false }, - { "type": "credentialStartUrl", "required": false } - ] + { + "type": "result" + }, + { + "type": "awsFiletype", + "required": true + }, + { + "type": "filenameExt", + "required": false + } + ] }, { - "name": "amazonq_createUpload", - "description": "Captures createUploadUrl invocation process", + "name": "iam_create", + "description": "Create an IAM resource", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "amazonqRepositorySize", "required": false }, - { "type": "credentialStartUrl", "required": false }, - { "type": "amazonqUploadIntent", "required": false } + { + "type": "result" + }, + { + "type": "iamResourceType" + } ] }, { - "name": "amazonq_isApproachAccepted", - "description": "User has accepted the approach generated", + "name": "iam_createUserAccessKey", + "description": "Create Access Key for an IAM user", "metadata": [ - { "type": "enabled" }, - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_codeGenerationInvoke", - "description": "Captures Code Generation generation process", + "name": "iam_delete", + "description": "Delete an IAM resource", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "amazonqGenerateCodeIteration" }, - { "type": "amazonqGenerateCodeResponseLatency" }, - { "type": "amazonqCodeGenerationResult" }, - { "type": "amazonqNumberOfFilesGenerated", "required": false }, - { "type": "amazonqRepositorySize" }, - { "type": "amazonqNumberOfReferences", "required": false }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + }, + { + "type": "iamResourceType" + } ] }, { - "name": "amazonq_isAcceptedCodeChanges", - "description": "User applied code changes generated for the task.", + "name": "iam_deleteUserAccessKey", + "description": "Delete Access Key for an IAM user", "metadata": [ - { "type": "enabled" }, - { "type": "amazonqConversationId" }, - { "type": "amazonqNumberOfFilesAccepted"}, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_isProvideFeedbackForCodeGen", - "description": "User asked to regenerate code generation with a comment", + "name": "iam_edit", + "description": "Edits policy/configuration associated with an IAM resource", "metadata": [ - { "type": "enabled" }, - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + }, + { + "type": "iamResourceType" + } ] }, { - "name": "amazonq_isReviewedChanges", - "description": "User reviewed changes", - "passive": true, + "name": "iam_open", + "description": "Open a window to view/edit an IAM resource", "metadata": [ - { "type": "enabled" }, - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + }, + { + "type": "iamResourceType" + } ] }, { - "name": "amazonq_codeGenerationThumbsUp", - "description": "User clicked on the thumbs up button to say that they are unsatisfied", - "unit": "Count", + "name": "iam_openGroup", + "description": "Open a window to view/edit IAM Group Policy", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_codeGenerationThumbsDown", - "description": "User clicked on the thumbs down button to say that they are unsatisfied", - "unit": "Count", + "name": "iam_openRole", + "description": "Open a window to view/edit IAM Role Policy", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "amazonq_approachThumbsUp", - "description": "User clicked on the thumbs up button, to mention that they are satisfied", - "unit": "Count", + "name": "iam_openUser", + "description": "Open a window to view/edit IAM User Configuration", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } - ] + { + "type": "result" + } + ] }, { - "name": "amazonq_approachThumbsDown", - "description": "User clicked on the thumbs down button to say that they are unsatisfied", - "unit": "Count", + "name": "lambda_configure", + "description": "Called when opening the local configuration of a Lambda to edit", "metadata": [ - { "type": "amazonqConversationId" }, - { "type": "credentialStartUrl", "required": false } + { + "type": "result" + } ] }, { - "name": "codewhisperer_codePercentage", - "description": "Percentage of user tokens against suggestions until 5 mins of time", + "name": "lambda_create", + "description": "Called when creating lambdas remotely", "metadata": [ { - "type": "codewhispererAcceptedTokens" - }, - { - "type": "codewhispererLanguage" - }, - { - "type": "codewhispererPercentage" - }, - { - "type": "codewhispererTotalTokens" - }, - { - "type": "codewhispererUserGroup" - }, - { - "type": "reason", - "required": false - }, - { - "type": "successCount" - }, - { - "type": "codewhispererCustomizationArn", - "required": false - }, - { - "type": "credentialStartUrl", - "required": false + "type": "runtime" } - ], - "passive": true + ] }, { - "name": "codewhisperer_securityScan", - "description": "Client side invocation of the CodeWhisperer Security Scan", + "name": "lambda_createProject", + "description": "Called when creating a lambda project", "metadata": [ { - "type": "codewhispererCodeScanLines" - }, - { - "type": "codewhispererCodeScanJobId", - "required": false - }, - { - "type": "codewhispererCodeScanProjectBytes", - "required": false - }, - { - "type": "codewhispererCodeScanSrcPayloadBytes" - }, - { - "type": "codewhispererCodeScanBuildPayloadBytes", - "required": false - }, - { - "type": "codewhispererCodeScanSrcZipFileBytes" - }, - { - "type": "codewhispererCodeScanBuildZipFileBytes", - "required": false - }, - { - "type": "codewhispererCodeScanTotalIssues" - }, - { - "type": "codewhispererCodeScanIssuesWithFixes", - "required": false - }, - { - "type": "codewhispererLanguage" - }, - { - "type": "duration" - }, - { - "type": "contextTruncationDuration" - }, - { - "type": "artifactsUploadDuration" - }, - { - "type": "codeScanServiceInvocationsDuration" + "type": "result" }, { - "type": "reason", - "required": false + "type": "language" }, { - "type": "result" + "type": "templateName" }, { - "type": "credentialStartUrl", + "type": "variant", "required": false } ] }, { - "name": "codewhisperer_codeScanIssueHover", - "description": "Called when a code scan issue is hovered over", - "metadata": [ - { "type": "findingId" }, - { "type": "detectorId" }, - { "type": "ruleId", "required": false }, - { "type": "includesFix" }, - { "type": "credentialStartUrl", "required": false } - ] - }, - { - "name": "codewhisperer_codeScanIssueApplyFix", - "description": "Called when a code scan issue suggested fix is applied", - "metadata": [ - { "type": "findingId" }, - { "type": "detectorId" }, - { "type": "component" }, - { "type": "ruleId", "required": false }, - { "type": "result" }, - { "type": "reason", "required": false }, - { "type": "credentialStartUrl", "required": false } - ] - }, - { - "name": "codewhisperer_codeScanIssueViewDetails", - "description": "Called when a code scan issue webview is opened", + "name": "lambda_delete", + "description": "called when deleting lambdas remotely", + "unit": "None", "metadata": [ - { "type": "findingId" }, - { "type": "detectorId" }, - { "type": "ruleId", "required": false }, - { "type": "credentialStartUrl", "required": false } + { + "type": "duration" + }, + { + "type": "result" + } ] }, { - "name": "codewhisperer_serviceInvocation", - "description": "Client side invocation of the CodeWhisperer service for suggestion", + "name": "lambda_deploy", + "description": "Called when deploying a Lambda Function", "metadata": [ { - "type": "codewhispererAutomatedTriggerType", - "required": false - }, - { - "type": "codewhispererCompletionType", - "required": false + "type": "lambdaPackageType" }, { - "type": "codewhispererCursorOffset" + "type": "result" }, { - "type": "codewhispererLanguage" + "type": "initialDeploy" }, { - "type": "codewhispererGettingStartedTask", + "type": "duration", "required": false }, { - "type": "codewhispererLastSuggestionIndex", + "type": "runtime", "required": false }, { - "type": "codewhispererLineNumber" - }, - { - "type": "codewhispererRequestId", + "type": "platform", "required": false }, { - "type": "codewhispererRuntime", + "type": "lambdaArchitecture", "required": false }, { - "type": "codewhispererRuntimeSource", + "type": "language", "required": false }, { - "type": "codewhispererSessionId", + "type": "xrayEnabled", "required": false }, { - "type": "codewhispererSupplementalContextTimeout", + "type": "serviceType", "required": false }, { - "type": "codewhispererSupplementalContextIsUtg", + "type": "source", "required": false - }, + } + ] + }, + { + "name": "lambda_editFunction", + "description": "Called when creating lambdas remotely", + "metadata": [ { - "type": "codewhispererSupplementalContextLatency", + "type": "update", "required": false }, { - "type": "codewhispererSupplementalContextLength", - "required": false + "type": "lambdaPackageType" }, { - "type": "codewhispererTriggerType" - }, + "type": "result" + } + ] + }, + { + "name": "lambda_goToHandler", + "description": "Jump to a lambda handler from elsewhere", + "metadata": [ { - "type": "duration" - }, + "type": "result" + } + ] + }, + { + "name": "lambda_import", + "description": "Called when importing a remote Lambda function", + "metadata": [ { - "type": "reason", + "type": "runtime", "required": false }, { "type": "result" - }, + } + ] + }, + { + "name": "lambda_invokeLocal", + "description": "Called when invoking lambdas locally (with SAM in most toolkits)", + "metadata": [ { - "type": "credentialStartUrl", + "type": "runtime", "required": false }, { - "type": "codewhispererImportRecommendationEnabled", + "type": "version", "required": false }, { - "type": "codewhispererUserGroup" + "type": "lambdaPackageType" }, { - "type": "codewhispererCustomizationArn", + "type": "result" + }, + { + "type": "debug" + }, + { + "type": "lambdaArchitecture", "required": false } ] }, { - "name": "codewhisperer_blockedInvocation", - "description": "Client side invocation blocked by another invocation in progress", + "name": "lambda_invokeRemote", + "description": "Called when invoking lambdas remotely", "metadata": [ { - "type": "codewhispererAutomatedTriggerType", + "type": "runtime", "required": false }, { - "type": "codewhispererCursorOffset" - }, + "type": "result" + } + ] + }, + { + "name": "lambda_publishWizard", + "description": "Called when user completes the Lambda publish wizard", + "metadata": [ { - "type": "codewhispererLanguage" + "type": "result" }, { - "type": "codewhispererLineNumber" + "type": "duration", + "required": false }, { - "type": "codewhispererTriggerType" + "type": "serviceType", + "required": false }, { - "type": "credentialStartUrl", + "type": "source", "required": false } ] }, { - "name": "codewhisperer_userDecision", - "description": "User acceptance or rejection of each suggestion returned by the CodeWhisperer service request", + "name": "lambda_updateFunctionCode", + "description": "Called when updating a Lambda function's code outside the context of a SAM template", "metadata": [ { - "type": "codewhispererCompletionType" + "type": "runtime", + "required": false }, { - "type": "codewhispererLanguage" + "type": "result" + } + ] + }, + { + "name": "rds_createConnectionConfiguration", + "description": "Called when creating a new database connection configuration to for a RDS database. In Datagrip we do not get this infromation if it is created directly, so this is only counts actions.", + "metadata": [ + { + "type": "result" }, { - "type": "codewhispererGettingStartedTask", - "required": false + "type": "databaseCredentials" }, { - "type": "codewhispererPaginationProgress", + "type": "databaseEngine", "required": false - }, + } + ] + }, + { + "name": "rds_createSecurityGroup", + "description": "Create a RDS security group", + "metadata": [ { - "type": "codewhispererRequestId" - }, + "type": "result" + } + ] + }, + { + "name": "rds_createSubnetGroup", + "description": "Create a RDS subnet group", + "metadata": [ { - "type": "codewhispererRuntime", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "rds_deleteInstance", + "description": "Delete a RDS DB instance", + "metadata": [ { - "type": "codewhispererRuntimeSource", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "rds_deleteSecurityGroup", + "unit": "Count", + "description": "Delete RDS security group(s)", + "metadata": [ { - "type": "codewhispererSessionId", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "rds_deleteSubnetGroup", + "unit": "Count", + "description": "Delete RDS subnet group(s)", + "metadata": [ { - "type": "codewhispererSuggestionIndex" - }, + "type": "result" + } + ] + }, + { + "name": "rds_getCredentials", + "description": "Called when getting IAM/SecretsManager credentials for a RDS database. Value represents how long it takes in ms.", + "unit": "Milliseconds", + "metadata": [ { - "type": "codewhispererSuggestionReferenceCount" + "type": "result" }, { - "type": "codewhispererSuggestionReferences", - "required": false + "type": "databaseCredentials" }, { - "type": "codewhispererSuggestionImportCount", - "required": false - }, + "type": "databaseEngine" + } + ] + }, + { + "name": "rds_launchInstance", + "description": "Launch a RDS DB instance", + "metadata": [ { - "type": "codewhispererSuggestionState" - }, + "type": "result" + } + ] + }, + { + "name": "rds_openInstances", + "description": "Open a window to view RDS DB Instances", + "metadata": [ { - "type": "codewhispererSupplementalContextTimeout", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "rds_openSecurityGroups", + "description": "Open a window to view RDS Security Groups", + "metadata": [ { - "type": "codewhispererSupplementalContextIsUtg", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "rds_openSubnets", + "description": "Open a window to view RDS Subnet Groups", + "metadata": [ { - "type": "codewhispererSupplementalContextLength", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "redshift_createConnectionConfiguration", + "description": "Called when creating a new database connection configuration to for a Redshift database. In Datagrip we do not get this infromation if it is created directly, so this only counts actions.", + "metadata": [ { - "type": "codewhispererTriggerType" + "type": "result" }, { - "type": "credentialStartUrl", - "required": false + "type": "databaseCredentials" + } + ] + }, + { + "name": "redshift_getCredentials", + "description": "Called when getting IAM/SecretsManager credentials for a Redshift database. Value represents how long it takes in ms.", + "unit": "Milliseconds", + "metadata": [ + { + "type": "result" }, { - "type": "codewhispererUserGroup" + "type": "databaseCredentials" } ] }, { - "name": "codewhisperer_userTriggerDecision", - "description": "User decision aggregated at trigger level", + "name": "s3_copyBucketName", + "description": "Copy the bucket name to the clipboard" + }, + { + "name": "s3_copyPath", + "description": "Copy the path of a S3 object to the clipboard" + }, + { + "name": "s3_copyUri", + "description": "Copy the S3 URI of a S3 object to the clipboard (e.g. s3:///abc.txt)", "metadata": [ { - "type": "codewhispererSessionId", - "required": false - }, - { - "type": "codewhispererFirstRequestId" - }, - { - "type": "credentialStartUrl", - "required": false - }, - { - "type": "codewhispererIsPartialAcceptance", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_copyUrl", + "description": "Copy the URL of a S3 object to the clipboard", + "metadata": [ { - "type": "codewhispererPartialAcceptanceCount", - "required": false + "type": "result" }, { - "type": "codewhispererCharactersAccepted", - "required": false - }, + "type": "presigned" + } + ] + }, + { + "name": "s3_createBucket", + "description": "Create a S3 bucket", + "metadata": [ { - "type": "codewhispererCharactersRecommended", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_createFolder", + "description": "Create an S3 folder", + "metadata": [ { - "type": "reason", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_deleteBucket", + "description": "Delete a S3 bucket", + "metadata": [ { - "type": "codewhispererCompletionType" - }, + "type": "result" + } + ] + }, + { + "name": "s3_deleteObject", + "description": "Delete S3 object(s)", + "metadata": [ { - "type": "codewhispererLanguage" + "type": "result" }, { - "type": "codewhispererGettingStartedTask", + "type": "successCount", "required": false }, { - "type": "codewhispererTriggerType" - }, - { - "type": "codewhispererAutomatedTriggerType", + "type": "failedCount", "required": false - }, - { - "type": "codewhispererLineNumber" - }, - { - "type": "codewhispererCursorOffset" - }, - { - "type": "codewhispererSuggestionCount" - }, + } + ] + }, + { + "name": "s3_downloadObject", + "description": "Download S3 object(s)", + "metadata": [ { - "type": "codewhispererSuggestionImportCount" + "type": "result" }, { - "type": "codewhispererTotalShownTime", + "type": "successCount", "required": false }, { - "type": "codewhispererTriggerCharacter", + "type": "failedCount", "required": false }, { - "type": "codewhispererTypeaheadLength" - }, - { - "type": "codewhispererTimeSinceLastDocumentChange", + "type": "component", "required": false - }, + } + ] + }, + { + "name": "s3_downloadObjects", + "description": "Download multiple S3 objects", + "unit": "Count", + "metadata": [ { - "type": "codewhispererTimeSinceLastUserDecision", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_editObject", + "description": "Edit or view one or more S3 objects in the IDE", + "unit": "Count", + "metadata": [ { - "type": "codewhispererTimeToFirstRecommendation", - "required": false + "type": "result" }, { - "type": "codewhispererPreviousSuggestionState", + "type": "component", "required": false - }, - { - "type": "codewhispererSuggestionState" - }, + } + ] + }, + { + "name": "s3_openBucketProperties", + "description": "Open a window to view S3 bucket properties", + "metadata": [ { - "type": "codewhispererClassifierResult", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_openEditor", + "description": "Open a view of a S3 bucket", + "metadata": [ { - "type": "codewhispererSupplementalContextTimeout", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_openMultipartUpload", + "description": "Open a window to view S3 Multipart upload", + "metadata": [ { - "type": "codewhispererSupplementalContextIsUtg", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_renameObject", + "description": "Rename a single S3 object", + "metadata": [ { - "type": "codewhispererSupplementalContextLength", - "required": false - }, + "type": "result" + } + ] + }, + { + "name": "s3_uploadObject", + "description": "Upload S3 object(s)", + "metadata": [ { - "type": "codewhispererSupplementalContextStrategyId", - "required": false + "type": "result" }, { - "type": "codewhispererClassifierThreshold", + "type": "successCount", "required": false }, { - "type": "codewhispererUserGroup" - }, - { - "type": "codewhispererCustomizationArn", + "type": "failedCount", "required": false }, { - "type": "codewhispererFeatureEvaluations", + "type": "component", "required": false } ] }, { - "name": "codewhisperer_onboardingClick", - "description": "This metric provides the particular language and task type selected by the user in the onboarding page by clicking on the Try Example button.", + "name": "s3_uploadObjects", + "description": "Upload multiple S3 objects", + "unit": "Count", "metadata": [ { - "type": "codewhispererLanguage" - }, - { - "type": "codewhispererGettingStartedTask" + "type": "result" } ] }, { - "name": "codewhisperer_userModification", - "description": "Percentage of user modifications for the selected suggestion until a fixed period of time", + "name": "sam_deploy", + "description": "Called when deploying a SAM application", "metadata": [ { - "type": "codewhispererCompletionType" - }, - { - "type": "codewhispererLanguage" - }, - { - "type": "codewhispererModificationPercentage" - }, - { - "type": "codewhispererRequestId" - }, - { - "type": "codewhispererRuntime", - "required": false - }, - { - "type": "codewhispererRuntimeSource", - "required": false + "type": "result" }, { - "type": "codewhispererSessionId", + "type": "version", "required": false - }, - { - "type": "codewhispererSuggestionIndex" - }, + } + ] + }, + { + "name": "sam_info", + "description": "Called when checking if the SAM executable on the local machine is valid with a valid version", + "passive": true, + "metadata": [ { - "type": "codewhispererTriggerType" + "type": "result" }, { - "type": "credentialStartUrl", + "type": "reason", "required": false }, { - "type": "codewhispererUserGroup" + "type": "version", + "required": false } ] }, { - "name": "codewhisperer_perceivedLatency", - "description": "The duration from user last modification to the first recommendation shown in milliseconds", + "name": "sam_init", + "description": "Called when initing a SAM application", "metadata": [ { - "type": "codewhispererRequestId" + "type": "result" }, { - "type": "codewhispererSessionId", + "type": "runtime", "required": false }, { - "type": "duration" + "type": "templateName", + "required": false }, { - "type": "codewhispererTriggerType" + "type": "version", + "required": false }, { - "type": "codewhispererCompletionType" + "type": "lambdaPackageType", + "required": false }, { - "type": "codewhispererLanguage" + "type": "reason", + "required": false }, { - "type": "credentialStartUrl", + "type": "eventBridgeSchema", "required": false }, { - "type": "codewhispererUserGroup" + "type": "lambdaArchitecture", + "required": false } ] }, { - "name": "codewhisperer_clientComponentLatency", - "description": "The latency from each CodeWhisperer components in milliseconds", - "passive": true, + "name": "sam_sync", + "description": "Called when syncing a SAM application", "metadata": [ { - "type": "codewhispererRequestId" - }, - { - "type": "codewhispererSessionId" - }, - { - "type": "codewhispererPreprocessingLatency" - }, - { - "type": "codewhispererCredentialFetchingLatency" - }, - { - "type": "codewhispererPostprocessingLatency" - }, - { - "type": "codewhispererFirstCompletionLatency" - }, - { - "type": "codewhispererEndToEndLatency" - }, - { - "type": "codewhispererAllCompletionsLatency" - }, - { - "type": "codewhispererCompletionType" + "type": "result" }, { - "type": "codewhispererTriggerType" + "type": "syncedResources" }, { - "type": "codewhispererLanguage" + "type": "lambdaPackageType", + "required": false }, { - "type": "credentialStartUrl", + "type": "reason", "required": false }, { - "type": "codewhispererUserGroup" + "type": "version", + "required": false } ] }, { - "name": "codewhisperer_enabled", - "description": "Whether or not CodeWhisperer is enabled", - "passive": true, + "name": "schemas_download", + "description": "Called when downloading an EventBridge schema", "metadata": [ { - "type": "source", - "required": true - }, - { - "type": "enabled", - "required": true + "type": "result" }, { - "type": "credentialStartUrl", + "type": "schemaLanguage", "required": false } ] }, { - "name": "codecatalyst_createDevEnvironment", - "description": "Create an Amazon CodeCatalyst Dev Environment", + "name": "schemas_search", + "description": "Called when searching an EventBridge schema registry", "metadata": [ - { "type": "userId" }, - { "type": "result" }, { - "type": "codecatalyst_createDevEnvironmentRepoType", - "required": false + "type": "result" } ] }, { - "name": "codecatalyst_updateDevEnvironmentSettings", - "description": "Update properties of a Amazon CodeCatalyst Dev Environment", - "metadata": [ - { "type": "userId" }, - { "type": "result" }, - { "type": "codecatalyst_updateDevEnvironmentLocationType" } - ] - }, - { - "name": "codecatalyst_updateDevfile", - "description": "Trigger a devfile update on a Amazon CodeCatalyst dev environment", - "metadata": [ - { "type": "userId" }, - { "type": "result" } - ] - }, - { - "name": "codecatalyst_localClone", - "description": "Clone a Amazon CodeCatalyst code repository locally", + "name": "schemas_view", + "description": "Called when selecting an EventBridge schema to view", "metadata": [ - { "type": "userId" }, - { "type": "result" } + { + "type": "result" + } ] }, { - "name": "codecatalyst_connect", - "description": "Connect to a Amazon CodeCatalyst dev environment", - "metadata": [ - { "type": "userId" }, - { "type": "result" } - ] + "name": "session_end", + "description": "Called when stopping the IDE on a best effort basis", + "passive": true }, { - "name": "codecatalyst_devEnvironmentWorkflowStatistic", - "description": "Workflow statistic for connecting to a dev environment", - "passive": true, - "metadata": [ - { "type": "userId" }, - { "type": "result" }, - { "type": "duration"}, - { "type": "codecatalyst_devEnvironmentWorkflowStep"}, - { "type": "codecatalyst_devEnvironmentWorkflowError", "required": false } - ] + "name": "session_start", + "description": "Called when starting the plugin", + "passive": true }, { - "name": "codeTransform_totalRunTime", - "passive": true, - "description": "We want to log the total run time in the users experience for the IDE. The total runtime should end when all API's have finished running and the users is prompted for next step actions.", + "name": "sns_createSubscription", + "description": "Create a SNS Subscription", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformRunTimeLatency", - "required": true - }, - { - "type": "codeTransformResultStatusMessage", - "required": false - }, - { - "type": "codeTransformLocalJavaVersion", - "required": false - }, - { - "type": "codeTransformLocalMavenVersion", - "required": false + "type": "result" } ] }, { - "name": "codeTransform_isDoubleClickedToTriggerUserModal", - "description": "The code transform button in the devtools to initiate the pre transform user modal window.", + "name": "sns_createTopic", + "description": "Create a SNS Topic", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformStartSrcComponents", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_isDoubleClickedToTriggerInvalidProject", - "description": "The code transform button in the devtools to initiate the job but there is a validation error.", - "metadata": [ - { - "type": "codeTransformPreValidationError", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformRuntimeError", - "required": false - }, - { "type": "result", "required": true }, - { "type": "reason", "required": true } - ] - }, - { - "name": "codeTransform_jobIsStartedFromUserPopupClick", - "description": "The user initiates a transform job from the pre transform user modal window.", + "name": "sns_deleteSubscription", + "description": "Called when user deletes SNS subscription(s)", + "unit": "Count", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_jobIsResumedAfterIdeClose", - "description": "The user was previously running a transformation and came back to IDE to see it still running", + "name": "sns_deleteTopic", + "description": "Called when user deletes a SNS Topic", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformJobId", - "required": true - }, - { - "type": "codeTransformStatus", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_jobIsClosedDuringIdeRun", - "description": "The user closes their IDE and stops viewing the transformation.", + "name": "sns_openSubscriptions", + "description": "Open a window to view SNS Subscriptions", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformJobId", - "required": true - }, - { - "type": "codeTransformStatus", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_jobIsStartedFromChatPrompt", - "description": "The user initiates a transform job from Amazon Q chat prompt.", + "name": "sns_openTopic", + "description": "Open a window to view details of SNS Topic", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_jobIsCanceledFromUserPopupClick", - "description": "The code transform button to initiate the pre transform user modal.", + "name": "sns_publishMessage", + "description": "Publish message to a SNS topic", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_jobStartedCompleteFromPopupDialog", - "passive": true, - "description": "After modal validation of inputs, code execution will start and we will fire this event.", + "name": "sqs_configureLambdaTrigger", + "description": "Configure the queue as a trigger for a Lambda", "metadata": [ { - "type": "codeTransformJavaSourceVersionsAllowed", - "required": true - }, - { - "type": "codeTransformJavaTargetVersionsAllowed", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true - } - ] - }, - { - "name": "codeTransform_projectDetails", - "description": "Transform initiates project validation before user interaction and we want to gather project details then.", - "metadata" : [ - { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "result", - "required": true - }, - { - "type": "reason", - "required": false - }, - { - "type": "codeTransformPreValidationError", - "required": false + "type": "result" }, { - "type": "codeTransformLocalJavaVersion", - "required": false + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_jobStatusChanged", - "passive": true, - "description": "During the transformation progress, log the status steps returning from the API.", + "name": "sqs_createQueue", + "description": "Create a new SQS queue", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformJobId", - "required": true + "type": "result" }, { - "type": "codeTransformStatus", - "required": true + "type": "sqsQueueType", + "required": false } ] }, { - "name": "codeTransform_configurationFileSelectedChanged", - "description": "Fire a change event when users select a new configuration/module file from the dropdown.", + "name": "sqs_deleteMessages", + "description": "Delete one or more messages from an SQS queue. Value indicates the number of messages that we tried to delete.", + "unit": "Count", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" + }, + { + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_jobIsCancelledByUser", - "description": "After a job is running the user has the ability to cancel the job.", + "name": "sqs_deleteQueue", + "description": "Called when user deletes a SQS queue", "metadata": [ { - "type": "codeTransformCancelSrcComponents", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true + "type": "result" }, { - "type": "codeTransformRuntimeError", + "type": "sqsQueueType", "required": false } ] }, { - "name": "codeTransform_jobCreateZipEndTime", - "description": "A timestamp for when the job is ending upload zip contents", + "name": "sqs_editQueueParameters", + "description": "Edit the Queue parameters", "metadata": [ { - "type": "codeTransformTotalByteSize", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true + "type": "result" }, { - "type": "codeTransformRunTimeLatency", - "required": true + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_jobArtifactDownloadAndDeserializeTime", - "description": "A timestamp for when the job is ending download zip contents", + "name": "sqs_openQueue", + "description": "Open an SQS queue. Initially opens to either the send message pane or poll messages pane.", "metadata": [ { - "type": "codeTransformJobId", - "required": true - }, - { - "type": "codeTransformTotalByteSize", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true - }, + "type": "sqsQueueType" + } + ] + }, + { + "name": "sqs_purgeQueue", + "description": "Purge all messages from the queue", + "metadata": [ { - "type": "codeTransformRunTimeLatency", - "required": true + "type": "result" }, { - "type": "codeTransformRuntimeError", - "required": false + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_vcsViewerClicked", - "description": "An interactivity measured when users click to view diff results.", + "name": "sqs_sendMessage", + "description": "Send a message to an SQS queue", "metadata": [ { - "type": "codeTransformVCSViewerSrcComponents", - "required": true - }, - { - "type": "codeTransformSessionId", - "required": true + "type": "result" }, { - "type": "codeTransformJobId", - "required": false + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_vcsDiffViewerVisible", - "description": "A timestamp for when the diff view is being displayed to the user.", + "name": "sqs_subscribeSns", + "description": "Subscribe the queue to messages from an sns topic", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" }, { - "type": "codeTransformJobId", - "required": false + "type": "sqsQueueType" } ] }, { - "name": "codeTransform_vcsViewerCanceled", - "description": "An interactivity measured when users cancel a patch view.", + "name": "toolkit_getExternalResource", + "description": "The toolkit tried to retrieve blob data from a url", "metadata": [ { - "type": "codeTransformPatchViewerCancelSrcComponents", + "type": "url", "required": true }, { - "type": "codeTransformRuntimeError", - "required": false - }, - { - "type": "codeTransformSessionId", + "type": "result", "required": true }, { - "type": "codeTransformJobId", + "type": "reason", "required": false - }, - { - "type": "codeTransformStatus", - "required": true } - ] + ], + "passive": true }, { - "name": "codeTransform_vcsViewerSubmitted", - "description": "An interactivity measured when users submit their patch view results.", + "name": "toolkit_init", + "description": "The Toolkit has completed initialization", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, - { - "type": "codeTransformJobId", + "type": "result", "required": false }, { - "type": "codeTransformStatus", - "required": true + "type": "duration", + "required": false } - ] + ], + "passive": true }, { - "name": "codeTransform_logApiLatency", - "passive": true, - "description": "A general logging measure for all client side API's latency.", + "name": "toolkit_invokeAction", + "description": "A user invoked an action. Source represents the notification that produced the action", "metadata": [ { - "type": "codeTransformApiNames", + "type": "result", "required": true }, { - "type": "codeTransformRunTimeLatency", + "type": "id", "required": true }, { - "type": "codeTransformSessionId", + "type": "source", "required": true }, { - "type": "codeTransformRequestId", - "required": false - }, - { - "type": "codeTransformJobId", - "required": false - }, - { - "type": "codeTransformUploadId", - "required": false + "type": "component", + "required": true }, { - "type": "codeTransformTotalByteSize", + "type": "reason", "required": false } ] }, { - "name": "codeTransform_logGeneralError", - "passive": true, - "description": "A general logging measure for all client side API errors.", + "name": "toolkit_showAction", + "description": "The toolkit tried to show an action. Source represents the notification that produced the action", "metadata": [ { - "type": "codeTransformApiErrorMessage", + "type": "result", "required": true }, { - "type": "codeTransformSessionId", + "type": "id", "required": true }, { - "type": "codeTransformJobId", + "type": "source", + "required": true + }, + { + "type": "component", + "required": true + }, + { + "type": "reason", "required": false } - ] + ], + "passive": true }, { - "name": "codeTransform_logApiError", - "passive": true, - "description": "A general logging measure for all client side API errors.", + "name": "toolkit_showNotification", + "description": "The toolkit tried to show a notification message", "metadata": [ { - "type": "codeTransformApiErrorMessage", + "type": "result", "required": true }, { - "type": "codeTransformApiNames", + "type": "id", "required": true }, { - "type": "codeTransformSessionId", + "type": "component", "required": true }, { - "type": "codeTransformRequestId", + "type": "reason", "required": false - }, + } + ], + "passive": true + }, + { + "name": "toolkit_viewLogs", + "description": "View logs for the toolkit" + }, + { + "name": "ui_click", + "description": "User clicked/activated a UI element. This does not necessarily have to be an explicit mouse click. Any user action that has the same behavior as a mouse click can use this event.", + "metadata": [ { - "type": "codeTransformJobId", - "required": false + "type": "elementId" } ] }, { - "name": "codeTransform_dependenciesCopied", - "description": "The repo copies over at least one dependency successfully.", + "name": "vpc_openACLs", + "description": "Open a window to view VPC Network ACLs", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "result" } ] }, { - "name": "codeTransform_mvnBuildFailed", - "description": "The maven command build failed.", + "name": "vpc_openGateways", + "description": "Open a window to view VPC Internet Gateway", "metadata": [ { - "type": "codeTransformSessionId", - "required": true - }, + "type": "result" + } + ] + }, + { + "name": "vpc_openRouteTables", + "description": "Open a window to view VPC RouteTable", + "metadata": [ { - "type": "codeTransformMavenBuildCommand", - "required": true - }, + "type": "result" + } + ] + }, + { + "name": "vpc_openSubnets", + "description": "Open a window to view VPC Subnets", + "metadata": [ { - "type": "reason", - "required": false + "type": "result" + } + ] + }, + { + "name": "vpc_openVPCs", + "description": "Open a window to view VPC details", + "metadata": [ + { + "type": "result" } ] } ] -} +} \ No newline at end of file From e54db0bf63e04c27d620bcce1c3e8a7b0fd24db3 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 16:07:34 -0800 Subject: [PATCH 5/8] Use npm ci --- .github/workflows/lint-telemetry-definitions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-telemetry-definitions.yaml b/.github/workflows/lint-telemetry-definitions.yaml index 2dde2f4b..fe15a2a3 100644 --- a/.github/workflows/lint-telemetry-definitions.yaml +++ b/.github/workflows/lint-telemetry-definitions.yaml @@ -16,7 +16,7 @@ jobs: - name: Compile the Validation code run: | cd telemetry/validation - npm install + npm ci npm run build npm run test From 11e20908fd9d3fd7dad578cde121b47f43be5c36 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 16:19:53 -0800 Subject: [PATCH 6/8] Reduce code to fewer files --- telemetry/validation/src/fix.ts | 14 ++-- telemetry/validation/src/reorder.test.ts | 38 --------- telemetry/validation/src/reorder.ts | 15 ---- telemetry/validation/src/sorting.ts | 13 --- .../src/telemetryDefinitions.test.ts | 66 +++++++++++++++ .../validation/src/telemetryDefinitions.ts | 83 +++++++++++++++++++ telemetry/validation/src/validate.ts | 3 +- telemetry/validation/src/validation.test.ts | 32 ------- telemetry/validation/src/validation.ts | 47 ----------- 9 files changed, 157 insertions(+), 154 deletions(-) delete mode 100644 telemetry/validation/src/reorder.test.ts delete mode 100644 telemetry/validation/src/reorder.ts delete mode 100644 telemetry/validation/src/sorting.ts create mode 100644 telemetry/validation/src/telemetryDefinitions.test.ts delete mode 100644 telemetry/validation/src/validation.test.ts delete mode 100644 telemetry/validation/src/validation.ts diff --git a/telemetry/validation/src/fix.ts b/telemetry/validation/src/fix.ts index 082a46b2..e713ce90 100644 --- a/telemetry/validation/src/fix.ts +++ b/telemetry/validation/src/fix.ts @@ -1,5 +1,9 @@ -import { reorder } from './reorder' -import { TelemetryDefinitions, loadTelemetryDefinitions, saveTelemetryDefinitions } from './telemetryDefinitions' +import { + TelemetryDefinitions, + loadTelemetryDefinitions, + reorder, + saveTelemetryDefinitions +} from './telemetryDefinitions' /** * Performs automated fixes for certain validation checks on the given file. @@ -14,15 +18,11 @@ async function main() { const jsonPath = process.argv[2] const definitions = await loadTelemetryDefinitions(jsonPath) - fix(definitions) + reorder(definitions) await saveTelemetryDefinitions(definitions, jsonPath) } -export function fix(definitions: TelemetryDefinitions): void { - reorder(definitions) -} - ;(async () => { await main() })() diff --git a/telemetry/validation/src/reorder.test.ts b/telemetry/validation/src/reorder.test.ts deleted file mode 100644 index d4f0e5a4..00000000 --- a/telemetry/validation/src/reorder.test.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { validate } from './validation' -import { TelemetryDefinitions } from './telemetryDefinitions' -import { reorder } from './reorder' - -test('reordering passes validation check', () => { - const data: TelemetryDefinitions = createUnorderedData() - - reorder(data) - const validations = validate(data) - expect(validations).toHaveLength(0) -}) - -test('reorder types', () => { - const data: TelemetryDefinitions = createUnorderedData() - - reorder(data) - - expect(data.types[0].name).toBe('apple') - expect(data.types[1].name).toBe('banana') -}) - -test('reorder metrics', () => { - const data: TelemetryDefinitions = createUnorderedData() - - reorder(data) - - expect(data.metrics[0].name).toBe('aaa') - expect(data.metrics[1].name).toBe('zzz') -}) - -function createUnorderedData(): TelemetryDefinitions { - const unsortedData: TelemetryDefinitions = { - types: [{ name: 'banana' }, { name: 'apple' }], - metrics: [{ name: 'zzz' }, { name: 'aaa' }] - } - - return unsortedData -} diff --git a/telemetry/validation/src/reorder.ts b/telemetry/validation/src/reorder.ts deleted file mode 100644 index c4271507..00000000 --- a/telemetry/validation/src/reorder.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { fieldSort, metricSort } from './sorting' -import { TelemetryDefinitions } from './telemetryDefinitions' - -export function reorder(definitions: TelemetryDefinitions): void { - orderTypes(definitions) - orderMetrics(definitions) -} - -function orderTypes(definitions: TelemetryDefinitions): void { - definitions.types.sort(fieldSort) -} - -function orderMetrics(definitions: TelemetryDefinitions): void { - definitions.metrics.sort(metricSort) -} diff --git a/telemetry/validation/src/sorting.ts b/telemetry/validation/src/sorting.ts deleted file mode 100644 index 923a6a80..00000000 --- a/telemetry/validation/src/sorting.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Metric, TelemetryField } from './telemetryDefinitions' - -export function fieldSort(a: TelemetryField, b: TelemetryField): number { - return a.name.localeCompare(b.name) -} - -export function metricSort(a: Metric, b: Metric): number { - return a.name.localeCompare(b.name) -} - -export function stringSort(a: string, b: string): number { - return a.localeCompare(b) -} diff --git a/telemetry/validation/src/telemetryDefinitions.test.ts b/telemetry/validation/src/telemetryDefinitions.test.ts new file mode 100644 index 00000000..00695051 --- /dev/null +++ b/telemetry/validation/src/telemetryDefinitions.test.ts @@ -0,0 +1,66 @@ +import { TelemetryDefinitions, reorder, validate } from './telemetryDefinitions' + +test('validation passes with a valid definition', () => { + const data: TelemetryDefinitions = { + types: [{ name: 'apple' }, { name: 'banana' }], + metrics: [{ name: 'aaa' }, { name: 'zzz' }] + } + + const validations = validate(data) + expect(validations).toHaveLength(0) +}) + +test('validation detects unsorted fields', () => { + const data: TelemetryDefinitions = { + types: [{ name: 'banana' }, { name: 'apple' }], + metrics: [] + } + + const validations = validate(data) + expect(validations).toHaveLength(1) +}) + +test('validation detects unsorted metrics', () => { + const data: TelemetryDefinitions = { + types: [], + metrics: [{ name: 'zzz' }, { name: 'aaa' }] + } + + const validations = validate(data) + expect(validations).toHaveLength(1) +}) + +test('reordering passes validation check', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + const validations = validate(data) + expect(validations).toHaveLength(0) +}) + +test('reorder types', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + + expect(data.types[0].name).toBe('apple') + expect(data.types[1].name).toBe('banana') +}) + +test('reorder metrics', () => { + const data: TelemetryDefinitions = createUnorderedData() + + reorder(data) + + expect(data.metrics[0].name).toBe('aaa') + expect(data.metrics[1].name).toBe('zzz') +}) + +function createUnorderedData(): TelemetryDefinitions { + const unsortedData: TelemetryDefinitions = { + types: [{ name: 'banana' }, { name: 'apple' }], + metrics: [{ name: 'zzz' }, { name: 'aaa' }] + } + + return unsortedData +} diff --git a/telemetry/validation/src/telemetryDefinitions.ts b/telemetry/validation/src/telemetryDefinitions.ts index 5f512817..c8e01728 100644 --- a/telemetry/validation/src/telemetryDefinitions.ts +++ b/telemetry/validation/src/telemetryDefinitions.ts @@ -10,6 +10,12 @@ export interface Metric { // there are other fields not used by this scripting } +/** + * Outermost representation of telemetry definitions file + * (telemetry/definitions/commonDefinitions.json) + * This isn't intended to be the official format spec (see telemetry/telemetrySchema.json), + * it is 'just enough' to use in scripts. + */ export interface TelemetryDefinitions { types: TelemetryField[] metrics: Metric[] @@ -29,3 +35,80 @@ export async function saveTelemetryDefinitions(definitions: TelemetryDefinitions encoding: 'utf8' }) } + +/** + * Re-arranges the types and metrics arrays in alphabetical order + */ +export function reorder(definitions: TelemetryDefinitions): void { + orderTypes(definitions) + orderMetrics(definitions) +} + +function orderTypes(definitions: TelemetryDefinitions): void { + definitions.types.sort(fieldSort) +} + +function orderMetrics(definitions: TelemetryDefinitions): void { + definitions.metrics.sort(metricSort) +} + +/** + * Performs validation checks on the given telemetry definitions + * Returns a collection of detected validation problems. + */ +export function validate(definitions: TelemetryDefinitions): string[] { + const validations: string[] = [] + + validations.push(...validateTypeOrder(definitions)) + validations.push(...validateMetricsOrder(definitions)) + + return validations +} + +function validateTypeOrder(definitions: TelemetryDefinitions): string[] { + const validations = [] + + const sortedNames = definitions.types.map(t => t.name).sort(stringSort) + + for (let i = 0; i < definitions.types.length; i++) { + const inputType = definitions.types[i] + const sortedName = sortedNames[i] + + if (inputType.name != sortedName) { + validations.push(`Telemetry Types are not sorted. Expected: ${sortedName}, Found: ${inputType.name}`) + break + } + } + + return validations +} + +function validateMetricsOrder(definitions: TelemetryDefinitions): string[] { + const validations = [] + + const sortedNames = definitions.metrics.map(t => t.name).sort(stringSort) + + for (let i = 0; i < definitions.metrics.length; i++) { + const inputMetric = definitions.metrics[i] + const sortedName = sortedNames[i] + + if (inputMetric.name != sortedName) { + validations.push(`Telemetry Metrics are not sorted. Expected: ${sortedName}, Found: ${inputMetric.name}`) + break + } + } + + return validations +} + +function fieldSort(a: TelemetryField, b: TelemetryField): number { + return a.name.localeCompare(b.name) +} + +function metricSort(a: Metric, b: Metric): number { + return a.name.localeCompare(b.name) +} + +function stringSort(a: string, b: string): number { + return a.localeCompare(b) +} diff --git a/telemetry/validation/src/validate.ts b/telemetry/validation/src/validate.ts index 0ac049f4..306fdf48 100644 --- a/telemetry/validation/src/validate.ts +++ b/telemetry/validation/src/validate.ts @@ -1,5 +1,4 @@ -import { loadTelemetryDefinitions } from './telemetryDefinitions' -import { validate } from './validation' +import { loadTelemetryDefinitions, validate } from './telemetryDefinitions' /** * Performs validation checks on the given file. diff --git a/telemetry/validation/src/validation.test.ts b/telemetry/validation/src/validation.test.ts deleted file mode 100644 index fa3f61d6..00000000 --- a/telemetry/validation/src/validation.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { validate } from './validation' -import { TelemetryDefinitions } from './telemetryDefinitions' - -test('valid definition', () => { - const data: TelemetryDefinitions = { - types: [{ name: 'apple' }, { name: 'banana' }], - metrics: [{ name: 'aaa' }, { name: 'zzz' }] - } - - const validations = validate(data) - expect(validations).toHaveLength(0) -}) - -test('flag unsorted fields', () => { - const data: TelemetryDefinitions = { - types: [{ name: 'banana' }, { name: 'apple' }], - metrics: [] - } - - const validations = validate(data) - expect(validations).toHaveLength(1) -}) - -test('flag unsorted metrics', () => { - const data: TelemetryDefinitions = { - types: [], - metrics: [{ name: 'zzz' }, { name: 'aaa' }] - } - - const validations = validate(data) - expect(validations).toHaveLength(1) -}) diff --git a/telemetry/validation/src/validation.ts b/telemetry/validation/src/validation.ts deleted file mode 100644 index 06c077cd..00000000 --- a/telemetry/validation/src/validation.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { stringSort } from './sorting' -import { TelemetryDefinitions } from './telemetryDefinitions' - -export function validate(definitions: TelemetryDefinitions): string[] { - const validations: string[] = [] - - validations.push(...validateTypeOrder(definitions)) - validations.push(...validateMetricsOrder(definitions)) - - return validations -} - -function validateTypeOrder(definitions: TelemetryDefinitions): string[] { - const validations = [] - - const sortedNames = definitions.types.map(t => t.name).sort(stringSort) - - for (let i = 0; i < definitions.types.length; i++) { - const inputType = definitions.types[i] - const sortedName = sortedNames[i] - - if (inputType.name != sortedName) { - validations.push(`Telemetry Types are not sorted. Expected: ${sortedName}, Found: ${inputType.name}`) - break - } - } - - return validations -} - -function validateMetricsOrder(definitions: TelemetryDefinitions): string[] { - const validations = [] - - const sortedNames = definitions.metrics.map(t => t.name).sort(stringSort) - - for (let i = 0; i < definitions.metrics.length; i++) { - const inputMetric = definitions.metrics[i] - const sortedName = sortedNames[i] - - if (inputMetric.name != sortedName) { - validations.push(`Telemetry Metrics are not sorted. Expected: ${sortedName}, Found: ${inputMetric.name}`) - break - } - } - - return validations -} From 163ab2f1371d3847634d8e770cd3e3ed6f739efd Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 16:48:08 -0800 Subject: [PATCH 7/8] Add sorting and linting for metadata array --- .../src/telemetryDefinitions.test.ts | 24 +++++++++- .../validation/src/telemetryDefinitions.ts | 45 +++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/telemetry/validation/src/telemetryDefinitions.test.ts b/telemetry/validation/src/telemetryDefinitions.test.ts index 00695051..4df1b0e7 100644 --- a/telemetry/validation/src/telemetryDefinitions.test.ts +++ b/telemetry/validation/src/telemetryDefinitions.test.ts @@ -3,7 +3,7 @@ import { TelemetryDefinitions, reorder, validate } from './telemetryDefinitions' test('validation passes with a valid definition', () => { const data: TelemetryDefinitions = { types: [{ name: 'apple' }, { name: 'banana' }], - metrics: [{ name: 'aaa' }, { name: 'zzz' }] + metrics: [{ name: 'aaa' }, { name: 'ggg', metadata: [{ type: 'giraffe' }, { type: 'zebra' }] }, { name: 'zzz' }] } const validations = validate(data) @@ -30,6 +30,16 @@ test('validation detects unsorted metrics', () => { expect(validations).toHaveLength(1) }) +test('validation detects unsorted metric metadata', () => { + const data: TelemetryDefinitions = { + types: [], + metrics: [{ name: 'aaa' }, { name: 'zzz', metadata: [{ type: 'zebra' }, { type: 'giraffe' }] }] + } + + const validations = validate(data) + expect(validations).toHaveLength(1) +}) + test('reordering passes validation check', () => { const data: TelemetryDefinitions = createUnorderedData() @@ -56,6 +66,18 @@ test('reorder metrics', () => { expect(data.metrics[1].name).toBe('zzz') }) +test('reorder metrics metadata', () => { + const data: TelemetryDefinitions = { + types: [], + metrics: [{ name: 'aaa', metadata: [{ type: 'zebra' }, { type: 'giraffe' }] }] + } + + reorder(data) + + expect(data.metrics[0].metadata![0].type).toBe('giraffe') + expect(data.metrics[0].metadata![1].type).toBe('zebra') +}) + function createUnorderedData(): TelemetryDefinitions { const unsortedData: TelemetryDefinitions = { types: [{ name: 'banana' }, { name: 'apple' }], diff --git a/telemetry/validation/src/telemetryDefinitions.ts b/telemetry/validation/src/telemetryDefinitions.ts index c8e01728..6de9742a 100644 --- a/telemetry/validation/src/telemetryDefinitions.ts +++ b/telemetry/validation/src/telemetryDefinitions.ts @@ -5,8 +5,13 @@ export interface TelemetryField { // there are other fields not used by this scripting } +export interface MetricMetadata { + type: string +} + export interface Metric { name: string + metadata?: MetricMetadata[] // there are other fields not used by this scripting } @@ -42,6 +47,7 @@ export async function saveTelemetryDefinitions(definitions: TelemetryDefinitions export function reorder(definitions: TelemetryDefinitions): void { orderTypes(definitions) orderMetrics(definitions) + orderMetricsMetadata(definitions) } function orderTypes(definitions: TelemetryDefinitions): void { @@ -52,6 +58,14 @@ function orderMetrics(definitions: TelemetryDefinitions): void { definitions.metrics.sort(metricSort) } +function orderMetricsMetadata(definitions: TelemetryDefinitions): void { + definitions.metrics + .filter(x => x.metadata !== undefined) + .forEach(metric => { + metric.metadata!.sort(metricMetadataSort) + }) +} + /** * Performs validation checks on the given telemetry definitions * Returns a collection of detected validation problems. @@ -61,6 +75,7 @@ export function validate(definitions: TelemetryDefinitions): string[] { validations.push(...validateTypeOrder(definitions)) validations.push(...validateMetricsOrder(definitions)) + validations.push(...validateMetricsMetadataOrder(definitions)) return validations } @@ -101,6 +116,32 @@ function validateMetricsOrder(definitions: TelemetryDefinitions): string[] { return validations } +function validateMetricsMetadataOrder(definitions: TelemetryDefinitions): string[] { + const validations = [] + + for (const metric of definitions.metrics) { + if (metric.metadata === undefined) { + continue + } + + const sortedNames = metric.metadata.map(t => t.type).sort(stringSort) + + for (let i = 0; i < metric.metadata.length; i++) { + const inputMetadata = metric.metadata[i] + const sortedName = sortedNames[i] + + if (inputMetadata.type != sortedName) { + validations.push( + `Telemetry Metric ${metric.name} has unsorted metadata. Expected: ${sortedName}, Found: ${inputMetadata.type}` + ) + break + } + } + } + + return validations +} + function fieldSort(a: TelemetryField, b: TelemetryField): number { return a.name.localeCompare(b.name) } @@ -109,6 +150,10 @@ function metricSort(a: Metric, b: Metric): number { return a.name.localeCompare(b.name) } +function metricMetadataSort(a: MetricMetadata, b: MetricMetadata): number { + return a.type.localeCompare(b.type) +} + function stringSort(a: string, b: string): number { return a.localeCompare(b) } From 60959f4444b53f699d215a18cfde140934163db2 Mon Sep 17 00:00:00 2001 From: Christopher Christou Date: Thu, 29 Feb 2024 16:48:19 -0800 Subject: [PATCH 8/8] Re-fix definitions file --- telemetry/definitions/commonDefinitions.json | 1046 +++++++++--------- 1 file changed, 523 insertions(+), 523 deletions(-) diff --git a/telemetry/definitions/commonDefinitions.json b/telemetry/definitions/commonDefinitions.json index 2d26759b..036a3f06 100644 --- a/telemetry/definitions/commonDefinitions.json +++ b/telemetry/definitions/commonDefinitions.json @@ -1345,6 +1345,9 @@ "name": "amazonq_codeGenerationInvoke", "description": "Captures Code Generation generation process", "metadata": [ + { + "type": "amazonqCodeGenerationResult" + }, { "type": "amazonqConversationId" }, @@ -1354,20 +1357,17 @@ { "type": "amazonqGenerateCodeResponseLatency" }, - { - "type": "amazonqCodeGenerationResult" - }, { "type": "amazonqNumberOfFilesGenerated", "required": false }, - { - "type": "amazonqRepositorySize" - }, { "type": "amazonqNumberOfReferences", "required": false }, + { + "type": "amazonqRepositorySize" + }, { "type": "credentialStartUrl", "required": false @@ -1414,11 +1414,11 @@ "required": false }, { - "type": "credentialStartUrl", + "type": "amazonqUploadIntent", "required": false }, { - "type": "amazonqUploadIntent", + "type": "credentialStartUrl", "required": false } ] @@ -1444,9 +1444,6 @@ "name": "amazonq_isAcceptedCodeChanges", "description": "User applied code changes generated for the task.", "metadata": [ - { - "type": "enabled" - }, { "type": "amazonqConversationId" }, @@ -1456,6 +1453,9 @@ { "type": "credentialStartUrl", "required": false + }, + { + "type": "enabled" } ] }, @@ -1463,15 +1463,15 @@ "name": "amazonq_isApproachAccepted", "description": "User has accepted the approach generated", "metadata": [ - { - "type": "enabled" - }, { "type": "amazonqConversationId" }, { "type": "credentialStartUrl", "required": false + }, + { + "type": "enabled" } ] }, @@ -1479,15 +1479,15 @@ "name": "amazonq_isProvideFeedbackForCodeGen", "description": "User asked to regenerate code generation with a comment", "metadata": [ - { - "type": "enabled" - }, { "type": "amazonqConversationId" }, { "type": "credentialStartUrl", "required": false + }, + { + "type": "enabled" } ] }, @@ -1496,15 +1496,15 @@ "description": "User reviewed changes", "passive": true, "metadata": [ - { - "type": "enabled" - }, { "type": "amazonqConversationId" }, { "type": "credentialStartUrl", "required": false + }, + { + "type": "enabled" } ] }, @@ -1536,21 +1536,21 @@ "description": "Invoking one simulated API Gateway call using the SAM cli", "metadata": [ { - "type": "runtime", - "required": false + "type": "debug" }, { "type": "httpMethod", "required": false }, { - "type": "result" + "type": "lambdaArchitecture", + "required": false }, { - "type": "debug" + "type": "result" }, { - "type": "lambdaArchitecture", + "type": "runtime", "required": false } ] @@ -1559,12 +1559,12 @@ "name": "apigateway_invokeRemote", "description": "Calling a remote API Gateway", "metadata": [ - { - "type": "result" - }, { "type": "httpMethod", "required": false + }, + { + "type": "result" } ] }, @@ -1585,15 +1585,15 @@ "name": "apprunner_createService", "description": "Create an App Runner service", "metadata": [ - { - "type": "result" - }, { "type": "appRunnerServiceSource" }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -1601,12 +1601,12 @@ "name": "apprunner_deleteService", "description": "Delete an App Runner service", "metadata": [ - { - "type": "result" - }, { "type": "appRunnerServiceStatus", "required": false + }, + { + "type": "result" } ] }, @@ -1654,31 +1654,31 @@ "description": "Captures the result of adding a new connection in the 'Add New Connection' workflow", "metadata": [ { - "type": "source" + "type": "attempts", + "required": false }, { - "type": "featureId" + "type": "credentialSourceId" }, { - "type": "credentialSourceId" + "type": "featureId" }, { - "type": "isAggregated" + "type": "invalidInputFields", + "required": false }, { - "type": "result" + "type": "isAggregated" }, { - "type": "attempts", + "type": "reason", "required": false }, { - "type": "invalidInputFields", - "required": false + "type": "result" }, { - "type": "reason", - "required": false + "type": "source" } ] }, @@ -1687,29 +1687,29 @@ "description": "The diff/change in Auth connections", "metadata": [ { - "type": "source" + "type": "attempts" }, { "type": "authConnectionsCount" }, { - "type": "newAuthConnectionsCount" + "type": "enabledAuthConnections" }, { - "type": "enabledAuthConnections" + "type": "newAuthConnectionsCount" }, { "type": "newEnabledAuthConnections" }, { - "type": "attempts" + "type": "reason", + "required": false }, { "type": "result" }, { - "type": "reason", - "required": false + "type": "source" } ] }, @@ -1743,10 +1743,10 @@ "description": "Delete an AWS resource", "metadata": [ { - "type": "serviceType" + "type": "result" }, { - "type": "result" + "type": "serviceType" } ] }, @@ -1820,15 +1820,15 @@ "description": "Called when a connection requires login using the browser", "metadata": [ { - "type": "result" + "type": "credentialSourceId", + "required": false }, { "type": "credentialType", "required": false }, { - "type": "credentialSourceId", - "required": false + "type": "result" } ] }, @@ -1836,18 +1836,18 @@ "name": "aws_modifyCredentials", "description": "Modify credentials (e.g. Add, Edit, Delete)", "metadata": [ - { - "type": "result" - }, { "type": "credentialModification" }, { - "type": "source" + "type": "result" }, { "type": "serviceType", "required": false + }, + { + "type": "source" } ] }, @@ -1881,11 +1881,11 @@ "type": "result" }, { - "type": "url", + "type": "source", "required": false }, { - "type": "source", + "type": "url", "required": false } ] @@ -1896,10 +1896,7 @@ "passive": true, "metadata": [ { - "type": "result" - }, - { - "type": "reason", + "type": "credentialSourceId", "required": false }, { @@ -1907,9 +1904,12 @@ "required": false }, { - "type": "credentialSourceId", + "type": "reason", "required": false }, + { + "type": "result" + }, { "type": "sessionDuration", "required": false @@ -1933,11 +1933,11 @@ "description": "Select a credentials profile", "metadata": [ { - "type": "credentialType", + "type": "credentialSourceId", "required": false }, { - "type": "credentialSourceId", + "type": "credentialType", "required": false } ] @@ -1965,10 +1965,10 @@ "description": "An external tool was installed automatically", "metadata": [ { - "type": "toolId" + "type": "result" }, { - "type": "result" + "type": "toolId" } ], "passive": true @@ -1978,15 +1978,15 @@ "description": "Validate credentials when selecting new credentials", "metadata": [ { - "type": "result" + "type": "credentialSourceId", + "required": false }, { "type": "credentialType", "required": false }, { - "type": "credentialSourceId", - "required": false + "type": "result" } ], "passive": true @@ -2013,18 +2013,12 @@ "name": "beanstalk_deploy", "description": "Called when deploying an application to Elastic Beanstalk", "metadata": [ - { - "type": "result" - }, - { - "type": "initialDeploy" - }, { "type": "duration", "required": false }, { - "type": "name", + "type": "enhancedHealthEnabled", "required": false }, { @@ -2032,13 +2026,15 @@ "required": false }, { - "type": "xrayEnabled", - "required": false + "type": "initialDeploy" }, { - "type": "enhancedHealthEnabled", + "type": "name", "required": false }, + { + "type": "result" + }, { "type": "serviceType", "required": false @@ -2046,6 +2042,10 @@ { "type": "source", "required": false + }, + { + "type": "xrayEnabled", + "required": false } ] }, @@ -2080,13 +2080,13 @@ "name": "beanstalk_publishWizard", "description": "Called when user completes the Elastic Beanstalk publish wizard", "metadata": [ - { - "type": "result" - }, { "type": "duration", "required": false }, + { + "type": "result" + }, { "type": "serviceType", "required": false @@ -2141,14 +2141,14 @@ "description": "Called when deploying a CloudFormation template", "metadata": [ { - "type": "result" + "type": "duration", + "required": false }, { "type": "initialDeploy" }, { - "type": "duration", - "required": false + "type": "result" }, { "type": "serviceType", @@ -2173,13 +2173,13 @@ "name": "cloudformation_publishWizard", "description": "Called when user completes the CloudFormation template publish wizard", "metadata": [ - { - "type": "result" - }, { "type": "duration", "required": false }, + { + "type": "result" + }, { "type": "serviceType", "required": false @@ -2258,13 +2258,13 @@ "description": "Start an insights query", "metadata": [ { - "type": "result" + "type": "insightsQueryStringType" }, { "type": "insightsQueryTimeType" }, { - "type": "insightsQueryStringType" + "type": "result" } ] }, @@ -2309,10 +2309,10 @@ "description": "Copy the ARN of a CloudWatch Logs entity", "metadata": [ { - "type": "result" + "type": "cloudWatchResourceType" }, { - "type": "cloudWatchResourceType" + "type": "result" } ] }, @@ -2321,10 +2321,10 @@ "description": "Delete a CloudWatch Logs entity.", "metadata": [ { - "type": "result" + "type": "cloudWatchResourceType" }, { - "type": "cloudWatchResourceType" + "type": "result" } ] }, @@ -2334,10 +2334,10 @@ "description": "Download a CloudWatch Logs entity. Value indicates the final size of the formatted stream in bytes.", "metadata": [ { - "type": "result" + "type": "cloudWatchResourceType" }, { - "type": "cloudWatchResourceType" + "type": "result" } ] }, @@ -2355,22 +2355,22 @@ "name": "cloudwatchlogs_filter", "description": "Filters a CloudWatch Logs entity. (Essentially a subset of cloudwatchlogs_open)", "metadata": [ - { - "type": "result" - }, { "type": "cloudWatchResourceType" }, { - "type": "source", + "type": "hasTextFilter", "required": false }, { - "type": "hasTextFilter", + "type": "hasTimeFilter", "required": false }, { - "type": "hasTimeFilter", + "type": "result" + }, + { + "type": "source", "required": false } ] @@ -2380,25 +2380,25 @@ "description": "Open a CloudWatch Logs entity. ServiceType and source indicate where the request came from (example: while viewing an ECS container)", "metadata": [ { - "type": "result" + "type": "cloudWatchLogsPresentation", + "required": false }, { "type": "cloudWatchResourceType" }, { - "type": "cloudWatchLogsPresentation", + "type": "hasTextFilter", "required": false }, { - "type": "serviceType", + "type": "hasTimeFilter", "required": false }, { - "type": "hasTextFilter", - "required": false + "type": "result" }, { - "type": "hasTimeFilter", + "type": "serviceType", "required": false }, { @@ -2518,10 +2518,10 @@ "description": "Connect to a Amazon CodeCatalyst dev environment", "metadata": [ { - "type": "userId" + "type": "result" }, { - "type": "result" + "type": "userId" } ] }, @@ -2530,14 +2530,14 @@ "description": "Create an Amazon CodeCatalyst Dev Environment", "metadata": [ { - "type": "userId" + "type": "codecatalyst_createDevEnvironmentRepoType", + "required": false }, { "type": "result" }, { - "type": "codecatalyst_createDevEnvironmentRepoType", - "required": false + "type": "userId" } ] }, @@ -2547,20 +2547,20 @@ "passive": true, "metadata": [ { - "type": "userId" + "type": "codecatalyst_devEnvironmentWorkflowError", + "required": false }, { - "type": "result" + "type": "codecatalyst_devEnvironmentWorkflowStep" }, { "type": "duration" }, { - "type": "codecatalyst_devEnvironmentWorkflowStep" + "type": "result" }, { - "type": "codecatalyst_devEnvironmentWorkflowError", - "required": false + "type": "userId" } ] }, @@ -2569,10 +2569,10 @@ "description": "Clone a Amazon CodeCatalyst code repository locally", "metadata": [ { - "type": "userId" + "type": "result" }, { - "type": "result" + "type": "userId" } ] }, @@ -2581,13 +2581,13 @@ "description": "Update properties of a Amazon CodeCatalyst Dev Environment", "metadata": [ { - "type": "userId" + "type": "codecatalyst_updateDevEnvironmentLocationType" }, { "type": "result" }, { - "type": "codecatalyst_updateDevEnvironmentLocationType" + "type": "userId" } ] }, @@ -2596,10 +2596,10 @@ "description": "Trigger a devfile update on a Amazon CodeCatalyst dev environment", "metadata": [ { - "type": "userId" + "type": "result" }, { - "type": "result" + "type": "userId" } ] }, @@ -2607,12 +2607,12 @@ "name": "codecommit_cloneRepo", "description": "A repo is cloned from CodeCommit", "metadata": [ - { - "type": "result" - }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -2620,12 +2620,12 @@ "name": "codecommit_createRepo", "description": "A repo is created in CodeCommit", "metadata": [ - { - "type": "result" - }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -2633,12 +2633,12 @@ "name": "codecommit_setCredentials", "description": "A connection is established to CodeCommit to perform actions on repos", "metadata": [ - { - "type": "result" - }, { "type": "credentialType", "required": false + }, + { + "type": "result" } ], "passive": true @@ -2671,21 +2671,21 @@ "type": "codeTransformPreValidationError", "required": true }, - { - "type": "codeTransformSessionId", - "required": true - }, { "type": "codeTransformRuntimeError", "required": false }, { - "type": "result", + "type": "codeTransformSessionId", "required": true }, { "type": "reason", "required": true + }, + { + "type": "result", + "required": true } ] }, @@ -2712,20 +2712,20 @@ "required": true }, { - "type": "codeTransformTotalByteSize", - "required": true + "type": "codeTransformRuntimeError", + "required": false }, { - "type": "codeTransformSessionId", + "type": "codeTransformRunTimeLatency", "required": true }, { - "type": "codeTransformRunTimeLatency", + "type": "codeTransformSessionId", "required": true }, { - "type": "codeTransformRuntimeError", - "required": false + "type": "codeTransformTotalByteSize", + "required": true } ] }, @@ -2734,7 +2734,7 @@ "description": "A timestamp for when the job is ending upload zip contents", "metadata": [ { - "type": "codeTransformTotalByteSize", + "type": "codeTransformRunTimeLatency", "required": true }, { @@ -2742,7 +2742,7 @@ "required": true }, { - "type": "codeTransformRunTimeLatency", + "type": "codeTransformTotalByteSize", "required": true } ] @@ -2765,13 +2765,13 @@ "type": "codeTransformCancelSrcComponents", "required": true }, - { - "type": "codeTransformSessionId", - "required": true - }, { "type": "codeTransformRuntimeError", "required": false + }, + { + "type": "codeTransformSessionId", + "required": true } ] }, @@ -2780,11 +2780,11 @@ "description": "The user closes their IDE and stops viewing the transformation.", "metadata": [ { - "type": "codeTransformSessionId", + "type": "codeTransformJobId", "required": true }, { - "type": "codeTransformJobId", + "type": "codeTransformSessionId", "required": true }, { @@ -2798,11 +2798,11 @@ "description": "The user was previously running a transformation and came back to IDE to see it still running", "metadata": [ { - "type": "codeTransformSessionId", + "type": "codeTransformJobId", "required": true }, { - "type": "codeTransformJobId", + "type": "codeTransformSessionId", "required": true }, { @@ -2856,11 +2856,11 @@ "description": "During the transformation progress, log the status steps returning from the API.", "metadata": [ { - "type": "codeTransformSessionId", + "type": "codeTransformJobId", "required": true }, { - "type": "codeTransformJobId", + "type": "codeTransformSessionId", "required": true }, { @@ -2883,16 +2883,16 @@ "required": true }, { - "type": "codeTransformSessionId", - "required": true + "type": "codeTransformJobId", + "required": false }, { "type": "codeTransformRequestId", "required": false }, { - "type": "codeTransformJobId", - "required": false + "type": "codeTransformSessionId", + "required": true } ] }, @@ -2905,6 +2905,14 @@ "type": "codeTransformApiNames", "required": true }, + { + "type": "codeTransformJobId", + "required": false + }, + { + "type": "codeTransformRequestId", + "required": false + }, { "type": "codeTransformRunTimeLatency", "required": true @@ -2914,20 +2922,12 @@ "required": true }, { - "type": "codeTransformRequestId", - "required": false - }, - { - "type": "codeTransformJobId", + "type": "codeTransformTotalByteSize", "required": false }, { "type": "codeTransformUploadId", "required": false - }, - { - "type": "codeTransformTotalByteSize", - "required": false } ] }, @@ -2940,13 +2940,13 @@ "type": "codeTransformApiErrorMessage", "required": true }, - { - "type": "codeTransformSessionId", - "required": true - }, { "type": "codeTransformJobId", "required": false + }, + { + "type": "codeTransformSessionId", + "required": true } ] }, @@ -2955,11 +2955,11 @@ "description": "The maven command build failed.", "metadata": [ { - "type": "codeTransformSessionId", + "type": "codeTransformMavenBuildCommand", "required": true }, { - "type": "codeTransformMavenBuildCommand", + "type": "codeTransformSessionId", "required": true }, { @@ -2973,24 +2973,24 @@ "description": "Transform initiates project validation before user interaction and we want to gather project details then.", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "codeTransformLocalJavaVersion", + "required": false }, { - "type": "result", - "required": true + "type": "codeTransformPreValidationError", + "required": false }, { - "type": "reason", - "required": false + "type": "codeTransformSessionId", + "required": true }, { - "type": "codeTransformPreValidationError", + "type": "reason", "required": false }, { - "type": "codeTransformLocalJavaVersion", - "required": false + "type": "result", + "required": true } ] }, @@ -3000,24 +3000,24 @@ "description": "We want to log the total run time in the users experience for the IDE. The total runtime should end when all API's have finished running and the users is prompted for next step actions.", "metadata": [ { - "type": "codeTransformSessionId", - "required": true + "type": "codeTransformLocalJavaVersion", + "required": false }, { - "type": "codeTransformRunTimeLatency", - "required": true + "type": "codeTransformLocalMavenVersion", + "required": false }, { "type": "codeTransformResultStatusMessage", "required": false }, { - "type": "codeTransformLocalJavaVersion", - "required": false + "type": "codeTransformRunTimeLatency", + "required": true }, { - "type": "codeTransformLocalMavenVersion", - "required": false + "type": "codeTransformSessionId", + "required": true } ] }, @@ -3025,13 +3025,13 @@ "name": "codeTransform_vcsDiffViewerVisible", "description": "A timestamp for when the diff view is being displayed to the user.", "metadata": [ - { - "type": "codeTransformSessionId", - "required": true - }, { "type": "codeTransformJobId", "required": false + }, + { + "type": "codeTransformSessionId", + "required": true } ] }, @@ -3039,6 +3039,10 @@ "name": "codeTransform_vcsViewerCanceled", "description": "An interactivity measured when users cancel a patch view.", "metadata": [ + { + "type": "codeTransformJobId", + "required": false + }, { "type": "codeTransformPatchViewerCancelSrcComponents", "required": true @@ -3051,10 +3055,6 @@ "type": "codeTransformSessionId", "required": true }, - { - "type": "codeTransformJobId", - "required": false - }, { "type": "codeTransformStatus", "required": true @@ -3066,16 +3066,16 @@ "description": "An interactivity measured when users click to view diff results.", "metadata": [ { - "type": "codeTransformVCSViewerSrcComponents", - "required": true + "type": "codeTransformJobId", + "required": false }, { "type": "codeTransformSessionId", "required": true }, { - "type": "codeTransformJobId", - "required": false + "type": "codeTransformVCSViewerSrcComponents", + "required": true } ] }, @@ -3083,14 +3083,14 @@ "name": "codeTransform_vcsViewerSubmitted", "description": "An interactivity measured when users submit their patch view results.", "metadata": [ - { - "type": "codeTransformSessionId", - "required": true - }, { "type": "codeTransformJobId", "required": false }, + { + "type": "codeTransformSessionId", + "required": true + }, { "type": "codeTransformStatus", "required": true @@ -3129,44 +3129,44 @@ "passive": true, "metadata": [ { - "type": "codewhispererRequestId" - }, - { - "type": "codewhispererSessionId" + "type": "codewhispererAllCompletionsLatency" }, { - "type": "codewhispererPreprocessingLatency" + "type": "codewhispererCompletionType" }, { "type": "codewhispererCredentialFetchingLatency" }, { - "type": "codewhispererPostprocessingLatency" + "type": "codewhispererEndToEndLatency" }, { "type": "codewhispererFirstCompletionLatency" }, { - "type": "codewhispererEndToEndLatency" + "type": "codewhispererLanguage" }, { - "type": "codewhispererAllCompletionsLatency" + "type": "codewhispererPostprocessingLatency" }, { - "type": "codewhispererCompletionType" + "type": "codewhispererPreprocessingLatency" }, { - "type": "codewhispererTriggerType" + "type": "codewhispererRequestId" }, { - "type": "codewhispererLanguage" + "type": "codewhispererSessionId" }, { - "type": "credentialStartUrl", - "required": false + "type": "codewhispererTriggerType" }, { "type": "codewhispererUserGroup" + }, + { + "type": "credentialStartUrl", + "required": false } ] }, @@ -3177,6 +3177,10 @@ { "type": "codewhispererAcceptedTokens" }, + { + "type": "codewhispererCustomizationArn", + "required": false + }, { "type": "codewhispererLanguage" }, @@ -3190,19 +3194,15 @@ "type": "codewhispererUserGroup" }, { - "type": "reason", + "type": "credentialStartUrl", "required": false }, { - "type": "successCount" - }, - { - "type": "codewhispererCustomizationArn", + "type": "reason", "required": false }, { - "type": "credentialStartUrl", - "required": false + "type": "successCount" } ], "passive": true @@ -3212,27 +3212,27 @@ "description": "Called when a code scan issue suggested fix is applied", "metadata": [ { - "type": "findingId" + "type": "component" + }, + { + "type": "credentialStartUrl", + "required": false }, { "type": "detectorId" }, { - "type": "component" + "type": "findingId" }, { - "type": "ruleId", + "type": "reason", "required": false }, { "type": "result" }, { - "type": "reason", - "required": false - }, - { - "type": "credentialStartUrl", + "type": "ruleId", "required": false } ] @@ -3242,20 +3242,20 @@ "description": "Called when a code scan issue is hovered over", "metadata": [ { - "type": "findingId" + "type": "credentialStartUrl", + "required": false }, { "type": "detectorId" }, { - "type": "ruleId", - "required": false + "type": "findingId" }, { "type": "includesFix" }, { - "type": "credentialStartUrl", + "type": "ruleId", "required": false } ] @@ -3265,17 +3265,17 @@ "description": "Called when a code scan issue webview is opened", "metadata": [ { - "type": "findingId" + "type": "credentialStartUrl", + "required": false }, { "type": "detectorId" }, { - "type": "ruleId", - "required": false + "type": "findingId" }, { - "type": "credentialStartUrl", + "type": "ruleId", "required": false } ] @@ -3286,16 +3286,16 @@ "passive": true, "metadata": [ { - "type": "source", - "required": true + "type": "credentialStartUrl", + "required": false }, { "type": "enabled", "required": true }, { - "type": "credentialStartUrl", - "required": false + "type": "source", + "required": true } ] }, @@ -3304,10 +3304,10 @@ "description": "This metric provides the particular language and task type selected by the user in the onboarding page by clicking on the Try Example button.", "metadata": [ { - "type": "codewhispererLanguage" + "type": "codewhispererGettingStartedTask" }, { - "type": "codewhispererGettingStartedTask" + "type": "codewhispererLanguage" } ] }, @@ -3316,30 +3316,30 @@ "description": "The duration from user last modification to the first recommendation shown in milliseconds", "metadata": [ { - "type": "codewhispererRequestId" + "type": "codewhispererCompletionType" }, { - "type": "codewhispererSessionId", - "required": false + "type": "codewhispererLanguage" }, { - "type": "duration" + "type": "codewhispererRequestId" }, { - "type": "codewhispererTriggerType" + "type": "codewhispererSessionId", + "required": false }, { - "type": "codewhispererCompletionType" + "type": "codewhispererTriggerType" }, { - "type": "codewhispererLanguage" + "type": "codewhispererUserGroup" }, { "type": "credentialStartUrl", "required": false }, { - "type": "codewhispererUserGroup" + "type": "duration" } ] }, @@ -3348,51 +3348,55 @@ "description": "Client side invocation of the CodeWhisperer Security Scan", "metadata": [ { - "type": "codewhispererCodeScanLines" + "type": "artifactsUploadDuration" }, { - "type": "codewhispererCodeScanJobId", + "type": "codeScanServiceInvocationsDuration" + }, + { + "type": "codewhispererCodeScanBuildPayloadBytes", "required": false }, { - "type": "codewhispererCodeScanProjectBytes", + "type": "codewhispererCodeScanBuildZipFileBytes", "required": false }, { - "type": "codewhispererCodeScanSrcPayloadBytes" + "type": "codewhispererCodeScanIssuesWithFixes", + "required": false }, { - "type": "codewhispererCodeScanBuildPayloadBytes", + "type": "codewhispererCodeScanJobId", "required": false }, { - "type": "codewhispererCodeScanSrcZipFileBytes" + "type": "codewhispererCodeScanLines" }, { - "type": "codewhispererCodeScanBuildZipFileBytes", + "type": "codewhispererCodeScanProjectBytes", "required": false }, { - "type": "codewhispererCodeScanTotalIssues" + "type": "codewhispererCodeScanSrcPayloadBytes" }, { - "type": "codewhispererCodeScanIssuesWithFixes", - "required": false + "type": "codewhispererCodeScanSrcZipFileBytes" }, { - "type": "codewhispererLanguage" + "type": "codewhispererCodeScanTotalIssues" }, { - "type": "duration" + "type": "codewhispererLanguage" }, { "type": "contextTruncationDuration" }, { - "type": "artifactsUploadDuration" + "type": "credentialStartUrl", + "required": false }, { - "type": "codeScanServiceInvocationsDuration" + "type": "duration" }, { "type": "reason", @@ -3400,10 +3404,6 @@ }, { "type": "result" - }, - { - "type": "credentialStartUrl", - "required": false } ] }, @@ -3423,12 +3423,20 @@ "type": "codewhispererCursorOffset" }, { - "type": "codewhispererLanguage" + "type": "codewhispererCustomizationArn", + "required": false }, { "type": "codewhispererGettingStartedTask", "required": false }, + { + "type": "codewhispererImportRecommendationEnabled", + "required": false + }, + { + "type": "codewhispererLanguage" + }, { "type": "codewhispererLastSuggestionIndex", "required": false @@ -3452,10 +3460,6 @@ "type": "codewhispererSessionId", "required": false }, - { - "type": "codewhispererSupplementalContextTimeout", - "required": false - }, { "type": "codewhispererSupplementalContextIsUtg", "required": false @@ -3469,32 +3473,28 @@ "required": false }, { - "type": "codewhispererTriggerType" - }, - { - "type": "duration" + "type": "codewhispererSupplementalContextTimeout", + "required": false }, { - "type": "reason", - "required": false + "type": "codewhispererTriggerType" }, { - "type": "result" + "type": "codewhispererUserGroup" }, { "type": "credentialStartUrl", "required": false }, { - "type": "codewhispererImportRecommendationEnabled", - "required": false + "type": "duration" }, { - "type": "codewhispererUserGroup" + "type": "reason", + "required": false }, { - "type": "codewhispererCustomizationArn", - "required": false + "type": "result" } ] }, @@ -3505,13 +3505,13 @@ { "type": "codewhispererCompletionType" }, - { - "type": "codewhispererLanguage" - }, { "type": "codewhispererGettingStartedTask", "required": false }, + { + "type": "codewhispererLanguage" + }, { "type": "codewhispererPaginationProgress", "required": false @@ -3531,6 +3531,10 @@ "type": "codewhispererSessionId", "required": false }, + { + "type": "codewhispererSuggestionImportCount", + "required": false + }, { "type": "codewhispererSuggestionIndex" }, @@ -3541,34 +3545,30 @@ "type": "codewhispererSuggestionReferences", "required": false }, - { - "type": "codewhispererSuggestionImportCount", - "required": false - }, { "type": "codewhispererSuggestionState" }, { - "type": "codewhispererSupplementalContextTimeout", + "type": "codewhispererSupplementalContextIsUtg", "required": false }, { - "type": "codewhispererSupplementalContextIsUtg", + "type": "codewhispererSupplementalContextLength", "required": false }, { - "type": "codewhispererSupplementalContextLength", + "type": "codewhispererSupplementalContextTimeout", "required": false }, { "type": "codewhispererTriggerType" }, { - "type": "credentialStartUrl", - "required": false + "type": "codewhispererUserGroup" }, { - "type": "codewhispererUserGroup" + "type": "credentialStartUrl", + "required": false } ] }, @@ -3607,11 +3607,11 @@ "type": "codewhispererTriggerType" }, { - "type": "credentialStartUrl", - "required": false + "type": "codewhispererUserGroup" }, { - "type": "codewhispererUserGroup" + "type": "credentialStartUrl", + "required": false } ] }, @@ -3620,128 +3620,128 @@ "description": "User decision aggregated at trigger level", "metadata": [ { - "type": "codewhispererSessionId", + "type": "codewhispererAutomatedTriggerType", "required": false }, { - "type": "codewhispererFirstRequestId" + "type": "codewhispererCharactersAccepted", + "required": false }, { - "type": "credentialStartUrl", + "type": "codewhispererCharactersRecommended", "required": false }, { - "type": "codewhispererIsPartialAcceptance", + "type": "codewhispererClassifierResult", "required": false }, { - "type": "codewhispererPartialAcceptanceCount", + "type": "codewhispererClassifierThreshold", "required": false }, { - "type": "codewhispererCharactersAccepted", - "required": false + "type": "codewhispererCompletionType" }, { - "type": "codewhispererCharactersRecommended", - "required": false + "type": "codewhispererCursorOffset" }, { - "type": "reason", + "type": "codewhispererCustomizationArn", "required": false }, { - "type": "codewhispererCompletionType" + "type": "codewhispererFeatureEvaluations", + "required": false }, { - "type": "codewhispererLanguage" + "type": "codewhispererFirstRequestId" }, { "type": "codewhispererGettingStartedTask", "required": false }, { - "type": "codewhispererTriggerType" + "type": "codewhispererIsPartialAcceptance", + "required": false }, { - "type": "codewhispererAutomatedTriggerType", - "required": false + "type": "codewhispererLanguage" }, { "type": "codewhispererLineNumber" }, { - "type": "codewhispererCursorOffset" + "type": "codewhispererPartialAcceptanceCount", + "required": false }, { - "type": "codewhispererSuggestionCount" + "type": "codewhispererPreviousSuggestionState", + "required": false }, { - "type": "codewhispererSuggestionImportCount" + "type": "codewhispererSessionId", + "required": false }, { - "type": "codewhispererTotalShownTime", - "required": false + "type": "codewhispererSuggestionCount" }, { - "type": "codewhispererTriggerCharacter", - "required": false + "type": "codewhispererSuggestionImportCount" }, { - "type": "codewhispererTypeaheadLength" + "type": "codewhispererSuggestionState" }, { - "type": "codewhispererTimeSinceLastDocumentChange", + "type": "codewhispererSupplementalContextIsUtg", "required": false }, { - "type": "codewhispererTimeSinceLastUserDecision", + "type": "codewhispererSupplementalContextLength", "required": false }, { - "type": "codewhispererTimeToFirstRecommendation", + "type": "codewhispererSupplementalContextStrategyId", "required": false }, { - "type": "codewhispererPreviousSuggestionState", + "type": "codewhispererSupplementalContextTimeout", "required": false }, { - "type": "codewhispererSuggestionState" + "type": "codewhispererTimeSinceLastDocumentChange", + "required": false }, { - "type": "codewhispererClassifierResult", + "type": "codewhispererTimeSinceLastUserDecision", "required": false }, { - "type": "codewhispererSupplementalContextTimeout", + "type": "codewhispererTimeToFirstRecommendation", "required": false }, { - "type": "codewhispererSupplementalContextIsUtg", + "type": "codewhispererTotalShownTime", "required": false }, { - "type": "codewhispererSupplementalContextLength", + "type": "codewhispererTriggerCharacter", "required": false }, { - "type": "codewhispererSupplementalContextStrategyId", - "required": false + "type": "codewhispererTriggerType" }, { - "type": "codewhispererClassifierThreshold", - "required": false + "type": "codewhispererTypeaheadLength" }, { "type": "codewhispererUserGroup" }, { - "type": "codewhispererCustomizationArn", + "type": "credentialStartUrl", "required": false }, { - "type": "codewhispererFeatureEvaluations", + "type": "reason", "required": false } ] @@ -3750,15 +3750,15 @@ "name": "deeplink_open", "description": "User requested that a resource be opened in the browser using the deeplink service", "metadata": [ - { - "type": "source" - }, { "type": "result" }, { "type": "serviceType", "required": false + }, + { + "type": "source" } ], "passive": true @@ -3777,10 +3777,10 @@ "description": "Open the dynamic resource model in the IDE", "metadata": [ { - "type": "result" + "type": "resourceType" }, { - "type": "resourceType" + "type": "result" } ] }, @@ -3789,10 +3789,10 @@ "description": "Expand a Resource Type node", "metadata": [ { - "type": "result" + "type": "resourceType" }, { - "type": "resourceType" + "type": "result" } ] }, @@ -3801,16 +3801,16 @@ "description": "A dynamic resource mutation request completed", "metadata": [ { - "type": "result" + "type": "duration" }, { - "type": "resourceType" + "type": "dynamicResourceOperation" }, { - "type": "dynamicResourceOperation" + "type": "resourceType" }, { - "type": "duration" + "type": "result" } ] }, @@ -3822,12 +3822,12 @@ "name": "dynamodb_createTable", "description": "Create a DynamoDB table", "metadata": [ - { - "type": "result" - }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -3835,12 +3835,12 @@ "name": "dynamodb_deleteTable", "description": "Delete a DynamoDB table", "metadata": [ - { - "type": "result" - }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -3848,15 +3848,15 @@ "name": "dynamodb_edit", "description": "Modify a DynamoDB entity", "metadata": [ - { - "type": "result" - }, { "type": "dynamoDbTarget" }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -3864,15 +3864,15 @@ "name": "dynamodb_fetchRecords", "description": "Fetch records from a DynamoDB table in the table browser", "metadata": [ - { - "type": "result" - }, { "type": "dynamoDbFetchType" }, { "type": "dynamoDbIndexType", "required": false + }, + { + "type": "result" } ] }, @@ -3889,15 +3889,15 @@ "name": "dynamodb_view", "description": "View a DynamoDB entity", "metadata": [ - { - "type": "result" - }, { "type": "dynamoDbTarget" }, { "type": "reason", "required": false + }, + { + "type": "result" } ] }, @@ -3906,10 +3906,10 @@ "description": "Change the state of an EC2 Instance", "metadata": [ { - "type": "result" + "type": "ec2InstanceState" }, { - "type": "ec2InstanceState" + "type": "result" } ] }, @@ -3928,10 +3928,10 @@ "description": "Perform a connection to an EC2 Instance", "metadata": [ { - "type": "result" + "type": "ec2ConnectionType" }, { - "type": "ec2ConnectionType" + "type": "result" } ] }, @@ -4070,12 +4070,12 @@ "name": "ec2_editInstanceElasticIp", "description": "Associate or disassociate an Elastic IP with an EC2 Instance", "metadata": [ - { - "type": "result" - }, { "type": "enabled", "required": false + }, + { + "type": "result" } ] }, @@ -4092,12 +4092,12 @@ "name": "ec2_editInstanceTerminationProtection", "description": "Adjust the termination protection of an EC2 Instance", "metadata": [ - { - "type": "result" - }, { "type": "enabled", "required": false + }, + { + "type": "result" } ] }, @@ -4133,10 +4133,10 @@ "description": "Attach (enabled = true) or detach a volume", "metadata": [ { - "type": "result" + "type": "enabled" }, { - "type": "enabled" + "type": "result" } ] }, @@ -4280,15 +4280,15 @@ "description": "Called when deploying an image to ECR", "metadata": [ { - "type": "result" + "type": "duration", + "required": false }, { "type": "ecrDeploySource", "required": false }, { - "type": "duration", - "required": false + "type": "result" } ] }, @@ -4325,14 +4325,14 @@ "description": "Called when deploying a scheduled task to an ECS cluster", "metadata": [ { - "type": "result" + "type": "duration", + "required": false }, { "type": "ecsLaunchType" }, - { - "type": "duration", - "required": false + { + "type": "result" } ] }, @@ -4341,14 +4341,14 @@ "description": "Called when deploying a service to an ECS cluster", "metadata": [ { - "type": "result" + "type": "duration", + "required": false }, { "type": "ecsLaunchType" }, { - "type": "duration", - "required": false + "type": "result" } ] }, @@ -4357,14 +4357,14 @@ "description": "Called when deploying a task to an ECS cluster", "metadata": [ { - "type": "result" + "type": "duration", + "required": false }, { "type": "ecsLaunchType" }, { - "type": "duration", - "required": false + "type": "result" } ] }, @@ -4417,12 +4417,12 @@ "name": "ecs_publishWizard", "description": "Called when user completes the ECS publish wizard", "metadata": [ - { - "type": "result" - }, { "type": "duration", "required": false + }, + { + "type": "result" } ] }, @@ -4431,10 +4431,10 @@ "description": "Called when the ECS execute command is run", "metadata": [ { - "type": "result" + "type": "ecsExecuteCommandType" }, { - "type": "ecsExecuteCommandType" + "type": "result" } ] }, @@ -4461,9 +4461,6 @@ "name": "file_editAwsFile", "description": "Use authoring features such as autocompletion, syntax checking, and highlighting, for AWS filetypes (CFN, SAM, etc.). Emit this _once_ per file-editing session for a given file. Ideally this is emitted only if authoring features are used, rather than merely opening or touching a file.", "metadata": [ - { - "type": "result" - }, { "type": "awsFiletype", "required": true @@ -4471,6 +4468,9 @@ { "type": "filenameExt", "required": false + }, + { + "type": "result" } ] }, @@ -4479,10 +4479,10 @@ "description": "Create an IAM resource", "metadata": [ { - "type": "result" + "type": "iamResourceType" }, { - "type": "iamResourceType" + "type": "result" } ] }, @@ -4500,10 +4500,10 @@ "description": "Delete an IAM resource", "metadata": [ { - "type": "result" + "type": "iamResourceType" }, { - "type": "iamResourceType" + "type": "result" } ] }, @@ -4521,10 +4521,10 @@ "description": "Edits policy/configuration associated with an IAM resource", "metadata": [ { - "type": "result" + "type": "iamResourceType" }, { - "type": "iamResourceType" + "type": "result" } ] }, @@ -4533,10 +4533,10 @@ "description": "Open a window to view/edit an IAM resource", "metadata": [ { - "type": "result" + "type": "iamResourceType" }, { - "type": "iamResourceType" + "type": "result" } ] }, @@ -4590,10 +4590,10 @@ "description": "Called when creating a lambda project", "metadata": [ { - "type": "result" + "type": "language" }, { - "type": "language" + "type": "result" }, { "type": "templateName" @@ -4622,36 +4622,32 @@ "description": "Called when deploying a Lambda Function", "metadata": [ { - "type": "lambdaPackageType" - }, - { - "type": "result" + "type": "duration", + "required": false }, { "type": "initialDeploy" }, { - "type": "duration", + "type": "lambdaArchitecture", "required": false }, { - "type": "runtime", - "required": false + "type": "lambdaPackageType" }, { - "type": "platform", + "type": "language", "required": false }, { - "type": "lambdaArchitecture", + "type": "platform", "required": false }, { - "type": "language", - "required": false + "type": "result" }, { - "type": "xrayEnabled", + "type": "runtime", "required": false }, { @@ -4661,6 +4657,10 @@ { "type": "source", "required": false + }, + { + "type": "xrayEnabled", + "required": false } ] }, @@ -4668,15 +4668,15 @@ "name": "lambda_editFunction", "description": "Called when creating lambdas remotely", "metadata": [ - { - "type": "update", - "required": false - }, { "type": "lambdaPackageType" }, { "type": "result" + }, + { + "type": "update", + "required": false } ] }, @@ -4694,11 +4694,11 @@ "description": "Called when importing a remote Lambda function", "metadata": [ { - "type": "runtime", - "required": false + "type": "result" }, { - "type": "result" + "type": "runtime", + "required": false } ] }, @@ -4707,11 +4707,10 @@ "description": "Called when invoking lambdas locally (with SAM in most toolkits)", "metadata": [ { - "type": "runtime", - "required": false + "type": "debug" }, { - "type": "version", + "type": "lambdaArchitecture", "required": false }, { @@ -4721,10 +4720,11 @@ "type": "result" }, { - "type": "debug" + "type": "runtime", + "required": false }, { - "type": "lambdaArchitecture", + "type": "version", "required": false } ] @@ -4734,11 +4734,11 @@ "description": "Called when invoking lambdas remotely", "metadata": [ { - "type": "runtime", - "required": false + "type": "result" }, { - "type": "result" + "type": "runtime", + "required": false } ] }, @@ -4746,13 +4746,13 @@ "name": "lambda_publishWizard", "description": "Called when user completes the Lambda publish wizard", "metadata": [ - { - "type": "result" - }, { "type": "duration", "required": false }, + { + "type": "result" + }, { "type": "serviceType", "required": false @@ -4768,11 +4768,11 @@ "description": "Called when updating a Lambda function's code outside the context of a SAM template", "metadata": [ { - "type": "runtime", - "required": false + "type": "result" }, { - "type": "result" + "type": "runtime", + "required": false } ] }, @@ -4780,15 +4780,15 @@ "name": "rds_createConnectionConfiguration", "description": "Called when creating a new database connection configuration to for a RDS database. In Datagrip we do not get this infromation if it is created directly, so this is only counts actions.", "metadata": [ - { - "type": "result" - }, { "type": "databaseCredentials" }, { "type": "databaseEngine", "required": false + }, + { + "type": "result" } ] }, @@ -4844,14 +4844,14 @@ "description": "Called when getting IAM/SecretsManager credentials for a RDS database. Value represents how long it takes in ms.", "unit": "Milliseconds", "metadata": [ - { - "type": "result" - }, { "type": "databaseCredentials" }, { "type": "databaseEngine" + }, + { + "type": "result" } ] }, @@ -4896,10 +4896,10 @@ "description": "Called when creating a new database connection configuration to for a Redshift database. In Datagrip we do not get this infromation if it is created directly, so this only counts actions.", "metadata": [ { - "type": "result" + "type": "databaseCredentials" }, { - "type": "databaseCredentials" + "type": "result" } ] }, @@ -4909,10 +4909,10 @@ "unit": "Milliseconds", "metadata": [ { - "type": "result" + "type": "databaseCredentials" }, { - "type": "databaseCredentials" + "type": "result" } ] }, @@ -4938,10 +4938,10 @@ "description": "Copy the URL of a S3 object to the clipboard", "metadata": [ { - "type": "result" + "type": "presigned" }, { - "type": "presigned" + "type": "result" } ] }, @@ -4977,14 +4977,14 @@ "description": "Delete S3 object(s)", "metadata": [ { - "type": "result" + "type": "failedCount", + "required": false }, { - "type": "successCount", - "required": false + "type": "result" }, { - "type": "failedCount", + "type": "successCount", "required": false } ] @@ -4994,10 +4994,7 @@ "description": "Download S3 object(s)", "metadata": [ { - "type": "result" - }, - { - "type": "successCount", + "type": "component", "required": false }, { @@ -5005,7 +5002,10 @@ "required": false }, { - "type": "component", + "type": "result" + }, + { + "type": "successCount", "required": false } ] @@ -5025,12 +5025,12 @@ "description": "Edit or view one or more S3 objects in the IDE", "unit": "Count", "metadata": [ - { - "type": "result" - }, { "type": "component", "required": false + }, + { + "type": "result" } ] }, @@ -5075,10 +5075,7 @@ "description": "Upload S3 object(s)", "metadata": [ { - "type": "result" - }, - { - "type": "successCount", + "type": "component", "required": false }, { @@ -5086,7 +5083,10 @@ "required": false }, { - "type": "component", + "type": "result" + }, + { + "type": "successCount", "required": false } ] @@ -5119,13 +5119,13 @@ "description": "Called when checking if the SAM executable on the local machine is valid with a valid version", "passive": true, "metadata": [ - { - "type": "result" - }, { "type": "reason", "required": false }, + { + "type": "result" + }, { "type": "version", "required": false @@ -5137,34 +5137,34 @@ "description": "Called when initing a SAM application", "metadata": [ { - "type": "result" + "type": "eventBridgeSchema", + "required": false }, { - "type": "runtime", + "type": "lambdaArchitecture", "required": false }, { - "type": "templateName", + "type": "lambdaPackageType", "required": false }, { - "type": "version", + "type": "reason", "required": false }, { - "type": "lambdaPackageType", - "required": false + "type": "result" }, { - "type": "reason", + "type": "runtime", "required": false }, { - "type": "eventBridgeSchema", + "type": "templateName", "required": false }, { - "type": "lambdaArchitecture", + "type": "version", "required": false } ] @@ -5173,12 +5173,6 @@ "name": "sam_sync", "description": "Called when syncing a SAM application", "metadata": [ - { - "type": "result" - }, - { - "type": "syncedResources" - }, { "type": "lambdaPackageType", "required": false @@ -5187,6 +5181,12 @@ "type": "reason", "required": false }, + { + "type": "result" + }, + { + "type": "syncedResources" + }, { "type": "version", "required": false @@ -5411,16 +5411,16 @@ "description": "The toolkit tried to retrieve blob data from a url", "metadata": [ { - "type": "url", - "required": true + "type": "reason", + "required": false }, { "type": "result", "required": true }, { - "type": "reason", - "required": false + "type": "url", + "required": true } ], "passive": true @@ -5430,11 +5430,11 @@ "description": "The Toolkit has completed initialization", "metadata": [ { - "type": "result", + "type": "duration", "required": false }, { - "type": "duration", + "type": "result", "required": false } ], @@ -5445,7 +5445,7 @@ "description": "A user invoked an action. Source represents the notification that produced the action", "metadata": [ { - "type": "result", + "type": "component", "required": true }, { @@ -5453,16 +5453,16 @@ "required": true }, { - "type": "source", - "required": true + "type": "reason", + "required": false }, { - "type": "component", + "type": "result", "required": true }, { - "type": "reason", - "required": false + "type": "source", + "required": true } ] }, @@ -5471,7 +5471,7 @@ "description": "The toolkit tried to show an action. Source represents the notification that produced the action", "metadata": [ { - "type": "result", + "type": "component", "required": true }, { @@ -5479,16 +5479,16 @@ "required": true }, { - "type": "source", - "required": true + "type": "reason", + "required": false }, { - "type": "component", + "type": "result", "required": true }, { - "type": "reason", - "required": false + "type": "source", + "required": true } ], "passive": true @@ -5498,20 +5498,20 @@ "description": "The toolkit tried to show a notification message", "metadata": [ { - "type": "result", + "type": "component", "required": true }, { "type": "id", "required": true }, - { - "type": "component", - "required": true - }, { "type": "reason", "required": false + }, + { + "type": "result", + "required": true } ], "passive": true