@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
@@ -15,7 +15,6 @@ const accountNamePrompt_1 = require("./accountNamePrompt");
15
15
  const lang_1 = require("../lang");
16
16
  const ui_1 = require("../ui");
17
17
  const exitCodes_1 = require("../enums/exitCodes");
18
- const i18nKey = 'lib.prompts.personalAccessKeyPrompt';
19
18
  /**
20
19
  * Displays notification to user that we are about to open the browser,
21
20
  * then opens their browser to the personal-access-key shortlink
@@ -24,8 +23,8 @@ async function personalAccessKeyPrompt({ env, account, }) {
24
23
  const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
25
24
  let url = `${websiteOrigin}/l/personal-access-key`;
26
25
  if (process.env.BROWSER !== 'none') {
27
- (0, ui_1.uiInfoSection)((0, lang_1.i18n)(`${i18nKey}.personalAccessKeySetupTitle`), () => {
28
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.personalAccessKeyBrowserOpenPrep`));
26
+ (0, ui_1.uiInfoSection)((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeySetupTitle`), () => {
27
+ logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep`));
29
28
  });
30
29
  if (account) {
31
30
  url = `${websiteOrigin}/personal-access-key/${account}`;
@@ -41,7 +40,7 @@ async function personalAccessKeyPrompt({ env, account, }) {
41
40
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
42
41
  }
43
42
  }
44
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.logs.openingWebBrowser`, { url }));
43
+ logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser`, { url }));
45
44
  const { personalAccessKey } = await (0, promptUtils_1.promptUser)(PERSONAL_ACCESS_KEY);
46
45
  return {
47
46
  personalAccessKey,
@@ -50,40 +49,40 @@ async function personalAccessKeyPrompt({ env, account, }) {
50
49
  }
51
50
  const ACCOUNT_ID = {
52
51
  name: 'accountId',
53
- message: (0, lang_1.i18n)(`${i18nKey}.enterAccountId`),
52
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterAccountId`),
54
53
  type: 'number',
55
54
  validate(val) {
56
55
  if (!Number.isNaN(val) && val !== undefined && val > 0) {
57
56
  return true;
58
57
  }
59
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidAccountId`);
58
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidAccountId`);
60
59
  },
61
60
  };
62
61
  const CLIENT_ID = {
63
62
  name: 'clientId',
64
- message: (0, lang_1.i18n)(`${i18nKey}.enterClientId`),
63
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterClientId`),
65
64
  validate(val) {
66
65
  if (typeof val !== 'string') {
67
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidOauthClientId`);
66
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientId`);
68
67
  }
69
68
  else if (val.length !== 36) {
70
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidOauthClientIdLength`);
69
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientIdLength`);
71
70
  }
72
71
  return true;
73
72
  },
74
73
  };
75
74
  const CLIENT_SECRET = {
76
75
  name: 'clientSecret',
77
- message: (0, lang_1.i18n)(`${i18nKey}.enterClientSecret`),
76
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterClientSecret`),
78
77
  validate(val) {
79
78
  if (typeof val !== 'string') {
80
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidOauthClientSecret`);
79
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecret`);
81
80
  }
82
81
  else if (val.length !== 36) {
83
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidOauthClientSecretLength`);
82
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecretLength`);
84
83
  }
85
84
  else if (val[0] === '*') {
86
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidOauthClientSecretCopy`);
85
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientSecretCopy`);
87
86
  }
88
87
  return true;
89
88
  },
@@ -91,11 +90,11 @@ const CLIENT_SECRET = {
91
90
  const PERSONAL_ACCESS_KEY_BROWSER_OPEN_PREP = {
92
91
  name: 'personalAcessKeyBrowserOpenPrep',
93
92
  type: 'confirm',
94
- message: (0, lang_1.i18n)(`${i18nKey}.personalAccessKeyBrowserOpenPrompt`),
93
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrompt`),
95
94
  };
96
95
  const PERSONAL_ACCESS_KEY = {
97
96
  name: 'personalAccessKey',
98
- message: (0, lang_1.i18n)(`${i18nKey}.enterPersonalAccessKey`),
97
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.enterPersonalAccessKey`),
99
98
  transformer: (val) => {
100
99
  if (!val)
101
100
  return val;
@@ -107,10 +106,10 @@ const PERSONAL_ACCESS_KEY = {
107
106
  },
108
107
  validate(val) {
109
108
  if (!val || typeof val !== 'string') {
110
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidPersonalAccessKey`);
109
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidPersonalAccessKey`);
111
110
  }
112
111
  else if (val[0] === '•') {
113
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidPersonalAccessKeyCopy`);
112
+ return (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.errors.invalidPersonalAccessKeyCopy`);
114
113
  }
115
114
  return true;
116
115
  },
@@ -118,7 +117,7 @@ const PERSONAL_ACCESS_KEY = {
118
117
  const SCOPES = {
119
118
  type: 'checkbox',
120
119
  name: 'scopes',
121
- message: (0, lang_1.i18n)(`${i18nKey}.selectScopes`),
120
+ message: (0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.selectScopes`),
122
121
  default: [...auth_1.DEFAULT_OAUTH_SCOPES],
123
122
  choices: [...auth_1.OAUTH_SCOPES],
124
123
  };
@@ -9,29 +9,28 @@ const path_1 = __importDefault(require("path"));
9
9
  const path_2 = require("@hubspot/local-dev-lib/path");
10
10
  const promptUtils_1 = require("./promptUtils");
11
11
  const lang_1 = require("../lang");
12
- const i18nKey = 'lib.prompts.previewPrompt';
13
12
  async function previewPrompt(promptOptions = {}) {
14
13
  return (0, promptUtils_1.promptUser)([
15
14
  {
16
15
  name: 'src',
17
- message: (0, lang_1.i18n)(`${i18nKey}.enterSrc`),
16
+ message: (0, lang_1.i18n)(`lib.prompts.previewPrompt.enterSrc`),
18
17
  when: !promptOptions.src,
19
18
  default: '.',
20
19
  validate: (input) => {
21
20
  if (!input) {
22
- return (0, lang_1.i18n)(`${i18nKey}.errors.srcRequired`);
21
+ return (0, lang_1.i18n)(`lib.prompts.previewPrompt.errors.srcRequired`);
23
22
  }
24
23
  return true;
25
24
  },
26
25
  },
27
26
  {
28
27
  name: 'dest',
29
- message: (0, lang_1.i18n)(`${i18nKey}.enterDest`),
28
+ message: (0, lang_1.i18n)(`lib.prompts.previewPrompt.enterDest`),
30
29
  when: !promptOptions.dest,
31
30
  default: path_1.default.basename((0, path_2.getCwd)()),
32
31
  validate: (input) => {
33
32
  if (!input) {
34
- return (0, lang_1.i18n)(`${i18nKey}.errors.destRequired`);
33
+ return (0, lang_1.i18n)(`lib.prompts.previewPrompt.errors.destRequired`);
35
34
  }
36
35
  return true;
37
36
  },
@@ -42,7 +41,7 @@ async function previewProjectPrompt(themeComponents) {
42
41
  return (0, promptUtils_1.promptUser)([
43
42
  {
44
43
  name: 'themeComponentPath',
45
- message: (0, lang_1.i18n)(`${i18nKey}.themeProjectSelect`),
44
+ message: (0, lang_1.i18n)(`lib.prompts.previewPrompt.themeProjectSelect`),
46
45
  type: 'list',
47
46
  choices: themeComponents.map(t => {
48
47
  const themeName = path_1.default.basename(t.path);
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectAddPrompt = projectAddPrompt;
4
4
  const promptUtils_1 = require("./promptUtils");
5
5
  const lang_1 = require("../lang");
6
- const i18nKey = 'lib.prompts.projectAddPrompt';
7
6
  function findComponentByPathOrLabel(components, componentPathOrLabel) {
8
7
  return components.find(c => c.path === componentPathOrLabel || c.label === componentPathOrLabel);
9
8
  }
@@ -15,10 +14,10 @@ async function projectAddPrompt(components, promptOptions = {}) {
15
14
  name: 'componentTemplate',
16
15
  message: () => {
17
16
  return promptOptions.type && !providedTypeIsValid
18
- ? (0, lang_1.i18n)(`${i18nKey}.errors.invalidType`, {
17
+ ? (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.errors.invalidType`, {
19
18
  type: promptOptions.type,
20
19
  })
21
- : (0, lang_1.i18n)(`${i18nKey}.selectType`);
20
+ : (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.selectType`);
22
21
  },
23
22
  when: !providedTypeIsValid,
24
23
  type: 'list',
@@ -31,11 +30,11 @@ async function projectAddPrompt(components, promptOptions = {}) {
31
30
  },
32
31
  {
33
32
  name: 'name',
34
- message: (0, lang_1.i18n)(`${i18nKey}.enterName`),
33
+ message: (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.enterName`),
35
34
  when: !promptOptions.name,
36
35
  validate: (input) => {
37
36
  if (!input) {
38
- return (0, lang_1.i18n)(`${i18nKey}.errors.nameRequired`);
37
+ return (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.errors.nameRequired`);
39
38
  }
40
39
  return true;
41
40
  },
@@ -15,7 +15,6 @@ const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccount
15
15
  const logger_1 = require("@hubspot/local-dev-lib/logger");
16
16
  const developerTestAccounts_1 = require("@hubspot/local-dev-lib/api/developerTestAccounts");
17
17
  const exitCodes_1 = require("../enums/exitCodes");
18
- const i18nKey = 'lib.prompts.projectDevTargetAccountPrompt';
19
18
  function mapNestedAccount(accountConfig) {
20
19
  const parentAccountId = accountConfig.parentAccountId ?? null;
21
20
  return {
@@ -43,7 +42,7 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
43
42
  sandboxUsage = data.usage;
44
43
  }
45
44
  else {
46
- logger_1.logger.error(`${i18nKey}.noAccountId`);
45
+ logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
47
46
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
48
47
  }
49
48
  }
@@ -56,13 +55,13 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
56
55
  let disabledMessage = false;
57
56
  if (sandboxUsage['DEVELOPER'] && sandboxUsage['DEVELOPER'].available === 0) {
58
57
  if (sandboxAccounts.length < sandboxUsage['DEVELOPER'].limit) {
59
- disabledMessage = (0, lang_1.i18n)(`${i18nKey}.sandboxLimitWithSuggestion`, {
58
+ disabledMessage = (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.sandboxLimitWithSuggestion`, {
60
59
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
61
60
  limit: sandboxUsage['DEVELOPER'].limit,
62
61
  });
63
62
  }
64
63
  else {
65
- disabledMessage = (0, lang_1.i18n)(`${i18nKey}.sandboxLimit`, {
64
+ disabledMessage = (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.sandboxLimit`, {
66
65
  limit: sandboxUsage['DEVELOPER'].limit,
67
66
  });
68
67
  }
@@ -76,7 +75,7 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
76
75
  .filter(a => a.accountType === config_2.HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX)
77
76
  .map(mapNestedAccount),
78
77
  {
79
- name: (0, lang_1.i18n)(`${i18nKey}.createNewSandboxOption`),
78
+ name: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.createNewSandboxOption`),
80
79
  value: {
81
80
  targetAccountId: null,
82
81
  createNestedAccount: true,
@@ -84,7 +83,7 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
84
83
  disabled: disabledMessage,
85
84
  },
86
85
  {
87
- name: (0, lang_1.i18n)(`${i18nKey}.chooseDefaultAccountOption`),
86
+ name: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.chooseDefaultAccountOption`),
88
87
  value: {
89
88
  targetAccountId: defaultAccountId,
90
89
  createNestedAccount: false,
@@ -102,7 +101,7 @@ async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAccountCo
102
101
  devTestAccountsResponse = data;
103
102
  }
104
103
  else {
105
- logger_1.logger.error(`${i18nKey}.noAccountId`);
104
+ logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
106
105
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
107
106
  }
108
107
  }
@@ -113,7 +112,7 @@ async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAccountCo
113
112
  if (devTestAccountsResponse &&
114
113
  devTestAccountsResponse.results.length >=
115
114
  devTestAccountsResponse.maxTestPortals) {
116
- disabledMessage = (0, lang_1.i18n)(`${i18nKey}.developerTestAccountLimit`, {
115
+ disabledMessage = (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.developerTestAccountLimit`, {
117
116
  authCommand: (0, ui_1.uiCommandReference)('hs auth'),
118
117
  limit: devTestAccountsResponse.maxTestPortals,
119
118
  });
@@ -137,7 +136,7 @@ async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAccountCo
137
136
  const choices = [
138
137
  ...devTestAccounts,
139
138
  {
140
- name: (0, lang_1.i18n)(`${i18nKey}.createNewDeveloperTestAccountOption`),
139
+ name: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.createNewDeveloperTestAccountOption`),
141
140
  value: {
142
141
  targetAccountId: null,
143
142
  createNestedAccount: true,
@@ -153,7 +152,7 @@ async function selectTargetAccountPrompt(defaultAccountId, accountType, choices)
153
152
  {
154
153
  name: 'targetAccountInfo',
155
154
  type: 'list',
156
- message: (0, lang_1.i18n)(`${i18nKey}.promptMessage`, {
155
+ message: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.promptMessage`, {
157
156
  accountIdentifier: (0, ui_1.uiAccountDescription)(accountId),
158
157
  accountType,
159
158
  }),
@@ -167,7 +166,7 @@ async function confirmDefaultAccountPrompt(accountName, accountType) {
167
166
  {
168
167
  name: 'useDefaultAccount',
169
168
  type: 'confirm',
170
- message: (0, lang_1.i18n)(`${i18nKey}.confirmDefaultAccount`, {
169
+ message: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.confirmDefaultAccount`, {
171
170
  accountName,
172
171
  accountType,
173
172
  }),
@@ -180,7 +179,7 @@ async function confirmUseExistingDeveloperTestAccountPrompt(account) {
180
179
  {
181
180
  name: 'confirmUseExistingDeveloperTestAccount',
182
181
  type: 'confirm',
183
- message: (0, lang_1.i18n)(`${i18nKey}.confirmUseExistingDeveloperTestAccount`, {
182
+ message: (0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.confirmUseExistingDeveloperTestAccount`, {
184
183
  accountName: getNonConfigDeveloperTestAccountName(account),
185
184
  }),
186
185
  },
@@ -3,24 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectNamePrompt = projectNamePrompt;
4
4
  const promptUtils_1 = require("./promptUtils");
5
5
  const lang_1 = require("../lang");
6
- const projects_1 = require("../projects");
6
+ const ensureProjectExists_1 = require("../projects/ensureProjectExists");
7
7
  const ui_1 = require("../ui");
8
- const i18nKey = 'lib.prompts.projectNamePrompt';
9
8
  async function projectNamePrompt(accountId, options = {}) {
10
9
  const result = await (0, promptUtils_1.promptUser)({
11
10
  name: 'projectName',
12
- message: (0, lang_1.i18n)(`${i18nKey}.enterName`),
11
+ message: (0, lang_1.i18n)(`lib.prompts.projectNamePrompt.enterName`),
13
12
  when: !options.project,
14
13
  validate: async (val) => {
15
14
  if (typeof val !== 'string' || !val) {
16
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidName`);
15
+ return (0, lang_1.i18n)(`lib.prompts.projectNamePrompt.errors.invalidName`);
17
16
  }
18
- const { projectExists } = await (0, projects_1.ensureProjectExists)(accountId, val, {
17
+ const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(accountId, val, {
19
18
  allowCreate: false,
20
19
  noLogs: true,
21
20
  });
22
21
  if (!projectExists) {
23
- return (0, lang_1.i18n)(`${i18nKey}.errors.projectDoesNotExist`, {
22
+ return (0, lang_1.i18n)(`lib.prompts.projectNamePrompt.errors.projectDoesNotExist`, {
24
23
  projectName: val,
25
24
  accountIdentifier: (0, ui_1.uiAccountDescription)(accountId),
26
25
  });
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.projectLogsPrompt = projectLogsPrompt;
4
4
  const lang_1 = require("../lang");
5
5
  const promptUtils_1 = require("./promptUtils");
6
- const i18nKey = 'lib.prompts.projectLogsPrompt';
7
6
  async function projectLogsPrompt({ functionChoices, promptOptions, projectName = '', }) {
8
7
  if (!functionChoices) {
9
8
  return {};
@@ -15,7 +14,9 @@ async function projectLogsPrompt({ functionChoices, promptOptions, projectName =
15
14
  {
16
15
  name: 'functionName',
17
16
  type: 'list',
18
- message: (0, lang_1.i18n)(`${i18nKey}.functionName`, { projectName }),
17
+ message: (0, lang_1.i18n)(`lib.prompts.projectLogsPrompt.functionName`, {
18
+ projectName,
19
+ }),
19
20
  when: () => (!promptOptions || !promptOptions.function) &&
20
21
  functionChoices.length > 0,
21
22
  choices: functionChoices,
@@ -10,6 +10,6 @@ export declare function listPrompt<T = string>(message: string, { choices, when,
10
10
  }): Promise<T>;
11
11
  export declare function inputPrompt(message: string, { when, validate, defaultAnswer, }?: {
12
12
  when?: boolean | (() => boolean);
13
- validate?: (input: string) => boolean | string;
13
+ validate?: (input: string) => (boolean | string) | Promise<boolean | string>;
14
14
  defaultAnswer?: string;
15
15
  }): Promise<string>;
@@ -9,7 +9,6 @@ const config_1 = require("@hubspot/local-dev-lib/constants/config");
9
9
  const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
10
10
  const accountTypes_1 = require("../accountTypes");
11
11
  const config_2 = require("@hubspot/local-dev-lib/config");
12
- const i18nKey = 'lib.prompts.sandboxesPrompt';
13
12
  function mapSandboxAccountChoices(portals) {
14
13
  return (portals
15
14
  ?.filter(p => (0, accountTypes_1.isSandbox)(p))
@@ -30,15 +29,15 @@ async function sandboxTypePrompt() {
30
29
  return (0, promptUtils_1.promptUser)([
31
30
  {
32
31
  name: 'type',
33
- message: (0, lang_1.i18n)(`${i18nKey}.type.message`),
32
+ message: (0, lang_1.i18n)(`lib.prompts.sandboxesPrompt.type.message`),
34
33
  type: 'list',
35
34
  choices: [
36
35
  {
37
- name: (0, lang_1.i18n)(`${i18nKey}.type.developer`),
36
+ name: (0, lang_1.i18n)(`lib.prompts.sandboxesPrompt.type.developer`),
38
37
  value: config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
39
38
  },
40
39
  {
41
- name: (0, lang_1.i18n)(`${i18nKey}.type.standard`),
40
+ name: (0, lang_1.i18n)(`lib.prompts.sandboxesPrompt.type.standard`),
42
41
  value: config_1.HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX,
43
42
  },
44
43
  ],
@@ -58,8 +57,8 @@ function deleteSandboxPrompt(promptParentAccount = false) {
58
57
  {
59
58
  name: 'account',
60
59
  message: (0, lang_1.i18n)(promptParentAccount
61
- ? `${i18nKey}.selectParentAccountName`
62
- : `${i18nKey}.selectAccountName`),
60
+ ? `lib.prompts.sandboxesPrompt.selectParentAccountName`
61
+ : `lib.prompts.sandboxesPrompt.selectAccountName`),
63
62
  type: 'list',
64
63
  pageSize: 20,
65
64
  choices,
@@ -5,14 +5,13 @@ exports.secretNamePrompt = secretNamePrompt;
5
5
  exports.secretListPrompt = secretListPrompt;
6
6
  const promptUtils_1 = require("./promptUtils");
7
7
  const lang_1 = require("../lang");
8
- const i18nKey = 'lib.prompts.secretPrompt';
9
8
  function secretValuePrompt() {
10
9
  return (0, promptUtils_1.promptUser)([
11
10
  {
12
11
  name: 'secretValue',
13
12
  type: 'password',
14
13
  mask: '*',
15
- message: (0, lang_1.i18n)(`${i18nKey}.enterValue`),
14
+ message: (0, lang_1.i18n)(`lib.prompts.secretPrompt.enterValue`),
16
15
  },
17
16
  ]);
18
17
  }
@@ -21,7 +20,7 @@ function secretNamePrompt() {
21
20
  {
22
21
  name: 'secretName',
23
22
  type: 'input',
24
- message: (0, lang_1.i18n)(`${i18nKey}.enterName`),
23
+ message: (0, lang_1.i18n)(`lib.prompts.secretPrompt.enterName`),
25
24
  },
26
25
  ]);
27
26
  }
@@ -12,19 +12,22 @@ const logger_1 = require("@hubspot/local-dev-lib/logger");
12
12
  const hubdb_1 = require("@hubspot/local-dev-lib/api/hubdb");
13
13
  const exitCodes_1 = require("../enums/exitCodes");
14
14
  const path_1 = require("@hubspot/local-dev-lib/path");
15
- const i18nKey = 'lib.prompts.selectHubDBTablePrompt';
16
15
  async function fetchHubDBOptions(accountId) {
17
16
  try {
18
17
  const { data: { results: tables }, } = await (0, hubdb_1.fetchTables)(accountId);
19
18
  if (tables.length === 0) {
20
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.errors.noTables`, { accountId }));
19
+ logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.errors.noTables`, {
20
+ accountId,
21
+ }));
21
22
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
22
23
  }
23
24
  return tables;
24
25
  }
25
26
  catch (error) {
26
27
  (0, index_1.debugError)(error, { accountId });
27
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.errorFetchingTables`, { accountId }));
28
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.errors.errorFetchingTables`, {
29
+ accountId,
30
+ }));
28
31
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
29
32
  }
30
33
  }
@@ -35,7 +38,7 @@ async function selectHubDBTablePrompt({ accountId, options, skipDestPrompt = tru
35
38
  return (0, promptUtils_1.promptUser)([
36
39
  {
37
40
  name: 'tableId',
38
- message: (0, lang_1.i18n)(`${i18nKey}.selectTable`),
41
+ message: (0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.selectTable`),
39
42
  when: !id && !isValidTable,
40
43
  type: 'list',
41
44
  choices: hubdbTables.map(table => {
@@ -47,17 +50,17 @@ async function selectHubDBTablePrompt({ accountId, options, skipDestPrompt = tru
47
50
  },
48
51
  {
49
52
  name: 'dest',
50
- message: (0, lang_1.i18n)(`${i18nKey}.enterDest`),
53
+ message: (0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.enterDest`),
51
54
  when: !options.dest && !skipDestPrompt,
52
55
  validate: (input) => {
53
56
  if (!input) {
54
- return (0, lang_1.i18n)(`${i18nKey}.errors.destRequired`);
57
+ return (0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.errors.destRequired`);
55
58
  }
56
59
  if (fs_1.default.existsSync(input)) {
57
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidDest`);
60
+ return (0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.errors.invalidDest`);
58
61
  }
59
62
  if (!(0, path_1.isValidPath)(input)) {
60
- return (0, lang_1.i18n)(`${i18nKey}.errors.invalidCharacters`);
63
+ return (0, lang_1.i18n)(`lib.prompts.selectHubDBTablePrompt.errors.invalidCharacters`);
61
64
  }
62
65
  return true;
63
66
  },
@@ -8,11 +8,10 @@ const index_1 = require("../errorHandlers/index");
8
8
  const logger_1 = require("@hubspot/local-dev-lib/logger");
9
9
  const appsDev_1 = require("@hubspot/local-dev-lib/api/appsDev");
10
10
  const exitCodes_1 = require("../enums/exitCodes");
11
- const i18nKey = 'lib.prompts.selectPublicAppPrompt';
12
11
  async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = false) {
13
12
  try {
14
13
  if (!accountId) {
15
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccountId`));
14
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.noAccountId`));
16
15
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
17
16
  }
18
17
  const { data: { results: publicApps }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(accountId);
@@ -27,8 +26,8 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
27
26
  ? 'noAppsMigrationMessage'
28
27
  : 'noAppsCloneMessage';
29
28
  (0, ui_1.uiLine)();
30
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.${headerTranslationKey}`));
31
- logger_1.logger.log((0, lang_1.i18n)(`${i18nKey}.errors.${messageTranslationKey}`, { accountName }));
29
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.${headerTranslationKey}`));
30
+ logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.${messageTranslationKey}`, { accountName }));
32
31
  (0, ui_1.uiLine)();
33
32
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
34
33
  }
@@ -36,7 +35,7 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
36
35
  }
37
36
  catch (error) {
38
37
  (0, index_1.logError)(error, accountId ? { accountId } : undefined);
39
- logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.errorFetchingApps`));
38
+ logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.errorFetchingApps`));
40
39
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
41
40
  }
42
41
  }
@@ -48,7 +47,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
48
47
  return (0, promptUtils_1.promptUser)([
49
48
  {
50
49
  name: 'appId',
51
- message: (0, lang_1.i18n)(`${i18nKey}.${translationKey}`, {
50
+ message: (0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.${translationKey}`, {
52
51
  accountName,
53
52
  }),
54
53
  type: 'list',
@@ -57,7 +56,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
57
56
  if (isMigratingApp && preventProjectMigrations && listingInfo) {
58
57
  return {
59
58
  name: `${app.name} (${app.id})`,
60
- disabled: (0, lang_1.i18n)(`${i18nKey}.errors.cannotBeMigrated`),
59
+ disabled: (0, lang_1.i18n)(`lib.prompts.selectPublicAppPrompt.errors.cannotBeMigrated`),
61
60
  };
62
61
  }
63
62
  return {
@@ -4,7 +4,6 @@ exports.setAsDefaultAccountPrompt = setAsDefaultAccountPrompt;
4
4
  const config_1 = require("@hubspot/local-dev-lib/config");
5
5
  const promptUtils_1 = require("./promptUtils");
6
6
  const lang_1 = require("../lang");
7
- const i18nKey = 'lib.prompts.setAsDefaultAccountPrompt';
8
7
  async function setAsDefaultAccountPrompt(accountName) {
9
8
  // Accounts for deprecated and new config
10
9
  const defaultAccount = (0, config_1.getConfigDefaultAccount)();
@@ -13,7 +12,7 @@ async function setAsDefaultAccountPrompt(accountName) {
13
12
  name: 'setAsDefault',
14
13
  type: 'confirm',
15
14
  when: defaultAccount !== accountName,
16
- message: (0, lang_1.i18n)(`${i18nKey}.setAsDefaultAccountMessage`),
15
+ message: (0, lang_1.i18n)(`lib.prompts.setAsDefaultAccountPrompt.setAsDefaultAccountMessage`),
17
16
  },
18
17
  ]);
19
18
  if (setAsDefault) {
@@ -8,29 +8,28 @@ const path_1 = __importDefault(require("path"));
8
8
  const path_2 = require("@hubspot/local-dev-lib/path");
9
9
  const promptUtils_1 = require("./promptUtils");
10
10
  const lang_1 = require("../lang");
11
- const i18nKey = 'lib.prompts.uploadPrompt';
12
11
  async function uploadPrompt(promptOptions = {}) {
13
12
  return (0, promptUtils_1.promptUser)([
14
13
  {
15
14
  name: 'src',
16
- message: (0, lang_1.i18n)(`${i18nKey}.enterSrc`),
15
+ message: (0, lang_1.i18n)(`lib.prompts.uploadPrompt.enterSrc`),
17
16
  when: !promptOptions.src,
18
17
  default: '.',
19
18
  validate: (input) => {
20
19
  if (!input) {
21
- return (0, lang_1.i18n)(`${i18nKey}.errors.srcRequired`);
20
+ return (0, lang_1.i18n)(`lib.prompts.uploadPrompt.errors.srcRequired`);
22
21
  }
23
22
  return true;
24
23
  },
25
24
  },
26
25
  {
27
26
  name: 'dest',
28
- message: (0, lang_1.i18n)(`${i18nKey}.enterDest`),
27
+ message: (0, lang_1.i18n)(`lib.prompts.uploadPrompt.enterDest`),
29
28
  when: !promptOptions.dest,
30
29
  default: path_1.default.basename((0, path_2.getCwd)()),
31
30
  validate: (input) => {
32
31
  if (!input) {
33
- return (0, lang_1.i18n)(`${i18nKey}.errors.destRequired`);
32
+ return (0, lang_1.i18n)(`lib.prompts.uploadPrompt.errors.destRequired`);
34
33
  }
35
34
  return true;
36
35
  },