From 1cb3f5deb3453fe05e9718f518e2b1760551d91a Mon Sep 17 00:00:00 2001 From: Kenta HATTORI Date: Sat, 2 Nov 2024 02:22:40 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E3=83=90=E3=82=A4=E3=83=8A=E3=83=AA?= =?UTF-8?q?=E5=9E=8B=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++-- package-lock.json | 90 +++++++++++++++- package.json | 4 +- src/commands/put.ts | 210 +++++++++++++++++++++----------------- src/const.ts | 1 + test/commands/put.test.ts | 7 +- test/data/logo.png | Bin 0 -> 23425 bytes 7 files changed, 221 insertions(+), 109 deletions(-) create mode 100755 test/data/logo.png diff --git a/README.md b/README.md index 959d9f0..64e2939 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ $ npm install -g ketool $ ketool COMMAND running command... $ ketool (--version) -ketool/0.0.0 linux-x64 node-v20.18.0 +ketool/0.1.1 linux-x64 node-v20.18.0 $ ketool --help [COMMAND] USAGE $ ketool COMMAND @@ -61,7 +61,7 @@ Create the directories, if they do not already exist. ``` USAGE - $ ketool mkdir DIRECTORY... [-u ] [-t ] [-k] [-c ] [-p] [-v] + $ ketool mkdir DIRECTORY... [-u ] [-k] [-t ] [-c ] [-p] [-v] ARGUMENTS DIRECTORY... path of the directory to be created @@ -81,7 +81,7 @@ EXAMPLES $ ketool mkdir ``` -_See code: [src/commands/mkdir.ts](https://github.com/fixpoint/ketool/blob/v0.0.0/src/commands/mkdir.ts)_ +_See code: [src/commands/mkdir.ts](https://github.com/fixpoint/ketool/blob/v0.1.1/src/commands/mkdir.ts)_ ## `ketool put SOURCE` @@ -89,7 +89,7 @@ put files or directories to Kompira server ``` USAGE - $ ketool put SOURCE... [-u ] [-t ] [-k] [-d ] [-c ] [-r] [-o] [-v] + $ ketool put SOURCE... [-u ] [-k] [-t ] [-c ] [-d ] [-o] [-r] [-v] ARGUMENTS SOURCE... source file or directory @@ -111,7 +111,7 @@ EXAMPLES $ ketool put ``` -_See code: [src/commands/put.ts](https://github.com/fixpoint/ketool/blob/v0.0.0/src/commands/put.ts)_ +_See code: [src/commands/put.ts](https://github.com/fixpoint/ketool/blob/v0.1.1/src/commands/put.ts)_ ## `ketool rm OBJECT` @@ -119,7 +119,7 @@ Remove the directories, if they are empty. ``` USAGE - $ ketool rm OBJECT... [-u ] [-t ] [-k] [-c ] [-f] [-r] [-v] + $ ketool rm OBJECT... [-u ] [-k] [-t ] [-c ] [-f] [-r] [-v] ARGUMENTS OBJECT... path of the object to be removed @@ -140,7 +140,7 @@ EXAMPLES $ ketool rm ``` -_See code: [src/commands/rm.ts](https://github.com/fixpoint/ketool/blob/v0.0.0/src/commands/rm.ts)_ +_See code: [src/commands/rm.ts](https://github.com/fixpoint/ketool/blob/v0.1.1/src/commands/rm.ts)_ ## `ketool rmdir DIRECTORY` @@ -148,7 +148,7 @@ Remove the directories, if they are empty. ``` USAGE - $ ketool rmdir DIRECTORY... [-u ] [-t ] [-k] [-c ] [-p] [-v] + $ ketool rmdir DIRECTORY... [-u ] [-k] [-t ] [-c ] [-p] [-v] ARGUMENTS DIRECTORY... path of the directory to be removed @@ -168,5 +168,5 @@ EXAMPLES $ ketool rmdir ``` -_See code: [src/commands/rmdir.ts](https://github.com/fixpoint/ketool/blob/v0.0.0/src/commands/rmdir.ts)_ +_See code: [src/commands/rmdir.ts](https://github.com/fixpoint/ketool/blob/v0.1.1/src/commands/rmdir.ts)_ diff --git a/package-lock.json b/package-lock.json index dd1035e..34e7698 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "ketool", - "version": "0.0.0", + "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ketool", - "version": "0.0.0", + "version": "0.1.1", "license": "MIT", "dependencies": { "@oclif/core": "^4", "@oclif/plugin-help": "^6", "config": "^3.3.12", + "istextorbinary": "^9.5.0", "mime-types": "^2.1.35", "typed-rest-client": "^2.1.0" }, @@ -23,6 +24,7 @@ "@oclif/test": "^4", "@types/chai": "^4", "@types/config": "^3.3.5", + "@types/istextorbinary": "^2.3.4", "@types/mime-types": "^2.1.4", "@types/mocha": "^10", "@types/node": "^18", @@ -2509,6 +2511,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/istextorbinary": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/istextorbinary/-/istextorbinary-2.3.4.tgz", + "integrity": "sha512-NFRKClvbYQTxT+SYgx0aNk1qKLIjz/hkJUzW4NXdvL60jQxD8BnLBwcrkjuhRKziGfQvOKyIQ0kMBR7dp2ZInw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -3128,6 +3140,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/binaryextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz", + "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/bowser": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", @@ -3877,6 +3904,21 @@ "tslib": "^2.0.3" } }, + "node_modules/editions": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-6.21.0.tgz", + "integrity": "sha512-ofkXJtn7z0urokN62DI3SBo/5xAtF0rR7tn+S/bSYV79Ka8pTajIIl+fFQ1q88DQEImymmo97M4azY3WX/nUdg==", + "license": "Artistic-2.0", + "dependencies": { + "version-range": "^4.13.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -5992,6 +6034,23 @@ "dev": true, "license": "MIT" }, + "node_modules/istextorbinary": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz", + "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==", + "license": "Artistic-2.0", + "dependencies": { + "binaryextensions": "^6.11.0", + "editions": "^6.21.0", + "textextensions": "^6.11.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -7937,6 +7996,21 @@ "dev": true, "license": "MIT" }, + "node_modules/textextensions": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz", + "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==", + "license": "Artistic-2.0", + "dependencies": { + "editions": "^6.21.0" + }, + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/tiny-jsonc": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tiny-jsonc/-/tiny-jsonc-1.0.1.tgz", @@ -8317,6 +8391,18 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/version-range": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.14.0.tgz", + "integrity": "sha512-gjb0ARm9qlcBAonU4zPwkl9ecKkas+tC2CGwFfptTCWWIVTWY1YUbT2zZKsOAF1jR/tNxxyLwwG0cb42XlYcTg==", + "license": "Artistic-2.0", + "engines": { + "node": ">=4" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", diff --git a/package.json b/package.json index c3267de..bd85b06 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "ketool", "description": "Development tools for Kompira Enterprise", - "version": "0.1.0", + "version": "0.1.1", "author": "Kenta HATTORI", "bin": { "ketool": "./bin/run.js" @@ -11,6 +11,7 @@ "@oclif/core": "^4", "@oclif/plugin-help": "^6", "config": "^3.3.12", + "istextorbinary": "^9.5.0", "mime-types": "^2.1.35", "typed-rest-client": "^2.1.0" }, @@ -19,6 +20,7 @@ "@oclif/test": "^4", "@types/chai": "^4", "@types/config": "^3.3.5", + "@types/istextorbinary": "^2.3.4", "@types/mime-types": "^2.1.4", "@types/mocha": "^10", "@types/node": "^18", diff --git a/src/commands/put.ts b/src/commands/put.ts index 03cf434..f62e99a 100644 --- a/src/commands/put.ts +++ b/src/commands/put.ts @@ -1,13 +1,13 @@ import {Args, Command, Flags} from '@oclif/core' +import {isText} from 'istextorbinary' import {lookup as mimeLookup} from 'mime-types' -import assert from 'node:assert' import fs from 'node:fs/promises' import path from 'node:path' import * as KeClient from '../client.js' import {checkCwd, checkInsecure} from '../common.js' import Config from '../config.js' -import {DIRECTORY_TYPE, TEXT_TYPE} from '../const.js' +import {BIN_TYPE, DIRECTORY_TYPE, TEXT_TYPE} from '../const.js' import {common as commonFlags} from '../flags.js' @@ -55,138 +55,156 @@ export default class Put extends Command { this.conf = new Config(flags) checkInsecure(flags.insecure) const cwd = await checkCwd(this.conf, flags.cwd) - let dest = path.normalize(path.join(cwd, flags.dest || '')) - const sources = await this.checkSources(argv as string[], path.resolve('.')) + const destPath = path.normalize(path.join(cwd, flags.dest || '')) + const sources = await this._checkSources(argv as string[], path.resolve('.')) if (sources.length === 0) { return } - let target: KeClient.ObjectResponse | null | string = await KeClient.get(this.conf, dest) + const destObj = await KeClient.get(this.conf, destPath) if (argv.length === 1) { const source = sources[0] - if (!target) { - ({base: target, dir: dest} = path.parse(dest)) - } else if (target.type_object === DIRECTORY_TYPE) { - target = await KeClient.get(this.conf, path.join(target.abspath, source.name)) || source.name - } else { - dest = path.dirname(dest) + if (destObj === null) { + // destObj が存在しない場合、親ディレクトリが存在するかチェック + const {dir, name} = path.parse(destPath) + const parentDir = await KeClient.get(this.conf, dir) + if (parentDir === null || parentDir.type_object !== DIRECTORY_TYPE) { + this.error(`failed to put '${destPath}': no such object or directory`) + } + + await this.putObj(source, parentDir, name, flags) + } else if (destObj.type_object === DIRECTORY_TYPE) { + await this.putObj(source, destObj, source.name, flags) } - - await this.putObject(dest, source, target, flags) } else { - if (target === null) { - // target が存在しない場合はコピーできない - throw new Error(`target '${dest}' is not found`) - } else if (target!.type_object !== DIRECTORY_TYPE) { - // コピー先がディレクトリ以外の場合はコピーできない - throw new Error(`target '${dest}' is not a directory`) + if (destObj === null || destObj.type_object !== DIRECTORY_TYPE) { + // source が複数で destObj が存在しない場合はコピーできない + this.error(`failed to put '${destPath}': no such object or directory`) } - // dest 配下にsources をコピー + // destObj/ 配下にsources をコピー await Promise.all( - sources.map(async (src) => { - const target = await KeClient.get(this.conf, path.join(dest, src.name)) || src.name - await this.putObject(dest, src, target, flags) - }) + sources.map((src) => this.putObj(src, destObj, src.name, flags)) ) } } - private async checkSources(sources: string[], cwd: string): Promise { + private async _checkSources(sources: string[], cwd: string): Promise { const srcDescs: SourceDesc[] = [] await Promise.all( sources.map(async (src) => { - const source = path.normalize(path.join(cwd, src)) - try { - const stat = await fs.stat(source) - const {ext, name} = path.parse(source) - if (stat.isDirectory()) { - srcDescs.push({ext, name, path: source, type: 'dir'}) - } else if (stat.isFile()) { - srcDescs.push({ext, name, path: source, type: 'file'}) - } else { - this.log(`put: invalid source '${source} type: should be file or directory`) - } - } catch (error) { - if (error instanceof Error) { - this.log(`put: cannot stat '${source}': ${error.message}`) - } else { - this.log(`put: cannot stat '${source}': Unknown error`) - } - } + const source = path.normalize(path.join(cwd, src)) + try { + const stat = await fs.stat(source) + const {ext, name} = path.parse(source) + if (stat.isDirectory()) { + srcDescs.push({ext, name, path: source, type: 'dir'}) + } else if (stat.isFile()) { + srcDescs.push({ext, name, path: source, type: 'file'}) + } else { + this.log(`put: invalid source '${source} type: should be file or directory`) + } + } catch (error) { + if (error instanceof Error) { + this.log(`put: cannot stat '${source}': ${error.message}`) + } else { + this.log(`put: cannot stat '${source}': Unknown error`) + } + } }) ) return srcDescs } - private async putObject(dest: string, source: SourceDesc, target: KeClient.ObjectResponse | string, options: PutOptions) { - let destDir = null - - if (target instanceof Object) { - if (target.type_object === DIRECTORY_TYPE && source.type === 'dir') { - destDir = target.abspath - } else if (target.type_object === TEXT_TYPE && source.type === 'file') { - if (options.overwrite) { - const text = await fs.readFile(source.path, { encoding: 'utf8' }) - const data = { - 'fields': { - 'contentType': mimeLookup(source.path), - 'ext': source.ext.replace(/^\.+/, ''), - text, - } - } - const result = await KeClient.update(this.conf, target.abspath, data) - if (options.verbose) { - this.log(`updated text: ${result.abspath}`) - } - } - } else { - this.log(`put: cannot overwrite ${target.abspath}: type '${target.type_object}' mismatch`) - return - } - } else if (source.type === 'dir') { - const data = { - 'name': target as string, - 'type_object': DIRECTORY_TYPE, + private async _createObj(source: SourceDesc, destDirObj: KeClient.ObjectResponse, name: string, verbose?: boolean) { + let fields = {} + let typeObject = '' + if (source.type === 'dir') { + // ディレクトリを新規作成して、再帰的に処理を続ける + typeObject = DIRECTORY_TYPE + } else if (source.type === 'file') { + // ソースの種類に応じてオブジェクトを新規作成する + const dataFields = { + 'contentType': mimeLookup(source.path), + 'ext': source.ext.replace(/^\.+/, ''), } - const result = await KeClient.create(this.conf, dest, data) - if (options.verbose) { - this.log(`created directory: ${result.abspath}`) + const buf = await fs.readFile(source.path) + if (isText(source.path, buf)) { + fields = {...dataFields, text: buf} + typeObject = TEXT_TYPE + } else { + fields = {...dataFields, data: buf.toString('base64')} + typeObject = BIN_TYPE } + } - destDir = result.abspath - } else if (source.type === 'file') { - const text = await fs.readFile(source.path, { encoding: 'utf8' }) - const data = { - 'fields': { - 'contentType': mimeLookup(source.path), - 'ext': source.ext.replace(/^\.+/, ''), - text, - }, - 'name': target as string, - 'type_object': TEXT_TYPE, + const result = await KeClient.create(this.conf, destDirObj.abspath, {fields, name, 'type_object': typeObject}) + if (verbose) { + this.log(`created object (${result.type_object}): ${result.abspath}`) + } + + return result + } + + private async _updateObj(source: SourceDesc, destObj: KeClient.ObjectResponse, verbose?: boolean) { + const dataFields = { + contentType: mimeLookup(source.path), + ext: source.ext.replace(/^\.+/, '') + } + const buf = await fs.readFile(source.path) + const istext = isText(source.path, buf) + let data = {} + if (istext && destObj.type_object === TEXT_TYPE) { + data = { + 'fields': {...dataFields, text: buf}, } - const result = await KeClient.create(this.conf, dest, data) - if (options.verbose) { - this.log(`created text: ${result.abspath}`) + } else if (!istext && destObj.type_object === BIN_TYPE) { + data = { + 'fields': {...dataFields, data: buf.toString('base64')}, } } else { - assert(false, `invalid source.type: ${source.type}`) + this.log(`put: cannot overwrite ${destObj.abspath}: type '${destObj.type_object}' mismatch`) + return + } + + await KeClient.update(this.conf, destObj.abspath, data) + if (verbose) { + this.log(`updated object (${destObj.type_object}): ${destObj.abspath}`) + } + } + + private async putObj(source: SourceDesc, destDir: KeClient.ObjectResponse, name: string, options: PutOptions) { + // + // putObj: + // source からファイルやディレクトリを読み込み、dest 配下/に target オブジェクトとして配置する + // + // [parameters] + // - source: オブジェクトのデータソース + // - destDir: オブジェクトを配置する先のディレクトリオブジェクト + // - name: 新規作成時のオブジェクト名称 + // - options: Putオプション + // + let destObj = await KeClient.get(this.conf, path.join(destDir.abspath, name)) + if (destObj === null) { + destObj = await this._createObj(source, destDir, name, options.verbose) + } else if (destObj && options.overwrite && source.type === 'file' && [BIN_TYPE, TEXT_TYPE].includes(destObj.type_object)) { + await this._updateObj(source, destObj, options.verbose) + } else if (destObj && options.overwrite && !(source.type === 'dir' && destObj.type_object === DIRECTORY_TYPE)) { + // 配置先オブジェクトとデータソースの種類がミスマッチの場合 + this.log(`put: cannot overwrite ${destObj.abspath}: type '${destObj.type_object}' mismatch`) + return } - if (options.recursive && destDir) { + if (options.recursive && destObj.type_object === DIRECTORY_TYPE) { // ファイル一覧を取得 const dirs = await fs.readdir(source.path) - const sources = await this.checkSources(dirs, source.path) + const sources = await this._checkSources(dirs, source.path) await Promise.all( - sources.map(async (src) => { - const target = await KeClient.get(this.conf, path.join(destDir, src.name)) || src.name - await this.putObject(destDir, src, target, options) - }) + sources.map((src) => this.putObj(src, destObj, src.name, options)) ) } } diff --git a/src/const.ts b/src/const.ts index 85a196b..bb847f0 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1,2 +1,3 @@ +export const BIN_TYPE = '/system/types/Binary' export const DIRECTORY_TYPE = '/system/types/Directory' export const TEXT_TYPE = '/system/types/Text' diff --git a/test/commands/put.test.ts b/test/commands/put.test.ts index cd9d647..50d8754 100644 --- a/test/commands/put.test.ts +++ b/test/commands/put.test.ts @@ -22,6 +22,11 @@ describe('put', () => { it('runs put ./test/data/test.txt --cwd /root/testdir -kv', async () => { const {stdout} = await runCommand('put ./test/data/test.txt --cwd /root/testdir -kv') - expect(stdout).to.contain('created text: /root/testdir/test') + expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/test') + }) + + it('runs put ./test/data/logo.png --cwd /root/testdir -kv', async () => { + const {stdout} = await runCommand('put ./test/data/logo.png --cwd /root/testdir -kv') + expect(stdout).to.contain('created object (/system/types/Binary): /root/testdir/logo') }) }) diff --git a/test/data/logo.png b/test/data/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..c45ad65b49fadd591f185ad9ccf6d9b57b8ccf8d GIT binary patch literal 23425 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%0D^XGqP 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�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 Date: Sat, 2 Nov 2024 06:58:39 +0900 Subject: [PATCH 2/5] Add: ls command --- src/client.ts | 4 +- src/commands/ls.ts | 86 ++++++++++++++++++++++++++++++++++++++++ src/commands/rmdir.ts | 2 +- test/commands/ls.test.ts | 17 ++++++++ 4 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 src/commands/ls.ts create mode 100644 test/commands/ls.test.ts diff --git a/src/client.ts b/src/client.ts index 5c926bf..78305e8 100644 --- a/src/client.ts +++ b/src/client.ts @@ -54,9 +54,9 @@ export async function get(config: Config, path: string): Promise { +export async function getChildren(config: Config, dirPath: string): Promise { const rest: rm.RestClient = new rm.RestClient('ke-client', config.baseurl) - const resp: rm.IRestResponse = await rest.get(path, requestOpts(config.token)) + const resp: rm.IRestResponse = await rest.get(`${dirPath}.children`, requestOpts(config.token)) if (resp.statusCode === 404) { return null } diff --git a/src/commands/ls.ts b/src/commands/ls.ts new file mode 100644 index 0000000..ad12c9b --- /dev/null +++ b/src/commands/ls.ts @@ -0,0 +1,86 @@ +import {Args, Command, Flags} from '@oclif/core' +import path from 'node:path' + +import * as KeClient from '../client.js' +import {checkCwd, checkInsecure} from '../common.js' +import Config from '../config.js' +import {DIRECTORY_TYPE} from '../const.js' +import {common as commonFlags} from '../flags.js' + + +export default class Ls extends Command { + static override args = { + object: Args.string({description: 'file to read'}), + } + + static override description = 'list information about the OBJECTs.' + + static override examples = [ + '<%= config.bin %> <%= command.id %>', + ] + + static override flags = { + ...commonFlags, + // flag with a value (-c, --cwd=VALUE) + cwd: Flags.string({char: 'c', description: 'set current working directory to VALUE'}), + long: Flags.boolean({char: 'l', description: 'use a long listing format'}), + } + + static strict = false + + private conf!: Config + + public async run(): Promise { + const {argv, flags} = await this.parse(Ls) + this.conf = new Config(flags) + checkInsecure(flags.insecure) + const cwd = await checkCwd(this.conf, flags.cwd) + + if (argv.length === 0) { + argv.push('.') + } + + const withHeader = argv.length > 1 + const results = await Promise.all( + argv.map((arg) => this.listObj(path.resolve(cwd, arg as string), withHeader, flags.long)) + ) + if (results.includes(false)) { + this.exit(1) + } + } + + private _printObj(target: KeClient.ObjectResponse, indent: string, longFormat?: boolean) { + if (longFormat) { + const {name} = path.parse(target.abspath) + this.log(`${indent}${target.owner} ${target.updated} ${name}:${target.type_object}`) + } else { + const {name} = path.parse(target.abspath) + this.log(`${indent}${name}`) + } + } + + private async listObj(targetPath: string, withHeader: boolean, longFormat?: boolean) { + const target = await KeClient.get(this.conf, targetPath) + if (target === null) { + this.warn(`failed to get '${targetPath}': no such object or directory`) + return false + } + + if (target.type_object === DIRECTORY_TYPE) { + const resp = await KeClient.getChildren(this.conf, targetPath) + let indent = '' + if (withHeader) { + this.log(`${target.abspath}:`) + indent = ' ' + } + + for (const child of resp!.results) { + this._printObj(child, indent, longFormat) + } + } else { + this._printObj(target, '', longFormat) + } + + return true + } +} diff --git a/src/commands/rmdir.ts b/src/commands/rmdir.ts index 7fc40ff..2305fa6 100644 --- a/src/commands/rmdir.ts +++ b/src/commands/rmdir.ts @@ -66,7 +66,7 @@ export default class Rmdir extends Command { } // ディレクトリが空かどうかチェックする - const results = await KeClient.getAll(this.conf, `${targetDir}.children`) + const results = await KeClient.getChildren(this.conf, targetDir) if (results!.count > 0) { this.warn(`failed to remove directory: '${targetDir}' is not empty`) return diff --git a/test/commands/ls.test.ts b/test/commands/ls.test.ts new file mode 100644 index 0000000..f46e85e --- /dev/null +++ b/test/commands/ls.test.ts @@ -0,0 +1,17 @@ +import {runCommand} from '@oclif/test' +import {expect} from 'chai' + +describe('ls', () => { + before(async () => { + await runCommand('rm testdir --cwd /root -rfk') + await runCommand('mkdir testdir --cwd /root -k') + }) + after(async () => { + await runCommand('rm testdir --cwd /root -rfk') + }) + + it('runs ls --help', async () => { + const {stdout} = await runCommand('ls --help') + expect(stdout).to.contain('USAGE') + }) +}) From ff6e0d1cb4bff8fd00d043765d0554442ba9a776 Mon Sep 17 00:00:00 2001 From: Kenta HATTORI Date: Sat, 2 Nov 2024 08:20:22 +0900 Subject: [PATCH 3/5] Update README.md --- README.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/README.md b/README.md index 64e2939..c5db835 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ USAGE # Commands * [`ketool help [COMMAND]`](#ketool-help-command) +* [`ketool ls [OBJECT]`](#ketool-ls-object) * [`ketool mkdir DIRECTORY`](#ketool-mkdir-directory) * [`ketool put SOURCE`](#ketool-put-source) * [`ketool rm OBJECT`](#ketool-rm-object) @@ -55,6 +56,33 @@ DESCRIPTION _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.15/src/commands/help.ts)_ +## `ketool ls [OBJECT]` + +list information about the OBJECTs. + +``` +USAGE + $ ketool ls [OBJECT...] [-u ] [-k] [-t ] [-c ] [-l] + +ARGUMENTS + OBJECT... file to read + +FLAGS + -c, --cwd= set current working directory to VALUE + -k, --insecure allow insecure SSL connection + -l, --long use a long listing format + -t, --token= API access token of the Kompira Enterprise server + -u, --baseurl= base URL of the Kompira Enterprise server + +DESCRIPTION + list information about the OBJECTs. + +EXAMPLES + $ ketool ls +``` + +_See code: [src/commands/ls.ts](https://github.com/fixpoint/ketool/blob/v0.1.1/src/commands/ls.ts)_ + ## `ketool mkdir DIRECTORY` Create the directories, if they do not already exist. From 3d4957b74e42f02f551db909d3ef0d79ed3a723a Mon Sep 17 00:00:00 2001 From: Kenta HATTORI Date: Sat, 2 Nov 2024 22:27:24 +0900 Subject: [PATCH 4/5] Add test cases --- .gitignore | 1 + package-lock.json | 2898 ++++++++++++++++++++++++----------- package.json | 3 +- src/commands/ls.ts | 11 +- src/commands/mkdir.ts | 4 +- src/commands/put.ts | 150 +- src/commands/rm.ts | 11 +- src/commands/rmdir.ts | 11 +- src/config.ts | 2 +- src/const.ts | 1 + test/commands/ls.test.ts | 51 +- test/commands/mkdir.test.ts | 18 + test/commands/put.test.ts | 92 +- test/commands/rm.test.ts | 12 + test/commands/rmdir.test.ts | 31 + test/data/test2.txt | 1 + 16 files changed, 2298 insertions(+), 999 deletions(-) create mode 100644 test/data/test2.txt diff --git a/.gitignore b/.gitignore index e5f8e4d..dd6d636 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /node_modules oclif.manifest.json *.tsbuildinfo +coverage yarn.lock diff --git a/package-lock.json b/package-lock.json index 34e7698..8ccd4bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "@types/mime-types": "^2.1.4", "@types/mocha": "^10", "@types/node": "^18", + "c8": "^10.1.2", "chai": "^4", "eslint": "^8", "eslint-config-oclif": "^5", @@ -262,55 +263,55 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.670.0.tgz", - "integrity": "sha512-vIrbzV8Sg2R82Fa5WV1TqNTwy75gRUyPm3KEpOrMQ7SCFw0nHVOClmFmXALE39QldClDd07+rVDYhqDSb/BLsw==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.687.0.tgz", + "integrity": "sha512-50FX2Ej+iITUQhJ3p+0ipYvgvpvvaJ4nJEesPOX9ckbftrSJH7gGw6xlj+ujFI3KZdnDfrRSlwLU2aWLieyCVw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.670.0", - "@aws-sdk/client-sts": "3.670.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/credential-provider-node": "3.670.0", - "@aws-sdk/middleware-host-header": "3.667.0", - "@aws-sdk/middleware-logger": "3.667.0", - "@aws-sdk/middleware-recursion-detection": "3.667.0", - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/region-config-resolver": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@aws-sdk/util-user-agent-browser": "3.670.0", - "@aws-sdk/util-user-agent-node": "3.669.0", - "@aws-sdk/xml-builder": "3.662.0", - "@smithy/config-resolver": "^3.0.9", - "@smithy/core": "^2.4.8", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/hash-node": "^3.0.7", - "@smithy/invalid-dependency": "^3.0.7", - "@smithy/middleware-content-length": "^3.0.9", - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@aws-sdk/client-sso-oidc": "3.687.0", + "@aws-sdk/client-sts": "3.687.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/credential-provider-node": "3.687.0", + "@aws-sdk/middleware-host-header": "3.686.0", + "@aws-sdk/middleware-logger": "3.686.0", + "@aws-sdk/middleware-recursion-detection": "3.686.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/region-config-resolver": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@aws-sdk/util-user-agent-browser": "3.686.0", + "@aws-sdk/util-user-agent-node": "3.687.0", + "@aws-sdk/xml-builder": "3.686.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/core": "^2.5.1", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/hash-node": "^3.0.8", + "@smithy/invalid-dependency": "^3.0.8", + "@smithy/middleware-content-length": "^3.0.10", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-retry": "^3.0.25", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", - "@smithy/util-stream": "^3.1.9", + "@smithy/util-defaults-mode-browser": "^3.0.25", + "@smithy/util-defaults-mode-node": "^3.0.25", + "@smithy/util-endpoints": "^2.1.4", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.6", + "@smithy/util-waiter": "^3.1.7", "tslib": "^2.6.2" }, "engines": { @@ -318,69 +319,69 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.670.0.tgz", - "integrity": "sha512-8Pwu1K+PgbYpXDaGKNy5hEbRH5FXHlfXJOhtV4oEDroL7ngix3ZUVWN9oIVVSDK02y1oQS1jCSEGUiUiauzb0g==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.687.0.tgz", + "integrity": "sha512-2IoaVAd7HCIDhfeTTrk8CAosEVqnQig47Tra2uOBEyzpcCFQLmcY57/sbHCpJ3ntnU8see53q0bQ+fdew4MGLA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.670.0", - "@aws-sdk/client-sts": "3.670.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/credential-provider-node": "3.670.0", - "@aws-sdk/middleware-bucket-endpoint": "3.667.0", - "@aws-sdk/middleware-expect-continue": "3.667.0", - "@aws-sdk/middleware-flexible-checksums": "3.669.0", - "@aws-sdk/middleware-host-header": "3.667.0", - "@aws-sdk/middleware-location-constraint": "3.667.0", - "@aws-sdk/middleware-logger": "3.667.0", - "@aws-sdk/middleware-recursion-detection": "3.667.0", - "@aws-sdk/middleware-sdk-s3": "3.669.0", - "@aws-sdk/middleware-ssec": "3.667.0", - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/region-config-resolver": "3.667.0", - "@aws-sdk/signature-v4-multi-region": "3.669.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@aws-sdk/util-user-agent-browser": "3.670.0", - "@aws-sdk/util-user-agent-node": "3.669.0", - "@aws-sdk/xml-builder": "3.662.0", - "@smithy/config-resolver": "^3.0.9", - "@smithy/core": "^2.4.8", - "@smithy/eventstream-serde-browser": "^3.0.10", - "@smithy/eventstream-serde-config-resolver": "^3.0.7", - "@smithy/eventstream-serde-node": "^3.0.9", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/hash-blob-browser": "^3.1.6", - "@smithy/hash-node": "^3.0.7", - "@smithy/hash-stream-node": "^3.1.6", - "@smithy/invalid-dependency": "^3.0.7", - "@smithy/md5-js": "^3.0.7", - "@smithy/middleware-content-length": "^3.0.9", - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@aws-sdk/client-sso-oidc": "3.687.0", + "@aws-sdk/client-sts": "3.687.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/credential-provider-node": "3.687.0", + "@aws-sdk/middleware-bucket-endpoint": "3.686.0", + "@aws-sdk/middleware-expect-continue": "3.686.0", + "@aws-sdk/middleware-flexible-checksums": "3.687.0", + "@aws-sdk/middleware-host-header": "3.686.0", + "@aws-sdk/middleware-location-constraint": "3.686.0", + "@aws-sdk/middleware-logger": "3.686.0", + "@aws-sdk/middleware-recursion-detection": "3.686.0", + "@aws-sdk/middleware-sdk-s3": "3.687.0", + "@aws-sdk/middleware-ssec": "3.686.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/region-config-resolver": "3.686.0", + "@aws-sdk/signature-v4-multi-region": "3.687.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@aws-sdk/util-user-agent-browser": "3.686.0", + "@aws-sdk/util-user-agent-node": "3.687.0", + "@aws-sdk/xml-builder": "3.686.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/core": "^2.5.1", + "@smithy/eventstream-serde-browser": "^3.0.11", + "@smithy/eventstream-serde-config-resolver": "^3.0.8", + "@smithy/eventstream-serde-node": "^3.0.10", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/hash-blob-browser": "^3.1.7", + "@smithy/hash-node": "^3.0.8", + "@smithy/hash-stream-node": "^3.1.7", + "@smithy/invalid-dependency": "^3.0.8", + "@smithy/md5-js": "^3.0.8", + "@smithy/middleware-content-length": "^3.0.10", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-retry": "^3.0.25", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", - "@smithy/util-stream": "^3.1.9", + "@smithy/util-defaults-mode-browser": "^3.0.25", + "@smithy/util-defaults-mode-node": "^3.0.25", + "@smithy/util-endpoints": "^2.1.4", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.6", + "@smithy/util-waiter": "^3.1.7", "tslib": "^2.6.2" }, "engines": { @@ -388,48 +389,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.670.0.tgz", - "integrity": "sha512-J+oz6uSsDvk4pimMDnKJb1wsV216zTrejvMTIL4RhUD1QPIVVOpteTdUShcjZUIZnkcJZGI+cym/SFK0kuzTpg==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.687.0.tgz", + "integrity": "sha512-dfj0y9fQyX4kFill/ZG0BqBTLQILKlL7+O5M4F9xlsh2WNuV2St6WtcOg14Y1j5UODPJiJs//pO+mD1lihT5Kw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/middleware-host-header": "3.667.0", - "@aws-sdk/middleware-logger": "3.667.0", - "@aws-sdk/middleware-recursion-detection": "3.667.0", - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/region-config-resolver": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@aws-sdk/util-user-agent-browser": "3.670.0", - "@aws-sdk/util-user-agent-node": "3.669.0", - "@smithy/config-resolver": "^3.0.9", - "@smithy/core": "^2.4.8", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/hash-node": "^3.0.7", - "@smithy/invalid-dependency": "^3.0.7", - "@smithy/middleware-content-length": "^3.0.9", - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/middleware-host-header": "3.686.0", + "@aws-sdk/middleware-logger": "3.686.0", + "@aws-sdk/middleware-recursion-detection": "3.686.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/region-config-resolver": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@aws-sdk/util-user-agent-browser": "3.686.0", + "@aws-sdk/util-user-agent-node": "3.687.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/core": "^2.5.1", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/hash-node": "^3.0.8", + "@smithy/invalid-dependency": "^3.0.8", + "@smithy/middleware-content-length": "^3.0.10", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-retry": "^3.0.25", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.25", + "@smithy/util-defaults-mode-node": "^3.0.25", + "@smithy/util-endpoints": "^2.1.4", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -438,49 +439,49 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.670.0.tgz", - "integrity": "sha512-4qDK2L36Q4J1lfemaHHd9ZxqKRaos3STp44qPAHf/8QyX6Uk5sXgZNVO2yWM7SIEtVKwwBh/fZAsdBkGPBfZcw==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.687.0.tgz", + "integrity": "sha512-Rdd8kLeTeh+L5ZuG4WQnWgYgdv7NorytKdZsGjiag1D8Wv3PcJvPqqWdgnI0Og717BSXVoaTYaN34FyqFYSx6Q==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/credential-provider-node": "3.670.0", - "@aws-sdk/middleware-host-header": "3.667.0", - "@aws-sdk/middleware-logger": "3.667.0", - "@aws-sdk/middleware-recursion-detection": "3.667.0", - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/region-config-resolver": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@aws-sdk/util-user-agent-browser": "3.670.0", - "@aws-sdk/util-user-agent-node": "3.669.0", - "@smithy/config-resolver": "^3.0.9", - "@smithy/core": "^2.4.8", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/hash-node": "^3.0.7", - "@smithy/invalid-dependency": "^3.0.7", - "@smithy/middleware-content-length": "^3.0.9", - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/credential-provider-node": "3.687.0", + "@aws-sdk/middleware-host-header": "3.686.0", + "@aws-sdk/middleware-logger": "3.686.0", + "@aws-sdk/middleware-recursion-detection": "3.686.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/region-config-resolver": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@aws-sdk/util-user-agent-browser": "3.686.0", + "@aws-sdk/util-user-agent-node": "3.687.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/core": "^2.5.1", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/hash-node": "^3.0.8", + "@smithy/invalid-dependency": "^3.0.8", + "@smithy/middleware-content-length": "^3.0.10", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-retry": "^3.0.25", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.25", + "@smithy/util-defaults-mode-node": "^3.0.25", + "@smithy/util-endpoints": "^2.1.4", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -488,54 +489,54 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.670.0" + "@aws-sdk/client-sts": "^3.687.0" } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.670.0.tgz", - "integrity": "sha512-bExrNo8ZVWorS3cjMZKQnA2HWqDmAzcZoSN/cPVoPFNkHwdl1lzPxvcLzmhpIr48JHgKfybBjrbluDZfIYeEog==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.687.0.tgz", + "integrity": "sha512-SQjDH8O4XCTtouuCVYggB0cCCrIaTzUZIkgJUpOsIEJBLlTbNOb/BZqUShAQw2o9vxr2rCeOGjAQOYPysW/Pmg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.670.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/credential-provider-node": "3.670.0", - "@aws-sdk/middleware-host-header": "3.667.0", - "@aws-sdk/middleware-logger": "3.667.0", - "@aws-sdk/middleware-recursion-detection": "3.667.0", - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/region-config-resolver": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@aws-sdk/util-user-agent-browser": "3.670.0", - "@aws-sdk/util-user-agent-node": "3.669.0", - "@smithy/config-resolver": "^3.0.9", - "@smithy/core": "^2.4.8", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/hash-node": "^3.0.7", - "@smithy/invalid-dependency": "^3.0.7", - "@smithy/middleware-content-length": "^3.0.9", - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@aws-sdk/client-sso-oidc": "3.687.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/credential-provider-node": "3.687.0", + "@aws-sdk/middleware-host-header": "3.686.0", + "@aws-sdk/middleware-logger": "3.686.0", + "@aws-sdk/middleware-recursion-detection": "3.686.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/region-config-resolver": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@aws-sdk/util-user-agent-browser": "3.686.0", + "@aws-sdk/util-user-agent-node": "3.687.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/core": "^2.5.1", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/hash-node": "^3.0.8", + "@smithy/invalid-dependency": "^3.0.8", + "@smithy/middleware-content-length": "^3.0.10", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-retry": "^3.0.25", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "@smithy/util-base64": "^3.0.0", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.23", - "@smithy/util-defaults-mode-node": "^3.0.23", - "@smithy/util-endpoints": "^2.1.3", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/util-defaults-mode-browser": "^3.0.25", + "@smithy/util-defaults-mode-node": "^3.0.25", + "@smithy/util-endpoints": "^2.1.4", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -544,21 +545,21 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.667.0.tgz", - "integrity": "sha512-pMcDVI7Tmdsc8R3sDv0Omj/4iRParGY+uJtAfF669WnZfDfaBQaix2Mq7+Mu08vdjqO9K3gicFvjk9S1VLmOKA==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.686.0.tgz", + "integrity": "sha512-Xt3DV4DnAT3v2WURwzTxWQK34Ew+iiLzoUoguvLaZrVMFOqMMrwVjP+sizqIaHp1j7rGmFcN5I8saXnsDLuQLA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/core": "^2.4.8", - "@smithy/node-config-provider": "^3.1.8", + "@aws-sdk/types": "3.686.0", + "@smithy/core": "^2.5.1", + "@smithy/node-config-provider": "^3.1.9", "@smithy/property-provider": "^3.1.7", - "@smithy/protocol-http": "^4.1.4", + "@smithy/protocol-http": "^4.1.5", "@smithy/signature-v4": "^4.2.0", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/util-middleware": "^3.0.8", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -567,16 +568,16 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.667.0.tgz", - "integrity": "sha512-zZbrkkaPc54WXm+QAnpuv0LPNfsts0HPPd+oCECGs7IQRaFsGj187cwvPg9RMWDFZqpm64MdBDoA8OQHsqzYCw==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.686.0.tgz", + "integrity": "sha512-osD7lPO8OREkgxPiTWmA1i6XEmOth1uW9HWWj/+A2YGCj1G/t2sHu931w4Qj9NWHYZtbTTXQYVRg+TErALV7nQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -584,21 +585,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.667.0.tgz", - "integrity": "sha512-sjtybFfERZWiqTY7fswBxKQLvUkiCucOWyqh3IaPo/4nE1PXRnaZCVG0+kRBPrYIxWqiVwytvZzMJy8sVZcG0A==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.686.0.tgz", + "integrity": "sha512-xyGAD/f3vR/wssUiZrNFWQWXZvI4zRm2wpHhoHA1cC2fbRMNFYtFn365yw6dU7l00ZLcdFB1H119AYIUZS7xbw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/node-http-handler": "^3.2.4", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/node-http-handler": "^3.2.5", "@smithy/property-provider": "^3.1.7", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/util-stream": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/util-stream": "^3.2.1", "tslib": "^2.6.2" }, "engines": { @@ -606,50 +607,50 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.670.0.tgz", - "integrity": "sha512-TB1gacUj75leaTt2JsCTzygDSIk4ksv9uZoR7VenlgFPRktyOeT+fapwIVBeB2Qg7b9uxAY2K5XkKstDZyBEEw==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.687.0.tgz", + "integrity": "sha512-6d5ZJeZch+ZosJccksN0PuXv7OSnYEmanGCnbhUqmUSz9uaVX6knZZfHCZJRgNcfSqg9QC0zsFA/51W5HCUqSQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/credential-provider-env": "3.667.0", - "@aws-sdk/credential-provider-http": "3.667.0", - "@aws-sdk/credential-provider-process": "3.667.0", - "@aws-sdk/credential-provider-sso": "3.670.0", - "@aws-sdk/credential-provider-web-identity": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/credential-provider-env": "3.686.0", + "@aws-sdk/credential-provider-http": "3.686.0", + "@aws-sdk/credential-provider-process": "3.686.0", + "@aws-sdk/credential-provider-sso": "3.687.0", + "@aws-sdk/credential-provider-web-identity": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/credential-provider-imds": "^3.2.4", "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.670.0" + "@aws-sdk/client-sts": "^3.687.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.670.0.tgz", - "integrity": "sha512-zwNrRYzubk4CaZ7zebeDhxsm8QtNWkbGKopZPOaZSnd5uqUGRcmx4ccVRngWUK68XDP44aEUWC8iU5Pc7btpHQ==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.687.0.tgz", + "integrity": "sha512-Pqld8Nx11NYaBUrVk3bYiGGpLCxkz8iTONlpQWoVWFhSOzlO7zloNOaYbD2XgFjjqhjlKzE91drs/f41uGeCTA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.667.0", - "@aws-sdk/credential-provider-http": "3.667.0", - "@aws-sdk/credential-provider-ini": "3.670.0", - "@aws-sdk/credential-provider-process": "3.667.0", - "@aws-sdk/credential-provider-sso": "3.670.0", - "@aws-sdk/credential-provider-web-identity": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/credential-provider-env": "3.686.0", + "@aws-sdk/credential-provider-http": "3.686.0", + "@aws-sdk/credential-provider-ini": "3.687.0", + "@aws-sdk/credential-provider-process": "3.686.0", + "@aws-sdk/credential-provider-sso": "3.687.0", + "@aws-sdk/credential-provider-web-identity": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/credential-provider-imds": "^3.2.4", "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -657,17 +658,17 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.667.0.tgz", - "integrity": "sha512-HZHnvop32fKgsNHkdhVaul7UzQ25sEc0j9yqA4bjhtbk0ECl42kj3f1pJ+ZU/YD9ut8lMJs/vVqiOdNThVdeBw==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.686.0.tgz", + "integrity": "sha512-sXqaAgyzMOc+dm4CnzAR5Q6S9OWVHyZjLfW6IQkmGjqeQXmZl24c4E82+w64C+CTkJrFLzH1VNOYp1Hy5gE6Qw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -675,19 +676,19 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.670.0.tgz", - "integrity": "sha512-5PkA8BOy4q57Vhe9AESoHKZ7vjRbElNPKjXA4qC01xY+DitClRFz4O3B9sMzFp0PHlz9nDVSXXKgq0yzF/nAag==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.687.0.tgz", + "integrity": "sha512-N1YCoE7DovIRF2ReyRrA4PZzF0WNi4ObPwdQQkVxhvSm7PwjbWxrfq7rpYB+6YB1Uq3QPzgVwUFONE36rdpxUQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.670.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/token-providers": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/client-sso": "3.687.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/token-providers": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -695,37 +696,37 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.667.0.tgz", - "integrity": "sha512-t8CFlZMD/1p/8Cli3rvRiTJpjr/8BO64gw166AHgFZYSN2h95L2l1tcW0jpsc3PprA32nLg1iQVKYt4WGM4ugw==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.686.0.tgz", + "integrity": "sha512-40UqCpPxyHCXDP7CGd9JIOZDgDZf+u1OyLaGBpjQJlz1HYuEsIWnnbTe29Yg3Ah/Zc3g4NBWcUdlGVotlnpnDg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.667.0" + "@aws-sdk/client-sts": "^3.686.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.667.0.tgz", - "integrity": "sha512-XGz4jMAkDoTyFdtLz7ZF+C05IAhCTC1PllpvTBaj821z/L0ilhbqVhrT/f2Buw8Id/K5A390csGXgusXyrFFjA==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.686.0.tgz", + "integrity": "sha512-6qCoWI73/HDzQE745MHQUYz46cAQxHCgy1You8MZQX9vHAQwqBnkcsb2hGp7S6fnQY5bNsiZkMWVQ/LVd2MNjg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-arn-parser": "3.679.0", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" }, @@ -734,15 +735,15 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.667.0.tgz", - "integrity": "sha512-0TiSL9S5DSG95NHGIz6qTMuV7GDKVn8tvvGSrSSZu/wXO3JaYSH0AElVpYfc4PtPRqVpEyNA7nnc7W56mMCLWQ==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.686.0.tgz", + "integrity": "sha512-5yYqIbyhLhH29vn4sHiTj7sU6GttvLMk3XwCmBXjo2k2j3zHqFUwh9RyFGF9VY6Z392Drf/E/cl+qOGypwULpg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -750,21 +751,22 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.669.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.669.0.tgz", - "integrity": "sha512-01UQLoUzVwWMf+b+AEuwJ2lluBD+Cp8AcbyEHqvEaPdjGKHIS4BCvnY70mZYnAfRtL8R2h9tt7iI61oWU3Gjkg==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.687.0.tgz", + "integrity": "sha512-hsEr3eiJs7gOzj9nDMCMfhLkoYv4Z8m7fbic63TkeyimXvsHycqqF6PX0TkPykwa1ueyxVpz0vtO5u1rlucN2w==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", "@smithy/is-array-buffer": "^3.0.0", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -773,15 +775,15 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.667.0.tgz", - "integrity": "sha512-Z7fIAMQnPegs7JjAQvlOeWXwpMRfegh5eCoIP6VLJIeR6DLfYKbP35JBtt98R6DXslrN2RsbTogjbxPEDQfw1w==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.686.0.tgz", + "integrity": "sha512-+Yc6rO02z+yhFbHmRZGvEw1vmzf/ifS9a4aBjJGeVVU+ZxaUvnk+IUZWrj4YQopUQ+bSujmMUzJLXSkbDq7yuw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -789,14 +791,14 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.667.0.tgz", - "integrity": "sha512-ob85H3HhT3/u5O+x0o557xGZ78vSNeSSwMaSitxdsfs2hOuoUl1uk+OeLpi1hkuJnL41FPpokV7TVII2XrFfmg==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.686.0.tgz", + "integrity": "sha512-pCLeZzt5zUGY3NbW4J/5x3kaHyJEji4yqtoQcUlJmkoEInhSxJ0OE8sTxAfyL3nIOF4yr6L2xdaLCqYgQT8Aog==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -804,14 +806,14 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.667.0.tgz", - "integrity": "sha512-PtTRNpNm/5c746jRgZCNg4X9xEJIwggkGJrF0GP9AB1ANg4pc/sF2Fvn1NtqPe9wtQ2stunJprnm5WkCHN7QiA==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.686.0.tgz", + "integrity": "sha512-cX43ODfA2+SPdX7VRxu6gXk4t4bdVJ9pkktbfnkE5t27OlwNfvSGGhnHrQL8xTOFeyQ+3T+oowf26gf1OI+vIg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -819,15 +821,15 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.667.0.tgz", - "integrity": "sha512-U5glWD3ehFohzpUpopLtmqAlDurGWo2wRGPNgi4SwhWU7UDt6LS7E/UvJjqC0CUrjlzOw+my2A+Ncf+fisMhxQ==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.686.0.tgz", + "integrity": "sha512-jF9hQ162xLgp9zZ/3w5RUNhmwVnXDBlABEUX8jCgzaFpaa742qR/KKtjjZQ6jMbQnP+8fOCSXFAVNMU+s6v81w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -835,24 +837,24 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.669.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.669.0.tgz", - "integrity": "sha512-b2QUQ7DcIcVCUFhvmFEDI90BemvQhO0ntIajllLqQSy88PSNdLDCVx5mIzfxaaK/1tdY/UsEDRRm1kMQHJDQpg==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.687.0.tgz", + "integrity": "sha512-YGHYqiyRiNNucmvLrfx3QxIkjSDWR/+cc72bn0lPvqFUQBRHZgmYQLxVYrVZSmRzzkH2FQ1HsZcXhOafLbq4vQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.4.8", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/protocol-http": "^4.1.4", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-arn-parser": "3.679.0", + "@smithy/core": "^2.5.1", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", "@smithy/signature-v4": "^4.2.0", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-stream": "^3.1.9", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -861,14 +863,14 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.667.0.tgz", - "integrity": "sha512-1wuAUZIkmZIvOmGg5qNQU821CGFHhkuKioxXgNh0DpUxZ9+AeiV7yorJr+bqkb2KBFv1i1TnzGRecvKf/KvZIQ==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.686.0.tgz", + "integrity": "sha512-zJXml/CpVHFUdlGQqja87vNQ3rPB5SlDbfdwxlj1KBbjnRRwpBtxxmOlWRShg8lnVV6aIMGv95QmpIFy4ayqnQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -876,18 +878,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.669.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.669.0.tgz", - "integrity": "sha512-K8ScPi45zjJrj5Y2gRqVsvKKQCQbvQBfYGcBw9ZOx9TTavH80bOCBjWg/GFnvs4f37tqVc1wMN2oGvcTF6HveQ==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.687.0.tgz", + "integrity": "sha512-nUgsKiEinyA50CaDXojAkOasAU3Apdg7Qox6IjNUC4ZjgOu7QWsCDB5N28AYMUt06cNYeYQdfMX1aEzG85a1Mg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.667.0", - "@aws-sdk/types": "3.667.0", - "@aws-sdk/util-endpoints": "3.667.0", - "@smithy/core": "^2.4.8", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@aws-sdk/core": "3.686.0", + "@aws-sdk/types": "3.686.0", + "@aws-sdk/util-endpoints": "3.686.0", + "@smithy/core": "^2.5.1", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -895,17 +897,17 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.667.0.tgz", - "integrity": "sha512-iNr+JhhA902JMKHG9IwT9YdaEx6KGl6vjAL5BRNeOjfj4cZYMog6Lz/IlfOAltMtT0w88DAHDEFrBd2uO0l2eg==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.686.0.tgz", + "integrity": "sha512-6zXD3bSD8tcsMAVVwO1gO7rI1uy2fCD3czgawuPGPopeLiPpo6/3FoUWCQzk2nvEhj7p9Z4BbjwZGSlRkVrXTw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/util-middleware": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -913,17 +915,17 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.669.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.669.0.tgz", - "integrity": "sha512-TVwlWAxfBHnFjnfTBQWUhzVJzjwVhkq1+KR0JZV7JrfqeyBOdZjAaV9ie3VNY9HUouecq1fDuKaSwe4JiWQsHg==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.687.0.tgz", + "integrity": "sha512-vdOQHCRHJPX9mT8BM6xOseazHD6NodvHl9cyF5UjNtLn+gERRJEItIA9hf0hlt62odGD8Fqp+rFRuqdmbNkcNw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.669.0", - "@aws-sdk/types": "3.667.0", - "@smithy/protocol-http": "^4.1.4", + "@aws-sdk/middleware-sdk-s3": "3.687.0", + "@aws-sdk/types": "3.686.0", + "@smithy/protocol-http": "^4.1.5", "@smithy/signature-v4": "^4.2.0", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -931,33 +933,33 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.667.0.tgz", - "integrity": "sha512-ZecJlG8p6D4UTYlBHwOWX6nknVtw/OBJ3yPXTSajBjhUlj9lE2xvejI8gl4rqkyLXk7z3bki+KR4tATbMaM9yg==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.686.0.tgz", + "integrity": "sha512-9oL4kTCSePFmyKPskibeiOXV6qavPZ63/kXM9Wh9V6dTSvBtLeNnMxqGvENGKJcTdIgtoqyqA6ET9u0PJ5IRIg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", + "@aws-sdk/types": "3.686.0", "@smithy/property-provider": "^3.1.7", "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.667.0" + "@aws-sdk/client-sso-oidc": "^3.686.0" } }, "node_modules/@aws-sdk/types": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.667.0.tgz", - "integrity": "sha512-gYq0xCsqFfQaSL/yT1Gl1vIUjtsg7d7RhnUfsXaHt8xTxOKRTdH9GjbesBjXOzgOvB0W0vfssfreSNGFlOOMJg==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.686.0.tgz", + "integrity": "sha512-xFnrb3wxOoJcW2Xrh63ZgFo5buIu9DF7bOHnwoUxHdNpUXicUh0AHw85TjXxyxIAd0d1psY/DU7QHoNI3OswgQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -965,9 +967,9 @@ } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "version": "3.679.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.679.0.tgz", + "integrity": "sha512-CwzEbU8R8rq9bqUFryO50RFBlkfufV9UfMArHPWlo+lmsC+NlSluHQALoj6Jkq3zf5ppn1CN0c1DDLrEqdQUXg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -978,15 +980,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.667.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.667.0.tgz", - "integrity": "sha512-X22SYDAuQJWnkF1/q17pkX3nGw5XMD9YEUbmt87vUnRq7iyJ3JOpl6UKOBeUBaL838wA5yzdbinmCITJ/VZ1QA==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.686.0.tgz", + "integrity": "sha512-7msZE2oYl+6QYeeRBjlDgxQUhq/XRky3cXE0FqLFs2muLS7XSuQEXkpOXB3R782ygAP6JX0kmBxPTLurRTikZg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/types": "^3.5.0", - "@smithy/util-endpoints": "^2.1.3", + "@aws-sdk/types": "3.686.0", + "@smithy/types": "^3.6.0", + "@smithy/util-endpoints": "^2.1.4", "tslib": "^2.6.2" }, "engines": { @@ -994,9 +996,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "version": "3.679.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.679.0.tgz", + "integrity": "sha512-zKTd48/ZWrCplkXpYDABI74rQlbR0DNHs8nH95htfSLj9/mWRSwaGptoxwcihaq/77vi/fl2X3y0a1Bo8bt7RA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1007,29 +1009,29 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.670.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.670.0.tgz", - "integrity": "sha512-iRynWWazqEcCKwGMcQcywKTDLdLvqts1Yx474U64I9OKQXXwhOwhXbF5CAPSRta86lkVNAVYJa/0Bsv45pNn1A==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.686.0.tgz", + "integrity": "sha512-YiQXeGYZegF1b7B2GOR61orhgv79qmI0z7+Agm3NXLO6hGfVV3kFUJbXnjtH1BgWo5hbZYW7HQ2omGb3dnb6Lg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.667.0", - "@smithy/types": "^3.5.0", + "@aws-sdk/types": "3.686.0", + "@smithy/types": "^3.6.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.669.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.669.0.tgz", - "integrity": "sha512-9jxCYrgggy2xd44ZASqI7AMiRVaSiFp+06Kg8BQSU0ijKpBJlwcsqIS8pDT/n6LxuOw2eV5ipvM2C0r1iKzrGA==", + "version": "3.687.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.687.0.tgz", + "integrity": "sha512-idkP6ojSTZ4ek1pJ8wIN7r9U3KR5dn0IkJn3KQBXQ58LWjkRqLtft2vxzdsktWwhPKjjmIKl1S0kbvqLawf8XQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.669.0", - "@aws-sdk/types": "3.667.0", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/types": "^3.5.0", + "@aws-sdk/middleware-user-agent": "3.687.0", + "@aws-sdk/types": "3.686.0", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1045,13 +1047,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.662.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.662.0.tgz", - "integrity": "sha512-ikLkXn0igUpnJu2mCZjklvmcDGWT9OaLRv3JyC/cRkTaaSrblPjPM7KKsltxdMTLQ+v7fjCN0TsJpxphMfaOPA==", + "version": "3.686.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.686.0.tgz", + "integrity": "sha512-k0z5b5dkYSuOHY0AOZ4iyjcGBeVL9lWsQNF4+c+1oK3OW4fRWl/bNa1soMRMpangsHPzgyn/QkzuDbl7qR4qrw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1059,13 +1061,14 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -1073,109 +1076,22 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, "license": "MIT" }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=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", @@ -1190,25 +1106,28 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1335,6 +1254,85 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@inquirer/checkbox": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.1.tgz", + "integrity": "sha512-ehJjmNPdguajc1hStvjN7DJNVjwG5LC1mgGMGFjCmdkn2fxB2GtULftMnlaqNmvMdPpqdaSoOFpl86VkLtG4pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/checkbox/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/checkbox/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@inquirer/confirm": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", @@ -1387,13 +1385,13 @@ } }, "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.7.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", - "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "version": "22.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", + "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, "node_modules/@inquirer/core/node_modules/undici-types": { @@ -1418,58 +1416,771 @@ "node": ">=8" } }, - "node_modules/@inquirer/figures": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz", - "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", + "node_modules/@inquirer/editor": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.0.1.tgz", + "integrity": "sha512-qAHHJ6hs343eNtCKgV2wV5CImFxYG8J1pl/YCeI5w9VoW7QpulRUU26+4NsMhjR6zDRjKBsH/rRjCIcaAOHsrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/editor/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/editor/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.1.tgz", + "integrity": "sha512-9anjpdc802YInXekwePsa5LWySzVMHbhVS6v6n5IJxrl8w09mODOeP69wZ1d0WrOvot2buQSmYp4lW/pq8y+zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/expand/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/expand/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz", + "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.1.tgz", + "integrity": "sha512-gF3erqfm0snpwBjbyKXUUe17QJ7ebm49btXApajrM0rgCCoYX0o9W5NCuYNae87iPxaIJVjtuoQ42DX32IdbMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/number/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/number/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.1.tgz", + "integrity": "sha512-D7zUuX4l4ZpL3D7/SWu9ibijP09jigwHi/gfUHLx5GMS5oXzuMfPV2xPMG1tskco4enTx70HA0VtMXecerpvbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/password/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/password/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.0.1.tgz", + "integrity": "sha512-cu2CpGC2hz7WTt2VBvdkzahDvYice6vYA/8Dm7Fy3tRNzKuQTF2EY3CV4H2GamveWE6tA2XzyXtbWX8+t4WMQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.0.1", + "@inquirer/confirm": "^5.0.1", + "@inquirer/editor": "^4.0.1", + "@inquirer/expand": "^4.0.1", + "@inquirer/input": "^4.0.1", + "@inquirer/number": "^3.0.1", + "@inquirer/password": "^4.0.1", + "@inquirer/rawlist": "^4.0.1", + "@inquirer/search": "^3.0.1", + "@inquirer/select": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/confirm": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.0.1.tgz", + "integrity": "sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/input": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.0.1.tgz", + "integrity": "sha512-m+SliZ2m43cDRIpAdQxfv5QOeAQCuhS8TGLvtzEP1An4IH1kBES4RLMRgE/fC+z29aN8qYG8Tq/eXQQKTYwqAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/select": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.1.tgz", + "integrity": "sha512-tVRatFRGU49bxFCKi/3P+C0E13KZduNFbWuHWRx0L2+jbiyKRpXgHp9qiRHWRk/KarhYBXzH/di6w3VQ5aJd5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/prompts/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/prompts/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.1.tgz", + "integrity": "sha512-0LuMOgaWs7W8JNcbiKkoFwyWFDEeCmLqDCygF0hidQUVa6J5grFVRZxrpompiWDFM49Km2rf7WoZwRo1uf1yWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/type": "^3.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/rawlist/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/rawlist/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.1.tgz", + "integrity": "sha512-ehMqjiO0pAf+KtdONKeCLVy4i3fy3feyRRhDrvzWhiwB8JccgKn7eHFr39l+Nx/FaZAhr0YxIJvkK5NuNvG+Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.0.1", + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.0.1.tgz", + "integrity": "sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.7", + "@inquirer/type": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.0.tgz", + "integrity": "sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/search/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/search/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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, "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@inquirer/input": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@inquirer/select": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=18" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, "engines": { - "node": ">=18" + "node": ">=8" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1546,9 +2257,9 @@ } }, "node_modules/@oclif/core": { - "version": "4.0.29", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.29.tgz", - "integrity": "sha512-WEbrRn+X9FG8Wk8U/JUAd4bTzCwOtKPqpCP4ijfqEK8g2ZXV1bGG3FSCTmZkZLNDt/WUYYJpC0Tjjqxn1T4Bzg==", + "version": "4.0.31", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.31.tgz", + "integrity": "sha512-7oyIZv/C1TP+fPc2tSzVPYqG1zU+nel1QvJxjAWyVhud0J8B5SpKZnryedxs3nlSVPJ6K1MT31C9esupCBYgZw==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -1560,7 +2271,7 @@ "get-package-type": "^0.1.0", "globby": "^11.1.0", "indent-string": "^4.0.0", - "is-wsl": "^3", + "is-wsl": "^2.2.0", "lilconfig": "^3.1.2", "minimatch": "^9.0.5", "semver": "^7.6.3", @@ -1575,9 +2286,9 @@ } }, "node_modules/@oclif/plugin-help": { - "version": "6.2.15", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.15.tgz", - "integrity": "sha512-P4UBgEDhNfx7KX522r0rtGbH4ZLg2GPR5MJRHqlhAp7N8E7DNsg5F2j2BP6gUhzwq6wpFMsWDbif/8daKQx4eg==", + "version": "6.2.16", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.16.tgz", + "integrity": "sha512-1x/Bm0LebDouDOfsjkOz+6AXqY6gIZ6JmmU/KuF/GnUmowDvj5i3MFlP9uBTiN8UsOUeT9cdLwnc1kmitHWFTg==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -1587,13 +2298,13 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.22", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.22.tgz", - "integrity": "sha512-snd/gmYjTYIa8vr5rPLNus0ymKhhITRTFWLlYCJvAZTs2kX+vUMMdpKId9pEPSzoVGmyddNVshWSCJ2FSgR0mg==", + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.25.tgz", + "integrity": "sha512-Hm07ouLZq8I9/V46F2BqWEzFexdjaxGHFbwckxXu3YlVq4/xp6lOJXlF5olu4dbTUaJs532Hth4Uh0OIsp9CSw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/confirm": "^3.2.0", + "@inquirer/prompts": "^7.0.1", "@oclif/core": "^4", "ansis": "^3.3.1", "fast-levenshtein": "^3.0.0" @@ -1603,9 +2314,9 @@ } }, "node_modules/@oclif/plugin-warn-if-update-available": { - "version": "3.1.19", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.19.tgz", - "integrity": "sha512-1yanRA5KGPaQvBea8pQRa32mF4cQHqkgs3Z9ww+LsOm052RkjLNvuHuwx8mn6z4wcg8M1Om1/XJ+/mZaAApvLw==", + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.21.tgz", + "integrity": "sha512-yG03rR6Z795lSlkuS+6A9JBSq/VQZ40XspTsKdXa/PUJl52RTeZeOHlaecuv4TddAE6T8VsPdWvry68q5TPE4w==", "dev": true, "license": "MIT", "dependencies": { @@ -1628,9 +2339,9 @@ "license": "MIT" }, "node_modules/@oclif/test": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.0.9.tgz", - "integrity": "sha512-xDGBFBNE6ckoBT9EhMi6ZvwAaEeJRGvRmn2qZWujJl9EJ56a72KHZsvTJVgl2p/AQ2vZ1UH06YZ440GOnjExzQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.0.tgz", + "integrity": "sha512-2ugir6NhRsWJqHM9d2lMEWNiOTD678Jlx5chF/fg6TCAlc7E6E/6+zt+polrCTnTIpih5P/HxOtDekgtjgARwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1644,6 +2355,17 @@ "@oclif/core": ">= 3.0.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -1710,13 +2432,13 @@ } }, "node_modules/@smithy/abort-controller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", - "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.6.tgz", + "integrity": "sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1724,9 +2446,9 @@ } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-4.0.0.tgz", + "integrity": "sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1734,9 +2456,9 @@ } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.1.tgz", + "integrity": "sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1745,16 +2467,16 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", - "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.10.tgz", + "integrity": "sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/util-middleware": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -1762,20 +2484,18 @@ } }, "node_modules/@smithy/core": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.8.tgz", - "integrity": "sha512-x4qWk7p/a4dcf7Vxb2MODIf4OIcqNbK182WxRvZ/3oKPrf/6Fdic5sSElhO1UtXpWKBazWfqg0ZEK9xN1DsuHA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.5.1.tgz", + "integrity": "sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-retry": "^3.0.23", - "@smithy/middleware-serde": "^3.0.7", - "@smithy/protocol-http": "^4.1.4", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-stream": "^3.2.1", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1784,16 +2504,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", - "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz", + "integrity": "sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.8", - "@smithy/property-provider": "^3.1.7", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/property-provider": "^3.1.8", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -1801,27 +2521,27 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.6.tgz", - "integrity": "sha512-SBiOYPBH+5wOyPS7lfI150ePfGLhnp/eTu5RnV9xvhGvRiKfnl6HzRK9wehBph+il8FxS9KTeadx7Rcmf1GLPQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.7.tgz", + "integrity": "sha512-kVSXScIiRN7q+s1x7BrQtZ1Aa9hvvP9FeCqCdBxv37GimIHgBCOnZ5Ip80HLt0DhnAKpiobFdGqTFgbaJNrazA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "@smithy/util-hex-encoding": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.10.tgz", - "integrity": "sha512-1i9aMY6Pl/SmA6NjvidxnfBLHMPzhKu2BP148pEt5VwhMdmXn36PE2kWKGa9Hj8b0XGtCTRucpCncylevCtI7g==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.11.tgz", + "integrity": "sha512-Pd1Wnq3CQ/v2SxRifDUihvpXzirJYbbtXfEnnLV/z0OGCTx/btVX74P86IgrZkjOydOASBGXdPpupYQI+iO/6A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.9", - "@smithy/types": "^3.5.0", + "@smithy/eventstream-serde-universal": "^3.0.10", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1829,13 +2549,13 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.7.tgz", - "integrity": "sha512-eVzhGQBPEqXXYHvIUku0jMTxd4gDvenRzUQPTmKVWdRvp9JUCKrbAXGQRYiGxUYq9+cqQckRm0wq3kTWnNtDhw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.8.tgz", + "integrity": "sha512-zkFIG2i1BLbfoGQnf1qEeMqX0h5qAznzaZmMVNnvPZz9J5AWBPkOMckZWPedGUPcVITacwIdQXoPcdIQq5FRcg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1843,14 +2563,14 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.9.tgz", - "integrity": "sha512-JE0Guqvt0xsmfQ5y1EI342/qtJqznBv8cJqkHZV10PwC8GWGU5KNgFbQnsVCcX+xF+qIqwwfRmeWoJCjuOLmng==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.10.tgz", + "integrity": "sha512-hjpU1tIsJ9qpcoZq9zGHBJPBOeBGYt+n8vfhDwnITPhEre6APrvqq/y3XMDEGUT2cWQ4ramNqBPRbx3qn55rhw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.9", - "@smithy/types": "^3.5.0", + "@smithy/eventstream-serde-universal": "^3.0.10", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1858,14 +2578,14 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.9.tgz", - "integrity": "sha512-bydfgSisfepCufw9kCEnWRxqxJFzX/o8ysXWv+W9F2FIyiaEwZ/D8bBKINbh4ONz3i05QJ1xE7A5OKYvgJsXaw==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.10.tgz", + "integrity": "sha512-ewG1GHbbqsFZ4asaq40KmxCmXO+AFSM1b+DcO2C03dyJj/ZH71CiTg853FSE/3SHK9q3jiYQIFjlGSwfxQ9kww==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^3.1.6", - "@smithy/types": "^3.5.0", + "@smithy/eventstream-codec": "^3.1.7", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1873,40 +2593,40 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", - "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz", + "integrity": "sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.4", - "@smithy/querystring-builder": "^3.0.7", - "@smithy/types": "^3.5.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/querystring-builder": "^3.0.8", + "@smithy/types": "^3.6.0", "@smithy/util-base64": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.6.tgz", - "integrity": "sha512-BKNcMIaeZ9lB67sgo88iCF4YB35KT8X2dNJ8DqrtZNTgN6tUDYBKThzfGtos/mnZkGkW91AYHisESHmSiYQmKw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.7.tgz", + "integrity": "sha512-4yNlxVNJifPM5ThaA5HKnHkn7JhctFUHvcaz6YXxHlYOSIrzI6VKQPTN8Gs1iN5nqq9iFcwIR9THqchUCouIfg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.5.0", + "@smithy/chunked-blob-reader": "^4.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.1", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", - "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.8.tgz", + "integrity": "sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -1916,13 +2636,13 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.6.tgz", - "integrity": "sha512-sFSSt7cmCpFWZPfVx7k80Bgb1K2VJ27VmMxH8X+dDhp7Wv8IBgID4K2VK5ehMJROF8hQgcj4WywnkHIwX/xlwQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.7.tgz", + "integrity": "sha512-xMAsvJ3hLG63lsBVi1Hl6BBSfhd8/Qnp8fC06kjOpJvyyCEXdwHITa5Kvdsk6gaAXLhbZMhQMIGvgUbfnJDP6Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, @@ -1931,13 +2651,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", - "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz", + "integrity": "sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" } }, @@ -1955,26 +2675,26 @@ } }, "node_modules/@smithy/md5-js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.7.tgz", - "integrity": "sha512-+wco9IN9uOW4tNGkZIqTR6IXyfO7Z8A+IOq82QCRn/f/xcmt7H1fXwmQVbfDSvbeFwfNnhv7s+u0G9PzPG6o2w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.8.tgz", + "integrity": "sha512-LwApfTK0OJ/tCyNUXqnWCKoE2b4rDSr4BJlDAVCkiWYeHESr+y+d5zlAanuLW6fnitVJRD/7d9/kN/ZM9Su4mA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", - "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz", + "integrity": "sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -1982,18 +2702,19 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", - "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz", + "integrity": "sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^3.0.7", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", - "@smithy/url-parser": "^3.0.7", - "@smithy/util-middleware": "^3.0.7", + "@smithy/core": "^2.5.1", + "@smithy/middleware-serde": "^3.0.8", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/shared-ini-file-loader": "^3.1.9", + "@smithy/types": "^3.6.0", + "@smithy/url-parser": "^3.0.8", + "@smithy/util-middleware": "^3.0.8", "tslib": "^2.6.2" }, "engines": { @@ -2001,19 +2722,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.23.tgz", - "integrity": "sha512-x9PbGXxkcXIpm6L26qRSCC+eaYcHwybRmqU8LO/WM2RRlW0g8lz6FIiKbKgGvHuoK3dLZRiQVSQJveiCzwnA5A==", + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz", + "integrity": "sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.8", - "@smithy/protocol-http": "^4.1.4", - "@smithy/service-error-classification": "^3.0.7", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", - "@smithy/util-middleware": "^3.0.7", - "@smithy/util-retry": "^3.0.7", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/protocol-http": "^4.1.5", + "@smithy/service-error-classification": "^3.0.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", + "@smithy/util-middleware": "^3.0.8", + "@smithy/util-retry": "^3.0.8", "tslib": "^2.6.2", "uuid": "^9.0.1" }, @@ -2022,13 +2743,13 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", - "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz", + "integrity": "sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2036,13 +2757,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", - "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz", + "integrity": "sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2050,15 +2771,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", - "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz", + "integrity": "sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.7", - "@smithy/shared-ini-file-loader": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/property-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.9", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2066,16 +2787,16 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", - "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz", + "integrity": "sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.5", - "@smithy/protocol-http": "^4.1.4", - "@smithy/querystring-builder": "^3.0.7", - "@smithy/types": "^3.5.0", + "@smithy/abort-controller": "^3.1.6", + "@smithy/protocol-http": "^4.1.5", + "@smithy/querystring-builder": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2083,13 +2804,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", - "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.8.tgz", + "integrity": "sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2097,13 +2818,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", - "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.5.tgz", + "integrity": "sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2111,13 +2832,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", - "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz", + "integrity": "sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "@smithy/util-uri-escape": "^3.0.0", "tslib": "^2.6.2" }, @@ -2126,13 +2847,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", - "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz", + "integrity": "sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2140,26 +2861,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", - "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz", + "integrity": "sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0" + "@smithy/types": "^3.6.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", - "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz", + "integrity": "sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2167,17 +2888,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", - "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.1.tgz", + "integrity": "sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.7", + "@smithy/util-middleware": "^3.0.8", "@smithy/util-uri-escape": "^3.0.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -2187,17 +2908,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.0.tgz", - "integrity": "sha512-nOfJ1nVQsxiP6srKt43r2My0Gp5PLWCW2ASqUioxIiGmu6d32v4Nekidiv5qOmmtzIrmaD+ADX5SKHUuhReeBQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.4.2.tgz", + "integrity": "sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-endpoint": "^3.1.4", - "@smithy/middleware-stack": "^3.0.7", - "@smithy/protocol-http": "^4.1.4", - "@smithy/types": "^3.5.0", - "@smithy/util-stream": "^3.1.9", + "@smithy/core": "^2.5.1", + "@smithy/middleware-endpoint": "^3.2.1", + "@smithy/middleware-stack": "^3.0.8", + "@smithy/protocol-http": "^4.1.5", + "@smithy/types": "^3.6.0", + "@smithy/util-stream": "^3.2.1", "tslib": "^2.6.2" }, "engines": { @@ -2205,9 +2927,9 @@ } }, "node_modules/@smithy/types": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", - "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.6.0.tgz", + "integrity": "sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2218,14 +2940,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", - "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.8.tgz", + "integrity": "sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^3.0.7", - "@smithy/types": "^3.5.0", + "@smithy/querystring-parser": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" } }, @@ -2295,15 +3017,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.23.tgz", - "integrity": "sha512-Y07qslyRtXDP/C5aWKqxTPBl4YxplEELG3xRrz2dnAQ6Lq/FgNrcKWmV561nNaZmFH+EzeGOX3ZRMbU8p1T6Nw==", + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz", + "integrity": "sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^3.1.7", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", + "@smithy/property-provider": "^3.1.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", "bowser": "^2.11.0", "tslib": "^2.6.2" }, @@ -2312,18 +3034,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.23", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.23.tgz", - "integrity": "sha512-9Y4WH7f0vnDGuHUa4lGX9e2p+sMwODibsceSV6rfkZOvMC+BY3StB2LdO1NHafpsyHJLpwAgChxQ38tFyd6vkg==", + "version": "3.0.25", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz", + "integrity": "sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^3.0.9", - "@smithy/credential-provider-imds": "^3.2.4", - "@smithy/node-config-provider": "^3.1.8", - "@smithy/property-provider": "^3.1.7", - "@smithy/smithy-client": "^3.4.0", - "@smithy/types": "^3.5.0", + "@smithy/config-resolver": "^3.0.10", + "@smithy/credential-provider-imds": "^3.2.5", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/property-provider": "^3.1.8", + "@smithy/smithy-client": "^3.4.2", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2331,14 +3053,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", - "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz", + "integrity": "sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^3.1.8", - "@smithy/types": "^3.5.0", + "@smithy/node-config-provider": "^3.1.9", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2359,13 +3081,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", - "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.8.tgz", + "integrity": "sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^3.5.0", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2373,14 +3095,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", - "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.8.tgz", + "integrity": "sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^3.0.7", - "@smithy/types": "^3.5.0", + "@smithy/service-error-classification": "^3.0.8", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2388,15 +3110,15 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", - "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.2.1.tgz", + "integrity": "sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.9", - "@smithy/node-http-handler": "^3.2.4", - "@smithy/types": "^3.5.0", + "@smithy/fetch-http-handler": "^4.0.0", + "@smithy/node-http-handler": "^3.2.5", + "@smithy/types": "^3.6.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", "@smithy/util-hex-encoding": "^3.0.0", @@ -2435,14 +3157,14 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.6.tgz", - "integrity": "sha512-xs/KAwWOeCklq8aMlnpk25LgxEYHKOEodfjfKclDMLcBJEVEKzDLxZxBQyztcuPJ7F54213NJS8PxoiHNMdItQ==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.7.tgz", + "integrity": "sha512-d5yGlQtmN/z5eoTtIYgkvOw27US2Ous4VycnXatyoImIF9tzlcpnKqQ/V7qhvJmb2p6xZne1NopCLakdTnkBBQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^3.1.5", - "@smithy/types": "^3.5.0", + "@smithy/abort-controller": "^3.1.6", + "@smithy/types": "^3.6.0", "tslib": "^2.6.2" }, "engines": { @@ -2511,6 +3233,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/istextorbinary": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/istextorbinary/-/istextorbinary-2.3.4.tgz", @@ -2560,9 +3289,9 @@ } }, "node_modules/@types/node": { - "version": "18.19.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.55.tgz", - "integrity": "sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==", + "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": { @@ -2812,9 +3541,9 @@ "license": "ISC" }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -3213,6 +3942,40 @@ "semver": "^7.0.0" } }, + "node_modules/c8": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.2.tgz", + "integrity": "sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", @@ -3375,6 +4138,13 @@ "tslib": "^2.0.3" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -3503,15 +4273,18 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -3561,18 +4334,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/config/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", @@ -3602,6 +4363,13 @@ "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -3610,9 +4378,9 @@ "license": "MIT" }, "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==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "dev": true, "license": "MIT", "dependencies": { @@ -3624,29 +4392,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/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/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3904,6 +4649,13 @@ "tslib": "^2.0.3" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/editions": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/editions/-/editions-6.21.0.tgz", @@ -4772,6 +5524,21 @@ "node": ">=0.10.0" } }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4981,6 +5748,23 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -5470,6 +6254,13 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -5509,6 +6300,19 @@ "node": ">=10.19.0" } }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5759,15 +6563,15 @@ } }, "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5803,24 +6607,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -6008,31 +6794,87 @@ "dependencies": { "call-bind": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "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/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { - "is-inside-container": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "MIT" + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/istextorbinary": { "version": "9.5.0", @@ -6051,6 +6893,22 @@ "url": "https://bevry.me/fund" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -6166,16 +7024,15 @@ "license": "MIT" }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonfile": { @@ -6318,6 +7175,22 @@ "dev": true, "license": "ISC" }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "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", @@ -6422,10 +7295,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, "license": "MIT", "dependencies": { @@ -6458,6 +7341,18 @@ "node": ">= 14.0.0" } }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -6471,6 +7366,35 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6644,21 +7568,21 @@ } }, "node_modules/oclif": { - "version": "4.15.9", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.15.9.tgz", - "integrity": "sha512-+qFTMht3OK/dP1dLARbaExswdcGDYC4iOBrqFNoc9Vm2zifOgbNuQJsMwTniatS2xmIa3YMevrLU67SxVHgF+g==", + "version": "4.15.20", + "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.15.20.tgz", + "integrity": "sha512-QQC1k+GNj1grEZMwIrE2RGRnckzDx4+jMK4P0w7eWSoq0EbiG1Pr0CioWRbA5wNnUo5oQx4DyxDMq5sVpxHZgw==", "dev": true, "license": "MIT", "dependencies": { - "@aws-sdk/client-cloudfront": "^3.665.0", - "@aws-sdk/client-s3": "^3.670.0", + "@aws-sdk/client-cloudfront": "^3.682.0", + "@aws-sdk/client-s3": "^3.685.0", "@inquirer/confirm": "^3.1.22", "@inquirer/input": "^2.2.4", "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.0.28", - "@oclif/plugin-help": "^6.2.14", - "@oclif/plugin-not-found": "^3.2.21", - "@oclif/plugin-warn-if-update-available": "^3.1.11", + "@oclif/core": "^4.0.31", + "@oclif/plugin-help": "^6.2.16", + "@oclif/plugin-not-found": "^3.2.24", + "@oclif/plugin-warn-if-update-available": "^3.1.20", "async-retry": "^1.3.3", "chalk": "^4", "change-case": "^4", @@ -6717,6 +7641,16 @@ "dev": true, "license": "MIT" }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -6769,6 +7703,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -6866,6 +7807,23 @@ "dev": true, "license": "MIT" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -6886,9 +7844,9 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, @@ -7512,6 +8470,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safer-buffer": { + "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/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -7844,6 +8809,22 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "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", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -7908,6 +8889,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -7989,6 +8984,42 @@ "node": ">=6" } }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8017,6 +9048,19 @@ "integrity": "sha512-ik6BCxzva9DoiEfDX/li0L2cWKPPENYvixUprFdl3YPi4bZZUhDnNI9YUkacrv+uIG90dnxR5mNqaoD6UhD6Bw==", "dev": true }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8030,9 +9074,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, "license": "MIT", "engines": { @@ -8109,10 +9153,23 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, @@ -8370,6 +9427,32 @@ "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", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -8403,6 +9486,22 @@ "url": "https://bevry.me/fund" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", @@ -8492,6 +9591,25 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -8510,32 +9628,32 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-unparser": { diff --git a/package.json b/package.json index bd85b06..4591804 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@types/mime-types": "^2.1.4", "@types/mocha": "^10", "@types/node": "^18", + "c8": "^10.1.2", "chai": "^4", "eslint": "^8", "eslint-config-oclif": "^5", @@ -71,7 +72,7 @@ "postpack": "shx rm -f oclif.manifest.json", "posttest": "npm run lint", "prepack": "oclif manifest && oclif readme", - "test": "mocha --forbid-only \"test/**/*.test.ts\"", + "test": "c8 mocha --forbid-only \"test/**/*.test.ts\"", "version": "oclif readme && git add README.md" }, "types": "dist/index.d.ts" diff --git a/src/commands/ls.ts b/src/commands/ls.ts index ad12c9b..47cfcfb 100644 --- a/src/commands/ls.ts +++ b/src/commands/ls.ts @@ -4,7 +4,7 @@ import path from 'node:path' import * as KeClient from '../client.js' import {checkCwd, checkInsecure} from '../common.js' import Config from '../config.js' -import {DIRECTORY_TYPE} from '../const.js' +import {DIRECTORY_TYPE, TABLE_TYPE} from '../const.js' import {common as commonFlags} from '../flags.js' @@ -50,11 +50,14 @@ export default class Ls extends Command { } private _printObj(target: KeClient.ObjectResponse, indent: string, longFormat?: boolean) { + if (!target.abspath) { + return + } + + const {name} = path.parse(target.abspath) if (longFormat) { - const {name} = path.parse(target.abspath) this.log(`${indent}${target.owner} ${target.updated} ${name}:${target.type_object}`) } else { - const {name} = path.parse(target.abspath) this.log(`${indent}${name}`) } } @@ -66,7 +69,7 @@ export default class Ls extends Command { return false } - if (target.type_object === DIRECTORY_TYPE) { + if ([DIRECTORY_TYPE, TABLE_TYPE].includes(target.type_object)) { const resp = await KeClient.getChildren(this.conf, targetPath) let indent = '' if (withHeader) { diff --git a/src/commands/mkdir.ts b/src/commands/mkdir.ts index fbead7d..52bd47b 100644 --- a/src/commands/mkdir.ts +++ b/src/commands/mkdir.ts @@ -58,7 +58,7 @@ export default class Mkdir extends Command { let result = await KeClient.get(this.conf, parentDir) if (result === null) { if (!options.parent) { - throw new Error(`cannot create directory: parent directory '${parentDir}' is not found`) + this.error(`cannot create directory: parent directory '${parentDir}' is not found`) } const {base, dir} = path.parse(parentDir) @@ -66,7 +66,7 @@ export default class Mkdir extends Command { } if (result!.type_object !== DIRECTORY_TYPE) { - throw new Error(`cannot create directory: parent directory '${parentDir}' is not directory`) + this.error(`cannot create directory: parent directory '${parentDir}' is not directory`) } const data = { diff --git a/src/commands/put.ts b/src/commands/put.ts index f62e99a..f65f561 100644 --- a/src/commands/put.ts +++ b/src/commands/put.ts @@ -55,92 +55,74 @@ export default class Put extends Command { this.conf = new Config(flags) checkInsecure(flags.insecure) const cwd = await checkCwd(this.conf, flags.cwd) - const destPath = path.normalize(path.join(cwd, flags.dest || '')) - const sources = await this._checkSources(argv as string[], path.resolve('.')) - - if (sources.length === 0) { - return - } + const destPath = path.resolve(cwd, flags.dest || '') + const sources = await this._checkSources(argv as string[], path.resolve('.'), flags.recursive) + let result = false + if (argv.length > 1) { + const destObj = await KeClient.get(this.conf, destPath) + if (destObj === null || destObj.type_object !== DIRECTORY_TYPE) { + // source が複数で destObj が存在しない場合はコピーできない + this.error(`failed to put '${destPath}': no such object or directory`) + } - const destObj = await KeClient.get(this.conf, destPath) - - if (argv.length === 1) { + // destObj/ 配下にsources をコピー + result = (await Promise.all( + sources.map(async (src) => this.putObj(src, destObj, src.name, flags)) + )).every(Boolean) + } else if (sources.length === 1) { // argv.length === 1 const source = sources[0] - if (destObj === null) { - // destObj が存在しない場合、親ディレクトリが存在するかチェック + const destObj = await KeClient.get(this.conf, destPath) + if (destObj && destObj.type_object === DIRECTORY_TYPE) { + result = await this.putObj(source, destObj, source.name, flags) + } else { + // destObj が存在しないか、ディレクトリ以外の場合、親ディレクトリが存在するかチェック const {dir, name} = path.parse(destPath) const parentDir = await KeClient.get(this.conf, dir) if (parentDir === null || parentDir.type_object !== DIRECTORY_TYPE) { this.error(`failed to put '${destPath}': no such object or directory`) } - await this.putObj(source, parentDir, name, flags) - } else if (destObj.type_object === DIRECTORY_TYPE) { - await this.putObj(source, destObj, source.name, flags) - } - } else { - if (destObj === null || destObj.type_object !== DIRECTORY_TYPE) { - // source が複数で destObj が存在しない場合はコピーできない - this.error(`failed to put '${destPath}': no such object or directory`) + result = await this.putObj(source, parentDir, name, flags) } + } - // destObj/ 配下にsources をコピー - await Promise.all( - sources.map((src) => this.putObj(src, destObj, src.name, flags)) - ) + if (!result || sources.length !== argv.length) { + this.exit(1) } } - private async _checkSources(sources: string[], cwd: string): Promise { - const srcDescs: SourceDesc[] = [] + private async _checkSources(sources: string[], cwd: string, recursive: boolean): Promise { + const results: SourceDesc[] = [] await Promise.all( sources.map(async (src) => { - const source = path.normalize(path.join(cwd, src)) + const source = path.resolve(cwd, src) try { const stat = await fs.stat(source) const {ext, name} = path.parse(source) if (stat.isDirectory()) { - srcDescs.push({ext, name, path: source, type: 'dir'}) + if (recursive) { + results.push({ext, name, path: source, type: 'dir'}) + } else { + this.warn(`put: -r not specified; omitting directory '${source}'`) + } } else if (stat.isFile()) { - srcDescs.push({ext, name, path: source, type: 'file'}) + results.push({ext, name, path: source, type: 'file'}) } else { - this.log(`put: invalid source '${source} type: should be file or directory`) + this.warn(`put: invalid source '${source}': should be file or directory`) } } catch (error) { if (error instanceof Error) { - this.log(`put: cannot stat '${source}': ${error.message}`) - } else { - this.log(`put: cannot stat '${source}': Unknown error`) + this.warn(`put: cannot stat '${source}': ${error.message}`) } } }) ) - return srcDescs + return results } private async _createObj(source: SourceDesc, destDirObj: KeClient.ObjectResponse, name: string, verbose?: boolean) { - let fields = {} - let typeObject = '' - if (source.type === 'dir') { - // ディレクトリを新規作成して、再帰的に処理を続ける - typeObject = DIRECTORY_TYPE - } else if (source.type === 'file') { - // ソースの種類に応じてオブジェクトを新規作成する - const dataFields = { - 'contentType': mimeLookup(source.path), - 'ext': source.ext.replace(/^\.+/, ''), - } - const buf = await fs.readFile(source.path) - if (isText(source.path, buf)) { - fields = {...dataFields, text: buf} - typeObject = TEXT_TYPE - } else { - fields = {...dataFields, data: buf.toString('base64')} - typeObject = BIN_TYPE - } - } - + const {fields, typeObject} = source.type === 'file' ? await this._loadSourceFile(source.path, source.ext) : {fields: {}, typeObject: DIRECTORY_TYPE} const result = await KeClient.create(this.conf, destDirObj.abspath, {fields, name, 'type_object': typeObject}) if (verbose) { this.log(`created object (${result.type_object}): ${result.abspath}`) @@ -149,34 +131,37 @@ export default class Put extends Command { return result } - private async _updateObj(source: SourceDesc, destObj: KeClient.ObjectResponse, verbose?: boolean) { + private async _loadSourceFile(srcPath: string, ext: string) { const dataFields = { - contentType: mimeLookup(source.path), - ext: source.ext.replace(/^\.+/, '') + contentType: mimeLookup(srcPath), + ext: ext.replace(/^\.+/, ''), } - const buf = await fs.readFile(source.path) - const istext = isText(source.path, buf) - let data = {} - if (istext && destObj.type_object === TEXT_TYPE) { - data = { - 'fields': {...dataFields, text: buf}, - } - } else if (!istext && destObj.type_object === BIN_TYPE) { - data = { - 'fields': {...dataFields, data: buf.toString('base64')}, - } - } else { - this.log(`put: cannot overwrite ${destObj.abspath}: type '${destObj.type_object}' mismatch`) - return + const buf = await fs.readFile(srcPath) + return isText(srcPath, buf) ? { + fields: {...dataFields, text: buf.toString('utf8')}, + typeObject: TEXT_TYPE + } : { + fields: {...dataFields, data: buf.toString('base64')}, + typeObject: BIN_TYPE + } + } + + private async _updateObj(source: SourceDesc, destObj: KeClient.ObjectResponse, verbose?: boolean) { + const {fields, typeObject} = source.type === 'dir' ? {fields: {}, typeObject: DIRECTORY_TYPE} : await this._loadSourceFile(source.path, source.ext) + if (typeObject !== destObj.type_object) { + this.warn(`put: cannot overwrite ${destObj.abspath}: type '${destObj.type_object}' mismatch`) + return false } - await KeClient.update(this.conf, destObj.abspath, data) + await KeClient.update(this.conf, destObj.abspath, {fields}) if (verbose) { this.log(`updated object (${destObj.type_object}): ${destObj.abspath}`) } + + return true } - private async putObj(source: SourceDesc, destDir: KeClient.ObjectResponse, name: string, options: PutOptions) { + private async putObj(source: SourceDesc, destDir: KeClient.ObjectResponse, name: string, options: PutOptions): Promise { // // putObj: // source からファイルやディレクトリを読み込み、dest 配下/に target オブジェクトとして配置する @@ -187,25 +172,24 @@ export default class Put extends Command { // - name: 新規作成時のオブジェクト名称 // - options: Putオプション // + let result = true let destObj = await KeClient.get(this.conf, path.join(destDir.abspath, name)) if (destObj === null) { destObj = await this._createObj(source, destDir, name, options.verbose) - } else if (destObj && options.overwrite && source.type === 'file' && [BIN_TYPE, TEXT_TYPE].includes(destObj.type_object)) { - await this._updateObj(source, destObj, options.verbose) - } else if (destObj && options.overwrite && !(source.type === 'dir' && destObj.type_object === DIRECTORY_TYPE)) { - // 配置先オブジェクトとデータソースの種類がミスマッチの場合 - this.log(`put: cannot overwrite ${destObj.abspath}: type '${destObj.type_object}' mismatch`) - return + } else if (destObj && options.overwrite) { + result = await this._updateObj(source, destObj, options.verbose) } if (options.recursive && destObj.type_object === DIRECTORY_TYPE) { // ファイル一覧を取得 const dirs = await fs.readdir(source.path) - const sources = await this._checkSources(dirs, source.path) + const sources = await this._checkSources(dirs, source.path, true) - await Promise.all( - sources.map((src) => this.putObj(src, destObj, src.name, options)) - ) + return (await Promise.all( + sources.map(async (src) => this.putObj(src, destObj, src.name, options)) + )).every(Boolean) && result } + + return result } } diff --git a/src/commands/rm.ts b/src/commands/rm.ts index 924bb28..71bb4f9 100644 --- a/src/commands/rm.ts +++ b/src/commands/rm.ts @@ -47,9 +47,12 @@ export default class Rm extends Command { this.conf = new Config(flags) checkInsecure(flags.insecure) const cwd = await checkCwd(this.conf, flags.cwd) - await Promise.all( + const results = await Promise.all( argv.map((arg) => this.removeObject(path.resolve(cwd, arg as string), flags)) ) + if (results.includes(false)) { + this.exit(1) + } } private async removeObject(target: string, options: RmOptions) { @@ -57,12 +60,12 @@ export default class Rm extends Command { const result = await KeClient.get(this.conf, target) if (result === null) { this.warn(`failed to remove: '${target}' is not found`) - return + return false } if (result.type_object === DIRECTORY_TYPE) { this.warn(`failed to remove: '${target}' is a directory`) - return + return false } } @@ -70,5 +73,7 @@ export default class Rm extends Command { if (options.verbose && removed) { this.log(`removed: ${target}`) } + + return true } } diff --git a/src/commands/rmdir.ts b/src/commands/rmdir.ts index 2305fa6..430dffc 100644 --- a/src/commands/rmdir.ts +++ b/src/commands/rmdir.ts @@ -46,9 +46,12 @@ export default class Rmdir extends Command { checkInsecure(flags.insecure) const cwd = await checkCwd(this.conf, flags.cwd) - await Promise.all( + const results = await Promise.all( argv.map((arg) => this.removeDirectory(cwd, arg as string, flags)) ) + if (results.includes(null)) { + this.exit(1) + } } private async removeDirectory(cwd: string, target: string, options: RmdirOptions) { @@ -57,19 +60,19 @@ export default class Rmdir extends Command { if (result === null) { this.warn(`failed to remove directory: '${targetDir}' is not found`) - return + return null } if (result.type_object !== DIRECTORY_TYPE) { this.warn(`failed to remove directory: '${targetDir}' is not a directory`) - return + return null } // ディレクトリが空かどうかチェックする const results = await KeClient.getChildren(this.conf, targetDir) if (results!.count > 0) { this.warn(`failed to remove directory: '${targetDir}' is not empty`) - return + return null } await KeClient.del(this.conf, targetDir) diff --git a/src/config.ts b/src/config.ts index cd5da7c..e307ce1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,7 +12,7 @@ export default class Config { baseurl?: string token?: string - constructor(flags: ConfigOptions) { + constructor(flags: ConfigOptions = {}) { const config = require('config') this.baseurl = flags.baseurl || config.get('baseurl') diff --git a/src/const.ts b/src/const.ts index bb847f0..f5a5df8 100644 --- a/src/const.ts +++ b/src/const.ts @@ -1,3 +1,4 @@ export const BIN_TYPE = '/system/types/Binary' export const DIRECTORY_TYPE = '/system/types/Directory' +export const TABLE_TYPE = '/system/types/Table' export const TEXT_TYPE = '/system/types/Text' diff --git a/test/commands/ls.test.ts b/test/commands/ls.test.ts index f46e85e..af15557 100644 --- a/test/commands/ls.test.ts +++ b/test/commands/ls.test.ts @@ -2,16 +2,51 @@ import {runCommand} from '@oclif/test' import {expect} from 'chai' describe('ls', () => { - before(async () => { - await runCommand('rm testdir --cwd /root -rfk') - await runCommand('mkdir testdir --cwd /root -k') - }) - after(async () => { - await runCommand('rm testdir --cwd /root -rfk') - }) - it('runs ls --help', async () => { const {stdout} = await runCommand('ls --help') expect(stdout).to.contain('USAGE') }) + + it('runs ls', async () => { + const {stdout} = await runCommand('ls -k') + expect(stdout).to.contain('system') + }) + + it('runs ls no_such_obj', async () => { + const {error, stderr} = await runCommand('ls -k no_such_obj') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to get '/no_such_obj'") + }) + + it('runs ls --cwd /system/types TypeObject Directory', async () => { + const {stdout} = await runCommand('ls --cwd /system/types TypeObject Directory -k') + expect(stdout).to.contain('TypeObject') + expect(stdout).to.contain('Directory') + }) + + it('runs ls --cwd /system info config -l', async () => { + const {stdout} = await runCommand('ls --cwd /system info config -kl') + expect(stdout).to.contain('info:/system/types/SystemInfo') + expect(stdout).to.contain('config:/system/types/Config') + }) + + it('runs ls /system', async () => { + const {stdout} = await runCommand('ls /system -k') + expect(stdout).to.contain('types') + expect(stdout).to.contain('channels') + expect(stdout).to.contain('info') + }) + + it('runs ls --cwd /system smtp_servers packages', async () => { + const {stdout} = await runCommand('ls --cwd /system smtp_servers packages -k') + expect(stdout).to.contain('/system/smtp_servers:') + expect(stdout).to.contain(' Default') + expect(stdout).to.contain('/system/packages:') + expect(stdout).to.contain(' PIP') + }) + + it('runs ls /process', async () => { + const {stdout} = await runCommand('ls /process -k') + expect(stdout).to.equal('') + }) }) diff --git a/test/commands/mkdir.test.ts b/test/commands/mkdir.test.ts index 6fd9215..bb7fbd6 100644 --- a/test/commands/mkdir.test.ts +++ b/test/commands/mkdir.test.ts @@ -24,4 +24,22 @@ describe('mkdir', () => { const {stdout} = await runCommand('mkdir somedir --cwd /root/testdir -kv') expect(stdout).to.contain('created directory: /root/testdir/somedir') }) + + it('runs mkdir subdir/foo --cwd /root/testdir -p', async() => { + const {stdout} = await runCommand('mkdir subdir/foo --cwd /root/testdir -kpv') + expect(stdout).to.contain('created directory: /root/testdir/subdir') + expect(stdout).to.contain('created directory: /root/testdir/subdir/foo') + }) + + it('runs mkdir foo/bar --cwd /root/testdir', async() => { + const {error} = await runCommand('mkdir foo/bar --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(2) + expect(error?.message).to.contain("cannot create directory: parent directory '/root/testdir/foo' is not found") + }) + + it('runs mkdir info/foo --cwd /system', async() => { + const {error} = await runCommand('mkdir info/foo --cwd /system -k') + expect(error?.oclif?.exit).to.equal(2) + expect(error?.message).to.contain("cannot create directory: parent directory '/system/info' is not directory") + }) }) diff --git a/test/commands/put.test.ts b/test/commands/put.test.ts index 50d8754..d0a39ea 100644 --- a/test/commands/put.test.ts +++ b/test/commands/put.test.ts @@ -1,10 +1,15 @@ import {runCommand} from '@oclif/test' import {expect} from 'chai' +import fs from 'node:fs/promises' + +import * as KeClient from '../../src/client.js' +import Config from '../../src/config.js' describe('put', () => { - before(async () => { + before(async function () { await runCommand('rm testdir --cwd /root -rfk') await runCommand('mkdir testdir --cwd /root -k') + this.config = new Config() }) after(async () => { await runCommand('rm testdir --cwd /root -rfk') @@ -20,13 +25,94 @@ describe('put', () => { expect(stdout).to.contain('USAGE') }) - it('runs put ./test/data/test.txt --cwd /root/testdir -kv', async () => { + it('runs put ./test/data/test.txt --cwd /root/testdir -v', async function () { const {stdout} = await runCommand('put ./test/data/test.txt --cwd /root/testdir -kv') expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/test') + const result = await KeClient.get(this.config, '/root/testdir/test') + expect(result!.abspath).to.equal('/root/testdir/test') + expect(result!.type_object).to.equal('/system/types/Text') + const text = await fs.readFile('./test/data/test.txt', { encoding: 'utf8' }) + expect(result!.fields!.text).to.equal(text) + }) + + it('runs put ./test/data/test2.txt -d test --cwd /root/testdir -v', async function () { + await runCommand('put ./test/data/test.txt --cwd /root/testdir -kvo') + const {stdout} = await runCommand('put ./test/data/test2.txt -d test --cwd /root/testdir -kvo') + expect(stdout).to.contain('updated object (/system/types/Text): /root/testdir/test') + const result = await KeClient.get(this.config, '/root/testdir/test') + const text = await fs.readFile('./test/data/test2.txt', { encoding: 'utf8' }) + expect(result!.fields!.text).to.equal(text) }) - it('runs put ./test/data/logo.png --cwd /root/testdir -kv', async () => { + it('runs put ./test/data/test.txt -d foo --cwd /root/testdir -kv', async () => { + const {stdout} = await runCommand('put ./test/data/test.txt -d foo --cwd /root/testdir -kv') + expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/foo') + }) + + it('runs put ./test/data/logo.png --cwd /root/testdir -kv', async function () { const {stdout} = await runCommand('put ./test/data/logo.png --cwd /root/testdir -kv') expect(stdout).to.contain('created object (/system/types/Binary): /root/testdir/logo') + const result = await KeClient.get(this.config, '/root/testdir/logo') + expect(result!.abspath).to.equal('/root/testdir/logo') + expect(result!.type_object).to.equal('/system/types/Binary') + const buf = await fs.readFile('./test/data/logo.png') + expect(result!.fields!.data).to.equal(buf.toString('base64')) + }) + + it('runs put ./test/data/test.txt ./test/data/logo.png -d subdir --cwd /root/testdir -kv', async () => { + await runCommand('mkdir subdir --cwd /root/testdir -k') + const {stdout} = await runCommand('put ./test/data/test.txt ./test/data/logo.png -d subdir --cwd /root/testdir -kv') + expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/subdir/test') + expect(stdout).to.contain('created object (/system/types/Binary): /root/testdir/subdir/logo') + }) + + it('runs put ./test/data --cwd /root/testdir -r', async () => { + const {stdout} = await runCommand('put ./test/data --cwd /root/testdir -krv') + expect(stdout).to.contain('created object (/system/types/Directory): /root/testdir/data') + expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/data/test') + expect(stdout).to.contain('created object (/system/types/Text): /root/testdir/data/test2') + expect(stdout).to.contain('created object (/system/types/Binary): /root/testdir/data/logo') + }) + + it('runs put ./test/data --cwd /root/testdir', async () => { + const {error, stderr} = await runCommand('put ./test/data --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain('put: -r not specified; omitting directory') + }) + + it('runs put ./test/data/test.txt -d /no/such/dir', async () => { + const {error} = await runCommand('put ./test/data/test.txt -d /no/such/dir -k') + expect(error?.oclif?.exit).to.equal(2) + expect(error?.message).to.contain("failed to put '/no/such/dir': no such object or directory") + }) + + it('runs put ./test/data/test.txt ./test/data/logo.png -d foo --cwd /root/testdir -k', async () => { + const {error} = await runCommand('put ./test/data/test.txt ./test/data/logo.png -d foo --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(2) + expect(error?.message).to.contain("failed to put '/root/testdir/foo': no such object or directory") + }) + + it('runs put no_such_file --cwd /root/testdir', async () => { + const {error, stderr} = await runCommand('put no_such_file --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain('put: cannot stat') + }) + + it('runs put /dev/null --cwd /root/testdir', async () => { + const {error, stderr} = await runCommand('put /dev/null --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("put: invalid source '/dev/null': should be file or directory") + }) + + it('runs put ./test/data/test.txt -d info --cwd /system -o', async () => { + const {error, stderr} = await runCommand('put ./test/data/test.txt -d info --cwd /system -ko') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("put: cannot overwrite /system/info: type '/system/types/SystemInfo' mismatch") + }) + + it('runs put ./test/data -d info --cwd /system -or', async () => { + const {error, stderr} = await runCommand('put ./test/data -d info --cwd /system -kor') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("put: cannot overwrite /system/info: type '/system/types/SystemInfo' mismatch") }) }) diff --git a/test/commands/rm.test.ts b/test/commands/rm.test.ts index cff4574..869db4b 100644 --- a/test/commands/rm.test.ts +++ b/test/commands/rm.test.ts @@ -25,4 +25,16 @@ describe('rm', () => { const {stdout} = await runCommand('rm test --cwd /root/testdir -kv') expect(stdout).to.contain('removed: /root/testdir/test') }) + + it('runs rm no_such_obj --cwd /root/testdir', async () => { + const {error, stderr} = await runCommand('rm no_such_obj --cwd /root/testdir -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove: '/root/testdir/no_such_obj' is not found") + }) + + it('runs rm testdir --cwd /root', async () => { + const {error, stderr} = await runCommand('rm testdir --cwd /root -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove: '/root/testdir' is a directory") + }) }) diff --git a/test/commands/rmdir.test.ts b/test/commands/rmdir.test.ts index 653fcd3..c3be27f 100644 --- a/test/commands/rmdir.test.ts +++ b/test/commands/rmdir.test.ts @@ -25,4 +25,35 @@ describe('rmdir', () => { const {stdout} = await runCommand('rmdir somedir --cwd /root/testdir -kv') expect(stdout).to.contain('removed directory: /root/testdir/somedir') }) + + it('runs rmdir foo/bar --cwd /root/testdir -pv', async () => { + await runCommand('mkdir foo/bar --cwd /root/testdir -kp') + const {stdout} = await runCommand('rmdir foo/bar --cwd /root/testdir -kvp') + expect(stdout).to.contain('removed directory: /root/testdir/foo/bar') + expect(stdout).to.contain('removed directory: /root/testdir/foo') + }) + + it('runs rmdir unknown_dir --cwd /root/testdir -k', async () => { + const {error, stderr} = await runCommand('rmdir unknown_dir --cwd /root/testdir -kv') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove directory: '/root/testdir/unknown_dir' is not found") + }) + + it('runs rmdir unknown_dir --cwd /root/testdir -k', async () => { + const {error, stderr} = await runCommand('rmdir unknown_dir --cwd /root/testdir -kv') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove directory: '/root/testdir/unknown_dir' is not found") + }) + + it('runs rmdir info --cwd /system -k', async () => { + const {error, stderr} = await runCommand('rmdir info --cwd /system -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove directory: '/system/info' is not a directory") + }) + + it('runs rmdir /root', async () => { + const {error, stderr} = await runCommand('rmdir info /root -k') + expect(error?.oclif?.exit).to.equal(1) + expect(stderr).to.contain("failed to remove directory: '/root' is not empty") + }) }) diff --git a/test/data/test2.txt b/test/data/test2.txt new file mode 100644 index 0000000..747e287 --- /dev/null +++ b/test/data/test2.txt @@ -0,0 +1 @@ +This is test2.txt From 72efb4ee41e3db964def17fdccaef95f35d3d86e Mon Sep 17 00:00:00 2001 From: Kenta HATTORI Date: Sat, 2 Nov 2024 22:28:44 +0900 Subject: [PATCH 5/5] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c5db835..35eda12 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ DESCRIPTION Display help for ketool. ``` -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.15/src/commands/help.ts)_ +_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.16/src/commands/help.ts)_ ## `ketool ls [OBJECT]`