diff --git a/commands/project/migrate.ts b/commands/project/migrate.ts index 0d3b8724b..39262652d 100644 --- a/commands/project/migrate.ts +++ b/commands/project/migrate.ts @@ -1,5 +1,4 @@ import { ArgumentsCamelCase, Argv } from 'yargs'; -import { logger } from '@hubspot/local-dev-lib/logger'; import { AccountArgs, CommonArgs, @@ -15,6 +14,7 @@ import { EXIT_CODES } from '../../lib/enums/exitCodes'; import { makeYargsBuilder } from '../../lib/yargsUtils'; import { uiBetaTag, uiCommandReference } from '../../lib/ui'; import { commands } from '../../lang/en'; +import { uiLogger } from '../../lib/ui/logger'; export type ProjectMigrateArgs = CommonArgs & AccountArgs & @@ -35,7 +35,7 @@ async function handler( const projectConfig = await getProjectConfig(); if (!projectConfig.projectConfig) { - logger.error( + uiLogger.error( commands.project.migrate.errors.noProjectConfig( uiCommandReference('hs app migrate') ) @@ -43,8 +43,8 @@ async function handler( return process.exit(EXIT_CODES.ERROR); } - logger.log(); - logger.log( + uiLogger.log(''); + uiLogger.log( uiBetaTag(commands.project.migrate.preamble(platformVersion), false) ); const { derivedAccountId } = args; diff --git a/lang/en.ts b/lang/en.ts index 4b3a45843..fe15c2538 100644 --- a/lang/en.ts +++ b/lang/en.ts @@ -1207,8 +1207,7 @@ export const commands = { }, logs: { processExited: 'Stopping watcher...', - watchCancelledFromUi: () => - `The watch process has been cancelled from the UI. Any changes made since cancelling have not been uploaded. To resume watching, rerun ${chalk.yellow('`hs project watch`')}.`, + watchCancelledFromUi: `The watch process has been cancelled from the UI. Any changes made since cancelling have not been uploaded. To resume watching, rerun ${uiCommandReference('hs project watch')}.`, resuming: 'Resuming watcher...', uploadSucceeded: (remotePath, filePath) => `Uploaded file "${filePath}" to "${remotePath}"`, @@ -2679,8 +2678,7 @@ export const lib = { validateAccountOption: { invalidPublicAppAccount: `This project contains a public app. The "--account" flag must point to a developer test account to develop this project locally. Alternatively, change your default account to an App Developer Account using ${uiCommandReference('hs accounts use')} and run ${uiCommandReference('hs project dev')} to set up a new Developer Test Account.`, invalidPrivateAppAccount: `This project contains a private app. The account specified with the "--account" flag points to a developer account, which do not support the local development of private apps. Update the "--account" flag to point to a standard, sandbox, or developer test account, or change your default account by running ${uiCommandReference('hs accounts use')}.`, - nonSandboxWarning: command => - `Testing in a sandbox is strongly recommended. To switch the target account, select an option below or run ${chalk.bold(command)} before running the command again.`, + nonSandboxWarning: `Testing in a sandbox is strongly recommended. To switch the target account, select an option below or run ${uiCommandReference('hs accounts use')} before running the command again.`, publicAppNonDeveloperTestAccountWarning: `Local development of public apps is only supported in ${chalk.bold('developer test accounts')}.`, }, createNewProjectForLocalDev: { @@ -2731,6 +2729,9 @@ export const lib = { srcOutsideProjectDir: (projectConfig, srcDir) => `Invalid value for 'srcDir' in ${projectConfig}: ${chalk.bold(`srcDir: "${srcDir}"`)}\n\t'srcDir' must be a relative path to a folder under the project root, such as "." or "./src"`, }, + getProjectConfig: { + error: 'Could not read from project config', + }, ensureProjectExists: { createPrompt: (projectName, accountIdentifier) => `The project ${projectName} does not exist in ${accountIdentifier}. Would you like to create it?`, @@ -2747,12 +2748,12 @@ export const lib = { }, logFeedbackMessage: { feedbackHeader: "We'd love to hear your feedback!", - feedbackMessage: command => - `How are you liking the new projects and developer tools? \n > Run \`${chalk.yellow(command)}\` to let us know what you think!\n`, + feedbackMessage: `How are you liking the new projects and developer tools? \n > Run ${uiCommandReference('hs feedback')} to let us know what you think!\n`, }, }, projectBuildAndDeploy: { makePollTaskStatusFunc: { + errorSummary: 'See below for a summary of errors.', componentCountSingular: 'Found 1 component in this project\n', componentCount: numComponents => `Found ${numComponents} components in this project\n`, @@ -3464,8 +3465,7 @@ export const lib = { noAppsEligible: (accountId, reasons: string[]) => `No apps in account ${accountId} are currently migratable${reasons.length ? `\n - ${reasons.join('\n - ')}` : ''}`, - invalidAccountTypeTitle: () => - `${chalk.bold('Developer account not targeted')}`, + invalidAccountTypeTitle: `${chalk.bold('Developer account not targeted')}`, invalidAccountTypeDescription: (useCommand, authCommand) => `Only public apps created in a developer account can be converted to a project component. Select a connected developer account with ${useCommand} or ${authCommand} and try again.`, appWithAppIdNotFound: appId => diff --git a/lib/app/migrate.ts b/lib/app/migrate.ts index 8896308c6..ebadfeafd 100644 --- a/lib/app/migrate.ts +++ b/lib/app/migrate.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import path from 'path'; import { getCwd, sanitizeFileName } from '@hubspot/local-dev-lib/path'; import { extractZipArchive } from '@hubspot/local-dev-lib/archive'; @@ -47,6 +46,7 @@ import { getProjectBuildDetailUrl, getProjectDetailUrl, } from '../projects/urls'; +import { uiLogger } from '../ui/logger'; export type MigrateAppArgs = CommonArgs & AccountArgs & @@ -247,7 +247,7 @@ async function selectAppToMigrate( }); if (migratableComponents.size !== 0) { - logger.log( + uiLogger.log( lib.migrate.componentsToBeMigrated( `\n - ${[...migratableComponents].join('\n - ')}` ) @@ -255,14 +255,14 @@ async function selectAppToMigrate( } if (unmigratableComponents.size !== 0) { - logger.log( + uiLogger.log( lib.migrate.componentsThatWillNotBeMigrated( `\n - ${[...unmigratableComponents].join('\n - ')}` ) ); } - logger.log(); + uiLogger.log(''); const promptMessage = projectConfig?.projectConfig ? `${lib.migrate.projectMigrationWarning} ${lib.migrate.prompt.proceed}` @@ -517,7 +517,7 @@ async function downloadProjectFiles( // Move the existing source directory to archive fs.renameSync(path.join(projectDir, srcDir), archiveDest); - logger.info(lib.migrate.sourceContentsMoved(archiveDest)); + uiLogger.info(lib.migrate.sourceContentsMoved(archiveDest)); } else { absoluteDestPath = projectDest ? path.resolve(getCwd(), projectDest) @@ -538,7 +538,7 @@ async function downloadProjectFiles( text: lib.migrate.spinners.downloadingProjectContentsComplete, }); - logger.success(`Saved ${projectName} to ${projectDest}`); + uiLogger.success(`Saved ${projectName} to ${projectDest}`); } catch (error) { SpinniesManager.fail('fetchingMigratedProject', { text: lib.migrate.spinners.downloadingProjectContentsFailed, @@ -617,14 +617,14 @@ export async function migrateApp2025_2( projectConfig ); - logger.log( + uiLogger.log( uiLink( 'Project Details', getProjectDetailUrl(projectName, derivedAccountId)! ) ); - logger.log( + uiLogger.log( uiLink( 'Build Details', getProjectBuildDetailUrl(projectName, buildId, derivedAccountId)! @@ -634,8 +634,8 @@ export async function migrateApp2025_2( export function logInvalidAccountError(): void { uiLine(); - logger.error(lib.migrate.errors.invalidAccountTypeTitle); - logger.log( + uiLogger.error(lib.migrate.errors.invalidAccountTypeTitle); + uiLogger.log( lib.migrate.errors.invalidAccountTypeDescription( uiCommandReference('hs account use'), uiCommandReference('hs auth') diff --git a/lib/projects/ProjectLogsManager.ts b/lib/projects/ProjectLogsManager.ts index 13128329c..1c857b5eb 100644 --- a/lib/projects/ProjectLogsManager.ts +++ b/lib/projects/ProjectLogsManager.ts @@ -2,7 +2,7 @@ import { getProjectConfig } from './config'; import { ensureProjectExists } from './ensureProjectExists'; import { fetchProjectComponentsMetadata } from '@hubspot/local-dev-lib/api/projects'; import { AppFunctionComponentMetadata } from '@hubspot/local-dev-lib/types/ComponentStructure'; -import { logger } from '@hubspot/local-dev-lib/logger'; +import { uiLogger } from '../ui/logger'; import { commands } from '../../lang/en'; class _ProjectLogsManager { @@ -71,7 +71,7 @@ class _ProjectLogsManager { } if (!this.accountId) { - logger.debug( + uiLogger.debug( commands.project.logs.errors.projectLogsManagerNotInitialized ); throw new Error(commands.project.logs.errors.generic); diff --git a/lib/projects/buildAndDeploy.ts b/lib/projects/buildAndDeploy.ts index 1a255d9ef..cb6a332a4 100644 --- a/lib/projects/buildAndDeploy.ts +++ b/lib/projects/buildAndDeploy.ts @@ -4,7 +4,6 @@ import { HubSpotPromise } from '@hubspot/local-dev-lib/types/Http'; import { ComponentStructureResponse } from '@hubspot/local-dev-lib/types/ComponentStructure'; import { Build } from '@hubspot/local-dev-lib/types/Build'; import { Deploy } from '@hubspot/local-dev-lib/types/Deploy'; -import { logger } from '@hubspot/local-dev-lib/logger'; import { getBuildStatus, getBuildStructure, @@ -39,6 +38,7 @@ import { } from '../../types/Projects'; import { EXIT_CODES } from '../enums/exitCodes'; import { lib } from '../../lang/en'; +import { uiLogger } from '../ui/logger'; const SPINNER_STATUS = { SPINNING: 'spinning', @@ -116,7 +116,7 @@ type PollTaskStatusFunction = ( function handleTaskStatusError( statusText: ProjectPollStatusFunctionText ): never { - logger.error( + uiLogger.error( lib.projectBuildAndDeploy.makePollTaskStatusFunc.errorFetchingTaskStatus( statusText.TYPE_KEY === PROJECT_BUILD_TEXT.TYPE_KEY ? 'build' : 'deploy' ) @@ -141,7 +141,7 @@ function makePollTaskStatusFunc({ const displayId = deployedBuildId || taskId; if (linkToHubSpot && !silenceLogs) { - logger.log( + uiLogger.log( `\n${linkToHubSpot(accountId, taskName, taskId, deployedBuildId)}\n` ); } @@ -244,7 +244,7 @@ function makePollTaskStatusFunc({ const { data } = await statusFn(accountId, taskName, taskId); taskStatus = data; } catch (e) { - logger.debug(e); + uiLogger.debug(e); logError( e, new ApiErrorContext({ @@ -323,7 +323,7 @@ function makePollTaskStatusFunc({ ); uiLine(); - logger.log( + uiLogger.log( `${statusStrings.SUBTASK_FAIL( failedSubtasks.length === 1 ? getSubtaskName(failedSubtasks[0]) @@ -331,7 +331,9 @@ function makePollTaskStatusFunc({ displayId )}\n` ); - logger.log('See below for a summary of errors.'); + uiLogger.log( + lib.projectBuildAndDeploy.makePollTaskStatusFunc.errorSummary + ); uiLine(); const displayErrors = failedSubtasks.filter( @@ -343,18 +345,18 @@ function makePollTaskStatusFunc({ ); displayErrors.forEach(subTask => { - logger.log( + uiLogger.log( `\n--- ${chalk.bold( getSubtaskName(subTask) )} failed with the following error ---` ); - logger.error(subTask.errorMessage); + uiLogger.error(subTask.errorMessage); // Log nested errors if (subTask.standardError && subTask.standardError.errors) { - logger.log(); + uiLogger.log(''); subTask.standardError.errors.forEach(error => { - logger.log(error.message); + uiLogger.log(error.message); }); } }); @@ -385,7 +387,7 @@ function pollBuildAutodeployStatus( const response = await getBuildStatus(accountId, taskName, buildId); build = response.data; } catch (e) { - logger.debug(e); + uiLogger.debug(e); return reject( new Error( lib.projectBuildAndDeploy.pollBuildAutodeployStatusError(buildId) @@ -485,9 +487,9 @@ export async function displayWarnLogs( if (result && result.logs) { const logLength = result.logs.length; result.logs.forEach((log, i) => { - logger.warn(log.message); + uiLogger.warn(log.message); if (i < logLength - 1) { - logger.log(''); + uiLogger.log(''); } }); } @@ -524,7 +526,7 @@ export async function pollProjectBuildAndDeploy( return result; } else if (buildStatus.isAutoDeployEnabled) { if (!silenceLogs) { - logger.log( + uiLogger.log( lib.projectBuildAndDeploy.pollProjectBuildAndDeploy.buildSucceededAutomaticallyDeploying( buildId, uiAccountDescription(accountId) @@ -561,7 +563,7 @@ export async function pollProjectBuildAndDeploy( result.succeeded = false; } } else if (!silenceLogs) { - logger.log( + uiLogger.log( lib.projectBuildAndDeploy.pollProjectBuildAndDeploy.unableToFindAutodeployStatus( buildId, uiLink( @@ -576,14 +578,14 @@ export async function pollProjectBuildAndDeploy( try { if (tempFile) { tempFile.removeCallback(); - logger.debug( + uiLogger.debug( lib.projectBuildAndDeploy.pollProjectBuildAndDeploy.cleanedUpTempFile( tempFile.name ) ); } } catch (e) { - logger.error(e); + logError(e); } if (result && result.deployResult) { diff --git a/lib/projects/config.ts b/lib/projects/config.ts index e5ebcef25..9a7a52882 100644 --- a/lib/projects/config.ts +++ b/lib/projects/config.ts @@ -1,13 +1,13 @@ import fs from 'fs-extra'; import path from 'path'; import findup from 'findup-sync'; -import { logger } from '@hubspot/local-dev-lib/logger'; import { getAbsoluteFilePath, getCwd } from '@hubspot/local-dev-lib/path'; import { ProjectConfig } from '../../types/Projects'; import { PROJECT_CONFIG_FILE } from '../constants'; import { lib } from '../../lang/en'; import { EXIT_CODES } from '../enums/exitCodes'; +import { uiLogger } from '../ui/logger'; export function writeProjectConfig( configPath: string, @@ -16,9 +16,9 @@ export function writeProjectConfig( try { fs.ensureFileSync(configPath); fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); - logger.debug(`Wrote project config at ${configPath}`); + uiLogger.debug(`Wrote project config at ${configPath}`); } catch (e) { - logger.debug(e); + uiLogger.debug(e); return false; } return true; @@ -61,7 +61,7 @@ export async function getProjectConfig( projectConfig, }; } catch (e) { - logger.error('Could not read from project config'); + uiLogger.error(lib.projects.getProjectConfig.error); return { projectConfig: null, projectDir: null }; } } @@ -71,12 +71,12 @@ export function validateProjectConfig( projectDir: string | null ): asserts projectConfig is ProjectConfig { if (!projectConfig || !projectDir) { - logger.error(lib.projects.validateProjectConfig.configNotFound); + uiLogger.error(lib.projects.validateProjectConfig.configNotFound); return process.exit(EXIT_CODES.ERROR); } if (!projectConfig.name || !projectConfig.srcDir) { - logger.error(lib.projects.validateProjectConfig.configMissingFields); + uiLogger.error(lib.projects.validateProjectConfig.configMissingFields); return process.exit(EXIT_CODES.ERROR); } @@ -86,7 +86,7 @@ export function validateProjectConfig( '.', path.join(projectDir, PROJECT_CONFIG_FILE) ); - logger.error( + uiLogger.error( lib.projects.validateProjectConfig.srcOutsideProjectDir( projectConfigFile, projectConfig.srcDir @@ -96,7 +96,7 @@ export function validateProjectConfig( } if (!fs.existsSync(resolvedPath)) { - logger.error( + uiLogger.error( lib.projects.validateProjectConfig.srcDirNotFound( projectConfig.srcDir, projectDir diff --git a/lib/projects/create.ts b/lib/projects/create.ts index df50b69f1..9258eb3f3 100644 --- a/lib/projects/create.ts +++ b/lib/projects/create.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import { fetchRepoFile } from '@hubspot/local-dev-lib/api/github'; import { RepoPath } from '@hubspot/local-dev-lib/types/Github'; import { @@ -13,6 +12,7 @@ import { } from '../../types/Projects'; import { debugError } from '../errorHandlers/index'; import { lib } from '../../lang/en'; +import { uiLogger } from '../ui/logger'; export const EMPTY_PROJECT_TEMPLATE_NAME = 'no-template'; const PROJECT_TEMPLATE_PROPERTIES = ['name', 'label', 'path', 'insertPath']; @@ -54,12 +54,12 @@ export async function getProjectTemplateListFromRepo( config = data; } catch (e) { debugError(e); - logger.error(lib.projects.create.errors.missingConfigFileTemplateSource); + uiLogger.error(lib.projects.create.errors.missingConfigFileTemplateSource); return process.exit(EXIT_CODES.ERROR); } if (!config || !config[PROJECT_COMPONENT_TYPES.PROJECTS]) { - logger.error(lib.projects.create.errors.noProjectsInConfig); + uiLogger.error(lib.projects.create.errors.noProjectsInConfig); return process.exit(EXIT_CODES.ERROR); } @@ -72,7 +72,7 @@ export async function getProjectTemplateListFromRepo( ); if (!templatesContainAllProperties) { - logger.error(lib.projects.create.errors.missingPropertiesInConfig); + uiLogger.error(lib.projects.create.errors.missingPropertiesInConfig); return process.exit(EXIT_CODES.ERROR); } diff --git a/lib/projects/ensureProjectExists.ts b/lib/projects/ensureProjectExists.ts index 430abea0e..70f0a94e6 100644 --- a/lib/projects/ensureProjectExists.ts +++ b/lib/projects/ensureProjectExists.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import { createProject, fetchProject, @@ -14,6 +13,7 @@ import { uiAccountDescription } from '../ui'; import SpinniesManager from '../ui/SpinniesManager'; import { logError, ApiErrorContext } from '../errorHandlers/index'; import { lib } from '../../lang/en'; +import { uiLogger } from '../ui/logger'; async function pollFetchProject( accountId: number, @@ -98,7 +98,7 @@ export async function ensureProjectExists( if (shouldCreateProject) { try { const { data: project } = await createProject(accountId, projectName); - logger.success( + uiLogger.success( lib.projects.ensureProjectExists.createSuccess( projectName, accountIdentifier @@ -111,7 +111,7 @@ export async function ensureProjectExists( } } else { if (!noLogs) { - logger.log( + uiLogger.log( lib.projects.ensureProjectExists.notFound( projectName, accountIdentifier diff --git a/lib/projects/localDev/DevServerManager.ts b/lib/projects/localDev/DevServerManager.ts index ca9b9cc79..9c824c21b 100644 --- a/lib/projects/localDev/DevServerManager.ts +++ b/lib/projects/localDev/DevServerManager.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import { Environment } from '@hubspot/local-dev-lib/types/Config'; import { promptUser } from '../../prompts/promptUtils'; import { DevModeInterface as UIEDevModeInterface } from '@hubspot/ui-extensions-dev-server'; @@ -18,6 +17,7 @@ import { Component, } from '../../../types/Projects'; import { lib } from '../../../lang/en'; +import { uiLogger } from '../../ui/logger'; const SERVER_KEYS = { privateApp: 'privateApp', @@ -85,7 +85,7 @@ class DevServerManager { if (Object.keys(compatibleComponents).length) { await callback(devServer.serverInterface, compatibleComponents); } else { - logger.debug(lib.DevServerManager.noCompatibleComponents(serverKey)); + uiLogger.debug(lib.DevServerManager.noCompatibleComponents(serverKey)); } } } @@ -129,7 +129,7 @@ class DevServerManager { components: compatibleComponents, onUploadRequired, promptUser, - logger, + uiLogger, urls: { api: getHubSpotApiOrigin(env), web: getHubSpotWebsiteOrigin(env), diff --git a/lib/projects/localDev/DevServerManagerV2.ts b/lib/projects/localDev/DevServerManagerV2.ts index 14ae1ae59..b6abc2a10 100644 --- a/lib/projects/localDev/DevServerManagerV2.ts +++ b/lib/projects/localDev/DevServerManagerV2.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import { Environment } from '@hubspot/local-dev-lib/types/Config'; import { promptUser } from '../../prompts/promptUtils'; import { DevModeUnifiedInterface as UIEDevModeInterface } from '@hubspot/ui-extensions-dev-server'; @@ -15,6 +14,7 @@ import { getAccountConfig } from '@hubspot/local-dev-lib/config'; import { ProjectConfig } from '../../../types/Projects'; import { IntermediateRepresentationNodeLocalDev } from '@hubspot/project-parsing-lib/src/lib/types'; import { lib } from '../../../lang/en'; +import { uiLogger } from '../../ui/logger'; type DevServerInterface = { // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type @@ -61,7 +61,7 @@ class DevServerManagerV2 { await serverInterface.setup({ components: projectNodes, promptUser, - logger, + uiLogger, urls: { api: getHubSpotApiOrigin(env), web: getHubSpotWebsiteOrigin(env), diff --git a/lib/projects/localDev/LocalDevManager.ts b/lib/projects/localDev/LocalDevManager.ts index 01b6ea955..b09e6d428 100644 --- a/lib/projects/localDev/LocalDevManager.ts +++ b/lib/projects/localDev/LocalDevManager.ts @@ -1,7 +1,6 @@ import path from 'path'; import chokidar, { FSWatcher } from 'chokidar'; import chalk from 'chalk'; -import { logger } from '@hubspot/local-dev-lib/logger'; import { fetchAppInstallationData } from '@hubspot/local-dev-lib/api/localDevAuth'; import { fetchPublicAppsForPortal, @@ -14,6 +13,7 @@ import { import { Build } from '@hubspot/local-dev-lib/types/Build'; import { PublicApp } from '@hubspot/local-dev-lib/types/Apps'; import { Environment } from '@hubspot/local-dev-lib/types/Config'; +import { logger } from '@hubspot/local-dev-lib/logger'; import { PROJECT_CONFIG_FILE } from '../../constants'; import SpinniesManager from '../../ui/SpinniesManager'; @@ -46,6 +46,7 @@ import { installPublicAppPrompt } from '../../prompts/installPublicAppPrompt'; import { confirmPrompt } from '../../prompts/promptUtils'; import { handleKeypress } from '../../process'; import { lib } from '../../../lang/en'; +import { uiLogger } from '../../ui/logger'; const WATCH_EVENTS = { add: 'add', @@ -112,14 +113,14 @@ class LocalDevManager { ); if (!this.targetAccountId || !this.projectConfig || !this.projectDir) { - logger.log(lib.LocalDevManager.failedToInitialize); + uiLogger.log(lib.LocalDevManager.failedToInitialize); process.exit(EXIT_CODES.ERROR); } } async setActiveApp(appUid?: string): Promise { if (!appUid) { - logger.error(lib.LocalDevManager.missingUid); + uiLogger.error(lib.LocalDevManager.missingUid); process.exit(EXIT_CODES.ERROR); } this.activeApp = @@ -176,14 +177,14 @@ class LocalDevManager { } uiLine(); - logger.warn( + uiLogger.warn( lib.LocalDevManager.activeInstallWarning.installCount( this.activePublicAppData.name, this.publicAppActiveInstalls, this.publicAppActiveInstalls === 1 ? 'account' : 'accounts' ) ); - logger.log(lib.LocalDevManager.activeInstallWarning.explanation); + uiLogger.log(lib.LocalDevManager.activeInstallWarning.explanation); uiLine(); const proceed = await confirmPrompt( @@ -202,14 +203,14 @@ class LocalDevManager { // Local dev currently relies on the existence of a deployed build in the target account if (!this.deployedBuild) { - logger.error( + uiLogger.error( lib.LocalDevManager.noDeployedBuild( this.projectConfig.name, uiAccountDescription(this.targetProjectAccountId), this.getUploadCommand() ) ); - logger.log(); + uiLogger.log(''); process.exit(EXIT_CODES.SUCCESS); } @@ -223,15 +224,15 @@ class LocalDevManager { uiBetaTag(lib.LocalDevManager.betaMessage); - logger.log( + uiLogger.log( uiLink( lib.LocalDevManager.learnMoreLocalDevServer, 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server' ) ); - logger.log(); - logger.log( + uiLogger.log(''); + uiLogger.log( chalk.hex(UI_COLORS.SORBET)( lib.LocalDevManager.running( this.projectConfig.name, @@ -239,7 +240,7 @@ class LocalDevManager { ) ) ); - logger.log( + uiLogger.log( uiLink( lib.LocalDevManager.viewProjectLink, getProjectDetailUrl( @@ -250,7 +251,7 @@ class LocalDevManager { ); if (this.activeApp?.type === ComponentTypes.PublicApp) { - logger.log( + uiLogger.log( uiLink( lib.LocalDevManager.viewTestAccountLink, getAccountHomeUrl(this.targetAccountId) @@ -258,10 +259,10 @@ class LocalDevManager { ); } - logger.log(); - logger.log(lib.LocalDevManager.quitHelper); + uiLogger.log(''); + uiLogger.log(lib.LocalDevManager.quitHelper); uiLine(); - logger.log(); + uiLogger.log(''); await this.devServerStart(); @@ -370,17 +371,17 @@ class LocalDevManager { // Avoid logging the warning to the console if it is currently the most // recently logged warning. We do not want to spam the console with the same message. if (!this.uploadWarnings[warning]) { - logger.log(); - logger.warn(lib.LocalDevManager.uploadWarning.header(warning)); - logger.log(lib.LocalDevManager.uploadWarning.stopDev); + uiLogger.log(''); + uiLogger.warn(lib.LocalDevManager.uploadWarning.header(warning)); + uiLogger.log(lib.LocalDevManager.uploadWarning.stopDev); if (this.isGithubLinked) { - logger.log(lib.LocalDevManager.uploadWarning.pushToGithub); + uiLogger.log(lib.LocalDevManager.uploadWarning.pushToGithub); } else { - logger.log( + uiLogger.log( lib.LocalDevManager.uploadWarning.runUpload(this.getUploadCommand()) ); } - logger.log(lib.LocalDevManager.uploadWarning.restartDev); + uiLogger.log(lib.LocalDevManager.uploadWarning.restartDev); this.mostRecentUploadWarning = warning; this.uploadWarnings[warning] = true; @@ -534,7 +535,7 @@ class LocalDevManager { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.setupError( e instanceof Error ? e.message : '' ) @@ -553,7 +554,7 @@ class LocalDevManager { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.startError( e instanceof Error ? e.message : '' ) @@ -569,7 +570,7 @@ class LocalDevManager { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.fileChangeError( e instanceof Error ? e.message : '' ) @@ -585,7 +586,7 @@ class LocalDevManager { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.cleanupError( e instanceof Error ? e.message : '' ) diff --git a/lib/projects/localDev/LocalDevManagerV2.ts b/lib/projects/localDev/LocalDevManagerV2.ts index 1ebf94d3c..2aa7c564f 100644 --- a/lib/projects/localDev/LocalDevManagerV2.ts +++ b/lib/projects/localDev/LocalDevManagerV2.ts @@ -38,6 +38,7 @@ import { handleKeypress } from '../../process'; import { IntermediateRepresentationNodeLocalDev } from '@hubspot/project-parsing-lib/src/lib/types'; import { AppIRNode } from '../../../types/ProjectComponents'; import { lib } from '../../../lang/en'; +import { uiLogger } from '../../ui/logger'; const WATCH_EVENTS = { add: 'add', @@ -106,14 +107,14 @@ class LocalDevManagerV2 { !this.projectConfig || !this.projectDir ) { - logger.log(lib.LocalDevManager.failedToInitialize); + uiLogger.log(lib.LocalDevManager.failedToInitialize); process.exit(EXIT_CODES.ERROR); } } async setActiveApp(appUid?: string): Promise { if (!appUid) { - logger.error(lib.LocalDevManager.missingUid); + uiLogger.error(lib.LocalDevManager.missingUid); process.exit(EXIT_CODES.ERROR); } const app = @@ -172,7 +173,7 @@ class LocalDevManagerV2 { } uiLine(); - logger.warn( + uiLogger.warn( lib.LocalDevManager.activeInstallWarning.installCount( this.activePublicAppData.name, this.publicAppActiveInstalls, @@ -180,7 +181,7 @@ class LocalDevManagerV2 { this.publicAppActiveInstalls === 1 ? 'account' : 'accounts' ) ); - logger.log(lib.LocalDevManager.activeInstallWarning.explanation); + uiLogger.log(lib.LocalDevManager.activeInstallWarning.explanation); uiLine(); const proceed = await confirmPrompt( @@ -199,14 +200,14 @@ class LocalDevManagerV2 { // Local dev currently relies on the existence of a deployed build in the target account if (!this.deployedBuild) { - logger.error( + uiLogger.error( lib.LocalDevManager.noDeployedBuild( this.projectConfig.name, uiAccountDescription(this.targetProjectAccountId), this.getUploadCommand() ) ); - logger.log(); + uiLogger.log(''); process.exit(EXIT_CODES.SUCCESS); } @@ -220,15 +221,15 @@ class LocalDevManagerV2 { uiBetaTag(lib.LocalDevManager.betaMessage); - logger.log( + uiLogger.log( uiLink( lib.LocalDevManager.learnMoreLocalDevServer, 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server' ) ); - logger.log(); - logger.log( + uiLogger.log(''); + uiLogger.log( chalk.hex(UI_COLORS.SORBET)( lib.LocalDevManager.running( this.projectConfig.name, @@ -236,7 +237,7 @@ class LocalDevManagerV2 { ) ) ); - logger.log( + uiLogger.log( uiLink( lib.LocalDevManager.viewProjectLink, getProjectDetailUrl( @@ -246,10 +247,10 @@ class LocalDevManagerV2 { ) ); - logger.log(); - logger.log(lib.LocalDevManager.quitHelper); + uiLogger.log(''); + uiLogger.log(lib.LocalDevManager.quitHelper); uiLine(); - logger.log(); + uiLogger.log(''); await this.devServerStart(); @@ -354,17 +355,17 @@ class LocalDevManagerV2 { // Avoid logging the warning to the console if it is currently the most // recently logged warning. We do not want to spam the console with the same message. if (!this.uploadWarnings[warning]) { - logger.log(); - logger.warn(lib.LocalDevManager.uploadWarning.header(warning)); - logger.log(lib.LocalDevManager.uploadWarning.stopDev); + uiLogger.log(''); + uiLogger.warn(lib.LocalDevManager.uploadWarning.header(warning)); + uiLogger.log(lib.LocalDevManager.uploadWarning.stopDev); if (this.isGithubLinked) { - logger.log(lib.LocalDevManager.uploadWarning.pushToGithub); + uiLogger.log(lib.LocalDevManager.uploadWarning.pushToGithub); } else { - logger.log( + uiLogger.log( lib.LocalDevManager.uploadWarning.runUpload(this.getUploadCommand()) ); } - logger.log(lib.LocalDevManager.uploadWarning.restartDev); + uiLogger.log(lib.LocalDevManager.uploadWarning.restartDev); this.mostRecentUploadWarning = warning; this.uploadWarnings[warning] = true; @@ -492,7 +493,7 @@ class LocalDevManagerV2 { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.setupError( e instanceof Error ? e.message : '' ) @@ -511,7 +512,7 @@ class LocalDevManagerV2 { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.startError( e instanceof Error ? e.message : '' ) @@ -527,7 +528,7 @@ class LocalDevManagerV2 { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.fileChangeError( e instanceof Error ? e.message : '' ) @@ -543,7 +544,7 @@ class LocalDevManagerV2 { if (this.debug) { logger.error(e); } - logger.error( + uiLogger.error( lib.LocalDevManager.devServer.cleanupError( e instanceof Error ? e.message : '' ) diff --git a/lib/projects/localDev/helpers.ts b/lib/projects/localDev/helpers.ts index ecbd43419..3fb83ffa2 100644 --- a/lib/projects/localDev/helpers.ts +++ b/lib/projects/localDev/helpers.ts @@ -1,4 +1,3 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; import { HUBSPOT_ACCOUNT_TYPES, HUBSPOT_ACCOUNT_TYPE_STRINGS, @@ -69,6 +68,7 @@ import { import { hubspotAccountNamePrompt } from '../../prompts/accountNamePrompt'; import { lib } from '../../../lang/en'; import { FileResult } from 'tmp'; +import { uiLogger } from '../../ui/logger'; // If the user passed in the --account flag, confirm they want to use that account as // their target account, otherwise exit @@ -76,18 +76,20 @@ export async function confirmDefaultAccountIsTarget( accountConfig: CLIAccount ): Promise { if (!accountConfig.name || !accountConfig.accountType) { - logger.error(lib.localDevHelpers.confirmDefaultAccountIsTarget.configError); + uiLogger.error( + lib.localDevHelpers.confirmDefaultAccountIsTarget.configError + ); process.exit(EXIT_CODES.ERROR); } - logger.log(); + uiLogger.log(''); const useDefaultAccount = await confirmDefaultAccountPrompt( accountConfig.name, HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType] ); if (!useDefaultAccount) { - logger.log( + uiLogger.log( lib.localDevHelpers.confirmDefaultAccountIsTarget .declineDefaultAccountExplanation ); @@ -110,12 +112,12 @@ export async function checkIfDefaultAccountIsSupported( defaultAccountIsUnified ) ) { - logger.error( + uiLogger.error( lib.localDevHelpers.checkIfDefaultAccountIsSupported.publicApp ); process.exit(EXIT_CODES.SUCCESS); } else if (!hasPublicApps && isAppDeveloperAccount(accountConfig)) { - logger.error( + uiLogger.error( lib.localDevHelpers.checkIfDefaultAccountIsSupported.privateApp ); process.exit(EXIT_CODES.SUCCESS); @@ -127,7 +129,7 @@ export function checkIfParentAccountIsAuthed(accountConfig: CLIAccount): void { !accountConfig.parentAccountId || !getAccountConfig(accountConfig.parentAccountId) ) { - logger.error( + uiLogger.error( lib.localDevHelpers.checkIfParentAccountIsAuthed.notAuthedError( accountConfig.parentAccountId || '', uiAccountDescription(getAccountIdentifier(accountConfig)) @@ -144,14 +146,14 @@ export function checkIfAccountFlagIsSupported( ): void { if (hasPublicApps) { if (!isDeveloperTestAccount(accountConfig)) { - logger.error( + uiLogger.error( lib.localDevHelpers.validateAccountOption.invalidPublicAppAccount ); process.exit(EXIT_CODES.SUCCESS); } checkIfParentAccountIsAuthed(accountConfig); } else if (isAppDeveloperAccount(accountConfig)) { - logger.error( + uiLogger.error( lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount ); process.exit(EXIT_CODES.SUCCESS); @@ -164,18 +166,18 @@ export async function suggestRecommendedNestedAccount( accountConfig: CLIAccount, hasPublicApps: boolean ): Promise { - logger.log(); + uiLogger.log(''); uiLine(); if (hasPublicApps) { - logger.log( + uiLogger.log( lib.localDevHelpers.validateAccountOption .publicAppNonDeveloperTestAccountWarning ); } else { - logger.log(lib.localDevHelpers.validateAccountOption.nonSandboxWarning); + uiLogger.log(lib.localDevHelpers.validateAccountOption.nonSandboxWarning); } uiLine(); - logger.log(); + uiLogger.log(''); const targetAccountPrompt = hasPublicApps ? selectDeveloperTestTargetAccountPrompt @@ -198,10 +200,10 @@ export async function createSandboxForLocalDev( ); } catch (err) { if (isMissingScopeError(err)) { - logger.error(lib.sandbox.create.developer.failure.scopes.message); + uiLogger.error(lib.sandbox.create.developer.failure.scopes.message); const websiteOrigin = getHubSpotWebsiteOrigin(env); const url = `${websiteOrigin}/personal-access-key/${accountId}`; - logger.info( + uiLogger.info( lib.sandbox.create.developer.failure.scopes.instructions( accountConfig.name || accountId, url @@ -235,7 +237,7 @@ export async function createSandboxForLocalDev( const sandboxAccountConfig = getAccountConfig(result.sandbox.sandboxHubId); if (!sandboxAccountConfig) { - logger.error(lib.sandbox.create.developer.failure.generic); + uiLogger.error(lib.sandbox.create.developer.failure.generic); process.exit(EXIT_CODES.ERROR); } @@ -277,10 +279,10 @@ export async function createDeveloperTestAccountForLocalDev( } } catch (err) { if (isMissingScopeError(err)) { - logger.error(lib.developerTestAccount.create.failure.scopes.message); + uiLogger.error(lib.developerTestAccount.create.failure.scopes.message); const websiteOrigin = getHubSpotWebsiteOrigin(env); const url = `${websiteOrigin}/personal-access-key/${accountId}`; - logger.info( + uiLogger.info( lib.developerTestAccount.create.failure.scopes.instructions( accountConfig.name || accountId, url @@ -325,12 +327,12 @@ export async function useExistingDevTestAccount( const useExistingDevTestAcct = await confirmUseExistingDeveloperTestAccountPrompt(account); if (!useExistingDevTestAcct) { - logger.log(''); - logger.log( + uiLogger.log(''); + uiLogger.log( lib.localDevHelpers.confirmDefaultAccountIsTarget .declineDefaultAccountExplanation ); - logger.log(''); + uiLogger.log(''); process.exit(EXIT_CODES.SUCCESS); } const devTestAcctConfigName = await saveAccountToConfig( @@ -338,7 +340,7 @@ export async function useExistingDevTestAccount( account.accountName, env ); - logger.success( + uiLogger.success( lib.developerTestAccount.create.success.configFileUpdated( devTestAcctConfigName, PERSONAL_ACCESS_KEY_AUTH_METHOD.name @@ -368,9 +370,9 @@ export async function createNewProjectForLocalDev( projectConfig.name ); - logger.log(); + uiLogger.log(''); uiLine(); - logger.log(explanationString); + uiLogger.log(explanationString); uiLine(); shouldCreateProject = await confirmPrompt( @@ -404,15 +406,15 @@ export async function createNewProjectForLocalDev( return project; } catch (err) { SpinniesManager.fail('createProject'); - logger.log( + uiLogger.log( lib.localDevHelpers.createNewProjectForLocalDev.failedToCreateProject ); process.exit(EXIT_CODES.ERROR); } } else { // We cannot continue if the project does not exist in the target account - logger.log(); - logger.log( + uiLogger.log(''); + uiLogger.log( lib.localDevHelpers.createNewProjectForLocalDev.choseNotToCreateProject ); process.exit(EXIT_CODES.SUCCESS); @@ -426,7 +428,7 @@ function projectUploadCallback( buildId?: number ): Promise { if (!buildId) { - logger.error( + uiLogger.error( lib.localDevHelpers.createInitialBuildForNewProject.genericError ); process.exit(EXIT_CODES.ERROR); @@ -469,11 +471,11 @@ export async function createInitialBuildForNewProject( subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED, }) ) { - logger.log(); - logger.error( + uiLogger.log(''); + uiLogger.error( lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError ); - logger.log(); + uiLogger.log(''); } else { logError( uploadError, @@ -499,11 +501,11 @@ export async function createInitialBuildForNewProject( const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE'); - logger.log(); + uiLogger.log(''); failedSubTasks.forEach(failedSubTask => { - logger.error(failedSubTask.errorMessage); + uiLogger.error(failedSubTask.errorMessage); }); - logger.log(); + uiLogger.log(''); process.exit(EXIT_CODES.ERROR); } diff --git a/lib/projects/ui.ts b/lib/projects/ui.ts index ac2f61de1..0a9b12605 100644 --- a/lib/projects/ui.ts +++ b/lib/projects/ui.ts @@ -1,4 +1,4 @@ -import { logger } from '@hubspot/local-dev-lib/logger'; +import { uiLogger } from '../ui/logger'; import { FEEDBACK_INTERVAL } from '../constants'; import { uiLine } from '../ui'; import { lib } from '../../lang/en'; @@ -6,8 +6,8 @@ import { lib } from '../../lang/en'; export function logFeedbackMessage(buildId: number): void { if (buildId > 0 && buildId % FEEDBACK_INTERVAL === 0) { uiLine(); - logger.log(lib.projects.logFeedbackMessage.feedbackHeader); + uiLogger.log(lib.projects.logFeedbackMessage.feedbackHeader); uiLine(); - logger.log(lib.projects.logFeedbackMessage.feedbackMessage); + uiLogger.log(lib.projects.logFeedbackMessage.feedbackMessage); } } diff --git a/lib/projects/upload.ts b/lib/projects/upload.ts index f3c55ed1f..01e678301 100644 --- a/lib/projects/upload.ts +++ b/lib/projects/upload.ts @@ -4,7 +4,6 @@ import fs from 'fs-extra'; import path from 'path'; import { uploadProject } from '@hubspot/local-dev-lib/api/projects'; import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules'; -import { logger } from '@hubspot/local-dev-lib/logger'; import SpinniesManager from '../ui/SpinniesManager'; import { uiAccountDescription } from '../ui'; @@ -15,6 +14,7 @@ import { logError } from '../errorHandlers'; import util from 'node:util'; import { lib } from '../../lang/en'; import { ensureProjectExists } from './ensureProjectExists'; +import { uiLogger } from '../ui/logger'; async function uploadProjectFiles( accountId: number, @@ -58,7 +58,7 @@ async function uploadProjectFiles( }); if (buildId) { - logger.debug( + uiLogger.debug( lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId) ); } @@ -115,7 +115,7 @@ export async function handleProjectUpload({ const filenames = fs.readdirSync(srcDir); if (!filenames || filenames.length === 0) { - logger.log( + uiLogger.log( lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir) ); process.exit(EXIT_CODES.SUCCESS); @@ -123,7 +123,7 @@ export async function handleProjectUpload({ const tempFile = tmp.fileSync({ postfix: '.zip' }); - logger.debug( + uiLogger.debug( lib.projectUpload.handleProjectUpload.compressing(tempFile.name) ); @@ -132,7 +132,7 @@ export async function handleProjectUpload({ const result = new Promise>(resolve => output.on('close', async function () { - logger.debug( + uiLogger.debug( lib.projectUpload.handleProjectUpload.compressed(archive.pointer()) ); @@ -149,12 +149,12 @@ export async function handleProjectUpload({ { skipValidation } ); - logger.debug( + uiLogger.debug( util.inspect(intermediateRepresentation, false, null, true) ); } catch (e) { if (isTranslationError(e)) { - logger.error(e.toString()); + uiLogger.error(e.toString()); } else { logError(e); } @@ -200,7 +200,7 @@ export async function handleProjectUpload({ const isNodeModule = file.name.includes('node_modules'); if (!isNodeModule || !loggedIgnoredNodeModule) { - logger.debug( + uiLogger.debug( lib.projectUpload.handleProjectUpload.fileFiltered(file.name) ); } diff --git a/lib/projects/watch.ts b/lib/projects/watch.ts index 58a5f2452..41c301c61 100644 --- a/lib/projects/watch.ts +++ b/lib/projects/watch.ts @@ -2,7 +2,6 @@ import chokidar from 'chokidar'; import path from 'path'; import chalk from 'chalk'; import PQueue from 'p-queue'; -import { logger } from '@hubspot/local-dev-lib/logger'; import { isAllowedExtension } from '@hubspot/local-dev-lib/path'; import { JSR_ALLOWED_EXTENSIONS } from '@hubspot/local-dev-lib/constants/extensions'; import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules'; @@ -19,6 +18,7 @@ import { logError, ApiErrorContext } from '../errorHandlers'; import { PROJECT_ERROR_TYPES } from '../constants'; import { ProjectConfig } from '../../types/Projects'; import { commands } from '../../lang/en'; +import { uiLogger } from '../ui/logger'; type ProjectWatchHandlerFunction = ( accountId: number, @@ -87,20 +87,20 @@ function debounceQueueBuild( } timer = setTimeout(async () => { - logger.debug(commands.project.watch.debug.pause); + uiLogger.debug(commands.project.watch.debug.pause); queue.pause(); await queue.onIdle(); try { await queueBuild(accountId, projectName, platformVersion); - logger.debug(commands.project.watch.debug.buildStarted); + uiLogger.debug(commands.project.watch.debug.buildStarted); } catch (err) { if ( isSpecifiedError(err, { subCategory: PROJECT_ERROR_TYPES.MISSING_PROJECT_PROVISION, }) ) { - logger.log(commands.project.watch.logs.watchCancelledFromUi); + uiLogger.log(commands.project.watch.logs.watchCancelledFromUi); process.exit(0); } else { logError(err, new ApiErrorContext({ accountId })); @@ -118,8 +118,8 @@ function debounceQueueBuild( } queue.start(); - logger.log(commands.project.watch.logs.resuming); - logger.log(`\n> Press ${chalk.bold('q')} to quit watching\n`); + uiLogger.log(commands.project.watch.logs.resuming); + uiLogger.log(`\n> Press ${chalk.bold('q')} to quit watching\n`); }, 2000); } @@ -135,18 +135,18 @@ async function queueFileOrFolder( action === 'upload' && !isAllowedExtension(filePath, Array.from(JSR_ALLOWED_EXTENSIONS)) ) { - logger.debug(commands.project.watch.debug.extensionNotAllowed(filePath)); + uiLogger.debug(commands.project.watch.debug.extensionNotAllowed(filePath)); return; } if (shouldIgnoreFile(filePath, true)) { - logger.debug(commands.project.watch.debug.ignored(filePath)); + uiLogger.debug(commands.project.watch.debug.ignored(filePath)); return; } if (!queue.isPaused) { debounceQueueBuild(accountId, projectName, platformVersion); } - logger.debug(commands.project.watch.debug.uploading(filePath, remotePath)); + uiLogger.debug(commands.project.watch.debug.uploading(filePath, remotePath)); return queue.add(async () => { try { @@ -155,12 +155,12 @@ async function queueFileOrFolder( } else if (action === 'deleteFile' || action === 'deleteFolder') { await deleteFileFromBuild(accountId, projectName, remotePath); } - logger.log( + uiLogger.log( // @ts-expect-error commands.project.watch.logs[`${action}Succeeded`](remotePath, filePath) ); } catch (err) { - logger.debug( + uiLogger.debug( // @ts-expect-error commands.project.watch.errors[`${action}Failed`](remotePath, filePath) ); @@ -174,7 +174,7 @@ async function createNewBuild( platformVersion: string ) { try { - logger.debug(commands.project.watch.debug.attemptNewBuild); + uiLogger.debug(commands.project.watch.debug.attemptNewBuild); const { data: { buildId }, } = await provisionBuild(accountId, projectName, platformVersion); @@ -185,7 +185,7 @@ async function createNewBuild( isSpecifiedError(err, { subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED }) ) { await cancelStagedBuild(accountId, projectName); - logger.log(commands.project.watch.logs.previousStagingBuildCancelled); + uiLogger.log(commands.project.watch.logs.previousStagingBuildCancelled); } process.exit(1); } @@ -202,7 +202,7 @@ async function handleWatchEvent( const remotePath = path.relative(projectSourceDir, filePath); if (queue.isPaused) { if (standbyQueue.find(file => file.filePath === filePath)) { - logger.debug(commands.project.watch.debug.fileAlreadyQueued(filePath)); + uiLogger.debug(commands.project.watch.debug.fileAlreadyQueued(filePath)); } else { standbyQueue.push({ filePath, @@ -245,8 +245,8 @@ export async function createWatcher( ignored: file => shouldIgnoreFile(file), }); watcher.on('ready', async () => { - logger.log(commands.project.watch.logs.watching(projectDir)); - logger.log(`\n> Press ${chalk.bold('q')} to quit watching\n`); + uiLogger.log(commands.project.watch.logs.watching(projectDir)); + uiLogger.log(`\n> Press ${chalk.bold('q')} to quit watching\n`); }); watcher.on('add', async path => { handleWatchEvent( diff --git a/lib/ui/logger.ts b/lib/ui/logger.ts new file mode 100644 index 000000000..2cb53c14a --- /dev/null +++ b/lib/ui/logger.ts @@ -0,0 +1,13 @@ +import { logger as _logger } from '@hubspot/local-dev-lib/logger'; + +// Wrapper around LDL logger to provide type checking +export const uiLogger = { + log: (message: string) => _logger.log(message), + error: (message: string) => _logger.error(message), + warn: (message: string) => _logger.warn(message), + success: (message: string) => _logger.success(message), + info: (message: string) => _logger.info(message), + debug: _logger.debug, + group: (message: string) => _logger.group(message), + groupEnd: () => _logger.groupEnd(), +};