@hubspot/cli 6.4.0 → 7.0.0-beta.0

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 (205) hide show
  1. package/bin/cli.js +110 -16
  2. package/bin/hs +2 -0
  3. package/bin/hscms +2 -0
  4. package/bin/silenceErrors.d.ts +2 -0
  5. package/bin/silenceErrors.js +12 -0
  6. package/commands/{accounts → account}/clean.js +10 -11
  7. package/commands/{accounts → account}/info.js +10 -16
  8. package/commands/{accounts → account}/list.js +16 -16
  9. package/commands/{accounts → account}/remove.js +12 -15
  10. package/commands/{accounts → account}/rename.js +4 -7
  11. package/commands/{accounts → account}/use.js +8 -14
  12. package/commands/account.js +26 -0
  13. package/commands/auth.js +30 -24
  14. package/commands/cms/getReactModule.js +70 -0
  15. package/commands/cms/lighthouseScore.js +19 -21
  16. package/commands/cms.js +4 -3
  17. package/commands/completion.js +22 -0
  18. package/commands/config/set.js +22 -24
  19. package/commands/config.js +2 -2
  20. package/commands/create.js +6 -3
  21. package/commands/customObject/create.js +19 -15
  22. package/commands/customObject/schema/create.js +15 -16
  23. package/commands/customObject/schema/delete.js +29 -11
  24. package/commands/customObject/schema/fetch-all.js +14 -11
  25. package/commands/customObject/schema/fetch.js +22 -14
  26. package/commands/customObject/schema/list.js +3 -6
  27. package/commands/customObject/schema/update.js +28 -18
  28. package/commands/customObject/schema.js +1 -1
  29. package/commands/customObject.js +3 -4
  30. package/commands/doctor.js +4 -2
  31. package/commands/feedback.js +2 -0
  32. package/commands/fetch.js +13 -13
  33. package/commands/filemanager/fetch.js +6 -7
  34. package/commands/filemanager/upload.js +10 -12
  35. package/commands/filemanager.js +1 -8
  36. package/commands/{functions → function}/deploy.js +13 -13
  37. package/commands/{functions → function}/list.js +7 -9
  38. package/commands/{functions → function}/server.js +5 -8
  39. package/commands/function.js +16 -0
  40. package/commands/hubdb/clear.js +14 -10
  41. package/commands/hubdb/create.js +37 -13
  42. package/commands/hubdb/delete.js +31 -10
  43. package/commands/hubdb/fetch.js +14 -9
  44. package/commands/hubdb.js +2 -3
  45. package/commands/init.js +37 -14
  46. package/commands/lint.js +6 -7
  47. package/commands/list.js +5 -7
  48. package/commands/logs.js +24 -15
  49. package/commands/module/marketplace-validate.js +6 -9
  50. package/commands/module.js +2 -1
  51. package/commands/mv.js +11 -13
  52. package/commands/open.js +11 -10
  53. package/commands/project/add.js +2 -5
  54. package/commands/project/cloneApp.js +28 -32
  55. package/commands/project/create.js +8 -10
  56. package/commands/project/deploy.js +19 -16
  57. package/commands/project/dev.js +17 -18
  58. package/commands/project/download.js +18 -15
  59. package/commands/project/listBuilds.js +36 -32
  60. package/commands/project/logs.js +6 -8
  61. package/commands/project/migrateApp.js +27 -27
  62. package/commands/project/open.js +9 -11
  63. package/commands/project/upload.js +30 -32
  64. package/commands/project/watch.js +17 -24
  65. package/commands/project.js +3 -4
  66. package/commands/remove.js +14 -13
  67. package/commands/sandbox/create.js +12 -15
  68. package/commands/sandbox/delete.js +19 -20
  69. package/commands/sandbox.js +4 -8
  70. package/commands/{secrets → secret}/addSecret.js +25 -12
  71. package/commands/secret/deleteSecret.js +71 -0
  72. package/commands/{secrets → secret}/listSecrets.js +7 -9
  73. package/commands/{secrets → secret}/updateSecret.js +21 -13
  74. package/commands/secret.js +22 -0
  75. package/commands/theme/generate-selectors.js +8 -8
  76. package/commands/theme/marketplace-validate.js +10 -13
  77. package/commands/theme/preview.js +7 -10
  78. package/commands/theme.js +3 -1
  79. package/commands/upload.js +32 -26
  80. package/commands/watch.js +19 -20
  81. package/lang/en.lyaml +200 -126
  82. package/lib/DevServerManager.js +1 -1
  83. package/lib/LocalDevManager.js +4 -4
  84. package/lib/buildAccount.js +5 -11
  85. package/lib/commonOpts.d.ts +15 -6
  86. package/lib/commonOpts.js +53 -39
  87. package/lib/configOptions.d.ts +13 -1
  88. package/lib/configOptions.js +54 -57
  89. package/lib/constants.d.ts +1 -4
  90. package/lib/dependencyManagement.d.ts +4 -1
  91. package/lib/dependencyManagement.js +2 -2
  92. package/lib/developerTestAccounts.d.ts +5 -1
  93. package/lib/developerTestAccounts.js +45 -39
  94. package/lib/doctor/DiagnosticInfoBuilder.js +8 -4
  95. package/lib/doctor/Doctor.js +11 -6
  96. package/lib/generateSelectors.d.ts +19 -0
  97. package/lib/generateSelectors.js +23 -23
  98. package/lib/localDev.js +3 -2
  99. package/lib/marketplaceValidate.d.ts +6 -1
  100. package/lib/marketplaceValidate.js +76 -77
  101. package/lib/oauth.d.ts +2 -1
  102. package/lib/oauth.js +49 -37
  103. package/lib/polling.d.ts +8 -0
  104. package/lib/polling.js +9 -12
  105. package/lib/projects/ProjectLogsManager.d.ts +20 -0
  106. package/lib/projects/ProjectLogsManager.js +105 -0
  107. package/lib/projects/buildAndDeploy.d.ts +16 -0
  108. package/lib/projects/buildAndDeploy.js +342 -0
  109. package/lib/projects/index.d.ts +24 -0
  110. package/lib/projects/index.js +256 -0
  111. package/lib/projects/structure.d.ts +78 -0
  112. package/lib/projects/structure.js +151 -0
  113. package/lib/projects/upload.d.ts +8 -0
  114. package/lib/projects/upload.js +107 -0
  115. package/lib/projects/urls.d.ts +4 -0
  116. package/lib/projects/urls.js +27 -0
  117. package/lib/{projectsWatch.js → projects/watch.js} +3 -3
  118. package/lib/prompts/accountNamePrompt.d.ts +11 -0
  119. package/lib/prompts/accountNamePrompt.js +45 -46
  120. package/lib/prompts/accountsPrompt.d.ts +1 -1
  121. package/lib/prompts/accountsPrompt.js +21 -19
  122. package/lib/prompts/cmsFieldPrompt.d.ts +1 -1
  123. package/lib/prompts/cmsFieldPrompt.js +23 -24
  124. package/lib/prompts/createApiSamplePrompt.d.ts +17 -0
  125. package/lib/prompts/createApiSamplePrompt.js +47 -44
  126. package/lib/prompts/createFunctionPrompt.d.ts +7 -0
  127. package/lib/prompts/createFunctionPrompt.js +17 -20
  128. package/lib/prompts/createModulePrompt.d.ts +8 -0
  129. package/lib/prompts/createModulePrompt.js +29 -17
  130. package/lib/prompts/createProjectPrompt.d.ts +13 -0
  131. package/lib/prompts/createProjectPrompt.js +48 -49
  132. package/lib/prompts/createTemplatePrompt.d.ts +8 -0
  133. package/lib/prompts/createTemplatePrompt.js +15 -17
  134. package/lib/prompts/downloadProjectPrompt.d.ts +8 -0
  135. package/lib/prompts/downloadProjectPrompt.js +25 -23
  136. package/lib/prompts/installPublicAppPrompt.d.ts +1 -1
  137. package/lib/prompts/installPublicAppPrompt.js +21 -19
  138. package/lib/prompts/personalAccessKeyPrompt.d.ts +28 -0
  139. package/lib/prompts/personalAccessKeyPrompt.js +46 -52
  140. package/lib/prompts/previewPrompt.d.ts +14 -0
  141. package/lib/prompts/previewPrompt.js +24 -24
  142. package/lib/prompts/projectAddPrompt.d.ts +9 -0
  143. package/lib/prompts/projectAddPrompt.js +11 -14
  144. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
  145. package/lib/prompts/projectDevTargetAccountPrompt.js +87 -69
  146. package/lib/prompts/projectsLogsPrompt.d.ts +11 -0
  147. package/lib/prompts/projectsLogsPrompt.js +8 -11
  148. package/lib/prompts/promptUtils.d.ts +7 -6
  149. package/lib/prompts/promptUtils.js +21 -8
  150. package/lib/prompts/sandboxesPrompt.d.ts +8 -0
  151. package/lib/prompts/sandboxesPrompt.js +43 -45
  152. package/lib/prompts/secretPrompt.d.ts +12 -0
  153. package/lib/prompts/secretPrompt.js +32 -19
  154. package/lib/prompts/selectHubDBTablePrompt.d.ts +12 -0
  155. package/lib/prompts/selectHubDBTablePrompt.js +69 -0
  156. package/lib/prompts/selectPublicAppPrompt.d.ts +8 -0
  157. package/lib/prompts/selectPublicAppPrompt.js +28 -27
  158. package/lib/prompts/setAsDefaultAccountPrompt.d.ts +1 -1
  159. package/lib/prompts/setAsDefaultAccountPrompt.js +12 -14
  160. package/lib/prompts/uploadPrompt.d.ts +8 -0
  161. package/lib/prompts/uploadPrompt.js +18 -18
  162. package/lib/sandboxSync.js +5 -2
  163. package/lib/sandboxes.js +12 -7
  164. package/lib/ui/index.d.ts +1 -1
  165. package/lib/ui/index.js +1 -1
  166. package/lib/usageTracking.d.ts +21 -2
  167. package/lib/usageTracking.js +53 -81
  168. package/lib/validation.d.ts +11 -1
  169. package/lib/validation.js +98 -91
  170. package/package.json +12 -6
  171. package/types/Projects.d.ts +43 -0
  172. package/types/Projects.js +2 -0
  173. package/types/Prompts.d.ts +25 -0
  174. package/types/Prompts.js +2 -0
  175. package/commands/accounts.js +0 -30
  176. package/commands/cms/reactModules.js +0 -60
  177. package/commands/functions.js +0 -24
  178. package/commands/secrets/deleteSecret.js +0 -46
  179. package/commands/secrets.js +0 -23
  180. package/lib/ProjectLogsManager.js +0 -91
  181. package/lib/projectStructure.js +0 -116
  182. package/lib/projects.d.ts +0 -4
  183. package/lib/projects.js +0 -681
  184. package/lib/projectsWatch.d.ts +0 -1
  185. package/lib/prompts/cleanUploadPrompt.d.ts +0 -1
  186. package/lib/prompts/cleanUploadPrompt.js +0 -20
  187. /package/commands/{accounts → account}/clean.d.ts +0 -0
  188. /package/commands/{accounts → account}/info.d.ts +0 -0
  189. /package/commands/{accounts → account}/list.d.ts +0 -0
  190. /package/commands/{accounts → account}/remove.d.ts +0 -0
  191. /package/commands/{accounts → account}/rename.d.ts +0 -0
  192. /package/commands/{accounts → account}/use.d.ts +0 -0
  193. /package/commands/{accounts.d.ts → account.d.ts} +0 -0
  194. /package/commands/cms/{reactModules.d.ts → getReactModule.d.ts} +0 -0
  195. /package/commands/{functions.d.ts → completion.d.ts} +0 -0
  196. /package/commands/{functions/list.d.ts → function/deploy.d.ts} +0 -0
  197. /package/commands/{functions/server.d.ts → function/list.d.ts} +0 -0
  198. /package/commands/{secrets.d.ts → function/server.d.ts} +0 -0
  199. /package/commands/{functions/deploy.d.ts → function.d.ts} +0 -0
  200. /package/commands/{secrets/deleteSecret.d.ts → secret/addSecret.d.ts} +0 -0
  201. /package/commands/{secrets/listSecrets.d.ts → secret/deleteSecret.d.ts} +0 -0
  202. /package/commands/{secrets/updateSecret.d.ts → secret/listSecrets.d.ts} +0 -0
  203. /package/{lib/ProjectLogsManager.d.ts → commands/secret/updateSecret.d.ts} +0 -0
  204. /package/commands/{secrets/addSecret.d.ts → secret.d.ts} +0 -0
  205. /package/lib/{projectStructure.d.ts → projects/watch.d.ts} +0 -0
