@hubspot/cli 7.8.11-experimental.0 → 7.8.12-experimental.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/bin/cli.js +31 -25
  2. package/commands/__tests__/auth.test.js +5 -0
  3. package/commands/__tests__/doctor.test.js +16 -16
  4. package/commands/account/clean.js +18 -27
  5. package/commands/account/createOverride.js +13 -31
  6. package/commands/account/info.js +20 -31
  7. package/commands/account/list.js +16 -22
  8. package/commands/account/remove.js +12 -20
  9. package/commands/account/removeOverride.js +11 -21
  10. package/commands/account/rename.js +6 -9
  11. package/commands/account/use.js +12 -26
  12. package/commands/account.js +2 -2
  13. package/commands/app/__tests__/migrate.test.js +5 -5
  14. package/commands/app/migrate.js +13 -18
  15. package/commands/auth.d.ts +1 -0
  16. package/commands/auth.js +16 -7
  17. package/commands/cms/convertFields.js +7 -9
  18. package/commands/cms/getReactModule.js +9 -14
  19. package/commands/cms/lighthouseScore.js +33 -36
  20. package/commands/cms.js +2 -2
  21. package/commands/completion.js +3 -3
  22. package/commands/config/set.d.ts +1 -1
  23. package/commands/config/set.js +64 -36
  24. package/commands/config.js +2 -2
  25. package/commands/create.js +2 -2
  26. package/commands/customObject/create.js +10 -12
  27. package/commands/customObject/schema/create.js +9 -11
  28. package/commands/customObject/schema/delete.js +16 -16
  29. package/commands/customObject/schema/fetch-all.js +12 -11
  30. package/commands/customObject/schema/fetch.js +15 -15
  31. package/commands/customObject/schema/list.js +4 -4
  32. package/commands/customObject/schema/update.js +13 -13
  33. package/commands/customObject/schema.js +2 -2
  34. package/commands/customObject.js +6 -7
  35. package/commands/doctor.js +8 -11
  36. package/commands/feedback.js +6 -11
  37. package/commands/fetch.js +8 -8
  38. package/commands/filemanager/fetch.js +7 -7
  39. package/commands/filemanager/upload.js +15 -34
  40. package/commands/filemanager.js +2 -2
  41. package/commands/function/deploy.js +11 -29
  42. package/commands/function/list.js +8 -8
  43. package/commands/function/server.js +9 -11
  44. package/commands/function.d.ts +1 -1
  45. package/commands/function.js +2 -2
  46. package/commands/getStarted.js +2 -2
  47. package/commands/hubdb/clear.js +7 -15
  48. package/commands/hubdb/create.js +9 -15
  49. package/commands/hubdb/delete.js +8 -15
  50. package/commands/hubdb/fetch.js +6 -9
  51. package/commands/hubdb.d.ts +1 -1
  52. package/commands/hubdb.js +2 -2
  53. package/commands/init.js +2 -3
  54. package/commands/lint.js +16 -16
  55. package/commands/list.js +8 -14
  56. package/commands/logs.js +14 -20
  57. package/commands/mv.js +6 -17
  58. package/commands/open.js +5 -5
  59. package/commands/project/__tests__/add.test.js +4 -2
  60. package/commands/project/__tests__/deploy.test.js +3 -4
  61. package/commands/project/__tests__/installDeps.test.js +8 -8
  62. package/commands/project/__tests__/logs.test.js +1 -1
  63. package/commands/project/__tests__/migrate.test.js +5 -5
  64. package/commands/project/__tests__/migrateApp.test.js +2 -5
  65. package/commands/project/__tests__/validate.test.js +98 -0
  66. package/commands/project/add.js +3 -3
  67. package/commands/project/cloneApp.js +14 -19
  68. package/commands/project/create.js +0 -1
  69. package/commands/project/deploy.js +3 -3
  70. package/commands/project/dev/deprecatedFlow.js +7 -16
  71. package/commands/project/dev/index.js +14 -12
  72. package/commands/project/dev/unifiedFlow.js +3 -1
  73. package/commands/project/download.js +10 -13
  74. package/commands/project/installDeps.js +8 -8
  75. package/commands/project/listBuilds.js +11 -20
  76. package/commands/project/logs.js +21 -24
  77. package/commands/project/migrate.js +14 -16
  78. package/commands/project/migrateApp.js +9 -15
  79. package/commands/project/open.js +6 -13
  80. package/commands/project/upload.js +16 -25
  81. package/commands/project/validate.js +6 -6
  82. package/commands/project/watch.js +13 -22
  83. package/commands/project.js +2 -2
  84. package/commands/sandbox/__tests__/create.test.js +5 -5
  85. package/commands/sandbox/create.js +22 -32
  86. package/commands/sandbox/delete.js +38 -63
  87. package/commands/sandbox.js +2 -2
  88. package/commands/secret/addSecret.js +7 -17
  89. package/commands/secret/deleteSecret.js +10 -20
  90. package/commands/secret/listSecret.js +8 -10
  91. package/commands/secret/updateSecret.js +9 -17
  92. package/commands/secret.js +2 -2
  93. package/commands/testAccount/__tests__/delete.test.js +2 -4
  94. package/commands/testAccount/delete.d.ts +4 -3
  95. package/commands/testAccount/delete.js +155 -14
  96. package/commands/theme/preview.js +1 -4
  97. package/lang/en.d.ts +310 -102
  98. package/lang/en.js +351 -147
  99. package/lang/en.lyaml +2 -2
  100. package/lib/__tests__/buildAccount.test.js +2 -1
  101. package/lib/__tests__/commonOpts.test.js +1 -1
  102. package/lib/__tests__/dependencyManagement.test.js +1 -1
  103. package/lib/__tests__/developerTestAccounts.test.js +3 -3
  104. package/lib/__tests__/npm.test.js +1 -1
  105. package/lib/__tests__/oauth.test.js +4 -4
  106. package/lib/__tests__/process.test.js +10 -5
  107. package/lib/__tests__/sandboxSync.test.js +8 -8
  108. package/lib/__tests__/sandboxes.test.js +8 -8
  109. package/lib/__tests__/serverlessLogs.test.js +1 -1
  110. package/lib/__tests__/usageTracking.test.js +5 -5
  111. package/lib/__tests__/validation.test.js +2 -1
  112. package/lib/__tests__/yargsUtils.test.js +83 -9
  113. package/lib/app/__tests__/migrate.test.js +5 -5
  114. package/lib/app/__tests__/migrate_legacy.test.js +1 -1
  115. package/lib/app/migrate.js +1 -1
  116. package/lib/app/migrate_legacy.js +20 -24
  117. package/lib/buildAccount.js +25 -57
  118. package/lib/commonOpts.d.ts +1 -1
  119. package/lib/commonOpts.js +25 -22
  120. package/lib/configOptions.js +7 -0
  121. package/lib/constants.d.ts +6 -1
  122. package/lib/constants.js +10 -1
  123. package/lib/dependencyManagement.js +9 -27
  124. package/lib/developerTestAccounts.js +9 -23
  125. package/lib/doctor/Diagnosis.js +11 -23
  126. package/lib/doctor/DiagnosticInfoBuilder.js +12 -11
  127. package/lib/doctor/Doctor.js +42 -90
  128. package/lib/doctor/__tests__/Doctor.test.js +4 -4
  129. package/lib/errorHandlers/index.js +12 -20
  130. package/lib/errorHandlers/suppressError.js +11 -18
  131. package/lib/lang.js +6 -5
  132. package/lib/links.js +4 -4
  133. package/lib/middleware/__test__/commandTargetingUtils.test.d.ts +1 -0
  134. package/lib/middleware/__test__/commandTargetingUtils.test.js +99 -0
  135. package/lib/middleware/__test__/configMiddleware.test.js +11 -11
  136. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +6 -8
  137. package/lib/middleware/commandTargetingUtils.d.ts +8 -0
  138. package/lib/middleware/commandTargetingUtils.js +78 -0
  139. package/lib/middleware/configMiddleware.d.ts +1 -1
  140. package/lib/middleware/configMiddleware.js +21 -81
  141. package/lib/middleware/fireAlarmMiddleware.js +15 -17
  142. package/lib/middleware/gitMiddleware.js +5 -1
  143. package/lib/middleware/notificationsMiddleware.js +5 -11
  144. package/lib/middleware/yargsChecksMiddleware.js +6 -9
  145. package/lib/npm.js +2 -2
  146. package/lib/oauth.js +5 -5
  147. package/lib/process.js +5 -4
  148. package/lib/projects/__tests__/AppDevModeInterface.test.js +14 -34
  149. package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +70 -39
  150. package/lib/projects/__tests__/localDevProjectHelpers.test.js +2 -0
  151. package/lib/projects/__tests__/platformVersion.test.js +8 -8
  152. package/lib/projects/__tests__/projects.test.js +12 -12
  153. package/lib/projects/__tests__/structure.test.js +3 -3
  154. package/lib/projects/__tests__/upload.test.d.ts +1 -0
  155. package/lib/projects/__tests__/upload.test.js +82 -0
  156. package/lib/projects/add/__tests__/legacyAddComponent.test.js +6 -6
  157. package/lib/projects/add/__tests__/v3AddComponent.test.js +4 -4
  158. package/lib/projects/create/__tests__/legacy.test.js +5 -5
  159. package/lib/projects/create/__tests__/v3.test.js +1 -1
  160. package/lib/projects/create/index.js +2 -2
  161. package/lib/projects/create/legacy.js +2 -2
  162. package/lib/projects/create/v3.js +2 -2
  163. package/lib/projects/localDev/AppDevModeInterface.d.ts +2 -0
  164. package/lib/projects/localDev/AppDevModeInterface.js +22 -20
  165. package/lib/projects/localDev/LocalDevLogger.js +10 -11
  166. package/lib/projects/localDev/LocalDevManager.js +4 -5
  167. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +0 -1
  168. package/lib/projects/localDev/LocalDevWebsocketServer.js +7 -10
  169. package/lib/projects/localDev/helpers/project.d.ts +1 -0
  170. package/lib/projects/localDev/helpers/project.js +37 -0
  171. package/lib/projects/platformVersion.d.ts +1 -1
  172. package/lib/projects/platformVersion.js +1 -1
  173. package/lib/projects/structure.js +6 -6
  174. package/lib/projects/upload.d.ts +1 -1
  175. package/lib/projects/upload.js +17 -8
  176. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +1 -0
  177. package/lib/prompts/accountNamePrompt.js +14 -19
  178. package/lib/prompts/accountsPrompt.js +2 -2
  179. package/lib/prompts/cmsFieldPrompt.js +2 -2
  180. package/lib/prompts/createApiSamplePrompt.js +5 -5
  181. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +10 -1
  182. package/lib/prompts/createFunctionPrompt.js +14 -14
  183. package/lib/prompts/createModulePrompt.js +9 -9
  184. package/lib/prompts/createTemplatePrompt.js +2 -2
  185. package/lib/prompts/downloadProjectPrompt.js +5 -8
  186. package/lib/prompts/personalAccessKeyPrompt.js +3 -3
  187. package/lib/prompts/previewPrompt.js +6 -6
  188. package/lib/prompts/projectAddPrompt.js +6 -0
  189. package/lib/prompts/projectDevTargetAccountPrompt.js +20 -32
  190. package/lib/prompts/projectNamePrompt.js +4 -8
  191. package/lib/prompts/projectsLogsPrompt.js +2 -4
  192. package/lib/prompts/promptUtils.js +27 -9
  193. package/lib/prompts/sandboxesPrompt.js +7 -7
  194. package/lib/prompts/secretPrompt.js +3 -3
  195. package/lib/prompts/selectAppPrompt.js +3 -3
  196. package/lib/prompts/selectHubDBTablePrompt.js +9 -13
  197. package/lib/prompts/selectPublicAppForMigrationPrompt.js +15 -19
  198. package/lib/prompts/setAsDefaultAccountPrompt.js +4 -8
  199. package/lib/prompts/uploadPrompt.js +5 -5
  200. package/lib/sandboxSync.js +24 -41
  201. package/lib/sandboxes.js +19 -47
  202. package/lib/schema.js +3 -3
  203. package/lib/serverlessLogs.js +11 -13
  204. package/lib/theme/__tests__/migrate.test.js +3 -3
  205. package/lib/theme/migrate.js +2 -2
  206. package/lib/ui/SpinniesManager.d.ts +2 -0
  207. package/lib/ui/SpinniesManager.js +7 -0
  208. package/lib/ui/boxen.js +1 -2
  209. package/lib/ui/git.js +13 -10
  210. package/lib/ui/index.d.ts +4 -0
  211. package/lib/ui/index.js +47 -38
  212. package/lib/ui/serverlessFunctionLogs.js +9 -7
  213. package/lib/ui/uiMessages.d.ts +68 -0
  214. package/lib/ui/uiMessages.js +71 -0
  215. package/lib/usageTracking.js +7 -7
  216. package/lib/validation.js +20 -23
  217. package/lib/yargsUtils.d.ts +1 -1
  218. package/lib/yargsUtils.js +12 -5
  219. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
  220. package/mcp-server/tools/index.js +4 -0
  221. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +23 -0
  222. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +68 -0
  223. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +11 -0
  224. package/mcp-server/tools/project/GetApplicationInfoTool.js +49 -0
  225. package/mcp-server/tools/project/GetConfigValuesTool.js +2 -2
  226. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +2 -2
  227. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +1 -0
  228. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +169 -0
  229. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +1 -0
  230. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +115 -0
  231. package/mcp-server/utils/toolUsageTracking.js +2 -2
  232. package/package.json +7 -7
  233. package/ui/components/BoxWithTitle.d.ts +8 -0
  234. package/ui/components/BoxWithTitle.js +9 -0
  235. package/ui/components/HorizontalSelectPrompt.d.ts +8 -0
  236. package/ui/components/HorizontalSelectPrompt.js +30 -0
  237. package/ui/components/StatusMessageBoxes.d.ts +12 -0
  238. package/ui/components/StatusMessageBoxes.js +31 -0
  239. package/ui/index.d.ts +1 -0
  240. package/ui/index.js +6 -0
  241. package/ui/lib/ui-testing-utils.d.ts +9 -0
  242. package/ui/lib/ui-testing-utils.js +47 -0
  243. package/ui/lib/useTerminalSize.d.ts +13 -0
  244. package/ui/lib/useTerminalSize.js +31 -0
  245. package/ui/styles.d.ts +18 -0
  246. package/ui/styles.js +18 -0
  247. package/ui/views/UiSandbox.d.ts +5 -0
  248. package/ui/views/UiSandbox.js +25 -0
  249. package/lib/middleware/__test__/utils.test.js +0 -51
  250. package/lib/middleware/utils.d.ts +0 -8
  251. package/lib/middleware/utils.js +0 -14
  252. /package/{lib/middleware/__test__/utils.test.d.ts → commands/project/__tests__/validate.test.d.ts} +0 -0
