@hubspot/cli 8.2.0-experimental.2 → 8.2.1-experimental.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 (147) hide show
  1. package/commands/account/clean.js +1 -1
  2. package/commands/account/list.js +1 -1
  3. package/commands/account/remove.js +1 -1
  4. package/commands/account/rename.js +1 -1
  5. package/commands/account/use.js +1 -1
  6. package/commands/api.d.ts +4 -1
  7. package/commands/api.js +11 -14
  8. package/commands/config/set.js +24 -5
  9. package/commands/customObject/createSchema.js +2 -3
  10. package/commands/customObject/updateSchema.js +2 -3
  11. package/commands/getStarted.js +1 -0
  12. package/commands/hubdb/list.d.ts +1 -1
  13. package/commands/hubdb/list.js +7 -8
  14. package/commands/mcp/setup.d.ts +2 -0
  15. package/commands/mcp/setup.js +29 -1
  16. package/commands/project/appInstallStatus.d.ts +2 -1
  17. package/commands/project/appInstallStatus.js +21 -19
  18. package/commands/project/create.js +0 -1
  19. package/commands/project/deploy.d.ts +2 -1
  20. package/commands/project/deploy.js +31 -14
  21. package/commands/project/dev/index.js +18 -64
  22. package/commands/project/dev/unifiedFlow.js +3 -1
  23. package/commands/project/info.d.ts +2 -1
  24. package/commands/project/info.js +8 -6
  25. package/commands/project/installApp.d.ts +2 -1
  26. package/commands/project/installApp.js +26 -27
  27. package/commands/project/list.js +1 -1
  28. package/commands/project/listBuilds.d.ts +1 -1
  29. package/commands/project/listBuilds.js +8 -6
  30. package/commands/project/logs.js +2 -4
  31. package/commands/project/profile/add.d.ts +2 -1
  32. package/commands/project/profile/add.js +22 -1
  33. package/commands/project/profile/delete.d.ts +1 -1
  34. package/commands/project/release/create.d.ts +2 -1
  35. package/commands/project/release/create.js +68 -69
  36. package/commands/project/release/info.d.ts +2 -1
  37. package/commands/project/release/info.js +7 -6
  38. package/commands/project/release/list.d.ts +2 -1
  39. package/commands/project/release/list.js +15 -7
  40. package/commands/project/upload.d.ts +4 -1
  41. package/commands/project/upload.js +48 -21
  42. package/commands/project/validate.d.ts +1 -1
  43. package/commands/project/watch.js +3 -2
  44. package/commands/project.js +2 -2
  45. package/commands/sandbox/delete.js +2 -3
  46. package/commands/testAccount/create.d.ts +2 -1
  47. package/commands/testAccount/create.js +7 -7
  48. package/commands/testAccount/importData.d.ts +1 -1
  49. package/lang/en.d.ts +61 -33
  50. package/lang/en.js +77 -48
  51. package/lib/app/urls.js +2 -3
  52. package/lib/commonOpts.js +6 -1
  53. package/lib/configOptions.d.ts +10 -10
  54. package/lib/configOptions.js +10 -11
  55. package/lib/constants.d.ts +2 -0
  56. package/lib/constants.js +2 -0
  57. package/lib/dependencyManagement.js +7 -7
  58. package/lib/getStartedV2Actions.js +2 -1
  59. package/lib/importData.js +3 -4
  60. package/lib/jsonOutput.d.ts +109 -0
  61. package/lib/jsonOutput.js +94 -0
  62. package/lib/links.js +6 -5
  63. package/lib/mcp/clients.d.ts +1 -1
  64. package/lib/mcp/clients.js +8 -1
  65. package/lib/mcp/setup.d.ts +9 -4
  66. package/lib/mcp/setup.js +115 -35
  67. package/lib/npm/npmCli.d.ts +1 -0
  68. package/lib/npm/npmCli.js +13 -0
  69. package/lib/projects/builds.d.ts +2 -0
  70. package/lib/projects/builds.js +22 -0
  71. package/lib/projects/create/v2.js +1 -0
  72. package/lib/projects/installApp.d.ts +1 -1
  73. package/lib/projects/installApp.js +8 -3
  74. package/lib/projects/localDev/DevSessionManager.d.ts +2 -2
  75. package/lib/projects/localDev/DevSessionManager.js +4 -30
  76. package/lib/projects/localDev/LocalDevProcess.js +7 -5
  77. package/lib/projects/localDev/helpers/account.d.ts +0 -7
  78. package/lib/projects/localDev/helpers/account.js +1 -80
  79. package/lib/projects/localDev/helpers/project.js +3 -2
  80. package/lib/projects/release.d.ts +4 -0
  81. package/lib/projects/release.js +90 -0
  82. package/lib/projects/ui.d.ts +1 -0
  83. package/lib/projects/ui.js +14 -0
  84. package/lib/projects/upload.d.ts +10 -2
  85. package/lib/projects/upload.js +14 -7
  86. package/lib/projects/urls.d.ts +0 -1
  87. package/lib/projects/urls.js +6 -13
  88. package/lib/yargs/makeWrappedYargsHandler.d.ts +5 -1
  89. package/lib/yargs/makeWrappedYargsHandler.js +123 -65
  90. package/mcp-server/Tool.d.ts +8 -3
  91. package/mcp-server/Tool.js +58 -32
  92. package/mcp-server/server.js +10 -6
  93. package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +2 -2
  94. package/mcp-server/tools/cms/HsCreateFunctionTool.js +10 -17
  95. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
  96. package/mcp-server/tools/cms/HsCreateModuleTool.js +12 -18
  97. package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +2 -2
  98. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -10
  99. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +2 -2
  100. package/mcp-server/tools/cms/HsFunctionLogsTool.js +9 -9
  101. package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +2 -2
  102. package/mcp-server/tools/cms/HsListFunctionsTool.js +7 -7
  103. package/mcp-server/tools/cms/HsListTool.d.ts +2 -2
  104. package/mcp-server/tools/cms/HsListTool.js +6 -10
  105. package/mcp-server/tools/index.js +2 -0
  106. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +3 -2
  107. package/mcp-server/tools/project/AddFeatureToProjectTool.js +8 -9
  108. package/mcp-server/tools/project/AuthAccountTool.d.ts +18 -0
  109. package/mcp-server/tools/project/AuthAccountTool.js +78 -0
  110. package/mcp-server/tools/project/CreateProjectTool.d.ts +3 -2
  111. package/mcp-server/tools/project/CreateProjectTool.js +13 -12
  112. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +2 -2
  113. package/mcp-server/tools/project/CreateTestAccountTool.js +14 -15
  114. package/mcp-server/tools/project/DeployProjectTool.d.ts +2 -2
  115. package/mcp-server/tools/project/DeployProjectTool.js +10 -10
  116. package/mcp-server/tools/project/DocFetchTool.js +1 -1
  117. package/mcp-server/tools/project/DocsSearchTool.js +8 -7
  118. package/mcp-server/tools/project/FindProjectsTool.js +1 -1
  119. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +2 -1
  120. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +9 -8
  121. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +2 -1
  122. package/mcp-server/tools/project/GetApplicationInfoTool.js +12 -9
  123. package/mcp-server/tools/project/GetBuildLogsTool.js +11 -7
  124. package/mcp-server/tools/project/GetBuildStatusTool.js +11 -7
  125. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +2 -1
  126. package/mcp-server/tools/project/GetConfigValuesTool.js +9 -7
  127. package/mcp-server/tools/project/GuidedWalkthroughTool.js +1 -1
  128. package/mcp-server/tools/project/UploadProjectTools.d.ts +2 -2
  129. package/mcp-server/tools/project/UploadProjectTools.js +9 -8
  130. package/mcp-server/tools/project/ValidateProjectTool.d.ts +2 -2
  131. package/mcp-server/tools/project/ValidateProjectTool.js +5 -4
  132. package/mcp-server/tools/project/constants.d.ts +1 -0
  133. package/mcp-server/tools/project/constants.js +2 -1
  134. package/mcp-server/utils/command.d.ts +25 -2
  135. package/mcp-server/utils/command.js +67 -17
  136. package/mcp-server/utils/config.js +5 -0
  137. package/mcp-server/utils/logger.d.ts +3 -0
  138. package/mcp-server/utils/logger.js +30 -0
  139. package/mcp-server/utils/toolUsageTracking.js +18 -3
  140. package/package.json +11 -9
  141. package/types/Yargs.d.ts +3 -1
  142. package/commands/project/dev/deprecatedFlow.d.ts +0 -11
  143. package/commands/project/dev/deprecatedFlow.js +0 -180
  144. package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +0 -43
  145. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +0 -128
  146. package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +0 -64
  147. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +0 -394
