diff --git a/.eslintrc.js b/.eslintrc.js index edfcaa2cb72..026366245b9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -180,6 +180,7 @@ module.exports = { 'aws-toolkits/no-console-log': 'error', 'aws-toolkits/no-json-stringify-in-log': 'error', 'aws-toolkits/no-printf-mismatch': 'error', + 'aws-toolkits/no-index-import': 'error', 'no-restricted-imports': [ 'error', { diff --git a/packages/amazonq/.changes/next-release/Bug Fix-cd65fb78-14de-4214-baac-2e998c4fb143.json b/packages/amazonq/.changes/next-release/Bug Fix-cd65fb78-14de-4214-baac-2e998c4fb143.json new file mode 100644 index 00000000000..1ab5887af81 --- /dev/null +++ b/packages/amazonq/.changes/next-release/Bug Fix-cd65fb78-14de-4214-baac-2e998c4fb143.json @@ -0,0 +1,4 @@ +{ + "type": "Bug Fix", + "description": "Amazon Q /test: Q identify active test file and infer source file for test generation." +} diff --git a/packages/amazonq/test/unit/amazonqFeatureDev/session/session.test.ts b/packages/amazonq/test/unit/amazonqFeatureDev/session/session.test.ts index 680caf4aff0..39c38de555f 100644 --- a/packages/amazonq/test/unit/amazonqFeatureDev/session/session.test.ts +++ b/packages/amazonq/test/unit/amazonqFeatureDev/session/session.test.ts @@ -18,8 +18,8 @@ import { sessionWriteFile, assertTelemetry, } from 'aws-core-vscode/test' -import { CurrentWsFolders, CodeGenState, FeatureDevClient, featureDevScheme } from 'aws-core-vscode/amazonqFeatureDev' -import { Messenger } from 'aws-core-vscode/amazonq' +import { FeatureDevClient, featureDevScheme, FeatureDevCodeGenState } from 'aws-core-vscode/amazonqFeatureDev' +import { Messenger, CurrentWsFolders } from 'aws-core-vscode/amazonq' import path from 'path' import { fs } from 'aws-core-vscode/shared' @@ -75,7 +75,7 @@ describe('session', () => { workspaceFolders, } - const codeGenState = new CodeGenState( + const codeGenState = new FeatureDevCodeGenState( testConfig, [ { diff --git a/packages/core/src/amazonq/client/client.ts b/packages/core/src/amazonq/client/client.ts new file mode 100644 index 00000000000..dd6b7e12a36 --- /dev/null +++ b/packages/core/src/amazonq/client/client.ts @@ -0,0 +1,33 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ServiceOptions } from '../../shared/awsClientBuilder' + +export abstract class FeatureClient { + public abstract getClient(options?: Partial): Promise + + public abstract createConversation(): Promise + + public abstract createUploadUrl( + conversationId: string, + contentChecksumSha256: string, + contentLength: number, + uploadId: string + ): Promise + + public abstract startCodeGeneration( + conversationId: string, + uploadId: string, + message: string, + intent: any, + codeGenerationId: string, + currentCodeGenerationId?: string, + intentContext?: any + ): Promise + + public abstract getCodeGeneration(conversationId: string, codeGenerationId: string): Promise + + public abstract exportResultArchive(conversationId: string): Promise +} diff --git a/packages/core/src/amazonq/commons/connector/baseMessenger.ts b/packages/core/src/amazonq/commons/connector/baseMessenger.ts index 4c29f005557..c26834c6fff 100644 --- a/packages/core/src/amazonq/commons/connector/baseMessenger.ts +++ b/packages/core/src/amazonq/commons/connector/baseMessenger.ts @@ -5,7 +5,6 @@ import { ChatItemAction, ProgressField } from '@aws/mynah-ui' import { AuthFollowUpType, AuthMessageDataMap } from '../../../amazonq/auth/model' -import { FeatureAuthState } from '../../../codewhisperer' import { i18n } from '../../../shared/i18n-helper' import { CodeReference } from '../../../amazonq/webview/ui/connector' @@ -25,9 +24,9 @@ import { UpdatePlaceholderMessage, UpdatePromptProgressMessage, } from './connectorMessages' -import { FollowUpTypes } from '../types' +import { DeletedFileInfo, FollowUpTypes, NewFileInfo } from '../types' import { messageWithConversationId } from '../../../amazonqFeatureDev/userFacingText' -import { DeletedFileInfo, NewFileInfo } from '../../../amazonqFeatureDev/types' +import { FeatureAuthState } from '../../../codewhisperer/util/authUtil' export class Messenger { public constructor( diff --git a/packages/core/src/amazonq/commons/connector/connectorMessages.ts b/packages/core/src/amazonq/commons/connector/connectorMessages.ts index f5ac0d4b21a..6f60b786fcb 100644 --- a/packages/core/src/amazonq/commons/connector/connectorMessages.ts +++ b/packages/core/src/amazonq/commons/connector/connectorMessages.ts @@ -8,7 +8,7 @@ import { MessagePublisher } from '../../messages/messagePublisher' import { CodeReference } from '../../webview/ui/connector' import { ChatItemAction, ProgressField, SourceLink } from '@aws/mynah-ui' import { ChatItemType } from '../model' -import { DeletedFileInfo, NewFileInfo } from '../../../amazonqFeatureDev/types' +import { DeletedFileInfo, NewFileInfo } from '../types' import { licenseText } from '../../../amazonqFeatureDev/constants' class UiMessage { diff --git a/packages/core/src/amazonq/commons/controllers/contentController.ts b/packages/core/src/amazonq/commons/controllers/contentController.ts index 1380253f8eb..64e1254c21a 100644 --- a/packages/core/src/amazonq/commons/controllers/contentController.ts +++ b/packages/core/src/amazonq/commons/controllers/contentController.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import path from 'path' import { Position, TextEditor, window } from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { amazonQDiffScheme, amazonQTabSuffix } from '../../../shared/constants' import { disposeOnEditorClose } from '../../../shared/utilities/editorUtilities' import { @@ -15,7 +15,9 @@ import { getIndentedCode, getSelectionFromRange, } from '../../../shared/utilities/textDocumentUtilities' -import { extractFileAndCodeSelectionFromMessage, fs, getErrorMsg, ToolkitError } from '../../../shared' +import { ToolkitError, getErrorMsg } from '../../../shared/errors' +import fs from '../../../shared/fs/fs' +import { extractFileAndCodeSelectionFromMessage } from '../../../shared/utilities/textUtilities' import { UserWrittenCodeTracker } from '../../../codewhisperer/tracker/userWrittenCodeTracker' export class ContentProvider implements vscode.TextDocumentContentProvider { diff --git a/packages/core/src/amazonq/commons/diff.ts b/packages/core/src/amazonq/commons/diff.ts index aac25d236d8..566327b6d22 100644 --- a/packages/core/src/amazonq/commons/diff.ts +++ b/packages/core/src/amazonq/commons/diff.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' import { diffLines } from 'diff' export async function openDiff(leftPath: string, rightPath: string, tabId: string, scheme: string) { diff --git a/packages/core/src/amazonq/commons/session/sessionConfigFactory.ts b/packages/core/src/amazonq/commons/session/sessionConfigFactory.ts index d6dff48fbe5..4204d1d56d6 100644 --- a/packages/core/src/amazonq/commons/session/sessionConfigFactory.ts +++ b/packages/core/src/amazonq/commons/session/sessionConfigFactory.ts @@ -5,8 +5,9 @@ import * as vscode from 'vscode' import { WorkspaceFolderNotFoundError } from '../../../amazonqFeatureDev/errors' -import { VirtualFileSystem, VirtualMemoryFile } from '../../../shared' -import { CurrentWsFolders } from '../../../amazonqFeatureDev/types' +import { CurrentWsFolders } from '../types' +import { VirtualFileSystem } from '../../../shared/virtualFilesystem' +import { VirtualMemoryFile } from '../../../shared/virtualMemoryFile' export interface SessionConfig { // The paths on disk to where the source code lives diff --git a/packages/core/src/amazonq/commons/types.ts b/packages/core/src/amazonq/commons/types.ts index da6503b262f..f5171fdf6f9 100644 --- a/packages/core/src/amazonq/commons/types.ts +++ b/packages/core/src/amazonq/commons/types.ts @@ -3,6 +3,15 @@ * SPDX-License-Identifier: Apache-2.0 */ +import * as vscode from 'vscode' +import { VirtualFileSystem } from '../../shared/virtualFilesystem' +import type { CancellationTokenSource } from 'vscode' +import { CodeReference, UploadHistory } from '../webview/ui/connector' +import { DiffTreeFileInfo } from '../webview/ui/diffTree/types' +import { Messenger } from './connector/baseMessenger' +import { FeatureClient } from '../client/client' +import { TelemetryHelper } from '../util/telemetryHelper' + export enum FollowUpTypes { // UnitTestGeneration ViewDiff = 'ViewDiff', @@ -39,3 +48,119 @@ export enum FollowUpTypes { ProceedFolderSelection = 'ProceedFolderSelection', CancelFolderSelection = 'CancelFolderSelection', } + +export type Interaction = { + // content to be sent back to the chat UI + content?: string + responseType?: LLMResponseType +} + +export interface SessionStateInteraction { + nextState: SessionState | Omit | undefined + interaction: Interaction + currentCodeGenerationId?: string +} + +export enum Intent { + DEV = 'DEV', + DOC = 'DOC', +} + +export enum DevPhase { + INIT = 'Init', + APPROACH = 'Approach', + CODEGEN = 'Codegen', +} + +export enum CodeGenerationStatus { + COMPLETE = 'Complete', + PREDICT_READY = 'predict-ready', + IN_PROGRESS = 'InProgress', + PREDICT_FAILED = 'predict-failed', + DEBATE_FAILED = 'debate-failed', + FAILED = 'Failed', +} + +export type SessionStatePhase = DevPhase.INIT | DevPhase.CODEGEN + +export type CurrentWsFolders = [vscode.WorkspaceFolder, ...vscode.WorkspaceFolder[]] + +export interface SessionState { + readonly filePaths?: NewFileInfo[] + readonly deletedFiles?: DeletedFileInfo[] + readonly references?: CodeReference[] + readonly phase?: SessionStatePhase + readonly uploadId: string + readonly currentIteration?: number + currentCodeGenerationId?: string + tokenSource?: CancellationTokenSource + readonly codeGenerationId?: string + readonly tabID: string + interact(action: SessionStateAction): Promise + updateWorkspaceRoot?: (workspaceRoot: string) => void + codeGenerationRemainingIterationCount?: number + codeGenerationTotalIterationCount?: number + uploadHistory?: UploadHistory +} + +export interface SessionStateConfig { + workspaceRoots: string[] + workspaceFolders: CurrentWsFolders + conversationId: string + proxyClient: FeatureClient + uploadId: string + currentCodeGenerationId?: string +} + +export interface SessionStateAction { + task: string + msg: string + messenger: Messenger + fs: VirtualFileSystem + telemetry: TelemetryHelper + uploadHistory?: UploadHistory + tokenSource?: CancellationTokenSource +} + +export type NewFileZipContents = { zipFilePath: string; fileContent: string } +export type NewFileInfo = DiffTreeFileInfo & + NewFileZipContents & { + virtualMemoryUri: vscode.Uri + workspaceFolder: vscode.WorkspaceFolder + } + +export type DeletedFileInfo = DiffTreeFileInfo & { + workspaceFolder: vscode.WorkspaceFolder +} + +export interface SessionInfo { + // TODO, if it had a summarized name that was better for the UI + name?: string + history: string[] +} + +export interface SessionStorage { + [key: string]: SessionInfo +} + +export type LLMResponseType = 'EMPTY' | 'INVALID_STATE' | 'VALID' + +export interface UpdateFilesPathsParams { + tabID: string + filePaths: NewFileInfo[] + deletedFiles: DeletedFileInfo[] + messageId: string + disableFileActions?: boolean +} + +export enum MetricDataOperationName { + StartCodeGeneration = 'StartCodeGeneration', + EndCodeGeneration = 'EndCodeGeneration', +} + +export enum MetricDataResult { + Success = 'Success', + Fault = 'Fault', + Error = 'Error', + LlmFailure = 'LLMFailure', +} diff --git a/packages/core/src/amazonq/explorer/amazonQChildrenNodes.ts b/packages/core/src/amazonq/explorer/amazonQChildrenNodes.ts index 7dfb7b33820..86648b41361 100644 --- a/packages/core/src/amazonq/explorer/amazonQChildrenNodes.ts +++ b/packages/core/src/amazonq/explorer/amazonQChildrenNodes.ts @@ -11,8 +11,10 @@ import { installAmazonQExtension } from '../../codewhisperer/commands/basicComma import { amazonQHelpUrl } from '../../shared/constants' import { cwTreeNodeSource } from '../../codewhisperer/commands/types' import { VSCODE_EXTENSION_ID } from '../../shared/extensions' -import { globals, setContext } from '../../shared' -import { ExtStartUpSources, telemetry } from '../../shared/telemetry' +import globals from '../../shared/extensionGlobals' +import { setContext } from '../../shared/vscode/setContext' +import { telemetry } from '../../shared/telemetry/telemetry' +import { ExtStartUpSources } from '../../shared/telemetry/util' import { ExtensionUse } from '../../auth/utils' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/amazonq/extApi.ts b/packages/core/src/amazonq/extApi.ts index 874ee018526..2eb16e4cde2 100644 --- a/packages/core/src/amazonq/extApi.ts +++ b/packages/core/src/amazonq/extApi.ts @@ -4,11 +4,11 @@ */ import vscode from 'vscode' -import { VSCODE_EXTENSION_ID } from '../shared/utilities' +import { VSCODE_EXTENSION_ID } from '../shared/extensions' import { SendMessageCommandOutput, SendMessageRequest } from '@amzn/amazon-q-developer-streaming-client' import { GenerateAssistantResponseCommandOutput, GenerateAssistantResponseRequest } from '@amzn/codewhisperer-streaming' import { FeatureAuthState } from '../codewhisperer/util/authUtil' -import { ToolkitError } from '../shared' +import { ToolkitError } from '../shared/errors' /** * This interface is used and exported by the amazon q extension. If you make a change here then diff --git a/packages/core/src/amazonq/index.ts b/packages/core/src/amazonq/index.ts index c5abbf7658e..84a3bf4f454 100644 --- a/packages/core/src/amazonq/index.ts +++ b/packages/core/src/amazonq/index.ts @@ -43,7 +43,7 @@ export { ExtensionMessage } from '../amazonq/webview/ui/commands' export { CodeReference } from '../codewhispererChat/view/connector/connector' export { extractAuthFollowUp } from './util/authUtils' export { Messenger } from './commons/connector/baseMessenger' -import { FeatureContext } from '../shared' +import { FeatureContext } from '../shared/featureConfig' /** * main from createMynahUI is a purely browser dependency. Due to this diff --git a/packages/core/src/amazonq/lsp/lspClient.ts b/packages/core/src/amazonq/lsp/lspClient.ts index 659df3ae078..077bd7b98f1 100644 --- a/packages/core/src/amazonq/lsp/lspClient.ts +++ b/packages/core/src/amazonq/lsp/lspClient.ts @@ -30,7 +30,11 @@ import { Usage, } from './types' import { CodeWhispererSettings } from '../../codewhisperer/util/codewhispererSettings' -import { ResourcePaths, createServerOptions, fs, getLogger, globals } from '../../shared' +import { fs } from '../../shared/fs/fs' +import { getLogger } from '../../shared/logger/logger' +import globals from '../../shared/extensionGlobals' +import { ResourcePaths } from '../../shared/lsp/types' +import { createServerOptions } from '../../shared/lsp/utils/platform' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/amazonq/lsp/lspController.ts b/packages/core/src/amazonq/lsp/lspController.ts index e6b9c5e7260..2ed3065cc29 100644 --- a/packages/core/src/amazonq/lsp/lspController.ts +++ b/packages/core/src/amazonq/lsp/lspController.ts @@ -10,12 +10,12 @@ import { CurrentWsFolders, collectFilesForIndex } from '../../shared/utilities/w import { LspClient } from './lspClient' import { RelevantTextDocument } from '@amzn/codewhisperer-streaming' import { activate as activateLsp } from './lspClient' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { isCloud9 } from '../../shared/extensionUtilities' import globals, { isWeb } from '../../shared/extensionGlobals' import { isAmazonInternalOs } from '../../shared/vscode/env' import { WorkspaceLSPResolver } from './workspaceInstaller' -import { lspSetupStage } from '../../shared' +import { lspSetupStage } from '../../shared/lsp/utils/setupStage' export interface Chunk { readonly filePath: string diff --git a/packages/core/src/amazonq/lsp/workspaceInstaller.ts b/packages/core/src/amazonq/lsp/workspaceInstaller.ts index b4c4bc614ff..849fd3a37c5 100644 --- a/packages/core/src/amazonq/lsp/workspaceInstaller.ts +++ b/packages/core/src/amazonq/lsp/workspaceInstaller.ts @@ -10,7 +10,8 @@ import { LanguageServerResolver } from '../../shared/lsp/lspResolver' import { Range } from 'semver' import { getNodeExecutableName } from '../../shared/lsp/utils/platform' import { fs } from '../../shared/fs/fs' -import { cleanLspDownloads, getLogger } from '../../shared' +import { cleanLspDownloads } from '../../shared/lsp/utils/cleanup' +import { getLogger } from '../../shared/logger/logger' const manifestUrl = 'https://aws-toolkit-language-servers.amazonaws.com/q-context/manifest.json' // this LSP client in Q extension is only going to work with these LSP server versions diff --git a/packages/core/src/amazonq/messages/chatMessageDuration.ts b/packages/core/src/amazonq/messages/chatMessageDuration.ts index d4b087f64df..6321489da62 100644 --- a/packages/core/src/amazonq/messages/chatMessageDuration.ts +++ b/packages/core/src/amazonq/messages/chatMessageDuration.ts @@ -4,8 +4,8 @@ */ import AsyncLock from 'async-lock' -import { globals } from '../../shared' -import { telemetry } from '../../shared/telemetry' +import globals from '../../shared/extensionGlobals' +import { telemetry } from '../../shared/telemetry/telemetry' import { Event, uiEventRecorder } from '../util/eventRecorder' import { CWCTelemetryHelper } from '../../codewhispererChat/controllers/chat/telemetryHelper' import { TabType } from '../webview/ui/storages/tabsStorage' diff --git a/packages/core/src/amazonq/onboardingPage/walkthrough.ts b/packages/core/src/amazonq/onboardingPage/walkthrough.ts index 466b6970b91..cb56c8b2abb 100644 --- a/packages/core/src/amazonq/onboardingPage/walkthrough.ts +++ b/packages/core/src/amazonq/onboardingPage/walkthrough.ts @@ -6,7 +6,7 @@ import { focusAmazonQPanel } from '../../codewhispererChat/commands/registerCommands' import globals, { isWeb } from '../../shared/extensionGlobals' import { VSCODE_EXTENSION_ID } from '../../shared/extensions' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { localize } from '../../shared/utilities/vsCodeUtils' import { Commands, placeholder } from '../../shared/vscode/commands2' import vscode from 'vscode' diff --git a/packages/core/src/amazonq/session/sessionState.ts b/packages/core/src/amazonq/session/sessionState.ts new file mode 100644 index 00000000000..21652b3dd5d --- /dev/null +++ b/packages/core/src/amazonq/session/sessionState.ts @@ -0,0 +1,410 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as vscode from 'vscode' +import { ToolkitError } from '../../shared/errors' +import globals from '../../shared/extensionGlobals' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' +import { VirtualFileSystem } from '../../shared/virtualFilesystem' +import { CodeReference, UploadHistory } from '../webview/ui/connector' +import { AuthUtil } from '../../codewhisperer/util/authUtil' +import { randomUUID } from '../../shared/crypto' +import { i18n } from '../../shared/i18n-helper' +import { + CodeGenerationStatus, + CurrentWsFolders, + DeletedFileInfo, + DevPhase, + NewFileInfo, + SessionState, + SessionStateAction, + SessionStateConfig, + SessionStateInteraction, + SessionStatePhase, +} from '../commons/types' +import { prepareRepoData, getDeletedFileInfos, registerNewFiles } from '../util/files' +import { uploadCode } from '../util/upload' + +export const EmptyCodeGenID = 'EMPTY_CURRENT_CODE_GENERATION_ID' + +export interface BaseMessenger { + sendAnswer(params: any): void + sendUpdatePlaceholder?(tabId: string, message: string): void +} + +export abstract class CodeGenBase { + private pollCount = 360 + private requestDelay = 5000 + public tokenSource: vscode.CancellationTokenSource + public phase: SessionStatePhase = DevPhase.CODEGEN + public readonly conversationId: string + public readonly uploadId: string + public currentCodeGenerationId?: string + public isCancellationRequested?: boolean + + constructor( + protected config: SessionStateConfig, + public tabID: string + ) { + this.tokenSource = new vscode.CancellationTokenSource() + this.conversationId = config.conversationId + this.uploadId = config.uploadId + this.currentCodeGenerationId = config.currentCodeGenerationId || EmptyCodeGenID + } + + protected abstract handleProgress(messenger: BaseMessenger, action: SessionStateAction, detail?: string): void + protected abstract getScheme(): string + protected abstract getTimeoutErrorCode(): string + protected abstract handleGenerationComplete( + messenger: BaseMessenger, + newFileInfo: NewFileInfo[], + action: SessionStateAction + ): void + + async generateCode({ + messenger, + fs, + codeGenerationId, + telemetry: telemetry, + workspaceFolders, + action, + }: { + messenger: BaseMessenger + fs: VirtualFileSystem + codeGenerationId: string + telemetry: any + workspaceFolders: CurrentWsFolders + action: SessionStateAction + }): Promise<{ + newFiles: NewFileInfo[] + deletedFiles: DeletedFileInfo[] + references: CodeReference[] + codeGenerationRemainingIterationCount?: number + codeGenerationTotalIterationCount?: number + }> { + let codeGenerationRemainingIterationCount = undefined + let codeGenerationTotalIterationCount = undefined + for ( + let pollingIteration = 0; + pollingIteration < this.pollCount && !this.isCancellationRequested; + ++pollingIteration + ) { + const codegenResult = await this.config.proxyClient.getCodeGeneration(this.conversationId, codeGenerationId) + codeGenerationRemainingIterationCount = codegenResult.codeGenerationRemainingIterationCount + codeGenerationTotalIterationCount = codegenResult.codeGenerationTotalIterationCount + + getLogger().debug(`Codegen response: %O`, codegenResult) + telemetry.setCodeGenerationResult(codegenResult.codeGenerationStatus.status) + + switch (codegenResult.codeGenerationStatus.status as CodeGenerationStatus) { + case CodeGenerationStatus.COMPLETE: { + const { newFileContents, deletedFiles, references } = + await this.config.proxyClient.exportResultArchive(this.conversationId) + const newFileInfo = registerNewFiles( + fs, + newFileContents, + this.uploadId, + workspaceFolders, + this.conversationId, + this.getScheme() + ) + telemetry.setNumberOfFilesGenerated(newFileInfo.length) + + this.handleGenerationComplete(messenger, newFileInfo, action) + + return { + newFiles: newFileInfo, + deletedFiles: getDeletedFileInfos(deletedFiles, workspaceFolders), + references, + codeGenerationRemainingIterationCount, + codeGenerationTotalIterationCount, + } + } + case CodeGenerationStatus.PREDICT_READY: + case CodeGenerationStatus.IN_PROGRESS: { + if (codegenResult.codeGenerationStatusDetail) { + this.handleProgress(messenger, action, codegenResult.codeGenerationStatusDetail) + } + await new Promise((f) => globals.clock.setTimeout(f, this.requestDelay)) + break + } + case CodeGenerationStatus.PREDICT_FAILED: + case CodeGenerationStatus.DEBATE_FAILED: + case CodeGenerationStatus.FAILED: { + throw this.handleError(messenger, codegenResult) + } + default: { + const errorMessage = `Unknown status: ${codegenResult.codeGenerationStatus.status}\n` + throw new ToolkitError(errorMessage, { code: 'UnknownCodeGenError' }) + } + } + } + + if (!this.isCancellationRequested) { + const errorMessage = i18n('AWS.amazonq.featureDev.error.codeGen.timeout') + throw new ToolkitError(errorMessage, { code: this.getTimeoutErrorCode() }) + } + + return { + newFiles: [], + deletedFiles: [], + references: [], + codeGenerationRemainingIterationCount: codeGenerationRemainingIterationCount, + codeGenerationTotalIterationCount: codeGenerationTotalIterationCount, + } + } + + protected abstract handleError(messenger: BaseMessenger, codegenResult: any): Error +} + +export abstract class BasePrepareCodeGenState implements SessionState { + public tokenSource: vscode.CancellationTokenSource + public readonly phase = DevPhase.CODEGEN + public uploadId: string + public conversationId: string + + constructor( + protected config: SessionStateConfig, + public filePaths: NewFileInfo[], + public deletedFiles: DeletedFileInfo[], + public references: CodeReference[], + public tabID: string, + public currentIteration: number, + public codeGenerationRemainingIterationCount?: number, + public codeGenerationTotalIterationCount?: number, + public uploadHistory: UploadHistory = {}, + public superTokenSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(), + public currentCodeGenerationId?: string, + public codeGenerationId?: string + ) { + this.tokenSource = superTokenSource || new vscode.CancellationTokenSource() + this.uploadId = config.uploadId + this.currentCodeGenerationId = currentCodeGenerationId + this.conversationId = config.conversationId + this.uploadHistory = uploadHistory + this.codeGenerationId = codeGenerationId + } + + updateWorkspaceRoot(workspaceRoot: string) { + this.config.workspaceRoots = [workspaceRoot] + } + + protected createNextState( + config: SessionStateConfig, + StateClass?: new ( + config: SessionStateConfig, + filePaths: NewFileInfo[], + deletedFiles: DeletedFileInfo[], + references: CodeReference[], + tabID: string, + currentIteration: number, + uploadHistory: UploadHistory, + codeGenerationRemainingIterationCount?: number, + codeGenerationTotalIterationCount?: number + ) => SessionState + ): SessionState { + return new StateClass!( + config, + this.filePaths, + this.deletedFiles, + this.references, + this.tabID, + this.currentIteration, + this.uploadHistory + ) + } + + protected abstract preUpload(action: SessionStateAction): void + protected abstract postUpload(action: SessionStateAction): void + + async interact(action: SessionStateAction): Promise { + this.preUpload(action) + const uploadId = await telemetry.amazonq_createUpload.run(async (span) => { + span.record({ + amazonqConversationId: this.config.conversationId, + credentialStartUrl: AuthUtil.instance.startUrl, + }) + const { zipFileBuffer, zipFileChecksum } = await prepareRepoData( + this.config.workspaceRoots, + this.config.workspaceFolders, + action.telemetry, + span + ) + const uploadId = randomUUID() + const { uploadUrl, kmsKeyArn } = await this.config.proxyClient.createUploadUrl( + this.config.conversationId, + zipFileChecksum, + zipFileBuffer.length, + uploadId + ) + + await uploadCode(uploadUrl, zipFileBuffer, zipFileChecksum, kmsKeyArn) + this.postUpload(action) + + return uploadId + }) + + this.uploadId = uploadId + const nextState = this.createNextState({ ...this.config, uploadId }) + return nextState.interact(action) + } +} + +export interface CodeGenerationParams { + messenger: BaseMessenger + fs: VirtualFileSystem + codeGenerationId: string + telemetry: any + workspaceFolders: CurrentWsFolders +} + +export interface CreateNextStateParams { + filePaths: NewFileInfo[] + deletedFiles: DeletedFileInfo[] + references: CodeReference[] + currentIteration: number + remainingIterations?: number + totalIterations?: number + uploadHistory: UploadHistory + tokenSource: vscode.CancellationTokenSource + currentCodeGenerationId?: string + codeGenerationId?: string +} + +export abstract class BaseCodeGenState extends CodeGenBase implements SessionState { + constructor( + config: SessionStateConfig, + public filePaths: NewFileInfo[], + public deletedFiles: DeletedFileInfo[], + public references: CodeReference[], + tabID: string, + public currentIteration: number, + public uploadHistory: UploadHistory, + public codeGenerationRemainingIterationCount?: number, + public codeGenerationTotalIterationCount?: number + ) { + super(config, tabID) + } + + protected createNextState( + config: SessionStateConfig, + params: CreateNextStateParams, + StateClass?: new ( + config: SessionStateConfig, + filePaths: NewFileInfo[], + deletedFiles: DeletedFileInfo[], + references: CodeReference[], + tabID: string, + currentIteration: number, + remainingIterations?: number, + totalIterations?: number, + uploadHistory?: UploadHistory, + tokenSource?: vscode.CancellationTokenSource, + currentCodeGenerationId?: string, + codeGenerationId?: string + ) => SessionState + ): SessionState { + return new StateClass!( + config, + params.filePaths, + params.deletedFiles, + params.references, + this.tabID, + params.currentIteration, + params.remainingIterations, + params.totalIterations, + params.uploadHistory, + params.tokenSource, + params.currentCodeGenerationId, + params.codeGenerationId + ) + } + + async interact(action: SessionStateAction): Promise { + return telemetry.amazonq_codeGenerationInvoke.run(async (span) => { + try { + action.tokenSource?.token.onCancellationRequested(() => { + this.isCancellationRequested = true + if (action.tokenSource) { + this.tokenSource = action.tokenSource + } + }) + + span.record({ + amazonqConversationId: this.config.conversationId, + credentialStartUrl: AuthUtil.instance.startUrl, + }) + + action.telemetry.setGenerateCodeIteration(this.currentIteration) + action.telemetry.setGenerateCodeLastInvocationTime() + + const codeGenerationId = randomUUID() + await this.startCodeGeneration(action, codeGenerationId) + + const codeGeneration = await this.generateCode({ + messenger: action.messenger, + fs: action.fs, + codeGenerationId, + telemetry: action.telemetry, + workspaceFolders: this.config.workspaceFolders, + action, + }) + + if (codeGeneration && !action.tokenSource?.token.isCancellationRequested) { + this.config.currentCodeGenerationId = codeGenerationId + this.currentCodeGenerationId = codeGenerationId + } + + this.filePaths = codeGeneration.newFiles + this.deletedFiles = codeGeneration.deletedFiles + this.references = codeGeneration.references + this.codeGenerationRemainingIterationCount = codeGeneration.codeGenerationRemainingIterationCount + this.codeGenerationTotalIterationCount = codeGeneration.codeGenerationTotalIterationCount + this.currentIteration = + this.codeGenerationRemainingIterationCount && this.codeGenerationTotalIterationCount + ? this.codeGenerationTotalIterationCount - this.codeGenerationRemainingIterationCount + : this.currentIteration + 1 + + if (action.uploadHistory && !action.uploadHistory[codeGenerationId] && codeGenerationId) { + action.uploadHistory[codeGenerationId] = { + timestamp: Date.now(), + uploadId: this.config.uploadId, + filePaths: codeGeneration.newFiles, + deletedFiles: codeGeneration.deletedFiles, + tabId: this.tabID, + } + } + + action.telemetry.setAmazonqNumberOfReferences(this.references.length) + action.telemetry.recordUserCodeGenerationTelemetry(span, this.conversationId) + + const nextState = this.createNextState(this.config, { + filePaths: this.filePaths, + deletedFiles: this.deletedFiles, + references: this.references, + currentIteration: this.currentIteration, + remainingIterations: this.codeGenerationRemainingIterationCount, + totalIterations: this.codeGenerationTotalIterationCount, + uploadHistory: action.uploadHistory ? action.uploadHistory : {}, + tokenSource: this.tokenSource, + currentCodeGenerationId: this.currentCodeGenerationId, + codeGenerationId, + }) + + return { + nextState, + interaction: {}, + } + } catch (e) { + throw e instanceof ToolkitError + ? e + : ToolkitError.chain(e, 'Server side error', { code: 'UnhandledCodeGenServerSideError' }) + } + }) + } + + protected abstract startCodeGeneration(action: SessionStateAction, codeGenerationId: string): Promise +} diff --git a/packages/core/src/amazonq/util/authUtils.ts b/packages/core/src/amazonq/util/authUtils.ts index 0fd48ebc4c9..e310dbe9823 100644 --- a/packages/core/src/amazonq/util/authUtils.ts +++ b/packages/core/src/amazonq/util/authUtils.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { FeatureAuthState } from '../../codewhisperer' +import { FeatureAuthState } from '../../codewhisperer/util/authUtil' import { AuthFollowUpType, AuthMessageDataMap } from '../auth/model' /** diff --git a/packages/core/src/amazonqFeatureDev/util/files.ts b/packages/core/src/amazonq/util/files.ts similarity index 60% rename from packages/core/src/amazonqFeatureDev/util/files.ts rename to packages/core/src/amazonq/util/files.ts index b0949edeca1..19081fe1654 100644 --- a/packages/core/src/amazonqFeatureDev/util/files.ts +++ b/packages/core/src/amazonq/util/files.ts @@ -5,20 +5,24 @@ import * as vscode from 'vscode' import * as path from 'path' -import { collectFiles } from '../../shared/utilities/workspaceUtils' +import { collectFiles, getWorkspaceFoldersByPrefixes } from '../../shared/utilities/workspaceUtils' -import { ContentLengthError, PrepareRepoFailedError } from '../errors' +import { ContentLengthError, PrepareRepoFailedError } from '../../amazonqFeatureDev/errors' import { getLogger } from '../../shared/logger/logger' -import { maxFileSizeBytes } from '../limits' -import { CurrentWsFolders } from '../types' +import { maxFileSizeBytes } from '../../amazonqFeatureDev/limits' +import { CurrentWsFolders, DeletedFileInfo, NewFileInfo, NewFileZipContents } from '../../amazonqDoc/types' import { hasCode, ToolkitError } from '../../shared/errors' -import { AmazonqCreateUpload, Span, telemetry as amznTelemetry } from '../../shared/telemetry/telemetry' -import { TelemetryHelper } from './telemetryHelper' -import { maxRepoSizeBytes } from '../constants' +import { AmazonqCreateUpload, Span, telemetry as amznTelemetry, telemetry } from '../../shared/telemetry/telemetry' +import { maxRepoSizeBytes } from '../../amazonqFeatureDev/constants' import { isCodeFile } from '../../shared/filetypes' -import { fs } from '../../shared' -import { CodeWhispererSettings } from '../../codewhisperer' +import { fs } from '../../shared/fs/fs' +import { VirtualFileSystem } from '../../shared/virtualFilesystem' +import { VirtualMemoryFile } from '../../shared/virtualMemoryFile' +import { CodeWhispererSettings } from '../../codewhisperer/util/codewhispererSettings' import { ZipStream } from '../../shared/utilities/zipStream' +import { isPresent } from '../../shared/utilities/collectionUtils' +import { AuthUtil } from '../../codewhisperer/util/authUtil' +import { TelemetryHelper } from '../util/telemetryHelper' export async function checkForDevFile(root: string) { const devFilePath = root + '/devfile.yaml' @@ -163,3 +167,79 @@ export function getPathsFromZipFilePath( workspaceFolder, } } + +export function getDeletedFileInfos(deletedFiles: string[], workspaceFolders: CurrentWsFolders): DeletedFileInfo[] { + const workspaceFolderPrefixes = getWorkspaceFoldersByPrefixes(workspaceFolders) + return deletedFiles + .map((deletedFilePath) => { + const prefix = + workspaceFolderPrefixes === undefined + ? '' + : deletedFilePath.substring(0, deletedFilePath.indexOf(path.sep)) + const folder = workspaceFolderPrefixes === undefined ? workspaceFolders[0] : workspaceFolderPrefixes[prefix] + if (folder === undefined) { + getLogger().error(`No workspace folder found for file: ${deletedFilePath} and prefix: ${prefix}`) + return undefined + } + const prefixLength = workspaceFolderPrefixes === undefined ? 0 : prefix.length + 1 + return { + zipFilePath: deletedFilePath, + workspaceFolder: folder, + relativePath: deletedFilePath.substring(prefixLength), + rejected: false, + changeApplied: false, + } + }) + .filter(isPresent) +} + +export function registerNewFiles( + fs: VirtualFileSystem, + newFileContents: NewFileZipContents[], + uploadId: string, + workspaceFolders: CurrentWsFolders, + conversationId: string, + scheme: string +): NewFileInfo[] { + const result: NewFileInfo[] = [] + const workspaceFolderPrefixes = getWorkspaceFoldersByPrefixes(workspaceFolders) + for (const { zipFilePath, fileContent } of newFileContents) { + const encoder = new TextEncoder() + const contents = encoder.encode(fileContent) + const generationFilePath = path.join(uploadId, zipFilePath) + const uri = vscode.Uri.from({ scheme, path: generationFilePath }) + fs.registerProvider(uri, new VirtualMemoryFile(contents)) + const prefix = + workspaceFolderPrefixes === undefined ? '' : zipFilePath.substring(0, zipFilePath.indexOf(path.sep)) + const folder = + workspaceFolderPrefixes === undefined + ? workspaceFolders[0] + : (workspaceFolderPrefixes[prefix] ?? + workspaceFolderPrefixes[ + Object.values(workspaceFolderPrefixes).find((val) => val.index === 0)?.name ?? '' + ]) + if (folder === undefined) { + telemetry.toolkit_trackScenario.emit({ + count: 1, + amazonqConversationId: conversationId, + credentialStartUrl: AuthUtil.instance.startUrl, + scenario: 'wsOrphanedDocuments', + }) + getLogger().error(`No workspace folder found for file: ${zipFilePath} and prefix: ${prefix}`) + continue + } + result.push({ + zipFilePath, + fileContent, + virtualMemoryUri: uri, + workspaceFolder: folder, + relativePath: zipFilePath.substring( + workspaceFolderPrefixes === undefined ? 0 : prefix.length > 0 ? prefix.length + 1 : 0 + ), + rejected: false, + changeApplied: false, + }) + } + + return result +} diff --git a/packages/core/src/amazonqFeatureDev/util/telemetryHelper.ts b/packages/core/src/amazonq/util/telemetryHelper.ts similarity index 97% rename from packages/core/src/amazonqFeatureDev/util/telemetryHelper.ts rename to packages/core/src/amazonq/util/telemetryHelper.ts index 111dd19f17e..121673ed163 100644 --- a/packages/core/src/amazonqFeatureDev/util/telemetryHelper.ts +++ b/packages/core/src/amazonq/util/telemetryHelper.ts @@ -3,10 +3,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { globals } from '../../shared' +import globals from '../../shared/extensionGlobals' import { getLogger } from '../../shared/logger/logger' import { AmazonqApproachInvoke, AmazonqCodeGenerationInvoke, Span } from '../../shared/telemetry/telemetry' -import { LLMResponseType } from '../types' +import { LLMResponseType } from '../commons/types' export class TelemetryHelper { public generateApproachIteration: number diff --git a/packages/core/src/amazonqFeatureDev/util/upload.ts b/packages/core/src/amazonq/util/upload.ts similarity index 88% rename from packages/core/src/amazonqFeatureDev/util/upload.ts rename to packages/core/src/amazonq/util/upload.ts index f9324cfacb8..bd4ff26cc45 100644 --- a/packages/core/src/amazonqFeatureDev/util/upload.ts +++ b/packages/core/src/amazonq/util/upload.ts @@ -5,10 +5,10 @@ import request, { RequestError } from '../../shared/request' import { getLogger } from '../../shared/logger/logger' -import { featureName } from '../constants' +import { featureName } from '../../amazonqFeatureDev/constants' -import { UploadCodeError, UploadURLExpired } from '../errors' -import { ToolkitError } from '../../shared' +import { UploadCodeError, UploadURLExpired } from '../../amazonqFeatureDev/errors' +import { ToolkitError } from '../../shared/errors' import { i18n } from '../../shared/i18n-helper' /** diff --git a/packages/core/src/amazonq/webview/generators/webViewContent.ts b/packages/core/src/amazonq/webview/generators/webViewContent.ts index ea577574d4c..81c6cb00a35 100644 --- a/packages/core/src/amazonq/webview/generators/webViewContent.ts +++ b/packages/core/src/amazonq/webview/generators/webViewContent.ts @@ -6,7 +6,9 @@ import path from 'path' import { Uri, Webview } from 'vscode' import { AuthUtil } from '../../../codewhisperer/util/authUtil' -import { FeatureConfigProvider, FeatureContext, globals, isSageMaker } from '../../../shared' +import { FeatureConfigProvider, FeatureContext } from '../../../shared/featureConfig' +import globals from '../../../shared/extensionGlobals' +import { isSageMaker } from '../../../shared/extensionUtilities' export class WebViewContentGenerator { private async generateFeatureConfigsData(): Promise { diff --git a/packages/core/src/amazonq/webview/messages/messageDispatcher.ts b/packages/core/src/amazonq/webview/messages/messageDispatcher.ts index fdd1584b767..483b4525298 100644 --- a/packages/core/src/amazonq/webview/messages/messageDispatcher.ts +++ b/packages/core/src/amazonq/webview/messages/messageDispatcher.ts @@ -7,12 +7,13 @@ import { Webview, Uri } from 'vscode' import { MessagePublisher } from '../../messages/messagePublisher' import { MessageListener } from '../../messages/messageListener' import { TabType } from '../ui/storages/tabsStorage' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { amazonqMark } from '../../../shared/performance/marks' -import { telemetry } from '../../../shared/telemetry' +import { telemetry } from '../../../shared/telemetry/telemetry' import { AmazonQChatMessageDuration } from '../../messages/chatMessageDuration' -import { globals, openUrl } from '../../../shared' import { isClickTelemetry, isOpenAgentTelemetry } from '../ui/telemetry/actions' +import globals from '../../../shared/extensionGlobals' +import { openUrl } from '../../../shared/utilities/vsCodeUtils' import { DefaultAmazonQAppInitContext } from '../../apps/initContext' export function dispatchWebViewMessagesToApps( diff --git a/packages/core/src/amazonq/webview/ui/main.ts b/packages/core/src/amazonq/webview/ui/main.ts index 74ada92cc67..1c940c6bea1 100644 --- a/packages/core/src/amazonq/webview/ui/main.ts +++ b/packages/core/src/amazonq/webview/ui/main.ts @@ -26,7 +26,7 @@ import { TextMessageHandler } from './messages/handler' import { MessageController } from './messages/controller' import { getActions, getDetails } from './diffTree/actions' import { DiffTreeFileInfo } from './diffTree/types' -import { FeatureContext } from '../../../shared' +import { FeatureContext } from '../../../shared/featureConfig' import { tryNewMap } from '../../util/functionUtils' import { welcomeScreenTabData } from './walkthrough/welcome' import { agentWalkthroughDataModel } from './walkthrough/agent' diff --git a/packages/core/src/amazonq/webview/ui/tabs/generator.ts b/packages/core/src/amazonq/webview/ui/tabs/generator.ts index a6d31e715df..f037e4c56ef 100644 --- a/packages/core/src/amazonq/webview/ui/tabs/generator.ts +++ b/packages/core/src/amazonq/webview/ui/tabs/generator.ts @@ -9,7 +9,7 @@ import { FollowUpGenerator } from '../followUps/generator' import { QuickActionGenerator } from '../quickActions/generator' import { TabTypeDataMap } from './constants' import { agentWalkthroughDataModel } from '../walkthrough/agent' -import { FeatureContext } from '../../../../shared' +import { FeatureContext } from '../../../../shared/featureConfig' export interface TabDataGeneratorProps { isFeatureDevEnabled: boolean diff --git a/packages/core/src/amazonqDoc/app.ts b/packages/core/src/amazonqDoc/app.ts index 1847da2e168..bf64c71c387 100644 --- a/packages/core/src/amazonqDoc/app.ts +++ b/packages/core/src/amazonqDoc/app.ts @@ -9,7 +9,7 @@ import { AmazonQAppInitContext } from '../amazonq/apps/initContext' import { MessagePublisher } from '../amazonq/messages/messagePublisher' import { MessageListener } from '../amazonq/messages/messageListener' import { fromQueryToParameters } from '../shared/utilities/uriUtils' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { AuthUtil } from '../codewhisperer/util/authUtil' import { debounce } from 'lodash' import { DocChatSessionStorage } from './storages/chatSession' diff --git a/packages/core/src/amazonqDoc/controllers/chat/controller.ts b/packages/core/src/amazonqDoc/controllers/chat/controller.ts index 2f31346d9cd..8c52ab9187f 100644 --- a/packages/core/src/amazonqDoc/controllers/chat/controller.ts +++ b/packages/core/src/amazonqDoc/controllers/chat/controller.ts @@ -18,7 +18,7 @@ import { findReadmePath, } from '../../constants' import { AuthUtil } from '../../../codewhisperer/util/authUtil' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { Session } from '../../session/session' import { i18n } from '../../../shared/i18n-helper' @@ -41,7 +41,7 @@ import { getWorkspaceRelativePath, isMultiRootWorkspace, } from '../../../shared/utilities/workspaceUtils' -import { getPathsFromZipFilePath } from '../../../amazonqFeatureDev/util/files' +import { getPathsFromZipFilePath } from '../../../amazonq/util/files' import { FollowUpTypes } from '../../../amazonq/commons/types' import { DocGenerationTask } from '../docGenerationTask' import { DevPhase } from '../../types' diff --git a/packages/core/src/amazonqDoc/controllers/docGenerationTask.ts b/packages/core/src/amazonqDoc/controllers/docGenerationTask.ts index be345884fd2..8b854037282 100644 --- a/packages/core/src/amazonqDoc/controllers/docGenerationTask.ts +++ b/packages/core/src/amazonqDoc/controllers/docGenerationTask.ts @@ -9,7 +9,7 @@ import { DocV2AcceptanceEvent, DocV2GenerationEvent, } from '../../codewhisperer/client/codewhispereruserclient' -import { getLogger } from '../../shared' +import { getLogger } from '../../shared/logger/logger' export class DocGenerationTask { // Telemetry fields diff --git a/packages/core/src/amazonqDoc/messenger.ts b/packages/core/src/amazonqDoc/messenger.ts index f28e5e9060b..3c6abfdf15f 100644 --- a/packages/core/src/amazonqDoc/messenger.ts +++ b/packages/core/src/amazonqDoc/messenger.ts @@ -4,7 +4,7 @@ */ import { Messenger } from '../amazonq/commons/connector/baseMessenger' import { AppToWebViewMessageDispatcher } from '../amazonq/commons/connector/connectorMessages' -import { messageWithConversationId } from '../amazonqFeatureDev' +import { messageWithConversationId } from '../amazonqFeatureDev/userFacingText' import { i18n } from '../shared/i18n-helper' import { docGenerationProgressMessage, DocGenerationStep, Mode, NewSessionFollowUps } from './constants' import { inProgress } from './types' diff --git a/packages/core/src/amazonqDoc/session/session.ts b/packages/core/src/amazonqDoc/session/session.ts index 4396e6e5e6b..f132799d8ae 100644 --- a/packages/core/src/amazonqDoc/session/session.ts +++ b/packages/core/src/amazonqDoc/session/session.ts @@ -5,15 +5,13 @@ import { docScheme, featureName, Mode } from '../constants' import { DeletedFileInfo, Interaction, NewFileInfo, SessionState, SessionStateConfig } from '../types' -import { PrepareCodeGenState } from './sessionState' +import { DocPrepareCodeGenState } from './sessionState' import { telemetry } from '../../shared/telemetry/telemetry' -import { extensionVersion, fs, getLogger, globals } from '../../shared' import { AuthUtil } from '../../codewhisperer/util/authUtil' import { SessionConfig } from '../../amazonq/commons/session/sessionConfigFactory' -import { ReferenceLogViewProvider } from '../../codewhisperer' import path from 'path' import { FeatureDevClient } from '../../amazonqFeatureDev/client/featureDev' -import { TelemetryHelper } from '../../amazonqFeatureDev/util/telemetryHelper' +import { TelemetryHelper } from '../../amazonq/util/telemetryHelper' import { ConversationNotStartedState } from '../../amazonqFeatureDev/session/sessionState' import { logWithConversationId } from '../../amazonqFeatureDev/userFacingText' import { ConversationIdNotFoundError } from '../../amazonqFeatureDev/errors' @@ -27,6 +25,11 @@ import { import { getClientId, getOperatingSystem, getOptOutPreference } from '../../shared/telemetry/util' import { DocMessenger } from '../messenger' import { computeDiff } from '../../amazonq/commons/diff' +import { ReferenceLogViewProvider } from '../../codewhisperer/service/referenceLogViewProvider' +import fs from '../../shared/fs/fs' +import globals from '../../shared/extensionGlobals' +import { extensionVersion } from '../../shared/vscode/env' +import { getLogger } from '../../shared/logger/logger' export class Session { private _state?: SessionState | Omit @@ -88,7 +91,7 @@ export class Session { span.record({ amazonqConversationId: this._conversationId, credentialStartUrl: AuthUtil.instance.startUrl }) }) - this._state = new PrepareCodeGenState( + this._state = new DocPrepareCodeGenState( { ...this.getSessionStateConfig(), conversationId: this.conversationId, diff --git a/packages/core/src/amazonqDoc/session/sessionState.ts b/packages/core/src/amazonqDoc/session/sessionState.ts index 7bf9c02e51b..71650dd2b78 100644 --- a/packages/core/src/amazonqDoc/session/sessionState.ts +++ b/packages/core/src/amazonqDoc/session/sessionState.ts @@ -3,40 +3,12 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as vscode from 'vscode' import { ToolkitError } from '../../shared/errors' -import globals from '../../shared/extensionGlobals' -import { getLogger } from '../../shared/logger' -import { telemetry } from '../../shared/telemetry/telemetry' -import { VirtualFileSystem } from '../../shared/virtualFilesystem' import { DocGenerationStep, docScheme, getFileSummaryPercentage, Mode } from '../constants' -import { CodeReference, UploadHistory } from '../../amazonq/webview/ui/connector' -import { AuthUtil } from '../../codewhisperer/util/authUtil' -import { randomUUID } from '../../shared/crypto' import { i18n } from '../../shared/i18n-helper' -import { - CodeGenerationStatus, - CurrentWsFolders, - DeletedFileInfo, - DevPhase, - NewFileInfo, - SessionState, - SessionStateAction, - SessionStateConfig, - SessionStateInteraction, - SessionStatePhase, -} from '../types' -import { - EmptyCodeGenID, - Intent, - TelemetryHelper, - getDeletedFileInfos, - prepareRepoData, - registerNewFiles, -} from '../../amazonqFeatureDev' -import { uploadCode } from '../../amazonqFeatureDev/util/upload' +import { NewFileInfo, SessionState, SessionStateAction, SessionStateConfig } from '../types' import { ContentLengthError, DocServiceError, @@ -49,344 +21,115 @@ import { WorkspaceEmptyError, } from '../errors' import { DocMessenger } from '../messenger' - -abstract class CodeGenBase { - private pollCount = 360 - private requestDelay = 5000 - public tokenSource: vscode.CancellationTokenSource - public phase: SessionStatePhase = DevPhase.CODEGEN - public readonly conversationId: string - public readonly uploadId: string - public currentCodeGenerationId?: string - public isCancellationRequested?: boolean - - constructor( - protected config: SessionStateConfig, - public tabID: string - ) { - this.tokenSource = new vscode.CancellationTokenSource() - this.conversationId = config.conversationId - this.uploadId = config.uploadId - this.currentCodeGenerationId = config.currentCodeGenerationId || EmptyCodeGenID +import { BaseCodeGenState, BasePrepareCodeGenState, CreateNextStateParams } from '../../amazonq/session/sessionState' +import { Intent } from '../../amazonq/commons/types' + +export class DocCodeGenState extends BaseCodeGenState { + protected handleProgress(messenger: DocMessenger, action: SessionStateAction, detail?: string): void { + if (detail) { + const progress = getFileSummaryPercentage(detail) + messenger.sendDocProgress( + this.tabID, + progress === 100 ? DocGenerationStep.GENERATING_ARTIFACTS : DocGenerationStep.SUMMARIZING_FILES, + progress, + action.mode + ) + } } - async generateCode({ - messenger, - fs, - codeGenerationId, - telemetry: telemetry, - workspaceFolders, - mode, - }: { - messenger: DocMessenger - fs: VirtualFileSystem - codeGenerationId: string - telemetry: TelemetryHelper - workspaceFolders: CurrentWsFolders - mode: Mode - }): Promise<{ - newFiles: NewFileInfo[] - deletedFiles: DeletedFileInfo[] - references: CodeReference[] - codeGenerationRemainingIterationCount?: number - codeGenerationTotalIterationCount?: number - }> { - for ( - let pollingIteration = 0; - pollingIteration < this.pollCount && !this.isCancellationRequested; - ++pollingIteration - ) { - const codegenResult = await this.config.proxyClient.getCodeGeneration(this.conversationId, codeGenerationId) - const codeGenerationRemainingIterationCount = codegenResult.codeGenerationRemainingIterationCount || 0 - const codeGenerationTotalIterationCount = codegenResult.codeGenerationTotalIterationCount - - getLogger().debug(`Codegen response: %O`, codegenResult) - telemetry.setCodeGenerationResult(codegenResult.codeGenerationStatus.status) - switch (codegenResult.codeGenerationStatus.status as CodeGenerationStatus) { - case CodeGenerationStatus.COMPLETE: { - const { newFileContents, deletedFiles, references } = - await this.config.proxyClient.exportResultArchive(this.conversationId) - const newFileInfo = registerNewFiles( - fs, - newFileContents, - this.uploadId, - workspaceFolders, - this.conversationId, - docScheme - ) - telemetry.setNumberOfFilesGenerated(newFileInfo.length) - messenger.sendDocProgress(this.tabID, DocGenerationStep.GENERATING_ARTIFACTS + 1, 100, mode) - - return { - newFiles: newFileInfo, - deletedFiles: getDeletedFileInfos(deletedFiles, workspaceFolders), - references, - codeGenerationRemainingIterationCount: codeGenerationRemainingIterationCount, - codeGenerationTotalIterationCount: codeGenerationTotalIterationCount, - } - } - case CodeGenerationStatus.PREDICT_READY: - case CodeGenerationStatus.IN_PROGRESS: { - if (codegenResult.codeGenerationStatusDetail) { - const progress = getFileSummaryPercentage(codegenResult.codeGenerationStatusDetail) - messenger.sendDocProgress( - this.tabID, - progress === 100 - ? DocGenerationStep.GENERATING_ARTIFACTS - : DocGenerationStep.SUMMARIZING_FILES, - progress, - mode - ) - } - await new Promise((f) => globals.clock.setTimeout(f, this.requestDelay)) - break - } - case CodeGenerationStatus.PREDICT_FAILED: - case CodeGenerationStatus.DEBATE_FAILED: - case CodeGenerationStatus.FAILED: { - // eslint-disable-next-line unicorn/no-null - messenger.sendUpdatePromptProgress(this.tabID, null) - switch (true) { - case codegenResult.codeGenerationStatusDetail?.includes('README_TOO_LARGE'): { - throw new ReadmeTooLargeError() - } - case codegenResult.codeGenerationStatusDetail?.includes('README_UPDATE_TOO_LARGE'): { - throw new ReadmeUpdateTooLargeError(codeGenerationRemainingIterationCount) - } - case codegenResult.codeGenerationStatusDetail?.includes('WORKSPACE_TOO_LARGE'): { - throw new ContentLengthError() - } - case codegenResult.codeGenerationStatusDetail?.includes('WORKSPACE_EMPTY'): { - throw new WorkspaceEmptyError() - } - case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_UNRELATED'): { - throw new PromptUnrelatedError(codeGenerationRemainingIterationCount) - } - case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_TOO_VAGUE'): { - throw new PromptTooVagueError(codeGenerationRemainingIterationCount) - } - case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_REFUSAL'): { - throw new PromptRefusalException(codeGenerationRemainingIterationCount) - } - case codegenResult.codeGenerationStatusDetail?.includes('Guardrails'): { - throw new DocServiceError( - i18n('AWS.amazonq.doc.error.docGen.default'), - 'GuardrailsException', - codeGenerationRemainingIterationCount - ) - } - case codegenResult.codeGenerationStatusDetail?.includes('EmptyPatch'): { - if (codegenResult.codeGenerationStatusDetail?.includes('NO_CHANGE_REQUIRED')) { - throw new NoChangeRequiredException() - } - throw new DocServiceError( - i18n('AWS.amazonq.doc.error.docGen.default'), - 'EmptyPatchException' - ) - } - case codegenResult.codeGenerationStatusDetail?.includes('Throttling'): { - throw new DocServiceError( - i18n('AWS.amazonq.featureDev.error.throttling'), - 'ThrottlingException', - codeGenerationRemainingIterationCount - ) - } - default: { - throw new ToolkitError(i18n('AWS.amazonq.doc.error.docGen.default'), { - code: 'DocGenerationFailed', - }) - } - } - } - default: { - const errorMessage = `Unknown status: ${codegenResult.codeGenerationStatus.status}\n` - throw new ToolkitError(errorMessage, { code: 'UnknownDocGenerationError' }) - } - } - } - if (!this.isCancellationRequested) { - // still in progress - const errorMessage = i18n('AWS.amazonq.featureDev.error.codeGen.timeout') - throw new ToolkitError(errorMessage, { code: 'DocGenerationTimeout' }) - } - return { - newFiles: [], - deletedFiles: [], - references: [], - } + protected getScheme(): string { + return docScheme } -} -export class CodeGenState extends CodeGenBase implements SessionState { - constructor( - config: SessionStateConfig, - public filePaths: NewFileInfo[], - public deletedFiles: DeletedFileInfo[], - public references: CodeReference[], - tabID: string, - public currentIteration: number, - public uploadHistory: UploadHistory, - public codeGenerationRemainingIterationCount?: number, - public codeGenerationTotalIterationCount?: number - ) { - super(config, tabID) + protected getTimeoutErrorCode(): string { + return 'DocGenerationTimeout' } - async interact(action: SessionStateAction): Promise { - return telemetry.amazonq_codeGenerationInvoke.run(async (span) => { - try { - action.tokenSource?.token.onCancellationRequested(() => { - this.isCancellationRequested = true - if (action.tokenSource) { - this.tokenSource = action.tokenSource - } - }) + protected handleGenerationComplete( + messenger: DocMessenger, + newFileInfo: NewFileInfo[], + action: SessionStateAction + ): void { + messenger.sendDocProgress(this.tabID, DocGenerationStep.GENERATING_ARTIFACTS + 1, 100, action.mode) + } - span.record({ - amazonqConversationId: this.config.conversationId, - credentialStartUrl: AuthUtil.instance.startUrl, - }) + protected handleError(messenger: DocMessenger, codegenResult: any): Error { + // eslint-disable-next-line unicorn/no-null + messenger.sendUpdatePromptProgress(this.tabID, null) - action.telemetry.setGenerateCodeIteration(this.currentIteration) - action.telemetry.setGenerateCodeLastInvocationTime() - const codeGenerationId = randomUUID() - if (!action.tokenSource?.token.isCancellationRequested) { - action.messenger.sendDocProgress(this.tabID, DocGenerationStep.SUMMARIZING_FILES, 0, action.mode) + switch (true) { + case codegenResult.codeGenerationStatusDetail?.includes('README_TOO_LARGE'): { + return new ReadmeTooLargeError() + } + case codegenResult.codeGenerationStatusDetail?.includes('README_UPDATE_TOO_LARGE'): { + return new ReadmeUpdateTooLargeError(codegenResult.codeGenerationRemainingIterationCount || 0) + } + case codegenResult.codeGenerationStatusDetail?.includes('WORKSPACE_TOO_LARGE'): { + return new ContentLengthError() + } + case codegenResult.codeGenerationStatusDetail?.includes('WORKSPACE_EMPTY'): { + return new WorkspaceEmptyError() + } + case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_UNRELATED'): { + return new PromptUnrelatedError(codegenResult.codeGenerationRemainingIterationCount || 0) + } + case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_TOO_VAGUE'): { + return new PromptTooVagueError(codegenResult.codeGenerationRemainingIterationCount || 0) + } + case codegenResult.codeGenerationStatusDetail?.includes('PROMPT_REFUSAL'): { + return new PromptRefusalException(codegenResult.codeGenerationRemainingIterationCount || 0) + } + case codegenResult.codeGenerationStatusDetail?.includes('Guardrails'): { + return new DocServiceError(i18n('AWS.amazonq.doc.error.docGen.default'), 'GuardrailsException') + } + case codegenResult.codeGenerationStatusDetail?.includes('EmptyPatch'): { + if (codegenResult.codeGenerationStatusDetail?.includes('NO_CHANGE_REQUIRED')) { + return new NoChangeRequiredException() } - await this.config.proxyClient.startCodeGeneration( - this.config.conversationId, - this.config.uploadId, - action.msg, - Intent.DOC, - codeGenerationId, - undefined, - action.folderPath ? { documentation: { type: 'README', scope: action.folderPath } } : undefined - ) - - const codeGeneration = await this.generateCode({ - messenger: action.messenger, - fs: action.fs, - codeGenerationId, - telemetry: action.telemetry, - workspaceFolders: this.config.workspaceFolders, - mode: action.mode, + return new DocServiceError(i18n('AWS.amazonq.doc.error.docGen.default'), 'EmptyPatchException') + } + case codegenResult.codeGenerationStatusDetail?.includes('Throttling'): { + return new DocServiceError(i18n('AWS.amazonq.featureDev.error.throttling'), 'ThrottlingException') + } + default: { + return new ToolkitError(i18n('AWS.amazonq.doc.error.docGen.default'), { + code: 'DocGenerationFailed', }) + } + } + } - if (codeGeneration && !action.tokenSource?.token.isCancellationRequested) { - this.config.currentCodeGenerationId = codeGenerationId - this.currentCodeGenerationId = codeGenerationId - } - - this.filePaths = codeGeneration.newFiles - this.deletedFiles = codeGeneration.deletedFiles - this.references = codeGeneration.references - this.codeGenerationRemainingIterationCount = codeGeneration.codeGenerationRemainingIterationCount - this.codeGenerationTotalIterationCount = codeGeneration.codeGenerationTotalIterationCount + protected async startCodeGeneration(action: SessionStateAction, codeGenerationId: string): Promise { + if (!action.tokenSource?.token.isCancellationRequested) { + action.messenger.sendDocProgress(this.tabID, DocGenerationStep.SUMMARIZING_FILES, 0, action.mode as Mode) + } - if (action.uploadHistory && !action.uploadHistory[codeGenerationId] && codeGenerationId) { - action.uploadHistory[codeGenerationId] = { - timestamp: Date.now(), - uploadId: this.config.uploadId, - filePaths: codeGeneration.newFiles, - deletedFiles: codeGeneration.deletedFiles, - tabId: this.tabID, - } - } + await this.config.proxyClient.startCodeGeneration( + this.config.conversationId, + this.config.uploadId, + action.msg, + Intent.DOC, + codeGenerationId, + undefined, + action.folderPath ? { documentation: { type: 'README', scope: action.folderPath } } : undefined + ) + } - action.telemetry.setAmazonqNumberOfReferences(this.references.length) - action.telemetry.recordUserCodeGenerationTelemetry(span, this.conversationId) - const nextState = new PrepareCodeGenState( - this.config, - this.filePaths, - this.deletedFiles, - this.references, - this.tabID, - this.currentIteration + 1, - this.codeGenerationRemainingIterationCount, - this.codeGenerationTotalIterationCount, - action.uploadHistory, - this.tokenSource, - this.currentCodeGenerationId, - codeGenerationId - ) - return { - nextState, - interaction: {}, - } - } catch (e) { - throw e instanceof ToolkitError - ? e - : ToolkitError.chain(e, 'Server side error', { code: 'UnhandledCodeGenServerSideError' }) - } - }) + protected override createNextState(config: SessionStateConfig, params: CreateNextStateParams): SessionState { + return super.createNextState(config, params, DocPrepareCodeGenState) } } -export class PrepareCodeGenState implements SessionState { - public tokenSource: vscode.CancellationTokenSource - public readonly phase = DevPhase.CODEGEN - public uploadId: string - public conversationId: string - constructor( - private config: SessionStateConfig, - public filePaths: NewFileInfo[], - public deletedFiles: DeletedFileInfo[], - public references: CodeReference[], - public tabID: string, - public currentIteration: number, - public codeGenerationRemainingIterationCount?: number, - public codeGenerationTotalIterationCount?: number, - public uploadHistory: UploadHistory = {}, - public superTokenSource: vscode.CancellationTokenSource = new vscode.CancellationTokenSource(), - public currentCodeGenerationId?: string, - public codeGenerationId?: string - ) { - this.tokenSource = superTokenSource || new vscode.CancellationTokenSource() - this.uploadId = config.uploadId - this.currentCodeGenerationId = currentCodeGenerationId - this.conversationId = config.conversationId - this.uploadHistory = uploadHistory - this.codeGenerationId = codeGenerationId +export class DocPrepareCodeGenState extends BasePrepareCodeGenState { + protected preUpload(action: SessionStateAction): void { + // Do nothing } - updateWorkspaceRoot(workspaceRoot: string) { - this.config.workspaceRoots = [workspaceRoot] + protected postUpload(action: SessionStateAction): void { + // Do nothing } - async interact(action: SessionStateAction): Promise { - const uploadId = await telemetry.amazonq_createUpload.run(async (span) => { - span.record({ - amazonqConversationId: this.config.conversationId, - credentialStartUrl: AuthUtil.instance.startUrl, - }) - const { zipFileBuffer, zipFileChecksum } = await prepareRepoData( - this.config.workspaceRoots, - this.config.workspaceFolders, - action.telemetry, - span - ) - const uploadId = randomUUID() - const { uploadUrl, kmsKeyArn } = await this.config.proxyClient.createUploadUrl( - this.config.conversationId, - zipFileChecksum, - zipFileBuffer.length, - uploadId - ) - - await uploadCode(uploadUrl, zipFileBuffer, zipFileChecksum, kmsKeyArn) - - return uploadId - }) - this.uploadId = uploadId - const nextState = new CodeGenState( - { ...this.config, uploadId }, - this.filePaths, - this.deletedFiles, - this.references, - this.tabID, - this.currentIteration, - this.uploadHistory - ) - return nextState.interact(action) + protected override createNextState(config: SessionStateConfig): SessionState { + return super.createNextState(config, DocCodeGenState) } } diff --git a/packages/core/src/amazonqDoc/types.ts b/packages/core/src/amazonqDoc/types.ts index 3c9a510e2cb..2dec37a2679 100644 --- a/packages/core/src/amazonqDoc/types.ts +++ b/packages/core/src/amazonqDoc/types.ts @@ -20,7 +20,7 @@ import { SessionState as FeatureDevSessionState, SessionStateAction as FeatureDevSessionStateAction, SessionStateInteraction as FeatureDevSessionStateInteraction, -} from '../amazonqFeatureDev/types' +} from '../amazonq/commons/types' import { Mode } from './constants' import { DocMessenger } from './messenger' diff --git a/packages/core/src/amazonqFeatureDev/app.ts b/packages/core/src/amazonqFeatureDev/app.ts index a72851e8ac7..0af05cf0530 100644 --- a/packages/core/src/amazonqFeatureDev/app.ts +++ b/packages/core/src/amazonqFeatureDev/app.ts @@ -10,7 +10,7 @@ import { AmazonQAppInitContext } from '../amazonq/apps/initContext' import { MessagePublisher } from '../amazonq/messages/messagePublisher' import { MessageListener } from '../amazonq/messages/messageListener' import { fromQueryToParameters } from '../shared/utilities/uriUtils' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { TabIdNotFoundError } from './errors' import { featureDevChat, featureDevScheme } from './constants' import globals from '../shared/extensionGlobals' diff --git a/packages/core/src/amazonqFeatureDev/client/featureDev.ts b/packages/core/src/amazonqFeatureDev/client/featureDev.ts index 01be84828b3..42bf1fa9e97 100644 --- a/packages/core/src/amazonqFeatureDev/client/featureDev.ts +++ b/packages/core/src/amazonqFeatureDev/client/featureDev.ts @@ -8,9 +8,9 @@ import { omit } from 'lodash' import { AuthUtil } from '../../codewhisperer/util/authUtil' import { ServiceOptions } from '../../shared/awsClientBuilder' import globals from '../../shared/extensionGlobals' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as FeatureDevProxyClient from './featuredevproxyclient' -import { featureName } from '../constants' +import { featureName, startTaskAssistLimitReachedMessage } from '../constants' import { CodeReference } from '../../amazonq/webview/ui/connector' import { ApiError, @@ -25,13 +25,14 @@ import { createCodeWhispererChatStreamingClient } from '../../shared/clients/cod import { getClientId, getOptOutPreference, getOperatingSystem } from '../../shared/telemetry/util' import { extensionVersion } from '../../shared/vscode/env' import apiConfig = require('./codewhispererruntime-2022-11-11.json') -import { UserWrittenCodeTracker } from '../../codewhisperer' +import { UserWrittenCodeTracker } from '../../codewhisperer/tracker/userWrittenCodeTracker' import { FeatureDevCodeAcceptanceEvent, FeatureDevCodeGenerationEvent, MetricData, TelemetryEvent, } from './featuredevproxyclient' +import { FeatureClient } from '../../amazonq/client/client' // Re-enable once BE is able to handle retries. const writeAPIRetryOptions = { @@ -62,7 +63,7 @@ export async function createFeatureDevProxyClient(options?: Partial) { // Should not be stored for the whole session. // Client has to be reinitialized for each request so we always have a fresh bearerToken @@ -185,10 +186,7 @@ export class FeatureDevClient { ) if (isAwsError(e)) { // API Front-end will throw Throttling if conversation limit is reached. API Front-end monitors StartCodeGeneration for throttling - if ( - e.code === 'ThrottlingException' && - e.message.includes('StartTaskAssistCodeGeneration reached for this month.') - ) { + if (e.code === 'ThrottlingException' && e.message.includes(startTaskAssistLimitReachedMessage)) { throw new MonthlyConversationLimitError(e.message) } // BE service will throw ServiceQuota if code generation iteration limit is reached diff --git a/packages/core/src/amazonqFeatureDev/constants.ts b/packages/core/src/amazonqFeatureDev/constants.ts index 5c00e8d7bfa..4bc3ca1fdb2 100644 --- a/packages/core/src/amazonqFeatureDev/constants.ts +++ b/packages/core/src/amazonqFeatureDev/constants.ts @@ -20,6 +20,12 @@ export const generateDevFilePrompt = // Max allowed size for file collection export const maxRepoSizeBytes = 200 * 1024 * 1024 +export const startCodeGenClientErrorMessages = ['Improperly formed request', 'Resource not found'] +export const startTaskAssistLimitReachedMessage = 'StartTaskAssistCodeGeneration reached for this month.' +export const clientErrorMessages = [ + 'The folder you chose did not contain any source files in a supported language. Choose another folder and try again.', +] + // License text that's used in codewhisperer reference log export const referenceLogText = (reference: CodeReference) => `[${new Date().toLocaleString()}] Accepted recommendation from Amazon Q. Code provided with reference under { diff --git a/packages/core/src/awsService/ec2/explorer/ec2InstanceNode.ts b/packages/core/src/awsService/ec2/explorer/ec2InstanceNode.ts index d00fe55e9c2..e6d0ab4113d 100644 --- a/packages/core/src/awsService/ec2/explorer/ec2InstanceNode.ts +++ b/packages/core/src/awsService/ec2/explorer/ec2InstanceNode.ts @@ -12,7 +12,7 @@ import { getIconCode } from '../utils' import { Ec2Selection } from '../prompter' import { Ec2Node, Ec2ParentNode } from './ec2ParentNode' import { EC2 } from 'aws-sdk' -import { getLogger } from '../../../shared' +import { getLogger } from '../../../shared/logger/logger' export const Ec2InstanceRunningContext = 'awsEc2RunningNode' export const Ec2InstanceStoppedContext = 'awsEc2StoppedNode' diff --git a/packages/core/src/awsService/ec2/sshKeyPair.ts b/packages/core/src/awsService/ec2/sshKeyPair.ts index 369c14964c7..cb67ca39ba1 100644 --- a/packages/core/src/awsService/ec2/sshKeyPair.ts +++ b/packages/core/src/awsService/ec2/sshKeyPair.ts @@ -3,7 +3,8 @@ * SPDX-License-Identifier: Apache-2.0 */ import os from 'os' -import { fs, globals } from '../../shared' +import globals from '../../shared/extensionGlobals' +import { fs } from '../../shared/fs/fs' import { ToolkitError } from '../../shared/errors' import { tryRun } from '../../shared/utilities/pathFind' import { Timeout } from '../../shared/utilities/timeoutUtils' diff --git a/packages/core/src/awsService/ec2/utils.ts b/packages/core/src/awsService/ec2/utils.ts index 105d2da06ff..e54f4dfb970 100644 --- a/packages/core/src/awsService/ec2/utils.ts +++ b/packages/core/src/awsService/ec2/utils.ts @@ -8,7 +8,7 @@ import { copyToClipboard } from '../../shared/utilities/messages' import { Ec2Selection } from './prompter' import { sshLogFileLocation } from '../../shared/sshConfig' import { SSM } from 'aws-sdk' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' export function getIconCode(instance: SafeEc2Instance) { if (instance.LastSeenStatus === 'running') { diff --git a/packages/core/src/awsService/ecr/commands/createRepository.ts b/packages/core/src/awsService/ecr/commands/createRepository.ts index 5f26409f6e0..d2c75ff3c46 100644 --- a/packages/core/src/awsService/ecr/commands/createRepository.ts +++ b/packages/core/src/awsService/ecr/commands/createRepository.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { EcrNode } from '../explorer/ecrNode' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/ecr/commands/deleteRepository.ts b/packages/core/src/awsService/ecr/commands/deleteRepository.ts index aa258e00633..ec14841d0d6 100644 --- a/packages/core/src/awsService/ecr/commands/deleteRepository.ts +++ b/packages/core/src/awsService/ecr/commands/deleteRepository.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { EcrRepositoryNode } from '../explorer/ecrRepositoryNode' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/ecr/commands/deleteTag.ts b/packages/core/src/awsService/ecr/commands/deleteTag.ts index 86f153f0062..a037db0934b 100644 --- a/packages/core/src/awsService/ecr/commands/deleteTag.ts +++ b/packages/core/src/awsService/ecr/commands/deleteTag.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import { EcrTagNode } from '../explorer/ecrTagNode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showConfirmationMessage, showViewLogsMessage } from '../../../shared/utilities/messages' import { telemetry } from '../../../shared/telemetry/telemetry' diff --git a/packages/core/src/awsService/ecs/util.ts b/packages/core/src/awsService/ecs/util.ts index 7996107e481..db506c33867 100644 --- a/packages/core/src/awsService/ecs/util.ts +++ b/packages/core/src/awsService/ecs/util.ts @@ -14,7 +14,7 @@ import { ToolkitError } from '../../shared/errors' import { isCloud9 } from '../../shared/extensionUtilities' import { getOrInstallCli } from '../../shared/utilities/cliUtils' import { Session, TaskDefinition } from 'aws-sdk/clients/ecs' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { SSM } from 'aws-sdk' import { fromExtensionManifest } from '../../shared/settings' import { ecsTaskPermissionsUrl } from '../../shared/constants' diff --git a/packages/core/src/awsService/iot/commands/attachCertificate.ts b/packages/core/src/awsService/iot/commands/attachCertificate.ts index c77f1d36d44..be9edd03d89 100644 --- a/packages/core/src/awsService/iot/commands/attachCertificate.ts +++ b/packages/core/src/awsService/iot/commands/attachCertificate.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotThingNode } from '../explorer/iotThingNode' import { showViewLogsMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/attachPolicy.ts b/packages/core/src/awsService/iot/commands/attachPolicy.ts index 6eb6f721790..e9d40f1528b 100644 --- a/packages/core/src/awsService/iot/commands/attachPolicy.ts +++ b/packages/core/src/awsService/iot/commands/attachPolicy.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { createQuickPick, DataQuickPickItem } from '../../../shared/ui/pickerPrompter' diff --git a/packages/core/src/awsService/iot/commands/copyEndpoint.ts b/packages/core/src/awsService/iot/commands/copyEndpoint.ts index 64c9f5462de..0846250c5cb 100644 --- a/packages/core/src/awsService/iot/commands/copyEndpoint.ts +++ b/packages/core/src/awsService/iot/commands/copyEndpoint.ts @@ -7,7 +7,7 @@ import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotNode } from '../explorer/iotNodes' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { copyToClipboard } from '../../../shared/utilities/messages' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' /** * Copies the path to the folder or file represented by the given node. diff --git a/packages/core/src/awsService/iot/commands/createCert.ts b/packages/core/src/awsService/iot/commands/createCert.ts index 3f6eae413db..c954de28886 100644 --- a/packages/core/src/awsService/iot/commands/createCert.ts +++ b/packages/core/src/awsService/iot/commands/createCert.ts @@ -5,13 +5,13 @@ import * as vscode from 'vscode' import * as path from 'path' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { IotCertsFolderNode } from '../explorer/iotCertFolderNode' import { fileExists } from '../../../shared/filesystemUtilities' import { Iot } from 'aws-sdk' -import { fs } from '../../../shared' +import { fs } from '../../../shared/fs/fs' // eslint-disable-next-line @typescript-eslint/naming-convention const MODE_RW_R_R = 0o644 // File permission 0644 rw-r--r-- for PEM files. diff --git a/packages/core/src/awsService/iot/commands/createPolicy.ts b/packages/core/src/awsService/iot/commands/createPolicy.ts index ba082811e34..1bb04618d7f 100644 --- a/packages/core/src/awsService/iot/commands/createPolicy.ts +++ b/packages/core/src/awsService/iot/commands/createPolicy.ts @@ -4,11 +4,11 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { IotPolicyFolderNode } from '../explorer/iotPolicyFolderNode' -import { fs } from '../../../shared' +import { fs } from '../../../shared/fs/fs' /** * Creates a policy from a policy document. diff --git a/packages/core/src/awsService/iot/commands/createPolicyVersion.ts b/packages/core/src/awsService/iot/commands/createPolicyVersion.ts index 257626489f6..4719277a5ec 100644 --- a/packages/core/src/awsService/iot/commands/createPolicyVersion.ts +++ b/packages/core/src/awsService/iot/commands/createPolicyVersion.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { IotPolicyWithVersionsNode } from '../explorer/iotPolicyNode' diff --git a/packages/core/src/awsService/iot/commands/createThing.ts b/packages/core/src/awsService/iot/commands/createThing.ts index 2d9b1f11d4e..8909d894911 100644 --- a/packages/core/src/awsService/iot/commands/createThing.ts +++ b/packages/core/src/awsService/iot/commands/createThing.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../../shared/utilities/messages' import { IotThingFolderNode } from '../explorer/iotThingFolderNode' diff --git a/packages/core/src/awsService/iot/commands/deleteCert.ts b/packages/core/src/awsService/iot/commands/deleteCert.ts index 058dd8ae4d8..592bbb66339 100644 --- a/packages/core/src/awsService/iot/commands/deleteCert.ts +++ b/packages/core/src/awsService/iot/commands/deleteCert.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' import { IotCertWithPoliciesNode } from '../explorer/iotCertificateNode' diff --git a/packages/core/src/awsService/iot/commands/deletePolicy.ts b/packages/core/src/awsService/iot/commands/deletePolicy.ts index 80ff20b6727..4d09ffd0a26 100644 --- a/packages/core/src/awsService/iot/commands/deletePolicy.ts +++ b/packages/core/src/awsService/iot/commands/deletePolicy.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotPolicyWithVersionsNode } from '../explorer/iotPolicyNode' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/deletePolicyVersion.ts b/packages/core/src/awsService/iot/commands/deletePolicyVersion.ts index 4dbfd4fcde3..b34708c4ee2 100644 --- a/packages/core/src/awsService/iot/commands/deletePolicyVersion.ts +++ b/packages/core/src/awsService/iot/commands/deletePolicyVersion.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' import { IotPolicyVersionNode } from '../explorer/iotPolicyVersionNode' diff --git a/packages/core/src/awsService/iot/commands/deleteThing.ts b/packages/core/src/awsService/iot/commands/deleteThing.ts index d96aa92a35b..4aecb0d126a 100644 --- a/packages/core/src/awsService/iot/commands/deleteThing.ts +++ b/packages/core/src/awsService/iot/commands/deleteThing.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotThingNode } from '../explorer/iotThingNode' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/detachCert.ts b/packages/core/src/awsService/iot/commands/detachCert.ts index a8384e34b79..536869894dc 100644 --- a/packages/core/src/awsService/iot/commands/detachCert.ts +++ b/packages/core/src/awsService/iot/commands/detachCert.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotThingCertNode } from '../explorer/iotCertificateNode' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/detachPolicy.ts b/packages/core/src/awsService/iot/commands/detachPolicy.ts index 9370b450f59..a85ad8fe5a2 100644 --- a/packages/core/src/awsService/iot/commands/detachPolicy.ts +++ b/packages/core/src/awsService/iot/commands/detachPolicy.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' import { IotPolicyCertNode } from '../explorer/iotPolicyNode' diff --git a/packages/core/src/awsService/iot/commands/setDefaultPolicy.ts b/packages/core/src/awsService/iot/commands/setDefaultPolicy.ts index 355c79cf96f..8e406719bff 100644 --- a/packages/core/src/awsService/iot/commands/setDefaultPolicy.ts +++ b/packages/core/src/awsService/iot/commands/setDefaultPolicy.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotPolicyVersionNode } from '../explorer/iotPolicyVersionNode' import { showViewLogsMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/updateCert.ts b/packages/core/src/awsService/iot/commands/updateCert.ts index a6e9d1ecd74..53a7aa34181 100644 --- a/packages/core/src/awsService/iot/commands/updateCert.ts +++ b/packages/core/src/awsService/iot/commands/updateCert.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { IotCertificateNode } from '../explorer/iotCertificateNode' import { showViewLogsMessage, showConfirmationMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/commands/viewPolicyVersion.ts b/packages/core/src/awsService/iot/commands/viewPolicyVersion.ts index 1d788257ace..a6c33bbeb86 100644 --- a/packages/core/src/awsService/iot/commands/viewPolicyVersion.ts +++ b/packages/core/src/awsService/iot/commands/viewPolicyVersion.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import { localize } from '../../../shared/utilities/vsCodeUtils' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { getTabSizeSetting } from '../../../shared/utilities/editorUtilities' import { IotPolicyVersionNode } from '../explorer/iotPolicyVersionNode' import { showViewLogsMessage } from '../../../shared/utilities/messages' diff --git a/packages/core/src/awsService/iot/explorer/iotCertFolderNode.ts b/packages/core/src/awsService/iot/explorer/iotCertFolderNode.ts index 98c1b664f78..240da3136f4 100644 --- a/packages/core/src/awsService/iot/explorer/iotCertFolderNode.ts +++ b/packages/core/src/awsService/iot/explorer/iotCertFolderNode.ts @@ -13,7 +13,7 @@ import { localize } from '../../../shared/utilities/vsCodeUtils' import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { ChildNodePage } from '../../../awsexplorer/childNodeLoader' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { IotCertWithPoliciesNode } from './iotCertificateNode' import { IotNode } from './iotNodes' import { Settings } from '../../../shared/settings' diff --git a/packages/core/src/awsService/iot/explorer/iotCertificateNode.ts b/packages/core/src/awsService/iot/explorer/iotCertificateNode.ts index d77becff9bb..a90afec36b5 100644 --- a/packages/core/src/awsService/iot/explorer/iotCertificateNode.ts +++ b/packages/core/src/awsService/iot/explorer/iotCertificateNode.ts @@ -15,7 +15,7 @@ import { makeChildrenNodes } from '../../../shared/treeview/utils' import { localize } from '../../../shared/utilities/vsCodeUtils' import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { IotCertsFolderNode } from './iotCertFolderNode' import { IotThingNode } from './iotThingNode' import { IotPolicyCertNode } from './iotPolicyNode' diff --git a/packages/core/src/awsService/iot/explorer/iotPolicyFolderNode.ts b/packages/core/src/awsService/iot/explorer/iotPolicyFolderNode.ts index 36af63cf495..ed7a39270d5 100644 --- a/packages/core/src/awsService/iot/explorer/iotPolicyFolderNode.ts +++ b/packages/core/src/awsService/iot/explorer/iotPolicyFolderNode.ts @@ -13,7 +13,7 @@ import { localize } from '../../../shared/utilities/vsCodeUtils' import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { ChildNodePage } from '../../../awsexplorer/childNodeLoader' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { IotPolicyWithVersionsNode } from './iotPolicyNode' import { IotNode } from './iotNodes' import { Settings } from '../../../shared/settings' diff --git a/packages/core/src/awsService/iot/explorer/iotThingFolderNode.ts b/packages/core/src/awsService/iot/explorer/iotThingFolderNode.ts index 1965047712d..e3dee64c896 100644 --- a/packages/core/src/awsService/iot/explorer/iotThingFolderNode.ts +++ b/packages/core/src/awsService/iot/explorer/iotThingFolderNode.ts @@ -14,7 +14,7 @@ import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { ChildNodePage } from '../../../awsexplorer/childNodeLoader' import { IotThingNode } from './iotThingNode' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { IotNode } from './iotNodes' import { Settings } from '../../../shared/settings' import { ClassToInterfaceType } from '../../../shared/utilities/tsUtils' diff --git a/packages/core/src/awsService/iot/explorer/iotThingNode.ts b/packages/core/src/awsService/iot/explorer/iotThingNode.ts index ad40a6e1411..c6bc14014a3 100644 --- a/packages/core/src/awsService/iot/explorer/iotThingNode.ts +++ b/packages/core/src/awsService/iot/explorer/iotThingNode.ts @@ -15,7 +15,7 @@ import { makeChildrenNodes } from '../../../shared/treeview/utils' import { localize } from '../../../shared/utilities/vsCodeUtils' import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { IotThingFolderNode } from './iotThingFolderNode' import { IotThingCertNode } from './iotCertificateNode' import { getIcon } from '../../../shared/icons' diff --git a/packages/core/src/awsService/redshift/messageUtils.ts b/packages/core/src/awsService/redshift/messageUtils.ts index edd470c2d32..a1e8420b84d 100644 --- a/packages/core/src/awsService/redshift/messageUtils.ts +++ b/packages/core/src/awsService/redshift/messageUtils.ts @@ -4,7 +4,7 @@ */ import globals from '../../shared/extensionGlobals' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { showViewLogsMessage } from '../../shared/utilities/messages' /** diff --git a/packages/core/src/awsService/s3/commands/createBucket.ts b/packages/core/src/awsService/s3/commands/createBucket.ts index 82313cb8379..cd451a9da5e 100644 --- a/packages/core/src/awsService/s3/commands/createBucket.ts +++ b/packages/core/src/awsService/s3/commands/createBucket.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { S3Node } from '../explorer/s3Nodes' import { validateBucketName } from '../util' diff --git a/packages/core/src/awsService/s3/commands/createFolder.ts b/packages/core/src/awsService/s3/commands/createFolder.ts index 785aff0ad48..370f55a32b4 100644 --- a/packages/core/src/awsService/s3/commands/createFolder.ts +++ b/packages/core/src/awsService/s3/commands/createFolder.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import { DEFAULT_DELIMITER } from '../../../shared/clients/s3Client' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { S3BucketNode } from '../explorer/s3BucketNode' import { S3FolderNode } from '../explorer/s3FolderNode' import { localize } from '../../../shared/utilities/vsCodeUtils' diff --git a/packages/core/src/awsService/s3/commands/deleteBucket.ts b/packages/core/src/awsService/s3/commands/deleteBucket.ts index c2f9818b718..b5d5b3f115c 100644 --- a/packages/core/src/awsService/s3/commands/deleteBucket.ts +++ b/packages/core/src/awsService/s3/commands/deleteBucket.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { localize } from '../../../shared/utilities/vsCodeUtils' import { S3BucketNode } from '../explorer/s3BucketNode' import { S3Node } from '../explorer/s3Nodes' diff --git a/packages/core/src/awsService/s3/commands/deleteFile.ts b/packages/core/src/awsService/s3/commands/deleteFile.ts index 7b0f86eabde..cb54331b3aa 100644 --- a/packages/core/src/awsService/s3/commands/deleteFile.ts +++ b/packages/core/src/awsService/s3/commands/deleteFile.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as localizedText from '../../../shared/localizedText' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { addCodiconToString } from '../../../shared/utilities/textUtilities' import { localize } from '../../../shared/utilities/vsCodeUtils' import { S3BucketNode } from '../explorer/s3BucketNode' diff --git a/packages/core/src/awsService/s3/commands/uploadFile.ts b/packages/core/src/awsService/s3/commands/uploadFile.ts index 41093a96f2f..1adf7f0e7ab 100644 --- a/packages/core/src/awsService/s3/commands/uploadFile.ts +++ b/packages/core/src/awsService/s3/commands/uploadFile.ts @@ -8,7 +8,7 @@ import * as mime from 'mime-types' import * as vscode from 'vscode' import { statSync } from 'fs' // eslint-disable-line no-restricted-imports import { S3 } from 'aws-sdk' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { S3Node } from '../explorer/s3Nodes' import { readablePath } from '../util' import { localize } from '../../../shared/utilities/vsCodeUtils' diff --git a/packages/core/src/awsService/s3/commands/uploadFileToParent.ts b/packages/core/src/awsService/s3/commands/uploadFileToParent.ts index 037512a074d..211ceb326e6 100644 --- a/packages/core/src/awsService/s3/commands/uploadFileToParent.ts +++ b/packages/core/src/awsService/s3/commands/uploadFileToParent.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { S3FileNode } from '../explorer/s3FileNode' import { uploadFileCommand } from './uploadFile' diff --git a/packages/core/src/awsService/s3/explorer/s3BucketNode.ts b/packages/core/src/awsService/s3/explorer/s3BucketNode.ts index c24efee9deb..253edde2f67 100644 --- a/packages/core/src/awsService/s3/explorer/s3BucketNode.ts +++ b/packages/core/src/awsService/s3/explorer/s3BucketNode.ts @@ -17,7 +17,7 @@ import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { S3FileNode } from './s3FileNode' import { S3FolderNode } from './s3FolderNode' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { S3Node } from './s3Nodes' import { getIcon } from '../../../shared/icons' import { Settings } from '../../../shared/settings' diff --git a/packages/core/src/awsService/s3/explorer/s3FolderNode.ts b/packages/core/src/awsService/s3/explorer/s3FolderNode.ts index d8c5ea4c0d9..0553250c731 100644 --- a/packages/core/src/awsService/s3/explorer/s3FolderNode.ts +++ b/packages/core/src/awsService/s3/explorer/s3FolderNode.ts @@ -15,7 +15,7 @@ import { ChildNodeLoader } from '../../../awsexplorer/childNodeLoader' import { ChildNodePage } from '../../../awsexplorer/childNodeLoader' import { S3FileNode } from './s3FileNode' import { inspect } from 'util' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { getIcon } from '../../../shared/icons' import { Settings } from '../../../shared/settings' import { ClassToInterfaceType } from '../../../shared/utilities/tsUtils' diff --git a/packages/core/src/awsService/s3/fileViewerManager.ts b/packages/core/src/awsService/s3/fileViewerManager.ts index d800a3bfeee..730ceb90c28 100644 --- a/packages/core/src/awsService/s3/fileViewerManager.ts +++ b/packages/core/src/awsService/s3/fileViewerManager.ts @@ -7,7 +7,7 @@ import * as path from 'path' import * as vscode from 'vscode' import * as mime from 'mime-types' import * as S3 from '../../shared/clients/s3Client' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { showConfirmationMessage } from '../../shared/utilities/messages' import { localize, openUrl } from '../../shared/utilities/vsCodeUtils' import { CancellationError } from '../../shared/utilities/timeoutUtils' diff --git a/packages/core/src/awsexplorer/activation.ts b/packages/core/src/awsexplorer/activation.ts index 224bbadb2fb..4452648019e 100644 --- a/packages/core/src/awsexplorer/activation.ts +++ b/packages/core/src/awsexplorer/activation.ts @@ -9,7 +9,7 @@ import { CloudFormationStackNode } from '../lambda/explorer/cloudFormationNodes' import globals from '../shared/extensionGlobals' import { isCloud9, isSageMaker } from '../shared/extensionUtilities' import { ExtContext, VSCODE_EXTENSION_ID } from '../shared/extensions' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { RegionProvider } from '../shared/regions/regionProvider' import { AWSResourceNode } from '../shared/treeview/nodes/awsResourceNode' import { AWSTreeNodeBase } from '../shared/treeview/nodes/awsTreeNodeBase' @@ -29,9 +29,9 @@ import { CodeCatalystAuthenticationProvider } from '../codecatalyst/auth' import { S3FolderNode } from '../awsService/s3/explorer/s3FolderNode' import { AmazonQNode, refreshAmazonQ, refreshAmazonQRootNode } from '../amazonq/explorer/amazonQTreeNode' import { activateViewsShared, registerToolView } from './activationShared' -import { isExtensionInstalled } from '../shared/utilities' -import { CommonAuthViewProvider } from '../login/webview' -import { setContext } from '../shared' +import { isExtensionInstalled } from '../shared/utilities/vsCodeUtils' +import { CommonAuthViewProvider } from '../login/webview/commonAuthViewProvider' +import { setContext } from '../shared/vscode/setContext' import { TreeNode } from '../shared/treeview/resourceTreeDataProvider' import { getSourceNode } from '../shared/utilities/treeNodeUtils' import { openAwsCFNConsoleCommand, openAwsConsoleCommand } from '../shared/awsConsole' diff --git a/packages/core/src/awsexplorer/awsExplorer.ts b/packages/core/src/awsexplorer/awsExplorer.ts index fb4b1b455df..63707527173 100644 --- a/packages/core/src/awsexplorer/awsExplorer.ts +++ b/packages/core/src/awsexplorer/awsExplorer.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { Auth } from '../auth/auth' import { getIdeProperties } from '../shared/extensionUtilities' import { getIcon } from '../shared/icons' -import { getLogger, Logger } from '../shared/logger' +import { getLogger, Logger } from '../shared/logger/logger' import { RegionProvider } from '../shared/regions/regionProvider' import { RefreshableAwsTreeProvider } from '../shared/treeview/awsTreeProvider' import { AWSCommandTreeNode } from '../shared/treeview/nodes/awsCommandTreeNode' diff --git a/packages/core/src/awsexplorer/commands/loadMoreChildren.ts b/packages/core/src/awsexplorer/commands/loadMoreChildren.ts index 9d256664792..6bc37b770e2 100644 --- a/packages/core/src/awsexplorer/commands/loadMoreChildren.ts +++ b/packages/core/src/awsexplorer/commands/loadMoreChildren.ts @@ -4,7 +4,7 @@ */ import { localize } from '../../shared/utilities/vsCodeUtils' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { AWSTreeNodeBase } from '../../shared/treeview/nodes/awsTreeNodeBase' import { LoadMoreNode } from '../../shared/treeview/nodes/loadMoreNode' import { AwsExplorer } from '../awsExplorer' diff --git a/packages/core/src/codecatalyst/auth.ts b/packages/core/src/codecatalyst/auth.ts index 11e31a37c4f..f1d3ea82954 100644 --- a/packages/core/src/codecatalyst/auth.ts +++ b/packages/core/src/codecatalyst/auth.ts @@ -8,7 +8,7 @@ import { onAccessDeniedException, CodeCatalystClient, createClient } from '../sh import { Auth } from '../auth/auth' import * as localizedText from '../shared/localizedText' import { getSecondaryAuth, setScopes } from '../auth/secondaryAuth' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import globals from '../shared/extensionGlobals' import { ToolkitError, isAwsError } from '../shared/errors' import { MetricName, MetricShapes, telemetry } from '../shared/telemetry/telemetry' diff --git a/packages/core/src/codecatalyst/devEnv.ts b/packages/core/src/codecatalyst/devEnv.ts index 44db151d8de..962c772eb2f 100644 --- a/packages/core/src/codecatalyst/devEnv.ts +++ b/packages/core/src/codecatalyst/devEnv.ts @@ -8,7 +8,7 @@ import { DevEnvActivity, DevEnvClient } from '../shared/clients/devenvClient' import globals from '../shared/extensionGlobals' import * as vscode from 'vscode' import { waitUntil } from '../shared/utilities/timeoutUtils' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { CodeCatalystAuthenticationProvider } from './auth' import { getThisDevEnv } from './model' import { isInDevEnv } from '../shared/vscode/env' diff --git a/packages/core/src/codecatalyst/devfile.ts b/packages/core/src/codecatalyst/devfile.ts index 851a706b157..f8a857e2555 100644 --- a/packages/core/src/codecatalyst/devfile.ts +++ b/packages/core/src/codecatalyst/devfile.ts @@ -10,7 +10,7 @@ import * as vscode from 'vscode' import * as path from 'path' import { DevEnvClient } from '../shared/clients/devenvClient' import { DevfileRegistry, devfileGlobPattern } from '../shared/fs/devfileRegistry' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { Commands } from '../shared/vscode/commands2' import { checkUnsavedChanges } from '../shared/utilities/workspaceUtils' import { ToolkitError } from '../shared/errors' diff --git a/packages/core/src/codecatalyst/explorer.ts b/packages/core/src/codecatalyst/explorer.ts index d20fcc6d37d..af3d6a20474 100644 --- a/packages/core/src/codecatalyst/explorer.ts +++ b/packages/core/src/codecatalyst/explorer.ts @@ -12,7 +12,7 @@ import { CodeCatalystAuthenticationProvider } from './auth' import { CodeCatalystCommands, codecatalystConnectionsCmd } from './commands' import { ConnectedDevEnv, getDevfileLocation, getThisDevEnv } from './model' import * as codecatalyst from './model' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { SsoConnection } from '../auth/connection' import { openUrl } from '../shared/utilities/vsCodeUtils' diff --git a/packages/core/src/codecatalyst/model.ts b/packages/core/src/codecatalyst/model.ts index d49d8780cde..0451f9be95b 100644 --- a/packages/core/src/codecatalyst/model.ts +++ b/packages/core/src/codecatalyst/model.ts @@ -15,7 +15,7 @@ import { getCodeCatalystConfig, } from '../shared/clients/codecatalystClient' import { DevEnvClient } from '../shared/clients/devenvClient' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { AsyncCollection, toCollection } from '../shared/utilities/asyncCollection' import { getCodeCatalystSpaceName, getCodeCatalystProjectName, getCodeCatalystDevEnvId } from '../shared/vscode/env' import { sshAgentSocketVariable, startSshAgent, startVscodeRemote } from '../shared/extensions/ssh' @@ -29,7 +29,7 @@ import { ToolkitError } from '../shared/errors' import { Result } from '../shared/utilities/result' import { EnvProvider, VscodeRemoteConnection, createBoundProcess, ensureDependencies } from '../shared/remoteSession' import { SshConfig, sshLogFileLocation } from '../shared/sshConfig' -import { fs } from '../shared' +import { fs } from '../shared/fs/fs' export type DevEnvironmentId = Pick export const connectScriptPrefix = 'codecatalyst_connect' diff --git a/packages/core/src/codecatalyst/reconnect.ts b/packages/core/src/codecatalyst/reconnect.ts index ecedbd3eb04..9e0ab491f38 100644 --- a/packages/core/src/codecatalyst/reconnect.ts +++ b/packages/core/src/codecatalyst/reconnect.ts @@ -7,7 +7,7 @@ import * as nls from 'vscode-nls' import * as vscode from 'vscode' import { CodeCatalystClient, createClient, DevEnvironment } from '../shared/clients/codecatalystClient' import { ExtContext } from '../shared/extensions' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { sleep } from '../shared/utilities/timeoutUtils' import { DevEnvironmentSettings } from './commands' import { codeCatalystConnectCommand, DevEnvironmentId, DevEnvMemento } from './model' diff --git a/packages/core/src/codecatalyst/uriHandlers.ts b/packages/core/src/codecatalyst/uriHandlers.ts index b34dd25761b..7e4f9080519 100644 --- a/packages/core/src/codecatalyst/uriHandlers.ts +++ b/packages/core/src/codecatalyst/uriHandlers.ts @@ -8,7 +8,7 @@ import { SearchParams, UriHandler } from '../shared/vscode/uriHandler' import { getCodeCatalystConfig } from '../shared/clients/codecatalystClient' import { CodeCatalystCommands } from './commands' import { defaultSsoRegion } from '../auth/connection' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { builderIdStartUrl } from '../auth/sso/constants' type ConnectParams = { diff --git a/packages/core/src/codecatalyst/utils.ts b/packages/core/src/codecatalyst/utils.ts index 6a704ddeb07..b28aea75d4d 100644 --- a/packages/core/src/codecatalyst/utils.ts +++ b/packages/core/src/codecatalyst/utils.ts @@ -7,7 +7,7 @@ import { Ides } from 'aws-sdk/clients/codecatalyst' import * as vscode from 'vscode' import { CodeCatalystResource, getCodeCatalystConfig } from '../shared/clients/codecatalystClient' import { pushIf } from '../shared/utilities/collectionUtils' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' /** * Builds a web URL from the given CodeCatalyst object. diff --git a/packages/core/src/codewhisperer/activation.ts b/packages/core/src/codewhisperer/activation.ts index 6300c9a313a..86c73aee608 100644 --- a/packages/core/src/codewhisperer/activation.ts +++ b/packages/core/src/codewhisperer/activation.ts @@ -21,7 +21,7 @@ import { CodeWhispererSettings } from './util/codewhispererSettings' import { ExtContext } from '../shared/extensions' import { CodeWhispererTracker } from './tracker/codewhispererTracker' import * as codewhispererClient from './client/codewhisperer' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { enableCodeSuggestions, toggleCodeSuggestions, @@ -83,7 +83,7 @@ import { securityScanLanguageContext } from './util/securityScanLanguageContext' import { registerWebviewErrorHandler } from '../webviews/server' import { logAndShowError, logAndShowWebviewError } from '../shared/utilities/logAndShowUtils' import { openSettings } from '../shared/settings' -import { telemetry } from '../shared/telemetry' +import { telemetry } from '../shared/telemetry/telemetry' import { FeatureConfigProvider } from '../shared/featureConfig' import { SecurityIssueProvider } from './service/securityIssueProvider' import { SecurityIssueTreeViewProvider } from './service/securityIssueTreeViewProvider' diff --git a/packages/core/src/codewhisperer/client/agent.ts b/packages/core/src/codewhisperer/client/agent.ts index 52152d2a616..6df3629fbed 100644 --- a/packages/core/src/codewhisperer/client/agent.ts +++ b/packages/core/src/codewhisperer/client/agent.ts @@ -14,7 +14,7 @@ import * as vscode from 'vscode' import http from 'http' import https from 'https' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' // The path to the exported class can be found in the npm contents // https://www.npmjs.com/package/@vscode/proxy-agent?activeTab=code diff --git a/packages/core/src/codewhisperer/client/codewhisperer.ts b/packages/core/src/codewhisperer/client/codewhisperer.ts index ceaf020fb02..68331c53ef4 100644 --- a/packages/core/src/codewhisperer/client/codewhisperer.ts +++ b/packages/core/src/codewhisperer/client/codewhisperer.ts @@ -18,7 +18,7 @@ import { pageableToCollection } from '../../shared/utilities/collectionUtils' import apiConfig = require('./service-2.json') import userApiConfig = require('./user-service-2.json') import { CodeWhispererSessionState } from '../util/codeWhispererSession' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { indent } from '../../shared/utilities/textUtilities' import { keepAliveHeader } from './agent' import { getClientId, getOptOutPreference, getOperatingSystem } from '../../shared/telemetry/util' diff --git a/packages/core/src/codewhisperer/commands/basicCommands.ts b/packages/core/src/codewhisperer/commands/basicCommands.ts index 3693bbd4d6c..364d8b07e4e 100644 --- a/packages/core/src/codewhisperer/commands/basicCommands.ts +++ b/packages/core/src/codewhisperer/commands/basicCommands.ts @@ -27,7 +27,7 @@ import { connectToEnterpriseSso, getStartUrl } from '../util/getStartUrl' import { showCodeWhispererConnectionPrompt } from '../util/showSsoPrompt' import { ReferenceLogViewProvider } from '../service/referenceLogViewProvider' import { AuthUtil } from '../util/authUtil' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { isExtensionActive, isExtensionInstalled, localize, openUrl } from '../../shared/utilities/vsCodeUtils' import { getPersistedCustomizations, @@ -44,7 +44,8 @@ import { import { Mutable } from '../../shared/utilities/tsUtils' import { CodeWhispererSource } from './types' import { TelemetryHelper } from '../util/telemetryHelper' -import { Auth, AwsConnection } from '../../auth' +import { Auth } from '../../auth/auth' +import { AwsConnection } from '../../auth/connection' import { once } from '../../shared/utilities/functionUtils' import { focusAmazonQPanel } from '../../codewhispererChat/commands/registerCommands' import { removeDiagnostic } from '../service/diagnosticsProvider' @@ -61,13 +62,13 @@ import { SecurityIssueProvider } from '../service/securityIssueProvider' import { CodeWhispererSettings } from '../util/codewhispererSettings' import { closeDiff, getPatchedCode } from '../../shared/utilities/diffUtils' import { insertCommentAboveLine } from '../../shared/utilities/commentUtils' -import { cancel, confirm } from '../../shared' import { startCodeFixGeneration } from './startCodeFixGeneration' import { DefaultAmazonQAppInitContext } from '../../amazonq/apps/initContext' import path from 'path' import { UserWrittenCodeTracker } from '../tracker/userWrittenCodeTracker' import { parsePatch } from 'diff' import { createCodeIssueGroupingStrategyPrompter } from '../ui/prompters' +import { cancel, confirm } from '../../shared/localizedText' const MessageTimeOut = 5_000 diff --git a/packages/core/src/codewhisperer/commands/onInlineAcceptance.ts b/packages/core/src/codewhisperer/commands/onInlineAcceptance.ts index a9a888ef8c4..a0845892dbe 100644 --- a/packages/core/src/codewhisperer/commands/onInlineAcceptance.ts +++ b/packages/core/src/codewhisperer/commands/onInlineAcceptance.ts @@ -30,7 +30,7 @@ import { CodeWhispererSessionState } from '../util/codeWhispererSession' import path from 'path' import { RecommendationService } from '../service/recommendationService' import { Container } from '../service/serviceContainer' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { TelemetryHelper } from '../util/telemetryHelper' import { UserWrittenCodeTracker } from '../tracker/userWrittenCodeTracker' diff --git a/packages/core/src/codewhisperer/commands/startCodeFixGeneration.ts b/packages/core/src/codewhisperer/commands/startCodeFixGeneration.ts index 32566c259e3..a255864c7eb 100644 --- a/packages/core/src/codewhisperer/commands/startCodeFixGeneration.ts +++ b/packages/core/src/codewhisperer/commands/startCodeFixGeneration.ts @@ -2,7 +2,8 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -import { fs, getLogger, tempDirPath } from '../../shared' +import { fs } from '../../shared/fs/fs' +import { getLogger } from '../../shared/logger/logger' import { createCodeFixJob, getCodeFixJob, @@ -16,6 +17,7 @@ import { CreateCodeFixError } from '../models/errors' import AdmZip from 'adm-zip' import path from 'path' import { TelemetryHelper } from '../util/telemetryHelper' +import { tempDirPath } from '../../shared/filesystemUtilities' export async function startCodeFixGeneration( client: DefaultCodeWhispererClient, diff --git a/packages/core/src/codewhisperer/commands/startSecurityScan.ts b/packages/core/src/codewhisperer/commands/startSecurityScan.ts index 8c222f83760..5aef9184e2e 100644 --- a/packages/core/src/codewhisperer/commands/startSecurityScan.ts +++ b/packages/core/src/codewhisperer/commands/startSecurityScan.ts @@ -8,7 +8,7 @@ import * as nls from 'vscode-nls' import { ArtifactMap, DefaultCodeWhispererClient } from '../client/codewhisperer' import { initSecurityScanRender } from '../service/diagnosticsProvider' import { SecurityPanelViewProvider } from '../views/securityPanelViewProvider' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { makeLogger } from '../../shared/logger/activation' import * as CodeWhispererConstants from '../models/constants' import { diff --git a/packages/core/src/codewhisperer/commands/startTestGeneration.ts b/packages/core/src/codewhisperer/commands/startTestGeneration.ts index 429e3585d36..87928d58279 100644 --- a/packages/core/src/codewhisperer/commands/startTestGeneration.ts +++ b/packages/core/src/codewhisperer/commands/startTestGeneration.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { ZipUtil } from '../util/zipUtil' import { ArtifactMap } from '../client/codewhisperer' import { testGenerationLogsDir } from '../../shared/filesystemUtilities' @@ -28,7 +28,6 @@ import { Range } from '../client/codewhispereruserclient' let spawnResult: ChildProcess | null = null let isCancelled = false export async function startTestGenerationProcess( - fileName: string, filePath: string, userInputPrompt: string, tabID: string, @@ -116,7 +115,7 @@ export async function startTestGenerationProcess( const jobStatus = await pollTestJobStatus( testJob.testGenerationJob.testGenerationJobId, testJob.testGenerationJob.testGenerationJobGroupName, - fileName, + filePath, initialExecution ) // TODO: Send status to test summary diff --git a/packages/core/src/codewhisperer/commands/startTransformByQ.ts b/packages/core/src/codewhisperer/commands/startTransformByQ.ts index cec513d4f58..d6428836d71 100644 --- a/packages/core/src/codewhisperer/commands/startTransformByQ.ts +++ b/packages/core/src/codewhisperer/commands/startTransformByQ.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import * as fs from 'fs' // eslint-disable-line no-restricted-imports import path from 'path' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as CodeWhispererConstants from '../models/constants' import * as localizedText from '../../shared/localizedText' import { @@ -76,10 +76,10 @@ import DependencyVersions from '../../amazonqGumby/models/dependencies' import { dependencyNoAvailableVersions } from '../../amazonqGumby/models/constants' import { HumanInTheLoopManager } from '../service/transformByQ/humanInTheLoopManager' import { setContext } from '../../shared/vscode/setContext' -import { makeTemporaryToolkitFolder } from '../../shared' import globals from '../../shared/extensionGlobals' import { convertDateToTimestamp } from '../../shared/datetime' import { findStringInDirectory } from '../../shared/utilities/workspaceUtils' +import { makeTemporaryToolkitFolder } from '../../shared/filesystemUtilities' function getFeedbackCommentData() { const jobId = transformByQState.getJobId() diff --git a/packages/core/src/codewhisperer/models/errors.ts b/packages/core/src/codewhisperer/models/errors.ts index 9466fede54d..cce4aa04a75 100644 --- a/packages/core/src/codewhisperer/models/errors.ts +++ b/packages/core/src/codewhisperer/models/errors.ts @@ -2,8 +2,8 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ -import { i18n } from '../../shared' import { ToolkitError } from '../../shared/errors' +import { i18n } from '../../shared/i18n-helper' import { DefaultCodeScanErrorMessage, FileSizeExceededErrorMessage, diff --git a/packages/core/src/codewhisperer/service/codeFixHandler.ts b/packages/core/src/codewhisperer/service/codeFixHandler.ts index e260f3808ea..854cb848a52 100644 --- a/packages/core/src/codewhisperer/service/codeFixHandler.ts +++ b/packages/core/src/codewhisperer/service/codeFixHandler.ts @@ -6,7 +6,6 @@ import { CodeWhispererUserClient } from '../indexNode' import * as CodeWhispererConstants from '../models/constants' import { codeFixState } from '../models/model' -import { getLogger, isAwsError, sleep } from '../../shared' import { ArtifactMap, CreateUploadUrlRequest, DefaultCodeWhispererClient } from '../client/codewhisperer' import { CodeFixJobStoppedError, @@ -16,6 +15,9 @@ import { MonthlyCodeFixLimitError, } from '../models/errors' import { uploadArtifactToS3 } from './securityScanHandler' +import { getLogger } from '../../shared/logger/logger' +import { isAwsError } from '../../shared/errors' +import { sleep } from '../../shared/utilities/timeoutUtils' export async function getPresignedUrlAndUpload( client: DefaultCodeWhispererClient, diff --git a/packages/core/src/codewhisperer/service/keyStrokeHandler.ts b/packages/core/src/codewhisperer/service/keyStrokeHandler.ts index d32e875e8a4..49ef633a98f 100644 --- a/packages/core/src/codewhisperer/service/keyStrokeHandler.ts +++ b/packages/core/src/codewhisperer/service/keyStrokeHandler.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { DefaultCodeWhispererClient } from '../client/codewhisperer' import * as CodeWhispererConstants from '../models/constants' import { ConfigurationEntry } from '../models/model' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { RecommendationHandler } from './recommendationHandler' import { CodewhispererAutomatedTriggerType } from '../../shared/telemetry/telemetry' import { getTabSizeSetting } from '../../shared/utilities/editorUtilities' diff --git a/packages/core/src/codewhisperer/service/recommendationHandler.ts b/packages/core/src/codewhisperer/service/recommendationHandler.ts index 1cf3b1dea8a..083e07610bb 100644 --- a/packages/core/src/codewhisperer/service/recommendationHandler.ts +++ b/packages/core/src/codewhisperer/service/recommendationHandler.ts @@ -18,7 +18,7 @@ import { runtimeLanguageContext } from '../util/runtimeLanguageContext' import { AWSError } from 'aws-sdk' import { isAwsError } from '../../shared/errors' import { TelemetryHelper } from '../util/telemetryHelper' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { hasVendedIamCredentials } from '../../auth/auth' import { asyncCallWithTimeout, diff --git a/packages/core/src/codewhisperer/service/referenceInlineProvider.ts b/packages/core/src/codewhisperer/service/referenceInlineProvider.ts index 9e2382837ff..a90565797fb 100644 --- a/packages/core/src/codewhisperer/service/referenceInlineProvider.ts +++ b/packages/core/src/codewhisperer/service/referenceInlineProvider.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as CodeWhispererConstants from '../models/constants' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { References } from '../client/codewhisperer' import { LicenseUtil } from '../util/licenseUtil' import { isInlineCompletionEnabled } from '../util/commonUtil' diff --git a/packages/core/src/codewhisperer/service/securityIssueTreeViewProvider.ts b/packages/core/src/codewhisperer/service/securityIssueTreeViewProvider.ts index 197f5f15fd2..9b803a4033c 100644 --- a/packages/core/src/codewhisperer/service/securityIssueTreeViewProvider.ts +++ b/packages/core/src/codewhisperer/service/securityIssueTreeViewProvider.ts @@ -13,7 +13,7 @@ import { Severity, } from '../models/model' import globals from '../../shared/extensionGlobals' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { SecurityIssueProvider } from './securityIssueProvider' export type SecurityViewTreeItem = FileItem | IssueItem | SeverityItem diff --git a/packages/core/src/codewhisperer/service/securityScanHandler.ts b/packages/core/src/codewhisperer/service/securityScanHandler.ts index a8db65603b3..cf344610e27 100644 --- a/packages/core/src/codewhisperer/service/securityScanHandler.ts +++ b/packages/core/src/codewhisperer/service/securityScanHandler.ts @@ -4,7 +4,7 @@ */ import { DefaultCodeWhispererClient } from '../client/codewhisperer' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as vscode from 'vscode' import { AggregatedCodeScanIssue, diff --git a/packages/core/src/codewhisperer/service/testGenHandler.ts b/packages/core/src/codewhisperer/service/testGenHandler.ts index 48a66fb1f83..cb2875ab78e 100644 --- a/packages/core/src/codewhisperer/service/testGenHandler.ts +++ b/packages/core/src/codewhisperer/service/testGenHandler.ts @@ -4,7 +4,7 @@ */ import { ZipMetadata } from '../util/zipUtil' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as CodeWhispererConstants from '../models/constants' import * as codewhispererClient from '../client/codewhisperer' import * as codeWhisperer from '../client/codewhisperer' @@ -23,7 +23,6 @@ import { TestGenTimedOutError, } from '../../amazonqTest/error' import { getMd5, uploadArtifactToS3 } from './securityScanHandler' -import { fs, randomUUID, sleep, tempDirPath } from '../../shared' import { ShortAnswer, testGenState } from '../models/model' import { ChatSessionManager } from '../../amazonqTest/chat/storages/chatSession' import { createCodeWhispererChatStreamingClient } from '../../shared/clients/codewhispererChatClient' @@ -33,6 +32,10 @@ import path from 'path' import { ExportIntent } from '@amzn/codewhisperer-streaming' import { glob } from 'glob' import { UserWrittenCodeTracker } from '../tracker/userWrittenCodeTracker' +import { randomUUID } from '../../shared/crypto' +import { sleep } from '../../shared/utilities/timeoutUtils' +import { tempDirPath } from '../../shared/filesystemUtilities' +import fs from '../../shared/fs/fs' // TODO: Get TestFileName and Framework and to error message export function throwIfCancelled() { @@ -126,7 +129,7 @@ export async function createTestJob( export async function pollTestJobStatus( jobId: string, jobGroupName: string, - fileName: string, + filePath: string, initialExecution: boolean ) { const session = ChatSessionManager.Instance.getSession() @@ -184,7 +187,7 @@ export async function pollTestJobStatus( shortAnswer, testGenerationJobGroupName: resp.testGenerationJob?.testGenerationJobGroupName, testGenerationJobId: resp.testGenerationJob?.testGenerationJobId, - fileName, + filePath, }) } } diff --git a/packages/core/src/codewhisperer/service/transformByQ/humanInTheLoopManager.ts b/packages/core/src/codewhisperer/service/transformByQ/humanInTheLoopManager.ts index 0402483656d..63c1bfe3a2f 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/humanInTheLoopManager.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/humanInTheLoopManager.ts @@ -9,8 +9,8 @@ import { FolderInfo, transformByQState } from '../../models/model' import fs from '../../../shared/fs/fs' import { createPomCopy, replacePomVersion } from './transformFileHandler' import { IManifestFile } from '../../../amazonqFeatureDev/models' -import { getLogger } from '../../../shared/logger' -import { telemetry } from '../../../shared/telemetry' +import { getLogger } from '../../../shared/logger/logger' +import { telemetry } from '../../../shared/telemetry/telemetry' import { CodeTransformTelemetryState } from '../../../amazonqGumby/telemetry/codeTransformTelemetryState' import { MetadataResult } from '../../../shared/telemetry/telemetryClient' diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformApiHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformApiHandler.ts index b24db799b3a..1ba9b4681c8 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformApiHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformApiHandler.ts @@ -22,7 +22,7 @@ import { TransformByQStoppedError, ZipManifest, } from '../../models/model' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { CreateUploadUrlResponse, ProgressUpdates, diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformFileHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformFileHandler.ts index 767869d0310..c2a0617c15f 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformFileHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformFileHandler.ts @@ -15,7 +15,7 @@ import fs from '../../../shared/fs/fs' import globals from '../../../shared/extensionGlobals' import { ChatSessionManager } from '../../../amazonqGumby/chat/storages/chatSession' import { AbsolutePathDetectedError } from '../../../amazonqGumby/errors' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { isWin } from '../../../shared/vscode/env' export function getDependenciesFolderInfo(): FolderInfo { diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts index e2bbbc6556b..3384d8f2781 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformMavenHandler.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' import { FolderInfo, transformByQState } from '../../models/model' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import * as CodeWhispererConstants from '../../models/constants' // Consider using ChildProcess once we finalize all spawnSync calls import { spawnSync } from 'child_process' // eslint-disable-line no-restricted-imports diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformationHubViewProvider.ts b/packages/core/src/codewhisperer/service/transformByQ/transformationHubViewProvider.ts index ef2ce722598..63eae8606bb 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformationHubViewProvider.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformationHubViewProvider.ts @@ -13,7 +13,7 @@ import { sessionJobHistory, transformByQState, } from '../../models/model' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { getTransformationSteps } from './transformApiHandler' import { TransformationSteps, diff --git a/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts b/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts index 9339be10fc9..b7878222caf 100644 --- a/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts +++ b/packages/core/src/codewhisperer/service/transformByQ/transformationResultsViewProvider.ts @@ -18,7 +18,7 @@ import { TransformationType, } from '../../models/model' import { ExportResultArchiveStructure, downloadExportResultArchive } from '../../../shared/utilities/download' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { telemetry } from '../../../shared/telemetry/telemetry' import { CodeTransformTelemetryState } from '../../../amazonqGumby/telemetry/codeTransformTelemetryState' import * as CodeWhispererConstants from '../../models/constants' diff --git a/packages/core/src/codewhisperer/tracker/codewhispererTracker.ts b/packages/core/src/codewhisperer/tracker/codewhispererTracker.ts index 05a6d83f3f0..dbcfb3ab134 100644 --- a/packages/core/src/codewhisperer/tracker/codewhispererTracker.ts +++ b/packages/core/src/codewhisperer/tracker/codewhispererTracker.ts @@ -15,7 +15,8 @@ import { codeWhispererClient } from '../client/codewhisperer' import { logSendTelemetryEventFailure } from '../../codewhispererChat/controllers/chat/telemetryHelper' import { Timeout } from '../../shared/utilities/timeoutUtils' import { getSelectedCustomization } from '../util/customizationUtil' -import { isAwsError, undefinedIfEmpty } from '../../shared' +import { isAwsError } from '../../shared/errors' +import { undefinedIfEmpty } from '../../shared/utilities/textUtilities' import { getUnmodifiedAcceptedTokens } from '../util/commonUtil' /** diff --git a/packages/core/src/codewhisperer/tracker/lineTracker.ts b/packages/core/src/codewhisperer/tracker/lineTracker.ts index b7ca091b541..7fce5ef9534 100644 --- a/packages/core/src/codewhisperer/tracker/lineTracker.ts +++ b/packages/core/src/codewhisperer/tracker/lineTracker.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import { isTextEditor } from '../../shared/utilities/editorUtilities' -import { setContext } from '../../shared' +import { setContext } from '../../shared/vscode/setContext' export interface LineSelection { anchor: number diff --git a/packages/core/src/codewhisperer/tracker/userWrittenCodeTracker.ts b/packages/core/src/codewhisperer/tracker/userWrittenCodeTracker.ts index 2497006b0a4..32de471878d 100644 --- a/packages/core/src/codewhisperer/tracker/userWrittenCodeTracker.ts +++ b/packages/core/src/codewhisperer/tracker/userWrittenCodeTracker.ts @@ -10,7 +10,9 @@ import { AuthUtil } from '../util/authUtil' import { getSelectedCustomization } from '../util/customizationUtil' import { codeWhispererClient as client } from '../client/codewhisperer' import { isAwsError } from '../../shared/errors' -import { CodewhispererLanguage, globals, undefinedIfEmpty } from '../../shared' +import { undefinedIfEmpty } from '../../shared/utilities/textUtilities' +import { CodewhispererLanguage } from '../../shared/telemetry/telemetry' +import globals from '../../shared/extensionGlobals' /** * This singleton class is mainly used for calculating the user written code diff --git a/packages/core/src/codewhisperer/ui/statusBarMenu.ts b/packages/core/src/codewhisperer/ui/statusBarMenu.ts index 8988f0eb339..9b5fa43672e 100644 --- a/packages/core/src/codewhisperer/ui/statusBarMenu.ts +++ b/packages/core/src/codewhisperer/ui/statusBarMenu.ts @@ -29,7 +29,7 @@ import { CodeScansState, CodeSuggestionsState, vsCodeState } from '../models/mod import { Commands } from '../../shared/vscode/commands2' import { createExitButton } from '../../shared/ui/buttons' import { telemetry } from '../../shared/telemetry/telemetry' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' function getAmazonQCodeWhispererNodes() { const autoTriggerEnabled = CodeSuggestionsState.instance.isSuggestionsEnabled() diff --git a/packages/core/src/codewhisperer/util/authUtil.ts b/packages/core/src/codewhisperer/util/authUtil.ts index 1a94ad5ffcc..1e350384e73 100644 --- a/packages/core/src/codewhisperer/util/authUtil.ts +++ b/packages/core/src/codewhisperer/util/authUtil.ts @@ -28,7 +28,7 @@ import { getTelemetryMetadataForConn, ProfileNotFoundError, } from '../../auth/connection' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { Commands, placeholder } from '../../shared/vscode/commands2' import { vsCodeState } from '../models/model' import { onceChanged, once } from '../../shared/utilities/functionUtils' diff --git a/packages/core/src/codewhisperer/util/customizationUtil.ts b/packages/core/src/codewhisperer/util/customizationUtil.ts index 0ede7c983f9..9bacb06c48a 100644 --- a/packages/core/src/codewhisperer/util/customizationUtil.ts +++ b/packages/core/src/codewhisperer/util/customizationUtil.ts @@ -13,7 +13,7 @@ import { DataQuickPickItem, showQuickPick } from '../../shared/ui/pickerPrompter import { codeWhispererClient } from '../client/codewhisperer' import { Customization, ResourceArn } from '../client/codewhispereruserclient' import { codicon, getIcon } from '../../shared/icons' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { showMessageWithUrl } from '../../shared/utilities/messages' import { parse } from '@aws-sdk/util-arn-parser' import { Commands } from '../../shared/vscode/commands2' diff --git a/packages/core/src/codewhisperer/util/editorContext.ts b/packages/core/src/codewhisperer/util/editorContext.ts index 99a15fd1f02..11598cfe20c 100644 --- a/packages/core/src/codewhisperer/util/editorContext.ts +++ b/packages/core/src/codewhisperer/util/editorContext.ts @@ -17,7 +17,7 @@ import { selectFrom } from '../../shared/utilities/tsUtils' import { checkLeftContextKeywordsForJson } from './commonUtil' import { CodeWhispererSupplementalContext } from '../models/model' import { getOptOutPreference } from '../../shared/telemetry/util' -import { indent } from '../../shared' +import { indent } from '../../shared/utilities/textUtilities' let tabSize: number = getTabSizeSetting() diff --git a/packages/core/src/codewhisperer/util/gitUtil.ts b/packages/core/src/codewhisperer/util/gitUtil.ts index 752c16ba6bf..09cd9a6116f 100644 --- a/packages/core/src/codewhisperer/util/gitUtil.ts +++ b/packages/core/src/codewhisperer/util/gitUtil.ts @@ -3,7 +3,8 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger, removeAnsi } from '../../shared' +import { removeAnsi } from '../../shared/utilities/textUtilities' +import { getLogger } from '../../shared/logger/logger' import { ChildProcess, ChildProcessOptions } from '../../shared/utilities/processUtils' import { Uri } from 'vscode' diff --git a/packages/core/src/codewhisperer/util/showSsoPrompt.ts b/packages/core/src/codewhisperer/util/showSsoPrompt.ts index 229583a8cc2..13af4cf771f 100644 --- a/packages/core/src/codewhisperer/util/showSsoPrompt.ts +++ b/packages/core/src/codewhisperer/util/showSsoPrompt.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { getStartUrl } from './getStartUrl' import { showQuickPick } from '../../shared/ui/pickerPrompter' import { AuthUtil } from './authUtil' diff --git a/packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts b/packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts index f4688e2b5a9..db1d7f312b2 100644 --- a/packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts +++ b/packages/core/src/codewhisperer/util/supplementalContext/crossFileContextUtil.ts @@ -4,7 +4,6 @@ */ import * as vscode from 'vscode' -import { FeatureConfigProvider, fs } from '../../../shared' import path = require('path') import { BM25Document, BM25Okapi } from './rankBm25' import { @@ -23,6 +22,8 @@ import { } from '../../models/model' import { LspController } from '../../../amazonq/lsp/lspController' import { waitUntil } from '../../../shared/utilities/timeoutUtils' +import { FeatureConfigProvider } from '../../../shared/featureConfig' +import fs from '../../../shared/fs/fs' type CrossFileSupportedLanguage = | 'java' diff --git a/packages/core/src/codewhisperer/util/supplementalContext/utgUtils.ts b/packages/core/src/codewhisperer/util/supplementalContext/utgUtils.ts index a39a48183b0..0d33969773e 100644 --- a/packages/core/src/codewhisperer/util/supplementalContext/utgUtils.ts +++ b/packages/core/src/codewhisperer/util/supplementalContext/utgUtils.ts @@ -4,7 +4,7 @@ */ import * as path from 'path' -import { fs } from '../../../shared' +import { fs } from '../../../shared/fs/fs' import * as vscode from 'vscode' import { countSubstringMatches, diff --git a/packages/core/src/codewhisperer/util/telemetryHelper.ts b/packages/core/src/codewhisperer/util/telemetryHelper.ts index 964145fd881..22ece4400d2 100644 --- a/packages/core/src/codewhisperer/util/telemetryHelper.ts +++ b/packages/core/src/codewhisperer/util/telemetryHelper.ts @@ -21,7 +21,7 @@ import { CodeWhispererSettings } from './codewhispererSettings' import { getSelectedCustomization } from './customizationUtil' import { AuthUtil } from './authUtil' import { isAwsError } from '../../shared/errors' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { CodeWhispererSessionState } from './codeWhispererSession' import { CodeWhispererSupplementalContext } from '../models/model' import { FeatureConfigProvider } from '../../shared/featureConfig' diff --git a/packages/core/src/codewhisperer/util/zipUtil.ts b/packages/core/src/codewhisperer/util/zipUtil.ts index 64a9ccc3b8d..18379e051ad 100644 --- a/packages/core/src/codewhisperer/util/zipUtil.ts +++ b/packages/core/src/codewhisperer/util/zipUtil.ts @@ -6,7 +6,7 @@ import admZip from 'adm-zip' import * as vscode from 'vscode' import path from 'path' import { tempDirPath, testGenerationLogsDir } from '../../shared/filesystemUtilities' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as CodeWhispererConstants from '../models/constants' import { ToolkitError } from '../../shared/errors' import { fs } from '../../shared/fs/fs' @@ -22,8 +22,8 @@ import { } from '../models/errors' import { FeatureUseCase } from '../models/constants' import { ChildProcess, ChildProcessOptions } from '../../shared/utilities/processUtils' -import { removeAnsi } from '../../shared' import { ProjectZipError } from '../../amazonqTest/error' +import { removeAnsi } from '../../shared/utilities/textUtilities' export interface ZipMetadata { rootDir: string diff --git a/packages/core/src/codewhisperer/views/activeStateController.ts b/packages/core/src/codewhisperer/views/activeStateController.ts index 184498f3f4a..b3c991a9d38 100644 --- a/packages/core/src/codewhisperer/views/activeStateController.ts +++ b/packages/core/src/codewhisperer/views/activeStateController.ts @@ -11,7 +11,7 @@ import { subscribeOnce } from '../../shared/utilities/vsCodeUtils' import { Container } from '../service/serviceContainer' import { RecommendationHandler } from '../service/recommendationHandler' import { cancellableDebounce } from '../../shared/utilities/functionUtils' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { TelemetryHelper } from '../util/telemetryHelper' export class ActiveStateController implements vscode.Disposable { diff --git a/packages/core/src/codewhisperer/views/lineAnnotationController.ts b/packages/core/src/codewhisperer/views/lineAnnotationController.ts index 39732c84064..7cf51a39f9c 100644 --- a/packages/core/src/codewhisperer/views/lineAnnotationController.ts +++ b/packages/core/src/codewhisperer/views/lineAnnotationController.ts @@ -19,7 +19,7 @@ import { Commands } from '../../shared/vscode/commands2' import { CodeWhispererSessionState } from '../util/codeWhispererSession' import { RecommendationHandler } from '../service/recommendationHandler' import { runtimeLanguageContext } from '../util/runtimeLanguageContext' -import { setContext } from '../../shared' +import { setContext } from '../../shared/vscode/setContext' import { TelemetryHelper } from '../util/telemetryHelper' const case3TimeWindow = 30000 // 30 seconds diff --git a/packages/core/src/codewhisperer/vue/backend.ts b/packages/core/src/codewhisperer/vue/backend.ts index f92552e247a..0f4701fb745 100644 --- a/packages/core/src/codewhisperer/vue/backend.ts +++ b/packages/core/src/codewhisperer/vue/backend.ts @@ -10,8 +10,8 @@ import * as path from 'path' import { VueWebview } from '../../webviews/main' import globals from '../../shared/extensionGlobals' import { telemetry, CodewhispererLanguage, CodewhispererGettingStartedTask } from '../../shared/telemetry/telemetry' -import { fs } from '../../shared' -import { getLogger } from '../../shared/logger' +import { fs } from '../../shared/fs/fs' +import { getLogger } from '../../shared/logger/logger' import { AmazonQPromptSettings } from '../../shared/settings' import { CodeWhispererSource } from '../commands/types' import { submitFeedback } from '../../feedback/vue/submitFeedback' diff --git a/packages/core/src/codewhispererChat/controllers/chat/chatRequest/converter.ts b/packages/core/src/codewhispererChat/controllers/chat/chatRequest/converter.ts index a3236f7d402..c30d5aeb706 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/chatRequest/converter.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/chatRequest/converter.ts @@ -12,7 +12,7 @@ import { TextDocument, } from '@amzn/codewhisperer-streaming' import { ChatTriggerType, TriggerPayload } from '../model' -import { undefinedIfEmpty } from '../../../../shared' +import { undefinedIfEmpty } from '../../../../shared/utilities/textUtilities' const fqnNameSizeDownLimit = 1 const fqnNameSizeUpLimit = 256 diff --git a/packages/core/src/codewhispererChat/controllers/chat/controller.ts b/packages/core/src/codewhispererChat/controllers/chat/controller.ts index a5205be78ca..e0ee9e0924b 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/controller.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/controller.ts @@ -49,11 +49,12 @@ import { CodeWhispererSettings } from '../../../codewhisperer/util/codewhisperer import { getSelectedCustomization } from '../../../codewhisperer/util/customizationUtil' import { getHttpStatusCode, AwsClientResponseError } from '../../../shared/errors' import { uiEventRecorder } from '../../../amazonq/util/eventRecorder' -import { globals, waitUntil } from '../../../shared' -import { telemetry } from '../../../shared/telemetry' +import { telemetry } from '../../../shared/telemetry/telemetry' import { isSsoConnection } from '../../../auth/connection' import { inspect } from '../../../shared/utilities/collectionUtils' import { DefaultAmazonQAppInitContext } from '../../../amazonq/apps/initContext' +import globals from '../../../shared/extensionGlobals' +import { waitUntil } from '../../../shared/utilities/timeoutUtils' export interface ChatControllerMessagePublishers { readonly processPromptChatMessage: MessagePublisher diff --git a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts index feaeec75969..3488d02d4f9 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/telemetryHelper.ts @@ -30,14 +30,14 @@ import { } from './model' import { TriggerEvent, TriggerEventsStorage } from '../../storages/triggerEvents' import globals from '../../../shared/extensionGlobals' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { codeWhispererClient } from '../../../codewhisperer/client/codewhisperer' import { isAwsError } from '../../../shared/errors' import { ChatMessageInteractionType } from '../../../codewhisperer/client/codewhispereruserclient' import { supportedLanguagesList } from '../chat/chatRequest/converter' import { AuthUtil } from '../../../codewhisperer/util/authUtil' import { getSelectedCustomization } from '../../../codewhisperer/util/customizationUtil' -import { undefinedIfEmpty } from '../../../shared' +import { undefinedIfEmpty } from '../../../shared/utilities/textUtilities' export function logSendTelemetryEventFailure(error: any) { let requestId: string | undefined diff --git a/packages/core/src/codewhispererChat/controllers/chat/userIntent/userIntentRecognizer.ts b/packages/core/src/codewhispererChat/controllers/chat/userIntent/userIntentRecognizer.ts index 32b6b274a51..4e3eabc0bc8 100644 --- a/packages/core/src/codewhispererChat/controllers/chat/userIntent/userIntentRecognizer.ts +++ b/packages/core/src/codewhispererChat/controllers/chat/userIntent/userIntentRecognizer.ts @@ -6,7 +6,7 @@ import { UserIntent } from '@amzn/codewhisperer-streaming' import { EditorContextCommand } from '../../../commands/registerCommands' import { PromptMessage } from '../model' -import { Auth } from '../../../../auth' +import { Auth } from '../../../../auth/auth' export class UserIntentRecognizer { public getFromContextMenuCommand(command: EditorContextCommand): UserIntent | undefined { diff --git a/packages/core/src/codewhispererChat/view/messages/messageListener.ts b/packages/core/src/codewhispererChat/view/messages/messageListener.ts index 93c750ab01b..9c1dcb4b095 100644 --- a/packages/core/src/codewhispererChat/view/messages/messageListener.ts +++ b/packages/core/src/codewhispererChat/view/messages/messageListener.ts @@ -7,7 +7,7 @@ import { ExtensionMessage } from '../../../amazonq/webview/ui/commands' import { AuthController } from '../../../amazonq/auth/controller' import { ChatControllerMessagePublishers } from '../../controllers/chat/controller' import { ReferenceLogController } from './referenceLogController' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { openSettingsId } from '../../../shared/settings' export interface UIMessageListenerProps { diff --git a/packages/core/src/commands.ts b/packages/core/src/commands.ts index f1e77f24cf9..db038a72bbd 100644 --- a/packages/core/src/commands.ts +++ b/packages/core/src/commands.ts @@ -32,7 +32,7 @@ import { promptAndUseConnection, } from './auth/utils' import { showCodeWhispererConnectionPrompt } from './codewhisperer/util/showSsoPrompt' -import { CommonAuthWebview } from './login/webview' +import { CommonAuthWebview } from './login/webview/vue/backend' import { AuthSource, AuthSources } from './login/webview/util' import { ServiceItemId, isServiceItemId } from './login/webview/vue/types' import { authHelpUrl } from './shared/constants' @@ -46,7 +46,7 @@ import { Commands, VsCodeCommandArg, placeholder, vscodeComponent } from './shar import { isValidResponse } from './shared/wizards/wizard' import { CancellationError } from './shared/utilities/timeoutUtils' import { ToolkitError } from './shared/errors' -import { setContext } from './shared' +import { setContext } from './shared/vscode/setContext' function switchConnections(auth: Auth | TreeNode | unknown) { if (!(auth instanceof Auth)) { diff --git a/packages/core/src/dev/activation.ts b/packages/core/src/dev/activation.ts index 15baf1bc294..16b5d7e53ad 100644 --- a/packages/core/src/dev/activation.ts +++ b/packages/core/src/dev/activation.ts @@ -15,11 +15,11 @@ import { Wizard } from '../shared/wizards/wizard' import { deleteDevEnvCommand, installVsixCommand, openTerminalCommand } from './codecatalyst' import { isAnySsoConnection } from '../auth/connection' import { Auth } from '../auth/auth' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { entries } from '../shared/utilities/tsUtils' import { getEnvironmentSpecificMemento } from '../shared/utilities/mementos' -import { setContext } from '../shared' -import { telemetry } from '../shared/telemetry' +import { setContext } from '../shared/vscode/setContext' +import { telemetry } from '../shared/telemetry/telemetry' import { getSessionId } from '../shared/telemetry/util' import { NotificationsController } from '../notifications/controller' import { DevNotificationsState } from '../notifications/types' diff --git a/packages/core/src/dev/beta.ts b/packages/core/src/dev/beta.ts index 89bd085e84e..329907aa5a3 100644 --- a/packages/core/src/dev/beta.ts +++ b/packages/core/src/dev/beta.ts @@ -9,7 +9,7 @@ import * as vscode from 'vscode' import AdmZip from 'adm-zip' import got from 'got' import globals from '../shared/extensionGlobals' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import fs from '../shared/fs/fs' import { VSCODE_EXTENSION_ID } from '../shared/extensions' import { makeTemporaryToolkitFolder } from '../shared/filesystemUtilities' diff --git a/packages/core/src/dev/codecatalyst.ts b/packages/core/src/dev/codecatalyst.ts index 2c575f71eac..d9dd4e9e5a9 100644 --- a/packages/core/src/dev/codecatalyst.ts +++ b/packages/core/src/dev/codecatalyst.ts @@ -7,7 +7,7 @@ import { glob } from 'glob' import * as path from 'path' import * as vscode from 'vscode' import * as manifest from '../../package.json' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { selectCodeCatalystResource } from '../codecatalyst/wizards/selectResource' import { VSCODE_EXTENSION_ID } from '../shared/extensions' import { DevEnvironment, CodeCatalystClient } from '../shared/clients/codecatalystClient' @@ -20,7 +20,7 @@ import { startVscodeRemote } from '../shared/extensions/ssh' import { isValidResponse } from '../shared/wizards/wizard' import { createQuickPick } from '../shared/ui/pickerPrompter' import { createCommonButtons } from '../shared/ui/buttons' -import { fs } from '../shared' +import { fs } from '../shared/fs/fs' type LazyProgress = vscode.Progress & vscode.Disposable & { getToken(): Timeout } diff --git a/packages/core/src/docdb/activation.ts b/packages/core/src/docdb/activation.ts index 23ee206e4f6..62b61d5e490 100644 --- a/packages/core/src/docdb/activation.ts +++ b/packages/core/src/docdb/activation.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Commands } from '../shared' +import { Commands } from '../shared/vscode/commands2' import { ExtContext } from '../shared/extensions' import { DBResourceNode } from './explorer/dbResourceNode' import { DocumentDBNode } from './explorer/docdbNode' @@ -23,7 +23,7 @@ import { renameInstance } from './commands/renameInstance' import { addTag, listTags, removeTag } from './commands/tagCommands' import { Uri } from 'vscode' import { openUrl } from '../shared/utilities/vsCodeUtils' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' /** * A utility function to automatically invoke trackChanges after a command. diff --git a/packages/core/src/docdb/commands/addRegion.ts b/packages/core/src/docdb/commands/addRegion.ts index 403778e6c6a..ab3e6d1b721 100644 --- a/packages/core/src/docdb/commands/addRegion.ts +++ b/packages/core/src/docdb/commands/addRegion.ts @@ -4,13 +4,13 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' -import { telemetry } from '../../shared/telemetry' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { DBClusterNode } from '../explorer/dbClusterNode' import { DBGlobalClusterNode } from '../explorer/dbGlobalClusterNode' import { DefaultDocumentDBClient } from '../../shared/clients/docdbClient' -import { ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' import { showViewLogsMessage } from '../../shared/utilities/messages' import { isValidResponse } from '../../shared/wizards/wizard' import { CancellationError } from '../../shared/utilities/timeoutUtils' diff --git a/packages/core/src/docdb/commands/createCluster.ts b/packages/core/src/docdb/commands/createCluster.ts index 8d0b9658fc0..62689319158 100644 --- a/packages/core/src/docdb/commands/createCluster.ts +++ b/packages/core/src/docdb/commands/createCluster.ts @@ -4,8 +4,9 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' -import { telemetry } from '../../shared/telemetry' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { DocumentDBNode } from '../explorer/docdbNode' diff --git a/packages/core/src/docdb/commands/createInstance.ts b/packages/core/src/docdb/commands/createInstance.ts index 2387bdecd84..34e7808ce62 100644 --- a/packages/core/src/docdb/commands/createInstance.ts +++ b/packages/core/src/docdb/commands/createInstance.ts @@ -4,8 +4,9 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' -import { telemetry } from '../../shared/telemetry' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { DBClusterNode } from '../explorer/dbClusterNode' diff --git a/packages/core/src/docdb/commands/deleteCluster.ts b/packages/core/src/docdb/commands/deleteCluster.ts index 6b538cb8d00..bb725ae2ab1 100644 --- a/packages/core/src/docdb/commands/deleteCluster.ts +++ b/packages/core/src/docdb/commands/deleteCluster.ts @@ -4,13 +4,14 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { DBClusterNode } from '../explorer/dbClusterNode' import { showQuickPick } from '../../shared/ui/pickerPrompter' import { formatDate, formatTime } from '../../shared/date' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { DBElasticClusterNode } from '../explorer/dbElasticClusterNode' import { assertNodeAvailable } from '../utils' diff --git a/packages/core/src/docdb/commands/deleteInstance.ts b/packages/core/src/docdb/commands/deleteInstance.ts index 580d50c801c..6202d317a07 100644 --- a/packages/core/src/docdb/commands/deleteInstance.ts +++ b/packages/core/src/docdb/commands/deleteInstance.ts @@ -4,12 +4,13 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { DBInstanceNode } from '../explorer/dbInstanceNode' import { DBClusterNode } from '../explorer/dbClusterNode' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { assertNodeAvailable } from '../utils' /** diff --git a/packages/core/src/docdb/commands/modifyInstance.ts b/packages/core/src/docdb/commands/modifyInstance.ts index 626c1be3d97..3df5febaf45 100644 --- a/packages/core/src/docdb/commands/modifyInstance.ts +++ b/packages/core/src/docdb/commands/modifyInstance.ts @@ -4,7 +4,8 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { DBInstanceNode } from '../explorer/dbInstanceNode' @@ -12,7 +13,7 @@ import { DBCluster, ModifyDBInstanceMessage } from '@aws-sdk/client-docdb' import { DBStorageType, DocumentDBClient } from '../../shared/clients/docdbClient' import { createQuickPick, DataQuickPickItem } from '../../shared/ui/pickerPrompter' import { isValidResponse } from '../../shared/wizards/wizard' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { assertNodeAvailable } from '../utils' /** diff --git a/packages/core/src/docdb/commands/rebootInstance.ts b/packages/core/src/docdb/commands/rebootInstance.ts index 43458f4c9a6..ab706803d87 100644 --- a/packages/core/src/docdb/commands/rebootInstance.ts +++ b/packages/core/src/docdb/commands/rebootInstance.ts @@ -5,11 +5,12 @@ import * as vscode from 'vscode' import * as localizedText from '../../shared/localizedText' -import { getLogger, ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' import { CancellationError } from '../../shared/utilities/timeoutUtils' import { localize } from '../../shared/utilities/vsCodeUtils' import { showConfirmationMessage, showViewLogsMessage } from '../../shared/utilities/messages' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { DBInstanceNode } from '../explorer/dbInstanceNode' import { assertNodeAvailable } from '../utils' diff --git a/packages/core/src/docdb/commands/renameCluster.ts b/packages/core/src/docdb/commands/renameCluster.ts index f4067983f6a..f64ae7b1d98 100644 --- a/packages/core/src/docdb/commands/renameCluster.ts +++ b/packages/core/src/docdb/commands/renameCluster.ts @@ -4,13 +4,15 @@ */ import * as vscode from 'vscode' -import { getLogger, sleep, ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' +import { getLogger } from '../../shared/logger/logger' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { assertNodeAvailable, validateClusterName } from '../utils' import { DBClusterNode } from '../explorer/dbClusterNode' import { DBGlobalClusterNode } from '../explorer/dbGlobalClusterNode' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' +import { sleep } from '../../shared/utilities/timeoutUtils' /** * Renames a DocumentDB cluster. diff --git a/packages/core/src/docdb/commands/renameInstance.ts b/packages/core/src/docdb/commands/renameInstance.ts index e7b26131eb7..414f780e521 100644 --- a/packages/core/src/docdb/commands/renameInstance.ts +++ b/packages/core/src/docdb/commands/renameInstance.ts @@ -4,12 +4,13 @@ */ import * as vscode from 'vscode' -import { getLogger, ToolkitError } from '../../shared' +import { getLogger } from '../../shared/logger/logger' +import { ToolkitError } from '../../shared/errors' import { localize } from '../../shared/utilities/vsCodeUtils' import { showViewLogsMessage } from '../../shared/utilities/messages' import { assertNodeAvailable, validateInstanceName } from '../utils' import { DBInstanceNode } from '../explorer/dbInstanceNode' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' /** * Renames a DocumentDB instance. diff --git a/packages/core/src/docdb/commands/startCluster.ts b/packages/core/src/docdb/commands/startCluster.ts index a1ef83ab7be..60dbda80e70 100644 --- a/packages/core/src/docdb/commands/startCluster.ts +++ b/packages/core/src/docdb/commands/startCluster.ts @@ -4,8 +4,8 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' -import { telemetry } from '../../shared/telemetry' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { DBClusterNode } from '../explorer/dbClusterNode' diff --git a/packages/core/src/docdb/commands/stopCluster.ts b/packages/core/src/docdb/commands/stopCluster.ts index e642a78b58a..46f23f3eab9 100644 --- a/packages/core/src/docdb/commands/stopCluster.ts +++ b/packages/core/src/docdb/commands/stopCluster.ts @@ -5,8 +5,8 @@ import * as vscode from 'vscode' import * as localizedText from '../../shared/localizedText' -import { getLogger } from '../../shared/logger' -import { telemetry } from '../../shared/telemetry' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { CancellationError } from '../../shared/utilities/timeoutUtils' import { showConfirmationMessage } from '../../shared/utilities/messages' diff --git a/packages/core/src/docdb/commands/tagCommands.ts b/packages/core/src/docdb/commands/tagCommands.ts index 6265451381c..d3c46176adb 100644 --- a/packages/core/src/docdb/commands/tagCommands.ts +++ b/packages/core/src/docdb/commands/tagCommands.ts @@ -4,12 +4,12 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' -import { telemetry } from '../../shared/telemetry' +import { getLogger } from '../../shared/logger/logger' +import { telemetry } from '../../shared/telemetry/telemetry' import { localize } from '../../shared/utilities/vsCodeUtils' import { DBResourceNode } from '../explorer/dbResourceNode' import { DataQuickPickItem, showQuickPick } from '../../shared/ui/pickerPrompter' -import { ToolkitError } from '../../shared' +import { ToolkitError } from '../../shared/errors' export async function listTags(node: DBResourceNode): Promise { return telemetry.docdb_listTags.run(async () => { diff --git a/packages/core/src/docdb/explorer/dbClusterNode.ts b/packages/core/src/docdb/explorer/dbClusterNode.ts index f611d023120..5544523d6f9 100644 --- a/packages/core/src/docdb/explorer/dbClusterNode.ts +++ b/packages/core/src/docdb/explorer/dbClusterNode.ts @@ -9,7 +9,7 @@ import { inspect } from 'util' import { copyToClipboard } from '../../shared/utilities/messages' import { makeChildrenNodes } from '../../shared/treeview/utils' import { localize } from '../../shared/utilities/vsCodeUtils' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { CreateDBInstanceMessage, DBCluster, ModifyDBClusterMessage } from '@aws-sdk/client-docdb' import { AWSTreeNodeBase } from '../../shared/treeview/nodes/awsTreeNodeBase' import { DBResourceNode } from './dbResourceNode' @@ -17,9 +17,9 @@ import { DBInstanceNode } from './dbInstanceNode' import { PlaceholderNode } from '../../shared/treeview/nodes/placeholderNode' import { DBInstance, DocumentDBClient } from '../../shared/clients/docdbClient' import { DocDBContext } from './docdbContext' -import { toTitleCase } from '../../shared' +import { toTitleCase } from '../../shared/utilities/textUtilities' import { getAwsConsoleUrl } from '../../shared/awsConsole' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' export type DBClusterRole = 'global' | 'regional' | 'primary' | 'secondary' diff --git a/packages/core/src/docdb/explorer/dbElasticClusterNode.ts b/packages/core/src/docdb/explorer/dbElasticClusterNode.ts index 9534c405f63..d228c3bbefd 100644 --- a/packages/core/src/docdb/explorer/dbElasticClusterNode.ts +++ b/packages/core/src/docdb/explorer/dbElasticClusterNode.ts @@ -12,7 +12,7 @@ import { DocDBContext } from './docdbContext' import { copyToClipboard } from '../../shared/utilities/messages' import { localize } from '../../shared/utilities/vsCodeUtils' import { getAwsConsoleUrl } from '../../shared/awsConsole' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' /** * An AWS Explorer node representing DocumentDB elastic clusters. diff --git a/packages/core/src/docdb/explorer/dbGlobalClusterNode.ts b/packages/core/src/docdb/explorer/dbGlobalClusterNode.ts index fcebe18e3f8..7ab15e01a15 100644 --- a/packages/core/src/docdb/explorer/dbGlobalClusterNode.ts +++ b/packages/core/src/docdb/explorer/dbGlobalClusterNode.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { inspect } from 'util' import { makeChildrenNodes } from '../../shared/treeview/utils' import { localize } from '../../shared/utilities/vsCodeUtils' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { AWSTreeNodeBase } from '../../shared/treeview/nodes/awsTreeNodeBase' import { PlaceholderNode } from '../../shared/treeview/nodes/placeholderNode' import { DBClusterNode, DBClusterRole } from './dbClusterNode' @@ -17,7 +17,7 @@ import { DBResourceNode } from './dbResourceNode' import { DocDBContext } from './docdbContext' import { copyToClipboard } from '../../shared/utilities/messages' import { getAwsConsoleUrl } from '../../shared/awsConsole' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' function getRegionFromArn(arn: string) { const match = arn.match(/:rds:([^:]+):.*:cluster:/) diff --git a/packages/core/src/docdb/explorer/dbInstanceNode.ts b/packages/core/src/docdb/explorer/dbInstanceNode.ts index 041640ce562..3a839971e08 100644 --- a/packages/core/src/docdb/explorer/dbInstanceNode.ts +++ b/packages/core/src/docdb/explorer/dbInstanceNode.ts @@ -11,9 +11,9 @@ import { DBResourceNode } from './dbResourceNode' import { DBClusterNode } from './dbClusterNode' import { ModifyDBInstanceMessage } from '@aws-sdk/client-docdb' import { copyToClipboard } from '../../shared/utilities/messages' -import { toTitleCase } from '../../shared' import { getAwsConsoleUrl } from '../../shared/awsConsole' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' +import { toTitleCase } from '../../shared/utilities/textUtilities' /** * An AWS Explorer node representing a DocumentDB instance. diff --git a/packages/core/src/docdb/explorer/dbResourceNode.ts b/packages/core/src/docdb/explorer/dbResourceNode.ts index a9ded2bea70..259a867024c 100644 --- a/packages/core/src/docdb/explorer/dbResourceNode.ts +++ b/packages/core/src/docdb/explorer/dbResourceNode.ts @@ -8,8 +8,8 @@ import { inspect } from 'util' import { AWSResourceNode } from '../../shared/treeview/nodes/awsResourceNode' import { AWSTreeNodeBase } from '../../shared/treeview/nodes/awsTreeNodeBase' import { DocumentDBClient } from '../../shared/clients/docdbClient' -import { waitUntil } from '../../shared' -import { getLogger } from '../../shared/logger' +import { waitUntil } from '../../shared/utilities/timeoutUtils' +import { getLogger } from '../../shared/logger/logger' import { PollingSet } from '../../shared/utilities/pollingSet' /** An AWS Explorer node representing a DocumentDB resource. */ diff --git a/packages/core/src/docdb/explorer/docdbNode.ts b/packages/core/src/docdb/explorer/docdbNode.ts index 18ebed2d0e1..e94e7c41152 100644 --- a/packages/core/src/docdb/explorer/docdbNode.ts +++ b/packages/core/src/docdb/explorer/docdbNode.ts @@ -12,10 +12,10 @@ import { makeChildrenNodes } from '../../shared/treeview/utils' import { DBElasticCluster, DocumentDBClient } from '../../shared/clients/docdbClient' import { DBClusterNode } from './dbClusterNode' import { DBElasticClusterNode } from './dbElasticClusterNode' -import { telemetry } from '../../shared/telemetry' +import { telemetry } from '../../shared/telemetry/telemetry' import { DBGlobalClusterNode } from './dbGlobalClusterNode' import { DBCluster } from '@aws-sdk/client-docdb' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { DBResourceNode } from './dbResourceNode' /** diff --git a/packages/core/src/docdb/utils.ts b/packages/core/src/docdb/utils.ts index 44e90089c41..09b71d9fdf9 100644 --- a/packages/core/src/docdb/utils.ts +++ b/packages/core/src/docdb/utils.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { ToolkitError } from '../shared' +import { ToolkitError } from '../shared/errors' import { localize } from '../shared/utilities/vsCodeUtils' import { DBInstanceNode } from './explorer/dbInstanceNode' import { DBResourceNode } from './explorer/dbResourceNode' diff --git a/packages/core/src/docdb/wizards/createGlobalClusterWizard.ts b/packages/core/src/docdb/wizards/createGlobalClusterWizard.ts index e177047fcb4..de88522dff4 100644 --- a/packages/core/src/docdb/wizards/createGlobalClusterWizard.ts +++ b/packages/core/src/docdb/wizards/createGlobalClusterWizard.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { globals } from '../../shared' +import globals from '../../shared/extensionGlobals' import { DocDBEngine, DocumentDBClient } from '../../shared/clients/docdbClient' import { createExitPrompter } from '../../shared/ui/common/exitPrompter' import { createRegionPrompter } from '../../shared/ui/common/region' diff --git a/packages/core/src/docdb/wizards/elasticClusterWizard.ts b/packages/core/src/docdb/wizards/elasticClusterWizard.ts index 4dca7c99b51..b28d2f20751 100644 --- a/packages/core/src/docdb/wizards/elasticClusterWizard.ts +++ b/packages/core/src/docdb/wizards/elasticClusterWizard.ts @@ -11,7 +11,7 @@ import { createInputBox } from '../../shared/ui/inputPrompter' import { DataQuickPickItem, createQuickPick } from '../../shared/ui/pickerPrompter' import { createCommonButtons } from '../../shared/ui/buttons' import { Auth, CreateClusterInput } from '@aws-sdk/client-docdb-elastic' -import { Prompter } from '../../shared' +import { Prompter } from '../../shared/ui/prompter' const DocDBElasticHelpUrl = 'https://docs.aws.amazon.com/documentdb/latest/developerguide/elastic-how-it-works.html' const DefaultShardCount = 2 diff --git a/packages/core/src/dynamicResources/awsResourceManager.ts b/packages/core/src/dynamicResources/awsResourceManager.ts index de990e6c6b9..76a45996f28 100644 --- a/packages/core/src/dynamicResources/awsResourceManager.ts +++ b/packages/core/src/dynamicResources/awsResourceManager.ts @@ -18,7 +18,7 @@ import { getTabSizeSetting } from '../shared/utilities/editorUtilities' import { ResourceNode } from './explorer/nodes/resourceNode' import { ResourceTypeNode } from './explorer/nodes/resourceTypeNode' import globals from '../shared/extensionGlobals' -import { fs } from '../shared' +import { fs } from '../shared/fs/fs' export const resourceFileGlobPattern = '**/*.awsResource.json' diff --git a/packages/core/src/dynamicResources/explorer/nodes/resourceTypeNode.ts b/packages/core/src/dynamicResources/explorer/nodes/resourceTypeNode.ts index c2ada853dbd..7f3ffc6aaf1 100644 --- a/packages/core/src/dynamicResources/explorer/nodes/resourceTypeNode.ts +++ b/packages/core/src/dynamicResources/explorer/nodes/resourceTypeNode.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import { ChildNodeLoader, ChildNodePage } from '../../../awsexplorer/childNodeLoader' import { CloudControlClient } from '../../../shared/clients/cloudControlClient' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { AWSTreeNodeBase } from '../../../shared/treeview/nodes/awsTreeNodeBase' import { LoadMoreNode } from '../../../shared/treeview/nodes/loadMoreNode' import { PlaceholderNode } from '../../../shared/treeview/nodes/placeholderNode' diff --git a/packages/core/src/eventSchemas/commands/downloadSchemaItemCode.ts b/packages/core/src/eventSchemas/commands/downloadSchemaItemCode.ts index 6c6ec818444..b89a128ba96 100644 --- a/packages/core/src/eventSchemas/commands/downloadSchemaItemCode.ts +++ b/packages/core/src/eventSchemas/commands/downloadSchemaItemCode.ts @@ -12,7 +12,7 @@ import * as vscode from 'vscode' import { SchemaClient } from '../../shared/clients/schemaClient' import { makeTemporaryToolkitFolder, tryRemoveFolder } from '../../shared/filesystemUtilities' import * as localizedText from '../../shared/localizedText' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { Result } from '../../shared/telemetry/telemetry' import { SchemaItemNode } from '../explorer/schemaItemNode' import { getLanguageDetails } from '../models/schemaCodeLangs' diff --git a/packages/core/src/eventSchemas/commands/viewSchemaItem.ts b/packages/core/src/eventSchemas/commands/viewSchemaItem.ts index f3eca0428e5..cc40911ea98 100644 --- a/packages/core/src/eventSchemas/commands/viewSchemaItem.ts +++ b/packages/core/src/eventSchemas/commands/viewSchemaItem.ts @@ -7,7 +7,7 @@ import * as nls from 'vscode-nls' const localize = nls.loadMessageBundle() import * as vscode from 'vscode' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { Result } from '../../shared/telemetry/telemetry' import { getTabSizeSetting } from '../../shared/utilities/editorUtilities' import { SchemaItemNode } from '../explorer/schemaItemNode' diff --git a/packages/core/src/eventSchemas/providers/schemasDataProvider.ts b/packages/core/src/eventSchemas/providers/schemasDataProvider.ts index ec280238183..2df9469d8cb 100644 --- a/packages/core/src/eventSchemas/providers/schemasDataProvider.ts +++ b/packages/core/src/eventSchemas/providers/schemasDataProvider.ts @@ -6,7 +6,7 @@ import * as AWS from '@aws-sdk/types' import { Schemas } from 'aws-sdk' import { SchemaClient } from '../../shared/clients/schemaClient' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { toArrayAsync } from '../../shared/utilities/collectionUtils' export class Cache { diff --git a/packages/core/src/eventSchemas/vue/searchSchemas.ts b/packages/core/src/eventSchemas/vue/searchSchemas.ts index a5dcb55527d..37efc145753 100644 --- a/packages/core/src/eventSchemas/vue/searchSchemas.ts +++ b/packages/core/src/eventSchemas/vue/searchSchemas.ts @@ -14,7 +14,7 @@ import { SchemasNode } from '../explorer/schemasNode' import { listRegistryItems, searchSchemas } from '../utils' import { DefaultSchemaClient, SchemaClient } from '../../shared/clients/schemaClient' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { Result } from '../../shared/telemetry/telemetry' import { toArrayAsync } from '../../shared/utilities/collectionUtils' import { getTabSizeSetting } from '../../shared/utilities/editorUtilities' diff --git a/packages/core/src/extension.ts b/packages/core/src/extension.ts index 4a57f96e8fe..27bdd869b1e 100644 --- a/packages/core/src/extension.ts +++ b/packages/core/src/extension.ts @@ -49,8 +49,10 @@ import { registerCommands } from './commands' // In web mode everything must be in a single file, so things like the endpoints file will not be available. // The following imports the endpoints file, which causes webpack to bundle it in the final output file import endpoints from '../resources/endpoints.json' -import { getLogger, maybeShowMinVscodeWarning, setupUninstallHandler } from './shared' import { showViewLogsMessage } from './shared/utilities/messages' +import { setupUninstallHandler } from './shared/handleUninstall' +import { maybeShowMinVscodeWarning } from './shared/extensionStartup' +import { getLogger } from './shared/logger/logger' disableAwsSdkWarning() diff --git a/packages/core/src/extensionNode.ts b/packages/core/src/extensionNode.ts index e2e63614381..a3e5e03b4ab 100644 --- a/packages/core/src/extensionNode.ts +++ b/packages/core/src/extensionNode.ts @@ -46,6 +46,7 @@ import globals from './shared/extensionGlobals' import { Experiments, Settings, showSettingsFailedMsg } from './shared/settings' import { isReleaseVersion } from './shared/vscode/env' import { AuthStatus, AuthUserState, telemetry } from './shared/telemetry/telemetry' +import { ExtStartUpSources } from './shared/telemetry/util' import { Auth } from './auth/auth' import { getTelemetryMetadataForConn } from './auth/connection' import { registerSubmitFeedback } from './feedback/vue/submitFeedback' @@ -53,12 +54,13 @@ import { activateCommon, deactivateCommon } from './extension' import { learnMoreAmazonQCommand, qExtensionPageCommand, dismissQTree } from './amazonq/explorer/amazonQChildrenNodes' import { codeWhispererCoreScopes } from './codewhisperer/util/authUtil' import { installAmazonQExtension } from './codewhisperer/commands/basicCommands' -import { isExtensionInstalled, VSCODE_EXTENSION_ID } from './shared/utilities' +import { VSCODE_EXTENSION_ID } from './shared/extensions' +import { isExtensionInstalled } from './shared/utilities/vsCodeUtils' import { ExtensionUse, getAuthFormIdsFromConnection, initializeCredentialsProviderManager } from './auth/utils' -import { ExtStartUpSources } from './shared/telemetry' import { activate as activateThreatComposerEditor } from './threatComposer/activation' import { isSsoConnection, hasScopes } from './auth/connection' -import { CrashMonitoring, setContext } from './shared' +import { CrashMonitoring } from './shared/crashMonitoring' +import { setContext } from './shared/vscode/setContext' import { AuthFormId } from './login/webview/vue/types' let localize: nls.LocalizeFunc diff --git a/packages/core/src/extensionWeb.ts b/packages/core/src/extensionWeb.ts index 9c274f559b6..01fa0f667db 100644 --- a/packages/core/src/extensionWeb.ts +++ b/packages/core/src/extensionWeb.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from './shared/logger' +import { getLogger } from './shared/logger/logger' import { activateCommon, deactivateCommon } from './extension' import { activateWebShared } from './extensionWebShared' diff --git a/packages/core/src/extensionWebShared.ts b/packages/core/src/extensionWebShared.ts index af14c87696c..1a62ab723a4 100644 --- a/packages/core/src/extensionWebShared.ts +++ b/packages/core/src/extensionWebShared.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from './shared/logger' +import { getLogger } from './shared/logger/logger' import os from 'os' /** diff --git a/packages/core/src/feedback/vue/submitFeedback.ts b/packages/core/src/feedback/vue/submitFeedback.ts index 838030a4b88..2bbfc39d66c 100644 --- a/packages/core/src/feedback/vue/submitFeedback.ts +++ b/packages/core/src/feedback/vue/submitFeedback.ts @@ -4,7 +4,7 @@ */ import globals from '../../shared/extensionGlobals' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as vscode from 'vscode' import { TelemetryService } from '../../shared/telemetry/telemetryService' import { localize } from '../../shared/utilities/vsCodeUtils' diff --git a/packages/core/src/lambda/activation.ts b/packages/core/src/lambda/activation.ts index 2b160e89bdf..d799173697e 100644 --- a/packages/core/src/lambda/activation.ts +++ b/packages/core/src/lambda/activation.ts @@ -22,7 +22,7 @@ import { getSourceNode } from '../shared/utilities/treeNodeUtils' import { tailLogGroup } from '../awsService/cloudWatchLogs/commands/tailLogGroup' import { liveTailRegistry, liveTailCodeLensProvider } from '../awsService/cloudWatchLogs/activation' import { getFunctionLogGroupName } from '../awsService/cloudWatchLogs/activation' -import { ToolkitError, isError } from '../shared' +import { ToolkitError, isError } from '../shared/errors' import { LogStreamFilterResponse } from '../awsService/cloudWatchLogs/wizard/liveTailLogStreamSubmenu' /** diff --git a/packages/core/src/lambda/commands/createNewSamApp.ts b/packages/core/src/lambda/commands/createNewSamApp.ts index 8c6f5fbab19..c53edf2518b 100644 --- a/packages/core/src/lambda/commands/createNewSamApp.ts +++ b/packages/core/src/lambda/commands/createNewSamApp.ts @@ -22,7 +22,7 @@ import { ActivationReloadState, SamInitState } from '../../shared/activationRelo import { AwsContext } from '../../shared/awsContext' import { fileExists, isInDirectory, readFileAsString } from '../../shared/filesystemUtilities' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { RegionProvider } from '../../shared/regions/regionProvider' import { getSamCliVersion, getSamCliContext, SamCliContext } from '../../shared/sam/cli/samCliContext' import { runSamCliInit, SamCliInitArgs } from '../../shared/sam/cli/samCliInit' @@ -46,7 +46,7 @@ import { telemetry } from '../../shared/telemetry/telemetry' import { LambdaArchitecture, Result, Runtime } from '../../shared/telemetry/telemetry' import { getTelemetryReason, getTelemetryResult } from '../../shared/errors' import { openUrl, replaceVscodeVars } from '../../shared/utilities/vsCodeUtils' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' import { ChildProcess } from '../../shared/utilities/processUtils' export const samInitTemplateFiles: string[] = ['template.yaml', 'template.yml'] diff --git a/packages/core/src/lambda/commands/deleteCloudFormation.ts b/packages/core/src/lambda/commands/deleteCloudFormation.ts index 57e61a2361d..67c903f35c3 100644 --- a/packages/core/src/lambda/commands/deleteCloudFormation.ts +++ b/packages/core/src/lambda/commands/deleteCloudFormation.ts @@ -10,7 +10,7 @@ import * as vscode from 'vscode' import { DefaultCloudFormationClient } from '../../shared/clients/cloudFormationClient' import * as localizedText from '../../shared/localizedText' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { Result } from '../../shared/telemetry/telemetry' import { CloudFormationStackNode } from '../explorer/cloudFormationNodes' import { showConfirmationMessage } from '../../shared/utilities/messages' diff --git a/packages/core/src/lambda/commands/downloadLambda.ts b/packages/core/src/lambda/commands/downloadLambda.ts index 815ff2576e9..e2e1dc2be91 100644 --- a/packages/core/src/lambda/commands/downloadLambda.ts +++ b/packages/core/src/lambda/commands/downloadLambda.ts @@ -13,7 +13,7 @@ import { LaunchConfiguration, getReferencedHandlerPaths } from '../../shared/deb import { makeTemporaryToolkitFolder, fileExists, tryRemoveFolder } from '../../shared/filesystemUtilities' import * as localizedText from '../../shared/localizedText' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { HttpResourceFetcher } from '../../shared/resourcefetcher/node/httpResourceFetcher' import { createCodeAwsSamDebugConfig } from '../../shared/sam/debugger/awsSamDebugConfiguration' import * as pathutils from '../../shared/utilities/pathUtils' @@ -25,7 +25,7 @@ import { Progress } from 'got/dist/source' import { DefaultLambdaClient } from '../../shared/clients/lambdaClient' import { telemetry } from '../../shared/telemetry/telemetry' import { Result, Runtime } from '../../shared/telemetry/telemetry' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' export async function downloadLambdaCommand(functionNode: LambdaFunctionNode) { const result = await runDownloadLambda(functionNode) diff --git a/packages/core/src/lambda/commands/listSamResources.ts b/packages/core/src/lambda/commands/listSamResources.ts index 5a0d1678c9b..80d13a1c71b 100644 --- a/packages/core/src/lambda/commands/listSamResources.ts +++ b/packages/core/src/lambda/commands/listSamResources.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { runSamCliListResource } from '../../shared/sam/cli/samCliListResources' export interface StackResource { diff --git a/packages/core/src/lambda/commands/uploadLambda.ts b/packages/core/src/lambda/commands/uploadLambda.ts index e5a4ce34755..692d07409a2 100644 --- a/packages/core/src/lambda/commands/uploadLambda.ts +++ b/packages/core/src/lambda/commands/uploadLambda.ts @@ -10,11 +10,11 @@ const localize = nls.loadMessageBundle() import AdmZip from 'adm-zip' import * as path from 'path' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' import { showConfirmationMessage, showViewLogsMessage } from '../../shared/utilities/messages' import { makeTemporaryToolkitFolder, tryRemoveFolder } from '../../shared/filesystemUtilities' import * as localizedText from '../../shared/localizedText' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { SamCliBuildInvocation } from '../../shared/sam/cli/samCliBuild' import { getSamCliContext } from '../../shared/sam/cli/samCliContext' import { SamTemplateGenerator } from '../../shared/templates/sam/samTemplateGenerator' diff --git a/packages/core/src/lambda/config/configureParameterOverrides.ts b/packages/core/src/lambda/config/configureParameterOverrides.ts index 39da13b37c2..70e9d1936d8 100644 --- a/packages/core/src/lambda/config/configureParameterOverrides.ts +++ b/packages/core/src/lambda/config/configureParameterOverrides.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { getNormalizedRelativePath } from '../../shared/utilities/pathUtils' import { getChildrenRange } from '../../shared/utilities/symbolUtilities' import { getTabSize } from '../../shared/utilities/textDocumentUtilities' diff --git a/packages/core/src/lambda/config/samParameterCompletionItemProvider.ts b/packages/core/src/lambda/config/samParameterCompletionItemProvider.ts index 9fede2897c5..f408733f886 100644 --- a/packages/core/src/lambda/config/samParameterCompletionItemProvider.ts +++ b/packages/core/src/lambda/config/samParameterCompletionItemProvider.ts @@ -6,7 +6,7 @@ import * as path from 'path' import * as vscode from 'vscode' import * as CloudFormation from '../../shared/cloudformation/cloudformation' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { getChildrenRange, loadSymbols, LoadSymbolsContext } from '../../shared/utilities/symbolUtilities' import { getParameterNames } from '../config/parameterUtils' diff --git a/packages/core/src/lambda/config/templates.ts b/packages/core/src/lambda/config/templates.ts index 5077551bacf..52beae0e953 100644 --- a/packages/core/src/lambda/config/templates.ts +++ b/packages/core/src/lambda/config/templates.ts @@ -11,13 +11,13 @@ import * as _path from 'path' import * as vscode from 'vscode' import * as nls from 'vscode-nls' import * as fsUtils from '../../shared/filesystemUtilities' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { ReadonlyJsonObject } from '../../shared/sam/debugger/awsSamDebugConfiguration' import { getTabSizeSetting } from '../../shared/utilities/editorUtilities' import { getNormalizedRelativePath } from '../../shared/utilities/pathUtils' import { saveDocumentIfDirty } from '../../shared/utilities/textDocumentUtilities' import { access } from 'fs/promises' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/lambda/local/debugConfiguration.ts b/packages/core/src/lambda/local/debugConfiguration.ts index b21599b0563..bfccf03b070 100644 --- a/packages/core/src/lambda/local/debugConfiguration.ts +++ b/packages/core/src/lambda/local/debugConfiguration.ts @@ -18,7 +18,7 @@ import { tryGetAbsolutePath } from '../../shared/utilities/workspaceUtils' import { Architecture, RuntimeFamily } from '../models/samLambdaRuntime' import { SamLaunchRequestArgs } from '../../shared/sam/debugger/awsSamDebugger' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import globals from '../../shared/extensionGlobals' /** diff --git a/packages/core/src/lambda/utils.ts b/packages/core/src/lambda/utils.ts index 7fa56bc33e9..5018a221929 100644 --- a/packages/core/src/lambda/utils.ts +++ b/packages/core/src/lambda/utils.ts @@ -12,7 +12,7 @@ import * as vscode from 'vscode' import { CloudFormationClient } from '../shared/clients/cloudFormationClient' import { LambdaClient } from '../shared/clients/lambdaClient' import { getFamily, getNodeMajorVersion, RuntimeFamily } from './models/samLambdaRuntime' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { HttpResourceFetcher } from '../shared/resourcefetcher/httpResourceFetcher' import { FileResourceFetcher } from '../shared/resourcefetcher/fileResourceFetcher' import { sampleRequestManifestPath } from './constants' diff --git a/packages/core/src/lambda/vue/configEditor/samInvokeBackend.ts b/packages/core/src/lambda/vue/configEditor/samInvokeBackend.ts index 2c3c8ee40dd..b292c8ab93e 100644 --- a/packages/core/src/lambda/vue/configEditor/samInvokeBackend.ts +++ b/packages/core/src/lambda/vue/configEditor/samInvokeBackend.ts @@ -7,7 +7,7 @@ import * as path from 'path' import * as vscode from 'vscode' import * as nls from 'vscode-nls' import { LaunchConfiguration } from '../../../shared/debug/launchConfiguration' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { HttpResourceFetcher } from '../../../shared/resourcefetcher/httpResourceFetcher' import { AwsSamDebuggerConfiguration, @@ -31,8 +31,8 @@ import globals from '../../../shared/extensionGlobals' import { VueWebview } from '../../../webviews/main' import { Commands } from '../../../shared/vscode/commands2' import { telemetry } from '../../../shared/telemetry/telemetry' -import { fs } from '../../../shared' -import { ToolkitError } from '../../../shared' +import { fs } from '../../../shared/fs/fs' +import { ToolkitError } from '../../../shared/errors' import { ResourceNode } from '../../../awsService/appBuilder/explorer/nodes/resourceNode' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/lambda/vue/remoteInvoke/invokeLambda.ts b/packages/core/src/lambda/vue/remoteInvoke/invokeLambda.ts index 38b3700719c..aafde327d7f 100644 --- a/packages/core/src/lambda/vue/remoteInvoke/invokeLambda.ts +++ b/packages/core/src/lambda/vue/remoteInvoke/invokeLambda.ts @@ -11,7 +11,7 @@ import { DefaultLambdaClient, LambdaClient } from '../../../shared/clients/lambd import * as picker from '../../../shared/ui/picker' import { ExtContext } from '../../../shared/extensions' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { HttpResourceFetcher } from '../../../shared/resourcefetcher/httpResourceFetcher' import { sampleRequestPath } from '../../constants' import { LambdaFunctionNode } from '../../explorer/lambdaFunctionNode' @@ -20,15 +20,15 @@ import { getSampleLambdaPayloads, SampleRequest } from '../../utils' import * as nls from 'vscode-nls' import { VueWebview } from '../../../webviews/main' import { telemetry, Result } from '../../../shared/telemetry/telemetry' -import { decodeBase64 } from '../../../shared' import { runSamCliRemoteTestEvents, SamCliRemoteTestEventsParameters, TestEventsOperation, } from '../../../shared/sam/cli/samCliRemoteTestEvent' import { getSamCliContext } from '../../../shared/sam/cli/samCliContext' -import { ToolkitError } from '../../../shared' +import { ToolkitError } from '../../../shared/errors' import { basename } from 'path' +import { decodeBase64 } from '../../../shared/utilities/textUtilities' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/lambda/wizards/samDeployWizard.ts b/packages/core/src/lambda/wizards/samDeployWizard.ts index 98047b75db1..a11b377eb5b 100644 --- a/packages/core/src/lambda/wizards/samDeployWizard.ts +++ b/packages/core/src/lambda/wizards/samDeployWizard.ts @@ -11,7 +11,7 @@ const localize = nls.loadMessageBundle() import * as path from 'path' import * as vscode from 'vscode' import * as localizedText from '../../shared/localizedText' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { createHelpButton } from '../../shared/ui/buttons' import * as input from '../../shared/ui/input' import * as picker from '../../shared/ui/picker' diff --git a/packages/core/src/login/webview/commonAuthViewProvider.ts b/packages/core/src/login/webview/commonAuthViewProvider.ts index 8f641acdb8d..c96b79bea8c 100644 --- a/packages/core/src/login/webview/commonAuthViewProvider.ts +++ b/packages/core/src/login/webview/commonAuthViewProvider.ts @@ -44,7 +44,7 @@ import { CodeCatalystAuthenticationProvider } from '../../codecatalyst/auth' import { telemetry } from '../../shared/telemetry/telemetry' import { AuthSources } from './util' import { AuthFlowStates } from './vue/types' -import { getTelemetryMetadataForConn } from '../../auth' +import { getTelemetryMetadataForConn } from '../../auth/connection' import { AuthUtil } from '../../codewhisperer/util/authUtil' export class CommonAuthViewProvider implements WebviewViewProvider { diff --git a/packages/core/src/login/webview/util.ts b/packages/core/src/login/webview/util.ts index 078e39d1d14..c526e387d31 100644 --- a/packages/core/src/login/webview/util.ts +++ b/packages/core/src/login/webview/util.ts @@ -4,7 +4,7 @@ */ import { cwQuickPickSource, cwTreeNodeSource, amazonQChatSource } from '../../codewhisperer/commands/types' -import { ExtStartUpSources } from '../../shared/telemetry' +import { ExtStartUpSources } from '../../shared/telemetry/util' import { vscodeComponent } from '../../shared/vscode/commands2' /** diff --git a/packages/core/src/login/webview/vue/amazonq/backend_amazonq.ts b/packages/core/src/login/webview/vue/amazonq/backend_amazonq.ts index e9e139c752b..83c511ad9f6 100644 --- a/packages/core/src/login/webview/vue/amazonq/backend_amazonq.ts +++ b/packages/core/src/login/webview/vue/amazonq/backend_amazonq.ts @@ -16,7 +16,7 @@ import { awsIdSignIn } from '../../../../codewhisperer/util/showSsoPrompt' import { connectToEnterpriseSso } from '../../../../codewhisperer/util/getStartUrl' import { activateExtension, isExtensionInstalled } from '../../../../shared/utilities/vsCodeUtils' import { VSCODE_EXTENSION_ID } from '../../../../shared/extensions' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../shared/logger/logger' import { debounce } from 'lodash' import { AuthError, AuthFlowState, userCancelled } from '../types' import { ToolkitError } from '../../../../shared/errors' diff --git a/packages/core/src/login/webview/vue/backend.ts b/packages/core/src/login/webview/vue/backend.ts index ed467175334..2b80013acca 100644 --- a/packages/core/src/login/webview/vue/backend.ts +++ b/packages/core/src/login/webview/vue/backend.ts @@ -24,7 +24,7 @@ import { } from '../../../auth/connection' import { Auth } from '../../../auth/auth' import { StaticProfile, StaticProfileKeyErrorMessage } from '../../../auth/credentials/types' -import { telemetry } from '../../../shared/telemetry' +import { telemetry } from '../../../shared/telemetry/telemetry' import { AuthAddConnection } from '../../../shared/telemetry/telemetry' import { AuthSources } from '../util' import { AuthEnabledFeatures, AuthError, AuthFlowState, AuthUiClick, userCancelled } from './types' diff --git a/packages/core/src/login/webview/vue/toolkit/backend_toolkit.ts b/packages/core/src/login/webview/vue/toolkit/backend_toolkit.ts index b50fe563745..6c147f5d313 100644 --- a/packages/core/src/login/webview/vue/toolkit/backend_toolkit.ts +++ b/packages/core/src/login/webview/vue/toolkit/backend_toolkit.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import { tryAddCredentials } from '../../../../auth/utils' -import { getLogger } from '../../../../shared/logger' +import { getLogger } from '../../../../shared/logger/logger' import { CommonAuthWebview } from '../backend' import { AwsConnection, @@ -19,7 +19,7 @@ import { import { Auth } from '../../../../auth/auth' import { CodeCatalystAuthenticationProvider } from '../../../../codecatalyst/auth' import { AuthError, AuthFlowState } from '../types' -import { setContext } from '../../../../shared' +import { setContext } from '../../../../shared/vscode/setContext' import { builderIdStartUrl } from '../../../../auth/sso/constants' export class ToolkitLoginWebview extends CommonAuthWebview { diff --git a/packages/core/src/notifications/panelNode.ts b/packages/core/src/notifications/panelNode.ts index 1e03ee72124..70a69873ee3 100644 --- a/packages/core/src/notifications/panelNode.ts +++ b/packages/core/src/notifications/panelNode.ts @@ -17,7 +17,7 @@ import { registerToolView } from '../awsexplorer/activationShared' import { readonlyDocument } from '../shared/utilities/textDocumentUtilities' import { openUrl } from '../shared/utilities/vsCodeUtils' import { telemetry } from '../shared/telemetry/telemetry' -import { globals } from '../shared' +import globals from '../shared/extensionGlobals' const localize = nls.loadMessageBundle() const logger = getLogger('notifications') diff --git a/packages/core/src/shared/awsContext.ts b/packages/core/src/shared/awsContext.ts index 62e271589a9..3d38978cbe6 100644 --- a/packages/core/src/shared/awsContext.ts +++ b/packages/core/src/shared/awsContext.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode' import * as AWS from '@aws-sdk/types' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { ClassToInterfaceType } from './utilities/tsUtils' import { CredentialsShim } from '../auth/deprecated/loginManager' export interface AwsContextCredentials { diff --git a/packages/core/src/shared/clients/docdbClient.ts b/packages/core/src/shared/clients/docdbClient.ts index 65665e3ea2d..a613071d26e 100644 --- a/packages/core/src/shared/clients/docdbClient.ts +++ b/packages/core/src/shared/clients/docdbClient.ts @@ -4,7 +4,7 @@ */ import globals from '../extensionGlobals' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { getUserAgent } from '../telemetry/util' import { ToolkitError } from '../errors' import { InterfaceNoSymbol } from '../utilities/tsUtils' diff --git a/packages/core/src/shared/clients/ec2MetadataClient.ts b/packages/core/src/shared/clients/ec2MetadataClient.ts index fd07de50c74..899adb6761c 100644 --- a/packages/core/src/shared/clients/ec2MetadataClient.ts +++ b/packages/core/src/shared/clients/ec2MetadataClient.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { ClassToInterfaceType } from '../utilities/tsUtils' import { AWSError, MetadataService } from 'aws-sdk' diff --git a/packages/core/src/shared/clients/iotClient.ts b/packages/core/src/shared/clients/iotClient.ts index a926c5edfd3..45b9cbd4e4f 100644 --- a/packages/core/src/shared/clients/iotClient.ts +++ b/packages/core/src/shared/clients/iotClient.ts @@ -6,7 +6,7 @@ import * as _ from 'lodash' import { Iot } from 'aws-sdk' import { parse } from '@aws-sdk/util-arn-parser' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { InterfaceNoSymbol } from '../utilities/tsUtils' import globals from '../extensionGlobals' diff --git a/packages/core/src/shared/clients/lambdaClient.ts b/packages/core/src/shared/clients/lambdaClient.ts index 808a7ec6854..331564521ee 100644 --- a/packages/core/src/shared/clients/lambdaClient.ts +++ b/packages/core/src/shared/clients/lambdaClient.ts @@ -7,7 +7,7 @@ import { Lambda } from 'aws-sdk' import { _Blob } from 'aws-sdk/clients/lambda' import { ToolkitError } from '../errors' import globals from '../extensionGlobals' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { ClassToInterfaceType } from '../utilities/tsUtils' export type LambdaClient = ClassToInterfaceType diff --git a/packages/core/src/shared/clients/s3Client.ts b/packages/core/src/shared/clients/s3Client.ts index 950360caec5..d62ad279324 100644 --- a/packages/core/src/shared/clients/s3Client.ts +++ b/packages/core/src/shared/clients/s3Client.ts @@ -8,7 +8,7 @@ import * as url from 'url' import _ from 'lodash' import { AWSError, S3 } from 'aws-sdk' import { inspect } from 'util' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { bufferToStream, DefaultFileStreams, FileStreams, pipe } from '../utilities/streamUtilities' import { assertHasProps, InterfaceNoSymbol, isNonNullable, RequiredProps } from '../utilities/tsUtils' import { Readable } from 'stream' diff --git a/packages/core/src/shared/cloudformation/activation.ts b/packages/core/src/shared/cloudformation/activation.ts index 03d5b34e9d7..86cbf05698b 100644 --- a/packages/core/src/shared/cloudformation/activation.ts +++ b/packages/core/src/shared/cloudformation/activation.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { isToolkitActive, localize } from '../utilities/vsCodeUtils' import { AsyncCloudFormationTemplateRegistry, CloudFormationTemplateRegistry } from '../fs/templateRegistry' diff --git a/packages/core/src/shared/cloudformation/cloudformation.ts b/packages/core/src/shared/cloudformation/cloudformation.ts index a22ff6d75b2..5d08bb836dc 100644 --- a/packages/core/src/shared/cloudformation/cloudformation.ts +++ b/packages/core/src/shared/cloudformation/cloudformation.ts @@ -9,7 +9,7 @@ import { schema } from 'yaml-cfn' import * as yaml from 'js-yaml' import * as filesystemUtilities from '../filesystemUtilities' import fs from '../../shared/fs/fs' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { lambdaPackageTypeImage } from '../constants' import { isUntitledScheme, normalizeVSCodeUri } from '../utilities/vsCodeUtils' diff --git a/packages/core/src/shared/codelens/codeLensUtils.ts b/packages/core/src/shared/codelens/codeLensUtils.ts index 5eb0c08fafe..f39391dd6de 100644 --- a/packages/core/src/shared/codelens/codeLensUtils.ts +++ b/packages/core/src/shared/codelens/codeLensUtils.ts @@ -8,7 +8,7 @@ import { RuntimeFamily } from '../../lambda/models/samLambdaRuntime' import * as CloudFormation from '../cloudformation/cloudformation' import { getResourcesForHandler } from '../fs/templateRegistry' import { LambdaHandlerCandidate } from '../lambdaHandlerSearch' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { API_TARGET_TYPE, CODE_TARGET_TYPE, TEMPLATE_TARGET_TYPE } from '../sam/debugger/awsSamDebugConfiguration' import { addSamDebugConfiguration, diff --git a/packages/core/src/shared/crashMonitoring.ts b/packages/core/src/shared/crashMonitoring.ts index 662a7907875..8d496f6a10f 100644 --- a/packages/core/src/shared/crashMonitoring.ts +++ b/packages/core/src/shared/crashMonitoring.ts @@ -9,12 +9,11 @@ import { getErrorId, getTelemetryReason, getTelemetryReasonDesc, isFileNotFoundE import { isAutomation, isDebugInstance } from './vscode/env' import { DevSettings } from './settings' import vscode from 'vscode' -import { telemetry } from './telemetry' -import { Logger } from './logger' +import { telemetry } from './telemetry/telemetry' +import { Logger, getLogger } from './logger/logger' import { isNewOsSession } from './utilities/osUtils' import nodeFs from 'fs/promises' import fs from './fs/fs' -import { getLogger } from './logger/logger' import { crashMonitoringDirName } from './constants' import { throwOnUnstableFileSystem } from './filesystemUtilities' import { truncateUuid } from './crypto' diff --git a/packages/core/src/shared/debug/launchConfiguration.ts b/packages/core/src/shared/debug/launchConfiguration.ts index b76b134d9cb..69ea55366bb 100644 --- a/packages/core/src/shared/debug/launchConfiguration.ts +++ b/packages/core/src/shared/debug/launchConfiguration.ts @@ -22,7 +22,7 @@ import { } from '../sam/debugger/awsSamDebugConfigurationValidator' import * as pathutils from '../utilities/pathUtils' import { tryGetAbsolutePath } from '../utilities/workspaceUtils' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { makeFailedWriteMessage, showViewLogsMessage } from '../utilities/messages' import { openUrl } from '../utilities/vsCodeUtils' import globals from '../extensionGlobals' diff --git a/packages/core/src/shared/extensionUtilities.ts b/packages/core/src/shared/extensionUtilities.ts index 01d064f88b8..1e134aaa18f 100644 --- a/packages/core/src/shared/extensionUtilities.ts +++ b/packages/core/src/shared/extensionUtilities.ts @@ -7,7 +7,7 @@ import * as _ from 'lodash' import * as os from 'os' import * as vscode from 'vscode' import * as nls from 'vscode-nls' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import { VSCODE_EXTENSION_ID, extensionAlphaVersion } from './extensions' import { Ec2MetadataClient } from './clients/ec2MetadataClient' import { DefaultEc2MetadataClient } from './clients/ec2MetadataClient' diff --git a/packages/core/src/shared/extensions/ssh.ts b/packages/core/src/shared/extensions/ssh.ts index 1e75f9921aa..ba349a902c2 100644 --- a/packages/core/src/shared/extensions/ssh.ts +++ b/packages/core/src/shared/extensions/ssh.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as path from 'path' import * as nls from 'vscode-nls' import fs from '../fs/fs' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { ChildProcess, ChildProcessResult } from '../utilities/processUtils' import { ArrayConstructor, NonNullObject } from '../utilities/typeConstructors' import { Settings } from '../settings' diff --git a/packages/core/src/shared/featureConfig.ts b/packages/core/src/shared/featureConfig.ts index 1ef07968198..2c330648483 100644 --- a/packages/core/src/shared/featureConfig.ts +++ b/packages/core/src/shared/featureConfig.ts @@ -13,13 +13,13 @@ import * as vscode from 'vscode' import * as nls from 'vscode-nls' import { codeWhispererClient as client } from '../codewhisperer/client/codewhisperer' import { AuthUtil } from '../codewhisperer/util/authUtil' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import { isBuilderIdConnection, isIdcSsoConnection } from '../auth/connection' import { CodeWhispererSettings } from '../codewhisperer/util/codewhispererSettings' import globals from './extensionGlobals' import { getClientId, getOperatingSystem } from './telemetry/util' import { extensionVersion } from './vscode/env' -import { telemetry } from './telemetry' +import { telemetry } from './telemetry/telemetry' import { Commands } from './vscode/commands2' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/shared/filesystemUtilities.ts b/packages/core/src/shared/filesystemUtilities.ts index d462d85ac15..54ca5b4b0e1 100644 --- a/packages/core/src/shared/filesystemUtilities.ts +++ b/packages/core/src/shared/filesystemUtilities.ts @@ -7,7 +7,7 @@ import * as crypto from 'crypto' import * as os from 'os' import * as path from 'path' import * as vscode from 'vscode' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import * as pathutils from './utilities/pathUtils' import globals from '../shared/extensionGlobals' import fs from '../shared/fs/fs' diff --git a/packages/core/src/shared/fs/templateRegistry.ts b/packages/core/src/shared/fs/templateRegistry.ts index 339c46b779f..00afe876c4d 100644 --- a/packages/core/src/shared/fs/templateRegistry.ts +++ b/packages/core/src/shared/fs/templateRegistry.ts @@ -12,7 +12,7 @@ import { isInDirectory } from '../filesystemUtilities' import { dotNetRuntimes, goRuntimes, javaRuntimes } from '../../lambda/models/samLambdaRuntime' import { getLambdaDetails } from '../../lambda/utils' import { WatchedFiles, WatchedItem } from './watchedFiles' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import globals from '../extensionGlobals' import { Timeout } from '../utilities/timeoutUtils' import { localize } from '../utilities/vsCodeUtils' diff --git a/packages/core/src/shared/handleUninstall.ts b/packages/core/src/shared/handleUninstall.ts index e6f9bb55478..9db90232bdc 100644 --- a/packages/core/src/shared/handleUninstall.ts +++ b/packages/core/src/shared/handleUninstall.ts @@ -10,7 +10,7 @@ import { existsSync } from 'fs' // eslint-disable-line no-restricted-imports import * as semver from 'semver' import { join } from 'path' import { getLogger } from './logger/logger' -import { telemetry } from './telemetry' +import { telemetry } from './telemetry/telemetry' import { VSCODE_EXTENSION_ID } from './extensions' /** diff --git a/packages/core/src/shared/logger/activation.ts b/packages/core/src/shared/logger/activation.ts index 9d590b226fd..644e3ae0adf 100644 --- a/packages/core/src/shared/logger/activation.ts +++ b/packages/core/src/shared/logger/activation.ts @@ -4,8 +4,7 @@ */ import * as vscode from 'vscode' -import { Logger, LogLevel, getLogger } from '.' -import { fromVscodeLogLevel, setLogger } from './logger' +import { Logger, LogLevel, getLogger, fromVscodeLogLevel, setLogger } from './logger' import { ToolkitLogger } from './toolkitLogger' import { Settings } from '../settings' import { Logging } from './commands' diff --git a/packages/core/src/shared/logger/commands.ts b/packages/core/src/shared/logger/commands.ts index f0a712b0f3f..03f7728a9c3 100644 --- a/packages/core/src/shared/logger/commands.ts +++ b/packages/core/src/shared/logger/commands.ts @@ -4,10 +4,9 @@ */ import * as vscode from 'vscode' -import { Logger } from '.' import { telemetry } from '../telemetry/telemetry' import { Commands } from '../vscode/commands2' -import { getLogger } from './logger' +import { getLogger, Logger } from './logger' import globals from '../extensionGlobals' function revealLines(editor: vscode.TextEditor, start: number, end: number): void { diff --git a/packages/core/src/shared/logger/index.ts b/packages/core/src/shared/logger/index.ts index 400afafe0f3..71034fc002e 100644 --- a/packages/core/src/shared/logger/index.ts +++ b/packages/core/src/shared/logger/index.ts @@ -3,14 +3,4 @@ * SPDX-License-Identifier: Apache-2.0 */ -// This file is the common import file, intended for use by most extension code. -// It surfaces Logger and related interfaces, types, and retrieval. -import * as logger from './logger' - -export type Loggable = Error | string - -export type Logger = logger.Logger -export type LogLevel = logger.LogLevel -export const getLogger = logger.getLogger -export const getDebugConsoleLogger = logger.getDebugConsoleLogger -export const getNullLogger = logger.getNullLogger +export { Logger, LogLevel, getLogger, getDebugConsoleLogger, getNullLogger } from './logger' diff --git a/packages/core/src/shared/logger/logger.ts b/packages/core/src/shared/logger/logger.ts index 489f29de9cf..522da9fc327 100644 --- a/packages/core/src/shared/logger/logger.ts +++ b/packages/core/src/shared/logger/logger.ts @@ -271,3 +271,5 @@ export function getNullLogger(type?: 'debugConsole' | 'main'): Logger { export function setLogger(logger: Logger | undefined, type?: 'debugConsole' | 'main') { toolkitLoggers[type ?? 'main'] = logger } + +export type Loggable = Error | string diff --git a/packages/core/src/shared/lsp/types.ts b/packages/core/src/shared/lsp/types.ts index ef7518db69a..95f2c61aad5 100644 --- a/packages/core/src/shared/lsp/types.ts +++ b/packages/core/src/shared/lsp/types.ts @@ -4,7 +4,7 @@ */ import { getLogger } from '../logger/logger' -import { LanguageServerLocation, ManifestLocation } from '../telemetry' +import { LanguageServerLocation, ManifestLocation } from '../telemetry/telemetry' export const logger = getLogger('lsp') diff --git a/packages/core/src/shared/lsp/utils/setupStage.ts b/packages/core/src/shared/lsp/utils/setupStage.ts index f8932f0b2ef..cd9dcfa319a 100644 --- a/packages/core/src/shared/lsp/utils/setupStage.ts +++ b/packages/core/src/shared/lsp/utils/setupStage.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { LanguageServerSetup, LanguageServerSetupStage, telemetry } from '../../telemetry' +import { LanguageServerSetup, LanguageServerSetupStage, telemetry } from '../../telemetry/telemetry' import { tryFunctions } from '../../utilities/tsUtils' /** diff --git a/packages/core/src/shared/performance/performance.ts b/packages/core/src/shared/performance/performance.ts index 39abd37b96f..b7049809b7d 100644 --- a/packages/core/src/shared/performance/performance.ts +++ b/packages/core/src/shared/performance/performance.ts @@ -4,7 +4,7 @@ */ import assert from 'assert' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' interface PerformanceMetrics { /** diff --git a/packages/core/src/shared/regions/endpoints.ts b/packages/core/src/shared/regions/endpoints.ts index 0111bebef19..64a36143187 100644 --- a/packages/core/src/shared/regions/endpoints.ts +++ b/packages/core/src/shared/regions/endpoints.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' // Parses the endpoints.json file into a usable structure diff --git a/packages/core/src/shared/regions/regionProvider.ts b/packages/core/src/shared/regions/regionProvider.ts index 426e27d73c5..78852923d1d 100644 --- a/packages/core/src/shared/regions/regionProvider.ts +++ b/packages/core/src/shared/regions/regionProvider.ts @@ -9,7 +9,7 @@ import * as nls from 'vscode-nls' const localize = nls.loadMessageBundle() import * as vscode from 'vscode' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { Endpoints, loadEndpoints, Region } from './endpoints' import { AwsContext } from '../awsContext' import { getIdeProperties, isAmazonQ } from '../extensionUtilities' diff --git a/packages/core/src/shared/resourcefetcher/fileResourceFetcher.ts b/packages/core/src/shared/resourcefetcher/fileResourceFetcher.ts index e4cf9c53040..e228fbe3e59 100644 --- a/packages/core/src/shared/resourcefetcher/fileResourceFetcher.ts +++ b/packages/core/src/shared/resourcefetcher/fileResourceFetcher.ts @@ -4,7 +4,7 @@ */ import fs from '../fs/fs' -import { getLogger, Logger } from '../logger' +import { getLogger, Logger } from '../logger/logger' import { ResourceFetcher } from './resourcefetcher' export class FileResourceFetcher implements ResourceFetcher { diff --git a/packages/core/src/shared/resourcefetcher/httpResourceFetcher.ts b/packages/core/src/shared/resourcefetcher/httpResourceFetcher.ts index e85e1ded70b..1a2300cdcb9 100644 --- a/packages/core/src/shared/resourcefetcher/httpResourceFetcher.ts +++ b/packages/core/src/shared/resourcefetcher/httpResourceFetcher.ts @@ -4,7 +4,7 @@ */ import { VSCODE_EXTENSION_ID } from '../extensions' -import { getLogger, Logger } from '../logger' +import { getLogger, Logger } from '../logger/logger' import { ResourceFetcher } from './resourcefetcher' import { Timeout, CancelEvent, waitUntil } from '../utilities/timeoutUtils' import request, { RequestError } from '../request' diff --git a/packages/core/src/shared/resourcefetcher/node/httpResourceFetcher.ts b/packages/core/src/shared/resourcefetcher/node/httpResourceFetcher.ts index d801e8c5027..eea3f9038c4 100644 --- a/packages/core/src/shared/resourcefetcher/node/httpResourceFetcher.ts +++ b/packages/core/src/shared/resourcefetcher/node/httpResourceFetcher.ts @@ -11,7 +11,7 @@ import got, { RequestError } from 'got' import urlToOptions from 'got/dist/source/core/utils/url-to-options' import Request from 'got/dist/source/core' import { VSCODE_EXTENSION_ID } from '../../extensions' -import { getLogger, Logger } from '../../logger' +import { getLogger, Logger } from '../../logger/logger' import { Timeout, CancellationError, CancelEvent } from '../../utilities/timeoutUtils' import { isCloud9 } from '../../extensionUtilities' import { Headers } from 'got/dist/source/core' diff --git a/packages/core/src/shared/sam/cli/samCliBuild.ts b/packages/core/src/shared/sam/cli/samCliBuild.ts index c2e9862a24b..128249c09c1 100644 --- a/packages/core/src/shared/sam/cli/samCliBuild.ts +++ b/packages/core/src/shared/sam/cli/samCliBuild.ts @@ -4,7 +4,7 @@ */ import { fileExists } from '../../filesystemUtilities' -import { getLogger, Logger } from '../../logger' +import { getLogger, Logger } from '../../logger/logger' import { logAndThrowIfUnexpectedExitCode, SamCliProcessInvoker } from './samCliInvokerUtils' import { pushIf } from '../../utilities/collectionUtils' import { localize } from '../../utilities/vsCodeUtils' diff --git a/packages/core/src/shared/sam/cli/samCliInfo.ts b/packages/core/src/shared/sam/cli/samCliInfo.ts index 8caed4c1e75..ededaa33c44 100644 --- a/packages/core/src/shared/sam/cli/samCliInfo.ts +++ b/packages/core/src/shared/sam/cli/samCliInfo.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger, Logger } from '../../logger' +import { getLogger, Logger } from '../../logger/logger' import { mergeResolvedShellPath } from '../../env/resolveEnv' import { ChildProcess } from '../../utilities/processUtils' diff --git a/packages/core/src/shared/sam/cli/samCliInvoker.ts b/packages/core/src/shared/sam/cli/samCliInvoker.ts index 979607e3fe7..03d6fa249d4 100644 --- a/packages/core/src/shared/sam/cli/samCliInvoker.ts +++ b/packages/core/src/shared/sam/cli/samCliInvoker.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import * as logger from '../../logger' +import * as logger from '../../logger/logger' import { ChildProcess, ChildProcessResult } from '../../utilities/processUtils' import { addTelemetryEnvVar, diff --git a/packages/core/src/shared/sam/cli/samCliInvokerUtils.ts b/packages/core/src/shared/sam/cli/samCliInvokerUtils.ts index e307c15a102..a042d74215d 100644 --- a/packages/core/src/shared/sam/cli/samCliInvokerUtils.ts +++ b/packages/core/src/shared/sam/cli/samCliInvokerUtils.ts @@ -4,7 +4,7 @@ */ import { SpawnOptions } from 'child_process' // eslint-disable-line no-restricted-imports -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import { getUserAgent } from '../../telemetry/util' import { ChildProcessResult, ChildProcessOptions } from '../../utilities/processUtils' import { ErrorInformation, ToolkitError } from '../../errors' diff --git a/packages/core/src/shared/sam/cli/samCliListResources.ts b/packages/core/src/shared/sam/cli/samCliListResources.ts index ff73f19776b..341a48c30d6 100644 --- a/packages/core/src/shared/sam/cli/samCliListResources.ts +++ b/packages/core/src/shared/sam/cli/samCliListResources.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import { logAndThrowIfUnexpectedExitCode, SamCliProcessInvoker } from './samCliInvokerUtils' import { getSpawnEnv } from '../../env/resolveEnv' -import { getLogger } from '../..' +import { getLogger } from '../../logger/logger' export interface SamCliListResourcesParameters { templateFile: string diff --git a/packages/core/src/shared/sam/cli/samCliLocalInvoke.ts b/packages/core/src/shared/sam/cli/samCliLocalInvoke.ts index 7905e80321e..d1139b6d819 100644 --- a/packages/core/src/shared/sam/cli/samCliLocalInvoke.ts +++ b/packages/core/src/shared/sam/cli/samCliLocalInvoke.ts @@ -6,7 +6,7 @@ import { SpawnOptions } from 'child_process' // eslint-disable-line no-restricted-imports import { pushIf } from '../../utilities/collectionUtils' import * as nls from 'vscode-nls' -import { getLogger, getDebugConsoleLogger, Logger } from '../../logger' +import { getLogger, getDebugConsoleLogger, Logger } from '../../logger/logger' import { ChildProcess } from '../../utilities/processUtils' import { Timeout } from '../../utilities/timeoutUtils' import { removeAnsi } from '../../utilities/textUtilities' diff --git a/packages/core/src/shared/sam/cli/samCliLocator.ts b/packages/core/src/shared/sam/cli/samCliLocator.ts index 87fe474c76e..d71110cc45e 100644 --- a/packages/core/src/shared/sam/cli/samCliLocator.ts +++ b/packages/core/src/shared/sam/cli/samCliLocator.ts @@ -6,7 +6,7 @@ import * as path from 'path' import { EnvironmentVariables } from '../../environmentVariables' import * as filesystemUtilities from '../../filesystemUtilities' -import { getLogger, Logger } from '../../logger' +import { getLogger, Logger } from '../../logger/logger' import { SamCliInfoInvocation } from './samCliInfo' import { DefaultSamCliValidator, SamCliValidatorContext, SamCliVersionValidation } from './samCliValidator' import { PerfLog } from '../../logger/perfLogger' diff --git a/packages/core/src/shared/sam/cli/samCliRemoteTestEvent.ts b/packages/core/src/shared/sam/cli/samCliRemoteTestEvent.ts index b09136f0c87..7c3d79ca9f2 100644 --- a/packages/core/src/shared/sam/cli/samCliRemoteTestEvent.ts +++ b/packages/core/src/shared/sam/cli/samCliRemoteTestEvent.ts @@ -8,7 +8,7 @@ import { logAndThrowIfUnexpectedExitCode, SamCliProcessInvoker } from './samCliI import path from 'path' import * as os from 'os' import { getSpawnEnv } from '../../env/resolveEnv' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' export const TestEventsOperation = { List: 'list', diff --git a/packages/core/src/shared/sam/cli/samCliSettings.ts b/packages/core/src/shared/sam/cli/samCliSettings.ts index 9562493a75b..693c3edb234 100644 --- a/packages/core/src/shared/sam/cli/samCliSettings.ts +++ b/packages/core/src/shared/sam/cli/samCliSettings.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import { fromExtensionManifest, Settings } from '../../settings' import { stripUndefined, toRecord } from '../../utilities/collectionUtils' import { ClassToInterfaceType, keys } from '../../utilities/tsUtils' diff --git a/packages/core/src/shared/sam/cli/samCliStartApi.ts b/packages/core/src/shared/sam/cli/samCliStartApi.ts index 5521aa50371..3e0339ae258 100644 --- a/packages/core/src/shared/sam/cli/samCliStartApi.ts +++ b/packages/core/src/shared/sam/cli/samCliStartApi.ts @@ -4,7 +4,7 @@ */ import { fileExists } from '../../filesystemUtilities' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import { pushIf } from '../../utilities/collectionUtils' export interface SamCliStartApiArguments { diff --git a/packages/core/src/shared/sam/debugger/awsSamDebugConfiguration.ts b/packages/core/src/shared/sam/debugger/awsSamDebugConfiguration.ts index 4bf40211fa5..389b91f6208 100644 --- a/packages/core/src/shared/sam/debugger/awsSamDebugConfiguration.ts +++ b/packages/core/src/shared/sam/debugger/awsSamDebugConfiguration.ts @@ -13,7 +13,7 @@ import { CodeTargetProperties, TemplateTargetProperties, } from './awsSamDebugConfiguration.gen' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' export * from './awsSamDebugConfiguration.gen' diff --git a/packages/core/src/shared/sam/debugger/awsSamDebugger.ts b/packages/core/src/shared/sam/debugger/awsSamDebugger.ts index f0c277285ac..2b6e9311e6b 100644 --- a/packages/core/src/shared/sam/debugger/awsSamDebugger.ts +++ b/packages/core/src/shared/sam/debugger/awsSamDebugger.ts @@ -33,7 +33,7 @@ import * as tsDebug from './typescriptSamDebug' import * as goDebug from './goSamDebug' import { ExtContext } from '../../extensions' import { isInDirectory, makeTemporaryToolkitFolder } from '../../filesystemUtilities' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import { getStartPort } from '../../utilities/debuggerUtils' import * as pathutil from '../../utilities/pathUtils' import { tryGetAbsolutePath } from '../../utilities/workspaceUtils' diff --git a/packages/core/src/shared/sam/debugger/csharpSamDebug.ts b/packages/core/src/shared/sam/debugger/csharpSamDebug.ts index e5c35e9146b..01aef679cd2 100644 --- a/packages/core/src/shared/sam/debugger/csharpSamDebug.ts +++ b/packages/core/src/shared/sam/debugger/csharpSamDebug.ts @@ -19,7 +19,7 @@ import { runLambdaFunction, waitForPort } from '../localLambdaRunner' import { SamLaunchRequestArgs } from './awsSamDebugger' import { ChildProcess } from '../../utilities/processUtils' import { HttpResourceFetcher } from '../../resourcefetcher/httpResourceFetcher' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import * as vscode from 'vscode' import * as nls from 'vscode-nls' import globals from '../../extensionGlobals' diff --git a/packages/core/src/shared/sam/debugger/goSamDebug.ts b/packages/core/src/shared/sam/debugger/goSamDebug.ts index 567ecaa18cb..d0d3ee2ed57 100644 --- a/packages/core/src/shared/sam/debugger/goSamDebug.ts +++ b/packages/core/src/shared/sam/debugger/goSamDebug.ts @@ -14,7 +14,7 @@ import { findParentProjectFile } from '../../utilities/workspaceUtils' import { DefaultSamLocalInvokeCommand, waitForDebuggerMessages } from '../cli/samCliLocalInvoke' import { runLambdaFunction } from '../localLambdaRunner' import { SamLaunchRequestArgs } from './awsSamDebugger' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import fs from '../../fs/fs' import { ChildProcess } from '../../utilities/processUtils' import { Timeout } from '../../utilities/timeoutUtils' diff --git a/packages/core/src/shared/sam/debugger/pythonSamDebug.ts b/packages/core/src/shared/sam/debugger/pythonSamDebug.ts index b802876c1cf..670c2ddd71a 100644 --- a/packages/core/src/shared/sam/debugger/pythonSamDebug.ts +++ b/packages/core/src/shared/sam/debugger/pythonSamDebug.ts @@ -15,7 +15,7 @@ import { RuntimeFamily } from '../../../lambda/models/samLambdaRuntime' import globals from '../../extensionGlobals' import { ExtContext } from '../../extensions' import { fileExists, readFileAsString } from '../../filesystemUtilities' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import * as pathutil from '../../utilities/pathUtils' import { getLocalRootVariants } from '../../utilities/pathUtils' import { DefaultSamLocalInvokeCommand, waitForDebuggerMessages } from '../cli/samCliLocalInvoke' diff --git a/packages/core/src/shared/sam/debugger/typescriptSamDebug.ts b/packages/core/src/shared/sam/debugger/typescriptSamDebug.ts index bd6785148db..e7ebece92e0 100644 --- a/packages/core/src/shared/sam/debugger/typescriptSamDebug.ts +++ b/packages/core/src/shared/sam/debugger/typescriptSamDebug.ts @@ -11,7 +11,7 @@ import { RuntimeFamily } from '../../../lambda/models/samLambdaRuntime' import { ChildProcess } from '../../utilities/processUtils' import * as pathutil from '../../../shared/utilities/pathUtils' import { ExtContext } from '../../extensions' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' import { findParentProjectFile } from '../../utilities/workspaceUtils' import { DefaultSamLocalInvokeCommand, waitForDebuggerMessages } from '../cli/samCliLocalInvoke' import { runLambdaFunction, waitForPort } from '../localLambdaRunner' diff --git a/packages/core/src/shared/sam/deploy.ts b/packages/core/src/shared/sam/deploy.ts index a88e071f617..9d80ff9abd6 100644 --- a/packages/core/src/shared/sam/deploy.ts +++ b/packages/core/src/shared/sam/deploy.ts @@ -6,13 +6,14 @@ import * as vscode from 'vscode' import { AWSTreeNodeBase } from '../treeview/nodes/awsTreeNodeBase' import { TreeNode, isTreeNode } from '../treeview/resourceTreeDataProvider' -import { ToolkitError, globals } from '../../shared' +import globals from '../../shared/extensionGlobals' +import { ToolkitError } from '../../shared/errors' import { DefaultCloudFormationClient } from '../clients/cloudFormationClient' import { DefaultS3Client } from '../clients/s3Client' import { samDeployUrl } from '../constants' import { getSpawnEnv } from '../env/resolveEnv' import { CloudFormationTemplateRegistry } from '../fs/templateRegistry' -import { telemetry } from '../telemetry' +import { telemetry } from '../telemetry/telemetry' import { createExitPrompter } from '../ui/common/exitPrompter' import { createRegionPrompter } from '../ui/common/region' import { ChildProcess } from '../utilities/processUtils' diff --git a/packages/core/src/shared/sam/localLambdaRunner.ts b/packages/core/src/shared/sam/localLambdaRunner.ts index 25946299d6c..f560ca55f0c 100644 --- a/packages/core/src/shared/sam/localLambdaRunner.ts +++ b/packages/core/src/shared/sam/localLambdaRunner.ts @@ -12,7 +12,7 @@ import got, { OptionsOfTextResponseBody, RequestError } from 'got' import { isImageLambdaConfig } from '../../lambda/local/debugConfiguration' import { getFamily, RuntimeFamily } from '../../lambda/models/samLambdaRuntime' import { ExtContext } from '../extensions' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { SamTemplateGenerator } from '../templates/sam/samTemplateGenerator' import { Timeout } from '../utilities/timeoutUtils' import { tryGetAbsolutePath } from '../utilities/workspaceUtils' diff --git a/packages/core/src/shared/sam/processTerminal.ts b/packages/core/src/shared/sam/processTerminal.ts index a12dccb83d5..977fed9b02b 100644 --- a/packages/core/src/shared/sam/processTerminal.ts +++ b/packages/core/src/shared/sam/processTerminal.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { ToolkitError, UnknownError } from '../errors' import { ChildProcess, ChildProcessResult } from '../utilities/processUtils' import { CancellationError } from '../utilities/timeoutUtils' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { isAutomation } from '../vscode/env' import { throwIfErrorMatches } from './utils' diff --git a/packages/core/src/shared/sam/sync.ts b/packages/core/src/shared/sam/sync.ts index 8c983ba67ad..a6b2d8aeca9 100644 --- a/packages/core/src/shared/sam/sync.ts +++ b/packages/core/src/shared/sam/sync.ts @@ -22,7 +22,7 @@ import { ToolkitError } from '../errors' import { telemetry } from '../telemetry/telemetry' import { createCommonButtons } from '../ui/buttons' import { ToolkitPromptSettings } from '../settings' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { createExitPrompter } from '../ui/common/exitPrompter' import { getConfigFileUri, SamConfig, validateSamSyncConfig, writeSamconfigGlobal } from './config' import { cast, Optional } from '../utilities/typeConstructors' diff --git a/packages/core/src/shared/schemas.ts b/packages/core/src/shared/schemas.ts index c75916fde68..1506908a7c8 100644 --- a/packages/core/src/shared/schemas.ts +++ b/packages/core/src/shared/schemas.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import globals from './extensionGlobals' import { activateYamlExtension, YamlExtension } from './extensions/yaml' import * as pathutil from '../shared/utilities/pathUtils' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import { FileResourceFetcher } from './resourcefetcher/fileResourceFetcher' import { getPropertyFromJsonUrl, HttpResourceFetcher } from './resourcefetcher/httpResourceFetcher' import { Settings } from './settings' diff --git a/packages/core/src/shared/settings.ts b/packages/core/src/shared/settings.ts index 5e157ba4605..a486784fe14 100644 --- a/packages/core/src/shared/settings.ts +++ b/packages/core/src/shared/settings.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import * as codecatalyst from './clients/codecatalystClient' import * as codewhisperer from '../codewhisperer/client/codewhisperer' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import { cast, FromDescriptor, diff --git a/packages/core/src/shared/sshConfig.ts b/packages/core/src/shared/sshConfig.ts index 447648f879e..2c60b423ab3 100644 --- a/packages/core/src/shared/sshConfig.ts +++ b/packages/core/src/shared/sshConfig.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import * as path from 'path' import * as nls from 'vscode-nls' -import { getLogger } from './logger' +import { getLogger } from './logger/logger' import { ChildProcess, ChildProcessResult } from './utilities/processUtils' import { Result } from './utilities/result' import { ToolkitError } from './errors' diff --git a/packages/core/src/shared/telemetry/activation.ts b/packages/core/src/shared/telemetry/activation.ts index f266787681c..2b0b2864ba1 100644 --- a/packages/core/src/shared/telemetry/activation.ts +++ b/packages/core/src/shared/telemetry/activation.ts @@ -11,7 +11,7 @@ const localize = nls.loadMessageBundle() import * as vscode from 'vscode' import { AwsContext } from '../awsContext' import { DefaultTelemetryService } from './telemetryService' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { getComputeRegion, isAmazonQ, productName } from '../extensionUtilities' import { openSettingsId, Settings } from '../settings' import { getSessionId, TelemetryConfig } from './util' diff --git a/packages/core/src/shared/telemetry/telemetryClient.ts b/packages/core/src/shared/telemetry/telemetryClient.ts index ebe2c1f9d02..139b4b48814 100644 --- a/packages/core/src/shared/telemetry/telemetryClient.ts +++ b/packages/core/src/shared/telemetry/telemetryClient.ts @@ -9,9 +9,8 @@ import { Credentials, Service } from 'aws-sdk' import * as os from 'os' import * as vscode from 'vscode' import { extensionVersion, isAutomation } from '../vscode/env' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import * as ClientTelemetry from './clienttelemetry' -import { AWSProduct, MetricDatum } from './clienttelemetry' import apiConfig = require('./service-2.json') import { ServiceConfigurationOptions } from 'aws-sdk/lib/service' import globals from '../extensionGlobals' @@ -57,9 +56,9 @@ export class DefaultTelemetryClient implements TelemetryClient { private static readonly defaultIdentityPool = 'us-east-1:820fd6d1-95c0-4ca4-bffb-3f01d32da842' private static readonly defaultTelemetryEndpoint = 'https://client-telemetry.us-east-1.amazonaws.com' - static #productName: AWSProduct + static #productName: ClientTelemetry.AWSProduct - public static set productName(val: AWSProduct) { + public static set productName(val: ClientTelemetry.AWSProduct) { getLogger().info(`Telemetry product: ${val}`) this.#productName = val } @@ -93,7 +92,7 @@ export class DefaultTelemetryClient implements TelemetryClient { * Returns failed events * @param batch batch of events */ - public async postMetrics(batch: MetricDatum[]): Promise { + public async postMetrics(batch: ClientTelemetry.MetricDatum[]): Promise { try { // If our batching logic rejected all of the telemetry, don't try to post if (batch.length === 0) { diff --git a/packages/core/src/shared/telemetry/telemetryLogger.ts b/packages/core/src/shared/telemetry/telemetryLogger.ts index c01905f6260..bab7b3cc371 100644 --- a/packages/core/src/shared/telemetry/telemetryLogger.ts +++ b/packages/core/src/shared/telemetry/telemetryLogger.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { DevSettings } from '../settings' import { isReleaseVersion } from '../vscode/env' import { MetricDatum, MetadataEntry } from './clienttelemetry' diff --git a/packages/core/src/shared/telemetry/telemetryService.ts b/packages/core/src/shared/telemetry/telemetryService.ts index 61e9559db7c..c3395be1120 100644 --- a/packages/core/src/shared/telemetry/telemetryService.ts +++ b/packages/core/src/shared/telemetry/telemetryService.ts @@ -7,7 +7,7 @@ import * as path from 'path' import { ExtensionContext } from 'vscode' import { AwsContext } from '../awsContext' import { isReleaseVersion, isAutomation } from '../vscode/env' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { MetricDatum } from './clienttelemetry' import { DefaultTelemetryClient, regionKey } from './telemetryClient' import { DefaultTelemetryPublisher } from './telemetryPublisher' diff --git a/packages/core/src/shared/telemetry/util.ts b/packages/core/src/shared/telemetry/util.ts index ce9342add56..c73a62a631f 100644 --- a/packages/core/src/shared/telemetry/util.ts +++ b/packages/core/src/shared/telemetry/util.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode' import { env, version } from 'vscode' import * as os from 'os' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { fromExtensionManifest, Settings } from '../settings' import { memoize, once } from '../utilities/functionUtils' import { diff --git a/packages/core/src/shared/treeview/resource.ts b/packages/core/src/shared/treeview/resource.ts index 1f0fe77c0d4..58f68cab26a 100644 --- a/packages/core/src/shared/treeview/resource.ts +++ b/packages/core/src/shared/treeview/resource.ts @@ -12,7 +12,7 @@ import { once } from '../utilities/functionUtils' import { Commands } from '../vscode/commands2' import { TreeNode } from './resourceTreeDataProvider' import { createErrorItem, createPlaceholderItem } from './utils' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' interface SimpleResourceProvider { readonly paginated?: false diff --git a/packages/core/src/shared/treeview/utils.ts b/packages/core/src/shared/treeview/utils.ts index 362e7050f49..94946883c05 100644 --- a/packages/core/src/shared/treeview/utils.ts +++ b/packages/core/src/shared/treeview/utils.ts @@ -7,7 +7,7 @@ import * as nls from 'vscode-nls' const localize = nls.loadMessageBundle() import * as vscode from 'vscode' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { AWSTreeNodeBase } from './nodes/awsTreeNodeBase' import { UnknownError } from '../errors' import { Logging } from '../logger/commands' diff --git a/packages/core/src/shared/ui/common/regionSubmenu.ts b/packages/core/src/shared/ui/common/regionSubmenu.ts index c8c054c57ea..a922ddf7583 100644 --- a/packages/core/src/shared/ui/common/regionSubmenu.ts +++ b/packages/core/src/shared/ui/common/regionSubmenu.ts @@ -11,7 +11,7 @@ import { createRegionPrompter } from './region' import { QuickPickPrompter } from '../pickerPrompter' import { Region } from '../../regions/endpoints' import { createRefreshButton } from '../buttons' -import { getLogger } from '../../logger' +import { getLogger } from '../../logger/logger' const switchRegion = Symbol('switchRegion') diff --git a/packages/core/src/shared/ui/picker.ts b/packages/core/src/shared/ui/picker.ts index 6a801cdf6ab..32f90421ba1 100644 --- a/packages/core/src/shared/ui/picker.ts +++ b/packages/core/src/shared/ui/picker.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as nls from 'vscode-nls' const localize = nls.loadMessageBundle() -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { IteratorTransformer } from '../utilities/collectionUtils' import { createRefreshButton } from './buttons' diff --git a/packages/core/src/shared/ui/sam/templatePrompter.ts b/packages/core/src/shared/ui/sam/templatePrompter.ts index a69a4b087bd..f51d1feaafc 100644 --- a/packages/core/src/shared/ui/sam/templatePrompter.ts +++ b/packages/core/src/shared/ui/sam/templatePrompter.ts @@ -5,7 +5,7 @@ import * as path from 'path' import * as vscode from 'vscode' -import { getSamInitDocUrl } from '../..' +import { getSamInitDocUrl } from '../../extensionUtilities' import * as CloudFormation from '../../cloudformation/cloudformation' import { CloudFormationTemplateRegistry } from '../../fs/templateRegistry' import { createCommonButtons } from '../buttons' diff --git a/packages/core/src/shared/utilities/cliUtils.ts b/packages/core/src/shared/utilities/cliUtils.ts index b52ae10b023..a37a7228687 100644 --- a/packages/core/src/shared/utilities/cliUtils.ts +++ b/packages/core/src/shared/utilities/cliUtils.ts @@ -10,7 +10,7 @@ import * as path from 'path' import * as vscode from 'vscode' import { getIdeProperties } from '../extensionUtilities' import { makeTemporaryToolkitFolder, tryRemoveFolder } from '../filesystemUtilities' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { HttpResourceFetcher } from '../resourcefetcher/node/httpResourceFetcher' import { ChildProcess } from './processUtils' diff --git a/packages/core/src/shared/utilities/commentUtils.ts b/packages/core/src/shared/utilities/commentUtils.ts index 42854ec313c..690d0570dff 100644 --- a/packages/core/src/shared/utilities/commentUtils.ts +++ b/packages/core/src/shared/utilities/commentUtils.ts @@ -4,7 +4,7 @@ */ import vscode from 'vscode' -import { CodeWhispererConstants } from '../../codewhisperer' +import { SecurityScanLanguageId } from '../../codewhisperer/models/constants' interface CommentConfig { lineComment?: string @@ -13,7 +13,7 @@ interface CommentConfig { const defaultCommentConfig: CommentConfig = { lineComment: '//', blockComment: ['/*', '*/'] } -const languageCommentConfig: Record = { +const languageCommentConfig: Record = { java: defaultCommentConfig, python: { lineComment: '#', blockComment: ["'''", "'''"] }, javascript: defaultCommentConfig, @@ -50,7 +50,7 @@ const languageCommentConfig: Record = new Map() #pids: PollingSet diff --git a/packages/core/src/shared/utilities/textDocumentUtilities.ts b/packages/core/src/shared/utilities/textDocumentUtilities.ts index 1f2fb7aa1da..48a20a6c44b 100644 --- a/packages/core/src/shared/utilities/textDocumentUtilities.ts +++ b/packages/core/src/shared/utilities/textDocumentUtilities.ts @@ -7,7 +7,7 @@ import * as _path from 'path' import * as vscode from 'vscode' import { disposeOnEditorClose, getTabSizeSetting } from './editorUtilities' import { tempDirPath } from '../filesystemUtilities' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import fs from '../fs/fs' import { ToolkitError } from '../errors' import { indent } from './textUtilities' diff --git a/packages/core/src/shared/utilities/textUtilities.ts b/packages/core/src/shared/utilities/textUtilities.ts index b17b79517b8..e5746df0983 100644 --- a/packages/core/src/shared/utilities/textUtilities.ts +++ b/packages/core/src/shared/utilities/textUtilities.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as crypto from 'crypto' import * as fs from 'fs' // eslint-disable-line no-restricted-imports import { default as stripAnsi } from 'strip-ansi' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' /** * Truncates string `s` if it exceeds `n` chars. diff --git a/packages/core/src/shared/utilities/workspaceUtils.ts b/packages/core/src/shared/utilities/workspaceUtils.ts index c650b886016..f624a3ad2e1 100644 --- a/packages/core/src/shared/utilities/workspaceUtils.ts +++ b/packages/core/src/shared/utilities/workspaceUtils.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as path from 'path' import * as os from 'os' import * as pathutils from '../../shared/utilities/pathUtils' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { isInDirectory } from '../filesystemUtilities' import { normalizedDirnameWithTrailingSlash, normalize } from './pathUtils' import globals from '../extensionGlobals' diff --git a/packages/core/src/shared/vscode/env.ts b/packages/core/src/shared/vscode/env.ts index 7d3d0f5d234..05cd21613e7 100644 --- a/packages/core/src/shared/vscode/env.ts +++ b/packages/core/src/shared/vscode/env.ts @@ -7,7 +7,7 @@ import * as semver from 'semver' import * as vscode from 'vscode' import * as packageJson from '../../../package.json' import * as os from 'os' -import { getLogger } from '../logger' +import { getLogger } from '../logger/logger' import { onceChanged } from '../utilities/functionUtils' import { ChildProcess } from '../utilities/processUtils' import globals, { isWeb } from '../extensionGlobals' diff --git a/packages/core/src/ssmDocument/commands/createDocumentFromTemplate.ts b/packages/core/src/ssmDocument/commands/createDocumentFromTemplate.ts index 2d98ca24c48..418e5069c1e 100644 --- a/packages/core/src/ssmDocument/commands/createDocumentFromTemplate.ts +++ b/packages/core/src/ssmDocument/commands/createDocumentFromTemplate.ts @@ -9,7 +9,7 @@ const localize = nls.loadMessageBundle() import * as path from 'path' import * as vscode from 'vscode' import * as yaml from 'js-yaml' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import * as picker from '../../shared/ui/picker' import { promptUserForDocumentFormat } from '../util/util' import { readFileAsString } from '../../shared/filesystemUtilities' diff --git a/packages/core/src/ssmDocument/commands/deleteDocument.ts b/packages/core/src/ssmDocument/commands/deleteDocument.ts index 993413b6761..9ff836c4853 100644 --- a/packages/core/src/ssmDocument/commands/deleteDocument.ts +++ b/packages/core/src/ssmDocument/commands/deleteDocument.ts @@ -7,7 +7,7 @@ import * as nls from 'vscode-nls' const localize = nls.loadMessageBundle() import * as vscode from 'vscode' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { DocumentItemNodeWriteable } from '../explorer/documentItemNodeWriteable' import { RegistryItemNode } from '../explorer/registryItemNode' import { showConfirmationMessage } from '../util/util' diff --git a/packages/core/src/ssmDocument/commands/openDocumentItem.ts b/packages/core/src/ssmDocument/commands/openDocumentItem.ts index 9b6793b76d0..af0c6760358 100644 --- a/packages/core/src/ssmDocument/commands/openDocumentItem.ts +++ b/packages/core/src/ssmDocument/commands/openDocumentItem.ts @@ -10,7 +10,7 @@ import { SSM } from 'aws-sdk' import * as vscode from 'vscode' import { DocumentItemNode } from '../explorer/documentItemNode' import { AwsContext } from '../../shared/awsContext' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import * as picker from '../../shared/ui/picker' import { showViewLogsMessage } from '../../shared/utilities/messages' import { telemetry } from '../../shared/telemetry/telemetry' diff --git a/packages/core/src/ssmDocument/commands/publishDocument.ts b/packages/core/src/ssmDocument/commands/publishDocument.ts index bd1e400cc0f..402c86412a6 100644 --- a/packages/core/src/ssmDocument/commands/publishDocument.ts +++ b/packages/core/src/ssmDocument/commands/publishDocument.ts @@ -11,7 +11,7 @@ import { DefaultSsmDocumentClient, SsmDocumentClient } from '../../shared/client import { ssmJson, ssmYaml } from '../../shared/constants' import * as localizedText from '../../shared/localizedText' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { PublishSSMDocumentAction, PublishSSMDocumentWizard, diff --git a/packages/core/src/ssmDocument/commands/updateDocumentVersion.ts b/packages/core/src/ssmDocument/commands/updateDocumentVersion.ts index 92e788bcb89..cb3c1577360 100644 --- a/packages/core/src/ssmDocument/commands/updateDocumentVersion.ts +++ b/packages/core/src/ssmDocument/commands/updateDocumentVersion.ts @@ -9,7 +9,7 @@ const localize = nls.loadMessageBundle() import { SSM } from 'aws-sdk' import * as vscode from 'vscode' import { AwsContext } from '../../shared/awsContext' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import * as picker from '../../shared/ui/picker' import { DocumentItemNodeWriteable } from '../explorer/documentItemNodeWriteable' import { showViewLogsMessage } from '../../shared/utilities/messages' diff --git a/packages/core/src/stepFunctions/commands/createStateMachineFromTemplate.ts b/packages/core/src/stepFunctions/commands/createStateMachineFromTemplate.ts index 13b95aef5f2..a5e8187e47f 100644 --- a/packages/core/src/stepFunctions/commands/createStateMachineFromTemplate.ts +++ b/packages/core/src/stepFunctions/commands/createStateMachineFromTemplate.ts @@ -10,7 +10,7 @@ import { dump, load } from 'js-yaml' import * as path from 'path' import * as vscode from 'vscode' import { readFileAsString } from '../../shared/filesystemUtilities' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import { CreateStateMachineWizard, TemplateFormats } from '../wizards/createStateMachineWizard' import { YAML_ASL, JSON_ASL } from '../constants/aslFormats' diff --git a/packages/core/src/stepFunctions/commands/downloadStateMachineDefinition.ts b/packages/core/src/stepFunctions/commands/downloadStateMachineDefinition.ts index eacf78554ab..b3fdc2edb83 100644 --- a/packages/core/src/stepFunctions/commands/downloadStateMachineDefinition.ts +++ b/packages/core/src/stepFunctions/commands/downloadStateMachineDefinition.ts @@ -12,12 +12,12 @@ import * as path from 'path' import * as vscode from 'vscode' import { DefaultStepFunctionsClient, StepFunctionsClient } from '../../shared/clients/stepFunctionsClient' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { Result } from '../../shared/telemetry/telemetry' import { StateMachineNode } from '../explorer/stepFunctionsNodes' import { previewStateMachineCommand } from '../activation' import { telemetry } from '../../shared/telemetry/telemetry' -import { fs } from '../../shared' +import { fs } from '../../shared/fs/fs' export async function downloadStateMachineDefinition(params: { outputChannel: vscode.OutputChannel diff --git a/packages/core/src/stepFunctions/commands/publishStateMachine.ts b/packages/core/src/stepFunctions/commands/publishStateMachine.ts index b54d872f122..9a4e20dab86 100644 --- a/packages/core/src/stepFunctions/commands/publishStateMachine.ts +++ b/packages/core/src/stepFunctions/commands/publishStateMachine.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode' import * as nls from 'vscode-nls' import { AwsContext } from '../../shared/awsContext' import { DefaultStepFunctionsClient, StepFunctionsClient } from '../../shared/clients/stepFunctionsClient' -import { getLogger, Logger } from '../../shared/logger' +import { getLogger, Logger } from '../../shared/logger/logger' import { showViewLogsMessage } from '../../shared/utilities/messages' import { VALID_SFN_PUBLISH_FORMATS, YAML_FORMATS } from '../constants/aslFormats' import { refreshStepFunctionsTree } from '../explorer/stepFunctionsNodes' diff --git a/packages/core/src/stepFunctions/commands/visualizeStateMachine/abstractAslVisualizationManager.ts b/packages/core/src/stepFunctions/commands/visualizeStateMachine/abstractAslVisualizationManager.ts index 090ee2809dd..1c6eb55c26c 100644 --- a/packages/core/src/stepFunctions/commands/visualizeStateMachine/abstractAslVisualizationManager.ts +++ b/packages/core/src/stepFunctions/commands/visualizeStateMachine/abstractAslVisualizationManager.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as nls from 'vscode-nls' import { StateMachineGraphCache } from '../../utils' -import { Logger } from '../../../shared/logger' +import { Logger } from '../../../shared/logger/logger' import { AslVisualization } from './aslVisualization' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualization.ts b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualization.ts index 56467343d15..69f145c3eaf 100644 --- a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualization.ts +++ b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualization.ts @@ -8,7 +8,7 @@ const localize = nls.loadMessageBundle() import { debounce } from 'lodash' import * as path from 'path' import * as vscode from 'vscode' -import { getLogger, Logger } from '../../../shared/logger' +import { getLogger, Logger } from '../../../shared/logger/logger' import { isDocumentValid } from '../../utils' import * as yaml from 'js-yaml' diff --git a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationCDKManager.ts b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationCDKManager.ts index 1b614656b69..ce8a05c0dfd 100644 --- a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationCDKManager.ts +++ b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationCDKManager.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { AslVisualizationCDK } from './aslVisualizationCDK' import { AbstractAslVisualizationManager } from './abstractAslVisualizationManager' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' export class AslVisualizationCDKManager extends AbstractAslVisualizationManager { protected readonly name: string = 'AslVisualizationCDKManager' diff --git a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationManager.ts b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationManager.ts index 9b299f76b5b..48b0e45ca92 100644 --- a/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationManager.ts +++ b/packages/core/src/stepFunctions/commands/visualizeStateMachine/aslVisualizationManager.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import { AbstractAslVisualizationManager } from './abstractAslVisualizationManager' import { AslVisualization } from './aslVisualization' -import { getLogger, Logger } from '../../../shared/logger' +import { getLogger, Logger } from '../../../shared/logger/logger' export class AslVisualizationManager extends AbstractAslVisualizationManager { protected readonly name: string = 'AslVisualizationManager' diff --git a/packages/core/src/stepFunctions/commands/visualizeStateMachine/getStateMachineDefinitionFromCfnTemplate.ts b/packages/core/src/stepFunctions/commands/visualizeStateMachine/getStateMachineDefinitionFromCfnTemplate.ts index 29b2dd817a1..d21a8cee52d 100644 --- a/packages/core/src/stepFunctions/commands/visualizeStateMachine/getStateMachineDefinitionFromCfnTemplate.ts +++ b/packages/core/src/stepFunctions/commands/visualizeStateMachine/getStateMachineDefinitionFromCfnTemplate.ts @@ -4,7 +4,7 @@ */ import * as fs from 'fs' // eslint-disable-line no-restricted-imports -import { getLogger, Logger } from '../../../shared/logger' +import { getLogger, Logger } from '../../../shared/logger/logger' /** * @param {string} uniqueIdentifier - unique identifier of state machine diff --git a/packages/core/src/stepFunctions/utils.ts b/packages/core/src/stepFunctions/utils.ts index 32f48faaeb2..bb687e96c4a 100644 --- a/packages/core/src/stepFunctions/utils.ts +++ b/packages/core/src/stepFunctions/utils.ts @@ -9,7 +9,7 @@ import { IAM, StepFunctions } from 'aws-sdk' import * as vscode from 'vscode' import { StepFunctionsClient } from '../shared/clients/stepFunctionsClient' import { fileExists } from '../shared/filesystemUtilities' -import { getLogger, Logger } from '../shared/logger' +import { getLogger, Logger } from '../shared/logger/logger' import { DiagnosticSeverity, DocumentLanguageSettings, @@ -19,7 +19,7 @@ import { import { HttpResourceFetcher } from '../shared/resourcefetcher/httpResourceFetcher' import globals from '../shared/extensionGlobals' import { fromExtensionManifest } from '../shared/settings' -import { fs } from '../shared' +import { fs } from '../shared/fs/fs' const documentSettings: DocumentLanguageSettings = { comments: 'error', trailingCommas: 'error' } const languageService = getLanguageService({}) diff --git a/packages/core/src/stepFunctions/vue/executeStateMachine/executeStateMachine.ts b/packages/core/src/stepFunctions/vue/executeStateMachine/executeStateMachine.ts index b7c1f83657f..a90349db539 100644 --- a/packages/core/src/stepFunctions/vue/executeStateMachine/executeStateMachine.ts +++ b/packages/core/src/stepFunctions/vue/executeStateMachine/executeStateMachine.ts @@ -8,7 +8,7 @@ const localize = nls.loadMessageBundle() import { DefaultStepFunctionsClient } from '../../../shared/clients/stepFunctionsClient' -import { getLogger } from '../../../shared/logger' +import { getLogger } from '../../../shared/logger/logger' import { Result } from '../../../shared/telemetry/telemetry' import { StateMachineNode } from '../../explorer/stepFunctionsNodes' import { ExtContext } from '../../../shared/extensions' diff --git a/packages/core/src/test/amazonq/session/testSetup.ts b/packages/core/src/test/amazonq/session/testSetup.ts new file mode 100644 index 00000000000..76f2c90f94f --- /dev/null +++ b/packages/core/src/test/amazonq/session/testSetup.ts @@ -0,0 +1,74 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import sinon from 'sinon' +import { createBasicTestConfig, createMockSessionStateConfig, TestSessionMocks } from '../utils' +import { SessionStateConfig } from '../../../amazonq' + +export function createSessionTestSetup() { + const conversationId = 'conversation-id' + const uploadId = 'upload-id' + const tabId = 'tab-id' + const currentCodeGenerationId = '' + + return { + conversationId, + uploadId, + tabId, + currentCodeGenerationId, + } +} + +export async function createTestConfig( + testMocks: TestSessionMocks, + conversationId: string, + uploadId: string, + currentCodeGenerationId: string +) { + testMocks.getCodeGeneration = sinon.stub() + testMocks.exportResultArchive = sinon.stub() + testMocks.createUploadUrl = sinon.stub() + const basicConfig = await createBasicTestConfig(conversationId, uploadId, currentCodeGenerationId) + const testConfig = createMockSessionStateConfig(basicConfig, testMocks) + return testConfig +} + +export interface TestContext { + conversationId: string + uploadId: string + tabId: string + currentCodeGenerationId: string + testConfig: SessionStateConfig + testMocks: Record +} + +export function createTestContext(): TestContext { + const { conversationId, uploadId, tabId, currentCodeGenerationId } = createSessionTestSetup() + + return { + conversationId, + uploadId, + tabId, + currentCodeGenerationId, + testConfig: {} as SessionStateConfig, + testMocks: {}, + } +} + +export function setupTestHooks(context: TestContext) { + beforeEach(async () => { + context.testMocks = {} + context.testConfig = await createTestConfig( + context.testMocks, + context.conversationId, + context.uploadId, + context.currentCodeGenerationId + ) + }) + + afterEach(() => { + sinon.restore() + }) +} diff --git a/packages/core/src/test/amazonqFeatureDev/utils.ts b/packages/core/src/test/amazonq/utils.ts similarity index 67% rename from packages/core/src/test/amazonqFeatureDev/utils.ts rename to packages/core/src/test/amazonq/utils.ts index 72a7b139ee8..ec2e7020e4e 100644 --- a/packages/core/src/test/amazonqFeatureDev/utils.ts +++ b/packages/core/src/test/amazonq/utils.ts @@ -10,7 +10,7 @@ import { ChatControllerEventEmitters, FeatureDevController } from '../../amazonq import { FeatureDevChatSessionStorage } from '../../amazonqFeatureDev/storages/chatSession' import { createTestWorkspaceFolder } from '../testUtil' import { Session } from '../../amazonqFeatureDev/session/session' -import { SessionState } from '../../amazonqFeatureDev/types' +import { SessionState, SessionStateAction, SessionStateConfig } from '../../amazonq/commons/types' import { FeatureDevClient } from '../../amazonqFeatureDev/client/featureDev' import { VirtualMemoryFile } from '../../shared/virtualMemoryFile' import path from 'path' @@ -18,6 +18,9 @@ import { featureDevChat } from '../../amazonqFeatureDev/constants' import { Messenger } from '../../amazonq/commons/connector/baseMessenger' import { AppToWebViewMessageDispatcher } from '../../amazonq/commons/connector/connectorMessages' import { createSessionConfig } from '../../amazonq/commons/session/sessionConfigFactory' +import { VirtualFileSystem } from '../../shared' +import { TelemetryHelper } from '../../amazonq/util/telemetryHelper' +import { FeatureClient } from '../../amazonq/client/client' export function createMessenger(): Messenger { return new Messenger( @@ -120,3 +123,60 @@ export async function createController(): Promise { sessionStorage, } } + +export function createMockSessionStateAction(msg?: string): SessionStateAction { + return { + task: 'test-task', + msg: msg ?? 'test-msg', + fs: new VirtualFileSystem(), + messenger: new Messenger( + new AppToWebViewMessageDispatcher(new MessagePublisher(new vscode.EventEmitter())), + featureDevChat + ), + telemetry: new TelemetryHelper(), + uploadHistory: {}, + } +} + +export interface TestSessionMocks { + getCodeGeneration?: sinon.SinonStub + exportResultArchive?: sinon.SinonStub + createUploadUrl?: sinon.SinonStub +} + +export interface SessionTestConfig { + conversationId: string + uploadId: string + workspaceFolder: vscode.WorkspaceFolder + currentCodeGenerationId?: string +} + +export function createMockSessionStateConfig(config: SessionTestConfig, mocks: TestSessionMocks): SessionStateConfig { + return { + workspaceRoots: ['fake-source'], + workspaceFolders: [config.workspaceFolder], + conversationId: config.conversationId, + proxyClient: { + createConversation: () => sinon.stub(), + createUploadUrl: () => mocks.createUploadUrl!(), + startCodeGeneration: () => sinon.stub(), + getCodeGeneration: () => mocks.getCodeGeneration!(), + exportResultArchive: () => mocks.exportResultArchive!(), + } as unknown as FeatureClient, + uploadId: config.uploadId, + currentCodeGenerationId: config.currentCodeGenerationId, + } +} + +export async function createBasicTestConfig( + conversationId: string = 'conversation-id', + uploadId: string = 'upload-id', + currentCodeGenerationId: string = '' +): Promise { + return { + conversationId, + uploadId, + workspaceFolder: await createTestWorkspaceFolder('fake-root'), + currentCodeGenerationId, + } +} diff --git a/packages/core/src/test/amazonqDoc/controller.test.ts b/packages/core/src/test/amazonqDoc/controller.test.ts index 271444c8402..fda62e6fb55 100644 --- a/packages/core/src/test/amazonqDoc/controller.test.ts +++ b/packages/core/src/test/amazonqDoc/controller.test.ts @@ -16,7 +16,7 @@ import { updateFilePaths, } from './utils' import { CurrentWsFolders, NewFileInfo } from '../../amazonqDoc/types' -import { CodeGenState, docScheme, Session } from '../../amazonqDoc' +import { DocCodeGenState, docScheme, Session } from '../../amazonqDoc' import { AuthUtil } from '../../codewhisperer' import { FeatureDevClient } from '../../amazonqFeatureDev' import { waitUntil } from '../../shared' @@ -69,7 +69,7 @@ describe('Controller - Doc Generation', () => { workspaceFolders, } - const codeGenState = new CodeGenState(testConfig, getFilePaths(controllerSetup), [], [], tabID, 0, {}) + const codeGenState = new DocCodeGenState(testConfig, getFilePaths(controllerSetup), [], [], tabID, 0, {}) return createSession({ messenger: controllerSetup.messenger, sessionState: codeGenState, diff --git a/packages/core/src/test/amazonqDoc/session/sessionState.test.ts b/packages/core/src/test/amazonqDoc/session/sessionState.test.ts new file mode 100644 index 00000000000..8f96894cc22 --- /dev/null +++ b/packages/core/src/test/amazonqDoc/session/sessionState.test.ts @@ -0,0 +1,29 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import * as vscode from 'vscode' +import assert from 'assert' +import sinon from 'sinon' +import { DocPrepareCodeGenState } from '../../../amazonqDoc' +import { createMockSessionStateAction } from '../../amazonq/utils' + +import { createTestContext, setupTestHooks } from '../../amazonq/session/testSetup' + +describe('sessionStateDoc', () => { + const context = createTestContext() + setupTestHooks(context) + + describe('DocPrepareCodeGenState', () => { + it('error when failing to prepare repo information', async () => { + sinon.stub(vscode.workspace, 'findFiles').throws() + context.testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' }) + const testAction = createMockSessionStateAction() + + await assert.rejects(() => { + return new DocPrepareCodeGenState(context.testConfig, [], [], [], context.tabId, 0).interact(testAction) + }) + }) + }) +}) diff --git a/packages/core/src/test/amazonqFeatureDev/controllers/chat/controller.test.ts b/packages/core/src/test/amazonqFeatureDev/controllers/chat/controller.test.ts index 139ac2c112c..03d29907e49 100644 --- a/packages/core/src/test/amazonqFeatureDev/controllers/chat/controller.test.ts +++ b/packages/core/src/test/amazonqFeatureDev/controllers/chat/controller.test.ts @@ -8,14 +8,14 @@ import * as assert from 'assert' import * as path from 'path' import sinon from 'sinon' import { waitUntil } from '../../../../shared/utilities/timeoutUtils' -import { ControllerSetup, createController, createSession, generateVirtualMemoryUri } from '../../utils' +import { ControllerSetup, createController, createSession, generateVirtualMemoryUri } from '../../../amazonq/utils' import { CurrentWsFolders, DeletedFileInfo, MetricDataOperationName, MetricDataResult, NewFileInfo, -} from '../../../../amazonqFeatureDev/types' +} from '../../../../amazonq/commons/types' import { Session } from '../../../../amazonqFeatureDev/session/session' import { Prompter } from '../../../../shared/ui/prompter' import { assertTelemetry, toFile } from '../../../testUtil' @@ -24,6 +24,7 @@ import { ContentLengthError, createUserFacingErrorMessage, FeatureDevServiceError, + isAPIClientError, MonthlyConversationLimitError, NoChangeRequiredException, PrepareRepoFailedError, @@ -35,7 +36,10 @@ import { UserMessageNotFoundError, ZipFileError, } from '../../../../amazonqFeatureDev/errors' -import { CodeGenState, PrepareCodeGenState } from '../../../../amazonqFeatureDev/session/sessionState' +import { + FeatureDevCodeGenState, + FeatureDevPrepareCodeGenState, +} from '../../../../amazonqFeatureDev/session/sessionState' import { FeatureDevClient } from '../../../../amazonqFeatureDev/client/featureDev' import { createAmazonQUri } from '../../../../amazonq/commons/diff' import { AuthUtil } from '../../../../codewhisperer' @@ -92,6 +96,37 @@ describe('Controller', () => { }, ] + async function createCodeGenState() { + mockGetCodeGeneration = sinon.stub().resolves({ codeGenerationStatus: { status: 'Complete' } }) + + const workspaceFolders = [controllerSetup.workspaceFolder] as CurrentWsFolders + const testConfig = { + conversationId: conversationID, + proxyClient: { + createConversation: () => sinon.stub(), + createUploadUrl: () => sinon.stub(), + generatePlan: () => sinon.stub(), + startCodeGeneration: () => sinon.stub(), + getCodeGeneration: () => mockGetCodeGeneration(), + exportResultArchive: () => sinon.stub(), + } as unknown as FeatureDevClient, + workspaceRoots: [''], + uploadId: uploadID, + workspaceFolders, + } + + const codeGenState = new FeatureDevCodeGenState(testConfig, getFilePaths(controllerSetup), [], [], tabID, 0, {}) + const newSession = await createSession({ + messenger: controllerSetup.messenger, + sessionState: codeGenState, + conversationID, + tabID, + uploadID, + scheme: featureDevScheme, + }) + return newSession + } + before(() => { sinon.stub(performance, 'now').returns(0) }) @@ -276,37 +311,6 @@ describe('Controller', () => { }) describe('fileClicked', () => { - async function createCodeGenState() { - mockGetCodeGeneration = sinon.stub().resolves({ codeGenerationStatus: { status: 'Complete' } }) - - const workspaceFolders = [controllerSetup.workspaceFolder] as CurrentWsFolders - const testConfig = { - conversationId: conversationID, - proxyClient: { - createConversation: () => sinon.stub(), - createUploadUrl: () => sinon.stub(), - generatePlan: () => sinon.stub(), - startCodeGeneration: () => sinon.stub(), - getCodeGeneration: () => mockGetCodeGeneration(), - exportResultArchive: () => sinon.stub(), - } as unknown as FeatureDevClient, - workspaceRoots: [''], - uploadId: uploadID, - workspaceFolders, - } - - const codeGenState = new CodeGenState(testConfig, getFilePaths(controllerSetup), [], [], tabID, 0, {}) - const newSession = await createSession({ - messenger: controllerSetup.messenger, - sessionState: codeGenState, - conversationID, - tabID, - uploadID, - scheme: featureDevScheme, - }) - return newSession - } - async function fileClicked( getSessionStub: sinon.SinonStub<[tabID: string], Promise>, action: string, @@ -352,7 +356,7 @@ describe('Controller', () => { describe('insertCode', () => { it('sets the number of files accepted counting also deleted files', async () => { async function insertCode() { - const initialState = new PrepareCodeGenState( + const initialState = new FeatureDevPrepareCodeGenState( { conversationId: conversationID, proxyClient: new FeatureDevClient(), @@ -471,44 +475,18 @@ describe('Controller', () => { ['EmptyPatchException', MetricDataResult.LlmFailure], [PromptRefusalException.name, MetricDataResult.Error], [NoChangeRequiredException.name, MetricDataResult.Error], + [MonthlyConversationLimitError.name, MetricDataResult.Error], + [CodeIterationLimitError.name, MetricDataResult.Error], ]) function getMetricResult(error: ToolkitError): MetricDataResult { if (error instanceof FeatureDevServiceError && error.code) { return errorResultMapping.get(error.code) ?? MetricDataResult.Error } - return errorResultMapping.get(error.constructor.name) ?? MetricDataResult.Fault - } - - async function createCodeGenState() { - mockGetCodeGeneration = sinon.stub().resolves({ codeGenerationStatus: { status: 'Complete' } }) - - const workspaceFolders = [controllerSetup.workspaceFolder] as CurrentWsFolders - const testConfig = { - conversationId: conversationID, - proxyClient: { - createConversation: () => sinon.stub(), - createUploadUrl: () => sinon.stub(), - generatePlan: () => sinon.stub(), - startCodeGeneration: () => sinon.stub(), - getCodeGeneration: () => mockGetCodeGeneration(), - exportResultArchive: () => sinon.stub(), - } as unknown as FeatureDevClient, - workspaceRoots: [''], - uploadId: uploadID, - workspaceFolders, + if (isAPIClientError(error)) { + return MetricDataResult.Error } - - const codeGenState = new CodeGenState(testConfig, getFilePaths(controllerSetup), [], [], tabID, 0, {}) - const newSession = await createSession({ - messenger: controllerSetup.messenger, - sessionState: codeGenState, - conversationID, - tabID, - uploadID, - scheme: featureDevScheme, - }) - return newSession + return errorResultMapping.get(error.constructor.name) ?? MetricDataResult.Fault } async function verifyException(error: ToolkitError) { diff --git a/packages/core/src/test/amazonqFeatureDev/session/sessionState.test.ts b/packages/core/src/test/amazonqFeatureDev/session/sessionState.test.ts index 5ce34a079d3..2d68654ee00 100644 --- a/packages/core/src/test/amazonqFeatureDev/session/sessionState.test.ts +++ b/packages/core/src/test/amazonqFeatureDev/session/sessionState.test.ts @@ -6,86 +6,26 @@ import * as vscode from 'vscode' import assert from 'assert' import sinon from 'sinon' -import { MockCodeGenState, CodeGenState, PrepareCodeGenState } from '../../../amazonqFeatureDev/session/sessionState' -import { VirtualFileSystem } from '../../../shared/virtualFilesystem' -import { SessionStateConfig, SessionStateAction } from '../../../amazonqFeatureDev/types' -import { MessagePublisher } from '../../../amazonq/messages/messagePublisher' -import { FeatureDevClient } from '../../../amazonqFeatureDev/client/featureDev' +import { + MockCodeGenState, + FeatureDevPrepareCodeGenState, + FeatureDevCodeGenState, +} from '../../../amazonqFeatureDev/session/sessionState' import { ToolkitError } from '../../../shared/errors' import * as crypto from '../../../shared/crypto' -import { TelemetryHelper } from '../../../amazonqFeatureDev/util/telemetryHelper' -import { createTestWorkspaceFolder } from '../../testUtil' -import { Messenger } from '../../../amazonq/commons/connector/baseMessenger' -import { AppToWebViewMessageDispatcher } from '../../../amazonq/commons/connector/connectorMessages' -import { featureDevChat } from '../../../amazonqFeatureDev' +import { createMockSessionStateAction } from '../../amazonq/utils' -const mockSessionStateAction = (msg?: string): SessionStateAction => { - return { - task: 'test-task', - msg: msg ?? 'test-msg', - fs: new VirtualFileSystem(), - messenger: new Messenger( - new AppToWebViewMessageDispatcher(new MessagePublisher(new vscode.EventEmitter())), - featureDevChat - ), - telemetry: new TelemetryHelper(), - uploadHistory: {}, - } -} +import { createTestContext, setupTestHooks } from '../../amazonq/session/testSetup' -let mockGetCodeGeneration: sinon.SinonStub -let mockExportResultArchive: sinon.SinonStub -let mockCreateUploadUrl: sinon.SinonStub -const mockSessionStateConfig = ({ - conversationId, - uploadId, - workspaceFolder, - currentCodeGenerationId, -}: { - conversationId: string - uploadId: string - workspaceFolder: vscode.WorkspaceFolder - currentCodeGenerationId?: string -}): SessionStateConfig => ({ - workspaceRoots: ['fake-source'], - workspaceFolders: [workspaceFolder], - conversationId, - proxyClient: { - createConversation: () => sinon.stub(), - createUploadUrl: () => mockCreateUploadUrl(), - startCodeGeneration: () => sinon.stub(), - getCodeGeneration: () => mockGetCodeGeneration(), - exportResultArchive: () => mockExportResultArchive(), - } as unknown as FeatureDevClient, - uploadId, - currentCodeGenerationId, -}) - -describe('sessionState', () => { - const conversationId = 'conversation-id' - const uploadId = 'upload-id' - const tabId = 'tab-id' - const currentCodeGenerationId = '' - let testConfig: SessionStateConfig - - beforeEach(async () => { - testConfig = mockSessionStateConfig({ - conversationId, - uploadId, - workspaceFolder: await createTestWorkspaceFolder('fake-root'), - currentCodeGenerationId, - }) - }) - - afterEach(() => { - sinon.restore() - }) +describe('sessionStateFeatureDev', () => { + const context = createTestContext() + setupTestHooks(context) describe('MockCodeGenState', () => { it('loops forever in the same state', async () => { sinon.stub(crypto, 'randomUUID').returns('upload-id' as ReturnType<(typeof crypto)['randomUUID']>) - const testAction = mockSessionStateAction() - const state = new MockCodeGenState(testConfig, tabId) + const testAction = createMockSessionStateAction() + const state = new MockCodeGenState(context.testConfig, context.tabId) const result = await state.interact(testAction) assert.deepStrictEqual(result, { @@ -95,33 +35,45 @@ describe('sessionState', () => { }) }) - describe('PrepareCodeGenState', () => { + describe('FeatureDevPrepareCodeGenState', () => { it('error when failing to prepare repo information', async () => { sinon.stub(vscode.workspace, 'findFiles').throws() - mockCreateUploadUrl = sinon.stub().resolves({ uploadId: '', uploadUrl: '' }) - const testAction = mockSessionStateAction() + context.testMocks.createUploadUrl!.resolves({ uploadId: '', uploadUrl: '' }) + const testAction = createMockSessionStateAction() await assert.rejects(() => { - return new PrepareCodeGenState(testConfig, [], [], [], tabId, 0).interact(testAction) + return new FeatureDevPrepareCodeGenState(context.testConfig, [], [], [], context.tabId, 0).interact( + testAction + ) }) }) }) - describe('CodeGenState', () => { - it('transitions to PrepareCodeGenState when codeGenerationStatus ready ', async () => { - mockGetCodeGeneration = sinon.stub().resolves({ + describe('FeatureDevCodeGenState', () => { + it('transitions to FeatureDevPrepareCodeGenState when codeGenerationStatus ready ', async () => { + context.testMocks.getCodeGeneration!.resolves({ codeGenerationStatus: { status: 'Complete' }, codeGenerationRemainingIterationCount: 2, codeGenerationTotalIterationCount: 3, }) - mockExportResultArchive = sinon.stub().resolves({ newFileContents: [], deletedFiles: [], references: [] }) + context.testMocks.exportResultArchive!.resolves({ newFileContents: [], deletedFiles: [], references: [] }) - const testAction = mockSessionStateAction() - const state = new CodeGenState(testConfig, [], [], [], tabId, 0, {}, 2, 3) + const testAction = createMockSessionStateAction() + const state = new FeatureDevCodeGenState(context.testConfig, [], [], [], context.tabId, 0, {}, 2, 3) const result = await state.interact(testAction) - const nextState = new PrepareCodeGenState(testConfig, [], [], [], tabId, 1, 2, 3, undefined) + const nextState = new FeatureDevPrepareCodeGenState( + context.testConfig, + [], + [], + [], + context.tabId, + 1, + 2, + 3, + undefined + ) assert.deepStrictEqual(result.nextState?.deletedFiles, nextState.deletedFiles) assert.deepStrictEqual(result.nextState?.filePaths, result.nextState?.filePaths) @@ -129,9 +81,9 @@ describe('sessionState', () => { }) it('fails when codeGenerationStatus failed ', async () => { - mockGetCodeGeneration = sinon.stub().rejects(new ToolkitError('Code generation failed')) - const testAction = mockSessionStateAction() - const state = new CodeGenState(testConfig, [], [], [], tabId, 0, {}) + context.testMocks.getCodeGeneration!.rejects(new ToolkitError('Code generation failed')) + const testAction = createMockSessionStateAction() + const state = new FeatureDevCodeGenState(context.testConfig, [], [], [], context.tabId, 0, {}) try { await state.interact(testAction) assert.fail('failed code generations should throw an error') diff --git a/packages/core/src/test/index.ts b/packages/core/src/test/index.ts index 7e6d500a30c..9a01973e26d 100644 --- a/packages/core/src/test/index.ts +++ b/packages/core/src/test/index.ts @@ -22,6 +22,6 @@ export { getTestWorkspaceFolder } from '../testInteg/integrationTestsUtilities' export * from './codewhisperer/testUtil' export * from './credentials/testUtil' export * from './testUtil' -export * from './amazonqFeatureDev/utils' +export * from './amazonq/utils' export * from './fake/mockFeatureConfigData' export * from './shared/ui/testUtils' diff --git a/packages/core/src/test/testLogger.ts b/packages/core/src/test/testLogger.ts index a2970c37d8b..ae75be5c9ba 100644 --- a/packages/core/src/test/testLogger.ts +++ b/packages/core/src/test/testLogger.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Loggable, LogLevel } from '../shared/logger' +import { Loggable, LogLevel } from '../shared/logger/logger' import { BaseLogger, compareLogLevel } from '../shared/logger/logger' import { Uri } from 'vscode' import util from 'util' diff --git a/packages/core/src/testInteg/perf/registerNewFiles.test.ts b/packages/core/src/testInteg/perf/registerNewFiles.test.ts index 6ece10712f1..716e79d4e48 100644 --- a/packages/core/src/testInteg/perf/registerNewFiles.test.ts +++ b/packages/core/src/testInteg/perf/registerNewFiles.test.ts @@ -5,10 +5,12 @@ import assert from 'assert' import sinon from 'sinon' import * as vscode from 'vscode' -import { featureDevScheme, NewFileInfo, NewFileZipContents, registerNewFiles } from '../../amazonqFeatureDev' +import { featureDevScheme } from '../../amazonqFeatureDev' import { getEqualOSTestOptions, performanceTest } from '../../shared/performance/performance' import { getTestWorkspaceFolder } from '../integrationTestsUtilities' import { VirtualFileSystem } from '../../shared' +import { registerNewFiles } from '../../amazonq/util/files' +import { NewFileInfo, NewFileZipContents } from '../../amazonq' interface SetupResult { workspace: vscode.WorkspaceFolder diff --git a/packages/core/src/threatComposer/handlers/logMessageHandler.ts b/packages/core/src/threatComposer/handlers/logMessageHandler.ts index 8f88a2f15a4..85ed05af104 100644 --- a/packages/core/src/threatComposer/handlers/logMessageHandler.ts +++ b/packages/core/src/threatComposer/handlers/logMessageHandler.ts @@ -4,7 +4,7 @@ */ import { Command, LogMessage, Message, MessageType, WebviewContext } from '../types' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' import * as vscode from 'vscode' import { sendThreatComposerErrored } from './webviewTelemetryHandler' diff --git a/packages/core/src/threatComposer/handlers/onFileChangedHandler.ts b/packages/core/src/threatComposer/handlers/onFileChangedHandler.ts index bded740e3c7..6f40b8ddbd6 100644 --- a/packages/core/src/threatComposer/handlers/onFileChangedHandler.ts +++ b/packages/core/src/threatComposer/handlers/onFileChangedHandler.ts @@ -6,7 +6,7 @@ import { Command, FileChangedMessage, MessageType, WebviewContext } from '../types' import vscode from 'vscode' import fs from '../../shared/fs/fs' -import { getLogger } from '../../shared/logger' +import { getLogger } from '../../shared/logger/logger' /** * Function to call when the text document has been modified diff --git a/packages/core/src/threatComposer/threatComposerEditor.ts b/packages/core/src/threatComposer/threatComposerEditor.ts index 7bab20ca1a2..6bfb9ce9732 100644 --- a/packages/core/src/threatComposer/threatComposerEditor.ts +++ b/packages/core/src/threatComposer/threatComposerEditor.ts @@ -12,7 +12,7 @@ import { telemetry } from '../shared/telemetry/telemetry' import { onFileChanged } from './handlers/onFileChangedHandler' import { onThemeChanged } from './handlers/onThemeChangedHandler' import { sendThreatComposerOpenCancelled } from './handlers/webviewTelemetryHandler' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' const localize = nls.loadMessageBundle() diff --git a/packages/core/src/threatComposer/threatComposerEditorProvider.ts b/packages/core/src/threatComposer/threatComposerEditorProvider.ts index ffa53aa9c80..a742e17b40c 100644 --- a/packages/core/src/threatComposer/threatComposerEditorProvider.ts +++ b/packages/core/src/threatComposer/threatComposerEditorProvider.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode' import * as nls from 'vscode-nls' import fs from '../shared/fs/fs' import request from '../shared/request' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { ThreatComposerEditor } from './threatComposerEditor' import { ToolkitError } from '../shared/errors' import { telemetry } from '../shared/telemetry/telemetry' diff --git a/packages/core/src/webviews/server.ts b/packages/core/src/webviews/server.ts index 8914afce6be..a80b44a8253 100644 --- a/packages/core/src/webviews/server.ts +++ b/packages/core/src/webviews/server.ts @@ -4,7 +4,7 @@ */ import * as vscode from 'vscode' -import { getLogger } from '../shared/logger' +import { getLogger } from '../shared/logger/logger' import { Message } from './client' import { AsyncResource } from 'async_hooks' import { ToolkitError } from '../shared/errors' diff --git a/plugins/eslint-plugin-aws-toolkits/index.ts b/plugins/eslint-plugin-aws-toolkits/index.ts index 87ee111c095..88afc893348 100644 --- a/plugins/eslint-plugin-aws-toolkits/index.ts +++ b/plugins/eslint-plugin-aws-toolkits/index.ts @@ -11,6 +11,7 @@ import NoStringExecForChildProcess from './lib/rules/no-string-exec-for-child-pr import NoConsoleLog from './lib/rules/no-console-log' import noJsonStringifyInLog from './lib/rules/no-json-stringify-in-log' import noPrintfMismatch from './lib/rules/no-printf-mismatch' +import noIndexImport from './lib/rules/no-index-import' const rules = { 'no-await-on-vscode-msg': NoAwaitOnVscodeMsg, @@ -21,6 +22,7 @@ const rules = { 'no-console-log': NoConsoleLog, 'no-json-stringify-in-log': noJsonStringifyInLog, 'no-printf-mismatch': noPrintfMismatch, + 'no-index-import': noIndexImport, } export { rules } diff --git a/plugins/eslint-plugin-aws-toolkits/lib/rules/no-index-import.ts b/plugins/eslint-plugin-aws-toolkits/lib/rules/no-index-import.ts new file mode 100644 index 00000000000..caebd59e803 --- /dev/null +++ b/plugins/eslint-plugin-aws-toolkits/lib/rules/no-index-import.ts @@ -0,0 +1,95 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { ESLintUtils, TSESTree } from '@typescript-eslint/utils' +import { Rule } from 'eslint' +import path from 'path' +// eslint-disable-next-line no-restricted-imports +import * as fs from 'fs' + +export const errMsg = + 'do not import from folders or index.ts files since it can cause circular dependencies. import from the file directly.' + +/** + * Prevents TS imports from index.ts in packages/core/src (test files ignored). + * It is easy to create cryptic circular dependency issues in packages/core due to the current import/export structure. + * + * Example: + * - index.ts + * export Auth from './auth' + * export Connection from './connection' + * - auth.ts + * export class Auth + * - connection.ts + * import { Auth } from '.' // circular dependency + * export type Connection + * + * This is a problem because connection.ts depends on index.ts to export 'Auth', which depends on connection.ts + * to export `Connection`. + */ +export default ESLintUtils.RuleCreator.withoutDocs({ + meta: { + docs: { + description: 'disallow importing from index.ts files in packages/core/src/', + recommended: 'recommended', + }, + messages: { + default: errMsg, + }, + type: 'problem', + fixable: 'code', + schema: [], + }, + defaultOptions: [], + create(context) { + const filePath = context.physicalFilename + if (!filePath.match(/packages\/core\/src\/(?!test)/)) { + // only trigger for import statements inside packages/core/ src files, + // but don't include test files + return {} + } + + return { + ImportDeclaration(node: TSESTree.ImportDeclaration) { + const relativeImportPath = node.source.value + + // likely importing from some external module or is an irrelevant file + if ( + !relativeImportPath.startsWith('.') || + ['.json', '.js', '.vue'].includes(path.extname(relativeImportPath)) + ) { + return + } + + const absoluteImportPath = path + .resolve(path.dirname(filePath), relativeImportPath) + .replace(/(\.d)?\.ts/, '') // remove any .d.ts or .ts file extensions on the import (unlikely) + + if (path.basename(absoluteImportPath) !== 'index') { + // Not an index.ts file but is some typescript file. + if (['.ts', '.d.ts'].some((e) => fs.existsSync(absoluteImportPath + e))) { + return + } + + // If it does not exist as a folder, then the path is simply wrong. Another, more descriptive error will surface instead. + if (!fs.existsSync(absoluteImportPath)) { + return + } + } + + return context.report({ + node: node.source, + messageId: 'default', + // TODO: We can add a fixer to resolve the import for us. + // fix: (fixer) => { + // // somehow parse the exports of the imported index.ts file to get the actual export path, + // // then replace the index import with it. + // return fixer.replaceText(node.source, newImport) + // }, + }) + }, + } + }, +}) as unknown as Rule.RuleModule diff --git a/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/index.ts b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/index.ts new file mode 100644 index 00000000000..86e8ab59505 --- /dev/null +++ b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/index.ts @@ -0,0 +1,6 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +export { doNothing } from './utils' diff --git a/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/types.d.ts b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/types.d.ts new file mode 100644 index 00000000000..f448ecf26f8 --- /dev/null +++ b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/types.d.ts @@ -0,0 +1,6 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +export interface doNothing {} diff --git a/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/utils.ts b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/utils.ts new file mode 100644 index 00000000000..6975f4fffdd --- /dev/null +++ b/plugins/eslint-plugin-aws-toolkits/test/resources/noIndexImports/utils.ts @@ -0,0 +1,6 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +export function doNothing() {} diff --git a/plugins/eslint-plugin-aws-toolkits/test/rules/no-index-import.test.ts b/plugins/eslint-plugin-aws-toolkits/test/rules/no-index-import.test.ts new file mode 100644 index 00000000000..0185c544b92 --- /dev/null +++ b/plugins/eslint-plugin-aws-toolkits/test/rules/no-index-import.test.ts @@ -0,0 +1,93 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import path from 'path' +import { rules } from '../../index' +import { errMsg } from '../../lib/rules/no-index-import' +import { getRuleTester } from '../testUtil' + +// Linted files need `packages/core/src` in their filepaths for them to pass, but we are referencing test resource files +// from this project directory. So, "inject" the expected substring into this filepath. +const verboseFilePath = `${__dirname.replace('dist/', '')}/../../../../packages/core/src/../../../plugins/eslint-plugin-aws-toolkits/test/rules/${path.basename(__filename.replace('.js', '.ts'))}` + +getRuleTester().run('no-index-import', rules['no-index-import'], { + valid: [ + { + code: "import { doNothing } from '../resources/noIndexImports/utils'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/utils.ts'", + filename: verboseFilePath, + }, + { + code: "import config from '.eslintrc'", + filename: 'packages/amazonq/src/test.ts', + }, + { + code: "import ts from '@typescript'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports'", + filename: verboseFilePath.replace('packages/core/src/', 'packages/core/src/test/../'), + }, + { + code: "import { doNothing } from '../resources/noIndexImports'", + filename: verboseFilePath.replace('packages/core/src/', 'packages/core/src/testInteg/../'), + }, + { + code: "import { doNothing } from '../resources/noIndexImports/utils'", + filename: verboseFilePath.replace('packages/core/src/', 'packages/core/src/index/../'), + }, + { + code: "import { doNothing } from '../resources/noIndexImports/types.d.ts'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/types'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/doesNotExist.json'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/utils.js'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/utils.vue'", + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/nonexistantpath'", + filename: verboseFilePath, + }, + ], + + invalid: [ + { + code: "import { doNothing } from '../resources/noIndexImports'", + errors: [errMsg], + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/'", + errors: [errMsg], + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/index'", + errors: [errMsg], + filename: verboseFilePath, + }, + { + code: "import { doNothing } from '../resources/noIndexImports/index.ts'", + errors: [errMsg], + filename: verboseFilePath, + }, + ], +})