@hubspot/cli 7.7.34-experimental.0 → 7.8.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 +31 -25
- package/commands/__tests__/auth.test.js +5 -0
- package/commands/__tests__/doctor.test.js +16 -16
- package/commands/__tests__/getStarted.test.js +2 -2
- package/commands/__tests__/mcp.test.js +1 -1
- package/commands/__tests__/project.test.js +0 -3
- package/commands/account/clean.js +18 -27
- package/commands/account/createOverride.js +13 -31
- package/commands/account/info.js +20 -31
- package/commands/account/list.js +16 -22
- package/commands/account/remove.js +12 -20
- package/commands/account/removeOverride.js +11 -21
- package/commands/account/rename.js +6 -9
- package/commands/account/use.js +12 -26
- package/commands/account.js +2 -2
- package/commands/app/__tests__/migrate.test.js +5 -6
- package/commands/app/migrate.js +13 -19
- package/commands/app/secret/add.js +2 -1
- package/commands/app/secret/delete.js +2 -1
- package/commands/app/secret/list.js +2 -1
- package/commands/app/secret/update.js +2 -1
- package/commands/app/secret.js +2 -1
- package/commands/app.js +3 -8
- package/commands/auth.d.ts +1 -0
- package/commands/auth.js +16 -7
- package/commands/cms/convertFields.js +7 -9
- package/commands/cms/getReactModule.js +9 -14
- package/commands/cms/lighthouseScore.js +33 -36
- package/commands/cms.js +2 -2
- package/commands/completion.js +3 -3
- package/commands/config/set.d.ts +1 -1
- package/commands/config/set.js +64 -37
- package/commands/config.js +2 -2
- package/commands/create.js +2 -2
- package/commands/customObject/create.js +10 -12
- package/commands/customObject/schema/create.js +9 -11
- package/commands/customObject/schema/delete.js +16 -16
- package/commands/customObject/schema/fetch-all.js +12 -11
- package/commands/customObject/schema/fetch.js +15 -15
- package/commands/customObject/schema/list.js +4 -4
- package/commands/customObject/schema/update.js +13 -13
- package/commands/customObject/schema.js +2 -2
- package/commands/customObject.js +6 -7
- package/commands/doctor.js +8 -11
- package/commands/feedback.js +7 -12
- package/commands/fetch.js +8 -8
- package/commands/filemanager/fetch.js +7 -7
- package/commands/filemanager/upload.js +15 -34
- package/commands/filemanager.js +2 -2
- package/commands/function/deploy.js +11 -29
- package/commands/function/list.js +8 -8
- package/commands/function/server.js +9 -11
- package/commands/function.d.ts +1 -1
- package/commands/function.js +2 -2
- package/commands/getStarted.d.ts +0 -2
- package/commands/getStarted.js +4 -4
- package/commands/hubdb/clear.js +7 -15
- package/commands/hubdb/create.js +9 -15
- package/commands/hubdb/delete.js +8 -15
- package/commands/hubdb/fetch.js +6 -9
- package/commands/hubdb.d.ts +1 -1
- package/commands/hubdb.js +2 -2
- package/commands/init.js +2 -3
- package/commands/lint.js +16 -16
- package/commands/list.js +8 -14
- package/commands/logs.js +14 -20
- package/commands/mcp/__tests__/setup.test.js +2 -2
- package/commands/mcp/setup.js +11 -2
- package/commands/mcp.js +3 -3
- package/commands/mv.js +6 -17
- package/commands/open.js +5 -5
- package/commands/project/__tests__/add.test.js +4 -2
- package/commands/project/__tests__/create.test.js +6 -6
- package/commands/project/__tests__/deploy.test.js +3 -7
- package/commands/project/__tests__/devUnifiedFlow.test.js +2 -4
- package/commands/project/__tests__/installDeps.test.js +8 -8
- package/commands/project/__tests__/logs.test.js +1 -4
- package/commands/project/__tests__/migrate.test.js +6 -7
- package/commands/project/__tests__/migrateApp.test.js +3 -7
- package/commands/project/__tests__/profile.test.js +1 -1
- package/commands/project/__tests__/validate.test.js +98 -0
- package/commands/project/add.js +4 -8
- package/commands/project/cloneApp.js +14 -19
- package/commands/project/create.js +3 -10
- package/commands/project/deploy.js +5 -5
- package/commands/project/dev/deprecatedFlow.js +7 -16
- package/commands/project/dev/index.js +16 -13
- package/commands/project/dev/unifiedFlow.js +8 -4
- package/commands/project/download.js +10 -14
- package/commands/project/installDeps.js +8 -9
- package/commands/project/listBuilds.js +12 -21
- package/commands/project/logs.js +21 -24
- package/commands/project/migrate.js +41 -13
- package/commands/project/migrateApp.js +10 -17
- package/commands/project/open.js +6 -14
- package/commands/project/profile/add.js +3 -3
- package/commands/project/profile/delete.js +1 -2
- package/commands/project/profile.js +2 -3
- package/commands/project/upload.d.ts +2 -2
- package/commands/project/upload.js +17 -26
- package/commands/project/validate.js +7 -7
- package/commands/project/watch.js +13 -22
- package/commands/project.js +2 -3
- package/commands/sandbox/__tests__/create.test.js +5 -5
- package/commands/sandbox/create.js +22 -32
- package/commands/sandbox/delete.js +35 -63
- package/commands/sandbox.js +2 -2
- package/commands/secret/addSecret.js +7 -17
- package/commands/secret/deleteSecret.js +10 -20
- package/commands/secret/listSecret.js +8 -10
- package/commands/secret/updateSecret.js +9 -17
- package/commands/secret.js +2 -2
- package/commands/testAccount/__tests__/delete.test.js +2 -4
- package/commands/testAccount/create.js +0 -3
- package/commands/testAccount/delete.d.ts +4 -3
- package/commands/testAccount/delete.js +155 -14
- package/commands/testAccount/importData.d.ts +1 -1
- package/commands/testAccount/importData.js +1 -1
- package/commands/testAccount.js +1 -1
- package/lang/en.d.ts +317 -120
- package/lang/en.js +312 -118
- package/lang/en.lyaml +2 -2
- package/lib/__tests__/buildAccount.test.js +2 -1
- package/lib/__tests__/commonOpts.test.js +1 -1
- package/lib/__tests__/dependencyManagement.test.js +1 -1
- package/lib/__tests__/developerTestAccounts.test.js +3 -3
- package/lib/__tests__/npm.test.js +1 -1
- package/lib/__tests__/oauth.test.js +4 -4
- package/lib/__tests__/process.test.js +10 -5
- package/lib/__tests__/sandboxSync.test.js +8 -8
- package/lib/__tests__/sandboxes.test.js +8 -8
- package/lib/__tests__/serverlessLogs.test.js +1 -1
- package/lib/__tests__/usageTracking.test.js +5 -5
- package/lib/__tests__/validation.test.js +2 -1
- package/lib/__tests__/yargsUtils.test.js +83 -9
- package/lib/app/__tests__/migrate.test.js +19 -56
- package/lib/app/__tests__/migrate_legacy.test.js +1 -1
- package/lib/app/migrate.d.ts +2 -8
- package/lib/app/migrate.js +5 -80
- package/lib/app/migrate_legacy.js +20 -24
- package/lib/buildAccount.js +25 -57
- package/lib/commonOpts.d.ts +1 -1
- package/lib/commonOpts.js +25 -22
- package/lib/configOptions.js +7 -0
- package/lib/constants.d.ts +13 -0
- package/lib/constants.js +17 -0
- package/lib/dependencyManagement.js +9 -27
- package/lib/developerTestAccounts.js +9 -23
- package/lib/doctor/Diagnosis.js +11 -23
- package/lib/doctor/DiagnosticInfoBuilder.js +12 -11
- package/lib/doctor/Doctor.js +42 -90
- package/lib/doctor/__tests__/Doctor.test.js +4 -4
- package/lib/errorHandlers/index.js +12 -20
- package/lib/errorHandlers/suppressError.js +10 -17
- package/lib/lang.js +6 -5
- package/lib/links.d.ts +1 -0
- package/lib/links.js +14 -7
- package/lib/mcp/setup.js +1 -1
- package/lib/middleware/__test__/commandTargetingUtils.test.js +99 -0
- package/lib/middleware/__test__/configMiddleware.test.js +11 -11
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +6 -8
- package/lib/middleware/commandTargetingUtils.d.ts +8 -0
- package/lib/middleware/commandTargetingUtils.js +78 -0
- package/lib/middleware/configMiddleware.d.ts +1 -1
- package/lib/middleware/configMiddleware.js +21 -81
- package/lib/middleware/fireAlarmMiddleware.js +15 -5
- package/lib/middleware/gitMiddleware.js +5 -1
- package/lib/middleware/notificationsMiddleware.js +5 -11
- package/lib/middleware/yargsChecksMiddleware.js +6 -9
- package/lib/npm.js +2 -2
- package/lib/oauth.js +5 -5
- package/lib/process.js +5 -4
- package/lib/projectProfiles.d.ts +1 -1
- package/lib/projectProfiles.js +2 -10
- package/lib/projects/__tests__/AppDevModeInterface.test.js +2 -0
- package/lib/projects/__tests__/LocalDevProcess.test.js +227 -16
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +86 -60
- package/lib/projects/__tests__/deploy.test.js +71 -6
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +6 -2
- package/lib/projects/__tests__/platformVersion.test.js +8 -8
- package/lib/projects/__tests__/projects.test.js +12 -12
- package/lib/projects/__tests__/structure.test.js +3 -3
- package/lib/projects/__tests__/upload.test.d.ts +1 -0
- package/lib/projects/__tests__/upload.test.js +82 -0
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +6 -6
- package/lib/projects/add/__tests__/v3AddComponent.test.js +4 -4
- package/lib/projects/create/__tests__/legacy.test.js +5 -5
- package/lib/projects/create/__tests__/v3.test.js +80 -5
- package/lib/projects/create/index.js +2 -2
- package/lib/projects/create/legacy.js +2 -2
- package/lib/projects/create/v3.js +10 -8
- package/lib/projects/localDev/AppDevModeInterface.d.ts +2 -0
- package/lib/projects/localDev/AppDevModeInterface.js +21 -12
- package/lib/projects/localDev/LocalDevLogger.d.ts +4 -0
- package/lib/projects/localDev/LocalDevLogger.js +27 -6
- package/lib/projects/localDev/LocalDevManager.js +4 -5
- package/lib/projects/localDev/LocalDevProcess.d.ts +7 -5
- package/lib/projects/localDev/LocalDevProcess.js +90 -19
- package/lib/projects/localDev/LocalDevState.d.ts +9 -8
- package/lib/projects/localDev/LocalDevState.js +18 -17
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +2 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +62 -33
- package/lib/projects/localDev/helpers/project.d.ts +1 -0
- package/lib/projects/localDev/helpers/project.js +42 -1
- package/lib/projects/localDev/localDevWebsocketServerUtils.d.ts +4 -0
- package/lib/projects/localDev/localDevWebsocketServerUtils.js +10 -0
- package/lib/projects/platformVersion.d.ts +1 -1
- package/lib/projects/platformVersion.js +1 -1
- package/lib/projects/pollProjectBuildAndDeploy.js +4 -4
- package/lib/projects/structure.d.ts +2 -2
- package/lib/projects/structure.js +6 -6
- package/lib/projects/upload.d.ts +2 -3
- package/lib/projects/upload.js +17 -9
- package/lib/prompts/accountNamePrompt.js +14 -19
- package/lib/prompts/accountsPrompt.js +2 -2
- package/lib/prompts/cmsFieldPrompt.js +2 -2
- package/lib/prompts/createApiSamplePrompt.js +5 -5
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +10 -1
- package/lib/prompts/createFunctionPrompt.js +14 -14
- package/lib/prompts/createModulePrompt.js +9 -9
- package/lib/prompts/createTemplatePrompt.js +2 -2
- package/lib/prompts/downloadProjectPrompt.js +5 -8
- package/lib/prompts/personalAccessKeyPrompt.js +3 -3
- package/lib/prompts/previewPrompt.js +6 -6
- package/lib/prompts/projectAddPrompt.js +8 -1
- package/lib/prompts/projectDevTargetAccountPrompt.js +20 -32
- package/lib/prompts/projectNamePrompt.js +4 -8
- package/lib/prompts/projectsLogsPrompt.js +2 -4
- package/lib/prompts/promptUtils.js +30 -9
- package/lib/prompts/sandboxesPrompt.js +7 -7
- package/lib/prompts/secretPrompt.js +3 -3
- package/lib/prompts/selectAppPrompt.js +3 -3
- package/lib/prompts/selectHubDBTablePrompt.js +9 -13
- package/lib/prompts/selectProjectTemplatePrompt.js +2 -0
- package/lib/prompts/selectPublicAppForMigrationPrompt.js +15 -19
- package/lib/prompts/setAsDefaultAccountPrompt.js +4 -8
- package/lib/prompts/uploadPrompt.js +5 -5
- package/lib/sandboxSync.js +24 -41
- package/lib/sandboxes.js +19 -47
- package/lib/schema.js +3 -3
- package/lib/serverlessLogs.js +11 -13
- package/lib/theme/__tests__/migrate.test.d.ts +1 -0
- package/lib/theme/__tests__/migrate.test.js +233 -0
- package/lib/theme/migrate.d.ts +13 -0
- package/lib/theme/migrate.js +90 -0
- package/lib/ui/SpinniesManager.d.ts +2 -0
- package/lib/ui/SpinniesManager.js +7 -0
- package/lib/ui/boxen.js +1 -2
- package/lib/ui/git.js +13 -10
- package/lib/ui/index.js +38 -37
- package/lib/ui/serverlessFunctionLogs.js +9 -7
- package/lib/ui/uiMessages.d.ts +68 -0
- package/lib/ui/uiMessages.js +71 -0
- package/lib/usageTracking.js +8 -8
- package/lib/validation.js +20 -23
- package/lib/yargsUtils.d.ts +1 -1
- package/lib/yargsUtils.js +12 -5
- package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +2 -2
- package/mcp-server/tools/index.js +4 -0
- package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +2 -2
- package/mcp-server/tools/project/CreateProjectTool.d.ts +2 -2
- package/mcp-server/tools/project/DocsSearchTool.d.ts +4 -1
- package/mcp-server/tools/project/DocsSearchTool.js +5 -5
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +23 -0
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +68 -0
- package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +11 -0
- package/mcp-server/tools/project/GetApplicationInfoTool.js +49 -0
- package/mcp-server/tools/project/GetConfigValuesTool.d.ts +4 -1
- package/mcp-server/tools/project/GetConfigValuesTool.js +12 -6
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +2 -2
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +12 -10
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +169 -0
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.d.ts +1 -0
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +115 -0
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +8 -7
- package/mcp-server/utils/__tests__/cliConfig.test.d.ts +1 -0
- package/mcp-server/utils/__tests__/cliConfig.test.js +110 -0
- package/mcp-server/utils/cliConfig.d.ts +1 -0
- package/mcp-server/utils/cliConfig.js +12 -0
- package/mcp-server/utils/toolUsageTracking.js +2 -2
- package/package.json +4 -4
- package/types/LocalDev.d.ts +19 -3
- package/types/Yargs.d.ts +1 -1
- package/ui/index.js +1 -1
- package/commands/app/__tests__/install.test.js +0 -47
- package/commands/app/install.d.ts +0 -8
- package/commands/app/install.js +0 -122
- package/lib/middleware/__test__/utils.test.js +0 -51
- package/lib/middleware/utils.d.ts +0 -8
- package/lib/middleware/utils.js +0 -14
- /package/commands/{app/__tests__/install.test.d.ts → project/__tests__/validate.test.d.ts} +0 -0
- /package/lib/middleware/__test__/{utils.test.d.ts → commandTargetingUtils.test.d.ts} +0 -0
|
@@ -3,7 +3,7 @@ import { marketplaceDistribution, oAuth, privateDistribution, staticAuth, EMPTY_
|
|
|
3
3
|
import { commands, lib } from '../../../lang/en.js';
|
|
4
4
|
import { listPrompt } from '../../prompts/promptUtils.js';
|
|
5
5
|
import chalk from 'chalk';
|
|
6
|
-
import {
|
|
6
|
+
import { isV2Project } from '../platformVersion.js';
|
|
7
7
|
import path from 'path';
|
|
8
8
|
import { getConfigForPlatformVersion } from './legacy.js';
|
|
9
9
|
import { logError } from '../../errorHandlers/index.js';
|
|
@@ -52,6 +52,7 @@ export async function createV3App(providedAuth, providedDistribution) {
|
|
|
52
52
|
const componentTypeToGateMap = {
|
|
53
53
|
[AppEventsKey]: FEATURES.APP_EVENTS,
|
|
54
54
|
[PagesKey]: FEATURES.APPS_HOME,
|
|
55
|
+
'workflow-action-tool': FEATURES.AGENT_TOOLS,
|
|
55
56
|
};
|
|
56
57
|
export async function calculateComponentTemplateChoices(components, authType, distribution, accountId, projectMetadata) {
|
|
57
58
|
const enabledComponents = [];
|
|
@@ -73,18 +74,19 @@ export async function calculateComponentTemplateChoices(components, authType, di
|
|
|
73
74
|
}
|
|
74
75
|
if (Array.isArray(supportedAuthTypes) &&
|
|
75
76
|
authType &&
|
|
76
|
-
!supportedAuthTypes.includes(authType)) {
|
|
77
|
+
!supportedAuthTypes.includes(authType.toLowerCase())) {
|
|
77
78
|
disabledReasons.push(commands.project.add.error.authTypeNotAllowed(authType));
|
|
78
79
|
}
|
|
79
80
|
if (Array.isArray(supportedDistributions) &&
|
|
80
81
|
distribution &&
|
|
81
|
-
!supportedDistributions.includes(distribution)) {
|
|
82
|
+
!supportedDistributions.includes(distribution.toLowerCase())) {
|
|
82
83
|
disabledReasons.push(commands.project.add.error.distributionNotAllowed(distribution));
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
const templateGate = componentTypeToGateMap[template.cliSelector || template.type];
|
|
86
|
+
if (templateGate) {
|
|
87
|
+
const isUngated = await hasFeature(accountId, templateGate);
|
|
86
88
|
if (!isUngated) {
|
|
87
|
-
disabledReasons.
|
|
89
|
+
disabledReasons.unshift(commands.project.add.error.portalDoesNotHaveAccessToThisFeature(accountId));
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
if (disabledReasons.length > 0) {
|
|
@@ -96,7 +98,7 @@ export async function calculateComponentTemplateChoices(components, authType, di
|
|
|
96
98
|
}
|
|
97
99
|
else {
|
|
98
100
|
enabledComponents.push({
|
|
99
|
-
name: template.label
|
|
101
|
+
name: `${template.label} [${template.cliSelector || template.type}]`,
|
|
100
102
|
value: template,
|
|
101
103
|
});
|
|
102
104
|
}
|
|
@@ -146,7 +148,7 @@ export async function v3ComponentFlow(platformVersion, projectBase, providedAuth
|
|
|
146
148
|
};
|
|
147
149
|
}
|
|
148
150
|
export function generateComponentPaths({ selectProjectTemplatePromptResponse, platformVersion, repoConfig, projectContents, authType, distribution, }) {
|
|
149
|
-
if (!
|
|
151
|
+
if (!isV2Project(platformVersion)) {
|
|
150
152
|
return [];
|
|
151
153
|
}
|
|
152
154
|
const components = selectProjectTemplatePromptResponse.componentTemplates?.map((componentTemplate) => {
|
|
@@ -15,6 +15,8 @@ declare class AppDevModeInterface {
|
|
|
15
15
|
private get appNode();
|
|
16
16
|
private get appData();
|
|
17
17
|
private set appData(value);
|
|
18
|
+
private isStaticAuthApp;
|
|
19
|
+
private isOAuthApp;
|
|
18
20
|
private getAppInstallUrl;
|
|
19
21
|
private fetchAppData;
|
|
20
22
|
private checkMarketplaceAppInstalls;
|
|
@@ -54,6 +54,12 @@ class AppDevModeInterface {
|
|
|
54
54
|
}
|
|
55
55
|
this.localDevState.setAppDataForUid(this.appNode.uid, appData);
|
|
56
56
|
}
|
|
57
|
+
isStaticAuthApp() {
|
|
58
|
+
return (this.appNode?.config.auth.type.toLowerCase() === APP_AUTH_TYPES.STATIC);
|
|
59
|
+
}
|
|
60
|
+
isOAuthApp() {
|
|
61
|
+
return (this.appNode?.config.auth.type.toLowerCase() === APP_AUTH_TYPES.OAUTH);
|
|
62
|
+
}
|
|
57
63
|
// @TODO: Restore test account auto install functionality
|
|
58
64
|
// private isAutomaticallyInstallable(): boolean {
|
|
59
65
|
// const targetTestingAccount = getAccountConfig(
|
|
@@ -71,11 +77,11 @@ class AppDevModeInterface {
|
|
|
71
77
|
// return (
|
|
72
78
|
// isTestAccount &&
|
|
73
79
|
// hasCorrectParent &&
|
|
74
|
-
// this.
|
|
80
|
+
// this.isStaticAuthApp()
|
|
75
81
|
// );
|
|
76
82
|
// }
|
|
77
83
|
async getAppInstallUrl() {
|
|
78
|
-
if (this.appNode
|
|
84
|
+
if (this.appNode && this.isOAuthApp()) {
|
|
79
85
|
return getOauthAppInstallUrl({
|
|
80
86
|
targetAccountId: this.localDevState.targetTestingAccountId,
|
|
81
87
|
env: this.localDevState.env,
|
|
@@ -177,13 +183,16 @@ class AppDevModeInterface {
|
|
|
177
183
|
// );
|
|
178
184
|
// }
|
|
179
185
|
// }
|
|
186
|
+
const staticAuthInstallOptions = this.isStaticAuthApp()
|
|
187
|
+
? {
|
|
188
|
+
testingAccountId: this.localDevState.targetTestingAccountId,
|
|
189
|
+
projectAccountId: this.localDevState.targetProjectAccountId,
|
|
190
|
+
projectName: this.localDevState.projectConfig.name,
|
|
191
|
+
appUid: this.appNode.uid,
|
|
192
|
+
}
|
|
193
|
+
: undefined;
|
|
180
194
|
const installUrl = await this.getAppInstallUrl();
|
|
181
|
-
await installAppBrowserPrompt(installUrl, isReinstall,
|
|
182
|
-
testingAccountId: this.localDevState.targetTestingAccountId,
|
|
183
|
-
projectAccountId: this.localDevState.targetProjectAccountId,
|
|
184
|
-
projectName: this.localDevState.projectConfig.name,
|
|
185
|
-
appUid: this.appNode.uid,
|
|
186
|
-
});
|
|
195
|
+
await installAppBrowserPrompt(installUrl, isReinstall, staticAuthInstallOptions);
|
|
187
196
|
}
|
|
188
197
|
async checkTestAccountAppInstallation() {
|
|
189
198
|
if (!this.appNode || !this.appData) {
|
|
@@ -216,12 +225,12 @@ class AppDevModeInterface {
|
|
|
216
225
|
const newDistribution = newAppNode?.config.distribution;
|
|
217
226
|
const oldAuthType = this.appNode?.config.auth.type;
|
|
218
227
|
const newAuthType = newAppNode?.config.auth.type;
|
|
219
|
-
if (newDistribution === APP_DISTRIBUTION_TYPES.MARKETPLACE &&
|
|
220
|
-
oldDistribution !== APP_DISTRIBUTION_TYPES.MARKETPLACE) {
|
|
228
|
+
if (newDistribution?.toLowerCase() === APP_DISTRIBUTION_TYPES.MARKETPLACE &&
|
|
229
|
+
oldDistribution?.toLowerCase() !== APP_DISTRIBUTION_TYPES.MARKETPLACE) {
|
|
221
230
|
this.localDevState.addUploadWarning(lib.AppDevModeInterface.distributionChanged);
|
|
222
231
|
}
|
|
223
|
-
else if (newAuthType === APP_AUTH_TYPES.OAUTH &&
|
|
224
|
-
oldAuthType !== APP_AUTH_TYPES.OAUTH) {
|
|
232
|
+
else if (newAuthType?.toLowerCase() === APP_AUTH_TYPES.OAUTH &&
|
|
233
|
+
oldAuthType?.toLowerCase() !== APP_AUTH_TYPES.OAUTH) {
|
|
225
234
|
this.localDevState.addUploadWarning(lib.AppDevModeInterface.authTypeChanged);
|
|
226
235
|
}
|
|
227
236
|
};
|
|
@@ -18,9 +18,13 @@ declare class LocalDevLogger {
|
|
|
18
18
|
cleanupError(): void;
|
|
19
19
|
cleanupSuccess(): void;
|
|
20
20
|
uploadInitiated(): void;
|
|
21
|
+
deployInitiated(): void;
|
|
21
22
|
projectConfigMismatch(): void;
|
|
22
23
|
uploadError(error: unknown): void;
|
|
23
24
|
uploadSuccess(): void;
|
|
25
|
+
uploadSuccessAutoDeployDisabled(): void;
|
|
26
|
+
deployError(error?: unknown): void;
|
|
27
|
+
deploySuccess(): void;
|
|
24
28
|
monitorConsoleOutput(): void;
|
|
25
29
|
}
|
|
26
30
|
export default LocalDevLogger;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getAccountId, hasLocalStateFlag } from '@hubspot/local-dev-lib/config';
|
|
2
2
|
import { getConfigDefaultAccount } from '@hubspot/local-dev-lib/config';
|
|
3
|
-
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
4
3
|
import { uiLogger } from '../../ui/logger.js';
|
|
5
4
|
import { uiBetaTag, uiLine, uiAccountDescription, uiCommandReference, } from '../../ui/index.js';
|
|
6
5
|
import { lib } from '../../../lang/en.js';
|
|
@@ -26,7 +25,7 @@ class LocalDevLogger {
|
|
|
26
25
|
}
|
|
27
26
|
handleError(e, langFunction) {
|
|
28
27
|
if (this.state.debug) {
|
|
29
|
-
|
|
28
|
+
uiLogger.error(e instanceof Error ? e.message : String(e));
|
|
30
29
|
}
|
|
31
30
|
uiLogger.error(langFunction(e instanceof Error ? e.message : ''));
|
|
32
31
|
}
|
|
@@ -112,20 +111,42 @@ class LocalDevLogger {
|
|
|
112
111
|
uploadInitiated() {
|
|
113
112
|
uiLogger.log(lib.LocalDevProcess.uploadInitiated);
|
|
114
113
|
}
|
|
114
|
+
deployInitiated() {
|
|
115
|
+
uiLogger.log(lib.LocalDevProcess.deployInitiated);
|
|
116
|
+
}
|
|
115
117
|
projectConfigMismatch() {
|
|
116
118
|
uiLogger.log(lib.LocalDevProcess.projectConfigMismatch);
|
|
117
119
|
}
|
|
118
120
|
uploadError(error) {
|
|
119
|
-
|
|
121
|
+
uiLogger.log('');
|
|
120
122
|
logError(error);
|
|
121
123
|
uiLogger.log(lib.LocalDevProcess.uploadFailed);
|
|
122
|
-
|
|
124
|
+
uiLogger.log('');
|
|
123
125
|
}
|
|
124
126
|
uploadSuccess() {
|
|
125
|
-
|
|
127
|
+
uiLogger.log('');
|
|
126
128
|
uiLogger.log(lib.LocalDevProcess.uploadSuccess);
|
|
127
129
|
uiLine();
|
|
128
|
-
|
|
130
|
+
uiLogger.log('');
|
|
131
|
+
}
|
|
132
|
+
uploadSuccessAutoDeployDisabled() {
|
|
133
|
+
uiLogger.warn(lib.LocalDevProcess.uploadSuccessAutoDeployDisabled);
|
|
134
|
+
uiLine();
|
|
135
|
+
uiLogger.log('');
|
|
136
|
+
}
|
|
137
|
+
deployError(error) {
|
|
138
|
+
uiLogger.log('');
|
|
139
|
+
if (error) {
|
|
140
|
+
logError(error);
|
|
141
|
+
}
|
|
142
|
+
uiLogger.log(lib.LocalDevProcess.deployFailed);
|
|
143
|
+
uiLogger.log('');
|
|
144
|
+
}
|
|
145
|
+
deploySuccess() {
|
|
146
|
+
uiLogger.log('');
|
|
147
|
+
uiLogger.log(lib.LocalDevProcess.deploySuccess);
|
|
148
|
+
uiLine();
|
|
149
|
+
uiLogger.log('');
|
|
129
150
|
}
|
|
130
151
|
monitorConsoleOutput() {
|
|
131
152
|
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
@@ -4,7 +4,6 @@ import chalk from 'chalk';
|
|
|
4
4
|
import { fetchAppInstallationData } from '@hubspot/local-dev-lib/api/localDevAuth';
|
|
5
5
|
import { fetchPublicAppsForPortal, fetchPublicAppProductionInstallCounts, } from '@hubspot/local-dev-lib/api/appsDev';
|
|
6
6
|
import { getAccountId, getConfigDefaultAccount, } from '@hubspot/local-dev-lib/config';
|
|
7
|
-
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
8
7
|
import { PROJECT_CONFIG_FILE } from '../../constants.js';
|
|
9
8
|
import SpinniesManager from '../../ui/SpinniesManager.js';
|
|
10
9
|
import DevServerManager from './DevServerManager.js';
|
|
@@ -324,7 +323,7 @@ class LocalDevManager {
|
|
|
324
323
|
}
|
|
325
324
|
catch (e) {
|
|
326
325
|
if (this.debug) {
|
|
327
|
-
|
|
326
|
+
uiLogger.error(e instanceof Error ? e.message : String(e));
|
|
328
327
|
}
|
|
329
328
|
uiLogger.error(lib.LocalDevManager.devServer.setupError(e instanceof Error ? e.message : ''));
|
|
330
329
|
return false;
|
|
@@ -339,7 +338,7 @@ class LocalDevManager {
|
|
|
339
338
|
}
|
|
340
339
|
catch (e) {
|
|
341
340
|
if (this.debug) {
|
|
342
|
-
|
|
341
|
+
uiLogger.error(e instanceof Error ? e.message : String(e));
|
|
343
342
|
}
|
|
344
343
|
uiLogger.error(lib.LocalDevManager.devServer.startError(e instanceof Error ? e.message : ''));
|
|
345
344
|
process.exit(EXIT_CODES.ERROR);
|
|
@@ -351,7 +350,7 @@ class LocalDevManager {
|
|
|
351
350
|
}
|
|
352
351
|
catch (e) {
|
|
353
352
|
if (this.debug) {
|
|
354
|
-
|
|
353
|
+
uiLogger.error(e instanceof Error ? e.message : String(e));
|
|
355
354
|
}
|
|
356
355
|
uiLogger.error(lib.LocalDevManager.devServer.fileChangeError(e instanceof Error ? e.message : ''));
|
|
357
356
|
}
|
|
@@ -363,7 +362,7 @@ class LocalDevManager {
|
|
|
363
362
|
}
|
|
364
363
|
catch (e) {
|
|
365
364
|
if (this.debug) {
|
|
366
|
-
|
|
365
|
+
uiLogger.error(e instanceof Error ? e.message : String(e));
|
|
367
366
|
}
|
|
368
367
|
uiLogger.error(lib.LocalDevManager.devServer.cleanupError(e instanceof Error ? e.message : ''));
|
|
369
368
|
return false;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { IntermediateRepresentationNodeLocalDev } from '@hubspot/project-parsing-lib/src/lib/types.js';
|
|
2
|
+
import { Project } from '@hubspot/local-dev-lib/types/Project';
|
|
2
3
|
import LocalDevState from './LocalDevState.js';
|
|
3
4
|
import LocalDevLogger from './LocalDevLogger.js';
|
|
4
|
-
import { LocalDevStateConstructorOptions, LocalDevStateListener, LocalDevServerMessage } from '../../../types/LocalDev.js';
|
|
5
|
+
import { LocalDevStateConstructorOptions, LocalDevStateListener, LocalDevServerMessage, LocalDevProjectUploadResult, LocalDevProjectDeployResult } from '../../../types/LocalDev.js';
|
|
5
6
|
declare class LocalDevProcess {
|
|
6
7
|
private state;
|
|
7
8
|
private _logger;
|
|
8
9
|
private devServerManager;
|
|
9
10
|
constructor(options: LocalDevStateConstructorOptions);
|
|
10
11
|
get projectDir(): string;
|
|
11
|
-
get
|
|
12
|
-
get projectName(): string;
|
|
12
|
+
get projectData(): Project;
|
|
13
13
|
get targetProjectAccountId(): number;
|
|
14
14
|
get targetTestingAccountId(): number;
|
|
15
15
|
get projectNodes(): {
|
|
@@ -22,13 +22,15 @@ declare class LocalDevProcess {
|
|
|
22
22
|
private projectConfigValidForUpload;
|
|
23
23
|
private getIntermediateRepresentation;
|
|
24
24
|
private updateProjectNodes;
|
|
25
|
-
private
|
|
25
|
+
private updateProjectNodesAfterDeploy;
|
|
26
26
|
private openLocalDevUi;
|
|
27
|
+
private updateProjectData;
|
|
27
28
|
handleFileChange(filePath: string, event: string): Promise<void>;
|
|
28
29
|
handleConfigFileChange(): Promise<void>;
|
|
29
30
|
start(): Promise<void>;
|
|
30
31
|
stop(showProgress?: boolean): Promise<void>;
|
|
31
|
-
uploadProject(): Promise<
|
|
32
|
+
uploadProject(): Promise<LocalDevProjectUploadResult>;
|
|
33
|
+
deployLatestBuild(force?: boolean): Promise<LocalDevProjectDeployResult>;
|
|
32
34
|
addStateListener<K extends keyof LocalDevState>(key: K, listener: LocalDevStateListener<K>): void;
|
|
33
35
|
sendDevServerMessage(message: LocalDevServerMessage): void;
|
|
34
36
|
removeStateListener<K extends keyof LocalDevState>(key: K, listener: LocalDevStateListener<K>): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { translateForLocalDev } from '@hubspot/project-parsing-lib';
|
|
2
2
|
import { hasLocalStateFlag } from '@hubspot/local-dev-lib/config';
|
|
3
|
+
import { fetchProject } from '@hubspot/local-dev-lib/api/projects';
|
|
3
4
|
import path from 'path';
|
|
4
5
|
import open from 'open';
|
|
5
6
|
import LocalDevState from './LocalDevState.js';
|
|
@@ -8,10 +9,13 @@ import DevServerManagerV2 from './DevServerManagerV2.js';
|
|
|
8
9
|
import { EXIT_CODES } from '../../enums/exitCodes.js';
|
|
9
10
|
import { getProjectConfig } from '../config.js';
|
|
10
11
|
import { handleProjectUpload } from '../upload.js';
|
|
12
|
+
import { handleProjectDeploy } from '../deploy.js';
|
|
11
13
|
import { pollProjectBuildAndDeploy } from '../pollProjectBuildAndDeploy.js';
|
|
12
14
|
import { getLocalDevUiUrl } from '../urls.js';
|
|
13
|
-
import { CONFIG_LOCAL_STATE_FLAGS } from '../../constants.js';
|
|
15
|
+
import { CONFIG_LOCAL_STATE_FLAGS, PROJECT_DEPLOY_STATES, } from '../../constants.js';
|
|
14
16
|
import { isAutoOpenBrowserEnabled } from '../../configOptions.js';
|
|
17
|
+
import { lib } from '../../../lang/en.js';
|
|
18
|
+
import { debugError } from '../../errorHandlers/index.js';
|
|
15
19
|
class LocalDevProcess {
|
|
16
20
|
state;
|
|
17
21
|
_logger;
|
|
@@ -27,11 +31,8 @@ class LocalDevProcess {
|
|
|
27
31
|
get projectDir() {
|
|
28
32
|
return this.state.projectDir;
|
|
29
33
|
}
|
|
30
|
-
get
|
|
31
|
-
return this.state.
|
|
32
|
-
}
|
|
33
|
-
get projectName() {
|
|
34
|
-
return this.state.projectName;
|
|
34
|
+
get projectData() {
|
|
35
|
+
return this.state.projectData;
|
|
35
36
|
}
|
|
36
37
|
get targetProjectAccountId() {
|
|
37
38
|
return this.state.targetProjectAccountId;
|
|
@@ -87,34 +88,43 @@ class LocalDevProcess {
|
|
|
87
88
|
});
|
|
88
89
|
return true;
|
|
89
90
|
}
|
|
90
|
-
getIntermediateRepresentation(
|
|
91
|
+
getIntermediateRepresentation(projectNodesAtLastDeploy) {
|
|
91
92
|
return translateForLocalDev({
|
|
92
93
|
projectSourceDir: path.join(this.state.projectDir, this.state.projectConfig.srcDir),
|
|
93
94
|
platformVersion: this.state.projectConfig.platformVersion,
|
|
94
95
|
accountId: this.state.targetProjectAccountId,
|
|
95
96
|
}, {
|
|
96
|
-
projectNodesAtLastUpload,
|
|
97
|
+
projectNodesAtLastUpload: projectNodesAtLastDeploy,
|
|
97
98
|
profile: this.state.profile,
|
|
98
99
|
});
|
|
99
100
|
}
|
|
100
101
|
async updateProjectNodes() {
|
|
101
|
-
const intermediateRepresentation = await this.getIntermediateRepresentation(this.state.
|
|
102
|
+
const intermediateRepresentation = await this.getIntermediateRepresentation(this.state.projectNodesAtLastDeploy);
|
|
102
103
|
this.state.projectNodes =
|
|
103
104
|
intermediateRepresentation.intermediateNodesIndexedByUid;
|
|
104
105
|
this.state.projectProfileData = intermediateRepresentation.profileData;
|
|
105
106
|
}
|
|
106
|
-
async
|
|
107
|
+
async updateProjectNodesAfterDeploy() {
|
|
107
108
|
const intermediateRepresentation = await this.getIntermediateRepresentation();
|
|
108
109
|
this.state.projectNodes =
|
|
109
110
|
intermediateRepresentation.intermediateNodesIndexedByUid;
|
|
110
111
|
this.state.projectProfileData = intermediateRepresentation.profileData;
|
|
111
|
-
this.state.
|
|
112
|
+
this.state.projectNodesAtLastDeploy =
|
|
112
113
|
intermediateRepresentation.intermediateNodesIndexedByUid;
|
|
113
114
|
}
|
|
114
115
|
openLocalDevUi() {
|
|
115
116
|
const showWelcomeScreen = !hasLocalStateFlag(CONFIG_LOCAL_STATE_FLAGS.LOCAL_DEV_UI_WELCOME);
|
|
116
117
|
open(getLocalDevUiUrl(this.state.targetTestingAccountId, showWelcomeScreen));
|
|
117
118
|
}
|
|
119
|
+
async updateProjectData() {
|
|
120
|
+
try {
|
|
121
|
+
const { data: projectData } = await fetchProject(this.state.targetProjectAccountId, this.state.projectConfig.name);
|
|
122
|
+
this.state.projectData = projectData;
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
debugError(e);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
118
128
|
async handleFileChange(filePath, event) {
|
|
119
129
|
await this.updateProjectNodes();
|
|
120
130
|
try {
|
|
@@ -162,24 +172,85 @@ class LocalDevProcess {
|
|
|
162
172
|
const isUploadable = await this.projectConfigValidForUpload();
|
|
163
173
|
if (!isUploadable) {
|
|
164
174
|
this.logger.projectConfigMismatch();
|
|
165
|
-
return
|
|
175
|
+
return {
|
|
176
|
+
uploadSuccess: false,
|
|
177
|
+
buildSuccess: false,
|
|
178
|
+
deploySuccess: false,
|
|
179
|
+
};
|
|
166
180
|
}
|
|
167
|
-
const { uploadError } = await handleProjectUpload({
|
|
181
|
+
const { uploadError, result } = await handleProjectUpload({
|
|
168
182
|
accountId: this.state.targetProjectAccountId,
|
|
169
183
|
projectConfig: this.state.projectConfig,
|
|
170
184
|
projectDir: this.state.projectDir,
|
|
171
185
|
callbackFunc: pollProjectBuildAndDeploy,
|
|
172
186
|
sendIR: true,
|
|
173
|
-
skipValidation: true,
|
|
174
187
|
});
|
|
188
|
+
const deploy = result?.deployResult;
|
|
175
189
|
if (uploadError) {
|
|
176
190
|
this.logger.uploadError(uploadError);
|
|
177
|
-
return
|
|
191
|
+
return {
|
|
192
|
+
uploadSuccess: false,
|
|
193
|
+
buildSuccess: false,
|
|
194
|
+
deploySuccess: false,
|
|
195
|
+
deployId: deploy?.deployId,
|
|
196
|
+
};
|
|
178
197
|
}
|
|
179
|
-
await this.
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
198
|
+
await this.updateProjectData();
|
|
199
|
+
if (deploy && deploy.status === PROJECT_DEPLOY_STATES.FAILURE) {
|
|
200
|
+
return {
|
|
201
|
+
uploadSuccess: false,
|
|
202
|
+
buildSuccess: true,
|
|
203
|
+
deploySuccess: false,
|
|
204
|
+
deployId: deploy.deployId,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
else if (!deploy) {
|
|
208
|
+
this.logger.uploadSuccessAutoDeployDisabled();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
await this.updateProjectNodesAfterDeploy();
|
|
212
|
+
this.state.clearUploadWarnings();
|
|
213
|
+
this.logger.uploadSuccess();
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
uploadSuccess: true,
|
|
217
|
+
buildSuccess: true,
|
|
218
|
+
deploySuccess: Boolean(deploy),
|
|
219
|
+
deployId: deploy?.deployId,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async deployLatestBuild(force = false) {
|
|
223
|
+
this.logger.deployInitiated();
|
|
224
|
+
if (!this.state.projectData.latestBuild) {
|
|
225
|
+
this.logger.deployError(lib.LocalDevProcess.noBuildToDeploy);
|
|
226
|
+
return {
|
|
227
|
+
success: false,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
let deploy;
|
|
231
|
+
try {
|
|
232
|
+
deploy = await handleProjectDeploy(this.state.targetProjectAccountId, this.state.projectConfig.name, this.state.projectData.latestBuild.buildId, true, force);
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
this.logger.deployError(error);
|
|
236
|
+
return {
|
|
237
|
+
success: false,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const success = deploy?.status === PROJECT_DEPLOY_STATES.SUCCESS;
|
|
241
|
+
if (success) {
|
|
242
|
+
await this.updateProjectData();
|
|
243
|
+
this.logger.deploySuccess();
|
|
244
|
+
await this.updateProjectNodesAfterDeploy();
|
|
245
|
+
this.state.clearUploadWarnings();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this.logger.deployError();
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
success,
|
|
252
|
+
deployId: deploy?.deployId,
|
|
253
|
+
};
|
|
183
254
|
}
|
|
184
255
|
addStateListener(key, listener) {
|
|
185
256
|
this.state.addListener(key, listener);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IntermediateRepresentationNodeLocalDev, HSProfileVariables } from '@hubspot/project-parsing-lib/src/lib/types.js';
|
|
2
2
|
import { Environment } from '@hubspot/local-dev-lib/types/Config';
|
|
3
|
+
import { Project } from '@hubspot/local-dev-lib/types/Project';
|
|
3
4
|
import { ProjectConfig } from '../../../types/Projects.js';
|
|
4
5
|
import { LocalDevStateConstructorOptions, LocalDevStateListener, AppLocalDevData, LocalDevServerMessage } from '../../../types/LocalDev.js';
|
|
5
6
|
declare class LocalDevState {
|
|
@@ -8,26 +9,23 @@ declare class LocalDevState {
|
|
|
8
9
|
private _profile?;
|
|
9
10
|
private _projectConfig;
|
|
10
11
|
private _projectDir;
|
|
11
|
-
private
|
|
12
|
-
private _projectName;
|
|
12
|
+
private _projectData;
|
|
13
13
|
private _debug;
|
|
14
14
|
private _projectNodes;
|
|
15
15
|
private _projectProfileData;
|
|
16
|
-
private
|
|
16
|
+
private _projectNodesAtLastDeploy;
|
|
17
17
|
private _env;
|
|
18
18
|
private _listeners;
|
|
19
19
|
private _appData;
|
|
20
20
|
private _devServerMessage;
|
|
21
21
|
private _uploadWarnings;
|
|
22
|
-
constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir,
|
|
22
|
+
constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir, projectData, debug, initialProjectNodes, initialProjectProfileData, profile, env, }: LocalDevStateConstructorOptions);
|
|
23
23
|
private runListeners;
|
|
24
24
|
get targetProjectAccountId(): number;
|
|
25
25
|
get targetTestingAccountId(): number;
|
|
26
26
|
get profile(): string | undefined;
|
|
27
27
|
get projectConfig(): ProjectConfig;
|
|
28
28
|
get projectDir(): string;
|
|
29
|
-
get projectId(): number;
|
|
30
|
-
get projectName(): string;
|
|
31
29
|
get debug(): boolean;
|
|
32
30
|
get projectNodes(): {
|
|
33
31
|
[key: string]: IntermediateRepresentationNodeLocalDev;
|
|
@@ -37,12 +35,15 @@ declare class LocalDevState {
|
|
|
37
35
|
});
|
|
38
36
|
get projectProfileData(): HSProfileVariables;
|
|
39
37
|
set projectProfileData(profileData: HSProfileVariables);
|
|
40
|
-
get
|
|
38
|
+
get projectNodesAtLastDeploy(): {
|
|
41
39
|
[key: string]: IntermediateRepresentationNodeLocalDev;
|
|
42
40
|
};
|
|
43
|
-
set
|
|
41
|
+
set projectNodesAtLastDeploy(nodes: {
|
|
44
42
|
[key: string]: IntermediateRepresentationNodeLocalDev;
|
|
45
43
|
});
|
|
44
|
+
get projectData(): Project;
|
|
45
|
+
get projectId(): number;
|
|
46
|
+
set projectData(projectData: Project);
|
|
46
47
|
get env(): Environment;
|
|
47
48
|
get appData(): Record<string, AppLocalDevData>;
|
|
48
49
|
getAppDataByUid(uid: string): AppLocalDevData | undefined;
|
|
@@ -5,28 +5,26 @@ class LocalDevState {
|
|
|
5
5
|
_profile;
|
|
6
6
|
_projectConfig;
|
|
7
7
|
_projectDir;
|
|
8
|
-
|
|
9
|
-
_projectName;
|
|
8
|
+
_projectData;
|
|
10
9
|
_debug;
|
|
11
10
|
_projectNodes;
|
|
12
11
|
_projectProfileData;
|
|
13
|
-
|
|
12
|
+
_projectNodesAtLastDeploy;
|
|
14
13
|
_env;
|
|
15
14
|
_listeners;
|
|
16
15
|
_appData;
|
|
17
16
|
_devServerMessage;
|
|
18
17
|
_uploadWarnings;
|
|
19
|
-
constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir,
|
|
18
|
+
constructor({ targetProjectAccountId, targetTestingAccountId, projectConfig, projectDir, projectData, debug, initialProjectNodes, initialProjectProfileData, profile, env, }) {
|
|
20
19
|
this._targetProjectAccountId = targetProjectAccountId;
|
|
21
20
|
this._targetTestingAccountId = targetTestingAccountId;
|
|
22
21
|
this._profile = profile;
|
|
23
22
|
this._projectConfig = projectConfig;
|
|
24
23
|
this._projectDir = projectDir;
|
|
25
|
-
this.
|
|
26
|
-
this._projectName = projectName;
|
|
24
|
+
this._projectData = projectData;
|
|
27
25
|
this._debug = debug || false;
|
|
28
26
|
this._projectNodes = initialProjectNodes;
|
|
29
|
-
this.
|
|
27
|
+
this._projectNodesAtLastDeploy = initialProjectNodes;
|
|
30
28
|
this._projectProfileData = initialProjectProfileData;
|
|
31
29
|
this._env = env;
|
|
32
30
|
this._appData = {};
|
|
@@ -54,12 +52,6 @@ class LocalDevState {
|
|
|
54
52
|
get projectDir() {
|
|
55
53
|
return this._projectDir;
|
|
56
54
|
}
|
|
57
|
-
get projectId() {
|
|
58
|
-
return this._projectId;
|
|
59
|
-
}
|
|
60
|
-
get projectName() {
|
|
61
|
-
return this._projectName;
|
|
62
|
-
}
|
|
63
55
|
get debug() {
|
|
64
56
|
return this._debug;
|
|
65
57
|
}
|
|
@@ -76,11 +68,20 @@ class LocalDevState {
|
|
|
76
68
|
set projectProfileData(profileData) {
|
|
77
69
|
this._projectProfileData = profileData;
|
|
78
70
|
}
|
|
79
|
-
get
|
|
80
|
-
return structuredClone(this.
|
|
71
|
+
get projectNodesAtLastDeploy() {
|
|
72
|
+
return structuredClone(this._projectNodesAtLastDeploy);
|
|
73
|
+
}
|
|
74
|
+
set projectNodesAtLastDeploy(nodes) {
|
|
75
|
+
this._projectNodesAtLastDeploy = nodes;
|
|
76
|
+
}
|
|
77
|
+
get projectData() {
|
|
78
|
+
return structuredClone(this._projectData);
|
|
79
|
+
}
|
|
80
|
+
get projectId() {
|
|
81
|
+
return this.projectData.id;
|
|
81
82
|
}
|
|
82
|
-
set
|
|
83
|
-
this.
|
|
83
|
+
set projectData(projectData) {
|
|
84
|
+
this._projectData = projectData;
|
|
84
85
|
}
|
|
85
86
|
get env() {
|
|
86
87
|
return this._env;
|
|
@@ -3,13 +3,14 @@ declare class LocalDevWebsocketServer {
|
|
|
3
3
|
private server?;
|
|
4
4
|
private debug?;
|
|
5
5
|
private localDevProcess;
|
|
6
|
-
private ALLOWED_ORIGINS;
|
|
7
6
|
constructor(localDevProcess: LocalDevProcess, debug?: boolean);
|
|
8
7
|
private log;
|
|
9
8
|
private logError;
|
|
10
9
|
private sendMessage;
|
|
11
10
|
private handleUpload;
|
|
11
|
+
private handleDeploy;
|
|
12
12
|
private setupMessageHandlers;
|
|
13
|
+
private sendCliMetadata;
|
|
13
14
|
private sendProjectData;
|
|
14
15
|
private setupProjectNodesListener;
|
|
15
16
|
private setupAppDataListener;
|