diff --git a/bin/dev.js b/bin/dev.js index e182ae5ba..95bdced66 100755 --- a/bin/dev.js +++ b/bin/dev.js @@ -1,6 +1,5 @@ -#!/usr/bin/env node_modules/.bin/ts-node -// eslint-disable-next-line node/shebang, unicorn/prefer-top-level-await -(async () => { - const oclif = await import('@oclif/core') - await oclif.execute({development: true, dir: __dirname}) -})() +#!/usr/bin/env -S node --loader ts-node/esm --disable-warning=ExperimentalWarning + +import { execute } from '@oclif/core'; + +await execute({ development: true, dir: import.meta.url }); \ No newline at end of file diff --git a/bin/run.js b/bin/run.js index 9287772cd..5f6cc732c 100755 --- a/bin/run.js +++ b/bin/run.js @@ -1,7 +1,5 @@ #!/usr/bin/env node -// eslint-disable-next-line unicorn/prefer-top-level-await -(async () => { - const oclif = await import('@oclif/core') - await oclif.execute({dir: __dirname}) -})() +import {execute} from '@oclif/core' + +await execute({dir: import.meta.url}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2da004be6..ca9af05ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3845,9 +3845,9 @@ } }, "node_modules/@oclif/plugin-help/node_modules/@oclif/core": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.6.tgz", - "integrity": "sha512-FmmA6a2+GwhRtULNB9G+YZp2Whi/mgCjNC1EaHGMEztnlM4Je3wRmbAraucSsHsycSgihnm2MtcmudI+8xo8Lw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.6.0.tgz", + "integrity": "sha512-nVe56MTWDD6+/oOxfEIrnnnq7bDBMseE904rI2+ZCvLLqY6Hm8yh07Ks149UgZiJvxYhQPsGEry2ifh8zz3irw==", "dev": true, "license": "MIT", "dependencies": { @@ -3927,9 +3927,9 @@ } }, "node_modules/@oclif/plugin-not-found/node_modules/@oclif/core": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.6.tgz", - "integrity": "sha512-FmmA6a2+GwhRtULNB9G+YZp2Whi/mgCjNC1EaHGMEztnlM4Je3wRmbAraucSsHsycSgihnm2MtcmudI+8xo8Lw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.6.0.tgz", + "integrity": "sha512-nVe56MTWDD6+/oOxfEIrnnnq7bDBMseE904rI2+ZCvLLqY6Hm8yh07Ks149UgZiJvxYhQPsGEry2ifh8zz3irw==", "dev": true, "license": "MIT", "dependencies": { @@ -4011,9 +4011,9 @@ } }, "node_modules/@oclif/plugin-warn-if-update-available/node_modules/@oclif/core": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.6.tgz", - "integrity": "sha512-FmmA6a2+GwhRtULNB9G+YZp2Whi/mgCjNC1EaHGMEztnlM4Je3wRmbAraucSsHsycSgihnm2MtcmudI+8xo8Lw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.6.0.tgz", + "integrity": "sha512-nVe56MTWDD6+/oOxfEIrnnnq7bDBMseE904rI2+ZCvLLqY6Hm8yh07Ks149UgZiJvxYhQPsGEry2ifh8zz3irw==", "dev": true, "license": "MIT", "dependencies": { @@ -12623,9 +12623,9 @@ } }, "node_modules/oclif/node_modules/@oclif/core": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.5.6.tgz", - "integrity": "sha512-FmmA6a2+GwhRtULNB9G+YZp2Whi/mgCjNC1EaHGMEztnlM4Je3wRmbAraucSsHsycSgihnm2MtcmudI+8xo8Lw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.6.0.tgz", + "integrity": "sha512-nVe56MTWDD6+/oOxfEIrnnnq7bDBMseE904rI2+ZCvLLqY6Hm8yh07Ks149UgZiJvxYhQPsGEry2ifh8zz3irw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 0862546f1..d69958a8d 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "5.5.0", "author": "Salesforce Code Analyzer Team", "bugs": "https://github.com/forcedotcom/code-analyzer/issues", + "type": "module", "dependencies": { "@oclif/core": "3.27.0", "@salesforce/code-analyzer-core": "0.38.1", diff --git a/src/commands/code-analyzer/config.ts b/src/commands/code-analyzer/config.ts index 38a61a87f..efee759bd 100644 --- a/src/commands/code-analyzer/config.ts +++ b/src/commands/code-analyzer/config.ts @@ -1,14 +1,14 @@ import {Flags, SfCommand} from '@salesforce/sf-plugins-core'; -import {ConfigAction, ConfigDependencies, ConfigInput} from '../../lib/actions/ConfigAction'; -import {ConfigFileWriter} from '../../lib/writers/ConfigWriter'; -import {ConfigStyledYamlViewer} from '../../lib/viewers/ConfigViewer'; -import {ConfigActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer'; -import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory'; -import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory'; -import {BundleName, getMessage, getMessages} from '../../lib/messages'; -import {LogEventDisplayer} from '../../lib/listeners/LogEventListener'; -import {RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener'; -import {Displayable, UxDisplay} from '../../lib/Display'; +import {ConfigAction, ConfigDependencies, ConfigInput} from '../../lib/actions/ConfigAction.js'; +import {ConfigFileWriter} from '../../lib/writers/ConfigWriter.js'; +import {ConfigStyledYamlViewer} from '../../lib/viewers/ConfigViewer.js'; +import {ConfigActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer.js'; +import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory.js'; +import {BundleName, getMessage, getMessages} from '../../lib/messages.js'; +import {LogEventDisplayer} from '../../lib/listeners/LogEventListener.js'; +import {RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener.js'; +import {Displayable, UxDisplay} from '../../lib/Display.js'; export default class ConfigCommand extends SfCommand implements Displayable { // We don't need the `--json` output for this command. diff --git a/src/commands/code-analyzer/rules.ts b/src/commands/code-analyzer/rules.ts index be550dd88..f7acba2b4 100644 --- a/src/commands/code-analyzer/rules.ts +++ b/src/commands/code-analyzer/rules.ts @@ -1,16 +1,16 @@ 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, RulesNoOpDisplayer, RuleTableDisplayer} from '../../lib/viewers/RuleViewer'; -import {RulesActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer'; -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'; -import { SfCliTelemetryEmitter } from '../../lib/Telemetry'; +import {View} from '../../Constants.js'; +import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory.js'; +import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../lib/viewers/RuleViewer.js'; +import {RulesActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer.js'; +import {RulesAction, RulesDependencies, RulesInput} from '../../lib/actions/RulesAction.js'; +import {BundleName, getMessage, getMessages} from '../../lib/messages.js'; +import {Displayable, UxDisplay} from '../../lib/Display.js'; +import {LogEventDisplayer} from '../../lib/listeners/LogEventListener.js'; +import {RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener.js'; +import {CompositeRulesWriter} from '../../lib/writers/RulesWriter.js'; +import {SfCliTelemetryEmitter} from '../../lib/Telemetry.js'; export default class RulesCommand extends SfCommand implements Displayable { // We don't need the `--json` output for this command. diff --git a/src/commands/code-analyzer/run.ts b/src/commands/code-analyzer/run.ts index e7a50c746..ff3773332 100644 --- a/src/commands/code-analyzer/run.ts +++ b/src/commands/code-analyzer/run.ts @@ -1,17 +1,17 @@ import {Flags, SfCommand} from '@salesforce/sf-plugins-core'; import {SeverityLevel} from '@salesforce/code-analyzer-core'; -import {RunAction, RunDependencies, RunInput} from '../../lib/actions/RunAction'; -import {View} from '../../Constants'; -import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory'; -import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory'; -import {CompositeResultsWriter} from '../../lib/writers/ResultsWriter'; -import {ResultsDetailDisplayer, ResultsNoOpDisplayer, ResultsTableDisplayer, ResultsViewer} from '../../lib/viewers/ResultsViewer'; -import {RunActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer'; -import {BundleName, getMessage, getMessages} from '../../lib/messages'; -import {LogEventDisplayer} from '../../lib/listeners/LogEventListener'; -import {EngineRunProgressSpinner, RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener'; -import {Displayable, UxDisplay} from '../../lib/Display'; -import {SfCliTelemetryEmitter} from "../../lib/Telemetry"; +import {RunAction, RunDependencies, RunInput} from '../../lib/actions/RunAction.js'; +import {View} from '../../Constants.js'; +import {CodeAnalyzerConfigFactoryImpl} from '../../lib/factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactoryImpl} from '../../lib/factories/EnginePluginsFactory.js'; +import {CompositeResultsWriter} from '../../lib/writers/ResultsWriter.js'; +import {ResultsDetailDisplayer, ResultsNoOpDisplayer, ResultsTableDisplayer, ResultsViewer} from '../../lib/viewers/ResultsViewer.js'; +import {RunActionSummaryViewer} from '../../lib/viewers/ActionSummaryViewer.js'; +import {BundleName, getMessage, getMessages} from '../../lib/messages.js'; +import {LogEventDisplayer} from '../../lib/listeners/LogEventListener.js'; +import {EngineRunProgressSpinner, RuleSelectionProgressSpinner} from '../../lib/listeners/ProgressEventListener.js'; +import {Displayable, UxDisplay} from '../../lib/Display.js'; +import {SfCliTelemetryEmitter} from '../../lib/Telemetry.js'; export default class RunCommand extends SfCommand implements Displayable { // We don't need the `--json` output for this command. diff --git a/src/lib/Telemetry.ts b/src/lib/Telemetry.ts index 6f9c5b5bc..f847a9edb 100644 --- a/src/lib/Telemetry.ts +++ b/src/lib/Telemetry.ts @@ -1,5 +1,5 @@ import {TelemetryData} from '@salesforce/code-analyzer-core'; -import {Lifecycle} from "@salesforce/core"; +import {Lifecycle} from '@salesforce/core'; export interface TelemetryEmitter { emitTelemetry(source: string, eventName: string, data: TelemetryData): void; diff --git a/src/lib/actions/ConfigAction.ts b/src/lib/actions/ConfigAction.ts index f63669270..46dee0efc 100644 --- a/src/lib/actions/ConfigAction.ts +++ b/src/lib/actions/ConfigAction.ts @@ -1,15 +1,15 @@ -import {CodeAnalyzerConfig, CodeAnalyzer} from "@salesforce/code-analyzer-core"; -import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory'; -import {EnginePluginsFactory} from '../factories/EnginePluginsFactory'; -import {ConfigWriter} from '../writers/ConfigWriter'; -import {LogFileWriter} from '../writers/LogWriter'; -import {ConfigViewer} from '../viewers/ConfigViewer'; -import {createWorkspace} from '../utils/WorkspaceUtil'; -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"; +import {CodeAnalyzerConfig, CodeAnalyzer} from '@salesforce/code-analyzer-core'; +import {EnginePlugin} from '@salesforce/code-analyzer-engine-api'; +import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactory} from '../factories/EnginePluginsFactory.js'; +import {ConfigWriter} from '../writers/ConfigWriter.js'; +import {LogFileWriter} from '../writers/LogWriter.js'; +import {ConfigViewer} from '../viewers/ConfigViewer.js'; +import {createWorkspace} from '../utils/WorkspaceUtil.js'; +import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener.js'; +import {ProgressEventListener} from '../listeners/ProgressEventListener.js'; +import {ConfigActionSummaryViewer} from '../viewers/ActionSummaryViewer.js'; +import {AnnotatedConfigModel, ConfigModel} from '../models/ConfigModel.js'; export type ConfigDependencies = { configFactory: CodeAnalyzerConfigFactory; diff --git a/src/lib/actions/RulesAction.ts b/src/lib/actions/RulesAction.ts index d72f9375d..5a0a3c8e0 100644 --- a/src/lib/actions/RulesAction.ts +++ b/src/lib/actions/RulesAction.ts @@ -1,16 +1,16 @@ -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'; -import { TelemetryEmitter } from '../Telemetry'; -import { TelemetryEventListener } from '../listeners/TelemetryEventListener'; -import * as Constants from '../../Constants'; +import {CodeAnalyzer, CodeAnalyzerConfig, Rule, RuleSelection} from '@salesforce/code-analyzer-core'; +import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactory} from '../factories/EnginePluginsFactory.js'; +import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener.js'; +import {ProgressEventListener} from '../listeners/ProgressEventListener.js'; +import {createWorkspace} from '../utils/WorkspaceUtil.js'; +import {RulesActionSummaryViewer} from '../viewers/ActionSummaryViewer.js'; +import {RuleViewer} from '../viewers/RuleViewer.js'; +import {LogFileWriter} from '../writers/LogWriter.js'; +import {RulesWriter} from '../writers/RulesWriter.js'; +import {TelemetryEmitter} from '../Telemetry.js'; +import {TelemetryEventListener} from '../listeners/TelemetryEventListener.js'; +import * as Constants from '../../Constants.js'; export type RulesDependencies = { configFactory: CodeAnalyzerConfigFactory; diff --git a/src/lib/actions/RunAction.ts b/src/lib/actions/RunAction.ts index 0fbce1873..510620c3d 100644 --- a/src/lib/actions/RunAction.ts +++ b/src/lib/actions/RunAction.ts @@ -8,19 +8,19 @@ import { SeverityLevel, Workspace } from '@salesforce/code-analyzer-core'; -import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory'; -import {EnginePluginsFactory} from '../factories/EnginePluginsFactory'; -import {createWorkspace} from '../utils/WorkspaceUtil'; -import {ResultsViewer} from '../viewers/ResultsViewer'; -import {RunActionSummaryViewer} from '../viewers/ActionSummaryViewer'; -import {ResultsWriter} from '../writers/ResultsWriter'; -import {LogFileWriter} from '../writers/LogWriter'; -import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener'; -import {ProgressEventListener} from '../listeners/ProgressEventListener'; -import {BundleName, getMessage} from '../messages'; -import {TelemetryEmitter} from "../Telemetry"; -import {TelemetryEventListener} from "../listeners/TelemetryEventListener"; -import * as Constants from '../../Constants'; +import {CodeAnalyzerConfigFactory} from '../factories/CodeAnalyzerConfigFactory.js'; +import {EnginePluginsFactory} from '../factories/EnginePluginsFactory.js'; +import {createWorkspace} from '../utils/WorkspaceUtil.js'; +import {ResultsViewer} from '../viewers/ResultsViewer.js'; +import {RunActionSummaryViewer} from '../viewers/ActionSummaryViewer.js'; +import {ResultsWriter} from '../writers/ResultsWriter.js'; +import {LogFileWriter} from '../writers/LogWriter.js'; +import {LogEventListener, LogEventLogger} from '../listeners/LogEventListener.js'; +import {ProgressEventListener} from '../listeners/ProgressEventListener.js'; +import {BundleName, getMessage} from '../messages.js'; +import {TelemetryEmitter} from '../Telemetry.js'; +import {TelemetryEventListener} from '../listeners/TelemetryEventListener.js'; +import * as Constants from '../../Constants.js'; export type RunDependencies = { configFactory: CodeAnalyzerConfigFactory; diff --git a/src/lib/listeners/LogEventListener.ts b/src/lib/listeners/LogEventListener.ts index f0ddd6aa5..542d47de2 100644 --- a/src/lib/listeners/LogEventListener.ts +++ b/src/lib/listeners/LogEventListener.ts @@ -1,8 +1,8 @@ import {CodeAnalyzer, EngineLogEvent, EventType, LogEvent, LogLevel} from '@salesforce/code-analyzer-core'; -import {Display} from '../Display'; -import {LogWriter} from '../writers/LogWriter'; -import {BundleName, getMessage} from "../messages"; -import {indent, makeGrey} from '../utils/StylingUtil'; +import {Display} from '../Display.js'; +import {LogWriter} from '../writers/LogWriter.js'; +import {BundleName, getMessage} from '../messages.js'; +import {indent, makeGrey} from '../utils/StylingUtil.js'; export interface LogEventListener { listen(codeAnalyzer: CodeAnalyzer): void; diff --git a/src/lib/listeners/ProgressEventListener.ts b/src/lib/listeners/ProgressEventListener.ts index 841e6527b..8aec88cee 100644 --- a/src/lib/listeners/ProgressEventListener.ts +++ b/src/lib/listeners/ProgressEventListener.ts @@ -4,8 +4,8 @@ import { EventType, RuleSelectionProgressEvent } from '@salesforce/code-analyzer-core'; -import {Display} from '../Display'; -import {BundleName, getMessage} from '../messages'; +import {Display} from '../Display.js'; +import {BundleName, getMessage} from '../messages.js'; export interface ProgressEventListener { listen(...codeAnalyzers: CodeAnalyzer[]): void; diff --git a/src/lib/listeners/TelemetryEventListener.ts b/src/lib/listeners/TelemetryEventListener.ts index 98bfde9d5..f93ec0b50 100644 --- a/src/lib/listeners/TelemetryEventListener.ts +++ b/src/lib/listeners/TelemetryEventListener.ts @@ -3,9 +3,9 @@ import { EngineTelemetryEvent, EventType, TelemetryEvent -} from "@salesforce/code-analyzer-core"; -import {TelemetryEmitter} from '../Telemetry'; -import * as constants from '../../Constants'; +} from '@salesforce/code-analyzer-core'; +import {TelemetryEmitter} from '../Telemetry.js'; +import * as constants from '../../Constants.js'; export class TelemetryEventListener { private telemetryEmitter: TelemetryEmitter; diff --git a/src/lib/messages.ts b/src/lib/messages.ts index 7dc496aea..d56a1b015 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -1,8 +1,8 @@ import {Messages} from '@salesforce/core'; -import {Tokens} from '@salesforce/core/lib/messages'; +import {Tokens} from '@salesforce/core/lib/messages.js'; // Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); +Messages.importMessagesDirectory(import.meta.dirname); export enum BundleName { ActionSummaryViewer = 'action-summary-viewer', diff --git a/src/lib/models/ConfigModel.ts b/src/lib/models/ConfigModel.ts index c7792bd1e..3adadc60f 100644 --- a/src/lib/models/ConfigModel.ts +++ b/src/lib/models/ConfigModel.ts @@ -1,3 +1,4 @@ +import * as path from 'node:path'; import {dump as yamlDump} from 'js-yaml'; import { CodeAnalyzer, @@ -9,9 +10,8 @@ import { RuleSelection, SeverityLevel } from '@salesforce/code-analyzer-core'; -import {indent, makeGrey} from '../utils/StylingUtil'; -import {BundleName, getMessage} from '../messages'; -import path from "node:path"; +import {indent, makeGrey} from '../utils/StylingUtil.js'; +import {BundleName, getMessage} from '../messages.js'; export enum OutputFormat { RAW_YAML = "RAW_YAML", diff --git a/src/lib/utils/WorkspaceUtil.ts b/src/lib/utils/WorkspaceUtil.ts index 17da6d211..7b4bcd0c6 100644 --- a/src/lib/utils/WorkspaceUtil.ts +++ b/src/lib/utils/WorkspaceUtil.ts @@ -1,6 +1,6 @@ import * as fg from 'fast-glob'; import {CodeAnalyzer, Workspace} from '@salesforce/code-analyzer-core'; -import {getMessage, BundleName} from '../messages'; +import {getMessage, BundleName} from '../messages.js'; export async function createWorkspace(core: CodeAnalyzer, workspacePaths: string[], targetPaths?: string[]): Promise { const processedWorkspacePaths: string[] = await processPaths(workspacePaths, 'Workspace'); diff --git a/src/lib/viewers/ActionSummaryViewer.ts b/src/lib/viewers/ActionSummaryViewer.ts index 3cb1ebd84..6d66562cd 100644 --- a/src/lib/viewers/ActionSummaryViewer.ts +++ b/src/lib/viewers/ActionSummaryViewer.ts @@ -1,7 +1,7 @@ -import {Display} from '../Display'; import {RuleSelection, RunResults, SeverityLevel, Violation} from '@salesforce/code-analyzer-core'; -import {toStyledHeader, indent} from '../utils/StylingUtil'; -import {BundleName, getMessage} from '../messages'; +import {Display} from '../Display.js'; +import {toStyledHeader, indent} from '../utils/StylingUtil.js'; +import {BundleName, getMessage} from '../messages.js'; abstract class AbstractActionSummaryViewer { protected readonly display: Display; diff --git a/src/lib/viewers/ConfigViewer.ts b/src/lib/viewers/ConfigViewer.ts index f10ecef91..13d6b2b89 100644 --- a/src/lib/viewers/ConfigViewer.ts +++ b/src/lib/viewers/ConfigViewer.ts @@ -1,5 +1,5 @@ -import {Display} from '../Display'; -import {ConfigModel, OutputFormat} from '../models/ConfigModel'; +import {Display} from '../Display.js'; +import {ConfigModel, OutputFormat} from '../models/ConfigModel.js'; export interface ConfigViewer { diff --git a/src/lib/viewers/ResultsViewer.ts b/src/lib/viewers/ResultsViewer.ts index 4f77265a2..0c48b5177 100644 --- a/src/lib/viewers/ResultsViewer.ts +++ b/src/lib/viewers/ResultsViewer.ts @@ -1,9 +1,9 @@ +import * as path from 'node:path'; import {Ux} from '@salesforce/sf-plugins-core'; import {CodeLocation, RunResults, SeverityLevel, Violation} from '@salesforce/code-analyzer-core'; -import {Display} from '../Display'; -import {toStyledHeaderAndBody} from '../utils/StylingUtil'; -import {BundleName, getMessage} from '../messages'; -import path from "node:path"; +import {Display} from '../Display.js'; +import {toStyledHeaderAndBody} from '../utils/StylingUtil.js'; +import {BundleName, getMessage} from '../messages.js'; export interface ResultsViewer { view(results: RunResults): void; diff --git a/src/lib/viewers/RuleViewer.ts b/src/lib/viewers/RuleViewer.ts index df359bd73..8732e6ceb 100644 --- a/src/lib/viewers/RuleViewer.ts +++ b/src/lib/viewers/RuleViewer.ts @@ -1,8 +1,8 @@ import {Ux} from '@salesforce/sf-plugins-core'; import {Rule, SeverityLevel} from '@salesforce/code-analyzer-core'; -import {Display} from '../Display'; -import {toStyledHeaderAndBody} from '../utils/StylingUtil'; -import {BundleName, getMessage} from '../messages'; +import {Display} from '../Display.js'; +import {toStyledHeaderAndBody} from '../utils/StylingUtil.js'; +import {BundleName, getMessage} from '../messages.js'; export interface RuleViewer { view(rules: Rule[]): void; diff --git a/src/lib/writers/ConfigWriter.ts b/src/lib/writers/ConfigWriter.ts index 0f820c910..428b826e0 100644 --- a/src/lib/writers/ConfigWriter.ts +++ b/src/lib/writers/ConfigWriter.ts @@ -1,8 +1,8 @@ import * as path from 'node:path'; -import {ConfigModel, OutputFormat} from '../models/ConfigModel'; -import {BundleName, getMessage} from '../messages'; -import {Display} from '../Display'; -import {FileSystem, RealFileSystem} from '../utils/FileUtil'; +import {ConfigModel, OutputFormat} from '../models/ConfigModel.js'; +import {BundleName, getMessage} from '../messages.js'; +import {Display} from '../Display.js'; +import {FileSystem, RealFileSystem} from '../utils/FileUtil.js'; export interface ConfigWriter { write(model: ConfigModel): Promise; diff --git a/src/lib/writers/LogWriter.ts b/src/lib/writers/LogWriter.ts index 7038a720a..cec297b64 100644 --- a/src/lib/writers/LogWriter.ts +++ b/src/lib/writers/LogWriter.ts @@ -1,7 +1,7 @@ import * as path from 'node:path'; import {CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; -import {Clock, RealClock, formatToDateTimeString} from '../utils/DateTimeUtils'; -import {FileSystem, RealFileSystem, WriteStream} from '../utils/FileUtil'; +import {Clock, RealClock, formatToDateTimeString} from '../utils/DateTimeUtils.js'; +import {FileSystem, RealFileSystem, WriteStream} from '../utils/FileUtil.js'; export interface LogWriter { writeToLog(message: string): void; diff --git a/src/lib/writers/ResultsWriter.ts b/src/lib/writers/ResultsWriter.ts index 65fa96170..12729b886 100644 --- a/src/lib/writers/ResultsWriter.ts +++ b/src/lib/writers/ResultsWriter.ts @@ -1,7 +1,7 @@ import * as path from 'node:path'; import {OutputFormat, RunResults} from '@salesforce/code-analyzer-core'; -import {BundleName, getMessage} from '../messages'; -import {FileSystem, RealFileSystem} from '../utils/FileUtil'; +import {BundleName, getMessage} from '../messages.js'; +import {FileSystem, RealFileSystem} from '../utils/FileUtil.js'; export interface ResultsWriter { write(results: RunResults): void; diff --git a/src/lib/writers/RulesWriter.ts b/src/lib/writers/RulesWriter.ts index 0904715ba..89600872d 100644 --- a/src/lib/writers/RulesWriter.ts +++ b/src/lib/writers/RulesWriter.ts @@ -1,7 +1,7 @@ -import * as path from "path"; -import { OutputFormat, RuleSelection } from "@salesforce/code-analyzer-core"; -import { BundleName, getMessage } from "../messages"; -import { FileSystem, RealFileSystem } from "../utils/FileUtil"; +import * as path from 'node:path'; +import {OutputFormat, RuleSelection} from '@salesforce/code-analyzer-core'; +import {BundleName, getMessage} from '../messages.js'; +import {FileSystem, RealFileSystem} from '../utils/FileUtil.js'; export interface RulesWriter { write(rules: RuleSelection): void; diff --git a/test/commands/code-analyzer/config.test.ts b/test/commands/code-analyzer/config.test.ts index a79dee931..8daa2202e 100644 --- a/test/commands/code-analyzer/config.test.ts +++ b/test/commands/code-analyzer/config.test.ts @@ -1,12 +1,26 @@ -import ConfigCommand from '../../../src/commands/code-analyzer/config'; -import {ConfigAction, ConfigInput} from '../../../src/lib/actions/ConfigAction'; -import {ConfigFileWriter} from '../../../src/lib/writers/ConfigWriter'; -import {SpyDisplay} from '../../stubs/SpyDisplay'; -import {Config} from '@oclif/core'; -import * as path from "path"; -import { ConsoleOuputInterceptor } from '../../test-utils'; +import * as path from 'node:path'; +import {Config, settings} from '@oclif/core'; +import ConfigCommand from '../../../src/commands/code-analyzer/config.js'; +import {ConfigAction, ConfigInput} from '../../../src/lib/actions/ConfigAction.js'; +import {ConfigFileWriter} from '../../../src/lib/writers/ConfigWriter.js'; +import {SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {ConsoleOuputInterceptor} from '../../test-utils.js'; const rootFolderWithPackageJson: string = path.join(__dirname, '..', '..', '..'); + +/* +We need to set the oclif settings to have enableAutoTranspile=false. +This because vitest has its own typescript interpreter which doesn't work with oclif's use of dynamic imports of +typescript files. Setting this to false seems to resolve this so that we do not get warnings that look like: + (node:39148) [ERR_UNKNOWN_FILE_EXTENSION] Warning: TypeError + module: @oclif/core@3.27.0 + task: findCommand (code-analyzer:config) + plugin: @salesforce/plugin-code-analyzer + root: /tmp/github/forcedotcom/code-analyzer + code: ERR_UNKNOWN_FILE_EXTENSION + message: Unknown file extension ".ts" for /tmp/github/forcedotcom/code-analyzer/src/commands/code-analyzer/config.ts +*/ +settings.enableAutoTranspile = false; const config: Config = new Config({ root: rootFolderWithPackageJson }); async function runConfigCommand(userArgs: string[]): Promise { diff --git a/test/commands/code-analyzer/rules.test.ts b/test/commands/code-analyzer/rules.test.ts index 11119a028..17a66815f 100644 --- a/test/commands/code-analyzer/rules.test.ts +++ b/test/commands/code-analyzer/rules.test.ts @@ -1,12 +1,26 @@ -import RulesCommand from '../../../src/commands/code-analyzer/rules'; -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'; -import {Config} from '@oclif/core'; import * as path from 'node:path'; -import { ConsoleOuputInterceptor } from '../../test-utils'; - -const rootFolderWithPackageJson: string = path.join(__dirname, '..', '..', '..'); +import {Config, settings} from '@oclif/core'; +import RulesCommand from '../../../src/commands/code-analyzer/rules.js'; +import {RulesAction, RulesDependencies, RulesInput} from '../../../src/lib/actions/RulesAction.js'; +import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../../src/lib/viewers/RuleViewer.js'; +import {CompositeRulesWriter} from '../../../src/lib/writers/RulesWriter.js'; +import {ConsoleOuputInterceptor} from '../../test-utils.js'; + +const rootFolderWithPackageJson: string = path.join(import.meta.dirname, '..', '..', '..'); + +/* +We need to set the oclif settings to have enableAutoTranspile=false. +This because vitest has its own typescript interpreter which doesn't work with oclif's use of dynamic imports of +typescript files. Setting this to false seems to resolve this so that we do not get warnings that look like: + (node:39148) [ERR_UNKNOWN_FILE_EXTENSION] Warning: TypeError + module: @oclif/core@3.27.0 + task: findCommand (code-analyzer:config) + plugin: @salesforce/plugin-code-analyzer + root: /tmp/github/forcedotcom/code-analyzer + code: ERR_UNKNOWN_FILE_EXTENSION + message: Unknown file extension ".ts" for /tmp/github/forcedotcom/code-analyzer/src/commands/code-analyzer/config.ts +*/ +settings.enableAutoTranspile = false; const config: Config = new Config({ root: rootFolderWithPackageJson }); function runRulesCommand(userArgs: string[]): Promise { diff --git a/test/commands/code-analyzer/run.test.ts b/test/commands/code-analyzer/run.test.ts index b6826cec9..312b9c7fd 100644 --- a/test/commands/code-analyzer/run.test.ts +++ b/test/commands/code-analyzer/run.test.ts @@ -1,11 +1,11 @@ +import * as path from 'node:path'; +import {Config, settings} from '@oclif/core'; import {TelemetryData} from '@salesforce/code-analyzer-core'; -import RunCommand from '../../../src/commands/code-analyzer/run'; -import {RunAction, RunDependencies, RunInput} from '../../../src/lib/actions/RunAction'; -import {CompositeResultsWriter} from '../../../src/lib/writers/ResultsWriter'; -import {SfCliTelemetryEmitter} from "../../../src/lib/Telemetry"; -import {ConsoleOuputInterceptor} from '../../test-utils'; -import {Config} from '@oclif/core'; -import * as path from "path"; +import RunCommand from '../../../src/commands/code-analyzer/run.js'; +import {RunAction, RunDependencies, RunInput} from '../../../src/lib/actions/RunAction.js'; +import {CompositeResultsWriter} from '../../../src/lib/writers/ResultsWriter.js'; +import {SfCliTelemetryEmitter} from '../../../src/lib/Telemetry.js'; +import {ConsoleOuputInterceptor} from '../../test-utils.js'; type TelemetryEmission = { source: string, @@ -13,8 +13,23 @@ type TelemetryEmission = { data: TelemetryData }; -const rootFolderWithPackageJson: string = path.join(__dirname, '..', '..', '..'); +const rootFolderWithPackageJson: string = path.join(import.meta.dirname, '..', '..', '..'); + +/* +We need to set the oclif settings to have enableAutoTranspile=false. +This because vitest has its own typescript interpreter which doesn't work with oclif's use of dynamic imports of +typescript files. Setting this to false seems to resolve this so that we do not get warnings that look like: + (node:39148) [ERR_UNKNOWN_FILE_EXTENSION] Warning: TypeError + module: @oclif/core@3.27.0 + task: findCommand (code-analyzer:config) + plugin: @salesforce/plugin-code-analyzer + root: /tmp/github/forcedotcom/code-analyzer + code: ERR_UNKNOWN_FILE_EXTENSION + message: Unknown file extension ".ts" for /tmp/github/forcedotcom/code-analyzer/src/commands/code-analyzer/config.ts +*/ +settings.enableAutoTranspile = false; const config: Config = new Config({ root: rootFolderWithPackageJson }); + function runRunCommand(userArgs: string[]): Promise { const command: RunCommand = new RunCommand(userArgs, config); return command.run(); diff --git a/test/lib/actions/ConfigAction.test.ts b/test/lib/actions/ConfigAction.test.ts index 708423c62..6c0327654 100644 --- a/test/lib/actions/ConfigAction.test.ts +++ b/test/lib/actions/ConfigAction.test.ts @@ -1,23 +1,22 @@ -import path from 'node:path'; +import * as path from 'node:path'; import * as fs from 'node:fs'; import * as os from 'node:os'; -import * as fsp from 'node:fs/promises'; import ansis from 'ansis'; -import {CodeAnalyzerConfig} from "@salesforce/code-analyzer-core"; -import * as EngineApi from "@salesforce/code-analyzer-engine-api"; +import {CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; +import * as EngineApi from '@salesforce/code-analyzer-engine-api'; -import {CodeAnalyzerConfigFactory} from "../../../src/lib/factories/CodeAnalyzerConfigFactory"; -import {EnginePluginsFactory} from '../../../src/lib/factories/EnginePluginsFactory'; -import {ConfigAction, ConfigDependencies, ConfigInput} from '../../../src/lib/actions/ConfigAction'; -import {ConfigStyledYamlViewer} from '../../../src/lib/viewers/ConfigViewer'; -import {ConfigActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer'; +import {CodeAnalyzerConfigFactory} from '../../../src/lib/factories/CodeAnalyzerConfigFactory.js' +import {EnginePluginsFactory} from '../../../src/lib/factories/EnginePluginsFactory.js'; +import {ConfigAction, ConfigDependencies, ConfigInput} from '../../../src/lib/actions/ConfigAction.js'; +import {ConfigStyledYamlViewer} from '../../../src/lib/viewers/ConfigViewer.js'; +import {ConfigActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer.js'; -import {SpyConfigWriter} from '../../stubs/SpyConfigWriter'; -import {SpyConfigViewer} from '../../stubs/SpyConfigViewer'; -import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import { LogEventDisplayer } from '../../../src/lib/listeners/LogEventListener'; +import {SpyConfigWriter} from '../../stubs/SpyConfigWriter.js'; +import {SpyConfigViewer} from '../../stubs/SpyConfigViewer.js'; +import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {LogEventDisplayer} from '../../../src/lib/listeners/LogEventListener.js'; -const PATH_TO_FIXTURES = path.join(__dirname, '..', '..', 'fixtures'); +const PATH_TO_FIXTURES = path.join(import.meta.dirname, '..', '..', 'fixtures'); const PATH_TO_EXAMPLE_WORKSPACE = path.join(PATH_TO_FIXTURES, 'example-workspaces', 'ConfigAction.test.ts'); @@ -439,7 +438,7 @@ describe('ConfigAction tests', () => { describe('Target/Workspace resolution', () => { const originalCwd: string = process.cwd(); - const baseDir: string = path.resolve(__dirname, '..', '..', 'fixtures', 'example-workspaces', 'workspace-with-misc-files'); + const baseDir: string = path.resolve(import.meta.dirname, '..', '..', 'fixtures', 'example-workspaces', 'workspace-with-misc-files'); beforeEach(() => { process.chdir(baseDir); @@ -607,7 +606,7 @@ describe('ConfigAction tests', () => { // ====== HELPER FUNCTIONS ====== async function readGoldFile(goldFilePath: string): Promise { - return fsp.readFile(goldFilePath, {encoding: 'utf-8'}); + return fs.promises.readFile(goldFilePath, {encoding: 'utf-8'}); } async function runActionAndGetDisplayedConfig(dependencies: ConfigDependencies, ruleSelectors: string[], configFile?: string, workspace?: string[], target?: string[], includeUnmodifiedRules?: boolean): Promise { diff --git a/test/lib/actions/RulesAction.test.ts b/test/lib/actions/RulesAction.test.ts index 28fca4669..1d4021c2b 100644 --- a/test/lib/actions/RulesAction.test.ts +++ b/test/lib/actions/RulesAction.test.ts @@ -1,16 +1,16 @@ -import ansis from 'ansis'; -import * as fsp from 'node:fs/promises'; +import * as fs from 'node:fs'; 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 { CapturedTelemetryEmission, SpyTelemetryEmitter } from '../../stubs/SpyTelemetryEmitter'; +import ansis from 'ansis'; +import {RulesAction, RulesDependencies, RulesInput} from '../../../src/lib/actions/RulesAction.js'; +import {RulesActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer.js'; +import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {SpyRuleViewer} from '../../stubs/SpyRuleViewer.js'; +import {SpyRuleWriter} from '../../stubs/SpyRuleWriter.js'; +import {StubDefaultConfigFactory} from '../../stubs/StubCodeAnalyzerConfigFactories.js'; +import * as StubEnginePluginFactories from '../../stubs/StubEnginePluginsFactories.js'; +import {CapturedTelemetryEmission, SpyTelemetryEmitter} from '../../stubs/SpyTelemetryEmitter.js'; -const PATH_TO_GOLDFILES = path.join(__dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'actions', 'RulesAction.test.ts'); +const PATH_TO_GOLDFILES = path.join(import.meta.dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'actions', 'RulesAction.test.ts'); describe('RulesAction tests', () => { let viewer: SpyRuleViewer; @@ -99,7 +99,7 @@ describe('RulesAction tests', () => { describe('Target/Workspace resolution', () => { const originalCwd: string = process.cwd(); - const baseDir: string = path.resolve(__dirname, '..', '..', '..'); + const baseDir: string = path.resolve(import.meta.dirname, '..', '..', '..'); beforeEach(() => { process.chdir(baseDir); @@ -218,10 +218,10 @@ describe('RulesAction tests', () => { .filter(e => e.type === DisplayEventType.LOG) .map(e => e.data) .join('\n')); - const preExecutionGoldfileContents: string = await fsp.readFile(preExecutionGoldfilePath, 'utf-8'); + const preExecutionGoldfileContents: string = await fs.promises.readFile(preExecutionGoldfilePath, 'utf-8'); expect(displayedLogEvents).toContain(preExecutionGoldfileContents); - const goldfileContents: string = await fsp.readFile(goldfilePath, 'utf-8'); + const goldfileContents: string = await fs.promises.readFile(goldfilePath, 'utf-8'); expect(displayedLogEvents).toContain(goldfileContents); }); @@ -238,8 +238,8 @@ describe('RulesAction tests', () => { await action.execute(input); - const preExecutionGoldfileContents: string = await fsp.readFile(preExecutionGoldfilePath, 'utf-8'); - const goldfileContents: string = (await fsp.readFile(summaryGoldfilePath, 'utf-8')) + const preExecutionGoldfileContents: string = await fs.promises.readFile(preExecutionGoldfilePath, 'utf-8'); + const goldfileContents: string = (await fs.promises.readFile(summaryGoldfilePath, 'utf-8')) .replace(`{{PATH_TO_FILE}}`, outfilePath); const displayEvents = spyDisplay.getDisplayEvents(); const displayedLogEvents = ansis.strip(displayEvents diff --git a/test/lib/actions/RunAction.test.ts b/test/lib/actions/RunAction.test.ts index 4da59680d..49a00b024 100644 --- a/test/lib/actions/RunAction.test.ts +++ b/test/lib/actions/RunAction.test.ts @@ -1,23 +1,23 @@ import path from 'node:path'; -import * as fsp from 'node:fs/promises'; -import {SfError} from '@salesforce/core'; +import * as fs from 'node:fs'; import ansis from 'ansis'; +import {SfError} from '@salesforce/core'; import {SeverityLevel} from '@salesforce/code-analyzer-core'; -import {SpyResultsViewer} from '../../stubs/SpyResultsViewer'; -import {SpyResultsWriter} from '../../stubs/SpyResultsWriter'; -import {SpyDisplay, DisplayEventType} from '../../stubs/SpyDisplay'; -import {StubDefaultConfigFactory} from '../../stubs/StubCodeAnalyzerConfigFactories'; -import {ConfigurableStubEnginePlugin1, StubEngine1, TargetDependentEngine1} from '../../stubs/StubEnginePlugins'; -import {RunAction, RunInput, RunDependencies} from '../../../src/lib/actions/RunAction'; -import {RunActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer'; +import {SpyResultsViewer} from '../../stubs/SpyResultsViewer.js'; +import {SpyResultsWriter} from '../../stubs/SpyResultsWriter.js'; +import {SpyDisplay, DisplayEventType} from '../../stubs/SpyDisplay.js'; +import {StubDefaultConfigFactory} from '../../stubs/StubCodeAnalyzerConfigFactories.js'; +import {ConfigurableStubEnginePlugin1, StubEngine1, TargetDependentEngine1} from '../../stubs/StubEnginePlugins.js'; +import {RunAction, RunInput, RunDependencies} from '../../../src/lib/actions/RunAction.js'; +import {RunActionSummaryViewer} from '../../../src/lib/viewers/ActionSummaryViewer.js'; import { StubEnginePluginsFactory_withPreconfiguredStubEngines, StubEnginePluginsFactory_withThrowingStubPlugin -} from '../../stubs/StubEnginePluginsFactories'; -import {SpyTelemetryEmitter} from "../../stubs/SpyTelemetryEmitter"; +} from '../../stubs/StubEnginePluginsFactories.js'; +import {SpyTelemetryEmitter} from '../../stubs/SpyTelemetryEmitter.js'; const PATH_TO_FILE_A = path.resolve('test', 'sample-code', 'fileA.cls'); -const PATH_TO_GOLDFILES = path.join(__dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'actions', 'RunAction.test.ts'); +const PATH_TO_GOLDFILES = path.join(import.meta.dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'actions', 'RunAction.test.ts'); describe('RunAction tests', () => { let spyDisplay: SpyDisplay; @@ -304,8 +304,8 @@ describe('RunAction tests', () => { const actualTargetFiles = engine1.runRulesCallHistory[0].runOptions.workspace.getRawFilesAndFolders(); expect(actualTargetFiles).toEqual([path.resolve('.')]); // Verify that the summary output matches the expectation. - const preExecutionGoldfileContents: string = await fsp.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'), 'utf-8'); - const goldfileContents: string = await fsp.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', goldfile), 'utf-8'); + const preExecutionGoldfileContents: string = await fs.promises.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'), 'utf-8'); + const goldfileContents: string = await fs.promises.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', goldfile), 'utf-8'); const displayEvents = spyDisplay.getDisplayEvents(); const displayedLogEvents = ansis.strip(displayEvents .filter(e => e.type === DisplayEventType.LOG) @@ -353,8 +353,8 @@ describe('RunAction tests', () => { const actualTargetFiles = engine1.runRulesCallHistory[0].runOptions.workspace.getRawFilesAndFolders(); expect(actualTargetFiles).toEqual([path.resolve('.')]); // Verify that the summary output matches the expectation. - const preExecutionGoldfileContents: string = await fsp.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'), 'utf-8'); - const goldfileContents: string = (await fsp.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'some-outfiles.txt.goldfile'), 'utf-8')) + const preExecutionGoldfileContents: string = await fs.promises.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'pre-execution-summary.txt.goldfile'), 'utf-8'); + const goldfileContents: string = (await fs.promises.readFile(path.join(PATH_TO_GOLDFILES, 'action-summaries', 'some-outfiles.txt.goldfile'), 'utf-8')) .replace(`{{PATH_TO_FILE1}}`, outfilePath1) .replace(`{{PATH_TO_FILE2}}`, outfilePath2); const displayEvents = spyDisplay.getDisplayEvents(); diff --git a/test/lib/factories/CodeAnalyzerConfigFactory.test.ts b/test/lib/factories/CodeAnalyzerConfigFactory.test.ts index 1183a6b83..c20a73619 100644 --- a/test/lib/factories/CodeAnalyzerConfigFactory.test.ts +++ b/test/lib/factories/CodeAnalyzerConfigFactory.test.ts @@ -1,7 +1,7 @@ import * as path from 'node:path'; import {CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; -import {CodeAnalyzerConfigFactoryImpl} from '../../../src/lib/factories/CodeAnalyzerConfigFactory'; +import {CodeAnalyzerConfigFactoryImpl} from '../../../src/lib/factories/CodeAnalyzerConfigFactory.js'; describe('CodeAnalyzerConfigFactoryImpl', () => { @@ -40,7 +40,7 @@ describe('CodeAnalyzerConfigFactoryImpl', () => { ])(`Locates a config with extension: .$extension}`, ({extension, dir, uniqueTag}) => { // ==== TEST SETUP ==== // Move into the directory where the target config file lives. - process.chdir(path.resolve(__dirname, '..', '..', 'fixtures', 'example-workspaces', dir)); + process.chdir(path.resolve(import.meta.dirname, '..', '..', 'fixtures', 'example-workspaces', dir)); const factory = new CodeAnalyzerConfigFactoryImpl(); // ==== TESTED BEHAVIOR ==== diff --git a/test/lib/factories/EnginePluginsFactory.test.ts b/test/lib/factories/EnginePluginsFactory.test.ts index 4b10d9451..2b15da408 100644 --- a/test/lib/factories/EnginePluginsFactory.test.ts +++ b/test/lib/factories/EnginePluginsFactory.test.ts @@ -1,4 +1,4 @@ -import {EnginePluginsFactoryImpl} from '../../../src/lib/factories/EnginePluginsFactory'; +import {EnginePluginsFactoryImpl} from '../../../src/lib/factories/EnginePluginsFactory.js'; describe('EnginePluginsFactoryImpl', () => { diff --git a/test/lib/listeners/LogEventListener.test.ts b/test/lib/listeners/LogEventListener.test.ts index 694f66058..113d656cd 100644 --- a/test/lib/listeners/LogEventListener.test.ts +++ b/test/lib/listeners/LogEventListener.test.ts @@ -1,10 +1,10 @@ import {CodeAnalyzer, CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; import {LogLevel} from '@salesforce/code-analyzer-engine-api'; -import {LogEventDisplayer} from '../../../src/lib/listeners/LogEventListener'; -import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import {SpyLogWriter} from '../../stubs/SpyLogWriter'; -import {EventConfigurableEngine1, ConfigurableStubEnginePlugin1} from "../../stubs/StubEnginePlugins"; -import {LogEventLogger} from "../../../src/lib/listeners/LogEventListener"; +import {LogEventDisplayer} from '../../../src/lib/listeners/LogEventListener.js'; +import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {SpyLogWriter} from '../../stubs/SpyLogWriter.js'; +import {EventConfigurableEngine1, ConfigurableStubEnginePlugin1} from '../../stubs/StubEnginePlugins.js'; +import {LogEventLogger} from '../../../src/lib/listeners/LogEventListener.js'; describe('LogEventListener implementations', () => { let spyDisplay: SpyDisplay; diff --git a/test/lib/listeners/ProgressEventListener.test.ts b/test/lib/listeners/ProgressEventListener.test.ts index 6e911ff6c..040975883 100644 --- a/test/lib/listeners/ProgressEventListener.test.ts +++ b/test/lib/listeners/ProgressEventListener.test.ts @@ -1,8 +1,8 @@ import {CodeAnalyzer, CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; -import {EngineRunProgressSpinner, RuleSelectionProgressSpinner} from '../../../src/lib/listeners/ProgressEventListener'; -import {SpyDisplay, DisplayEvent, DisplayEventType} from '../../stubs/SpyDisplay'; -import {ConfigurableStubEnginePlugin1, EventConfigurableEngine1, TimeableStubEnginePlugin1, TimeableEngine1, TimeableEngine2} from '../../stubs/StubEnginePlugins'; -import {StubEnginePluginsFactory_withFunctionalStubEngine} from '../../stubs/StubEnginePluginsFactories'; +import {EngineRunProgressSpinner, RuleSelectionProgressSpinner} from '../../../src/lib/listeners/ProgressEventListener.js'; +import {SpyDisplay, DisplayEvent, DisplayEventType} from '../../stubs/SpyDisplay.js'; +import {ConfigurableStubEnginePlugin1, EventConfigurableEngine1, TimeableStubEnginePlugin1, TimeableEngine1, TimeableEngine2} from '../../stubs/StubEnginePlugins.js'; +import {StubEnginePluginsFactory_withFunctionalStubEngine} from '../../stubs/StubEnginePluginsFactories.js'; describe('ProgressEventListener implementations', () => { let codeAnalyzer: CodeAnalyzer; diff --git a/test/lib/utils/StylingUtil.test.ts b/test/lib/utils/StylingUtil.test.ts index 8490a0e47..2add58dae 100644 --- a/test/lib/utils/StylingUtil.test.ts +++ b/test/lib/utils/StylingUtil.test.ts @@ -1,9 +1,9 @@ -import * as fs from 'node:fs/promises'; -import path from 'node:path'; -import {makeGrey, toStyledHeaderAndBody, toStyledHeader, toStyledPropertyList, indent, __ANSIS} from '../../../src/lib/utils/StylingUtil'; -import { Ansis } from 'ansis'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import {Ansis} from 'ansis'; +import {makeGrey, toStyledHeaderAndBody, toStyledHeader, toStyledPropertyList, indent, __ANSIS} from '../../../src/lib/utils/StylingUtil.js'; -const PATH_TO_COMPARISON_FILES = path.resolve(__dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', +const PATH_TO_COMPARISON_FILES = path.resolve(import.meta.dirname, '..', '..', 'fixtures', 'comparison-files', 'lib', 'utils', 'StylingUtil.test.ts'); // Note that vitest by default turns off all coloring (probably with FORCE_COLOR='1' env variable), so we need @@ -23,7 +23,7 @@ describe('StylingUtil tests', () => { const actualOutput = toStyledHeaderAndBody(header, body, ['boop', 'beep', 'a']); - const expectedOutput = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-header-and-body.txt'), {encoding: 'utf-8'})); + const expectedOutput = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-header-and-body.txt'), {encoding: 'utf-8'})); expect(actualOutput).toEqual(expectedOutput); }); @@ -34,7 +34,7 @@ describe('StylingUtil tests', () => { const input = 'this text is styled as a comment'; const styledComment = makeGrey(input); - const expectedOutput = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-comment.txt'), {encoding: 'utf-8'})); + const expectedOutput = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-comment.txt'), {encoding: 'utf-8'})); expect(styledComment).toEqual(expectedOutput); }); @@ -45,7 +45,7 @@ describe('StylingUtil tests', () => { const input: string = 'SAMPLE HEADER TEXT'; const styledHeader = toStyledHeader(input); - const expectedHeader = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-header.txt'), {encoding: 'utf-8'})); + const expectedHeader = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'styled-header.txt'), {encoding: 'utf-8'})); expect(styledHeader).toEqual(expectedHeader); }); @@ -61,7 +61,7 @@ describe('StylingUtil tests', () => { }; const actualOutput = toStyledPropertyList(input); - const expectedOutput = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'all-keys-printed.txt'), {encoding: 'utf-8'})); + const expectedOutput = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'all-keys-printed.txt'), {encoding: 'utf-8'})); expect(actualOutput).toEqual(expectedOutput); }); @@ -76,7 +76,7 @@ describe('StylingUtil tests', () => { }; const actualOutput = toStyledPropertyList(input, ['boop', 'a', 'beep']); - const expectedOutput = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'subset-of-keys-printed.txt'), {encoding: 'utf-8'})); + const expectedOutput = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'subset-of-keys-printed.txt'), {encoding: 'utf-8'})); expect(actualOutput).toEqual(expectedOutput); }); @@ -91,7 +91,7 @@ describe('StylingUtil tests', () => { }; const actualOutput = toStyledPropertyList(input, ['notARealKey', 'beep']); - const expectedOutput = (await fs.readFile(path.join(PATH_TO_COMPARISON_FILES, 'non-existent-key-printed.txt'), {encoding: 'utf-8'})); + const expectedOutput = (await fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, 'non-existent-key-printed.txt'), {encoding: 'utf-8'})); expect(actualOutput).toEqual(expectedOutput); }) diff --git a/test/lib/utils/WorkspaceUtil.test.ts b/test/lib/utils/WorkspaceUtil.test.ts index b5ca67867..18d3c3f25 100644 --- a/test/lib/utils/WorkspaceUtil.test.ts +++ b/test/lib/utils/WorkspaceUtil.test.ts @@ -1,12 +1,12 @@ -import path from 'node:path'; +import * as path from 'node:path'; import {CodeAnalyzerConfig, CodeAnalyzer, Workspace} from '@salesforce/code-analyzer-core'; -import * as WorkspaceUtil from '../../../src/lib/utils/WorkspaceUtil'; +import * as WorkspaceUtil from '../../../src/lib/utils/WorkspaceUtil.js'; describe('WorkspaceUtil', () => { describe('#createWorkspace()' ,() => { const ORIGINAL_TEST_DIR = process.cwd(); - const PATH_TO_WORKSPACE = path.join(__dirname, '..', '..', 'fixtures', 'example-workspaces', 'workspace-with-dotted-items'); + const PATH_TO_WORKSPACE = path.join(import.meta.dirname, '..', '..', 'fixtures', 'example-workspaces', 'workspace-with-dotted-items'); beforeEach(() => { process.chdir(PATH_TO_WORKSPACE) diff --git a/test/lib/viewers/ConfigViewer.test.ts b/test/lib/viewers/ConfigViewer.test.ts index e4288cc7f..9fad6d847 100644 --- a/test/lib/viewers/ConfigViewer.test.ts +++ b/test/lib/viewers/ConfigViewer.test.ts @@ -1,6 +1,6 @@ -import {ConfigStyledYamlViewer} from '../../../src/lib/viewers/ConfigViewer'; -import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import {StubConfigModel} from '../../stubs/StubConfigModel'; +import {ConfigStyledYamlViewer} from '../../../src/lib/viewers/ConfigViewer.js'; +import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {StubConfigModel} from '../../stubs/StubConfigModel.js'; describe('ConfigViewer implementations', () => { let spyDisplay: SpyDisplay; diff --git a/test/lib/viewers/ResultsViewer.test.ts b/test/lib/viewers/ResultsViewer.test.ts index 83ac512e6..b182dff42 100644 --- a/test/lib/viewers/ResultsViewer.test.ts +++ b/test/lib/viewers/ResultsViewer.test.ts @@ -1,5 +1,6 @@ -import path from 'node:path'; -import * as fs from 'node:fs/promises'; +import * as path from 'node:path'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; import ansis from 'ansis'; import {CodeAnalyzer, CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; import {RuleDescription, Violation} from '@salesforce/code-analyzer-engine-api'; @@ -8,16 +9,15 @@ import { findLongestCommonParentFolderOf, ResultsDetailDisplayer, ResultsTableDisplayer -} from '../../../src/lib/viewers/ResultsViewer'; -import {BundleName, getMessage} from '../../../src/lib/messages'; -import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import {FunctionalStubEnginePlugin1, StubEngine1} from '../../stubs/StubEnginePlugins'; -import {platform} from "node:os"; +} from '../../../src/lib/viewers/ResultsViewer.js'; +import {BundleName, getMessage} from '../../../src/lib/messages.js'; +import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import {FunctionalStubEnginePlugin1, StubEngine1} from '../../stubs/StubEnginePlugins.js'; -const PATH_TO_COMPARISON_FILES = path.resolve(__dirname, '..', '..', '..', 'test', 'fixtures', 'comparison-files', 'lib', +const PATH_TO_COMPARISON_FILES = path.resolve(import.meta.dirname, '..', '..', '..', 'test', 'fixtures', 'comparison-files', 'lib', 'viewers', 'ResultsViewer.test.ts'); -const PATH_TO_SAMPLE_CODE = path.resolve(__dirname, '..', '..', '..', 'test', 'sample-code'); +const PATH_TO_SAMPLE_CODE = path.resolve(import.meta.dirname, '..', '..', '..', 'test', 'sample-code'); const PATH_TO_SOME_FILE = path.resolve(PATH_TO_SAMPLE_CODE, 'someFile.cls'); const PATH_TO_FILE_A = path.resolve(PATH_TO_SAMPLE_CODE, 'fileA.cls'); const PATH_TO_FILE_Z = path.resolve(PATH_TO_SAMPLE_CODE, 'fileZ.cls'); @@ -273,17 +273,17 @@ describe('ResultsViewer implementations', () => { describe('Tests for the findLongestCommonParentFolderOf helper function', () => { it('When a single file is given, then its direct parent is returned', () => { - expect(findLongestCommonParentFolderOf([path.resolve(__dirname,'ResultsViewer.test.ts')])).toEqual(__dirname); + expect(findLongestCommonParentFolderOf([path.resolve(import.meta.dirname,'ResultsViewer.test.ts')])).toEqual(import.meta.dirname); }); it('When paths share common parent folders, then longest common folder is returned', () => { - const path1 = path.resolve(__dirname,'..','actions','RunAction.test.ts'); - const path2 = path.resolve(__dirname,'ResultsViewer.test.ts'); - const path3 = path.resolve(__dirname,'..','actions','RulesAction.test.ts'); - expect(findLongestCommonParentFolderOf([path1, path2, path3])).toEqual(path.resolve(__dirname,'..')); + const path1 = path.resolve(import.meta.dirname,'..','actions','RunAction.test.ts'); + const path2 = path.resolve(import.meta.dirname,'ResultsViewer.test.ts'); + const path3 = path.resolve(import.meta.dirname,'..','actions','RulesAction.test.ts'); + expect(findLongestCommonParentFolderOf([path1, path2, path3])).toEqual(path.resolve(import.meta.dirname,'..')); }); - if(platform() === 'win32') { // The following tests only run on Windows machines + if(os.platform() === 'win32') { // The following tests only run on Windows machines it('When paths do not share common root (which can happen on Windows machines), then empty string is returned', () => { const path1 = 'C:\\Windows\\someFile.txt'; const path2 = 'D:\\anotherFile.txt'; @@ -323,5 +323,5 @@ function repeatViolation(violation: Violation, times: number): Violation[] { } function readComparisonFile(fileName: string): Promise { - return fs.readFile(path.join(PATH_TO_COMPARISON_FILES, fileName), {encoding: 'utf-8'}); + return fs.promises.readFile(path.join(PATH_TO_COMPARISON_FILES, fileName), {encoding: 'utf-8'}); } diff --git a/test/lib/viewers/RuleViewer.test.ts b/test/lib/viewers/RuleViewer.test.ts index 105b23c22..c2af2fefa 100644 --- a/test/lib/viewers/RuleViewer.test.ts +++ b/test/lib/viewers/RuleViewer.test.ts @@ -1,11 +1,11 @@ -import fs from 'node:fs'; -import path from 'path'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; import ansis from 'ansis'; -import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../../src/lib/viewers/RuleViewer'; -import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import * as StubRules from '../../stubs/StubRules'; +import {RuleDetailDisplayer, RulesNoOpDisplayer, RuleTableDisplayer} from '../../../src/lib/viewers/RuleViewer.js'; +import {DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import * as StubRules from '../../stubs/StubRules.js'; -const PATH_TO_COMPARISON_FILES = path.resolve(__dirname, '..', '..', '..', 'test', 'fixtures', 'comparison-files', 'lib', +const PATH_TO_COMPARISON_FILES = path.resolve(import.meta.dirname, '..', '..', '..', 'test', 'fixtures', 'comparison-files', 'lib', 'viewers', 'RuleViewer.test.ts'); describe('RuleViewer implementations', () => { diff --git a/test/lib/writers/ConfigWriter.test.ts b/test/lib/writers/ConfigWriter.test.ts index b7cf6b0d8..04f492569 100644 --- a/test/lib/writers/ConfigWriter.test.ts +++ b/test/lib/writers/ConfigWriter.test.ts @@ -1,8 +1,8 @@ -import {OutputFormat} from '../../../src/lib/models/ConfigModel'; -import {ConfigFileWriter} from '../../../src/lib/writers/ConfigWriter'; -import {StubConfigModel} from '../../stubs/StubConfigModel'; -import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay'; -import { StubFileSystem } from '../../stubs/StubFileSystem'; +import {OutputFormat} from '../../../src/lib/models/ConfigModel.js'; +import {ConfigFileWriter} from '../../../src/lib/writers/ConfigWriter.js'; +import {StubConfigModel} from '../../stubs/StubConfigModel.js'; +import {DisplayEvent, DisplayEventType, SpyDisplay} from '../../stubs/SpyDisplay.js'; +import { StubFileSystem } from '../../stubs/StubFileSystem.js'; describe('ConfigWriter implementations', () => { let fileSystem: StubFileSystem; diff --git a/test/lib/writers/LogWriter.test.ts b/test/lib/writers/LogWriter.test.ts index 7f8bc72e1..6ceac96df 100644 --- a/test/lib/writers/LogWriter.test.ts +++ b/test/lib/writers/LogWriter.test.ts @@ -2,8 +2,8 @@ import * as path from 'node:path'; import * as fs from 'node:fs'; import * as os from 'node:os'; import {CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; -import {LogFileWriter} from '../../../src/lib/writers/LogWriter'; -import {Clock} from '../../../src/lib/utils/DateTimeUtils'; +import {LogFileWriter} from '../../../src/lib/writers/LogWriter.js'; +import {Clock} from '../../../src/lib/utils/DateTimeUtils.js'; describe('LogWriter implementations', () => { diff --git a/test/lib/writers/ResultsWriter.test.ts b/test/lib/writers/ResultsWriter.test.ts index cfc414f0a..7271f60a9 100644 --- a/test/lib/writers/ResultsWriter.test.ts +++ b/test/lib/writers/ResultsWriter.test.ts @@ -1,7 +1,7 @@ import {OutputFormat} from '@salesforce/code-analyzer-core'; -import {ResultsFileWriter, CompositeResultsWriter} from '../../../src/lib/writers/ResultsWriter'; -import * as StubRunResults from '../../stubs/StubRunResults'; -import { StubFileSystem } from '../../stubs/StubFileSystem'; +import {ResultsFileWriter, CompositeResultsWriter} from '../../../src/lib/writers/ResultsWriter.js'; +import * as StubRunResults from '../../stubs/StubRunResults.js'; +import { StubFileSystem } from '../../stubs/StubFileSystem.js'; describe('ResultsWriter implementations', () => { let fileSystem: StubFileSystem; diff --git a/test/lib/writers/RulesWriter.test.ts b/test/lib/writers/RulesWriter.test.ts index 0ad9262de..7a5aff63a 100644 --- a/test/lib/writers/RulesWriter.test.ts +++ b/test/lib/writers/RulesWriter.test.ts @@ -1,8 +1,8 @@ -import { OutputFormat } from '@salesforce/code-analyzer-core'; -import path from 'node:path'; -import { CompositeRulesWriter, RulesFileWriter } from "../../../src/lib/writers/RulesWriter"; -import * as Stub from '../../stubs/StubRuleSelection'; -import { StubFileSystem } from '../../stubs/StubFileSystem'; +import * as path from 'node:path'; +import {OutputFormat} from '@salesforce/code-analyzer-core'; +import {CompositeRulesWriter, RulesFileWriter} from "../../../src/lib/writers/RulesWriter.js"; +import * as Stub from '../../stubs/StubRuleSelection.js'; +import { StubFileSystem } from '../../stubs/StubFileSystem.js'; describe('RulesWriter', () => { diff --git a/test/stubs/SpyConfigViewer.ts b/test/stubs/SpyConfigViewer.ts index fb5eb5fe7..f7cfedc26 100644 --- a/test/stubs/SpyConfigViewer.ts +++ b/test/stubs/SpyConfigViewer.ts @@ -1,5 +1,5 @@ -import {ConfigModel} from '../../src/lib/models/ConfigModel'; -import {ConfigViewer} from '../../src/lib/viewers/ConfigViewer'; +import {ConfigModel} from '../../src/lib/models/ConfigModel.js'; +import {ConfigViewer} from '../../src/lib/viewers/ConfigViewer.js'; export class SpyConfigViewer implements ConfigViewer { private callHistory: ConfigModel[] = []; diff --git a/test/stubs/SpyConfigWriter.ts b/test/stubs/SpyConfigWriter.ts index 2c56eab7a..de5fd8ee0 100644 --- a/test/stubs/SpyConfigWriter.ts +++ b/test/stubs/SpyConfigWriter.ts @@ -1,5 +1,5 @@ -import {ConfigModel} from '../../src/lib/models/ConfigModel'; -import {ConfigWriter} from '../../src/lib/writers/ConfigWriter'; +import {ConfigModel} from '../../src/lib/models/ConfigModel.js'; +import {ConfigWriter} from '../../src/lib/writers/ConfigWriter.js'; export class SpyConfigWriter implements ConfigWriter { private simulateSuccessfulWrites: boolean; diff --git a/test/stubs/SpyDisplay.ts b/test/stubs/SpyDisplay.ts index 31079ab26..b4476197f 100644 --- a/test/stubs/SpyDisplay.ts +++ b/test/stubs/SpyDisplay.ts @@ -1,5 +1,5 @@ -import {Display} from '../../src/lib/Display'; import {Ux} from '@salesforce/sf-plugins-core'; +import {Display} from '../../src/lib/Display.js'; /** * Implementation of {@link Display} that tracks every call in an array and allows assertions against them. diff --git a/test/stubs/SpyLogWriter.ts b/test/stubs/SpyLogWriter.ts index 183a6e80f..459f1e641 100644 --- a/test/stubs/SpyLogWriter.ts +++ b/test/stubs/SpyLogWriter.ts @@ -1,4 +1,4 @@ -import {LogWriter} from '../../src/lib/writers/LogWriter'; +import {LogWriter} from '../../src/lib/writers/LogWriter.js'; export class SpyLogWriter implements LogWriter { private log: string; diff --git a/test/stubs/SpyResultsViewer.ts b/test/stubs/SpyResultsViewer.ts index 155351e2a..8f0b93103 100644 --- a/test/stubs/SpyResultsViewer.ts +++ b/test/stubs/SpyResultsViewer.ts @@ -1,5 +1,5 @@ import {RunResults} from '@salesforce/code-analyzer-core'; -import {ResultsViewer} from '../../src/lib/viewers/ResultsViewer'; +import {ResultsViewer} from '../../src/lib/viewers/ResultsViewer.js'; export class SpyResultsViewer implements ResultsViewer { private callHistory: RunResults[] = []; diff --git a/test/stubs/SpyResultsWriter.ts b/test/stubs/SpyResultsWriter.ts index 9dca6a73e..169292648 100644 --- a/test/stubs/SpyResultsWriter.ts +++ b/test/stubs/SpyResultsWriter.ts @@ -1,5 +1,5 @@ import {RunResults} from '@salesforce/code-analyzer-core'; -import {ResultsWriter} from '../../src/lib/writers/ResultsWriter'; +import {ResultsWriter} from '../../src/lib/writers/ResultsWriter.js'; export class SpyResultsWriter implements ResultsWriter { private callHistory: RunResults[] = []; diff --git a/test/stubs/SpyRuleViewer.ts b/test/stubs/SpyRuleViewer.ts index 6c965e4eb..f971734d1 100644 --- a/test/stubs/SpyRuleViewer.ts +++ b/test/stubs/SpyRuleViewer.ts @@ -1,5 +1,5 @@ import {Rule} from '@salesforce/code-analyzer-core'; -import {RuleViewer} from '../../src/lib/viewers/RuleViewer'; +import {RuleViewer} from '../../src/lib/viewers/RuleViewer.js'; export class SpyRuleViewer implements RuleViewer { diff --git a/test/stubs/SpyRuleWriter.ts b/test/stubs/SpyRuleWriter.ts index 44594924d..982ce3785 100644 --- a/test/stubs/SpyRuleWriter.ts +++ b/test/stubs/SpyRuleWriter.ts @@ -1,5 +1,5 @@ import { RuleSelection } from '@salesforce/code-analyzer-core'; -import { RulesWriter } from '../../src/lib/writers/RulesWriter'; +import { RulesWriter } from '../../src/lib/writers/RulesWriter.js'; export class SpyRuleWriter implements RulesWriter { private callHistory: RuleSelection[] = []; diff --git a/test/stubs/SpyTelemetryEmitter.ts b/test/stubs/SpyTelemetryEmitter.ts index e77d66381..6576dfb21 100644 --- a/test/stubs/SpyTelemetryEmitter.ts +++ b/test/stubs/SpyTelemetryEmitter.ts @@ -1,5 +1,5 @@ import {TelemetryData} from '@salesforce/code-analyzer-core'; -import {TelemetryEmitter} from '../../src/lib/Telemetry'; +import {TelemetryEmitter} from '../../src/lib/Telemetry.js'; export type CapturedTelemetryEmission = { source: string, diff --git a/test/stubs/SpyWriteStream.ts b/test/stubs/SpyWriteStream.ts index f26b84bb0..3d5b91015 100644 --- a/test/stubs/SpyWriteStream.ts +++ b/test/stubs/SpyWriteStream.ts @@ -1,4 +1,4 @@ -import { WriteStream } from "../../src/lib/utils/FileUtil"; +import { WriteStream } from "../../src/lib/utils/FileUtil.js"; export class SpyWriteStream implements WriteStream { writeCallHistory: {content: string}[] = []; diff --git a/test/stubs/StubCodeAnalyzerConfigFactories.ts b/test/stubs/StubCodeAnalyzerConfigFactories.ts index ad4ac07b4..37f4e030e 100644 --- a/test/stubs/StubCodeAnalyzerConfigFactories.ts +++ b/test/stubs/StubCodeAnalyzerConfigFactories.ts @@ -1,5 +1,5 @@ import {CodeAnalyzerConfig} from '@salesforce/code-analyzer-core'; -import {CodeAnalyzerConfigFactory} from '../../src/lib/factories/CodeAnalyzerConfigFactory'; +import {CodeAnalyzerConfigFactory} from '../../src/lib/factories/CodeAnalyzerConfigFactory.js'; export class StubDefaultConfigFactory implements CodeAnalyzerConfigFactory { public create(_configPath?: string): CodeAnalyzerConfig { diff --git a/test/stubs/StubConfigModel.ts b/test/stubs/StubConfigModel.ts index 70af2c5e4..7d243d4f7 100644 --- a/test/stubs/StubConfigModel.ts +++ b/test/stubs/StubConfigModel.ts @@ -1,4 +1,4 @@ -import {ConfigModel, OutputFormat} from '../../src/lib/models/ConfigModel'; +import {ConfigModel, OutputFormat} from '../../src/lib/models/ConfigModel.js'; export class StubConfigModel implements ConfigModel { public toFormattedOutput(format: OutputFormat): string { diff --git a/test/stubs/StubEnginePluginsFactories.ts b/test/stubs/StubEnginePluginsFactories.ts index d464aa979..5020cfc7f 100644 --- a/test/stubs/StubEnginePluginsFactories.ts +++ b/test/stubs/StubEnginePluginsFactories.ts @@ -1,6 +1,6 @@ import {EnginePlugin} from '@salesforce/code-analyzer-engine-api'; -import {EnginePluginsFactory} from '../../src/lib/factories/EnginePluginsFactory'; -import {FunctionalStubEnginePlugin1, ThrowingStubPlugin1, StubEnginePluginWithTargetDependentEngine} from './StubEnginePlugins'; +import {EnginePluginsFactory} from '../../src/lib/factories/EnginePluginsFactory.js'; +import {FunctionalStubEnginePlugin1, ThrowingStubPlugin1, StubEnginePluginWithTargetDependentEngine} from './StubEnginePlugins.js'; export class StubEnginePluginsFactory_withFunctionalStubEngine implements EnginePluginsFactory { public create(): EnginePlugin[] { diff --git a/test/stubs/StubFileSystem.ts b/test/stubs/StubFileSystem.ts index a23dfb621..e99ba5638 100644 --- a/test/stubs/StubFileSystem.ts +++ b/test/stubs/StubFileSystem.ts @@ -1,5 +1,5 @@ -import { FileSystem, WriteStream } from "../../src/lib/utils/FileUtil"; -import { SpyWriteStream } from "./SpyWriteStream"; +import {FileSystem, WriteStream} from '../../src/lib/utils/FileUtil.js'; +import {SpyWriteStream} from './SpyWriteStream.js'; export class StubFileSystem implements FileSystem { existsReturnValue: boolean = false;