@hubspot/cli 7.5.10-experimental.0 → 7.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +102 -95
- package/commands/account/auth.d.ts +5 -7
- package/commands/account/auth.js +74 -87
- 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 +1 -2
- package/commands/app/migrate.js +7 -8
- 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 -8
- package/commands/auth.d.ts +5 -7
- package/commands/auth.js +30 -29
- 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 -15
- package/commands/completion.d.ts +3 -1
- package/commands/completion.js +23 -12
- 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 -74
- 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 +18 -45
- package/commands/doctor.d.ts +6 -8
- package/commands/doctor.js +30 -21
- package/commands/feedback.d.ts +4 -1
- package/commands/feedback.js +38 -47
- package/commands/fetch.d.ts +12 -1
- package/commands/fetch.js +49 -33
- 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 -41
- 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 -10
- 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 +17 -10
- package/commands/hubdb/create.d.ts +4 -9
- package/commands/hubdb/create.js +17 -10
- package/commands/hubdb/delete.d.ts +4 -9
- package/commands/hubdb/delete.js +17 -10
- package/commands/hubdb/fetch.d.ts +4 -9
- package/commands/hubdb/fetch.js +17 -10
- 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 +23 -45
- package/commands/init.d.ts +3 -7
- package/commands/init.js +17 -8
- package/commands/lint.d.ts +6 -4
- package/commands/lint.js +42 -43
- package/commands/list.d.ts +3 -7
- package/commands/list.js +17 -11
- package/commands/logs.d.ts +10 -1
- package/commands/logs.js +53 -44
- package/commands/mcp/setup.d.ts +7 -0
- package/commands/mcp/setup.js +52 -0
- package/commands/mcp/start.d.ts +3 -0
- package/commands/mcp/start.js +77 -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 -29
- package/commands/module.d.ts +3 -1
- package/commands/module.js +23 -10
- package/commands/mv.d.ts +3 -7
- package/commands/mv.js +17 -11
- package/commands/open.d.ts +3 -7
- package/commands/open.js +17 -11
- package/commands/project/add.d.ts +5 -2
- package/commands/project/add.js +43 -80
- package/commands/project/cloneApp.d.ts +1 -1
- package/commands/project/cloneApp.js +2 -2
- package/commands/project/create.d.ts +2 -8
- package/commands/project/create.js +84 -55
- package/commands/project/deploy.d.ts +2 -0
- package/commands/project/deploy.js +67 -13
- package/commands/project/dev/deprecatedFlow.d.ts +8 -2
- package/commands/project/dev/deprecatedFlow.js +9 -1
- package/commands/project/dev/index.d.ts +1 -4
- package/commands/project/dev/index.js +74 -72
- package/commands/project/dev/unifiedFlow.d.ts +10 -2
- package/commands/project/dev/unifiedFlow.js +74 -40
- package/commands/project/listBuilds.js +2 -5
- package/commands/project/migrate.d.ts +1 -0
- package/commands/project/migrate.js +7 -2
- package/commands/project/profile/add.js +102 -64
- package/commands/project/profile/delete.d.ts +6 -0
- package/commands/project/profile/{remove.js → delete.js} +38 -28
- package/commands/project/profile.js +2 -2
- package/commands/project/upload.js +5 -53
- package/commands/project/validate.d.ts +6 -0
- package/commands/project/validate.js +82 -0
- package/commands/project.js +2 -2
- package/commands/remove.d.ts +3 -7
- package/commands/remove.js +22 -22
- package/commands/sandbox/create.d.ts +4 -9
- package/commands/sandbox/create.js +18 -11
- package/commands/sandbox/delete.d.ts +4 -9
- package/commands/sandbox/delete.js +18 -11
- package/commands/sandbox.d.ts +3 -4
- package/commands/sandbox.js +18 -43
- package/commands/secret/addSecret.d.ts +4 -9
- package/commands/secret/addSecret.js +17 -10
- package/commands/secret/deleteSecret.d.ts +4 -9
- package/commands/secret/deleteSecret.js +17 -10
- package/commands/secret/listSecret.d.ts +4 -9
- package/commands/secret/listSecret.js +17 -10
- package/commands/secret/updateSecret.d.ts +4 -9
- package/commands/secret/updateSecret.js +17 -10
- package/commands/secret.d.ts +3 -4
- package/commands/secret.js +23 -48
- package/commands/testAccount/create.d.ts +6 -0
- package/commands/testAccount/create.js +100 -0
- package/commands/testAccount/createConfig.d.ts +10 -0
- package/commands/testAccount/createConfig.js +98 -0
- package/commands/testAccount/delete.d.ts +6 -0
- package/commands/testAccount/delete.js +48 -0
- package/commands/testAccount.d.ts +3 -0
- package/commands/testAccount.js +28 -0
- package/commands/theme/generate-selectors.d.ts +3 -7
- package/commands/theme/generate-selectors.js +20 -15
- package/commands/theme/marketplace-validate.d.ts +4 -9
- package/commands/theme/marketplace-validate.js +22 -17
- package/commands/theme/preview.d.ts +4 -9
- package/commands/theme/preview.js +32 -26
- package/commands/theme.d.ts +3 -4
- package/commands/theme.js +22 -47
- package/commands/upload.d.ts +12 -1
- package/commands/upload.js +116 -134
- package/commands/watch.d.ts +14 -1
- package/commands/watch.js +74 -75
- package/lang/en.d.ts +1092 -683
- package/lang/en.js +898 -494
- package/lang/en.lyaml +28 -225
- package/lib/accountTypes.js +1 -2
- package/lib/app/migrate.d.ts +23 -0
- package/lib/app/migrate.js +34 -12
- package/lib/app/migrate_legacy.js +7 -7
- package/lib/app/urls.d.ts +16 -0
- package/lib/app/urls.js +16 -0
- package/lib/commonOpts.d.ts +1 -3
- package/lib/commonOpts.js +1 -1
- package/lib/configMigrate.d.ts +2 -2
- package/lib/configMigrate.js +34 -55
- package/lib/configOptions.d.ts +4 -0
- package/lib/configOptions.js +41 -46
- package/lib/constants.d.ts +29 -0
- package/lib/constants.js +30 -1
- package/lib/dependencyManagement.d.ts +0 -5
- package/lib/dependencyManagement.js +13 -39
- package/lib/doctor/Doctor.js +3 -2
- package/lib/errorHandlers/index.js +7 -0
- package/lib/errorHandlers/suppressError.js +12 -19
- package/lib/filesystem.d.ts +1 -1
- package/lib/generateSelectors.js +3 -5
- 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/autoUpdateMiddleware.d.ts +1 -0
- package/lib/middleware/autoUpdateMiddleware.js +89 -0
- package/lib/middleware/configMiddleware.js +23 -0
- package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
- package/lib/middleware/fireAlarmMiddleware.js +12 -24
- package/lib/npm.d.ts +9 -0
- package/lib/npm.js +36 -0
- package/lib/projectProfiles.d.ts +7 -0
- package/lib/projectProfiles.js +83 -0
- 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 +18 -3
- package/lib/projects/components.d.ts +2 -0
- package/lib/projects/components.js +82 -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} +20 -11
- package/lib/projects/create/v3.d.ts +27 -0
- package/lib/projects/create/v3.js +158 -0
- package/lib/projects/localDev/AppDevModeInterface.d.ts +30 -0
- package/lib/projects/localDev/AppDevModeInterface.js +215 -0
- package/lib/projects/localDev/DevServerManager.js +4 -3
- package/lib/projects/localDev/DevServerManagerV2.d.ts +11 -22
- package/lib/projects/localDev/DevServerManagerV2.js +21 -17
- package/lib/projects/localDev/LocalDevLogger.d.ts +30 -0
- package/lib/projects/localDev/LocalDevLogger.js +159 -0
- package/lib/projects/localDev/LocalDevManager.js +12 -5
- 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/projects/localDev/helpers.d.ts +2 -1
- package/lib/projects/localDev/helpers.js +30 -1
- package/lib/projects/upload.d.ts +3 -0
- package/lib/projects/upload.js +59 -19
- package/lib/projects/urls.d.ts +3 -0
- package/lib/projects/urls.js +17 -1
- package/lib/prompts/createApiSamplePrompt.d.ts +2 -10
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +17 -0
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +96 -0
- package/lib/prompts/createProjectPrompt.d.ts +14 -5
- package/lib/prompts/createProjectPrompt.js +38 -13
- package/lib/prompts/createTemplatePrompt.d.ts +22 -4
- package/lib/prompts/installAppPrompt.d.ts +2 -0
- package/lib/prompts/installAppPrompt.js +45 -0
- package/lib/prompts/personalAccessKeyPrompt.js +35 -24
- package/lib/prompts/projectAddPrompt.d.ts +5 -1
- package/lib/prompts/projectAddPrompt.js +35 -7
- package/lib/prompts/projectDevTargetAccountPrompt.d.ts +6 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +6 -6
- package/lib/prompts/promptUtils.d.ts +4 -1
- package/lib/prompts/promptUtils.js +5 -1
- package/lib/prompts/selectAppPrompt.d.ts +2 -0
- package/lib/prompts/selectAppPrompt.js +40 -0
- package/lib/prompts/{selectPublicAppPrompt.d.ts → selectPublicAppForMigrationPrompt.d.ts} +1 -1
- package/lib/prompts/{selectPublicAppPrompt.js → selectPublicAppForMigrationPrompt.js} +8 -8
- package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
- 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/index.js +4 -1
- package/lib/upload.d.ts +1 -1
- package/lib/yargsUtils.d.ts +4 -0
- 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 +24 -16
- 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 +7 -0
- package/commands/project/profile/remove.d.ts +0 -6
- package/lib/projects/create.d.ts +0 -5
- package/lib/projects/localDev/LocalDevManagerV2.d.ts +0 -64
- package/lib/projects/localDev/LocalDevManagerV2.js +0 -345
- package/lib/prompts/installPublicAppPrompt.d.ts +0 -1
- package/lib/prompts/installPublicAppPrompt.js +0 -41
|
@@ -8,43 +8,58 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
10
10
|
const promptUtils_1 = require("./promptUtils");
|
|
11
|
-
const lang_1 = require("../lang");
|
|
12
11
|
const constants_1 = require("../constants");
|
|
12
|
+
const en_1 = require("../../lang/en");
|
|
13
13
|
function validateProjectDirectory(input) {
|
|
14
14
|
if (!input) {
|
|
15
|
-
return
|
|
15
|
+
return en_1.lib.prompts.createProjectPrompt.errors.destRequired;
|
|
16
16
|
}
|
|
17
17
|
if (fs_1.default.existsSync(path_1.default.resolve((0, path_2.getCwd)(), path_1.default.join(input, constants_1.PROJECT_CONFIG_FILE)))) {
|
|
18
|
-
return
|
|
18
|
+
return en_1.lib.prompts.createProjectPrompt.errors.invalidDest;
|
|
19
19
|
}
|
|
20
20
|
if (!(0, path_2.isValidPath)(input)) {
|
|
21
|
-
return
|
|
21
|
+
return en_1.lib.prompts.createProjectPrompt.errors.invalidCharacters;
|
|
22
22
|
}
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
25
25
|
function findTemplateByNameOrLabel(projectTemplates, templateNameOrLabel) {
|
|
26
26
|
return projectTemplates.find(t => t.name === templateNameOrLabel || t.label === templateNameOrLabel);
|
|
27
27
|
}
|
|
28
|
-
async function createProjectPrompt(promptOptions, projectTemplates) {
|
|
28
|
+
async function createProjectPrompt(promptOptions, projectTemplates, componentTemplates) {
|
|
29
29
|
const createProjectFromTemplate = !!projectTemplates && projectTemplates.length > 0;
|
|
30
|
+
const createProjectFromComponents = Array.isArray(componentTemplates) && componentTemplates?.length > 0;
|
|
31
|
+
const selectedComponents = [];
|
|
32
|
+
if (createProjectFromComponents && promptOptions.features) {
|
|
33
|
+
componentTemplates.forEach(template => {
|
|
34
|
+
if (!template.value) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (promptOptions.features?.includes(template.value.type)) {
|
|
38
|
+
if (template.disabled) {
|
|
39
|
+
throw new Error(`Cannot create project with template '${template.value.type}'. Reasons: ${template.disabled}`);
|
|
40
|
+
}
|
|
41
|
+
selectedComponents.push(template.value);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
30
45
|
const providedTemplateIsValid = createProjectFromTemplate &&
|
|
31
46
|
!!promptOptions.template &&
|
|
32
47
|
!!findTemplateByNameOrLabel(projectTemplates, promptOptions.template);
|
|
33
48
|
const result = await (0, promptUtils_1.promptUser)([
|
|
34
49
|
{
|
|
35
50
|
name: 'name',
|
|
36
|
-
message:
|
|
51
|
+
message: en_1.lib.prompts.createProjectPrompt.enterName,
|
|
37
52
|
when: !promptOptions.name,
|
|
38
53
|
validate: (input) => {
|
|
39
54
|
if (!input) {
|
|
40
|
-
return
|
|
55
|
+
return en_1.lib.prompts.createProjectPrompt.errors.nameRequired;
|
|
41
56
|
}
|
|
42
57
|
return true;
|
|
43
58
|
},
|
|
44
59
|
},
|
|
45
60
|
{
|
|
46
61
|
name: 'dest',
|
|
47
|
-
message:
|
|
62
|
+
message: en_1.lib.prompts.createProjectPrompt.enterDest,
|
|
48
63
|
when: !promptOptions.dest,
|
|
49
64
|
default: answers => {
|
|
50
65
|
const projectName = (0, path_2.sanitizeFileName)(promptOptions.name || answers.name);
|
|
@@ -59,10 +74,8 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
|
|
|
59
74
|
name: 'projectTemplate',
|
|
60
75
|
message: () => {
|
|
61
76
|
return promptOptions.template && !providedTemplateIsValid
|
|
62
|
-
?
|
|
63
|
-
|
|
64
|
-
})
|
|
65
|
-
: (0, lang_1.i18n)(`lib.prompts.createProjectPrompt.selectTemplate`);
|
|
77
|
+
? en_1.lib.prompts.createProjectPrompt.errors.invalidTemplate(promptOptions.template)
|
|
78
|
+
: en_1.lib.prompts.createProjectPrompt.selectTemplate;
|
|
66
79
|
},
|
|
67
80
|
when: createProjectFromTemplate && !providedTemplateIsValid,
|
|
68
81
|
type: 'list',
|
|
@@ -75,6 +88,15 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
|
|
|
75
88
|
})
|
|
76
89
|
: undefined,
|
|
77
90
|
},
|
|
91
|
+
{
|
|
92
|
+
name: 'componentTemplates',
|
|
93
|
+
message: en_1.lib.prompts.createProjectPrompt.features,
|
|
94
|
+
when: !promptOptions.features &&
|
|
95
|
+
createProjectFromComponents &&
|
|
96
|
+
selectedComponents.length === 0,
|
|
97
|
+
type: 'checkbox',
|
|
98
|
+
choices: componentTemplates,
|
|
99
|
+
},
|
|
78
100
|
]);
|
|
79
101
|
if (!result.name) {
|
|
80
102
|
result.name = promptOptions.name;
|
|
@@ -82,12 +104,15 @@ async function createProjectPrompt(promptOptions, projectTemplates) {
|
|
|
82
104
|
if (!result.dest) {
|
|
83
105
|
result.dest = promptOptions.dest;
|
|
84
106
|
}
|
|
107
|
+
if (!result.componentTemplates) {
|
|
108
|
+
result.componentTemplates = selectedComponents;
|
|
109
|
+
}
|
|
85
110
|
if (providedTemplateIsValid) {
|
|
86
111
|
result.projectTemplate = findTemplateByNameOrLabel(projectTemplates, promptOptions.template);
|
|
87
112
|
}
|
|
88
113
|
if (projectTemplates && projectTemplates.length > 0) {
|
|
89
114
|
if (!result.projectTemplate) {
|
|
90
|
-
throw new Error(
|
|
115
|
+
throw new Error(en_1.lib.prompts.createProjectPrompt.errors.projectTemplateRequired);
|
|
91
116
|
}
|
|
92
117
|
return result;
|
|
93
118
|
}
|
|
@@ -1,7 +1,25 @@
|
|
|
1
|
-
declare const templateTypeChoices: {
|
|
2
|
-
name:
|
|
3
|
-
value:
|
|
4
|
-
}
|
|
1
|
+
declare const templateTypeChoices: [{
|
|
2
|
+
readonly name: "page";
|
|
3
|
+
readonly value: "page-template";
|
|
4
|
+
}, {
|
|
5
|
+
readonly name: "email";
|
|
6
|
+
readonly value: "email-template";
|
|
7
|
+
}, {
|
|
8
|
+
readonly name: "partial";
|
|
9
|
+
readonly value: "partial";
|
|
10
|
+
}, {
|
|
11
|
+
readonly name: "global partial";
|
|
12
|
+
readonly value: "global-partial";
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "blog listing";
|
|
15
|
+
readonly value: "blog-listing-template";
|
|
16
|
+
}, {
|
|
17
|
+
readonly name: "blog post";
|
|
18
|
+
readonly value: "blog-post-template";
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "search results";
|
|
21
|
+
readonly value: "search-template";
|
|
22
|
+
}];
|
|
5
23
|
interface CreateTemplatePromptResponse {
|
|
6
24
|
templateType: (typeof templateTypeChoices)[number]['value'];
|
|
7
25
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.installAppBrowserPrompt = installAppBrowserPrompt;
|
|
7
|
+
exports.installAppAutoPrompt = installAppAutoPrompt;
|
|
8
|
+
const open_1 = __importDefault(require("open"));
|
|
9
|
+
const promptUtils_1 = require("./promptUtils");
|
|
10
|
+
const exitCodes_1 = require("../enums/exitCodes");
|
|
11
|
+
const en_1 = require("../../lang/en");
|
|
12
|
+
const logger_1 = require("../ui/logger");
|
|
13
|
+
async function installAppBrowserPrompt(installUrl, isReinstall = false) {
|
|
14
|
+
logger_1.uiLogger.log('');
|
|
15
|
+
if (isReinstall) {
|
|
16
|
+
logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.reinstallExplanation);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.explanation);
|
|
20
|
+
}
|
|
21
|
+
const { shouldOpenBrowser } = await (0, promptUtils_1.promptUser)({
|
|
22
|
+
name: 'shouldOpenBrowser',
|
|
23
|
+
type: 'confirm',
|
|
24
|
+
message: isReinstall
|
|
25
|
+
? en_1.lib.prompts.installAppPrompt.reinstallPrompt
|
|
26
|
+
: en_1.lib.prompts.installAppPrompt.prompt,
|
|
27
|
+
});
|
|
28
|
+
if (!isReinstall && !shouldOpenBrowser) {
|
|
29
|
+
logger_1.uiLogger.log(en_1.lib.prompts.installAppPrompt.decline);
|
|
30
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
31
|
+
}
|
|
32
|
+
else if (!shouldOpenBrowser) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
(0, open_1.default)(installUrl);
|
|
36
|
+
}
|
|
37
|
+
async function installAppAutoPrompt() {
|
|
38
|
+
logger_1.uiLogger.log('');
|
|
39
|
+
const { shouldInstall } = await (0, promptUtils_1.promptUser)({
|
|
40
|
+
name: 'shouldInstall',
|
|
41
|
+
type: 'confirm',
|
|
42
|
+
message: en_1.lib.prompts.installAppPrompt.autoPrompt,
|
|
43
|
+
});
|
|
44
|
+
return shouldInstall;
|
|
45
|
+
}
|
|
@@ -12,9 +12,9 @@ const urls_1 = require("@hubspot/local-dev-lib/urls");
|
|
|
12
12
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
13
13
|
const promptUtils_1 = require("./promptUtils");
|
|
14
14
|
const accountNamePrompt_1 = require("./accountNamePrompt");
|
|
15
|
-
const lang_1 = require("../lang");
|
|
16
15
|
const ui_1 = require("../ui");
|
|
17
16
|
const exitCodes_1 = require("../enums/exitCodes");
|
|
17
|
+
const en_1 = require("../../lang/en");
|
|
18
18
|
/**
|
|
19
19
|
* Displays notification to user that we are about to open the browser,
|
|
20
20
|
* then opens their browser to the personal-access-key shortlink
|
|
@@ -23,24 +23,26 @@ async function personalAccessKeyPrompt({ env, account, }) {
|
|
|
23
23
|
const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
|
|
24
24
|
let url = `${websiteOrigin}/l/personal-access-key`;
|
|
25
25
|
if (process.env.BROWSER !== 'none') {
|
|
26
|
-
(0, ui_1.uiInfoSection)(
|
|
27
|
-
logger_1.logger.log(
|
|
26
|
+
(0, ui_1.uiInfoSection)(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeySetupTitle, () => {
|
|
27
|
+
logger_1.logger.log(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyBrowserOpenPrep);
|
|
28
28
|
});
|
|
29
29
|
if (account) {
|
|
30
30
|
url = `${websiteOrigin}/personal-access-key/${account}`;
|
|
31
31
|
}
|
|
32
|
-
const { personalAcessKeyBrowserOpenPrep:
|
|
32
|
+
const { personalAcessKeyBrowserOpenPrep: choice } = await (0, promptUtils_1.promptUser)([
|
|
33
33
|
PERSONAL_ACCESS_KEY_BROWSER_OPEN_PREP,
|
|
34
34
|
]);
|
|
35
|
-
if (
|
|
36
|
-
(0, open_1.default)(url, { url: true });
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
35
|
+
if (!choice) {
|
|
39
36
|
(0, config_1.deleteEmptyConfigFile)();
|
|
40
37
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
41
38
|
}
|
|
39
|
+
if (choice ===
|
|
40
|
+
en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices
|
|
41
|
+
.OPEN_BROWSER) {
|
|
42
|
+
(0, open_1.default)(url, { url: true });
|
|
43
|
+
logger_1.logger.log(en_1.lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser(url));
|
|
44
|
+
}
|
|
42
45
|
}
|
|
43
|
-
logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.personalAccessKeyPrompt.logs.openingWebBrowser`, { url }));
|
|
44
46
|
const { personalAccessKey } = await (0, promptUtils_1.promptUser)(PERSONAL_ACCESS_KEY);
|
|
45
47
|
return {
|
|
46
48
|
personalAccessKey,
|
|
@@ -49,52 +51,59 @@ async function personalAccessKeyPrompt({ env, account, }) {
|
|
|
49
51
|
}
|
|
50
52
|
const ACCOUNT_ID = {
|
|
51
53
|
name: 'accountId',
|
|
52
|
-
message:
|
|
54
|
+
message: en_1.lib.prompts.personalAccessKeyPrompt.enterAccountId,
|
|
53
55
|
type: 'number',
|
|
54
56
|
validate(val) {
|
|
55
57
|
if (!Number.isNaN(val) && val !== undefined && val > 0) {
|
|
56
58
|
return true;
|
|
57
59
|
}
|
|
58
|
-
return
|
|
60
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors.invalidAccountId;
|
|
59
61
|
},
|
|
60
62
|
};
|
|
61
63
|
const CLIENT_ID = {
|
|
62
64
|
name: 'clientId',
|
|
63
|
-
message:
|
|
65
|
+
message: en_1.lib.prompts.personalAccessKeyPrompt.enterClientId,
|
|
64
66
|
validate(val) {
|
|
65
67
|
if (typeof val !== 'string') {
|
|
66
|
-
return
|
|
68
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors.invalidOauthClientId;
|
|
67
69
|
}
|
|
68
70
|
else if (val.length !== 36) {
|
|
69
|
-
return
|
|
71
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
72
|
+
.invalidOauthClientIdLength;
|
|
70
73
|
}
|
|
71
74
|
return true;
|
|
72
75
|
},
|
|
73
76
|
};
|
|
74
77
|
const CLIENT_SECRET = {
|
|
75
78
|
name: 'clientSecret',
|
|
76
|
-
message:
|
|
79
|
+
message: en_1.lib.prompts.personalAccessKeyPrompt.enterClientSecret,
|
|
77
80
|
validate(val) {
|
|
78
81
|
if (typeof val !== 'string') {
|
|
79
|
-
return
|
|
82
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
83
|
+
.invalidOauthClientSecret;
|
|
80
84
|
}
|
|
81
85
|
else if (val.length !== 36) {
|
|
82
|
-
return
|
|
86
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
87
|
+
.invalidOauthClientSecretLength;
|
|
83
88
|
}
|
|
84
89
|
else if (val[0] === '*') {
|
|
85
|
-
return
|
|
90
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
91
|
+
.invalidOauthClientSecretCopy;
|
|
86
92
|
}
|
|
87
93
|
return true;
|
|
88
94
|
},
|
|
89
95
|
};
|
|
90
96
|
const PERSONAL_ACCESS_KEY_BROWSER_OPEN_PREP = {
|
|
91
97
|
name: 'personalAcessKeyBrowserOpenPrep',
|
|
92
|
-
type: '
|
|
93
|
-
message:
|
|
98
|
+
type: 'list',
|
|
99
|
+
message: 'Choose your preferred method of authentication',
|
|
100
|
+
choices: Object.values(en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices),
|
|
101
|
+
default: en_1.lib.prompts.personalAccessKeyPrompt.personalAccessKeyPromptChoices
|
|
102
|
+
.OPEN_BROWSER,
|
|
94
103
|
};
|
|
95
104
|
const PERSONAL_ACCESS_KEY = {
|
|
96
105
|
name: 'personalAccessKey',
|
|
97
|
-
message:
|
|
106
|
+
message: en_1.lib.prompts.personalAccessKeyPrompt.enterPersonalAccessKey,
|
|
98
107
|
transformer: (val) => {
|
|
99
108
|
if (!val)
|
|
100
109
|
return val;
|
|
@@ -106,10 +115,12 @@ const PERSONAL_ACCESS_KEY = {
|
|
|
106
115
|
},
|
|
107
116
|
validate(val) {
|
|
108
117
|
if (!val || typeof val !== 'string') {
|
|
109
|
-
return
|
|
118
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
119
|
+
.invalidPersonalAccessKey;
|
|
110
120
|
}
|
|
111
121
|
else if (val[0] === '•') {
|
|
112
|
-
return
|
|
122
|
+
return en_1.lib.prompts.personalAccessKeyPrompt.errors
|
|
123
|
+
.invalidPersonalAccessKeyCopy;
|
|
113
124
|
}
|
|
114
125
|
return true;
|
|
115
126
|
},
|
|
@@ -117,7 +128,7 @@ const PERSONAL_ACCESS_KEY = {
|
|
|
117
128
|
const SCOPES = {
|
|
118
129
|
type: 'checkbox',
|
|
119
130
|
name: 'scopes',
|
|
120
|
-
message:
|
|
131
|
+
message: en_1.lib.prompts.personalAccessKeyPrompt.selectScopes,
|
|
121
132
|
default: [...auth_1.DEFAULT_OAUTH_SCOPES],
|
|
122
133
|
choices: [...auth_1.OAUTH_SCOPES],
|
|
123
134
|
};
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { ComponentTemplate } from '../../types/Projects';
|
|
1
|
+
import { ComponentTemplate, ComponentTemplateChoice } from '../../types/Projects';
|
|
2
2
|
type ProjectAddPromptResponse = {
|
|
3
3
|
componentTemplate: ComponentTemplate;
|
|
4
4
|
name: string;
|
|
5
5
|
};
|
|
6
|
+
type ProjectAddPromptResponseV3 = {
|
|
7
|
+
componentTemplate: ComponentTemplate[];
|
|
8
|
+
};
|
|
6
9
|
export declare function projectAddPrompt(components: ComponentTemplate[], promptOptions?: {
|
|
7
10
|
name?: string;
|
|
8
11
|
type?: string;
|
|
9
12
|
}): Promise<ProjectAddPromptResponse>;
|
|
13
|
+
export declare function projectAddPromptV3(components: ComponentTemplateChoice[], selectedFeatures: string[] | undefined): Promise<ProjectAddPromptResponseV3>;
|
|
10
14
|
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.projectAddPrompt = projectAddPrompt;
|
|
4
|
+
exports.projectAddPromptV3 = projectAddPromptV3;
|
|
4
5
|
const promptUtils_1 = require("./promptUtils");
|
|
5
|
-
const
|
|
6
|
+
const en_1 = require("../../lang/en");
|
|
6
7
|
function findComponentByPathOrLabel(components, componentPathOrLabel) {
|
|
7
8
|
return components.find(c => c.path === componentPathOrLabel || c.label === componentPathOrLabel);
|
|
8
9
|
}
|
|
@@ -14,10 +15,8 @@ async function projectAddPrompt(components, promptOptions = {}) {
|
|
|
14
15
|
name: 'componentTemplate',
|
|
15
16
|
message: () => {
|
|
16
17
|
return promptOptions.type && !providedTypeIsValid
|
|
17
|
-
?
|
|
18
|
-
|
|
19
|
-
})
|
|
20
|
-
: (0, lang_1.i18n)(`lib.prompts.projectAddPrompt.selectType`);
|
|
18
|
+
? en_1.lib.prompts.projectAddPrompt.errors.invalidType(promptOptions.type)
|
|
19
|
+
: en_1.lib.prompts.projectAddPrompt.selectType;
|
|
21
20
|
},
|
|
22
21
|
when: !providedTypeIsValid,
|
|
23
22
|
type: 'list',
|
|
@@ -30,11 +29,11 @@ async function projectAddPrompt(components, promptOptions = {}) {
|
|
|
30
29
|
},
|
|
31
30
|
{
|
|
32
31
|
name: 'name',
|
|
33
|
-
message:
|
|
32
|
+
message: en_1.lib.prompts.projectAddPrompt.enterName,
|
|
34
33
|
when: !promptOptions.name,
|
|
35
34
|
validate: (input) => {
|
|
36
35
|
if (!input) {
|
|
37
|
-
return
|
|
36
|
+
return en_1.lib.prompts.projectAddPrompt.errors.nameRequired;
|
|
38
37
|
}
|
|
39
38
|
return true;
|
|
40
39
|
},
|
|
@@ -48,3 +47,32 @@ async function projectAddPrompt(components, promptOptions = {}) {
|
|
|
48
47
|
}
|
|
49
48
|
return result;
|
|
50
49
|
}
|
|
50
|
+
async function projectAddPromptV3(components, selectedFeatures) {
|
|
51
|
+
const selectedComponents = [];
|
|
52
|
+
if (selectedFeatures) {
|
|
53
|
+
components.forEach(template => {
|
|
54
|
+
if (!template.value) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (selectedFeatures?.includes(template.value.type)) {
|
|
58
|
+
if (template.disabled) {
|
|
59
|
+
throw new Error(en_1.lib.prompts.projectAddPrompt.errors.cannotAddFeature(template.value.type, template.disabled));
|
|
60
|
+
}
|
|
61
|
+
selectedComponents.push(template.value);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const result = await (0, promptUtils_1.promptUser)([
|
|
66
|
+
{
|
|
67
|
+
name: 'componentTemplate',
|
|
68
|
+
message: en_1.lib.prompts.projectAddPrompt.selectType,
|
|
69
|
+
when: !selectedFeatures && selectedComponents.length === 0,
|
|
70
|
+
type: 'checkbox',
|
|
71
|
+
choices: components,
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
if (!result.componentTemplate) {
|
|
75
|
+
result.componentTemplate = selectedComponents;
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
|
|
2
2
|
import { DeveloperTestAccount } from '@hubspot/local-dev-lib/types/developerTestAccounts';
|
|
3
|
-
|
|
3
|
+
export type ProjectDevTargetAccountPromptResponse = {
|
|
4
|
+
targetAccountId: number | null;
|
|
5
|
+
createNestedAccount: boolean;
|
|
6
|
+
parentAccountId?: number | null;
|
|
7
|
+
notInConfigAccount?: DeveloperTestAccount | null;
|
|
8
|
+
};
|
|
4
9
|
export declare function selectSandboxTargetAccountPrompt(accounts: CLIAccount[], defaultAccountConfig: CLIAccount): Promise<ProjectDevTargetAccountPromptResponse>;
|
|
5
10
|
export declare function selectDeveloperTestTargetAccountPrompt(accounts: CLIAccount[], defaultAccountConfig: CLIAccount): Promise<ProjectDevTargetAccountPromptResponse>;
|
|
6
11
|
export declare function confirmDefaultAccountPrompt(accountName: string, accountType: string): Promise<boolean>;
|
|
@@ -4,16 +4,16 @@ exports.selectSandboxTargetAccountPrompt = selectSandboxTargetAccountPrompt;
|
|
|
4
4
|
exports.selectDeveloperTestTargetAccountPrompt = selectDeveloperTestTargetAccountPrompt;
|
|
5
5
|
exports.confirmDefaultAccountPrompt = confirmDefaultAccountPrompt;
|
|
6
6
|
exports.confirmUseExistingDeveloperTestAccountPrompt = confirmUseExistingDeveloperTestAccountPrompt;
|
|
7
|
-
const promptUtils_1 = require("./promptUtils");
|
|
8
|
-
const lang_1 = require("../lang");
|
|
9
|
-
const ui_1 = require("../ui");
|
|
10
|
-
const accountTypes_1 = require("../accountTypes");
|
|
11
7
|
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
12
8
|
const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
|
|
13
9
|
const config_2 = require("@hubspot/local-dev-lib/constants/config");
|
|
14
10
|
const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
|
|
15
11
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
16
12
|
const developerTestAccounts_1 = require("@hubspot/local-dev-lib/api/developerTestAccounts");
|
|
13
|
+
const promptUtils_1 = require("./promptUtils");
|
|
14
|
+
const lang_1 = require("../lang");
|
|
15
|
+
const ui_1 = require("../ui");
|
|
16
|
+
const accountTypes_1 = require("../accountTypes");
|
|
17
17
|
const exitCodes_1 = require("../enums/exitCodes");
|
|
18
18
|
function mapNestedAccount(accountConfig) {
|
|
19
19
|
const parentAccountId = accountConfig.parentAccountId ?? null;
|
|
@@ -42,7 +42,7 @@ async function selectSandboxTargetAccountPrompt(accounts, defaultAccountConfig)
|
|
|
42
42
|
sandboxUsage = data.usage;
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
|
-
logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
|
|
45
|
+
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
|
|
46
46
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
@@ -101,7 +101,7 @@ async function selectDeveloperTestTargetAccountPrompt(accounts, defaultAccountCo
|
|
|
101
101
|
devTestAccountsResponse = data;
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
104
|
-
logger_1.logger.error(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`);
|
|
104
|
+
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.projectDevTargetAccountPrompt.noAccountId`));
|
|
105
105
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { PromptConfig, GenericPromptResponse, PromptWhen, PromptChoices } from '../../types/Prompts';
|
|
2
|
+
export declare const Separator: any;
|
|
2
3
|
export declare function promptUser<T extends GenericPromptResponse>(config: PromptConfig<T> | PromptConfig<T>[]): Promise<T>;
|
|
3
4
|
export declare function confirmPrompt(message: string, options?: {
|
|
4
5
|
defaultAnswer?: boolean;
|
|
5
6
|
when?: PromptWhen;
|
|
6
7
|
}): Promise<boolean>;
|
|
7
|
-
export declare function listPrompt<T = string>(message: string, { choices, when, }: {
|
|
8
|
+
export declare function listPrompt<T = string>(message: string, { choices, when, defaultAnswer, validate, }: {
|
|
8
9
|
choices: PromptChoices<T>;
|
|
9
10
|
when?: PromptWhen;
|
|
11
|
+
defaultAnswer?: string | number | boolean;
|
|
12
|
+
validate?: (input: T[]) => (boolean | string) | Promise<boolean | string>;
|
|
10
13
|
}): Promise<T>;
|
|
11
14
|
export declare function inputPrompt(message: string, { when, validate, defaultAnswer, }?: {
|
|
12
15
|
when?: boolean | (() => boolean);
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Separator = void 0;
|
|
3
4
|
exports.promptUser = promptUser;
|
|
4
5
|
exports.confirmPrompt = confirmPrompt;
|
|
5
6
|
exports.listPrompt = listPrompt;
|
|
6
7
|
exports.inputPrompt = inputPrompt;
|
|
7
8
|
const inquirer = require('inquirer');
|
|
8
9
|
const promptModule = inquirer.createPromptModule();
|
|
10
|
+
exports.Separator = new inquirer.Separator();
|
|
9
11
|
function promptUser(config) {
|
|
10
12
|
return promptModule(config);
|
|
11
13
|
}
|
|
@@ -22,7 +24,7 @@ async function confirmPrompt(message, options = {}) {
|
|
|
22
24
|
]);
|
|
23
25
|
return choice;
|
|
24
26
|
}
|
|
25
|
-
async function listPrompt(message, { choices, when, }) {
|
|
27
|
+
async function listPrompt(message, { choices, when, defaultAnswer, validate, }) {
|
|
26
28
|
const { choice } = await promptUser([
|
|
27
29
|
{
|
|
28
30
|
name: 'choice',
|
|
@@ -30,6 +32,8 @@ async function listPrompt(message, { choices, when, }) {
|
|
|
30
32
|
message,
|
|
31
33
|
choices,
|
|
32
34
|
when,
|
|
35
|
+
default: defaultAnswer,
|
|
36
|
+
validate,
|
|
33
37
|
},
|
|
34
38
|
]);
|
|
35
39
|
return choice;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectAppPrompt = selectAppPrompt;
|
|
4
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
5
|
+
const appsDev_1 = require("@hubspot/local-dev-lib/api/appsDev");
|
|
6
|
+
const index_1 = require("../errorHandlers/index");
|
|
7
|
+
const en_1 = require("../../lang/en");
|
|
8
|
+
const promptUtils_1 = require("../prompts/promptUtils");
|
|
9
|
+
async function selectAppPrompt(accountId, appId) {
|
|
10
|
+
let availableApps = [];
|
|
11
|
+
try {
|
|
12
|
+
const appsResponse = await (0, appsDev_1.fetchPublicAppsForPortal)(accountId);
|
|
13
|
+
if (appsResponse.data.results) {
|
|
14
|
+
availableApps = appsResponse.data.results;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
(0, index_1.debugError)(err);
|
|
19
|
+
}
|
|
20
|
+
if (availableApps.length === 0) {
|
|
21
|
+
logger_1.logger.error(en_1.lib.prompts.selectAppPrompt.errors.noApps);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (appId) {
|
|
25
|
+
const targetApp = availableApps.find(app => app.id === appId);
|
|
26
|
+
if (targetApp) {
|
|
27
|
+
return targetApp;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
logger_1.logger.error(en_1.lib.prompts.selectAppPrompt.errors.invalidAppId);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const appPromptValue = await (0, promptUtils_1.listPrompt)(en_1.lib.prompts.selectAppPrompt.selectAppId, {
|
|
34
|
+
choices: availableApps.map(app => ({
|
|
35
|
+
name: `${app.name} (${app.id})`,
|
|
36
|
+
value: app,
|
|
37
|
+
})),
|
|
38
|
+
});
|
|
39
|
+
return appPromptValue;
|
|
40
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
type PublicAppPromptResponse = {
|
|
2
2
|
appId: number;
|
|
3
3
|
};
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function selectPublicAppForMigrationPrompt({ accountId, accountName, isMigratingApp, }: {
|
|
5
5
|
accountId: number | null;
|
|
6
6
|
accountName: string;
|
|
7
7
|
isMigratingApp?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.selectPublicAppForMigrationPrompt = selectPublicAppForMigrationPrompt;
|
|
4
4
|
const promptUtils_1 = require("./promptUtils");
|
|
5
5
|
const lang_1 = require("../lang");
|
|
6
6
|
const ui_1 = require("../ui");
|
|
@@ -11,7 +11,7 @@ const exitCodes_1 = require("../enums/exitCodes");
|
|
|
11
11
|
async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = false) {
|
|
12
12
|
try {
|
|
13
13
|
if (!accountId) {
|
|
14
|
-
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.
|
|
14
|
+
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.noAccountId`));
|
|
15
15
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
16
16
|
}
|
|
17
17
|
const { data: { results: publicApps }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(accountId);
|
|
@@ -26,8 +26,8 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
|
|
|
26
26
|
? 'noAppsMigrationMessage'
|
|
27
27
|
: 'noAppsCloneMessage';
|
|
28
28
|
(0, ui_1.uiLine)();
|
|
29
|
-
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.
|
|
30
|
-
logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.
|
|
29
|
+
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.${headerTranslationKey}`));
|
|
30
|
+
logger_1.logger.log((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.${messageTranslationKey}`, { accountName }));
|
|
31
31
|
(0, ui_1.uiLine)();
|
|
32
32
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
33
33
|
}
|
|
@@ -35,11 +35,11 @@ async function fetchPublicAppOptions(accountId, accountName, isMigratingApp = fa
|
|
|
35
35
|
}
|
|
36
36
|
catch (error) {
|
|
37
37
|
(0, index_1.logError)(error, accountId ? { accountId } : undefined);
|
|
38
|
-
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.
|
|
38
|
+
logger_1.logger.error((0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.errorFetchingApps`));
|
|
39
39
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
async function
|
|
42
|
+
async function selectPublicAppForMigrationPrompt({ accountId, accountName, isMigratingApp = false, }) {
|
|
43
43
|
const publicApps = await fetchPublicAppOptions(accountId, accountName, isMigratingApp);
|
|
44
44
|
const translationKey = isMigratingApp
|
|
45
45
|
? 'selectAppIdMigrate'
|
|
@@ -47,7 +47,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
|
|
|
47
47
|
return (0, promptUtils_1.promptUser)([
|
|
48
48
|
{
|
|
49
49
|
name: 'appId',
|
|
50
|
-
message: (0, lang_1.i18n)(`lib.prompts.
|
|
50
|
+
message: (0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.${translationKey}`, {
|
|
51
51
|
accountName,
|
|
52
52
|
}),
|
|
53
53
|
type: 'list',
|
|
@@ -56,7 +56,7 @@ async function selectPublicAppPrompt({ accountId, accountName, isMigratingApp =
|
|
|
56
56
|
if (isMigratingApp && preventProjectMigrations && listingInfo) {
|
|
57
57
|
return {
|
|
58
58
|
name: `${app.name} (${app.id})`,
|
|
59
|
-
disabled: (0, lang_1.i18n)(`lib.prompts.
|
|
59
|
+
disabled: (0, lang_1.i18n)(`lib.prompts.selectPublicAppForMigrationPrompt.errors.cannotBeMigrated`),
|
|
60
60
|
};
|
|
61
61
|
}
|
|
62
62
|
return {
|