@hubspot/cli 7.4.7-experimental.0 → 7.4.7

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 (225) hide show
  1. package/api/migrate.d.ts +14 -4
  2. package/api/migrate.js +16 -2
  3. package/bin/cli.js +8 -183
  4. package/commands/account/auth.d.ts +10 -0
  5. package/commands/account/auth.js +188 -0
  6. package/commands/account/clean.js +38 -5
  7. package/commands/account/createOverride.d.ts +10 -0
  8. package/commands/account/createOverride.js +104 -0
  9. package/commands/account/info.js +38 -4
  10. package/commands/account/list.js +23 -5
  11. package/commands/account/remove.js +36 -2
  12. package/commands/account/removeOverride.d.ts +10 -0
  13. package/commands/account/removeOverride.js +76 -0
  14. package/commands/account/use.js +25 -3
  15. package/commands/account.js +7 -2
  16. package/commands/app/migrate.d.ts +6 -6
  17. package/commands/app/migrate.js +62 -45
  18. package/commands/app.js +0 -2
  19. package/commands/auth.js +14 -11
  20. package/commands/cms/lighthouseScore.js +7 -3
  21. package/commands/cms.js +1 -2
  22. package/commands/completion.js +2 -3
  23. package/commands/config/migrate.d.ts +10 -0
  24. package/commands/config/migrate.js +84 -0
  25. package/commands/config/set.d.ts +10 -0
  26. package/commands/config/set.js +34 -29
  27. package/commands/config.d.ts +4 -1
  28. package/commands/config.js +45 -11
  29. package/commands/create/api-sample.js +3 -1
  30. package/commands/create/website-theme.js +1 -1
  31. package/commands/create.js +7 -8
  32. package/commands/customObject/schema/delete.js +4 -1
  33. package/commands/customObject/schema/fetch-all.js +2 -1
  34. package/commands/customObject/schema/fetch.js +2 -1
  35. package/commands/customObject.js +3 -4
  36. package/commands/doctor.js +5 -6
  37. package/commands/feedback.js +7 -8
  38. package/commands/fetch.js +6 -7
  39. package/commands/filemanager.js +1 -2
  40. package/commands/function.js +1 -2
  41. package/commands/hubdb/clear.js +5 -6
  42. package/commands/hubdb/create.js +7 -8
  43. package/commands/hubdb/delete.js +8 -7
  44. package/commands/hubdb/fetch.js +4 -5
  45. package/commands/hubdb.js +1 -2
  46. package/commands/init.js +18 -20
  47. package/commands/lint.js +3 -4
  48. package/commands/list.js +5 -6
  49. package/commands/logs.js +12 -13
  50. package/commands/module/marketplace-validate.js +5 -6
  51. package/commands/module.js +1 -3
  52. package/commands/mv.js +4 -5
  53. package/commands/open.js +4 -5
  54. package/commands/project/add.d.ts +3 -7
  55. package/commands/project/add.js +28 -23
  56. package/commands/project/cloneApp.d.ts +6 -8
  57. package/commands/project/cloneApp.js +49 -45
  58. package/commands/project/create.d.ts +10 -1
  59. package/commands/project/create.js +85 -63
  60. package/commands/project/deploy.d.ts +3 -6
  61. package/commands/project/deploy.js +27 -25
  62. package/commands/project/dev/deprecatedFlow.js +32 -25
  63. package/commands/project/dev/index.d.ts +4 -2
  64. package/commands/project/dev/index.js +31 -18
  65. package/commands/project/dev/unifiedFlow.js +10 -11
  66. package/commands/project/download.d.ts +3 -7
  67. package/commands/project/download.js +18 -19
  68. package/commands/project/installDeps.d.ts +6 -1
  69. package/commands/project/installDeps.js +48 -32
  70. package/commands/project/listBuilds.d.ts +3 -7
  71. package/commands/project/listBuilds.js +32 -27
  72. package/commands/project/logs.d.ts +10 -1
  73. package/commands/project/logs.js +73 -65
  74. package/commands/project/migrate.d.ts +6 -0
  75. package/commands/project/migrate.js +71 -0
  76. package/commands/project/migrateApp.d.ts +3 -8
  77. package/commands/project/migrateApp.js +23 -20
  78. package/commands/project/open.d.ts +3 -7
  79. package/commands/project/open.js +29 -21
  80. package/commands/project/upload.d.ts +9 -1
  81. package/commands/project/upload.js +78 -54
  82. package/commands/project/watch.d.ts +6 -1
  83. package/commands/project/watch.js +95 -61
  84. package/commands/project.d.ts +3 -1
  85. package/commands/project.js +47 -35
  86. package/commands/remove.js +7 -5
  87. package/commands/sandbox/create.js +10 -11
  88. package/commands/sandbox/delete.js +18 -19
  89. package/commands/sandbox.js +1 -2
  90. package/commands/secret/addSecret.js +5 -6
  91. package/commands/secret/deleteSecret.js +12 -9
  92. package/commands/secret/listSecret.js +3 -4
  93. package/commands/secret/updateSecret.js +9 -8
  94. package/commands/secret.js +1 -2
  95. package/commands/theme/generate-selectors.js +5 -6
  96. package/commands/theme/marketplace-validate.js +5 -6
  97. package/commands/theme/preview.js +16 -16
  98. package/commands/theme.js +1 -2
  99. package/commands/upload.js +23 -24
  100. package/commands/watch.js +18 -19
  101. package/lang/en.d.ts +2806 -0
  102. package/lang/en.js +2659 -3300
  103. package/lang/en.lyaml +98 -41
  104. package/lib/accountTypes.d.ts +1 -0
  105. package/lib/accountTypes.js +12 -0
  106. package/lib/app/migrate.d.ts +10 -4
  107. package/lib/app/migrate.js +208 -94
  108. package/lib/app/migrate_legacy.d.ts +2 -2
  109. package/lib/app/migrate_legacy.js +10 -7
  110. package/lib/buildAccount.d.ts +1 -2
  111. package/lib/buildAccount.js +11 -10
  112. package/lib/commonOpts.d.ts +3 -4
  113. package/lib/commonOpts.js +46 -18
  114. package/lib/configMigrate.d.ts +2 -0
  115. package/lib/configMigrate.js +104 -0
  116. package/lib/configOptions.js +11 -10
  117. package/lib/constants.d.ts +4 -0
  118. package/lib/constants.js +5 -1
  119. package/lib/dependencyManagement.js +2 -2
  120. package/lib/doctor/Diagnosis.d.ts +1 -2
  121. package/lib/doctor/Diagnosis.js +19 -16
  122. package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
  123. package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
  124. package/lib/doctor/Doctor.d.ts +1 -0
  125. package/lib/doctor/Doctor.js +57 -44
  126. package/lib/errorHandlers/index.js +6 -7
  127. package/lib/errorHandlers/suppressError.js +6 -7
  128. package/lib/generateSelectors.js +1 -2
  129. package/lib/hasFeature.d.ts +3 -1
  130. package/lib/middleware/__test__/configMiddleware.test.d.ts +1 -0
  131. package/lib/middleware/__test__/configMiddleware.test.js +194 -0
  132. package/lib/middleware/__test__/gitMiddleware.test.d.ts +1 -0
  133. package/lib/middleware/__test__/gitMiddleware.test.js +76 -0
  134. package/lib/middleware/__test__/notificationsMiddleware.test.d.ts +1 -0
  135. package/lib/middleware/__test__/notificationsMiddleware.test.js +10 -0
  136. package/lib/middleware/__test__/requestMiddleware.test.d.ts +1 -0
  137. package/lib/middleware/__test__/requestMiddleware.test.js +20 -0
  138. package/lib/middleware/__test__/utils.test.d.ts +1 -0
  139. package/lib/middleware/__test__/utils.test.js +53 -0
  140. package/lib/middleware/__test__/yargsChecksMiddleware.test.d.ts +1 -0
  141. package/lib/middleware/__test__/yargsChecksMiddleware.test.js +81 -0
  142. package/lib/middleware/configMiddleware.d.ts +13 -0
  143. package/lib/middleware/configMiddleware.js +116 -0
  144. package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
  145. package/lib/middleware/fireAlarmMiddleware.js +123 -0
  146. package/lib/middleware/gitMiddleware.d.ts +2 -0
  147. package/lib/middleware/gitMiddleware.js +14 -0
  148. package/lib/middleware/notificationsMiddleware.d.ts +1 -0
  149. package/lib/middleware/notificationsMiddleware.js +38 -0
  150. package/lib/middleware/requestMiddleware.d.ts +1 -0
  151. package/lib/middleware/requestMiddleware.js +11 -0
  152. package/lib/middleware/utils.d.ts +8 -0
  153. package/lib/middleware/utils.js +17 -0
  154. package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
  155. package/lib/middleware/yargsChecksMiddleware.js +24 -0
  156. package/lib/oauth.js +1 -2
  157. package/lib/process.js +1 -2
  158. package/lib/projects/ProjectLogsManager.d.ts +1 -1
  159. package/lib/projects/ProjectLogsManager.js +16 -21
  160. package/lib/projects/buildAndDeploy.js +28 -39
  161. package/lib/projects/config.d.ts +9 -0
  162. package/lib/projects/config.js +79 -0
  163. package/lib/projects/create.js +5 -6
  164. package/lib/projects/ensureProjectExists.d.ts +11 -0
  165. package/lib/projects/ensureProjectExists.js +97 -0
  166. package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
  167. package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
  168. package/lib/{DevServerManagerV2.d.ts → projects/localDev/DevServerManagerV2.d.ts} +1 -1
  169. package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +3 -4
  170. package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
  171. package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +49 -82
  172. package/lib/{LocalDevManagerV2.d.ts → projects/localDev/LocalDevManagerV2.d.ts} +2 -2
  173. package/lib/{LocalDevManagerV2.js → projects/localDev/LocalDevManagerV2.js} +43 -75
  174. package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +5 -4
  175. package/lib/{localDev.js → projects/localDev/helpers.js} +97 -114
  176. package/lib/projects/ui.d.ts +1 -0
  177. package/lib/projects/ui.js +15 -0
  178. package/lib/projects/upload.d.ts +13 -2
  179. package/lib/projects/upload.js +18 -34
  180. package/lib/projects/urls.d.ts +1 -0
  181. package/lib/projects/urls.js +6 -0
  182. package/lib/projects/watch.d.ts +1 -1
  183. package/lib/projects/watch.js +21 -18
  184. package/lib/prompts/accountNamePrompt.js +16 -13
  185. package/lib/prompts/accountsPrompt.js +1 -2
  186. package/lib/prompts/cmsFieldPrompt.js +1 -2
  187. package/lib/prompts/createApiSamplePrompt.js +4 -5
  188. package/lib/prompts/createFunctionPrompt.js +13 -14
  189. package/lib/prompts/createModulePrompt.js +8 -9
  190. package/lib/prompts/createProjectPrompt.d.ts +11 -4
  191. package/lib/prompts/createProjectPrompt.js +14 -9
  192. package/lib/prompts/createTemplatePrompt.js +1 -2
  193. package/lib/prompts/downloadProjectPrompt.js +3 -4
  194. package/lib/prompts/installPublicAppPrompt.js +6 -5
  195. package/lib/prompts/personalAccessKeyPrompt.js +17 -18
  196. package/lib/prompts/previewPrompt.js +5 -6
  197. package/lib/prompts/projectAddPrompt.js +4 -5
  198. package/lib/prompts/projectDevTargetAccountPrompt.js +11 -12
  199. package/lib/prompts/projectNamePrompt.js +5 -6
  200. package/lib/prompts/projectsLogsPrompt.js +3 -2
  201. package/lib/prompts/promptUtils.d.ts +1 -1
  202. package/lib/prompts/sandboxesPrompt.js +5 -6
  203. package/lib/prompts/secretPrompt.js +2 -3
  204. package/lib/prompts/selectHubDBTablePrompt.js +11 -8
  205. package/lib/prompts/selectPublicAppPrompt.js +6 -7
  206. package/lib/prompts/setAsDefaultAccountPrompt.js +1 -2
  207. package/lib/prompts/uploadPrompt.js +4 -5
  208. package/lib/sandboxSync.js +15 -14
  209. package/lib/sandboxes.js +12 -13
  210. package/lib/serverlessLogs.js +4 -6
  211. package/lib/ui/SpinniesManager.d.ts +1 -1
  212. package/lib/ui/boxen.d.ts +5 -0
  213. package/lib/ui/boxen.js +30 -0
  214. package/lib/ui/git.js +8 -9
  215. package/lib/ui/index.d.ts +4 -2
  216. package/lib/ui/index.js +16 -16
  217. package/lib/ui/logger.d.ts +10 -0
  218. package/lib/ui/logger.js +15 -0
  219. package/lib/ui/serverlessFunctionLogs.js +2 -3
  220. package/lib/ui/spinniesUtils.d.ts +5 -5
  221. package/lib/yargsUtils.d.ts +1 -1
  222. package/package.json +7 -6
  223. package/types/Yargs.d.ts +5 -11
  224. package/lib/projects/index.d.ts +0 -20
  225. package/lib/projects/index.js +0 -195
