@hubspot/cli 7.5.4-experimental.0 → 7.5.4
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/api/migrate.d.ts +14 -4
- package/api/migrate.js +16 -2
- package/bin/cli.js +100 -95
- package/commands/account/auth.d.ts +5 -7
- package/commands/account/auth.js +87 -80
- package/commands/account/clean.d.ts +3 -7
- package/commands/account/clean.js +16 -9
- package/commands/account/createOverride.d.ts +3 -7
- package/commands/account/createOverride.js +23 -6
- package/commands/account/info.d.ts +3 -7
- package/commands/account/info.js +13 -5
- package/commands/account/list.d.ts +3 -7
- package/commands/account/list.js +15 -8
- package/commands/account/remove.d.ts +3 -7
- package/commands/account/remove.js +21 -9
- package/commands/account/removeOverride.d.ts +3 -7
- package/commands/account/removeOverride.js +23 -6
- package/commands/account/rename.d.ts +3 -7
- package/commands/account/rename.js +16 -9
- package/commands/account/use.d.ts +5 -9
- package/commands/account/use.js +14 -6
- package/commands/account.d.ts +3 -4
- package/commands/account.js +33 -58
- package/commands/app/migrate.d.ts +5 -6
- package/commands/app/migrate.js +60 -44
- package/commands/app/secret/add.d.ts +7 -0
- package/commands/app/secret/add.js +64 -0
- package/commands/app/secret/delete.d.ts +8 -0
- package/commands/app/secret/delete.js +87 -0
- package/commands/app/secret/list.d.ts +6 -0
- package/commands/app/secret/list.js +64 -0
- package/commands/app/secret/update.d.ts +7 -0
- package/commands/app/secret/update.js +77 -0
- package/commands/app/secret.d.ts +3 -0
- package/commands/app/secret.js +30 -0
- package/commands/app.d.ts +2 -5
- package/commands/app.js +10 -10
- package/commands/auth.d.ts +5 -7
- package/commands/auth.js +35 -35
- package/commands/cms/convertFields.d.ts +7 -1
- package/commands/cms/convertFields.js +57 -41
- package/commands/cms/getReactModule.d.ts +7 -1
- package/commands/cms/getReactModule.js +52 -34
- package/commands/cms/lighthouseScore.d.ts +8 -1
- package/commands/cms/lighthouseScore.js +129 -100
- package/commands/cms.d.ts +3 -1
- package/commands/cms.js +22 -16
- package/commands/completion.d.ts +3 -1
- package/commands/completion.js +23 -13
- package/commands/config/migrate.d.ts +3 -7
- package/commands/config/migrate.js +37 -46
- package/commands/config/set.d.ts +5 -6
- package/commands/config/set.js +38 -14
- package/commands/config.d.ts +3 -4
- package/commands/config.js +18 -44
- package/commands/create/api-sample.d.ts +3 -1
- package/commands/create/api-sample.js +34 -38
- package/commands/create/app.d.ts +3 -1
- package/commands/create/app.js +9 -7
- package/commands/create/function.d.ts +3 -1
- package/commands/create/function.js +11 -10
- package/commands/create/index.d.ts +5 -1
- package/commands/create/index.js +23 -11
- package/commands/create/module.d.ts +3 -1
- package/commands/create/module.js +14 -13
- package/commands/create/react-app.d.ts +3 -1
- package/commands/create/react-app.js +10 -7
- package/commands/create/template.d.ts +3 -1
- package/commands/create/template.js +14 -14
- package/commands/create/vue-app.d.ts +3 -1
- package/commands/create/vue-app.js +10 -7
- package/commands/create/webpack-serverless.d.ts +3 -1
- package/commands/create/webpack-serverless.js +10 -7
- package/commands/create/website-theme.d.ts +3 -1
- package/commands/create/website-theme.js +10 -9
- package/commands/create.d.ts +4 -24
- package/commands/create.js +62 -75
- package/commands/customObject/create.d.ts +4 -9
- package/commands/customObject/create.js +17 -10
- package/commands/customObject/schema/create.d.ts +4 -9
- package/commands/customObject/schema/create.js +18 -11
- package/commands/customObject/schema/delete.d.ts +4 -9
- package/commands/customObject/schema/delete.js +17 -10
- package/commands/customObject/schema/fetch-all.d.ts +4 -9
- package/commands/customObject/schema/fetch-all.js +17 -10
- package/commands/customObject/schema/fetch.d.ts +4 -9
- package/commands/customObject/schema/fetch.js +17 -10
- package/commands/customObject/schema/list.d.ts +4 -8
- package/commands/customObject/schema/list.js +17 -10
- package/commands/customObject/schema/update.d.ts +4 -9
- package/commands/customObject/schema/update.js +18 -11
- package/commands/customObject/schema.d.ts +3 -5
- package/commands/customObject/schema.js +27 -54
- package/commands/customObject.d.ts +3 -4
- package/commands/customObject.js +20 -48
- package/commands/doctor.d.ts +6 -8
- package/commands/doctor.js +30 -22
- package/commands/feedback.d.ts +4 -1
- package/commands/feedback.js +38 -48
- package/commands/fetch.d.ts +12 -1
- package/commands/fetch.js +49 -34
- package/commands/filemanager/fetch.d.ts +4 -9
- package/commands/filemanager/fetch.js +18 -11
- package/commands/filemanager/upload.d.ts +4 -9
- package/commands/filemanager/upload.js +17 -11
- package/commands/filemanager.d.ts +3 -4
- package/commands/filemanager.js +18 -42
- package/commands/function/deploy.d.ts +6 -1
- package/commands/function/deploy.js +70 -50
- package/commands/function/list.d.ts +6 -1
- package/commands/function/list.js +44 -32
- package/commands/function/server.d.ts +10 -1
- package/commands/function/server.js +49 -38
- package/commands/function.d.ts +5 -1
- package/commands/function.js +22 -11
- package/commands/getStarted.d.ts +9 -0
- package/commands/getStarted.js +227 -0
- package/commands/hubdb/clear.d.ts +4 -9
- package/commands/hubdb/clear.js +21 -15
- package/commands/hubdb/create.d.ts +4 -9
- package/commands/hubdb/create.js +23 -17
- package/commands/hubdb/delete.d.ts +4 -9
- package/commands/hubdb/delete.js +24 -16
- package/commands/hubdb/fetch.d.ts +4 -9
- package/commands/hubdb/fetch.js +20 -14
- package/commands/hubdb/list.d.ts +4 -0
- package/commands/hubdb/list.js +83 -0
- package/commands/hubdb.d.ts +3 -2
- package/commands/hubdb.js +24 -47
- package/commands/init.d.ts +3 -7
- package/commands/init.js +25 -17
- package/commands/lint.d.ts +6 -4
- package/commands/lint.js +42 -44
- package/commands/list.d.ts +3 -7
- package/commands/list.js +21 -16
- package/commands/logs.d.ts +10 -1
- package/commands/logs.js +53 -45
- package/commands/mcp/setup.d.ts +7 -0
- package/commands/mcp/setup.js +50 -0
- package/commands/mcp/start.d.ts +3 -0
- package/commands/mcp/start.js +75 -0
- package/commands/mcp.d.ts +3 -0
- package/commands/mcp.js +26 -0
- package/commands/module/marketplace-validate.d.ts +6 -1
- package/commands/module/marketplace-validate.js +39 -30
- package/commands/module.d.ts +3 -1
- package/commands/module.js +23 -12
- package/commands/mv.d.ts +3 -7
- package/commands/mv.js +20 -15
- package/commands/open.d.ts +3 -7
- package/commands/open.js +20 -15
- package/commands/project/add.d.ts +8 -9
- package/commands/project/add.js +53 -85
- package/commands/project/cloneApp.d.ts +6 -8
- package/commands/project/cloneApp.js +51 -47
- package/commands/project/create.d.ts +4 -1
- package/commands/project/create.js +132 -81
- package/commands/project/deploy.d.ts +5 -6
- package/commands/project/deploy.js +93 -37
- package/commands/project/dev/deprecatedFlow.d.ts +8 -2
- package/commands/project/dev/deprecatedFlow.js +41 -26
- package/commands/project/dev/index.d.ts +4 -5
- package/commands/project/dev/index.js +103 -33
- package/commands/project/dev/unifiedFlow.d.ts +11 -2
- package/commands/project/dev/unifiedFlow.js +85 -46
- package/commands/project/download.d.ts +3 -7
- package/commands/project/download.js +18 -19
- package/commands/project/installDeps.d.ts +6 -1
- package/commands/project/installDeps.js +48 -32
- package/commands/project/listBuilds.d.ts +3 -7
- package/commands/project/listBuilds.js +32 -30
- package/commands/project/logs.d.ts +10 -1
- package/commands/project/logs.js +73 -65
- package/commands/project/migrate.d.ts +7 -0
- package/commands/project/migrate.js +71 -0
- package/commands/project/migrateApp.d.ts +3 -8
- package/commands/project/migrateApp.js +23 -20
- package/commands/project/open.d.ts +3 -7
- package/commands/project/open.js +29 -21
- package/commands/project/profile/add.d.ts +7 -0
- package/commands/project/profile/add.js +209 -0
- package/commands/project/profile/delete.d.ts +6 -0
- package/commands/project/profile/delete.js +123 -0
- package/commands/project/profile.d.ts +3 -0
- package/commands/project/profile.js +25 -0
- package/commands/project/upload.d.ts +10 -1
- package/commands/project/upload.js +94 -56
- package/commands/project/validate.d.ts +6 -0
- package/commands/project/validate.js +82 -0
- package/commands/project/watch.d.ts +6 -1
- package/commands/project/watch.js +95 -61
- package/commands/project.d.ts +3 -1
- package/commands/project.js +49 -35
- package/commands/remove.d.ts +3 -7
- package/commands/remove.js +22 -20
- package/commands/sandbox/create.d.ts +4 -9
- package/commands/sandbox/create.js +27 -21
- package/commands/sandbox/delete.d.ts +4 -9
- package/commands/sandbox/delete.js +35 -29
- package/commands/sandbox.d.ts +3 -4
- package/commands/sandbox.js +18 -44
- package/commands/secret/addSecret.d.ts +4 -9
- package/commands/secret/addSecret.js +21 -15
- package/commands/secret/deleteSecret.d.ts +4 -9
- package/commands/secret/deleteSecret.js +28 -18
- package/commands/secret/listSecret.d.ts +4 -9
- package/commands/secret/listSecret.js +19 -13
- package/commands/secret/updateSecret.d.ts +4 -9
- package/commands/secret/updateSecret.js +25 -17
- package/commands/secret.d.ts +3 -4
- package/commands/secret.js +23 -49
- package/commands/theme/generate-selectors.d.ts +3 -7
- package/commands/theme/generate-selectors.js +20 -16
- package/commands/theme/marketplace-validate.d.ts +4 -9
- package/commands/theme/marketplace-validate.js +22 -18
- package/commands/theme/preview.d.ts +4 -9
- package/commands/theme/preview.js +36 -30
- package/commands/theme.d.ts +3 -4
- package/commands/theme.js +22 -48
- package/commands/upload.d.ts +12 -1
- package/commands/upload.js +116 -135
- package/commands/watch.d.ts +14 -1
- package/commands/watch.js +74 -76
- package/lang/en.d.ts +3217 -0
- package/lang/en.js +3074 -3318
- package/lang/en.lyaml +41 -246
- package/lib/accountTypes.d.ts +1 -0
- package/lib/accountTypes.js +11 -0
- package/lib/app/migrate.d.ts +33 -4
- package/lib/app/migrate.js +232 -99
- package/lib/app/migrate_legacy.d.ts +2 -2
- package/lib/app/migrate_legacy.js +16 -13
- package/lib/app/urls.d.ts +16 -0
- package/lib/app/urls.js +16 -0
- package/lib/buildAccount.d.ts +1 -2
- package/lib/buildAccount.js +11 -10
- package/lib/commonOpts.d.ts +4 -7
- package/lib/commonOpts.js +47 -19
- package/lib/configMigrate.d.ts +2 -2
- package/lib/configMigrate.js +39 -60
- package/lib/configOptions.d.ts +4 -0
- package/lib/configOptions.js +41 -45
- package/lib/constants.d.ts +33 -0
- package/lib/constants.js +34 -1
- package/lib/dependencyManagement.d.ts +0 -5
- package/lib/dependencyManagement.js +14 -40
- package/lib/doctor/Diagnosis.js +10 -11
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +10 -10
- package/lib/doctor/Doctor.js +45 -49
- package/lib/errorHandlers/index.js +13 -7
- package/lib/errorHandlers/suppressError.js +18 -26
- package/lib/filesystem.d.ts +1 -1
- package/lib/generateSelectors.js +3 -6
- package/lib/hasFeature.d.ts +3 -1
- package/lib/interpolation.d.ts +2 -3
- package/lib/lang.d.ts +2 -3
- package/lib/marketplaceValidate.d.ts +12 -2
- package/lib/marketplaceValidate.js +22 -29
- package/lib/mcp/setup.d.ts +21 -0
- package/lib/mcp/setup.js +218 -0
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +3 -3
- package/lib/middleware/autoUpdateMiddleware.d.ts +1 -0
- package/lib/middleware/autoUpdateMiddleware.js +89 -0
- package/lib/middleware/configMiddleware.js +32 -2
- package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
- package/lib/middleware/fireAlarmMiddleware.js +12 -24
- package/lib/middleware/yargsChecksMiddleware.js +2 -2
- package/lib/npm.d.ts +9 -0
- package/lib/npm.js +36 -0
- package/lib/oauth.js +1 -2
- package/lib/process.js +1 -2
- package/lib/projectProfiles.d.ts +7 -0
- package/lib/projectProfiles.js +83 -0
- package/lib/projects/ProjectLogsManager.d.ts +1 -1
- package/lib/projects/ProjectLogsManager.js +16 -21
- package/lib/projects/add/legacyAddComponent.d.ts +5 -0
- package/lib/projects/add/legacyAddComponent.js +48 -0
- package/lib/projects/add/v3AddComponent.d.ts +8 -0
- package/lib/projects/add/v3AddComponent.js +85 -0
- package/lib/projects/buildAndDeploy.js +46 -42
- package/lib/projects/components.d.ts +2 -0
- package/lib/projects/components.js +82 -0
- package/lib/projects/config.d.ts +9 -0
- package/lib/projects/config.js +79 -0
- package/lib/projects/create/index.d.ts +23 -0
- package/lib/projects/create/index.js +33 -0
- package/lib/projects/create/legacy.d.ts +6 -0
- package/lib/projects/{create.js → create/legacy.js} +23 -15
- package/lib/projects/create/v3.d.ts +27 -0
- package/lib/projects/create/v3.js +158 -0
- package/lib/projects/ensureProjectExists.d.ts +11 -0
- package/lib/projects/ensureProjectExists.js +97 -0
- package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
- package/lib/projects/localDev/AppDevModeInterface.js +215 -0
- package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
- package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +6 -6
- package/lib/projects/localDev/DevServerManagerV2.d.ts +22 -0
- package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +22 -19
- package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
- package/lib/projects/localDev/LocalDevLogger.js +159 -0
- package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
- package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +57 -83
- package/lib/projects/localDev/LocalDevProcess.d.ts +34 -0
- package/lib/projects/localDev/LocalDevProcess.js +201 -0
- package/lib/projects/localDev/LocalDevState.d.ts +50 -0
- package/lib/projects/localDev/LocalDevState.js +119 -0
- package/lib/projects/localDev/LocalDevWatcher.d.ts +10 -0
- package/lib/projects/localDev/LocalDevWatcher.js +53 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +20 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.js +131 -0
- package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +6 -4
- package/lib/{localDev.js → projects/localDev/helpers.js} +127 -114
- package/lib/projects/ui.d.ts +1 -0
- package/lib/projects/ui.js +15 -0
- package/lib/projects/upload.d.ts +17 -2
- package/lib/projects/upload.js +74 -50
- package/lib/projects/urls.d.ts +4 -0
- package/lib/projects/urls.js +23 -1
- package/lib/projects/watch.d.ts +1 -1
- package/lib/projects/watch.js +21 -18
- package/lib/prompts/accountNamePrompt.js +16 -13
- package/lib/prompts/accountsPrompt.js +1 -2
- package/lib/prompts/cmsFieldPrompt.js +1 -2
- package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
- package/lib/prompts/createApiSamplePrompt.js +4 -5
- package/lib/prompts/createFunctionPrompt.js +13 -14
- package/lib/prompts/createModulePrompt.js +8 -9
- package/lib/prompts/createProjectPrompt.d.ts +20 -4
- package/lib/prompts/createProjectPrompt.js +43 -13
- package/lib/prompts/createTemplatePrompt.d.ts +22 -4
- package/lib/prompts/createTemplatePrompt.js +1 -2
- package/lib/prompts/downloadProjectPrompt.js +3 -4
- package/lib/prompts/installAppPrompt.d.ts +2 -0
- package/lib/prompts/installAppPrompt.js +45 -0
- package/lib/prompts/personalAccessKeyPrompt.js +35 -25
- package/lib/prompts/previewPrompt.js +5 -6
- package/lib/prompts/projectAddPrompt.d.ts +5 -1
- package/lib/prompts/projectAddPrompt.js +35 -8
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +15 -16
- package/lib/prompts/projectNamePrompt.js +5 -6
- package/lib/prompts/projectsLogsPrompt.js +3 -2
- package/lib/prompts/promptUtils.d.ts +4 -2
- package/lib/prompts/promptUtils.js +3 -1
- package/lib/prompts/sandboxesPrompt.js +5 -6
- package/lib/prompts/secretPrompt.js +2 -3
- package/lib/prompts/selectAppPrompt.d.ts +2 -0
- package/lib/prompts/selectAppPrompt.js +40 -0
- package/lib/prompts/selectHubDBTablePrompt.js +11 -8
- package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
- package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -9
- package/lib/prompts/setAsDefaultAccountPrompt.js +11 -2
- package/lib/prompts/uploadPrompt.js +4 -5
- package/lib/sandboxSync.js +15 -14
- package/lib/sandboxes.js +12 -13
- package/lib/serverlessLogs.js +4 -6
- package/lib/testUtils.d.ts +3 -3
- package/lib/testUtils.js +8 -9
- package/lib/ui/boxen.d.ts +5 -0
- package/lib/ui/boxen.js +30 -0
- package/lib/ui/git.js +8 -9
- package/lib/ui/index.d.ts +3 -2
- package/lib/ui/index.js +15 -17
- package/lib/ui/logger.d.ts +10 -0
- package/lib/ui/logger.js +15 -0
- package/lib/ui/serverlessFunctionLogs.js +2 -3
- package/lib/upload.d.ts +1 -1
- package/lib/validation.js +4 -5
- package/lib/yargsUtils.d.ts +5 -1
- package/lib/yargsUtils.js +6 -0
- package/mcp-server/server.d.ts +1 -0
- package/mcp-server/server.js +18 -0
- package/mcp-server/tools/index.d.ts +2 -0
- package/mcp-server/tools/index.js +19 -0
- package/mcp-server/tools/project/AddFeatureToProject.d.ts +29 -0
- package/mcp-server/tools/project/AddFeatureToProject.js +85 -0
- package/mcp-server/tools/project/CreateProjectTool.d.ts +35 -0
- package/mcp-server/tools/project/CreateProjectTool.js +104 -0
- package/mcp-server/tools/project/DeployProject.d.ts +20 -0
- package/mcp-server/tools/project/DeployProject.js +50 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +17 -0
- package/mcp-server/tools/project/GuidedWalkthroughTool.js +58 -0
- package/mcp-server/tools/project/UploadProjectTools.d.ts +17 -0
- package/mcp-server/tools/project/UploadProjectTools.js +35 -0
- package/mcp-server/tools/project/ValidateProjectTool.d.ts +17 -0
- package/mcp-server/tools/project/ValidateProjectTool.js +35 -0
- package/mcp-server/tools/project/constants.d.ts +3 -0
- package/mcp-server/tools/project/constants.js +13 -0
- package/mcp-server/types.d.ts +14 -0
- package/mcp-server/types.js +17 -0
- package/mcp-server/utils/command.d.ts +3 -0
- package/mcp-server/utils/command.js +16 -0
- package/mcp-server/utils/content.d.ts +3 -0
- package/mcp-server/utils/content.js +21 -0
- package/mcp-server/utils/project.d.ts +5 -0
- package/mcp-server/utils/project.js +17 -0
- package/package.json +25 -17
- package/types/Cms.d.ts +30 -0
- package/types/Cms.js +2 -0
- package/types/LocalDev.d.ts +35 -0
- package/types/LocalDev.js +2 -0
- package/types/Projects.d.ts +19 -2
- package/types/Prompts.d.ts +0 -7
- package/types/Yargs.d.ts +14 -11
- package/lib/DevServerManagerV2.d.ts +0 -33
- package/lib/LocalDevManagerV2.d.ts +0 -64
- package/lib/LocalDevManagerV2.js +0 -377
- package/lib/projects/create.d.ts +0 -5
- package/lib/projects/index.d.ts +0 -20
- package/lib/projects/index.js +0 -194
- package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
- package/lib/prompts/installPublicAppPrompt.js +0 -40
|
@@ -14,7 +14,8 @@ exports.useExistingDevTestAccount = useExistingDevTestAccount;
|
|
|
14
14
|
exports.createNewProjectForLocalDev = createNewProjectForLocalDev;
|
|
15
15
|
exports.createInitialBuildForNewProject = createInitialBuildForNewProject;
|
|
16
16
|
exports.getAccountHomeUrl = getAccountHomeUrl;
|
|
17
|
-
|
|
17
|
+
exports.hasSandboxes = hasSandboxes;
|
|
18
|
+
exports.selectAccountTypePrompt = selectAccountTypePrompt;
|
|
18
19
|
const config_1 = require("@hubspot/local-dev-lib/constants/config");
|
|
19
20
|
const index_1 = require("@hubspot/local-dev-lib/errors/index");
|
|
20
21
|
const urls_1 = require("@hubspot/local-dev-lib/urls");
|
|
@@ -23,70 +24,59 @@ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
|
23
24
|
const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
|
|
24
25
|
const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
|
|
25
26
|
const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const exitCodes_1 = require("
|
|
35
|
-
const usageTracking_1 = require("
|
|
36
|
-
const accountTypes_1 = require("
|
|
37
|
-
const upload_1 = require("
|
|
38
|
-
const buildAndDeploy_1 = require("
|
|
39
|
-
const constants_1 = require("
|
|
40
|
-
const index_2 = require("
|
|
41
|
-
const buildAccount_1 = require("
|
|
42
|
-
const accountNamePrompt_1 = require("
|
|
43
|
-
const
|
|
27
|
+
const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
|
|
28
|
+
const projectDevTargetAccountPrompt_1 = require("../../prompts/projectDevTargetAccountPrompt");
|
|
29
|
+
const promptUtils_1 = require("../../prompts/promptUtils");
|
|
30
|
+
const sandboxes_1 = require("../../sandboxes");
|
|
31
|
+
const sandboxSync_1 = require("../../sandboxSync");
|
|
32
|
+
const developerTestAccounts_1 = require("../../developerTestAccounts");
|
|
33
|
+
const ui_1 = require("../../ui");
|
|
34
|
+
const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
|
|
35
|
+
const exitCodes_1 = require("../../enums/exitCodes");
|
|
36
|
+
const usageTracking_1 = require("../../usageTracking");
|
|
37
|
+
const accountTypes_1 = require("../../accountTypes");
|
|
38
|
+
const upload_1 = require("../../projects/upload");
|
|
39
|
+
const buildAndDeploy_1 = require("../../projects/buildAndDeploy");
|
|
40
|
+
const constants_1 = require("../../constants");
|
|
41
|
+
const index_2 = require("../../errorHandlers/index");
|
|
42
|
+
const buildAccount_1 = require("../../buildAccount");
|
|
43
|
+
const accountNamePrompt_1 = require("../../prompts/accountNamePrompt");
|
|
44
|
+
const en_1 = require("../../../lang/en");
|
|
45
|
+
const logger_1 = require("../../ui/logger");
|
|
44
46
|
// If the user passed in the --account flag, confirm they want to use that account as
|
|
45
47
|
// their target account, otherwise exit
|
|
46
48
|
async function confirmDefaultAccountIsTarget(accountConfig) {
|
|
47
49
|
if (!accountConfig.name || !accountConfig.accountType) {
|
|
48
|
-
logger_1.
|
|
49
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
50
|
-
}));
|
|
50
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget.configError);
|
|
51
51
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
52
52
|
}
|
|
53
|
-
logger_1.
|
|
53
|
+
logger_1.uiLogger.log('');
|
|
54
54
|
const useDefaultAccount = await (0, projectDevTargetAccountPrompt_1.confirmDefaultAccountPrompt)(accountConfig.name, config_1.HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]);
|
|
55
55
|
if (!useDefaultAccount) {
|
|
56
|
-
logger_1.
|
|
57
|
-
|
|
58
|
-
devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
|
|
59
|
-
}));
|
|
56
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
|
|
57
|
+
.declineDefaultAccountExplanation);
|
|
60
58
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
61
59
|
}
|
|
62
60
|
}
|
|
63
61
|
// Confirm the default account is supported for the type of apps being developed
|
|
64
|
-
function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
|
|
62
|
+
async function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
|
|
63
|
+
const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
|
|
65
64
|
if (hasPublicApps &&
|
|
66
65
|
!((0, accountTypes_1.isAppDeveloperAccount)(accountConfig) ||
|
|
67
|
-
(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
71
|
-
}));
|
|
66
|
+
(0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
|
|
67
|
+
defaultAccountIsUnified)) {
|
|
68
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.publicApp);
|
|
72
69
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
73
70
|
}
|
|
74
71
|
else if (!hasPublicApps && (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
|
|
75
|
-
logger_1.
|
|
76
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
77
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
78
|
-
}));
|
|
72
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.privateApp);
|
|
79
73
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
80
74
|
}
|
|
81
75
|
}
|
|
82
76
|
function checkIfParentAccountIsAuthed(accountConfig) {
|
|
83
77
|
if (!accountConfig.parentAccountId ||
|
|
84
78
|
!(0, config_2.getAccountConfig)(accountConfig.parentAccountId)) {
|
|
85
|
-
logger_1.
|
|
86
|
-
accountId: accountConfig.parentAccountId || '',
|
|
87
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig)),
|
|
88
|
-
authCommand: (0, ui_1.uiCommandReference)(`hs auth --account=${accountConfig.parentAccountId}`),
|
|
89
|
-
}));
|
|
79
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.checkIfParentAccountIsAuthed.notAuthedError(accountConfig.parentAccountId || '', (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig))));
|
|
90
80
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
91
81
|
}
|
|
92
82
|
}
|
|
@@ -94,34 +84,30 @@ function checkIfParentAccountIsAuthed(accountConfig) {
|
|
|
94
84
|
function checkIfAccountFlagIsSupported(accountConfig, hasPublicApps) {
|
|
95
85
|
if (hasPublicApps) {
|
|
96
86
|
if (!(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
|
|
97
|
-
logger_1.
|
|
98
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
99
|
-
devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
|
|
100
|
-
}));
|
|
87
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPublicAppAccount);
|
|
101
88
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
102
89
|
}
|
|
103
90
|
checkIfParentAccountIsAuthed(accountConfig);
|
|
104
91
|
}
|
|
105
92
|
else if ((0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
|
|
106
|
-
logger_1.
|
|
107
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
108
|
-
}));
|
|
93
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount);
|
|
109
94
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
110
95
|
}
|
|
111
96
|
}
|
|
112
97
|
// If the user isn't using the recommended account type, prompt them to use or create one
|
|
113
98
|
async function suggestRecommendedNestedAccount(accounts, accountConfig, hasPublicApps) {
|
|
114
|
-
logger_1.
|
|
99
|
+
logger_1.uiLogger.log('');
|
|
115
100
|
(0, ui_1.uiLine)();
|
|
116
101
|
if (hasPublicApps) {
|
|
117
|
-
logger_1.
|
|
102
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.validateAccountOption
|
|
103
|
+
.publicAppNonDeveloperTestAccountWarning);
|
|
118
104
|
}
|
|
119
105
|
else {
|
|
120
|
-
logger_1.
|
|
106
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.validateAccountOption.nonSandboxWarning);
|
|
121
107
|
}
|
|
122
108
|
(0, ui_1.uiLine)();
|
|
123
|
-
logger_1.
|
|
124
|
-
const targetAccountPrompt =
|
|
109
|
+
logger_1.uiLogger.log('');
|
|
110
|
+
const targetAccountPrompt = hasPublicApps
|
|
125
111
|
? projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt
|
|
126
112
|
: projectDevTargetAccountPrompt_1.selectSandboxTargetAccountPrompt;
|
|
127
113
|
return targetAccountPrompt(accounts, accountConfig);
|
|
@@ -133,15 +119,10 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
|
|
|
133
119
|
}
|
|
134
120
|
catch (err) {
|
|
135
121
|
if ((0, index_1.isMissingScopeError)(err)) {
|
|
136
|
-
logger_1.
|
|
137
|
-
accountName: accountConfig.name || accountId,
|
|
138
|
-
}));
|
|
122
|
+
logger_1.uiLogger.error(en_1.lib.sandbox.create.developer.failure.scopes.message);
|
|
139
123
|
const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
|
|
140
124
|
const url = `${websiteOrigin}/personal-access-key/${accountId}`;
|
|
141
|
-
logger_1.
|
|
142
|
-
accountName: accountConfig.name || accountId,
|
|
143
|
-
url,
|
|
144
|
-
}));
|
|
125
|
+
logger_1.uiLogger.info(en_1.lib.sandbox.create.developer.failure.scopes.instructions(accountConfig.name || accountId, url));
|
|
145
126
|
}
|
|
146
127
|
else {
|
|
147
128
|
(0, index_2.logError)(err);
|
|
@@ -157,7 +138,7 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
|
|
|
157
138
|
const targetAccountId = result.sandbox.sandboxHubId;
|
|
158
139
|
const sandboxAccountConfig = (0, config_2.getAccountConfig)(result.sandbox.sandboxHubId);
|
|
159
140
|
if (!sandboxAccountConfig) {
|
|
160
|
-
logger_1.
|
|
141
|
+
logger_1.uiLogger.error(en_1.lib.sandbox.create.developer.failure.generic);
|
|
161
142
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
162
143
|
}
|
|
163
144
|
const syncTasks = await (0, sandboxes_1.getAvailableSyncTypes)(accountConfig, sandboxAccountConfig);
|
|
@@ -185,15 +166,10 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
|
|
|
185
166
|
}
|
|
186
167
|
catch (err) {
|
|
187
168
|
if ((0, index_1.isMissingScopeError)(err)) {
|
|
188
|
-
logger_1.
|
|
189
|
-
accountName: accountConfig.name || accountId,
|
|
190
|
-
}));
|
|
169
|
+
logger_1.uiLogger.error(en_1.lib.developerTestAccount.create.failure.scopes.message);
|
|
191
170
|
const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
|
|
192
171
|
const url = `${websiteOrigin}/personal-access-key/${accountId}`;
|
|
193
|
-
logger_1.
|
|
194
|
-
accountName: accountConfig.name || accountId,
|
|
195
|
-
url,
|
|
196
|
-
}));
|
|
172
|
+
logger_1.uiLogger.info(en_1.lib.developerTestAccount.create.failure.scopes.instructions(accountConfig.name || accountId, url));
|
|
197
173
|
}
|
|
198
174
|
else {
|
|
199
175
|
(0, index_2.logError)(err);
|
|
@@ -207,7 +183,7 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
|
|
|
207
183
|
});
|
|
208
184
|
(0, usageTracking_1.trackCommandMetadataUsage)('developer-test-account-create', { step: 'project-dev' }, accountId);
|
|
209
185
|
const result = await (0, buildAccount_1.buildDeveloperTestAccount)(name, accountConfig, env, maxTestPortals);
|
|
210
|
-
return result
|
|
186
|
+
return result;
|
|
211
187
|
}
|
|
212
188
|
catch (err) {
|
|
213
189
|
(0, index_2.logError)(err);
|
|
@@ -218,91 +194,86 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
|
|
|
218
194
|
async function useExistingDevTestAccount(env, account) {
|
|
219
195
|
const useExistingDevTestAcct = await (0, projectDevTargetAccountPrompt_1.confirmUseExistingDeveloperTestAccountPrompt)(account);
|
|
220
196
|
if (!useExistingDevTestAcct) {
|
|
221
|
-
logger_1.
|
|
222
|
-
logger_1.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}));
|
|
226
|
-
logger_1.logger.log('');
|
|
197
|
+
logger_1.uiLogger.log('');
|
|
198
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
|
|
199
|
+
.declineDefaultAccountExplanation);
|
|
200
|
+
logger_1.uiLogger.log('');
|
|
227
201
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
228
202
|
}
|
|
229
203
|
const devTestAcctConfigName = await (0, buildAccount_1.saveAccountToConfig)(account.id, account.accountName, env);
|
|
230
|
-
logger_1.
|
|
231
|
-
accountName: devTestAcctConfigName,
|
|
232
|
-
authType: auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
|
|
233
|
-
}));
|
|
204
|
+
logger_1.uiLogger.success(en_1.lib.developerTestAccount.create.success.configFileUpdated(devTestAcctConfigName, auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name));
|
|
234
205
|
}
|
|
235
206
|
// Prompt the user to create a new project if one doesn't exist on their target account
|
|
236
207
|
async function createNewProjectForLocalDev(projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) {
|
|
237
208
|
// Create the project without prompting if this is a newly created sandbox
|
|
238
209
|
let shouldCreateProject = shouldCreateWithoutConfirmation;
|
|
239
210
|
if (!shouldCreateProject) {
|
|
240
|
-
const
|
|
241
|
-
?
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
logger_1.
|
|
211
|
+
const explanationLangFunction = hasPublicApps
|
|
212
|
+
? en_1.lib.localDevHelpers.createNewProjectForLocalDev
|
|
213
|
+
.publicAppProjectMustExistExplanation
|
|
214
|
+
: en_1.lib.localDevHelpers.createNewProjectForLocalDev
|
|
215
|
+
.projectMustExistExplanation;
|
|
216
|
+
const explanationString = explanationLangFunction(projectConfig.name, targetAccountId);
|
|
217
|
+
logger_1.uiLogger.log('');
|
|
247
218
|
(0, ui_1.uiLine)();
|
|
248
|
-
logger_1.
|
|
219
|
+
logger_1.uiLogger.log(explanationString);
|
|
249
220
|
(0, ui_1.uiLine)();
|
|
250
|
-
shouldCreateProject = await (0, promptUtils_1.confirmPrompt)((0,
|
|
251
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
252
|
-
projectName: projectConfig.name,
|
|
253
|
-
}));
|
|
221
|
+
shouldCreateProject = await (0, promptUtils_1.confirmPrompt)(en_1.lib.localDevHelpers.createNewProjectForLocalDev.createProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)));
|
|
254
222
|
}
|
|
255
223
|
if (shouldCreateProject) {
|
|
256
224
|
SpinniesManager_1.default.add('createProject', {
|
|
257
|
-
text: (0,
|
|
258
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
259
|
-
projectName: projectConfig.name,
|
|
260
|
-
}),
|
|
225
|
+
text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.creatingProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
|
|
261
226
|
});
|
|
262
227
|
try {
|
|
263
228
|
const { data: project } = await (0, projects_1.createProject)(targetAccountId, projectConfig.name);
|
|
264
229
|
SpinniesManager_1.default.succeed('createProject', {
|
|
265
|
-
text: (0,
|
|
266
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
267
|
-
projectName: projectConfig.name,
|
|
268
|
-
}),
|
|
230
|
+
text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.createdProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
|
|
269
231
|
succeedColor: 'white',
|
|
270
232
|
});
|
|
271
233
|
return project;
|
|
272
234
|
}
|
|
273
235
|
catch (err) {
|
|
274
236
|
SpinniesManager_1.default.fail('createProject');
|
|
275
|
-
logger_1.
|
|
237
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.failedToCreateProject);
|
|
276
238
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
277
239
|
}
|
|
278
240
|
}
|
|
279
241
|
else {
|
|
280
242
|
// We cannot continue if the project does not exist in the target account
|
|
281
|
-
logger_1.
|
|
282
|
-
logger_1.
|
|
243
|
+
logger_1.uiLogger.log('');
|
|
244
|
+
logger_1.uiLogger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.choseNotToCreateProject);
|
|
283
245
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
284
246
|
}
|
|
285
247
|
}
|
|
286
248
|
function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
|
|
287
249
|
if (!buildId) {
|
|
288
|
-
logger_1.
|
|
289
|
-
uploadCommand: (0, ui_1.uiCommandReference)('hs project upload'),
|
|
290
|
-
}));
|
|
250
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.genericError);
|
|
291
251
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
292
252
|
}
|
|
293
253
|
return (0, buildAndDeploy_1.pollProjectBuildAndDeploy)(accountId, projectConfig, tempFile, buildId, true);
|
|
294
254
|
}
|
|
295
255
|
// Create an initial build if the project was newly created in the account
|
|
296
256
|
// Return the newly deployed build
|
|
297
|
-
async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId,
|
|
298
|
-
const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(
|
|
257
|
+
async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIR, profile) {
|
|
258
|
+
const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)({
|
|
259
|
+
accountId: targetAccountId,
|
|
260
|
+
projectConfig,
|
|
261
|
+
projectDir,
|
|
262
|
+
callbackFunc: projectUploadCallback,
|
|
263
|
+
uploadMessage: en_1.lib.localDevHelpers.createInitialBuildForNewProject
|
|
264
|
+
.initialUploadMessage,
|
|
265
|
+
forceCreate: true,
|
|
266
|
+
skipValidation: true,
|
|
267
|
+
sendIR,
|
|
268
|
+
profile,
|
|
269
|
+
});
|
|
299
270
|
if (uploadError) {
|
|
300
271
|
if ((0, index_1.isSpecifiedError)(uploadError, {
|
|
301
272
|
subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED,
|
|
302
273
|
})) {
|
|
303
|
-
logger_1.
|
|
304
|
-
logger_1.
|
|
305
|
-
logger_1.
|
|
274
|
+
logger_1.uiLogger.log('');
|
|
275
|
+
logger_1.uiLogger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError);
|
|
276
|
+
logger_1.uiLogger.log('');
|
|
306
277
|
}
|
|
307
278
|
else {
|
|
308
279
|
(0, index_2.logError)(uploadError, new index_2.ApiErrorContext({
|
|
@@ -323,11 +294,11 @@ async function createInitialBuildForNewProject(projectConfig, projectDir, target
|
|
|
323
294
|
initialUploadResult.deployResult[constants_1.PROJECT_DEPLOY_TEXT.SUBTASK_KEY];
|
|
324
295
|
}
|
|
325
296
|
const failedSubTasks = subTasks.filter(task => task.status === 'FAILURE');
|
|
326
|
-
logger_1.
|
|
297
|
+
logger_1.uiLogger.log('');
|
|
327
298
|
failedSubTasks.forEach(failedSubTask => {
|
|
328
|
-
logger_1.
|
|
299
|
+
logger_1.uiLogger.error(failedSubTask.errorMessage);
|
|
329
300
|
});
|
|
330
|
-
logger_1.
|
|
301
|
+
logger_1.uiLogger.log('');
|
|
331
302
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
332
303
|
}
|
|
333
304
|
return initialUploadResult.buildResult;
|
|
@@ -336,3 +307,45 @@ function getAccountHomeUrl(accountId) {
|
|
|
336
307
|
const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_2.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
|
|
337
308
|
return `${baseUrl}/home?portalId=${accountId}`;
|
|
338
309
|
}
|
|
310
|
+
async function hasSandboxes(account) {
|
|
311
|
+
const accountId = (0, getAccountIdentifier_1.getAccountIdentifier)(account);
|
|
312
|
+
if (!accountId) {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
const { data: { usage }, } = await (0, sandboxHubs_1.getSandboxUsageLimits)(accountId);
|
|
317
|
+
return usage.STANDARD.limit > 0 || usage.DEVELOPER.limit > 0;
|
|
318
|
+
}
|
|
319
|
+
catch (e) {
|
|
320
|
+
(0, index_2.debugError)(e);
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Top level prompt to choose the type of account to test on
|
|
325
|
+
async function selectAccountTypePrompt(accountConfig) {
|
|
326
|
+
const hasAccessToSandboxes = await hasSandboxes(accountConfig);
|
|
327
|
+
const result = await (0, promptUtils_1.listPrompt)(en_1.lib.localDevHelpers.selectAccountTypePrompt.message, {
|
|
328
|
+
choices: [
|
|
329
|
+
{
|
|
330
|
+
name: en_1.lib.localDevHelpers.selectAccountTypePrompt
|
|
331
|
+
.developerTestAccountOption,
|
|
332
|
+
value: config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPER_TEST,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
name: en_1.lib.localDevHelpers.selectAccountTypePrompt
|
|
336
|
+
.sandboxAccountOption,
|
|
337
|
+
value: config_1.HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX,
|
|
338
|
+
disabled: !hasAccessToSandboxes
|
|
339
|
+
? en_1.lib.localDevHelpers.selectAccountTypePrompt
|
|
340
|
+
.sandboxAccountOptionDisabled
|
|
341
|
+
: false,
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: en_1.lib.localDevHelpers.selectAccountTypePrompt
|
|
345
|
+
.productionAccountOption,
|
|
346
|
+
value: null,
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
});
|
|
350
|
+
return result;
|
|
351
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logFeedbackMessage(buildId: number): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logFeedbackMessage = logFeedbackMessage;
|
|
4
|
+
const logger_1 = require("../ui/logger");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const ui_1 = require("../ui");
|
|
7
|
+
const en_1 = require("../../lang/en");
|
|
8
|
+
function logFeedbackMessage(buildId) {
|
|
9
|
+
if (buildId > 0 && buildId % constants_1.FEEDBACK_INTERVAL === 0) {
|
|
10
|
+
(0, ui_1.uiLine)();
|
|
11
|
+
logger_1.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackHeader);
|
|
12
|
+
(0, ui_1.uiLine)();
|
|
13
|
+
logger_1.uiLogger.log(en_1.lib.projects.logFeedbackMessage.feedbackMessage);
|
|
14
|
+
}
|
|
15
|
+
}
|
package/lib/projects/upload.d.ts
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import { FileResult } from 'tmp';
|
|
2
2
|
import { ProjectConfig } from '../../types/Projects';
|
|
3
|
-
type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId
|
|
3
|
+
type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId: number) => Promise<T>;
|
|
4
4
|
type ProjectUploadResult<T> = {
|
|
5
5
|
result?: T;
|
|
6
6
|
uploadError?: unknown;
|
|
7
7
|
};
|
|
8
|
-
|
|
8
|
+
type HandleProjectUploadArg<T> = {
|
|
9
|
+
accountId: number;
|
|
10
|
+
projectConfig: ProjectConfig;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
callbackFunc: ProjectUploadCallbackFunction<T>;
|
|
13
|
+
uploadMessage?: string;
|
|
14
|
+
forceCreate?: boolean;
|
|
15
|
+
isUploadCommand?: boolean;
|
|
16
|
+
sendIR?: boolean;
|
|
17
|
+
skipValidation?: boolean;
|
|
18
|
+
profile?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
|
|
21
|
+
export declare function validateSourceDirectory(srcDir: string, projectConfig: ProjectConfig): void;
|
|
22
|
+
export declare function validateNoHSMetaMismatch(srcDir: string, projectConfig: ProjectConfig): Promise<void>;
|
|
23
|
+
export declare function handleTranslate(projectDir: string, projectConfig: ProjectConfig, accountId: number, skipValidation: boolean, profile: string | undefined): Promise<unknown>;
|
|
9
24
|
export {};
|
package/lib/projects/upload.js
CHANGED
|
@@ -4,29 +4,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.handleProjectUpload = handleProjectUpload;
|
|
7
|
+
exports.validateSourceDirectory = validateSourceDirectory;
|
|
8
|
+
exports.validateNoHSMetaMismatch = validateNoHSMetaMismatch;
|
|
9
|
+
exports.handleTranslate = handleTranslate;
|
|
7
10
|
const archiver_1 = __importDefault(require("archiver"));
|
|
8
11
|
const tmp_1 = __importDefault(require("tmp"));
|
|
9
12
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
13
|
const path_1 = __importDefault(require("path"));
|
|
11
14
|
const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
12
15
|
const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
|
|
13
|
-
const
|
|
16
|
+
const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
|
|
14
17
|
const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
|
|
15
18
|
const ui_1 = require("../ui");
|
|
16
|
-
const lang_1 = require("../lang");
|
|
17
|
-
const exitCodes_1 = require("../enums/exitCodes");
|
|
18
|
-
const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
|
|
19
19
|
const errorHandlers_1 = require("../errorHandlers");
|
|
20
20
|
const node_util_1 = __importDefault(require("node:util"));
|
|
21
|
-
const
|
|
21
|
+
const en_1 = require("../../lang/en");
|
|
22
|
+
const ensureProjectExists_1 = require("./ensureProjectExists");
|
|
23
|
+
const logger_1 = require("../ui/logger");
|
|
24
|
+
const buildAndDeploy_1 = require("./buildAndDeploy");
|
|
25
|
+
const exitCodes_1 = require("../enums/exitCodes");
|
|
22
26
|
async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
|
|
23
27
|
SpinniesManager_1.default.init({});
|
|
24
28
|
const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
|
|
25
29
|
SpinniesManager_1.default.add('upload', {
|
|
26
|
-
text:
|
|
27
|
-
accountIdentifier,
|
|
28
|
-
projectName,
|
|
29
|
-
}),
|
|
30
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.add(projectName, accountIdentifier),
|
|
30
31
|
succeedColor: 'white',
|
|
31
32
|
});
|
|
32
33
|
let buildId;
|
|
@@ -35,68 +36,56 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
|
|
|
35
36
|
const { data: upload } = await (0, projects_1.uploadProject)(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation);
|
|
36
37
|
buildId = upload.buildId;
|
|
37
38
|
SpinniesManager_1.default.succeed('upload', {
|
|
38
|
-
text:
|
|
39
|
-
accountIdentifier,
|
|
40
|
-
projectName,
|
|
41
|
-
}),
|
|
39
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.succeed(projectName, accountIdentifier),
|
|
42
40
|
});
|
|
43
41
|
if (buildId) {
|
|
44
|
-
logger_1.
|
|
45
|
-
buildId,
|
|
46
|
-
projectName,
|
|
47
|
-
}));
|
|
42
|
+
logger_1.uiLogger.debug(en_1.lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId));
|
|
48
43
|
}
|
|
49
44
|
}
|
|
50
45
|
catch (err) {
|
|
51
46
|
SpinniesManager_1.default.fail('upload', {
|
|
52
|
-
text:
|
|
53
|
-
accountIdentifier,
|
|
54
|
-
projectName,
|
|
55
|
-
}),
|
|
47
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.fail(projectName, accountIdentifier),
|
|
56
48
|
});
|
|
57
49
|
error = err;
|
|
58
50
|
}
|
|
59
51
|
return { buildId, error };
|
|
60
52
|
}
|
|
61
|
-
async function handleProjectUpload(accountId, projectConfig, projectDir, callbackFunc, uploadMessage, sendIR = false, skipValidation = false) {
|
|
53
|
+
async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, }) {
|
|
62
54
|
const srcDir = path_1.default.resolve(projectDir, projectConfig.srcDir);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
process.exit(exitCodes_1.EXIT_CODES.
|
|
55
|
+
try {
|
|
56
|
+
validateSourceDirectory(srcDir, projectConfig);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
(0, errorHandlers_1.logError)(e);
|
|
60
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
await validateNoHSMetaMismatch(srcDir, projectConfig);
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
(0, errorHandlers_1.logError)(e);
|
|
67
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
69
68
|
}
|
|
70
69
|
const tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
|
|
71
|
-
logger_1.
|
|
72
|
-
path: tempFile.name,
|
|
73
|
-
}));
|
|
70
|
+
logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
|
|
74
71
|
const output = fs_extra_1.default.createWriteStream(tempFile.name);
|
|
75
72
|
const archive = (0, archiver_1.default)('zip');
|
|
76
73
|
const result = new Promise(resolve => output.on('close', async function () {
|
|
77
|
-
logger_1.
|
|
78
|
-
byteCount: archive.pointer(),
|
|
79
|
-
}));
|
|
74
|
+
logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.compressed(archive.pointer()));
|
|
80
75
|
let intermediateRepresentation;
|
|
81
76
|
if (sendIR) {
|
|
82
77
|
try {
|
|
83
|
-
intermediateRepresentation = await (
|
|
84
|
-
projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
|
|
85
|
-
platformVersion: projectConfig.platformVersion,
|
|
86
|
-
accountId,
|
|
87
|
-
}, { skipValidation });
|
|
88
|
-
logger_1.logger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
|
|
78
|
+
intermediateRepresentation = await handleTranslate(projectDir, projectConfig, accountId, skipValidation, profile);
|
|
89
79
|
}
|
|
90
80
|
catch (e) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
(0, errorHandlers_1.logError)(e);
|
|
96
|
-
}
|
|
97
|
-
return process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
81
|
+
(0, errorHandlers_1.logError)(e);
|
|
82
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
98
83
|
}
|
|
99
84
|
}
|
|
85
|
+
await (0, ensureProjectExists_1.ensureProjectExists)(accountId, projectConfig.name, {
|
|
86
|
+
forceCreate,
|
|
87
|
+
uploadCommand: isUploadCommand,
|
|
88
|
+
});
|
|
100
89
|
const { buildId, error } = await uploadProjectFiles(accountId, projectConfig.name, tempFile.name, uploadMessage, projectConfig.platformVersion, intermediateRepresentation);
|
|
101
90
|
if (error) {
|
|
102
91
|
resolve({ uploadError: error });
|
|
@@ -113,9 +102,7 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
|
|
|
113
102
|
if (ignored) {
|
|
114
103
|
const isNodeModule = file.name.includes('node_modules');
|
|
115
104
|
if (!isNodeModule || !loggedIgnoredNodeModule) {
|
|
116
|
-
logger_1.
|
|
117
|
-
filename: file.name,
|
|
118
|
-
}));
|
|
105
|
+
logger_1.uiLogger.debug(en_1.lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
|
|
119
106
|
}
|
|
120
107
|
if (isNodeModule && !loggedIgnoredNodeModule) {
|
|
121
108
|
loggedIgnoredNodeModule = true;
|
|
@@ -126,3 +113,40 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
|
|
|
126
113
|
archive.finalize();
|
|
127
114
|
return result;
|
|
128
115
|
}
|
|
116
|
+
function validateSourceDirectory(srcDir, projectConfig) {
|
|
117
|
+
const filenames = fs_extra_1.default.readdirSync(srcDir);
|
|
118
|
+
if (!filenames || filenames.length === 0) {
|
|
119
|
+
const validationError = new Error(en_1.lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
|
|
120
|
+
validationError.name = 'ProjectValidationError';
|
|
121
|
+
throw validationError;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function validateNoHSMetaMismatch(srcDir, projectConfig) {
|
|
125
|
+
const hasHsMetaFiles = await (0, project_parsing_lib_1.projectContainsHsMetaFiles)(srcDir);
|
|
126
|
+
if (!(0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion) && hasHsMetaFiles) {
|
|
127
|
+
const validationError = new Error(en_1.lib.projectUpload.wrongPlatformVersionMetaFiles);
|
|
128
|
+
validationError.name = 'ProjectValidationError';
|
|
129
|
+
throw validationError;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function handleTranslate(projectDir, projectConfig, accountId, skipValidation, profile) {
|
|
133
|
+
try {
|
|
134
|
+
const intermediateRepresentation = await (0, project_parsing_lib_1.translate)({
|
|
135
|
+
projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
|
|
136
|
+
platformVersion: projectConfig.platformVersion,
|
|
137
|
+
accountId,
|
|
138
|
+
}, { skipValidation, profile });
|
|
139
|
+
logger_1.uiLogger.debug(node_util_1.default.inspect(intermediateRepresentation, false, null, true));
|
|
140
|
+
return intermediateRepresentation;
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
if ((0, project_parsing_lib_1.isTranslationError)(e)) {
|
|
144
|
+
const validationError = new Error(e.toString());
|
|
145
|
+
validationError.name = 'ProjectValidationError';
|
|
146
|
+
throw validationError;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
(0, errorHandlers_1.logError)(e);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
package/lib/projects/urls.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
export declare function getProjectComponentDistributionUrl(projectName: string, componentName: string, accountId: number): string;
|
|
2
|
+
export declare function getDeveloperOverviewUrl(accountId: number): string;
|
|
1
3
|
export declare function getProjectDetailUrl(projectName: string, accountId: number): string | undefined;
|
|
4
|
+
export declare function getProjectSettingsUrl(projectName: string, accountId: number): string | undefined;
|
|
2
5
|
export declare function getProjectActivityUrl(projectName: string, accountId: number): string;
|
|
3
6
|
export declare function getProjectBuildDetailUrl(projectName: string, buildId: number, accountId: number): string;
|
|
4
7
|
export declare function getProjectDeployDetailUrl(projectName: string, deployId: number, accountId: number): string;
|
|
8
|
+
export declare function getLocalDevUiUrl(accountId: number): string;
|