@@ -12,6 +12,7 @@ import { makeWrappedYargsHandler } from '../../../lib/yargs/makeWrappedYargsHand
12
12
  import { isPromptExitError } from '../../../lib/errors/PromptExitError.js';
13
13
  import { mapToUserFacingType } from '@hubspot/project-parsing-lib/transform';
14
14
  import { AUTO_GENERATED_COMPONENT_TYPES } from '@hubspot/project-parsing-lib/constants';
15
+ import { ReleaseSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput.js';
15
16
  const command = 'info';
16
17
  // const describe = commands.project.release.info.describe;
17
18
  const describe = undefined;
@@ -36,7 +37,7 @@ async function selectReleasePrompt(accountId, projectName) {
36
37
  });
37
38
  }
38
39
  async function handler(args) {
39
- const { derivedAccountId, tag: rawTag, json: formatOutputAsJson, exit, } = args;
40
+ const { derivedAccountId, tag: rawTag, json: formatOutputAsJson, exit, addJsonOutput, } = args;
40
41
  const { projectConfig, projectDir } = await getProjectConfig();
41
42
  try {
42
43
  validateProjectConfig(projectConfig, projectDir);
@@ -69,10 +70,8 @@ async function handler(args) {
69
70
  }
70
71
  try {
71
72
  const { data: release } = await getReleaseInfo(derivedAccountId, projectName, tag);
72
- if (formatOutputAsJson) {
73
- uiLogger.json(release);
74
- }
75
- else {
73
+ addJsonOutput(mapReleaseToJsonOutput(release));
74
+ if (!formatOutputAsJson) {
76
75
  uiLogger.log(commands.project.release.info.releaseDetails(release.releaseTag, projectName));
77
76
  renderTable(['Release', 'Build', 'Created'], [
78
77
  [
@@ -142,6 +141,8 @@ const projectReleaseInfoCommand = {
142
141
  command,
143
142
  describe,
144
143
  builder,
145
- handler: makeWrappedYargsHandler('project-release-info', handler),
144
+ handler: makeWrappedYargsHandler('project-release-info', handler, {
145
+ jsonOutputSchema: ReleaseSchema,
146
+ }),
146
147
  };
147
148
  export default projectReleaseInfoCommand;
@@ -1,5 +1,6 @@
1
1
  import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../../types/Yargs.js';
2
- export type ProjectReleaseListArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs & {
2
+ import { ReleaseListJsonOutput } from '../../../lib/jsonOutput.js';
3
+ export type ProjectReleaseListArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs<ReleaseListJsonOutput> & {
3
4
  limit?: number;
4
5
  };
5
6
  declare const projectReleaseListCommand: YargsCommandModule<unknown, ProjectReleaseListArgs>;
@@ -10,6 +10,7 @@ import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
10
10
  import { commands } from '../../../lang/en.js';
11
11
  import { renderTable } from '../../../ui/render.js';
12
12
  import { makeWrappedYargsHandler } from '../../../lib/yargs/makeWrappedYargsHandler.js';
13
+ import { ReleaseListSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput.js';
13
14
  const command = 'list';
14
15
  // const describe = commands.project.release.list.describe;
15
16
  const describe = undefined;
@@ -17,7 +18,6 @@ const describe = undefined;
17
18
  const verboseDescribe = undefined;
18
19
  async function fetchAndDisplayReleases(accountId, projectName, options) {
19
20
  const { data: { results, paging }, } = await listReleases(accountId, projectName, options);
20
- uiLogger.log(commands.project.release.list.showingReleases(results.length, projectName));
21
21
  if (results.length === 0) {
22
22
  uiLogger.log(commands.project.release.list.noReleases);
23
23
  }
@@ -28,6 +28,7 @@ async function fetchAndDisplayReleases(accountId, projectName, options) {
28
28
  new Date(release.createdAt).toLocaleString(),
29
29
  ]);
30
30
  renderTable(['Release', 'Build', 'Created'], rows);
31
+ uiLogger.log(commands.project.release.list.showingReleases(results.length, projectName));
31
32
  }
32
33
  if (paging?.next?.after) {
33
34
  await promptUser({
@@ -41,14 +42,14 @@ async function fetchAndDisplayReleases(accountId, projectName, options) {
41
42
  }
42
43
  }
43
44
  async function handler(args) {
44
- const { derivedAccountId, limit, json: formatOutputAsJson } = args;
45
+ const { derivedAccountId, limit, json: formatOutputAsJson, exit, addJsonOutput, } = args;
45
46
  const { projectConfig, projectDir } = await getProjectConfig();
46
47
  try {
47
48
  validateProjectConfig(projectConfig, projectDir);
48
49
  }
49
50
  catch (error) {
50
51
  logError(error);
51
- process.exit(EXIT_CODES.ERROR);
52
+ return exit(EXIT_CODES.ERROR);
52
53
  }
53
54
  const projectName = projectConfig.name;
54
55
  try {
@@ -56,7 +57,12 @@ async function handler(args) {
56
57
  const { data } = await listReleases(derivedAccountId, projectName, {
57
58
  limit,
58
59
  });
59
- uiLogger.json(data);
60
+ addJsonOutput({
61
+ results: data.results.map(mapReleaseToJsonOutput),
62
+ paging: data.paging
63
+ ? { next: { after: data.paging.next.after } }
64
+ : undefined,
65
+ });
60
66
  }
61
67
  else {
62
68
  await fetchAndDisplayReleases(derivedAccountId, projectName, { limit });
@@ -75,9 +81,9 @@ async function handler(args) {
75
81
  request: 'project release list',
76
82
  }));
77
83
  }
78
- process.exit(EXIT_CODES.ERROR);
84
+ return exit(EXIT_CODES.ERROR);
79
85
  }
80
- process.exit(EXIT_CODES.SUCCESS);
86
+ return exit(EXIT_CODES.SUCCESS);
81
87
  }
82
88
  function projectReleaseListBuilder(yargs) {
83
89
  yargs.options({
@@ -106,6 +112,8 @@ const projectReleaseListCommand = {
106
112
  command,
107
113
  describe,
108
114
  builder,
109
- handler: makeWrappedYargsHandler('project-release-list', handler),
115
+ handler: makeWrappedYargsHandler('project-release-list', handler, {
116
+ jsonOutputSchema: ReleaseListSchema,
117
+ }),
110
118
  };
111
119
  export default projectReleaseListCommand;
@@ -1,10 +1,13 @@
1
1
  import { CommonArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
2
- export type ProjectUploadArgs = CommonArgs & JSONOutputArgs & {
2
+ import { UploadJsonOutput } from '../../lib/jsonOutput.js';
3
+ export type ProjectUploadArgs = CommonArgs & JSONOutputArgs<UploadJsonOutput> & {
4
+ force: boolean;
3
5
  forceCreate: boolean;
4
6
  message: string;
5
7
  m: string;
6
8
  skipValidation: boolean;
7
9
  skipNpmAudit: boolean;
10
+ skipAutoDeploy: boolean;
8
11
  profile?: string;
9
12
  preview: boolean;
10
13
  target?: number;
@@ -2,7 +2,7 @@ import chalk from 'chalk';
2
2
  import { uiLogger } from '../../lib/ui/logger.js';
3
3
  import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
4
4
  import { isSpecifiedError } from '@hubspot/local-dev-lib/errors/index';
5
- import { isLegacyProject } from '@hubspot/project-parsing-lib/projects';
5
+ import { isLegacyProject, meetsMinimumPlatformVersion, } from '@hubspot/project-parsing-lib/projects';
6
6
  import { getProjectConfig, validateProjectConfig, } from '../../lib/projects/config.js';
7
7
  import { logFeedbackMessage } from '../../lib/projects/ui.js';
8
8
  import { handleProjectUpload } from '../../lib/projects/upload.js';
@@ -14,9 +14,12 @@ import { PROJECT_ERROR_TYPES } from '../../lib/constants.js';
14
14
  import { logError, ApiErrorContext } from '../../lib/errorHandlers/index.js';
15
15
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
16
16
  import { makeWrappedYargsHandler } from '../../lib/yargs/makeWrappedYargsHandler.js';
17
+ import { UploadSchema, } from '../../lib/jsonOutput.js';
17
18
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
18
19
  import { projectProfilePrompt } from '../../lib/prompts/projectProfilePrompt.js';
20
+ import { uiDeprecatedTag } from '../../lib/ui/index.js';
19
21
  import { showMcpPromotionNudge } from '../../lib/mcp/promotion.js';
22
+ import { PLATFORM_VERSIONS } from '@hubspot/project-parsing-lib/constants';
20
23
  const command = 'upload';
21
24
  const describe = commands.project.upload.describe;
22
25
  async function handlePreview(accountId, projectId, buildId, targetPortalId) {
@@ -34,8 +37,10 @@ async function handlePreview(accountId, projectId, buildId, targetPortalId) {
34
37
  };
35
38
  }
36
39
  async function handler(args) {
37
- const { forceCreate, message, derivedAccountId, skipValidation, skipNpmAudit, formatOutputAsJson, profile: profileOption, useEnv: useEnvOption, preview, target: targetPortalId, exit, addUsageMetadata, } = args;
38
- const jsonOutput = {};
40
+ const { force = false, forceCreate = false, message, derivedAccountId, skipValidation, skipNpmAudit, skipAutoDeploy, formatOutputAsJson, profile: profileOption, useEnv: useEnvOption, preview, target: targetPortalId, exit, addUsageMetadata, addJsonOutput, } = args;
41
+ if (forceCreate) {
42
+ uiDeprecatedTag(commands.project.upload.logs.forceCreateDeprecated);
43
+ }
39
44
  const { projectConfig, projectDir } = await getProjectConfig();
40
45
  try {
41
46
  validateProjectConfig(projectConfig, projectDir);
@@ -72,21 +77,26 @@ async function handler(args) {
72
77
  assetType: projectConfig.platformVersion,
73
78
  });
74
79
  try {
75
- const { result, uploadError, projectId } = await handleProjectUpload({
80
+ const { result, uploadError, projectId, userDeclined } = await handleProjectUpload({
76
81
  accountId: targetAccountId,
77
82
  projectConfig,
78
83
  projectDir,
79
- callbackFunc: preview
84
+ callbackFunc: preview || skipAutoDeploy
80
85
  ? (...args) => pollProjectBuildAndDeploy(...args, { skipDeploy: true })
81
86
  : pollProjectBuildAndDeploy,
82
87
  uploadMessage: message,
83
- forceCreate,
88
+ forceCreate: forceCreate || force,
84
89
  isUploadCommand: true,
85
90
  sendIR: !isLegacyProject(projectConfig.platformVersion),
86
91
  skipValidation,
87
92
  skipNpmAudit,
93
+ skipAutoDeploy,
88
94
  profile: profileName,
95
+ force,
89
96
  });
97
+ if (userDeclined) {
98
+ return exit(EXIT_CODES.SUCCESS);
99
+ }
90
100
  if (uploadError) {
91
101
  if (isSpecifiedError(uploadError, {
92
102
  subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
@@ -105,30 +115,36 @@ async function handler(args) {
105
115
  }
106
116
  if (result &&
107
117
  result.succeeded &&
108
- (!result.buildResult.isAutoDeployEnabled || preview)) {
118
+ (!result.buildResult.isAutoDeployEnabled || preview || skipAutoDeploy)) {
109
119
  uiLogger.log(chalk.bold(commands.project.upload.logs.buildSucceeded(result.buildId)));
110
120
  if (!preview) {
111
- uiLogger.log(commands.project.upload.logs.autoDeployDisabled(`hs project deploy --build=${result.buildId}`));
121
+ if (meetsMinimumPlatformVersion(result.buildResult.platformVersion, PLATFORM_VERSIONS.v2026_09_BETA)) {
122
+ const releaseCommand = `hs project release create --build=${result.buildId}`;
123
+ uiLogger.log(commands.project.upload.logs.releaseManagementRequired(releaseCommand));
124
+ }
125
+ else {
126
+ const deployCommand = `hs project deploy --build=${result.buildId}`;
127
+ uiLogger.log(skipAutoDeploy
128
+ ? commands.project.upload.logs.autoDeploySkipped(deployCommand)
129
+ : commands.project.upload.logs.autoDeployDisabled(deployCommand));
130
+ }
112
131
  logFeedbackMessage(result.buildId);
113
132
  }
114
133
  await displayWarnLogs(targetAccountId, projectConfig.name, result.buildId);
115
134
  }
116
135
  if (result && result.succeeded && preview && targetPortalId) {
117
136
  const previewJson = await handlePreview(targetAccountId, projectId, result.buildId, targetPortalId);
118
- if (previewJson && formatOutputAsJson) {
119
- jsonOutput.preview = previewJson;
137
+ if (previewJson) {
138
+ addJsonOutput({ preview: previewJson });
120
139
  }
121
140
  }
122
- if (result && result.succeeded && formatOutputAsJson) {
123
- jsonOutput.buildId = result.buildId;
141
+ if (result) {
142
+ addJsonOutput({ buildId: result.buildId });
124
143
  if (result.deployResult) {
125
- jsonOutput.deployId = result.deployResult.deployId;
144
+ addJsonOutput({ deployId: result.deployResult.deployId });
126
145
  }
127
146
  }
128
147
  if (result && !result.succeeded) {
129
- if (formatOutputAsJson) {
130
- uiLogger.json(jsonOutput);
131
- }
132
148
  return exit(EXIT_CODES.ERROR);
133
149
  }
134
150
  if (!result && !uploadError) {
@@ -142,20 +158,24 @@ async function handler(args) {
142
158
  }));
143
159
  return exit(EXIT_CODES.ERROR);
144
160
  }
145
- if (formatOutputAsJson) {
146
- uiLogger.json(jsonOutput);
147
- }
148
- else {
161
+ if (!formatOutputAsJson) {
149
162
  await showMcpPromotionNudge(args._.join(' '));
150
163
  }
151
164
  return exit(EXIT_CODES.SUCCESS);
152
165
  }
153
166
  function projectUploadBuilder(yargs) {
154
167
  yargs.options({
168
+ force: {
169
+ alias: 'f',
170
+ describe: commands.project.upload.options.force.describe,
171
+ type: 'boolean',
172
+ default: false,
173
+ },
155
174
  'force-create': {
156
175
  describe: commands.project.upload.options.forceCreate.describe,
157
176
  type: 'boolean',
158
177
  default: false,
178
+ hidden: true,
159
179
  },
160
180
  message: {
161
181
  alias: 'm',
@@ -173,6 +193,11 @@ function projectUploadBuilder(yargs) {
173
193
  type: 'boolean',
174
194
  default: false,
175
195
  },
196
+ 'skip-auto-deploy': {
197
+ describe: commands.project.upload.options.skipAutoDeploy.describe,
198
+ type: 'boolean',
199
+ default: false,
200
+ },
176
201
  profile: {
177
202
  type: 'string',
178
203
  alias: 'p',
@@ -225,7 +250,9 @@ const builder = makeYargsBuilder(projectUploadBuilder, command, describe, {
225
250
  const projectUploadCommand = {
226
251
  command,
227
252
  describe,
228
- handler: makeWrappedYargsHandler('project-upload', handler),
253
+ handler: makeWrappedYargsHandler('project-upload', handler, {
254
+ jsonOutputSchema: UploadSchema,
255
+ }),
229
256
  builder,
230
257
  };
231
258
  export default projectUploadCommand;
@@ -1,5 +1,5 @@
1
1
  import { CommonArgs, YargsCommandModule } from '../../types/Yargs.js';
2
- type ProjectValidateArgs = CommonArgs & {
2
+ export type ProjectValidateArgs = CommonArgs & {
3
3
  profile?: string;
4
4
  };
5
5
  declare const projectValidateCommand: YargsCommandModule<unknown, ProjectValidateArgs>;
@@ -14,9 +14,9 @@ import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
14
14
  import { handleKeypress, handleExit } from '../../lib/process.js';
15
15
  import { makeWrappedYargsHandler } from '../../lib/yargs/makeWrappedYargsHandler.js';
16
16
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
17
- import { uiDeprecatedTag } from '../../lib/ui/index.js';
17
+ import { uiCommandRelocatedMessage, uiCommandRenamedDescription, } from '../../lib/ui/index.js';
18
18
  const command = 'watch';
19
- const describe = uiDeprecatedTag(commands.project.watch.describe, false);
19
+ const describe = uiCommandRenamedDescription(commands.project.watch.describe, 'hs project dev');
20
20
  async function handleBuildStatus(accountId, projectName, buildId) {
21
21
  const { isAutoDeployEnabled, deployStatusTaskLocator } = await pollBuildStatus(accountId, projectName, buildId, null);
22
22
  if (isAutoDeployEnabled && deployStatusTaskLocator) {
@@ -57,6 +57,7 @@ function handleUserInput(accountId, projectName, currentBuildId, exit) {
57
57
  }
58
58
  async function handler(args) {
59
59
  const { initialUpload, derivedAccountId, exit } = args;
60
+ uiCommandRelocatedMessage('hs project dev');
60
61
  const { projectConfig, projectDir } = await getProjectConfig();
61
62
  if (!projectConfig || !projectDir) {
62
63
  uiLogger.error(commands.project.watch.errors.projectConfigNotFound);
@@ -24,7 +24,7 @@ import appInstallStatus from './project/appInstallStatus.js';
24
24
  import installApp from './project/installApp.js';
25
25
  import { makeYargsBuilder } from '../lib/yargsUtils.js';
26
26
  import { getProjectConfig } from '../lib/projects/config.js';
27
- import { isSupportedPlatformVersion, LATEST_SUPPORTED_PLATFORM_VERSION, } from '@hubspot/project-parsing-lib/projects';
27
+ import { isKnownPlatformVersion, LATEST_SUPPORTED_PLATFORM_VERSION, } from '@hubspot/project-parsing-lib/projects';
28
28
  import { uiLogger } from '../lib/ui/logger.js';
29
29
  import { debugError } from '../lib/errorHandlers/index.js';
30
30
  const command = ['project', 'projects'];
@@ -37,7 +37,7 @@ async function validatePlatformVersion() {
37
37
  // Only warn if a platform version is explicitly set but not supported
38
38
  // Don't warn if the platform version is missing/undefined
39
39
  if (projectConfig?.platformVersion &&
40
- !isSupportedPlatformVersion(projectConfig.platformVersion)) {
40
+ !isKnownPlatformVersion(projectConfig.platformVersion)) {
41
41
  uiLogger.warn(lib.projects.platformVersion.unsupported(pkg.version, LATEST_SUPPORTED_PLATFORM_VERSION, projectConfig.platformVersion));
42
42
  uiLogger.log('');
43
43
  }
@@ -2,8 +2,7 @@ import { uiLogger } from '../../lib/ui/logger.js';
2
2
  import { isSpecifiedError } from '@hubspot/local-dev-lib/errors/index';
3
3
  import { deleteSandbox } from '@hubspot/local-dev-lib/api/sandboxHubs';
4
4
  import { getConfigAccountEnvironment, removeAccountFromConfig, setConfigAccountAsDefault, getAllConfigAccounts, getConfigAccountIfExists, getConfigDefaultAccountIfExists, } from '@hubspot/local-dev-lib/config';
5
- import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
6
- import { getValidEnv } from '@hubspot/local-dev-lib/environment';
5
+ import { getHubSpotWebsiteOriginByAccountId } from '@hubspot/local-dev-lib/urls';
7
6
  import { logError, debugError } from '../../lib/errorHandlers/index.js';
8
7
  import { commands } from '../../lang/en.js';
9
8
  import { deleteSandboxPrompt } from '../../lib/prompts/sandboxesPrompt.js';
@@ -43,7 +42,7 @@ async function handler(args) {
43
42
  const sandboxAccountId = sandboxAccount.accountId;
44
43
  const defaultAccount = getConfigDefaultAccountIfExists();
45
44
  const isDefaultAccount = sandboxAccountId === defaultAccount?.accountId;
46
- const baseUrl = getHubSpotWebsiteOrigin(getValidEnv(getConfigAccountEnvironment(sandboxAccountId)));
45
+ const baseUrl = getHubSpotWebsiteOriginByAccountId(sandboxAccountId);
47
46
  let parentAccountId;
48
47
  const accountsList = getAllConfigAccounts() || [];
49
48
  for (const portal of accountsList) {
@@ -1,6 +1,7 @@
1
1
  import { AccountLevel } from '@hubspot/local-dev-lib/types/developerTestAccounts.js';
2
2
  import { CommonArgs, ConfigArgs, AccountArgs, TestingArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
3
- type CreateTestAccountArgs = CommonArgs & AccountArgs & ConfigArgs & TestingArgs & EnvironmentArgs & JSONOutputArgs & {
3
+ import { CreateTestAccountJsonOutput } from '../../lib/jsonOutput.js';
4
+ type CreateTestAccountArgs = CommonArgs & AccountArgs & ConfigArgs & TestingArgs & EnvironmentArgs & JSONOutputArgs<CreateTestAccountJsonOutput> & {
4
5
  configPath?: string;
5
6
  name?: string;
6
7
  description?: string;
@@ -4,6 +4,7 @@ import { getValidEnv } from '@hubspot/local-dev-lib/environment';
4
4
  import { getConfigAccountEnvironment } from '@hubspot/local-dev-lib/config';
5
5
  import { getCwd } from '@hubspot/local-dev-lib/path';
6
6
  import { makeWrappedYargsHandler } from '../../lib/yargs/makeWrappedYargsHandler.js';
7
+ import { CreateTestAccountSchema, } from '../../lib/jsonOutput.js';
7
8
  import { makeYargsBuilder } from '../../lib/yargsUtils.js';
8
9
  import { promptUser, listPrompt } from '../../lib/prompts/promptUtils.js';
9
10
  import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
@@ -88,7 +89,7 @@ async function buildTestAccountConfig(args) {
88
89
  });
89
90
  }
90
91
  async function handler(args) {
91
- const { derivedAccountId, formatOutputAsJson, exit } = args;
92
+ const { derivedAccountId, formatOutputAsJson, exit, addJsonOutput } = args;
92
93
  const env = getValidEnv(getConfigAccountEnvironment(derivedAccountId));
93
94
  let testAccountConfig;
94
95
  try {
@@ -121,11 +122,8 @@ async function handler(args) {
121
122
  SpinniesManager.succeed('createTestAccount', {
122
123
  text: commands.testAccount.create.polling.success(testAccountConfig.accountName, resultJson.accountId, derivedAccountId),
123
124
  });
124
- if (formatOutputAsJson) {
125
- uiLogger.json(resultJson);
126
- }
127
- else {
128
- // Only save to config if not using json output
125
+ addJsonOutput(resultJson);
126
+ if (!formatOutputAsJson) {
129
127
  try {
130
128
  const savedAccountName = await saveAccountToConfig(resultJson.accountId, testAccountConfig.accountName, env, resultJson.personalAccessKey);
131
129
  // Inform user if the account name was normalized
@@ -230,7 +228,9 @@ const builder = makeYargsBuilder(createTestAccountBuilder, command, describe, {
230
228
  const createTestAccountCommand = {
231
229
  command,
232
230
  describe,
233
- handler: makeWrappedYargsHandler('test-account-create', handler),
231
+ handler: makeWrappedYargsHandler('test-account-create', handler, {
232
+ jsonOutputSchema: CreateTestAccountSchema,
233
+ }),
234
234
  builder,
235
235
  };
236
236
  export default createTestAccountCommand;
@@ -1,7 +1,7 @@
1
1
  import { AccountArgs, CommonArgs, ConfigArgs, EnvironmentArgs, YargsCommandModule } from '../../types/Yargs.js';
2
2
  export declare const command = "import-data";
3
3
  export declare const describe: string;
4
- type CrmImportDataArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
4
+ export type CrmImportDataArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
5
5
  filePath: string | undefined;
6
6
  skipConfirm: boolean | undefined;
7
7
  };