package/lib/commonOpts.js CHANGED
@@ -23,34 +23,39 @@ const lang_1 = require("./lang");
23
23
  const errorHandlers_1 = require("./errorHandlers");
24
24
  const exitCodes_1 = require("./enums/exitCodes");
25
25
  const ui_1 = require("./ui");
26
- const i18nKey = 'lib.commonOpts';
27
26
  function addGlobalOptions(yargs) {
28
27
  yargs.version(false);
29
- return yargs.option('debug', {
28
+ yargs.option('debug', {
30
29
  alias: 'd',
31
30
  default: false,
32
- describe: (0, lang_1.i18n)(`${i18nKey}.options.debug.describe`),
31
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.debug.describe`),
33
32
  type: 'boolean',
34
33
  });
34
+ yargs.option('network-debug', {
35
+ default: false,
36
+ type: 'boolean',
37
+ hidden: true,
38
+ });
39
+ return yargs;
35
40
  }
36
41
  function addAccountOptions(yargs) {
37
42
  return yargs.option('account', {
38
43
  alias: 'a',
39
- describe: (0, lang_1.i18n)(`${i18nKey}.options.account.describe`),
44
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.account.describe`),
40
45
  type: 'string',
41
46
  });
42
47
  }
43
48
  function addConfigOptions(yargs) {
44
49
  return yargs.option('config', {
45
50
  alias: 'c',
46
- describe: (0, lang_1.i18n)(`${i18nKey}.options.config.describe`),
51
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.config.describe`),
47
52
  type: 'string',
48
53
  });
49
54
  }
50
55
  function addOverwriteOptions(yargs) {
51
56
  return yargs.option('overwrite', {
52
57
  alias: 'o',
53
- describe: (0, lang_1.i18n)(`${i18nKey}.options.overwrite.describe`),
58
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.overwrite.describe`),
54
59
  type: 'boolean',
55
60
  default: false,
56
61
  });
@@ -59,39 +64,58 @@ function addCmsPublishModeOptions(yargs, { read, write }) {
59
64
  const cmsPublishModes = `<${Object.values(files_1.CMS_PUBLISH_MODE).join(' | ')}>`;
60
65
  return yargs.option('cms-publish-mode', {
61
66
  alias: 'm',
62
- describe: (0, lang_1.i18n)(`${i18nKey}.options.modes.describe.${read ? 'read' : write ? 'write' : 'default'}`, { modes: cmsPublishModes }),
67
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.modes.describe.${read ? 'read' : write ? 'write' : 'default'}`, { modes: cmsPublishModes }),
63
68
  type: 'string',
64
69
  });
65
70
  }
66
71
  function addTestingOptions(yargs) {
67
72
  return yargs.option('qa', {
68
- describe: (0, lang_1.i18n)(`${i18nKey}.options.qa.describe`),
73
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.qa.describe`),
69
74
  type: 'boolean',
70
75
  default: false,
71
76
  hidden: true,
72
77
  });
73
78
  }
