@hubspot/cli 7.5.11-experimental.0 → 7.6.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +29 -28
- 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 +88 -31
- package/commands/project/dev/unifiedFlow.d.ts +11 -2
- package/commands/project/dev/unifiedFlow.js +81 -41
- package/commands/project/listBuilds.js +2 -5
- package/commands/project/migrate.d.ts +1 -0
- 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 +1 -0
- package/commands/project/upload.js +22 -8
- package/commands/project/validate.d.ts +6 -0
- package/commands/project/validate.js +82 -0
- package/commands/project.js +4 -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 +1135 -660
- package/lang/en.js +935 -471
- package/lang/en.lyaml +30 -213
- package/lib/accountTypes.js +1 -2
- package/lib/app/migrate.d.ts +23 -0
- package/lib/app/migrate.js +29 -6
- 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/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 +5 -3
- 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/DevServerManagerV2.d.ts +11 -22
- package/lib/projects/localDev/DevServerManagerV2.js +19 -15
- 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 +3 -2
- package/lib/projects/localDev/helpers.js +32 -2
- package/lib/projects/upload.d.ts +5 -1
- package/lib/projects/upload.js +60 -20
- 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/index.js +4 -1
- package/lib/upload.d.ts +1 -1
- package/lib/validation.js +4 -5
- 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 +10 -1
- 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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const localDevAuth_1 = require("@hubspot/local-dev-lib/api/localDevAuth");
|
|
4
|
+
const appsDev_1 = require("@hubspot/local-dev-lib/api/appsDev");
|
|
5
|
+
const ui_extensions_dev_server_1 = require("@hubspot/ui-extensions-dev-server");
|
|
6
|
+
const portManager_1 = require("@hubspot/local-dev-lib/portManager");
|
|
7
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
8
|
+
const constants_1 = require("../../constants");
|
|
9
|
+
const exitCodes_1 = require("../../enums/exitCodes");
|
|
10
|
+
const structure_1 = require("../../projects/structure");
|
|
11
|
+
const ui_1 = require("../../ui");
|
|
12
|
+
const index_1 = require("../../errorHandlers/index");
|
|
13
|
+
const installAppPrompt_1 = require("../../prompts/installAppPrompt");
|
|
14
|
+
const promptUtils_1 = require("../../prompts/promptUtils");
|
|
15
|
+
const en_1 = require("../../../lang/en");
|
|
16
|
+
const logger_1 = require("../../ui/logger");
|
|
17
|
+
const urls_1 = require("../../app/urls");
|
|
18
|
+
const accountTypes_1 = require("../../accountTypes");
|
|
19
|
+
class AppDevModeInterface {
|
|
20
|
+
localDevState;
|
|
21
|
+
localDevLogger;
|
|
22
|
+
_appNode;
|
|
23
|
+
marketplaceAppInstalls;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.localDevState = options.localDevState;
|
|
26
|
+
this.localDevLogger = options.localDevLogger;
|
|
27
|
+
if (!this.localDevState.targetProjectAccountId ||
|
|
28
|
+
!this.localDevState.projectConfig ||
|
|
29
|
+
!this.localDevState.projectDir) {
|
|
30
|
+
logger_1.uiLogger.error(en_1.lib.LocalDevManager.failedToInitialize);
|
|
31
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Assumes only one app per project
|
|
35
|
+
get appNode() {
|
|
36
|
+
if (this._appNode === undefined) {
|
|
37
|
+
this._appNode =
|
|
38
|
+
Object.values(this.localDevState.projectNodes).find(structure_1.isAppIRNode) ||
|
|
39
|
+
null;
|
|
40
|
+
}
|
|
41
|
+
return this._appNode;
|
|
42
|
+
}
|
|
43
|
+
get appData() {
|
|
44
|
+
if (!this.appNode) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return this.localDevState.getAppDataByUid(this.appNode.uid);
|
|
48
|
+
}
|
|
49
|
+
set appData(appData) {
|
|
50
|
+
if (!this.appNode) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.localDevState.setAppDataForUid(this.appNode.uid, appData);
|
|
54
|
+
}
|
|
55
|
+
isAutomaticallyInstallable() {
|
|
56
|
+
const targetTestingAccount = (0, config_1.getAccountConfig)(this.localDevState.targetTestingAccountId);
|
|
57
|
+
if (!targetTestingAccount) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
const isTestAccount = (0, accountTypes_1.isDeveloperTestAccount)(targetTestingAccount) ||
|
|
61
|
+
(0, accountTypes_1.isSandbox)(targetTestingAccount);
|
|
62
|
+
const hasCorrectParent = targetTestingAccount.parentAccountId ===
|
|
63
|
+
this.localDevState.targetProjectAccountId;
|
|
64
|
+
return (isTestAccount &&
|
|
65
|
+
hasCorrectParent &&
|
|
66
|
+
this.appNode?.config.auth.type === constants_1.APP_AUTH_TYPES.STATIC);
|
|
67
|
+
}
|
|
68
|
+
async getAppInstallUrl() {
|
|
69
|
+
if (this.appNode?.config.auth.type === constants_1.APP_AUTH_TYPES.OAUTH) {
|
|
70
|
+
return (0, urls_1.getOauthAppInstallUrl)({
|
|
71
|
+
targetAccountId: this.localDevState.targetTestingAccountId,
|
|
72
|
+
env: this.localDevState.env,
|
|
73
|
+
clientId: this.appData.clientId, // This is only called after checking that appData exists
|
|
74
|
+
scopes: this.appNode.config.auth.requiredScopes,
|
|
75
|
+
redirectUrls: this.appNode.config.auth.redirectUrls,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const { data: { results }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(this.localDevState.targetProjectAccountId);
|
|
79
|
+
const app = results.find(app => app.sourceId === this.appNode?.uid);
|
|
80
|
+
if (!app) {
|
|
81
|
+
logger_1.uiLogger.error(en_1.lib.LocalDevManager.appNotFound(this.localDevState.targetProjectAccountId, this.appNode?.uid));
|
|
82
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
83
|
+
}
|
|
84
|
+
return (0, urls_1.getStaticAuthAppInstallUrl)({
|
|
85
|
+
targetAccountId: this.localDevState.targetTestingAccountId,
|
|
86
|
+
env: this.localDevState.env,
|
|
87
|
+
appId: `${app.id}`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async fetchAppData() {
|
|
91
|
+
const { data: { results: portalApps }, } = await (0, appsDev_1.fetchPublicAppsForPortal)(this.localDevState.targetProjectAccountId);
|
|
92
|
+
const appData = portalApps.find(({ sourceId }) => sourceId === this.appNode?.uid);
|
|
93
|
+
if (!appData) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const { data: { uniquePortalInstallCount }, } = await (0, appsDev_1.fetchPublicAppProductionInstallCounts)(appData.id, this.localDevState.targetProjectAccountId);
|
|
97
|
+
this.appData = {
|
|
98
|
+
id: appData.id,
|
|
99
|
+
clientId: appData.clientId,
|
|
100
|
+
name: appData.name,
|
|
101
|
+
installationState: constants_1.APP_INSTALLATION_STATES.NOT_INSTALLED,
|
|
102
|
+
scopeGroupIds: appData.scopeGroupIds,
|
|
103
|
+
};
|
|
104
|
+
this.marketplaceAppInstalls = uniquePortalInstallCount;
|
|
105
|
+
}
|
|
106
|
+
async checkMarketplaceAppInstalls() {
|
|
107
|
+
if (!this.appData || !this.marketplaceAppInstalls) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
(0, ui_1.uiLine)();
|
|
111
|
+
logger_1.uiLogger.warn(en_1.lib.LocalDevManager.activeInstallWarning.installCount(this.appData.name, this.marketplaceAppInstalls));
|
|
112
|
+
logger_1.uiLogger.log(en_1.lib.LocalDevManager.activeInstallWarning.explanation);
|
|
113
|
+
(0, ui_1.uiLine)();
|
|
114
|
+
const proceed = await (0, promptUtils_1.confirmPrompt)(en_1.lib.LocalDevManager.activeInstallWarning.confirmationPrompt, { defaultAnswer: false });
|
|
115
|
+
if (!proceed) {
|
|
116
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
117
|
+
}
|
|
118
|
+
this.localDevLogger.addUploadWarning(en_1.lib.AppDevModeInterface.defaultMarketplaceAppWarning(this.marketplaceAppInstalls));
|
|
119
|
+
}
|
|
120
|
+
async autoInstallStaticAuthApp() {
|
|
121
|
+
const shouldInstall = await (0, installAppPrompt_1.installAppAutoPrompt)();
|
|
122
|
+
if (!shouldInstall) {
|
|
123
|
+
logger_1.uiLogger.log(en_1.lib.AppDevModeInterface.autoInstallDeclined);
|
|
124
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
125
|
+
}
|
|
126
|
+
await (0, appsDev_1.installStaticAuthAppOnTestAccount)(this.appData.id, this.localDevState.targetTestingAccountId, this.appData.scopeGroupIds);
|
|
127
|
+
}
|
|
128
|
+
async installAppOrOpenInstallUrl(isReinstall) {
|
|
129
|
+
if (this.isAutomaticallyInstallable()) {
|
|
130
|
+
try {
|
|
131
|
+
await this.autoInstallStaticAuthApp();
|
|
132
|
+
logger_1.uiLogger.success(en_1.lib.AppDevModeInterface.autoInstallSuccess(this.appData.name, this.localDevState.targetTestingAccountId));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
logger_1.uiLogger.error(en_1.lib.AppDevModeInterface.autoInstallError(this.appData.name, this.localDevState.targetTestingAccountId));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const installUrl = await this.getAppInstallUrl();
|
|
140
|
+
await (0, installAppPrompt_1.installAppBrowserPrompt)(installUrl, isReinstall);
|
|
141
|
+
}
|
|
142
|
+
async checkTestAccountAppInstallation() {
|
|
143
|
+
if (!this.appNode || !this.appData) {
|
|
144
|
+
return {};
|
|
145
|
+
}
|
|
146
|
+
const { data: { isInstalledWithScopeGroups, previouslyAuthorizedScopeGroups }, } = await (0, localDevAuth_1.fetchAppInstallationData)(this.localDevState.targetTestingAccountId, this.localDevState.projectId, this.appNode.uid, this.appNode.config.auth.requiredScopes, this.appNode.config.auth.optionalScopes);
|
|
147
|
+
const isReinstall = previouslyAuthorizedScopeGroups.length > 0;
|
|
148
|
+
if (isInstalledWithScopeGroups) {
|
|
149
|
+
this.appData = {
|
|
150
|
+
...this.appData,
|
|
151
|
+
installationState: constants_1.APP_INSTALLATION_STATES.INSTALLED,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
else if (isReinstall) {
|
|
155
|
+
this.appData = {
|
|
156
|
+
...this.appData,
|
|
157
|
+
installationState: constants_1.APP_INSTALLATION_STATES.INSTALLED_WITH_OUTDATED_SCOPES,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
return { needsInstall: !isInstalledWithScopeGroups, isReinstall };
|
|
161
|
+
}
|
|
162
|
+
setUpLocalDevServerMessageListeners() {
|
|
163
|
+
this.localDevState.addListener('devServerMessage', message => {
|
|
164
|
+
if (message === constants_1.LOCAL_DEV_SERVER_MESSAGE_TYPES.WEBSOCKET_SERVER_CONNECTED) {
|
|
165
|
+
this.checkTestAccountAppInstallation();
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// @ts-expect-error TODO: reconcile types between CLI and UIE Dev Server
|
|
170
|
+
// In the future, update UIE Dev Server to use LocalDevState
|
|
171
|
+
async setup(args) {
|
|
172
|
+
if (!this.appNode) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
await this.fetchAppData();
|
|
177
|
+
if (this.appNode.config.distribution === constants_1.APP_DISTRIBUTION_TYPES.MARKETPLACE) {
|
|
178
|
+
await this.checkMarketplaceAppInstalls();
|
|
179
|
+
}
|
|
180
|
+
const { needsInstall, isReinstall } = await this.checkTestAccountAppInstallation();
|
|
181
|
+
if (needsInstall) {
|
|
182
|
+
await this.installAppOrOpenInstallUrl(isReinstall || false);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
(0, index_1.logError)(e);
|
|
187
|
+
}
|
|
188
|
+
this.setUpLocalDevServerMessageListeners();
|
|
189
|
+
return ui_extensions_dev_server_1.DevModeUnifiedInterface.setup(args);
|
|
190
|
+
}
|
|
191
|
+
async start() {
|
|
192
|
+
if (!this.appNode) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
return ui_extensions_dev_server_1.DevModeUnifiedInterface.start({
|
|
196
|
+
accountId: this.localDevState.targetTestingAccountId,
|
|
197
|
+
// @ts-expect-error TODO: reconcile types between CLI and UIE Dev Server
|
|
198
|
+
projectConfig: this.localDevState.projectConfig,
|
|
199
|
+
requestPorts: portManager_1.requestPorts,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
async fileChange(filePath, event) {
|
|
203
|
+
if (!this.appNode) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
return ui_extensions_dev_server_1.DevModeUnifiedInterface.fileChange(filePath, event);
|
|
207
|
+
}
|
|
208
|
+
async cleanup() {
|
|
209
|
+
if (!this.appNode) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
return ui_extensions_dev_server_1.DevModeUnifiedInterface.cleanup();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
exports.default = AppDevModeInterface;
|
|
@@ -1,33 +1,22 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
fileChange?: (filePath: string, event: string) => Promise<void>;
|
|
7
|
-
cleanup?: () => Promise<void>;
|
|
1
|
+
import LocalDevState from './LocalDevState';
|
|
2
|
+
import LocalDevLogger from './LocalDevLogger';
|
|
3
|
+
type DevServerManagerV2ConstructorOptions = {
|
|
4
|
+
localDevState: LocalDevState;
|
|
5
|
+
logger: LocalDevLogger;
|
|
8
6
|
};
|
|
9
7
|
declare class DevServerManagerV2 {
|
|
10
8
|
private initialized;
|
|
11
9
|
private started;
|
|
12
10
|
private devServers;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
accountId: number;
|
|
20
|
-
setActiveApp: (appUid: string | undefined) => Promise<void>;
|
|
21
|
-
}): Promise<void>;
|
|
22
|
-
start({ accountId, projectConfig, }: {
|
|
23
|
-
accountId: number;
|
|
24
|
-
projectConfig: ProjectConfig;
|
|
25
|
-
}): Promise<void>;
|
|
11
|
+
private localDevState;
|
|
12
|
+
constructor(options: DevServerManagerV2ConstructorOptions);
|
|
13
|
+
private iterateDevServers;
|
|
14
|
+
setup(): Promise<void>;
|
|
15
|
+
start(): Promise<void>;
|
|
26
16
|
fileChange({ filePath, event, }: {
|
|
27
17
|
filePath: string;
|
|
28
18
|
event: string;
|
|
29
19
|
}): Promise<void>;
|
|
30
20
|
cleanup(): Promise<void>;
|
|
31
21
|
}
|
|
32
|
-
|
|
33
|
-
export default Manager;
|
|
22
|
+
export default DevServerManagerV2;
|
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
4
7
|
const promptUtils_1 = require("../../prompts/promptUtils");
|
|
5
|
-
const ui_extensions_dev_server_1 = require("@hubspot/ui-extensions-dev-server");
|
|
6
8
|
const portManager_1 = require("@hubspot/local-dev-lib/portManager");
|
|
7
9
|
const urls_1 = require("@hubspot/local-dev-lib/urls");
|
|
8
10
|
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
11
|
+
const AppDevModeInterface_1 = __importDefault(require("./AppDevModeInterface"));
|
|
9
12
|
const en_1 = require("../../../lang/en");
|
|
10
13
|
class DevServerManagerV2 {
|
|
11
14
|
initialized;
|
|
12
15
|
started;
|
|
13
16
|
devServers;
|
|
14
|
-
|
|
17
|
+
localDevState;
|
|
18
|
+
constructor(options) {
|
|
15
19
|
this.initialized = false;
|
|
16
20
|
this.started = false;
|
|
17
|
-
this.
|
|
21
|
+
this.localDevState = options.localDevState;
|
|
22
|
+
const AppsDevServer = new AppDevModeInterface_1.default({
|
|
23
|
+
localDevState: options.localDevState,
|
|
24
|
+
localDevLogger: options.logger,
|
|
25
|
+
});
|
|
26
|
+
this.devServers = [AppsDevServer];
|
|
18
27
|
}
|
|
19
28
|
async iterateDevServers(callback) {
|
|
20
29
|
await Promise.all(this.devServers.map(devServer => callback(devServer)));
|
|
21
30
|
}
|
|
22
|
-
async setup(
|
|
31
|
+
async setup() {
|
|
23
32
|
let env;
|
|
24
|
-
const accountConfig = (0, config_1.getAccountConfig)(
|
|
33
|
+
const accountConfig = (0, config_1.getAccountConfig)(this.localDevState.targetTestingAccountId);
|
|
25
34
|
if (accountConfig) {
|
|
26
35
|
env = accountConfig.env;
|
|
27
36
|
}
|
|
28
37
|
await (0, portManager_1.startPortManagerServer)();
|
|
29
38
|
await this.iterateDevServers(async (serverInterface) => {
|
|
30
39
|
if (serverInterface.setup) {
|
|
40
|
+
// @TODO: In the future, update UIE Dev Server to use LocalDevState
|
|
31
41
|
await serverInterface.setup({
|
|
32
|
-
components: projectNodes,
|
|
42
|
+
components: this.localDevState.projectNodes,
|
|
33
43
|
promptUser: promptUtils_1.promptUser,
|
|
34
44
|
logger: logger_1.logger,
|
|
35
45
|
urls: {
|
|
36
46
|
api: (0, urls_1.getHubSpotApiOrigin)(env),
|
|
37
47
|
web: (0, urls_1.getHubSpotWebsiteOrigin)(env),
|
|
38
48
|
},
|
|
39
|
-
setActiveApp,
|
|
40
49
|
});
|
|
41
50
|
}
|
|
42
51
|
});
|
|
43
52
|
this.initialized = true;
|
|
44
53
|
}
|
|
45
|
-
async start(
|
|
54
|
+
async start() {
|
|
46
55
|
if (this.initialized) {
|
|
47
56
|
await this.iterateDevServers(async (serverInterface) => {
|
|
48
57
|
if (serverInterface.start) {
|
|
49
|
-
await serverInterface.start(
|
|
50
|
-
accountId,
|
|
51
|
-
projectConfig,
|
|
52
|
-
requestPorts: portManager_1.requestPorts,
|
|
53
|
-
});
|
|
58
|
+
await serverInterface.start();
|
|
54
59
|
}
|
|
55
60
|
});
|
|
56
61
|
}
|
|
@@ -79,5 +84,4 @@ class DevServerManagerV2 {
|
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
86
|
}
|
|
82
|
-
|
|
83
|
-
exports.default = Manager;
|
|
87
|
+
exports.default = DevServerManagerV2;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import LocalDevState from './LocalDevState';
|
|
2
|
+
declare class LocalDevLogger {
|
|
3
|
+
private state;
|
|
4
|
+
private mostRecentUploadWarning;
|
|
5
|
+
private uploadWarnings;
|
|
6
|
+
constructor(state: LocalDevState);
|
|
7
|
+
private logUploadInstructions;
|
|
8
|
+
private handleError;
|
|
9
|
+
getUploadCommand(): string;
|
|
10
|
+
uploadWarning(): void;
|
|
11
|
+
addUploadWarning(warning: string): void;
|
|
12
|
+
clearUploadWarnings(): void;
|
|
13
|
+
missingComponentsWarning(components: string[]): void;
|
|
14
|
+
fileChangeError(e: unknown): void;
|
|
15
|
+
devServerSetupError(e: unknown): void;
|
|
16
|
+
devServerStartError(e: unknown): void;
|
|
17
|
+
devServerCleanupError(e: unknown): void;
|
|
18
|
+
noDeployedBuild(): void;
|
|
19
|
+
resetSpinnies(): void;
|
|
20
|
+
startupMessage(): void;
|
|
21
|
+
cleanupStart(): void;
|
|
22
|
+
cleanupError(): void;
|
|
23
|
+
cleanupSuccess(): void;
|
|
24
|
+
uploadInitiated(): void;
|
|
25
|
+
projectConfigMismatch(): void;
|
|
26
|
+
uploadError(error: unknown): void;
|
|
27
|
+
uploadSuccess(): void;
|
|
28
|
+
monitorConsoleOutput(): void;
|
|
29
|
+
}
|
|
30
|
+
export default LocalDevLogger;
|
|
@@ -0,0 +1,159 @@
|
|
|
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
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
7
|
+
const config_2 = require("@hubspot/local-dev-lib/config");
|
|
8
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
9
|
+
const logger_2 = require("../../ui/logger");
|
|
10
|
+
const ui_1 = require("../../ui");
|
|
11
|
+
const en_1 = require("../../../lang/en");
|
|
12
|
+
const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
|
|
13
|
+
const errorHandlers_1 = require("../../errorHandlers");
|
|
14
|
+
class LocalDevLogger {
|
|
15
|
+
state;
|
|
16
|
+
mostRecentUploadWarning;
|
|
17
|
+
uploadWarnings;
|
|
18
|
+
constructor(state) {
|
|
19
|
+
this.state = state;
|
|
20
|
+
this.mostRecentUploadWarning = null;
|
|
21
|
+
this.uploadWarnings = new Set();
|
|
22
|
+
}
|
|
23
|
+
logUploadInstructions(warning) {
|
|
24
|
+
logger_2.uiLogger.log('');
|
|
25
|
+
logger_2.uiLogger.warn(warning);
|
|
26
|
+
logger_2.uiLogger.log('');
|
|
27
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.uploadWarning.instructionsHeader);
|
|
28
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.uploadWarning.stopDev);
|
|
29
|
+
if (this.state.isGithubLinked) {
|
|
30
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.uploadWarning.pushToGithub);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.uploadWarning.runUpload(this.getUploadCommand()));
|
|
34
|
+
}
|
|
35
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.uploadWarning.restartDev);
|
|
36
|
+
}
|
|
37
|
+
handleError(e, langFunction) {
|
|
38
|
+
if (this.state.debug) {
|
|
39
|
+
logger_1.logger.error(e);
|
|
40
|
+
}
|
|
41
|
+
logger_2.uiLogger.error(langFunction(e instanceof Error ? e.message : ''));
|
|
42
|
+
}
|
|
43
|
+
getUploadCommand() {
|
|
44
|
+
const currentDefaultAccount = (0, config_2.getConfigDefaultAccount)() || undefined;
|
|
45
|
+
return this.state.targetProjectAccountId !==
|
|
46
|
+
(0, config_1.getAccountId)(currentDefaultAccount)
|
|
47
|
+
? (0, ui_1.uiCommandReference)(`hs project upload --account=${this.state.targetProjectAccountId}`)
|
|
48
|
+
: (0, ui_1.uiCommandReference)('hs project upload');
|
|
49
|
+
}
|
|
50
|
+
uploadWarning() {
|
|
51
|
+
// At the moment, there is only one additional warning. We may need to do this in a
|
|
52
|
+
// more robust way in the future
|
|
53
|
+
const additionalWarnings = Array.from(this.uploadWarnings).join('\n\n');
|
|
54
|
+
const warning = `${en_1.lib.LocalDevManager.uploadWarning.defaultWarning} ${additionalWarnings}`;
|
|
55
|
+
// Avoid logging the warning to the console if it is currently the most
|
|
56
|
+
// recently logged warning. We do not want to spam the console with the same message.
|
|
57
|
+
if (warning !== this.mostRecentUploadWarning) {
|
|
58
|
+
this.logUploadInstructions(warning);
|
|
59
|
+
this.mostRecentUploadWarning = warning;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
addUploadWarning(warning) {
|
|
63
|
+
this.uploadWarnings.add(warning);
|
|
64
|
+
}
|
|
65
|
+
clearUploadWarnings() {
|
|
66
|
+
this.uploadWarnings.clear();
|
|
67
|
+
}
|
|
68
|
+
missingComponentsWarning(components) {
|
|
69
|
+
const warning = en_1.lib.LocalDevManager.uploadWarning.missingComponents(components.join(', '));
|
|
70
|
+
if (warning !== this.mostRecentUploadWarning) {
|
|
71
|
+
this.logUploadInstructions(warning);
|
|
72
|
+
this.mostRecentUploadWarning = warning;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
fileChangeError(e) {
|
|
76
|
+
this.handleError(e, en_1.lib.LocalDevManager.devServer.fileChangeError);
|
|
77
|
+
}
|
|
78
|
+
devServerSetupError(e) {
|
|
79
|
+
this.handleError(e, en_1.lib.LocalDevManager.devServer.setupError);
|
|
80
|
+
}
|
|
81
|
+
devServerStartError(e) {
|
|
82
|
+
this.handleError(e, en_1.lib.LocalDevManager.devServer.startError);
|
|
83
|
+
}
|
|
84
|
+
devServerCleanupError(e) {
|
|
85
|
+
this.handleError(e, en_1.lib.LocalDevManager.devServer.cleanupError);
|
|
86
|
+
}
|
|
87
|
+
noDeployedBuild() {
|
|
88
|
+
logger_2.uiLogger.error(en_1.lib.LocalDevManager.noDeployedBuild(this.state.projectConfig.name, (0, ui_1.uiAccountDescription)(this.state.targetProjectAccountId), this.getUploadCommand()));
|
|
89
|
+
logger_2.uiLogger.log('');
|
|
90
|
+
}
|
|
91
|
+
resetSpinnies() {
|
|
92
|
+
SpinniesManager_1.default.stopAll();
|
|
93
|
+
SpinniesManager_1.default.init();
|
|
94
|
+
}
|
|
95
|
+
startupMessage() {
|
|
96
|
+
if (!this.state.debug) {
|
|
97
|
+
console.clear();
|
|
98
|
+
}
|
|
99
|
+
(0, ui_1.uiBetaTag)(en_1.lib.LocalDevManager.betaMessage);
|
|
100
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.learnMoreLocalDevServer);
|
|
101
|
+
logger_2.uiLogger.log('');
|
|
102
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.running(this.state.projectConfig.name, (0, ui_1.uiAccountDescription)(this.state.targetProjectAccountId)));
|
|
103
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.viewProjectLink(this.state.projectConfig.name, this.state.targetProjectAccountId));
|
|
104
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.viewLocalDevUILink(this.state.targetTestingAccountId));
|
|
105
|
+
logger_2.uiLogger.log('');
|
|
106
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.quitHelper);
|
|
107
|
+
(0, ui_1.uiLine)();
|
|
108
|
+
logger_2.uiLogger.log('');
|
|
109
|
+
}
|
|
110
|
+
cleanupStart() {
|
|
111
|
+
SpinniesManager_1.default.add('cleanupMessage', {
|
|
112
|
+
text: en_1.lib.LocalDevManager.exitingStart,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
cleanupError() {
|
|
116
|
+
SpinniesManager_1.default.fail('cleanupMessage', {
|
|
117
|
+
text: en_1.lib.LocalDevManager.exitingFail,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
cleanupSuccess() {
|
|
121
|
+
SpinniesManager_1.default.succeed('cleanupMessage', {
|
|
122
|
+
text: en_1.lib.LocalDevManager.exitingSucceed,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
uploadInitiated() {
|
|
126
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevProcess.uploadInitiated);
|
|
127
|
+
}
|
|
128
|
+
projectConfigMismatch() {
|
|
129
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevProcess.projectConfigMismatch);
|
|
130
|
+
}
|
|
131
|
+
uploadError(error) {
|
|
132
|
+
logger_1.logger.log('');
|
|
133
|
+
(0, errorHandlers_1.logError)(error);
|
|
134
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevProcess.uploadFailed);
|
|
135
|
+
logger_1.logger.log('');
|
|
136
|
+
}
|
|
137
|
+
uploadSuccess() {
|
|
138
|
+
logger_1.logger.log('');
|
|
139
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevProcess.uploadSuccess);
|
|
140
|
+
(0, ui_1.uiLine)();
|
|
141
|
+
logger_1.logger.log('');
|
|
142
|
+
}
|
|
143
|
+
monitorConsoleOutput() {
|
|
144
|
+
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
145
|
+
function customStdoutWrite(chunk, encoding, callback) {
|
|
146
|
+
// Reset the most recently logged warning
|
|
147
|
+
if (this.mostRecentUploadWarning) {
|
|
148
|
+
this.mostRecentUploadWarning = null;
|
|
149
|
+
}
|
|
150
|
+
if (typeof encoding === 'function') {
|
|
151
|
+
return originalStdoutWrite(chunk, callback);
|
|
152
|
+
}
|
|
153
|
+
return originalStdoutWrite(chunk, encoding, callback);
|
|
154
|
+
}
|
|
155
|
+
customStdoutWrite.bind(this);
|
|
156
|
+
process.stdout.write = customStdoutWrite;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.default = LocalDevLogger;
|
|
@@ -14,17 +14,17 @@ const constants_1 = require("../../constants");
|
|
|
14
14
|
const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
|
|
15
15
|
const DevServerManager_1 = __importDefault(require("./DevServerManager"));
|
|
16
16
|
const exitCodes_1 = require("../../enums/exitCodes");
|
|
17
|
-
const urls_1 = require("../../projects/urls");
|
|
18
17
|
const helpers_1 = require("./helpers");
|
|
19
18
|
const structure_1 = require("../../projects/structure");
|
|
20
19
|
const Projects_1 = require("../../../types/Projects");
|
|
21
20
|
const ui_1 = require("../../ui");
|
|
22
21
|
const index_1 = require("../../errorHandlers/index");
|
|
23
|
-
const
|
|
22
|
+
const installAppPrompt_1 = require("../../prompts/installAppPrompt");
|
|
24
23
|
const promptUtils_1 = require("../../prompts/promptUtils");
|
|
25
24
|
const process_1 = require("../../process");
|
|
26
25
|
const en_1 = require("../../../lang/en");
|
|
27
26
|
const logger_2 = require("../../ui/logger");
|
|
27
|
+
const urls_1 = require("../../app/urls");
|
|
28
28
|
const WATCH_EVENTS = {
|
|
29
29
|
add: 'add',
|
|
30
30
|
change: 'change',
|
|
@@ -113,7 +113,7 @@ class LocalDevManager {
|
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
(0, ui_1.uiLine)();
|
|
116
|
-
logger_2.uiLogger.warn(en_1.lib.LocalDevManager.activeInstallWarning.installCount(this.activePublicAppData.name, this.publicAppActiveInstalls
|
|
116
|
+
logger_2.uiLogger.warn(en_1.lib.LocalDevManager.activeInstallWarning.installCount(this.activePublicAppData.name, this.publicAppActiveInstalls));
|
|
117
117
|
logger_2.uiLogger.log(en_1.lib.LocalDevManager.activeInstallWarning.explanation);
|
|
118
118
|
(0, ui_1.uiLine)();
|
|
119
119
|
const proceed = await (0, promptUtils_1.confirmPrompt)(en_1.lib.LocalDevManager.activeInstallWarning.confirmationPrompt, { defaultAnswer: false });
|
|
@@ -141,7 +141,7 @@ class LocalDevManager {
|
|
|
141
141
|
logger_2.uiLogger.log((0, ui_1.uiLink)(en_1.lib.LocalDevManager.learnMoreLocalDevServer, 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
|
|
142
142
|
logger_2.uiLogger.log('');
|
|
143
143
|
logger_2.uiLogger.log(chalk_1.default.hex(ui_1.UI_COLORS.SORBET)(en_1.lib.LocalDevManager.running(this.projectConfig.name, (0, ui_1.uiAccountDescription)(this.targetAccountId))));
|
|
144
|
-
logger_2.uiLogger.log(
|
|
144
|
+
logger_2.uiLogger.log(en_1.lib.LocalDevManager.viewProjectLink(this.projectConfig.name, this.targetProjectAccountId));
|
|
145
145
|
if (this.activeApp?.type === Projects_1.ComponentTypes.PublicApp) {
|
|
146
146
|
logger_2.uiLogger.log((0, ui_1.uiLink)(en_1.lib.LocalDevManager.viewTestAccountLink, (0, helpers_1.getAccountHomeUrl)(this.targetAccountId)));
|
|
147
147
|
}
|
|
@@ -188,7 +188,14 @@ class LocalDevManager {
|
|
|
188
188
|
const { data: { isInstalledWithScopeGroups, previouslyAuthorizedScopeGroups }, } = await (0, localDevAuth_1.fetchAppInstallationData)(this.targetAccountId, this.projectId, this.activeApp.config.uid, this.activeApp.config.auth.requiredScopes, this.activeApp.config.auth.optionalScopes);
|
|
189
189
|
const isReinstall = previouslyAuthorizedScopeGroups.length > 0;
|
|
190
190
|
if (!isInstalledWithScopeGroups) {
|
|
191
|
-
|
|
191
|
+
const installUrl = (0, urls_1.getOauthAppInstallUrl)({
|
|
192
|
+
targetAccountId: this.targetAccountId,
|
|
193
|
+
env: this.env,
|
|
194
|
+
clientId: this.activePublicAppData.clientId,
|
|
195
|
+
scopes: this.activeApp.config.auth.requiredScopes,
|
|
196
|
+
redirectUrls: this.activeApp.config.auth.redirectUrls,
|
|
197
|
+
});
|
|
198
|
+
await (0, installAppPrompt_1.installAppBrowserPrompt)(installUrl, isReinstall);
|
|
192
199
|
}
|
|
193
200
|
}
|
|
194
201
|
updateKeypressListeners() {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { IntermediateRepresentationNodeLocalDev } from '@hubspot/project-parsing-lib/src/lib/types';
|
|
2
|
+
import LocalDevState from './LocalDevState';
|
|
3
|
+
import LocalDevLogger from './LocalDevLogger';
|
|
4
|
+
import { LocalDevStateConstructorOptions, LocalDevStateListener, LocalDevServerMessage } from '../../../types/LocalDev';
|
|
5
|
+
declare class LocalDevProcess {
|
|
6
|
+
private state;
|
|
7
|
+
private _logger;
|
|
8
|
+
private devServerManager;
|
|
9
|
+
constructor(options: LocalDevStateConstructorOptions);
|
|
10
|
+
get projectDir(): string;
|
|
11
|
+
get projectId(): number;
|
|
12
|
+
get projectName(): string;
|
|
13
|
+
get targetProjectAccountId(): number;
|
|
14
|
+
get targetTestingAccountId(): number;
|
|
15
|
+
get projectNodes(): {
|
|
16
|
+
[key: string]: IntermediateRepresentationNodeLocalDev;
|
|
17
|
+
};
|
|
18
|
+
get logger(): LocalDevLogger;
|
|
19
|
+
get configFilesUpdatedSinceLastUpload(): Set<string>;
|
|
20
|
+
private setupDevServers;
|
|
21
|
+
private startDevServers;
|
|
22
|
+
private cleanupDevServers;
|
|
23
|
+
private compareLocalProjectToDeployed;
|
|
24
|
+
private projectConfigValidForUpload;
|
|
25
|
+
private updateProjectNodes;
|
|
26
|
+
handleFileChange(filePath: string, event: string): Promise<void>;
|
|
27
|
+
handleConfigFileChange(filePath: string, event: string): Promise<void>;
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
stop(showProgress?: boolean): Promise<void>;
|
|
30
|
+
uploadProject(): Promise<boolean>;
|
|
31
|
+
addStateListener<K extends keyof LocalDevState>(key: K, listener: LocalDevStateListener<K>, callOnInit?: boolean): void;
|
|
32
|
+
sendDevServerMessage(message: LocalDevServerMessage): void;
|
|
33
|
+
}
|
|
34
|
+
export default LocalDevProcess;
|