@@ -1,28 +1,26 @@
1
- import { logger } from '@hubspot/local-dev-lib/logger';
1
+ import { uiLogger } from '../../../lib/ui/logger.js';
2
2
  import { downloadSchemas, getResolvedPath, } from '@hubspot/local-dev-lib/customObjects';
3
3
  import { inputPrompt } from '../../../lib/prompts/promptUtils.js';
4
4
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
5
- import { i18n } from '../../../lib/lang.js';
5
+ import { commands } from '../../../lang/en.js';
6
6
  import { logSchemas } from '../../../lib/schema.js';
7
7
  import { logError } from '../../../lib/errorHandlers/index.js';
8
8
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
9
9
  const command = 'fetch-all [dest]';
10
- const describe = i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.describe`);
10
+ const describe = commands.customObject.subcommands.schema.subcommands.fetchAll.describe;
11
11
  async function handler(args) {
12
12
  const { derivedAccountId, dest: providedDest } = args;
13
13
  trackCommandUsage('custom-object-schema-fetch-all', {}, derivedAccountId);
14
14
  try {
15
15
  const dest = providedDest ||
16
- (await inputPrompt(i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.inputDest`)));
16
+ (await inputPrompt(commands.customObject.subcommands.schema.subcommands.fetchAll.inputDest));
17
17
  const schemas = await downloadSchemas(derivedAccountId, dest);