74
79
  function addUseEnvironmentOptions(yargs) {
75
- return yargs
76
- .option('use-env', {
77
- describe: (0, lang_1.i18n)(`${i18nKey}.options.useEnv.describe`),
80
+ yargs.option('use-env', {
81
+ describe: (0, lang_1.i18n)(`lib.commonOpts.options.useEnv.describe`),
78
82
  type: 'boolean',
79
- })
80
- .conflicts('use-env', 'account');
83
+ });
84
+ yargs.conflicts('use-env', 'account');
85
+ return yargs;
81
86
  }
82
87
  async function addCustomHelpOutput(yargs, command, describe) {
83
88
  try {
84
89
  const parsedArgv = (0, yargs_parser_1.default)(process.argv.slice(2));
85
90
  if (parsedArgv && parsedArgv.help) {
86
- // Construct the full command, including positional arguments
87
91
  const commandBase = `hs ${parsedArgv._.slice(0, -1).join(' ')}`;
88
- const fullCommand = `${commandBase.trim()} ${command}`;
92
+ // Make sure we are targeting the correct command by confirming that
93
+ // "command" matches the last part of the user's input command
94
+ const checkIsTargetCommand = (command) => {
95
+ const targetBaseCommand = command.split(' ')[0];
96
+ return targetBaseCommand === parsedArgv._[parsedArgv._.length - 1];
97
+ };
98
+ const isTargetedCommand = Array.isArray(command)
99
+ ? command.some(checkIsTargetCommand)
100
+ : checkIsTargetCommand(command);
101
+ if (!isTargetedCommand) {
102
+ return;
103
+ }
104
+ // Construct the full command, including positional arguments
105
+ const commandString = Array.isArray(command) ? command[0] : command;
106
+ const fullCommand = `${commandBase.trim()} ${commandString}`;
89
107
  // Format the original help output to be more readable
90
108
  let commandHelp = await yargs.getHelp();
91
- ['Options:', 'Examples:', 'Positionals:'].forEach(header => {
109
+ ['Options:', 'Commands:', 'Examples:', 'Positionals:'].forEach(header => {
92
110
  commandHelp = commandHelp.replace(header, chalk_1.default.bold(header));
93
111
  });
94
- logger_1.logger.log(`${(0, ui_1.uiCommandReference)(fullCommand, false)}\n\n${describe}\n\n${commandHelp}`);
112
+ // Remove "hs <command>" from the help output (this shows up for command buckets)
113
+ commandHelp = commandHelp.replace('hs <command>\n', '');
114
+ // Remove the first line of the help output if it's empty
115
+ if (commandHelp.startsWith('\n')) {
116
+ commandHelp = commandHelp.slice(1);
117
+ }
118
+ logger_1.logger.log(`${(0, ui_1.uiCommandReference)(fullCommand, false)}\n\n${describe ? `${describe}\n\n` : ''}${commandHelp}`);
95
119
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
96
120
  }
97
121
  }
@@ -101,13 +125,17 @@ async function addCustomHelpOutput(yargs, command, describe) {
101
125
  }
102
126
  }
103
127
  function setLogLevel(options) {
104
- const { debug } = options;
128
+ const { debug, networkDebug } = options;
105
129
  if (debug) {
106
130
  (0, logger_1.setLogLevel)(logger_1.LOG_LEVEL.DEBUG);
107
131
  }
108
132
  else {
109
133
  (0, logger_1.setLogLevel)(logger_1.LOG_LEVEL.LOG);
110
134
  }
135
+ if (networkDebug) {
136
+ process.env.HUBSPOT_NETWORK_LOGGING = 'true';
137
+ (0, logger_1.setLogLevel)(logger_1.LOG_LEVEL.DEBUG);
138
+ }
111
139
  }
112
140
  function getCommandName(argv) {
113
141
  return (argv && argv._ && argv._[0]) || '';
@@ -0,0 +1,2 @@
1
+ export declare function handleMigration(accountId: number | undefined, configPath?: string): Promise<boolean>;
2
+ export declare function handleMerge(accountId: number | undefined, configPath?: string, force?: boolean): Promise<boolean>;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleMigration = handleMigration;
4
+ exports.handleMerge = handleMerge;
5
+ const migrate_1 = require("@hubspot/local-dev-lib/config/migrate");
6
+ const config_1 = require("@hubspot/local-dev-lib/constants/config");
7
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
8
+ const promptUtils_1 = require("./prompts/promptUtils");
9
+ const lang_1 = require("./lang");
10
+ const usageTracking_1 = require("./usageTracking");
11
+ async function handleMigration(accountId, configPath) {
12
+ const { shouldMigrateConfig } = await (0, promptUtils_1.promptUser)({
13
+ name: 'shouldMigrateConfig',
14
+ type: 'confirm',
15
+ message: (0, lang_1.i18n)('lib.configMigrate.migrateConfigPrompt', {
16
+ deprecatedConfigPath: (0, migrate_1.getConfigPath)(configPath, false) ||
17
+ config_1.DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME,
18
+ globalConfigPath: config_1.GLOBAL_CONFIG_PATH,
19
+ }),
20
+ });
21
+ if (!shouldMigrateConfig) {
22
+ (0, usageTracking_1.trackCommandMetadataUsage)('config-migrate', {
23
+ command: 'hs config migrate',
24
+ type: 'migration',
25
+ step: 'Reject migration via prompt',
26
+ }, accountId);
27
+ return false;
28
+ }
29
+ const deprecatedConfig = (0, migrate_1.getDeprecatedConfig)(configPath);
30
+ (0, migrate_1.migrateConfig)(deprecatedConfig);
31
+ (0, usageTracking_1.trackCommandMetadataUsage)('config-migrate', {
32
+ command: 'hs config migrate',
33
+ type: 'migration',
34
+ step: 'Confirm migration via prompt',
35
+ successful: true,
36
+ }, accountId);
37
+ logger_1.logger.success((0, lang_1.i18n)('lib.configMigrate.migrationSuccess', {
38
+ globalConfigPath: config_1.GLOBAL_CONFIG_PATH,
39
+ }));
40
+ return true;
41
+ }
42
+ async function mergeConfigProperties(globalConfig, deprecatedConfig, force) {
43
+ const { initialConfig, conflicts, } = (0, migrate_1.mergeConfigProperties)(globalConfig, deprecatedConfig, force);
44
+ if (conflicts.length > 0) {
45
+ for (const conflict of conflicts) {
46
+ const { property, newValue, oldValue } = conflict;
47
+ const { shouldOverwrite } = await (0, promptUtils_1.promptUser)({
48
+ name: 'shouldOverwrite',
49
+ type: 'confirm',
50
+ message: (0, lang_1.i18n)('lib.configMigrate.mergeConfigConflictPrompt', {
51
+ property,
52
+ oldValue: `${oldValue}`,
53
+ newValue: `${newValue}`,
54
+ }),
55
+ });
56
+ if (shouldOverwrite) {
57
+ // @ts-expect-error Cannot reconcile CLIConfig_NEW and CLIConfig_DEPRECATED
58
+ initialConfig[property] = oldValue;
59
+ }
60
+ }
61
+ }
62
+ return initialConfig;
63
+ }
64
+ async function handleMerge(accountId, configPath, force) {
65
+ const { shouldMergeConfigs } = await (0, promptUtils_1.promptUser)({
66
+ name: 'shouldMergeConfigs',
67
+ type: 'confirm',
68
+ message: (0, lang_1.i18n)('lib.configMigrate.mergeConfigsPrompt', {
69
+ deprecatedConfigPath: (0, migrate_1.getConfigPath)(configPath, false) ||
70
+ config_1.DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME,
71
+ globalConfigPath: config_1.GLOBAL_CONFIG_PATH,
72
+ }),
73
+ });
74
+ if (!shouldMergeConfigs) {
75
+ (0, usageTracking_1.trackCommandMetadataUsage)('config-migrate', {
76
+ command: 'hs config migrate',
77
+ type: 'merge',
78
+ step: 'Reject merge via prompt',
79
+ }, accountId);
80
+ return false;
81
+ }
82
+ const deprecatedConfig = (0, migrate_1.getDeprecatedConfig)(configPath);
83
+ const globalConfig = (0, migrate_1.getGlobalConfig)();
84
+ if (!deprecatedConfig || !globalConfig) {
85
+ return true;
86
+ }
87
+ const mergedConfig = await mergeConfigProperties(globalConfig, deprecatedConfig, force);
88
+ const { skippedAccountIds } = (0, migrate_1.mergeExistingConfigs)(mergedConfig, deprecatedConfig);
89
+ if (skippedAccountIds.length > 0) {
90
+ logger_1.logger.log((0, lang_1.i18n)('lib.configMigrate.skippedExistingAccounts', {
91
+ skippedAccountIds: skippedAccountIds.join(', '),
92
+ }));
93
+ }
94
+ logger_1.logger.success((0, lang_1.i18n)('lib.configMigrate.mergeSuccess', {
95
+ globalConfigPath: config_1.GLOBAL_CONFIG_PATH,
96
+ }));
97
+ (0, usageTracking_1.trackCommandMetadataUsage)('config-migrate', {
98
+ command: 'hs config migrate',
99
+ type: 'merge',
100
+ step: 'Confirm merge via prompt',
101
+ successful: true,
102
+ }, accountId);
103
+ return true;
104
+ }
@@ -10,21 +10,20 @@ const text_1 = require("@hubspot/local-dev-lib/text");
10
10
  const usageTracking_1 = require("./usageTracking");
11
11
  const promptUtils_1 = require("./prompts/promptUtils");
12
12
  const lang_1 = require("../lib/lang");
13
- const i18nKey = 'commands.config.subcommands.set.options';
14
13
  async function enableOrDisableUsageTracking() {
15
14
  const { isEnabled } = await (0, promptUtils_1.promptUser)([
16
15
  {
17
16
  type: 'list',
18
17
  name: 'isEnabled',
19
18
  pageSize: 20,
20
- message: (0, lang_1.i18n)(`${i18nKey}.allowUsageTracking.promptMessage`),
19
+ message: (0, lang_1.i18n)(`commands.config.subcommands.set.options.allowUsageTracking.promptMessage`),
21
20
  choices: [
22
21
  {
23
- name: (0, lang_1.i18n)(`${i18nKey}.allowUsageTracking.labels.enabled`),
22
+ name: (0, lang_1.i18n)(`commands.config.subcommands.set.options.allowUsageTracking.labels.enabled`),
24
23
  value: true,
25
24
  },
26
25
  {
27
- name: (0, lang_1.i18n)(`${i18nKey}.allowUsageTracking.labels.disabled`),
26
+ name: (0, lang_1.i18n)(`commands.config.subcommands.set.options.allowUsageTracking.labels.disabled`),
28
27
  value: false,
29
28
  },
30
29
  ],
@@ -43,7 +42,7 @@ async function setAllowUsageTracking({ accountId, allowUsageTracking, }) {
43
42
  isEnabled = await enableOrDisableUsageTracking();
44
43
  }
45
44
  (0, config_1.updateAllowUsageTracking)(isEnabled);
46
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.allowUsageTracking.success`, {
45
+ logger_1.logger.success((0, lang_1.i18n)(`commands.config.subcommands.set.options.allowUsageTracking.success`, {
47
46
  isEnabled: isEnabled.toString(),
48
47
  }));
49
48
  }
@@ -54,7 +53,7 @@ async function selectCmsPublishMode() {
54
53
  type: 'list',
55
54
  name: 'cmsPublishMode',
56
55
  pageSize: 20,
57
- message: (0, lang_1.i18n)(`${i18nKey}.defaultMode.promptMessage`),
56
+ message: (0, lang_1.i18n)(`commands.config.subcommands.set.options.defaultMode.promptMessage`),
58
57
  choices: ALL_CMS_PUBLISH_MODES,
59
58
  default: files_1.CMS_PUBLISH_MODE.publish,
60
59
  },
@@ -72,13 +71,13 @@ async function setDefaultCmsPublishMode({ accountId, defaultCmsPublishMode, }) {
72
71
  newDefault = defaultCmsPublishMode;
73
72
  }
74
73
  else {
75
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.defaultMode.error`, {
74
+ logger_1.logger.error((0, lang_1.i18n)(`commands.config.subcommands.set.options.defaultMode.error`, {
76
75
  validModes: (0, text_1.commaSeparatedValues)(ALL_CMS_PUBLISH_MODES),
77
76
  }));
78
77
  newDefault = await selectCmsPublishMode();
79
78
  }
80
79
  (0, config_1.updateDefaultCmsPublishMode)(newDefault);
81
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.defaultMode.success`, {
80
+ logger_1.logger.success((0, lang_1.i18n)(`commands.config.subcommands.set.options.defaultMode.success`, {
82
81
  mode: newDefault,
83
82
  }));
84
83
  }
@@ -86,7 +85,7 @@ async function enterTimeout() {
86
85
  const { timeout } = await (0, promptUtils_1.promptUser)([
87
86
  {
88
87
  name: 'timeout',
89
- message: (0, lang_1.i18n)(`${i18nKey}.httpTimeout.promptMessage`),
88
+ message: (0, lang_1.i18n)(`commands.config.subcommands.set.options.httpTimeout.promptMessage`),
90
89
  type: 'input',
91
90
  default: 30000,
92
91
  },
@@ -103,5 +102,7 @@ async function setHttpTimeout({ accountId, httpTimeout, }) {
103
102
  newHttpTimeout = httpTimeout;
104
103
  }
105
104
  (0, config_1.updateHttpTimeout)(newHttpTimeout);
106
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.httpTimeout.success`, { timeout: newHttpTimeout }));
105
+ logger_1.logger.success((0, lang_1.i18n)(`commands.config.subcommands.set.options.httpTimeout.success`, {
106
+ timeout: newHttpTimeout,
107
+ }));
107
108
  }
@@ -74,3 +74,7 @@ export declare const APP_AUTH_TYPES: {
74
74
  readonly OAUTH: "oauth";
75
75
  readonly STATIC: "static";
76
76
  };
77
+ export declare const FEATURES: {
78
+ readonly UNIFIED_THEME_PREVIEW: "cms:react:unifiedThemePreview";
79
+ readonly UNIFIED_APPS: "Developers:UnifiedApps:PrivateBeta";
80
+ };
package/lib/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.APP_AUTH_TYPES = exports.APP_DISTRIBUTION_TYPES = exports.IR_COMPONENT_TYPES = exports.PLATFORM_VERSION_ERROR_TYPES = exports.PROJECT_COMPONENT_TYPES = exports.PROJECT_TASK_TYPES = exports.PROJECT_ERROR_TYPES = exports.PROJECT_DEPLOY_TEXT = exports.PROJECT_BUILD_TEXT = exports.PROJECT_DEPLOY_STATES = exports.PROJECT_BUILD_STATES = exports.PROJECT_CONFIG_FILE = exports.DEFAULT_POLLING_DELAY = exports.MARKETPLACE_FOLDER = exports.HUBSPOT_FOLDER = exports.FEEDBACK_INTERVAL = exports.DEFAULT_PROJECT_TEMPLATE_BRANCH = exports.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH = void 0;
3
+ exports.FEATURES = exports.APP_AUTH_TYPES = exports.APP_DISTRIBUTION_TYPES = exports.IR_COMPONENT_TYPES = exports.PLATFORM_VERSION_ERROR_TYPES = exports.PROJECT_COMPONENT_TYPES = exports.PROJECT_TASK_TYPES = exports.PROJECT_ERROR_TYPES = exports.PROJECT_DEPLOY_TEXT = exports.PROJECT_BUILD_TEXT = exports.PROJECT_DEPLOY_STATES = exports.PROJECT_BUILD_STATES = exports.PROJECT_CONFIG_FILE = exports.DEFAULT_POLLING_DELAY = exports.MARKETPLACE_FOLDER = exports.HUBSPOT_FOLDER = exports.FEEDBACK_INTERVAL = exports.DEFAULT_PROJECT_TEMPLATE_BRANCH = exports.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH = void 0;
4
4
  exports.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH = 'HubSpot/hubspot-project-components';
5
5
  exports.DEFAULT_PROJECT_TEMPLATE_BRANCH = 'main';
6
6
  exports.FEEDBACK_INTERVAL = 10;
@@ -69,3 +69,7 @@ exports.APP_AUTH_TYPES = {
69
69
  OAUTH: 'oauth',
70
70
  STATIC: 'static',
71
71
  };
72
+ exports.FEATURES = {
73
+ UNIFIED_THEME_PREVIEW: 'cms:react:unifiedThemePreview',
74
+ UNIFIED_APPS: 'Developers:UnifiedApps:PrivateBeta',
75
+ };
@@ -9,7 +9,7 @@ exports.installPackages = installPackages;
9
9
  exports.getProjectPackageJsonLocations = getProjectPackageJsonLocations;
10
10
  exports.hasMissingPackages = hasMissingPackages;
11
11
  const logger_1 = require("@hubspot/local-dev-lib/logger");
12
- const projects_1 = require("./projects");
12
+ const config_1 = require("./projects/config");
13
13
  const child_process_1 = require("child_process");
14
14
  const fs_1 = require("@hubspot/local-dev-lib/fs");
15
15
  const path_1 = __importDefault(require("path"));
@@ -92,7 +92,7 @@ async function installPackagesInDirectory(directory, packages) {
92
92
  }
93
93
  }
94
94
  async function getProjectPackageJsonLocations() {
95
- const projectConfig = await (0, projects_1.getProjectConfig)();
95
+ const projectConfig = await (0, config_1.getProjectConfig)();
96
96
  if (!projectConfig ||
97
97
  !projectConfig.projectDir ||
98
98
  !projectConfig.projectConfig) {
@@ -11,16 +11,15 @@ interface Section {
11
11
  export declare class Diagnosis {
12
12
  private readonly prefixes;
13
13
  private readonly diagnosis;
14
- private readonly indentation;
15
14
  private errorCount;
16
15
  private warningCount;
17
16
  constructor({ diagnosticInfo, accountId }: DiagnosisOptions);
18
- private indent;
19
17
  getErrorCount(): number;
20
18
  getWarningCount(): number;
21
19
  addCliSection(section: Section): void;
22
20
  addProjectSection(section: Section): void;
23
21
  addCLIConfigSection(section: Section): void;
22
+ addDefaultAccountOverrideFileSection(section: Section): void;
24
23
  toString(): string;
25
24
  private generateSections;
26
25
  }
@@ -5,12 +5,11 @@ const spinniesUtils_1 = require("../ui/spinniesUtils");
5
5
  const chalk_1 = require("chalk");
6
6
  const interpolation_1 = require("../interpolation");
7
7
  const ui_1 = require("../ui");
8
+ const index_1 = require("../ui/index");
8
9
  const { i18n } = require('../lang');
9
- const i18nKey = `lib.doctor.diagnosis`;
10
10
  class Diagnosis {
11
11
  prefixes;
12
12
  diagnosis;
13
- indentation = ' ';
14
13
  errorCount = 0;
15
14
  warningCount = 0;
16
15
  constructor({ diagnosticInfo, accountId }) {
@@ -22,20 +21,24 @@ class Diagnosis {
22
21
  };
23
22
  this.diagnosis = {
24
23
  cli: {
25
- header: i18n(`${i18nKey}.cli.header`),
24
+ header: i18n(`lib.doctor.diagnosis.cli.header`),
26
25
  sections: [],
27
26
  },
28
27
  cliConfig: {
29
- header: i18n(`${i18nKey}.cliConfig.header`),
28
+ header: i18n(`lib.doctor.diagnosis.cliConfig.header`),
29
+ sections: [],
30
+ },
31
+ defaultAccountOverrideFile: {
32
+ header: i18n(`lib.doctor.diagnosis.defaultAccountOverrideFile.header`),
30
33
  sections: [],
31
34
  },
32
35
  project: {
33
- header: i18n(`${i18nKey}.projectConfig.header`),
36
+ header: i18n(`lib.doctor.diagnosis.projectConfig.header`),
34
37
  subheaders: [
35
- i18n(`${i18nKey}.projectConfig.projectDirSubHeader`, {
38
+ i18n(`lib.doctor.diagnosis.projectConfig.projectDirSubHeader`, {
36
39
  projectDir: diagnosticInfo.project?.config?.projectDir,
37
40
  }),
38
- i18n(`${i18nKey}.projectConfig.projectNameSubHeader`, {
41
+ i18n(`lib.doctor.diagnosis.projectConfig.projectNameSubHeader`, {
39
42
  projectName: diagnosticInfo.project?.config?.projectConfig?.name,
40
43
  }),
41
44
  ],
@@ -44,18 +47,15 @@ class Diagnosis {
44
47
  };
45
48
  if (diagnosticInfo.config) {
46
49
  this.diagnosis.cliConfig.subheaders = [
47
- i18n(`${i18nKey}.cliConfig.configFileSubHeader`, {
50
+ i18n(`lib.doctor.diagnosis.cliConfig.configFileSubHeader`, {
48
51
  filename: diagnosticInfo.config,
49
52
  }),
50
- i18n(`${i18nKey}.cliConfig.defaultAccountSubHeader`, {
53
+ i18n(`lib.doctor.diagnosis.cliConfig.defaultAccountSubHeader`, {
51
54
  accountDetails: (0, ui_1.uiAccountDescription)(accountId),
52
55
  }),
53
56
  ];
54
57
  }
55
58
  }
56
- indent(level) {
57
- return this.indentation.repeat(level);
58
- }
59
59
  getErrorCount() {
60
60
  return this.errorCount;
61
61
  }
@@ -71,6 +71,9 @@ class Diagnosis {
71
71
  addCLIConfigSection(section) {
72
72
  this.diagnosis.cliConfig.sections.push(section);
73
73
  }
74
+ addDefaultAccountOverrideFileSection(section) {
75
+ this.diagnosis.defaultAccountOverrideFile.sections.push(section);
76
+ }
74
77
  toString() {
75
78
  const output = [];
76
79
  for (const value of Object.values(this.diagnosis)) {
@@ -83,10 +86,10 @@ class Diagnosis {
83
86
  return '';
84
87
  }
85
88
  output.push('');
86
- output.push(i18n(`${i18nKey}.counts.errors`, {
89
+ output.push(i18n(`lib.doctor.diagnosis.counts.errors`, {
87
90
  count: this.errorCount,
88
91
  }));
89
- output.push(i18n(`${i18nKey}.counts.warnings`, {
92
+ output.push(i18n(`lib.doctor.diagnosis.counts.warnings`, {
90
93
  count: this.warningCount,
91
94
  }));
92
95
  output.push('');
@@ -108,9 +111,9 @@ class Diagnosis {
108
111
  else if (section.type === 'warning') {
109
112
  this.warningCount++;
110
113
  }
111
- output.push(`${this.indent(1)}${this.prefixes[section.type]} ${section.message}`);
114
+ output.push(`${(0, index_1.indent)(1)}${this.prefixes[section.type]} ${section.message}`);
112
115
  if (section.secondaryMessaging) {
113
- output.push(`${this.indent(2)}- ${section.secondaryMessaging}`);
116
+ output.push(`${(0, index_1.indent)(2)}- ${section.secondaryMessaging}`);
114
117
  }
115
118
  });
116
119
  return output.join('\n');
@@ -1,4 +1,4 @@
1
- import { getProjectConfig } from '../projects';
1
+ import { getProjectConfig } from '../projects/config';
2
2
  import { Environment } from '@hubspot/local-dev-lib/types/Config';
3
3
  import { AccessToken, AccountType, AuthType } from '@hubspot/local-dev-lib/types/Accounts';
4
4
  import { Project } from '@hubspot/local-dev-lib/types/Project';
@@ -21,6 +21,7 @@ export interface DiagnosticInfo extends FilesInfo {
21
21
  npm: string | null;
22
22
  };
23
23
  config: string | null;
24
+ defaultAccountOverrideFile: string | null | undefined;
24
25
  configSettings: {
25
26
  [key: string]: unknown;
26
27
  };
@@ -4,13 +4,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.DiagnosticInfoBuilder = void 0;
7
- const projects_1 = require("../projects");
8
- const projects_2 = require("@hubspot/local-dev-lib/api/projects");
7
+ const config_1 = require("../projects/config");
8
+ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const package_json_1 = __importDefault(require("../../package.json"));
11
11
  const logger_1 = require("@hubspot/local-dev-lib/logger");
12
- const config_1 = require("@hubspot/local-dev-lib/config");
13
12
  const config_2 = require("@hubspot/local-dev-lib/config");
13
+ const config_3 = require("@hubspot/local-dev-lib/config");
14
14
  const personalAccessKey_1 = require("@hubspot/local-dev-lib/personalAccessKey");
15
15
  const fs_1 = require("@hubspot/local-dev-lib/fs");
16
16
  const util_1 = __importDefault(require("util"));
@@ -38,10 +38,10 @@ class DiagnosticInfoBuilder {
38
38
  files;
39
39
  processInfo;
40
40
  constructor(processInfo) {
41
- this.accountId = (0, config_1.getAccountId)();
42
- const accountConfig = (0, config_2.getAccountConfig)(this.accountId);
41
+ this.accountId = (0, config_2.getAccountId)();
42
+ const accountConfig = (0, config_3.getAccountConfig)(this.accountId);
43
43
  this.configSettings = {
44
- httpUseLocalhost: (0, config_1.isConfigFlagEnabled)('httpUseLocalhost'),
44
+ httpUseLocalhost: (0, config_2.isConfigFlagEnabled)('httpUseLocalhost'),
45
45
  };
46
46
  this.env = accountConfig?.env;
47
47
  this.authType = accountConfig?.authType;
@@ -50,7 +50,7 @@ class DiagnosticInfoBuilder {
50
50
  this.processInfo = processInfo;
51
51
  }
52
52
  async generateDiagnosticInfo() {
53
- this._projectConfig = await (0, projects_1.getProjectConfig)();
53
+ this._projectConfig = await (0, config_1.getProjectConfig)();
54
54
  if (this._projectConfig?.projectConfig) {
55
55
  await this.fetchProjectDetails();
56
56
  await this.fetchAccessToken();
@@ -63,7 +63,8 @@ class DiagnosticInfoBuilder {
63
63
  platform,
64
64
  arch,
65
65
  path: mainModule?.path,
66
- config: (0, config_2.getConfigPath)(),
66
+ config: (0, config_3.getConfigPath)(),
67
+ defaultAccountOverrideFile: (0, config_2.getDefaultAccountOverrideFilePath)(),
67
68
  configSettings: this.configSettings,
68
69
  versions: {
69
70
  [hubspotCli]: package_json_1.default.version,
@@ -88,7 +89,7 @@ class DiagnosticInfoBuilder {
88
89
  }
89
90
  async fetchProjectDetails() {
90
91
  try {
91
- const { data } = await (0, projects_2.fetchProject)(this.accountId,
92
+ const { data } = await (0, projects_1.fetchProject)(this.accountId,
92
93
  // We check that config exists before running this function
93
94
  this._projectConfig.projectConfig.name);
94
95
  this.projectDetails = data;
@@ -10,6 +10,7 @@ export declare class Doctor {
10
10
  private performCliChecks;
11
11
  private performProjectChecks;
12
12
  private performCliConfigChecks;
13
+ private performDefaultAccountOverrideFileChecks;
13
14
  private performCliConfigSettingsChecks;
14
15
  private checkIfAccessTokenValid;
15
16
  private checkIfNodeIsInstalled;