@hubspot/cli 8.0.11-experimental.0 → 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.js +17 -17
- 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 +2 -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 +94 -7
- package/lang/en.js +94 -10
- 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 +3 -20
- package/lib/projects/projectInfo.js +32 -54
- 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/mcp-server/tools/cms/HsCreateTemplateTool.d.ts +1 -1
- package/package.json +10 -5
- package/types/LocalDev.d.ts +5 -0
- package/types/Projects.d.ts +19 -0
- package/types/Yargs.d.ts +18 -1
- package/api/__tests__/migrate.test.d.ts +0 -1
- package/api/__tests__/migrate.test.js +0 -199
- package/commands/__tests__/account.test.d.ts +0 -1
- package/commands/__tests__/account.test.js +0 -69
- package/commands/__tests__/auth.test.d.ts +0 -1
- package/commands/__tests__/auth.test.js +0 -43
- package/commands/__tests__/cms.test.d.ts +0 -1
- package/commands/__tests__/cms.test.js +0 -87
- package/commands/__tests__/config.test.d.ts +0 -1
- package/commands/__tests__/config.test.js +0 -44
- package/commands/__tests__/customObject.test.d.ts +0 -1
- package/commands/__tests__/customObject.test.js +0 -68
- package/commands/__tests__/doctor.test.d.ts +0 -1
- package/commands/__tests__/doctor.test.js +0 -132
- package/commands/__tests__/feedback.test.d.ts +0 -1
- package/commands/__tests__/feedback.test.js +0 -24
- package/commands/__tests__/filemanager.test.d.ts +0 -1
- package/commands/__tests__/filemanager.test.js +0 -45
- package/commands/__tests__/getStarted.test.d.ts +0 -1
- package/commands/__tests__/getStarted.test.js +0 -173
- package/commands/__tests__/hubdb.test.d.ts +0 -1
- package/commands/__tests__/hubdb.test.js +0 -50
- package/commands/__tests__/init.test.d.ts +0 -1
- package/commands/__tests__/init.test.js +0 -42
- package/commands/__tests__/mcp.test.d.ts +0 -1
- package/commands/__tests__/mcp.test.js +0 -46
- package/commands/__tests__/open.test.d.ts +0 -1
- package/commands/__tests__/open.test.js +0 -58
- package/commands/__tests__/project.test.d.ts +0 -1
- package/commands/__tests__/project.test.js +0 -125
- package/commands/__tests__/sandbox.test.d.ts +0 -1
- package/commands/__tests__/sandbox.test.js +0 -44
- package/commands/__tests__/secret.test.d.ts +0 -1
- package/commands/__tests__/secret.test.js +0 -49
- package/commands/__tests__/testAccount.test.d.ts +0 -1
- package/commands/__tests__/testAccount.test.js +0 -57
- package/commands/__tests__/upgrade.test.d.ts +0 -1
- package/commands/__tests__/upgrade.test.js +0 -309
- package/commands/account/__tests__/auth.test.d.ts +0 -1
- package/commands/account/__tests__/auth.test.js +0 -206
- package/commands/account/__tests__/clean.test.d.ts +0 -1
- package/commands/account/__tests__/clean.test.js +0 -28
- package/commands/account/__tests__/createOverride.test.d.ts +0 -1
- package/commands/account/__tests__/createOverride.test.js +0 -32
- package/commands/account/__tests__/info.test.d.ts +0 -1
- package/commands/account/__tests__/info.test.js +0 -28
- package/commands/account/__tests__/list.test.d.ts +0 -1
- package/commands/account/__tests__/list.test.js +0 -153
- package/commands/account/__tests__/remove.test.d.ts +0 -1
- package/commands/account/__tests__/remove.test.js +0 -36
- package/commands/account/__tests__/removeOverride.d.ts +0 -1
- package/commands/account/__tests__/removeOverride.js +0 -25
- package/commands/account/__tests__/rename.test.d.ts +0 -1
- package/commands/account/__tests__/rename.test.js +0 -82
- package/commands/account/__tests__/use.test.d.ts +0 -1
- package/commands/account/__tests__/use.test.js +0 -170
- package/commands/app/__tests__/migrate.test.d.ts +0 -1
- package/commands/app/__tests__/migrate.test.js +0 -111
- package/commands/app/secret/__tests__/add.test.d.ts +0 -1
- package/commands/app/secret/__tests__/add.test.js +0 -140
- package/commands/app/secret/__tests__/delete.test.d.ts +0 -1
- package/commands/app/secret/__tests__/delete.test.js +0 -28
- package/commands/app/secret/__tests__/list.test.d.ts +0 -1
- package/commands/app/secret/__tests__/list.test.js +0 -25
- package/commands/app/secret/__tests__/update.test.d.ts +0 -1
- package/commands/app/secret/__tests__/update.test.js +0 -28
- package/commands/cms/__tests__/delete.test.d.ts +0 -1
- package/commands/cms/__tests__/delete.test.js +0 -39
- package/commands/cms/__tests__/fetch.test.d.ts +0 -1
- package/commands/cms/__tests__/fetch.test.js +0 -156
- package/commands/cms/__tests__/function.test.d.ts +0 -1
- package/commands/cms/__tests__/function.test.js +0 -50
- package/commands/cms/__tests__/lint.test.d.ts +0 -1
- package/commands/cms/__tests__/lint.test.js +0 -33
- package/commands/cms/__tests__/list.test.d.ts +0 -1
- package/commands/cms/__tests__/list.test.js +0 -42
- package/commands/cms/__tests__/module.test.d.ts +0 -1
- package/commands/cms/__tests__/module.test.js +0 -45
- package/commands/cms/__tests__/mv.test.d.ts +0 -1
- package/commands/cms/__tests__/mv.test.js +0 -46
- package/commands/cms/__tests__/theme.test.d.ts +0 -1
- package/commands/cms/__tests__/theme.test.js +0 -54
- package/commands/cms/__tests__/upload.test.d.ts +0 -1
- package/commands/cms/__tests__/upload.test.js +0 -312
- package/commands/cms/__tests__/watch.test.d.ts +0 -1
- package/commands/cms/__tests__/watch.test.js +0 -204
- package/commands/cms/function/__tests__/logs.test.d.ts +0 -1
- package/commands/cms/function/__tests__/logs.test.js +0 -70
- package/commands/cms/theme/__tests__/generate-selectors.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/generate-selectors.test.js +0 -28
- package/commands/cms/theme/__tests__/marketplace-validate.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/marketplace-validate.test.js +0 -36
- package/commands/cms/theme/__tests__/preview.test.d.ts +0 -1
- package/commands/cms/theme/__tests__/preview.test.js +0 -54
- package/commands/customObject/__tests__/create.test.d.ts +0 -1
- package/commands/customObject/__tests__/create.test.js +0 -40
- package/commands/customObject/__tests__/createSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/createSchema.test.js +0 -28
- package/commands/customObject/__tests__/deleteSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/deleteSchema.test.js +0 -42
- package/commands/customObject/__tests__/fetch-all-schemas.test.d.ts +0 -1
- package/commands/customObject/__tests__/fetch-all-schemas.test.js +0 -41
- package/commands/customObject/__tests__/fetchSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/fetchSchema.test.js +0 -45
- package/commands/customObject/__tests__/listSchemas.test.d.ts +0 -1
- package/commands/customObject/__tests__/listSchemas.test.js +0 -29
- package/commands/customObject/__tests__/updateSchema.test.d.ts +0 -1
- package/commands/customObject/__tests__/updateSchema.test.js +0 -40
- package/commands/filemanager/__tests__/fetch.test.d.ts +0 -1
- package/commands/filemanager/__tests__/fetch.test.js +0 -32
- package/commands/filemanager/__tests__/upload.test.d.ts +0 -1
- package/commands/filemanager/__tests__/upload.test.js +0 -191
- package/commands/hubdb/__tests__/clear.test.d.ts +0 -1
- package/commands/hubdb/__tests__/clear.test.js +0 -28
- package/commands/hubdb/__tests__/create.test.d.ts +0 -1
- package/commands/hubdb/__tests__/create.test.js +0 -28
- package/commands/hubdb/__tests__/delete.test.d.ts +0 -1
- package/commands/hubdb/__tests__/delete.test.js +0 -28
- package/commands/hubdb/__tests__/fetch.test.d.ts +0 -1
- package/commands/hubdb/__tests__/fetch.test.js +0 -28
- package/commands/hubdb/__tests__/list.test.d.ts +0 -1
- package/commands/hubdb/__tests__/list.test.js +0 -88
- package/commands/mcp/__tests__/setup.test.d.ts +0 -1
- package/commands/mcp/__tests__/setup.test.js +0 -26
- package/commands/mcp/__tests__/start.test.d.ts +0 -1
- package/commands/mcp/__tests__/start.test.js +0 -144
- package/commands/project/__tests__/add.test.d.ts +0 -1
- package/commands/project/__tests__/add.test.js +0 -107
- package/commands/project/__tests__/create.test.d.ts +0 -1
- package/commands/project/__tests__/create.test.js +0 -97
- package/commands/project/__tests__/deploy.test.d.ts +0 -1
- package/commands/project/__tests__/deploy.test.js +0 -307
- package/commands/project/__tests__/dev.test.d.ts +0 -1
- package/commands/project/__tests__/dev.test.js +0 -273
- package/commands/project/__tests__/devUnifiedFlow.test.d.ts +0 -1
- package/commands/project/__tests__/devUnifiedFlow.test.js +0 -434
- package/commands/project/__tests__/download.test.d.ts +0 -1
- package/commands/project/__tests__/download.test.js +0 -39
- package/commands/project/__tests__/info.test.d.ts +0 -1
- package/commands/project/__tests__/info.test.js +0 -145
- package/commands/project/__tests__/installDeps.test.d.ts +0 -1
- package/commands/project/__tests__/installDeps.test.js +0 -140
- package/commands/project/__tests__/lint.test.d.ts +0 -1
- package/commands/project/__tests__/lint.test.js +0 -704
- package/commands/project/__tests__/list.test.d.ts +0 -1
- package/commands/project/__tests__/list.test.js +0 -31
- package/commands/project/__tests__/listBuilds.test.d.ts +0 -1
- package/commands/project/__tests__/listBuilds.test.js +0 -38
- package/commands/project/__tests__/logs.test.d.ts +0 -1
- package/commands/project/__tests__/logs.test.js +0 -202
- package/commands/project/__tests__/migrate.test.d.ts +0 -1
- package/commands/project/__tests__/migrate.test.js +0 -106
- package/commands/project/__tests__/open.test.d.ts +0 -1
- package/commands/project/__tests__/open.test.js +0 -39
- package/commands/project/__tests__/profile.test.d.ts +0 -1
- package/commands/project/__tests__/profile.test.js +0 -42
- package/commands/project/__tests__/updateDeps.test.d.ts +0 -1
- package/commands/project/__tests__/updateDeps.test.js +0 -140
- package/commands/project/__tests__/upload.test.d.ts +0 -1
- package/commands/project/__tests__/upload.test.js +0 -234
- package/commands/project/__tests__/validate.test.d.ts +0 -1
- package/commands/project/__tests__/validate.test.js +0 -381
- package/commands/project/__tests__/watch.test.d.ts +0 -1
- package/commands/project/__tests__/watch.test.js +0 -35
- package/commands/sandbox/__tests__/create.test.d.ts +0 -1
- package/commands/sandbox/__tests__/create.test.js +0 -198
- package/commands/sandbox/__tests__/delete.test.d.ts +0 -1
- package/commands/sandbox/__tests__/delete.test.js +0 -31
- package/commands/secret/__tests__/addSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/addSecret.test.js +0 -162
- package/commands/secret/__tests__/deleteSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/deleteSecret.test.js +0 -41
- package/commands/secret/__tests__/listSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/listSecret.test.js +0 -29
- package/commands/secret/__tests__/updateSecret.test.d.ts +0 -1
- package/commands/secret/__tests__/updateSecret.test.js +0 -29
- package/commands/testAccount/__tests__/create.test.d.ts +0 -1
- package/commands/testAccount/__tests__/create.test.js +0 -106
- package/commands/testAccount/__tests__/createConfig.test.d.ts +0 -1
- package/commands/testAccount/__tests__/createConfig.test.js +0 -32
- package/commands/testAccount/__tests__/delete.test.d.ts +0 -1
- package/commands/testAccount/__tests__/delete.test.js +0 -29
- package/commands/testAccount/__tests__/importData.test.d.ts +0 -1
- package/commands/testAccount/__tests__/importData.test.js +0 -92
- package/lib/__tests__/CLIWebSocketServer.test.d.ts +0 -1
- package/lib/__tests__/CLIWebSocketServer.test.js +0 -252
- package/lib/__tests__/accountAuth.test.d.ts +0 -1
- package/lib/__tests__/accountAuth.test.js +0 -258
- package/lib/__tests__/accountTypes.test.d.ts +0 -1
- package/lib/__tests__/accountTypes.test.js +0 -98
- package/lib/__tests__/buildAccount.test.d.ts +0 -1
- package/lib/__tests__/buildAccount.test.js +0 -211
- package/lib/__tests__/cliUpgradeUtils.test.d.ts +0 -1
- package/lib/__tests__/cliUpgradeUtils.test.js +0 -131
- package/lib/__tests__/commandSuggestion.test.d.ts +0 -1
- package/lib/__tests__/commandSuggestion.test.js +0 -121
- package/lib/__tests__/commonOpts.test.d.ts +0 -1
- package/lib/__tests__/commonOpts.test.js +0 -80
- package/lib/__tests__/dependencyManagement.test.d.ts +0 -1
- package/lib/__tests__/dependencyManagement.test.js +0 -1067
- package/lib/__tests__/developerTestAccounts.test.d.ts +0 -1
- package/lib/__tests__/developerTestAccounts.test.js +0 -156
- package/lib/__tests__/hasFeature.test.d.ts +0 -1
- package/lib/__tests__/hasFeature.test.js +0 -167
- package/lib/__tests__/http.test.d.ts +0 -1
- package/lib/__tests__/http.test.js +0 -40
- package/lib/__tests__/importData.test.d.ts +0 -1
- package/lib/__tests__/importData.test.js +0 -98
- package/lib/__tests__/npmCli.test.d.ts +0 -1
- package/lib/__tests__/npmCli.test.js +0 -84
- package/lib/__tests__/oauth.test.d.ts +0 -1
- package/lib/__tests__/oauth.test.js +0 -109
- package/lib/__tests__/parsing.test.d.ts +0 -1
- package/lib/__tests__/parsing.test.js +0 -34
- package/lib/__tests__/polling.test.d.ts +0 -1
- package/lib/__tests__/polling.test.js +0 -76
- package/lib/__tests__/process.test.d.ts +0 -1
- package/lib/__tests__/process.test.js +0 -89
- package/lib/__tests__/sandboxes.test.d.ts +0 -1
- package/lib/__tests__/sandboxes.test.js +0 -128
- package/lib/__tests__/serverlessLogs.test.d.ts +0 -1
- package/lib/__tests__/serverlessLogs.test.js +0 -163
- package/lib/__tests__/usageTracking.test.d.ts +0 -1
- package/lib/__tests__/usageTracking.test.js +0 -197
- package/lib/__tests__/validation.test.d.ts +0 -1
- package/lib/__tests__/validation.test.js +0 -143
- package/lib/__tests__/yargsUtils.test.d.ts +0 -1
- package/lib/__tests__/yargsUtils.test.js +0 -124
- package/lib/app/__tests__/migrate.test.d.ts +0 -1
- package/lib/app/__tests__/migrate.test.js +0 -638
- package/lib/doctor/__tests__/Diagnosis.test.d.ts +0 -1
- package/lib/doctor/__tests__/Diagnosis.test.js +0 -84
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.d.ts +0 -1
- package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +0 -177
- package/lib/doctor/__tests__/Doctor.test.d.ts +0 -1
- package/lib/doctor/__tests__/Doctor.test.js +0 -560
- package/lib/errorHandlers/__tests__/index.test.d.ts +0 -1
- package/lib/errorHandlers/__tests__/index.test.js +0 -278
- package/lib/mcp/__tests__/setup.test.d.ts +0 -1
- package/lib/mcp/__tests__/setup.test.js +0 -523
- package/lib/middleware/__tests__/commandTargetingUtils.test.d.ts +0 -1
- package/lib/middleware/__tests__/commandTargetingUtils.test.js +0 -99
- package/lib/middleware/__tests__/configMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/configMiddleware.test.js +0 -118
- package/lib/middleware/__tests__/gitMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/gitMiddleware.test.js +0 -43
- package/lib/middleware/__tests__/requestMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/requestMiddleware.test.js +0 -15
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +0 -44
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.d.ts +0 -1
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -39
- package/lib/projects/__tests__/AppDevModeInterface.test.d.ts +0 -1
- package/lib/projects/__tests__/AppDevModeInterface.test.js +0 -541
- package/lib/projects/__tests__/DevServerManager.test.d.ts +0 -1
- package/lib/projects/__tests__/DevServerManager.test.js +0 -185
- package/lib/projects/__tests__/DevSessionManager.test.d.ts +0 -1
- package/lib/projects/__tests__/DevSessionManager.test.js +0 -250
- package/lib/projects/__tests__/LocalDevProcess.test.d.ts +0 -1
- package/lib/projects/__tests__/LocalDevProcess.test.js +0 -481
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.d.ts +0 -1
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -231
- package/lib/projects/__tests__/ProjectLogsManager.test.d.ts +0 -1
- package/lib/projects/__tests__/ProjectLogsManager.test.js +0 -302
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.d.ts +0 -1
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -160
- package/lib/projects/__tests__/components.test.d.ts +0 -1
- package/lib/projects/__tests__/components.test.js +0 -440
- package/lib/projects/__tests__/deploy.test.d.ts +0 -1
- package/lib/projects/__tests__/deploy.test.js +0 -231
- package/lib/projects/__tests__/localDevProjectHelpers.test.d.ts +0 -1
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +0 -120
- package/lib/projects/__tests__/platformVersion.test.d.ts +0 -1
- package/lib/projects/__tests__/platformVersion.test.js +0 -63
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +0 -1
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +0 -328
- package/lib/projects/__tests__/projectInfo.test.d.ts +0 -1
- package/lib/projects/__tests__/projectInfo.test.js +0 -114
- package/lib/projects/__tests__/projectProfiles.test.d.ts +0 -1
- package/lib/projects/__tests__/projectProfiles.test.js +0 -441
- package/lib/projects/__tests__/projects.test.d.ts +0 -1
- package/lib/projects/__tests__/projects.test.js +0 -58
- package/lib/projects/__tests__/structure.test.d.ts +0 -1
- package/lib/projects/__tests__/structure.test.js +0 -210
- package/lib/projects/__tests__/uieLinting.test.d.ts +0 -1
- package/lib/projects/__tests__/uieLinting.test.js +0 -631
- package/lib/projects/__tests__/upload.test.d.ts +0 -1
- package/lib/projects/__tests__/upload.test.js +0 -183
- package/lib/projects/add/__tests__/legacyAddComponent.test.d.ts +0 -1
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -245
- package/lib/projects/add/__tests__/v2AddComponent.test.d.ts +0 -1
- package/lib/projects/add/__tests__/v2AddComponent.test.js +0 -343
- package/lib/projects/create/__tests__/legacy.test.d.ts +0 -1
- package/lib/projects/create/__tests__/legacy.test.js +0 -72
- package/lib/projects/create/__tests__/v2.test.d.ts +0 -1
- package/lib/projects/create/__tests__/v2.test.js +0 -257
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +0 -157
- package/lib/prompts/__tests__/createFunctionPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createFunctionPrompt.test.js +0 -129
- package/lib/prompts/__tests__/createModulePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createModulePrompt.test.js +0 -187
- package/lib/prompts/__tests__/createTemplatePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/createTemplatePrompt.test.js +0 -102
- package/lib/prompts/__tests__/downloadProjectPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/downloadProjectPrompt.test.js +0 -31
- package/lib/prompts/__tests__/projectAddPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/projectAddPrompt.test.js +0 -143
- package/lib/prompts/__tests__/projectsLogsPrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/projectsLogsPrompt.test.js +0 -37
- package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.d.ts +0 -1
- package/lib/prompts/__tests__/selectProjectTemplatePrompt.test.js +0 -160
- package/lib/theme/__tests__/migrate.test.d.ts +0 -1
- package/lib/theme/__tests__/migrate.test.js +0 -247
- package/lib/ui/__tests__/SpinniesManager.test.d.ts +0 -1
- package/lib/ui/__tests__/SpinniesManager.test.js +0 -488
- package/lib/ui/__tests__/removeAnsiCodes.test.d.ts +0 -1
- package/lib/ui/__tests__/removeAnsiCodes.test.js +0 -84
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +0 -254
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +0 -227
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +0 -208
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +0 -186
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +0 -124
- package/mcp-server/tools/cms/__tests__/HsListTool.test.d.ts +0 -1
- package/mcp-server/tools/cms/__tests__/HsListTool.test.js +0 -124
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +0 -157
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +0 -131
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +0 -461
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +0 -125
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -125
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +0 -210
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +0 -146
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +0 -124
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +0 -307
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +0 -242
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +0 -209
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +0 -158
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +0 -187
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.d.ts +0 -1
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +0 -118
- package/mcp-server/utils/__tests__/command.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/command.test.js +0 -275
- package/mcp-server/utils/__tests__/content.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/content.test.js +0 -164
- package/mcp-server/utils/__tests__/feedbackTracking.test.d.ts +0 -1
- package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -69
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: {
|
|
@@ -1929,9 +1957,9 @@ export const commands = {
|
|
|
1929
1957
|
},
|
|
1930
1958
|
info: {
|
|
1931
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.`,
|
|
1932
1961
|
project: {
|
|
1933
|
-
title:
|
|
1934
|
-
name: (name) => `Name: ${name}`,
|
|
1962
|
+
title: (name) => `Project: ${name}`,
|
|
1935
1963
|
platformVersion: (version) => `Platform Version: ${version}`,
|
|
1936
1964
|
id: (id) => `Project ID: ${id}`,
|
|
1937
1965
|
deployedBuild: (buildId) => `Deployed Build: #${buildId}`,
|
|
@@ -1945,6 +1973,10 @@ export const commands = {
|
|
|
1945
1973
|
authType: (authType) => `Auth Type: ${authType}`,
|
|
1946
1974
|
distributionType: (distributionType) => `Distribution: ${distributionType}`,
|
|
1947
1975
|
},
|
|
1976
|
+
examples: {
|
|
1977
|
+
default: 'Display project information',
|
|
1978
|
+
json: 'Output as JSON for scripting',
|
|
1979
|
+
},
|
|
1948
1980
|
viewProjectLink: 'View project in HubSpot',
|
|
1949
1981
|
componentsHeader: 'Components',
|
|
1950
1982
|
labels: {
|
|
@@ -1952,12 +1984,51 @@ export const commands = {
|
|
|
1952
1984
|
uid: 'UID',
|
|
1953
1985
|
},
|
|
1954
1986
|
errors: {
|
|
1955
|
-
noProjectConfig:
|
|
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.`,
|
|
1956
1988
|
projectNotFound: (projectName, accountId) => `Project "${projectName}" was not found in account ${uiAccountDescription(accountId)}. Make sure the project has been uploaded at least once.`,
|
|
1957
|
-
noDeployedBuild:
|
|
1989
|
+
noDeployedBuild: `This project has not been deployed yet.\n\nRun ${uiCommandReference('hs project deploy')} to deploy your project.`,
|
|
1958
1990
|
unsupportedPlatformVersion: (platformVersion) => `This command is not supported for platform version ${chalk.bold(platformVersion)}. Please upgrade to 2025.2 or later.`,
|
|
1959
1991
|
},
|
|
1960
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
|
+
},
|
|
1961
2032
|
},
|
|
1962
2033
|
sandbox: {
|
|
1963
2034
|
describe: 'Commands for managing sandboxes.',
|
|
@@ -3116,11 +3187,6 @@ export const lib = {
|
|
|
3116
3187
|
profileTargetAccount: (accountId) => `Targeting ${uiAccountDescription(accountId)}`,
|
|
3117
3188
|
profileVariables: 'Profile variables',
|
|
3118
3189
|
},
|
|
3119
|
-
exitIfUsingProfiles: {
|
|
3120
|
-
errors: {
|
|
3121
|
-
noProfileSpecified: `This project is configured to use profiles, but no profile was specified. Target a profile using the ${uiCommandReference('--profile')} flag.`,
|
|
3122
|
-
},
|
|
3123
|
-
},
|
|
3124
3190
|
loadProfile: {
|
|
3125
3191
|
errors: {
|
|
3126
3192
|
noProjectConfig: 'No project config found. Please run this command from a project directory.',
|
|
@@ -3233,6 +3299,15 @@ export const lib = {
|
|
|
3233
3299
|
fileFiltered: (filename) => `Ignore rule triggered for "${filename}"`,
|
|
3234
3300
|
legacyFileDetected: (filename, platformVersion) => `The ${chalk.bold(filename)} file is not supported on platform version ${chalk.bold(platformVersion)} and will be ignored.`,
|
|
3235
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}`,
|
|
3236
3311
|
},
|
|
3237
3312
|
},
|
|
3238
3313
|
importData: {
|
|
@@ -3343,6 +3418,9 @@ export const lib = {
|
|
|
3343
3418
|
pakFailure: 'Failed to generate personal access key for developer test account',
|
|
3344
3419
|
},
|
|
3345
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
|
+
},
|
|
3346
3424
|
configOptions: {
|
|
3347
3425
|
enableOrDisableBooleanFieldPrompt: {
|
|
3348
3426
|
message: (fieldName) => `Choose to enable or disable ${fieldName}`,
|
|
@@ -3431,8 +3509,14 @@ export const lib = {
|
|
|
3431
3509
|
promptUtils: {
|
|
3432
3510
|
errors: {
|
|
3433
3511
|
noSelectableChoices: 'Exiting prompt because no selectable choices are available',
|
|
3512
|
+
userCancelled: 'User cancelled prompt',
|
|
3434
3513
|
},
|
|
3435
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
|
+
},
|
|
3436
3520
|
importDataFilePathPrompt: {
|
|
3437
3521
|
promptContext: `To view the JSON schema for data imports, visit ${uiLink('the docs', 'https://developers.hubspot.com/docs/guides/api/crm/imports')}`,
|
|
3438
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;
|
package/lib/hasFeature.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { http } from '@hubspot/local-dev-lib/http';
|
|
2
2
|
import { fetchEnabledFeatures } from '@hubspot/local-dev-lib/api/localDevAuth';
|
|
3
|
-
|
|
4
|
-
const FEATURES_THAT_DEFAULT_ON = [FEATURES.APPS_HOME];
|
|
3
|
+
const FEATURES_THAT_DEFAULT_ON = [];
|
|
5
4
|
export async function hasFeature(accountId, feature) {
|
|
6
5
|
const { data: { enabledFeatures }, } = await fetchEnabledFeatures(accountId);
|
|
7
6
|
if (enabledFeatures[feature] === undefined &&
|
|
@@ -42,6 +42,10 @@ export async function autoUpdateCLI(argv) {
|
|
|
42
42
|
debugError(e);
|
|
43
43
|
}
|
|
44
44
|
const cliUpgradeInfo = getCliUpgradeInfo();
|
|
45
|
+
// Ignore all update notifications if the current version is a pre-release (contains a hyphen)
|
|
46
|
+
if (cliUpgradeInfo.current && cliUpgradeInfo.current.includes('-')) {
|
|
47
|
+
showManualInstallHelp = false;
|
|
48
|
+
}
|
|
45
49
|
if (isAllowAutoUpdatesEnabled &&
|
|
46
50
|
cliUpgradeInfo.current &&
|
|
47
51
|
cliUpgradeInfo.latest &&
|
|
@@ -49,9 +53,8 @@ export async function autoUpdateCLI(argv) {
|
|
|
49
53
|
!argv.useEnv &&
|
|
50
54
|
!process.env.SKIP_HUBSPOT_CLI_AUTO_UPDATES &&
|
|
51
55
|
!preventAutoUpdateForCommand(argv._)) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
showManualInstallHelp = false;
|
|
56
|
+
if (!showManualInstallHelp) {
|
|
57
|
+
// Pre-release version detected, skip auto-update
|
|
55
58
|
}
|
|
56
59
|
else if (!['major', 'latest'].includes(cliUpgradeInfo.type)) {
|
|
57
60
|
// type "latest" => current installed version is latest
|
package/lib/process.d.ts
CHANGED
|
@@ -8,6 +8,6 @@ interface KeyPress {
|
|
|
8
8
|
export declare const TERMINATION_SIGNALS: string[];
|
|
9
9
|
export declare function handleExit(callback: (onTerminate: {
|
|
10
10
|
isSIGHUP: boolean;
|
|
11
|
-
}) => void): void;
|
|
11
|
+
}) => void): () => void;
|
|
12
12
|
export declare function handleKeypress(callback: (onKeyPress: KeyPress) => void): void;
|
|
13
13
|
export {};
|
package/lib/process.js
CHANGED
|
@@ -16,9 +16,9 @@ export const TERMINATION_SIGNALS = [
|
|
|
16
16
|
];
|
|
17
17
|
export function handleExit(callback) {
|
|
18
18
|
let exitInProgress = false;
|
|
19
|
+
const listeners = [];
|
|
19
20
|
TERMINATION_SIGNALS.forEach(signal => {
|
|
20
|
-
|
|
21
|
-
process.on(signal, async (...args) => {
|
|
21
|
+
const handler = async (...args) => {
|
|
22
22
|
// Prevent duplicate exit handling
|
|
23
23
|
if (!exitInProgress) {
|
|
24
24
|
exitInProgress = true;
|
|
@@ -38,8 +38,15 @@ export function handleExit(callback) {
|
|
|
38
38
|
}
|
|
39
39
|
await callback({ isSIGHUP });
|
|
40
40
|
}
|
|
41
|
-
}
|
|
41
|
+
};
|
|
42
|
+
listeners.push({ signal, handler });
|
|
43
|
+
process.on(signal, handler);
|
|
42
44
|
});
|
|
45
|
+
return () => {
|
|
46
|
+
for (const { signal, handler } of listeners) {
|
|
47
|
+
process.removeListener(signal, handler);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
43
50
|
}
|
|
44
51
|
export function handleKeypress(callback) {
|
|
45
52
|
readline.createInterface(process.stdin, process.stdout);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { marketplaceDistribution, oAuth, privateDistribution, staticAuth, EMPTY_PROJECT, PROJECT_WITH_APP, FEATURES, } from '../../constants.js';
|
|
2
2
|
import { commands, lib } from '../../../lang/en.js';
|
|
3
3
|
import { listPrompt } from '../../prompts/promptUtils.js';
|
|
4
|
-
import { APP_EVENTS_KEY as AppEventsKey
|
|
4
|
+
import { APP_EVENTS_KEY as AppEventsKey } from '@hubspot/project-parsing-lib/constants';
|
|
5
5
|
import { isV2Project } from '../platformVersion.js';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { getConfigForPlatformVersion } from './legacy.js';
|
|
@@ -47,7 +47,6 @@ export async function createV2App(providedAuth, providedDistribution) {
|
|
|
47
47
|
}
|
|
48
48
|
const componentTypeToGateMap = {
|
|
49
49
|
[AppEventsKey]: FEATURES.APP_EVENTS,
|
|
50
|
-
[PagesKey]: FEATURES.APPS_HOME,
|
|
51
50
|
'workflow-action-tool': FEATURES.AGENT_TOOLS,
|
|
52
51
|
};
|
|
53
52
|
export async function calculateComponentTemplateChoices(components, authType, distribution, accountId, projectMetadata) {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const DELETION_POLL_TIMEOUT_MS: number;
|
|
2
|
+
export declare const DELETION_DEPLOY_SUCCESS_STATES: string[];
|
|
3
|
+
export declare const DELETION_DEPLOY_ERROR_STATES: ("FAILURE" | "ERROR" | "REVERTED")[];
|
|
4
|
+
export declare function resolveProjectName(accountId: number, projectArg: string | undefined): Promise<string>;
|
|
5
|
+
export declare function fetchProjectInstallCount(accountId: number, projectId: number): Promise<number>;
|
|
6
|
+
export declare function checkDeployedComponents(accountId: number, projectName: string): Promise<{
|
|
7
|
+
platformVersion: string;
|
|
8
|
+
hasUnifiedComponents: boolean;
|
|
9
|
+
projectId: number;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function deleteDeployedComponents(accountId: number, projectName: string): Promise<void>;
|
|
12
|
+
export declare function handleProjectDeletion(accountId: number, projectName: string): Promise<void>;
|
|
13
|
+
export declare function confirmDeletion(projectName: string, accountId: number, projectId: number): Promise<void>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { fetchProjects, fetchProject, stageProjectForDeletion, getDeployStatus, deleteProject, } from '@hubspot/local-dev-lib/api/projects';
|
|
2
|
+
import { fetchPublicAppsForPortal } from '@hubspot/local-dev-lib/api/appsDev';
|
|
3
|
+
import { debugError, getErrorMessage } from '../errorHandlers/index.js';
|
|
4
|
+
import { uiLogger } from '../ui/logger.js';
|
|
5
|
+
import SpinniesManager from '../ui/SpinniesManager.js';
|
|
6
|
+
import { commands } from '../../lang/en.js';
|
|
7
|
+
import { confirmPrompt, listPrompt } from '../prompts/promptUtils.js';
|
|
8
|
+
import { poll, DEFAULT_POLLING_STATES, DEFAULT_POLLING_STATUS_LOOKUP, } from '../polling.js';
|
|
9
|
+
import { PromptExitError } from '../errors/PromptExitError.js';
|
|
10
|
+
import { EXIT_CODES } from '../enums/exitCodes.js';
|
|
11
|
+
import { AUTO_GENERATED_COMPONENT_TYPES } from '@hubspot/project-parsing-lib/constants';
|
|
12
|
+
import { mapToUserFacingType } from '@hubspot/project-parsing-lib/transform';
|
|
13
|
+
import { isV2Project } from './platformVersion.js';
|
|
14
|
+
import { COMPONENT_TYPES, SUBCOMPONENT_TYPES, } from '@hubspot/local-dev-lib/enums/build';
|
|
15
|
+
export const DELETION_POLL_TIMEOUT_MS = 5 * 60 * 1000;
|
|
16
|
+
export const DELETION_DEPLOY_SUCCESS_STATES = [
|
|
17
|
+
DEFAULT_POLLING_STATES.SUCCESS,
|
|
18
|
+
'FINISHED',
|
|
19
|
+
];
|
|
20
|
+
export const DELETION_DEPLOY_ERROR_STATES = DEFAULT_POLLING_STATUS_LOOKUP.errorStates;
|
|
21
|
+
const LEGACY_COMPONENTS_TO_FILTER = [
|
|
22
|
+
SUBCOMPONENT_TYPES.SERVERLESS_PKG,
|
|
23
|
+
SUBCOMPONENT_TYPES.REACT_EXTENSION,
|
|
24
|
+
SUBCOMPONENT_TYPES.PACKAGE_LOCK_FILE,
|
|
25
|
+
COMPONENT_TYPES.PRIVATE_APP,
|
|
26
|
+
COMPONENT_TYPES.PUBLIC_APP,
|
|
27
|
+
];
|
|
28
|
+
const legacyComponentFriendlyNames = {
|
|
29
|
+
[SUBCOMPONENT_TYPES.APP_ID]: 'Private App',
|
|
30
|
+
[SUBCOMPONENT_TYPES.PUBLIC_APP_ID]: 'Public App',
|
|
31
|
+
[SUBCOMPONENT_TYPES.CRM_CARD_V2]: 'Card',
|
|
32
|
+
[SUBCOMPONENT_TYPES.CARD_V2]: 'Card',
|
|
33
|
+
[SUBCOMPONENT_TYPES.SERVERLESS_FUNCTION]: 'Serverless Function',
|
|
34
|
+
[SUBCOMPONENT_TYPES.APP_FUNCTION]: 'App Function',
|
|
35
|
+
[SUBCOMPONENT_TYPES.AUTOMATION_ACTION]: 'Automation Action',
|
|
36
|
+
[SUBCOMPONENT_TYPES.WEBHOOKS]: 'Webhooks',
|
|
37
|
+
[COMPONENT_TYPES.THEME]: 'Theme',
|
|
38
|
+
[COMPONENT_TYPES.REACT_THEME]: 'React Theme',
|
|
39
|
+
};
|
|
40
|
+
function mapLegacyComponentToUserFriendlyName(type) {
|
|
41
|
+
return legacyComponentFriendlyNames[type] || 'unknown';
|
|
42
|
+
}
|
|
43
|
+
export async function resolveProjectName(accountId, projectArg) {
|
|
44
|
+
const { data } = await fetchProjects(accountId);
|
|
45
|
+
const projects = data.results;
|
|
46
|
+
if (projectArg) {
|
|
47
|
+
if (!projects.some(p => p.name === projectArg)) {
|
|
48
|
+
throw new Error(commands.project.delete.errors.projectNotFound(projectArg, accountId));
|
|
49
|
+
}
|
|
50
|
+
return projectArg;
|
|
51
|
+
}
|
|
52
|
+
if (projects.length === 0) {
|
|
53
|
+
throw new Error(commands.project.delete.errors.noProjectsFound(accountId));
|
|
54
|
+
}
|
|
55
|
+
const selected = await listPrompt(commands.project.delete.prompts.selectProject(accountId), {
|
|
56
|
+
choices: projects.map(p => ({ name: p.name, value: p.name })),
|
|
57
|
+
validate: value => !!value || commands.project.delete.prompts.validation.projectRequired,
|
|
58
|
+
});
|
|
59
|
+
if (!selected) {
|
|
60
|
+
throw new Error(commands.project.delete.prompts.validation.projectRequired);
|
|
61
|
+
}
|
|
62
|
+
return selected;
|
|
63
|
+
}
|
|
64
|
+
export async function fetchProjectInstallCount(accountId, projectId) {
|
|
65
|
+
try {
|
|
66
|
+
const { data } = await fetchPublicAppsForPortal(accountId);
|
|
67
|
+
return data.results
|
|
68
|
+
.filter(app => app.projectId === projectId)
|
|
69
|
+
.reduce((sum, app) => sum + app.publicApplicationInstallCounts.uniquePortalInstallCount, 0);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
debugError(e);
|
|
73
|
+
uiLogger.warn(commands.project.delete.logs.installCountUnknown);
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export async function checkDeployedComponents(accountId, projectName) {
|
|
78
|
+
const { data: projectData } = await fetchProject(accountId, projectName);
|
|
79
|
+
const platformVersion = projectData.deployedBuild?.platformVersion ||
|
|
80
|
+
projectData.latestBuild?.platformVersion;
|
|
81
|
+
if (!platformVersion) {
|
|
82
|
+
throw new Error(commands.project.delete.errors.noPlatformVersion);
|
|
83
|
+
}
|
|
84
|
+
if (!isV2Project(platformVersion)) {
|
|
85
|
+
const userVisibleComponents = [];
|
|
86
|
+
projectData.deployedBuild?.subbuildStatuses?.forEach(item => {
|
|
87
|
+
if (LEGACY_COMPONENTS_TO_FILTER.includes(item.buildType)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
userVisibleComponents.push(`${item.buildName} - (${mapLegacyComponentToUserFriendlyName(item.buildType)})`);
|
|
91
|
+
});
|
|
92
|
+
if (userVisibleComponents.length > 0) {
|
|
93
|
+
uiLogger.log(commands.project.delete.logs.componentsToDeleteLegacy(userVisibleComponents));
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
platformVersion,
|
|
97
|
+
hasUnifiedComponents: false,
|
|
98
|
+
projectId: projectData.id,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const { data } = await stageProjectForDeletion(accountId, projectName, true);
|
|
103
|
+
if (data.hasDeployedComponents) {
|
|
104
|
+
const userVisibleComponents = data.componentsToRemove.filter(item => !AUTO_GENERATED_COMPONENT_TYPES.includes(mapToUserFacingType(item.componentType)));
|
|
105
|
+
uiLogger.log(commands.project.delete.logs.componentsToDeleteUnified(userVisibleComponents));
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
hasUnifiedComponents: data.hasDeployedComponents,
|
|
109
|
+
platformVersion,
|
|
110
|
+
projectId: projectData.id,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
debugError(e);
|
|
115
|
+
throw new Error(commands.project.delete.errors.cannotDelete(projectName, getErrorMessage(e)));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function deleteDeployedComponents(accountId, projectName) {
|
|
119
|
+
SpinniesManager.add('removeComponents', {
|
|
120
|
+
text: commands.project.delete.logs.deletingComponents(projectName),
|
|
121
|
+
});
|
|
122
|
+
let projectDeletionResponse;
|
|
123
|
+
try {
|
|
124
|
+
const { data } = await stageProjectForDeletion(accountId, projectName, false);
|
|
125
|
+
projectDeletionResponse = data;
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
debugError(e);
|
|
129
|
+
SpinniesManager.fail('removeComponents', {
|
|
130
|
+
text: commands.project.delete.errors.componentDeletionFailed(projectName),
|
|
131
|
+
});
|
|
132
|
+
throw new Error(commands.project.delete.errors.componentDeletionFailed(projectName));
|
|
133
|
+
}
|
|
134
|
+
const { deployId, hasDeployedComponents } = projectDeletionResponse;
|
|
135
|
+
if (deployId === undefined) {
|
|
136
|
+
if (hasDeployedComponents) {
|
|
137
|
+
SpinniesManager.fail('removeComponents', {
|
|
138
|
+
text: commands.project.delete.logs.unableToDetermineIfComponentsWereDeleted(projectName),
|
|
139
|
+
});
|
|
140
|
+
throw new Error(commands.project.delete.logs.unableToDetermineIfComponentsWereDeleted(projectName));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
SpinniesManager.succeed('removeComponents', {
|
|
144
|
+
text: commands.project.delete.logs.componentsDeleted(projectName),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
await poll(() => getDeployStatus(accountId, projectName, deployId), {
|
|
151
|
+
successStates: DELETION_DEPLOY_SUCCESS_STATES,
|
|
152
|
+
errorStates: DELETION_DEPLOY_ERROR_STATES,
|
|
153
|
+
}, DELETION_POLL_TIMEOUT_MS);
|
|
154
|
+
SpinniesManager.succeed('removeComponents', {
|
|
155
|
+
text: commands.project.delete.logs.componentsDeleted(projectName),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (e) {
|
|
159
|
+
debugError(e);
|
|
160
|
+
SpinniesManager.fail('removeComponents', {
|
|
161
|
+
text: commands.project.delete.errors.componentDeletionFailed(projectName),
|
|
162
|
+
});
|
|
163
|
+
throw new Error(commands.project.delete.errors.componentDeletionFailed(projectName));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export async function handleProjectDeletion(accountId, projectName) {
|
|
167
|
+
try {
|
|
168
|
+
SpinniesManager.add('deleteProject', {
|
|
169
|
+
text: commands.project.delete.logs.deleting(projectName),
|
|
170
|
+
});
|
|
171
|
+
await deleteProject(accountId, projectName);
|
|
172
|
+
SpinniesManager.succeed('deleteProject', {
|
|
173
|
+
text: commands.project.delete.logs.deleted(projectName, accountId),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
SpinniesManager.fail('deleteProject', {
|
|
178
|
+
text: commands.project.delete.errors.deleteFailed(projectName),
|
|
179
|
+
});
|
|
180
|
+
throw e;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export async function confirmDeletion(projectName, accountId, projectId) {
|
|
184
|
+
const installCount = await fetchProjectInstallCount(accountId, projectId);
|
|
185
|
+
if (installCount > 0) {
|
|
186
|
+
uiLogger.warn(commands.project.delete.logs.installWarning(installCount));
|
|
187
|
+
}
|
|
188
|
+
const confirmed = await confirmPrompt(commands.project.delete.prompts.confirmDelete(projectName, accountId), { defaultAnswer: false });
|
|
189
|
+
if (!confirmed) {
|
|
190
|
+
uiLogger.log(commands.project.delete.logs.cancelled);
|
|
191
|
+
throw new PromptExitError(commands.project.delete.logs.cancelled, EXIT_CODES.SUCCESS);
|
|
192
|
+
}
|
|
193
|
+
}
|