18
18
  logSchemas(schemas);
19
- logger.success(i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.success.fetch`, {
20
- path: getResolvedPath(dest),
21
- }));
19
+ uiLogger.success(commands.customObject.subcommands.schema.subcommands.fetchAll.success.fetch(getResolvedPath(dest)));
22
20
  }
23
21
  catch (e) {
24
22
  logError(e);
25
- logger.error(i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.errors.fetch`));
23
+ uiLogger.error(commands.customObject.subcommands.schema.subcommands.fetchAll.errors.fetch);
26
24
  }
27
25
  }
28
26
  function schemaFetchAllBuilder(yargs) {
@@ -30,15 +28,18 @@ function schemaFetchAllBuilder(yargs) {
30
28
  .example([
31
29
  [
32
30
  '$0 custom-object schema fetch-all',
33
- i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.examples.default`),
31
+ commands.customObject.subcommands.schema.subcommands.fetchAll.examples
32
+ .default,
34
33
  ],
35
34
  [
36
35
  '$0 custom-object schema fetch-all my/folder',
37
- i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.examples.specifyPath`),
36
+ commands.customObject.subcommands.schema.subcommands.fetchAll.examples
37
+ .specifyPath,
38
38
  ],
39
39
  ])
40
40
  .positional('dest', {
41
- describe: i18n(`commands.customObject.subcommands.schema.subcommands.fetchAll.positionals.dest.describe`),
41
+ describe: commands.customObject.subcommands.schema.subcommands.fetchAll
42
+ .positionals.dest.describe,
42
43
  type: 'string',
43
44
  });
44
45
  return yargs;
@@ -1,13 +1,13 @@
1
1
  import { fetchObjectSchemas } from '@hubspot/local-dev-lib/api/customObjects';
2
- import { logger } from '@hubspot/local-dev-lib/logger';
2
+ import { uiLogger } from '../../../lib/ui/logger.js';
3
3
  import { downloadSchema, getResolvedPath, } from '@hubspot/local-dev-lib/customObjects';
4
4
  import { inputPrompt, listPrompt } from '../../../lib/prompts/promptUtils.js';
5
5
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
6
- import { i18n } from '../../../lib/lang.js';
6
+ import { commands } from '../../../lang/en.js';
7
7
  import { logError } from '../../../lib/errorHandlers/index.js';
8
8
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
9
9
  const command = 'fetch [name] [dest]';
10
- const describe = i18n(`commands.customObject.subcommands.schema.subcommands.fetch.describe`);
10
+ const describe = commands.customObject.subcommands.schema.subcommands.fetch.describe;
11
11
  async function handler(args) {
12
12
  const { name: providedName, dest: providedDest, derivedAccountId } = args;
13
13
  trackCommandUsage('custom-object-schema-fetch', {}, derivedAccountId);
@@ -17,21 +17,17 @@ async function handler(args) {
17
17
  const schemaNames = results?.map(({ name: schemaName }) => schemaName);
18
18
  name =
19
19
  providedName ||
20
- (await listPrompt(i18n(`commands.customObject.subcommands.schema.subcommands.fetch.selectSchema`), {
20
+ (await listPrompt(commands.customObject.subcommands.schema.subcommands.fetch.selectSchema, {
21
21
  choices: schemaNames,
22
22
  }));
23
23
  const dest = providedDest ||
24
- (await inputPrompt(i18n(`commands.customObject.subcommands.schema.subcommands.fetch.inputDest`)));
24
+ (await inputPrompt(commands.customObject.subcommands.schema.subcommands.fetch.inputDest));
25
25
  await downloadSchema(derivedAccountId, name, dest);
26
- logger.success(i18n(`commands.customObject.subcommands.schema.subcommands.fetch.success.savedToPath`, {
27
- path: getResolvedPath(dest, name),
28
- }));
26
+ uiLogger.success(commands.customObject.subcommands.schema.subcommands.fetch.success.savedToPath(getResolvedPath(dest, name)));
29
27
  }
30
28
  catch (e) {
31
29
  logError(e);
32
- logger.error(i18n(`commands.customObject.subcommands.schema.subcommands.fetch.errors.fetch`, {
33
- name: name || '',
34
- }));
30
+ uiLogger.error(commands.customObject.subcommands.schema.subcommands.fetch.errors.fetch(name || ''));
35
31
  }
36
32
  }
37
33
  function schemaFetchBuilder(yargs) {
@@ -39,19 +35,23 @@ function schemaFetchBuilder(yargs) {
39
35
  .example([
40
36
  [
41
37
  '$0 custom-object schema fetch schemaName',
42
- i18n(`commands.customObject.subcommands.schema.subcommands.fetch.examples.default`),
38
+ commands.customObject.subcommands.schema.subcommands.fetch.examples
39
+ .default,
43
40
  ],
44
41
  [
45
42
  '$0 custom-object schema fetch schemaName my/folder',
46
- i18n(`commands.customObject.subcommands.schema.subcommands.fetch.examples.specifyPath`),
43
+ commands.customObject.subcommands.schema.subcommands.fetch.examples
44
+ .specifyPath,
47
45
  ],
48
46
  ])
49
47
  .positional('name', {
50
- describe: i18n(`commands.customObject.subcommands.schema.subcommands.fetch.positionals.name.describe`),
48
+ describe: commands.customObject.subcommands.schema.subcommands.fetch.positionals
49
+ .name.describe,
51
50
  type: 'string',
52
51
  })
53
52
  .positional('dest', {
54
- describe: i18n(`commands.customObject.subcommands.schema.subcommands.fetch.positionals.dest.describe`),
53
+ describe: commands.customObject.subcommands.schema.subcommands.fetch.positionals
54
+ .dest.describe,
55
55
  type: 'string',
56
56
  });
57
57
  return yargs;
@@ -1,11 +1,11 @@
1
- import { logger } from '@hubspot/local-dev-lib/logger';
1
+ import { uiLogger } from '../../../lib/ui/logger.js';
2
2
  import { logError } from '../../../lib/errorHandlers/index.js';
3
3
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
4
4
  import { listSchemas } from '../../../lib/schema.js';
5
- import { i18n } from '../../../lib/lang.js';
5
+ import { commands } from '../../../lang/en.js';
6
6
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
7
7
  const command = 'list';
8
- const describe = i18n(`commands.customObject.subcommands.schema.subcommands.list.describe`);
8
+ const describe = commands.customObject.subcommands.schema.subcommands.list.describe;
9
9
  async function handler(args) {
10
10
  const { derivedAccountId } = args;
11
11
  trackCommandUsage('custom-object-schema-list', {}, derivedAccountId);
@@ -14,7 +14,7 @@ async function handler(args) {
14
14
  }
15
15
  catch (e) {
16
16
  logError(e);
17
- logger.error(i18n(`commands.customObject.subcommands.schema.subcommands.list.errors.list`));
17
+ uiLogger.error(commands.customObject.subcommands.schema.subcommands.list.errors.list);
18
18
  }
19
19
  }
20
20
  function schemaListBuilder(yargs) {
@@ -1,5 +1,5 @@
1
1
  import { fetchObjectSchemas, updateObjectSchema, } from '@hubspot/local-dev-lib/api/customObjects';
2
- import { logger } from '@hubspot/local-dev-lib/logger';
2
+ import { uiLogger } from '../../../lib/ui/logger.js';
3
3
  import { getAbsoluteFilePath } from '@hubspot/local-dev-lib/path';
4
4
  import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
5
5
  import { getEnv } from '@hubspot/local-dev-lib/config';
@@ -8,19 +8,20 @@ import { listPrompt } from '../../../lib/prompts/promptUtils.js';
8
8
  import { logError } from '../../../lib/errorHandlers/index.js';
9
9
  import { checkAndConvertToJson } from '../../../lib/validation.js';
10
10
  import { trackCommandUsage } from '../../../lib/usageTracking.js';
11
- import { i18n } from '../../../lib/lang.js';
11
+ import { commands } from '../../../lang/en.js';
12
12
  import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
13
13
  import { isSchemaDefinition } from '../../../lib/customObject.js';
14
14
  import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
15
15
  const command = 'update [name]';
16
- const describe = i18n(`commands.customObject.subcommands.schema.subcommands.update.describe`);
16
+ const describe = commands.customObject.subcommands.schema.subcommands.update.describe;
17
17
  async function handler(args) {
18
18
  const { path, name: providedName, derivedAccountId } = args;
19
19
  trackCommandUsage('custom-object-schema-update', {}, derivedAccountId);
20
20
  const filePath = getAbsoluteFilePath(path);
21
21
  const schemaJson = checkAndConvertToJson(filePath);
22
22
  if (!isSchemaDefinition(schemaJson)) {
23
- logger.error(i18n(`commands.customObject.subcommands.schema.subcommands.update.errors.invalidSchema`));
23
+ uiLogger.error(commands.customObject.subcommands.schema.subcommands.update.errors
24
+ .invalidSchema);
24
25
  process.exit(EXIT_CODES.ERROR);
25
26
  }
26
27
  let name = providedName;
@@ -30,29 +31,28 @@ async function handler(args) {
30
31
  name =
31
32
  providedName && typeof providedName === 'string'
32
33
  ? providedName
33
- : await listPrompt(i18n(`commands.customObject.subcommands.schema.subcommands.update.selectSchema`), {
34
+ : await listPrompt(commands.customObject.subcommands.schema.subcommands.update
35
+ .selectSchema, {
34
36
  choices: schemaNames,
35
37
  });
36
38
  const { data } = await updateObjectSchema(derivedAccountId, name, schemaJson);
37
- logger.success(i18n(`commands.customObject.subcommands.schema.subcommands.update.success.viewAtUrl`, {
38
- url: `${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${derivedAccountId}/objects/${data.objectTypeId}`,
39
- }));
39
+ uiLogger.success(commands.customObject.subcommands.schema.subcommands.update.success.viewAtUrl(`${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${derivedAccountId}/objects/${data.objectTypeId}`));
40
40
  }
41
41
  catch (e) {
42
42
  logError(e, { accountId: derivedAccountId });
43
- logger.error(i18n(`commands.customObject.subcommands.schema.subcommands.update.errors.update`, {
44
- definition: path,
45
- }));
43
+ uiLogger.error(commands.customObject.subcommands.schema.subcommands.update.errors.update(path));
46
44
  }
47
45
  }
48
46
  function schemaUpdateBuilder(yargs) {
49
47
  yargs
50
48
  .positional('name', {
51
- describe: i18n(`commands.customObject.subcommands.schema.subcommands.update.positionals.name.describe`),
49
+ describe: commands.customObject.subcommands.schema.subcommands.update.positionals
50
+ .name.describe,
52
51
  type: 'string',
53
52
  })
54
53
  .option('path', {
55
- describe: i18n(`commands.customObject.subcommands.schema.subcommands.update.options.path.describe`),
54
+ describe: commands.customObject.subcommands.schema.subcommands.update.options.path
55
+ .describe,
56
56
  type: 'string',
57
57
  required: true,
58
58
  });
@@ -4,10 +4,10 @@ import fetchAllCommand from './schema/fetch-all.js';
4
4
  import deleteCommand from './schema/delete.js';
5
5
  import listCommand from './schema/list.js';
6
6
  import updateSchema from './schema/update.js';
7
- import { i18n } from '../../lib/lang.js';
7
+ import { commands } from '../../lang/en.js';
8
8
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
9
9
  const command = ['schema', 'schemas'];
10
- const describe = i18n(`commands.customObject.subcommands.schema.describe`);
10
+ const describe = commands.customObject.subcommands.schema.describe;
11
11
  function customObjectSchemaBuilder(yargs) {
12
12
  yargs
13
13
  .command(listCommand)
@@ -1,15 +1,14 @@
1
1
  import schemaCommand from './customObject/schema.js';
2
2
  import createCommand from './customObject/create.js';
3
- import { i18n } from '../lib/lang.js';
4
- import { logger } from '@hubspot/local-dev-lib/logger';
5
- import { uiBetaTag, uiLink } from '../lib/ui/index.js';
3
+ import { commands } from '../lang/en.js';
4
+ import { uiBetaTag } from '../lib/ui/index.js';
6
5
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
6
+ import { uiLogger } from '../lib/ui/logger.js';
7
7
  const command = ['custom-object', 'custom-objects', 'co'];
8
- const describe = uiBetaTag(i18n(`commands.customObject.describe`), false);
8
+ const describe = uiBetaTag(commands.customObject.describe, false);
9
9
  function logBetaMessage() {
10
- uiBetaTag(i18n(`commands.customObject.betaMessage`));
11
- logger.log(uiLink(i18n(`commands.customObject.seeMoreLink`), 'https://developers.hubspot.com/docs/api-reference/crm-custom-objects-v3/guide#custom-objects-api-guide'));
12
- logger.log();
10
+ uiBetaTag(commands.customObject.betaMessage);
11
+ uiLogger.log(commands.customObject.seeMoreLink);
13
12
  }
14
13
  function customObjectBuilder(yargs) {
15
14
  yargs.middleware([logBetaMessage]);
@@ -1,14 +1,14 @@
1
1
  import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { trackCommandMetadataUsage, trackCommandUsage, } from '../lib/usageTracking.js';
4
- import { logger } from '@hubspot/local-dev-lib/logger';
5
4
  import { Doctor } from '../lib/doctor/Doctor.js';
6
5
  import { EXIT_CODES } from '../lib/enums/exitCodes.js';
7
6
  import { getCwd } from '@hubspot/local-dev-lib/path';
8
7
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
9
- import { i18n } from '../lib/lang.js';
8
+ import { uiLogger } from '../lib/ui/logger.js';
9
+ import { commands } from '../lang/en.js';
10
10
  const command = 'doctor';
11
- const describe = i18n(`commands.doctor.describe`);
11
+ const describe = commands.doctor.describe;
12
12
  const handler = async (args) => {
13
13
  const { outputDir } = args;
14
14
  const doctor = new Doctor();
@@ -20,10 +20,10 @@ const handler = async (args) => {
20
20
  }
21
21
  if (!outputDir) {
22
22
  if (output?.diagnosis) {
23
- logger.log(output.diagnosis);
23
+ uiLogger.log(output.diagnosis);
24
24
  }
25
25
  else {
26
- logger.error(i18n(`commands.doctor.errors.generatingDiagnosis`));
26
+ uiLogger.error(commands.doctor.errors.generatingDiagnosis);
27
27
  return process.exit(EXIT_CODES.ERROR);
28
28
  }
29
29
  return process.exit(EXIT_CODES.SUCCESS);
@@ -35,20 +35,17 @@ const handler = async (args) => {
35
35
  const outputFile = path.join(outputDirPath, `hubspot-doctor-${new Date().toISOString()}.json`);
36
36
  try {
37
37
  fs.writeFileSync(outputFile, JSON.stringify(output, null, 4));
38
- logger.success(i18n(`commands.doctor.outputWritten`, { filename: outputFile }));
38
+ uiLogger.success(commands.doctor.outputWritten(outputFile));
39
39
  }
40
40
  catch (e) {
41
- logger.error(i18n(`commands.doctor.errors.unableToWriteOutputFile`, {
42
- file: outputFile,
43
- errorMessage: e instanceof Error ? e.message : e,
44
- }));
41
+ uiLogger.error(commands.doctor.errors.unableToWriteOutputFile(outputFile, e instanceof Error ? e.message : e));
45
42
  return process.exit(EXIT_CODES.ERROR);
46
43
  }
47
44
  return process.exit(EXIT_CODES.SUCCESS);
48
45
  };
49
46
  function doctorBuilder(yargs) {
50
47
  yargs.option('output-dir', {
51
- describe: i18n(`commands.doctor.options.outputDir`),
48
+ describe: commands.doctor.options.outputDir,
52
49
  type: 'string',
53
50
  });
54
51
  return yargs;
@@ -1,25 +1,20 @@
1
1
  import open from 'open';
2
- import { i18n } from '../lib/lang.js';
3
- import { logger } from '@hubspot/local-dev-lib/logger';
4
2
  import { confirmPrompt } from '../lib/prompts/promptUtils.js';
5
3
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
6
4
  import { EXIT_CODES } from '../lib/enums/exitCodes.js';
7
- import { uiLink } from '../lib/ui/index.js';
5
+ import { commands } from '../lang/en.js';
6
+ import { uiLogger } from '../lib/ui/logger.js';
8
7
  const FEEDBACK_URL = 'https://developers.hubspot.com/feedback';
9
8
  const command = 'feedback';
10
- const describe = i18n(`commands.project.subcommands.feedback.describe`);
9
+ const describe = commands.project.feedback.describe;
11
10
  async function handler() {
12
- const shouldOpen = await confirmPrompt(i18n(`commands.project.subcommands.feedback.openPrompt`));
11
+ const shouldOpen = await confirmPrompt(commands.project.feedback.openPrompt);
13
12
  if (!shouldOpen) {
14
- logger.log(i18n(`commands.project.subcommands.feedback.error`, {
15
- url: uiLink('the developer feedback form', FEEDBACK_URL),
16
- }));
13
+ uiLogger.log(commands.project.feedback.error(FEEDBACK_URL));
17
14
  process.exit(EXIT_CODES.ERROR);
18
15
  }
19
16
  open(FEEDBACK_URL, { url: true });
20
- logger.success(i18n(`commands.project.subcommands.feedback.success`, {
21
- url: uiLink('the developer feedback form', FEEDBACK_URL),
22
- }));
17
+ uiLogger.success(commands.project.feedback.success(FEEDBACK_URL));
23
18
  process.exit(EXIT_CODES.SUCCESS);
24
19
  }
25
20
  function feedbackBuilder(yargs) {
package/commands/fetch.js CHANGED
@@ -1,22 +1,22 @@
1
1
  import { downloadFileOrFolder } from '@hubspot/local-dev-lib/fileMapper';
2
- import { logger } from '@hubspot/local-dev-lib/logger';
3
2
  import { addCmsPublishModeOptions, addOverwriteOptions, getCmsPublishMode, } from '../lib/commonOpts.js';
4
3
  import { resolveLocalPath } from '../lib/filesystem.js';
5
4
  import { validateCmsPublishMode } from '../lib/validation.js';
6
5
  import { trackCommandUsage } from '../lib/usageTracking.js';
7
- import { i18n } from '../lib/lang.js';
8
6
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
9
7
  import { EXIT_CODES } from '../lib/enums/exitCodes.js';
10
8
  import { logError } from '../lib/errorHandlers/index.js';
9
+ import { commands } from '../lang/en.js';
10
+ import { uiLogger } from '../lib/ui/logger.js';
11
11
  const command = 'fetch <src> [dest]';
12
- const describe = i18n('commands.fetch.describe');
12
+ const describe = commands.fetch.describe;
13
13
  const handler = async (options) => {
14
14
  const { src, dest } = options;
15
15
  if (!validateCmsPublishMode(options)) {
16
16
  process.exit(EXIT_CODES.ERROR);
17
17
  }
18
18
  if (typeof src !== 'string') {
19
- logger.error(i18n('commands.fetch.errors.sourceRequired'));
19
+ uiLogger.error(commands.fetch.errors.sourceRequired);
20
20
  process.exit(EXIT_CODES.ERROR);
21
21
  }
22
22
  const { derivedAccountId } = options;
@@ -38,16 +38,16 @@ const handler = async (options) => {
38
38
  };
39
39
  const fetchBuilder = (yargs) => {
40
40
  yargs.positional('src', {
41
- describe: i18n('commands.fetch.positionals.src.describe'),
41
+ describe: commands.fetch.positionals.src.describe,
42
42
  type: 'string',
43
43
  });
44
44
  yargs.positional('dest', {
45
- describe: i18n('commands.fetch.positionals.dest.describe'),
45
+ describe: commands.fetch.positionals.dest.describe,
46
46
  type: 'string',
47
47
  });
48
48
  yargs.options({
49
49
  staging: {
50
- describe: i18n('commands.fetch.options.staging.describe'),
50
+ describe: commands.fetch.options.staging.describe,
51
51
  type: 'boolean',
52
52
  default: false,
53
53
  hidden: true,
@@ -56,7 +56,7 @@ const fetchBuilder = (yargs) => {
56
56
  yargs.options({
57
57
  assetVersion: {
58
58
  type: 'number',
59
- describe: i18n('commands.fetch.options.assetVersion.describe'),
59
+ describe: commands.fetch.options.assetVersion.describe,
60
60
  },
61
61
  });
62
62
  addCmsPublishModeOptions(yargs, { read: true });
@@ -1,18 +1,18 @@
1
1
  import { downloadFileOrFolder } from '@hubspot/local-dev-lib/fileManager';
2
- import { logger } from '@hubspot/local-dev-lib/logger';
2
+ import { uiLogger } from '../../lib/ui/logger.js';
3
3
  import { resolveLocalPath } from '../../lib/filesystem.js';
4
4
  import { trackCommandUsage } from '../../lib/usageTracking.js';
5
- import { i18n } from '../../lib/lang.js';
5
+ import { commands } from '../../lang/en.js';
6
6
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
7
7
  import { logError } from '../../lib/errorHandlers/index.js';
8
8
  import { addOverwriteOptions } from '../../lib/commonOpts.js';
9
9
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
10
10
  const command = 'fetch <src> [dest]';
11
- const describe = i18n(`commands.filemanager.subcommands.fetch.describe`);
11
+ const describe = commands.filemanager.subcommands.fetch.describe;
12
12
  async function handler(args) {
13
13
  const { src, includeArchived, derivedAccountId, overwrite } = args;
14
14
  if (typeof src !== 'string') {
15
- logger.error(i18n(`commands.filemanager.subcommands.fetch.errors.sourceRequired`));
15
+ uiLogger.error(commands.filemanager.subcommands.fetch.errors.sourceRequired);
16
16
  process.exit(EXIT_CODES.ERROR);
17
17
  }
18
18
  const dest = resolveLocalPath(args.dest);
@@ -29,16 +29,16 @@ async function handler(args) {
29
29
  function fileManagerFetchBuilder(yargs) {
30
30
  addOverwriteOptions(yargs);
31
31
  yargs.positional('src', {
32
- describe: i18n(`commands.filemanager.subcommands.fetch.positionals.src.describe`),
32
+ describe: commands.filemanager.subcommands.fetch.positionals.src.describe,
33
33
  type: 'string',
34
34
  });
35
35
  yargs.positional('dest', {
36
- describe: i18n(`commands.filemanager.subcommands.fetch.positionals.dest.describe`),
36
+ describe: commands.filemanager.subcommands.fetch.positionals.dest.describe,
37
37
  type: 'string',
38
38
  });
39
39
  yargs.option('include-archived', {
40
40
  alias: ['i'],
41
- describe: i18n(`commands.filemanager.subcommands.fetch.options.includeArchived.describe`),
41
+ describe: commands.filemanager.subcommands.fetch.options.includeArchived.describe,
42
42
  type: 'boolean',
43
43
  });
44
44
  return yargs;
@@ -3,16 +3,16 @@ import path from 'path';
3
3
  import { uploadFolder } from '@hubspot/local-dev-lib/fileManager';
4
4
  import { uploadFile } from '@hubspot/local-dev-lib/api/fileManager';
5
5
  import { getCwd, convertToUnixPath } from '@hubspot/local-dev-lib/path';
6
- import { logger } from '@hubspot/local-dev-lib/logger';
6
+ import { uiLogger } from '../../lib/ui/logger.js';
7
7
  import { validateSrcAndDestPaths } from '@hubspot/local-dev-lib/cms/modules';
8
8
  import { shouldIgnoreFile } from '@hubspot/local-dev-lib/ignoreRules';
9
9
  import { ApiErrorContext, logError } from '../../lib/errorHandlers/index.js';
10
10
  import { trackCommandUsage } from '../../lib/usageTracking.js';
11
- import { i18n } from '../../lib/lang.js';
11
+ import { commands } from '../../lang/en.js';
12
12
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
13
13
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
14
14
  const command = 'upload <src> <dest>';
15
- const describe = i18n(`commands.filemanager.subcommands.upload.describe`);
15
+ const describe = commands.filemanager.subcommands.upload.describe;
16
16
  async function handler(args) {
17
17
  const { src, dest, derivedAccountId } = args;
18
18
  const absoluteSrcPath = path.resolve(getCwd(), src);
@@ -20,49 +20,36 @@ async function handler(args) {
20
20
  try {
21
21
  stats = fs.statSync(absoluteSrcPath);
22
22
  if (!stats.isFile() && !stats.isDirectory()) {
23
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.invalidPath`, {
24
- path: src,
25
- }));
23
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.invalidPath(src));
26
24
  return;
27
25
  }
28
26
  }
29
27
  catch (e) {
30
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.invalidPath`, {
31
- path: src,
32
- }));
28
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.invalidPath(src));
33
29
  return;
34
30
  }
35
31
  if (!dest) {
36
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.destinationRequired`));
32
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.destinationRequired);
37
33
  return;
38
34
  }
39
35
  const normalizedDest = convertToUnixPath(dest);
40
36
  trackCommandUsage('filemanager-upload', { type: stats.isFile() ? 'file' : 'folder' }, derivedAccountId);
41
37
  const srcDestIssues = await validateSrcAndDestPaths({ isLocal: true, path: src }, { isHubSpot: true, path: dest });
42
38
  if (srcDestIssues.length) {
43
- srcDestIssues.forEach(({ message }) => logger.error(message));
39
+ srcDestIssues.forEach(({ message }) => uiLogger.error(message));
44
40
  process.exit(EXIT_CODES.ERROR);
45
41
  }
46
42
  if (stats.isFile()) {
47
43
  if (shouldIgnoreFile(absoluteSrcPath)) {
48
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.fileIgnored`, {
49
- path: src,
50
- }));
44
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.fileIgnored(src));
51
45
  return;
52
46
  }
53
47
  uploadFile(derivedAccountId, absoluteSrcPath, normalizedDest)
54
48
  .then(() => {
55
- logger.success(i18n(`commands.filemanager.subcommands.upload.success.upload`, {
56
- accountId: derivedAccountId,
57
- dest: normalizedDest,
58
- src,
59
- }));
49
+ uiLogger.success(commands.filemanager.subcommands.upload.success.upload(src, normalizedDest, derivedAccountId));
60
50
  })
61
51
  .catch(error => {
62
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.upload`, {
63
- dest: normalizedDest,
64
- src,
65
- }));
52
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.upload(src, normalizedDest));
66
53
  logError(error, new ApiErrorContext({
67
54
  accountId: derivedAccountId,
68
55
  request: normalizedDest,
@@ -71,19 +58,13 @@ async function handler(args) {
71
58
  });
72
59
  }
73
60
  else {
74
- logger.log(i18n(`commands.filemanager.subcommands.upload.logs.uploading`, {
75
- accountId: derivedAccountId,
76
- dest,
77
- src,
78
- }));
61
+ uiLogger.log(commands.filemanager.subcommands.upload.logs.uploading(src, dest, derivedAccountId));
79
62
  uploadFolder(derivedAccountId, absoluteSrcPath, dest)
80
63
  .then(() => {
81
- logger.success(i18n(`commands.filemanager.subcommands.upload.success.uploadComplete`, {
82
- dest,
83
- }));
64
+ uiLogger.success(commands.filemanager.subcommands.upload.success.uploadComplete(dest));
84
65
  })
85
66
  .catch(error => {
86
- logger.error(i18n(`commands.filemanager.subcommands.upload.errors.uploadingFailed`));
67
+ uiLogger.error(commands.filemanager.subcommands.upload.errors.uploadingFailed);
87
68
  logError(error, {
88
69
  accountId: derivedAccountId,
89
70
  });
@@ -92,11 +73,11 @@ async function handler(args) {
92
73
  }
93
74
  function fileManagerUploadBuilder(yargs) {
94
75
  yargs.positional('src', {
95
- describe: i18n(`commands.filemanager.subcommands.upload.positionals.src.describe`),
76
+ describe: commands.filemanager.subcommands.upload.positionals.src.describe,
96
77
  type: 'string',
97
78
  });
98
79
  yargs.positional('dest', {
99
- describe: i18n(`commands.filemanager.subcommands.upload.positionals.dest.describe`),
80
+ describe: commands.filemanager.subcommands.upload.positionals.dest.describe,
100
81
  type: 'string',
101
82
  });
102
83
  return yargs;
@@ -1,9 +1,9 @@
1
1
  import upload from './filemanager/upload.js';
2
2
  import fetch from './filemanager/fetch.js';
3
- import { i18n } from '../lib/lang.js';
3
+ import { commands } from '../lang/en.js';
4
4
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
5
5
  const command = 'filemanager';
6
- const describe = i18n(`commands.filemanager.describe`);
6
+ const describe = commands.filemanager.describe;
7
7
  function fileManagerBuilder(yargs) {
8
8
  yargs.command(upload).command(fetch).demandCommand(1, '');
9
9
  return yargs;