@hubspot/cli 8.14.0 → 8.15.0-beta.1
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/cms/theme/preview.js +8 -1
- package/commands/getStarted.js +16 -21
- package/commands/project/add.js +7 -6
- package/commands/project/appInstallStatus.d.ts +1 -1
- package/commands/project/appInstallStatus.js +8 -4
- package/commands/project/create.js +24 -7
- package/commands/project/delete.js +1 -1
- package/commands/project/deploy.d.ts +1 -1
- package/commands/project/deploy.js +14 -12
- package/commands/project/dev/index.js +4 -7
- package/commands/project/download.d.ts +3 -2
- package/commands/project/download.js +18 -5
- package/commands/project/info.d.ts +1 -1
- package/commands/project/info.js +8 -5
- package/commands/project/installApp.d.ts +1 -1
- package/commands/project/installApp.js +9 -4
- package/commands/project/installDeps.js +6 -5
- package/commands/project/lint.js +16 -9
- package/commands/project/list.d.ts +3 -2
- package/commands/project/list.js +21 -3
- package/commands/project/listBuilds.d.ts +1 -1
- package/commands/project/listBuilds.js +4 -8
- package/commands/project/migrate.js +14 -19
- package/commands/project/open.js +15 -7
- package/commands/project/profile/add.js +8 -4
- package/commands/project/profile/delete.js +8 -4
- package/commands/project/release/create.d.ts +1 -1
- package/commands/project/release/create.js +5 -7
- package/commands/project/release/info.d.ts +1 -1
- package/commands/project/release/info.js +4 -4
- package/commands/project/release/list.d.ts +1 -1
- package/commands/project/release/list.js +4 -4
- package/commands/project/updateDeps.js +6 -5
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +26 -15
- package/commands/project/validate.d.ts +3 -2
- package/commands/project/validate.js +67 -97
- package/commands/project/watch.js +8 -11
- package/commands/project.js +1 -1
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +1 -1
- package/lang/en.d.ts +9 -19
- package/lang/en.js +9 -19
- package/lib/app/migrate.js +5 -7
- package/lib/constants.d.ts +0 -1
- package/lib/constants.js +0 -1
- package/lib/dependencyManagement.js +3 -10
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -2
- package/lib/doctor/DiagnosticInfoBuilder.js +8 -8
- package/lib/doctor/Doctor.js +7 -9
- package/lib/errors/ProjectErrors.d.ts +0 -6
- package/lib/errors/ProjectErrors.js +0 -12
- package/lib/errors/ProjectValidationError.d.ts +2 -1
- package/lib/errors/ProjectValidationError.js +3 -1
- package/lib/filesystem.d.ts +6 -0
- package/lib/filesystem.js +9 -0
- package/lib/getStartedV2Actions.js +14 -18
- package/lib/jsonOutput/appInstallStatus.d.ts +14 -0
- package/lib/jsonOutput/appInstallStatus.js +14 -0
- package/lib/jsonOutput/createTestAccount.d.ts +7 -0
- package/lib/jsonOutput/createTestAccount.js +6 -0
- package/lib/jsonOutput/deploy.d.ts +5 -0
- package/lib/jsonOutput/deploy.js +4 -0
- package/lib/jsonOutput/download.d.ts +7 -0
- package/lib/jsonOutput/download.js +6 -0
- package/lib/jsonOutput/info.d.ts +21 -0
- package/lib/jsonOutput/info.js +19 -0
- package/lib/jsonOutput/installApp.d.ts +11 -0
- package/lib/jsonOutput/installApp.js +10 -0
- package/lib/jsonOutput/listBuilds.d.ts +75 -0
- package/lib/jsonOutput/listBuilds.js +65 -0
- package/lib/jsonOutput/projectList.d.ts +29 -0
- package/lib/jsonOutput/projectList.js +28 -0
- package/lib/jsonOutput/release.d.ts +42 -0
- package/lib/jsonOutput/release.js +37 -0
- package/lib/jsonOutput/upload.d.ts +29 -0
- package/lib/jsonOutput/upload.js +23 -0
- package/lib/jsonOutput/validate.d.ts +36 -0
- package/lib/jsonOutput/validate.js +20 -0
- package/lib/npm/packageJson.js +1 -1
- package/lib/projects/ProjectLogsManager.js +1 -4
- package/lib/projects/config.d.ts +6 -5
- package/lib/projects/config.js +7 -38
- package/lib/projects/create/tracking.d.ts +1 -0
- package/lib/projects/create/tracking.js +27 -0
- package/lib/projects/delete.js +14 -1
- package/lib/projects/localDev/LocalDevProcess.js +7 -7
- package/lib/projects/projectProfiles.d.ts +3 -2
- package/lib/projects/projectProfiles.js +8 -3
- package/lib/projects/release.js +1 -1
- package/lib/projects/uieLinting.d.ts +2 -0
- package/lib/projects/uieLinting.js +13 -11
- package/lib/projects/upload.d.ts +5 -1
- package/lib/projects/upload.js +6 -1
- package/lib/projects/validate.d.ts +18 -0
- package/lib/projects/validate.js +142 -0
- package/lib/projects/validateLintConfigOnUpload.js +6 -5
- package/lib/projects/workspaces.js +6 -13
- package/lib/theme/migrate.js +1 -4
- package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/CreateProjectTool.d.ts +1 -1
- package/mcp-server/tools/project/GetBuildLogsTool.js +2 -3
- package/mcp-server/tools/project/GetBuildStatusTool.js +2 -3
- package/mcp-server/tools/project/UploadProjectTools.js +3 -5
- package/mcp-server/tools/project/constants.d.ts +1 -1
- package/package.json +3 -3
- package/types/Projects.d.ts +1 -5
- package/lib/jsonOutput.d.ts +0 -182
- package/lib/jsonOutput.js +0 -158
package/commands/project/list.js
CHANGED
|
@@ -6,6 +6,7 @@ import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
|
6
6
|
import { uiLogger } from '../../lib/ui/logger.js';
|
|
7
7
|
import { commands } from '../../lang/en.js';
|
|
8
8
|
import { renderTable } from '../../ui/render.js';
|
|
9
|
+
import { ProjectListSchema, mapProjectToListItem, } from '../../lib/jsonOutput/projectList.js';
|
|
9
10
|
const command = ['list', 'ls'];
|
|
10
11
|
const describe = commands.project.list.describe;
|
|
11
12
|
async function getProjectData(accountId) {
|
|
@@ -23,7 +24,7 @@ function formatProjectsAsTableRows(projects) {
|
|
|
23
24
|
return projectListData;
|
|
24
25
|
}
|
|
25
26
|
async function handler(args) {
|
|
26
|
-
const { derivedAccountId, exit } = args;
|
|
27
|
+
const { derivedAccountId, formatOutputAsJson, exit, addJsonOutput } = args;
|
|
27
28
|
let projectData;
|
|
28
29
|
try {
|
|
29
30
|
projectData = await getProjectData(derivedAccountId);
|
|
@@ -33,9 +34,20 @@ async function handler(args) {
|
|
|
33
34
|
return exit(EXIT_CODES.ERROR);
|
|
34
35
|
}
|
|
35
36
|
if (projectData.length === 0) {
|
|
37
|
+
if (formatOutputAsJson) {
|
|
38
|
+
addJsonOutput({ accountId: derivedAccountId, results: [] });
|
|
39
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
40
|
+
}
|
|
36
41
|
uiLogger.error(commands.project.list.errors.noProjectsFound(derivedAccountId));
|
|
37
42
|
return exit(EXIT_CODES.ERROR);
|
|
38
43
|
}
|
|
44
|
+
if (formatOutputAsJson) {
|
|
45
|
+
addJsonOutput({
|
|
46
|
+
accountId: derivedAccountId,
|
|
47
|
+
results: projectData.map(mapProjectToListItem),
|
|
48
|
+
});
|
|
49
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
50
|
+
}
|
|
39
51
|
const projectListData = formatProjectsAsTableRows(projectData);
|
|
40
52
|
const tableHeader = [
|
|
41
53
|
commands.project.list.labels.name,
|
|
@@ -45,7 +57,10 @@ async function handler(args) {
|
|
|
45
57
|
renderTable(tableHeader, projectListData);
|
|
46
58
|
}
|
|
47
59
|
function projectListBuilder(yargs) {
|
|
48
|
-
yargs.example([
|
|
60
|
+
yargs.example([
|
|
61
|
+
['$0 project list', commands.project.list.examples.default],
|
|
62
|
+
['$0 project list --json', commands.project.list.examples.json],
|
|
63
|
+
]);
|
|
49
64
|
return yargs;
|
|
50
65
|
}
|
|
51
66
|
const builder = makeYargsBuilder(projectListBuilder, command, describe, {
|
|
@@ -53,11 +68,14 @@ const builder = makeYargsBuilder(projectListBuilder, command, describe, {
|
|
|
53
68
|
useConfigOptions: true,
|
|
54
69
|
useAccountOptions: true,
|
|
55
70
|
useEnvironmentOptions: true,
|
|
71
|
+
useJSONOutputOptions: true,
|
|
56
72
|
});
|
|
57
73
|
const projectListCommand = {
|
|
58
74
|
command,
|
|
59
75
|
describe,
|
|
60
|
-
handler: makeWrappedYargsHandler('project-list', handler
|
|
76
|
+
handler: makeWrappedYargsHandler('project-list', handler, {
|
|
77
|
+
jsonOutputSchema: ProjectListSchema,
|
|
78
|
+
}),
|
|
61
79
|
builder,
|
|
62
80
|
};
|
|
63
81
|
export default projectListCommand;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
|
|
2
|
-
import { ProjectBuildsListJsonOutput } from '../../lib/jsonOutput.js';
|
|
2
|
+
import { ProjectBuildsListJsonOutput } from '../../lib/jsonOutput/listBuilds.js';
|
|
3
3
|
export type ProjectListBuildsArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs<ProjectBuildsListJsonOutput> & {
|
|
4
4
|
project?: string;
|
|
5
5
|
limit?: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
|
|
2
2
|
import { fetchProject, fetchProjectBuilds, } from '@hubspot/local-dev-lib/api/projects';
|
|
3
3
|
import { uiLink } from '../../lib/ui/index.js';
|
|
4
|
-
import { getProjectConfig
|
|
4
|
+
import { getProjectConfig } from '../../lib/projects/config.js';
|
|
5
5
|
import { getProjectDetailUrl } from '../../lib/projects/urls.js';
|
|
6
6
|
import moment from 'moment';
|
|
7
7
|
import { promptUser } from '../../lib/prompts/promptUtils.js';
|
|
@@ -13,7 +13,7 @@ import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
|
13
13
|
import { makeYargsBuilder } from '../../lib/yargsUtils.js';
|
|
14
14
|
import { commands } from '../../lang/en.js';
|
|
15
15
|
import { renderTable } from '../../ui/render.js';
|
|
16
|
-
import { ProjectBuildsListSchema, mapBuildToJsonOutput, } from '../../lib/jsonOutput.js';
|
|
16
|
+
import { ProjectBuildsListSchema, mapBuildToJsonOutput, } from '../../lib/jsonOutput/listBuilds.js';
|
|
17
17
|
const command = 'list-builds';
|
|
18
18
|
const describe = commands.project.listBuilds.describe;
|
|
19
19
|
async function fetchAndDisplayBuilds(accountId, project, options) {
|
|
@@ -66,18 +66,14 @@ async function handler(args) {
|
|
|
66
66
|
const { project: projectFlagValue, limit, derivedAccountId, exit, json: formatOutputAsJson, addJsonOutput, } = args;
|
|
67
67
|
let projectName = projectFlagValue;
|
|
68
68
|
if (!projectName) {
|
|
69
|
-
const { projectConfig, projectDir } = await getProjectConfig();
|
|
70
69
|
try {
|
|
71
|
-
|
|
70
|
+
const { projectConfig } = getProjectConfig();
|
|
71
|
+
projectName = projectConfig.name;
|
|
72
72
|
}
|
|
73
73
|
catch (error) {
|
|
74
74
|
logError(error);
|
|
75
75
|
return exit(EXIT_CODES.ERROR);
|
|
76
76
|
}
|
|
77
|
-
if (!projectConfig) {
|
|
78
|
-
return exit(EXIT_CODES.ERROR);
|
|
79
|
-
}
|
|
80
|
-
projectName = projectConfig.name;
|
|
81
77
|
}
|
|
82
78
|
try {
|
|
83
79
|
const { data: project } = await fetchProject(derivedAccountId, projectName);
|
|
@@ -11,48 +11,43 @@ import { uiLogger } from '../../lib/ui/logger.js';
|
|
|
11
11
|
import { renderInline } from '../../ui/render.js';
|
|
12
12
|
import { getWarningBox } from '../../ui/components/StatusMessageBoxes.js';
|
|
13
13
|
import { getHasMigratableThemes, migrateThemesV2, } from '../../lib/theme/migrate.js';
|
|
14
|
-
import { hasFeature } from '../../lib/hasFeature.js';
|
|
15
|
-
import { FEATURES } from '../../lib/constants.js';
|
|
16
14
|
import { trackCommandMetadataUsage } from '../../lib/usageTracking.js';
|
|
17
15
|
const { v2025_2, v2026_03_BETA, v2026_03 } = PLATFORM_VERSIONS;
|
|
18
16
|
const command = 'migrate';
|
|
19
17
|
const describe = commands.project.migrate.describe;
|
|
20
18
|
async function handler(args) {
|
|
21
19
|
const { platformVersion, unstable, derivedAccountId, exit } = args;
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
let projectConfig;
|
|
21
|
+
let projectDir;
|
|
22
|
+
try {
|
|
23
|
+
({ projectConfig, projectDir } = getProjectConfig());
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
24
26
|
uiLogger.error(commands.project.migrate.errors.noProjectConfig(uiCommandReference('hs app migrate')));
|
|
25
27
|
return exit(EXIT_CODES.ERROR);
|
|
26
28
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
29
|
+
await renderInline(getWarningBox({
|
|
30
|
+
title: lib.migrate.projectMigrationWarningTitle(platformVersion),
|
|
31
|
+
message: lib.migrate.projectMigrationWarning(platformVersion),
|
|
32
|
+
}));
|
|
33
33
|
try {
|
|
34
|
-
const { hasMigratableThemes, migratableThemesCount } = await getHasMigratableThemes(projectConfig);
|
|
34
|
+
const { hasMigratableThemes, migratableThemesCount } = await getHasMigratableThemes({ projectConfig, projectDir });
|
|
35
35
|
if (hasMigratableThemes) {
|
|
36
|
-
const hasThemeMigrationAccess = await hasFeature(derivedAccountId, FEATURES.THEME_MIGRATION_2025_2);
|
|
37
|
-
if (!hasThemeMigrationAccess) {
|
|
38
|
-
uiLogger.error(commands.project.migrate.errors.noThemeMigrationAccess(derivedAccountId));
|
|
39
|
-
return exit(EXIT_CODES.ERROR);
|
|
40
|
-
}
|
|
41
36
|
await migrateThemesV2(derivedAccountId, {
|
|
42
37
|
...args,
|
|
43
38
|
platformVersion: unstable
|
|
44
39
|
? PLATFORM_VERSIONS.UNSTABLE
|
|
45
40
|
: platformVersion,
|
|
46
|
-
}, migratableThemesCount, projectConfig);
|
|
41
|
+
}, migratableThemesCount, { projectConfig, projectDir });
|
|
47
42
|
}
|
|
48
43
|
else {
|
|
49
44
|
await migrateApp(derivedAccountId, {
|
|
50
45
|
...args,
|
|
51
|
-
name: projectConfig
|
|
46
|
+
name: projectConfig.name,
|
|
52
47
|
platformVersion: unstable
|
|
53
48
|
? PLATFORM_VERSIONS.UNSTABLE
|
|
54
49
|
: platformVersion,
|
|
55
|
-
}, projectConfig);
|
|
50
|
+
}, { projectConfig, projectDir });
|
|
56
51
|
}
|
|
57
52
|
}
|
|
58
53
|
catch (error) {
|
package/commands/project/open.js
CHANGED
|
@@ -12,7 +12,6 @@ const command = 'open';
|
|
|
12
12
|
const describe = commands.project.open.describe;
|
|
13
13
|
async function handler(args) {
|
|
14
14
|
const { project, derivedAccountId, exit } = args;
|
|
15
|
-
const { projectConfig } = await getProjectConfig();
|
|
16
15
|
let projectName = project;
|
|
17
16
|
if (projectName) {
|
|
18
17
|
const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
|
|
@@ -22,12 +21,21 @@ async function handler(args) {
|
|
|
22
21
|
return exit(EXIT_CODES.ERROR);
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
|
-
else if (!projectName
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
else if (!projectName) {
|
|
25
|
+
let projectConfig;
|
|
26
|
+
try {
|
|
27
|
+
({ projectConfig } = getProjectConfig());
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Not in a project directory, fall through to prompt
|
|
31
|
+
}
|
|
32
|
+
if (projectConfig) {
|
|
33
|
+
projectName = projectConfig.name;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const namePromptResponse = await projectNamePrompt(derivedAccountId);
|
|
37
|
+
projectName = namePromptResponse.projectName;
|
|
38
|
+
}
|
|
31
39
|
}
|
|
32
40
|
const url = getProjectDetailUrl(projectName, derivedAccountId);
|
|
33
41
|
open(url, { url: true });
|
|
@@ -12,7 +12,7 @@ import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
|
|
|
12
12
|
import { commands } from '../../../lang/en.js';
|
|
13
13
|
import { promptUser, listPrompt, confirmPrompt, } from '../../../lib/prompts/promptUtils.js';
|
|
14
14
|
import { fileExists } from '../../../lib/validation.js';
|
|
15
|
-
import { debugError } from '../../../lib/errorHandlers/index.js';
|
|
15
|
+
import { debugError, logError } from '../../../lib/errorHandlers/index.js';
|
|
16
16
|
const command = 'add [name]';
|
|
17
17
|
const describe = commands.project.profile.add.describe;
|
|
18
18
|
const verboseDescribe = commands.project.profile.add.verboseDescribe;
|
|
@@ -52,9 +52,13 @@ async function selectProfileToCopyVariablesFrom(existingProfiles) {
|
|
|
52
52
|
}
|
|
53
53
|
async function handler(args) {
|
|
54
54
|
const { exit } = args;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
let projectConfig;
|
|
56
|
+
let projectDir;
|
|
57
|
+
try {
|
|
58
|
+
({ projectConfig, projectDir } = getProjectConfig());
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
logError(error);
|
|
58
62
|
return exit(EXIT_CODES.ERROR);
|
|
59
63
|
}
|
|
60
64
|
if (isLegacyProject(projectConfig.platformVersion)) {
|
|
@@ -12,15 +12,19 @@ import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
|
|
|
12
12
|
import { commands } from '../../../lang/en.js';
|
|
13
13
|
import { confirmPrompt, listPrompt } from '../../../lib/prompts/promptUtils.js';
|
|
14
14
|
import { fileExists } from '../../../lib/validation.js';
|
|
15
|
-
import { debugError } from '../../../lib/errorHandlers/index.js';
|
|
15
|
+
import { debugError, logError } from '../../../lib/errorHandlers/index.js';
|
|
16
16
|
import { isDeveloperTestAccount, isSandbox, } from '../../../lib/accountTypes.js';
|
|
17
17
|
const command = 'delete [name]';
|
|
18
18
|
const describe = commands.project.profile.delete.describe;
|
|
19
19
|
async function handler(args) {
|
|
20
20
|
const { exit } = args;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
let projectConfig;
|
|
22
|
+
let projectDir;
|
|
23
|
+
try {
|
|
24
|
+
({ projectConfig, projectDir } = getProjectConfig());
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
logError(error);
|
|
24
28
|
return exit(EXIT_CODES.ERROR);
|
|
25
29
|
}
|
|
26
30
|
if (isLegacyProject(projectConfig.platformVersion)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../../types/Yargs.js';
|
|
2
|
-
import { ReleaseJsonOutput } from '../../../lib/jsonOutput.js';
|
|
2
|
+
import { ReleaseJsonOutput } from '../../../lib/jsonOutput/release.js';
|
|
3
3
|
export type ProjectReleaseCreateArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs<ReleaseJsonOutput> & {
|
|
4
4
|
build?: number;
|
|
5
5
|
force: boolean;
|
|
@@ -3,14 +3,14 @@ import { pollProjectBuildAndDeploy } from '../../../lib/projects/pollProjectBuil
|
|
|
3
3
|
import { resolveBuildId, validateBuildForRelease, executeRelease, } from '../../../lib/projects/release.js';
|
|
4
4
|
import { logError, ApiErrorContext } from '../../../lib/errorHandlers/index.js';
|
|
5
5
|
import { isPromptExitError } from '../../../lib/errors/PromptExitError.js';
|
|
6
|
-
import { getProjectConfig
|
|
6
|
+
import { getProjectConfig } from '../../../lib/projects/config.js';
|
|
7
7
|
import { confirmPrompt } from '../../../lib/prompts/promptUtils.js';
|
|
8
8
|
import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
|
|
9
9
|
import { uiLogger } from '../../../lib/ui/logger.js';
|
|
10
10
|
import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
|
|
11
11
|
import { commands } from '../../../lang/en.js';
|
|
12
12
|
import { makeWrappedYargsHandler } from '../../../lib/yargs/makeWrappedYargsHandler.js';
|
|
13
|
-
import { ReleaseSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput.js';
|
|
13
|
+
import { ReleaseSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput/release.js';
|
|
14
14
|
const command = 'create';
|
|
15
15
|
// const describe = commands.project.release.create.describe;
|
|
16
16
|
const describe = undefined;
|
|
@@ -27,17 +27,15 @@ function logUploadError(error, accountId) {
|
|
|
27
27
|
}
|
|
28
28
|
async function handler(args) {
|
|
29
29
|
const { exit, derivedAccountId, build: buildOption, json: formatOutputAsJson, force, addJsonOutput, } = args;
|
|
30
|
-
|
|
30
|
+
let projectConfig;
|
|
31
|
+
let projectDir;
|
|
31
32
|
try {
|
|
32
|
-
|
|
33
|
+
({ projectConfig, projectDir } = getProjectConfig());
|
|
33
34
|
}
|
|
34
35
|
catch (error) {
|
|
35
36
|
logError(error);
|
|
36
37
|
return exit(EXIT_CODES.ERROR);
|
|
37
38
|
}
|
|
38
|
-
if (!projectConfig || !projectDir) {
|
|
39
|
-
return exit(EXIT_CODES.ERROR);
|
|
40
|
-
}
|
|
41
39
|
const projectName = projectConfig.name;
|
|
42
40
|
let buildId;
|
|
43
41
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../../types/Yargs.js';
|
|
2
|
-
import { ReleaseJsonOutput } from '../../../lib/jsonOutput.js';
|
|
2
|
+
import { ReleaseJsonOutput } from '../../../lib/jsonOutput/release.js';
|
|
3
3
|
export type ProjectReleaseInfoArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs<ReleaseJsonOutput> & {
|
|
4
4
|
tag?: string;
|
|
5
5
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getReleaseInfo, listReleases } from '../../../api/releases.js';
|
|
2
2
|
import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
|
|
3
3
|
import { logError, ApiErrorContext } from '../../../lib/errorHandlers/index.js';
|
|
4
|
-
import { getProjectConfig
|
|
4
|
+
import { getProjectConfig } from '../../../lib/projects/config.js';
|
|
5
5
|
import { listPrompt } from '../../../lib/prompts/promptUtils.js';
|
|
6
6
|
import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
|
|
7
7
|
import { uiLogger } from '../../../lib/ui/logger.js';
|
|
@@ -12,7 +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
|
+
import { ReleaseSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput/release.js';
|
|
16
16
|
const command = 'info';
|
|
17
17
|
// const describe = commands.project.release.info.describe;
|
|
18
18
|
const describe = undefined;
|
|
@@ -38,9 +38,9 @@ async function selectReleasePrompt(accountId, projectName) {
|
|
|
38
38
|
}
|
|
39
39
|
async function handler(args) {
|
|
40
40
|
const { derivedAccountId, tag: rawTag, json: formatOutputAsJson, exit, addJsonOutput, } = args;
|
|
41
|
-
|
|
41
|
+
let projectConfig;
|
|
42
42
|
try {
|
|
43
|
-
|
|
43
|
+
({ projectConfig } = getProjectConfig());
|
|
44
44
|
}
|
|
45
45
|
catch (error) {
|
|
46
46
|
logError(error);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonArgs, ConfigArgs, AccountArgs, EnvironmentArgs, JSONOutputArgs, YargsCommandModule } from '../../../types/Yargs.js';
|
|
2
|
-
import { ReleaseListJsonOutput } from '../../../lib/jsonOutput.js';
|
|
2
|
+
import { ReleaseListJsonOutput } from '../../../lib/jsonOutput/release.js';
|
|
3
3
|
export type ProjectReleaseListArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & JSONOutputArgs<ReleaseListJsonOutput> & {
|
|
4
4
|
limit?: number;
|
|
5
5
|
};
|
|
@@ -2,7 +2,7 @@ import { listReleases } from '../../../api/releases.js';
|
|
|
2
2
|
import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
|
|
3
3
|
import { isPromptExitError } from '../../../lib/errors/PromptExitError.js';
|
|
4
4
|
import { logError, ApiErrorContext } from '../../../lib/errorHandlers/index.js';
|
|
5
|
-
import { getProjectConfig
|
|
5
|
+
import { getProjectConfig } from '../../../lib/projects/config.js';
|
|
6
6
|
import { promptUser } from '../../../lib/prompts/promptUtils.js';
|
|
7
7
|
import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
|
|
8
8
|
import { uiLogger } from '../../../lib/ui/logger.js';
|
|
@@ -10,7 +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
|
+
import { ReleaseListSchema, mapReleaseToJsonOutput, } from '../../../lib/jsonOutput/release.js';
|
|
14
14
|
const command = 'list';
|
|
15
15
|
// const describe = commands.project.release.list.describe;
|
|
16
16
|
const describe = undefined;
|
|
@@ -43,9 +43,9 @@ async function fetchAndDisplayReleases(accountId, projectName, options) {
|
|
|
43
43
|
}
|
|
44
44
|
async function handler(args) {
|
|
45
45
|
const { derivedAccountId, limit, json: formatOutputAsJson, exit, addJsonOutput, } = args;
|
|
46
|
-
|
|
46
|
+
let projectConfig;
|
|
47
47
|
try {
|
|
48
|
-
|
|
48
|
+
({ projectConfig } = getProjectConfig());
|
|
49
49
|
}
|
|
50
50
|
catch (error) {
|
|
51
51
|
logError(error);
|
|
@@ -5,7 +5,6 @@ import { getProjectConfig } from '../../lib/projects/config.js';
|
|
|
5
5
|
import { promptUser } from '../../lib/prompts/promptUtils.js';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { commands } from '../../lang/en.js';
|
|
8
|
-
import { uiLogger } from '../../lib/ui/logger.js';
|
|
9
8
|
import { makeWrappedYargsHandler } from '../../lib/yargs/makeWrappedYargsHandler.js';
|
|
10
9
|
import { logError } from '../../lib/errorHandlers/index.js';
|
|
11
10
|
import { makeYargsBuilder } from '../../lib/yargsUtils.js';
|
|
@@ -14,12 +13,14 @@ const describe = commands.project.updateDeps.help.describe;
|
|
|
14
13
|
async function handler(args) {
|
|
15
14
|
const { packages, exit } = args;
|
|
16
15
|
try {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
let projectDir;
|
|
17
|
+
try {
|
|
18
|
+
({ projectDir } = getProjectConfig());
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
logError(error);
|
|
20
22
|
return exit(EXIT_CODES.ERROR);
|
|
21
23
|
}
|
|
22
|
-
const { projectDir } = projectConfig;
|
|
23
24
|
let installLocations = await getProjectPackageJsonLocations();
|
|
24
25
|
if (packages) {
|
|
25
26
|
const { selectedInstallLocations } = await promptUser([
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
|
|
2
|
-
import { UploadJsonOutput } from '../../lib/jsonOutput.js';
|
|
2
|
+
import { UploadJsonOutput } from '../../lib/jsonOutput/upload.js';
|
|
3
3
|
export type ProjectUploadArgs = CommonArgs & JSONOutputArgs<UploadJsonOutput> & {
|
|
4
4
|
force: boolean;
|
|
5
5
|
forceCreate: boolean;
|
|
@@ -3,7 +3,7 @@ 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
5
|
import { isLegacyProject, meetsMinimumPlatformVersion, } from '@hubspot/project-parsing-lib/projects';
|
|
6
|
-
import { getProjectConfig
|
|
6
|
+
import { getProjectConfig } from '../../lib/projects/config.js';
|
|
7
7
|
import { logFeedbackMessage } from '../../lib/projects/ui.js';
|
|
8
8
|
import { handleProjectUpload } from '../../lib/projects/upload.js';
|
|
9
9
|
import { loadAndValidateProfile } from '../../lib/projects/projectProfiles.js';
|
|
@@ -14,7 +14,7 @@ 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
|
+
import { mapAccountToTargetAccount, UploadSchema, } from '../../lib/jsonOutput/upload.js';
|
|
18
18
|
import { makeYargsBuilder } from '../../lib/yargsUtils.js';
|
|
19
19
|
import { projectProfilePrompt } from '../../lib/prompts/projectProfilePrompt.js';
|
|
20
20
|
import { uiDeprecatedTag } from '../../lib/ui/index.js';
|
|
@@ -41,27 +41,28 @@ async function handler(args) {
|
|
|
41
41
|
if (forceCreate) {
|
|
42
42
|
uiDeprecatedTag(commands.project.upload.logs.forceCreateDeprecated);
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
let projectConfig;
|
|
45
|
+
let projectDir;
|
|
45
46
|
try {
|
|
46
|
-
|
|
47
|
+
({ projectConfig, projectDir } = getProjectConfig());
|
|
47
48
|
}
|
|
48
49
|
catch (error) {
|
|
49
50
|
logError(error);
|
|
50
51
|
return exit(EXIT_CODES.ERROR);
|
|
51
52
|
}
|
|
52
|
-
if (!projectDir) {
|
|
53
|
-
uiLogger.error(commands.project.upload.errors.noProjectConfig);
|
|
54
|
-
return exit(EXIT_CODES.ERROR);
|
|
55
|
-
}
|
|
56
53
|
let targetAccountId;
|
|
57
54
|
let profileName = args.profile;
|
|
58
|
-
|
|
55
|
+
let resolvedViaProfile = false;
|
|
56
|
+
if (!isLegacyProject(projectConfig.platformVersion)) {
|
|
59
57
|
try {
|
|
60
58
|
const profileNamePromptResult = await projectProfilePrompt(projectDir, projectConfig, profileOption, !!useEnvOption);
|
|
61
59
|
if (profileNamePromptResult) {
|
|
62
60
|
profileName = profileNamePromptResult;
|
|
63
61
|
const profile = await loadAndValidateProfile(projectConfig, projectDir, profileName);
|
|
64
62
|
targetAccountId = profile.accountId;
|
|
63
|
+
resolvedViaProfile = true;
|
|
64
|
+
uiLogger.log(commands.project.upload.logs.uploadingWithProfile(profileName, targetAccountId));
|
|
65
|
+
uiLogger.log('');
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
catch (error) {
|
|
@@ -76,6 +77,10 @@ async function handler(args) {
|
|
|
76
77
|
type: accountType,
|
|
77
78
|
assetType: projectConfig.platformVersion,
|
|
78
79
|
});
|
|
80
|
+
if (!resolvedViaProfile) {
|
|
81
|
+
uiLogger.log(commands.project.upload.logs.uploadingToAccount(targetAccountId));
|
|
82
|
+
uiLogger.log('');
|
|
83
|
+
}
|
|
79
84
|
try {
|
|
80
85
|
const { result, uploadError, projectId, userDeclined } = await handleProjectUpload({
|
|
81
86
|
accountId: targetAccountId,
|
|
@@ -118,7 +123,7 @@ async function handler(args) {
|
|
|
118
123
|
(!result.buildResult.isAutoDeployEnabled || preview || skipAutoDeploy)) {
|
|
119
124
|
uiLogger.log(chalk.bold(commands.project.upload.logs.buildSucceeded(result.buildId)));
|
|
120
125
|
if (!preview) {
|
|
121
|
-
if (meetsMinimumPlatformVersion(result.buildResult.platformVersion, PLATFORM_VERSIONS.
|
|
126
|
+
if (meetsMinimumPlatformVersion(result.buildResult.platformVersion, PLATFORM_VERSIONS.v2027_03)) {
|
|
122
127
|
const releaseCommand = `hs project release create --build=${result.buildId}`;
|
|
123
128
|
uiLogger.log(commands.project.upload.logs.releaseManagementRequired(releaseCommand));
|
|
124
129
|
}
|
|
@@ -132,17 +137,23 @@ async function handler(args) {
|
|
|
132
137
|
}
|
|
133
138
|
await displayWarnLogs(targetAccountId, projectConfig.name, result.buildId);
|
|
134
139
|
}
|
|
140
|
+
if (result) {
|
|
141
|
+
addJsonOutput({
|
|
142
|
+
targetAccount: mapAccountToTargetAccount(targetAccountId, accountConfig),
|
|
143
|
+
buildId: result.buildId,
|
|
144
|
+
});
|
|
145
|
+
if (result.deployResult) {
|
|
146
|
+
addJsonOutput({ deployId: result.deployResult.deployId });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
135
149
|
if (result && result.succeeded && preview && targetPortalId) {
|
|
136
150
|
const previewJson = await handlePreview(targetAccountId, projectId, result.buildId, targetPortalId);
|
|
137
151
|
if (previewJson) {
|
|
138
152
|
addJsonOutput({ preview: previewJson });
|
|
139
153
|
}
|
|
140
154
|
}
|
|
141
|
-
if (result) {
|
|
142
|
-
|
|
143
|
-
if (result.deployResult) {
|
|
144
|
-
addJsonOutput({ deployId: result.deployResult.deployId });
|
|
145
|
-
}
|
|
155
|
+
if (result && result.succeeded) {
|
|
156
|
+
uiLogger.log(commands.project.upload.logs.uploadedToAccount(targetAccountId));
|
|
146
157
|
}
|
|
147
158
|
if (result && !result.succeeded) {
|
|
148
159
|
return exit(EXIT_CODES.ERROR);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { CommonArgs, YargsCommandModule } from '../../types/Yargs.js';
|
|
2
|
-
|
|
1
|
+
import { CommonArgs, JSONOutputArgs, YargsCommandModule } from '../../types/Yargs.js';
|
|
2
|
+
import { ValidateJsonOutput } from '../../lib/jsonOutput/validate.js';
|
|
3
|
+
export type ProjectValidateArgs = CommonArgs & JSONOutputArgs<ValidateJsonOutput> & {
|
|
3
4
|
profile?: string;
|
|
4
5
|
};
|
|
5
6
|
declare const projectValidateCommand: YargsCommandModule<unknown, ProjectValidateArgs>;
|