@hubspot/cli 8.0.10-experimental.7 → 8.0.11-experimental.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/bin/cli.js +2 -0
- package/commands/account/auth.js +12 -22
- package/commands/account/clean.js +5 -6
- package/commands/account/createOverride.js +7 -7
- package/commands/account/info.js +2 -1
- package/commands/account/list.js +3 -5
- package/commands/account/remove.js +2 -3
- package/commands/account/removeOverride.js +8 -10
- package/commands/account/rename.js +5 -6
- package/commands/account/use.js +8 -19
- package/commands/api.d.ts +10 -0
- package/commands/api.js +164 -0
- package/commands/app/migrate.js +8 -8
- package/commands/app/secret/add.js +6 -7
- package/commands/app/secret/delete.js +9 -10
- package/commands/app/secret/list.js +6 -7
- package/commands/app/secret/update.js +8 -9
- package/commands/auth.js +12 -12
- package/commands/cms/app/create.js +9 -5
- package/commands/cms/convertFields.js +8 -8
- package/commands/cms/delete.js +2 -3
- package/commands/cms/fetch.js +7 -7
- package/commands/cms/function/create.js +9 -5
- package/commands/cms/function/deploy.js +2 -3
- package/commands/cms/function/list.js +11 -7
- package/commands/cms/function/logs.js +17 -23
- package/commands/cms/function/server.js +2 -3
- package/commands/cms/getReactModule.js +7 -8
- package/commands/cms/lighthouseScore.js +25 -24
- package/commands/cms/lint.js +4 -5
- package/commands/cms/list.js +5 -6
- package/commands/cms/module/create.js +9 -5
- package/commands/cms/module/marketplace-validate.js +7 -8
- package/commands/cms/mv.js +2 -3
- package/commands/cms/template/create.js +10 -6
- package/commands/cms/theme/create.js +5 -5
- package/commands/cms/theme/generate-selectors.js +5 -4
- package/commands/cms/theme/marketplace-validate.js +8 -9
- package/commands/cms/theme/preview.js +16 -8
- package/commands/cms/upload.js +15 -12
- package/commands/cms/watch.js +5 -5
- package/commands/cms/webpack/create.js +5 -5
- package/commands/completion.js +3 -5
- package/commands/config/migrate.js +6 -7
- package/commands/config/set.js +5 -6
- package/commands/customObject/create.js +4 -5
- package/commands/customObject/createSchema.js +4 -5
- package/commands/customObject/deleteSchema.js +4 -5
- package/commands/customObject/fetchAllSchemas.js +2 -3
- package/commands/customObject/fetchSchema.js +2 -3
- package/commands/customObject/listSchemas.js +2 -3
- package/commands/customObject/updateSchema.js +4 -5
- package/commands/doctor.js +8 -8
- package/commands/feedback.js +6 -4
- package/commands/filemanager/fetch.js +5 -6
- package/commands/filemanager/upload.js +5 -5
- package/commands/getStarted.js +14 -16
- package/commands/hubdb/clear.js +5 -6
- package/commands/hubdb/create.js +4 -5
- package/commands/hubdb/delete.js +8 -9
- package/commands/hubdb/fetch.js +5 -6
- package/commands/hubdb/list.js +16 -14
- package/commands/init.js +14 -17
- package/commands/mcp/setup.js +5 -6
- package/commands/mcp/start.js +2 -3
- package/commands/open.js +4 -5
- package/commands/project/add.js +10 -5
- package/commands/project/create.js +10 -10
- package/commands/project/delete.d.ts +7 -0
- package/commands/project/delete.js +74 -0
- package/commands/project/deploy.js +36 -34
- package/commands/project/dev/deprecatedFlow.js +42 -15
- package/commands/project/dev/index.d.ts +3 -3
- package/commands/project/dev/index.js +24 -30
- package/commands/project/dev/unifiedFlow.js +37 -14
- package/commands/project/download.js +10 -11
- package/commands/project/info.d.ts +4 -0
- package/commands/project/info.js +67 -0
- package/commands/project/installDeps.js +9 -6
- package/commands/project/lint.js +11 -8
- package/commands/project/list.js +14 -14
- package/commands/project/listBuilds.js +8 -6
- package/commands/project/logs.js +5 -6
- package/commands/project/migrate.js +8 -8
- package/commands/project/open.js +5 -6
- package/commands/project/profile/add.js +12 -8
- package/commands/project/profile/delete.js +15 -11
- package/commands/project/updateDeps.js +9 -6
- package/commands/project/upload.js +31 -17
- package/commands/project/validate.js +11 -11
- package/commands/project/watch.js +20 -20
- package/commands/project.js +4 -0
- package/commands/sandbox/create.js +15 -15
- package/commands/sandbox/delete.js +13 -14
- package/commands/secret/addSecret.js +6 -7
- package/commands/secret/deleteSecret.js +5 -6
- package/commands/secret/listSecret.js +2 -3
- package/commands/secret/updateSecret.js +4 -5
- package/commands/testAccount/create.d.ts +1 -1
- package/commands/testAccount/create.js +20 -16
- package/commands/testAccount/createConfig.js +7 -8
- package/commands/testAccount/delete.js +27 -18
- package/commands/testAccount/importData.js +6 -7
- package/commands/upgrade.js +9 -10
- package/lang/en.d.ts +123 -5
- package/lang/en.js +121 -6
- package/lib/accountAuth.js +2 -2
- package/lib/buildAccount.js +3 -3
- package/lib/constants.d.ts +0 -1
- package/lib/constants.js +0 -1
- package/lib/doctor/Diagnosis.js +5 -5
- package/lib/errorHandlers/index.js +4 -3
- package/lib/errorHandlers/suppressError.js +4 -0
- package/lib/errors/PromptExitError.d.ts +4 -2
- package/lib/errors/PromptExitError.js +3 -0
- package/lib/hasFeature.js +1 -2
- package/lib/middleware/autoUpdateMiddleware.js +6 -3
- package/lib/process.d.ts +1 -1
- package/lib/process.js +10 -3
- package/lib/projects/create/v2.js +1 -2
- package/lib/projects/delete.d.ts +13 -0
- package/lib/projects/delete.js +193 -0
- package/lib/projects/localDev/AppDevModeInterface.js +11 -11
- package/lib/projects/localDev/DevServerManager_DEPRECATED.d.ts +3 -1
- package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
- package/lib/projects/localDev/DevSessionManager.d.ts +6 -3
- package/lib/projects/localDev/DevSessionManager.js +31 -19
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +3 -0
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +16 -12
- package/lib/projects/localDev/LocalDevProcess.js +6 -5
- package/lib/projects/localDev/LocalDevState.d.ts +3 -2
- package/lib/projects/localDev/LocalDevState.js +3 -1
- package/lib/projects/localDev/helpers/account.d.ts +4 -3
- package/lib/projects/localDev/helpers/account.js +16 -19
- package/lib/projects/localDev/helpers/process.d.ts +1 -1
- package/lib/projects/localDev/helpers/process.js +4 -10
- package/lib/projects/localDev/helpers/project.d.ts +4 -3
- package/lib/projects/localDev/helpers/project.js +31 -15
- package/lib/projects/projectInfo.d.ts +5 -0
- package/lib/projects/projectInfo.js +82 -0
- package/lib/projects/projectProfiles.d.ts +1 -2
- package/lib/projects/projectProfiles.js +5 -17
- package/lib/projects/upload.js +19 -0
- package/lib/projects/workspaces.d.ts +42 -0
- package/lib/projects/workspaces.js +350 -0
- package/lib/prompts/createApiSamplePrompt.js +4 -0
- package/lib/prompts/projectProfilePrompt.d.ts +2 -0
- package/lib/prompts/projectProfilePrompt.js +46 -0
- package/lib/prompts/promptUtils.js +3 -2
- package/lib/prompts/selectHubDBTablePrompt.js +2 -2
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +2 -2
- package/lib/theme/cmsDevServerProcess.d.ts +2 -0
- package/lib/theme/cmsDevServerProcess.js +7 -6
- package/lib/ui/SpinniesManager.d.ts +1 -0
- package/lib/ui/SpinniesManager.js +20 -6
- package/lib/ui/spinniesUtils.d.ts +0 -1
- package/lib/ui/spinniesUtils.js +6 -16
- package/lib/usageTracking.d.ts +3 -4
- package/lib/yargs/makeYargsBuilder.d.ts +13 -0
- package/lib/yargs/makeYargsBuilder.js +33 -0
- package/lib/yargs/makeYargsHandlerWithUsageTracking.d.ts +3 -0
- package/lib/yargs/makeYargsHandlerWithUsageTracking.js +95 -0
- package/lib/yargs/strictEnforceBoolean.d.ts +1 -0
- package/lib/yargs/strictEnforceBoolean.js +13 -0
- package/lib/yargsUtils.d.ts +3 -16
- package/lib/yargsUtils.js +3 -48
- package/package.json +5 -4
- package/types/LocalDev.d.ts +5 -0
- package/types/Projects.d.ts +19 -0
- package/types/Yargs.d.ts +18 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getImportDataRequest } from '@hubspot/local-dev-lib/crm';
|
|
2
2
|
import { logError } from '../../lib/errorHandlers/index.js';
|
|
3
|
+
import { makeYargsHandlerWithUsageTracking } from '../../lib/yargs/makeYargsHandlerWithUsageTracking.js';
|
|
3
4
|
import { makeYargsBuilder } from '../../lib/yargsUtils.js';
|
|
4
|
-
import { trackCommandUsage } from '../../lib/usageTracking.js';
|
|
5
5
|
import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
6
6
|
import { importDataFilePathPrompt } from '../../lib/prompts/importDataFilePathPrompt.js';
|
|
7
7
|
import { handleImportData, handleTargetTestAccountSelectionFlow, } from '../../lib/importData.js';
|
|
@@ -10,8 +10,7 @@ import { commands } from '../../lang/en.js';
|
|
|
10
10
|
export const command = 'import-data';
|
|
11
11
|
export const describe = commands.testAccount.subcommands.importData.describe;
|
|
12
12
|
async function handler(args) {
|
|
13
|
-
const { derivedAccountId, userProvidedAccount, filePath: providedFilePath, skipConfirm, } = args;
|
|
14
|
-
trackCommandUsage('crm-import-data', {}, derivedAccountId);
|
|
13
|
+
const { derivedAccountId, userProvidedAccount, filePath: providedFilePath, skipConfirm, exit, } = args;
|
|
15
14
|
let targetAccountId;
|
|
16
15
|
try {
|
|
17
16
|
targetAccountId = await handleTargetTestAccountSelectionFlow(derivedAccountId, userProvidedAccount);
|
|
@@ -20,15 +19,15 @@ async function handler(args) {
|
|
|
20
19
|
const confirmImportData = skipConfirm ||
|
|
21
20
|
(await confirmImportDataPrompt(targetAccountId, dataFileNames));
|
|
22
21
|
if (!confirmImportData) {
|
|
23
|
-
|
|
22
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
24
23
|
}
|
|
25
24
|
await handleImportData(targetAccountId, dataFileNames, importRequest);
|
|
26
25
|
}
|
|
27
26
|
catch (error) {
|
|
28
27
|
logError(error);
|
|
29
|
-
|
|
28
|
+
return exit(EXIT_CODES.ERROR);
|
|
30
29
|
}
|
|
31
|
-
|
|
30
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
32
31
|
}
|
|
33
32
|
function crmImportDataBuilder(yargs) {
|
|
34
33
|
yargs.example([['$0 test-account import-data']]);
|
|
@@ -56,6 +55,6 @@ const crmImportDataCommand = {
|
|
|
56
55
|
command,
|
|
57
56
|
describe,
|
|
58
57
|
builder,
|
|
59
|
-
handler,
|
|
58
|
+
handler: makeYargsHandlerWithUsageTracking('crm-import-data', handler),
|
|
60
59
|
};
|
|
61
60
|
export default crmImportDataCommand;
|
package/commands/upgrade.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isConfigFlagEnabled } from '@hubspot/local-dev-lib/config';
|
|
2
2
|
import { CONFIG_FLAGS } from '@hubspot/local-dev-lib/constants/config';
|
|
3
|
-
import { trackCommandUsage } from '../lib/usageTracking.js';
|
|
4
3
|
import { EXIT_CODES } from '../lib/enums/exitCodes.js';
|
|
4
|
+
import { makeYargsHandlerWithUsageTracking } from '../lib/yargs/makeYargsHandlerWithUsageTracking.js';
|
|
5
5
|
import { makeYargsBuilder } from '../lib/yargsUtils.js';
|
|
6
6
|
import { uiLogger } from '../lib/ui/logger.js';
|
|
7
7
|
import { commands } from '../lang/en.js';
|
|
@@ -14,8 +14,7 @@ import { debugError } from '../lib/errorHandlers/index.js';
|
|
|
14
14
|
const command = ['upgrade [version]', 'update [version]'];
|
|
15
15
|
const describe = commands.upgrade.describe;
|
|
16
16
|
const handler = async (args) => {
|
|
17
|
-
const { version, force, beta,
|
|
18
|
-
trackCommandUsage('upgrade', {}, derivedAccountId);
|
|
17
|
+
const { version, force, beta, exit } = args;
|
|
19
18
|
SpinniesManager.init({
|
|
20
19
|
succeedColor: 'white',
|
|
21
20
|
});
|
|
@@ -27,7 +26,7 @@ const handler = async (args) => {
|
|
|
27
26
|
const latestVersion = beta ? nextCliVersion : latestCliVersion;
|
|
28
27
|
if (!latestVersion) {
|
|
29
28
|
uiLogger.error(commands.upgrade.errors.unableToDetermineLatestVersion);
|
|
30
|
-
return
|
|
29
|
+
return exit(EXIT_CODES.ERROR);
|
|
31
30
|
}
|
|
32
31
|
targetVersion = latestVersion;
|
|
33
32
|
}
|
|
@@ -40,20 +39,20 @@ const handler = async (args) => {
|
|
|
40
39
|
else {
|
|
41
40
|
uiLogger.log(commands.upgrade.alreadyLatest(currentVersion, beta));
|
|
42
41
|
}
|
|
43
|
-
return
|
|
42
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
44
43
|
}
|
|
45
44
|
// Check if globally installed
|
|
46
45
|
const isGlobal = await canCliBeAutoUpgraded();
|
|
47
46
|
if (!isGlobal) {
|
|
48
47
|
uiLogger.log(commands.upgrade.autoUpgradeNotAvailable(targetVersion));
|
|
49
|
-
return
|
|
48
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
50
49
|
}
|
|
51
50
|
// Prompt for confirmation unless --force is used
|
|
52
51
|
if (!force) {
|
|
53
52
|
const shouldUpgrade = await confirmPrompt(commands.upgrade.confirmPrompt(currentVersion, targetVersion), { defaultAnswer: true });
|
|
54
53
|
if (!shouldUpgrade) {
|
|
55
54
|
uiLogger.log(commands.upgrade.cancelled);
|
|
56
|
-
return
|
|
55
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
57
56
|
}
|
|
58
57
|
}
|
|
59
58
|
SpinniesManager.add('upgrade', {
|
|
@@ -68,7 +67,7 @@ const handler = async (args) => {
|
|
|
68
67
|
});
|
|
69
68
|
uiLogger.log('');
|
|
70
69
|
uiLogger.error(commands.upgrade.errors.generic);
|
|
71
|
-
return
|
|
70
|
+
return exit(EXIT_CODES.ERROR);
|
|
72
71
|
}
|
|
73
72
|
SpinniesManager.succeed('upgrade', {
|
|
74
73
|
text: commands.upgrade.success(targetVersion),
|
|
@@ -85,7 +84,7 @@ const handler = async (args) => {
|
|
|
85
84
|
uiLogger.log('');
|
|
86
85
|
uiLogger.log(commands.upgrade.autoUpgradeMessage);
|
|
87
86
|
}
|
|
88
|
-
return
|
|
87
|
+
return exit(EXIT_CODES.SUCCESS);
|
|
89
88
|
};
|
|
90
89
|
function upgradeBuilder(yargs) {
|
|
91
90
|
yargs
|
|
@@ -113,7 +112,7 @@ const builder = makeYargsBuilder(upgradeBuilder, command, describe, {
|
|
|
113
112
|
const upgradeCommand = {
|
|
114
113
|
command,
|
|
115
114
|
describe,
|
|
116
|
-
handler,
|
|
115
|
+
handler: makeYargsHandlerWithUsageTracking('upgrade', handler),
|
|
117
116
|
builder,
|
|
118
117
|
};
|
|
119
118
|
export default upgradeCommand;
|
package/lang/en.d.ts
CHANGED
|
@@ -1304,6 +1304,30 @@ export declare const commands: {
|
|
|
1304
1304
|
shuttingDown: string;
|
|
1305
1305
|
};
|
|
1306
1306
|
};
|
|
1307
|
+
api: {
|
|
1308
|
+
describe: string;
|
|
1309
|
+
verboseDescribe: string;
|
|
1310
|
+
positionals: {
|
|
1311
|
+
endpoint: {
|
|
1312
|
+
describe: string;
|
|
1313
|
+
};
|
|
1314
|
+
};
|
|
1315
|
+
options: {
|
|
1316
|
+
method: {
|
|
1317
|
+
describe: string;
|
|
1318
|
+
};
|
|
1319
|
+
data: {
|
|
1320
|
+
describe: string;
|
|
1321
|
+
};
|
|
1322
|
+
};
|
|
1323
|
+
requestLog: (method: string, url: string) => string;
|
|
1324
|
+
requestBodyLog: (body: string) => string;
|
|
1325
|
+
responseLog: string;
|
|
1326
|
+
errors: {
|
|
1327
|
+
invalidJson: string;
|
|
1328
|
+
statusLine: (status: number, statusText: string) => string;
|
|
1329
|
+
};
|
|
1330
|
+
};
|
|
1307
1331
|
open: {
|
|
1308
1332
|
describe: string;
|
|
1309
1333
|
options: {
|
|
@@ -1345,6 +1369,7 @@ export declare const commands: {
|
|
|
1345
1369
|
};
|
|
1346
1370
|
errors: {
|
|
1347
1371
|
noProjectConfig: string;
|
|
1372
|
+
unsupportedPlatformVersion: string;
|
|
1348
1373
|
profileExists: (profileName: string) => string;
|
|
1349
1374
|
invalidTargetAccount: string;
|
|
1350
1375
|
noAccountsConfigured: string;
|
|
@@ -1375,6 +1400,7 @@ export declare const commands: {
|
|
|
1375
1400
|
};
|
|
1376
1401
|
errors: {
|
|
1377
1402
|
noProjectConfig: string;
|
|
1403
|
+
unsupportedPlatformVersion: string;
|
|
1378
1404
|
noProfileFound: (profileName: string) => string;
|
|
1379
1405
|
noProfilesFound: string;
|
|
1380
1406
|
failedToDeleteProfile: (profileName: string) => string;
|
|
@@ -1598,6 +1624,7 @@ export declare const commands: {
|
|
|
1598
1624
|
deploy: {
|
|
1599
1625
|
describe: string;
|
|
1600
1626
|
deployBuildIdPrompt: string;
|
|
1627
|
+
profileMessage: (profileName: string, accountId: number) => string;
|
|
1601
1628
|
debug: {
|
|
1602
1629
|
deploying: (path: string) => string;
|
|
1603
1630
|
};
|
|
@@ -1710,6 +1737,7 @@ export declare const commands: {
|
|
|
1710
1737
|
autoDeployDisabled: (deployCommand: string) => string;
|
|
1711
1738
|
};
|
|
1712
1739
|
errors: {
|
|
1740
|
+
noProjectConfig: string;
|
|
1713
1741
|
projectLockedError: string;
|
|
1714
1742
|
};
|
|
1715
1743
|
options: {
|
|
@@ -1904,6 +1932,83 @@ export declare const commands: {
|
|
|
1904
1932
|
noProjectsFound: (accountId: number) => string;
|
|
1905
1933
|
};
|
|
1906
1934
|
};
|
|
1935
|
+
info: {
|
|
1936
|
+
describe: string;
|
|
1937
|
+
verboseDescribe: string;
|
|
1938
|
+
project: {
|
|
1939
|
+
title: (name: string) => string;
|
|
1940
|
+
platformVersion: (version: string) => string;
|
|
1941
|
+
id: (id: number) => string;
|
|
1942
|
+
deployedBuild: (buildId: number) => string;
|
|
1943
|
+
autoDeploy: (enabled: boolean) => string;
|
|
1944
|
+
};
|
|
1945
|
+
app: {
|
|
1946
|
+
title: string;
|
|
1947
|
+
name: (name: string) => string;
|
|
1948
|
+
id: (id: number) => string;
|
|
1949
|
+
uid: (uid: string) => string;
|
|
1950
|
+
authType: (authType: string) => string;
|
|
1951
|
+
distributionType: (distributionType: string) => string;
|
|
1952
|
+
};
|
|
1953
|
+
examples: {
|
|
1954
|
+
default: string;
|
|
1955
|
+
json: string;
|
|
1956
|
+
};
|
|
1957
|
+
viewProjectLink: string;
|
|
1958
|
+
componentsHeader: string;
|
|
1959
|
+
labels: {
|
|
1960
|
+
type: string;
|
|
1961
|
+
uid: string;
|
|
1962
|
+
};
|
|
1963
|
+
errors: {
|
|
1964
|
+
noProjectConfig: string;
|
|
1965
|
+
projectNotFound: (projectName: string, accountId: number) => string;
|
|
1966
|
+
noDeployedBuild: string;
|
|
1967
|
+
unsupportedPlatformVersion: (platformVersion: string) => string;
|
|
1968
|
+
};
|
|
1969
|
+
};
|
|
1970
|
+
delete: {
|
|
1971
|
+
describe: string;
|
|
1972
|
+
verboseDescribe: string;
|
|
1973
|
+
warnings: {
|
|
1974
|
+
irreversibleTitle: string;
|
|
1975
|
+
irreversible: string;
|
|
1976
|
+
};
|
|
1977
|
+
prompts: {
|
|
1978
|
+
selectProject: (accountId: number) => string;
|
|
1979
|
+
confirmDelete: (projectName: string, accountId: number) => string;
|
|
1980
|
+
validation: {
|
|
1981
|
+
projectRequired: string;
|
|
1982
|
+
};
|
|
1983
|
+
};
|
|
1984
|
+
logs: {
|
|
1985
|
+
deleting: (projectName: string) => string;
|
|
1986
|
+
deleted: (projectName: string, accountId: number) => string;
|
|
1987
|
+
cancelled: string;
|
|
1988
|
+
componentsToDeleteUnified: (components: {
|
|
1989
|
+
componentType: string;
|
|
1990
|
+
componentId: string;
|
|
1991
|
+
}[]) => string;
|
|
1992
|
+
componentsToDeleteLegacy: (components: string[]) => string;
|
|
1993
|
+
deletingComponents: (projectName: string) => string;
|
|
1994
|
+
componentsDeleted: (projectName: string) => string;
|
|
1995
|
+
unableToDetermineIfComponentsWereDeleted: (projectName: string) => string;
|
|
1996
|
+
installWarning: (installCount: number) => string;
|
|
1997
|
+
installCountUnknown: string;
|
|
1998
|
+
};
|
|
1999
|
+
errors: {
|
|
2000
|
+
noProjectsFound: (accountId: number) => string;
|
|
2001
|
+
projectNotFound: (projectName: string, accountId: number) => string;
|
|
2002
|
+
deleteFailed: (projectName: string) => string;
|
|
2003
|
+
cannotDelete: (projectName: string, reason: string) => string;
|
|
2004
|
+
noPlatformVersion: string;
|
|
2005
|
+
componentDeletionFailed: (projectName: string) => string;
|
|
2006
|
+
};
|
|
2007
|
+
options: {
|
|
2008
|
+
project: string;
|
|
2009
|
+
force: string;
|
|
2010
|
+
};
|
|
2011
|
+
};
|
|
1907
2012
|
};
|
|
1908
2013
|
sandbox: {
|
|
1909
2014
|
describe: string;
|
|
@@ -3062,11 +3167,6 @@ export declare const lib: {
|
|
|
3062
3167
|
profileTargetAccount: (accountId: number) => string;
|
|
3063
3168
|
profileVariables: string;
|
|
3064
3169
|
};
|
|
3065
|
-
exitIfUsingProfiles: {
|
|
3066
|
-
errors: {
|
|
3067
|
-
noProfileSpecified: string;
|
|
3068
|
-
};
|
|
3069
|
-
};
|
|
3070
3170
|
loadProfile: {
|
|
3071
3171
|
errors: {
|
|
3072
3172
|
noProjectConfig: string;
|
|
@@ -3179,6 +3279,15 @@ export declare const lib: {
|
|
|
3179
3279
|
fileFiltered: (filename: string) => string;
|
|
3180
3280
|
legacyFileDetected: (filename: string, platformVersion: string) => string;
|
|
3181
3281
|
projectDoesNotExist: (accountId: number) => string;
|
|
3282
|
+
workspaceIncluded: (workspaceDir: string, archivePath: string) => string;
|
|
3283
|
+
fileDependencyIncluded: (packageName: string, localPath: string, archivePath: string) => string;
|
|
3284
|
+
malformedPackageJson: (packageJsonPath: string, error: string) => string;
|
|
3285
|
+
workspaceCollision: (archivePath: string, workspaceDir: string, existingWorkspace: string) => string;
|
|
3286
|
+
fileDependencyAlreadyIncluded: (packageName: string, archivePath: string) => string;
|
|
3287
|
+
updatingLockfile: (lockfilePath: string) => string;
|
|
3288
|
+
updatingPackageJsonWorkspaces: (packageJsonPath: string) => string;
|
|
3289
|
+
updatedWorkspaces: (workspaces: string) => string;
|
|
3290
|
+
updatedFileDependency: (packageName: string, relativePath: string) => string;
|
|
3182
3291
|
};
|
|
3183
3292
|
};
|
|
3184
3293
|
importData: {
|
|
@@ -3289,6 +3398,9 @@ export declare const lib: {
|
|
|
3289
3398
|
pakFailure: string;
|
|
3290
3399
|
};
|
|
3291
3400
|
};
|
|
3401
|
+
usageTracking: {
|
|
3402
|
+
transparencyMessage: string;
|
|
3403
|
+
};
|
|
3292
3404
|
configOptions: {
|
|
3293
3405
|
enableOrDisableBooleanFieldPrompt: {
|
|
3294
3406
|
message: (fieldName: string) => string;
|
|
@@ -3377,8 +3489,14 @@ export declare const lib: {
|
|
|
3377
3489
|
promptUtils: {
|
|
3378
3490
|
errors: {
|
|
3379
3491
|
noSelectableChoices: string;
|
|
3492
|
+
userCancelled: string;
|
|
3380
3493
|
};
|
|
3381
3494
|
};
|
|
3495
|
+
projectProfilePrompt: {
|
|
3496
|
+
message: string;
|
|
3497
|
+
exitMessage: string;
|
|
3498
|
+
noValidProfilesMessage: string;
|
|
3499
|
+
};
|
|
3382
3500
|
importDataFilePathPrompt: {
|
|
3383
3501
|
promptContext: string;
|
|
3384
3502
|
promptMessage: string;
|
package/lang/en.js
CHANGED
|
@@ -1320,6 +1320,30 @@ export const commands = {
|
|
|
1320
1320
|
shuttingDown: 'Shutting down MCP server...',
|
|
1321
1321
|
},
|
|
1322
1322
|
},
|
|
1323
|
+
api: {
|
|
1324
|
+
describe: 'Make an authenticated HTTP request to the HubSpot API.',
|
|
1325
|
+
verboseDescribe: `Make an authenticated HTTP request to any HubSpot API that supports PAKs using your CLI authentication.\n\nThis command is intended for testing and exploration of HubSpot APIs. It uses the authentication credentials configured in the CLI to make requests on your behalf.\n\nThe endpoint should be the API path, e.g. ${chalk.bold('/crm/v3/objects/contacts')}. The request will be authenticated using the account specified by ${uiCommandReference('--account')} or the default account.\n\nNote: The available endpoints depend on the scopes granted to your personal access key. If you receive a 403 error, check that your key includes the required scopes for the endpoint you are trying to reach. ${uiLink('Learn more about the HubSpot API', 'https://developers.hubspot.com/docs/api-reference/latest/overview')}`,
|
|
1326
|
+
positionals: {
|
|
1327
|
+
endpoint: {
|
|
1328
|
+
describe: 'API endpoint path (e.g. /crm/v3/objects/contacts)',
|
|
1329
|
+
},
|
|
1330
|
+
},
|
|
1331
|
+
options: {
|
|
1332
|
+
method: {
|
|
1333
|
+
describe: 'HTTP method to use. Defaults to GET, or POST if --data is provided',
|
|
1334
|
+
},
|
|
1335
|
+
data: {
|
|
1336
|
+
describe: 'JSON-formatted request body for POST, PUT, and PATCH requests',
|
|
1337
|
+
},
|
|
1338
|
+
},
|
|
1339
|
+
requestLog: (method, url) => `${chalk.bold(method)} ${url}`,
|
|
1340
|
+
requestBodyLog: (body) => `Request body: ${body}`,
|
|
1341
|
+
responseLog: 'Response:',
|
|
1342
|
+
errors: {
|
|
1343
|
+
invalidJson: 'The value passed to --data is not valid JSON. Please provide a valid JSON string.',
|
|
1344
|
+
statusLine: (status, statusText) => `${chalk.red(`${status} ${statusText}`)}`,
|
|
1345
|
+
},
|
|
1346
|
+
},
|
|
1323
1347
|
open: {
|
|
1324
1348
|
describe: 'Open a HubSpot page in your browser.',
|
|
1325
1349
|
options: {
|
|
@@ -1361,6 +1385,7 @@ export const commands = {
|
|
|
1361
1385
|
},
|
|
1362
1386
|
errors: {
|
|
1363
1387
|
noProjectConfig: 'No project config found. Please run this command from a project directory.',
|
|
1388
|
+
unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
|
|
1364
1389
|
profileExists: (profileName) => `Profile ${chalk.bold(profileName)} already exists. Please choose a different name.`,
|
|
1365
1390
|
invalidTargetAccount: 'Target account is not configured in the CLI',
|
|
1366
1391
|
noAccountsConfigured: 'No accounts configured in the CLI',
|
|
@@ -1391,6 +1416,7 @@ export const commands = {
|
|
|
1391
1416
|
},
|
|
1392
1417
|
errors: {
|
|
1393
1418
|
noProjectConfig: 'No project config found. Please run this command from a project directory.',
|
|
1419
|
+
unsupportedPlatformVersion: 'This command is only available for projects 2025.2 and later.',
|
|
1394
1420
|
noProfileFound: (profileName) => `No profile with filename ${chalk.bold(profileName)} found in your project.`,
|
|
1395
1421
|
noProfilesFound: 'No profiles found in your project.',
|
|
1396
1422
|
failedToDeleteProfile: (profileName) => `Unable to delete profile ${chalk.bold(profileName)}. Please try again.`,
|
|
@@ -1424,7 +1450,7 @@ export const commands = {
|
|
|
1424
1450
|
noRunnableComponents: `No supported components were found in this project. Run ${uiCommandReference('hs project add')} to see a list of available components and add one to your project.`,
|
|
1425
1451
|
accountNotCombined: `\nLocal development of unified apps is currently only compatible with accounts that are opted into the unified apps beta. Make sure that this account is opted in or switch accounts using ${uiCommandReference('hs account use')}.`,
|
|
1426
1452
|
unsupportedAccountFlagLegacy: 'The --project-account and --testing-account flags are not supported for projects with platform versions earlier than 2025.2.',
|
|
1427
|
-
unsupportedAccountFlagV2: 'The --account flag is
|
|
1453
|
+
unsupportedAccountFlagV2: 'The --account flag is not supported for projects with platform versions 2025.2 and newer. Use --testing-account and --project-account flags to specify accounts to use for local dev',
|
|
1428
1454
|
localDevAlreadyRunning: `Another ${uiCommandReference('hs project dev')} process is already running. To proceed with local development of this project, stop the existing process and re-run ${uiCommandReference('hs project dev')}.`,
|
|
1429
1455
|
},
|
|
1430
1456
|
examples: {
|
|
@@ -1614,6 +1640,7 @@ export const commands = {
|
|
|
1614
1640
|
deploy: {
|
|
1615
1641
|
describe: 'Deploy a project build.',
|
|
1616
1642
|
deployBuildIdPrompt: '[--build] Deploy which build?',
|
|
1643
|
+
profileMessage: (profileName, accountId) => `Deploying with ${chalk.bold(profileName)} profile: ${uiAccountDescription(accountId)}`,
|
|
1617
1644
|
debug: {
|
|
1618
1645
|
deploying: (path) => `Deploying project at path: ${path}`,
|
|
1619
1646
|
},
|
|
@@ -1726,6 +1753,7 @@ export const commands = {
|
|
|
1726
1753
|
autoDeployDisabled: (deployCommand) => `Automatic deploys are disabled for this project. Run ${uiCommandReference(deployCommand)} to deploy this build.`,
|
|
1727
1754
|
},
|
|
1728
1755
|
errors: {
|
|
1756
|
+
noProjectConfig: 'No project detected. Run this command from a project directory.',
|
|
1729
1757
|
projectLockedError: `Your project is locked. This may mean that another user is running the ${uiCommandReference('hs project dev')} command for this project. If this is you, unlock the project in Projects UI.`,
|
|
1730
1758
|
},
|
|
1731
1759
|
options: {
|
|
@@ -1927,6 +1955,80 @@ export const commands = {
|
|
|
1927
1955
|
noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
|
|
1928
1956
|
},
|
|
1929
1957
|
},
|
|
1958
|
+
info: {
|
|
1959
|
+
describe: 'Display information about a project, its app, and its components',
|
|
1960
|
+
verboseDescribe: `Display information about a project, its app, and its components\n\nShows the project's platform version, deployed build ID, auto-deploy status, app metadata, and a list of components.\n\nRun ${uiCommandReference('hs project info --json')} to output the result as JSON for scripting.`,
|
|
1961
|
+
project: {
|
|
1962
|
+
title: (name) => `Project: ${name}`,
|
|
1963
|
+
platformVersion: (version) => `Platform Version: ${version}`,
|
|
1964
|
+
id: (id) => `Project ID: ${id}`,
|
|
1965
|
+
deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
|
|
1966
|
+
autoDeploy: (enabled) => `Auto-deploy: ${enabled ? 'Enabled' : 'Disabled'}`,
|
|
1967
|
+
},
|
|
1968
|
+
app: {
|
|
1969
|
+
title: 'App',
|
|
1970
|
+
name: (name) => `Name: ${name}`,
|
|
1971
|
+
id: (id) => `App ID: ${id}`,
|
|
1972
|
+
uid: (uid) => `UID: ${uid}`,
|
|
1973
|
+
authType: (authType) => `Auth Type: ${authType}`,
|
|
1974
|
+
distributionType: (distributionType) => `Distribution: ${distributionType}`,
|
|
1975
|
+
},
|
|
1976
|
+
examples: {
|
|
1977
|
+
default: 'Display project information',
|
|
1978
|
+
json: 'Output as JSON for scripting',
|
|
1979
|
+
},
|
|
1980
|
+
viewProjectLink: 'View project in HubSpot',
|
|
1981
|
+
componentsHeader: 'Components',
|
|
1982
|
+
labels: {
|
|
1983
|
+
type: 'Type',
|
|
1984
|
+
uid: 'UID',
|
|
1985
|
+
},
|
|
1986
|
+
errors: {
|
|
1987
|
+
noProjectConfig: `No project found in this directory.\n\nRun ${uiCommandReference('hs project create')} to start a new project, or change to a directory containing hsproject.json.`,
|
|
1988
|
+
projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
|
|
1989
|
+
noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
|
|
1990
|
+
unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
|
|
1991
|
+
},
|
|
1992
|
+
},
|
|
1993
|
+
delete: {
|
|
1994
|
+
describe: 'Delete a project from the current target account',
|
|
1995
|
+
verboseDescribe: `Delete a project from the current target account\n\nThis will permanently delete the project, all deployed components, and any app installations associated with it. Your local project files will not be affected.`,
|
|
1996
|
+
warnings: {
|
|
1997
|
+
irreversibleTitle: 'Warning: This will permanently delete your project',
|
|
1998
|
+
irreversible: 'Deleting this project will also delete all deployed components and app installations. This action cannot be undone. Your local project files will not be affected.',
|
|
1999
|
+
},
|
|
2000
|
+
prompts: {
|
|
2001
|
+
selectProject: (accountId) => `Select a project to delete in ${uiAccountDescription(accountId)}`,
|
|
2002
|
+
confirmDelete: (projectName, accountId) => `[--force] Delete ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}? This cannot be undone.`,
|
|
2003
|
+
validation: {
|
|
2004
|
+
projectRequired: 'Please select a project to delete',
|
|
2005
|
+
},
|
|
2006
|
+
},
|
|
2007
|
+
logs: {
|
|
2008
|
+
deleting: (projectName) => `Deleting project ${chalk.bold(projectName)}...`,
|
|
2009
|
+
deleted: (projectName, accountId) => `Deleted project ${chalk.bold(projectName)} from ${uiAccountDescription(accountId)}`,
|
|
2010
|
+
cancelled: 'Deletion cancelled',
|
|
2011
|
+
componentsToDeleteUnified: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c.componentId)} (${mapToUserFriendlyName(c.componentType)})`).join('\n')}`,
|
|
2012
|
+
componentsToDeleteLegacy: (components) => `The following deployed components will be deleted:\n${components.map(c => ` - ${chalk.bold(c)}`).join('\n')}`,
|
|
2013
|
+
deletingComponents: (projectName) => `Deleting deployed components from ${chalk.bold(projectName)}...`,
|
|
2014
|
+
componentsDeleted: (projectName) => `Deleted deployed components from ${chalk.bold(projectName)}`,
|
|
2015
|
+
unableToDetermineIfComponentsWereDeleted: (projectName) => `Unable to determine if components were successfully deleted from ${chalk.bold(projectName)}. Please try again.`,
|
|
2016
|
+
installWarning: (installCount) => `This project has ${chalk.bold(String(installCount))} active app ${installCount === 1 ? 'installation' : 'installations'} that will be deleted.`,
|
|
2017
|
+
installCountUnknown: 'Unable to determine the number of active app installations for this project.',
|
|
2018
|
+
},
|
|
2019
|
+
errors: {
|
|
2020
|
+
noProjectsFound: (accountId) => `No projects found for account ${uiAccountDescription(accountId)}`,
|
|
2021
|
+
projectNotFound: (projectName, accountId) => `Project ${chalk.bold(projectName)} not found in ${uiAccountDescription(accountId)}`,
|
|
2022
|
+
deleteFailed: (projectName) => `Failed to delete project ${chalk.bold(projectName)}. Run with --debug for details or try again.`,
|
|
2023
|
+
cannotDelete: (projectName, reason) => `Cannot delete project ${chalk.bold(projectName)}: ${reason}`,
|
|
2024
|
+
noPlatformVersion: 'Unable to determine platform version for project',
|
|
2025
|
+
componentDeletionFailed: (projectName) => `Failed to delete deployed components from ${chalk.bold(projectName)}. The project was not deleted.`,
|
|
2026
|
+
},
|
|
2027
|
+
options: {
|
|
2028
|
+
project: 'name of the project to delete',
|
|
2029
|
+
force: 'skip confirmation prompt',
|
|
2030
|
+
},
|
|
2031
|
+
},
|
|
1930
2032
|
},
|
|
1931
2033
|
sandbox: {
|
|
1932
2034
|
describe: 'Commands for managing sandboxes.',
|
|
@@ -3085,11 +3187,6 @@ export const lib = {
|
|
|
3085
3187
|
profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
|
|
3086
3188
|
profileVariables: 'Profile variables',
|
|
3087
3189
|
},
|
|
3088
|
-
exitIfUsingProfiles: {
|
|
3089
|
-
errors: {
|
|
3090
|
-
noProfileSpecified: `This project is configured to use profiles, but no profile was specified. Target a profile using the ${uiCommandReference('--profile')} flag.`,
|
|
3091
|
-
},
|
|
3092
|
-
},
|
|
3093
3190
|
loadProfile: {
|
|
3094
3191
|
errors: {
|
|
3095
3192
|
noProjectConfig: 'No project config found. Please run this command from a project directory.',
|
|
@@ -3202,6 +3299,15 @@ export const lib = {
|
|
|
3202
3299
|
fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
|
|
3203
3300
|
legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
|
|
3204
3301
|
projectDoesNotExist: (accountId) => `Upload cancelled. Run ${uiCommandReference('hs project upload')} again to create the project in ${uiAccountDescription(accountId)}.`,
|
|
3302
|
+
workspaceIncluded: (workspaceDir, archivePath) => `Including workspace: ${workspaceDir} → ${archivePath}`,
|
|
3303
|
+
fileDependencyIncluded: (packageName, localPath, archivePath) => `Including file: dependency ${packageName}: ${localPath} → ${archivePath}`,
|
|
3304
|
+
malformedPackageJson: (packageJsonPath, error) => `Skipping malformed package.json at ${packageJsonPath}: ${error}`,
|
|
3305
|
+
workspaceCollision: (archivePath, workspaceDir, existingWorkspace) => `Workspace collision: ${archivePath} from ${workspaceDir} and ${existingWorkspace}`,
|
|
3306
|
+
fileDependencyAlreadyIncluded: (packageName, archivePath) => `file: dependency ${packageName} already included as workspace: ${archivePath}`,
|
|
3307
|
+
updatingLockfile: (lockfilePath) => `Updating package-lock.json in archive: ${lockfilePath}`,
|
|
3308
|
+
updatingPackageJsonWorkspaces: (packageJsonPath) => `Updating package.json workspaces in archive: ${packageJsonPath}`,
|
|
3309
|
+
updatedWorkspaces: (workspaces) => ` Updated workspaces: ${workspaces}`,
|
|
3310
|
+
updatedFileDependency: (packageName, relativePath) => ` Updated dependencies.${packageName}: file:${relativePath}`,
|
|
3205
3311
|
},
|
|
3206
3312
|
},
|
|
3207
3313
|
importData: {
|
|
@@ -3312,6 +3418,9 @@ export const lib = {
|
|
|
3312
3418
|
pakFailure: 'Failed to generate personal access key for developer test account',
|
|
3313
3419
|
},
|
|
3314
3420
|
},
|
|
3421
|
+
usageTracking: {
|
|
3422
|
+
transparencyMessage: `HubSpot CLI collects anonymous usage data to improve the product. Run ${uiCommandReference('hs config set --enable-usage-tracking=false', false)} to opt out.\n`,
|
|
3423
|
+
},
|
|
3315
3424
|
configOptions: {
|
|
3316
3425
|
enableOrDisableBooleanFieldPrompt: {
|
|
3317
3426
|
message: (fieldName) => `Choose to enable or disable ${fieldName}`,
|
|
@@ -3400,8 +3509,14 @@ export const lib = {
|
|
|
3400
3509
|
promptUtils: {
|
|
3401
3510
|
errors: {
|
|
3402
3511
|
noSelectableChoices: 'Exiting prompt because no selectable choices are available',
|
|
3512
|
+
userCancelled: 'User cancelled prompt',
|
|
3403
3513
|
},
|
|
3404
3514
|
},
|
|
3515
|
+
projectProfilePrompt: {
|
|
3516
|
+
message: '[--profile] This project is configured to use profiles. Select a profile to use:',
|
|
3517
|
+
exitMessage: `This project is configured to use profiles, but no profile was specified. Try again using ${uiCommandReference('--profile')}`,
|
|
3518
|
+
noValidProfilesMessage: 'There are no valid profiles in this project. Ensure the accounts they are targeting are authenticated and try again.',
|
|
3519
|
+
},
|
|
3405
3520
|
importDataFilePathPrompt: {
|
|
3406
3521
|
promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
|
|
3407
3522
|
promptMessage: '[--file-path] Select the JSON file that will be used to import your data.',
|
package/lib/accountAuth.js
CHANGED
|
@@ -3,7 +3,7 @@ import { getAccessToken, updateConfigWithAccessToken, } from '@hubspot/local-dev
|
|
|
3
3
|
import { toKebabCase } from '@hubspot/local-dev-lib/text';
|
|
4
4
|
import { handleMerge, handleMigration } from './configMigrate.js';
|
|
5
5
|
import { debugError, logError } from './errorHandlers/index.js';
|
|
6
|
-
import {
|
|
6
|
+
import { isPromptExitError } from './errors/PromptExitError.js';
|
|
7
7
|
import { personalAccessKeyPrompt } from './prompts/personalAccessKeyPrompt.js';
|
|
8
8
|
import { cliAccountNamePrompt } from './prompts/accountNamePrompt.js';
|
|
9
9
|
import { setAsDefaultAccountPrompt } from './prompts/setAsDefaultAccountPrompt.js';
|
|
@@ -37,7 +37,7 @@ async function updateConfigWithNewAccount(env, configAlreadyExists, providedPers
|
|
|
37
37
|
return updatedConfig;
|
|
38
38
|
}
|
|
39
39
|
catch (e) {
|
|
40
|
-
if (e
|
|
40
|
+
if (isPromptExitError(e)) {
|
|
41
41
|
throw e;
|
|
42
42
|
}
|
|
43
43
|
debugError(e);
|
package/lib/buildAccount.js
CHANGED
|
@@ -4,7 +4,7 @@ import { uiLogger } from './ui/logger.js';
|
|
|
4
4
|
import { createDeveloperTestAccount, fetchDeveloperTestAccountGateSyncStatus, generateDeveloperTestAccountPersonalAccessKey, } from '@hubspot/local-dev-lib/api/developerTestAccounts';
|
|
5
5
|
import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
|
|
6
6
|
import { createV2Sandbox, getSandboxPersonalAccessKey, } from '@hubspot/local-dev-lib/api/sandboxHubs';
|
|
7
|
-
import {
|
|
7
|
+
import { isPromptExitError } from './errors/PromptExitError.js';
|
|
8
8
|
import { personalAccessKeyPrompt } from './prompts/personalAccessKeyPrompt.js';
|
|
9
9
|
import { createDeveloperTestAccountConfigPrompt } from './prompts/createDeveloperTestAccountConfigPrompt.js';
|
|
10
10
|
import { cliAccountNamePrompt } from './prompts/accountNamePrompt.js';
|
|
@@ -128,7 +128,7 @@ export async function buildDeveloperTestAccount(testAccountName, parentAccountCo
|
|
|
128
128
|
await saveAccountToConfig(developerTestAccountId, testAccountName, env, developerTestAccountPersonalAccessKey);
|
|
129
129
|
}
|
|
130
130
|
catch (err) {
|
|
131
|
-
if (err
|
|
131
|
+
if (isPromptExitError(err)) {
|
|
132
132
|
throw err;
|
|
133
133
|
}
|
|
134
134
|
logError(err);
|
|
@@ -174,7 +174,7 @@ export async function buildV2Sandbox(sandboxName, parentAccountConfig, sandboxTy
|
|
|
174
174
|
await saveAccountToConfig(sandbox.sandboxHubId, sandboxName, env, pak, force);
|
|
175
175
|
}
|
|
176
176
|
catch (err) {
|
|
177
|
-
if (err
|
|
177
|
+
if (isPromptExitError(err)) {
|
|
178
178
|
throw err;
|
|
179
179
|
}
|
|
180
180
|
logError(err);
|
package/lib/constants.d.ts
CHANGED
|
@@ -78,7 +78,6 @@ export declare const APP_AUTH_TYPES: {
|
|
|
78
78
|
export declare const FEATURES: {
|
|
79
79
|
readonly UNIFIED_APPS: "Developers:UnifiedApps:PrivateBeta";
|
|
80
80
|
readonly APP_EVENTS: "Developers:UnifiedApps:AppEventsAccess";
|
|
81
|
-
readonly APPS_HOME: "UIE:AppHome";
|
|
82
81
|
readonly THEME_MIGRATION_2025_2: "Developers:ProjectThemeMigrations:2025.2";
|
|
83
82
|
readonly AGENT_TOOLS: "ThirdPartyAgentTools";
|
|
84
83
|
};
|
package/lib/constants.js
CHANGED
|
@@ -70,7 +70,6 @@ export const APP_AUTH_TYPES = {
|
|
|
70
70
|
export const FEATURES = {
|
|
71
71
|
UNIFIED_APPS: 'Developers:UnifiedApps:PrivateBeta',
|
|
72
72
|
APP_EVENTS: 'Developers:UnifiedApps:AppEventsAccess',
|
|
73
|
-
APPS_HOME: 'UIE:AppHome',
|
|
74
73
|
THEME_MIGRATION_2025_2: 'Developers:ProjectThemeMigrations:2025.2',
|
|
75
74
|
AGENT_TOOLS: 'ThirdPartyAgentTools',
|
|
76
75
|
};
|
package/lib/doctor/Diagnosis.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getLabels } from '@hubspot/local-dev-lib/logger';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { helpers } from '../interpolation.js';
|
|
4
4
|
import { uiAccountDescription } from '../ui/index.js';
|
|
@@ -10,11 +10,11 @@ export class Diagnosis {
|
|
|
10
10
|
errorCount = 0;
|
|
11
11
|
warningCount = 0;
|
|
12
12
|
constructor({ diagnosticInfo, accountId }) {
|
|
13
|
-
const
|
|
13
|
+
const labels = getLabels();
|
|
14
14
|
this.prefixes = {
|
|
15
|
-
success: chalk.green(
|
|
16
|
-
error: chalk.red(
|
|
17
|
-
warning: helpers.orange(
|
|
15
|
+
success: chalk.green(labels.success),
|
|
16
|
+
error: chalk.red(labels.error),
|
|
17
|
+
warning: helpers.orange(labels.warning),
|
|
18
18
|
};
|
|
19
19
|
this.diagnosis = {
|
|
20
20
|
cli: {
|
|
@@ -7,11 +7,12 @@ import util from 'util';
|
|
|
7
7
|
import { isProjectValidationError } from '../errors/ProjectValidationError.js';
|
|
8
8
|
export function logError(error, context) {
|
|
9
9
|
debugError(error, context);
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
// This should be right after debugError. Add anything else below it
|
|
11
|
+
if (shouldSuppressError(error, context)) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
|
-
if (
|
|
14
|
+
if (isProjectValidationError(error)) {
|
|
15
|
+
uiLogger.error(error.message);
|
|
15
16
|
return;
|
|
16
17
|
}
|
|
17
18
|
if (isHubSpotHttpError(error)) {
|
|
@@ -3,6 +3,7 @@ import { uiLogger } from '../ui/logger.js';
|
|
|
3
3
|
import { PLATFORM_VERSION_ERROR_TYPES } from '../constants.js';
|
|
4
4
|
import { lib } from '../../lang/en.js';
|
|
5
5
|
import { uiAccountDescription, uiLine, uiLink } from '../ui/index.js';
|
|
6
|
+
import { isPromptExitError } from '../errors/PromptExitError.js';
|
|
6
7
|
function createPlatformVersionError(err, subCategory) {
|
|
7
8
|
let translationKey = 'unspecifiedPlatformVersion';
|
|
8
9
|
let platformVersion = 'unspecified platformVersion';
|
|
@@ -27,6 +28,9 @@ function createPlatformVersionError(err, subCategory) {
|
|
|
27
28
|
uiLine();
|
|
28
29
|
}
|
|
29
30
|
export function shouldSuppressError(err, context) {
|
|
31
|
+
if (isPromptExitError(err)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
30
34
|
if (isMissingScopeError(err)) {
|
|
31
35
|
uiLogger.error(lib.errorHandlers.suppressErrors.missingScopeError(context?.request || 'request', context?.accountId ? uiAccountDescription(context.accountId) : ''));
|
|
32
36
|
return true;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { ExitCode } from '../../types/Yargs.js';
|
|
1
2
|
export declare class PromptExitError extends Error {
|
|
2
|
-
exitCode:
|
|
3
|
-
constructor(message: string, exitCode:
|
|
3
|
+
exitCode: ExitCode;
|
|
4
|
+
constructor(message: string, exitCode: ExitCode);
|
|
4
5
|
}
|
|
6
|
+
export declare function isPromptExitError(e: unknown): e is PromptExitError;
|