From 63674c8201b2cbd2fe529a47ed3f5069e398c08a Mon Sep 17 00:00:00 2001 From: Otavio Jacobi Date: Wed, 17 Jul 2024 11:39:25 -0300 Subject: [PATCH 1/4] Use standard visuals table component for fleet/s This effectively removes the ability to filter/sort/customize the output table. The cli cannot properly handle this operations on all models and this one was inconsistent. For now we recommend that users that require parsing the CLI output use the output json format and do any kind of necessary parsing on it. Change-type: major --- docs/balena-cli.md | 28 +--- lib/command.ts | 4 - lib/commands/fleet/index.ts | 28 ++-- lib/commands/fleets/index.ts | 30 ++-- lib/framework/index.ts | 19 --- lib/framework/output.ts | 158 -------------------- lib/utils/common-flags.ts | 33 ----- tests/framework/output.spec.ts | 255 --------------------------------- 8 files changed, 43 insertions(+), 512 deletions(-) delete mode 100644 lib/framework/index.ts delete mode 100644 lib/framework/output.ts delete mode 100644 tests/framework/output.spec.ts diff --git a/docs/balena-cli.md b/docs/balena-cli.md index 8dd1ae8ffe..28a46c793b 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/command.ts b/lib/command.ts index 1b260a3587..4c5d66bd82 100644 --- a/lib/command.ts +++ b/lib/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/fleet/index.ts b/lib/commands/fleet/index.ts index b59c135a7d..b34be44b53 100644 --- a/lib/commands/fleet/index.ts +++ b/lib/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/fleets/index.ts b/lib/commands/fleets/index.ts index fe649c186b..01afa7243c 100644 --- a/lib/commands/fleets/index.ts +++ b/lib/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, + 'device_count', + ]), ); } } diff --git a/lib/framework/index.ts b/lib/framework/index.ts deleted file mode 100644 index 24097f7bf0..0000000000 --- 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 ae0e5132ac..0000000000 --- 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/lib/utils/common-flags.ts b/lib/utils/common-flags.ts index 0941ed4321..7707e6c9e9 100644 --- a/lib/utils/common-flags.ts +++ b/lib/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/tests/framework/output.spec.ts b/tests/framework/output.spec.ts deleted file mode 100644 index 975534fc63..0000000000 --- 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); - }); -}); From c9fa10b9c640cd245312bbc6981e850628d8a6b9 Mon Sep 17 00:00:00 2001 From: Otavio Jacobi Date: Fri, 19 Jul 2024 10:23:43 -0300 Subject: [PATCH 2/4] Update @balena/compose to 4.0.1 Update @balena/compose from 3.2.1 to 4.0.1 Change-type: major --- lib/commands/fleets/index.ts | 2 +- npm-shrinkwrap.json | 753 ++++++++++++++++------------------ package.json | 2 +- tests/commands/deploy.spec.ts | 1 - tests/nock/balena-api-mock.ts | 16 +- 5 files changed, 373 insertions(+), 401 deletions(-) diff --git a/lib/commands/fleets/index.ts b/lib/commands/fleets/index.ts index 01afa7243c..e3980b0852 100644 --- a/lib/commands/fleets/index.ts +++ b/lib/commands/fleets/index.ts @@ -97,8 +97,8 @@ export default class FleetsCmd extends Command { 'app_name => NAME', 'slug', 'device_type', - 'online_devices', 'device_count', + 'online_devices', ]), ); } diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 88fa40a98c..d28f17aafd 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==", - "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", + "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.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==", - "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", + "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.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 b49f107302..4b61e19aee 100644 --- a/package.json +++ b/package.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/tests/commands/deploy.spec.ts b/tests/commands/deploy.spec.ts index d85375246d..b256bea645 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/nock/balena-api-mock.ts b/tests/nock/balena-api-mock.ts index 0d50f9d25a..2dcaee3936 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 */ From 2b044348e0f5dbb40ae4a5a48a4dcf9eff0d4659 Mon Sep 17 00:00:00 2001 From: Otavio Jacobi Date: Thu, 22 Aug 2024 12:55:48 -0300 Subject: [PATCH 3/4] Rename the lib folder to src Change-type: major --- {lib => src}/app.ts | 0 {lib => src}/auth/index.ts | 0 {lib => src}/auth/pages/error.ejs | 0 {lib => src}/auth/pages/static/images/happy.png | Bin {lib => src}/auth/pages/static/images/sad.png | Bin {lib => src}/auth/pages/static/style.css | 0 {lib => src}/auth/pages/success.ejs | 0 {lib => src}/auth/server.ts | 0 {lib => src}/auth/utils.ts | 0 {lib => src}/command.ts | 0 {lib => src}/commands/api-key/generate.ts | 0 {lib => src}/commands/api-key/revoke.ts | 0 {lib => src}/commands/api-keys/index.ts | 0 {lib => src}/commands/app/create.ts | 0 {lib => src}/commands/block/create.ts | 0 {lib => src}/commands/build/index.ts | 0 {lib => src}/commands/config/generate.ts | 0 {lib => src}/commands/config/inject.ts | 0 {lib => src}/commands/config/read.ts | 0 {lib => src}/commands/config/reconfigure.ts | 0 {lib => src}/commands/config/write.ts | 0 {lib => src}/commands/deploy/index.ts | 0 {lib => src}/commands/device/deactivate.ts | 0 {lib => src}/commands/device/identify.ts | 0 {lib => src}/commands/device/index.ts | 0 {lib => src}/commands/device/init.ts | 0 {lib => src}/commands/device/local-mode.ts | 0 {lib => src}/commands/device/move.ts | 0 {lib => src}/commands/device/os-update.ts | 0 {lib => src}/commands/device/pin.ts | 0 {lib => src}/commands/device/public-url.ts | 0 {lib => src}/commands/device/purge.ts | 0 {lib => src}/commands/device/reboot.ts | 0 {lib => src}/commands/device/register.ts | 0 {lib => src}/commands/device/rename.ts | 0 {lib => src}/commands/device/restart.ts | 0 {lib => src}/commands/device/rm.ts | 0 {lib => src}/commands/device/shutdown.ts | 0 {lib => src}/commands/device/start-service.ts | 0 {lib => src}/commands/device/stop-service.ts | 0 {lib => src}/commands/device/track-fleet.ts | 0 {lib => src}/commands/devices/index.ts | 0 {lib => src}/commands/devices/supported.ts | 0 {lib => src}/commands/env/add.ts | 0 {lib => src}/commands/env/rename.ts | 0 {lib => src}/commands/env/rm.ts | 0 {lib => src}/commands/envs/index.ts | 0 {lib => src}/commands/fleet/create.ts | 0 {lib => src}/commands/fleet/index.ts | 0 {lib => src}/commands/fleet/pin.ts | 0 {lib => src}/commands/fleet/purge.ts | 0 {lib => src}/commands/fleet/rename.ts | 0 {lib => src}/commands/fleet/restart.ts | 0 {lib => src}/commands/fleet/rm.ts | 0 {lib => src}/commands/fleet/track-latest.ts | 0 {lib => src}/commands/fleets/index.ts | 0 {lib => src}/commands/internal/osinit.ts | 0 {lib => src}/commands/join/index.ts | 0 {lib => src}/commands/key/add.ts | 0 {lib => src}/commands/key/index.ts | 0 {lib => src}/commands/key/rm.ts | 0 {lib => src}/commands/keys/index.ts | 0 {lib => src}/commands/leave/index.ts | 0 {lib => src}/commands/local/configure.ts | 0 {lib => src}/commands/local/flash.ts | 0 {lib => src}/commands/login/index.ts | 0 {lib => src}/commands/logout/index.ts | 0 {lib => src}/commands/logs/index.ts | 0 {lib => src}/commands/notes/index.ts | 0 {lib => src}/commands/orgs/index.ts | 0 {lib => src}/commands/os/build-config.ts | 0 {lib => src}/commands/os/configure.ts | 0 {lib => src}/commands/os/download.ts | 0 {lib => src}/commands/os/initialize.ts | 0 {lib => src}/commands/os/versions.ts | 0 {lib => src}/commands/preload/index.ts | 0 {lib => src}/commands/push/index.ts | 0 {lib => src}/commands/release/finalize.ts | 0 {lib => src}/commands/release/index.ts | 0 {lib => src}/commands/release/invalidate.ts | 0 {lib => src}/commands/release/validate.ts | 0 {lib => src}/commands/releases/index.ts | 0 {lib => src}/commands/scan/index.ts | 0 {lib => src}/commands/settings/index.ts | 0 {lib => src}/commands/ssh/index.ts | 0 {lib => src}/commands/support/index.ts | 0 {lib => src}/commands/tag/rm.ts | 0 {lib => src}/commands/tag/set.ts | 0 {lib => src}/commands/tags/index.ts | 0 {lib => src}/commands/tunnel/index.ts | 0 {lib => src}/commands/util/available-drives.ts | 0 {lib => src}/commands/version/index.ts | 0 {lib => src}/commands/whoami/index.ts | 0 {lib => src}/config.ts | 0 {lib => src}/deprecation.ts | 0 {lib => src}/errors.ts | 0 {lib => src}/events.ts | 0 {lib => src}/fast-boot.ts | 0 {lib => src}/global.d.ts | 0 {lib => src}/help.ts | 0 {lib => src}/hooks/command-not-found/suggest.ts | 0 {lib => src}/hooks/prerun/track.ts | 0 {lib => src}/preparser.ts | 0 {lib => src}/utils/application-create.ts | 0 {lib => src}/utils/bootstrap.ts | 0 {lib => src}/utils/cloud.ts | 0 {lib => src}/utils/common-args.ts | 0 {lib => src}/utils/common-flags.ts | 0 {lib => src}/utils/compose-types.d.ts | 0 {lib => src}/utils/compose.ts | 0 {lib => src}/utils/compose_ts.ts | 0 {lib => src}/utils/config.ts | 0 {lib => src}/utils/deploy-legacy.ts | 0 {lib => src}/utils/device/api.ts | 0 {lib => src}/utils/device/deploy.ts | 0 {lib => src}/utils/device/errors.ts | 0 {lib => src}/utils/device/live.ts | 0 {lib => src}/utils/device/logs.ts | 0 {lib => src}/utils/device/ssh.ts | 0 {lib => src}/utils/discover.ts | 0 {lib => src}/utils/docker.ts | 0 {lib => src}/utils/env-common.ts | 0 {lib => src}/utils/eol-conversion.ts | 0 {lib => src}/utils/helpers.ts | 0 {lib => src}/utils/ignore.ts | 0 {lib => src}/utils/lazy.ts | 0 {lib => src}/utils/logger.ts | 0 {lib => src}/utils/messages.ts | 0 {lib => src}/utils/normalization.ts | 0 {lib => src}/utils/oclif-utils.ts | 0 {lib => src}/utils/patterns.ts | 0 {lib => src}/utils/pine.ts | 0 {lib => src}/utils/promote.ts | 0 {lib => src}/utils/proxy.ts | 0 {lib => src}/utils/qemu.ts | 0 {lib => src}/utils/remote-build.ts | 0 {lib => src}/utils/sdk.ts | 0 {lib => src}/utils/ssh.ts | 0 {lib => src}/utils/streams.ts | 0 {lib => src}/utils/sudo.ts | 0 {lib => src}/utils/tty.ts | 0 {lib => src}/utils/tunnel.ts | 0 {lib => src}/utils/umount.ts | 0 {lib => src}/utils/update.ts | 0 {lib => src}/utils/validation.ts | 0 {lib => src}/utils/version.ts | 0 {lib => src}/utils/which.ts | 0 147 files changed, 0 insertions(+), 0 deletions(-) rename {lib => src}/app.ts (100%) rename {lib => src}/auth/index.ts (100%) rename {lib => src}/auth/pages/error.ejs (100%) rename {lib => src}/auth/pages/static/images/happy.png (100%) rename {lib => src}/auth/pages/static/images/sad.png (100%) rename {lib => src}/auth/pages/static/style.css (100%) rename {lib => src}/auth/pages/success.ejs (100%) rename {lib => src}/auth/server.ts (100%) rename {lib => src}/auth/utils.ts (100%) rename {lib => src}/command.ts (100%) rename {lib => src}/commands/api-key/generate.ts (100%) rename {lib => src}/commands/api-key/revoke.ts (100%) rename {lib => src}/commands/api-keys/index.ts (100%) rename {lib => src}/commands/app/create.ts (100%) rename {lib => src}/commands/block/create.ts (100%) rename {lib => src}/commands/build/index.ts (100%) rename {lib => src}/commands/config/generate.ts (100%) rename {lib => src}/commands/config/inject.ts (100%) rename {lib => src}/commands/config/read.ts (100%) rename {lib => src}/commands/config/reconfigure.ts (100%) rename {lib => src}/commands/config/write.ts (100%) rename {lib => src}/commands/deploy/index.ts (100%) rename {lib => src}/commands/device/deactivate.ts (100%) rename {lib => src}/commands/device/identify.ts (100%) rename {lib => src}/commands/device/index.ts (100%) rename {lib => src}/commands/device/init.ts (100%) rename {lib => src}/commands/device/local-mode.ts (100%) rename {lib => src}/commands/device/move.ts (100%) rename {lib => src}/commands/device/os-update.ts (100%) rename {lib => src}/commands/device/pin.ts (100%) rename {lib => src}/commands/device/public-url.ts (100%) rename {lib => src}/commands/device/purge.ts (100%) rename {lib => src}/commands/device/reboot.ts (100%) rename {lib => src}/commands/device/register.ts (100%) rename {lib => src}/commands/device/rename.ts (100%) rename {lib => src}/commands/device/restart.ts (100%) rename {lib => src}/commands/device/rm.ts (100%) rename {lib => src}/commands/device/shutdown.ts (100%) rename {lib => src}/commands/device/start-service.ts (100%) rename {lib => src}/commands/device/stop-service.ts (100%) rename {lib => src}/commands/device/track-fleet.ts (100%) rename {lib => src}/commands/devices/index.ts (100%) rename {lib => src}/commands/devices/supported.ts (100%) rename {lib => src}/commands/env/add.ts (100%) rename {lib => src}/commands/env/rename.ts (100%) rename {lib => src}/commands/env/rm.ts (100%) rename {lib => src}/commands/envs/index.ts (100%) rename {lib => src}/commands/fleet/create.ts (100%) rename {lib => src}/commands/fleet/index.ts (100%) rename {lib => src}/commands/fleet/pin.ts (100%) rename {lib => src}/commands/fleet/purge.ts (100%) rename {lib => src}/commands/fleet/rename.ts (100%) rename {lib => src}/commands/fleet/restart.ts (100%) rename {lib => src}/commands/fleet/rm.ts (100%) rename {lib => src}/commands/fleet/track-latest.ts (100%) rename {lib => src}/commands/fleets/index.ts (100%) rename {lib => src}/commands/internal/osinit.ts (100%) rename {lib => src}/commands/join/index.ts (100%) rename {lib => src}/commands/key/add.ts (100%) rename {lib => src}/commands/key/index.ts (100%) rename {lib => src}/commands/key/rm.ts (100%) rename {lib => src}/commands/keys/index.ts (100%) rename {lib => src}/commands/leave/index.ts (100%) rename {lib => src}/commands/local/configure.ts (100%) rename {lib => src}/commands/local/flash.ts (100%) rename {lib => src}/commands/login/index.ts (100%) rename {lib => src}/commands/logout/index.ts (100%) rename {lib => src}/commands/logs/index.ts (100%) rename {lib => src}/commands/notes/index.ts (100%) rename {lib => src}/commands/orgs/index.ts (100%) rename {lib => src}/commands/os/build-config.ts (100%) rename {lib => src}/commands/os/configure.ts (100%) rename {lib => src}/commands/os/download.ts (100%) rename {lib => src}/commands/os/initialize.ts (100%) rename {lib => src}/commands/os/versions.ts (100%) rename {lib => src}/commands/preload/index.ts (100%) rename {lib => src}/commands/push/index.ts (100%) rename {lib => src}/commands/release/finalize.ts (100%) rename {lib => src}/commands/release/index.ts (100%) rename {lib => src}/commands/release/invalidate.ts (100%) rename {lib => src}/commands/release/validate.ts (100%) rename {lib => src}/commands/releases/index.ts (100%) rename {lib => src}/commands/scan/index.ts (100%) rename {lib => src}/commands/settings/index.ts (100%) rename {lib => src}/commands/ssh/index.ts (100%) rename {lib => src}/commands/support/index.ts (100%) rename {lib => src}/commands/tag/rm.ts (100%) rename {lib => src}/commands/tag/set.ts (100%) rename {lib => src}/commands/tags/index.ts (100%) rename {lib => src}/commands/tunnel/index.ts (100%) rename {lib => src}/commands/util/available-drives.ts (100%) rename {lib => src}/commands/version/index.ts (100%) rename {lib => src}/commands/whoami/index.ts (100%) rename {lib => src}/config.ts (100%) rename {lib => src}/deprecation.ts (100%) rename {lib => src}/errors.ts (100%) rename {lib => src}/events.ts (100%) rename {lib => src}/fast-boot.ts (100%) rename {lib => src}/global.d.ts (100%) rename {lib => src}/help.ts (100%) rename {lib => src}/hooks/command-not-found/suggest.ts (100%) rename {lib => src}/hooks/prerun/track.ts (100%) rename {lib => src}/preparser.ts (100%) rename {lib => src}/utils/application-create.ts (100%) rename {lib => src}/utils/bootstrap.ts (100%) rename {lib => src}/utils/cloud.ts (100%) rename {lib => src}/utils/common-args.ts (100%) rename {lib => src}/utils/common-flags.ts (100%) rename {lib => src}/utils/compose-types.d.ts (100%) rename {lib => src}/utils/compose.ts (100%) rename {lib => src}/utils/compose_ts.ts (100%) rename {lib => src}/utils/config.ts (100%) rename {lib => src}/utils/deploy-legacy.ts (100%) rename {lib => src}/utils/device/api.ts (100%) rename {lib => src}/utils/device/deploy.ts (100%) rename {lib => src}/utils/device/errors.ts (100%) rename {lib => src}/utils/device/live.ts (100%) rename {lib => src}/utils/device/logs.ts (100%) rename {lib => src}/utils/device/ssh.ts (100%) rename {lib => src}/utils/discover.ts (100%) rename {lib => src}/utils/docker.ts (100%) rename {lib => src}/utils/env-common.ts (100%) rename {lib => src}/utils/eol-conversion.ts (100%) rename {lib => src}/utils/helpers.ts (100%) rename {lib => src}/utils/ignore.ts (100%) rename {lib => src}/utils/lazy.ts (100%) rename {lib => src}/utils/logger.ts (100%) rename {lib => src}/utils/messages.ts (100%) rename {lib => src}/utils/normalization.ts (100%) rename {lib => src}/utils/oclif-utils.ts (100%) rename {lib => src}/utils/patterns.ts (100%) rename {lib => src}/utils/pine.ts (100%) rename {lib => src}/utils/promote.ts (100%) rename {lib => src}/utils/proxy.ts (100%) rename {lib => src}/utils/qemu.ts (100%) rename {lib => src}/utils/remote-build.ts (100%) rename {lib => src}/utils/sdk.ts (100%) rename {lib => src}/utils/ssh.ts (100%) rename {lib => src}/utils/streams.ts (100%) rename {lib => src}/utils/sudo.ts (100%) rename {lib => src}/utils/tty.ts (100%) rename {lib => src}/utils/tunnel.ts (100%) rename {lib => src}/utils/umount.ts (100%) rename {lib => src}/utils/update.ts (100%) rename {lib => src}/utils/validation.ts (100%) rename {lib => src}/utils/version.ts (100%) rename {lib => src}/utils/which.ts (100%) 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 100% rename from lib/command.ts rename to src/command.ts 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 100% rename from lib/commands/fleet/index.ts rename to src/commands/fleet/index.ts 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 100% rename from lib/commands/fleets/index.ts rename to src/commands/fleets/index.ts 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 100% rename from lib/events.ts rename to src/events.ts diff --git a/lib/fast-boot.ts b/src/fast-boot.ts similarity index 100% rename from lib/fast-boot.ts rename to src/fast-boot.ts 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 100% rename from lib/utils/bootstrap.ts rename to src/utils/bootstrap.ts 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 100% rename from lib/utils/common-flags.ts rename to src/utils/common-flags.ts 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 From 4760866c7782b2651c1c319ae1a757f0ab21f1b3 Mon Sep 17 00:00:00 2001 From: Otavio Jacobi Date: Thu, 22 Aug 2024 13:03:37 -0300 Subject: [PATCH 4/4] Update all references of lib to src Change-type: patch --- CONTRIBUTING.md | 8 ++++---- INSTALL-ADVANCED.md | 2 +- INSTALL-MAC.md | 2 +- automation/build-bin.ts | 2 +- automation/capitanodoc/capitanodoc.ts | 2 +- automation/capitanodoc/index.ts | 2 +- automation/capitanodoc/markdown.ts | 4 ++-- automation/check-doc.ts | 4 ++-- bin/dev.js | 10 +++++----- package.json | 6 +++--- src/events.ts | 2 +- src/fast-boot.ts | 4 ++-- src/utils/bootstrap.ts | 4 ++-- tests/utils/device/live.spec.ts | 8 ++++---- tsconfig.dev.json | 2 +- tsconfig.json | 2 +- 16 files changed, 32 insertions(+), 32 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c310c863dd..0cf0af36ef 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 25672d4c1a..c828e37b29 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 7cfa543dc6..0b14f54200 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 520f5f394b..2ba3c4796c 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 93a7f5b3ec..f687050d01 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 75e792726b..b82f009746 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 c0e2dc804e..44cfc42242 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 9ad65dc416..bdc33a493f 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 ceaf47c418..0d1662ea98 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/package.json b/package.json index 4b61e19aee..495fa2ae4b 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", diff --git a/src/events.ts b/src/events.ts index fd0f74f6a2..3aa2826a9a 100644 --- a/src/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/src/fast-boot.ts b/src/fast-boot.ts index d66dd499cd..f178fdb6e9 100644 --- a/src/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/src/utils/bootstrap.ts b/src/utils/bootstrap.ts index bcf5c5876e..679e66f30e 100644 --- a/src/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/tests/utils/device/live.spec.ts b/tests/utils/device/live.spec.ts index 844c01d245..6ca79bb66f 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 3b00a90eee..9762f3df79 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 bfe183cbf4..8632c46d02 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,5 @@ ], "preserveSymlinks": true }, - "include": ["./lib/**/*", "./typings/**/*"] + "include": ["./src/**/*", "./typings/**/*"] }