@hubspot/cli 7.7.35-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 +2 -2
- 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 +2 -9
- 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.js +16 -25
- 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/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 -98
- package/lang/en.js +312 -96
- 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.d.ts +1 -0
- 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/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.js +6 -6
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +17 -8
- 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/ui/index.js +1 -1
- 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/{lib/middleware/__test__/utils.test.d.ts → commands/project/__tests__/validate.test.d.ts} +0 -0
|
@@ -1,51 +1,66 @@
|
|
|
1
1
|
import { WebSocketServer } from 'ws';
|
|
2
2
|
import { isPortManagerServerRunning, requestPorts, } from '@hubspot/local-dev-lib/portManager';
|
|
3
|
-
import {
|
|
3
|
+
import { uiLogger } from '../../ui/logger.js';
|
|
4
4
|
import { addLocalStateFlag } from '@hubspot/local-dev-lib/config';
|
|
5
|
-
import { LOCAL_DEV_UI_MESSAGE_SEND_TYPES,
|
|
5
|
+
import { LOCAL_DEV_UI_MESSAGE_SEND_TYPES, LOCAL_DEV_SERVER_MESSAGE_TYPES, CONFIG_LOCAL_STATE_FLAGS, } from '../../constants.js';
|
|
6
6
|
import { lib } from '../../../lang/en.js';
|
|
7
7
|
import { removeAnsiCodes } from '../../ui/removeAnsiCodes.js';
|
|
8
|
+
import { isDeployWebsocketMessage, isViewedWelcomeScreenWebsocketMessage, isUploadWebsocketMessage, } from './localDevWebsocketServerUtils.js';
|
|
9
|
+
import pkg from '../../../package.json' with { type: 'json' };
|
|
8
10
|
const SERVER_INSTANCE_ID = 'local-dev-ui-websocket-server';
|
|
11
|
+
const LOCAL_DEV_WEBSOCKET_SERVER_VERSION = 1;
|
|
9
12
|
const LOG_PREFIX = '[LocalDevWebsocketServer]';
|
|
13
|
+
const DOMAINS = ['hubspot.com', 'hubspotqa.com'];
|
|
14
|
+
const SUBDOMAINS = ['local', 'app', 'app-na2', 'app-na3', 'app-ap1', 'app-eu1'];
|
|
15
|
+
const ALLOWED_ORIGIN_REGEX = new RegExp(`^https://(${SUBDOMAINS.join('|')})\\.(${DOMAINS.join('|')})$`);
|
|
10
16
|
class LocalDevWebsocketServer {
|
|
11
17
|
server;
|
|
12
18
|
debug;
|
|
13
19
|
localDevProcess;
|
|
14
|
-
ALLOWED_ORIGINS = [
|
|
15
|
-
'https://app.hubspot.com',
|
|
16
|
-
'https://app.hubspotqa.com',
|
|
17
|
-
'https://local.hubspot.com',
|
|
18
|
-
'https://local.hubspotqa.com',
|
|
19
|
-
];
|
|
20
20
|
constructor(localDevProcess, debug) {
|
|
21
21
|
this.localDevProcess = localDevProcess;
|
|
22
22
|
this.debug = debug;
|
|
23
23
|
}
|
|
24
24
|
log(message) {
|
|
25
25
|
if (this.debug) {
|
|
26
|
-
|
|
26
|
+
uiLogger.log(`${LOG_PREFIX} ${message}`);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
logError(message) {
|
|
30
30
|
if (this.debug) {
|
|
31
|
-
|
|
31
|
+
uiLogger.error(`${LOG_PREFIX} ${message}`);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
sendMessage(websocket, message) {
|
|
35
35
|
websocket.send(JSON.stringify(message));
|
|
36
36
|
}
|
|
37
37
|
async handleUpload(websocket) {
|
|
38
|
-
const uploadSuccess = await this.localDevProcess.uploadProject();
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const { uploadSuccess, buildSuccess, deploySuccess, deployId } = await this.localDevProcess.uploadProject();
|
|
39
|
+
this.sendMessage(websocket, {
|
|
40
|
+
type: uploadSuccess
|
|
41
|
+
? LOCAL_DEV_UI_MESSAGE_SEND_TYPES.UPLOAD_SUCCESS
|
|
42
|
+
: LOCAL_DEV_UI_MESSAGE_SEND_TYPES.UPLOAD_FAILURE,
|
|
43
|
+
data: {
|
|
44
|
+
latestBuild: this.localDevProcess.projectData.latestBuild,
|
|
45
|
+
deployedBuild: this.localDevProcess.projectData.deployedBuild,
|
|
46
|
+
buildSuccess,
|
|
47
|
+
deploySuccess,
|
|
48
|
+
deployId,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async handleDeploy(websocket, force) {
|
|
53
|
+
const { success, deployId } = await this.localDevProcess.deployLatestBuild(force);
|
|
54
|
+
this.sendMessage(websocket, {
|
|
55
|
+
type: success
|
|
56
|
+
? LOCAL_DEV_UI_MESSAGE_SEND_TYPES.DEPLOY_SUCCESS
|
|
57
|
+
: LOCAL_DEV_UI_MESSAGE_SEND_TYPES.DEPLOY_FAILURE,
|
|
58
|
+
data: {
|
|
59
|
+
latestBuild: this.localDevProcess.projectData.latestBuild,
|
|
60
|
+
deployedBuild: this.localDevProcess.projectData.deployedBuild,
|
|
61
|
+
latestDeployId: deployId,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
49
64
|
}
|
|
50
65
|
setupMessageHandlers(websocket) {
|
|
51
66
|
websocket.on('message', data => {
|
|
@@ -55,15 +70,17 @@ class LocalDevWebsocketServer {
|
|
|
55
70
|
this.logError(lib.LocalDevWebsocketServer.errors.missingTypeField(data.toString()));
|
|
56
71
|
return;
|
|
57
72
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
if (isUploadWebsocketMessage(message)) {
|
|
74
|
+
this.handleUpload(websocket);
|
|
75
|
+
}
|
|
76
|
+
else if (isDeployWebsocketMessage(message)) {
|
|
77
|
+
this.handleDeploy(websocket, message.data.force);
|
|
78
|
+
}
|
|
79
|
+
else if (isViewedWelcomeScreenWebsocketMessage(message)) {
|
|
80
|
+
addLocalStateFlag(CONFIG_LOCAL_STATE_FLAGS.LOCAL_DEV_UI_WELCOME);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.logError(lib.LocalDevWebsocketServer.errors.unknownMessageType(message.type));
|
|
67
84
|
}
|
|
68
85
|
}
|
|
69
86
|
catch (e) {
|
|
@@ -71,12 +88,23 @@ class LocalDevWebsocketServer {
|
|
|
71
88
|
}
|
|
72
89
|
});
|
|
73
90
|
}
|
|
91
|
+
sendCliMetadata(websocket) {
|
|
92
|
+
this.sendMessage(websocket, {
|
|
93
|
+
type: LOCAL_DEV_UI_MESSAGE_SEND_TYPES.CLI_METADATA,
|
|
94
|
+
data: {
|
|
95
|
+
cliVersion: pkg.version,
|
|
96
|
+
localDevWebsocketServerVersion: LOCAL_DEV_WEBSOCKET_SERVER_VERSION,
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
74
100
|
sendProjectData(websocket) {
|
|
75
101
|
this.sendMessage(websocket, {
|
|
76
102
|
type: LOCAL_DEV_UI_MESSAGE_SEND_TYPES.UPDATE_PROJECT_DATA,
|
|
77
103
|
data: {
|
|
78
|
-
projectName: this.localDevProcess.
|
|
79
|
-
projectId: this.localDevProcess.
|
|
104
|
+
projectName: this.localDevProcess.projectData.name,
|
|
105
|
+
projectId: this.localDevProcess.projectData.id,
|
|
106
|
+
latestBuild: this.localDevProcess.projectData.latestBuild,
|
|
107
|
+
deployedBuild: this.localDevProcess.projectData.deployedBuild,
|
|
80
108
|
targetProjectAccountId: this.localDevProcess.targetProjectAccountId,
|
|
81
109
|
targetTestingAccountId: this.localDevProcess.targetTestingAccountId,
|
|
82
110
|
},
|
|
@@ -135,10 +163,11 @@ class LocalDevWebsocketServer {
|
|
|
135
163
|
this.log(lib.LocalDevWebsocketServer.logs.startup(port));
|
|
136
164
|
this.server.on('connection', (ws, req) => {
|
|
137
165
|
const origin = req.headers.origin;
|
|
138
|
-
if (!origin || !
|
|
166
|
+
if (!origin || !ALLOWED_ORIGIN_REGEX.test(origin)) {
|
|
139
167
|
ws.close(1008, lib.LocalDevWebsocketServer.errors.originNotAllowed(origin));
|
|
140
168
|
return;
|
|
141
169
|
}
|
|
170
|
+
this.sendCliMetadata(ws);
|
|
142
171
|
this.sendProjectData(ws);
|
|
143
172
|
this.setupMessageHandlers(ws);
|
|
144
173
|
this.setupStateListeners(ws);
|
|
@@ -10,3 +10,4 @@ export declare function compareLocalProjectToDeployed(projectConfig: ProjectConf
|
|
|
10
10
|
export declare function isDeployedProjectUpToDateWithLocal(projectConfig: ProjectConfig, accountId: number, deployedBuildId: number, localProjectNodes: {
|
|
11
11
|
[key: string]: IntermediateRepresentationNodeLocalDev;
|
|
12
12
|
}, profile?: string): Promise<boolean>;
|
|
13
|
+
export declare function checkAndInstallDependencies(): Promise<void>;
|
|
@@ -18,8 +18,9 @@ import SpinniesManager from '../../../ui/SpinniesManager.js';
|
|
|
18
18
|
import { EXIT_CODES } from '../../../enums/exitCodes.js';
|
|
19
19
|
import { handleProjectUpload } from '../../upload.js';
|
|
20
20
|
import { pollProjectBuildAndDeploy } from '../../pollProjectBuildAndDeploy.js';
|
|
21
|
-
import { logError } from '../../../errorHandlers/index.js';
|
|
21
|
+
import { debugError, logError } from '../../../errorHandlers/index.js';
|
|
22
22
|
import { ApiErrorContext } from '../../../errorHandlers/index.js';
|
|
23
|
+
import { getProjectPackageJsonLocations, hasMissingPackages, installPackages, } from '../../../dependencyManagement.js';
|
|
23
24
|
// Prompt the user to create a new project if one doesn't exist on their target account
|
|
24
25
|
export async function createNewProjectForLocalDev(projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) {
|
|
25
26
|
// Create the project without prompting if this is a newly created sandbox
|
|
@@ -163,6 +164,10 @@ export async function isDeployedProjectUpToDateWithLocal(projectConfig, accountI
|
|
|
163
164
|
}, { profile });
|
|
164
165
|
return isDeepEqual(localProjectNodes, deployedProjectNodes, ['localDev']);
|
|
165
166
|
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
debugError(err);
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
166
171
|
finally {
|
|
167
172
|
// Clean up temporary directory
|
|
168
173
|
if (tempDir && (await fs.pathExists(tempDir))) {
|
|
@@ -170,3 +175,39 @@ export async function isDeployedProjectUpToDateWithLocal(projectConfig, accountI
|
|
|
170
175
|
}
|
|
171
176
|
}
|
|
172
177
|
}
|
|
178
|
+
export async function checkAndInstallDependencies() {
|
|
179
|
+
SpinniesManager.init();
|
|
180
|
+
uiLogger.log('');
|
|
181
|
+
SpinniesManager.add('checkingDependencies', {
|
|
182
|
+
text: lib.localDevHelpers.project.checkAndInstallDependencies
|
|
183
|
+
.checkingDependencies,
|
|
184
|
+
});
|
|
185
|
+
try {
|
|
186
|
+
const installLocations = await getProjectPackageJsonLocations();
|
|
187
|
+
const locationsToInstall = [];
|
|
188
|
+
for (const location of installLocations) {
|
|
189
|
+
if (await hasMissingPackages(location)) {
|
|
190
|
+
locationsToInstall.push(location);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (locationsToInstall.length > 0) {
|
|
194
|
+
SpinniesManager.remove('checkingDependencies');
|
|
195
|
+
await installPackages({ installLocations: locationsToInstall });
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
SpinniesManager.succeed('checkingDependencies', {
|
|
199
|
+
text: lib.localDevHelpers.project.checkAndInstallDependencies
|
|
200
|
+
.dependenciesUpToDate,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
uiLogger.log('');
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
logError(e);
|
|
207
|
+
SpinniesManager.fail('checkingDependencies', {
|
|
208
|
+
text: lib.localDevHelpers.project.checkAndInstallDependencies
|
|
209
|
+
.dependenciesFailure,
|
|
210
|
+
});
|
|
211
|
+
process.exit(EXIT_CODES.ERROR);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LocalDevDeployWebsocketMessage, LocalDevWebsocketMessage } from '../../../types/LocalDev.js';
|
|
2
|
+
export declare function isUploadWebsocketMessage(message: LocalDevWebsocketMessage): boolean;
|
|
3
|
+
export declare function isDeployWebsocketMessage(message: LocalDevWebsocketMessage): message is LocalDevDeployWebsocketMessage;
|
|
4
|
+
export declare function isViewedWelcomeScreenWebsocketMessage(message: LocalDevWebsocketMessage): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES } from '../../constants.js';
|
|
2
|
+
export function isUploadWebsocketMessage(message) {
|
|
3
|
+
return message.type === LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES.UPLOAD;
|
|
4
|
+
}
|
|
5
|
+
export function isDeployWebsocketMessage(message) {
|
|
6
|
+
return message.type === LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES.DEPLOY;
|
|
7
|
+
}
|
|
8
|
+
export function isViewedWelcomeScreenWebsocketMessage(message) {
|
|
9
|
+
return (message.type === LOCAL_DEV_UI_MESSAGE_RECEIVE_TYPES.VIEWED_WELCOME_SCREEN);
|
|
10
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function
|
|
1
|
+
export declare function isV2Project(platformVersion?: string | null): boolean;
|
|
@@ -278,10 +278,10 @@ export async function displayWarnLogs(accountId, projectName, taskId, isDeploy =
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
if (result && result.logs) {
|
|
281
|
-
const
|
|
282
|
-
|
|
283
|
-
uiLogger.warn(log
|
|
284
|
-
if (i <
|
|
281
|
+
const dedupedLogs = result.logs.reduce((acc, log) => acc.add(log.message), new Set());
|
|
282
|
+
Array.from(dedupedLogs).forEach((log, i) => {
|
|
283
|
+
uiLogger.warn(log);
|
|
284
|
+
if (i < dedupedLogs.size - 1) {
|
|
285
285
|
uiLogger.log('');
|
|
286
286
|
}
|
|
287
287
|
});
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { walk } from '@hubspot/local-dev-lib/fs';
|
|
4
|
-
import {
|
|
4
|
+
import { uiLogger } from '../ui/logger.js';
|
|
5
5
|
import { logError } from '../errorHandlers/index.js';
|
|
6
6
|
import { ComponentTypes, } from '../../types/Projects.js';
|
|
7
|
-
import { IR_COMPONENT_TYPES } from '../constants.js';
|
|
7
|
+
import { IR_COMPONENT_TYPES, LEGACY_PRIVATE_APP_FILE, LEGACY_PUBLIC_APP_FILE, THEME_FILE, } from '../constants.js';
|
|
8
8
|
export const CONFIG_FILES = {
|
|
9
|
-
[ComponentTypes.PrivateApp]:
|
|
10
|
-
[ComponentTypes.PublicApp]:
|
|
11
|
-
[ComponentTypes.HublTheme]:
|
|
9
|
+
[ComponentTypes.PrivateApp]: LEGACY_PRIVATE_APP_FILE,
|
|
10
|
+
[ComponentTypes.PublicApp]: LEGACY_PUBLIC_APP_FILE,
|
|
11
|
+
[ComponentTypes.HublTheme]: THEME_FILE,
|
|
12
12
|
};
|
|
13
13
|
export function getComponentTypeFromConfigFile(configFile) {
|
|
14
14
|
let key;
|
|
@@ -27,7 +27,7 @@ export function loadConfigFile(configPath) {
|
|
|
27
27
|
return parsedConfig;
|
|
28
28
|
}
|
|
29
29
|
catch (e) {
|
|
30
|
-
|
|
30
|
+
uiLogger.debug(e);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
return null;
|
package/lib/projects/upload.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ type HandleProjectUploadArg<T> = {
|
|
|
18
18
|
profile?: string;
|
|
19
19
|
};
|
|
20
20
|
export declare function handleProjectUpload<T>({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage, forceCreate, isUploadCommand, sendIR, skipValidation, }: HandleProjectUploadArg<T>): Promise<ProjectUploadResult<T>>;
|
|
21
|
-
export declare function validateSourceDirectory(srcDir: string, projectConfig: ProjectConfig): void
|
|
21
|
+
export declare function validateSourceDirectory(srcDir: string, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
|
|
22
22
|
export declare function validateNoHSMetaMismatch(srcDir: string, projectConfig: ProjectConfig): Promise<void>;
|
|
23
23
|
export declare function handleTranslate(projectDir: string, projectConfig: ProjectConfig, accountId: number, skipValidation: boolean, profile: string | undefined): Promise<unknown>;
|
|
24
24
|
export {};
|
package/lib/projects/upload.js
CHANGED
|
@@ -12,9 +12,11 @@ import util from 'node:util';
|
|
|
12
12
|
import { lib } from '../../lang/en.js';
|
|
13
13
|
import { ensureProjectExists } from './ensureProjectExists.js';
|
|
14
14
|
import { uiLogger } from '../ui/logger.js';
|
|
15
|
-
import {
|
|
15
|
+
import { isV2Project } from './platformVersion.js';
|
|
16
16
|
import { EXIT_CODES } from '../enums/exitCodes.js';
|
|
17
17
|
import ProjectValidationError from '../errors/ProjectValidationError.js';
|
|
18
|
+
import { walk } from '@hubspot/local-dev-lib/fs';
|
|
19
|
+
import { LEGACY_CONFIG_FILES } from '../constants.js';
|
|
18
20
|
async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
|
|
19
21
|
SpinniesManager.init({});
|
|
20
22
|
const accountIdentifier = uiAccountDescription(accountId) || `${accountId}`;
|
|
@@ -45,7 +47,7 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
|
|
|
45
47
|
export async function handleProjectUpload({ accountId, projectConfig, projectDir, callbackFunc, profile, uploadMessage = '', forceCreate = false, isUploadCommand = false, sendIR = false, skipValidation = false, }) {
|
|
46
48
|
const srcDir = path.resolve(projectDir, projectConfig.srcDir);
|
|
47
49
|
try {
|
|
48
|
-
validateSourceDirectory(srcDir, projectConfig);
|
|
50
|
+
await validateSourceDirectory(srcDir, projectConfig, projectDir);
|
|
49
51
|
}
|
|
50
52
|
catch (e) {
|
|
51
53
|
logError(e);
|
|
@@ -70,8 +72,7 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
70
72
|
intermediateRepresentation = await handleTranslate(projectDir, projectConfig, accountId, skipValidation, profile);
|
|
71
73
|
}
|
|
72
74
|
catch (e) {
|
|
73
|
-
|
|
74
|
-
process.exit(EXIT_CODES.ERROR);
|
|
75
|
+
resolve({ uploadError: e });
|
|
75
76
|
}
|
|
76
77
|
}
|
|
77
78
|
await ensureProjectExists(accountId, projectConfig.name, {
|
|
@@ -105,15 +106,23 @@ export async function handleProjectUpload({ accountId, projectConfig, projectDir
|
|
|
105
106
|
archive.finalize();
|
|
106
107
|
return result;
|
|
107
108
|
}
|
|
108
|
-
export function validateSourceDirectory(srcDir, projectConfig) {
|
|
109
|
-
const
|
|
110
|
-
if (!
|
|
109
|
+
export async function validateSourceDirectory(srcDir, projectConfig, projectDir) {
|
|
110
|
+
const projectFilePaths = await walk(srcDir, ['node_modules']);
|
|
111
|
+
if (!projectFilePaths || projectFilePaths.length === 0) {
|
|
111
112
|
throw new ProjectValidationError(lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
|
|
112
113
|
}
|
|
114
|
+
if (isV2Project(projectConfig.platformVersion)) {
|
|
115
|
+
projectFilePaths.forEach(filePath => {
|
|
116
|
+
const filename = path.basename(filePath);
|
|
117
|
+
if (LEGACY_CONFIG_FILES.includes(filename)) {
|
|
118
|
+
uiLogger.warn(lib.projectUpload.handleProjectUpload.legacyFileDetected(path.relative(projectDir, filePath), projectConfig.platformVersion));
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
113
122
|
}
|
|
114
123
|
export async function validateNoHSMetaMismatch(srcDir, projectConfig) {
|
|
115
124
|
const hasHsMetaFiles = await projectContainsHsMetaFiles(srcDir);
|
|
116
|
-
if (!
|
|
125
|
+
if (!isV2Project(projectConfig.platformVersion) && hasHsMetaFiles) {
|
|
117
126
|
throw new ProjectValidationError(lib.projectUpload.wrongPlatformVersionMetaFiles);
|
|
118
127
|
}
|
|
119
128
|
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
import { accountNameExistsInConfig } from '@hubspot/local-dev-lib/config';
|
|
2
2
|
import { promptUser } from './promptUtils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { lib } from '../../lang/en.js';
|
|
4
4
|
import { HUBSPOT_ACCOUNT_TYPES } from '@hubspot/local-dev-lib/constants/config';
|
|
5
5
|
export function getCliAccountNamePromptConfig(defaultName) {
|
|
6
6
|
return {
|
|
7
7
|
name: 'name',
|
|
8
|
-
message:
|
|
8
|
+
message: lib.prompts.accountNamePrompt.enterAccountName,
|
|
9
9
|
default: defaultName,
|
|
10
10
|
validate(val) {
|
|
11
11
|
if (typeof val !== 'string') {
|
|
12
|
-
return
|
|
12
|
+
return lib.prompts.accountNamePrompt.errors.invalidName;
|
|
13
13
|
}
|
|
14
14
|
else if (!val.length) {
|
|
15
|
-
return
|
|
15
|
+
return lib.prompts.accountNamePrompt.errors.nameRequired;
|
|
16
16
|
}
|
|
17
17
|
else if (val.indexOf(' ') >= 0) {
|
|
18
|
-
return
|
|
18
|
+
return lib.prompts.accountNamePrompt.errors.spacesInName;
|
|
19
19
|
}
|
|
20
20
|
return accountNameExistsInConfig(val)
|
|
21
|
-
?
|
|
22
|
-
name: val,
|
|
23
|
-
})
|
|
21
|
+
? lib.prompts.accountNamePrompt.errors.accountNameExists(val)
|
|
24
22
|
: true;
|
|
25
23
|
},
|
|
26
24
|
};
|
|
@@ -37,14 +35,13 @@ export function hubspotAccountNamePrompt({ accountType, currentPortalCount = 0,
|
|
|
37
35
|
let defaultName;
|
|
38
36
|
if (isSandbox) {
|
|
39
37
|
promptMessageString = isDevelopmentSandbox
|
|
40
|
-
?
|
|
41
|
-
:
|
|
38
|
+
? lib.prompts.accountNamePrompt.enterDevelopmentSandboxName
|
|
39
|
+
: lib.prompts.accountNamePrompt.enterStandardSandboxName;
|
|
42
40
|
}
|
|
43
41
|
else if (isDeveloperTestAccount) {
|
|
44
|
-
promptMessageString =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
});
|
|
42
|
+
promptMessageString =
|
|
43
|
+
lib.prompts.accountNamePrompt.enterDeveloperTestAccountName;
|
|
44
|
+
defaultName = lib.prompts.accountNamePrompt.developerTestAccountDefaultName(currentPortalCount + 1);
|
|
48
45
|
}
|
|
49
46
|
return promptUser([
|
|
50
47
|
{
|
|
@@ -52,15 +49,13 @@ export function hubspotAccountNamePrompt({ accountType, currentPortalCount = 0,
|
|
|
52
49
|
message: promptMessageString,
|
|
53
50
|
validate(val) {
|
|
54
51
|
if (typeof val !== 'string') {
|
|
55
|
-
return
|
|
52
|
+
return lib.prompts.accountNamePrompt.errors.invalidName;
|
|
56
53
|
}
|
|
57
54
|
else if (!val.trim().length) {
|
|
58
|
-
return
|
|
55
|
+
return lib.prompts.accountNamePrompt.errors.nameRequired;
|
|
59
56
|
}
|
|
60
57
|
return accountNameExistsInConfig(val)
|
|
61
|
-
?
|
|
62
|
-
name: val,
|
|
63
|
-
})
|
|
58
|
+
? lib.prompts.accountNamePrompt.errors.accountNameExists(val)
|
|
64
59
|
: true;
|
|
65
60
|
},
|
|
66
61
|
default: defaultName,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getConfigDefaultAccount, getConfigAccounts, } from '@hubspot/local-dev-lib/config';
|
|
2
2
|
import { getAccountIdentifier } from '@hubspot/local-dev-lib/config/getAccountIdentifier';
|
|
3
3
|
import { promptUser } from './promptUtils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { commands } from '../../lang/en.js';
|
|
5
5
|
import { uiAccountDescription } from '../ui/index.js';
|
|
6
6
|
function mapAccountChoices(portals) {
|
|
7
7
|
return (portals?.map(p => ({
|
|
@@ -17,7 +17,7 @@ export async function selectAccountFromConfig(prompt = '') {
|
|
|
17
17
|
type: 'list',
|
|
18
18
|
name: 'default',
|
|
19
19
|
pageSize: 20,
|
|
20
|
-
message: prompt ||
|
|
20
|
+
message: prompt || commands.account.subcommands.use.promptMessage,
|
|
21
21
|
choices: mapAccountChoices(accountsList),
|
|
22
22
|
default: defaultAccount ?? undefined,
|
|
23
23
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import { promptUser } from './promptUtils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { lib } from '../../lang/en.js';
|
|
5
5
|
import { escapeRegExp } from '@hubspot/local-dev-lib/escapeRegExp';
|
|
6
6
|
const FIELDS_FILES = ['fields.json', 'fields.js', 'fields.cjs', 'fields.mjs'];
|
|
7
7
|
export async function fieldsJsPrompt(filePath, projectDir, skipFiles = []) {
|
|
@@ -26,7 +26,7 @@ export async function fieldsJsPrompt(filePath, projectDir, skipFiles = []) {
|
|
|
26
26
|
}));
|
|
27
27
|
const promptVal = await promptUser([
|
|
28
28
|
{
|
|
29
|
-
message:
|
|
29
|
+
message: lib.prompts.uploadPrompt.fieldsPrompt(fileDir),
|
|
30
30
|
type: 'list',
|
|
31
31
|
name: 'filePathChoice',
|
|
32
32
|
choices: selection,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { promptUser } from './promptUtils.js';
|
|
2
|
-
import {
|
|
2
|
+
import { lib } from '../../lang/en.js';
|
|
3
3
|
function getSampleTypesPrompt(choices) {
|
|
4
4
|
return {
|
|
5
5
|
type: 'rawlist',
|
|
6
6
|
name: 'sampleType',
|
|
7
|
-
message:
|
|
7
|
+
message: lib.prompts.createApiSamplePrompt.selectApiSampleApp,
|
|
8
8
|
choices: choices.map(choice => ({
|
|
9
9
|
name: `${choice.name} - ${choice.description}`,
|
|
10
10
|
value: choice.id,
|
|
@@ -15,7 +15,7 @@ function getSampleTypesPrompt(choices) {
|
|
|
15
15
|
resolve(true);
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
|
-
reject(
|
|
18
|
+
reject(lib.prompts.createApiSamplePrompt.errors.apiSampleAppRequired);
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
},
|
|
@@ -25,7 +25,7 @@ function getLanguagesPrompt(choices) {
|
|
|
25
25
|
return {
|
|
26
26
|
type: 'rawlist',
|
|
27
27
|
name: 'sampleLanguage',
|
|
28
|
-
message:
|
|
28
|
+
message: lib.prompts.createApiSamplePrompt.selectLanguage,
|
|
29
29
|
choices: choices.map(choice => ({
|
|
30
30
|
name: choice,
|
|
31
31
|
value: choice,
|
|
@@ -35,7 +35,7 @@ function getLanguagesPrompt(choices) {
|
|
|
35
35
|
if (input && input.length > 0) {
|
|
36
36
|
resolve(true);
|
|
37
37
|
}
|
|
38
|
-
reject(
|
|
38
|
+
reject(lib.prompts.createApiSamplePrompt.errors.languageRequired);
|
|
39
39
|
});
|
|
40
40
|
},
|
|
41
41
|
};
|
|
@@ -94,7 +94,16 @@ export async function createDeveloperTestAccountConfigPrompt(args = {}, supportF
|
|
|
94
94
|
},
|
|
95
95
|
],
|
|
96
96
|
});
|
|
97
|
-
if (useDefaultAccountLevelsPromptResult.useDefaultAccountLevels === '
|
|
97
|
+
if (useDefaultAccountLevelsPromptResult.useDefaultAccountLevels === 'default') {
|
|
98
|
+
accountLevelsArray = [
|
|
99
|
+
{ hub: 'MARKETING', tier: AccountTiers.ENTERPRISE },
|
|
100
|
+
{ hub: 'OPS', tier: AccountTiers.ENTERPRISE },
|
|
101
|
+
{ hub: 'SERVICE', tier: AccountTiers.ENTERPRISE },
|
|
102
|
+
{ hub: 'SALES', tier: AccountTiers.ENTERPRISE },
|
|
103
|
+
{ hub: 'CONTENT', tier: AccountTiers.ENTERPRISE },
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
98
107
|
const accountLevelsPromptResult = await promptUser({
|
|
99
108
|
name: 'testAccountLevels',
|
|
100
109
|
message: lib.prompts.createDeveloperTestAccountConfigPrompt.tiersPrompt,
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import { promptUser } from './promptUtils.js';
|
|
2
|
-
import {
|
|
2
|
+
import { lib } from '../../lang/en.js';
|
|
3
3
|
const FUNCTIONS_FOLDER_PROMPT = {
|
|
4
4
|
name: 'functionsFolder',
|
|
5
|
-
message:
|
|
5
|
+
message: lib.prompts.createFunctionPrompt.enterFolder,
|
|
6
6
|
validate(val) {
|
|
7
7
|
if (typeof val !== 'string') {
|
|
8
|
-
return
|
|
8
|
+
return lib.prompts.createFunctionPrompt.errors.invalid;
|
|
9
9
|
}
|
|
10
10
|
else if (!val.length) {
|
|
11
|
-
return
|
|
11
|
+
return lib.prompts.createFunctionPrompt.errors.blank;
|
|
12
12
|
}
|
|
13
13
|
else if (val.indexOf(' ') >= 0) {
|
|
14
|
-
return
|
|
14
|
+
return lib.prompts.createFunctionPrompt.errors.space;
|
|
15
15
|
}
|
|
16
16
|
return true;
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
19
|
const FUNCTION_FILENAME_PROMPT = {
|
|
20
20
|
name: 'filename',
|
|
21
|
-
message:
|
|
21
|
+
message: lib.prompts.createFunctionPrompt.enterFilename,
|
|
22
22
|
validate(val) {
|
|
23
23
|
if (typeof val !== 'string') {
|
|
24
|
-
return
|
|
24
|
+
return lib.prompts.createFunctionPrompt.errors.invalid;
|
|
25
25
|
}
|
|
26
26
|
else if (!val.length) {
|
|
27
|
-
return
|
|
27
|
+
return lib.prompts.createFunctionPrompt.errors.blank;
|
|
28
28
|
}
|
|
29
29
|
else if (val.indexOf(' ') >= 0) {
|
|
30
|
-
return
|
|
30
|
+
return lib.prompts.createFunctionPrompt.errors.space;
|
|
31
31
|
}
|
|
32
32
|
return true;
|
|
33
33
|
},
|
|
@@ -35,22 +35,22 @@ const FUNCTION_FILENAME_PROMPT = {
|
|
|
35
35
|
const ENDPOINT_METHOD_PROMPT = {
|
|
36
36
|
type: 'list',
|
|
37
37
|
name: 'endpointMethod',
|
|
38
|
-
message:
|
|
38
|
+
message: lib.prompts.createFunctionPrompt.selectEndpointMethod,
|
|
39
39
|
default: 'GET',
|
|
40
40
|
choices: ['DELETE', 'GET', 'PATCH', 'POST', 'PUT'],
|
|
41
41
|
};
|
|
42
42
|
const ENDPOINT_PATH_PROMPT = {
|
|
43
43
|
name: 'endpointPath',
|
|
44
|
-
message:
|
|
44
|
+
message: lib.prompts.createFunctionPrompt.enterEndpointPath,
|
|
45
45
|
validate(val) {
|
|
46
46
|
if (typeof val !== 'string') {
|
|
47
|
-
return
|
|
47
|
+
return lib.prompts.createFunctionPrompt.errors.invalid;
|
|
48
48
|
}
|
|
49
49
|
else if (!val.length) {
|
|
50
|
-
return
|
|
50
|
+
return lib.prompts.createFunctionPrompt.errors.blank;
|
|
51
51
|
}
|
|
52
52
|
else if (val.indexOf(' ') >= 0) {
|
|
53
|
-
return
|
|
53
|
+
return lib.prompts.createFunctionPrompt.errors.space;
|
|
54
54
|
}
|
|
55
55
|
return true;
|
|
56
56
|
},
|