@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
@@ -13,9 +13,8 @@ const usageTracking_1 = require("../../lib/usageTracking");
13
13
  const ui_1 = require("../../lib/ui");
14
14
  const commonOpts_1 = require("../../lib/commonOpts");
15
15
  const lang_1 = require("../../lib/lang");
16
- const i18nKey = 'commands.secret.subcommands.delete';
17
16
  exports.command = 'delete [name]';
18
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
17
+ exports.describe = (0, lang_1.i18n)(`commands.secret.subcommands.delete.describe`);
19
18
  async function handler(args) {
20
19
  const { name, derivedAccountId, force } = args;
21
20
  let secretName = name;
@@ -23,30 +22,34 @@ async function handler(args) {
23
22
  try {
24
23
  const { data: { results: secrets }, } = await (0, secrets_1.fetchSecrets)(derivedAccountId);
25
24
  if (secretName && !secrets.includes(secretName)) {
26
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noSecret`, { secretName }));
25
+ logger_1.logger.error((0, lang_1.i18n)(`commands.secret.subcommands.delete.errors.noSecret`, {
26
+ secretName,
27
+ }));
27
28
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
28
29
  }
29
30
  if (!secretName) {
30
- const { secretToModify } = await (0, secretPrompt_1.secretListPrompt)(secrets, (0, lang_1.i18n)(`${i18nKey}.selectSecret`));
31
+ const { secretToModify } = await (0, secretPrompt_1.secretListPrompt)(secrets, (0, lang_1.i18n)(`commands.secret.subcommands.delete.selectSecret`));
31
32
  secretName = secretToModify;
32
33
  }
33
34
  const confirmDelete = force ||
34
- (await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)(`${i18nKey}.confirmDelete`, { secretName }), {
35
+ (await (0, promptUtils_1.confirmPrompt)((0, lang_1.i18n)(`commands.secret.subcommands.delete.confirmDelete`, {
36
+ secretName,
37
+ }), {
35
38
  defaultAnswer: false,
36
39
  }));
37
40
  if (!confirmDelete) {
38
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.deleteCanceled`));
41
+ logger_1.logger.success((0, lang_1.i18n)(`commands.secret.subcommands.delete.deleteCanceled`));
39
42
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
40
43
  }
41
44
  await (0, secrets_1.deleteSecret)(derivedAccountId, secretName);
42
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.success.delete`, {
45
+ logger_1.logger.success((0, lang_1.i18n)(`commands.secret.subcommands.delete.success.delete`, {
43
46
  accountIdentifier: (0, ui_1.uiAccountDescription)(derivedAccountId),
44
47
  secretName,
45
48
  }));
46
49
  }
47
50
  catch (err) {
48
51
  if (secretName) {
49
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.delete`, {
52
+ logger_1.logger.error((0, lang_1.i18n)(`commands.secret.subcommands.delete.errors.delete`, {
50
53
  secretName,
51
54
  }));
52
55
  }
@@ -62,7 +65,7 @@ function builder(yargs) {
62
65
  (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
63
66
  yargs
64
67
  .positional('name', {
65
- describe: (0, lang_1.i18n)(`${i18nKey}.positionals.name.describe`),
68
+ describe: (0, lang_1.i18n)(`commands.secret.subcommands.delete.positionals.name.describe`),
66
69
  type: 'string',
67
70
  })
68
71
  .options('force', {
@@ -10,15 +10,14 @@ const usageTracking_1 = require("../../lib/usageTracking");
10
10
  const ui_1 = require("../../lib/ui");
11
11
  const commonOpts_1 = require("../../lib/commonOpts");
12
12
  const lang_1 = require("../../lib/lang");
13
- const i18nKey = 'commands.secret.subcommands.list';
14
13
  exports.command = 'list';
15
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
14
+ exports.describe = (0, lang_1.i18n)(`commands.secret.subcommands.list.describe`);
16
15
  async function handler(args) {
17
16
  const { derivedAccountId } = args;
18
17
  (0, usageTracking_1.trackCommandUsage)('secrets-list', {}, derivedAccountId);
19
18
  try {
20
19
  const { data: { results }, } = await (0, secrets_1.fetchSecrets)(derivedAccountId);
21
- const groupLabel = (0, lang_1.i18n)(`${i18nKey}.groupLabel`, {
20
+ const groupLabel = (0, lang_1.i18n)(`commands.secret.subcommands.list.groupLabel`, {
22
21
  accountIdentifier: (0, ui_1.uiAccountDescription)(derivedAccountId),
23
22
  });
24
23
  logger_1.logger.group(groupLabel);
@@ -26,7 +25,7 @@ async function handler(args) {
26
25
  logger_1.logger.groupEnd();
27
26
  }
28
27
  catch (err) {
29
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.list`));
28
+ logger_1.logger.error((0, lang_1.i18n)(`commands.secret.subcommands.list.errors.list`));
30
29
  (0, index_1.logError)(err, new index_1.ApiErrorContext({
31
30
  request: 'add secret',
32
31
  accountId: derivedAccountId,
@@ -12,9 +12,8 @@ const ui_1 = require("../../lib/ui");
12
12
  const commonOpts_1 = require("../../lib/commonOpts");
13
13
  const secretPrompt_1 = require("../../lib/prompts/secretPrompt");
14
14
  const lang_1 = require("../../lib/lang");
15
- const i18nKey = 'commands.secret.subcommands.update';
16
15
  exports.command = 'update [name]';
17
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
16
+ exports.describe = (0, lang_1.i18n)(`commands.secret.subcommands.update.describe`);
18
17
  async function handler(args) {
19
18
  const { name, derivedAccountId } = args;
20
19
  let secretName = name;
@@ -22,23 +21,25 @@ async function handler(args) {
22
21
  try {
23
22
  const { data: { results: secrets }, } = await (0, secrets_1.fetchSecrets)(derivedAccountId);
24
23
  if (secretName && !secrets.includes(secretName)) {
25
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noSecret`, { secretName }));
24
+ logger_1.logger.error((0, lang_1.i18n)(`commands.secret.subcommands.update.errors.noSecret`, {
25
+ secretName,
26
+ }));
26
27
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
27
28
  }
28
29
  if (!secretName) {
29
- const { secretToModify } = await (0, secretPrompt_1.secretListPrompt)(secrets, (0, lang_1.i18n)(`${i18nKey}.selectSecret`));
30
+ const { secretToModify } = await (0, secretPrompt_1.secretListPrompt)(secrets, (0, lang_1.i18n)(`commands.secret.subcommands.update.selectSecret`));
30
31
  secretName = secretToModify;
31
32
  }
32
33
  const { secretValue } = await (0, secretPrompt_1.secretValuePrompt)();
33
34
  await (0, secrets_1.updateSecret)(derivedAccountId, secretName, secretValue);
34
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.success.update`, {
35
+ logger_1.logger.success((0, lang_1.i18n)(`commands.secret.subcommands.update.success.update`, {
35
36
  accountIdentifier: (0, ui_1.uiAccountDescription)(derivedAccountId),
36
37
  secretName,
37
38
  }));
38
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.success.updateExplanation`));
39
+ logger_1.logger.log((0, lang_1.i18n)(`commands.secret.subcommands.update.success.updateExplanation`));
39
40
  }
40
41
  catch (err) {
41
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.update`, {
42
+ logger_1.logger.error((0, lang_1.i18n)(`commands.secret.subcommands.update.errors.update`, {
42
43
  secretName: secretName || '',
43
44
  }));
44
45
  (0, index_1.logError)(err, new index_1.ApiErrorContext({
@@ -52,7 +53,7 @@ function builder(yargs) {
52
53
  (0, commonOpts_1.addAccountOptions)(yargs);
53
54
  (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
54
55
  yargs.positional('name', {
55
- describe: (0, lang_1.i18n)(`${i18nKey}.positionals.name.describe`),
56
+ describe: (0, lang_1.i18n)(`commands.secret.subcommands.update.positionals.name.describe`),
56
57
  type: 'string',
57
58
  });
58
59
  return yargs;
@@ -41,9 +41,8 @@ const listSecretCommand = __importStar(require("./secret/listSecret"));
41
41
  const deleteSecretCommand = __importStar(require("./secret/deleteSecret"));
42
42
  const updateSecretCommand = __importStar(require("./secret/updateSecret"));
43
43
  const lang_1 = require("../lib/lang");
44
- const i18nKey = 'commands.secret';
45
44
  exports.command = ['secret', 'secrets'];
46
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
45
+ exports.describe = (0, lang_1.i18n)(`commands.secret.describe`);
47
46
  function builder(yargs) {
48
47
  (0, commonOpts_1.addGlobalOptions)(yargs);
49
48
  yargs
@@ -20,14 +20,13 @@ const CSS_VARS_NAME_REGEX = new RegExp(/(--[\w.(,\d\-)]*)/, 'g');
20
20
  const CSS_SELECTORS_REGEX = new RegExp(/([\s\w:.,\0-[\]]*){/, 'i');
21
21
  const CSS_EXPRESSION_REGEX = new RegExp(/(?!\s)([^}])*(?![.#\s,>])[^}]*}/, 'g');
22
22
  const THEME_PATH_REGEX = new RegExp(/=\s*.*(theme\.(\w|\.)*)/, 'i');
23
- const i18nKey = 'commands.theme.subcommands.generateSelectors';
24
23
  exports.command = 'generate-selectors <path>';
25
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
24
+ exports.describe = (0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.describe');
26
25
  async function handler(args) {
27
26
  const { path } = args;
28
27
  const fieldsJsonPath = (0, generateSelectors_1.findFieldsJsonPath)(path);
29
28
  if (!fieldsJsonPath) {
30
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.fieldsNotFound`));
29
+ logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.errors.fieldsNotFound'));
31
30
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
32
31
  }
33
32
  let fieldsJson = JSON.parse(fs_1.default.readFileSync(fieldsJsonPath, 'utf-8'));
@@ -137,7 +136,7 @@ async function handler(args) {
137
136
  return themeFieldsSelectorMap;
138
137
  }, {});
139
138
  if (!Object.keys(finalMap).length) {
140
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noSelectorsFound`));
139
+ logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.errors.noSelectorsFound'));
141
140
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
142
141
  }
143
142
  Object.keys(finalMap).forEach(themeFieldKey => {
@@ -154,14 +153,14 @@ async function handler(args) {
154
153
  const selectorsMap = (0, generateSelectors_1.generateSelectorsMap)(fieldsJson);
155
154
  const selectorsPath = `${path}/editor-preview.json`;
156
155
  fs_1.default.writeFileSync(selectorsPath, `${JSON.stringify({ selectors: selectorsMap }, null, 2)}\n`);
157
- logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.success`, {
156
+ logger_1.logger.success((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.success', {
158
157
  themePath: path,
159
158
  selectorsPath,
160
159
  }));
161
160
  }
162
161
  function builder(yargs) {
163
162
  yargs.positional('path', {
164
- describe: (0, lang_1.i18n)(`${i18nKey}.positionals.path.describe`),
163
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.positionals.path.describe'),
165
164
  type: 'string',
166
165
  required: true,
167
166
  });
@@ -11,15 +11,14 @@ const commonOpts_1 = require("../../lib/commonOpts");
11
11
  const usageTracking_1 = require("../../lib/usageTracking");
12
12
  const marketplaceValidate_1 = require("../../lib/marketplaceValidate");
13
13
  const lang_1 = require("../../lib/lang");
14
- const i18nKey = 'commands.theme.subcommands.marketplaceValidate';
15
14
  exports.command = 'marketplace-validate <path>';
16
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
15
+ exports.describe = (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.describe');
17
16
  async function handler(args) {
18
17
  const { path, derivedAccountId } = args;
19
18
  (0, usageTracking_1.trackCommandUsage)('validate', {}, derivedAccountId);
20
19
  SpinniesManager_1.default.init();
21
20
  SpinniesManager_1.default.add('marketplaceValidation', {
22
- text: (0, lang_1.i18n)(`${i18nKey}.logs.validatingTheme`, {
21
+ text: (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.logs.validatingTheme', {
23
22
  path,
24
23
  }),
25
24
  });
@@ -28,8 +27,8 @@ async function handler(args) {
28
27
  await (0, marketplaceValidate_1.pollForValidationFinish)(derivedAccountId, validationId);
29
28
  SpinniesManager_1.default.remove('marketplaceValidation');
30
29
  const validationResults = await (0, marketplaceValidate_1.fetchValidationResults)(derivedAccountId, validationId);
31
- (0, marketplaceValidate_1.processValidationErrors)(i18nKey, validationResults);
32
- (0, marketplaceValidate_1.displayValidationResults)(i18nKey, validationResults);
30
+ (0, marketplaceValidate_1.processValidationErrors)('commands.theme.subcommands.marketplaceValidate', validationResults);
31
+ (0, marketplaceValidate_1.displayValidationResults)('commands.theme.subcommands.marketplaceValidate', validationResults);
33
32
  process.exit();
34
33
  }
35
34
  function builder(yargs) {
@@ -37,7 +36,7 @@ function builder(yargs) {
37
36
  (0, commonOpts_1.addAccountOptions)(yargs);
38
37
  (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
39
38
  yargs.positional('path', {
40
- describe: (0, lang_1.i18n)(`${i18nKey}.positionals.path.describe`),
39
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.positionals.path.describe'),
41
40
  type: 'string',
42
41
  required: true,
43
42
  });
@@ -22,16 +22,16 @@ const previewPrompt_1 = require("../../lib/prompts/previewPrompt");
22
22
  const exitCodes_1 = require("../../lib/enums/exitCodes");
23
23
  const index_1 = require("../../lib/errorHandlers/index");
24
24
  const process_1 = require("../../lib/process");
25
- const projects_1 = require("../../lib/projects");
25
+ const config_1 = require("../../lib/projects/config");
26
26
  const structure_1 = require("../../lib/projects/structure");
27
27
  const Projects_1 = require("../../types/Projects");
28
28
  const hasFeature_1 = require("../../lib/hasFeature");
29
- const i18nKey = 'commands.theme.subcommands.preview';
29
+ const constants_1 = require("../../lib/constants");
30
30
  exports.command = 'preview [--src] [--dest]';
31
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
31
+ exports.describe = (0, lang_1.i18n)('commands.theme.subcommands.preview.describe');
32
32
  function validateSrcPath(src) {
33
33
  const logInvalidPath = () => {
34
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidPath`, {
34
+ logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.preview.errors.invalidPath', {
35
35
  path: src,
36
36
  }));
37
37
  };
@@ -50,7 +50,7 @@ function validateSrcPath(src) {
50
50
  }
51
51
  function handleUserInput() {
52
52
  const onTerminate = () => {
53
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.processExited`));
53
+ logger_1.logger.log((0, lang_1.i18n)('commands.theme.subcommands.preview.logs.processExited'));
54
54
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
55
55
  };
56
56
  (0, process_1.handleExit)(onTerminate);
@@ -63,7 +63,7 @@ function handleUserInput() {
63
63
  async function determineSrcAndDest(args) {
64
64
  let absoluteSrc;
65
65
  let dest;
66
- const { projectDir, projectConfig } = await (0, projects_1.getProjectConfig)();
66
+ const { projectDir, projectConfig } = await (0, config_1.getProjectConfig)();
67
67
  if (!(projectDir && projectConfig)) {
68
68
  // Not in a project, prompt for src and dest of traditional theme
69
69
  const previewPromptAnswers = await (0, previewPrompt_1.previewPrompt)(args);
@@ -81,7 +81,7 @@ async function determineSrcAndDest(args) {
81
81
  const projectComponents = await (0, structure_1.findProjectComponents)(projectDir);
82
82
  const themeComponents = projectComponents.filter(c => c.type === Projects_1.ComponentTypes.HublTheme);
83
83
  if (themeComponents.length === 0) {
84
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noThemeComponents`));
84
+ logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.preview.errors.noThemeComponents'));
85
85
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
86
86
  }
87
87
  const answer = await (0, previewPrompt_1.previewProjectPrompt)(themeComponents);
@@ -105,7 +105,7 @@ async function handler(args) {
105
105
  hideCursor: true,
106
106
  }, cli_progress_1.default.Presets.rect);
107
107
  initialUploadProgressBar.start(numFiles, 0, {
108
- label: (0, lang_1.i18n)(`${i18nKey}.initialUploadProgressBar.start`),
108
+ label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.start'),
109
109
  });
110
110
  let uploadsHaveStarted = false;
111
111
  const uploadOptions = {
@@ -117,7 +117,7 @@ async function handler(args) {
117
117
  if (!uploadsHaveStarted) {
118
118
  uploadsHaveStarted = true;
119
119
  initialUploadProgressBar.update(0, {
120
- label: (0, lang_1.i18n)(`${i18nKey}.initialUploadProgressBar.uploading`),
120
+ label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.uploading'),
121
121
  });
122
122
  }
123
123
  },
@@ -130,7 +130,7 @@ async function handler(args) {
130
130
  onFinalErrorCallback: () => initialUploadProgressBar.increment(),
131
131
  onFinishCallback: (results) => {
132
132
  initialUploadProgressBar.update(numFiles, {
133
- label: (0, lang_1.i18n)(`${i18nKey}.initialUploadProgressBar.finish`),
133
+ label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.finish'),
134
134
  });
135
135
  initialUploadProgressBar.stop();
136
136
  results.forEach(result => {
@@ -159,7 +159,7 @@ async function handler(args) {
159
159
  catch (e) {
160
160
  logger_1.logger.warn('Unified dev server requires node 20 to run. Defaulting to legacy preview.');
161
161
  }
162
- const isUngatedForUnified = await (0, hasFeature_1.hasFeature)(derivedAccountId, 'cms:react:unifiedThemePreview');
162
+ const isUngatedForUnified = await (0, hasFeature_1.hasFeature)(derivedAccountId, constants_1.FEATURES.UNIFIED_THEME_PREVIEW);
163
163
  if (isUngatedForUnified && createUnifiedDevServer) {
164
164
  if (port) {
165
165
  process.env['PORT'] = port.toString();
@@ -188,27 +188,27 @@ function builder(yargs) {
188
188
  (0, commonOpts_1.addAccountOptions)(yargs);
189
189
  yargs
190
190
  .option('src', {
191
- describe: (0, lang_1.i18n)(`${i18nKey}.options.src.describe`),
191
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.src.describe'),
192
192
  type: 'string',
193
193
  requiresArg: true,
194
194
  })
195
195
  .option('dest', {
196
- describe: (0, lang_1.i18n)(`${i18nKey}.options.dest.describe`),
196
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.dest.describe'),
197
197
  type: 'string',
198
198
  requiresArg: true,
199
199
  })
200
200
  .option('notify', {
201
201
  alias: 'n',
202
- describe: (0, lang_1.i18n)(`${i18nKey}.options.notify.describe`),
202
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.notify.describe'),
203
203
  type: 'string',
204
204
  requiresArg: true,
205
205
  })
206
206
  .option('no-ssl', {
207
- describe: (0, lang_1.i18n)(`${i18nKey}.options.noSsl.describe`),
207
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.noSsl.describe'),
208
208
  type: 'boolean',
209
209
  })
210
210
  .option('port', {
211
- describe: (0, lang_1.i18n)(`${i18nKey}.options.port.describe`),
211
+ describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.port.describe'),
212
212
  type: 'number',
213
213
  })
214
214
  .option('resetSession', {
package/commands/theme.js CHANGED
@@ -40,9 +40,8 @@ const generateSelectors = __importStar(require("./theme/generate-selectors"));
40
40
  const previewCommand = __importStar(require("./theme/preview"));
41
41
  const commonOpts_1 = require("../lib/commonOpts");
42
42
  const lang_1 = require("../lib/lang");
43
- const i18nKey = 'commands.theme';
44
43
  exports.command = ['theme', 'themes'];
45
- exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
44
+ exports.describe = (0, lang_1.i18n)('commands.theme.describe');
46
45
  function builder(yargs) {
47
46
  (0, commonOpts_1.addGlobalOptions)(yargs);
48
47
  yargs
@@ -19,16 +19,15 @@ const { validateCmsPublishMode } = require('../lib/validation');
19
19
  const { trackCommandUsage } = require('../lib/usageTracking');
20
20
  const { getUploadableFileList } = require('../lib/upload');
21
21
  const { i18n } = require('../lib/lang');
22
- const i18nKey = 'commands.upload';
23
22
  const { EXIT_CODES } = require('../lib/enums/exitCodes');
24
23
  const { FieldsJs, isConvertableFieldJs, cleanupTmpDirSync, } = require('@hubspot/local-dev-lib/cms/handleFieldsJS');
25
24
  exports.command = 'upload [src] [dest]';
26
- exports.describe = i18n(`${i18nKey}.describe`);
25
+ exports.describe = i18n('commands.upload.describe');
27
26
  const logThemePreview = (filePath, accountId) => {
28
27
  const previewUrl = getThemePreviewUrl(filePath, accountId);
29
28
  // Only log if we are actually in a theme
30
29
  if (previewUrl) {
31
- logger.log(i18n(`${i18nKey}.previewUrl`, {
30
+ logger.log(i18n('commands.upload.previewUrl', {
32
31
  previewUrl,
33
32
  }));
34
33
  }
@@ -45,7 +44,7 @@ exports.handler = async (options) => {
45
44
  let dest = options.dest || uploadPromptAnswers.dest;
46
45
  let absoluteSrcPath = path.resolve(getCwd(), src);
47
46
  if (!dest) {
48
- logger.error(i18n(`${i18nKey}.errors.destinationRequired`));
47
+ logger.error(i18n('commands.upload.errors.destinationRequired'));
49
48
  return;
50
49
  }
51
50
  // Check for theme.json file and determine the root path for the project based on it if it exists
@@ -68,14 +67,14 @@ exports.handler = async (options) => {
68
67
  try {
69
68
  stats = fs.statSync(absoluteSrcPath);
70
69
  if (!stats.isFile() && !stats.isDirectory()) {
71
- logger.error(i18n(`${i18nKey}.errors.invalidPath`, {
70
+ logger.error(i18n('commands.upload.errors.invalidPath', {
72
71
  path: src,
73
72
  }));
74
73
  return;
75
74
  }
76
75
  }
77
76
  catch (e) {
78
- logger.error(i18n(`${i18nKey}.errors.invalidPath`, {
77
+ logger.error(i18n('commands.upload.errors.invalidPath', {
79
78
  path: src,
80
79
  }));
81
80
  return;
@@ -89,20 +88,20 @@ exports.handler = async (options) => {
89
88
  }
90
89
  if (stats.isFile()) {
91
90
  if (!isAllowedExtension(src) && !convertFields) {
92
- logger.error(i18n(`${i18nKey}.errors.invalidPath`, {
91
+ logger.error(i18n('commands.upload.errors.invalidPath', {
93
92
  path: src,
94
93
  }));
95
94
  return;
96
95
  }
97
96
  if (shouldIgnoreFile(absoluteSrcPath)) {
98
- logger.error(i18n(`${i18nKey}.errors.fileIgnored`, {
97
+ logger.error(i18n('commands.upload.errors.fileIgnored', {
99
98
  path: src,
100
99
  }));
101
100
  return;
102
101
  }
103
102
  upload(derivedAccountId, absoluteSrcPath, normalizedDest, getFileMapperQueryValues(cmsPublishMode, options))
104
103
  .then(() => {
105
- logger.success(i18n(`${i18nKey}.success.fileUploaded`, {
104
+ logger.success(i18n('commands.upload.success.fileUploaded', {
106
105
  accountId: derivedAccountId,
107
106
  dest: normalizedDest,
108
107
  src,
@@ -110,7 +109,7 @@ exports.handler = async (options) => {
110
109
  logThemePreview(src, derivedAccountId);
111
110
  })
112
111
  .catch(error => {
113
- logger.error(i18n(`${i18nKey}.errors.uploadFailed`, {
112
+ logger.error(i18n('commands.upload.errors.uploadFailed', {
114
113
  dest: normalizedDest,
115
114
  src,
116
115
  }));
@@ -131,7 +130,7 @@ exports.handler = async (options) => {
131
130
  });
132
131
  }
133
132
  else {
134
- logger.log(i18n(`${i18nKey}.uploading`, {
133
+ logger.log(i18n('commands.upload.uploading', {
135
134
  accountId: derivedAccountId,
136
135
  dest,
137
136
  src,
@@ -142,7 +141,7 @@ exports.handler = async (options) => {
142
141
  // If clean is true, will first delete the dest folder and then upload src. Cleans up files that only exist on HS.
143
142
  let cleanUpload = options.force;
144
143
  if (!options.force) {
145
- cleanUpload = await confirmPrompt(i18n(`${i18nKey}.confirmCleanUpload`, {
144
+ cleanUpload = await confirmPrompt(i18n('commands.upload.confirmCleanUpload', {
146
145
  accountId: derivedAccountId,
147
146
  path: dest,
148
147
  }), { defaultAnswer: false });
@@ -150,13 +149,13 @@ exports.handler = async (options) => {
150
149
  if (cleanUpload) {
151
150
  try {
152
151
  await deleteFile(derivedAccountId, dest);
153
- logger.log(i18n(`${i18nKey}.cleaning`, {
152
+ logger.log(i18n('commands.upload.cleaning', {
154
153
  accountId: derivedAccountId,
155
154
  filePath: dest,
156
155
  }));
157
156
  }
158
157
  catch (error) {
159
- logger.error(i18n(`${i18nKey}.errors.deleteFailed`, {
158
+ logger.error(i18n('commands.upload.errors.deleteFailed', {
160
159
  accountId: derivedAccountId,
161
160
  path: dest,
162
161
  }));
@@ -168,20 +167,20 @@ exports.handler = async (options) => {
168
167
  }, options, filePaths)
169
168
  .then(results => {
170
169
  if (!hasUploadErrors(results)) {
171
- logger.success(i18n(`${i18nKey}.success.uploadComplete`, {
170
+ logger.success(i18n('commands.upload.success.uploadComplete', {
172
171
  dest,
173
172
  }));
174
173
  logThemePreview(src, derivedAccountId);
175
174
  }
176
175
  else {
177
- logger.error(i18n(`${i18nKey}.errors.someFilesFailed`, {
176
+ logger.error(i18n('commands.upload.errors.someFilesFailed', {
178
177
  dest,
179
178
  }));
180
179
  process.exit(EXIT_CODES.WARNING);
181
180
  }
182
181
  })
183
182
  .catch(error => {
184
- logger.error(i18n(`${i18nKey}.errors.uploadFailed`, {
183
+ logger.error(i18n('commands.upload.errors.uploadFailed', {
185
184
  dest,
186
185
  src,
187
186
  }));
@@ -194,36 +193,36 @@ exports.handler = async (options) => {
194
193
  };
195
194
  exports.builder = yargs => {
196
195
  yargs.positional('src', {
197
- describe: i18n(`${i18nKey}.positionals.src.describe`),
196
+ describe: i18n('commands.upload.positionals.src.describe'),
198
197
  type: 'string',
199
198
  });
200
199
  yargs.positional('dest', {
201
- describe: i18n(`${i18nKey}.positionals.dest.describe`),
200
+ describe: i18n('commands.upload.positionals.dest.describe'),
202
201
  type: 'string',
203
202
  });
204
203
  yargs.option('fieldOptions', {
205
- describe: i18n(`${i18nKey}.options.options.describe`),
204
+ describe: i18n('commands.upload.options.options.describe'),
206
205
  type: 'array',
207
206
  default: [''],
208
207
  hidden: true,
209
208
  });
210
209
  yargs.option('saveOutput', {
211
- describe: i18n(`${i18nKey}.options.saveOutput.describe`),
210
+ describe: i18n('commands.upload.options.saveOutput.describe'),
212
211
  type: 'boolean',
213
212
  default: false,
214
213
  });
215
214
  yargs.option('convertFields', {
216
- describe: i18n(`${i18nKey}.options.convertFields.describe`),
215
+ describe: i18n('commands.upload.options.convertFields.describe'),
217
216
  type: 'boolean',
218
217
  default: false,
219
218
  });
220
219
  yargs.option('clean', {
221
- describe: i18n(`${i18nKey}.options.clean.describe`),
220
+ describe: i18n('commands.upload.options.clean.describe'),
222
221
  type: 'boolean',
223
222
  default: false,
224
223
  });
225
224
  yargs.option('force', {
226
- describe: i18n(`${i18nKey}.options.force.describe`),
225
+ describe: i18n('commands.upload.options.force.describe'),
227
226
  type: 'boolean',
228
227
  default: false,
229
228
  });