@@ -1,23 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const exitCodes_1 = require("../../../lib/enums/exitCodes");
5
+ const promptUtils_1 = require("../../../lib/prompts/promptUtils");
6
+ const customObjects_1 = require("@hubspot/local-dev-lib/api/customObjects");
4
7
  const { logger } = require('@hubspot/local-dev-lib/logger');
5
- const { loadAndValidateOptions } = require('../../../lib/validation');
6
8
  const { trackCommandUsage } = require('../../../lib/usageTracking');
7
- const { getAccountId } = require('../../../lib/commonOpts');
8
9
  const { deleteObjectSchema, } = require('@hubspot/local-dev-lib/api/customObjects');
9
10
  const { i18n } = require('../../../lib/lang');
10
11
  const { logError } = require('../../../lib/errorHandlers');
11
12
  const i18nKey = 'commands.customObject.subcommands.schema.subcommands.delete';
12
- exports.command = 'delete <name>';
13
+ exports.command = 'delete [name]';
13
14
  exports.describe = i18n(`${i18nKey}.describe`);
14
15
  exports.handler = async (options) => {
15
- const { name } = options;
16
- await loadAndValidateOptions(options);
17
- const accountId = getAccountId(options);
18
- trackCommandUsage('custom-object-schema-delete', null, accountId);
16
+ const { name: providedName, force, derivedAccountId } = options;
17
+ trackCommandUsage('custom-object-schema-delete', null, derivedAccountId);
18
+ let name;
19
19
  try {
20
- await deleteObjectSchema(accountId, name);
20
+ const { data: { results }, } = await (0, customObjects_1.fetchObjectSchemas)(derivedAccountId);
21
+ const schemaNames = results?.map(({ name: schemaName }) => schemaName);
22
+ name =
23
+ providedName ||
24
+ (await (0, promptUtils_1.listPrompt)(i18n(`${i18nKey}.selectSchema`), {
25
+ choices: schemaNames,
26
+ }));
27
+ const shouldDelete = force ||
28
+ (await (0, promptUtils_1.confirmPrompt)(i18n(`${i18nKey}.confirmDelete`, { name })));
29
+ if (!shouldDelete) {
30
+ logger.info(i18n(`${i18nKey}.deleteCancelled`, { name }));
31
+ return process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
32
+ }
33
+ await deleteObjectSchema(derivedAccountId, name);
21
34
  logger.success(i18n(`${i18nKey}.success.delete`, {
22
35
  name,
23
36
  }));
@@ -30,11 +43,16 @@ exports.handler = async (options) => {
30
43
  }
31
44
  };
32
45
  exports.builder = yargs => {
33
- yargs.example([
46
+ yargs
47
+ .example([
34
48
  ['$0 schema delete schemaName', i18n(`${i18nKey}.examples.default`)],
35
- ]);
36
- yargs.positional('name', {
49
+ ])
50
+ .positional('name', {
37
51
  describe: i18n(`${i18nKey}.positionals.name.describe`),
38
52
  type: 'string',
53
+ })
54
+ .option('force', {
55
+ describe: i18n(`${i18nKey}.options.force.describe`),
56
+ type: 'boolean',
39
57
  });
40
58
  };
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const promptUtils_1 = require("../../../lib/prompts/promptUtils");
4
5
  const { logger } = require('@hubspot/local-dev-lib/logger');
5
- const { loadAndValidateOptions } = require('../../../lib/validation');
6
6
  const { trackCommandUsage } = require('../../../lib/usageTracking');
7
- const { getAccountId } = require('../../../lib/commonOpts');
8
7
  const { downloadSchemas, getResolvedPath, } = require('@hubspot/local-dev-lib/customObjects');
9
8
  const { i18n } = require('../../../lib/lang');
10
9
  const { logSchemas } = require('../../../lib/schema');
@@ -13,14 +12,14 @@ const i18nKey = 'commands.customObject.subcommands.schema.subcommands.fetchAll';
13
12
  exports.command = 'fetch-all [dest]';
14
13
  exports.describe = i18n(`${i18nKey}.describe`);
15
14
  exports.handler = async (options) => {
16
- await loadAndValidateOptions(options);
17
- const accountId = getAccountId(options);
18
- trackCommandUsage('custom-object-schema-fetch-all', null, accountId);
15
+ const { derivedAccountId, dest: providedDest } = options;
16
+ trackCommandUsage('custom-object-schema-fetch-all', null, derivedAccountId);
19
17
  try {
20
- const schemas = await downloadSchemas(accountId, options.dest);
18
+ const dest = providedDest || (await (0, promptUtils_1.inputPrompt)(i18n(`${i18nKey}.inputDest`)));
19
+ const schemas = await downloadSchemas(derivedAccountId, dest);
21
20
  logSchemas(schemas);
22
21
  logger.success(i18n(`${i18nKey}.success.fetch`, {
23
- path: getResolvedPath(options.dest),
22
+ path: getResolvedPath(dest),
24
23
  }));
25
24
  }
26
25
  catch (e) {
@@ -29,14 +28,18 @@ exports.handler = async (options) => {
29
28
  }
30
29
  };
31
30
  exports.builder = yargs => {
32
- yargs.example([
33
- ['$0 custom-object schema fetch-all', i18n(`${i18nKey}.examples.default`)],
31
+ yargs
32
+ .example([
33
+ [
34
+ '$0 custom-object schema fetch-all',
35
+ i18n(`${i18nKey}.examples.default`),
36
+ ],
34
37
  [
35
38
  '$0 custom-object schema fetch-all my/folder',
36
39
  i18n(`${i18nKey}.examples.specifyPath`),
37
40
  ],
38
- ]);
39
- yargs.positional('dest', {
41
+ ])
42
+ .positional('dest', {
40
43
  describe: i18n(`${i18nKey}.positionals.dest.describe`),
41
44
  type: 'string',
42
45
  });
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const promptUtils_1 = require("../../../lib/prompts/promptUtils");
5
+ const customObjects_1 = require("@hubspot/local-dev-lib/api/customObjects");
4
6
  const path = require('path');
5
7
  const { isConfigFlagEnabled } = require('@hubspot/local-dev-lib/config');
6
8
  const { logger } = require('@hubspot/local-dev-lib/logger');
@@ -8,30 +10,35 @@ const { CONFIG_FLAGS } = require('../../../lib/constants');
8
10
  const { downloadSchema, getResolvedPath, } = require('@hubspot/local-dev-lib/customObjects');
9
11
  const { fetchSchema } = require('@hubspot/local-dev-lib/api/fileTransport');
10
12
  const { getCwd } = require('@hubspot/local-dev-lib/path');
11
- const { loadAndValidateOptions } = require('../../../lib/validation');
12
13
  const { trackCommandUsage } = require('../../../lib/usageTracking');
13
- const { getAccountId } = require('../../../lib/commonOpts');
14
14
  const { i18n } = require('../../../lib/lang');
15
15
  const { logError } = require('../../../lib/errorHandlers');
16
16
  const i18nKey = 'commands.customObject.subcommands.schema.subcommands.fetch';
17
- exports.command = 'fetch <name> [dest]';
17
+ exports.command = 'fetch [name] [dest]';
18
18
  exports.describe = i18n(`${i18nKey}.describe`);
19
19
  exports.handler = async (options) => {
20
- const { name, dest } = options;
21
- await loadAndValidateOptions(options);
22
- const accountId = getAccountId(options);
23
- trackCommandUsage('custom-object-schema-fetch', null, accountId);
20
+ const { name: providedName, dest: providedDest, derivedAccountId } = options;
21
+ trackCommandUsage('custom-object-schema-fetch', null, derivedAccountId);
22
+ let name;
24
23
  try {
24
+ const { data: { results }, } = await (0, customObjects_1.fetchObjectSchemas)(derivedAccountId);
25
+ const schemaNames = results?.map(({ name: schemaName }) => schemaName);
26
+ name =
27
+ providedName ||
28
+ (await (0, promptUtils_1.listPrompt)(i18n(`${i18nKey}.selectSchema`), {
29
+ choices: schemaNames,
30
+ }));
31
+ const dest = providedDest || (await (0, promptUtils_1.inputPrompt)(i18n(`${i18nKey}.inputDest`)));
25
32
  if (isConfigFlagEnabled(CONFIG_FLAGS.USE_CUSTOM_OBJECT_HUBFILE)) {
26
33
  const fullpath = path.resolve(getCwd(), dest);
27
- await fetchSchema(accountId, name, fullpath);
34
+ await fetchSchema(derivedAccountId, name, fullpath);
28
35
  logger.success(i18n(`${i18nKey}.success.save`, {
29
36
  name,
30
37
  path: fullpath,
31
38
  }));
32
39
  }
33
40
  else {
34
- await downloadSchema(accountId, name, dest);
41
+ await downloadSchema(derivedAccountId, name, dest);
35
42
  logger.success(i18n(`${i18nKey}.success.savedToPath`, {
36
43
  path: getResolvedPath(dest, name),
37
44
  }));
@@ -45,7 +52,8 @@ exports.handler = async (options) => {
45
52
  }
46
53
  };
47
54
  exports.builder = yargs => {
48
- yargs.example([
55
+ yargs
56
+ .example([
49
57
  [
50
58
  '$0 custom-object schema fetch schemaName',
51
59
  i18n(`${i18nKey}.examples.default`),
@@ -54,12 +62,12 @@ exports.builder = yargs => {
54
62
  '$0 custom-object schema fetch schemaName my/folder',
55
63
  i18n(`${i18nKey}.examples.specifyPath`),
56
64
  ],
57
- ]);
58
- yargs.positional('name', {
65
+ ])
66
+ .positional('name', {
59
67
  describe: i18n(`${i18nKey}.positionals.name.describe`),
60
68
  type: 'string',
61
- });
62
- yargs.positional('dest', {
69
+ })
70
+ .positional('dest', {
63
71
  describe: i18n(`${i18nKey}.positionals.dest.describe`),
64
72
  type: 'string',
65
73
  });
@@ -3,20 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
4
  const { logger } = require('@hubspot/local-dev-lib/logger');
5
5
  const { logError } = require('../../../lib/errorHandlers/index');
6
- const { loadAndValidateOptions } = require('../../../lib/validation');
7
6
  const { trackCommandUsage } = require('../../../lib/usageTracking');
8
- const { getAccountId } = require('../../../lib/commonOpts');
9
7
  const { listSchemas } = require('../../../lib/schema');
10
8
  const { i18n } = require('../../../lib/lang');
11
9
  const i18nKey = 'commands.customObject.subcommands.schema.subcommands.list';
12
10
  exports.command = 'list';
13
11
  exports.describe = i18n(`${i18nKey}.describe`);
14
12
  exports.handler = async (options) => {
15
- await loadAndValidateOptions(options);
16
- const accountId = getAccountId(options);
17
- trackCommandUsage('custom-object-schema-list', null, accountId);
13
+ const { derivedAccountId } = options;
14
+ trackCommandUsage('custom-object-schema-list', null, derivedAccountId);
18
15
  try {
19
- await listSchemas(accountId);
16
+ await listSchemas(derivedAccountId);
20
17
  }
21
18
  catch (e) {
22
19
  logError(e);
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const customObjects_1 = require("@hubspot/local-dev-lib/api/customObjects");
5
+ const promptUtils_1 = require("../../../lib/prompts/promptUtils");
4
6
  const { logger } = require('@hubspot/local-dev-lib/logger');
5
7
  const { logError } = require('../../../lib/errorHandlers/index');
6
8
  const { getAbsoluteFilePath } = require('@hubspot/local-dev-lib/path');
7
9
  const { ENVIRONMENTS, } = require('@hubspot/local-dev-lib/constants/environments');
8
- const { checkAndConvertToJson, loadAndValidateOptions, } = require('../../../lib/validation');
10
+ const { checkAndConvertToJson } = require('../../../lib/validation');
9
11
  const { trackCommandUsage } = require('../../../lib/usageTracking');
10
- const { addTestingOptions, getAccountId } = require('../../../lib/commonOpts');
12
+ const { addTestingOptions } = require('../../../lib/commonOpts');
11
13
  const { CONFIG_FLAGS } = require('../../../lib/constants');
12
14
  const { getEnv, isConfigFlagEnabled, } = require('@hubspot/local-dev-lib/config');
13
15
  const { updateObjectSchema, } = require('@hubspot/local-dev-lib/api/customObjects');
@@ -16,47 +18,55 @@ const { getHubSpotWebsiteOrigin } = require('@hubspot/local-dev-lib/urls');
16
18
  const { i18n } = require('../../../lib/lang');
17
19
  const i18nKey = 'commands.customObject.subcommands.schema.subcommands.update';
18
20
  const { EXIT_CODES } = require('../../../lib/enums/exitCodes');
19
- exports.command = 'update <name> <definition>';
21
+ exports.command = 'update [name]';
20
22
  exports.describe = i18n(`${i18nKey}.describe`);
21
23
  exports.handler = async (options) => {
22
- const { definition, name } = options;
23
- await loadAndValidateOptions(options);
24
- const accountId = getAccountId(options);
25
- trackCommandUsage('custom-object-schema-update', null, accountId);
26
- const filePath = getAbsoluteFilePath(definition);
24
+ const { path, name: providedName, derivedAccountId } = options;
25
+ trackCommandUsage('custom-object-schema-update', null, derivedAccountId);
26
+ const filePath = getAbsoluteFilePath(path);
27
27
  const schemaJson = checkAndConvertToJson(filePath);
28
28
  if (!schemaJson) {
29
29
  process.exit(EXIT_CODES.ERROR);
30
30
  }
31
+ let name = providedName;
31
32
  try {
33
+ const { data: { results }, } = await (0, customObjects_1.fetchObjectSchemas)(derivedAccountId);
34
+ const schemaNames = results?.map(({ name: schemaName }) => schemaName);
35
+ name =
36
+ providedName ||
37
+ (await (0, promptUtils_1.listPrompt)(i18n(`${i18nKey}.selectSchema`), {
38
+ choices: schemaNames,
39
+ }));
32
40
  if (isConfigFlagEnabled(CONFIG_FLAGS.USE_CUSTOM_OBJECT_HUBFILE)) {
33
- await updateSchemaFromHubFile(accountId, filePath);
41
+ await updateSchemaFromHubFile(derivedAccountId, filePath);
34
42
  logger.success(i18n(`${i18nKey}.success.update`, {
35
- accountId,
43
+ accountId: derivedAccountId,
36
44
  }));
37
45
  }
38
46
  else {
39
- const { data } = await updateObjectSchema(accountId, name, schemaJson);
47
+ const { data } = await updateObjectSchema(derivedAccountId, name, schemaJson);
40
48
  logger.success(i18n(`${i18nKey}.success.viewAtUrl`, {
41
- url: `${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${accountId}/objects/${data.objectTypeId}`,
49
+ url: `${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${derivedAccountId}/objects/${data.objectTypeId}`,
42
50
  }));
43
51
  }
44
52
  }
45
53
  catch (e) {
46
- logError(e, { accountId });
54
+ logError(e, { accountId: derivedAccountId });
47
55
  logger.error(i18n(`${i18nKey}.errors.update`, {
48
- definition,
56
+ definition: path,
49
57
  }));
50
58
  }
51
59
  };
52
60
  exports.builder = yargs => {
53
61
  addTestingOptions(yargs);
54
- yargs.positional('name', {
62
+ yargs
63
+ .positional('name', {
55
64
  describe: i18n(`${i18nKey}.positionals.name.describe`),
56
65
  type: 'string',
57
- });
58
- yargs.positional('definition', {
59
- describe: i18n(`${i18nKey}.positionals.definition.describe`),
66
+ })
67
+ .option('path', {
68
+ describe: i18n(`${i18nKey}.options.path.describe`),
60
69
  type: 'string',
70
+ required: true,
61
71
  });
62
72
  };
@@ -9,7 +9,7 @@ const listCommand = require('./schema/list');
9
9
  const updateSchema = require('./schema/update');
10
10
  const { i18n } = require('../../lib/lang');
11
11
  const i18nKey = 'commands.customObject.subcommands.schema';
12
- exports.command = 'schema';
12
+ exports.command = ['schema', 'schemas'];
13
13
  exports.describe = i18n(`${i18nKey}.describe`);
14
14
  exports.builder = yargs => {
15
15
  yargs
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
- const { addConfigOptions, addAccountOptions } = require('../lib/commonOpts');
4
+ const { addGlobalOptions } = require('../lib/commonOpts');
5
5
  const schemaCommand = require('./customObject/schema');
6
6
  const createCommand = require('./customObject/create');
7
7
  const { i18n } = require('../lib/lang');
8
8
  const { logger } = require('@hubspot/local-dev-lib/logger');
9
9
  const { uiBetaTag, uiLink } = require('../lib/ui');
10
10
  const i18nKey = 'commands.customObject';
11
- exports.command = ['custom-object', 'custom', 'co'];
11
+ exports.command = ['custom-object', 'custom-objects', 'co'];
12
12
  exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
13
13
  const logBetaMessage = () => {
14
14
  uiBetaTag(i18n(`${i18nKey}.betaMessage`));
@@ -16,8 +16,7 @@ const logBetaMessage = () => {
16
16
  logger.log();
17
17
  };
18
18
  exports.builder = yargs => {
19
- addConfigOptions(yargs);
20
- addAccountOptions(yargs);
19
+ addGlobalOptions(yargs);
21
20
  yargs
22
21
  .middleware([logBetaMessage])
23
22
  .command(schemaCommand)
@@ -11,17 +11,18 @@ const Doctor_1 = require("../lib/doctor/Doctor");
11
11
  const exitCodes_1 = require("../lib/enums/exitCodes");
12
12
  const path_1 = __importDefault(require("path"));
13
13
  const path_2 = require("@hubspot/local-dev-lib/path");
14
+ const commonOpts_1 = require("../lib/commonOpts");
14
15
  const { i18n } = require('../lib/lang');
15
16
  const i18nKey = 'commands.doctor';
16
17
  exports.command = 'doctor';
17
18
  exports.describe = i18n(`${i18nKey}.describe`);
18
19
  const handler = async ({ outputDir, }) => {
19
20
  const doctor = new Doctor_1.Doctor();
20
- (0, usageTracking_1.trackCommandUsage)(exports.command, undefined, doctor.accountId);
21
+ (0, usageTracking_1.trackCommandUsage)(exports.command, undefined, doctor.accountId || undefined);
21
22
  const output = await doctor.diagnose();
22
23
  const totalCount = (output?.errorCount || 0) + (output?.warningCount || 0);
23
24
  if (totalCount > 0) {
24
- (0, usageTracking_1.trackCommandMetadataUsage)(exports.command, { success: false, type: totalCount }, doctor.accountId);
25
+ (0, usageTracking_1.trackCommandMetadataUsage)(exports.command, { successful: false, type: totalCount }, doctor.accountId || undefined);
25
26
  }
26
27
  if (!outputDir) {
27
28
  if (output?.diagnosis) {
@@ -56,5 +57,6 @@ const builder = yargs => {
56
57
  describe: i18n(`${i18nKey}.options.outputDir`),
57
58
  type: 'string',
58
59
  });
60
+ (0, commonOpts_1.addGlobalOptions)(yargs);
59
61
  };
60
62
  exports.builder = builder;
@@ -5,6 +5,7 @@ const open = require('open');
5
5
  const { i18n } = require('../lib/lang');
6
6
  const { logger } = require('@hubspot/local-dev-lib/logger');
7
7
  const { confirmPrompt, listPrompt } = require('../lib/prompts/promptUtils');
8
+ const { addGlobalOptions } = require('../lib/commonOpts');
8
9
  const i18nKey = 'commands.project.subcommands.feedback';
9
10
  const FEEDBACK_OPTIONS = {
10
11
  BUG: 'bug',
@@ -47,4 +48,5 @@ exports.builder = yargs => {
47
48
  type: 'boolean',
48
49
  },
49
50
  });
51
+ addGlobalOptions(yargs);
50
52
  };
package/commands/fetch.js CHANGED
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
4
  const { downloadFileOrFolder } = require('@hubspot/local-dev-lib/fileMapper');
5
5
  const { logger } = require('@hubspot/local-dev-lib/logger');
6
- const { addConfigOptions, addAccountOptions, addOverwriteOptions, addModeOptions, addUseEnvironmentOptions, getAccountId, getMode, } = require('../lib/commonOpts');
6
+ const { addConfigOptions, addAccountOptions, addOverwriteOptions, addCmsPublishModeOptions, addUseEnvironmentOptions, getCmsPublishMode, addGlobalOptions, } = require('../lib/commonOpts');
7
7
  const { resolveLocalPath } = require('../lib/filesystem');
8
- const { validateMode, loadAndValidateOptions } = require('../lib/validation');
8
+ const { validateCmsPublishMode } = require('../lib/validation');
9
9
  const { trackCommandUsage } = require('../lib/usageTracking');
10
10
  const { i18n } = require('../lib/lang');
11
11
  const i18nKey = 'commands.fetch';
@@ -15,20 +15,19 @@ exports.command = 'fetch <src> [dest]';
15
15
  exports.describe = i18n(`${i18nKey}.describe`);
16
16
  exports.handler = async (options) => {
17
17
  const { src, dest } = options;
18
- await loadAndValidateOptions(options);
19
- if (!validateMode(options)) {
18
+ if (!validateCmsPublishMode(options)) {
20
19
  process.exit(EXIT_CODES.ERROR);
21
20
  }
22
21
  if (typeof src !== 'string') {
23
22
  logger.error(i18n(`${i18nKey}.errors.sourceRequired`));
24
23
  process.exit(EXIT_CODES.ERROR);
25
24
  }
26
- const accountId = getAccountId(options);
27
- const mode = getMode(options);
28
- trackCommandUsage('fetch', { mode }, accountId);
25
+ const { derivedAccountId } = options;
26
+ const cmsPublishMode = getCmsPublishMode(options);
27
+ trackCommandUsage('fetch', { mode: cmsPublishMode }, derivedAccountId);
29
28
  try {
30
29
  // Fetch and write file/folder.
31
- await downloadFileOrFolder(accountId, src, resolveLocalPath(dest), mode, options);
30
+ await downloadFileOrFolder(derivedAccountId, src, resolveLocalPath(dest), cmsPublishMode, options);
32
31
  }
33
32
  catch (err) {
34
33
  logError(err);
@@ -36,11 +35,6 @@ exports.handler = async (options) => {
36
35
  }
37
36
  };
38
37
  exports.builder = yargs => {
39
- addConfigOptions(yargs);
40
- addAccountOptions(yargs);
41
- addOverwriteOptions(yargs);
42
- addModeOptions(yargs, { read: true });
43
- addUseEnvironmentOptions(yargs);
44
38
  yargs.positional('src', {
45
39
  describe: i18n(`${i18nKey}.positionals.src.describe`),
46
40
  type: 'string',
@@ -63,5 +57,11 @@ exports.builder = yargs => {
63
57
  describe: i18n(`${i18nKey}.options.assetVersion.describe`),
64
58
  },
65
59
  });
60
+ addConfigOptions(yargs);
61
+ addAccountOptions(yargs);
62
+ addOverwriteOptions(yargs);
63
+ addCmsPublishModeOptions(yargs, { read: true });
64
+ addUseEnvironmentOptions(yargs);
65
+ addGlobalOptions(yargs);
66
66
  return yargs;
67
67
  };
@@ -4,8 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  const { downloadFileOrFolder } = require('@hubspot/local-dev-lib/fileManager');
5
5
  const { logger } = require('@hubspot/local-dev-lib/logger');
6
6
  const { resolveLocalPath } = require('../../lib/filesystem');
7
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
8
- const { loadAndValidateOptions } = require('../../lib/validation');
7
+ const { addConfigOptions, addAccountOptions, addOverwriteOptions, addGlobalOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
9
8
  const { trackCommandUsage } = require('../../lib/usageTracking');
10
9
  const { i18n } = require('../../lib/lang');
11
10
  const i18nKey = 'commands.filemanager.subcommands.fetch';
@@ -14,18 +13,16 @@ const { logError } = require('../../lib/errorHandlers/index');
14
13
  exports.command = 'fetch <src> [dest]';
15
14
  exports.describe = i18n(`${i18nKey}.describe`);
16
15
  exports.handler = async (options) => {
17
- const { src, includeArchived } = options;
18
- await loadAndValidateOptions(options);
16
+ const { src, includeArchived, derivedAccountId, overwrite } = options;
19
17
  if (typeof src !== 'string') {
20
18
  logger.error(i18n(`${i18nKey}.errors.sourceRequired`));
21
19
  process.exit(EXIT_CODES.ERROR);
22
20
  }
23
21
  const dest = resolveLocalPath(options.dest);
24
- const accountId = getAccountId(options);
25
- trackCommandUsage('filemanager-fetch', null, accountId);
22
+ trackCommandUsage('filemanager-fetch', null, derivedAccountId);
26
23
  try {
27
24
  // Fetch and write file/folder.
28
- await downloadFileOrFolder(accountId, src, dest, false, includeArchived || false);
25
+ await downloadFileOrFolder(derivedAccountId, src, dest, overwrite, includeArchived || false);
29
26
  }
30
27
  catch (err) {
31
28
  logError(err);
@@ -33,8 +30,10 @@ exports.handler = async (options) => {
33
30
  }
34
31
  };
35
32
  exports.builder = yargs => {
33
+ addGlobalOptions(yargs);
36
34
  addConfigOptions(yargs);
37
35
  addAccountOptions(yargs);
36
+ addOverwriteOptions(yargs);
38
37
  addUseEnvironmentOptions(yargs);
39
38
  yargs.positional('src', {
40
39
  describe: i18n(`${i18nKey}.positionals.src.describe`),
@@ -10,8 +10,7 @@ const { logger } = require('@hubspot/local-dev-lib/logger');
10
10
  const { validateSrcAndDestPaths, } = require('@hubspot/local-dev-lib/cms/modules');
11
11
  const { shouldIgnoreFile } = require('@hubspot/local-dev-lib/ignoreRules');
12
12
  const { ApiErrorContext, logError } = require('../../lib/errorHandlers/index');
13
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, getAccountId, } = require('../../lib/commonOpts');
14
- const { loadAndValidateOptions } = require('../../lib/validation');
13
+ const { addConfigOptions, addGlobalOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
15
14
  const { trackCommandUsage } = require('../../lib/usageTracking');
16
15
  const { i18n } = require('../../lib/lang');
17
16
  const i18nKey = 'commands.filemanager.subcommands.upload';
@@ -19,9 +18,7 @@ const { EXIT_CODES } = require('../../lib/enums/exitCodes');
19
18
  exports.command = 'upload <src> <dest>';
20
19
  exports.describe = i18n(`${i18nKey}.describe`);
21
20
  exports.handler = async (options) => {
22
- const { src, dest } = options;
23
- await loadAndValidateOptions(options);
24
- const accountId = getAccountId(options);
21
+ const { src, dest, derivedAccountId } = options;
25
22
  const absoluteSrcPath = path.resolve(getCwd(), src);
26
23
  let stats;
27
24
  try {
@@ -44,7 +41,7 @@ exports.handler = async (options) => {
44
41
  return;
45
42
  }
46
43
  const normalizedDest = convertToUnixPath(dest);
47
- trackCommandUsage('filemanager-upload', { type: stats.isFile() ? 'file' : 'folder' }, accountId);
44
+ trackCommandUsage('filemanager-upload', { type: stats.isFile() ? 'file' : 'folder' }, derivedAccountId);
48
45
  const srcDestIssues = await validateSrcAndDestPaths({ isLocal: true, path: src }, { isHubSpot: true, path: dest });
49
46
  if (srcDestIssues.length) {
50
47
  srcDestIssues.forEach(({ message }) => logger.error(message));
@@ -57,10 +54,10 @@ exports.handler = async (options) => {
57
54
  }));
58
55
  return;
59
56
  }
60
- uploadFile(accountId, absoluteSrcPath, normalizedDest)
57
+ uploadFile(derivedAccountId, absoluteSrcPath, normalizedDest)
61
58
  .then(() => {
62
59
  logger.success(i18n(`${i18nKey}.success.upload`, {
63
- accountId,
60
+ accountId: derivedAccountId,
64
61
  dest: normalizedDest,
65
62
  src,
66
63
  }));
@@ -71,7 +68,7 @@ exports.handler = async (options) => {
71
68
  src,
72
69
  }));
73
70
  logError(error, new ApiErrorContext({
74
- accountId,
71
+ accountId: derivedAccountId,
75
72
  request: normalizedDest,
76
73
  payload: src,
77
74
  }));
@@ -79,11 +76,11 @@ exports.handler = async (options) => {
79
76
  }
80
77
  else {
81
78
  logger.log(i18n(`${i18nKey}.logs.uploading`, {
82
- accountId,
79
+ accountId: derivedAccountId,
83
80
  dest,
84
81
  src,
85
82
  }));
86
- uploadFolder(accountId, absoluteSrcPath, dest)
83
+ uploadFolder(derivedAccountId, absoluteSrcPath, dest)
87
84
  .then(() => {
88
85
  logger.success(i18n(`${i18nKey}.success.uploadComplete`, {
89
86
  dest,
@@ -92,12 +89,13 @@ exports.handler = async (options) => {
92
89
  .catch(error => {
93
90
  logger.error(i18n(`${i18nKey}.errors.uploadingFailed`));
94
91
  logError(error, {
95
- accountId,
92
+ accountId: derivedAccountId,
96
93
  });
97
94
  });
98
95
  }
99
96
  };
100
97
  exports.builder = yargs => {
98
+ addGlobalOptions(yargs);
101
99
  addConfigOptions(yargs);
102
100
  addAccountOptions(yargs);
103
101
  addUseEnvironmentOptions(yargs);
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
- const { addConfigOptions, addAccountOptions, addOverwriteOptions, } = require('../lib/commonOpts');
5
4
  const upload = require('./filemanager/upload');
6
5
  const fetch = require('./filemanager/fetch');
7
6
  const { i18n } = require('../lib/lang');
@@ -9,12 +8,6 @@ const i18nKey = 'commands.filemanager';
9
8
  exports.command = 'filemanager';
10
9
  exports.describe = i18n(`${i18nKey}.describe`);
11
10
  exports.builder = yargs => {
12
- addOverwriteOptions(yargs);
13
- addConfigOptions(yargs);
14
- addAccountOptions(yargs);
15
- yargs
16
- .command(upload)
17
- .command(fetch)
18
- .demandCommand(1, '');
11
+ yargs.command(upload).command(fetch).demandCommand(1, '');
19
12
  return yargs;
20
13
  };