From ad89fdc101d1f8211328f949ff037103b8d20616 Mon Sep 17 00:00:00 2001 From: Stephen Carter Date: Thu, 13 Mar 2025 17:08:14 -0400 Subject: [PATCH 1/7] CHANGE(config): @W-18033471@: Make 'all' the new default value for --rule-selector for the config command --- messages/config-command.md | 18 +++++++++--------- src/commands/code-analyzer/config.ts | 2 +- test/commands/code-analyzer/config.test.ts | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/messages/config-command.md b/messages/config-command.md index 1339fa37f..8d32829e5 100644 --- a/messages/config-command.md +++ b/messages/config-command.md @@ -12,33 +12,33 @@ We're continually improving Salesforce Code Analyzer. Tell us what you think! Gi # command.examples -- Display the current state of the Code Analyzer configuration using the default behavior: display top level configuration, display the engine and rule override settings associated with all the rules that have a "Recommended" tag; and automatically apply any existing custom configuration settings found in a `code-analyzer.yml` or `code-analyzer.yaml` file in the current folder: +- Display the current state of the Code Analyzer configuration using the default behavior: display top level configuration, display the engine and rule override settings associated with all the rules; and automatically apply any existing custom configuration settings found in a `code-analyzer.yml` or `code-analyzer.yaml` file in the current folder: <%= config.bin %> <%= command.id %> - This example is identical to the previous one, assuming that `./code-analyzer.yml` exists in your current folder. - <%= config.bin %> <%= command.id %> --config-file ./code-analyzer.yml --rule-selector Recommended + <%= config.bin %> <%= command.id %> --config-file ./code-analyzer.yml --rule-selector all - Write the current state of configuration to the file `code-analyzer.yml`, including any configuration from an existing `code-analyzer.yml` file. The command preserves all values from the original config, but overwrites any comments: <%= config.bin %> <%= command.id %> --config-file ./code-analyzer.yml --output-file code-analyzer.yml -- Display the configuration state for all rules, instead of just the recommended ones: +- Display the configuration state for just the recommended rules, instead of all the rules: - <%= config.bin %> <%= command.id %> --rule-selector all + <%= config.bin %> <%= command.id %> --rule-selector Recommended -- Display the configuration state associated with recommended rules that are applicable to your workspace folder, `./src`: +- Display the configuration state associated with all the rules that are applicable to your workspace folder, `./src`: <%= config.bin %> <%= command.id %> --workspace ./src - Display any relevant configuration settings associated with the rule name 'no-undef' from the 'eslint' engine: - <%= config.bin %> <%= command.id %> --rule-selection eslint:no-undef + <%= config.bin %> <%= command.id %> --rule-selector eslint:no-undef - Load an existing configuration file called `existing-config.yml`, and then write the configuration to a new file called `new-config.yml`, the configuration state that is applicable to all rules that are relevant to the workspace located in the current folder: - <%= config.bin %> <%= command.id %> --config-file ./existing-config.yml --rule-selection all --workspace . --output-file ./subfolder-config.yml + <%= config.bin %> <%= command.id %> --config-file ./existing-config.yml --workspace . --output-file ./subfolder-config.yml # flags.workspace.summary @@ -62,9 +62,9 @@ Use the --rule-selector flag to display only the configuration associated with t You can combine different criteria using colons to further filter the list; the colon works as an intersection. For example, "--rule-selector eslint:Security" reduces the output to only contain the configuration state associated with the rules from the "eslint" engine that have the "Security" tag. To add multiple rule selectors together (a union), specify the --rule-selector flag multiple times, such as "--rule-selector eslint:Recommended --rule-selector retire-js:3". -If you don't specify this flag, then the command uses the "Recommended" tag rule selector. +If you don't specify this flag, then the command uses the "all" rule selector. -Run `<%= config.bin %> <%= command.id %> --rule-selector all` to display the configuration state associated with all possible rules available, and not just the recommended ones. +Run `<%= config.bin %> <%= command.id %> --rule-selector Recommended` to display the configuration state associated with just the 'Recommended' rules, instead of all the rules. # flags.config-file.summary diff --git a/src/commands/code-analyzer/config.ts b/src/commands/code-analyzer/config.ts index ee17dea12..43e2a0e04 100644 --- a/src/commands/code-analyzer/config.ts +++ b/src/commands/code-analyzer/config.ts @@ -34,7 +34,7 @@ export default class ConfigCommand extends SfCommand implements Displayabl char: 'r', multiple: true, delimiter: ',', - default: ["Recommended"] + default: ["all"] }), 'config-file': Flags.file({ summary: getMessage(BundleName.ConfigCommand, 'flags.config-file.summary'), diff --git a/test/commands/code-analyzer/config.test.ts b/test/commands/code-analyzer/config.test.ts index 986f602c3..b6a0d5627 100644 --- a/test/commands/code-analyzer/config.test.ts +++ b/test/commands/code-analyzer/config.test.ts @@ -60,10 +60,10 @@ describe('`code-analyzer config` tests', () => { expect(receivedActionInput).toHaveProperty('rule-selector', [...inputValue1, ...inputValue2]); }); - it('Defaults to value of "Recommended"', async () => { + it('Defaults to value of "all"', async () => { await ConfigCommand.run([]); expect(executeSpy).toHaveBeenCalled(); - expect(receivedActionInput).toHaveProperty('rule-selector', ["Recommended"]); + expect(receivedActionInput).toHaveProperty('rule-selector', ["all"]); }) it('Can be referenced by its shortname, -r', async () => { From b42bd9e46a310c29a38d84b340edae19f73216e0 Mon Sep 17 00:00:00 2001 From: Randi Wilson Date: Tue, 11 Mar 2025 12:12:06 -0400 Subject: [PATCH 2/7] NEW: @W-17916450@ update v5 CLI to allow rules to be saved to JSON (Part 1) --- messages/action-summary-viewer.md | 4 + messages/rules-command.md | 12 +- messages/rules-writer.md | 3 + package.json | 2 +- src/commands/code-analyzer/rules.ts | 53 ++++++-- src/lib/actions/RulesAction.ts | 30 +++-- src/lib/messages.ts | 1 + src/lib/viewers/ActionSummaryViewer.ts | 34 ++--- src/lib/viewers/RuleViewer.ts | 6 +- src/lib/writers/RulesWriter.ts | 46 +++++++ test/commands/code-analyzer/rules.test.ts | 102 ++++++++++++++- .../rules-with-outfile.txt.goldfile | 10 ++ test/lib/actions/RulesAction.test.ts | 123 ++++++++++++------ test/lib/viewers/RuleViewer.test.ts | 14 +- test/lib/writers/RulesWriter.test.ts | 70 ++++++++++ test/stubs/SpyRuleWriter.ts | 14 ++ test/stubs/StubRuleSelection.ts | 20 +++ 17 files changed, 460 insertions(+), 84 deletions(-) create mode 100644 messages/rules-writer.md create mode 100644 src/lib/writers/RulesWriter.ts create mode 100644 test/fixtures/comparison-files/lib/actions/RulesAction.test.ts/action-summaries/rules-with-outfile.txt.goldfile create mode 100644 test/lib/writers/RulesWriter.test.ts create mode 100644 test/stubs/SpyRuleWriter.ts create mode 100644 test/stubs/StubRuleSelection.ts diff --git a/messages/action-summary-viewer.md b/messages/action-summary-viewer.md index 41ab3e355..8b00b3aea 100644 --- a/messages/action-summary-viewer.md +++ b/messages/action-summary-viewer.md @@ -18,6 +18,10 @@ Configuration written to: Found 0 rules. +# rules-action.outfile-location + +Rules written to: + # rules-action.rules-total Found %d rule(s) from %d engine(s): diff --git a/messages/rules-command.md b/messages/rules-command.md index 7e2e243d3..1129c3907 100644 --- a/messages/rules-command.md +++ b/messages/rules-command.md @@ -102,4 +102,14 @@ Format to display the rules in the terminal. # flags.view.description -The format `table` is concise and shows minimal output, the format `detail` shows all available information. +The format `table` is concise and shows minimal output, the format `detail` shows all available information. If you specify neither --view nor --output-file, then the default table view is shown. If you specify --output-file but not --view, only summary information is shown. + +# flags.output-file.summary + +Output file location to write the selected rules. The file is written in JSON format. + +# flags.output-file.description + +Use this flag to write the selected rules to a JSON file. For example: "--output-file ./out/rules.json” creates a JSON results file in the "./out" folder. If the file exists already, it will be overwritten. + +If you don't specify this flag, the command outputs the rules in the terminal. The view flag can be used in combination with this flag to save the file and output the results. \ No newline at end of file diff --git a/messages/rules-writer.md b/messages/rules-writer.md new file mode 100644 index 000000000..2bbd74234 --- /dev/null +++ b/messages/rules-writer.md @@ -0,0 +1,3 @@ +# error.unrecognized-file-format + +The output file %s has an unsupported extension. Valid extensions include: .json. diff --git a/package.json b/package.json index 2b18ae786..c4ad5c44c 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "bugs": "https://github.com/forcedotcom/sfdx-scanner/issues", "dependencies": { "@oclif/core": "3.27.0", - "@salesforce/code-analyzer-core": "0.23.0", + "@salesforce/code-analyzer-core": "0.24.0", "@salesforce/code-analyzer-engine-api": "0.18.0", "@salesforce/code-analyzer-eslint-engine": "0.20.0", "@salesforce/code-analyzer-flowtest-engine": "0.18.0", diff --git a/src/commands/code-analyzer/rules.ts b/src/commands/code-analyzer/rules.ts index 1e47ed925..18b0bde73 100644 --- a/src/commands/code-analyzer/rules.ts +++ b/src/commands/code-analyzer/rules.ts @@ -2,13 +2,14 @@ import {Flags, SfCommand} from '@salesforce/sf-plugins-core'; import {View} from '../../Constants'; import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory'; import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory'; -import {RuleDetailDisplayer, RuleTableDisplayer} from '../../lib/viewers/RuleViewer'; +import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../lib/viewers/RuleViewer'; import {RulesActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer'; -import {RulesAction, RulesDependencies} from '../../lib/actions/RulesAction'; +import {RulesAction, RulesDependencies, RulesInput} from '../../lib/actions/RulesAction'; import {BundleName, getMessage, getMessages} from '../../lib/messages'; import {Displayable, UxDisplay} from '../../lib/Display'; import {LogEventDisplayer} from '../../lib/listeners/LogEventListener'; import {RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener'; +import {CompositeRulesWriter} from '../../lib/writers/RulesWriter'; export default class RulesCommand extends SfCommand implements Displayable { // We don't need the `--json` output for this command. @@ -42,11 +43,15 @@ export default class RulesCommand extends SfCommand implements Displayable char: 'c', exists: true }), + 'output-file': Flags.file({ + summary: getMessage(BundleName.RulesCommand, 'flags.output-file.summary'), + description: getMessage(BundleName.RulesCommand, 'flags.output-file.description'), + char: 'f' + }), view: Flags.string({ summary: getMessage(BundleName.RulesCommand, 'flags.view.summary'), description: getMessage(BundleName.RulesCommand, 'flags.view.description'), char: 'v', - default: View.TABLE, options: Object.values(View) }) }; @@ -56,21 +61,53 @@ export default class RulesCommand extends SfCommand implements Displayable this.warn(getMessage(BundleName.Shared, "warning.command-state", [getMessage(BundleName.Shared, 'label.command-state')])); const parsedFlags = (await this.parse(RulesCommand)).flags; - const dependencies: RulesDependencies = this.createDependencies(parsedFlags.view as View); + const outputFiles = parsedFlags['output-file'] ? [parsedFlags['output-file']] : []; + const view = parsedFlags.view as View | undefined; + + const dependencies: RulesDependencies = this.createDependencies(view, outputFiles); const action: RulesAction = RulesAction.createAction(dependencies); - await action.execute(parsedFlags); + + const rulesInput: RulesInput = { + 'config-file': parsedFlags['config-file'], + 'output-file': outputFiles, + 'rule-selector': parsedFlags['rule-selector'], + 'workspace': parsedFlags['workspace'], + }; + + await action.execute(rulesInput); } - protected createDependencies(view: View): RulesDependencies { + protected createDependencies(view: View | undefined, outputFiles: string[]): RulesDependencies { const uxDisplay: UxDisplay = new UxDisplay(this, this.spinner); - return { + const dependencies: RulesDependencies = { configFactory: new CodeAnalyzerConfigFactoryImpl(), pluginsFactory: new EnginePluginsFactoryImpl(), logEventListeners: [new LogEventDisplayer(uxDisplay)], progressListeners: [new RuleSelectionProgressSpinner(uxDisplay)], actionSummaryViewer: new RulesActionSummaryViewer(uxDisplay), - viewer: view === View.TABLE ? new RuleTableDisplayer(uxDisplay) : new RuleDetailDisplayer(uxDisplay) + viewer: this.createRulesViewer(view, outputFiles, uxDisplay), + writer: CompositeRulesWriter.fromFiles(outputFiles) }; + + return dependencies; + } + + /** + * Creates the {@link RuleViewer} that will be called from {@link RulesAction.execute} to display rules. + * If a view option is set, rules will be displayed in the specified format. + * If an output file is set, rules will not display. + * By default, the details display will be used. + */ + private createRulesViewer(view: View | undefined, outputFiles: string[] = [], uxDisplay: UxDisplay) { + if (view === View.DETAIL) { + return new RuleDetailDisplayer(uxDisplay); + } else if (view === View.TABLE) { + return new RuleTableDisplayer(uxDisplay); + } else if (outputFiles.length > 0) { + return new RulesNoOpDisplayer(); + } + + return new RuleTableDisplayer(uxDisplay); } } diff --git a/src/lib/actions/RulesAction.ts b/src/lib/actions/RulesAction.ts index 824f848ab..b8c00ff8f 100644 --- a/src/lib/actions/RulesAction.ts +++ b/src/lib/actions/RulesAction.ts @@ -1,12 +1,13 @@ -import {CodeAnalyzer, CodeAnalyzerConfig, Rule, RuleSelection} from '@salesforce/code-analyzer-core'; -import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory'; -import {EnginePluginsFactory} from '../factories/EnginePluginsFactory'; -import {createWorkspace} from '../utils/WorkspaceUtil'; -import {ProgressEventListener} from '../listeners/ProgressEventListener'; -import {LogFileWriter} from '../writers/LogWriter'; -import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener'; -import {RuleViewer} from '../viewers/RuleViewer'; -import {RulesActionSummaryViewer} from '../viewers/ActionSummaryViewer'; +import { CodeAnalyzer, CodeAnalyzerConfig, Rule, RuleSelection } from '@salesforce/code-analyzer-core'; +import { CodeAnalyzerConfigFactory } from '../factories/CodeAnalyzerConfigFactory'; +import { EnginePluginsFactory } from '../factories/EnginePluginsFactory'; +import { LogEventListener, LogEventLogger } from '../listeners/LogEventListener'; +import { ProgressEventListener } from '../listeners/ProgressEventListener'; +import { createWorkspace } from '../utils/WorkspaceUtil'; +import { RulesActionSummaryViewer } from '../viewers/ActionSummaryViewer'; +import { RuleViewer } from '../viewers/RuleViewer'; +import { LogFileWriter } from '../writers/LogWriter'; +import { RulesWriter } from '../writers/RulesWriter'; export type RulesDependencies = { configFactory: CodeAnalyzerConfigFactory; @@ -15,12 +16,15 @@ export type RulesDependencies = { progressListeners: ProgressEventListener[]; actionSummaryViewer: RulesActionSummaryViewer, viewer: RuleViewer; + writer: RulesWriter; } export type RulesInput = { 'config-file'?: string; 'rule-selector': string[]; + 'output-file'?: string[]; workspace?: string[]; + view?: string; } export class RulesAction { @@ -60,8 +64,14 @@ export class RulesAction { this.dependencies.logEventListeners.forEach(listener => listener.stopListening()); const rules: Rule[] = core.getEngineNames().flatMap(name => ruleSelection.getRulesFor(name)); + this.dependencies.writer.write(ruleSelection) this.dependencies.viewer.view(rules); - this.dependencies.actionSummaryViewer.viewPostExecutionSummary(ruleSelection, logWriter.getLogDestination()); + + this.dependencies.actionSummaryViewer.viewPostExecutionSummary( + ruleSelection, + logWriter.getLogDestination(), + input['output-file'] ?? [] + ); } public static createAction(dependencies: RulesDependencies): RulesAction { diff --git a/src/lib/messages.ts b/src/lib/messages.ts index 4a8d0e661..7dc496aea 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -14,6 +14,7 @@ export enum BundleName { ResultsViewer = 'results-viewer', RuleViewer = 'rule-viewer', RulesCommand = 'rules-command', + RulesWriter = 'rules-writer', ResultsWriter = 'results-writer', RunAction = 'run-action', RunCommand = 'run-command', diff --git a/src/lib/viewers/ActionSummaryViewer.ts b/src/lib/viewers/ActionSummaryViewer.ts index e658fcf48..3cb1ebd84 100644 --- a/src/lib/viewers/ActionSummaryViewer.ts +++ b/src/lib/viewers/ActionSummaryViewer.ts @@ -31,6 +31,13 @@ abstract class AbstractActionSummaryViewer { this.display.displayLog(getMessage(BundleName.ActionSummaryViewer, 'common.logfile-location')); this.display.displayLog(indent(logFile)); } + + protected displayOutfiles(outfiles: string[], msgKey: string): void { + this.display.displayLog(getMessage(BundleName.ActionSummaryViewer, msgKey)); + for (const outfile of outfiles) { + this.display.displayLog(indent(outfile)); + } + } } export class ConfigActionSummaryViewer extends AbstractActionSummaryViewer { @@ -45,17 +52,12 @@ export class ConfigActionSummaryViewer extends AbstractActionSummaryViewer { this.displayLineSeparator(); if (outfile) { - this.displayOutfile(outfile); + this.displayOutfiles([outfile], 'config-action.outfile-location'); this.displayLineSeparator(); } this.displayLogFileInfo(logFile); } - - private displayOutfile(outfile: string): void { - this.display.displayLog(getMessage(BundleName.ActionSummaryViewer, 'config-action.outfile-location')); - this.display.displayLog(indent(outfile)); - } } export class RulesActionSummaryViewer extends AbstractActionSummaryViewer { @@ -63,19 +65,26 @@ export class RulesActionSummaryViewer extends AbstractActionSummaryViewer { super(display); } - public viewPostExecutionSummary(ruleSelection: RuleSelection, logFile: string): void { + public viewPostExecutionSummary(ruleSelection: RuleSelection, logFile: string, outfiles: string[]): void { // Start with separator to cleanly break from anything that's already been logged. this.displayLineSeparator(); this.displaySummaryHeader(); this.displayLineSeparator(); - if (ruleSelection.getCount() === 0) { + const noRulesFound = ruleSelection.getCount() === 0; + + if (noRulesFound) { this.display.displayLog(getMessage(BundleName.ActionSummaryViewer, 'rules-action.found-no-rules')); } else { this.displayRuleSelection(ruleSelection); } this.displayLineSeparator(); + if (outfiles.length > 0) { + this.displayOutfiles(outfiles, 'rules-action.outfile-location'); + this.displayLineSeparator(); + } + this.displayLogFileInfo(logFile); } @@ -107,7 +116,7 @@ export class RunActionSummaryViewer extends AbstractActionSummaryViewer { this.displayLineSeparator(); if (outfiles.length > 0) { - this.displayOutfiles(outfiles); + this.displayOutfiles(outfiles, 'run-action.outfiles-total'); this.displayLineSeparator(); } @@ -139,11 +148,4 @@ export class RunActionSummaryViewer extends AbstractActionSummaryViewer { }); return fileSet.size; } - - private displayOutfiles(outfiles: string[]): void { - this.display.displayLog(getMessage(BundleName.ActionSummaryViewer, 'run-action.outfiles-total')); - for (const outfile of outfiles) { - this.display.displayLog(indent(outfile)); - } - } } diff --git a/src/lib/viewers/RuleViewer.ts b/src/lib/viewers/RuleViewer.ts index 9aa2fa6e2..df359bd73 100644 --- a/src/lib/viewers/RuleViewer.ts +++ b/src/lib/viewers/RuleViewer.ts @@ -8,7 +8,6 @@ export interface RuleViewer { view(rules: Rule[]): void; } - abstract class AbstractRuleDisplayer implements RuleViewer { protected display: Display; @@ -111,3 +110,8 @@ export class RuleTableDisplayer extends AbstractRuleDisplayer { } } +export class RulesNoOpDisplayer implements RuleViewer { + public view(_rules: Rule[]): void { + return; + } +} \ No newline at end of file diff --git a/src/lib/writers/RulesWriter.ts b/src/lib/writers/RulesWriter.ts new file mode 100644 index 000000000..75047592d --- /dev/null +++ b/src/lib/writers/RulesWriter.ts @@ -0,0 +1,46 @@ +import * as fs from 'node:fs'; +import { OutputFormat, RuleSelection } from "@salesforce/code-analyzer-core"; +import path from "path"; +import { BundleName, getMessage } from "../messages"; + +export interface RulesWriter { + write(rules: RuleSelection): void; +} + + +export class CompositeRulesWriter implements RulesWriter { + private readonly writers: RulesWriter[] = []; + + private constructor(writers: RulesWriter[]) { + this.writers = writers; + } + + public write(rules: RuleSelection): void { + this.writers.forEach(w => w.write(rules)); + } + + public static fromFiles(files: string[]): CompositeRulesWriter { + return new CompositeRulesWriter(files.map(f => new RulesFileWriter(f))); + } +} + +export class RulesFileWriter implements RulesWriter { + private readonly file: string; + private readonly format: OutputFormat; + + public constructor(file: string) { + this.file = file; + const ext = path.extname(file).toLowerCase(); + + if (ext === '.json') { + this.format = OutputFormat.JSON; + } else { + throw new Error(getMessage(BundleName.RulesWriter, 'error.unrecognized-file-format', [file])); + } + } + + public write(ruleSelection: RuleSelection): void { + const contents = ruleSelection.toFormattedOutput(this.format); + fs.writeFileSync(this.file, contents); + } +} diff --git a/test/commands/code-analyzer/rules.test.ts b/test/commands/code-analyzer/rules.test.ts index 351604d7f..4643739b0 100644 --- a/test/commands/code-analyzer/rules.test.ts +++ b/test/commands/code-analyzer/rules.test.ts @@ -1,15 +1,22 @@ -import {stubSfCommandUx} from '@salesforce/sf-plugins-core'; -import {TestContext} from '@salesforce/core/lib/testSetup'; +import { TestContext } from '@salesforce/core/lib/testSetup'; +import { stubSfCommandUx } from '@salesforce/sf-plugins-core'; +import path from 'node:path'; import RulesCommand from '../../../src/commands/code-analyzer/rules'; -import {RulesAction, RulesDependencies, RulesInput} from '../../../src/lib/actions/RulesAction'; +import { RulesAction, RulesDependencies, RulesInput } from '../../../src/lib/actions/RulesAction'; +import { RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer } from '../../../src/lib/viewers/RuleViewer'; +import { CompositeRulesWriter } from '../../../src/lib/writers/RulesWriter'; describe('`code-analyzer rules` tests', () => { const $$ = new TestContext(); let executeSpy: jest.SpyInstance; let createActionSpy: jest.SpyInstance; + let fromFilesSpy: jest.SpyInstance; let receivedActionInput: RulesInput; let receivedActionDependencies: RulesDependencies; + + let receivedFiles: string[]; + beforeEach(() => { stubSfCommandUx($$.SANDBOX); executeSpy = jest.spyOn(RulesAction.prototype, 'execute').mockImplementation((input) => { @@ -21,6 +28,11 @@ describe('`code-analyzer rules` tests', () => { receivedActionDependencies = dependencies; return originalCreateAction(dependencies); }); + const originalFromFiles = CompositeRulesWriter.fromFiles; + fromFilesSpy = jest.spyOn(CompositeRulesWriter, 'fromFiles').mockImplementation(files => { + receivedFiles = files; + return originalFromFiles(files); + }) }); afterEach(() => { @@ -103,12 +115,47 @@ describe('`code-analyzer rules` tests', () => { }); }); + describe('--output-file', () => { + + const inputValue1 = path.join('my', 'rules-output.json'); + const inputValue2 = path.join('my', 'second', 'rules-output.json'); + + it('Accepts one file path', async () => { + await RulesCommand.run(['--output-file', inputValue1]); + expect(executeSpy).toHaveBeenCalled(); + expect(createActionSpy).toHaveBeenCalled(); + expect(receivedActionInput).toHaveProperty('output-file', [inputValue1]); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([inputValue1]); + }); + + it('Can only be supplied once', async () => { + const executionPromise = RulesCommand.run(['--output-file', inputValue1, '--output-file', inputValue2]); + await expect(executionPromise).rejects.toThrow(`Flag --output-file can only be specified once`); + expect(executeSpy).not.toHaveBeenCalled(); + }); + + it('Can be referenced by its shortname, -f', async () => { + await RulesCommand.run(['-f', inputValue1]); + expect(executeSpy).toHaveBeenCalled(); + expect(receivedActionInput).toHaveProperty('output-file', [inputValue1]); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([inputValue1]); + }); + + it('Is optional', async () => { + await RulesCommand.run([]); + expect(executeSpy).toHaveBeenCalled(); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([]); + }); + }); + describe('--view', () => { it('Accepts the value, "table"', async () => { const inputValue = 'table'; await RulesCommand.run(['--view', inputValue]); expect(executeSpy).toHaveBeenCalled(); - expect(receivedActionInput).toHaveProperty('view', inputValue); expect(createActionSpy).toHaveBeenCalled(); expect(receivedActionDependencies.viewer.constructor.name).toEqual('RuleTableDisplayer'); }); @@ -117,7 +164,6 @@ describe('`code-analyzer rules` tests', () => { const inputValue = 'detail'; await RulesCommand.run(['--view', inputValue]); expect(executeSpy).toHaveBeenCalled(); - expect(receivedActionInput).toHaveProperty('view', inputValue); expect(createActionSpy).toHaveBeenCalled(); expect(receivedActionDependencies.viewer.constructor.name).toEqual('RuleDetailDisplayer'); }); @@ -132,7 +178,6 @@ describe('`code-analyzer rules` tests', () => { it('Defaults to value of "table"', async () => { await RulesCommand.run([]); expect(executeSpy).toHaveBeenCalled(); - expect(receivedActionInput).toHaveProperty('view', 'table'); expect(createActionSpy).toHaveBeenCalled(); expect(receivedActionDependencies.viewer.constructor.name).toEqual('RuleTableDisplayer'); }); @@ -150,7 +195,6 @@ describe('`code-analyzer rules` tests', () => { const inputValue = 'detail'; await RulesCommand.run(['-v', inputValue]); expect(executeSpy).toHaveBeenCalled(); - expect(receivedActionInput).toHaveProperty('view', inputValue); expect(createActionSpy).toHaveBeenCalled(); expect(receivedActionDependencies.viewer.constructor.name).toEqual('RuleDetailDisplayer'); }); @@ -200,4 +244,48 @@ describe('`code-analyzer rules` tests', () => { expect(receivedActionInput).toHaveProperty('workspace', [inputValue]); }); }); + + describe('Flag interactions', () => { + describe('--output-file and --view', () => { + it('When --output-file and --view is set to "detail", writer is set and view is set to "detail" display', async () => { + const outfileInput = 'rules-output.json'; + const viewInput = 'detail'; + await RulesCommand.run(['--output-file', outfileInput, '--view', viewInput]); + expect(executeSpy).toHaveBeenCalled(); + expect(createActionSpy).toHaveBeenCalled(); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([outfileInput]); + expect(receivedActionDependencies.viewer.constructor).toEqual(RuleDetailDisplayer); + }); + + it('When --output-file and --view is set to "table", writer is set and view is set to "table" display', async () => { + const outfileInput = 'rules-output.json'; + const viewInput = 'table'; + await RulesCommand.run(['--output-file', outfileInput, '--view', viewInput]); + expect(executeSpy).toHaveBeenCalled(); + expect(createActionSpy).toHaveBeenCalled(); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([outfileInput]); + expect(receivedActionDependencies.viewer.constructor).toEqual(RuleTableDisplayer); + }); + + it('When --output-file is present and --view is not, view is set to a noop display', async () => { + const outfileInput= 'rules-output.json'; + await RulesCommand.run(['--output-file', outfileInput]); + expect(executeSpy).toHaveBeenCalled(); + expect(createActionSpy).toHaveBeenCalled(); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([outfileInput]); + expect(receivedActionDependencies.viewer.constructor).toEqual(RulesNoOpDisplayer); + }); + + it('When --output-file and --view are both absent, writer is not set and --view defaults to "table" display', async () => { + await RulesCommand.run([]); + expect(createActionSpy).toHaveBeenCalled(); + expect(fromFilesSpy).toHaveBeenCalled(); + expect(receivedFiles).toEqual([]); + expect(receivedActionDependencies.viewer.constructor).toEqual(RuleTableDisplayer); + }); + }); + }); }); diff --git a/test/fixtures/comparison-files/lib/actions/RulesAction.test.ts/action-summaries/rules-with-outfile.txt.goldfile b/test/fixtures/comparison-files/lib/actions/RulesAction.test.ts/action-summaries/rules-with-outfile.txt.goldfile new file mode 100644 index 000000000..6c22b3b1a --- /dev/null +++ b/test/fixtures/comparison-files/lib/actions/RulesAction.test.ts/action-summaries/rules-with-outfile.txt.goldfile @@ -0,0 +1,10 @@ + +=== Summary + +Found 2 rule(s) from 1 engine(s): + 2 stubEngine1 rule(s) found. + +Rules written to: + {{PATH_TO_FILE}} + +Additional log information written to: \ No newline at end of file diff --git a/test/lib/actions/RulesAction.test.ts b/test/lib/actions/RulesAction.test.ts index 825c88a3f..11243f1c9 100644 --- a/test/lib/actions/RulesAction.test.ts +++ b/test/lib/actions/RulesAction.test.ts @@ -1,34 +1,41 @@ -import * as path from 'node:path'; -import * as fsp from 'node:fs/promises'; import ansis from 'ansis'; -import {RulesAction, RulesDependencies, RulesInput} from '../../../src/lib/actions/RulesAction'; -import {RulesActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer'; -import {StubDefaultConfigFactory} from '../../stubs/StubCodeAnalyzerConfigFactories'; +import * as fsp from 'node:fs/promises'; +import * as path from 'node:path'; +import { RulesAction, RulesDependencies, RulesInput } from '../../../src/lib/actions/RulesAction'; +import { RulesActionSummaryViewer } from '../../../src/lib/viewers/ActionSummaryViewer'; +import { DisplayEventType, SpyDisplay } from '../../stubs/SpyDisplay'; +import { SpyRuleViewer } from '../../stubs/SpyRuleViewer'; +import { SpyRuleWriter } from '../../stubs/SpyRuleWriter'; +import { StubDefaultConfigFactory } from '../../stubs/StubCodeAnalyzerConfigFactories'; import * as StubEnginePluginFactories from '../../stubs/StubEnginePluginsFactories'; -import {SpyRuleViewer} from '../../stubs/SpyRuleViewer'; -import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; const PATH_TO_GOLDFILES = path.join(__dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'actions', 'RulesAction.test.ts'); describe('RulesAction tests', () => { let viewer: SpyRuleViewer; + let writer: SpyRuleWriter; + let spyDisplay: SpyDisplay; + let actionSummaryViewer: RulesActionSummaryViewer; + let defaultDependencies: RulesDependencies; beforeEach(() => { viewer = new SpyRuleViewer(); - }) - - it('Submitting the all-selector returns all rules', async () => { - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); - const dependencies: RulesDependencies = { + writer = new SpyRuleWriter(); + spyDisplay = new SpyDisplay(); + actionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); + defaultDependencies = { configFactory: new StubDefaultConfigFactory(), pluginsFactory: new StubEnginePluginFactories.StubEnginePluginsFactory_withFunctionalStubEngine(), logEventListeners: [], progressListeners: [], actionSummaryViewer, - viewer + viewer, + writer }; - const action = RulesAction.createAction(dependencies); + }) + + it('Submitting the all-selector displays all rules', async () => { + const action = RulesAction.createAction(defaultDependencies); const input: RulesInput = { 'rule-selector': ['all'] }; @@ -47,20 +54,12 @@ describe('RulesAction tests', () => { 'stub2RuleB', 'stub2RuleC' ]); + const writerCallHistory = writer.getCallHistory(); + expect(writerCallHistory).toHaveLength(1); }); it('Submitting a filtering selector returns only matching rules', async () => { - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); - const dependencies: RulesDependencies = { - configFactory: new StubDefaultConfigFactory(), - pluginsFactory: new StubEnginePluginFactories.StubEnginePluginsFactory_withFunctionalStubEngine(), - logEventListeners: [], - progressListeners: [], - actionSummaryViewer, - viewer - }; - const action = RulesAction.createAction(dependencies); + const action = RulesAction.createAction(defaultDependencies); const input: RulesInput = { 'rule-selector': ['CodeStyle'] }; @@ -75,9 +74,26 @@ describe('RulesAction tests', () => { ]); }); + it('Writes output and views it with output file and view flag', async () => { + const spyWriter: SpyRuleWriter = new SpyRuleWriter(); + defaultDependencies.writer = spyWriter; + const action = RulesAction.createAction(defaultDependencies); + const input: RulesInput = { + 'rule-selector': ['CodeStyle'], + 'output-file': ['selected-rules.json'], + 'view': 'detail' + }; + + await action.execute(input); + + const viewerCallHistory = viewer.getCallHistory(); + expect(viewerCallHistory).toHaveLength(1); + + const writerCallHistory = spyWriter.getCallHistory(); + expect(writerCallHistory).toHaveLength(1); + }); + it('Engines with target-dependent rules return the right rules', async () => { - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); const dependencies: RulesDependencies = { configFactory: new StubDefaultConfigFactory(), // The engine we're using here will synthesize one rule per target. @@ -85,7 +101,8 @@ describe('RulesAction tests', () => { logEventListeners: [], progressListeners: [], actionSummaryViewer, - viewer + viewer, + writer }; const targetedFilesAndFolders = ['package.json', 'src', 'README.md']; const action = RulesAction.createAction(dependencies); @@ -113,15 +130,14 @@ describe('RulesAction tests', () => { * test will help us do that. */ it('When no engines are registered, empty results are displayed', async () => { - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); const dependencies: RulesDependencies = { configFactory: new StubDefaultConfigFactory(), pluginsFactory: new StubEnginePluginFactories.StubEnginePluginsFactory_withNoPlugins(), logEventListeners: [], progressListeners: [], actionSummaryViewer, - viewer + viewer, + writer }; const action = RulesAction.createAction(dependencies); const input: RulesInput = { @@ -136,15 +152,14 @@ describe('RulesAction tests', () => { }); it('Throws an error when an engine throws an error', async () => { - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); const dependencies: RulesDependencies = { configFactory: new StubDefaultConfigFactory(), pluginsFactory: new StubEnginePluginFactories.StubEnginePluginsFactory_withThrowingStubPlugin(), logEventListeners: [], progressListeners: [], actionSummaryViewer, - viewer + viewer, + writer }; const action = RulesAction.createAction(dependencies); const input: RulesInput = { @@ -156,21 +171,26 @@ describe('RulesAction tests', () => { }); describe('Summary generation', () => { + const preExecutionGoldfilePath: string = path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'); + let viewer: SpyRuleViewer; + + beforeEach(() => { + viewer = new SpyRuleViewer(); + }) + it.each([ {quantifier: 'no', expectation: 'Summary indicates absence of rules', selector: 'NonsensicalTag', goldfile: 'no-rules.txt.goldfile'}, {quantifier: 'some', expectation: 'Summary provides breakdown by engine', selector: 'Recommended', goldfile: 'some-rules.txt.goldfile'} ])('When $quantifier rules are returned, $expectation', async ({selector, goldfile}) => { - const preExecutionGoldfilePath: string = path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'); const goldfilePath: string = path.join(PATH_TO_GOLDFILES, 'action-summaries', goldfile); - const spyDisplay: SpyDisplay = new SpyDisplay(); - const actionSummaryViewer: RulesActionSummaryViewer = new RulesActionSummaryViewer(spyDisplay); const dependencies: RulesDependencies = { configFactory: new StubDefaultConfigFactory(), pluginsFactory: new StubEnginePluginFactories.StubEnginePluginsFactory_withFunctionalStubEngine(), logEventListeners: [], progressListeners: [], actionSummaryViewer, - viewer + viewer, + writer }; const action = RulesAction.createAction(dependencies); const input: RulesInput = { @@ -190,6 +210,31 @@ describe('RulesAction tests', () => { const goldfileContents: string = await fsp.readFile(goldfilePath, 'utf-8'); expect(displayedLogEvents).toContain(goldfileContents); }); + + it('Mentions an outfile in summary if provided', async () => { + const outfilePath = path.join('the', 'results.json'); + const spyWriter: SpyRuleWriter = new SpyRuleWriter(); + const summaryGoldfilePath: string = path.join(PATH_TO_GOLDFILES, 'action-summaries', 'rules-with-outfile.txt.goldfile'); + defaultDependencies.writer = spyWriter; + const action = RulesAction.createAction(defaultDependencies); + const input: RulesInput = { + 'rule-selector': ['Codestyle'], + 'output-file': [outfilePath] + }; + + await action.execute(input); + + const preExecutionGoldfileContents: string = await fsp.readFile(preExecutionGoldfilePath, 'utf-8'); + const goldfileContents: string = (await fsp.readFile(summaryGoldfilePath, 'utf-8')) + .replace(`{{PATH_TO_FILE}}`, outfilePath); + const displayEvents = spyDisplay.getDisplayEvents(); + const displayedLogEvents = ansis.strip(displayEvents + .filter(e => e.type === DisplayEventType.LOG) + .map(e => e.data) + .join('\n')); + expect(displayedLogEvents).toContain(preExecutionGoldfileContents); + expect(displayedLogEvents).toContain(goldfileContents); + }); }); }); diff --git a/test/lib/viewers/RuleViewer.test.ts b/test/lib/viewers/RuleViewer.test.ts index 51c718dc6..105b23c22 100644 --- a/test/lib/viewers/RuleViewer.test.ts +++ b/test/lib/viewers/RuleViewer.test.ts @@ -1,7 +1,7 @@ import fs from 'node:fs'; import path from 'path'; import ansis from 'ansis'; -import {RuleDetailDisplayer, RuleTableDisplayer} from '../../../src/lib/viewers/RuleViewer'; +import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../../src/lib/viewers/RuleViewer'; import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; import * as StubRules from '../../stubs/StubRules'; @@ -156,6 +156,18 @@ describe('RuleViewer implementations', () => { }]); }); }); + + describe('RuleNoopDisplayer', () => { + it('Does not display', () => { + const display = new SpyDisplay(); + const viewer = new RulesNoOpDisplayer(); + + viewer.view([]); + + const displayEvents = display.getDisplayEvents(); + expect(displayEvents).toHaveLength(0); + }); + }) }); function readComparisonFile(fileName: string): string { diff --git a/test/lib/writers/RulesWriter.test.ts b/test/lib/writers/RulesWriter.test.ts new file mode 100644 index 000000000..392195ae7 --- /dev/null +++ b/test/lib/writers/RulesWriter.test.ts @@ -0,0 +1,70 @@ +import { OutputFormat } from '@salesforce/code-analyzer-core'; +import fs from 'node:fs'; +import path from 'node:path'; +import { CompositeRulesWriter, RulesFileWriter } from "../../../src/lib/writers/RulesWriter"; +import * as Stub from '../../stubs/StubRuleSelection'; + +describe('RulesWriter', () => { + + let writeFileSpy: jest.SpyInstance; + let writeFileInvocations: { file: fs.PathOrFileDescriptor, contents: string | ArrayBufferView }[]; + + beforeEach(() => { + jest.resetAllMocks(); + writeFileInvocations = []; + writeFileSpy = jest.spyOn(fs, 'writeFileSync').mockImplementation((file, contents) => { + writeFileInvocations.push({file, contents}); + }); + }); + + describe('RulesFileWriter', () => { + + it('Rejects invalid file format', () => { + const invalidFile = 'file.xml'; + expect(() => new RulesFileWriter(invalidFile)).toThrow(invalidFile); + }); + + it('Writes to a json file path', () => { + const outfilePath = path.join('the', 'results', 'path', 'file.json'); + const expectations = { + file: outfilePath, + contents: `Rules formatted as ${OutputFormat.JSON}` + }; + const rulesWriter = new RulesFileWriter(expectations.file); + const stubbedSelection = new Stub.StubEmptyRuleSelection(); + rulesWriter.write(stubbedSelection); + + expect(writeFileSpy).toHaveBeenCalled(); + expect(writeFileInvocations).toEqual([expectations]); + }); + }); + + describe('CompositeRulesWriter', () => { + + it('Does a no-op when there are no files to write to', () => { + const outputFileWriter = CompositeRulesWriter.fromFiles([]); + const stubbedEmptyRuleSelection = new Stub.StubEmptyRuleSelection(); + + outputFileWriter.write(stubbedEmptyRuleSelection); + + expect(writeFileSpy).not.toHaveBeenCalled(); + }); + + it('When given multiple files, outputs to all of them', () => { + const expectations = [{ + file: 'outFile1.json', + contents: `Rules formatted as ${OutputFormat.JSON}` + }, { + file: 'outFile2.json', + contents: `Rules formatted as ${OutputFormat.JSON}` + }]; + const outputFileWriter = CompositeRulesWriter.fromFiles(expectations.map(i => i.file)); + const stubbedSelection = new Stub.StubEmptyRuleSelection(); + + outputFileWriter.write(stubbedSelection); + + expect(writeFileSpy).toHaveBeenCalledTimes(2); + expect(writeFileInvocations).toEqual(expectations); + }); + }) +}); \ No newline at end of file diff --git a/test/stubs/SpyRuleWriter.ts b/test/stubs/SpyRuleWriter.ts new file mode 100644 index 000000000..44594924d --- /dev/null +++ b/test/stubs/SpyRuleWriter.ts @@ -0,0 +1,14 @@ +import { RuleSelection } from '@salesforce/code-analyzer-core'; +import { RulesWriter } from '../../src/lib/writers/RulesWriter'; + +export class SpyRuleWriter implements RulesWriter { + private callHistory: RuleSelection[] = []; + + public write(rules: RuleSelection): void { + this.callHistory.push(rules); + } + + public getCallHistory(): RuleSelection[] { + return this.callHistory; + } +} diff --git a/test/stubs/StubRuleSelection.ts b/test/stubs/StubRuleSelection.ts new file mode 100644 index 000000000..6f6d81d27 --- /dev/null +++ b/test/stubs/StubRuleSelection.ts @@ -0,0 +1,20 @@ +import { OutputFormat, Rule, RuleSelection } from '@salesforce/code-analyzer-core'; + +export class StubEmptyRuleSelection implements RuleSelection { + getCount(): number { + return 0; + } + getEngineNames(): string[] { + return ['EmptyEngine']; + } + getRulesFor(_engineName: string): Rule[] { + return []; + } + getRule(_engineName: string, _ruleName: string): Rule { + throw new Error('Method not implemented.'); + } + toFormattedOutput(format: OutputFormat): string { + return `Rules formatted as ${format}`; + } + +} \ No newline at end of file From 7a4b56b3aa84520f9d894e27ac7dde55dc907944 Mon Sep 17 00:00:00 2001 From: Stephen Carter Date: Fri, 14 Mar 2025 11:11:37 -0400 Subject: [PATCH 3/7] FIX(config): Stop attempting to process disabled engines --- src/lib/actions/ConfigAction.ts | 71 ++++++--- .../optional-input-config.yml | 2 +- test/lib/actions/ConfigAction.test.ts | 141 ++++++++++-------- 3 files changed, 132 insertions(+), 82 deletions(-) diff --git a/src/lib/actions/ConfigAction.ts b/src/lib/actions/ConfigAction.ts index 3847b97cb..2b4c95d53 100644 --- a/src/lib/actions/ConfigAction.ts +++ b/src/lib/actions/ConfigAction.ts @@ -9,6 +9,7 @@ import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener'; import {ProgressEventListener} from '../listeners/ProgressEventListener'; import {ConfigActionSummaryViewer} from '../viewers/ActionSummaryViewer'; import {AnnotatedConfigModel, ConfigModel} from '../models/ConfigModel'; +import {EnginePlugin} from "@salesforce/code-analyzer-engine-api"; export type ConfigDependencies = { configFactory: CodeAnalyzerConfigFactory; @@ -35,9 +36,9 @@ export class ConfigAction { } public async execute(input: ConfigInput): Promise { - // We need the user's Config and the default Config. + + // ==== PREPARE USER's CONFIG AND USER's CODE ANALYZER ========================================================= const userConfig: CodeAnalyzerConfig = this.dependencies.configFactory.create(input['config-file']); - const defaultConfig: CodeAnalyzerConfig = CodeAnalyzerConfig.withDefaults(); // We always add a Logger Listener to the appropriate listeners list, because we should always be logging. const logFileWriter: LogFileWriter = await LogFileWriter.fromConfig(userConfig); @@ -45,37 +46,60 @@ export class ConfigAction { const logEventLogger: LogEventLogger = new LogEventLogger(logFileWriter); this.dependencies.logEventListeners.push(logEventLogger); - // The User's config produces one Core. const userCore: CodeAnalyzer = new CodeAnalyzer(userConfig); - // The Default config produces two Cores, since we have to run two selections. - const defaultCoreForAllRules: CodeAnalyzer = new CodeAnalyzer(defaultConfig); - const defaultCoreForSelectRules: CodeAnalyzer = new CodeAnalyzer(defaultConfig); // LogEventListeners should start listening as soon as the User Core is instantiated, since it can start emitting // relevant events basically immediately. this.dependencies.logEventListeners.forEach(listener => listener.listen(userCore)); + + const enginePlugins: EnginePlugin[] = this.dependencies.pluginsFactory.create(); + const enginePluginModules: string[] = userConfig.getCustomEnginePluginModules(); + + const userEnginePromises: Promise[] = [ + ...enginePlugins.map(enginePlugin => userCore.addEnginePlugin(enginePlugin)), + ...enginePluginModules.map(pluginModule => userCore.dynamicallyAddEnginePlugin(pluginModule)), + ]; + await Promise.all(userEnginePromises); + + + // ==== PREPARE DEFAULT CONFIG (with disable_engine settings kept) AND DEFAULT CODE ANALYZER =================== + + // TODO: We are currently only passing in the enginePlugins here which are not all plugins. We need to + // include the dynamically loaded plugins... but dynamicallyAddEnginePlugin loads and adds and so we never get + // access to the plugins. We need to update core to separate the concerns so that we just have a + // dynamicallyLoadEnginePlugin to just return the plugin so that we can add these plugins to this list. + // And/Or we could just have the Code Analyzer class return a list of the engines that were disabled so that + // we don't need this helper function here. + const disabledEngines: string[] = getDisabledEngineNames(enginePlugins, new Set(userCore.getEngineNames())); + + type engineDisableInfo = { engines: { [key: string]: { disable_engine: boolean } } }; + const rawConfigOnlyWithEnginesDisabled: engineDisableInfo = {engines: {}}; + for (const engineName of disabledEngines) { + rawConfigOnlyWithEnginesDisabled.engines[engineName] = { disable_engine: true }; + } + const defaultConfigWithEnginesDisabled: CodeAnalyzerConfig = CodeAnalyzerConfig.fromObject(rawConfigOnlyWithEnginesDisabled); + + // The Default config produces two Cores, since we have to run two selections. + const defaultCoreForAllRules: CodeAnalyzer = new CodeAnalyzer(defaultConfigWithEnginesDisabled); + const defaultCoreForSelectRules: CodeAnalyzer = new CodeAnalyzer(defaultConfigWithEnginesDisabled); + // Only the File Logger should listen to the Default Cores, since we don't want to bother the user with redundant // logs printed to the console. logEventLogger.listen(defaultCoreForAllRules); logEventLogger.listen(defaultCoreForSelectRules); - const enginePlugins = this.dependencies.pluginsFactory.create(); - const enginePluginModules = userConfig.getCustomEnginePluginModules(); - - const addEnginePromises: Promise[] = [ - // Assumption: It's safe for the different cores to share the same plugins, because all currently existent - // plugins return unique engines every time. This code may fail or behave unexpectedly if a plugin reuses engines. - ...enginePlugins.map(enginePlugin => userCore.addEnginePlugin(enginePlugin)), + const defaultEnginePromises: Promise[] = [ ...enginePlugins.map(enginePlugin => defaultCoreForAllRules.addEnginePlugin(enginePlugin)), ...enginePlugins.map(enginePlugin => defaultCoreForSelectRules.addEnginePlugin(enginePlugin)), - ...enginePluginModules.map(pluginModule => userCore.dynamicallyAddEnginePlugin(pluginModule)), // Assumption: Every engine's default configuration is sufficient to allow that engine to be instantiated, // or throw a clear error indicating the problem. ...enginePluginModules.map(pluginModule => defaultCoreForAllRules.dynamicallyAddEnginePlugin(pluginModule)), ...enginePluginModules.map(pluginModule => defaultCoreForSelectRules.dynamicallyAddEnginePlugin(pluginModule)), ]; - await Promise.all(addEnginePromises); + await Promise.all(defaultEnginePromises); + + // ==== PERFORM RULE SELECTIONS ================================================================================ const userSelectOptions = input.workspace ? {workspace: await createWorkspace(userCore, input.workspace)} : undefined; @@ -106,8 +130,15 @@ export class ConfigAction { this.dependencies.progressEventListeners.forEach(listener => listener.stopListening()); this.dependencies.logEventListeners.forEach(listener => listener.stopListening()); - // We need the Set of all Engines that returned rules for the user's selection on both the Default and User Cores. - const relevantEngines: Set = new Set([...userRules.getEngineNames(), ...selectedDefaultRules.getEngineNames()]); + + // ==== CREATE AND WRITE CONFIG YAML =========================================================================== + + // We need the Set of disabled engines plus all engines that returned rules for the user's selection on both the + // Default and User Cores. + const relevantEngines: Set = new Set([ + ...disabledEngines, + ...userRules.getEngineNames(), + ...selectedDefaultRules.getEngineNames()]); const configModel: ConfigModel = new AnnotatedConfigModel(userCore, userRules, allDefaultRules, relevantEngines); @@ -126,3 +157,9 @@ export class ConfigAction { return new ConfigAction(dependencies) } } + +function getDisabledEngineNames(allEnginePlugins: EnginePlugin[], enabledEngineNames: Set): string[] { + return allEnginePlugins.flatMap(enginePlugin => + enginePlugin.getAvailableEngineNames().filter(engineName => !enabledEngineNames.has(engineName)) + ); +} diff --git a/test/fixtures/example-workspaces/ConfigAction.test.ts/optional-input-config.yml b/test/fixtures/example-workspaces/ConfigAction.test.ts/optional-input-config.yml index b3dae7640..80b0cb661 100644 --- a/test/fixtures/example-workspaces/ConfigAction.test.ts/optional-input-config.yml +++ b/test/fixtures/example-workspaces/ConfigAction.test.ts/optional-input-config.yml @@ -17,7 +17,7 @@ engines: sub_field: - __DUMMY_STUBENGINE2_SUBFIELD__ StubEngine3: - disable_engine: true + disable_engine: __STUB3_DISABLE_ENGINE_VALUE__ rules: StubEngine1: Stub1Rule1: diff --git a/test/lib/actions/ConfigAction.test.ts b/test/lib/actions/ConfigAction.test.ts index 0336a83ca..91090eb6b 100644 --- a/test/lib/actions/ConfigAction.test.ts +++ b/test/lib/actions/ConfigAction.test.ts @@ -35,7 +35,7 @@ describe('ConfigAction tests', () => { logEventListeners: [], progressEventListeners: [], viewer: new ConfigStyledYamlViewer(spyDisplay), - configFactory: new DefaultStubCodeAnalyzerConfigFactory(), + configFactory: new StubCodeAnalyzerConfigFactory(), actionSummaryViewer: new ConfigActionSummaryViewer(spyDisplay), pluginsFactory: new StubEnginePluginFactory() }; @@ -172,11 +172,6 @@ describe('ConfigAction tests', () => { {position: 'start'}, {position: 'end'} ])('Top-level $position comment is correct', async ({position}) => { - // ==== SETUP ==== - // Set the dummy config properties to null; it's fine for this test. - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== // Just select all rules for this test, since we don't care about the rules here. const output = await runActionAndGetDisplayedConfig(dependencies, ['all']); @@ -192,11 +187,6 @@ describe('ConfigAction tests', () => { {section: 'rules'}, {section: 'engines'} ])('`$section` section header-comment is correct', async ({section}) => { - // ==== SETUP ==== - // Set the dummy config properties to null; it's fine for this test. - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== // Just select all rules for this test, since we don't care about the rules here. const output = await runActionAndGetDisplayedConfig(dependencies, ['all']); @@ -210,10 +200,6 @@ describe('ConfigAction tests', () => { {prop: 'config_root'}, {prop: 'log_folder'} ])('If derivable property $prop is explicitly null, then output is null and derived value is in a comment', async ({prop}) => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== // Just select all rules for this test, since we don't care about the rules here. const output = await runActionAndGetDisplayedConfig(dependencies, ['all']); @@ -231,8 +217,8 @@ describe('ConfigAction tests', () => { {prop: 'log_folder'} ])('If derivable property $prop is explicitly its default value, then output is null and derived value is in a comment', async ({prop}) => { // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot(CodeAnalyzerConfig.withDefaults().getConfigRoot()); - stubConfigFactory.setDummyLogFolder(CodeAnalyzerConfig.withDefaults().getLogFolder()); + stubConfigFactory.dummyConfigRoot =CodeAnalyzerConfig.withDefaults().getConfigRoot(); + stubConfigFactory.dummyLogFolder = CodeAnalyzerConfig.withDefaults().getLogFolder(); // ==== TESTED BEHAVIOR ==== // Just select all rules for this test, since we don't care about the rules here. @@ -253,8 +239,8 @@ describe('ConfigAction tests', () => { // ==== SETUP ==== // Make the config root and log folder both be the folder above this one. const parentOfCurrentDirectory = path.resolve(__dirname, '..'); - stubConfigFactory.setDummyConfigRoot(parentOfCurrentDirectory); - stubConfigFactory.setDummyLogFolder(parentOfCurrentDirectory); + stubConfigFactory.dummyConfigRoot = parentOfCurrentDirectory; + stubConfigFactory.dummyLogFolder = parentOfCurrentDirectory; // ==== TESTED BEHAVIOR ==== // Just select all rules for this test, since we don't care about the rules here. @@ -275,10 +261,6 @@ describe('ConfigAction tests', () => { {overrideStatus: 'overridden tags and severity', commentStatus: 'comment indicating original values', ruleName: 'Stub1Rule3'}, {overrideStatus: 'no overrides', commentStatus: 'no comment', ruleName: 'Stub1Rule4'}, ])('Selected and enabled rules with $overrideStatus are present with $commentStatus', async ({ruleName}) => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['CodeStyle']); @@ -292,10 +274,6 @@ describe('ConfigAction tests', () => { {ruleType: 'Non-overridden and unselected rules', ruleName: 'Stub1Rule6'}, {ruleType: 'Selected rules on disabled engines', ruleName: 'Stub3Rule1'}, ])('$ruleType are absent', async ({ruleName}) => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['CodeStyle']); @@ -304,10 +282,6 @@ describe('ConfigAction tests', () => { }); it('Engines for selected rules use their existing configuration', async () => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['CodeStyle']); @@ -317,10 +291,6 @@ describe('ConfigAction tests', () => { }); it('Engines for unselected rules have no configuration', async () => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['CodeStyle']); @@ -329,10 +299,6 @@ describe('ConfigAction tests', () => { }); it('Disabled engines with selected rules use their configuration', async () => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['CodeStyle']); @@ -341,10 +307,8 @@ describe('ConfigAction tests', () => { expect(output).toContain(goldFileContents); }); - it('Edge Case: When no rules are selected, `rules` and `engines` sections are commented empty objects', async () => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); + it('Edge Case: When all engines are enabled and no rules are selected, `rules` and `engines` sections are commented empty objects', async () => { + stubConfigFactory.stub3DisableEngineValue = false; // ==== TESTED BEHAVIOR ==== // Select the tag "NoRuleHasThisTag" @@ -355,14 +319,44 @@ describe('ConfigAction tests', () => { expect(output).toContain('engines: {} # Empty object used because rule selection returned no rules'); }); + it('Edge Case: When an engine is disabled and no rules are selected, `rules` is empty but `engines` still contains the disable_engine flag', async () => { + // ==== SETUP ==== + stubConfigFactory.stub3DisableEngineValue = true; + + // ==== TESTED BEHAVIOR ==== + // Select the tag "NoRuleHasThisTag" + const output = await runActionAndGetDisplayedConfig(dependencies, ['NoRuleHasThisTag']); + + // ==== ASSERTIONS ==== + expect(output).toContain('rules: {} # Remove this empty object {} when you are ready to specify your first rule override'); + expect(output).toContain('disable_engine: true # Modified from: false'); + }); + + it('Edge Case: When plugin throws error when attempting to create engine config and engine is enabled, then error', async () => { + dependencies.pluginsFactory = new FactoryForThrowingEnginePlugin(); + dependencies.configFactory = new StubCodeAnalyzerConfigFactory(); + + await expect(runActionAndGetDisplayedConfig(dependencies, ['NoRuleHasThisTag'])).rejects.toThrowError(); + }); + + it('Edge Case: When plugin thrown error when attempting to create engine config but engine is disabled, then do not error', async () => { + dependencies.pluginsFactory = new FactoryForThrowingEnginePlugin(); + dependencies.configFactory = new StubCodeAnalyzerConfigFactory(CodeAnalyzerConfig.fromObject({ + engines: { + uncreatableEngine: { + disable_engine: true + } + } + })); + + const output: string = await runActionAndGetDisplayedConfig(dependencies, ['NoRuleHasThisTag']); + expect(output).toContain('disable_engine: true # Modified from: false'); + }); + it.each([ {overrideStatus: 'via override', commentStatus: 'there is a comment', ruleName: 'Stub1Rule7'}, {overrideStatus: 'by default', commentStatus: 'there is no comment', ruleName: 'Stub1Rule8'} ])('Edge Case: When selected rule has no tags $overrideStatus, `tags` is an empty array and $commentStatus', async ({ruleName}) => { - // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot('null'); - stubConfigFactory.setDummyLogFolder('null'); - // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, [ruleName]); @@ -373,9 +367,7 @@ describe('ConfigAction tests', () => { it('If config is provided with relative path to config_root, then it remains relative in config output even though core makes it absolute for engines', async () => { // ==== SETUP ==== - stubConfigFactory.setDummyConfigRoot(PATH_TO_EXAMPLE_WORKSPACE); - stubConfigFactory.setDummyLogFolder('null'); - + stubConfigFactory.dummyConfigRoot = PATH_TO_EXAMPLE_WORKSPACE; // ==== TESTED BEHAVIOR ==== const output = await runActionAndGetDisplayedConfig(dependencies, ['Stub2Rule1']); @@ -393,7 +385,7 @@ describe('ConfigAction tests', () => { logEventListeners: [], progressEventListeners: [], viewer: new ConfigStyledYamlViewer(spyDisplay), - configFactory: new DefaultStubCodeAnalyzerConfigFactory(), + configFactory: new StubCodeAnalyzerConfigFactory(), actionSummaryViewer: new ConfigActionSummaryViewer(spyDisplay), pluginsFactory: new StubEnginePluginFactory() }; @@ -441,7 +433,7 @@ describe('ConfigAction tests', () => { logEventListeners: [], progressEventListeners: [], viewer: new ConfigStyledYamlViewer(spyDisplay), - configFactory: new DefaultStubCodeAnalyzerConfigFactory(), + configFactory: new StubCodeAnalyzerConfigFactory(), actionSummaryViewer: new ConfigActionSummaryViewer(spyDisplay), pluginsFactory: new StubEnginePluginFactory() } @@ -530,29 +522,29 @@ describe('ConfigAction tests', () => { // ====== STUBS ====== -class DefaultStubCodeAnalyzerConfigFactory implements CodeAnalyzerConfigFactory { +class StubCodeAnalyzerConfigFactory implements CodeAnalyzerConfigFactory { + private readonly config: CodeAnalyzerConfig; + + constructor(config: CodeAnalyzerConfig = CodeAnalyzerConfig.withDefaults()) { + this.config = config; + } + public create(): CodeAnalyzerConfig { - return CodeAnalyzerConfig.withDefaults(); + return this.config; } } class AlternativeStubCodeAnalyzerConfigFactory implements CodeAnalyzerConfigFactory { - private dummyConfigRoot: string; - private dummyLogFolder: string; - - public setDummyConfigRoot(dummyConfigRoot: string): void { - this.dummyConfigRoot = dummyConfigRoot; - } - - public setDummyLogFolder(dummyLogFolder: string): void { - this.dummyLogFolder = dummyLogFolder; - } + dummyConfigRoot: string = 'null'; + dummyLogFolder: string = 'null'; + stub3DisableEngineValue: boolean = true; public create(): CodeAnalyzerConfig { const rawConfigFileContents = fs.readFileSync(path.join(PATH_TO_EXAMPLE_WORKSPACE, 'optional-input-config.yml'), 'utf-8'); const validatedConfigFileContents = rawConfigFileContents .replaceAll('__DUMMY_CONFIG_ROOT__', this.dummyConfigRoot) .replaceAll('__DUMMY_LOG_FOLDER__', this.dummyLogFolder) + .replaceAll('__STUB3_DISABLE_ENGINE_VALUE__', String(this.stub3DisableEngineValue)) .replaceAll('__DUMMY_STUBENGINE2_SUBFIELD__', this.dummyConfigRoot && this.dummyConfigRoot !== 'null' ? path.join(this.dummyConfigRoot, 'optional-input-config.yml') : 'dummy'); return CodeAnalyzerConfig.fromYamlString(validatedConfigFileContents, process.cwd()); @@ -801,3 +793,24 @@ class StubEngine3 extends EngineApi.Engine { }); } } + + +class FactoryForThrowingEnginePlugin implements EnginePluginsFactory { + create(): EngineApi.EnginePlugin[] { + return [new ThrowingEnginePlugin()]; + } +} + +class ThrowingEnginePlugin extends EngineApi.EnginePluginV1 { + getAvailableEngineNames(): string[] { + return ['uncreatableEngine']; + } + + createEngineConfig(_engineName: string, _configValueExtractor: EngineApi.ConfigValueExtractor): Promise { + throw new Error('Error thrown by createEngineConfig'); + } + + createEngine(_engineName: string, _resolvedConfig: EngineApi.ConfigObject): Promise { + throw new Error('Should not be called.'); + } +} From 1f6f018397fd999d24719a7b15db7b176188f9fd Mon Sep 17 00:00:00 2001 From: Juliet Shackell Date: Wed, 12 Mar 2025 15:21:22 -0700 Subject: [PATCH 4/7] NEW: @W-17916450@ update v5 CLI to allow rules to be saved to JSON (Part 2) --- messages/rules-command.md | 14 ++++++++------ messages/rules-writer.md | 2 +- messages/run-command.md | 9 ++++++--- yarn.lock | 8 ++++---- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/messages/rules-command.md b/messages/rules-command.md index 1129c3907..1bdaa1301 100644 --- a/messages/rules-command.md +++ b/messages/rules-command.md @@ -32,9 +32,9 @@ We're continually improving Salesforce Code Analyzer. Tell us what you think! Gi <%= config.bin %> <%= command.id %> --rule-selector eslint:all -- List all rules for all engines: +- List the details about all rules for all engines; also write the rules in JSON format to a file called "rules.json" in the "out" folder, which must already exist: - <%= config.bin %> <%= command.id %> --rule-selector all + <%= config.bin %> <%= command.id %> --rule-selector all --output-file ./out/rules.json --view detail - Get a more accurate list of the rules that apply specifically to your workspace (all the files in the current folder): @@ -102,14 +102,16 @@ Format to display the rules in the terminal. # flags.view.description -The format `table` is concise and shows minimal output, the format `detail` shows all available information. If you specify neither --view nor --output-file, then the default table view is shown. If you specify --output-file but not --view, only summary information is shown. +The format `table` is concise and shows minimal output, the format `detail` shows all available information. + +If you specify neither --view nor --output-file, then the default table view is shown. If you specify --output-file but not --view, only summary information is shown in the terminal. # flags.output-file.summary -Output file location to write the selected rules. The file is written in JSON format. +Name of the file where the selected rules are written. The file format depends on the extension you specify; currently, only .json is supported for JSON-formatted output. # flags.output-file.description -Use this flag to write the selected rules to a JSON file. For example: "--output-file ./out/rules.json” creates a JSON results file in the "./out" folder. If the file exists already, it will be overwritten. +If you specify a folder, such as "--output-file ./out/rules.json", the folder must already exist or you get an error. If the file already exists, it's overwritten without prompting. -If you don't specify this flag, the command outputs the rules in the terminal. The view flag can be used in combination with this flag to save the file and output the results. \ No newline at end of file +If you don't specify this flag, the command outputs the rules to only the terminal. diff --git a/messages/rules-writer.md b/messages/rules-writer.md index 2bbd74234..1959d8519 100644 --- a/messages/rules-writer.md +++ b/messages/rules-writer.md @@ -1,3 +1,3 @@ # error.unrecognized-file-format -The output file %s has an unsupported extension. Valid extensions include: .json. +The output file %s has an unsupported extension. Valid extension(s): .json. diff --git a/messages/run-command.md b/messages/run-command.md index bb2ee25d9..2f0e241d4 100644 --- a/messages/run-command.md +++ b/messages/run-command.md @@ -126,11 +126,11 @@ If you specify neither --view nor --output-file, then the default table view is # flags.output-file.summary -Output file that contains the analysis results. The file format depends on the extension you specify, such as .csv, .html, .xml, and so on. +Name of the file where the analysis results are written. The file format depends on the extension you specify, such as .csv, .html, .xml, and so on. # flags.output-file.description -If you don't specify this flag, the command outputs the results in the terminal. Use this flag to print the results to a file; the format of the results depends on the extension you provide. For example, "--output-file results.csv" creates a comma-separated values file. You can specify one of these extensions: +If you don't specify this flag, the command outputs the results to only the terminal. Use this flag to print the results to a file; the format of the results depends on the extension you provide. For example, "--output-file results.csv" creates a comma-separated values file. You can specify one of these extensions: - .csv - .html or .htm @@ -138,8 +138,11 @@ If you don't specify this flag, the command outputs the results in the terminal. - .sarif or .sarif.json - .xml -To output the results to multiple files, specify this flag multiple times. For example: "--output-file ./out/results.json --output-file ./out/report.html" creates a JSON results file and an HTML file in the "./out" folder. +To output the results to multiple files, specify this flag multiple times. For example: "--output-file results.json --output-file report.html" creates both a JSON results file and an HTML file. + +If you specify a folder, such as "--output-file ./out/results.json", the folder must already exist or you get an error. If the file already exists, it's overwritten without prompting. # error.invalid-severity-threshold Expected --severity-threshold=%s to be one of: %s + diff --git a/yarn.lock b/yarn.lock index db9110c16..4325899be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1771,10 +1771,10 @@ strip-ansi "6.0.1" ts-retry-promise "^0.8.1" -"@salesforce/code-analyzer-core@0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-core/-/code-analyzer-core-0.23.0.tgz#c0527bba10303d60f71cbbe0e65b5c08ce6608cd" - integrity sha512-tjq5eaatKnyqYwdLSKn5RpglrfoeAwzRaCykvndQZBqWopntyjB7KYrX0sBXLRXRCHpwXVj7mpp84t+vj4dP8w== +"@salesforce/code-analyzer-core@0.24.0": + version "0.24.0" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-core/-/code-analyzer-core-0.24.0.tgz#5381143f05ef4c76b56aa4f58505dea2c7cd9b4a" + integrity sha512-VvFWJqd4bi/862gExO2pp7kKhN4HYyOgqiV0E669LzqMyN7McqdRQFiew93o8cKxuzs49R/D3EKFiB+jenU3vQ== dependencies: "@salesforce/code-analyzer-engine-api" "0.18.0" "@types/js-yaml" "^4.0.9" From 9f06a8b578437d73ebb86cbf7741ffba0b6ecc7c Mon Sep 17 00:00:00 2001 From: Stephen Carter Date: Tue, 18 Mar 2025 15:49:54 -0400 Subject: [PATCH 5/7] CHANGE: @W-17530192@: Update dependencies were possible --- package.json | 2 +- yarn.lock | 1505 ++++++++++++++++++++++---------------------------- 2 files changed, 674 insertions(+), 833 deletions(-) diff --git a/package.json b/package.json index c4ad5c44c..6c2a39c76 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@salesforce/ts-types": "^2.0.12", "@types/js-yaml": "^4.0.9", "@types/node": "^22.12.0", - "ansis": "^3.10.0", + "ansis": "^3.17.0", "fast-glob": "^3.3.3", "js-yaml": "^4.1.0", "ts-node": "^10", diff --git a/yarn.lock b/yarn.lock index 4325899be..91fa63dac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,83 +78,83 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" -"@aws-sdk/client-cloudfront@^3.726.1": - version "3.738.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudfront/-/client-cloudfront-3.738.0.tgz#8492886fd9cc81a49047960d17d2c8967f2bae92" - integrity sha512-T2bAcJrNpZsPHfh+YJR9yYg8rxRAAWvwYlvJgwtPz0kn3TiNdOwcbgiQkcWuWTKxirshOpn6sWBoRcAarMYVZg== +"@aws-sdk/client-cloudfront@^3.764.0": + version "3.764.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cloudfront/-/client-cloudfront-3.764.0.tgz#bd6682f18dda6ac758891487c6d1bc4d23bbfa4b" + integrity sha512-nXKaM9/T9viu5IXcPueTjf10VHOMX4J1FHWITDdk0s/vY2YZidGAZmeHLA0QXM0SxOQw/xga4d4k5HKdup2DSw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.734.0" - "@aws-sdk/credential-provider-node" "3.738.0" + "@aws-sdk/core" "3.758.0" + "@aws-sdk/credential-provider-node" "3.758.0" "@aws-sdk/middleware-host-header" "3.734.0" "@aws-sdk/middleware-logger" "3.734.0" "@aws-sdk/middleware-recursion-detection" "3.734.0" - "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.758.0" "@aws-sdk/region-config-resolver" "3.734.0" "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" "@aws-sdk/util-user-agent-browser" "3.734.0" - "@aws-sdk/util-user-agent-node" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.758.0" "@aws-sdk/xml-builder" "3.734.0" "@smithy/config-resolver" "^4.0.1" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/fetch-http-handler" "^5.0.1" "@smithy/hash-node" "^4.0.1" "@smithy/invalid-dependency" "^4.0.1" "@smithy/middleware-content-length" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.2" - "@smithy/middleware-retry" "^4.0.3" - "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.6" + "@smithy/middleware-retry" "^4.0.7" + "@smithy/middleware-serde" "^4.0.2" "@smithy/middleware-stack" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/url-parser" "^4.0.1" "@smithy/util-base64" "^4.0.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.3" - "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-defaults-mode-browser" "^4.0.7" + "@smithy/util-defaults-mode-node" "^4.0.7" "@smithy/util-endpoints" "^3.0.1" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" "@smithy/util-waiter" "^4.0.2" tslib "^2.6.2" -"@aws-sdk/client-s3@^3.735.0": - version "3.738.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.738.0.tgz#0bb71fa46d234c0bd7f86f61c4075453bdf61a8e" - integrity sha512-1Im/p5yfoV15ydVY+QlffsWQkQm7iGVI+3V9tCHEUT6SdmukYEpN3G8Y+lWofRBidxzUE2Xd+MbChCXfzLAoAg== +"@aws-sdk/client-s3@^3.749.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz#430708980e86584172ea8e3dc1450be50bd86818" + integrity sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.734.0" - "@aws-sdk/credential-provider-node" "3.738.0" + "@aws-sdk/core" "3.758.0" + "@aws-sdk/credential-provider-node" "3.758.0" "@aws-sdk/middleware-bucket-endpoint" "3.734.0" "@aws-sdk/middleware-expect-continue" "3.734.0" - "@aws-sdk/middleware-flexible-checksums" "3.735.0" + "@aws-sdk/middleware-flexible-checksums" "3.758.0" "@aws-sdk/middleware-host-header" "3.734.0" "@aws-sdk/middleware-location-constraint" "3.734.0" "@aws-sdk/middleware-logger" "3.734.0" "@aws-sdk/middleware-recursion-detection" "3.734.0" - "@aws-sdk/middleware-sdk-s3" "3.734.0" + "@aws-sdk/middleware-sdk-s3" "3.758.0" "@aws-sdk/middleware-ssec" "3.734.0" - "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.758.0" "@aws-sdk/region-config-resolver" "3.734.0" - "@aws-sdk/signature-v4-multi-region" "3.734.0" + "@aws-sdk/signature-v4-multi-region" "3.758.0" "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" "@aws-sdk/util-user-agent-browser" "3.734.0" - "@aws-sdk/util-user-agent-node" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.758.0" "@aws-sdk/xml-builder" "3.734.0" "@smithy/config-resolver" "^4.0.1" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/eventstream-serde-browser" "^4.0.1" "@smithy/eventstream-serde-config-resolver" "^4.0.1" "@smithy/eventstream-serde-node" "^4.0.1" @@ -165,129 +165,129 @@ "@smithy/invalid-dependency" "^4.0.1" "@smithy/md5-js" "^4.0.1" "@smithy/middleware-content-length" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.2" - "@smithy/middleware-retry" "^4.0.3" - "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.6" + "@smithy/middleware-retry" "^4.0.7" + "@smithy/middleware-serde" "^4.0.2" "@smithy/middleware-stack" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/url-parser" "^4.0.1" "@smithy/util-base64" "^4.0.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.3" - "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-defaults-mode-browser" "^4.0.7" + "@smithy/util-defaults-mode-node" "^4.0.7" "@smithy/util-endpoints" "^3.0.1" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" "@smithy/util-waiter" "^4.0.2" tslib "^2.6.2" -"@aws-sdk/client-sso@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.734.0.tgz#789c98267f07aaa7155b404d0bfd4059c4b4deb9" - integrity sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg== +"@aws-sdk/client-sso@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz#59a249abdfa52125fbe98b1d59c11e4f08ca6527" + integrity sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/middleware-host-header" "3.734.0" "@aws-sdk/middleware-logger" "3.734.0" "@aws-sdk/middleware-recursion-detection" "3.734.0" - "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.758.0" "@aws-sdk/region-config-resolver" "3.734.0" "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" "@aws-sdk/util-user-agent-browser" "3.734.0" - "@aws-sdk/util-user-agent-node" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.758.0" "@smithy/config-resolver" "^4.0.1" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/fetch-http-handler" "^5.0.1" "@smithy/hash-node" "^4.0.1" "@smithy/invalid-dependency" "^4.0.1" "@smithy/middleware-content-length" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.2" - "@smithy/middleware-retry" "^4.0.3" - "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.6" + "@smithy/middleware-retry" "^4.0.7" + "@smithy/middleware-serde" "^4.0.2" "@smithy/middleware-stack" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/url-parser" "^4.0.1" "@smithy/util-base64" "^4.0.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.3" - "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-defaults-mode-browser" "^4.0.7" + "@smithy/util-defaults-mode-node" "^4.0.7" "@smithy/util-endpoints" "^3.0.1" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/core@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.734.0.tgz#fa2289750efd75f4fb8c45719a4a4ea7e7755160" - integrity sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg== +"@aws-sdk/core@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.758.0.tgz#d13a4bb95de0460d5269cd5a40503c85b344b0b4" + integrity sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg== dependencies: "@aws-sdk/types" "3.734.0" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/node-config-provider" "^4.0.1" "@smithy/property-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/signature-v4" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/util-middleware" "^4.0.1" fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz#6c0b1734764a7fb1616455836b1c3dacd99e50a3" - integrity sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw== +"@aws-sdk/credential-provider-env@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz#6193d1607eedd0929640ff64013f7787f29ff6a1" + integrity sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w== dependencies: - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/property-provider" "^4.0.1" "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.734.0.tgz#21c5fbb380d1dd503491897b346e1e0b1d06ae41" - integrity sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg== +"@aws-sdk/credential-provider-http@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz#f7b28d642f2ac933e81a7add08ce582b398c1635" + integrity sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q== dependencies: - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/fetch-http-handler" "^5.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/property-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.734.0.tgz#5769ae28cd255d4fc946799c0273b4af6f2f12bb" - integrity sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg== - dependencies: - "@aws-sdk/core" "3.734.0" - "@aws-sdk/credential-provider-env" "3.734.0" - "@aws-sdk/credential-provider-http" "3.734.0" - "@aws-sdk/credential-provider-process" "3.734.0" - "@aws-sdk/credential-provider-sso" "3.734.0" - "@aws-sdk/credential-provider-web-identity" "3.734.0" - "@aws-sdk/nested-clients" "3.734.0" +"@aws-sdk/credential-provider-ini@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz#66457e71d8f5013e18111b25629c2367ed8ef116" + integrity sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw== + dependencies: + "@aws-sdk/core" "3.758.0" + "@aws-sdk/credential-provider-env" "3.758.0" + "@aws-sdk/credential-provider-http" "3.758.0" + "@aws-sdk/credential-provider-process" "3.758.0" + "@aws-sdk/credential-provider-sso" "3.758.0" + "@aws-sdk/credential-provider-web-identity" "3.758.0" + "@aws-sdk/nested-clients" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/credential-provider-imds" "^4.0.1" "@smithy/property-provider" "^4.0.1" @@ -295,17 +295,17 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.738.0": - version "3.738.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.738.0.tgz#0a470fc4d2e791c26da57261b8b14f07de43cd74" - integrity sha512-3MuREsazwBxghKb2sQQHvie+uuK4dX4/ckFYiSoffzJQd0YHxaGxf8cr4NOSCQCUesWu8D3Y0SzlnHGboVSkpA== - dependencies: - "@aws-sdk/credential-provider-env" "3.734.0" - "@aws-sdk/credential-provider-http" "3.734.0" - "@aws-sdk/credential-provider-ini" "3.734.0" - "@aws-sdk/credential-provider-process" "3.734.0" - "@aws-sdk/credential-provider-sso" "3.734.0" - "@aws-sdk/credential-provider-web-identity" "3.734.0" +"@aws-sdk/credential-provider-node@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz#b0a5d18e5d7f1b091fd891e2e8088578c0246cef" + integrity sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.758.0" + "@aws-sdk/credential-provider-http" "3.758.0" + "@aws-sdk/credential-provider-ini" "3.758.0" + "@aws-sdk/credential-provider-process" "3.758.0" + "@aws-sdk/credential-provider-sso" "3.758.0" + "@aws-sdk/credential-provider-web-identity" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/credential-provider-imds" "^4.0.1" "@smithy/property-provider" "^4.0.1" @@ -313,39 +313,39 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.734.0.tgz#eb1de678a9c3d2d7b382e74a670fa283327f9c45" - integrity sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw== +"@aws-sdk/credential-provider-process@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz#563bfae58049afd9968ca60f61672753834ff506" + integrity sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA== dependencies: - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/property-provider" "^4.0.1" "@smithy/shared-ini-file-loader" "^4.0.1" "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.734.0.tgz#68a9d678319e9743d65cf59e2d29c0c440d8975c" - integrity sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q== +"@aws-sdk/credential-provider-sso@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz#5098c196a2dd38ba467aca052fc5193476b8a404" + integrity sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ== dependencies: - "@aws-sdk/client-sso" "3.734.0" - "@aws-sdk/core" "3.734.0" - "@aws-sdk/token-providers" "3.734.0" + "@aws-sdk/client-sso" "3.758.0" + "@aws-sdk/core" "3.758.0" + "@aws-sdk/token-providers" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/property-provider" "^4.0.1" "@smithy/shared-ini-file-loader" "^4.0.1" "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.734.0.tgz#666b61cc9f498a3aaecd8e38c9ae34aef37e2e64" - integrity sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g== +"@aws-sdk/credential-provider-web-identity@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz#ea88729ee0e5de0bf5f31929d60dfd148934b6a5" + integrity sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw== dependencies: - "@aws-sdk/core" "3.734.0" - "@aws-sdk/nested-clients" "3.734.0" + "@aws-sdk/core" "3.758.0" + "@aws-sdk/nested-clients" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/property-provider" "^4.0.1" "@smithy/types" "^4.1.0" @@ -374,22 +374,22 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.735.0": - version "3.735.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.735.0.tgz#e83850711d6750df764d7cf3a1a8434fe91f1fb9" - integrity sha512-Tx7lYTPwQFRe/wQEHMR6Drh/S+X0ToAEq1Ava9QyxV1riwtepzRLojpNDELFb3YQVVYbX7FEiBMCJLMkmIIY+A== +"@aws-sdk/middleware-flexible-checksums@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz#50b753e5c83f4fe2ec3578a1768a68336ec86e3c" + integrity sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/is-array-buffer" "^4.0.0" "@smithy/node-config-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" "@smithy/util-middleware" "^4.0.1" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -431,23 +431,23 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.734.0.tgz#eaeec56fef54713a2a8baa1fbc8be74e8f49fb09" - integrity sha512-zeZPenDhkP/RXYMFG3exhNOe2Qukg2l2KpIjxq9o66meELiTULoIXjCmgPoWcM8zzrue06SBdTsaJDHfDl2vdA== +"@aws-sdk/middleware-sdk-s3@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz#75c224a49e47111df880b683debbd8f49f30ca24" + integrity sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A== dependencies: - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" "@aws-sdk/util-arn-parser" "3.723.0" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/node-config-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/signature-v4" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/util-config-provider" "^4.0.0" "@smithy/util-middleware" "^4.0.1" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -460,57 +460,57 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.734.0.tgz#12d400ccb98593f2b02e4fb08239cb9835d41d3a" - integrity sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg== +"@aws-sdk/middleware-user-agent@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz#f3c9d2025aa55fd400acb1d699c1fbd6b4f68f34" + integrity sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg== dependencies: - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.734.0" - "@smithy/core" "^3.1.1" + "@aws-sdk/util-endpoints" "3.743.0" + "@smithy/core" "^3.1.5" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.734.0.tgz#10a116d141522341c446b11783551ef863aabd27" - integrity sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA== +"@aws-sdk/nested-clients@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz#571c853602d38f5e8faa10178347e711e4f0e444" + integrity sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.734.0" + "@aws-sdk/core" "3.758.0" "@aws-sdk/middleware-host-header" "3.734.0" "@aws-sdk/middleware-logger" "3.734.0" "@aws-sdk/middleware-recursion-detection" "3.734.0" - "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.758.0" "@aws-sdk/region-config-resolver" "3.734.0" "@aws-sdk/types" "3.734.0" - "@aws-sdk/util-endpoints" "3.734.0" + "@aws-sdk/util-endpoints" "3.743.0" "@aws-sdk/util-user-agent-browser" "3.734.0" - "@aws-sdk/util-user-agent-node" "3.734.0" + "@aws-sdk/util-user-agent-node" "3.758.0" "@smithy/config-resolver" "^4.0.1" - "@smithy/core" "^3.1.1" + "@smithy/core" "^3.1.5" "@smithy/fetch-http-handler" "^5.0.1" "@smithy/hash-node" "^4.0.1" "@smithy/invalid-dependency" "^4.0.1" "@smithy/middleware-content-length" "^4.0.1" - "@smithy/middleware-endpoint" "^4.0.2" - "@smithy/middleware-retry" "^4.0.3" - "@smithy/middleware-serde" "^4.0.1" + "@smithy/middleware-endpoint" "^4.0.6" + "@smithy/middleware-retry" "^4.0.7" + "@smithy/middleware-serde" "^4.0.2" "@smithy/middleware-stack" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/protocol-http" "^5.0.1" - "@smithy/smithy-client" "^4.1.2" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/url-parser" "^4.0.1" "@smithy/util-base64" "^4.0.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.3" - "@smithy/util-defaults-mode-node" "^4.0.3" + "@smithy/util-defaults-mode-browser" "^4.0.7" + "@smithy/util-defaults-mode-node" "^4.0.7" "@smithy/util-endpoints" "^3.0.1" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" @@ -529,24 +529,24 @@ "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.734.0.tgz#218d254d85b5e97409266725fdd6e9c28c3fbcab" - integrity sha512-GSRP8UH30RIYkcpPILV4pWrKFjRmmNjtUd41HTKWde5GbjJvNYpxqFXw2aIJHjKTw/js3XEtGSNeTaQMVVt3CQ== +"@aws-sdk/signature-v4-multi-region@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz#2ccd34e90120dbf6f29e4f621574efd02e463b79" + integrity sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.734.0" + "@aws-sdk/middleware-sdk-s3" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/protocol-http" "^5.0.1" "@smithy/signature-v4" "^5.0.1" "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@aws-sdk/token-providers@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.734.0.tgz#8880e94f21457fe5dd7074ecc52fdd43180cbb2c" - integrity sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw== +"@aws-sdk/token-providers@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz#fcab3885ba2b222ff8bb7817448d3c786dc2ddf9" + integrity sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w== dependencies: - "@aws-sdk/nested-clients" "3.734.0" + "@aws-sdk/nested-clients" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/property-provider" "^4.0.1" "@smithy/shared-ini-file-loader" "^4.0.1" @@ -568,10 +568,10 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.734.0.tgz#43bac42a21a45477a386ccf398028e7f793bc217" - integrity sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg== +"@aws-sdk/util-endpoints@3.743.0": + version "3.743.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz#fba654e0c5f1c8ba2b3e175dfee8e3ba4df2394a" + integrity sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw== dependencies: "@aws-sdk/types" "3.734.0" "@smithy/types" "^4.1.0" @@ -595,12 +595,12 @@ bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.734.0": - version "3.734.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.734.0.tgz#d5c6ee192cea9d53a871178a2669b8b4dea39a68" - integrity sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA== +"@aws-sdk/util-user-agent-node@3.758.0": + version "3.758.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz#604ccb02a5d11c9cedaea0bea279641ea9d4194d" + integrity sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw== dependencies: - "@aws-sdk/middleware-user-agent" "3.734.0" + "@aws-sdk/middleware-user-agent" "3.758.0" "@aws-sdk/types" "3.734.0" "@smithy/node-config-provider" "^4.0.1" "@smithy/types" "^4.1.0" @@ -614,7 +614,7 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -624,46 +624,25 @@ picocolors "^1.0.0" "@babel/compat-data@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" - integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.7.tgz#0439347a183b97534d52811144d763a17f9d2b24" - integrity sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA== +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.26.7": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" + "@babel/generator" "^7.26.10" "@babel/helper-compilation-targets" "^7.26.5" "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.7" - "@babel/parser" "^7.26.7" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.26.7" - "@babel/types" "^7.26.7" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/core@^7.26.7": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.9.tgz#71838542a4b1e49dfed353d7acbc6eb89f4a76f2" - integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.9" - "@babel/helper-compilation-targets" "^7.26.5" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.9" - "@babel/parser" "^7.26.9" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" "@babel/template" "^7.26.9" - "@babel/traverse" "^7.26.9" - "@babel/types" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -692,9 +671,9 @@ semver "^6.3.1" "@babel/eslint-parser@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.26.5.tgz#aa669f4d873f9cd617050cf3c40c19cd96307efb" - integrity sha512-Kkm8C8uxI842AwQADxl0GbcG1rupELYLShazYEZO/2DYjhyWXJIOUVOE3tBYm6JXzUCNJOZEzqc4rCW/jsEQYQ== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.26.10.tgz#4423cb3f84c26978439feabfe23c5aa929400737" + integrity sha512-QsfQZr4AiLpKqn7fz+j7SN+f43z2DZCgGyYbNJ2vJOqKfG4E6MZer1+jqGZqKJaxq/gdO2DC/nUu45+pOL5p2Q== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" eslint-visitor-keys "^2.1.0" @@ -709,24 +688,13 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.24.9", "@babel/generator@^7.26.5", "@babel/generator@^7.7.2": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== +"@babel/generator@^7.24.9", "@babel/generator@^7.26.10", "@babel/generator@^7.7.2": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.10.tgz#a60d9de49caca16744e6340c3658dfef6138c3f7" + integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang== dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/generator@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.9.tgz#75a9482ad3d0cc7188a537aa4910bc59db67cbca" - integrity sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg== - dependencies: - "@babel/parser" "^7.26.9" - "@babel/types" "^7.26.9" + "@babel/parser" "^7.26.10" + "@babel/types" "^7.26.10" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" @@ -779,35 +747,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== -"@babel/helpers@^7.24.8", "@babel/helpers@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.7.tgz#fd1d2a7c431b6e39290277aacfd8367857c576a4" - integrity sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.7" - -"@babel/helpers@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.9.tgz#28f3fb45252fc88ef2dc547c8a911c255fc9fef6" - integrity sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA== +"@babel/helpers@^7.24.8", "@babel/helpers@^7.26.10": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.10.tgz#6baea3cd62ec2d0c1068778d63cb1314f6637384" + integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== dependencies: "@babel/template" "^7.26.9" - "@babel/types" "^7.26.9" + "@babel/types" "^7.26.10" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.8", "@babel/parser@^7.25.9", "@babel/parser@^7.26.5", "@babel/parser@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c" - integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.8", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.10.tgz#e9bdb82f14b97df6569b0b038edd436839c57749" + integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== dependencies: - "@babel/types" "^7.26.7" - -"@babel/parser@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" - integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== - dependencies: - "@babel/types" "^7.26.9" + "@babel/types" "^7.26.10" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -929,30 +882,21 @@ "@babel/helper-plugin-utils" "^7.25.9" "@babel/runtime-corejs3@^7.12.5": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.26.7.tgz#586756721b532572b8592d825ebbb5bc08f08ad4" - integrity sha512-55gRV8vGrCIYZnaQHQrD92Lo/hYE3Sj5tmbuf0hhHR7sj2CWhEhHU89hbq+UVDXvFG1zUVXJhUkEq1eAfqXtFw== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.26.10.tgz#5a3185ca2813f8de8ae68622572086edf5cf51f2" + integrity sha512-uITFQYO68pMEYR46AHgQoyBg7KPPJDAbGn4jUTIRgCFJIp88MIBUianVOplhZDEec07bp9zIyr4Kp0FCyQzmWg== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.14.0" "@babel/runtime@^7.12.5": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341" - integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" + integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.25.9", "@babel/template@^7.3.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/template@^7.26.9": +"@babel/template@^7.24.7", "@babel/template@^7.26.9", "@babel/template@^7.3.3": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== @@ -961,44 +905,23 @@ "@babel/parser" "^7.26.9" "@babel/types" "^7.26.9" -"@babel/traverse@^7.24.8", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.7": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb" - integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA== +"@babel/traverse@^7.24.8", "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.10.tgz#43cca33d76005dbaa93024fae536cc1946a4c380" + integrity sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A== dependencies: "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.7" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.7" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/traverse@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a" - integrity sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.9" - "@babel/parser" "^7.26.9" + "@babel/generator" "^7.26.10" + "@babel/parser" "^7.26.10" "@babel/template" "^7.26.9" - "@babel/types" "^7.26.9" + "@babel/types" "^7.26.10" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.9", "@babel/types@^7.25.9", "@babel/types@^7.26.5", "@babel/types@^7.26.7", "@babel/types@^7.3.3": - version "7.26.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a" - integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@babel/types@^7.26.9": - version "7.26.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce" - integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.9", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.3.3": + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.10.tgz#396382f6335bd4feb65741eacfc808218f859259" + integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== dependencies: "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" @@ -1016,9 +939,9 @@ "@jridgewell/trace-mapping" "0.3.9" "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz#b0fc7e06d0c94f801537fd4237edc2706d3b8e4c" + integrity sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w== dependencies: eslint-visitor-keys "^3.4.3" @@ -1028,23 +951,28 @@ integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/compat@^1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.2.5.tgz#438f8bbe105341853469b2cf2d10b6321cadeb3a" - integrity sha512-5iuG/StT+7OfvhoBHPlmxkPA9om6aDUFgmD4+mWKAGsYt4vCe8rypneG03AuseyRHBmcCLXQtIH5S26tIoggLg== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.2.7.tgz#f1a890281631ad27530479420b743dd92626e819" + integrity sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg== -"@eslint/config-array@^0.19.0": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" - integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== +"@eslint/config-array@^0.19.2": + version "0.19.2" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.2.tgz#3060b809e111abfc97adb0bb1172778b90cb46aa" + integrity sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w== dependencies: - "@eslint/object-schema" "^2.1.5" + "@eslint/object-schema" "^2.1.6" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/core@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091" - integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw== +"@eslint/config-helpers@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.1.0.tgz#62f1b7821e9d9ced1b3f512c7ea731825765d1cc" + integrity sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA== + +"@eslint/core@^0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" + integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== dependencies: "@types/json-schema" "^7.0.15" @@ -1063,10 +991,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/eslintrc@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" - integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== +"@eslint/eslintrc@^3.2.0", "@eslint/eslintrc@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.0.tgz#96a558f45842989cca7ea1ecd785ad5491193846" + integrity sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1083,22 +1011,22 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@eslint/js@9.19.0", "@eslint/js@^9.19.0": - version "9.19.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.19.0.tgz#51dbb140ed6b49d05adc0b171c41e1a8713b7789" - integrity sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ== +"@eslint/js@9.22.0", "@eslint/js@^9.19.0": + version "9.22.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d" + integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== -"@eslint/object-schema@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" - integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@eslint/plugin-kit@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81" - integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A== +"@eslint/plugin-kit@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz#9901d52c136fb8f375906a73dcc382646c3b6a27" + integrity sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g== dependencies: - "@eslint/core" "^0.10.0" + "@eslint/core" "^0.12.0" levn "^0.4.1" "@humanfs/core@^0.19.1": @@ -1138,19 +1066,19 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== -"@humanwhocodes/retry@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" - integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@humanwhocodes/retry@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.2.tgz#1860473de7dfa1546767448f333db80cb0ff2161" + integrity sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ== -"@inquirer/checkbox@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.0.7.tgz#4c11322ab932765cace50d163eea73002dd76432" - integrity sha512-lyoF4uYdBBTnqeB1gjPdYkiQ++fz/iYKaP9DON1ZGlldkvAEJsjaOBRdbl5UW1pOSslBRd701jxhAG0MlhHd2w== +"@inquirer/checkbox@^4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.4.tgz#30c243015670126ac95d9b94cb37f631d5ad3f88" + integrity sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" @@ -1162,21 +1090,21 @@ "@inquirer/core" "^9.1.0" "@inquirer/type" "^1.5.3" -"@inquirer/confirm@^5.1.4": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.4.tgz#3e2c9bfdf80331676196d8dbb2261103a67d0e9d" - integrity sha512-EsiT7K4beM5fN5Mz6j866EFA9+v9d5o9VUra3hrg8zY4GHmCS8b616FErbdo5eyKoVotBQkHzMIeeKYsKDStDw== +"@inquirer/confirm@^5.1.8": + version "5.1.8" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.8.tgz#476af2476cd4867905dcabfca8598da4dd65e923" + integrity sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/core@^10.1.5": - version "10.1.5" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.5.tgz#7271c177340f77c2e231704227704d8cdf497747" - integrity sha512-/vyCWhET0ktav/mUeBqJRYTwmjFPIKPRYb3COAw7qORULgipGSUO2vL32lQKki3UxDKJ8BvuEbokaoyCA6YlWw== +"@inquirer/core@^10.1.9": + version "10.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.9.tgz#9ab672a2d9ca60c5d45c7fa9b63e4fe9e038a02e" + integrity sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw== dependencies: - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.3" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" cli-width "^4.1.0" mute-stream "^2.0.0" @@ -1202,28 +1130,28 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" -"@inquirer/editor@^4.2.4": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.4.tgz#1b2b6c0088c80375df1d7d2de89c30088b2bfe29" - integrity sha512-S8b6+K9PLzxiFGGc02m4syhEu5JsH0BukzRsuZ+tpjJ5aDsDX1WfNfOil2fmsO36Y1RMcpJGxlfQ1yh4WfU28Q== +"@inquirer/editor@^4.2.9": + version "4.2.9" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.9.tgz#4ff0c69b3940428d4549b719803655d7ae2cf2d6" + integrity sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" external-editor "^3.1.0" -"@inquirer/expand@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.7.tgz#352e05407e72e2f079e5affe032cc77c93ff7501" - integrity sha512-PsUQ5t7r+DPjW0VVEHzssOTBM2UPHnvBNse7hzuki7f6ekRL94drjjfBLrGEDe7cgj3pguufy/cuFwMeWUWHXw== +"@inquirer/expand@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.11.tgz#d898b2d028def42064eee15f34e2c0bdc4a1ad2c" + integrity sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" yoctocolors-cjs "^2.1.2" -"@inquirer/figures@^1.0.10", "@inquirer/figures@^1.0.5", "@inquirer/figures@^1.0.6": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.10.tgz#e3676a51c9c51aaabcd6ba18a28e82b98417db37" - integrity sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw== +"@inquirer/figures@^1.0.11", "@inquirer/figures@^1.0.5", "@inquirer/figures@^1.0.6": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== "@inquirer/input@^2.2.4": version "2.3.0" @@ -1233,64 +1161,64 @@ "@inquirer/core" "^9.1.0" "@inquirer/type" "^1.5.3" -"@inquirer/input@^4.1.4": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.4.tgz#10080f9a4b258c3d3a066488804bfb4caf5529fc" - integrity sha512-CKKF8otRBdIaVnRxkFLs00VNA9HWlEh3x4SqUfC3A8819TeOZpTYG/p+4Nqu3hh97G+A0lxkOZNYE7KISgU8BA== +"@inquirer/input@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.8.tgz#8e637f1163904d951762abab4584682daf484a91" + integrity sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/number@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.7.tgz#50bc394cda68205025e098b0cdec716f6d100e56" - integrity sha512-uU2nmXGC0kD8+BLgwZqcgBD1jcw2XFww2GmtP6b4504DkOp+fFAhydt7JzRR1TAI2dmj175p4SZB0lxVssNreA== +"@inquirer/number@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.11.tgz#b42b7b24e9e1916d26bbdc7c368852fdb626fa9a" + integrity sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" -"@inquirer/password@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.7.tgz#28a908185da7d65cf24b0e8e44c7ecc73b703889" - integrity sha512-DFpqWLx+C5GV5zeFWuxwDYaeYnTWYphO07pQ2VnP403RIqRIpwBG0ATWf7pF+3IDbaXEtWatCJWxyDrJ+rkj2A== +"@inquirer/password@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.11.tgz#f23a632fb9a18c7a7ce1f2ac36d94e8aa0b7229e" + integrity sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" -"@inquirer/prompts@^7.2.3": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.2.4.tgz#115f3a8ed1f9c6726e18cd797aecec8ca32629ec" - integrity sha512-Zn2XZL2VZl76pllUjeDnS6Poz2Oiv9kmAZdSZw1oFya985+/JXZ3GZ2JUWDokAPDhvuhkv9qz0Z7z/U80G8ztA== - dependencies: - "@inquirer/checkbox" "^4.0.7" - "@inquirer/confirm" "^5.1.4" - "@inquirer/editor" "^4.2.4" - "@inquirer/expand" "^4.0.7" - "@inquirer/input" "^4.1.4" - "@inquirer/number" "^3.0.7" - "@inquirer/password" "^4.0.7" - "@inquirer/rawlist" "^4.0.7" - "@inquirer/search" "^3.0.7" - "@inquirer/select" "^4.0.7" - -"@inquirer/rawlist@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.7.tgz#b6c710a6a1c3dc8891b313d1b901367b4fc0df31" - integrity sha512-ZeBca+JCCtEIwQMvhuROT6rgFQWWvAImdQmIIP3XoyDFjrp2E0gZlEn65sWIoR6pP2EatYK96pvx0887OATWQQ== - dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/type" "^3.0.3" +"@inquirer/prompts@^7.3.3": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.4.0.tgz#bd9be38372be8db75afb04776eb0cf096ae9814b" + integrity sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w== + dependencies: + "@inquirer/checkbox" "^4.1.4" + "@inquirer/confirm" "^5.1.8" + "@inquirer/editor" "^4.2.9" + "@inquirer/expand" "^4.0.11" + "@inquirer/input" "^4.1.8" + "@inquirer/number" "^3.0.11" + "@inquirer/password" "^4.0.11" + "@inquirer/rawlist" "^4.0.11" + "@inquirer/search" "^3.0.11" + "@inquirer/select" "^4.1.0" + +"@inquirer/rawlist@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.11.tgz#29d74eea2607cbb3d80eac7fca0011d51c74c46d" + integrity sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg== + dependencies: + "@inquirer/core" "^10.1.9" + "@inquirer/type" "^3.0.5" yoctocolors-cjs "^2.1.2" -"@inquirer/search@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.7.tgz#78ec82bc0597fb27ac6bf306e4602e607a06a0b3" - integrity sha512-Krq925SDoLh9AWSNee8mbSIysgyWtcPnSAp5YtPBGCQ+OCO+5KGC8FwLpyxl8wZ2YAov/8Tp21stTRK/fw5SGg== +"@inquirer/search@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.11.tgz#660b181516acc306cf21dbc1d3d49f662cb7d917" + integrity sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" yoctocolors-cjs "^2.1.2" "@inquirer/select@^2.5.0": @@ -1304,14 +1232,14 @@ ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/select@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.7.tgz#cea50dc7a00e749386d23ac42487dd62f7379d84" - integrity sha512-ejGBMDSD+Iqk60u5t0Zf2UQhGlJWDM78Ep70XpNufIfc+f4VOTeybYKXu9pDjz87FkRzLiVsGpQG2SzuGlhaJw== +"@inquirer/select@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.1.0.tgz#e99f483cb004c0247ced597f2c6015f084223dfb" + integrity sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA== dependencies: - "@inquirer/core" "^10.1.5" - "@inquirer/figures" "^1.0.10" - "@inquirer/type" "^3.0.3" + "@inquirer/core" "^10.1.9" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.5" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" @@ -1329,10 +1257,10 @@ dependencies: mute-stream "^1.0.0" -"@inquirer/type@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.3.tgz#aa9cb38568f23f772b417c972f6a2d906647a6af" - integrity sha512-I4VIHFxUuY1bshGbXZTxCmhwaaEst9s/lll3ekok+o1Z26/ZUKdx8y1b7lsoG6rtsBDwEGfiBJ2SfirjoISLpg== +"@inquirer/type@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.5.tgz#fe00207e57d5f040e5b18e809c8e7abc3a2ade3a" + integrity sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg== "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -1582,10 +1510,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsforce/jsforce-node@^3.6.1": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@jsforce/jsforce-node/-/jsforce-node-3.6.4.tgz#c1055e2064a501633e9d86f6f2fe1b287c6ce9ce" - integrity sha512-9IZL5lFDE1nUnPYnzOleH0xaEE3Sc9sQcLKwx1LQeSyAI/KvnxySadlIpZAdTrJap4hDRFQkXiEFiJ3oFwj/zg== +"@jsforce/jsforce-node@^3.6.5": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@jsforce/jsforce-node/-/jsforce-node-3.6.6.tgz#26fe2fc9f4f3671ca8bfb0c98a728cb8a0219265" + integrity sha512-WdIo2lLbrz6nkfiaz2UynyaNiM8o+fEjaRev7zA4KKSaQYB1MJ66xHubeI5Iheq8WgkY9XGwWKAwPDhuV+GROQ== dependencies: "@sindresorhus/is" "^4" base64url "^3.0.1" @@ -1599,9 +1527,9 @@ xml2js "^0.6.2" "@lwc/eslint-plugin-lwc-platform@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@lwc/eslint-plugin-lwc-platform/-/eslint-plugin-lwc-platform-5.1.0.tgz#66736356d9be9deb4ebbe2f939d98723e9005ea3" - integrity sha512-H6n4n3GC1iHGwfSlnxNXD+MZrnJWKoT+kkfNUCgqxRc9FyMkgXrtiY1/f76oJ+w189fcW4lNn8Qnv9HSVTnNbw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/@lwc/eslint-plugin-lwc-platform/-/eslint-plugin-lwc-platform-5.2.0.tgz#7f302375a31390cca9d1c9f45717e92aa188ef3d" + integrity sha512-YdUfrIxg1BccFuxoVYr5Fb4VQO28dlmjvQdWyigQKAGd6M7e/BruiZZ97EGGyrVubICo44xF8pZHNF1UyOqIFw== dependencies: minimatch "~5.1.1" @@ -1676,13 +1604,13 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/core@^4", "@oclif/core@^4.2.3": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.5.tgz#6b51e1db17272204b2431fee3eba93a21d59ebbe" - integrity sha512-bdXOojq8GaPnWnDgVOw030JlUROJEiDLXiV3XUUGUQDEp6YpVQvEYLIrUsEvyfASU3z3FGg3DC9k0kprcOYdhw== +"@oclif/core@^4", "@oclif/core@^4.2.8": + version "4.2.10" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.10.tgz#31dfb7481c79887c3e672e10c981fcc01fcbaeb3" + integrity sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ== dependencies: ansi-escapes "^4.3.2" - ansis "^3.9.0" + ansis "^3.17.0" clean-stack "^3.0.1" cli-spinners "^2.9.2" debug "^4.4.0" @@ -1700,34 +1628,34 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/plugin-help@^6.2.21", "@oclif/plugin-help@^6.2.23": - version "6.2.23" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-6.2.23.tgz#e2ffdc8c94235d99ae4c3f5825006cf75343515b" - integrity sha512-BA0h1fbheN74cdrITKIwqfsRtnw/G+oysHbn+IsqWcsecgy5HZwI37/cCRLXZSZQndsgoYAhqvVpyleXv3g83A== +"@oclif/plugin-help@^6.2.23", "@oclif/plugin-help@^6.2.25": + version "6.2.27" + resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-6.2.27.tgz#a3a49c3751d9f4bd66af11621017ec1e8cddcf10" + integrity sha512-RWSWtCFVObRmCwgxVOye3lsYbPHTnB7G4He5LEAg2tf600Sil5yXEOL/ULx1TqL/XOQxKqRvmLn/rLQOMT85YA== dependencies: "@oclif/core" "^4" -"@oclif/plugin-not-found@^3.2.32": - version "3.2.38" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.2.38.tgz#51dee701e45f6610df73b5487ad1623fb1e1d9d0" - integrity sha512-04jklrnR2gszbMrSpM9Dwv5RNx05eo8+d7goNbvWbbj7UxDT3RZrjAEYtYuu8ng7pRVFQO7fX4+eVnFbpuCPMg== +"@oclif/plugin-not-found@^3.2.46": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.2.47.tgz#dd615fcbbd1b29cf32d45b5588183fe3ac4311c0" + integrity sha512-7Zk10TQhPOd5kkS4wiLDBqtR2MRM8FBiSrZDmSsgME1kXt4eYQLAFc9c5WJzkpglNb6g5/iD1LvbhTNd5oLe1g== dependencies: - "@inquirer/prompts" "^7.2.3" + "@inquirer/prompts" "^7.3.3" "@oclif/core" "^4" - ansis "^3.8.1" + ansis "^3.17.0" fast-levenshtein "^3.0.0" "@oclif/plugin-warn-if-update-available@^3.1.31": - version "3.1.31" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.31.tgz#203bc7e63f7f7df5bb1e31f42c3c1b52eaa00763" - integrity sha512-0ZN7o+Tv00gYrwlKsfMQ8VvJGb9Vhr3UYStFJh1AbEdGTPlURv51aatTW27AIV2atfluCh0MMntVZSzoDcuxSQ== + version "3.1.38" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz#331f9ed8d6e9e36919c0814b24c8c9adbfe2acc4" + integrity sha512-lwYtVXdQaBJV94DglPu140Bc6NmmysHhX5PZtdxeNcUG2BgSX/Sre7oCzMEgmuhe4Lu2jDviMxTX81a8wv6v1w== dependencies: "@oclif/core" "^4" - ansis "^3.5.2" + ansis "^3.17.0" debug "^4.4.0" http-call "^5.2.2" lodash "^4.17.21" - registry-auth-token "^5.0.3" + registry-auth-token "^5.1.0" "@pnpm/config.env-replace@^1.1.0": version "1.1.0" @@ -1883,12 +1811,12 @@ semver "^7.6.0" ts-retry-promise "^0.7.1" -"@salesforce/core@^8.8.0", "@salesforce/core@^8.8.2": - version "8.8.2" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.8.2.tgz#0fc1632cc183b8c62e333f1f884bf3ee0f4aee6e" - integrity sha512-EOH75R2Nr2tg7b3gbyzRNwZPfZ/dZOpmMKmFHKL9oCtUI59+N4IkVljg6dpKYypVKuJJTzjI7T2ibnA8/cluZg== +"@salesforce/core@^8.8.0", "@salesforce/core@^8.8.5": + version "8.8.5" + resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-8.8.5.tgz#4004e22523e4e45b42631733d06dc8aec9fdc23d" + integrity sha512-eCiiO4NptvKkz04A4ivBVLzEBy/6IIFmaXoZ4tnF1FcD5MESvC+Xuc+0RFSRiYmPi5oloKNl6njrfVCKAho2zQ== dependencies: - "@jsforce/jsforce-node" "^3.6.1" + "@jsforce/jsforce-node" "^3.6.5" "@salesforce/kit" "^3.2.2" "@salesforce/schemas" "^1.9.0" "@salesforce/ts-types" "^2.0.10" @@ -2036,17 +1964,17 @@ "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@smithy/core@^3.1.1", "@smithy/core@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.2.tgz#f5b4c89bf054b717781d71c66b4fb594e06cbb62" - integrity sha512-htwQXkbdF13uwwDevz9BEzL5ABK+1sJpVQXywwGSH973AVOvisHNfpcB8A8761G6XgHoS2kHPqc9DqHJ2gp+/Q== +"@smithy/core@^3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.1.5.tgz#cc260229e45964d8354a3737bf3dedb56e373616" + integrity sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA== dependencies: "@smithy/middleware-serde" "^4.0.2" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" "@smithy/util-body-length-browser" "^4.0.0" "@smithy/util-middleware" "^4.0.1" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" @@ -2186,12 +2114,12 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.0.2", "@smithy/middleware-endpoint@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz#74b64fb2473ae35649a8d22d41708bc5d8d99df2" - integrity sha512-YdbmWhQF5kIxZjWqPIgboVfi8i5XgiYMM7GGKFMTvBei4XjNQfNv8sukT50ITvgnWKKKpOtp0C0h7qixLgb77Q== +"@smithy/middleware-endpoint@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz#7ead08fcfda92ee470786a7f458e9b59048407eb" + integrity sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg== dependencies: - "@smithy/core" "^3.1.2" + "@smithy/core" "^3.1.5" "@smithy/middleware-serde" "^4.0.2" "@smithy/node-config-provider" "^4.0.1" "@smithy/shared-ini-file-loader" "^4.0.1" @@ -2200,22 +2128,22 @@ "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" -"@smithy/middleware-retry@^4.0.3": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz#95e55a1b163ff06264f20b4dbbcbd915c8028f60" - integrity sha512-wmxyUBGHaYUqul0wZiset4M39SMtDBOtUr2KpDuftKNN74Do9Y36Go6Eqzj9tL0mIPpr31ulB5UUtxcsCeGXsQ== +"@smithy/middleware-retry@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz#8bb2014842a6144f230967db502f5fe6adcd6529" + integrity sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ== dependencies: "@smithy/node-config-provider" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/service-error-classification" "^4.0.1" - "@smithy/smithy-client" "^4.1.3" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" "@smithy/util-middleware" "^4.0.1" "@smithy/util-retry" "^4.0.1" tslib "^2.6.2" uuid "^9.0.1" -"@smithy/middleware-serde@^4.0.1", "@smithy/middleware-serde@^4.0.2": +"@smithy/middleware-serde@^4.0.2": version "4.0.2" resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz#f792d72f6ad8fa6b172e3f19c6fe1932a856a56d" integrity sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ== @@ -2241,10 +2169,10 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/node-http-handler@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz#48d47a046cf900ab86bfbe7f5fd078b52c82fab6" - integrity sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw== +"@smithy/node-http-handler@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz#363e1d453168b4e37e8dd456d0a368a4e413bc98" + integrity sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA== dependencies: "@smithy/abort-controller" "^4.0.1" "@smithy/protocol-http" "^5.0.1" @@ -2314,17 +2242,17 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.1.2", "@smithy/smithy-client@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.3.tgz#2c8f9aff3377e7655cebe84239da6be277ba8554" - integrity sha512-A2Hz85pu8BJJaYFdX8yb1yocqigyqBzn+OVaVgm+Kwi/DkN8vhN2kbDVEfADo6jXf5hPKquMLGA3UINA64UZ7A== +"@smithy/smithy-client@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.1.6.tgz#2183c922d086d33252012232be891f29a008d932" + integrity sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw== dependencies: - "@smithy/core" "^3.1.2" - "@smithy/middleware-endpoint" "^4.0.3" + "@smithy/core" "^3.1.5" + "@smithy/middleware-endpoint" "^4.0.6" "@smithy/middleware-stack" "^4.0.1" "@smithy/protocol-http" "^5.0.1" "@smithy/types" "^4.1.0" - "@smithy/util-stream" "^4.0.2" + "@smithy/util-stream" "^4.1.2" tslib "^2.6.2" "@smithy/types@^4.1.0": @@ -2389,27 +2317,27 @@ dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.0.3": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz#6fa7ba64a80a77f27b9b5c6972918904578b8d5b" - integrity sha512-Ej1bV5sbrIfH++KnWxjjzFNq9nyP3RIUq2c9Iqq7SmMO/idUR24sqvKH2LUQFTSPy/K7G4sB2m8n7YYlEAfZaw== +"@smithy/util-defaults-mode-browser@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz#54595ab3da6765bfb388e8e8b594276e0f485710" + integrity sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q== dependencies: "@smithy/property-provider" "^4.0.1" - "@smithy/smithy-client" "^4.1.3" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" bowser "^2.11.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.0.3": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz#5470fdc96672cee5199620b576d7025de3b17333" - integrity sha512-HE1I7gxa6yP7ZgXPCFfZSDmVmMtY7SHqzFF55gM/GPegzZKaQWZZ+nYn9C2Cc3JltCMyWe63VPR3tSFDEvuGjw== +"@smithy/util-defaults-mode-node@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz#0dea136de9096a36d84416f6af5843d866621491" + integrity sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ== dependencies: "@smithy/config-resolver" "^4.0.1" "@smithy/credential-provider-imds" "^4.0.1" "@smithy/node-config-provider" "^4.0.1" "@smithy/property-provider" "^4.0.1" - "@smithy/smithy-client" "^4.1.3" + "@smithy/smithy-client" "^4.1.6" "@smithy/types" "^4.1.0" tslib "^2.6.2" @@ -2446,13 +2374,13 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-stream@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.0.2.tgz#63495d3f7fba9d78748d540921136dc4a8d4c067" - integrity sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA== +"@smithy/util-stream@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.1.2.tgz#b867f25bc8b016de0582810a2f4092a71c5e3244" + integrity sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw== dependencies: "@smithy/fetch-http-handler" "^5.0.1" - "@smithy/node-http-handler" "^4.0.2" + "@smithy/node-http-handler" "^4.0.3" "@smithy/types" "^4.1.0" "@smithy/util-base64" "^4.0.0" "@smithy/util-buffer-from" "^4.0.0" @@ -2660,9 +2588,9 @@ "@types/node" "*" "@types/node@*", "@types/node@^22.12.0", "@types/node@^22.5.5": - version "22.12.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.12.0.tgz#bf8af3b2af0837b5a62a368756ff2b705ae0048c" - integrity sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA== + version "22.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" + integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== dependencies: undici-types "~6.20.0" @@ -2672,9 +2600,9 @@ integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/node@^20.0.0": - version "20.17.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.16.tgz#b33b0edc1bf925b27349e494b871ca4451fabab4" - integrity sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw== + version "20.17.24" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.24.tgz#2325476954e6fc8c2f11b9c61e26ba6eb7d3f5b6" + integrity sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA== dependencies: undici-types "~6.19.2" @@ -2730,56 +2658,30 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.22.0.tgz#63a1b0d24d85a971949f8d71d693019f58d2e861" - integrity sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw== +"@typescript-eslint/eslint-plugin@8.26.1", "@typescript-eslint/eslint-plugin@^8.22.0": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f" + integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.22.0" - "@typescript-eslint/type-utils" "8.22.0" - "@typescript-eslint/utils" "8.22.0" - "@typescript-eslint/visitor-keys" "8.22.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^2.0.0" - -"@typescript-eslint/eslint-plugin@^8.22.0": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz#d104c2a6212304c649105b18af2c110b4a1dd4ae" - integrity sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/type-utils" "8.24.1" - "@typescript-eslint/utils" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/type-utils" "8.26.1" + "@typescript-eslint/utils" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^2.0.1" -"@typescript-eslint/parser@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.22.0.tgz#f21c5db24271f182ebbb4ba8c7ad3eb76e5f5f3a" - integrity sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ== - dependencies: - "@typescript-eslint/scope-manager" "8.22.0" - "@typescript-eslint/types" "8.22.0" - "@typescript-eslint/typescript-estree" "8.22.0" - "@typescript-eslint/visitor-keys" "8.22.0" - debug "^4.3.4" - -"@typescript-eslint/parser@^8.22.0": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.24.1.tgz#67965c2d2ddd7eadb2f094c395695db8334ef9a2" - integrity sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ== +"@typescript-eslint/parser@8.26.1", "@typescript-eslint/parser@^8.22.0": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e" + integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ== dependencies: - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/typescript-estree" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" debug "^4.3.4" "@typescript-eslint/scope-manager@7.18.0": @@ -2790,39 +2692,21 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/scope-manager@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.22.0.tgz#e85836ddeb8eae715f870628bcc32fe96aaf4d0e" - integrity sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ== - dependencies: - "@typescript-eslint/types" "8.22.0" - "@typescript-eslint/visitor-keys" "8.22.0" - -"@typescript-eslint/scope-manager@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz#1e1e76ec4560aa85077ab36deb9b2bead4ae124e" - integrity sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q== - dependencies: - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" - -"@typescript-eslint/type-utils@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.22.0.tgz#cd9f23c23f021357ef0baa3490d4d96edcc97509" - integrity sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA== +"@typescript-eslint/scope-manager@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc" + integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg== dependencies: - "@typescript-eslint/typescript-estree" "8.22.0" - "@typescript-eslint/utils" "8.22.0" - debug "^4.3.4" - ts-api-utils "^2.0.0" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" -"@typescript-eslint/type-utils@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz#99113e1df63d1571309d87eef68967344c78dd65" - integrity sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw== +"@typescript-eslint/type-utils@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8" + integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg== dependencies: - "@typescript-eslint/typescript-estree" "8.24.1" - "@typescript-eslint/utils" "8.24.1" + "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/utils" "8.26.1" debug "^4.3.4" ts-api-utils "^2.0.1" @@ -2831,15 +2715,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/types@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.22.0.tgz#d9dec7116479ad03aeb6c8ac9c5223c4c79cf360" - integrity sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A== - -"@typescript-eslint/types@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.24.1.tgz#8777a024f3afc4ace5e48f9a804309c6dd38f95a" - integrity sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A== +"@typescript-eslint/types@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132" + integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ== "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" @@ -2855,27 +2734,13 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.22.0.tgz#c188c3e19529d5b3145577c0bd967e2683b114df" - integrity sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w== +"@typescript-eslint/typescript-estree@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd" + integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA== dependencies: - "@typescript-eslint/types" "8.22.0" - "@typescript-eslint/visitor-keys" "8.22.0" - debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^2.0.0" - -"@typescript-eslint/typescript-estree@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz#3bb479401f8bd471b3c6dd3db89e7256977c54db" - integrity sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg== - dependencies: - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/visitor-keys" "8.24.1" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/visitor-keys" "8.26.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -2883,25 +2748,15 @@ semver "^7.6.0" ts-api-utils "^2.0.1" -"@typescript-eslint/utils@8.22.0", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.22.0.tgz#c8cc4e52a9c711af8a741a82dc5d7242b7a8dd44" - integrity sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.22.0" - "@typescript-eslint/types" "8.22.0" - "@typescript-eslint/typescript-estree" "8.22.0" - -"@typescript-eslint/utils@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.24.1.tgz#08d14eac33cfb3456feeee5a275b8ad3349e52ed" - integrity sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ== +"@typescript-eslint/utils@8.26.1", "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f" + integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.24.1" - "@typescript-eslint/types" "8.24.1" - "@typescript-eslint/typescript-estree" "8.24.1" + "@typescript-eslint/scope-manager" "8.26.1" + "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/typescript-estree" "8.26.1" "@typescript-eslint/utils@^7.18.0": version "7.18.0" @@ -2921,20 +2776,12 @@ "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.22.0": - version "8.22.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.22.0.tgz#02cc005014c372033eb9171e2275b76cba722a3f" - integrity sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w== +"@typescript-eslint/visitor-keys@8.26.1": + version "8.26.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c" + integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg== dependencies: - "@typescript-eslint/types" "8.22.0" - eslint-visitor-keys "^4.2.0" - -"@typescript-eslint/visitor-keys@8.24.1": - version "8.24.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz#8bdfe47a89195344b34eb21ef61251562148202b" - integrity sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg== - dependencies: - "@typescript-eslint/types" "8.24.1" + "@typescript-eslint/types" "8.26.1" eslint-visitor-keys "^4.2.0" "@ungap/structured-clone@^1.2.0": @@ -2962,9 +2809,9 @@ acorn-walk@^8.1.1: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== agent-base@6: version "6.0.2" @@ -3032,10 +2879,10 @@ ansicolors@~0.3.2: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -ansis@^3.10.0, ansis@^3.5.2, ansis@^3.8.1, ansis@^3.9.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.10.0.tgz#6886afb0f729b1fa865df6b710b97a9915b7d0d4" - integrity sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA== +ansis@^3.10.0, ansis@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" + integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== anymatch@^3.0.3: version "3.1.3" @@ -3088,16 +2935,17 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.9" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" array.prototype.flat@^1.3.2: version "1.3.3" @@ -3377,10 +3225,10 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" @@ -3395,13 +3243,13 @@ call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -3427,9 +3275,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001688: - version "1.0.30001696" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz#00c30a2fc11e3c98c25e5125418752af3ae2f49f" - integrity sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ== + version "1.0.30001706" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz#902c3f896f4b2968031c3a546ab2ef8b465a2c8f" + integrity sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug== capital-case@^1.0.4: version "1.0.4" @@ -3490,9 +3338,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.2.tgz#22cb6f7701f9948fd47a5c4ae978493b1a03c6b9" - integrity sha512-7gdnIlr/WqvlQaX6yMvhHbiEVZ07qCV22rb/brgyFGKgo76ckIsrtDp4w2NIOitmKDNgiUm+pfVSE4VMwnkXwQ== + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== clean-stack@^3.0.1: version "3.0.1" @@ -3637,14 +3485,14 @@ convert-source-map@^2.0.0: integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== core-js-pure@^3.30.2: - version "3.40.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.40.0.tgz#d9a019e9160f9b042eeb6abb92242680089d486e" - integrity sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A== + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.41.0.tgz#349fecad168d60807a31e83c99d73d786fe80811" + integrity sha512-71Gzp96T9YPk63aUvE5Q5qP+DryB4ZloUZPSOebGM88VNw8VNfvdA7z6kGA8iGOTEzAomsRidp4jXSmUIJsL+Q== core-js@^3.6.4: - version "3.40.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.40.0.tgz#2773f6b06877d8eda102fc42f828176437062476" - integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ== + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.41.0.tgz#57714dafb8c751a6095d028a7428f1fb5834a776" + integrity sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA== core-util-is@~1.0.0: version "1.0.3" @@ -3905,9 +3753,9 @@ ejs@^3.1.10: jake "^10.8.5" electron-to-chromium@^1.5.73: - version "1.5.90" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz#4717e5a5413f95bbb12d0af14c35057e9c65e0b6" - integrity sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug== + version "1.5.120" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz#ccfdd28e9795fb8c2221cefa2c9a071501c86247" + integrity sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ== emittery@^0.13.1: version "0.13.1" @@ -4000,7 +3848,7 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-object-atoms@^1.0.0: +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== @@ -4017,12 +3865,12 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" -es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" es-to-primitive@^1.3.0: version "1.3.0" @@ -4113,11 +3961,11 @@ eslint-plugin-jest@^28.11.0: "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" eslint-plugin-sf-plugin@^1.20.14: - version "1.20.14" - resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.20.14.tgz#85c3821a5d62785a2c8af45e6ed4955f6eb83906" - integrity sha512-193twioaAWsLPDPliXffLDOGciOX4v8SoKOnWLqfw8QEhQwaG9XTRp7GMjxCgeTnaFPFtOqTbVGCg5714YQGMQ== + version "1.20.16" + resolved "https://registry.yarnpkg.com/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.20.16.tgz#bdaa21ba896bad98c45bfd5c2626cddcc9ba3595" + integrity sha512-NbWW2J6eO70m4C/ab9ZOVqpSW97+C/xNwHc4c10GV3mi8brxA9OWKo7vDfd2nGKrZ0EzA1BHujnu9ItV3HhrJQ== dependencies: - "@salesforce/core" "^8.8.2" + "@salesforce/core" "^8.8.5" "@typescript-eslint/utils" "^7.18.0" eslint-restricted-globals@~0.2.0: @@ -4141,10 +3989,10 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-scope@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" - integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== +eslint-scope@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.3.0.tgz#10cd3a918ffdd722f5f3f7b5b83db9b23c87340d" + integrity sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -4209,20 +4057,21 @@ eslint@^8.57.1: text-table "^0.2.0" eslint@^9.19.0: - version "9.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.19.0.tgz#ffa1d265fc4205e0f8464330d35f09e1d548b1bf" - integrity sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA== + version "9.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.22.0.tgz#0760043809fbf836f582140345233984d613c552" + integrity sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.19.0" - "@eslint/core" "^0.10.0" - "@eslint/eslintrc" "^3.2.0" - "@eslint/js" "9.19.0" - "@eslint/plugin-kit" "^0.2.5" + "@eslint/config-array" "^0.19.2" + "@eslint/config-helpers" "^0.1.0" + "@eslint/core" "^0.12.0" + "@eslint/eslintrc" "^3.3.0" + "@eslint/js" "9.22.0" + "@eslint/plugin-kit" "^0.2.7" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.1" + "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" "@types/json-schema" "^7.0.15" ajv "^6.12.4" @@ -4230,7 +4079,7 @@ eslint@^9.19.0: cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.2.0" + eslint-scope "^8.3.0" eslint-visitor-keys "^4.2.0" espree "^10.3.0" esquery "^1.5.0" @@ -4411,11 +4260,11 @@ fast-xml-parser@4.4.1: strnum "^1.0.5" fast-xml-parser@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz#a7e665ff79b7919100a5202f23984b6150f9b31e" - integrity sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w== + version "4.5.3" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" + integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== dependencies: - strnum "^1.0.5" + strnum "^1.1.1" fastest-levenshtein@^1.0.7: version "1.0.16" @@ -4423,9 +4272,9 @@ fastest-levenshtein@^1.0.7: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" - integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -4455,7 +4304,7 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fdir@^6.4.2: +fdir@^6.4.3: version "6.4.3" resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== @@ -4536,14 +4385,14 @@ flat-cache@^4.0.0: keyv "^4.5.4" flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -for-each@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.4.tgz#814517ffc303d1399b2564d8165318e735d0341c" - integrity sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" @@ -4553,12 +4402,13 @@ form-data-encoder@^2.1.2: integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" fs-extra@^8.1, fs-extra@^8.1.0: @@ -4612,17 +4462,17 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" - integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: - call-bind-apply-helpers "^1.0.1" + call-bind-apply-helpers "^1.0.2" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - get-proto "^1.0.0" + get-proto "^1.0.1" gopd "^1.2.0" has-symbols "^1.1.0" hasown "^2.0.2" @@ -4670,9 +4520,9 @@ get-uri@^6.0.1: debug "^4.3.4" git-hooks-list@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-3.1.0.tgz#386dc531dcc17474cf094743ff30987a3d3e70fc" - integrity sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-3.2.0.tgz#ffe5d5895e29d24f930f9a98dd604b7e407d2f5f" + integrity sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ== github-slugger@^2: version "2.0.0" @@ -4815,7 +4665,7 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -4934,9 +4784,9 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -5077,11 +4927,11 @@ is-bigint@^1.1.0: has-bigints "^1.0.2" is-boolean-object@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" - integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" has-tostringtag "^1.0.2" is-callable@^1.2.7: @@ -5257,11 +5107,11 @@ is-weakmap@^2.0.2: integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" - integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" @@ -6258,9 +6108,9 @@ npm-run-path@^4.0.1: path-key "^3.0.0" object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" @@ -6314,18 +6164,18 @@ object.values@^1.2.0: es-object-atoms "^1.0.0" oclif@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.17.20.tgz#b841da4102e65778bd623a4f3e558f589d9600f6" - integrity sha512-8zhZ8M2Of5oB3zLLZAr6rVEozCeXMYGJpnj/iTyefZSX9O9frimGqnpUgHnKhl3GAJS5UnPgJ9s3yLzv5IMudA== + version "4.17.37" + resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.17.37.tgz#5e98292fab1b2a1674f13dfa02d25ef3098fe970" + integrity sha512-sB71e7euBGmoMgIJ9UgM49QdpMVTqp26be31ZLfO1iV6MetCR7XLL2aAL+32NuucaCbTVdH9YkgbcU9xJMfZfA== dependencies: - "@aws-sdk/client-cloudfront" "^3.726.1" - "@aws-sdk/client-s3" "^3.735.0" + "@aws-sdk/client-cloudfront" "^3.764.0" + "@aws-sdk/client-s3" "^3.749.0" "@inquirer/confirm" "^3.1.22" "@inquirer/input" "^2.2.4" "@inquirer/select" "^2.5.0" - "@oclif/core" "^4.2.3" - "@oclif/plugin-help" "^6.2.21" - "@oclif/plugin-not-found" "^3.2.32" + "@oclif/core" "^4.2.8" + "@oclif/plugin-help" "^6.2.25" + "@oclif/plugin-not-found" "^3.2.46" "@oclif/plugin-warn-if-update-available" "^3.1.31" async-retry "^1.3.3" chalk "^4" @@ -6338,8 +6188,8 @@ oclif@^4.17.20: got "^13" lodash "^4.17.21" normalize-package-data "^6" - semver "^7.6.3" - sort-package-json "^2.14.0" + semver "^7.7.1" + sort-package-json "^2.15.1" tiny-jsonc "^1.0.1" validate-npm-package-name "^5.0.1" @@ -6450,9 +6300,9 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pac-proxy-agent@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz#da7c3b5c4cccc6655aaafb701ae140fb23f15df2" - integrity sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw== + version "7.2.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz#9cfaf33ff25da36f6147a20844230ec92c06e5df" + integrity sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== dependencies: "@tootallnate/quickjs-emscripten" "^0.23.0" agent-base "^7.1.2" @@ -6690,9 +6540,9 @@ pkg-dir@^4.2.0: find-up "^4.0.0" possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prelude-ls@^1.2.1: version "1.2.1" @@ -6895,10 +6745,10 @@ regexp.prototype.flags@^1.5.3: gopd "^1.2.0" set-function-name "^2.0.2" -registry-auth-token@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.3.tgz#417d758c8164569de8cf5cabff16cc937902dcc6" - integrity sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA== +registry-auth-token@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" @@ -6987,9 +6837,9 @@ retry@^0.12.0: integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" @@ -7018,9 +6868,9 @@ rxjs@^6.6.0: tslib "^1.9.0" rxjs@^7.2.0, rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" @@ -7087,12 +6937,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: - version "7.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.0.tgz#9c6fe61d0c6f9fa9e26575162ee5a9180361b09c" - integrity sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ== - -semver@^7.7.0: +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3, semver@^7.7.0, semver@^7.7.1: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -7279,9 +7124,9 @@ socks-proxy-agent@^8.0.5: socks "^2.8.3" socks@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + version "2.8.4" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.4.tgz#07109755cdd4da03269bda4725baa061ab56d5cc" + integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== dependencies: ip-address "^9.0.5" smart-buffer "^4.2.0" @@ -7305,10 +7150,10 @@ sort-object-keys@^1.1.3: resolved "https://registry.yarnpkg.com/sort-object-keys/-/sort-object-keys-1.1.3.tgz#bff833fe85cab147b34742e45863453c1e190b45" integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== -sort-package-json@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.14.0.tgz#ba0c7420dc6edea4b0eb7e9f502fda63f57586d8" - integrity sha512-xBRdmMjFB/KW3l51mP31dhlaiFmqkHLfWTfZAno8prb/wbDxwBPWFpxB16GZbiPbYr3wL41H8Kx22QIDWRe8WQ== +sort-package-json@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/sort-package-json/-/sort-package-json-2.15.1.tgz#e5a035fad7da277b1947b9eecc93ea09c1c2526e" + integrity sha512-9x9+o8krTT2saA9liI4BljNjwAbvUnWf11Wq+i/iZt8nl2UGYnf3TH5uBydE7VALmP7AGwlfszuEeL8BDyb0YA== dependencies: detect-indent "^7.0.1" detect-newline "^4.0.0" @@ -7470,10 +7315,10 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== +strnum@^1.0.5, strnum@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== supports-color@^7, supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" @@ -7541,24 +7386,24 @@ tiny-jsonc@^1.0.1: integrity sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw== tinyglobby@^0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" - integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== dependencies: - fdir "^6.4.2" + fdir "^6.4.3" picomatch "^4.0.2" -tldts-core@^6.1.75: - version "6.1.75" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.75.tgz#63c89f72d4dd7376501ba7d608e1cc2b2d1210e2" - integrity sha512-AOvV5YYIAFFBfransBzSTyztkc3IMfz5Eq3YluaRiEu55nn43Fzaufx70UqEKYr8BoLCach4q8g/bg6e5+/aFw== +tldts-core@^6.1.84: + version "6.1.84" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.84.tgz#f8ac2af9969bf9c2f7a99fa05d9c667b5e5b768c" + integrity sha512-NaQa1W76W2aCGjXybvnMYzGSM4x8fvG2AN/pla7qxcg0ZHbooOPhA8kctmOZUDfZyhDL27OGNbwAeig8P4p1vg== tldts@^6.1.32: - version "6.1.75" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.75.tgz#de8b1b7c35217c0c356bb7199e70b5a802532933" - integrity sha512-+lFzEXhpl7JXgWYaXcB6DqTYXbUArvrWAE/5ioq/X3CdWLbDjpPP4XTrQBmEJ91y3xbe4Fkw7Lxv4P3GWeJaNg== + version "6.1.84" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.84.tgz#fb58b1ceb70972a1ecd683606cea3d06c78f7238" + integrity sha512-aRGIbCIF3teodtUFAYSdQONVmDRy21REM3o6JnqWn5ZkQBJJ4gHxhw6OfwQ+WkSAi3ASamrS4N4nyazWx6uTYg== dependencies: - tldts-core "^6.1.75" + tldts-core "^6.1.84" tmp@^0.0.33: version "0.0.33" @@ -7585,9 +7430,9 @@ to-regex-range@^5.0.1: is-number "^7.0.0" tough-cookie@*: - version "5.1.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.0.tgz#0667b0f2fbb5901fe6f226c3e0b710a9a4292f87" - integrity sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg== + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== dependencies: tldts "^6.1.32" @@ -7601,20 +7446,15 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== -ts-api-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" - integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ== - ts-api-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.1.tgz#660729385b625b939aaa58054f45c058f33f10cd" integrity sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w== ts-jest@^29.2.5: - version "29.2.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" - integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== + version "29.2.6" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.6.tgz#df53edf8b72fb89de032cfa310abf37582851d9a" + integrity sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg== dependencies: bs-logger "^0.2.6" ejs "^3.1.10" @@ -7623,7 +7463,7 @@ ts-jest@^29.2.5: json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.6.3" + semver "^7.7.1" yargs-parser "^21.1.1" ts-node@^10: @@ -7755,18 +7595,18 @@ typed-array-length@^1.0.7: reflect.getprototypeof "^1.0.6" typescript-eslint@^8.22.0: - version "8.22.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.22.0.tgz#1d4becf1d65385e57e9271fbd557ccc22f6c0f53" - integrity sha512-Y2rj210FW1Wb6TWXzQc5+P+EWI9/zdS57hLEc0gnyuvdzWo8+Y8brKlbj0muejonhMI/xAZCnZZwjbIfv1CkOw== + version "8.26.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.1.tgz#d17a638a7543bc535157b83cdf5876513c71493b" + integrity sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg== dependencies: - "@typescript-eslint/eslint-plugin" "8.22.0" - "@typescript-eslint/parser" "8.22.0" - "@typescript-eslint/utils" "8.22.0" + "@typescript-eslint/eslint-plugin" "8.26.1" + "@typescript-eslint/parser" "8.26.1" + "@typescript-eslint/utils" "8.26.1" typescript@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" - integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== unbox-primitive@^1.1.0: version "1.1.0" @@ -7794,9 +7634,9 @@ universalify@^0.1.0: integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== update-browserslist-db@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" - integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -7951,14 +7791,15 @@ which-collection@^1.0.2: is-weakset "^2.0.3" which-typed-array@^1.1.16, which-typed-array@^1.1.18: - version "1.1.18" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" gopd "^1.2.0" has-tostringtag "^1.0.2" @@ -8097,6 +7938,6 @@ yoctocolors-cjs@^2.1.2: integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== zod@^3.22.4: - version "3.24.1" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee" - integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== From 97c415105d686e274319cfe938d07b462d239514 Mon Sep 17 00:00:00 2001 From: Josh Feingold Date: Thu, 20 Mar 2025 12:19:57 -0500 Subject: [PATCH 6/7] NEW @W-17915822@ Added and integrated SFGE dependency (#1765) --- messages/progress-event-listener.md | 5 +- package.json | 15 ++-- src/lib/factories/EnginePluginsFactory.ts | 4 +- src/lib/listeners/ProgressEventListener.ts | 12 ++- .../factories/EnginePluginsFactory.test.ts | 3 +- test/lib/listeners/LogEventListener.test.ts | 6 +- .../listeners/ProgressEventListener.test.ts | 50 ++++++++++- test/stubs/StubEnginePlugins.ts | 16 +++- yarn.lock | 84 +++++++++++-------- 9 files changed, 136 insertions(+), 59 deletions(-) diff --git a/messages/progress-event-listener.md b/messages/progress-event-listener.md index fee84255f..306403706 100644 --- a/messages/progress-event-listener.md +++ b/messages/progress-event-listener.md @@ -13,8 +13,11 @@ Executing rules # execution-spinner.progress-summary %d of %d engines finished after %ds. -# execution-spinner.engine-status +# execution-spinner.engine-progress - %s at %d% completion. +# execution-spinner.engine-progress-with-message + - %s at %d% completion - %s + # execution-spinner.finished-status done. Executed rules from %s. diff --git a/package.json b/package.json index 6c2a39c76..df140be04 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,14 @@ "bugs": "https://github.com/forcedotcom/sfdx-scanner/issues", "dependencies": { "@oclif/core": "3.27.0", - "@salesforce/code-analyzer-core": "0.24.0", - "@salesforce/code-analyzer-engine-api": "0.18.0", - "@salesforce/code-analyzer-eslint-engine": "0.20.0", - "@salesforce/code-analyzer-flowtest-engine": "0.18.0", - "@salesforce/code-analyzer-pmd-engine": "0.20.0", - "@salesforce/code-analyzer-regex-engine": "0.18.0", - "@salesforce/code-analyzer-retirejs-engine": "0.18.0", + "@salesforce/code-analyzer-core": "0.25.1", + "@salesforce/code-analyzer-engine-api": "0.20.0", + "@salesforce/code-analyzer-eslint-engine": "0.20.1", + "@salesforce/code-analyzer-flowtest-engine": "0.18.1", + "@salesforce/code-analyzer-pmd-engine": "0.21.0", + "@salesforce/code-analyzer-regex-engine": "0.18.1", + "@salesforce/code-analyzer-retirejs-engine": "0.18.1", + "@salesforce/code-analyzer-sfge-engine": "0.1.0", "@salesforce/core": "6.7.6", "@salesforce/sf-plugins-core": "5.0.13", "@salesforce/ts-types": "^2.0.12", diff --git a/src/lib/factories/EnginePluginsFactory.ts b/src/lib/factories/EnginePluginsFactory.ts index e390bf337..f7d2732d0 100644 --- a/src/lib/factories/EnginePluginsFactory.ts +++ b/src/lib/factories/EnginePluginsFactory.ts @@ -4,6 +4,7 @@ import * as PmdCpdEnginesModule from '@salesforce/code-analyzer-pmd-engine'; import * as RetireJSEngineModule from '@salesforce/code-analyzer-retirejs-engine'; import * as RegexEngineModule from '@salesforce/code-analyzer-regex-engine'; import * as FlowTestEngineModule from '@salesforce/code-analyzer-flowtest-engine'; +import * as SfgeEngineModule from '@salesforce/code-analyzer-sfge-engine'; export interface EnginePluginsFactory { create(): EnginePlugin[]; @@ -16,7 +17,8 @@ export class EnginePluginsFactoryImpl implements EnginePluginsFactory { PmdCpdEnginesModule.createEnginePlugin(), RetireJSEngineModule.createEnginePlugin(), RegexEngineModule.createEnginePlugin(), - FlowTestEngineModule.createEnginePlugin() + FlowTestEngineModule.createEnginePlugin(), + SfgeEngineModule.createEnginePlugin() ]; } } diff --git a/src/lib/listeners/ProgressEventListener.ts b/src/lib/listeners/ProgressEventListener.ts index 55a5a7f7a..841e6527b 100644 --- a/src/lib/listeners/ProgressEventListener.ts +++ b/src/lib/listeners/ProgressEventListener.ts @@ -148,7 +148,7 @@ export class EngineRunProgressSpinner extends ProgressSpinner implements Progres * Mapping from each engine's name to a number indicating its completion percentage. * @private */ - private progressMap: Map; + private progressMap: Map; /** * @param display The display with which to show output to the user @@ -187,7 +187,7 @@ export class EngineRunProgressSpinner extends ProgressSpinner implements Progres } // Update the progress map at the start so that the updated information is used in the next status. - this.progressMap.set(e.engineName, e.percentComplete); + this.progressMap.set(e.engineName, {percentComplete: e.percentComplete, message: e.message}); if (!this.isSpinning()) { this.startSpinning(getMessage(BundleName.ProgressEventListener, 'execution-spinner.action')); @@ -201,10 +201,14 @@ export class EngineRunProgressSpinner extends ProgressSpinner implements Progres let unfinishedEngines = 0; const engineLines: string[] = []; for (const [name, progress] of this.progressMap.entries()) { - if (progress !== 100) { + if (progress.percentComplete !== 100) { unfinishedEngines += 1; } - engineLines.push(getMessage(BundleName.ProgressEventListener, 'execution-spinner.engine-status', [name, progress])); + if (progress.message) { + engineLines.push(getMessage(BundleName.ProgressEventListener, 'execution-spinner.engine-progress-with-message', [name, progress.percentComplete, progress.message])); + } else { + engineLines.push(getMessage(BundleName.ProgressEventListener, 'execution-spinner.engine-progress', [name, progress.percentComplete])); + } } return [ getMessage(BundleName.ProgressEventListener, 'execution-spinner.progress-summary', [totalEngines - unfinishedEngines, totalEngines, secondsRunning]), diff --git a/test/lib/factories/EnginePluginsFactory.test.ts b/test/lib/factories/EnginePluginsFactory.test.ts index 9e00e08e3..b7d7c8c23 100644 --- a/test/lib/factories/EnginePluginsFactory.test.ts +++ b/test/lib/factories/EnginePluginsFactory.test.ts @@ -6,11 +6,12 @@ describe('EnginePluginsFactoryImpl', () => { const pluginsFactory = new EnginePluginsFactoryImpl(); const enginePlugins = pluginsFactory.create(); - expect(enginePlugins).toHaveLength(5); + expect(enginePlugins).toHaveLength(6); expect(enginePlugins[0].getAvailableEngineNames()).toEqual(['eslint']); expect(enginePlugins[1].getAvailableEngineNames()).toEqual(['pmd', 'cpd']); expect(enginePlugins[2].getAvailableEngineNames()).toEqual(['retire-js']); expect(enginePlugins[3].getAvailableEngineNames()).toEqual(['regex']); expect(enginePlugins[4].getAvailableEngineNames()).toEqual(['flowtest']); + expect(enginePlugins[5].getAvailableEngineNames()).toEqual(['sfge']); }); }); diff --git a/test/lib/listeners/LogEventListener.test.ts b/test/lib/listeners/LogEventListener.test.ts index 42bb810ec..a1155f4a3 100644 --- a/test/lib/listeners/LogEventListener.test.ts +++ b/test/lib/listeners/LogEventListener.test.ts @@ -36,7 +36,7 @@ describe('LogEventListener implementations', () => { // ==== TEST SETUP ==== const expectedMessages: string[] = ['message1', 'message2', 'message3']; for (const expectedMessage of expectedMessages) { - engine1.addEvents({logLevel, message: expectedMessage}); + engine1.addLogEvents({logLevel, message: expectedMessage}); } // The specific files we target in our workspace don't matter. const workspace = await core.createWorkspace(['package.json']); @@ -65,7 +65,7 @@ describe('LogEventListener implementations', () => { // ==== TEST SETUP ==== const messages = ['message1', 'message2', 'message3']; for (const message of messages) { - engine1.addEvents({logLevel, message}); + engine1.addLogEvents({logLevel, message}); } // The specific files we include in our workspace don't matter. const workspace = await core.createWorkspace(['package.json']); @@ -94,7 +94,7 @@ describe('LogEventListener implementations', () => { // ==== TEST SETUP ==== const expectedMessages = ['message1', 'message2', 'message3']; for (const expectedMessage of expectedMessages) { - engine1.addEvents({logLevel, message: expectedMessage}); + engine1.addLogEvents({logLevel, message: expectedMessage}); } // The specific files we include in our workspace don't matter. const workspace = await core.createWorkspace(['package.json']); diff --git a/test/lib/listeners/ProgressEventListener.test.ts b/test/lib/listeners/ProgressEventListener.test.ts index e2b85be67..2da33cdfd 100644 --- a/test/lib/listeners/ProgressEventListener.test.ts +++ b/test/lib/listeners/ProgressEventListener.test.ts @@ -1,7 +1,7 @@ import {CodeAnalyzer, CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; import {EngineRunProgressSpinner, RuleSelectionProgressSpinner} from '../../../src/lib/listeners/ProgressEventListener'; import {SpyDisplay, DisplayEvent, DisplayEventType} from '../../stubs/SpyDisplay'; -import {TimeableStubEnginePlugin1, TimeableEngine1, TimeableEngine2} from '../../stubs/StubEnginePlugins'; +import {ConfigurableStubEnginePlugin1, EventConfigurableEngine1, TimeableStubEnginePlugin1, TimeableEngine1, TimeableEngine2} from '../../stubs/StubEnginePlugins'; import {StubEnginePluginsFactory_withFunctionalStubEngine} from '../../stubs/StubEnginePluginsFactories'; describe('ProgressEventListener implementations', () => { @@ -335,6 +335,54 @@ describe('ProgressEventListener implementations', () => { expect(endEvent.data).toContain('done. Executed rules from timeableEngine1.'); }, 10000); + it('When an engine supplies status messages with its progress, those messages are displayed', async () => { + // ==== TEST SETUP ==== + // Assign our event-configurable engine to the core. + const engine: EventConfigurableEngine1 = new EventConfigurableEngine1({}); + const plugin = new ConfigurableStubEnginePlugin1(); + plugin.addEngine(engine); + await codeAnalyzer.addEnginePlugin(plugin); + // Give the engine some progress events. + engine.addRunProgressEvents( + {percentComplete: 10}, + {percentComplete: 15, message: 'Progress Message 1'}, + {percentComplete: 25}, + {percentComplete: 50, message: 'Progress Message 2'}, + {percentComplete: 75}, + {percentComplete: 90, message: 'Progress Message 3'}, + ); + const ruleSelection = await codeAnalyzer.selectRules(['eventConfigurableEngine1']); + // We don't want automated ticking to mess with the messages, so just turn it off for now. + spinner = new EngineRunProgressSpinner(spyDisplay, -1); + + // The specific targets we use for our workspace don't matter. + const workspace = await codeAnalyzer.createWorkspace(['package.json']); + + // ==== TESTED BEHAVIOR ==== + // Start listening, then execute the rules, then stop listening. + spinner.listen(codeAnalyzer); + await codeAnalyzer.run(ruleSelection, { + workspace + }); + spinner.stopListening(); + + // ==== ASSERTIONS ==== + const displayEvents = spyDisplay.getDisplayEvents(); + // The first event should have been the Spinner Start. + const startEvent = displayEvents[0]; + expect(startEvent).toHaveProperty('type', DisplayEventType.SPINNER_START); + // The start event should always start with at least 1 known engine, to prevent "0 of 0 engines" scenarios. + expect(startEvent.data).toContain("0 of 1 engines"); + const progressEventsInOrder: string[] = displayEvents.slice(1, displayEvents.length - 1).map(e => e.data); + expect(progressEventsInOrder[0]).toContain("- eventConfigurableEngine1 at 0% completion."); + expect(progressEventsInOrder[1]).toContain("- eventConfigurableEngine1 at 10% completion."); + expect(progressEventsInOrder[2]).toContain("- eventConfigurableEngine1 at 15% completion - Progress Message 1"); + expect(progressEventsInOrder[3]).toContain("- eventConfigurableEngine1 at 25% completion."); + expect(progressEventsInOrder[4]).toContain("- eventConfigurableEngine1 at 50% completion - Progress Message 2"); + expect(progressEventsInOrder[5]).toContain("- eventConfigurableEngine1 at 75% completion."); + expect(progressEventsInOrder[6]).toContain("- eventConfigurableEngine1 at 90% completion - Progress Message 3"); + }); + // There's currently no need for this Spinner to accept multiple Cores, so we've opted to not implement that // functionality. We're locking that in with a test, and we can change this test if we ever decide to support it. it('Rejects multiple Cores', async () => { diff --git a/test/stubs/StubEnginePlugins.ts b/test/stubs/StubEnginePlugins.ts index d027e529e..53881e711 100644 --- a/test/stubs/StubEnginePlugins.ts +++ b/test/stubs/StubEnginePlugins.ts @@ -368,7 +368,8 @@ export class TimeableEngine2 extends BaseTimeableEngine { * EventConfigurableEngine1 - An engine with a {@code setWaitTime()} method allowing a delay to be added between update events. */ export class EventConfigurableEngine1 extends EngineApi.Engine { - private events: {logLevel: LogLevel, message: string}[] = []; + private logEvents: {logLevel: LogLevel, message: string}[] = []; + private runProgressEvents: {percentComplete: number, message?: string}[] = []; constructor(_config: EngineApi.ConfigObject) { super(); @@ -382,8 +383,12 @@ export class EventConfigurableEngine1 extends EngineApi.Engine { return Promise.resolve("1.0.5"); } - addEvents(...events: {logLevel: LogLevel, message: string}[]): void { - this.events = [...this.events, ...events]; + addLogEvents(...events: {logLevel: LogLevel, message: string}[]): void { + this.logEvents = [...this.logEvents, ...events]; + } + + addRunProgressEvents(...events: {percentComplete: number, message?: string}[]): void { + this.runProgressEvents = [...this.runProgressEvents, ...events]; } describeRules(): Promise { @@ -399,13 +404,16 @@ export class EventConfigurableEngine1 extends EngineApi.Engine { } async runRules(_ruleNames: string[], _runOptions: EngineApi.RunOptions): Promise { - for (const {logLevel, message} of this.events) { + for (const {logLevel, message} of this.logEvents) { this.emitEvent({ type: EngineApi.EventType.LogEvent, message, logLevel }); } + for (const {percentComplete, message} of this.runProgressEvents) { + this.emitRunRulesProgressEvent(percentComplete, message); + } return Promise.resolve({violations: []}); } } diff --git a/yarn.lock b/yarn.lock index 91fa63dac..57145f44c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1699,12 +1699,12 @@ strip-ansi "6.0.1" ts-retry-promise "^0.8.1" -"@salesforce/code-analyzer-core@0.24.0": - version "0.24.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-core/-/code-analyzer-core-0.24.0.tgz#5381143f05ef4c76b56aa4f58505dea2c7cd9b4a" - integrity sha512-VvFWJqd4bi/862gExO2pp7kKhN4HYyOgqiV0E669LzqMyN7McqdRQFiew93o8cKxuzs49R/D3EKFiB+jenU3vQ== +"@salesforce/code-analyzer-core@0.25.1": + version "0.25.1" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-core/-/code-analyzer-core-0.25.1.tgz#06101ea36ab23a54067840851431bdd9fec6f74c" + integrity sha512-Rm1BLksTta7x0jPw8wILE3JgyFuN9PKlclIYU4fC3MP++vDkzQVxQD9jxL3lsXbQDyHKxFu1UdgqSKgsHY0OdQ== dependencies: - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@types/js-yaml" "^4.0.9" "@types/node" "^20.0.0" "@types/sarif" "^2.1.7" @@ -1714,24 +1714,26 @@ semver "^7.7.0" xmlbuilder "^15.1.1" -"@salesforce/code-analyzer-engine-api@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-engine-api/-/code-analyzer-engine-api-0.18.0.tgz#578ef4b7750e589a0bf5ef0fce6b4c0efeb20404" - integrity sha512-Wahr0SfdGDGNzGYmh14JtFsT3My9KA6+3V9rughwA4BXjFOCkPEKdECHg57GyiLutzldoAUwTBQtoogCboTx6g== +"@salesforce/code-analyzer-engine-api@0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-engine-api/-/code-analyzer-engine-api-0.20.0.tgz#2451d15f3ab980842effef9bd35f1bd9b8cfd879" + integrity sha512-DbNNIIN9z0kI5ezOb9x7Za78V5DUtT3prcfog1aZj4MuTmijEhCRL2UAWKG7bndxXLBkuTr4MmibcYVgOky2lg== dependencies: "@types/node" "^20.0.0" + "@types/tmp" "^0.2.6" + tmp "^0.2.3" -"@salesforce/code-analyzer-eslint-engine@0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-eslint-engine/-/code-analyzer-eslint-engine-0.20.0.tgz#08b1cc626f31efbb992085632c974e4e4cb94e5a" - integrity sha512-HW4l4Tli6gc3K5t3XDH7HsSb7HyfIhVd5/pk+ru0PUyl0IZTHgg5DuiibgC0cOJ2WR8xQKSqbF9eUtcy2mZsCQ== +"@salesforce/code-analyzer-eslint-engine@0.20.1": + version "0.20.1" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-eslint-engine/-/code-analyzer-eslint-engine-0.20.1.tgz#41908d84e08ec766d24a2b5b970ec9f14e557c9c" + integrity sha512-DBMhqSGCqo+/s4tsBrZoEEceFgQ73nokofC5sKKZVnYbEDiOlJRgPuqX3gdGLFDO3DiKWG+jLWcRqv8+NOZ20g== dependencies: "@babel/core" "^7.26.7" "@babel/eslint-parser" "^7.26.5" "@eslint/js" "^8.57.1" "@lwc/eslint-plugin-lwc" "^2.1.0" "@lwc/eslint-plugin-lwc-platform" "^5.1.0" - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@salesforce/eslint-config-lwc" "^3.7.1" "@salesforce/eslint-plugin-lightning" "^1.0.1" "@types/eslint" "^8.56.10" @@ -1742,45 +1744,43 @@ eslint-plugin-import "^2.31.0" eslint-plugin-jest "^28.11.0" -"@salesforce/code-analyzer-flowtest-engine@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-flowtest-engine/-/code-analyzer-flowtest-engine-0.18.0.tgz#6767755e13e6afef139cdae15a17ff9022ee7880" - integrity sha512-Dlfh1jpK3U0ZqpUJGzEqSUQBFaawDIntQX8O47PooHt4eeINQzJEF1t7ljkzz/Npqn1eui8xRMyEFvcB3fJ++A== +"@salesforce/code-analyzer-flowtest-engine@0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-flowtest-engine/-/code-analyzer-flowtest-engine-0.18.1.tgz#b623bb1e0d41a397529743b5811ef8aa0f1e9aff" + integrity sha512-cv2r3vZUcsDKGMxQ2u3WKXzBPWgurLKq1DjGr86imnhRvs+2tsAbMHb5lEDaOOjaXUHjDmf1A2hIObY2oOzHEw== dependencies: - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@types/node" "^20.0.0" "@types/semver" "^7.5.8" "@types/tmp" "^0.2.6" semver "^7.7.0" tmp "^0.2.3" -"@salesforce/code-analyzer-pmd-engine@0.20.0": - version "0.20.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-pmd-engine/-/code-analyzer-pmd-engine-0.20.0.tgz#c667db6c25d9b10eceda974251cc238ad370c6ff" - integrity sha512-DoEjH9I7/OLvjXq70La7fs2GOOpqLzTWlQ7rGIpruQ8RmZopKcJ+MOaRmFaLE6NVb/1ufEC2G0G41QbK/ARnFw== +"@salesforce/code-analyzer-pmd-engine@0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-pmd-engine/-/code-analyzer-pmd-engine-0.21.0.tgz#68653d7cf54d043e0558a80875a2cff78fe09c74" + integrity sha512-StkMAyjzaNdcJDWzwMAubKlq5rnjAM2zLxvBYiC255GoSJhkhbMjN6YHiAy35TpzedhXh73bhY8vaYXF0D1eZQ== dependencies: - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@types/node" "^20.0.0" "@types/semver" "^7.5.8" - "@types/tmp" "^0.2.6" semver "^7.7.0" - tmp "^0.2.3" -"@salesforce/code-analyzer-regex-engine@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-regex-engine/-/code-analyzer-regex-engine-0.18.0.tgz#ccf54e61eaae77c9183f5b727dd001a50aed462c" - integrity sha512-mr6GPTXSs7lTakeZF0ol6g8zUek4ycFYAMZbN4Y+h8ilkwqNwdbGORVr86piLQ/UaDdPYOloKmVwfhKnJ9SF5w== +"@salesforce/code-analyzer-regex-engine@0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-regex-engine/-/code-analyzer-regex-engine-0.18.1.tgz#4e4c97531f93ccd645d1fe2f2e56b36ff19b5893" + integrity sha512-rIhdyYY96ttFdIggXgyES/m5A2ijWH5su7mQqFVzg4sct3BZKdBw+AeypNkQvH2wZm3iggwg9+x5G6fuKcqOZg== dependencies: - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@types/node" "^20.0.0" isbinaryfile "^5.0.4" -"@salesforce/code-analyzer-retirejs-engine@0.18.0": - version "0.18.0" - resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-retirejs-engine/-/code-analyzer-retirejs-engine-0.18.0.tgz#a4f322727b58af7e667c3ad33b7d7283ec1a2567" - integrity sha512-E5QdJqHRG60DCWIEieZzNYWB9EbwcJ98MjMOuKMESAeVn49u2qHn9zuGHWuiJjxO1jmzw+jsqjRVXiRqCOH7JQ== +"@salesforce/code-analyzer-retirejs-engine@0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-retirejs-engine/-/code-analyzer-retirejs-engine-0.18.1.tgz#42e5c9cf94e1a39a38f854e9104c8d5131bd5f2e" + integrity sha512-RABH2NCD17ll89klJOsxhLIqha3meiGHhJN9lzclV/7AD/3zeXmCuHV4DwRAilN1D74nsDM0CmY9XrTcSLzxsQ== dependencies: - "@salesforce/code-analyzer-engine-api" "0.18.0" + "@salesforce/code-analyzer-engine-api" "0.20.0" "@types/node" "^20.0.0" "@types/tmp" "^0.2.6" isbinaryfile "^5.0.4" @@ -1788,6 +1788,16 @@ retire "^5.2.5" tmp "^0.2.3" +"@salesforce/code-analyzer-sfge-engine@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@salesforce/code-analyzer-sfge-engine/-/code-analyzer-sfge-engine-0.1.0.tgz#10988052af910b8c76bb8c462d1050dad9c6c786" + integrity sha512-i8v0VEoeX7jk+Dqf/s/uQ1Y6q9sOP7wPtiNW8LyGFLkyQm/FY6XmKWykbfN/QRgPRa39JoJ4J4Qy9Lfe2rASJw== + dependencies: + "@salesforce/code-analyzer-engine-api" "0.20.0" + "@types/node" "^20.0.0" + "@types/tmp" "^0.2.6" + tmp "^0.2.3" + "@salesforce/core@6.7.6", "@salesforce/core@^6.4.1": version "6.7.6" resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-6.7.6.tgz#6a73c6a4e615ce837be5b5c142cfc63a6c8db3bd" @@ -2879,7 +2889,7 @@ ansicolors@~0.3.2: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -ansis@^3.10.0, ansis@^3.17.0: +ansis@^3.17.0: version "3.17.0" resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== From b012139a74d06aa4e491bafe784e6794fefb39b8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 12:03:08 +0000 Subject: [PATCH 7/7] Preparing for v5.0.0-beta.3 release. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df140be04..9a52ec84d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@salesforce/plugin-code-analyzer", "description": "Static code scanner that applies quality and security rules to Apex code, and provides feedback.", - "version": "5.0.0-beta.2", + "version": "5.0.0-beta.3", "author": "Salesforce Code Analyzer Team", "bugs": "https://github.com/forcedotcom/sfdx-scanner/issues", "dependencies": {