diff --git a/.vscodeignore b/.vscodeignore index 686b58a20..0c96e86c2 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,36 +1,42 @@ -.vscode/** -.vscode-test/** +azure-pipelines.yml +build/** +build/** +CONTRIBUTING.md +coverage/** +coverconfig.json +doc/** +.eslintignore +.gitattributes +.github +.gitignore +header.js +images/demo-featured-image.png images/gif/** -out/test/** +Jenkinsfile +.mocharc.js +out/build** out/build/** -out/test-resources/** -out/tools-cache/** +out/coverage/** out/**/*.map out/src-orig/** +out/test/** +out/test-resources/** +out/tools-cache/** +out/webview/** +*.sha256 src/** !src/tools.json -doc/** -.gitignore -.github -tsconfig.json -vsc-extension-quickstart.md -tslint.json -*.vsix test/** -out/coverage/** -coverconfig.json -Jenkinsfile -.gitattributes -.travis.yml -CONTRIBUTING.md -build/** -out/build** -azure-pipelines.yml -images/demo-featured-image.png +test/** +test-resources/** test-resources/** -header.js -.mocharc.js -.eslintignore *.tgz -*.sha256 -**.tsbuildinfo +.travis.yml +*/**.tsbuildinfo +tsconfig.json +tsconfig.tsbuildinfo +tslint.json +vsc-extension-quickstart.md +.vscode/** +.vscode-test/** +*.vsix \ No newline at end of file diff --git a/build/esbuild.mjs b/build/esbuild.mjs index 31df8f41d..61f80b937 100644 --- a/build/esbuild.mjs +++ b/build/esbuild.mjs @@ -7,6 +7,12 @@ import * as esbuild from 'esbuild'; import svgr from 'esbuild-plugin-svgr'; import { sassPlugin } from 'esbuild-sass-plugin'; import * as fs from 'fs/promises'; +import * as glob from 'glob'; +import { createRequire } from 'module'; +import * as path from 'path'; +import { fileURLToPath } from 'url'; + +const require = createRequire(import.meta.url); const webviews = [ 'cluster', @@ -26,14 +32,138 @@ const webviews = [ 'openshift-terminal', ]; -await Promise.all([ - esbuild.build({ - entryPoints: webviews.map(webview => `./src/webview/${webview}/app/index.tsx`), - bundle: true, - outdir: 'out', +const production = process.argv.includes('--production'); + +// eslint-disable no-console +console.log(`esbuild: building for production: ${production ? 'Yes' : 'No'}`); + +const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file +const __dirname = path.resolve(path.dirname(__filename), '..'); // get the name of the directory +const srcDir = 'src'; // Input source directory +const outDir = 'out'; // Output dist directory + +function detectGoal(entryPoints) { + if (production) { + const isExtension = entryPoints.filter((ep) => `${ep}`.includes('extension.ts')).length > 0; + const isWebviews = entryPoints.filter((ep) => `${ep}`.includes('.tsx')).length > 0; + return isExtension ? 'Extension' : isWebviews ? 'the Webviews' : ''; + } + return 'Extension and the Webviews for testing/debugging'; +} + +/** + * @type {import('esbuild').Plugin} + */ +const esbuildProblemMatcherPlugin = { + name: 'esbuild-problem-matcher', + + setup(build) { + build.onStart(() => { + const goal = detectGoal(build.initialOptions.entryPoints); + console.log(`[watch] build started${goal ? ' for ' + goal : ''}...` ); + }); + build.onEnd(result => { + result.errors.forEach(({ text, location }) => { + console.error(`✘ [ERROR] ${text}`); + if (location) { + console.error(` ${location.file}:${location.line}:${location.column}:`); + } + }); + const goal = detectGoal(build.initialOptions.entryPoints); + console.log(`[watch] build finished${goal ? ' for ' + goal : ''}`); + }); + } + }; + +const nativeNodeModulesPlugin = { + name: 'native-node-modules', + setup(build) { + try { + // If a ".node" file is imported within a module in the "file" namespace, resolve + // it to an absolute path and put it into the "node-file" virtual namespace. + build.onResolve({ filter: /\.node$/, namespace: 'file' }, args => ({ + path: require.resolve(args.path, { paths: [args.resolveDir] }), + namespace: 'node-file', + })); + + // Files in the "node-file" virtual namespace call "require()" on the + // path from esbuild of the ".node" file in the output directory. + build.onLoad({ filter: /.*/, namespace: 'node-file' }, args => ({ + contents: ` + import path from ${JSON.stringify(args.path)} + try { + module.exports = require(path) + } catch {} + `, + })) + + // If a ".node" file is imported within a module in the "node-file" namespace, put + // it in the "file" namespace where esbuild's default loading behavior will handle + // it. It is already an absolute path since we resolved it to one above. + build.onResolve({ filter: /\.node$/, namespace: 'node-file' }, args => ({ + path: args.path, + namespace: 'file', + })); + + // Tell esbuild's default loading behavior to use the "file" loader for + // these ".node" files. + let opts = build.initialOptions + opts.loader = opts.loader || {} + opts.loader['.node'] = 'file' + } catch (err) { + console.error(`native-node-modules: ERROR: ${err}`); + } + }, +}; + +const baseConfig = { + bundle: true, + target: 'chrome108', + minify: production, + sourcemap: !production, + logLevel: 'warning', +}; + +if (production) { + // Build the extension.js + const extConfig = { + ...baseConfig, + platform: 'node', + entryPoints: [`./${srcDir}/extension.ts`], + outfile: `${outDir}/${srcDir}/extension.js`, + external: ['vscode', 'shelljs'], + plugins: [ + nativeNodeModulesPlugin, + esbuildProblemMatcherPlugin // this one is to be added to the end of plugins array + ] + }; + await esbuild.build(extConfig); + + // Build the Webviews + const webviewsConfig = { + ...baseConfig, + platform: 'browser', + entryPoints: [...webviews.map(webview => `./${srcDir}/webview/${webview}/app/index.tsx`)], + outdir: `${outDir}`, + loader: { + '.png': 'file', + }, + plugins: [ + sassPlugin(), + svgr({ + plugins: ['@svgr/plugin-jsx'] + }), + esbuildProblemMatcherPlugin // this one is to be added to the end of plugins array + ] + }; + await esbuild.build(webviewsConfig); +} else { + // Build the Webviews + const devConfig = { + ...baseConfig, platform: 'browser', - target: 'chrome108', - sourcemap: true, + entryPoints: [...webviews.map(webview => `./${srcDir}/webview/${webview}/app/index.tsx`)], + outdir: `${outDir}`, loader: { '.png': 'file', }, @@ -42,9 +172,32 @@ await Promise.all([ svgr({ plugins: ['@svgr/plugin-jsx'] }), + esbuildProblemMatcherPlugin // this one is to be added to the end of plugins array ] - }), - ...webviews.map(webview => - fs.cp(`./src/webview/${webview}/app/index.html`, `./out/${webview}/app/index.html`) - ), -]); + }; + await esbuild.build(devConfig); +} + +async function dirExists(path) { + try { + if ((await fs.stat(path)).isDirectory()) { + return true; + } + } catch { + // Ignore + } + return false; +} + +// Copy webview's 'index.html's to the output webview dirs +await Promise.all([ + ...webviews.map(async webview => { + const targetDir = path.join(__dirname, `${outDir}/${webview}/app`); + if (!dirExists(targetDir)) { + await fs.mkdir(targetDir, { recursive: true, mode: 0o750} ); + } + glob.sync([ `${srcDir}/webview/${webview}/app/index.html` ]).map(async srcFile => { + await fs.cp(path.join(__dirname, srcFile), path.join(targetDir, `${path.basename(srcFile)}`)) + }); + }) +]); \ No newline at end of file diff --git a/build/run-tests.ts b/build/run-tests.ts index dfeb9b530..64234f0b1 100644 --- a/build/run-tests.ts +++ b/build/run-tests.ts @@ -27,9 +27,9 @@ async function main(): Promise { '--disable-workspace-trust', ], }); - } catch { + } catch (err) { // eslint-disable-next-line no-console - console.error('Failed to run tests'); + console.error(`Failed to run tests: ${err}`); process.exit(1); } } diff --git a/package-lock.json b/package-lock.json index a323871c2..ac58270d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,45 +9,18 @@ "version": "1.16.0", "license": "MIT", "dependencies": { - "@codemirror/lang-yaml": "^6.1.1", - "@kubernetes/client-node": "^0.22.2", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", - "@uiw/codemirror-theme-github": "^4.23.6", - "@uiw/react-codemirror": "^4.23.6", - "clsx": "^2.1.1", - "codemirror": "^6.0.1", - "dockerode": "^4.0.2", - "fs-extra": "^11.2.0", - "git-up": "^7.0.0", - "got": "^11.8.6", - "hasha": "^5.2.2", - "js-yaml": "^4.1.0", - "json-schema": "^0.4.0", - "json-to-ast": "^2.1.0", - "lodash": "^4.17.21", - "mkdirp": "^3.0.1", - "node-yaml-parser": "^0.0.9", - "portfinder": "^1.0.32", - "rxjs": "^7.8.1", - "semver": "^7.6.3", - "shelljs": "^0.8.5", - "stacktrace-parser": "^0.1.10", - "targz": "^1.0.1", - "tmp": "^0.2.3", - "unzip-stream": "^0.3.4", - "validator": "^13.12.0", - "vscode-kubernetes-tools-api": "^1.3.0", - "xterm": "^5.3.0", - "xterm-addon-serialize": "^0.11.0", - "xterm-headless": "^5.3.0" + "shelljs": "^0.8.5" }, "devDependencies": { + "@codemirror/lang-yaml": "^6.1.1", "@devfile/api": "^2.2.2-1716821574", + "@kubernetes/client-node": "^0.22.2", "@mui/icons-material": "^6.1.7", "@mui/lab": "^6.0.0-beta.15", - "@mui/material": "^6.1.0", + "@mui/material": "^6.1.7", "@mui/styles": "^6.1.7", "@mui/x-tree-view": "^7.22.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", "@rjsf/core": "^5.22.4", "@rjsf/mui": "^5.22.4", "@rjsf/utils": "^5.22.4", @@ -77,15 +50,21 @@ "@types/vscode": "1.82.0", "@typescript-eslint/eslint-plugin": "^8.14.0", "@typescript-eslint/parser": "^8.14.0", + "@uiw/codemirror-theme-github": "^4.23.6", "@uiw/codemirror-theme-vscode": "^4.23.6", + "@uiw/react-codemirror": "^4.23.6", "@vscode/test-electron": "^2.4.1", "bootstrap": "^5.3.3", "chai": "^4.5.0", "chokidar": "^4.0.1", "clipboardy": "^2.3.0", + "clsx": "^2.1.1", "codecov": "^3.8.3", + "codemirror": "^6.0.1", + "dockerode": "^4.0.2", "dpdm": "^3.14.0", "esbuild": "^0.19.12", + "esbuild-node-externals": "^1.15.0", "esbuild-plugin-svgr": "^2.1.0", "esbuild-sass-plugin": "^2.16.1", "eslint": "^8.57.1", @@ -98,12 +77,23 @@ "eslint-plugin-prettier": "^5.2.1", "express": "^5.0.1", "file-loader": "^6.2.0", + "fs-extra": "^11.2.0", + "git-up": "^7.0.0", "glob": "^11.0.0", + "got": "^11.8.6", + "hasha": "^5.2.2", "istanbul": "^0.4.5", + "js-yaml": "^4.1.0", + "json-schema": "^0.4.0", + "json-to-ast": "^2.1.0", "leasot": "^14.4.0", + "lodash": "^4.17.21", + "mkdirp": "^3.0.1", "mocha": "^10.8.2", "mocha-jenkins-reporter": "^0.4.7", + "node-yaml-parser": "^0.0.9", "npm-run-all": "^4.1.5", + "portfinder": "^1.0.32", "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "proxyquire": "^2.1.3", @@ -114,18 +104,30 @@ "react-phone-input-2": "^2.14.0", "react-scroll-to-top": "^3.0.0", "remap-istanbul": "^0.13.0", + "rxjs": "^7.8.1", + "semver": "^7.6.3", "showdown": "^2.1.0", "shx": "^0.3.3", "sinon": "^19.0.2", "sinon-chai": "^3.7.0", "source-map-support": "^0.5.21", + "stacktrace-parser": "^0.1.10", "survey-core": "^1.12.10", "survey-react-ui": "^1.12.10", + "targz": "^1.0.1", + "tmp": "^0.2.3", + "ts-node": "^10.9.2", "typescript": "^5.6.3", + "unzip-stream": "^0.3.4", + "validator": "^13.12.0", "vscode-extension-tester": "^8.8.1", + "vscode-kubernetes-tools-api": "^1.3.0", + "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", + "xterm-addon-serialize": "^0.11.0", "xterm-addon-web-links": "^0.9.0", - "xterm-addon-webgl": "^0.16.0" + "xterm-addon-webgl": "^0.16.0", + "xterm-headless": "^5.3.0" }, "engines": { "node": ">=18.0.0", @@ -618,6 +620,7 @@ "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -677,7 +680,8 @@ "node_modules/@balena/dockerignore": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", - "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==" + "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", + "dev": true }, "node_modules/@bazel/runfiles": { "version": "5.8.1", @@ -695,6 +699,7 @@ "version": "6.18.0", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.0.tgz", "integrity": "sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==", + "dev": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -712,6 +717,7 @@ "version": "6.6.0", "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.0.tgz", "integrity": "sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==", + "dev": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.4.0", @@ -723,6 +729,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/@codemirror/lang-yaml/-/lang-yaml-6.1.1.tgz", "integrity": "sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw==", + "dev": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -736,6 +743,7 @@ "version": "6.10.2", "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "dev": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", @@ -749,6 +757,7 @@ "version": "6.8.1", "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "dev": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -759,6 +768,7 @@ "version": "6.5.6", "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "dev": true, "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -768,12 +778,14 @@ "node_modules/@codemirror/state": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", - "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "dev": true }, "node_modules/@codemirror/theme-one-dark": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.2.tgz", "integrity": "sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==", + "dev": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -785,12 +797,37 @@ "version": "6.33.0", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.33.0.tgz", "integrity": "sha512-AroaR3BvnjRW8fiZBalAaK+ZzB5usGgI014YKElYZvQdNH5ZIidHlO+cyf/2rWzyBFRkvG6VhiXeAEbC53P2YQ==", + "dev": true, "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@devfile/api": { "version": "2.2.2-1716821574", "resolved": "https://registry.npmjs.org/@devfile/api/-/api-2.2.2-1716821574.tgz", @@ -1541,6 +1578,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1557,6 +1595,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -1567,12 +1606,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1589,6 +1630,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1603,6 +1645,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, "dependencies": { "minipass": "^7.0.4" }, @@ -1614,6 +1657,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1692,6 +1736,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.2.1.tgz", "integrity": "sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -1704,6 +1749,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.3.tgz", "integrity": "sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -1716,6 +1762,7 @@ "version": "0.22.2", "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.22.2.tgz", "integrity": "sha512-PPyzUVunPtgISnWNkCTSLp1SoZ3I13XOanrc8XAQRKp8XTnDF7VT9Sf3/haFmgnpONe4ORCtqrWueGp5fl8yzw==", + "dev": true, "dependencies": { "byline": "^5.0.0", "isomorphic-ws": "^5.0.0", @@ -1736,6 +1783,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -1744,6 +1792,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, "engines": { "node": ">=18" } @@ -1752,6 +1801,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -1771,6 +1821,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1779,6 +1830,7 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -1795,12 +1847,14 @@ "node_modules/@kubernetes/client-node/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/@kubernetes/client-node/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1815,6 +1869,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "dev": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -1827,6 +1882,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -1835,6 +1891,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -1850,6 +1907,7 @@ "version": "5.0.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, "dependencies": { "glob": "^10.3.7" }, @@ -1867,6 +1925,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/tar/-/tar-7.0.1.tgz", "integrity": "sha512-IjMhdQMZFpKsHEQT3woZVxBtCQY+0wk3CVxdRkGXEgyGa0dNS/ehPvOMr2nmfC7x5Zj2N+l6yZUpmICjLGS35w==", + "dev": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -1883,6 +1942,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, "engines": { "node": ">=18" } @@ -1890,12 +1950,14 @@ "node_modules/@lezer/common": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", - "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==" + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==", + "dev": true }, "node_modules/@lezer/highlight": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "dev": true, "dependencies": { "@lezer/common": "^1.0.0" } @@ -1904,6 +1966,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "dev": true, "dependencies": { "@lezer/common": "^1.0.0" } @@ -1912,6 +1975,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@lezer/yaml/-/yaml-1.0.3.tgz", "integrity": "sha512-GuBLekbw9jDBDhGur82nuwkxKQ+a3W5H0GfaAthDXcAu+XdpS43VlnxA9E9hllkpSP5ellRDKjLLj7Lu9Wr6xA==", + "dev": true, "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -1920,6 +1984,7 @@ }, "node_modules/@lukeed/csprng": { "version": "1.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1927,6 +1992,7 @@ }, "node_modules/@lukeed/uuid": { "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.0.0" @@ -2392,6 +2458,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -2619,6 +2686,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.0.tgz", "integrity": "sha512-1QMKaIJIflzC7Zz89ojzt8j1X3pu8FeP8reAm+9K6HeN18ahoKZLwVBO4dCfiHZ+VZIkeQK4XU7al5132Gc5TA==", + "dev": true, "dependencies": { "@segment/analytics-node": "2.1.3", "countries-and-timezones": "^3.4.1", @@ -2634,6 +2702,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -2643,6 +2712,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, "engines": { "node": ">=12" }, @@ -2654,6 +2724,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -2777,6 +2848,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.7.0.tgz", "integrity": "sha512-0DHSriS/oAB/2bIgOMv3fFV9/ivp39ibdOTTf+dDOhf+vlciBv0+MHw47k/6PRobbuls27cKkKZAKc4DDC2+gw==", + "dev": true, "dependencies": { "@lukeed/uuid": "^2.0.0", "@segment/analytics-generic-utils": "1.2.0", @@ -2788,6 +2860,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@segment/analytics-generic-utils/-/analytics-generic-utils-1.2.0.tgz", "integrity": "sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==", + "dev": true, "dependencies": { "tslib": "^2.4.1" } @@ -2826,6 +2899,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.1.3.tgz", "integrity": "sha512-xwMkyXgr7xgPsP0w79nzCwRHYi9jzj9ps4Im7xWGK8AKKE4eox39tMZOdRtpDbvXQlrs9fh64ZC0w/yZZDM/9g==", + "dev": true, "dependencies": { "@lukeed/uuid": "^2.0.0", "@segment/analytics-core": "1.7.0", @@ -2843,6 +2917,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -2913,6 +2988,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3267,6 +3343,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" @@ -3285,6 +3362,34 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/body-parser": { "version": "1.19.2", "dev": true, @@ -3298,6 +3403,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", @@ -3417,7 +3523,8 @@ "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", @@ -3450,6 +3557,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -3485,6 +3593,7 @@ "version": "18.19.64", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.64.tgz", "integrity": "sha512-955mDqvO2vFf/oL7V3WiUtiz+BugyX8uVbaT2H8oj3+8dRyH2FLiNdowe7eNqRM7IOIZvzDH76EoAT+gwm6aIQ==", + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -3571,6 +3680,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" @@ -3932,6 +4042,7 @@ "version": "4.23.6", "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.6.tgz", "integrity": "sha512-bvtq8IOvdkLJMhoJBRGPEzU51fMpPDwEhcAHp9xCR05MtbIokQgsnLXrmD1aZm6e7s/3q47H+qdSfAAkR5MkLA==", + "dev": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", @@ -3958,6 +4069,7 @@ "version": "4.23.6", "resolved": "https://registry.npmjs.org/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.23.6.tgz", "integrity": "sha512-p74sbyuDo7JsYlGWNtyNyJSyr9N4niCPGqYreQhoAk2C6c4JXi0sGwZRlHd8KyynsxCdSA9L727SADOuukD1Ug==", + "dev": true, "dependencies": { "@uiw/codemirror-themes": "4.23.6" }, @@ -3981,6 +4093,7 @@ "version": "4.23.6", "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.23.6.tgz", "integrity": "sha512-0dpuLQW+V6zrKvfvor/eo71V3tpr2L2Hsu8QZAdtSzksjWABxTOzH3ShaBRxCEsrz6sU9sa9o7ShwBMMDz59bQ==", + "dev": true, "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -3999,6 +4112,7 @@ "version": "4.23.6", "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.23.6.tgz", "integrity": "sha512-caYKGV6TfGLRV1HHD3p0G3FiVzKL1go7wes5XT2nWjB0+dTdyzyb81MKRSacptgZcotujfNO6QXn65uhETRAMw==", + "dev": true, "dependencies": { "@babel/runtime": "^7.18.6", "@codemirror/commands": "^6.1.0", @@ -4686,6 +4800,19 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -4703,6 +4830,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -4791,6 +4919,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4861,10 +4990,18 @@ "node": ">=14" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, "license": "Python-2.0" }, "node_modules/argv": { @@ -5020,6 +5157,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" @@ -5029,6 +5167,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8" @@ -5058,12 +5197,14 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true, "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/available-typed-arrays": { @@ -5085,6 +5226,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "*" @@ -5094,6 +5236,7 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true, "license": "MIT" }, "node_modules/azure-devops-node-api": { @@ -5131,6 +5274,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -5151,6 +5295,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" @@ -5170,6 +5315,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, "license": "MIT", "dependencies": { "buffers": "~0.1.1", @@ -5192,6 +5338,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", @@ -5354,6 +5501,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -5378,6 +5526,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", @@ -5388,6 +5537,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, "license": "MIT" }, "node_modules/buffer-crc32": { @@ -5409,6 +5559,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, "license": "MIT" }, "node_modules/buffer-from": { @@ -5422,12 +5573,14 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true, "engines": { "node": ">=0.2.0" } }, "node_modules/bufferutil": { "version": "4.0.7", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -5443,6 +5596,7 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==", + "dev": true, "optional": true, "engines": { "node": ">=10.0.0" @@ -5452,6 +5606,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5594,6 +5749,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10.6.0" @@ -5603,6 +5759,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, "license": "MIT", "dependencies": { "clone-response": "^1.0.2", @@ -5621,6 +5778,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -5636,6 +5794,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -5696,6 +5855,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, "license": "Apache-2.0" }, "node_modules/chai": { @@ -5729,6 +5889,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, "license": "MIT/X11", "dependencies": { "traverse": ">=0.3.0 <0.4" @@ -5831,7 +5992,8 @@ "node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, "node_modules/chrome-trace-event": { "version": "1.0.4", @@ -5982,6 +6144,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" @@ -5994,6 +6157,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, "engines": { "node": ">=6" } @@ -6011,6 +6175,7 @@ "version": "0.0.230", "resolved": "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz", "integrity": "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==", + "dev": true, "engines": { "node": ">= 4" } @@ -6077,6 +6242,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dev": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", @@ -6108,6 +6274,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -6226,6 +6393,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { @@ -6258,6 +6426,7 @@ "version": "3.5.1", "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.5.1.tgz", "integrity": "sha512-DlsW+qxiJI6HJ83Yjjmuokgul3KKs0BmraPigFZ1sjWHPZcOTJ0LwB5iewZT9wsMAbmgGSVUdY4nZ4JnHD6NBQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=8.x", @@ -6268,6 +6437,7 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz", "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==", + "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -6278,15 +6448,24 @@ "node": ">=10.0.0" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", + "dev": true }, "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, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6301,6 +6480,7 @@ "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" }, @@ -6360,6 +6540,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" @@ -6423,6 +6604,7 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -6439,12 +6621,14 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, "license": "MIT" }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -6460,6 +6644,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6514,6 +6699,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6566,6 +6752,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -6626,6 +6813,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", "integrity": "sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==", + "dev": true, "dependencies": { "debug": "^4.1.1", "readable-stream": "^3.5.0", @@ -6640,6 +6828,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6653,6 +6842,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.2.tgz", "integrity": "sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==", + "dev": true, "dependencies": { "@balena/dockerignore": "^1.0.2", "docker-modem": "^5.0.3", @@ -6666,6 +6856,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -6676,6 +6867,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6685,6 +6877,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6698,6 +6891,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", + "dev": true, "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -6709,6 +6903,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -7052,6 +7247,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "dev": true, "engines": { "node": ">=4" } @@ -7068,12 +7264,14 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, "license": "MIT", "dependencies": { "jsbn": "~0.1.0", @@ -7106,6 +7304,7 @@ "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, "license": "MIT" }, "node_modules/emojis-list": { @@ -7131,6 +7330,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "license": "MIT", "optional": true, "peer": true, @@ -7167,6 +7367,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, "license": "MIT", "optional": true, "peer": true, @@ -7181,6 +7382,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -7414,6 +7616,23 @@ "@esbuild/win32-x64": "0.19.12" } }, + "node_modules/esbuild-node-externals": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/esbuild-node-externals/-/esbuild-node-externals-1.15.0.tgz", + "integrity": "sha512-lM5f3CQL9Ctv6mBwwYAEMcphK2qrjVRnemT1mufECpFaidZvFVvQDPcuno/MQfLVk4utVuSVxm1RHLyg/ONQ/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "tslib": "^2.4.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "esbuild": "0.12 - 0.24" + } + }, "node_modules/esbuild-plugin-svgr": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/esbuild-plugin-svgr/-/esbuild-plugin-svgr-2.1.0.tgz", @@ -8320,6 +8539,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, "license": "MIT" }, "node_modules/extend-shallow": { @@ -8340,6 +8560,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, "engines": [ "node >=0.6.0" ], @@ -8349,6 +8570,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-diff": { @@ -8389,6 +8611,7 @@ "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, "license": "MIT" }, "node_modules/fast-levenshtein": { @@ -8590,6 +8813,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -8606,6 +8830,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -8618,6 +8843,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "*" @@ -8669,12 +8895,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -8854,6 +9082,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, "license": "MIT", "dependencies": { "async": "^3.2.0" @@ -8863,6 +9092,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" @@ -8872,6 +9102,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "dev": true, "license": "MIT", "dependencies": { "is-ssh": "^1.4.0", @@ -9035,6 +9266,7 @@ "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", @@ -9060,12 +9292,14 @@ "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, "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -9108,6 +9342,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, "license": "ISC", "engines": { "node": ">=4" @@ -9117,6 +9352,7 @@ "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.3", @@ -9202,6 +9438,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "license": "MIT", "dependencies": { "is-stream": "^2.0.0", @@ -9321,6 +9558,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-errors": { @@ -9358,6 +9596,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", @@ -9373,6 +9612,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", @@ -9428,6 +9668,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -9554,6 +9795,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9746,6 +9988,7 @@ "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, "license": "MIT", "engines": { "node": ">=8" @@ -9923,6 +10166,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, "license": "MIT", "dependencies": { "protocols": "^2.0.1" @@ -9932,6 +10176,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9991,6 +10236,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, "license": "MIT" }, "node_modules/is-unicode-supported": { @@ -10050,12 +10296,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, "license": "ISC" }, "node_modules/isobject": { @@ -10072,6 +10320,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "dev": true, "peerDependencies": { "ws": "*" } @@ -10080,6 +10329,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, "license": "MIT" }, "node_modules/istanbul": { @@ -10336,6 +10586,7 @@ "version": "5.9.6", "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/panva" } @@ -10354,12 +10605,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10372,6 +10625,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, "license": "MIT" }, "node_modules/jsdoc-type-pratt-parser": { @@ -10387,6 +10641,7 @@ "version": "1.3.9", "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz", "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -10409,6 +10664,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { @@ -10429,6 +10685,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { @@ -10456,6 +10713,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -10469,12 +10727,14 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, "license": "ISC" }, "node_modules/json-to-ast": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz", "integrity": "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==", + "dev": true, "dependencies": { "code-error-fragment": "0.0.230", "grapheme-splitter": "^1.0.4" @@ -10516,6 +10776,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -10528,6 +10789,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.1.0.tgz", "integrity": "sha512-gHfV1IYqH8uJHYVTs8BJX1XKy2/rR93+f8QQi0xhx95aCiXn1ettYAd5T+7FU6wfqyDoX/wy0pm/fL3jOKJ9Lg==", + "dev": true, "dependencies": { "@jsep-plugin/assignment": "^1.2.1", "@jsep-plugin/regex": "^1.0.3", @@ -10596,6 +10858,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, "license": "MIT", "dependencies": { "assert-plus": "1.0.0", @@ -10761,6 +11024,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, "dependencies": { "json-buffer": "3.0.1" } @@ -10778,6 +11042,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dev": true, "license": "MIT", "dependencies": { "invert-kv": "^3.0.0" @@ -11013,6 +11278,7 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, "license": "MIT" }, "node_modules/lodash-es": { @@ -11202,6 +11468,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -11234,6 +11501,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11264,10 +11532,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "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, + "license": "ISC" + }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, "license": "MIT", "dependencies": { "p-defer": "^1.0.0" @@ -11324,6 +11600,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "dev": true, "license": "MIT", "dependencies": { "map-age-cleaner": "^0.1.3", @@ -11356,6 +11633,7 @@ "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, "license": "MIT" }, "node_modules/merge2": { @@ -11408,6 +11686,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -11417,6 +11696,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -11429,6 +11709,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -11438,6 +11719,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -11459,6 +11741,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11468,6 +11751,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -11476,6 +11760,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -11489,7 +11774,8 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true }, "node_modules/mocha": { "version": "10.8.2", @@ -11688,6 +11974,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/mute-stream": { @@ -11700,6 +11987,7 @@ "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, "optional": true }, "node_modules/nanoid": { @@ -11813,6 +12101,7 @@ }, "node_modules/node-fetch": { "version": "2.6.9", + "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -11831,6 +12120,7 @@ }, "node_modules/node-gyp-build": { "version": "4.6.0", + "dev": true, "license": "MIT", "optional": true, "peer": true, @@ -11857,6 +12147,7 @@ "version": "0.0.9", "resolved": "https://registry.npmjs.org/node-yaml-parser/-/node-yaml-parser-0.0.9.tgz", "integrity": "sha512-bFFmAdUs9sdD+TwF/A91b4ozU2KJSDuK7HiBV0QDhdG7Cunu/4PakBLn3wWWAJurAJd7GqAeEwYhu32bTHOvQg==", + "dev": true, "engines": { "node": ">8.9.3" } @@ -11887,6 +12178,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -11985,6 +12277,7 @@ "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, "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -12009,6 +12302,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": "*" @@ -12018,6 +12312,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.1.2.tgz", "integrity": "sha512-KQZkNU+xn02lWrFu5Vjqg9E81yPtDSxUZorRHlLWVoojD+H/0GFbH59kcnz5Thdjj7c4/mYMBPj/mhvGe/kKXA==", + "dev": true, "optional": true, "funding": { "url": "https://github.com/sponsors/panva" @@ -12154,6 +12449,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -12186,6 +12482,7 @@ "version": "6.1.3", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.1.3.tgz", "integrity": "sha512-74sc0bR4ptfwCwMheLPaJHTQnds+97Yu6O8eQgoO3MRcd53xkfKyl3gNAsRsYSYoO+AVG3eCgnRMjRkZ6n2RYw==", + "dev": true, "optional": true, "dependencies": { "jose": "^5.9.6", @@ -12335,6 +12632,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "dev": true, "license": "MIT", "dependencies": { "execa": "^4.0.0", @@ -12352,6 +12650,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", @@ -12375,6 +12674,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "license": "MIT", "dependencies": { "pump": "^3.0.0" @@ -12390,6 +12690,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">=8.12.0" @@ -12399,6 +12700,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -12409,6 +12711,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12418,6 +12721,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -12436,6 +12740,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12476,7 +12781,8 @@ "node_modules/package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true }, "node_modules/pako": { "version": "1.0.11", @@ -12534,6 +12840,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "dev": true, "license": "MIT", "dependencies": { "protocols": "^2.0.0" @@ -12561,6 +12868,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "dev": true, "license": "MIT", "dependencies": { "parse-path": "^7.0.0" @@ -12635,6 +12943,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -12719,6 +13028,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, "license": "MIT" }, "node_modules/picocolors": { @@ -12797,6 +13107,7 @@ "version": "1.0.32", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, "dependencies": { "async": "^2.6.4", "debug": "^3.2.7", @@ -12810,6 +13121,7 @@ "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, "dependencies": { "lodash": "^4.17.14" } @@ -12818,6 +13130,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -12826,6 +13139,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "dependencies": { "minimist": "^1.2.6" }, @@ -12991,6 +13305,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, "license": "MIT" }, "node_modules/prop-types": { @@ -13016,6 +13331,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", + "dev": true, "license": "MIT" }, "node_modules/proxy-addr": { @@ -13048,6 +13364,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -13058,6 +13375,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -13118,6 +13436,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -13202,6 +13521,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -13227,6 +13547,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -13372,6 +13693,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -13387,6 +13709,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "node_modules/readdirp": { @@ -13417,6 +13740,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { @@ -13468,6 +13792,7 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", @@ -13499,6 +13824,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -13513,6 +13839,7 @@ "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.6" @@ -13522,6 +13849,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, "license": "MIT", "bin": { "uuid": "bin/uuid" @@ -13573,6 +13901,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, "license": "MIT" }, "node_modules/resolve-from": { @@ -13598,6 +13927,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" @@ -13634,6 +13964,7 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==", + "dev": true, "license": "MIT" }, "node_modules/rimraf": { @@ -13718,6 +14049,7 @@ "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -13751,6 +14083,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, "funding": [ { "type": "github", @@ -13788,6 +14121,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, "license": "MIT" }, "node_modules/sanitize-filename": { @@ -13875,6 +14209,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -13917,6 +14252,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -14059,6 +14395,7 @@ "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, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -14071,6 +14408,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -14184,6 +14522,7 @@ "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, "license": "ISC" }, "node_modules/simple-concat": { @@ -14390,7 +14729,8 @@ "node_modules/split-ca": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", - "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==" + "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", + "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", @@ -14403,6 +14743,7 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.15.0.tgz", "integrity": "sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==", + "dev": true, "hasInstallScript": true, "dependencies": { "asn1": "^0.2.6", @@ -14420,6 +14761,7 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, "license": "MIT", "dependencies": { "asn1": "~0.2.3", @@ -14445,6 +14787,7 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.7.1" @@ -14457,6 +14800,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" @@ -14549,6 +14893,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, "license": "Unlicense", "engines": { "node": ">= 0.10.0" @@ -14568,6 +14913,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -14577,12 +14923,14 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -14598,6 +14946,7 @@ "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", @@ -14676,6 +15025,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -14689,6 +15039,7 @@ "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" }, @@ -14719,6 +15070,7 @@ "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, "license": "MIT", "engines": { "node": ">=6" @@ -14747,7 +15099,8 @@ "node_modules/style-mod": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", - "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", + "dev": true }, "node_modules/stylis": { "version": "4.1.3", @@ -14846,6 +15199,7 @@ "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, "license": "MIT", "dependencies": { "chownr": "^1.0.1", @@ -14858,6 +15212,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -14870,6 +15225,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, "license": "MIT", "dependencies": { "bl": "^1.0.0", @@ -14888,6 +15244,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/targz/-/targz-1.0.1.tgz", "integrity": "sha512-6q4tP9U55mZnRuMTBqnqc3nwYQY3kv+QthCFZuMk+Tn1qYUnMPmL/JZ/mzgXINzFpSqfU+242IFmFU9VPvqaQw==", + "dev": true, "license": "MIT", "dependencies": { "tar-fs": "^1.8.1" @@ -15110,6 +15467,7 @@ "version": "6.1.47", "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.47.tgz", "integrity": "sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==", + "dev": true, "license": "MIT", "dependencies": { "tldts-core": "^6.1.47" @@ -15122,12 +15480,14 @@ "version": "6.1.47", "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.47.tgz", "integrity": "sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==", + "dev": true, "license": "MIT" }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, "engines": { "node": ">=14.14" } @@ -15136,6 +15496,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true, "license": "MIT" }, "node_modules/to-fast-properties": { @@ -15180,6 +15541,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "tldts": "^6.1.32" @@ -15192,12 +15554,14 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, "license": "MIT" }, "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, "license": "MIT/X11" }, "node_modules/truncate-utf8-bytes": { @@ -15222,6 +15586,60 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", @@ -15249,7 +15667,8 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true }, "node_modules/tunnel": { "version": "0.0.6", @@ -15264,6 +15683,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -15276,6 +15696,7 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, "license": "Unlicense" }, "node_modules/type-check": { @@ -15305,6 +15726,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" @@ -15446,6 +15868,7 @@ "version": "1.0.39", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -15521,7 +15944,8 @@ "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==" + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/unfetch": { "version": "4.2.0", @@ -15546,6 +15970,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -15564,6 +15989,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/unzip-stream/-/unzip-stream-0.3.4.tgz", "integrity": "sha512-PyofABPVv+d7fL7GOpusx7eRT9YETY2X04PhwbSipdj6bMxVCFJrr+nm0Mxqbf9hUiTin/UsnuFWBXlDZFy0Cw==", + "dev": true, "dependencies": { "binary": "^0.3.0", "mkdirp": "^0.5.1" @@ -15573,6 +15999,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -15629,6 +16056,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -15662,6 +16090,7 @@ }, "node_modules/utf-8-validate": { "version": "5.0.10", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -15684,6 +16113,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, "license": "MIT" }, "node_modules/utils-merge": { @@ -15706,6 +16136,13 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -15769,6 +16206,7 @@ "version": "13.12.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "dev": true, "engines": { "node": ">= 0.10" } @@ -15787,6 +16225,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, "engines": [ "node >=0.6.0" ], @@ -16119,6 +16558,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/vscode-kubernetes-tools-api/-/vscode-kubernetes-tools-api-1.3.0.tgz", "integrity": "sha512-5+4OdwrRinoTsE8i6s8pPY+BbGh5U7DNAA/3pn5wlOhvQpivaBMdi89bRKfdAffPjt/bvHodje4BFm5GSNjFxQ==", + "dev": true, "license": "MIT", "engines": { "vscode": "^1.31.0" @@ -16153,7 +16593,8 @@ "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "dev": true }, "node_modules/watchpack": { "version": "2.4.2", @@ -16183,6 +16624,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/webpack": { @@ -16307,6 +16749,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -16386,6 +16829,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -16403,6 +16847,7 @@ "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", @@ -16419,6 +16864,7 @@ "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" }, @@ -16433,6 +16879,7 @@ "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" }, @@ -16443,12 +16890,14 @@ "node_modules/wrap-ansi-cjs/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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, "engines": { "node": ">=12" }, @@ -16460,6 +16909,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -16470,12 +16920,14 @@ "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -16492,6 +16944,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -16512,6 +16965,7 @@ "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, "engines": { "node": ">=10.0.0" }, @@ -16561,6 +17015,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4" @@ -16569,7 +17024,8 @@ "node_modules/xterm": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", - "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==" + "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==", + "dev": true }, "node_modules/xterm-addon-fit": { "version": "0.8.0", @@ -16584,6 +17040,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/xterm-addon-serialize/-/xterm-addon-serialize-0.11.0.tgz", "integrity": "sha512-2CNDnmLdLkNWfsxNFkGsI5FE9W/BbsMzeOrbu59yNqH9L6k1gmL+Ab6VXxEp2NQUJSzaiqi6t0nFR5k5EDkVIg==", + "dev": true, "peerDependencies": { "xterm": "^5.0.0" } @@ -16609,7 +17066,8 @@ "node_modules/xterm-headless": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/xterm-headless/-/xterm-headless-5.3.0.tgz", - "integrity": "sha512-HjKkEgvjlyXfZvI0LdQChOqGL5nDiXge6X2IvoQbOn+oavAKUCX9hKHtDxmWVwxgNCCvXDnfQCYL+3wyHQ9PXA==" + "integrity": "sha512-HjKkEgvjlyXfZvI0LdQChOqGL5nDiXge6X2IvoQbOn+oavAKUCX9hKHtDxmWVwxgNCCvXDnfQCYL+3wyHQ9PXA==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", @@ -16727,6 +17185,16 @@ "buffer-crc32": "~0.2.3" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 153efd6cd..4ae57a05b 100644 --- a/package.json +++ b/package.json @@ -47,23 +47,26 @@ "icon": "images/openshift_extension.png", "main": "./out/src/extension", "scripts": { - "verify": "node ./out/build/verify-tools.js", - "vscode:prepublish": "npm run build", - "compile": "run-p compile:*", - "compile:ext": "tsc -b ./", - "compile:checkWebviews": "tsc -p ./src/webview -noEmit", - "compile:webviews": "node ./build/esbuild.mjs", + "verify": "ts-node ./build/verify-tools.ts", + "vscode:prepublish": "npm install && npm run clean && npm run lint && npm run compile-production && npm run bundle-tools && npm prune --omit=dev", + "compile": "npm run compile:check && npm run compile:build", + "compile-production": "npm run compile:check-production && npm run compile:build-production", + "compile:check": "tsc -b . && tsc -p ./src/webview -noEmit", + "compile:check-production": "tsc -b . -noEmit && tsc -p ./src/webview -noEmit", + "compile:build": "node ./build/esbuild.mjs", + "compile:build-production": "node ./build/esbuild.mjs --production", "watch": "node ./build/esbuild-watch.mjs", - "clean": "shx rm -rf out/build out/src out/test out/tools out/test-resources out/*Viewer out/**.tsbuildinfo", + "clean": "shx rm -rf out/build out/src out/webview out/test out/tools out/test-resources out/**.tsbuildinfo", "lint": "eslint . --ext .ts --ext .tsx --quiet", "lint-fix": "eslint . --ext .ts --ext .tsx --fix", "lint-nic": "eslint . --ext .ts --ext .tsx --no-inline-config", "check-cycles": "dpdm --no-tree --no-warning --exit-code circular:1 ./src/extension.ts", - "bundle-tools": "node ./out/build/bundle-tools.js --platform", + "bundle-tools": "ts-node ./build/bundle-tools.ts --platform", "todo": "leasot **/*.ts --ignore node_modules -x", - "test": "npm run vscode:prepublish && node ./out/build/install-vscode.js && node ./out/build/run-tests.js unit", - "test-integration": "npm run vscode:prepublish && node ./out/build/run-tests.js integration", - "test-integration:coverage": "npm run vscode:prepublish && npm run test:instrument && node ./out/build/run-tests.js integration", + "test:prepare": "npm install && npm run build", + "test": "npm run test:prepare && node ./out/build/install-vscode.js && node ./out/build/run-tests.js unit", + "test-integration": "npm run test:prepare && node ./out/build/run-tests.js integration", + "test-integration:coverage": "npm run test:prepare && npm run test:instrument && node ./out/build/run-tests.js integration", "test:instrument": "shx rm -rf out/src-orig && shx mv out/src out/src-orig && istanbul instrument --complete-copy --embed-source --output out/src out/src-orig", "test:coverage": "npm run build && npm run test:instrument && node ./out/build/install-vscode.js && node ./out/build/run-tests.js unit", "build": "npm run clean && npm run lint && npm run compile && npm run bundle-tools", @@ -71,45 +74,18 @@ "public-ui-test": "extest setup-and-run out/test/ui/public-ui-test.js -o test/ui/settings.json -m test/ui/.mocharc.js -e ./test-resources/extensions -c max -i" }, "dependencies": { - "@codemirror/lang-yaml": "^6.1.1", - "@kubernetes/client-node": "^0.22.2", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", - "@uiw/codemirror-theme-github": "^4.23.6", - "@uiw/react-codemirror": "^4.23.6", - "clsx": "^2.1.1", - "codemirror": "^6.0.1", - "dockerode": "^4.0.2", - "fs-extra": "^11.2.0", - "git-up": "^7.0.0", - "got": "^11.8.6", - "hasha": "^5.2.2", - "js-yaml": "^4.1.0", - "json-schema": "^0.4.0", - "json-to-ast": "^2.1.0", - "lodash": "^4.17.21", - "mkdirp": "^3.0.1", - "node-yaml-parser": "^0.0.9", - "portfinder": "^1.0.32", - "rxjs": "^7.8.1", - "semver": "^7.6.3", - "shelljs": "^0.8.5", - "stacktrace-parser": "^0.1.10", - "targz": "^1.0.1", - "tmp": "^0.2.3", - "unzip-stream": "^0.3.4", - "validator": "^13.12.0", - "vscode-kubernetes-tools-api": "^1.3.0", - "xterm": "^5.3.0", - "xterm-addon-serialize": "^0.11.0", - "xterm-headless": "^5.3.0" + "shelljs": "^0.8.5" }, "devDependencies": { + "@codemirror/lang-yaml": "^6.1.1", "@devfile/api": "^2.2.2-1716821574", + "@kubernetes/client-node": "^0.22.2", "@mui/icons-material": "^6.1.7", "@mui/lab": "^6.0.0-beta.15", - "@mui/material": "^6.1.0", + "@mui/material": "^6.1.7", "@mui/styles": "^6.1.7", "@mui/x-tree-view": "^7.22.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", "@rjsf/core": "^5.22.4", "@rjsf/mui": "^5.22.4", "@rjsf/utils": "^5.22.4", @@ -139,15 +115,21 @@ "@types/vscode": "1.82.0", "@typescript-eslint/eslint-plugin": "^8.14.0", "@typescript-eslint/parser": "^8.14.0", + "@uiw/codemirror-theme-github": "^4.23.6", "@uiw/codemirror-theme-vscode": "^4.23.6", + "@uiw/react-codemirror": "^4.23.6", "@vscode/test-electron": "^2.4.1", "bootstrap": "^5.3.3", "chai": "^4.5.0", "chokidar": "^4.0.1", "clipboardy": "^2.3.0", + "clsx": "^2.1.1", "codecov": "^3.8.3", + "codemirror": "^6.0.1", + "dockerode": "^4.0.2", "dpdm": "^3.14.0", "esbuild": "^0.19.12", + "esbuild-node-externals": "^1.15.0", "esbuild-plugin-svgr": "^2.1.0", "esbuild-sass-plugin": "^2.16.1", "eslint": "^8.57.1", @@ -160,12 +142,23 @@ "eslint-plugin-prettier": "^5.2.1", "express": "^5.0.1", "file-loader": "^6.2.0", + "fs-extra": "^11.2.0", + "git-up": "^7.0.0", "glob": "^11.0.0", + "got": "^11.8.6", + "hasha": "^5.2.2", "istanbul": "^0.4.5", + "js-yaml": "^4.1.0", + "json-schema": "^0.4.0", + "json-to-ast": "^2.1.0", "leasot": "^14.4.0", + "lodash": "^4.17.21", + "mkdirp": "^3.0.1", "mocha": "^10.8.2", "mocha-jenkins-reporter": "^0.4.7", + "node-yaml-parser": "^0.0.9", "npm-run-all": "^4.1.5", + "portfinder": "^1.0.32", "prettier": "^3.3.3", "pretty-bytes": "^6.1.1", "proxyquire": "^2.1.3", @@ -176,18 +169,31 @@ "react-phone-input-2": "^2.14.0", "react-scroll-to-top": "^3.0.0", "remap-istanbul": "^0.13.0", + "rxjs": "^7.8.1", + "semver": "^7.6.3", "showdown": "^2.1.0", "shx": "^0.3.3", "sinon": "^19.0.2", "sinon-chai": "^3.7.0", "source-map-support": "^0.5.21", + "stacktrace-parser": "^0.1.10", "survey-core": "^1.12.10", "survey-react-ui": "^1.12.10", + "targz": "^1.0.1", + "tmp": "^0.2.3", + "ts-node": "^10.9.2", "typescript": "^5.6.3", + "unzip-stream": "^0.3.4", + "validator": "^13.12.0", "vscode-extension-tester": "^8.8.1", + "vscode-kubernetes-tools-api": "^1.3.0", + "xterm": "^5.3.0", "xterm-addon-fit": "^0.8.0", + "xterm-addon-serialize": "^0.11.0", "xterm-addon-web-links": "^0.9.0", - "xterm-addon-webgl": "^0.16.0" + "xterm-addon-webgl": "^0.16.0", + "xterm-headless": "^5.3.0" + }, "overrides": { "tough-cookie": "^5.0.0", @@ -2297,4 +2303,4 @@ "publisherId": "eed56242-9699-4317-8bc7-e9f4b9bdd3ff", "isPreReleaseVersion": false } -} +} \ No newline at end of file diff --git a/src/cli.ts b/src/cli.ts index 3117c8f24..edc204165 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -5,7 +5,7 @@ import { VSCodeSettings } from '@redhat-developer/vscode-redhat-telemetry/lib/common/vscode/settings'; import * as cp from 'child_process'; -import * as hasha from 'hasha'; +import hasha from 'hasha'; import * as vscode from 'vscode'; import { CommandText } from './base/command'; import { ToolsConfig } from './tools'; diff --git a/src/componentsView.ts b/src/componentsView.ts index d1a4603cf..81cea1bed 100644 --- a/src/componentsView.ts +++ b/src/componentsView.ts @@ -3,14 +3,14 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as path from 'path'; import * as vsc from 'vscode'; +import { ThemeIcon } from 'vscode'; import { BaseTreeDataProvider } from './base/baseTreeDataProvider'; -import { ComponentWorkspaceFolder, OdoWorkspace } from './odo/workspace'; import { Command, CommandProvider, ComponentDescription } from './odo/componentTypeDescription'; +import { ComponentWorkspaceFolder, OdoWorkspace } from './odo/workspace'; import { Component } from './openshift/component'; +import { imagePath } from './util/utils'; import { vsCommand } from './vscommand'; -import { ThemeIcon } from 'vscode'; export class ComponentInfo implements ComponentWorkspaceFolder { contextPath: string; @@ -108,7 +108,7 @@ class ComponentInfoRoot extends ComponentInfo { workspaceFolder: this, tooltip, contextValue: Component.generateContextValue(this), - iconPath: vsc.Uri.file(path.join(__dirname, '../../images/component', 'workspace.png')), + iconPath: vsc.Uri.file(imagePath('component/workspace.png')), collapsibleState: vsc.TreeItemCollapsibleState.Collapsed }; } diff --git a/src/deployment.ts b/src/deployment.ts index b3799522b..d25a51ca3 100644 --- a/src/deployment.ts +++ b/src/deployment.ts @@ -11,12 +11,13 @@ import { CommandText } from './base/command'; import { DeploymentPodObject, OpenShiftExplorer } from './explorer'; import { Oc } from './oc/ocWrapper'; import { validateRFC1123DNSLabel } from './openshift/nameValidator'; +import { DisposableInstance } from './util/disposableInstance'; import { inputValue, quickBtn } from './util/inputValue'; +import { Progress } from './util/progress'; import { vsCommand } from './vscommand'; import { OpenShiftTerminalManager } from './webview/openshift-terminal/openShiftTerminal'; -import { Progress } from './util/progress'; -export class Deployment { +export class Deployment extends DisposableInstance { @vsCommand('openshift.deployment.create.fromImageUrl') static async createFromImageUrl(context: TreeItem): Promise { diff --git a/src/downloadUtil/archive.ts b/src/downloadUtil/archive.ts index 2de62bfbe..1a36956c8 100644 --- a/src/downloadUtil/archive.ts +++ b/src/downloadUtil/archive.ts @@ -6,10 +6,10 @@ import * as fs from 'fs'; import * as path from 'path'; import type { Headers } from 'tar-fs'; -import * as targz from 'targz'; import * as unzipm from 'unzip-stream'; import { promisify } from 'util'; import * as zlib from 'zlib'; +import * as targz from '../util/utils'; export class Archive { static extract( diff --git a/src/explorer.ts b/src/explorer.ts index 70028781e..bc0570ca6 100644 --- a/src/explorer.ts +++ b/src/explorer.ts @@ -35,6 +35,7 @@ import { KubeConfigUtils, getKubeConfigFiles, getNamespaceKind, isOpenShiftClust import { LoginUtil } from './util/loginUtil'; import { Platform } from './util/platform'; import { Progress } from './util/progress'; +import { imagePath } from './util/utils'; import { FileContentChangeNotifier, WatchUtil } from './util/watch'; import { vsCommand } from './vscommand'; import { CustomResourceDefinitionStub, K8sResourceKind } from './webview/common/createServiceTypes'; @@ -168,7 +169,6 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos // eslint-disable-next-line class-methods-use-this async getTreeItem(element: ExplorerItem): Promise { - if ('command' in element || ('label' in element && 'iconPath' in element)) { return element; } @@ -191,7 +191,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos contextValue: 'openshift.k8sContext', label: this.kubeConfig.getCluster(element.cluster)?.server, collapsibleState: TreeItemCollapsibleState.Collapsed, - iconPath: path.resolve(__dirname, '../../images/context/cluster-node.png') + iconPath: imagePath('context/cluster-node.png') }; } @@ -207,7 +207,6 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos // It's a Helm installation if ('chart' in element) { - if (element.chart === 'noChart') { return { label: 'No charts were installed' @@ -218,8 +217,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos label: element.name, collapsibleState: TreeItemCollapsibleState.None, description: element.status, - iconPath: element.status === 'failed' ? path.resolve(__dirname, '../../images/context/helmFailed.svg') : - path.resolve(__dirname, '../../images/context/helmDeployed.svg'), + iconPath: element.status === 'failed' ? imagePath('context/helmFailed.svg') : imagePath('context/helmDeployed.svg'), tooltip: `Chart version: ${element.chart}\nApp version: ${element.app_version}\n`, command: { title: 'Load', @@ -238,7 +236,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos contextValue: namespace, label: element.metadata.name, collapsibleState: TreeItemCollapsibleState.Collapsed, - iconPath: path.resolve(__dirname, '../../images/context/project-node.png') + iconPath: imagePath('context/project-node.png') } }); } else if (element.kind === 'helmContexts') { @@ -259,8 +257,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos label: contextElement.metadata.name, description: `${contextElement.kind.substring(0, 1).toLocaleUpperCase()}${contextElement.kind.substring(1)}`, collapsibleState: TreeItemCollapsibleState.None, - iconPath: contextElement.status.phase === 'Running' ? path.resolve(__dirname, '../../images/context/runningPod.svg') : - path.resolve(__dirname, '../../images/context/notReadyPod.svg'), + iconPath: contextElement.status.phase === 'Running' ? imagePath('context/runningPod.svg') : imagePath('context/notReadyPod.svg'), tooltip: `${contextElement.status.phase}\n${contextElement.status.podIP ? contextElement.status.podIP : ''}`, command: { title: 'Load', @@ -405,8 +402,7 @@ export class OpenShiftExplorer implements TreeDataProvider, Dispos const iconSuffix = !shouldHaveReplicas ? '' : podErrors.inCrashLoopBackOff ? '-red' : this.getDeploymentIconSuffix(pods); const iconPath = element.kind === 'Deployment' || element.kind === 'DeploymentConfig' ? - path.resolve(__dirname, `../../images/context/component-node${iconSuffix}.png`) - : undefined; + imagePath(`context/component-node${iconSuffix}.png`) : undefined; const routeURL = await Oc.Instance.getRouteURL(element.metadata.name); return { diff --git a/src/extension.ts b/src/extension.ts index d68e8f0b2..c78b01cb3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -15,12 +15,28 @@ import { extension as k8sExtension } from 'vscode-kubernetes-tools-api'; import { REDHAT_CLOUD_PROVIDER } from './cloudProvider/redhatCloudProvider'; import { ComponentsTreeDataProvider } from './componentsView'; import { DebugSessionsView } from './debug'; +import { Deployment } from './deployment'; import { OpenShiftExplorer } from './explorer'; +import { Feedback } from './feedback'; +import { ManageRepository as HelmManageRepository } from './helm/manageRepository'; import { verifyBinariesInRemoteContainer } from './installToolsInRemote'; +import { Build as K8sBuild } from './k8s/build'; import { extendClusterExplorer } from './k8s/clusterExplorer'; +import { Console as K8sConsole } from './k8s/console'; +import { DeploymentConfig as K8sDeploymentConfig } from './k8s/deploymentConfig'; +import { Route as K8sRoute } from './k8s/route'; +import { KubernetesResourceLinkProvider } from './k8s/vfs/kuberesources.linkprovider'; +import { K8S_RESOURCE_SCHEME, K8S_RESOURCE_SCHEME_READONLY, KubernetesResourceVirtualFileSystemProvider } from './k8s/vfs/kuberesources.virtualfs'; +import { Oc } from './oc/ocWrapper'; +import { BuilderImageWrapper } from './odo/builderImage'; +import { OdoPreference } from './odo/odoPreference'; import { Cluster } from './openshift/cluster'; import { Component } from './openshift/component'; +import { Project as OpenshiftProject } from './openshift/project'; +import { Route as OpenshiftRoute } from './openshift/route'; +import { Service as OpenshiftService } from './openshift/service'; import { ComponentTypesView } from './registriesView'; +import { ManageRepository as ServerlessManageRepository } from './serverlessFunction/manageRepository'; import { ServerlessFunctionView } from './serverlessFunction/view'; import { startTelemetry } from './telemetry'; import { ToolsConfig } from './tools'; @@ -28,14 +44,15 @@ import { TokenStore } from './util/credentialManager'; import { getNamespaceKind, KubeConfigUtils, setKubeConfig } from './util/kubeUtils'; import { setupWorkspaceDevfileContext } from './util/workspace'; import { registerCommands } from './vscommand'; +import ClusterViewLoader from './webview/cluster/clusterViewLoader'; +import CreateDeploymentLoader from './webview/create-deployment/createDeploymentLoader'; +import RegistryViewLoader from './webview/devfile-registry/registryViewLoader'; +import HelmChartLoader, { HelmCommand } from './webview/helm-chart/helmChartLoader'; +import ManageRepositoryViewLoader from './webview/helm-manage-repository/manageRepositoryLoader'; import { OpenShiftTerminalManager } from './webview/openshift-terminal/openShiftTerminal'; import { WelcomePage } from './welcomePage'; import { registerYamlHandlers } from './yaml/yamlDocumentFeatures'; - -import { KubernetesResourceLinkProvider } from './k8s/vfs/kuberesources.linkprovider'; -import { K8S_RESOURCE_SCHEME, K8S_RESOURCE_SCHEME_READONLY, KubernetesResourceVirtualFileSystemProvider } from './k8s/vfs/kuberesources.virtualfs'; -import { Oc } from './oc/ocWrapper'; -import { OdoPreference } from './odo/odoPreference'; +import { YamlFileCommands } from './yamlFileCommands'; // eslint-disable-next-line @typescript-eslint/no-empty-function // this method is called when your extension is deactivated @@ -83,47 +100,70 @@ export async function activate(extensionContext: ExtensionContext): Promise { - const disposable = [ - ...(await registerCommands( - './k8s/route', - './openshift/project', - './openshift/cluster', - './openshift/service', - './openshift/route', - './k8s/console', - './yamlFileCommands', - './registriesView', - './componentsView', - './odo/builderImage', - './webview/devfile-registry/registryViewLoader', - './webview/helm-chart/helmChartLoader', - './webview/helm-manage-repository/manageRepositoryLoader', - './feedback', - './deployment' - )), - crcStatusItem, - activeNamespaceStatusBarItem, - activeContextStatusBarItem, - OpenShiftExplorer.getInstance(), - new DebugSessionsView().createTreeView('openshiftDebugView'), - ...Component.init(), - ComponentTypesView.instance.createTreeView('openshiftComponentTypesView'), - ServerlessFunctionView.getInstance(), - ComponentsTreeDataProvider.instance.createTreeView('openshiftComponentsView'), - setupWorkspaceDevfileContext(), - window.registerWebviewViewProvider('openShiftTerminalView', OpenShiftTerminalManager.getInstance(), { webviewOptions: { retainContextWhenHidden: true, } }), - ...registerYamlHandlers(), - // Temporarily loaded resource providers - workspace.registerFileSystemProvider(K8S_RESOURCE_SCHEME, resourceDocProvider, { /* TODO: case sensitive? */ }), - workspace.registerFileSystemProvider(K8S_RESOURCE_SCHEME_READONLY, resourceDocProvider, { isReadonly: true }), - - // Link from resources to referenced resources - languages.registerDocumentLinkProvider({ scheme: K8S_RESOURCE_SCHEME }, resourceLinkProvider), - ]; - disposable.forEach((value) => extensionContext.subscriptions.push(value)); - } - void pushSubscriptions(); + const disposable = [ + crcStatusItem, + activeNamespaceStatusBarItem, + activeContextStatusBarItem, + Cluster.getInstance(), + K8sBuild.getInstance(), + K8sDeploymentConfig.getInstance(), + K8sRoute.getInstance(), + K8sConsole.getInstance(), + OpenshiftProject.getInstance(), + OpenshiftService.getInstance(), + OpenshiftRoute.getInstance(), + OpenShiftExplorer.getInstance(), + YamlFileCommands.getInstance(), + BuilderImageWrapper.getInstance(), + ClusterViewLoader.getInstance(), + RegistryViewLoader.getInstance(), + HelmCommand.getInstance(), + HelmChartLoader.getInstance(), + ManageRepositoryViewLoader.getInstance(), + CreateDeploymentLoader.getInstance(), + HelmManageRepository.getInstance(), + ServerlessManageRepository.getInstance(), + new DebugSessionsView().createTreeView('openshiftDebugView'), + ...Component.init(), + ComponentTypesView.instance.createTreeView('openshiftComponentTypesView'), + ServerlessFunctionView.getInstance(), + ComponentsTreeDataProvider.instance.createTreeView('openshiftComponentsView'), + setupWorkspaceDevfileContext(), + window.registerWebviewViewProvider('openShiftTerminalView', OpenShiftTerminalManager.getInstance(), { webviewOptions: { retainContextWhenHidden: true, } }), + ...registerYamlHandlers(), + Feedback.getInstance(), + Deployment.getInstance(), + + // Temporarily loaded resource providers + workspace.registerFileSystemProvider(K8S_RESOURCE_SCHEME, resourceDocProvider, { /* TODO: case sensitive? */ }), + workspace.registerFileSystemProvider(K8S_RESOURCE_SCHEME_READONLY, resourceDocProvider, { isReadonly: true }), + + // Link from resources to referenced resources + languages.registerDocumentLinkProvider({ scheme: K8S_RESOURCE_SCHEME }, resourceLinkProvider), + ]; + + disposable.push( + ...(await registerCommands( + // These modules are needed to be loaded when running tests + // This has no effect in run-time + './k8s/route', + './openshift/project', + './openshift/cluster', + './openshift/service', + './openshift/route', + './k8s/console', + './yamlFileCommands', + './registriesView', + './componentsView', + './webview/create-deployment/createDeploymentLoader', + './webview/devfile-registry/registryViewLoader', + './webview/helm-chart/helmChartLoader', + './webview/helm-manage-repository/manageRepositoryLoader', + './webview/create-deployment/createDeploymentLoader', + './feedback', + './deployment' + ))); + disposable.forEach((value) => extensionContext.subscriptions.push(value)); // activate "Sign in with Red Hat ..." void authentication.getSession('redhat-account-auth', ['openid'], { silent: false }); diff --git a/src/feedback.ts b/src/feedback.ts index 3fdbd1167..0aac13427 100644 --- a/src/feedback.ts +++ b/src/feedback.ts @@ -2,10 +2,11 @@ * Copyright (c) Red Hat, Inc. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import { DisposableInstance } from './util/disposableInstance'; import { vsCommand } from './vscommand'; import FeedbackLoader from './webview/feedback/feedbackLoader'; -export class Feedback { +export class Feedback extends DisposableInstance { @vsCommand('openshift.show.feedback') static async openFeedbackWindow(): Promise { diff --git a/src/helm/helm.ts b/src/helm/helm.ts index b3fdb53fb..fd01fc17f 100644 --- a/src/helm/helm.ts +++ b/src/helm/helm.ts @@ -2,8 +2,10 @@ * Copyright (c) Red Hat, Inc. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import { window } from 'vscode'; import { CommandText } from '../base/command'; import { CliChannel } from '../cli'; +import sendTelemetry from '../telemetry'; import { CliExitData } from '../util/childProcessUtil'; import { HelmRepo } from './helmChartType'; import * as HelmCommands from './helmCommands'; @@ -148,3 +150,21 @@ export async function getYAMLValues(repoName: string, chartName: string) { HelmCommands.getYAMLValues(repoName, chartName), undefined, false ); } + +export async function list(): Promise { + await sendTelemetry('openshift.helm.manageRepo.list'); + const result = await getHelmRepos(); + if (result.stderr || result.error) { + const error = result.stderr || result.error?.message; + await sendTelemetry('openshift.helm.manageRepo.list.error', { + error + }); + void window.showErrorMessage(error); + return []; + } + const helmRepos = JSON.parse(result.stdout) as HelmRepo[]; + await sendTelemetry('openshift.helm.manageRepo.list.success', { + helmRepos + }); + return helmRepos; +} diff --git a/src/helm/manageRepository.ts b/src/helm/manageRepository.ts index a061adbd1..1cc0dedff 100644 --- a/src/helm/manageRepository.ts +++ b/src/helm/manageRepository.ts @@ -9,6 +9,7 @@ import * as Helm from '../../src/helm/helm'; import { ascRepoName } from '../../src/helm/helm'; import { OpenShiftExplorer } from '../explorer'; import sendTelemetry from '../telemetry'; +import { DisposableInstance } from '../util/disposableInstance'; import { inputValue } from '../util/inputValue'; import { Progress } from '../util/progress'; import { vsCommand } from '../vscommand'; @@ -16,15 +17,10 @@ import HelmChartLoader from '../webview/helm-chart/helmChartLoader'; import ManageRepositoryViewLoader from '../webview/helm-manage-repository/manageRepositoryLoader'; import { HelmRepo } from './helmChartType'; -export class ManageRepository { +export class ManageRepository extends DisposableInstance { - private static instance: ManageRepository; - - static getInstance(): ManageRepository { - if (!ManageRepository.instance) { - ManageRepository.instance = new ManageRepository(); - } - return ManageRepository.instance; + private static getMRInstance(): ManageRepository { + return ManageRepository.getInstance() as ManageRepository; } /** @@ -35,9 +31,9 @@ export class ManageRepository { @vsCommand('openshift.helm.sync') public async sync(repo: HelmRepo): Promise { await Progress.execFunctionWithProgress(`pulling ${repo.name} repository with latest`, async () => { - const flag = await ManageRepository.getInstance().syncRepo(repo.name); + const flag = await ManageRepository.getMRInstance().syncRepo(repo.name); if (flag) { - await ManageRepository.getInstance().refresh(); + await ManageRepository.getMRInstance().refresh(); } }); } @@ -61,7 +57,7 @@ export class ManageRepository { let step: listOfStep = listOfStep.enterRepositoryName; let repoName: string = repo?.name; let repoURL: string = repo?.url; - const repositories = (await ManageRepository.getInstance().list()).sort(ascRepoName); + const repositories = (await Helm.list()).sort(ascRepoName); if (!isWebview) { while (step !== undefined) { switch (step) { @@ -127,14 +123,14 @@ export class ManageRepository { if (isAdd) { await Progress.execFunctionWithProgress(`Adding repository ${repoName}`, async () => { - flag = await ManageRepository.getInstance().addRepo(repoName, repoURL); + flag = await ManageRepository.getMRInstance().addRepo(repoName, repoURL); }); } else { - flag = await ManageRepository.getInstance().editRepo(repo, repoName, repoURL, true); + flag = await ManageRepository.getMRInstance().editRepo(repo, repoName, repoURL, true); } if (flag) { - await ManageRepository.getInstance().refresh(); + await ManageRepository.getMRInstance().refresh(); const message = isAdd ? 'added' : 'updated'; void vscode.window.showInformationMessage(`Helm Repository ${repoName} ${message} successfully`); } @@ -155,35 +151,17 @@ export class ManageRepository { 'No', ); if (yesNo === 'Yes') { - const flag = await ManageRepository.getInstance().deleteRepo(repo); + const flag = await ManageRepository.getMRInstance().deleteRepo(repo); if (flag) { - await ManageRepository.getInstance().refresh(); + await ManageRepository.getMRInstance().refresh(); void vscode.window.showInformationMessage(`Helm Repository ${repo.name} deleted successfully`); } } } - public async list(): Promise { - await sendTelemetry('openshift.helm.manageRepo.list'); - const result = await Helm.getHelmRepos(); - if (result.stderr || result.error) { - const error = result.stderr || result.error?.message; - await sendTelemetry('openshift.helm.manageRepo.list.error', { - error - }); - void vscode.window.showErrorMessage(error); - return []; - } - const helmRepos = JSON.parse(result.stdout) as HelmRepo[]; - await sendTelemetry('openshift.helm.manageRepo.list.success', { - helmRepos - }); - return helmRepos; - } - private async refresh() { OpenShiftExplorer.getInstance().refresh(); - const repositories = (await ManageRepository.getInstance().list()).sort(ascRepoName); + const repositories = (await Helm.list()).sort(ascRepoName); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action: 'getRepositoryList', repositories @@ -233,12 +211,12 @@ export class ManageRepository { }); // delete old repo - let result = await ManageRepository.getInstance().deleteRepo(oldRepo); + let result = await ManageRepository.getMRInstance().deleteRepo(oldRepo); if (result) { //add new repo - result = await ManageRepository.getInstance().addRepo(newName, newURL); + result = await ManageRepository.getMRInstance().addRepo(newName, newURL); if (!result) { - await ManageRepository.getInstance().addRepo(oldRepo.name, oldRepo.url); + await ManageRepository.getMRInstance().addRepo(oldRepo.name, oldRepo.url); return false; } await sendTelemetry('openshift.helm.manageRepo.edit.success', { diff --git a/src/k8s/build.ts b/src/k8s/build.ts index 9e3485263..b741f0d1c 100644 --- a/src/k8s/build.ts +++ b/src/k8s/build.ts @@ -7,12 +7,14 @@ import { QuickPickItem, window } from 'vscode'; import { ClusterExplorerV1 } from 'vscode-kubernetes-tools-api'; import { CommandOption, CommandText } from '../base/command'; import { CliChannel } from '../cli'; +import { DisposableInstance } from '../util/disposableInstance'; import { Progress } from '../util/progress'; import { VsCommandError, vsCommand } from '../vscommand'; import { OpenShiftTerminalManager } from '../webview/openshift-terminal/openShiftTerminal'; import * as common from './common'; -export class Build { +export class Build extends DisposableInstance { + public static command = { getAllBuilds(parent: ClusterExplorerV1.ClusterExplorerNode): CommandText { return new CommandText('oc', 'get build', [ diff --git a/src/k8s/clusterExplorer.ts b/src/k8s/clusterExplorer.ts index b0b96a2b8..66844b016 100644 --- a/src/k8s/clusterExplorer.ts +++ b/src/k8s/clusterExplorer.ts @@ -3,12 +3,12 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as path from 'path'; import * as vscode from 'vscode'; import * as k8s from 'vscode-kubernetes-tools-api'; import { CommandText } from '../base/command'; import { CliChannel } from '../cli'; import { isOpenShiftCluster } from '../util/kubeUtils'; +import { imagePath } from '../util/utils'; import { Build } from './build'; import { ClusterServiceVersion } from './csv'; import { DeploymentConfig } from './deploymentConfig'; @@ -31,7 +31,7 @@ async function customizeAsync(node: k8s.ClusterExplorerV1.ClusterExplorerResourc if ((node as any).nodeType === 'context') { lastNamespace = await initNamespaceName(node); if (await isOpenShiftCluster()) { - treeItem.iconPath = vscode.Uri.file(path.join(__dirname, '../../../images/context/cluster-node.png')); + treeItem.iconPath = vscode.Uri.file(imagePath('context/cluster-node.png')); } } if (node.nodeType === 'resource' && node.resourceKind.manifestKind === 'Project') { diff --git a/src/k8s/console.ts b/src/k8s/console.ts index fbc1ca4b9..f26a043bc 100644 --- a/src/k8s/console.ts +++ b/src/k8s/console.ts @@ -3,14 +3,15 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; +import { commands, Uri, window } from 'vscode'; import { CliChannel } from '../cli'; import { Oc } from '../oc/ocWrapper'; import { ClusterType } from '../oc/types'; +import { DisposableInstance } from '../util/disposableInstance'; import { KubeConfigUtils } from '../util/kubeUtils'; import { vsCommand } from '../vscommand'; -export class Console { +export class Console extends DisposableInstance { static cli = CliChannel.getInstance() static getCurrentProject(): string { const k8sConfig = new KubeConfigUtils(); @@ -21,7 +22,7 @@ export class Console { @vsCommand('clusters.openshift.build.openConsole') static async openBuildConfig(context: { name: string}): Promise { if (!context) { - void vscode.window.showErrorMessage('Cannot load the build config'); + void window.showErrorMessage('Cannot load the build config'); return; } const consoleInfo = await Oc.Instance.getConsoleInfo(); @@ -40,13 +41,13 @@ export class Console { default: throw new Error('Should be impossible, since the cluster must be either OpenShift or non-OpenShift'); } - await vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url)); + await commands.executeCommand('vscode.open', Uri.parse(url)); } @vsCommand('clusters.openshift.deployment.openConsole') static async openDeploymentConfig(context: { name: string}): Promise { if (!context) { - void vscode.window.showErrorMessage('Cannot load the deployment config'); + void window.showErrorMessage('Cannot load the deployment config'); return; } const project = Console.getCurrentProject(); @@ -64,13 +65,13 @@ export class Console { default: throw new Error('Should be impossible, since the cluster must be either OpenShift or non-OpenShift'); } - await vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url)); + await commands.executeCommand('vscode.open', Uri.parse(url)); } @vsCommand('clusters.openshift.imagestream.openConsole') static async openImageStream(context: { name: string}): Promise { if (!context) { - void vscode.window.showErrorMessage('Cannot load the image stream'); + void window.showErrorMessage('Cannot load the image stream'); return; } const project = Console.getCurrentProject(); @@ -88,13 +89,13 @@ export class Console { default: throw new Error('Should be impossible, since the cluster must be either OpenShift or non-OpenShift'); } - await vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url)); + await commands.executeCommand('vscode.open', Uri.parse(url)); } @vsCommand('clusters.openshift.project.openConsole') static async openProject(context: { name: string}): Promise { if (!context) { - void vscode.window.showErrorMessage('Cannot load the Project'); + void window.showErrorMessage('Cannot load the Project'); return; } const project = Console.getCurrentProject(); @@ -112,6 +113,6 @@ export class Console { default: throw new Error('Should be impossible, since the cluster must be either OpenShift or non-OpenShift'); } - await vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(url)); + await commands.executeCommand('vscode.open', Uri.parse(url)); } } diff --git a/src/k8s/deploymentConfig.ts b/src/k8s/deploymentConfig.ts index 01d169aa3..3e81b5690 100644 --- a/src/k8s/deploymentConfig.ts +++ b/src/k8s/deploymentConfig.ts @@ -7,12 +7,13 @@ import { QuickPickItem, window } from 'vscode'; import { ClusterExplorerV1 } from 'vscode-kubernetes-tools-api'; import { CommandOption, CommandText } from '../base/command'; import { CliChannel } from '../cli'; +import { DisposableInstance } from '../util/disposableInstance'; import { Progress } from '../util/progress'; import { VsCommandError, vsCommand } from '../vscommand'; import { OpenShiftTerminalManager } from '../webview/openshift-terminal/openShiftTerminal'; import * as common from './common'; -export class DeploymentConfig { +export class DeploymentConfig extends DisposableInstance { public static command = { getReplicationControllers(parent: ClusterExplorerV1.ClusterExplorerNode): CommandText { diff --git a/src/k8s/route.ts b/src/k8s/route.ts index 0bfc9fbd3..75475c8de 100644 --- a/src/k8s/route.ts +++ b/src/k8s/route.ts @@ -5,9 +5,10 @@ import { KubeConfig } from '@kubernetes/client-node'; import { commands, Uri } from 'vscode'; import { Oc } from '../oc/ocWrapper'; +import { DisposableInstance } from '../util/disposableInstance'; import { vsCommand, VsCommandError } from '../vscommand'; -export class Route { +export class Route extends DisposableInstance { public static async getUrl(namespace: string, name: string): Promise { const route = await Oc.Instance.getKubernetesObject('route', name, namespace); diff --git a/src/k8s/vfs/json-locator.ts b/src/k8s/vfs/json-locator.ts index 724437ab2..00ca7062a 100644 --- a/src/k8s/vfs/json-locator.ts +++ b/src/k8s/vfs/json-locator.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as parse from 'json-to-ast'; +import parse from 'json-to-ast'; import * as vscode from 'vscode'; import { MappingItem, Node, NodeProvider } from './locator-util'; diff --git a/src/odo/builderImage.ts b/src/odo/builderImage.ts index f1a333d90..cd87368f2 100644 --- a/src/odo/builderImage.ts +++ b/src/odo/builderImage.ts @@ -3,14 +3,13 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as semver from 'semver'; import * as _ from 'lodash'; +import * as semver from 'semver'; import { CommandText } from '../base/command'; import { K8sResourceCommon, K8sResourceKind, Service } from '../k8s/olm/types'; import { CliExitData } from '../util/childProcessUtil'; +import { DisposableInstance } from '../util/disposableInstance'; import { Odo } from './odoWrapper'; -import { vsCommand } from '../vscommand'; -import CreateDeploymentLoader from '../webview/create-deployment/createDeploymentLoader'; export interface BuilderImage { readonly name: string; @@ -57,26 +56,13 @@ export interface NormalizedBuilderImages { [builderImageName: string]: BuilderImage; } -export class BuilderImageWrapper { - - private static instance: BuilderImageWrapper; - - public static get Instance(): BuilderImageWrapper { - if (!BuilderImageWrapper.instance) { - BuilderImageWrapper.instance = new BuilderImageWrapper(); - } - return BuilderImageWrapper.instance; - } +export class BuilderImageWrapper extends DisposableInstance { private constructor() { + super() // no state } - @vsCommand('openshift.deployment.create.buildConfig') - static async createComponent(): Promise { - await CreateDeploymentLoader.loadView('Create build Config'); - } - public async getBuilder(): Promise { const cliData: CliExitData = await Odo.Instance.execute( new CommandText('oc', 'get imagestreams -o json -n openshift') diff --git a/src/openshift/component.ts b/src/openshift/component.ts index 589c4b24d..87aaad047 100644 --- a/src/openshift/component.ts +++ b/src/openshift/component.ts @@ -3,7 +3,6 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as fs from 'fs/promises'; import { platform } from 'os'; import * as path from 'path'; import { which } from 'shelljs'; @@ -16,6 +15,7 @@ import { ComponentWorkspaceFolder } from '../odo/workspace'; import sendTelemetry from '../telemetry'; import { ChildProcessUtil, CliExitData } from '../util/childProcessUtil'; import { Progress } from '../util/progress'; +import * as fs from '../util/utils'; import { vsCommand, VsCommandError } from '../vscommand'; import AddServiceBindingViewLoader, { ServiceBindingFormResponse } from '../webview/add-service-binding/addServiceBindingViewLoader'; import CreateComponentLoader from '../webview/create-component/createComponentLoader'; diff --git a/src/openshift/openshiftItem.ts b/src/openshift/openshiftItem.ts index 26595510d..ff76e5238 100644 --- a/src/openshift/openshiftItem.ts +++ b/src/openshift/openshiftItem.ts @@ -8,6 +8,7 @@ import { ExecutionContext } from '../cli'; import { Oc } from '../oc/ocWrapper'; import { Project } from '../oc/project'; import { ServerlessFunctionView } from '../serverlessFunction/view'; +import { DisposableInstance } from '../util/disposableInstance'; import { inputValue } from '../util/inputValue'; import { getNamespaceKind } from '../util/kubeUtils'; import * as NameValidator from './nameValidator'; @@ -24,7 +25,7 @@ export class QuickPickCommand implements QuickPickItem { } } -export default class OpenShiftItem { +export default class OpenShiftItem extends DisposableInstance { protected static readonly serverlessView: ServerlessFunctionView = ServerlessFunctionView.getInstance(); static async getName(message: string, offset?: string, defaultValue = ''): Promise { diff --git a/src/openshift/project.ts b/src/openshift/project.ts index cbfb355a5..b17a441fe 100644 --- a/src/openshift/project.ts +++ b/src/openshift/project.ts @@ -7,10 +7,10 @@ import { KubernetesObject } from '@kubernetes/client-node'; import { commands, window } from 'vscode'; import { OpenShiftExplorer } from '../explorer'; import { Oc } from '../oc/ocWrapper'; +import { KubeConfigUtils, getNamespaceKind } from '../util/kubeUtils'; import { Progress } from '../util/progress'; import { VsCommandError, vsCommand } from '../vscommand'; import OpenShiftItem from './openshiftItem'; -import { KubeConfigUtils, getNamespaceKind } from '../util/kubeUtils'; export class Project extends OpenShiftItem { @@ -134,5 +134,4 @@ export class Project extends OpenShiftItem { } return result; } - } diff --git a/src/openshift/route.ts b/src/openshift/route.ts index 7c6ad9c1f..a1aad192e 100644 --- a/src/openshift/route.ts +++ b/src/openshift/route.ts @@ -3,13 +3,14 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import { DisposableInstance } from '../util/disposableInstance'; import { vsCommand } from '../vscommand'; import CreateRouteViewLoader from '../webview/create-route/createRouteViewLoader'; /** * Wraps commands that are used for interacting with routes. */ -export class Route { +export class Route extends DisposableInstance { @vsCommand('openshift.route.create') static async createNewRoute() { await CreateRouteViewLoader.loadView(); diff --git a/src/openshift/service.ts b/src/openshift/service.ts index 0f930631a..3db9df451 100644 --- a/src/openshift/service.ts +++ b/src/openshift/service.ts @@ -3,13 +3,14 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import { DisposableInstance } from '../util/disposableInstance'; import { vsCommand } from '../vscommand'; import CreateServiceViewLoader from '../webview/create-service/createServiceViewLoader'; /** * Wraps commands that are used for interacting with services. */ -export class Service { +export class Service extends DisposableInstance { @vsCommand('openshift.service.create') static async createNewOperatorBackedService() { await CreateServiceViewLoader.loadView(); diff --git a/src/serverlessFunction/functions.ts b/src/serverlessFunction/functions.ts index 65c35b762..0ebbf00b3 100644 --- a/src/serverlessFunction/functions.ts +++ b/src/serverlessFunction/functions.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as Dockerode from 'dockerode'; +import Dockerode from 'dockerode'; import validator from 'validator'; import { Uri, commands, window } from 'vscode'; import { CliChannel, ExecutionContext } from '../cli'; diff --git a/src/serverlessFunction/manageRepository.ts b/src/serverlessFunction/manageRepository.ts index 5ef6d571d..39b5a0da0 100644 --- a/src/serverlessFunction/manageRepository.ts +++ b/src/serverlessFunction/manageRepository.ts @@ -6,18 +6,10 @@ import * as vscode from 'vscode'; import { Odo } from '../odo/odoWrapper'; import sendTelemetry from '../telemetry'; +import { DisposableInstance } from '../util/disposableInstance'; import { ServerlessCommand } from './commands'; -export class ManageRepository { - - private static instance: ManageRepository; - - static getInstance(): ManageRepository { - if (!ManageRepository.instance) { - ManageRepository.instance = new ManageRepository(); - } - return ManageRepository.instance; - } +export class ManageRepository extends DisposableInstance { public async deleteRepo(name: string): Promise { await sendTelemetry('openshift.managerepo.delete', { diff --git a/src/tools.ts b/src/tools.ts index 9e87e6b3f..430ffa366 100644 --- a/src/tools.ts +++ b/src/tools.ts @@ -11,7 +11,6 @@ import { which } from 'shelljs'; import * as vscode from 'vscode'; import * as configData from './tools.json'; import { ChildProcessUtil } from './util/childProcessUtil'; - import { Platform } from './util/platform'; export class ToolsConfig { @@ -38,9 +37,13 @@ export class ToolsConfig { } public static async detect(cmd: string): Promise { - if (ToolsConfig.tools[cmd].location === undefined) { - let toolCacheLocation = path.resolve(__dirname, '..', 'tools', Platform.OS, ToolsConfig.tools[cmd].cmdFileName); + // When running tests, Mocha uses sources, so the `__filename` and `__dirname` usually + // pont to `out/src` where the transpiled sources got stored, while we always need to + // use 'out` directory. + const baseDir = path.parse(__dirname).name === 'src' ? path.dirname(__dirname) : __dirname; + + let toolCacheLocation = path.resolve(baseDir, 'tools', Platform.OS, ToolsConfig.tools[cmd].cmdFileName); let toolLocations: string[] = [toolCacheLocation]; if (process.env.REMOTE_CONTAINERS === 'true') { const openShiftToolsFolder = path.join(os.homedir(), '.local', 'state', 'vs-openshift-tools'); @@ -57,8 +60,14 @@ export class ToolsConfig { ToolsConfig.tools[cmd].location = await ToolsConfig.selectTool(toolLocations, ToolsConfig.tools[cmd].versionRange).then( (location) => { - if (location && Platform.OS !== 'win32') fs.chmodSync(location, 0o765); - return location; + try { + if (location && Platform.OS !== 'win32') { + fs.chmodSync(location, 0o765); + } + return location; + } catch { + // Ignore + } } ); } diff --git a/src/util/childProcessUtil.ts b/src/util/childProcessUtil.ts index eaa4538fc..69182d8d6 100644 --- a/src/util/childProcessUtil.ts +++ b/src/util/childProcessUtil.ts @@ -3,12 +3,13 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as cp from 'child_process'; +import { ExecException, ExecOptions } from 'child_process'; import * as vscode from 'vscode'; +import * as cp from '../util/utils'; import { Filters } from './filters'; export interface CliExitData { - readonly error: cp.ExecException; + readonly error: ExecException; readonly stdout: string; readonly stderr: string; readonly cwd?: string; @@ -104,12 +105,12 @@ export class ChildProcessUtil { return (!isNaN(length) && length > 0 ? length : 4) * 1024 * 1024; } - public execute(cmd: string, opts: cp.ExecOptions = {}): Promise { + public execute(cmd: string, opts: ExecOptions = {}): Promise { return new Promise((resolve) => { if (opts.maxBuffer === undefined) { opts.maxBuffer = ChildProcessUtil.getExecMaxBufferLength(); } - cp.exec(cmd, opts, (error: cp.ExecException, stdout: string, stderr: string) => { + cp.exec(cmd, opts, (error: ExecException, stdout: string, stderr: string) => { // filter out info about update this.odoChannel.print(cmd); this.odoChannel.print(stdout); diff --git a/src/util/disposableInstance.ts b/src/util/disposableInstance.ts new file mode 100644 index 000000000..9b965e649 --- /dev/null +++ b/src/util/disposableInstance.ts @@ -0,0 +1,18 @@ +/*----------------------------------------------------------------------------------------------- + * Copyright (c) Red Hat, Inc. All rights reserved. + * Licensed under the MIT License. See LICENSE file in the project root for license information. + *-----------------------------------------------------------------------------------------------*/ +import { Disposable } from 'vscode'; + +export class DisposableInstance implements Disposable { + private static instance: Disposable; + + static getInstance(): Disposable { + if (!DisposableInstance.instance) { + DisposableInstance.instance = new DisposableInstance(); + } + return DisposableInstance.instance; + } + + public dispose(): void { } +} diff --git a/src/util/inputValue.ts b/src/util/inputValue.ts index 64ae61123..d265a9489 100644 --- a/src/util/inputValue.ts +++ b/src/util/inputValue.ts @@ -2,8 +2,8 @@ * Copyright (c) Red Hat, Inc. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as path from 'path'; import { env, InputBox, QuickInputButton, QuickInputButtons, ThemeIcon, Uri, window } from 'vscode'; +import { imagePath } from './utils'; export class quickBtn implements QuickInputButton { constructor(public iconPath: Uri | { light: Uri; dark: Uri } | ThemeIcon, public tooltip: string) { } @@ -33,8 +33,8 @@ export function inputValue(prompt: string, initialValue: string, password: boole const enterBtn = new quickBtn(new ThemeIcon('check'), 'Enter'); const cancelBtn = new quickBtn(new ThemeIcon('close'), 'Cancel'); const pasteBtn = new quickBtn({ - light: Uri.file(path.resolve(__dirname, '../../../images/paste-light.svg')), - dark: Uri.file(path.resolve(__dirname, '../../../images/paste-dark.svg')) + light: Uri.file(imagePath('paste-light.svg')), + dark: Uri.file(imagePath('paste-dark.svg')) }, 'Paste from Clipboard'); const hideBtn = new quickBtn(new ThemeIcon('eye'), 'Hide value'); diff --git a/src/util/utils.ts b/src/util/utils.ts new file mode 100644 index 000000000..6651988b3 --- /dev/null +++ b/src/util/utils.ts @@ -0,0 +1,54 @@ +/*----------------------------------------------------------------------------------------------- + * Copyright (c) Red Hat, Inc. All rights reserved. + * Licensed under the MIT License. See LICENSE file in the project root for license information. + *-----------------------------------------------------------------------------------------------*/ + +import { exec as execOriginal } from 'child_process'; +import { + ensureDirSync as ensureDirSyncOriginal, + ensureFileSync as ensureFileSyncOriginal, + realpathSync as realpathSyncOriginal, + watch as watchOriginal, + writeFileSync as writeFileSyncOriginal +} from 'fs-extra'; +import { access as accessOriginal, rm as rmOriginal } from 'fs/promises'; +import * as path from 'path'; +import { decompress as decompressOriginal } from 'targz'; + +/** + * Returns the absolute path for a specified relative image path + * + * @param imagePath An image path relative to the 'images/' directory + * @returns An absolute path to specified image + */ +export function imagePath(imagePath: string): string { + return path.join(__dirname, '../../images/', imagePath); +} + +export function log(message: string): void { + /* eslint-disable no-console */ + console.error(message); + /* eslint-disable no-console */ +} + +// The following wrappers are needed for unit tests due to +// 'TypeError: Descriptor for property XXX is non-configurable and non-writable' error +// that may occure when trying to stub the following methods with SinonStub +// + +// Wraps from fs/promises +export const rm = rmOriginal; +export const access = accessOriginal; + +// Wraps from fs-extra +export const ensureDirSync = ensureDirSyncOriginal; +export const watch = watchOriginal; +export const realpathSync = realpathSyncOriginal; +export const ensureFileSync = ensureFileSyncOriginal; +export const writeFileSync = writeFileSyncOriginal; + +// Wraps from child_process +export const exec = execOriginal; + +// Wraps from child_process +export const decompress = decompressOriginal; diff --git a/src/util/watch.ts b/src/util/watch.ts index 76f8e504e..fe1b1f2c3 100644 --- a/src/util/watch.ts +++ b/src/util/watch.ts @@ -5,7 +5,8 @@ import { EventEmitter } from 'events'; import * as fs from 'fs'; -import * as fsxt from 'fs-extra'; +import { FSWatcher } from 'fs-extra'; +import * as fsxt from '../util/utils'; export class WatchUtil { static watchFileForContextChange( @@ -15,7 +16,7 @@ export class WatchUtil { const emitter: EventEmitter = new EventEmitter(); let timer: ReturnType | undefined; fsxt.ensureDirSync(location); - const watcher: fsxt.FSWatcher = fsxt.watch(location, (eventType, changedFile) => { + const watcher: FSWatcher = fsxt.watch(location, (eventType, changedFile) => { if (filename === changedFile) { if (timer) { clearTimeout(timer); diff --git a/src/vscommand.ts b/src/vscommand.ts index 99966d68d..9a913981a 100644 --- a/src/vscommand.ts +++ b/src/vscommand.ts @@ -42,7 +42,10 @@ function displayResult(result: string | undefined): void { export async function registerCommands(...modules: string[]): Promise { // this step is required to get all annotations processed and this is drawback, // because it triggers javascript loading when extension is activated - await Promise.all(modules.map((module) => import(module))); + await Promise.all(modules.map(async (module) => { + try {await import(module);} catch { /* Ignore */ } + })); + return vsCommands.map((cmd) => { return commands.registerCommand(cmd.commandId, async (...params) => { let telemetryProps: Partial = { diff --git a/src/webview/cluster/clusterViewLoader.ts b/src/webview/cluster/clusterViewLoader.ts index 2706ec7f7..9578c8ea0 100644 --- a/src/webview/cluster/clusterViewLoader.ts +++ b/src/webview/cluster/clusterViewLoader.ts @@ -6,27 +6,28 @@ import { CoreV1Api } from '@kubernetes/client-node'; import { ChildProcess, spawn } from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; -import * as vscode from 'vscode'; +import { authentication, AuthenticationSession, commands, ConfigurationTarget, env, extensions, OutputChannel, Uri, ViewColumn, WebviewPanel, window, workspace } from 'vscode'; import { CommandText } from '../../base/command'; import { Cluster } from '../../openshift/cluster'; import { createSandboxAPI } from '../../openshift/sandbox'; import { ExtCommandTelemetryEvent } from '../../telemetry'; import { ChildProcessUtil } from '../../util/childProcessUtil'; import { ExtensionID } from '../../util/constants'; +import { DisposableInstance } from '../../util/disposableInstance'; import { vsCommand } from '../../vscommand'; import { loadWebviewHtml } from '../common-ext/utils'; import { OpenShiftTerminalManager } from '../openshift-terminal/openShiftTerminal'; -let panel: vscode.WebviewPanel; +let panel: WebviewPanel; -const channel: vscode.OutputChannel = vscode.window.createOutputChannel('OpenShift Local Logs'); +const channel: OutputChannel = window.createOutputChannel('OpenShift Local Logs'); const sandboxAPI = createSandboxAPI(); async function clusterEditorMessageListener (event: any ): Promise { - let sessionCheck: vscode.AuthenticationSession; + let sessionCheck: AuthenticationSession; if (event.action?.startsWith('sandbox')) { - sessionCheck = await vscode.authentication.getSession('redhat-account-auth', ['openid'], { createIfNone: false }); + sessionCheck = await authentication.getSession('redhat-account-auth', ['openid'], { createIfNone: false }); if(!sessionCheck && event.action !== 'sandboxLoginRequest') { void panel.webview.postMessage({action: 'sandboxPageLoginRequired'}); return; @@ -40,7 +41,7 @@ async function clusterEditorMessageListener (event: any ): Promise { case 'crcSetup': case 'crcStart': case 'crcStop': - await vscode.commands.executeCommand(`openshift.explorer.addCluster.${event.action}`, event); + await commands.executeCommand(`openshift.explorer.addCluster.${event.action}`, event); break; case 'crcSaveSettings': @@ -48,7 +49,7 @@ async function clusterEditorMessageListener (event: any ): Promise { break; case 'checksetting': { - const binaryFromSetting: string = vscode.workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); + const binaryFromSetting: string = workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); if (binaryFromSetting) { await panel.webview.postMessage({action: 'crcsetting'}); void ClusterViewLoader.checkCrcStatus(binaryFromSetting, 'crcstatus', panel); @@ -60,7 +61,7 @@ async function clusterEditorMessageListener (event: any ): Promise { break; case 'crcLogin': - void vscode.commands.executeCommand( + void commands.executeCommand( 'openshift.explorer.login.credentialsLogin', true, event.url, @@ -77,13 +78,13 @@ async function clusterEditorMessageListener (event: any ): Promise { const signupResponse = await sandboxAPI.signUp((sessionCheck as any).idToken); await panel.webview.postMessage({action: 'sandboxPageDetectStatus'}); if (!signupResponse) { - void vscode.window.showErrorMessage('Sign up request for OpenShift Sandbox failed, please try again.'); + void window.showErrorMessage('Sign up request for OpenShift Sandbox failed, please try again.'); telemetryEventSignup.sendError('Sign up request for OpenShift Sandbox failed.'); } else { telemetryEventSignup.send(); } } catch { - void vscode.window.showErrorMessage('Sign up request for OpenShift Sandbox failed, please try again.'); + void window.showErrorMessage('Sign up request for OpenShift Sandbox failed, please try again.'); telemetryEventSignup.sendError('Sign up request for OpenShift Sandbox timed out.'); } break; @@ -91,7 +92,7 @@ async function clusterEditorMessageListener (event: any ): Promise { case 'sandboxLoginRequest': { const telemetryEventLogin = new ExtCommandTelemetryEvent('openshift.explorer.addCluster.sandboxLoginRequest'); try { - const session: vscode.AuthenticationSession = await vscode.authentication.getSession('redhat-account-auth', ['openid'], { createIfNone: true }); + const session: AuthenticationSession = await authentication.getSession('redhat-account-auth', ['openid'], { createIfNone: true }); if (session) { await panel.webview.postMessage({action: 'sandboxPageDetectStatus'}); } else { @@ -126,7 +127,7 @@ async function clusterEditorMessageListener (event: any ): Promise { signupStatus.compliantUsername); let errCode = ''; if (!pipelineAccountToken) { // Try loging in using a token from the Clipboard - if (!Cluster.validateLoginToken((await vscode.env.clipboard.readText()).trim())) { + if (!Cluster.validateLoginToken((await env.clipboard.readText()).trim())) { errCode = 'invalidToken'; } } @@ -160,7 +161,7 @@ async function clusterEditorMessageListener (event: any ): Promise { } telemetryEventDetect.send(); } catch { - void vscode.window.showErrorMessage('OpenShift Sandbox status request timed out, please try again.'); + void window.showErrorMessage('OpenShift Sandbox status request timed out, please try again.'); await panel.webview.postMessage({action: 'sandboxPageDetectStatus', errorCode: 'statusDetectionError'}); telemetryEventDetect.sendError('OpenShift Sandbox status request timed out.'); } @@ -174,12 +175,12 @@ async function clusterEditorMessageListener (event: any ): Promise { await panel.webview.postMessage({action: 'sandboxPageEnterVerificationCode'}); telemetryEventRequestCode.send(); } else { - void vscode.window.showErrorMessage(`Request for verification code failed: ${requestStatus.json.details}`); + void window.showErrorMessage(`Request for verification code failed: ${requestStatus.json.details}`); await panel.webview.postMessage({action: 'sandboxPageRequestVerificationCode'}); telemetryEventRequestCode.sendError('Request for verification code failed.'); } } catch { - void vscode.window.showErrorMessage('Request for verification code timed out, please try again.'); + void window.showErrorMessage('Request for verification code timed out, please try again.'); await panel.webview.postMessage({action: 'sandboxPageRequestVerificationCode'}); telemetryEventRequestCode.sendError('Request for verification code timed out.'); } @@ -193,12 +194,12 @@ async function clusterEditorMessageListener (event: any ): Promise { await panel.webview.postMessage({action: 'sandboxPageDetectStatus'}); telemetryEventValidateCode.send(); } else { - void vscode.window.showErrorMessage('Verification code does not match, please try again.'); + void window.showErrorMessage('Verification code does not match, please try again.'); await panel.webview.postMessage({action: 'sandboxPageEnterVerificationCode', errorCode: 'verificationFailed'}); telemetryEventValidateCode.sendError('Verification code does not match'); } } catch { - void vscode.window.showErrorMessage('Verification code validation request timed out, please try again.'); + void window.showErrorMessage('Verification code validation request timed out, please try again.'); await panel.webview.postMessage({action: 'sandboxPageEnterVerificationCode', errorCode: 'verificationFailed'}); telemetryEventValidateCode.sendError('Verification code validation request failed'); } @@ -208,10 +209,10 @@ async function clusterEditorMessageListener (event: any ): Promise { const telemetryEventLoginToSandbox = new ExtCommandTelemetryEvent('openshift.explorer.addCluster.sandboxLoginUsingDataInClipboard'); try { const result = await Cluster.loginUsingClipboardToken(event.payload.apiEndpointUrl, event.payload.oauthRequestTokenUrl); - if (result) void vscode.window.showInformationMessage(`${result}`); + if (result) void window.showInformationMessage(`${result}`); telemetryEventLoginToSandbox.send(); } catch (err) { - void vscode.window.showErrorMessage(err.message); + void window.showErrorMessage(err.message); telemetryEventLoginToSandbox.sendError('Login into Sandbox Cluster failed.'); } break; @@ -225,16 +226,16 @@ async function clusterEditorMessageListener (event: any ): Promise { event.payload.username, (sessionCheck as any).idToken ); - if (result) void vscode.window.showInformationMessage(`${result}`); + if (result) void window.showInformationMessage(`${result}`); telemetryEventLoginToSandbox.send(); } catch (err) { - void vscode.window.showErrorMessage(err.message); + void window.showErrorMessage(err.message); telemetryEventLoginToSandbox.sendError('Login into Sandbox Cluster failed.'); } break; } default: - void vscode.window.showErrorMessage(`Unexpected message from webview: '${event.action}'`); + void window.showErrorMessage(`Unexpected message from webview: '${event.action}'`); break; } } @@ -243,9 +244,9 @@ async function pollClipboard(signupStatus) { const oauthInfo = await sandboxAPI.getOauthServerInfo(signupStatus.apiEndpoint); let firstPoll = true; while (panel) { - const previousContent = (await vscode.env.clipboard.readText()).trim(); + const previousContent = (await env.clipboard.readText()).trim(); await new Promise(r => setTimeout(r, 500)); - const currentContent = (await vscode.env.clipboard.readText()).trim(); + const currentContent = (await env.clipboard.readText()).trim(); if (firstPoll || (previousContent && previousContent !== currentContent)) { firstPoll = false; let errCode = ''; @@ -266,10 +267,11 @@ async function pollClipboard(signupStatus) { } } -export default class ClusterViewLoader { +export default class ClusterViewLoader extends DisposableInstance { + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type static get extensionPath() { - return vscode.extensions.getExtension(ExtensionID).extensionPath + return extensions.getExtension(ExtensionID).extensionPath } @vsCommand('openshift.explorer.addCluster.openLaunchSandboxPage') @@ -284,7 +286,7 @@ export default class ClusterViewLoader { @vsCommand('openshift.explorer.addCluster.openCrcAddClusterPage') static async openCrcAddClusterPage() { - const toolsJsonPath = vscode.Uri.file(path.join(ClusterViewLoader.extensionPath, 'src/tools.json')); + const toolsJsonPath = Uri.file(path.join(ClusterViewLoader.extensionPath, 'src/tools.json')); let crc: string, crcOpenShift: string; try { const content = fs.readFileSync(toolsJsonPath.fsPath, { encoding: 'utf-8' }); @@ -295,7 +297,7 @@ export default class ClusterViewLoader { const telemetryEventLoginToSandbox = new ExtCommandTelemetryEvent('openshift.explorer.addCluster.openCrcAddClusterPage'); crc = ''; crcOpenShift = ''; - void vscode.window.showErrorMessage(err.message); + void window.showErrorMessage(err.message); telemetryEventLoginToSandbox.sendError('Unable to fetch CRC and OpenshiftCRC version'); } finally { await panel.webview.postMessage( @@ -319,11 +321,11 @@ export default class ClusterViewLoader { let startProcess: ChildProcess; channel.show(); if (event.isSetting) { - const binaryFromSetting: string = vscode.workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); - const pullSecretFromSetting: string = vscode.workspace.getConfiguration('openshiftToolkit').get('crcPullSecretPath'); - const cpuFromSetting: string = vscode.workspace.getConfiguration('openshiftToolkit').get('crcCpuCores'); - const memoryFromSetting: string = vscode.workspace.getConfiguration('openshiftToolkit').get('crcMemoryAllocated'); - const nameserver = vscode.workspace.getConfiguration('openshiftToolkit').get('crcNameserver'); + const binaryFromSetting: string = workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); + const pullSecretFromSetting: string = workspace.getConfiguration('openshiftToolkit').get('crcPullSecretPath'); + const cpuFromSetting: string = workspace.getConfiguration('openshiftToolkit').get('crcCpuCores'); + const memoryFromSetting: string = workspace.getConfiguration('openshiftToolkit').get('crcMemoryAllocated'); + const nameserver = workspace.getConfiguration('openshiftToolkit').get('crcNameserver'); const nameserverOption = nameserver ? ['-n', nameserver] : []; const crcOptions = ['start', '-p', `${pullSecretFromSetting}`, '-c', `${cpuFromSetting}`, '-m', `${memoryFromSetting}`, ...nameserverOption, '-o', 'json']; @@ -345,15 +347,15 @@ export default class ClusterViewLoader { const message = `'crc start' exited with code ${code}`; channel.append(message); if (code !== 0) { - void vscode.window.showErrorMessage(message); + void window.showErrorMessage(message); } - const binaryLoc = event.isSetting ? vscode.workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'): event.crcLoc; + const binaryLoc = event.isSetting ? workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'): event.crcLoc; void ClusterViewLoader.checkCrcStatus(binaryLoc, 'crcstartstatus', panel); }); startProcess.on('error', (err) => { const message = `'crc start' execution failed with error: '${err.message}'`; channel.append(message); - void vscode.window.showErrorMessage(message); + void window.showErrorMessage(message); }); return Promise.resolve(); } @@ -363,7 +365,7 @@ export default class ClusterViewLoader { let filePath: string; channel.show(); if (event.data.tool === '') { - filePath = vscode.workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); + filePath = workspace.getConfiguration('openshiftToolkit').get('crcBinaryLocation'); } else { filePath = event.data.tool; } @@ -381,21 +383,21 @@ export default class ClusterViewLoader { const message = `'crc stop' exited with code ${code}`; channel.append(message); if (code !== 0) { - void vscode.window.showErrorMessage(message); + void window.showErrorMessage(message); } void ClusterViewLoader.checkCrcStatus(filePath, 'crcstopstatus', panel); }); stopProcess.on('error', (err) => { const message = `'crc stop' execution filed with error: '${err.message}'`; channel.append(message); - void vscode.window.showErrorMessage(message); + void window.showErrorMessage(message); }); return Promise.resolve(); } @vsCommand('openshift.explorer.addCluster') static async add(value: string): Promise { - const webViewPanel: vscode.WebviewPanel = await ClusterViewLoader.loadView('Add OpenShift Cluster'); + const webViewPanel: WebviewPanel = await ClusterViewLoader.loadView('Add OpenShift Cluster'); if(value?.length > 0){ await webViewPanel.webview.postMessage({action: 'cluster', param: value}); } @@ -410,37 +412,37 @@ export default class ClusterViewLoader { * so their values will override the ones defined in the object. */ static async clearCrcSettings() { - const cfg = vscode.workspace.getConfiguration('openshiftToolkit'); - await cfg.update('crcBinaryLocation', undefined, vscode.ConfigurationTarget.Global); - await cfg.update('crcPullSecretPath', undefined, vscode.ConfigurationTarget.Global); - await cfg.update('crcCpuCores', undefined, vscode.ConfigurationTarget.Global); - await cfg.update('crcMemoryAllocated', undefined, vscode.ConfigurationTarget.Global); + const cfg = workspace.getConfiguration('openshiftToolkit'); + await cfg.update('crcBinaryLocation', undefined, ConfigurationTarget.Global); + await cfg.update('crcPullSecretPath', undefined, ConfigurationTarget.Global); + await cfg.update('crcCpuCores', undefined, ConfigurationTarget.Global); + await cfg.update('crcMemoryAllocated', undefined, ConfigurationTarget.Global); await cfg.update('crcNameserver', undefined); // Previously it was saved as `Workspace` - await cfg.update('crcNameserver', undefined, vscode.ConfigurationTarget.Global); + await cfg.update('crcNameserver', undefined, ConfigurationTarget.Global); } static async crcSaveSettings(event) { await ClusterViewLoader.clearCrcSettings(); - const cfg = vscode.workspace.getConfiguration('openshiftToolkit'); - await cfg.update('crcBinaryLocation', event.crcLoc, vscode.ConfigurationTarget.Global); - await cfg.update('crcPullSecretPath', event.pullSecret, vscode.ConfigurationTarget.Global); - await cfg.update('crcCpuCores', event.cpuSize, vscode.ConfigurationTarget.Global); - await cfg.update('crcMemoryAllocated', Number.parseInt(event.memory, 10), vscode.ConfigurationTarget.Global); - await cfg.update('crcNameserver', event.nameserver, vscode.ConfigurationTarget.Global); + const cfg = workspace.getConfiguration('openshiftToolkit'); + await cfg.update('crcBinaryLocation', event.crcLoc, ConfigurationTarget.Global); + await cfg.update('crcPullSecretPath', event.pullSecret, ConfigurationTarget.Global); + await cfg.update('crcCpuCores', event.cpuSize, ConfigurationTarget.Global); + await cfg.update('crcMemoryAllocated', Number.parseInt(event.memory, 10), ConfigurationTarget.Global); + await cfg.update('crcNameserver', event.nameserver, ConfigurationTarget.Global); } - static async loadView(title: string): Promise { - const localResourceRoot = vscode.Uri.file(path.join(ClusterViewLoader.extensionPath, 'out')); + static async loadView(title: string): Promise { + const localResourceRoot = Uri.file(path.join(ClusterViewLoader.extensionPath, 'out')); if (panel) { // If we already have a panel, show it in the target column - panel.reveal(vscode.ViewColumn.One); + panel.reveal(ViewColumn.One); } else { - panel = vscode.window.createWebviewPanel('clusterView', title, vscode.ViewColumn.One, { + panel = window.createWebviewPanel('clusterView', title, ViewColumn.One, { enableScripts: true, localResourceRoots: [localResourceRoot], retainContextWhenHidden: true }); - panel.iconPath = vscode.Uri.file(path.join(ClusterViewLoader.extensionPath, 'images/context/cluster-node.png')); + panel.iconPath = Uri.file(path.join(ClusterViewLoader.extensionPath, 'images/context/cluster-node.png')); panel.webview.html = await loadWebviewHtml('cluster', panel); const messageListenerDisposable = panel.webview.onDidReceiveMessage(clusterEditorMessageListener); panel.onDidDispose(()=> { @@ -453,7 +455,7 @@ export default class ClusterViewLoader { return panel; } - public static async checkCrcStatus(filePath: string, postCommand: string, p: vscode.WebviewPanel | undefined = undefined) { + public static async checkCrcStatus(filePath: string, postCommand: string, p: WebviewPanel | undefined = undefined) { const crcCredArray = []; const crcVerInfo = await ChildProcessUtil.Instance.execute(`"${filePath}" version -o json`); channel.append(`\n\n"${filePath}" version -o json\n`); diff --git a/src/webview/create-deployment/createDeploymentLoader.ts b/src/webview/create-deployment/createDeploymentLoader.ts index 4956d619e..c9fe4396d 100644 --- a/src/webview/create-deployment/createDeploymentLoader.ts +++ b/src/webview/create-deployment/createDeploymentLoader.ts @@ -15,6 +15,8 @@ import { Oc } from '../../oc/ocWrapper'; import { BuilderImage, BuilderImageWrapper, NormalizedBuilderImages } from '../../odo/builderImage'; import sendTelemetry from '../../telemetry'; import { ExtensionID } from '../../util/constants'; +import { DisposableInstance } from '../../util/disposableInstance'; +import { vsCommand } from '../../vscommand'; import { validateName, validatePortNumber @@ -33,7 +35,7 @@ type Message = { let tmpFolder: Uri; -export default class CreateDeploymentLoader { +export default class CreateDeploymentLoader extends DisposableInstance { static panel: WebviewPanel; static initFromRootFolderPath: string; @@ -243,7 +245,7 @@ export default class CreateDeploymentLoader { action: 'getRecommendedBuilderImageStart' }); analyzeRes = await Alizer.Instance.alizerAnalyze(uri); - normalizedBuilderImages = await BuilderImageWrapper.Instance.getBuilder(); + normalizedBuilderImages = await (BuilderImageWrapper.getInstance() as BuilderImageWrapper).getBuilder(); for (const key in normalizedBuilderImages) { if (Object.prototype.hasOwnProperty.call(normalizedBuilderImages, key)) { builderImages.push(normalizedBuilderImages[key]); @@ -283,6 +285,11 @@ export default class CreateDeploymentLoader { }); } } + + @vsCommand('openshift.deployment.create.buildConfig') + static async createComponent(): Promise { + await CreateDeploymentLoader.loadView('Create build Config'); + } } function clone(url: string, location: string, branch?: string): Promise { @@ -302,3 +309,4 @@ function clone(url: string, location: string, branch?: string): Promise { case 'init': void RegistryViewLoader.panel.webview.postMessage({ action: 'setTheme', - themeValue: vscode.window.activeColorTheme.kind, + themeValue: window.activeColorTheme.kind, }); break; case 'getDevfileRegistries': @@ -69,21 +70,21 @@ async function devfileRegistryViewerMessageListener(event: any): Promise { RegistryViewLoader.panel.dispose(); if ( event.data.addToWorkspace && - !vscode.workspace.workspaceFolders?.some( + !workspace.workspaceFolders?.some( (workspaceFolder) => workspaceFolder.uri.fsPath === componentFolder, ) ) { - vscode.workspace.updateWorkspaceFolders( - vscode.workspace.workspaceFolders - ? vscode.workspace.workspaceFolders.length + workspace.updateWorkspaceFolders( + workspace.workspaceFolders + ? workspace.workspaceFolders.length : 0, null, - { uri: vscode.Uri.file(componentFolder) }, + { uri: Uri.file(componentFolder) }, ); } - void vscode.commands.executeCommand('openshift.componentsView.refresh'); + void commands.executeCommand('openshift.componentsView.refresh'); } catch (e) { - void vscode.window.showErrorMessage(e); + void window.showErrorMessage(e); } break; } @@ -123,7 +124,7 @@ async function devfileRegistryViewerMessageListener(event: any): Promise { break; } case 'selectProjectFolderNewProject': { - const workspaceUri: vscode.Uri = await selectWorkspaceFolder(true, undefined, undefined, event?.data ); + const workspaceUri: Uri = await selectWorkspaceFolder(true, undefined, undefined, event?.data ); if (workspaceUri) { void RegistryViewLoader.panel.webview.postMessage({ action: 'selectedProjectFolder', @@ -153,17 +154,17 @@ async function devfileRegistryViewerMessageListener(event: any): Promise { } default: { - void vscode.window.showErrorMessage(`OpenShift: Unexpected message in registry view loader ${event?.action}`); + void window.showErrorMessage(`OpenShift: Unexpected message in registry view loader ${event?.action}`); } } } -export default class RegistryViewLoader { - static panel: vscode.WebviewPanel; +export default class RegistryViewLoader extends DisposableInstance { + static panel: WebviewPanel; static url: string; static get extensionPath() { - return vscode.extensions.getExtension(ExtensionID).extensionPath + return extensions.getExtension(ExtensionID).extensionPath } private static doUpdateRegistries() { @@ -177,7 +178,7 @@ export default class RegistryViewLoader { action: 'createComponentFailed', data: `No Devfile registries available for ${RegistryViewLoader.url}` }); - void vscode.window.showErrorMessage( + void window.showErrorMessage( ` No Devfile registry available. Do you want to close the '${RegistryViewLoader.panel.title}' view? @@ -193,24 +194,24 @@ export default class RegistryViewLoader { }) } - static async loadView(title: string, url?: string): Promise { - const localResourceRoot = vscode.Uri.file(path.join(RegistryViewLoader.extensionPath, 'out', 'devfile-registry', 'app')); + static async loadView(title: string, url?: string): Promise { + const localResourceRoot = Uri.file(path.join(RegistryViewLoader.extensionPath, 'out', 'devfile-registry', 'app')); if (RegistryViewLoader.panel) { if (RegistryViewLoader.url !== url) { RegistryViewLoader.url = url; RegistryViewLoader.doUpdateRegistries(); } // If we already have a panel, show it in the target column - RegistryViewLoader.panel.reveal(vscode.ViewColumn.One); + RegistryViewLoader.panel.reveal(ViewColumn.One); RegistryViewLoader.panel.title = title; } else { RegistryViewLoader.url = url; - RegistryViewLoader.panel = vscode.window.createWebviewPanel('devFileRegistryView', title, vscode.ViewColumn.One, { + RegistryViewLoader.panel = window.createWebviewPanel('devFileRegistryView', title, ViewColumn.One, { enableScripts: true, localResourceRoots: [localResourceRoot], retainContextWhenHidden: true }); - RegistryViewLoader.panel.iconPath = vscode.Uri.file(path.join(RegistryViewLoader.extensionPath, 'images/context/devfile.png')); + RegistryViewLoader.panel.iconPath = Uri.file(path.join(RegistryViewLoader.extensionPath, 'images/context/devfile.png')); RegistryViewLoader.panel.webview.html = await loadWebviewHtml('devfile-registry', RegistryViewLoader.panel); const messageDisposable = RegistryViewLoader.panel.webview.onDidReceiveMessage(devfileRegistryViewerMessageListener); diff --git a/src/webview/helm-chart/helmChartLoader.ts b/src/webview/helm-chart/helmChartLoader.ts index 41699af9c..9c1b13479 100644 --- a/src/webview/helm-chart/helmChartLoader.ts +++ b/src/webview/helm-chart/helmChartLoader.ts @@ -2,27 +2,28 @@ * Copyright (c) Red Hat, Inc. All rights reserved. * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ +import * as fs from 'fs'; import * as JSYAML from 'js-yaml'; import * as path from 'path'; -import * as vscode from 'vscode'; -import * as fs from 'fs'; import * as tmp from 'tmp'; +import { promisify } from 'util'; +import { ColorTheme, ColorThemeKind, commands, extensions, Uri, ViewColumn, WebviewPanel, window } from 'vscode'; import { OpenShiftExplorer } from '../../explorer'; import * as Helm from '../../helm/helm'; import { Chart, ChartResponse, HelmRepo } from '../../helm/helmChartType'; import sendTelemetry, { ExtCommandTelemetryEvent } from '../../telemetry'; import { ExtensionID } from '../../util/constants'; +import { DisposableInstance } from '../../util/disposableInstance'; import { Progress } from '../../util/progress'; import { vsCommand } from '../../vscommand'; import { validateName } from '../common-ext/createComponentHelpers'; import { loadWebviewHtml } from '../common-ext/utils'; -import { promisify } from 'util'; -let panel: vscode.WebviewPanel; +let panel: WebviewPanel; const helmCharts: ChartResponse[] = []; -let themeKind: vscode.ColorThemeKind = vscode.window.activeColorTheme.kind; +let themeKind: ColorThemeKind = window.activeColorTheme.kind; -vscode.window.onDidChangeActiveColorTheme((editor: vscode.ColorTheme) => { +window.onDidChangeActiveColorTheme((editor: ColorTheme) => { if (themeKind !== editor.kind) { themeKind = editor.kind; if (panel) { @@ -31,7 +32,8 @@ vscode.window.onDidChangeActiveColorTheme((editor: vscode.ColorTheme) => { } }); -export class HelmCommand { +export class HelmCommand extends DisposableInstance { + @vsCommand('openshift.helm.install') static async installHelmChart(event: any) { await panel.webview.postMessage({ @@ -43,7 +45,7 @@ export class HelmCommand { }); //write temp yaml file for values - const tmpFolder = vscode.Uri.parse(await promisify(tmp.dir)()); + const tmpFolder = Uri.parse(await promisify(tmp.dir)()); const tempFilePath = path.join(tmpFolder.fsPath, `helmValues-${Date.now()}.yaml`); fs.writeFileSync(tempFilePath, event.data.yamlValues, 'utf8'); @@ -86,16 +88,16 @@ async function helmChartMessageListener(event: any): Promise { case 'init': void panel.webview.postMessage({ action: 'setTheme', - themeValue: vscode.window.activeColorTheme.kind, + themeValue: window.activeColorTheme.kind, }); void HelmChartLoader.getHelmCharts(); break; case 'install': { - void vscode.commands.executeCommand('openshift.helm.install', event); + void commands.executeCommand('openshift.helm.install', event); break; } case 'openChart': { - void vscode.commands.executeCommand('openshift.helm.open', event.chartName); + void commands.executeCommand('openshift.helm.open', event.chartName); break; } case 'validateName': { @@ -157,25 +159,25 @@ async function helmChartMessageListener(event: any): Promise { } } -export default class HelmChartLoader { +export default class HelmChartLoader extends DisposableInstance { static get extensionPath() { - return vscode.extensions.getExtension(ExtensionID).extensionPath + return extensions.getExtension(ExtensionID).extensionPath } - static async loadView(title: string): Promise { - const localResourceRoot = vscode.Uri.file(path.join(HelmChartLoader.extensionPath, 'out', 'helm-chart', 'app')); + static async loadView(title: string): Promise { + const localResourceRoot = Uri.file(path.join(HelmChartLoader.extensionPath, 'out', 'helm-chart', 'app')); if (panel) { // If we already have a panel, show it in the target column - panel.reveal(vscode.ViewColumn.One); + panel.reveal(ViewColumn.One); panel.title = title; } else { - panel = vscode.window.createWebviewPanel('helmChartView', title, vscode.ViewColumn.One, { + panel = window.createWebviewPanel('helmChartView', title, ViewColumn.One, { enableScripts: true, localResourceRoots: [localResourceRoot], retainContextWhenHidden: true }); - panel.iconPath = vscode.Uri.file(path.join(HelmChartLoader.extensionPath, 'images/helm/helm.svg')); + panel.iconPath = Uri.file(path.join(HelmChartLoader.extensionPath, 'images/helm/helm.svg')); panel.webview.html = await loadWebviewHtml('helm-chart', panel); const messageDisposable = panel.webview.onDidReceiveMessage(helmChartMessageListener); panel.onDidDispose(() => { diff --git a/src/webview/helm-manage-repository/manageRepositoryLoader.ts b/src/webview/helm-manage-repository/manageRepositoryLoader.ts index a9743a440..c4142e08b 100644 --- a/src/webview/helm-manage-repository/manageRepositoryLoader.ts +++ b/src/webview/helm-manage-repository/manageRepositoryLoader.ts @@ -4,21 +4,20 @@ *-----------------------------------------------------------------------------------------------*/ import { ChildProcess } from 'child_process'; import * as path from 'path'; -import * as vscode from 'vscode'; -import { ascRepoName } from '../../helm/helm'; -import { ManageRepository } from '../../helm/manageRepository'; +import { commands, extensions, Uri, ViewColumn, WebviewPanel, window } from 'vscode'; +import { ascRepoName, list } from '../../helm/helm'; import { ExtensionID } from '../../util/constants'; +import { DisposableInstance } from '../../util/disposableInstance'; import { vsCommand } from '../../vscommand'; import { loadWebviewHtml, Message, validateName, validateURL } from '../common-ext/utils'; -export default class ManageRepositoryViewLoader { - - static panel: vscode.WebviewPanel; +export default class ManageRepositoryViewLoader extends DisposableInstance { + static panel: WebviewPanel; public static processMap: Map = new Map(); private static get extensionPath(): string { - return vscode.extensions.getExtension(ExtensionID).extensionPath; + return extensions.getExtension(ExtensionID).extensionPath; } /** @@ -28,16 +27,16 @@ export default class ManageRepositoryViewLoader { */ static async loadView( title: string - ): Promise { + ): Promise { if (ManageRepositoryViewLoader.panel) { ManageRepositoryViewLoader.panel.reveal(); return; } - const localResourceRoot = vscode.Uri.file( + const localResourceRoot = Uri.file( path.join(ManageRepositoryViewLoader.extensionPath, 'out', 'helm-manage-repository', 'app'), ); - const panel = vscode.window.createWebviewPanel('helmRepositoryView', title, vscode.ViewColumn.One, { + const panel = window.createWebviewPanel('helmRepositoryView', title, ViewColumn.One, { enableScripts: true, localResourceRoots: [localResourceRoot], retainContextWhenHidden: true, @@ -52,7 +51,7 @@ export default class ManageRepositoryViewLoader { ManageRepositoryViewLoader.panel = undefined; }); - panel.iconPath = vscode.Uri.file( + panel.iconPath = Uri.file( path.join(ManageRepositoryViewLoader.extensionPath, 'images/context/cluster-node.png'), ); @@ -69,7 +68,7 @@ export default class ManageRepositoryViewLoader { case 'validateNewURL': { const flag = validateURL(message); if (!flag.error) { - const repoUrls = (await ManageRepository.getInstance().list()).map((repo) => repo.url); + const repoUrls = (await list()).map((repo) => repo.url); if (repoUrls.includes(message.data)) { void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, @@ -91,7 +90,7 @@ export default class ManageRepositoryViewLoader { case 'validateName': case 'validateNewName': { const flag = validateName(message.data); - const repoNames = (await ManageRepository.getInstance().list()).map((repo) => repo.name); + const repoNames = (await list()).map((repo) => repo.name); if (repoNames.includes(message.data)) { void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, @@ -110,7 +109,7 @@ export default class ManageRepositoryViewLoader { break; } case 'addRepo': { - const status = await vscode.commands.executeCommand('openshift.helm.add', undefined, message.data.repoName, message.data.repoURL, true); + const status = await commands.executeCommand('openshift.helm.add', undefined, message.data.repoName, message.data.repoURL, true); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, status @@ -118,7 +117,7 @@ export default class ManageRepositoryViewLoader { break; } case 'getRepositoryList': { - const repositories = (await ManageRepository.getInstance().list()).sort(ascRepoName); + const repositories = (await list()).sort(ascRepoName); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, repositories @@ -126,15 +125,15 @@ export default class ManageRepositoryViewLoader { break; } case 'syncRepo': { - await vscode.commands.executeCommand('openshift.helm.sync', message.data); + await commands.executeCommand('openshift.helm.sync', message.data); break; } case 'deleteRepo': { - await vscode.commands.executeCommand('openshift.helm.delete', message.data.repo, true); + await commands.executeCommand('openshift.helm.delete', message.data.repo, true); break; } case 'editRepo': { - await vscode.commands.executeCommand('openshift.helm.edit', message.data.oldRepo, message.data.newName, message.data.newURL, false, true); + await commands.executeCommand('openshift.helm.edit', message.data.oldRepo, message.data.newName, message.data.newURL, false, true); break; } default: diff --git a/src/webview/serverless-manage-repository/manageRepositoryLoader.ts b/src/webview/serverless-manage-repository/manageRepositoryLoader.ts index 5880026dc..4d620e491 100644 --- a/src/webview/serverless-manage-repository/manageRepositoryLoader.ts +++ b/src/webview/serverless-manage-repository/manageRepositoryLoader.ts @@ -20,6 +20,10 @@ export default class ManageRepositoryViewLoader { return vscode.extensions.getExtension(ExtensionID).extensionPath; } + private static getMRInstance(): ManageRepository { + return ManageRepository.getInstance() as ManageRepository; + } + /** * Returns the webview panel as a promise. * @@ -77,7 +81,7 @@ export default class ManageRepositoryViewLoader { case 'validateName': case 'validateNewName':{ const flag = validateName(message.data); - const repoList = await ManageRepository.getInstance().list(); + const repoList = await ManageRepositoryViewLoader.getMRInstance().list(); if (repoList.includes(message.data)) { void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, @@ -98,7 +102,7 @@ export default class ManageRepositoryViewLoader { case 'addRepo': { let addRepoStatus: boolean; await Progress.execFunctionWithProgress(`Adding repository ${message.data.name}`, async () => { - addRepoStatus = await ManageRepository.getInstance().addRepo(message.data.name, message.data.url); + addRepoStatus = await ManageRepositoryViewLoader.getMRInstance().addRepo(message.data.name, message.data.url); }); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, @@ -107,7 +111,7 @@ export default class ManageRepositoryViewLoader { break; } case 'getRepositoryList': { - const repositories = await ManageRepository.getInstance().list(); + const repositories = await ManageRepositoryViewLoader.getMRInstance().list(); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action, repositories @@ -115,9 +119,9 @@ export default class ManageRepositoryViewLoader { break; } case 'deleteRepo': { - const status = await ManageRepository.getInstance().deleteRepo(message.data.name); + const status = await ManageRepositoryViewLoader.getMRInstance().deleteRepo(message.data.name); if (status) { - const repositories = await ManageRepository.getInstance().list(); + const repositories = await ManageRepositoryViewLoader.getMRInstance().list(); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action: 'getRepositoryList', repositories @@ -126,9 +130,9 @@ export default class ManageRepositoryViewLoader { break; } case 'renameRepo': { - const renameRepoStatus = await ManageRepository.getInstance().renameRepo(message.data.oldName, message.data.newName); + const renameRepoStatus = await ManageRepositoryViewLoader.getMRInstance().renameRepo(message.data.oldName, message.data.newName); if (renameRepoStatus) { - const repositories = await ManageRepository.getInstance().list(); + const repositories = await ManageRepositoryViewLoader.getMRInstance().list(); void ManageRepositoryViewLoader.panel?.webview.postMessage({ action: 'getRepositoryList', repositories diff --git a/src/webview/tsconfig.json b/src/webview/tsconfig.json index 5d96b993c..23f525306 100644 --- a/src/webview/tsconfig.json +++ b/src/webview/tsconfig.json @@ -22,7 +22,6 @@ "common/*.ts", "create-deployment/pages/builderImageListItem.tsx", "create-deployment/pages/builderConfig.tsx", - "common/*.ts", "../devfile-registry/devfileInfo.ts" ], } diff --git a/src/yamlFileCommands.ts b/src/yamlFileCommands.ts index 6f39d3ceb..95b382c1f 100644 --- a/src/yamlFileCommands.ts +++ b/src/yamlFileCommands.ts @@ -6,9 +6,10 @@ import { window } from 'vscode'; import { Oc } from './oc/ocWrapper'; import { clusterRequired, projectRequired } from './openshift/openshiftItem'; +import { DisposableInstance } from './util/disposableInstance'; import { vsCommand } from './vscommand'; -export class YamlFileCommands { +export class YamlFileCommands extends DisposableInstance { @vsCommand('openshift.create') @clusterRequired() diff --git a/test/fixtures/components/empty.code-workspace b/test/fixtures/components/empty.code-workspace index ab6cf7fb2..11bff0f07 100644 --- a/test/fixtures/components/empty.code-workspace +++ b/test/fixtures/components/empty.code-workspace @@ -1,6 +1,7 @@ { "folders": [], "settings": { - "openshiftToolkit.execMaxBufferLength": 2 + "openshiftToolkit.execMaxBufferLength": 2, + "redhat.telemetry.enabled": false }, } \ No newline at end of file diff --git a/test/integration/index.ts b/test/integration/index.ts index da63210e3..c9fc55165 100644 --- a/test/integration/index.ts +++ b/test/integration/index.ts @@ -5,15 +5,13 @@ import * as fs from 'fs'; import { sync } from 'glob'; +import Mocha from 'mocha'; import * as paths from 'path'; -import { CoverageRunner, TestRunnerOptions } from '../coverage'; - import * as sourceMapSupport from 'source-map-support'; +import { CoverageRunner, TestRunnerOptions } from '../coverage'; sourceMapSupport.install(); -import * as Mocha from 'mocha'; - const config: Mocha.MochaOptions = { reporter: 'mocha-jenkins-reporter', ui: 'tdd', diff --git a/test/unit/debug.test.ts b/test/unit/debug.test.ts index 01ffeb0ef..3c36fa9bf 100644 --- a/test/unit/debug.test.ts +++ b/test/unit/debug.test.ts @@ -5,7 +5,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import { DebugSession, Disposable, debug } from 'vscode'; import { DebugSessionsView } from '../../src/debug'; diff --git a/test/unit/explorer.test.ts b/test/unit/explorer.test.ts index 6c4ae48ea..9d21062c0 100644 --- a/test/unit/explorer.test.ts +++ b/test/unit/explorer.test.ts @@ -5,7 +5,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import { commands, Uri } from 'vscode'; import { OpenShiftExplorer } from '../../src/explorer'; diff --git a/test/unit/extension.test.ts b/test/unit/extension.test.ts index 0faf5c365..e550dc9b7 100644 --- a/test/unit/extension.test.ts +++ b/test/unit/extension.test.ts @@ -12,7 +12,7 @@ import * as assert from 'assert'; import * as chai from 'chai'; import * as path from 'path'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { CommandText } from '../../src/base/command'; import { Oc } from '../../src/oc/ocWrapper'; @@ -103,10 +103,16 @@ suite('openshift toolkit Extension', () => { }); test('should register all extension commands declared commands in package descriptor', async function() { + const notRegisteredCommands = []; const commands = await vscode.commands.getCommands(true); packagejson.contributes.commands.forEach((value)=> { - expect(commands.includes(value.command), `Command '${value.command}' handler is not registered during activation`).true; + try { + expect(commands.includes(value.command), `Command '${value.command}' handler is not registered during activation`).true; + } catch { + notRegisteredCommands.push(value.command); + } }); + expect(notRegisteredCommands.length).to.equal(0, `The following ${notRegisteredCommands.length} command handlers are not registered during activation: ${notRegisteredCommands}`); }); test('async command wrapper shows message returned from command', async () => { diff --git a/test/unit/index.ts b/test/unit/index.ts index 9ce076654..a3240d050 100644 --- a/test/unit/index.ts +++ b/test/unit/index.ts @@ -5,14 +5,13 @@ import * as fs from 'fs'; import { sync } from 'glob'; +import Mocha from 'mocha'; import * as paths from 'path'; -import { CoverageRunner, TestRunnerOptions } from '../coverage'; - import * as sourceMapSupport from 'source-map-support'; +import { CoverageRunner, TestRunnerOptions } from '../coverage'; sourceMapSupport.install(); -import * as Mocha from 'mocha'; const config: Mocha.MochaOptions = { reporter: 'mocha-jenkins-reporter', @@ -57,6 +56,7 @@ export async function run(): Promise { // add activation test first testFiles.push(...await testFinder('activation.js')); + // everything else after testFiles.push(...await testFinder('oc.test.js')); testFiles.push(...await testFinder('**/extension.test.js')); diff --git a/test/unit/k8s/build.test.ts b/test/unit/k8s/build.test.ts index f1d4ce371..b3048709c 100644 --- a/test/unit/k8s/build.test.ts +++ b/test/unit/k8s/build.test.ts @@ -5,13 +5,13 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import * as k8s from 'vscode-kubernetes-tools-api'; +import { CliChannel } from '../../../src/cli'; import { Build } from '../../../src/k8s/build'; import { ChildProcessUtil } from '../../../src/util/childProcessUtil'; import { OpenShiftTerminalManager } from '../../../src/webview/openshift-terminal/openShiftTerminal'; -import { CliChannel } from '../../../src/cli'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/k8s/console.test.ts b/test/unit/k8s/console.test.ts index 15d6a62d5..a2601b0aa 100644 --- a/test/unit/k8s/console.test.ts +++ b/test/unit/k8s/console.test.ts @@ -3,13 +3,13 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; import * as chai from 'chai'; -import * as sinonChai from 'sinon-chai'; import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import * as vscode from 'vscode'; +import { CliChannel } from '../../../src/cli'; import { Console } from '../../../src/k8s/console'; import { KubeConfigUtils } from '../../../src/util/kubeUtils'; -import { CliChannel } from '../../../src/cli'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/k8s/deployment.test.ts b/test/unit/k8s/deployment.test.ts index 69c548c2a..7b9fa38e7 100644 --- a/test/unit/k8s/deployment.test.ts +++ b/test/unit/k8s/deployment.test.ts @@ -5,15 +5,15 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import * as k8s from 'vscode-kubernetes-tools-api'; import { CliChannel } from '../../../src/cli'; import { DeploymentConfig } from '../../../src/k8s/deploymentConfig'; import { ChildProcessUtil } from '../../../src/util/childProcessUtil'; import { Progress } from '../../../src/util/progress'; -import { OpenShiftTerminalManager } from '../../../src/webview/openshift-terminal/openShiftTerminal'; import { VsCommandError } from '../../../src/vscommand'; +import { OpenShiftTerminalManager } from '../../../src/webview/openshift-terminal/openShiftTerminal'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/oc.test.ts b/test/unit/oc.test.ts index 2c509fe33..2fd0429fd 100644 --- a/test/unit/oc.test.ts +++ b/test/unit/oc.test.ts @@ -5,14 +5,14 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import { window } from 'vscode'; import { Oc } from '../../src/oc/ocWrapper'; import { Project } from '../../src/oc/project'; import { ToolsConfig } from '../../src/tools'; import { ChildProcessUtil } from '../../src/util/childProcessUtil'; -import { YamlFileCommands } from '../../src/yamlFileCommands'; import { getNamespaceKind } from '../../src/util/kubeUtils'; +import { YamlFileCommands } from '../../src/yamlFileCommands'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/odo/workspace.test.ts b/test/unit/odo/workspace.test.ts index 1d972f94b..a8e223e51 100644 --- a/test/unit/odo/workspace.test.ts +++ b/test/unit/odo/workspace.test.ts @@ -6,7 +6,7 @@ import * as chai from 'chai'; import * as path from 'path'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { ComponentDescription } from '../../../src/odo/componentTypeDescription'; import { Odo } from '../../../src/odo/odoWrapper'; diff --git a/test/unit/odoWrapper.test.ts b/test/unit/odoWrapper.test.ts index 1cac9c19a..a58b7396c 100644 --- a/test/unit/odoWrapper.test.ts +++ b/test/unit/odoWrapper.test.ts @@ -7,7 +7,7 @@ import * as chai from 'chai'; import { ExecException } from 'child_process'; import * as fs from 'fs'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import { window, workspace } from 'vscode'; import { CommandText } from '../../src/base/command'; import { CliChannel } from '../../src/cli'; diff --git a/test/unit/openshift/cluster.test.ts b/test/unit/openshift/cluster.test.ts index a68db0457..0fde11249 100644 --- a/test/unit/openshift/cluster.test.ts +++ b/test/unit/openshift/cluster.test.ts @@ -5,7 +5,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { CliChannel } from '../../../src/cli'; import { OpenShiftExplorer } from '../../../src/explorer'; diff --git a/test/unit/openshift/component.test.ts b/test/unit/openshift/component.test.ts index 50a63adc4..3dc9c9461 100644 --- a/test/unit/openshift/component.test.ts +++ b/test/unit/openshift/component.test.ts @@ -5,12 +5,13 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import * as chai from 'chai'; -import * as fs from 'fs-extra'; -import * as fsp from 'fs/promises'; +import { PathLike, RmOptions } from 'fs-extra'; +import * as fsp from '../../../src/util/utils'; +// import * as fsp from 'fs/promises'; import * as path from 'path'; -import * as pq from 'proxyquire'; +import pq from 'proxyquire'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { ComponentInfo, ComponentsTreeDataProvider } from '../../../src/componentsView'; import { DevfileInfo } from '../../../src/devfile-registry/devfileInfo'; @@ -198,9 +199,8 @@ suite('OpenShift/Component', function () { }); suite('deleteSourceFolder', function () { - let subSandbox: sinon.SinonSandbox; - let rmStub: sinon.SinonStub<[path: fs.PathLike, options?: fs.RmOptions], Promise>; + let rmStub: sinon.SinonStub<[path: PathLike, options?: RmOptions], Promise>; let showWarningMessageStub: sinon.SinonStub | sinon.SinonStub; const onDidFake = (listener): vscode.Disposable => { @@ -250,7 +250,6 @@ suite('OpenShift/Component', function () { } as ComponentWorkspaceFolder); expect(rmStub).to.not.be.called; }); - }); suite('describe', function() { diff --git a/test/unit/openshift/nameValidator.test.ts b/test/unit/openshift/nameValidator.test.ts index 456915497..13801c99e 100644 --- a/test/unit/openshift/nameValidator.test.ts +++ b/test/unit/openshift/nameValidator.test.ts @@ -5,7 +5,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as NameValidator from '../../../src/openshift/nameValidator'; import { wait } from '../../../src/util/async'; diff --git a/test/unit/openshift/project.test.ts b/test/unit/openshift/project.test.ts index 0f53ab0db..e9e6374ce 100644 --- a/test/unit/openshift/project.test.ts +++ b/test/unit/openshift/project.test.ts @@ -5,7 +5,7 @@ import * as chai from 'chai'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { CommandText } from '../../../src/base/command'; import { Oc } from '../../../src/oc/ocWrapper'; diff --git a/test/unit/tools.test.ts b/test/unit/tools.test.ts index 4b440fb8a..4c204247f 100644 --- a/test/unit/tools.test.ts +++ b/test/unit/tools.test.ts @@ -7,17 +7,16 @@ import * as assert from 'assert'; import * as chai from 'chai'; import * as fs from 'fs'; import * as fsex from 'fs-extra'; +import * as hasha from 'hasha'; +import * as path from 'path'; +import pq from 'proxyquire'; import * as shelljs from 'shelljs'; import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import * as vscode from 'vscode'; import { ChildProcessUtil, CliExitData } from '../../src/util/childProcessUtil'; import { Platform } from '../../src/util/platform'; -import * as hasha from 'hasha'; -import * as path from 'path'; -import * as pq from 'proxyquire'; -import * as sinonChai from 'sinon-chai'; - chai.use(sinonChai); suite('tools configuration', () => { diff --git a/test/unit/util/archive.test.ts b/test/unit/util/archive.test.ts index 58f0184ad..e6149f63a 100644 --- a/test/unit/util/archive.test.ts +++ b/test/unit/util/archive.test.ts @@ -4,14 +4,13 @@ *-----------------------------------------------------------------------------------------------*/ import * as chai from 'chai'; -import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; -import { Archive } from '../../../src/downloadUtil/archive'; - import * as fs from 'fs-extra'; import * as path from 'path'; -import * as targz from 'targz'; +import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import * as tmp from 'tmp'; +import { Archive } from '../../../src/downloadUtil/archive'; +import * as targz from '../../../src/util/utils'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/util/childProcessUtil.test.ts b/test/unit/util/childProcessUtil.test.ts index fe5d08bb5..28ab9e57b 100644 --- a/test/unit/util/childProcessUtil.test.ts +++ b/test/unit/util/childProcessUtil.test.ts @@ -3,12 +3,13 @@ * Licensed under the MIT License. See LICENSE file in the project root for license information. *-----------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; import * as chai from 'chai'; -import * as childProcess from 'child_process'; +import { ExecException, ExecOptions } from 'child_process'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; +import * as vscode from 'vscode'; import { ChildProcessUtil } from '../../../src/util/childProcessUtil'; +import * as childProcess from '../../../src/util/utils'; const {expect} = chai; chai.use(sinonChai); @@ -18,10 +19,10 @@ suite('ChildProcessUtil', function() { let execStub: sinon.SinonStub; const childProcessUtil = ChildProcessUtil.Instance; const command = 'command'; - const options: childProcess.ExecOptions = { cwd: 'cwd' }; + const options: ExecOptions = { cwd: 'cwd' }; const stdout = 'Standard output'; const stderr = 'Error output'; - const error: childProcess.ExecException = { + const error: ExecException = { message: 'Fatal Error', name: 'name' }; diff --git a/test/unit/util/credentialManager.test.ts b/test/unit/util/credentialManager.test.ts index 291366e63..4b1210134 100644 --- a/test/unit/util/credentialManager.test.ts +++ b/test/unit/util/credentialManager.test.ts @@ -4,8 +4,8 @@ *-----------------------------------------------------------------------------------------------*/ import * as chai from 'chai'; -import * as sinonChai from 'sinon-chai'; import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import { TokenStore } from '../../../src/util/credentialManager'; diff --git a/test/unit/util/download.test.ts b/test/unit/util/download.test.ts index f54890c92..c6021d90b 100644 --- a/test/unit/util/download.test.ts +++ b/test/unit/util/download.test.ts @@ -7,12 +7,12 @@ import * as chai from 'chai'; import { EventEmitter } from 'events'; import * as path from 'path'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import type { DownloadUtil as DownloadUtilType } from '../../../src/downloadUtil/download'; import { wait } from '../../../src/util/async'; import * as os from 'os'; -import * as pq from 'proxyquire'; +import pq from 'proxyquire'; const {expect} = chai; chai.use(sinonChai); diff --git a/test/unit/util/kubeUtils.test.ts b/test/unit/util/kubeUtils.test.ts index 5f59f01ec..4f83d76ac 100644 --- a/test/unit/util/kubeUtils.test.ts +++ b/test/unit/util/kubeUtils.test.ts @@ -6,7 +6,7 @@ import * as chai from 'chai'; import * as path from 'path'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import { KubeConfigUtils } from '../../../src/util/kubeUtils'; const {expect} = chai; diff --git a/test/unit/util/platform.test.ts b/test/unit/util/platform.test.ts index de63a2d03..ced4289ec 100644 --- a/test/unit/util/platform.test.ts +++ b/test/unit/util/platform.test.ts @@ -4,8 +4,8 @@ *-----------------------------------------------------------------------------------------------*/ import * as chai from 'chai'; -import * as sinonChai from 'sinon-chai'; import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; import { Platform } from '../../../src/util/platform'; const {expect} = chai; diff --git a/test/unit/util/progress.test.ts b/test/unit/util/progress.test.ts index 4319e0dfd..239ad3a3e 100644 --- a/test/unit/util/progress.test.ts +++ b/test/unit/util/progress.test.ts @@ -4,8 +4,8 @@ *-----------------------------------------------------------------------------------------------*/ import * as chai from 'chai'; -import * as sinonChai from 'sinon-chai'; import * as sinon from 'sinon'; +import sinonChai from 'sinon-chai'; chai.use(sinonChai); diff --git a/test/unit/util/watch.test.ts b/test/unit/util/watch.test.ts index 6b1bef341..6daa2e640 100644 --- a/test/unit/util/watch.test.ts +++ b/test/unit/util/watch.test.ts @@ -4,11 +4,11 @@ *-----------------------------------------------------------------------------------------------*/ import * as chai from 'chai'; -import * as fs from 'fs-extra'; import * as path from 'path'; import * as sinon from 'sinon'; -import * as sinonChai from 'sinon-chai'; +import sinonChai from 'sinon-chai'; import * as tmp from 'tmp'; +import * as fs from '../../../src/util/utils'; import { WatchUtil } from '../../../src/util/watch'; const {expect} = chai; diff --git a/test/vsix-test/index.ts b/test/vsix-test/index.ts index 1e0df8c66..25d9891d2 100644 --- a/test/vsix-test/index.ts +++ b/test/vsix-test/index.ts @@ -5,10 +5,9 @@ /* tslint:disable no-require-imports */ import { sync } from 'glob'; +import Mocha from 'mocha'; import * as paths from 'path'; -import * as Mocha from 'mocha'; - const config: Mocha.MochaOptions = { reporter: 'mocha-jenkins-reporter', ui: 'tdd', diff --git a/tsconfig.json b/tsconfig.json index c6f8d187d..f76371001 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,6 +13,7 @@ ], "sourceMap": true, "rootDir": ".", + "esModuleInterop": true, /* Strict Type-Checking Option */ "strict": false, /* enable all strict type-checking options */ /* Additional Checks */