@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.
- package/commands/account/clean.js +1 -1
- package/commands/account/list.js +1 -1
- package/commands/account/remove.js +1 -1
- package/commands/account/rename.js +1 -1
- package/commands/account/use.js +1 -1
- package/commands/api.d.ts +4 -1
- package/commands/api.js +11 -14
- package/commands/config/set.js +24 -5
- package/commands/customObject/createSchema.js +2 -3
- package/commands/customObject/updateSchema.js +2 -3
- package/commands/getStarted.js +1 -0
- package/commands/hubdb/list.d.ts +1 -1
- package/commands/hubdb/list.js +7 -8
- package/commands/mcp/setup.d.ts +2 -0
- package/commands/mcp/setup.js +29 -1
- package/commands/project/appInstallStatus.d.ts +2 -1
- package/commands/project/appInstallStatus.js +21 -19
- package/commands/project/create.js +0 -1
- package/commands/project/deploy.d.ts +2 -1
- package/commands/project/deploy.js +31 -14
- package/commands/project/dev/index.js +18 -64
- package/commands/project/dev/unifiedFlow.js +3 -1
- package/commands/project/info.d.ts +2 -1
- package/commands/project/info.js +8 -6
- package/commands/project/installApp.d.ts +2 -1
- package/commands/project/installApp.js +26 -27
- package/commands/project/list.js +1 -1
- package/commands/project/listBuilds.d.ts +1 -1
- package/commands/project/listBuilds.js +8 -6
- package/commands/project/logs.js +2 -4
- package/commands/project/profile/add.d.ts +2 -1
- package/commands/project/profile/add.js +22 -1
- package/commands/project/profile/delete.d.ts +1 -1
- package/commands/project/release/create.d.ts +2 -1
- package/commands/project/release/create.js +68 -69
- package/commands/project/release/info.d.ts +2 -1
- package/commands/project/release/info.js +7 -6
- package/commands/project/release/list.d.ts +2 -1
- package/commands/project/release/list.js +15 -7
- package/commands/project/upload.d.ts +4 -1
- package/commands/project/upload.js +48 -21
- package/commands/project/validate.d.ts +1 -1
- package/commands/project/watch.js +3 -2
- package/commands/project.js +2 -2
- package/commands/sandbox/delete.js +2 -3
- package/commands/testAccount/create.d.ts +2 -1
- package/commands/testAccount/create.js +7 -7
- package/commands/testAccount/importData.d.ts +1 -1
- package/lang/en.d.ts +61 -33
- package/lang/en.js +77 -48
- package/lib/app/urls.js +2 -3
- package/lib/commonOpts.js +6 -1
- package/lib/configOptions.d.ts +10 -10
- package/lib/configOptions.js +10 -11
- package/lib/constants.d.ts +2 -0
- package/lib/constants.js +2 -0
- package/lib/dependencyManagement.js +7 -7
- package/lib/getStartedV2Actions.js +2 -1
- package/lib/importData.js +3 -4
- package/lib/jsonOutput.d.ts +109 -0
- package/lib/jsonOutput.js +94 -0
- package/lib/links.js +6 -5
- package/lib/mcp/clients.d.ts +1 -1
- package/lib/mcp/clients.js +8 -1
- package/lib/mcp/setup.d.ts +9 -4
- package/lib/mcp/setup.js +115 -35
- package/lib/npm/npmCli.d.ts +1 -0
- package/lib/npm/npmCli.js +13 -0
- package/lib/projects/builds.d.ts +2 -0
- package/lib/projects/builds.js +22 -0
- package/lib/projects/create/v2.js +1 -0
- package/lib/projects/installApp.d.ts +1 -1
- package/lib/projects/installApp.js +8 -3
- package/lib/projects/localDev/DevSessionManager.d.ts +2 -2
- package/lib/projects/localDev/DevSessionManager.js +4 -30
- package/lib/projects/localDev/LocalDevProcess.js +7 -5
- package/lib/projects/localDev/helpers/account.d.ts +0 -7
- package/lib/projects/localDev/helpers/account.js +1 -80
- package/lib/projects/localDev/helpers/project.js +3 -2
- package/lib/projects/release.d.ts +4 -0
- package/lib/projects/release.js +90 -0
- package/lib/projects/ui.d.ts +1 -0
- package/lib/projects/ui.js +14 -0
- package/lib/projects/upload.d.ts +10 -2
- package/lib/projects/upload.js +14 -7
- package/lib/projects/urls.d.ts +0 -1
- package/lib/projects/urls.js +6 -13
- package/lib/yargs/makeWrappedYargsHandler.d.ts +5 -1
- package/lib/yargs/makeWrappedYargsHandler.js +123 -65
- package/mcp-server/Tool.d.ts +8 -3
- package/mcp-server/Tool.js +58 -32
- package/mcp-server/server.js +10 -6
- package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsCreateFunctionTool.js +10 -17
- package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsCreateModuleTool.js +12 -18
- package/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -10
- package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsFunctionLogsTool.js +9 -9
- package/mcp-server/tools/cms/HsListFunctionsTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsListFunctionsTool.js +7 -7
- package/mcp-server/tools/cms/HsListTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsListTool.js +6 -10
- package/mcp-server/tools/index.js +2 -0
- package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +3 -2
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +8 -9
- package/mcp-server/tools/project/AuthAccountTool.d.ts +18 -0
- package/mcp-server/tools/project/AuthAccountTool.js +78 -0
- package/mcp-server/tools/project/CreateProjectTool.d.ts +3 -2
- package/mcp-server/tools/project/CreateProjectTool.js +13 -12
- package/mcp-server/tools/project/CreateTestAccountTool.d.ts +2 -2
- package/mcp-server/tools/project/CreateTestAccountTool.js +14 -15
- package/mcp-server/tools/project/DeployProjectTool.d.ts +2 -2
- package/mcp-server/tools/project/DeployProjectTool.js +10 -10
- package/mcp-server/tools/project/DocFetchTool.js +1 -1
- package/mcp-server/tools/project/DocsSearchTool.js +8 -7
- package/mcp-server/tools/project/FindProjectsTool.js +1 -1
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +2 -1
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +9 -8
- package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +2 -1
- package/mcp-server/tools/project/GetApplicationInfoTool.js +12 -9
- package/mcp-server/tools/project/GetBuildLogsTool.js +11 -7
- package/mcp-server/tools/project/GetBuildStatusTool.js +11 -7
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +2 -1
- package/mcp-server/tools/project/GetConfigValuesTool.js +9 -7
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +1 -1
- package/mcp-server/tools/project/UploadProjectTools.d.ts +2 -2
- package/mcp-server/tools/project/UploadProjectTools.js +9 -8
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +2 -2
- package/mcp-server/tools/project/ValidateProjectTool.js +5 -4
- package/mcp-server/tools/project/constants.d.ts +1 -0
- package/mcp-server/tools/project/constants.js +2 -1
- package/mcp-server/utils/command.d.ts +25 -2
- package/mcp-server/utils/command.js +67 -17
- package/mcp-server/utils/config.js +5 -0
- package/mcp-server/utils/logger.d.ts +3 -0
- package/mcp-server/utils/logger.js +30 -0
- package/mcp-server/utils/toolUsageTracking.js +18 -3
- package/package.json +11 -9
- package/types/Yargs.d.ts +3 -1
- package/commands/project/dev/deprecatedFlow.d.ts +0 -11
- package/commands/project/dev/deprecatedFlow.js +0 -180
- package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +0 -43
- package/lib/projects/localDev/DevServerManager_DEPRECATED.js +0 -128
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +0 -64
- 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
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
84
|
+
return exit(EXIT_CODES.ERROR);
|
|
79
85
|
}
|
|
80
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
119
|
-
|
|
137
|
+
if (previewJson) {
|
|
138
|
+
addJsonOutput({ preview: previewJson });
|
|
120
139
|
}
|
|
121
140
|
}
|
|
122
|
-
if (result
|
|
123
|
-
|
|
141
|
+
if (result) {
|
|
142
|
+
addJsonOutput({ buildId: result.buildId });
|
|
124
143
|
if (result.deployResult) {
|
|
125
|
-
|
|
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 {
|
|
17
|
+
import { uiCommandRelocatedMessage, uiCommandRenamedDescription, } from '../../lib/ui/index.js';
|
|
18
18
|
const command = 'watch';
|
|
19
|
-
const describe =
|
|
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);
|
package/commands/project.js
CHANGED
|
@@ -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 {
|
|
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
|
-
!
|
|
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 {
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
125
|
-
|
|
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
|
};
|