diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c310c863..0cf0af36 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -115,9 +115,9 @@ The content sources for the auto generation of `docs/balena-cli.md` are: * [Selected sections](https://github.com/balena-io/balena-cli/blob/v12.23.0/automation/capitanodoc/capitanodoc.ts#L199-L204) of the README file. -* The CLI's command documentation in source code (`lib/commands/` folder), for example: - * `lib/commands/push.ts` - * `lib/commands/env/add.ts` +* The CLI's command documentation in source code (`src/commands/` folder), for example: + * `src/commands/push.ts` + * `src/commands/env/add.ts` The README file is manually edited, but subsections are automatically extracted for inclusion in `docs/balena-cli.md` by the `getCapitanoDoc()` function in @@ -224,7 +224,7 @@ command, or by manually editing or copying files to the `node_modules` folder. Unexpected behavior may then be observed because of the CLI's use of the [fast-boot2](https://www.npmjs.com/package/fast-boot2) package that caches module resolution. -`fast-boot2` is configured in `lib/fast-boot.ts` to automatically invalidate the cache if +`fast-boot2` is configured in `src/fast-boot.ts` to automatically invalidate the cache if changes are made to the `package.json` or `npm-shrinkwrap.json` files, but the cache won't be automatically invalidated if `npm link` is used or if manual modifications are made to the `node_modules` folder. In this situation: diff --git a/INSTALL-ADVANCED.md b/INSTALL-ADVANCED.md index 25672d4c..c828e37b 100644 --- a/INSTALL-ADVANCED.md +++ b/INSTALL-ADVANCED.md @@ -40,7 +40,7 @@ By default, the CLI is installed to the following folders: OS | Folders --- | --- Windows: | `C:\Program Files\balena-cli\` -macOS: | `/usr/local/lib/balena-cli/`
`/usr/local/bin/balena` +macOS: | `/usr/local/src/balena-cli/`
`/usr/local/bin/balena` ## Standalone Zip Package diff --git a/INSTALL-MAC.md b/INSTALL-MAC.md index 7cfa543d..0b14f542 100644 --- a/INSTALL-MAC.md +++ b/INSTALL-MAC.md @@ -27,7 +27,7 @@ To update the balena CLI, repeat the steps above for the new version. To uninstall it, run the following command on a terminal prompt: ```text -sudo /usr/local/lib/balena-cli/bin/uninstall +sudo /usr/local/src/balena-cli/bin/uninstall ``` ## Additional Dependencies diff --git a/automation/build-bin.ts b/automation/build-bin.ts index 520f5f39..2ba3c479 100644 --- a/automation/build-bin.ts +++ b/automation/build-bin.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import type { JsonVersions } from '../lib/commands/version/index'; +import type { JsonVersions } from '../src/commands/version/index'; import { run as oclifRun } from '@oclif/core'; import * as archiver from 'archiver'; diff --git a/automation/capitanodoc/capitanodoc.ts b/automation/capitanodoc/capitanodoc.ts index 93a7f5b3..f687050d 100644 --- a/automation/capitanodoc/capitanodoc.ts +++ b/automation/capitanodoc/capitanodoc.ts @@ -28,7 +28,7 @@ import { GlobSync } from 'glob'; * * IMPORTANT * - * All commands need to be stored under a folder in lib/commands to maintain uniformity + * All commands need to be stored under a folder in src/commands to maintain uniformity * Generating docs will error out if directive not followed * To add a custom heading for command docs, add the heading next to the folder name * in the `commandHeadings` dictionary. diff --git a/automation/capitanodoc/index.ts b/automation/capitanodoc/index.ts index 75e79272..b82f0097 100644 --- a/automation/capitanodoc/index.ts +++ b/automation/capitanodoc/index.ts @@ -18,7 +18,7 @@ import * as path from 'path'; import { getCapitanoDoc } from './capitanodoc'; import type { Category, Document, OclifCommand } from './doc-types'; import * as markdown from './markdown'; -import { stripIndent } from '../../lib/utils/lazy'; +import { stripIndent } from '../../src/utils/lazy'; /** * Generates the markdown document (as a string) for the CLI documentation diff --git a/automation/capitanodoc/markdown.ts b/automation/capitanodoc/markdown.ts index c0e2dc80..44cfc422 100644 --- a/automation/capitanodoc/markdown.ts +++ b/automation/capitanodoc/markdown.ts @@ -18,8 +18,8 @@ import { Parser } from '@oclif/core'; import * as ent from 'ent'; import * as _ from 'lodash'; -import { getManualSortCompareFunction } from '../../lib/utils/helpers'; -import { capitanoizeOclifUsage } from '../../lib/utils/oclif-utils'; +import { getManualSortCompareFunction } from '../../src/utils/helpers'; +import { capitanoizeOclifUsage } from '../../src/utils/oclif-utils'; import type { Category, Document, OclifCommand } from './doc-types'; function renderOclifCommand(command: OclifCommand): string[] { diff --git a/automation/check-doc.ts b/automation/check-doc.ts index 9ad65dc4..bdc33a49 100644 --- a/automation/check-doc.ts +++ b/automation/check-doc.ts @@ -43,8 +43,8 @@ async function checkBuildTimestamps() { ...gitStatus.staged, ...gitStatus.renamed.map((o) => o.to), ]) - // select only staged files that start with lib/ or typings/ - .filter((f) => f.match(/^(lib|typings)[/\\]/)) + // select only staged files that start with src/ or typings/ + .filter((f) => f.match(/^(src|typings)[/\\]/)) .map((f) => path.join(ROOT, f)); const fStats = await Promise.all(stagedFiles.map((f) => fs.stat(f))); diff --git a/bin/dev.js b/bin/dev.js index ceaf47c4..0d1662ea 100755 --- a/bin/dev.js +++ b/bin/dev.js @@ -29,7 +29,7 @@ const path = require('path'); const rootDir = path.join(__dirname, '..'); // Allow balena-dev to work with oclif by temporarily -// pointing oclif config options to lib/ instead of build/ +// pointing oclif config options to src/ instead of build/ modifyOclifPaths(); // Undo changes on exit process.on('exit', function () { @@ -57,9 +57,9 @@ require('ts-node').register({ project: path.join(rootDir, 'tsconfig.json'), transpileOnly: true, }); -require('../lib/app').run(undefined, { dir: __dirname, development: true }); +require('../src/app').run(undefined, { dir: __dirname, development: true }); -// Modify package.json oclif paths from build/ -> lib/, or vice versa +// Modify package.json oclif paths from build/ -> src/, or vice versa function modifyOclifPaths(revert) { const fs = require('fs'); const packageJsonPath = path.join(rootDir, 'package.json'); @@ -73,9 +73,9 @@ function modifyOclifPaths(revert) { let oclifSectionText = JSON.stringify(packageObj.oclif); if (!revert) { - oclifSectionText = oclifSectionText.replace(/\/build\//g, '/lib/'); + oclifSectionText = oclifSectionText.replace(/\/build\//g, '/src/'); } else { - oclifSectionText = oclifSectionText.replace(/\/lib\//g, '/build/'); + oclifSectionText = oclifSectionText.replace(/\/src\//g, '/build/'); } packageObj.oclif = JSON.parse(oclifSectionText); diff --git a/docs/balena-cli.md b/docs/balena-cli.md index 8dd1ae8f..28a46c79 100644 --- a/docs/balena-cli.md +++ b/docs/balena-cli.md @@ -2168,13 +2168,9 @@ fleet name or slug (preferred) open fleet dashboard page -#### --fields FIELDS - -only show provided fields (comma-separated) - #### -j, --json -output in json format +produce JSON output instead of tabular output ## fleet pin <slug> [releaseToPinTo] @@ -2353,29 +2349,9 @@ Examples: ### Options -#### --fields FIELDS - -only show provided fields (comma-separated) - #### -j, --json -output in json format - -#### --filter FILTER - -filter results by substring matching of a given field, eg: --filter field=foo - -#### --no-header - -hide table header from output - -#### --no-truncate - -do not truncate output to fit screen - -#### --sort SORT - -field to sort by (prepend '-' for descending order) +produce JSON output instead of tabular output # Local diff --git a/lib/framework/index.ts b/lib/framework/index.ts deleted file mode 100644 index 24097f7b..00000000 --- a/lib/framework/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/* -Copyright 2020 Balena - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import type { DataOutputOptions, DataSetOutputOptions } from './output'; - -export { DataOutputOptions, DataSetOutputOptions }; diff --git a/lib/framework/output.ts b/lib/framework/output.ts deleted file mode 100644 index ae0e5132..00000000 --- a/lib/framework/output.ts +++ /dev/null @@ -1,158 +0,0 @@ -/* -Copyright 2020 Balena - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { getCliUx, getChalk } from '../utils/lazy'; - -export interface DataOutputOptions { - fields?: string; - json?: boolean; -} - -export interface DataSetOutputOptions extends DataOutputOptions { - filter?: string; - 'no-header'?: boolean; - 'no-truncate'?: boolean; - sort?: string; -} - -/** - * Output message to STDERR - */ -export function outputMessage(msg: string) { - // Messages go to STDERR - console.error(msg); -} - -/** - * Output result data to STDOUT - * Supports: - * - arrays of items (displayed in a tabular way), - * - single items (displayed in a field per row format). - * - * @param data Array of data objects to output - * @param fields Array of fieldnames, specifying the fields and display order - * @param options Output options - */ -export async function outputData( - data: any[] | object, - fields: string[], - options: DataOutputOptions | DataSetOutputOptions, -) { - if (Array.isArray(data)) { - await outputDataSet(data, fields, options as DataSetOutputOptions); - } else { - await outputDataItem(data, fields, options as DataOutputOptions); - } -} - -/** - * Wraps the cli.ux table implementation, to output tabular data - * - * @param data Array of data objects to output - * @param fields Array of fieldnames, specifying the fields and display order - * @param options Output options - */ -async function outputDataSet( - data: any[], - fields: string[], - options: DataSetOutputOptions, -) { - // Oclif expects fields to be specified in the format used in table headers (though lowercase) - // By replacing underscores with spaces here, we can support both header format and actual field name - // (e.g. as seen in json output). - options.fields = options.fields?.replace(/_/g, ' '); - options.filter = options.filter?.replace(/_/g, ' '); - options.sort = options.sort?.replace(/_/g, ' '); - - getCliUx().table( - data, - // Convert fields array to column object keys - // that cli.ux expects. We can later add support - // for both formats if beneficial - fields.reduce((ac, a) => ({ ...ac, [a]: {} }), {}), - { - ...options, - ...(options.json - ? { - output: 'json', - } - : {}), - columns: options.fields, - printLine, - }, - ); -} - -/** - * Outputs a single data object (like `resin-cli-visuals table.vertical`), - * but supporting a subset of options from `cli-ux table` (--json and --fields) - * - * @param data Array of data objects to output - * @param fields Array of fieldnames, specifying the fields and display order - * @param options Output options - */ -async function outputDataItem( - data: any, - fields: string[], - options: DataOutputOptions, -) { - const outData: typeof data = {}; - - // Convert comma separated list of fields in `options.fields` to array of correct format. - // Note, user may have specified the true field name (e.g. `some_field`), - // or the format displayed in headers (e.g. `Some field`, case insensitive). - const userSelectedFields = options.fields?.split(',').map((f) => { - return f.toLowerCase().trim().replace(/ /g, '_'); - }); - - // Order and filter the fields based on `fields` parameter and `options.fields` - (userSelectedFields || fields).forEach((fieldName) => { - if (fields.includes(fieldName)) { - outData[fieldName] = data[fieldName]; - } - }); - - if (options.json) { - printLine(JSON.stringify(outData, undefined, 2)); - } else { - const chalk = getChalk(); - const { capitalize } = await import('lodash'); - - // Find longest key, so we can align results - const longestKeyLength = getLongestObjectKeyLength(outData); - - // Output one field per line - for (const [k, v] of Object.entries(outData)) { - const shim = ' '.repeat(longestKeyLength - k.length); - const kDisplay = capitalize(k.replace(/_/g, ' ')); - printLine(`${chalk.bold(kDisplay) + shim} : ${v}`); - } - } -} - -function getLongestObjectKeyLength(o: any): number { - return Object.keys(o).length >= 1 - ? Object.keys(o).reduce((a, b) => { - return a.length > b.length ? a : b; - }).length - : 0; -} - -function printLine(s: any) { - // Duplicating oclif cli-ux's default implementation here, - // but using this one explicitly for ease of testing - process.stdout.write(s + '\n'); -} diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 88fa40a9..d28f17aa 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -10,7 +10,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@balena/compose": "^3.2.1", + "@balena/compose": "^4.0.1", "@balena/dockerignore": "^1.0.2", "@balena/env-parsing": "^1.1.8", "@balena/es-version": "^1.0.1", @@ -267,21 +267,21 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.614.0.tgz", - "integrity": "sha512-intOtVdjMJyu/C1BdUgXIESPyTEhWE1irGl04+rwHz+TTHpdjqV5umdOFeerc2aGs4BV3c/XzzvKPOVVmMe/Ew==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.624.0.tgz", + "integrity": "sha512-QORmDtRjnhnZhKAQO8V2wVt/BN7CVli24CKfBd1SwTPS9evdjorzWlx+nFkzjpsgLAPpQbGnTC6AKDqTh8CRuw==", "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.614.0", - "@aws-sdk/client-sts": "3.614.0", - "@aws-sdk/core": "3.614.0", - "@aws-sdk/credential-provider-node": "3.614.0", - "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/client-sso-oidc": "3.624.0", + "@aws-sdk/client-sts": "3.624.0", + "@aws-sdk/core": "3.624.0", + "@aws-sdk/credential-provider-node": "3.624.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", @@ -289,30 +289,30 @@ "@aws-sdk/util-user-agent-node": "3.614.0", "@aws-sdk/xml-builder": "3.609.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.6", - "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-node": "^3.0.3", "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.3", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.2", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@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.9", - "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.0.6", + "@smithy/util-stream": "^3.1.3", "@smithy/util-utf8": "^3.0.0", "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" @@ -335,66 +335,66 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.614.0.tgz", - "integrity": "sha512-9BlhfeBegvyjOqHtcr9kvrT80wiy7EVUiqYyTFiiDv/hJIcG88XHQCZdLU7658XBkQ7aFrr5b8rF2HRD1oroxw==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.624.0.tgz", + "integrity": "sha512-A18tgTKC4ZTAwV8i3pkyAL1XDLgH7WGS5hZA/0FOntI5l+icztGZFF8CdeYWEAFnZA7SfHK6vmtEbIQDOzTTAA==", "dev": true, "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.614.0", - "@aws-sdk/client-sts": "3.614.0", - "@aws-sdk/core": "3.614.0", - "@aws-sdk/credential-provider-node": "3.614.0", - "@aws-sdk/middleware-bucket-endpoint": "3.614.0", - "@aws-sdk/middleware-expect-continue": "3.609.0", - "@aws-sdk/middleware-flexible-checksums": "3.614.0", - "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/client-sso-oidc": "3.624.0", + "@aws-sdk/client-sts": "3.624.0", + "@aws-sdk/core": "3.624.0", + "@aws-sdk/credential-provider-node": "3.624.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-location-constraint": "3.609.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.609.0", - "@aws-sdk/middleware-sdk-s3": "3.614.0", - "@aws-sdk/middleware-signing": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.624.0", "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/middleware-user-agent": "3.620.0", "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.624.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", "@aws-sdk/xml-builder": "3.609.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.6", - "@smithy/eventstream-serde-browser": "^3.0.4", + "@smithy/core": "^2.3.2", + "@smithy/eventstream-serde-browser": "^3.0.5", "@smithy/eventstream-serde-config-resolver": "^3.0.3", "@smithy/eventstream-serde-node": "^3.0.4", - "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-blob-browser": "^3.1.2", "@smithy/hash-node": "^3.0.3", "@smithy/hash-stream-node": "^3.1.2", "@smithy/invalid-dependency": "^3.0.3", "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.3", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.2", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@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.9", - "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.0.6", + "@smithy/util-stream": "^3.1.3", "@smithy/util-utf8": "^3.0.0", "@smithy/util-waiter": "^3.1.2", "tslib": "^2.6.2" @@ -417,43 +417,43 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.614.0.tgz", - "integrity": "sha512-p5pyYaxRzBttjBkqfc8i3K7DzBdTg3ECdVgBo6INIUxfvDy0J8QUE8vNtCgvFIkq+uPw/8M+Eo4zzln7anuO0Q==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.624.0.tgz", + "integrity": "sha512-EX6EF+rJzMPC5dcdsu40xSi2To7GSvdGQNIpe97pD9WvZwM9tRNQnNM4T6HA4gjV1L6Jwk8rBlG/CnveXtLEMw==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.614.0", - "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/core": "3.624.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.6", - "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-node": "^3.0.3", "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.3", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.2", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@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.9", - "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", @@ -465,44 +465,44 @@ } }, "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.614.0.tgz", - "integrity": "sha512-BI1NWcpppbHg/28zbUg54dZeckork8BItZIcjls12vxasy+p3iEzrJVG60jcbUTTsk3Qc1tyxNfrdcVqx0y7Ww==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.624.0.tgz", + "integrity": "sha512-Ki2uKYJKKtfHxxZsiMTOvJoVRP6b2pZ1u3rcUb2m/nVgBPUfLdl8ZkGpqE29I+t5/QaS/sEdbn6cgMUZwl+3Dg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.614.0", - "@aws-sdk/credential-provider-node": "3.614.0", - "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/core": "3.624.0", + "@aws-sdk/credential-provider-node": "3.624.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.6", - "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-node": "^3.0.3", "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.3", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.2", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@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.9", - "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", @@ -513,7 +513,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.614.0" + "@aws-sdk/client-sts": "^3.624.0" } }, "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": { @@ -541,45 +541,45 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.614.0.tgz", - "integrity": "sha512-i6QmaVA1KHHYNnI2VYQy/sc31rLm4+jSp8b/YbQpFnD0w3aXsrEEHHlxek45uSkHb4Nrj1omFBVy/xp1WVYx2Q==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.624.0.tgz", + "integrity": "sha512-k36fLZCb2nfoV/DKK3jbRgO/Yf7/R80pgYfMiotkGjnZwDmRvNN08z4l06L9C+CieazzkgRxNUzyppsYcYsQaw==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.614.0", - "@aws-sdk/core": "3.614.0", - "@aws-sdk/credential-provider-node": "3.614.0", - "@aws-sdk/middleware-host-header": "3.609.0", + "@aws-sdk/client-sso-oidc": "3.624.0", + "@aws-sdk/core": "3.624.0", + "@aws-sdk/credential-provider-node": "3.624.0", + "@aws-sdk/middleware-host-header": "3.620.0", "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.614.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.620.0", "@aws-sdk/region-config-resolver": "3.614.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", "@aws-sdk/util-user-agent-browser": "3.609.0", "@aws-sdk/util-user-agent-node": "3.614.0", "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.2.6", - "@smithy/fetch-http-handler": "^3.2.1", + "@smithy/core": "^2.3.2", + "@smithy/fetch-http-handler": "^3.2.4", "@smithy/hash-node": "^3.0.3", "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.3", - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", "@smithy/middleware-stack": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.2", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/url-parser": "^3.0.3", "@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.9", - "@smithy/util-defaults-mode-node": "^3.0.9", + "@smithy/util-defaults-mode-browser": "^3.0.14", + "@smithy/util-defaults-mode-node": "^3.0.14", "@smithy/util-endpoints": "^2.0.5", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", @@ -603,16 +603,18 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.614.0.tgz", - "integrity": "sha512-BUuS5/1YkgmKc4J0bg83XEtMyDHVyqG2QDzfmhYe8gbOIZabUl1FlrFVwhCAthtrrI6MPGTQcERB4BtJKUSplw==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.624.0.tgz", + "integrity": "sha512-WyFmPbhRIvtWi7hBp8uSFy+iPpj8ccNV/eX86hwF4irMjfc/FtsGVIAeBXxXM/vGCjkdfEzOnl+tJ2XACD4OXg==", "dependencies": { - "@smithy/core": "^2.2.6", - "@smithy/protocol-http": "^4.0.3", - "@smithy/signature-v4": "^3.1.2", - "@smithy/smithy-client": "^3.1.7", + "@smithy/core": "^2.3.2", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", - "fast-xml-parser": "4.2.5", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { @@ -620,9 +622,9 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz", - "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -634,18 +636,18 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.614.0.tgz", - "integrity": "sha512-YIEjlNUKb3Vo/iTnGAPdsiDC3FUUnNoex2OwU8LmR7AkYZiWdB8nx99DfgkkY+OFMUpw7nKD2PCOtuFONelfGA==", + "version": "3.622.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz", + "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==", "dependencies": { "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.1", - "@smithy/node-http-handler": "^3.1.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.0.6", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { @@ -653,17 +655,17 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.614.0.tgz", - "integrity": "sha512-KfLuLFGwlvFSZ2MuzYwWGPb1y5TeiwX5okIDe0aQ1h10oD3924FXbN+mabOnUHQ8EFcGAtCaWbrC86mI7ktC6A==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.624.0.tgz", + "integrity": "sha512-mMoNIy7MO2WTBbdqMyLpbt6SZpthE6e0GkRYpsd0yozPt0RZopcBhEh+HG1U9Y1PVODo+jcMk353vAi61CfnhQ==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.609.0", - "@aws-sdk/credential-provider-http": "3.614.0", - "@aws-sdk/credential-provider-process": "3.614.0", - "@aws-sdk/credential-provider-sso": "3.614.0", - "@aws-sdk/credential-provider-web-identity": "3.609.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.624.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/credential-provider-imds": "^3.2.0", "@smithy/property-provider": "^3.1.3", "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", @@ -673,22 +675,22 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.614.0" + "@aws-sdk/client-sts": "^3.624.0" } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.614.0.tgz", - "integrity": "sha512-4J6gPEuFZP0mkWq5E//oMS1vrmMM88iNNcv7TEljYnsc6JTAlKejCyFwx6CN+nkIhmIZsl06SXIhBemzBdBPfg==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.624.0.tgz", + "integrity": "sha512-vYyGK7oNpd81BdbH5IlmQ6zfaQqU+rPwsKTDDBeLRjshtrGXOEpfoahVpG9PX0ibu32IOWp4ZyXBNyVrnvcMOw==", "dependencies": { - "@aws-sdk/credential-provider-env": "3.609.0", - "@aws-sdk/credential-provider-http": "3.614.0", - "@aws-sdk/credential-provider-ini": "3.614.0", - "@aws-sdk/credential-provider-process": "3.614.0", - "@aws-sdk/credential-provider-sso": "3.614.0", - "@aws-sdk/credential-provider-web-identity": "3.609.0", + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.622.0", + "@aws-sdk/credential-provider-ini": "3.624.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.624.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/credential-provider-imds": "^3.2.0", "@smithy/property-provider": "^3.1.3", "@smithy/shared-ini-file-loader": "^3.1.4", "@smithy/types": "^3.3.0", @@ -699,9 +701,9 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.614.0.tgz", - "integrity": "sha512-Q0SI0sTRwi8iNODLs5+bbv8vgz8Qy2QdxbCHnPk/6Cx6LMf7i3dqmWquFbspqFRd8QiqxStrblwxrUYZi09tkA==", + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -714,11 +716,11 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.614.0.tgz", - "integrity": "sha512-55+gp0JY4451cWI1qXmVMFM0GQaBKiQpXv2P0xmd9P3qLDyeFUSEW8XPh0d2lb1ICr6x4s47ynXVdGCIv2mXMg==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.624.0.tgz", + "integrity": "sha512-A02bayIjU9APEPKr3HudrFHEx0WfghoSPsPopckDkW7VBqO4wizzcxr75Q9A3vNX+cwg0wCN6UitTNe6pVlRaQ==", "dependencies": { - "@aws-sdk/client-sso": "3.614.0", + "@aws-sdk/client-sso": "3.624.0", "@aws-sdk/token-providers": "3.614.0", "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -731,9 +733,9 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz", - "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==", + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", "dependencies": { "@aws-sdk/types": "3.609.0", "@smithy/property-provider": "^3.1.3", @@ -744,19 +746,19 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-sts": "^3.609.0" + "@aws-sdk/client-sts": "^3.621.0" } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.614.0.tgz", - "integrity": "sha512-TqEY8KcZeZ0LIxXaqG9RSSNnDHvD8RAFP4Xenwsxqnyad0Yn7LgCoFwRByelJ0t54ROYL1/ETJleWE4U4TOXdg==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", "dev": true, "dependencies": { "@aws-sdk/types": "3.609.0", "@aws-sdk/util-arn-parser": "3.568.0", "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "@smithy/util-config-provider": "^3.0.0", "tslib": "^2.6.2" @@ -766,13 +768,13 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.609.0.tgz", - "integrity": "sha512-+zeg//mSer4JZRxOB/4mUOMUJyuYPwATnIC5moBB8P8Xe+mJaVRFy8qlCtzYNj2TycnlsBPzTK0j7P1yvDh97w==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", "dev": true, "dependencies": { "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -781,16 +783,16 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.614.0.tgz", - "integrity": "sha512-ZLpxVXMboDeMT7p2Kdp5m1uLVKOktkZoMgLvvbe3zbrU4Ji5IU5xVE0aa4X7H28BtuODCs6SLESnPs19bhMKlA==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", "dev": true, "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-sdk/types": "3.609.0", "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" @@ -813,12 +815,12 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz", - "integrity": "sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", "dependencies": { "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -854,12 +856,12 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz", - "integrity": "sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", "dependencies": { "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -868,37 +870,37 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.614.0.tgz", - "integrity": "sha512-9fJTaiuuOfFV4FqmUEhPYzrtv7JOfYpB7q65oG3uayVH4ngWHIJkjnnX79zRhNZKdPGta+XIsnZzjEghg82ngA==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.624.0.tgz", + "integrity": "sha512-HUiaZ6+JXcG0qQda10ZxDGJvbT71YUp1zX+oikIsfTUeq0N75O82OY3Noqd7cyjEVtsGSo/y0e6U3aV1hO+wPw==", "dev": true, "dependencies": { + "@aws-sdk/core": "3.624.0", "@aws-sdk/types": "3.609.0", "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.3.2", "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.0.3", - "@smithy/signature-v4": "^3.1.2", - "@smithy/smithy-client": "^3.1.7", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=16.0.0" } }, - "node_modules/@aws-sdk/middleware-signing": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.609.0.tgz", - "integrity": "sha512-2w3dBLjQVKIajYzokO4hduq8/0hSMUYHHmIo1Kdl+MSY8uwRBt12bLL6pyreobTcRMxizvn2ph/CQ9I1ST/WGQ==", + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", "dev": true, "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.0.3", - "@smithy/signature-v4": "^3.1.2", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", + "@smithy/util-buffer-from": "^3.0.0", "tslib": "^2.6.2" }, "engines": { @@ -920,13 +922,13 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.614.0.tgz", - "integrity": "sha512-xUxh0UPQiMTG6E31Yvu6zVYlikrIcFDKljM11CaatInzvZubGTGiX0DjpqRlfGzUNsuPc/zNrKwRP2+wypgqIw==", + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz", + "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==", "dependencies": { "@aws-sdk/types": "3.609.0", "@aws-sdk/util-endpoints": "3.614.0", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -951,15 +953,15 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.614.0.tgz", - "integrity": "sha512-6mW3ONW4oLzxrePznYhz7sNT9ji9Am9ufLeV722tbOVS5lArBOZ6E1oPz0uYBhisUPznWKhcLRMggt7vIJWMng==", + "version": "3.624.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.624.0.tgz", + "integrity": "sha512-gu1SfCyUPnq4s0AI1xdAl0whHwhkTyltg4QZWc4vnZvEVudCpJVVxEcroUHYQIO51YyVUT9jSMS1SVRe5VqPEw==", "dev": true, "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.614.0", + "@aws-sdk/middleware-sdk-s3": "3.624.0", "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.0.3", - "@smithy/signature-v4": "^3.1.2", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -1270,10 +1272,13 @@ "dev": true }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz", + "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==", "dev": true, + "dependencies": { + "@babel/types": "^7.25.4" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -1281,6 +1286,20 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/parser/node_modules/@babel/types": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/template": { "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", @@ -1296,9 +1315,9 @@ } }, "node_modules/@babel/template/node_modules/@babel/types": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz", - "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -1331,12 +1350,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.4.tgz", + "integrity": "sha512-NFtZmZsyzDPJnk9Zg3BbTfKKc9UlHYzD0E//p2Z3B9nCwwtJW9T0gVbCz8+fBngnn4zf1Dr3IK8PHQQHq0lDQw==", "dev": true, "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.4", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -1346,9 +1365,9 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/types": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz", - "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz", + "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -1385,9 +1404,9 @@ } }, "node_modules/@balena/compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@balena/compose/-/compose-3.2.1.tgz", - "integrity": "sha512-5p8UdOsXSRDqKQm2tYE5oV4jBqUoAC9xmbwL05aJycu2KDHDPy/lbo0LZy1lB7hQZSxPmAyG+3/bFz112wMesQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@balena/compose/-/compose-4.0.1.tgz", + "integrity": "sha512-yUaML0V58nl7/3xbCJ5eDJyGMWL8H+iPHD6Fc4GkLco5kFMiySkvlGy7+7cJoBa/p2+7GggQO0vCaOKpI7+GJQ==", "dependencies": { "ajv": "^6.12.3", "docker-file-parser": "^1.0.7", @@ -1408,9 +1427,7 @@ "memoizee": "^0.4.15", "mz": "^2.7.0", "p-map": "^4.0.0", - "pinejs-client-core": "^6.13.0", - "pinejs-client-request": "^7.3.5", - "request": "^2.88.2", + "pinejs-client-core": "^6.14.13", "semver": "^7.3.5", "stream-to-promise": "^3.0.0", "tar-stream": "^3.1.6", @@ -1418,7 +1435,7 @@ "typed-error": "^3.2.1" }, "engines": { - "node": ">=16.13.0" + "node": ">=20.6.0" } }, "node_modules/@balena/compose/node_modules/event-stream": { @@ -2414,9 +2431,9 @@ } }, "node_modules/@oclif/plugin-help/node_modules/@oclif/core": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.17.tgz", - "integrity": "sha512-zfdSRip9DVMOklMojWCLZEB4iOzy7LDTABCDzCXqmpZGS+o1e1xts4jGhnte3mi0WV0YthNfYqF16tqk6CWITA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.18.tgz", + "integrity": "sha512-3EP4zJ+1ndc92UxdNmGX4HhFK5Xh94fWvUeOW1Tu/Ed+/jAljIsbmZyjVhDoE0vV5cftT+3QaVB/LFxaXxty/w==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.2", @@ -2532,9 +2549,9 @@ } }, "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.17.tgz", - "integrity": "sha512-zfdSRip9DVMOklMojWCLZEB4iOzy7LDTABCDzCXqmpZGS+o1e1xts4jGhnte3mi0WV0YthNfYqF16tqk6CWITA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.18.tgz", + "integrity": "sha512-3EP4zJ+1ndc92UxdNmGX4HhFK5Xh94fWvUeOW1Tu/Ed+/jAljIsbmZyjVhDoE0vV5cftT+3QaVB/LFxaXxty/w==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.2", @@ -2651,9 +2668,9 @@ } }, "node_modules/@oclif/plugin-warn-if-update-available/node_modules/@oclif/core": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.17.tgz", - "integrity": "sha512-zfdSRip9DVMOklMojWCLZEB4iOzy7LDTABCDzCXqmpZGS+o1e1xts4jGhnte3mi0WV0YthNfYqF16tqk6CWITA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.18.tgz", + "integrity": "sha512-3EP4zJ+1ndc92UxdNmGX4HhFK5Xh94fWvUeOW1Tu/Ed+/jAljIsbmZyjVhDoE0vV5cftT+3QaVB/LFxaXxty/w==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.2", @@ -3157,15 +3174,15 @@ } }, "node_modules/@smithy/core": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.6.tgz", - "integrity": "sha512-tBbVIv/ui7/lLTKayYJJvi8JLVL2SwOQTbNFEOrvzSE3ktByvsa1erwBOnAMo8N5Vu30g7lN4lLStrU75oDGuw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz", + "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==", "dependencies": { - "@smithy/middleware-endpoint": "^3.0.5", - "@smithy/middleware-retry": "^3.0.9", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.14", "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/util-middleware": "^3.0.3", "tslib": "^2.6.2" @@ -3175,9 +3192,9 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.4.tgz", - "integrity": "sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", "dependencies": { "@smithy/node-config-provider": "^3.1.4", "@smithy/property-provider": "^3.1.3", @@ -3202,9 +3219,9 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.4.tgz", - "integrity": "sha512-Eo4anLZX6ltGJTZ5yJMc80gZPYYwBn44g0h7oFq6et+TYr5dUsTpIcDbz2evsOKIZhZ7zBoFWHtBXQ4QQeb5xA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.5.tgz", + "integrity": "sha512-dEyiUYL/ekDfk+2Ra4GxV+xNnFoCmk1nuIXg+fMChFTrM2uI/1r9AdiTYzPqgb72yIv/NtAj6C3dG//1wwgakQ==", "dev": true, "dependencies": { "@smithy/eventstream-serde-universal": "^3.0.4", @@ -3257,11 +3274,11 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz", - "integrity": "sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", "dependencies": { - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", "@smithy/util-base64": "^3.0.0", @@ -3378,11 +3395,11 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz", - "integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", "dependencies": { - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -3391,9 +3408,9 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.5.tgz", - "integrity": "sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", "dependencies": { "@smithy/middleware-serde": "^3.0.3", "@smithy/node-config-provider": "^3.1.4", @@ -3408,14 +3425,14 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.9.tgz", - "integrity": "sha512-Mrv9omExU1gA7Y0VEJG2LieGfPYtwwcEiOnVGZ54a37NEMr66TJ0glFslOJFuKWG6izg5DpKIUmDV9rRxjm47Q==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz", + "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==", "dependencies": { "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "@smithy/util-middleware": "^3.0.3", "@smithy/util-retry": "^3.0.3", @@ -3465,12 +3482,12 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz", - "integrity": "sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", "dependencies": { "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/querystring-builder": "^3.0.3", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -3492,9 +3509,9 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz", - "integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", "dependencies": { "@smithy/types": "^3.3.0", "tslib": "^2.6.2" @@ -3552,11 +3569,12 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz", - "integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", "@smithy/util-hex-encoding": "^3.0.0", "@smithy/util-middleware": "^3.0.3", @@ -3581,15 +3599,15 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.7.tgz", - "integrity": "sha512-nZbJZB0XI3YnaFBWGDBr7kjaew6O0oNYNmopyIz6gKZEbxzrtH7rwvU1GcVxcSFoOwWecLJEe79fxEMljHopFQ==", + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz", + "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==", "dependencies": { - "@smithy/middleware-endpoint": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.0.3", + "@smithy/protocol-http": "^4.1.0", "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.0.6", + "@smithy/util-stream": "^3.1.3", "tslib": "^2.6.2" }, "engines": { @@ -3685,12 +3703,12 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.9.tgz", - "integrity": "sha512-WKPcElz92MAQG09miBdb0GxEH/MwD5GfE8g07WokITq5g6J1ROQfYCKC1wNnkqAGfrSywT7L0rdvvqlBplqiyA==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz", + "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==", "dependencies": { "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -3700,15 +3718,15 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.9.tgz", - "integrity": "sha512-dQLrUqFxqpf0GvEKEuFdgXcdZwz6oFm752h4d6C7lQz+RLddf761L2r7dSwGWzESMMB3wKj0jL+skRhEGlecjw==", + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz", + "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==", "dependencies": { "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.1.4", + "@smithy/credential-provider-imds": "^3.2.0", "@smithy/node-config-provider": "^3.1.4", "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.1.7", + "@smithy/smithy-client": "^3.1.12", "@smithy/types": "^3.3.0", "tslib": "^2.6.2" }, @@ -3766,12 +3784,12 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.6.tgz", - "integrity": "sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.1", - "@smithy/node-http-handler": "^3.1.2", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", "@smithy/types": "^3.3.0", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", @@ -3943,7 +3961,8 @@ "node_modules/@types/caseless": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "dev": true }, "node_modules/@types/chai": { "version": "4.3.0", @@ -4171,11 +4190,6 @@ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==" }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -4257,11 +4271,11 @@ } }, "node_modules/@types/node": { - "version": "20.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.13.tgz", - "integrity": "sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==", + "version": "20.16.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", + "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/node-cleanup": { @@ -4270,6 +4284,11 @@ "integrity": "sha512-HTksao/sZs9nqxKD/vWOR3WxSrQsyJlBPEFFCgq9lMmhRsuQF+2p6hy+7FaCYn6lOeiDc3ywI8jDQ2bz5y6m8w==", "dev": true }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -4314,6 +4333,7 @@ "version": "2.48.12", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "dev": true, "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -4325,6 +4345,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -4460,7 +4481,8 @@ "node_modules/@types/tough-cookie": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", - "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==" + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true }, "node_modules/@types/update-notifier": { "version": "4.1.1", @@ -5175,9 +5197,9 @@ } }, "node_modules/archiver/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "dev": true }, "node_modules/archiver/node_modules/readable-stream": { @@ -5475,11 +5497,11 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -5673,18 +5695,15 @@ } }, "node_modules/balena-image-manager/node_modules/rimraf": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.9.tgz", - "integrity": "sha512-3i7b8OcswU6CpU8Ej89quJD4O98id7TtVM5U4Mybh84zQXdrFmDLouWBEEaD/QfO3gDDfH+AGFCGsR7kngzQnA==", + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", "dependencies": { "glob": "^10.3.7" }, "bin": { "rimraf": "dist/esm/bin.mjs" }, - "engines": { - "node": "14 >=14.20 || 16 >=16.20 || >=18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -5780,9 +5799,9 @@ } }, "node_modules/balena-sdk/node_modules/@types/node": { - "version": "18.19.42", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.42.tgz", - "integrity": "sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==", + "version": "18.19.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", + "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", "dependencies": { "undici-types": "~5.26.4" } @@ -8946,17 +8965,17 @@ } }, "node_modules/fast-xml-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", - "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - }, { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" } ], "dependencies": { @@ -10218,12 +10237,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, "node_modules/htmlparser2": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", @@ -10470,9 +10483,9 @@ ] }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -11119,9 +11132,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { "hasown": "^2.0.2" @@ -11584,9 +11597,9 @@ } }, "node_modules/jake/node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", @@ -12397,15 +12410,9 @@ "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/lru-queue": { "version": "0.1.0", @@ -13636,9 +13643,9 @@ } }, "node_modules/oclif/node_modules/@oclif/core": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.17.tgz", - "integrity": "sha512-zfdSRip9DVMOklMojWCLZEB4iOzy7LDTABCDzCXqmpZGS+o1e1xts4jGhnte3mi0WV0YthNfYqF16tqk6CWITA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.0.18.tgz", + "integrity": "sha512-3EP4zJ+1ndc92UxdNmGX4HhFK5Xh94fWvUeOW1Tu/Ed+/jAljIsbmZyjVhDoE0vV5cftT+3QaVB/LFxaXxty/w==", "dev": true, "dependencies": { "ansi-escapes": "^4.3.2", @@ -14683,11 +14690,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -14777,25 +14779,6 @@ "npm": ">=6.0.0" } }, - "node_modules/pinejs-client-request": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/pinejs-client-request/-/pinejs-client-request-7.4.2.tgz", - "integrity": "sha512-ltltWhsrZK2UiDfoWGF4AciOBW3YaHJWO9xuOEPK8LjkMBBVz5K6HKqguzV5ZqJ+8lLMgBvUtnF/9cSEMCMcbw==", - "dependencies": { - "@types/lodash": "^4.17.4", - "@types/lru-cache": "^5.1.1", - "@types/request": "^2.48.12", - "lodash": "^4.17.21", - "lru-cache": "^6.0.0", - "pinejs-client-core": "^6.14.6", - "request": "^2.88.2", - "typed-error": "^3.2.2" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">=6.0.0" - } - }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -14904,10 +14887,9 @@ } }, "node_modules/prebuild-install/node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", - "license": "MIT", + "version": "3.67.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", + "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", "dependencies": { "semver": "^7.3.5" }, @@ -18342,9 +18324,9 @@ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "node_modules/url/node_modules/qs": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", - "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -18900,11 +18882,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", diff --git a/package.json b/package.json index b49f1073..495fa2ae 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "bin/", "build/", "doc/", - "lib/", + "src/", "patches/", "!patches/**/**.dev.patch", "*.md", @@ -51,7 +51,7 @@ "build": "npm run build:src && npm run catch-uncommitted", "build:t": "npm run lint && npm run build:fast && npm run build:test", "build:src": "npm run lint && npm run build:fast && npm run build:test && npm run build:doc && npm run build:completion", - "build:pages": "mkdirp ./build/auth/pages/&& inline-source --compress ./lib/auth/pages/error.ejs ./build/auth/pages/error.ejs && inline-source --compress ./lib/auth/pages/success.ejs ./build/auth/pages/success.ejs", + "build:pages": "mkdirp ./build/auth/pages/&& inline-source --compress ./src/auth/pages/error.ejs ./build/auth/pages/error.ejs && inline-source --compress ./src/auth/pages/success.ejs ./build/auth/pages/success.ejs", "build:fast": "npm run build:pages && tsc && npx oclif manifest", "build:test": "tsc -P ./tsconfig.dev.json --noEmit", "build:doc": "ts-node --transpile-only automation/capitanodoc/index.ts > docs/balena-cli.md", @@ -73,7 +73,7 @@ "catch-uncommitted": "ts-node --transpile-only automation/run.ts catch-uncommitted", "ci": "npm run test && npm run catch-uncommitted", "lint": "npm run lint-tsconfig && npm run lint-other", - "lint-tsconfig": "balena-lint -e ts -e js -t tsconfig.dev.json --fix automation/ lib/ tests/ typings/", + "lint-tsconfig": "balena-lint -e ts -e js -t tsconfig.dev.json --fix automation/ src/ tests/ typings/", "lint-other": "balena-lint -e ts -e js --fix bin/run.js bin/dev.js completion/ .mocharc.js .mocharc-standalone.js", "update": "ts-node --transpile-only ./automation/update-module.ts", "prepare": "echo {} > bin/.fast-boot.json", @@ -199,7 +199,7 @@ "typescript": "^5.5.2" }, "dependencies": { - "@balena/compose": "^3.2.1", + "@balena/compose": "^4.0.1", "@balena/dockerignore": "^1.0.2", "@balena/env-parsing": "^1.1.8", "@balena/es-version": "^1.0.1", diff --git a/lib/app.ts b/src/app.ts similarity index 100% rename from lib/app.ts rename to src/app.ts diff --git a/lib/auth/index.ts b/src/auth/index.ts similarity index 100% rename from lib/auth/index.ts rename to src/auth/index.ts diff --git a/lib/auth/pages/error.ejs b/src/auth/pages/error.ejs similarity index 100% rename from lib/auth/pages/error.ejs rename to src/auth/pages/error.ejs diff --git a/lib/auth/pages/static/images/happy.png b/src/auth/pages/static/images/happy.png similarity index 100% rename from lib/auth/pages/static/images/happy.png rename to src/auth/pages/static/images/happy.png diff --git a/lib/auth/pages/static/images/sad.png b/src/auth/pages/static/images/sad.png similarity index 100% rename from lib/auth/pages/static/images/sad.png rename to src/auth/pages/static/images/sad.png diff --git a/lib/auth/pages/static/style.css b/src/auth/pages/static/style.css similarity index 100% rename from lib/auth/pages/static/style.css rename to src/auth/pages/static/style.css diff --git a/lib/auth/pages/success.ejs b/src/auth/pages/success.ejs similarity index 100% rename from lib/auth/pages/success.ejs rename to src/auth/pages/success.ejs diff --git a/lib/auth/server.ts b/src/auth/server.ts similarity index 100% rename from lib/auth/server.ts rename to src/auth/server.ts diff --git a/lib/auth/utils.ts b/src/auth/utils.ts similarity index 100% rename from lib/auth/utils.ts rename to src/auth/utils.ts diff --git a/lib/command.ts b/src/command.ts similarity index 97% rename from lib/command.ts rename to src/command.ts index 1b260a35..4c5d66bd 100644 --- a/lib/command.ts +++ b/src/command.ts @@ -21,7 +21,6 @@ import { NotAvailableInOfflineModeError, } from './errors'; import { stripIndent } from './utils/lazy'; -import * as output from './framework/output'; export default abstract class BalenaCommand extends Command { /** @@ -168,7 +167,4 @@ export default abstract class BalenaCommand extends Command { await this.getStdin(); } } - - protected outputMessage = output.outputMessage; - protected outputData = output.outputData; } diff --git a/lib/commands/api-key/generate.ts b/src/commands/api-key/generate.ts similarity index 100% rename from lib/commands/api-key/generate.ts rename to src/commands/api-key/generate.ts diff --git a/lib/commands/api-key/revoke.ts b/src/commands/api-key/revoke.ts similarity index 100% rename from lib/commands/api-key/revoke.ts rename to src/commands/api-key/revoke.ts diff --git a/lib/commands/api-keys/index.ts b/src/commands/api-keys/index.ts similarity index 100% rename from lib/commands/api-keys/index.ts rename to src/commands/api-keys/index.ts diff --git a/lib/commands/app/create.ts b/src/commands/app/create.ts similarity index 100% rename from lib/commands/app/create.ts rename to src/commands/app/create.ts diff --git a/lib/commands/block/create.ts b/src/commands/block/create.ts similarity index 100% rename from lib/commands/block/create.ts rename to src/commands/block/create.ts diff --git a/lib/commands/build/index.ts b/src/commands/build/index.ts similarity index 100% rename from lib/commands/build/index.ts rename to src/commands/build/index.ts diff --git a/lib/commands/config/generate.ts b/src/commands/config/generate.ts similarity index 100% rename from lib/commands/config/generate.ts rename to src/commands/config/generate.ts diff --git a/lib/commands/config/inject.ts b/src/commands/config/inject.ts similarity index 100% rename from lib/commands/config/inject.ts rename to src/commands/config/inject.ts diff --git a/lib/commands/config/read.ts b/src/commands/config/read.ts similarity index 100% rename from lib/commands/config/read.ts rename to src/commands/config/read.ts diff --git a/lib/commands/config/reconfigure.ts b/src/commands/config/reconfigure.ts similarity index 100% rename from lib/commands/config/reconfigure.ts rename to src/commands/config/reconfigure.ts diff --git a/lib/commands/config/write.ts b/src/commands/config/write.ts similarity index 100% rename from lib/commands/config/write.ts rename to src/commands/config/write.ts diff --git a/lib/commands/deploy/index.ts b/src/commands/deploy/index.ts similarity index 100% rename from lib/commands/deploy/index.ts rename to src/commands/deploy/index.ts diff --git a/lib/commands/device/deactivate.ts b/src/commands/device/deactivate.ts similarity index 100% rename from lib/commands/device/deactivate.ts rename to src/commands/device/deactivate.ts diff --git a/lib/commands/device/identify.ts b/src/commands/device/identify.ts similarity index 100% rename from lib/commands/device/identify.ts rename to src/commands/device/identify.ts diff --git a/lib/commands/device/index.ts b/src/commands/device/index.ts similarity index 100% rename from lib/commands/device/index.ts rename to src/commands/device/index.ts diff --git a/lib/commands/device/init.ts b/src/commands/device/init.ts similarity index 100% rename from lib/commands/device/init.ts rename to src/commands/device/init.ts diff --git a/lib/commands/device/local-mode.ts b/src/commands/device/local-mode.ts similarity index 100% rename from lib/commands/device/local-mode.ts rename to src/commands/device/local-mode.ts diff --git a/lib/commands/device/move.ts b/src/commands/device/move.ts similarity index 100% rename from lib/commands/device/move.ts rename to src/commands/device/move.ts diff --git a/lib/commands/device/os-update.ts b/src/commands/device/os-update.ts similarity index 100% rename from lib/commands/device/os-update.ts rename to src/commands/device/os-update.ts diff --git a/lib/commands/device/pin.ts b/src/commands/device/pin.ts similarity index 100% rename from lib/commands/device/pin.ts rename to src/commands/device/pin.ts diff --git a/lib/commands/device/public-url.ts b/src/commands/device/public-url.ts similarity index 100% rename from lib/commands/device/public-url.ts rename to src/commands/device/public-url.ts diff --git a/lib/commands/device/purge.ts b/src/commands/device/purge.ts similarity index 100% rename from lib/commands/device/purge.ts rename to src/commands/device/purge.ts diff --git a/lib/commands/device/reboot.ts b/src/commands/device/reboot.ts similarity index 100% rename from lib/commands/device/reboot.ts rename to src/commands/device/reboot.ts diff --git a/lib/commands/device/register.ts b/src/commands/device/register.ts similarity index 100% rename from lib/commands/device/register.ts rename to src/commands/device/register.ts diff --git a/lib/commands/device/rename.ts b/src/commands/device/rename.ts similarity index 100% rename from lib/commands/device/rename.ts rename to src/commands/device/rename.ts diff --git a/lib/commands/device/restart.ts b/src/commands/device/restart.ts similarity index 100% rename from lib/commands/device/restart.ts rename to src/commands/device/restart.ts diff --git a/lib/commands/device/rm.ts b/src/commands/device/rm.ts similarity index 100% rename from lib/commands/device/rm.ts rename to src/commands/device/rm.ts diff --git a/lib/commands/device/shutdown.ts b/src/commands/device/shutdown.ts similarity index 100% rename from lib/commands/device/shutdown.ts rename to src/commands/device/shutdown.ts diff --git a/lib/commands/device/start-service.ts b/src/commands/device/start-service.ts similarity index 100% rename from lib/commands/device/start-service.ts rename to src/commands/device/start-service.ts diff --git a/lib/commands/device/stop-service.ts b/src/commands/device/stop-service.ts similarity index 100% rename from lib/commands/device/stop-service.ts rename to src/commands/device/stop-service.ts diff --git a/lib/commands/device/track-fleet.ts b/src/commands/device/track-fleet.ts similarity index 100% rename from lib/commands/device/track-fleet.ts rename to src/commands/device/track-fleet.ts diff --git a/lib/commands/devices/index.ts b/src/commands/devices/index.ts similarity index 100% rename from lib/commands/devices/index.ts rename to src/commands/devices/index.ts diff --git a/lib/commands/devices/supported.ts b/src/commands/devices/supported.ts similarity index 100% rename from lib/commands/devices/supported.ts rename to src/commands/devices/supported.ts diff --git a/lib/commands/env/add.ts b/src/commands/env/add.ts similarity index 100% rename from lib/commands/env/add.ts rename to src/commands/env/add.ts diff --git a/lib/commands/env/rename.ts b/src/commands/env/rename.ts similarity index 100% rename from lib/commands/env/rename.ts rename to src/commands/env/rename.ts diff --git a/lib/commands/env/rm.ts b/src/commands/env/rm.ts similarity index 100% rename from lib/commands/env/rm.ts rename to src/commands/env/rm.ts diff --git a/lib/commands/envs/index.ts b/src/commands/envs/index.ts similarity index 100% rename from lib/commands/envs/index.ts rename to src/commands/envs/index.ts diff --git a/lib/commands/fleet/create.ts b/src/commands/fleet/create.ts similarity index 100% rename from lib/commands/fleet/create.ts rename to src/commands/fleet/create.ts diff --git a/lib/commands/fleet/index.ts b/src/commands/fleet/index.ts similarity index 79% rename from lib/commands/fleet/index.ts rename to src/commands/fleet/index.ts index b59c135a..b34be44b 100644 --- a/lib/commands/fleet/index.ts +++ b/src/commands/fleet/index.ts @@ -20,7 +20,7 @@ import { Flags } from '@oclif/core'; import Command from '../../command'; import * as cf from '../../utils/common-flags'; import * as ca from '../../utils/common-args'; -import { getBalenaSdk, stripIndent } from '../../utils/lazy'; +import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; import { applicationIdInfo } from '../../utils/messages'; export default class FleetCmd extends Command { @@ -49,7 +49,7 @@ export default class FleetCmd extends Command { default: false, description: 'open fleet dashboard page', }), - ...cf.dataOutputFlags, + json: cf.json, }; public static authenticated = true; @@ -78,16 +78,28 @@ export default class FleetCmd extends Command { return; } - const outputApplication = { - ...application, + const applicationToDisplay = { + id: application.id, + app_name: application.app_name, + slug: application.slug, device_type: application.is_for__device_type[0].slug, commit: application.should_be_running__release[0]?.commit, }; - await this.outputData( - outputApplication, - ['app_name', 'id', 'device_type', 'slug', 'commit'], - options, + if (options.json) { + console.log(JSON.stringify(applicationToDisplay, null, 4)); + return; + } + + // Emulate table.vertical title output, but avoid uppercasing and inserting spaces + console.log(`== ${applicationToDisplay.app_name}`); + console.log( + getVisuals().table.vertical(applicationToDisplay, [ + 'id', + 'device_type', + 'slug', + 'commit', + ]), ); } } diff --git a/lib/commands/fleet/pin.ts b/src/commands/fleet/pin.ts similarity index 100% rename from lib/commands/fleet/pin.ts rename to src/commands/fleet/pin.ts diff --git a/lib/commands/fleet/purge.ts b/src/commands/fleet/purge.ts similarity index 100% rename from lib/commands/fleet/purge.ts rename to src/commands/fleet/purge.ts diff --git a/lib/commands/fleet/rename.ts b/src/commands/fleet/rename.ts similarity index 100% rename from lib/commands/fleet/rename.ts rename to src/commands/fleet/rename.ts diff --git a/lib/commands/fleet/restart.ts b/src/commands/fleet/restart.ts similarity index 100% rename from lib/commands/fleet/restart.ts rename to src/commands/fleet/restart.ts diff --git a/lib/commands/fleet/rm.ts b/src/commands/fleet/rm.ts similarity index 100% rename from lib/commands/fleet/rm.ts rename to src/commands/fleet/rm.ts diff --git a/lib/commands/fleet/track-latest.ts b/src/commands/fleet/track-latest.ts similarity index 100% rename from lib/commands/fleet/track-latest.ts rename to src/commands/fleet/track-latest.ts diff --git a/lib/commands/fleets/index.ts b/src/commands/fleets/index.ts similarity index 79% rename from lib/commands/fleets/index.ts rename to src/commands/fleets/index.ts index fe649c18..e3980b08 100644 --- a/lib/commands/fleets/index.ts +++ b/src/commands/fleets/index.ts @@ -19,7 +19,7 @@ import type * as BalenaSdk from 'balena-sdk'; import Command from '../../command'; import * as cf from '../../utils/common-flags'; -import { getBalenaSdk, stripIndent } from '../../utils/lazy'; +import { getBalenaSdk, getVisuals, stripIndent } from '../../utils/lazy'; interface ExtendedApplication extends ApplicationWithDeviceTypeSlug { device_count: number; @@ -42,8 +42,8 @@ export default class FleetsCmd extends Command { public static usage = 'fleets'; public static flags = { - ...cf.dataSetOutputFlags, help: cf.help, + json: cf.json, }; public static authenticated = true; @@ -77,17 +77,29 @@ export default class FleetsCmd extends Command { application.device_type = application.is_for__device_type[0].slug; }); - await this.outputData( - applications, - [ + const applicationsToDisplay = applications.map((application) => ({ + id: application.id, + app_name: application.app_name, + slug: application.slug, + device_type: application.device_type, + online_devices: application.online_devices, + device_count: application.device_count, + })); + + if (options.json) { + console.log(JSON.stringify(applicationsToDisplay, null, 4)); + return; + } + + console.log( + getVisuals().table.horizontal(applicationsToDisplay, [ 'id', - 'app_name', + 'app_name => NAME', 'slug', 'device_type', 'device_count', 'online_devices', - ], - options, + ]), ); } } diff --git a/lib/commands/internal/osinit.ts b/src/commands/internal/osinit.ts similarity index 100% rename from lib/commands/internal/osinit.ts rename to src/commands/internal/osinit.ts diff --git a/lib/commands/join/index.ts b/src/commands/join/index.ts similarity index 100% rename from lib/commands/join/index.ts rename to src/commands/join/index.ts diff --git a/lib/commands/key/add.ts b/src/commands/key/add.ts similarity index 100% rename from lib/commands/key/add.ts rename to src/commands/key/add.ts diff --git a/lib/commands/key/index.ts b/src/commands/key/index.ts similarity index 100% rename from lib/commands/key/index.ts rename to src/commands/key/index.ts diff --git a/lib/commands/key/rm.ts b/src/commands/key/rm.ts similarity index 100% rename from lib/commands/key/rm.ts rename to src/commands/key/rm.ts diff --git a/lib/commands/keys/index.ts b/src/commands/keys/index.ts similarity index 100% rename from lib/commands/keys/index.ts rename to src/commands/keys/index.ts diff --git a/lib/commands/leave/index.ts b/src/commands/leave/index.ts similarity index 100% rename from lib/commands/leave/index.ts rename to src/commands/leave/index.ts diff --git a/lib/commands/local/configure.ts b/src/commands/local/configure.ts similarity index 100% rename from lib/commands/local/configure.ts rename to src/commands/local/configure.ts diff --git a/lib/commands/local/flash.ts b/src/commands/local/flash.ts similarity index 100% rename from lib/commands/local/flash.ts rename to src/commands/local/flash.ts diff --git a/lib/commands/login/index.ts b/src/commands/login/index.ts similarity index 100% rename from lib/commands/login/index.ts rename to src/commands/login/index.ts diff --git a/lib/commands/logout/index.ts b/src/commands/logout/index.ts similarity index 100% rename from lib/commands/logout/index.ts rename to src/commands/logout/index.ts diff --git a/lib/commands/logs/index.ts b/src/commands/logs/index.ts similarity index 100% rename from lib/commands/logs/index.ts rename to src/commands/logs/index.ts diff --git a/lib/commands/notes/index.ts b/src/commands/notes/index.ts similarity index 100% rename from lib/commands/notes/index.ts rename to src/commands/notes/index.ts diff --git a/lib/commands/orgs/index.ts b/src/commands/orgs/index.ts similarity index 100% rename from lib/commands/orgs/index.ts rename to src/commands/orgs/index.ts diff --git a/lib/commands/os/build-config.ts b/src/commands/os/build-config.ts similarity index 100% rename from lib/commands/os/build-config.ts rename to src/commands/os/build-config.ts diff --git a/lib/commands/os/configure.ts b/src/commands/os/configure.ts similarity index 100% rename from lib/commands/os/configure.ts rename to src/commands/os/configure.ts diff --git a/lib/commands/os/download.ts b/src/commands/os/download.ts similarity index 100% rename from lib/commands/os/download.ts rename to src/commands/os/download.ts diff --git a/lib/commands/os/initialize.ts b/src/commands/os/initialize.ts similarity index 100% rename from lib/commands/os/initialize.ts rename to src/commands/os/initialize.ts diff --git a/lib/commands/os/versions.ts b/src/commands/os/versions.ts similarity index 100% rename from lib/commands/os/versions.ts rename to src/commands/os/versions.ts diff --git a/lib/commands/preload/index.ts b/src/commands/preload/index.ts similarity index 100% rename from lib/commands/preload/index.ts rename to src/commands/preload/index.ts diff --git a/lib/commands/push/index.ts b/src/commands/push/index.ts similarity index 100% rename from lib/commands/push/index.ts rename to src/commands/push/index.ts diff --git a/lib/commands/release/finalize.ts b/src/commands/release/finalize.ts similarity index 100% rename from lib/commands/release/finalize.ts rename to src/commands/release/finalize.ts diff --git a/lib/commands/release/index.ts b/src/commands/release/index.ts similarity index 100% rename from lib/commands/release/index.ts rename to src/commands/release/index.ts diff --git a/lib/commands/release/invalidate.ts b/src/commands/release/invalidate.ts similarity index 100% rename from lib/commands/release/invalidate.ts rename to src/commands/release/invalidate.ts diff --git a/lib/commands/release/validate.ts b/src/commands/release/validate.ts similarity index 100% rename from lib/commands/release/validate.ts rename to src/commands/release/validate.ts diff --git a/lib/commands/releases/index.ts b/src/commands/releases/index.ts similarity index 100% rename from lib/commands/releases/index.ts rename to src/commands/releases/index.ts diff --git a/lib/commands/scan/index.ts b/src/commands/scan/index.ts similarity index 100% rename from lib/commands/scan/index.ts rename to src/commands/scan/index.ts diff --git a/lib/commands/settings/index.ts b/src/commands/settings/index.ts similarity index 100% rename from lib/commands/settings/index.ts rename to src/commands/settings/index.ts diff --git a/lib/commands/ssh/index.ts b/src/commands/ssh/index.ts similarity index 100% rename from lib/commands/ssh/index.ts rename to src/commands/ssh/index.ts diff --git a/lib/commands/support/index.ts b/src/commands/support/index.ts similarity index 100% rename from lib/commands/support/index.ts rename to src/commands/support/index.ts diff --git a/lib/commands/tag/rm.ts b/src/commands/tag/rm.ts similarity index 100% rename from lib/commands/tag/rm.ts rename to src/commands/tag/rm.ts diff --git a/lib/commands/tag/set.ts b/src/commands/tag/set.ts similarity index 100% rename from lib/commands/tag/set.ts rename to src/commands/tag/set.ts diff --git a/lib/commands/tags/index.ts b/src/commands/tags/index.ts similarity index 100% rename from lib/commands/tags/index.ts rename to src/commands/tags/index.ts diff --git a/lib/commands/tunnel/index.ts b/src/commands/tunnel/index.ts similarity index 100% rename from lib/commands/tunnel/index.ts rename to src/commands/tunnel/index.ts diff --git a/lib/commands/util/available-drives.ts b/src/commands/util/available-drives.ts similarity index 100% rename from lib/commands/util/available-drives.ts rename to src/commands/util/available-drives.ts diff --git a/lib/commands/version/index.ts b/src/commands/version/index.ts similarity index 100% rename from lib/commands/version/index.ts rename to src/commands/version/index.ts diff --git a/lib/commands/whoami/index.ts b/src/commands/whoami/index.ts similarity index 100% rename from lib/commands/whoami/index.ts rename to src/commands/whoami/index.ts diff --git a/lib/config.ts b/src/config.ts similarity index 100% rename from lib/config.ts rename to src/config.ts diff --git a/lib/deprecation.ts b/src/deprecation.ts similarity index 100% rename from lib/deprecation.ts rename to src/deprecation.ts diff --git a/lib/errors.ts b/src/errors.ts similarity index 100% rename from lib/errors.ts rename to src/errors.ts diff --git a/lib/events.ts b/src/events.ts similarity index 98% rename from lib/events.ts rename to src/events.ts index fd0f74f6..3aa2826a 100644 --- a/lib/events.ts +++ b/src/events.ts @@ -30,7 +30,7 @@ import { stripIndent } from './utils/lazy'; * * The username and command signature are also added as extra context * information in Sentry.io error reporting, for CLI debugging purposes - * (mainly unexpected/unhandled exceptions -- see also `lib/errors.ts`). + * (mainly unexpected/unhandled exceptions -- see also `src/errors.ts`). * * For more details on the data collected by balena generally, check this page: * https://www.balena.io/docs/learn/more/collected-data/ diff --git a/lib/fast-boot.ts b/src/fast-boot.ts similarity index 96% rename from lib/fast-boot.ts rename to src/fast-boot.ts index d66dd499..f178fdb6 100644 --- a/lib/fast-boot.ts +++ b/src/fast-boot.ts @@ -20,7 +20,7 @@ * we have permissions over the cache file before even attempting to load * fast boot. * DON'T IMPORT BALENA-CLI MODULES HERE, as this module is loaded directly - * from `bin/run.js`, before the CLI's entrypoint in `lib/app.ts`. + * from `bin/run.js`, before the CLI's entrypoint in `src/app.ts`. */ import * as fs from 'fs'; @@ -63,7 +63,7 @@ async function $start() { process.env.BALENARC_DATA_DIRECTORY || path.join(os.homedir(), dotBalena), ); // Consider that the CLI may be installed to a folder owned by root - // such as `/usr[/local]/lib/balena-cli`, while being executed by + // such as `/usr[/local]/src/balena-cli`, while being executed by // a regular user account. const cacheFile = path.join(dataDir, 'cli-module-cache.json'); const root = path.join(__dirname, '..'); diff --git a/lib/global.d.ts b/src/global.d.ts similarity index 100% rename from lib/global.d.ts rename to src/global.d.ts diff --git a/lib/help.ts b/src/help.ts similarity index 100% rename from lib/help.ts rename to src/help.ts diff --git a/lib/hooks/command-not-found/suggest.ts b/src/hooks/command-not-found/suggest.ts similarity index 100% rename from lib/hooks/command-not-found/suggest.ts rename to src/hooks/command-not-found/suggest.ts diff --git a/lib/hooks/prerun/track.ts b/src/hooks/prerun/track.ts similarity index 100% rename from lib/hooks/prerun/track.ts rename to src/hooks/prerun/track.ts diff --git a/lib/preparser.ts b/src/preparser.ts similarity index 100% rename from lib/preparser.ts rename to src/preparser.ts diff --git a/lib/utils/application-create.ts b/src/utils/application-create.ts similarity index 100% rename from lib/utils/application-create.ts rename to src/utils/application-create.ts diff --git a/lib/utils/bootstrap.ts b/src/utils/bootstrap.ts similarity index 98% rename from lib/utils/bootstrap.ts rename to src/utils/bootstrap.ts index bcf5c587..679e66f3 100644 --- a/lib/utils/bootstrap.ts +++ b/src/utils/bootstrap.ts @@ -130,8 +130,8 @@ let cachedUsername: CachedUsername | undefined; /** * Return the parsed contents of the `~/.balena/cachedUsername` file. If the file * does not exist, create it with the details from the cloud. If not connected - * to the internet, return undefined. This function is used by `lib/events.ts` - * (event tracking) and `lib/utils/device/ssh.ts` and needs to gracefully handle + * to the internet, return undefined. This function is used by `src/events.ts` + * (event tracking) and `src/utils/device/ssh.ts` and needs to gracefully handle * the scenario of not being connected to the internet. */ export async function getCachedUsername(): Promise { diff --git a/lib/utils/cloud.ts b/src/utils/cloud.ts similarity index 100% rename from lib/utils/cloud.ts rename to src/utils/cloud.ts diff --git a/lib/utils/common-args.ts b/src/utils/common-args.ts similarity index 100% rename from lib/utils/common-args.ts rename to src/utils/common-args.ts diff --git a/lib/utils/common-flags.ts b/src/utils/common-flags.ts similarity index 76% rename from lib/utils/common-flags.ts rename to src/utils/common-flags.ts index 0941ed43..7707e6c9 100644 --- a/lib/utils/common-flags.ts +++ b/src/utils/common-flags.ts @@ -104,36 +104,3 @@ export const json = Flags.boolean({ description: 'produce JSON output instead of tabular output', default: false, }); - -export const dataOutputFlags = { - fields: Flags.string({ - description: 'only show provided fields (comma-separated)', - }), - json: Flags.boolean({ - char: 'j', - exclusive: ['no-truncate'], - description: 'output in json format', - default: false, - }), -}; - -export const dataSetOutputFlags = { - ...dataOutputFlags, - filter: Flags.string({ - description: - 'filter results by substring matching of a given field, eg: --filter field=foo', - }), - 'no-header': Flags.boolean({ - exclusive: ['json'], - description: 'hide table header from output', - default: false, - }), - 'no-truncate': Flags.boolean({ - exclusive: ['json'], - description: 'do not truncate output to fit screen', - default: false, - }), - sort: Flags.string({ - description: `field to sort by (prepend '-' for descending order)`, - }), -}; diff --git a/lib/utils/compose-types.d.ts b/src/utils/compose-types.d.ts similarity index 100% rename from lib/utils/compose-types.d.ts rename to src/utils/compose-types.d.ts diff --git a/lib/utils/compose.ts b/src/utils/compose.ts similarity index 100% rename from lib/utils/compose.ts rename to src/utils/compose.ts diff --git a/lib/utils/compose_ts.ts b/src/utils/compose_ts.ts similarity index 100% rename from lib/utils/compose_ts.ts rename to src/utils/compose_ts.ts diff --git a/lib/utils/config.ts b/src/utils/config.ts similarity index 100% rename from lib/utils/config.ts rename to src/utils/config.ts diff --git a/lib/utils/deploy-legacy.ts b/src/utils/deploy-legacy.ts similarity index 100% rename from lib/utils/deploy-legacy.ts rename to src/utils/deploy-legacy.ts diff --git a/lib/utils/device/api.ts b/src/utils/device/api.ts similarity index 100% rename from lib/utils/device/api.ts rename to src/utils/device/api.ts diff --git a/lib/utils/device/deploy.ts b/src/utils/device/deploy.ts similarity index 100% rename from lib/utils/device/deploy.ts rename to src/utils/device/deploy.ts diff --git a/lib/utils/device/errors.ts b/src/utils/device/errors.ts similarity index 100% rename from lib/utils/device/errors.ts rename to src/utils/device/errors.ts diff --git a/lib/utils/device/live.ts b/src/utils/device/live.ts similarity index 100% rename from lib/utils/device/live.ts rename to src/utils/device/live.ts diff --git a/lib/utils/device/logs.ts b/src/utils/device/logs.ts similarity index 100% rename from lib/utils/device/logs.ts rename to src/utils/device/logs.ts diff --git a/lib/utils/device/ssh.ts b/src/utils/device/ssh.ts similarity index 100% rename from lib/utils/device/ssh.ts rename to src/utils/device/ssh.ts diff --git a/lib/utils/discover.ts b/src/utils/discover.ts similarity index 100% rename from lib/utils/discover.ts rename to src/utils/discover.ts diff --git a/lib/utils/docker.ts b/src/utils/docker.ts similarity index 100% rename from lib/utils/docker.ts rename to src/utils/docker.ts diff --git a/lib/utils/env-common.ts b/src/utils/env-common.ts similarity index 100% rename from lib/utils/env-common.ts rename to src/utils/env-common.ts diff --git a/lib/utils/eol-conversion.ts b/src/utils/eol-conversion.ts similarity index 100% rename from lib/utils/eol-conversion.ts rename to src/utils/eol-conversion.ts diff --git a/lib/utils/helpers.ts b/src/utils/helpers.ts similarity index 100% rename from lib/utils/helpers.ts rename to src/utils/helpers.ts diff --git a/lib/utils/ignore.ts b/src/utils/ignore.ts similarity index 100% rename from lib/utils/ignore.ts rename to src/utils/ignore.ts diff --git a/lib/utils/lazy.ts b/src/utils/lazy.ts similarity index 100% rename from lib/utils/lazy.ts rename to src/utils/lazy.ts diff --git a/lib/utils/logger.ts b/src/utils/logger.ts similarity index 100% rename from lib/utils/logger.ts rename to src/utils/logger.ts diff --git a/lib/utils/messages.ts b/src/utils/messages.ts similarity index 100% rename from lib/utils/messages.ts rename to src/utils/messages.ts diff --git a/lib/utils/normalization.ts b/src/utils/normalization.ts similarity index 100% rename from lib/utils/normalization.ts rename to src/utils/normalization.ts diff --git a/lib/utils/oclif-utils.ts b/src/utils/oclif-utils.ts similarity index 100% rename from lib/utils/oclif-utils.ts rename to src/utils/oclif-utils.ts diff --git a/lib/utils/patterns.ts b/src/utils/patterns.ts similarity index 100% rename from lib/utils/patterns.ts rename to src/utils/patterns.ts diff --git a/lib/utils/pine.ts b/src/utils/pine.ts similarity index 100% rename from lib/utils/pine.ts rename to src/utils/pine.ts diff --git a/lib/utils/promote.ts b/src/utils/promote.ts similarity index 100% rename from lib/utils/promote.ts rename to src/utils/promote.ts diff --git a/lib/utils/proxy.ts b/src/utils/proxy.ts similarity index 100% rename from lib/utils/proxy.ts rename to src/utils/proxy.ts diff --git a/lib/utils/qemu.ts b/src/utils/qemu.ts similarity index 100% rename from lib/utils/qemu.ts rename to src/utils/qemu.ts diff --git a/lib/utils/remote-build.ts b/src/utils/remote-build.ts similarity index 100% rename from lib/utils/remote-build.ts rename to src/utils/remote-build.ts diff --git a/lib/utils/sdk.ts b/src/utils/sdk.ts similarity index 100% rename from lib/utils/sdk.ts rename to src/utils/sdk.ts diff --git a/lib/utils/ssh.ts b/src/utils/ssh.ts similarity index 100% rename from lib/utils/ssh.ts rename to src/utils/ssh.ts diff --git a/lib/utils/streams.ts b/src/utils/streams.ts similarity index 100% rename from lib/utils/streams.ts rename to src/utils/streams.ts diff --git a/lib/utils/sudo.ts b/src/utils/sudo.ts similarity index 100% rename from lib/utils/sudo.ts rename to src/utils/sudo.ts diff --git a/lib/utils/tty.ts b/src/utils/tty.ts similarity index 100% rename from lib/utils/tty.ts rename to src/utils/tty.ts diff --git a/lib/utils/tunnel.ts b/src/utils/tunnel.ts similarity index 100% rename from lib/utils/tunnel.ts rename to src/utils/tunnel.ts diff --git a/lib/utils/umount.ts b/src/utils/umount.ts similarity index 100% rename from lib/utils/umount.ts rename to src/utils/umount.ts diff --git a/lib/utils/update.ts b/src/utils/update.ts similarity index 100% rename from lib/utils/update.ts rename to src/utils/update.ts diff --git a/lib/utils/validation.ts b/src/utils/validation.ts similarity index 100% rename from lib/utils/validation.ts rename to src/utils/validation.ts diff --git a/lib/utils/version.ts b/src/utils/version.ts similarity index 100% rename from lib/utils/version.ts rename to src/utils/version.ts diff --git a/lib/utils/which.ts b/src/utils/which.ts similarity index 100% rename from lib/utils/which.ts rename to src/utils/which.ts diff --git a/tests/commands/deploy.spec.ts b/tests/commands/deploy.spec.ts index d8537524..b256bea6 100644 --- a/tests/commands/deploy.spec.ts +++ b/tests/commands/deploy.spec.ts @@ -87,7 +87,6 @@ describe('balena deploy', function () { api.expectGetRelease(); api.expectGetUser(); api.expectGetService({ serviceName: 'main' }); - api.expectPostService409(); api.expectGetAuth(); api.expectPostImage(); api.expectPostImageIsPartOfRelease(); diff --git a/tests/framework/output.spec.ts b/tests/framework/output.spec.ts deleted file mode 100644 index 975534fc..00000000 --- a/tests/framework/output.spec.ts +++ /dev/null @@ -1,255 +0,0 @@ -/** - * @license - * Copyright 2020-2021 Balena Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* tslint:disable: prefer-const no-empty */ - -import rewire = require('rewire'); -import sinon = require('sinon'); -import { expect } from 'chai'; - -const dataItem = { - name: 'item1', - id: 1, - thing_color: 'blue', - thing_shape: 'square', -}; - -const dataSet = [ - { - name: 'item1', - id: 1, - thing_color: 'red', - thing_shape: 'square', - }, - { - name: 'item2', - id: 2, - thing_color: 'blue', - thing_shape: 'round', - }, -]; - -describe('outputData', function () { - let outputData: any; - let outputDataSetSpy: any; - let outputDataItemSpy: any; - - this.beforeEach(() => { - const output = rewire('../../build/framework/output'); - - outputDataSetSpy = sinon.spy(); - outputDataItemSpy = sinon.spy(); - - output.__set__('outputDataSet', outputDataSetSpy); - output.__set__('outputDataItem', outputDataItemSpy); - - outputData = output.__get__('outputData'); - }); - - it('should call outputDataSet function when data param is an array', async () => { - await outputData(dataSet); - expect(outputDataSetSpy.called).to.be.true; - expect(outputDataItemSpy.called).to.be.false; - }); - - it('should call outputDataItem function when data param is an object', async () => { - await outputData(dataItem); - expect(outputDataSetSpy.called).to.be.false; - expect(outputDataItemSpy.called).to.be.true; - }); -}); - -describe('outputDataSet', function () { - let outputDataSet: any; - let printLineSpy: any; - - this.beforeEach(() => { - const output = rewire('../../build/framework/output'); - printLineSpy = sinon.spy(); - output.__set__('printLine', printLineSpy); - outputDataSet = output.__get__('outputDataSet'); - }); - - it('should only output fields specified in `fields` param, in that order', async () => { - const fields = ['id', 'name', 'thing_color']; - const options = {}; - - await outputDataSet(dataSet, fields, options); - - // check correct number of rows (2 data, 2 header) - expect(printLineSpy.callCount).to.equal(4); - const headerLine = printLineSpy.firstCall.firstArg.toLowerCase(); - // check we have fields we specified - fields.forEach((f) => { - expect(headerLine).to.include(f.replace(/_/g, ' ')); - }); - // check we don't have fields we didn't specify - expect(headerLine).to.not.include('thing_shape'); - // check order - // split header using the `name` column as delimiter - const splitHeader = headerLine.split('name'); - expect(splitHeader[0]).to.include('id'); - expect(splitHeader[1]).to.include('thing'); - }); - - /* - it('should output fields in the order specified in `fields` param', async () => { - const fields = ['thing_color', 'id', 'name']; - const options = {}; - - await outputDataSet(dataSet, fields, options); - - const headerLine = printLineSpy.firstCall.firstArg.toLowerCase(); - // split header using the `it` column as delimiter - const splitHeader = headerLine.split('id'); - expect(splitHeader[0]).to.include('thing'); - expect(splitHeader[1]).to.include('name'); - }); - */ - - it('should only output fields specified in `options.fields` if present', async () => { - const fields = ['name', 'id', 'thing_color', 'thing_shape']; - const options = { - // test all formats - fields: 'Name,thing_color,Thing shape', - }; - - await outputDataSet(dataSet, fields, options); - - const headerLine = printLineSpy.firstCall.firstArg.toLowerCase(); - // check we have fields we specified - expect(headerLine).to.include('name'); - expect(headerLine).to.include('thing color'); - expect(headerLine).to.include('thing shape'); - // check we don't have fields we didn't specify - expect(headerLine).to.not.include('id'); - }); - - it('should output records in order specified by `options.sort` if present', async () => { - const fields = ['name', 'id', 'thing_color', 'thing_shape']; - const options = { - sort: 'thing shape', - 'no-header': true, - }; - - await outputDataSet(dataSet, fields, options); - - // blue should come before red - expect(printLineSpy.getCall(0).firstArg).to.include('blue'); - expect(printLineSpy.getCall(1).firstArg).to.include('red'); - }); - - it('should only output records that match filter specified by `options.filter` if present', async () => { - const fields = ['name', 'id', 'thing_color', 'thing_shape']; - const options = { - filter: 'thing color=red', - 'no-header': true, - }; - - await outputDataSet(dataSet, fields, options); - - // check correct number of rows (1 matched data, no-header) - expect(printLineSpy.callCount).to.equal(1); - expect(printLineSpy.getCall(0).firstArg).to.include('red'); - }); - - it('should output data in json format, if `options.json` true', async () => { - const fields = ['name', 'thing_color', 'thing_shape']; - const options = { - json: true, - }; - - // TODO: I've run into an oclif cli-ux bug, where numbers are output as strings in json - // (this can be seen by including 'id' in the fields list above). - // Issue opened: https://github.com/oclif/cli-ux/issues/309 - // For now removing id for this test. - const clonedDataSet = JSON.parse(JSON.stringify(dataSet)); - clonedDataSet.forEach((d: any) => { - delete d.id; - }); - - const expectedJson = JSON.stringify(clonedDataSet, undefined, 2); - - await outputDataSet(dataSet, fields, options); - - expect(printLineSpy.callCount).to.equal(1); - expect(printLineSpy.getCall(0).firstArg).to.equal(expectedJson); - }); -}); - -describe('outputDataItem', function () { - let outputDataItem: any; - let printLineSpy: any; - - this.beforeEach(() => { - const output = rewire('../../build/framework/output'); - printLineSpy = sinon.spy(); - output.__set__('printLine', printLineSpy); - outputDataItem = output.__get__('outputDataItem'); - }); - - it('should only output fields specified in `fields` param, in that order', async () => { - const fields = ['id', 'name', 'thing_color']; - const options = {}; - - await outputDataItem(dataItem, fields, options); - - // check correct number of rows (3 fields) - expect(printLineSpy.callCount).to.equal(3); - // check we have fields we specified - fields.forEach((f, index) => { - const kvPair = printLineSpy.getCall(index).firstArg.split(':'); - expect(kvPair[0].toLowerCase()).to.include(f.replace(/_/g, ' ')); - expect(kvPair[1]).to.include((dataItem as any)[f]); - }); - }); - - it('should only output fields specified in `options.fields` if present', async () => { - const fields = ['name', 'id', 'thing_color', 'thing_shape']; - const options = { - // test all formats - fields: 'Name,thing_color,Thing shape', - }; - - const expectedFields = ['name', 'thing_color', 'thing_shape']; - - await outputDataItem(dataItem, fields, options); - - // check correct number of rows (3 fields) - expect(printLineSpy.callCount).to.equal(3); - // check we have fields we specified - expectedFields.forEach((f, index) => { - const kvPair = printLineSpy.getCall(index).firstArg.split(':'); - expect(kvPair[0].toLowerCase()).to.include(f.replace(/_/g, ' ')); - expect(kvPair[1]).to.include((dataItem as any)[f]); - }); - }); - - it('should output data in json format, if `options.json` true', async () => { - const fields = ['name', 'id', 'thing_color', 'thing_shape']; - const options = { - json: true, - }; - - const expectedJson = JSON.stringify(dataItem, undefined, 2); - - await outputDataItem(dataItem, fields, options); - - expect(printLineSpy.callCount).to.equal(1); - expect(printLineSpy.getCall(0).firstArg).to.equal(expectedJson); - }); -}); diff --git a/tests/nock/balena-api-mock.ts b/tests/nock/balena-api-mock.ts index 0d50f9d2..2dcaee39 100644 --- a/tests/nock/balena-api-mock.ts +++ b/tests/nock/balena-api-mock.ts @@ -390,9 +390,12 @@ export class BalenaAPIMock extends NockMock { serviceName: string; }) { const serviceId = opts.serviceId || 243768; - this.optGet(/^\/v\d+\/service($|\?)/, opts).reply(200, { - d: [{ id: serviceId, service_name: opts.serviceName }], - }); + this.optGet(/^\/v\d+\/service(\(\w+=\d+,\w+=%27\w+%27\))?$/, opts).reply( + 200, + { + d: [{ id: serviceId, service_name: opts.serviceName }], + }, + ); } public expectGetServiceFromApp(opts: { @@ -410,13 +413,6 @@ export class BalenaAPIMock extends NockMock { ); } - public expectPostService409(opts: ScopeOpts = {}) { - this.optPost(/^\/v\d+\/service$/, opts).reply( - 409, - 'Unique key constraint violated', - ); - } - /** * Mocks balena-release call */ diff --git a/tests/utils/device/live.spec.ts b/tests/utils/device/live.spec.ts index 844c01d2..6ca79bb6 100644 --- a/tests/utils/device/live.spec.ts +++ b/tests/utils/device/live.spec.ts @@ -21,7 +21,7 @@ import { promises as fs } from 'fs'; import * as path from 'path'; import { promisify } from 'util'; -import { LivepushManager } from '../../../lib/utils/device/live'; +import { LivepushManager } from '../../../src/utils/device/live'; import { resetDockerignoreCache } from '../../docker-build'; import { setupDockerignoreTestData } from '../../projects'; @@ -42,11 +42,11 @@ class MockLivepushManager extends LivepushManager { composition: { version: '2.1', services: {} }, buildTasks: [], docker: {} as import('dockerode'), - api: {} as import('../../../lib/utils/device/api').DeviceAPI, - logger: {} as import('../../../lib/utils/logger'), + api: {} as import('../../../src/utils/device/api').DeviceAPI, + logger: {} as import('../../../src/utils/logger'), imageIds: {}, deployOpts: - {} as import('../../../lib/utils/device/deploy').DeviceDeployOptions, + {} as import('../../../src/utils/device/deploy').DeviceDeployOptions, }); } diff --git a/tsconfig.dev.json b/tsconfig.dev.json index 3b00a90e..9762f3df 100644 --- a/tsconfig.dev.json +++ b/tsconfig.dev.json @@ -6,7 +6,7 @@ }, "include": [ "./automation/**/*", - "./lib/**/*", + "./src/**/*", "./patches/*", "./tests/**/*", "./typings/**/*" diff --git a/tsconfig.json b/tsconfig.json index bfe183cb..8632c46d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,5 @@ ], "preserveSymlinks": true }, - "include": ["./lib/**/*", "./typings/**/*"] + "include": ["./src/**/*", "./typings/**/*"] }