@hubspot/cli 7.4.4-experimental.0 → 7.4.5-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/api/migrate.d.ts +14 -4
- package/api/migrate.js +16 -2
- package/bin/cli.js +8 -183
- package/commands/account/auth.d.ts +10 -0
- package/commands/account/auth.js +188 -0
- package/commands/account/clean.js +38 -5
- package/commands/account/createOverride.d.ts +10 -0
- package/commands/account/createOverride.js +104 -0
- package/commands/account/info.js +38 -4
- package/commands/account/list.js +23 -5
- package/commands/account/remove.js +36 -2
- package/commands/account/removeOverride.d.ts +10 -0
- package/commands/account/removeOverride.js +76 -0
- package/commands/account/use.js +25 -3
- package/commands/account.js +7 -2
- package/commands/app/migrate.d.ts +4 -5
- package/commands/app/migrate.js +19 -8
- package/commands/auth.js +14 -11
- package/commands/cms/lighthouseScore.js +6 -2
- package/commands/cms.js +1 -2
- package/commands/completion.js +2 -3
- package/commands/config/migrate.d.ts +10 -0
- package/commands/config/migrate.js +84 -0
- package/commands/config/set.d.ts +10 -0
- package/commands/config/set.js +34 -29
- package/commands/config.d.ts +4 -1
- package/commands/config.js +45 -11
- package/commands/create/api-sample.js +3 -1
- package/commands/create/website-theme.js +1 -1
- package/commands/create.js +7 -8
- package/commands/customObject/schema/delete.js +4 -1
- package/commands/customObject/schema/fetch-all.js +2 -1
- package/commands/customObject/schema/fetch.js +2 -1
- package/commands/customObject.js +3 -4
- package/commands/doctor.js +5 -6
- package/commands/feedback.js +7 -8
- package/commands/fetch.js +6 -7
- package/commands/filemanager.js +1 -2
- package/commands/function.js +1 -2
- package/commands/hubdb/clear.js +5 -6
- package/commands/hubdb/create.js +7 -8
- package/commands/hubdb/delete.js +8 -7
- package/commands/hubdb/fetch.js +4 -5
- package/commands/hubdb.js +1 -2
- package/commands/init.js +18 -20
- package/commands/lint.js +3 -4
- package/commands/list.js +5 -6
- package/commands/logs.js +12 -13
- package/commands/module/marketplace-validate.js +5 -6
- package/commands/module.js +1 -3
- package/commands/mv.js +4 -5
- package/commands/open.js +4 -5
- package/commands/project/add.js +19 -15
- package/commands/project/cloneApp.d.ts +5 -1
- package/commands/project/cloneApp.js +25 -20
- package/commands/project/create.js +19 -15
- package/commands/project/deploy.js +19 -17
- package/commands/project/dev/deprecatedFlow.js +32 -25
- package/commands/project/dev/index.js +15 -11
- package/commands/project/dev/unifiedFlow.js +10 -11
- package/commands/project/download.js +10 -11
- package/commands/project/installDeps.d.ts +9 -1
- package/commands/project/installDeps.js +46 -31
- package/commands/project/listBuilds.js +18 -14
- package/commands/project/logs.d.ts +13 -1
- package/commands/project/logs.js +72 -63
- package/commands/project/migrate.d.ts +11 -0
- package/commands/project/migrate.js +67 -0
- package/commands/project/migrateApp.d.ts +4 -4
- package/commands/project/migrateApp.js +7 -5
- package/commands/project/open.js +15 -8
- package/commands/project/upload.d.ts +12 -0
- package/commands/project/upload.js +69 -50
- package/commands/project/watch.js +25 -7
- package/commands/project.js +3 -2
- package/commands/remove.js +7 -5
- package/commands/sandbox/create.js +10 -11
- package/commands/sandbox/delete.js +18 -19
- package/commands/sandbox.js +1 -2
- package/commands/secret/addSecret.js +5 -6
- package/commands/secret/deleteSecret.js +12 -9
- package/commands/secret/listSecret.js +3 -4
- package/commands/secret/updateSecret.js +9 -8
- package/commands/secret.js +1 -2
- package/commands/theme/generate-selectors.js +5 -6
- package/commands/theme/marketplace-validate.js +5 -6
- package/commands/theme/preview.js +16 -16
- package/commands/theme.js +1 -2
- package/commands/upload.js +23 -24
- package/commands/watch.js +18 -19
- package/lang/en.d.ts +2797 -0
- package/lang/en.js +2652 -3300
- package/lang/en.lyaml +97 -43
- package/lib/accountTypes.d.ts +1 -0
- package/lib/accountTypes.js +12 -0
- package/lib/app/migrate.d.ts +10 -4
- package/lib/app/migrate.js +188 -92
- package/lib/app/migrate_legacy.d.ts +2 -2
- package/lib/app/migrate_legacy.js +10 -7
- package/lib/buildAccount.d.ts +1 -2
- package/lib/buildAccount.js +7 -5
- package/lib/commonOpts.d.ts +2 -3
- package/lib/commonOpts.js +12 -2
- package/lib/configMigrate.d.ts +2 -0
- package/lib/configMigrate.js +104 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +5 -1
- package/lib/dependencyManagement.js +2 -2
- package/lib/doctor/Diagnosis.d.ts +1 -2
- package/lib/doctor/Diagnosis.js +10 -6
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
- package/lib/doctor/Doctor.d.ts +1 -0
- package/lib/doctor/Doctor.js +18 -0
- package/lib/hasFeature.d.ts +3 -1
- package/lib/middleware/__test__/configMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/configMiddleware.test.js +194 -0
- package/lib/middleware/__test__/gitMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/gitMiddleware.test.js +76 -0
- package/lib/middleware/__test__/notificationsMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/notificationsMiddleware.test.js +10 -0
- package/lib/middleware/__test__/requestMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/requestMiddleware.test.js +20 -0
- package/lib/middleware/__test__/utils.test.d.ts +1 -0
- package/lib/middleware/__test__/utils.test.js +53 -0
- package/lib/middleware/__test__/yargsChecksMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +81 -0
- package/lib/middleware/configMiddleware.d.ts +13 -0
- package/lib/middleware/configMiddleware.js +116 -0
- package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
- package/lib/middleware/fireAlarmMiddleware.js +137 -0
- package/lib/middleware/gitMiddleware.d.ts +2 -0
- package/lib/middleware/gitMiddleware.js +14 -0
- package/lib/middleware/notificationsMiddleware.d.ts +1 -0
- package/lib/middleware/notificationsMiddleware.js +38 -0
- package/lib/middleware/requestMiddleware.d.ts +1 -0
- package/lib/middleware/requestMiddleware.js +11 -0
- package/lib/middleware/utils.d.ts +8 -0
- package/lib/middleware/utils.js +17 -0
- package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
- package/lib/middleware/yargsChecksMiddleware.js +24 -0
- package/lib/projects/ProjectLogsManager.d.ts +1 -1
- package/lib/projects/ProjectLogsManager.js +15 -20
- package/lib/projects/buildAndDeploy.js +15 -26
- package/lib/projects/config.d.ts +9 -0
- package/lib/projects/config.js +79 -0
- package/lib/projects/create.js +4 -5
- package/lib/projects/ensureProjectExists.d.ts +11 -0
- package/lib/projects/ensureProjectExists.js +97 -0
- package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
- package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +5 -6
- package/lib/{DevServerManagerV2.d.ts → projects/localDev/DevServerManagerV2.d.ts} +1 -1
- package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +3 -4
- package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
- package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +42 -76
- package/lib/{LocalDevManagerV2.d.ts → projects/localDev/LocalDevManagerV2.d.ts} +2 -2
- package/lib/{LocalDevManagerV2.js → projects/localDev/LocalDevManagerV2.js} +37 -70
- package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +4 -3
- package/lib/{localDev.js → projects/localDev/helpers.js} +72 -99
- package/lib/projects/ui.d.ts +1 -0
- package/lib/projects/ui.js +15 -0
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +9 -30
- package/lib/projects/urls.d.ts +1 -0
- package/lib/projects/urls.js +6 -0
- package/lib/projects/watch.js +18 -15
- package/lib/prompts/projectNamePrompt.js +2 -2
- package/lib/prompts/promptUtils.d.ts +1 -1
- package/lib/ui/SpinniesManager.d.ts +1 -1
- package/lib/ui/index.d.ts +1 -0
- package/lib/ui/index.js +5 -0
- package/lib/ui/spinniesUtils.d.ts +5 -5
- package/package.json +7 -6
- package/types/Yargs.d.ts +0 -10
- package/lib/projects/index.d.ts +0 -20
- package/lib/projects/index.js +0 -194
|
@@ -14,6 +14,7 @@ exports.useExistingDevTestAccount = useExistingDevTestAccount;
|
|
|
14
14
|
exports.createNewProjectForLocalDev = createNewProjectForLocalDev;
|
|
15
15
|
exports.createInitialBuildForNewProject = createInitialBuildForNewProject;
|
|
16
16
|
exports.getAccountHomeUrl = getAccountHomeUrl;
|
|
17
|
+
exports.hasSandboxes = hasSandboxes;
|
|
17
18
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
18
19
|
const config_1 = require("@hubspot/local-dev-lib/constants/config");
|
|
19
20
|
const index_1 = require("@hubspot/local-dev-lib/errors/index");
|
|
@@ -23,70 +24,58 @@ const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
|
23
24
|
const environments_1 = require("@hubspot/local-dev-lib/constants/environments");
|
|
24
25
|
const auth_1 = require("@hubspot/local-dev-lib/constants/auth");
|
|
25
26
|
const getAccountIdentifier_1 = require("@hubspot/local-dev-lib/config/getAccountIdentifier");
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const exitCodes_1 = require("
|
|
35
|
-
const usageTracking_1 = require("
|
|
36
|
-
const accountTypes_1 = require("
|
|
37
|
-
const upload_1 = require("
|
|
38
|
-
const buildAndDeploy_1 = require("
|
|
39
|
-
const constants_1 = require("
|
|
40
|
-
const index_2 = require("
|
|
41
|
-
const buildAccount_1 = require("
|
|
42
|
-
const accountNamePrompt_1 = require("
|
|
43
|
-
const
|
|
27
|
+
const sandboxHubs_1 = require("@hubspot/local-dev-lib/api/sandboxHubs");
|
|
28
|
+
const projectDevTargetAccountPrompt_1 = require("../../prompts/projectDevTargetAccountPrompt");
|
|
29
|
+
const promptUtils_1 = require("../../prompts/promptUtils");
|
|
30
|
+
const sandboxes_1 = require("../../sandboxes");
|
|
31
|
+
const sandboxSync_1 = require("../../sandboxSync");
|
|
32
|
+
const developerTestAccounts_1 = require("../../developerTestAccounts");
|
|
33
|
+
const ui_1 = require("../../ui");
|
|
34
|
+
const SpinniesManager_1 = __importDefault(require("../../ui/SpinniesManager"));
|
|
35
|
+
const exitCodes_1 = require("../../enums/exitCodes");
|
|
36
|
+
const usageTracking_1 = require("../../usageTracking");
|
|
37
|
+
const accountTypes_1 = require("../../accountTypes");
|
|
38
|
+
const upload_1 = require("../../projects/upload");
|
|
39
|
+
const buildAndDeploy_1 = require("../../projects/buildAndDeploy");
|
|
40
|
+
const constants_1 = require("../../constants");
|
|
41
|
+
const index_2 = require("../../errorHandlers/index");
|
|
42
|
+
const buildAccount_1 = require("../../buildAccount");
|
|
43
|
+
const accountNamePrompt_1 = require("../../prompts/accountNamePrompt");
|
|
44
|
+
const en_1 = require("../../../lang/en");
|
|
44
45
|
// If the user passed in the --account flag, confirm they want to use that account as
|
|
45
46
|
// their target account, otherwise exit
|
|
46
47
|
async function confirmDefaultAccountIsTarget(accountConfig) {
|
|
47
48
|
if (!accountConfig.name || !accountConfig.accountType) {
|
|
48
|
-
logger_1.logger.error(
|
|
49
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
50
|
-
}));
|
|
49
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget.configError);
|
|
51
50
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
52
51
|
}
|
|
53
52
|
logger_1.logger.log();
|
|
54
53
|
const useDefaultAccount = await (0, projectDevTargetAccountPrompt_1.confirmDefaultAccountPrompt)(accountConfig.name, config_1.HUBSPOT_ACCOUNT_TYPE_STRINGS[accountConfig.accountType]);
|
|
55
54
|
if (!useDefaultAccount) {
|
|
56
|
-
logger_1.logger.log(
|
|
57
|
-
|
|
58
|
-
devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
|
|
59
|
-
}));
|
|
55
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
|
|
56
|
+
.declineDefaultAccountExplanation);
|
|
60
57
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
61
58
|
}
|
|
62
59
|
}
|
|
63
60
|
// Confirm the default account is supported for the type of apps being developed
|
|
64
|
-
function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
|
|
61
|
+
async function checkIfDefaultAccountIsSupported(accountConfig, hasPublicApps) {
|
|
62
|
+
const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
|
|
65
63
|
if (hasPublicApps &&
|
|
66
64
|
!((0, accountTypes_1.isAppDeveloperAccount)(accountConfig) ||
|
|
67
|
-
(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
71
|
-
}));
|
|
65
|
+
(0, accountTypes_1.isDeveloperTestAccount)(accountConfig) ||
|
|
66
|
+
defaultAccountIsUnified)) {
|
|
67
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.publicApp);
|
|
72
68
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
73
69
|
}
|
|
74
70
|
else if (!hasPublicApps && (0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
|
|
75
|
-
logger_1.logger.error(
|
|
76
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
77
|
-
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
78
|
-
}));
|
|
71
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.checkIfDefaultAccountIsSupported.privateApp);
|
|
79
72
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
80
73
|
}
|
|
81
74
|
}
|
|
82
75
|
function checkIfParentAccountIsAuthed(accountConfig) {
|
|
83
76
|
if (!accountConfig.parentAccountId ||
|
|
84
77
|
!(0, config_2.getAccountConfig)(accountConfig.parentAccountId)) {
|
|
85
|
-
logger_1.logger.error((0,
|
|
86
|
-
accountId: accountConfig.parentAccountId || '',
|
|
87
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig)),
|
|
88
|
-
authCommand: (0, ui_1.uiCommandReference)(`hs auth --account=${accountConfig.parentAccountId}`),
|
|
89
|
-
}));
|
|
78
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.checkIfParentAccountIsAuthed.notAuthedError(accountConfig.parentAccountId || '', (0, ui_1.uiAccountDescription)((0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig))));
|
|
90
79
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
91
80
|
}
|
|
92
81
|
}
|
|
@@ -94,18 +83,13 @@ function checkIfParentAccountIsAuthed(accountConfig) {
|
|
|
94
83
|
function checkIfAccountFlagIsSupported(accountConfig, hasPublicApps) {
|
|
95
84
|
if (hasPublicApps) {
|
|
96
85
|
if (!(0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
|
|
97
|
-
logger_1.logger.error(
|
|
98
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
99
|
-
devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
|
|
100
|
-
}));
|
|
86
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPublicAppAccount);
|
|
101
87
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
102
88
|
}
|
|
103
89
|
checkIfParentAccountIsAuthed(accountConfig);
|
|
104
90
|
}
|
|
105
91
|
else if ((0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
|
|
106
|
-
logger_1.logger.error(
|
|
107
|
-
useCommand: (0, ui_1.uiCommandReference)('hs accounts use'),
|
|
108
|
-
}));
|
|
92
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.validateAccountOption.invalidPrivateAppAccount);
|
|
109
93
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
110
94
|
}
|
|
111
95
|
}
|
|
@@ -114,14 +98,15 @@ async function suggestRecommendedNestedAccount(accounts, accountConfig, hasPubli
|
|
|
114
98
|
logger_1.logger.log();
|
|
115
99
|
(0, ui_1.uiLine)();
|
|
116
100
|
if (hasPublicApps) {
|
|
117
|
-
logger_1.logger.log(
|
|
101
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.validateAccountOption
|
|
102
|
+
.publicAppNonDeveloperTestAccountWarning);
|
|
118
103
|
}
|
|
119
104
|
else {
|
|
120
|
-
logger_1.logger.log(
|
|
105
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.validateAccountOption.nonSandboxWarning);
|
|
121
106
|
}
|
|
122
107
|
(0, ui_1.uiLine)();
|
|
123
108
|
logger_1.logger.log();
|
|
124
|
-
const targetAccountPrompt =
|
|
109
|
+
const targetAccountPrompt = hasPublicApps
|
|
125
110
|
? projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt
|
|
126
111
|
: projectDevTargetAccountPrompt_1.selectSandboxTargetAccountPrompt;
|
|
127
112
|
return targetAccountPrompt(accounts, accountConfig);
|
|
@@ -133,15 +118,10 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
|
|
|
133
118
|
}
|
|
134
119
|
catch (err) {
|
|
135
120
|
if ((0, index_1.isMissingScopeError)(err)) {
|
|
136
|
-
logger_1.logger.error(
|
|
137
|
-
accountName: accountConfig.name || accountId,
|
|
138
|
-
}));
|
|
121
|
+
logger_1.logger.error(en_1.lib.sandbox.create.developer.failure.scopes.message);
|
|
139
122
|
const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
|
|
140
123
|
const url = `${websiteOrigin}/personal-access-key/${accountId}`;
|
|
141
|
-
logger_1.logger.info(
|
|
142
|
-
accountName: accountConfig.name || accountId,
|
|
143
|
-
url,
|
|
144
|
-
}));
|
|
124
|
+
logger_1.logger.info(en_1.lib.sandbox.create.developer.failure.scopes.instructions(accountConfig.name || accountId, url));
|
|
145
125
|
}
|
|
146
126
|
else {
|
|
147
127
|
(0, index_2.logError)(err);
|
|
@@ -157,7 +137,7 @@ async function createSandboxForLocalDev(accountId, accountConfig, env) {
|
|
|
157
137
|
const targetAccountId = result.sandbox.sandboxHubId;
|
|
158
138
|
const sandboxAccountConfig = (0, config_2.getAccountConfig)(result.sandbox.sandboxHubId);
|
|
159
139
|
if (!sandboxAccountConfig) {
|
|
160
|
-
logger_1.logger.error(
|
|
140
|
+
logger_1.logger.error(en_1.lib.sandbox.create.developer.failure.generic);
|
|
161
141
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
162
142
|
}
|
|
163
143
|
const syncTasks = await (0, sandboxes_1.getAvailableSyncTypes)(accountConfig, sandboxAccountConfig);
|
|
@@ -185,15 +165,10 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
|
|
|
185
165
|
}
|
|
186
166
|
catch (err) {
|
|
187
167
|
if ((0, index_1.isMissingScopeError)(err)) {
|
|
188
|
-
logger_1.logger.error(
|
|
189
|
-
accountName: accountConfig.name || accountId,
|
|
190
|
-
}));
|
|
168
|
+
logger_1.logger.error(en_1.lib.developerTestAccount.create.failure.scopes.message);
|
|
191
169
|
const websiteOrigin = (0, urls_1.getHubSpotWebsiteOrigin)(env);
|
|
192
170
|
const url = `${websiteOrigin}/personal-access-key/${accountId}`;
|
|
193
|
-
logger_1.logger.info(
|
|
194
|
-
accountName: accountConfig.name || accountId,
|
|
195
|
-
url,
|
|
196
|
-
}));
|
|
171
|
+
logger_1.logger.info(en_1.lib.developerTestAccount.create.failure.scopes.instructions(accountConfig.name || accountId, url));
|
|
197
172
|
}
|
|
198
173
|
else {
|
|
199
174
|
(0, index_2.logError)(err);
|
|
@@ -207,7 +182,7 @@ async function createDeveloperTestAccountForLocalDev(accountId, accountConfig, e
|
|
|
207
182
|
});
|
|
208
183
|
(0, usageTracking_1.trackCommandMetadataUsage)('developer-test-account-create', { step: 'project-dev' }, accountId);
|
|
209
184
|
const result = await (0, buildAccount_1.buildDeveloperTestAccount)(name, accountConfig, env, maxTestPortals);
|
|
210
|
-
return result
|
|
185
|
+
return result;
|
|
211
186
|
}
|
|
212
187
|
catch (err) {
|
|
213
188
|
(0, index_2.logError)(err);
|
|
@@ -219,75 +194,59 @@ async function useExistingDevTestAccount(env, account) {
|
|
|
219
194
|
const useExistingDevTestAcct = await (0, projectDevTargetAccountPrompt_1.confirmUseExistingDeveloperTestAccountPrompt)(account);
|
|
220
195
|
if (!useExistingDevTestAcct) {
|
|
221
196
|
logger_1.logger.log('');
|
|
222
|
-
logger_1.logger.log(
|
|
223
|
-
|
|
224
|
-
devCommand: (0, ui_1.uiCommandReference)('hs project dev'),
|
|
225
|
-
}));
|
|
197
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.confirmDefaultAccountIsTarget
|
|
198
|
+
.declineDefaultAccountExplanation);
|
|
226
199
|
logger_1.logger.log('');
|
|
227
200
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
228
201
|
}
|
|
229
202
|
const devTestAcctConfigName = await (0, buildAccount_1.saveAccountToConfig)(account.id, account.accountName, env);
|
|
230
|
-
logger_1.logger.success(
|
|
231
|
-
accountName: devTestAcctConfigName,
|
|
232
|
-
authType: auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name,
|
|
233
|
-
}));
|
|
203
|
+
logger_1.logger.success(en_1.lib.developerTestAccount.create.success.configFileUpdated(devTestAcctConfigName, auth_1.PERSONAL_ACCESS_KEY_AUTH_METHOD.name));
|
|
234
204
|
}
|
|
235
205
|
// Prompt the user to create a new project if one doesn't exist on their target account
|
|
236
206
|
async function createNewProjectForLocalDev(projectConfig, targetAccountId, shouldCreateWithoutConfirmation, hasPublicApps) {
|
|
237
207
|
// Create the project without prompting if this is a newly created sandbox
|
|
238
208
|
let shouldCreateProject = shouldCreateWithoutConfirmation;
|
|
239
209
|
if (!shouldCreateProject) {
|
|
240
|
-
const
|
|
241
|
-
?
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
210
|
+
const explanationLangFunction = hasPublicApps
|
|
211
|
+
? en_1.lib.localDevHelpers.createNewProjectForLocalDev
|
|
212
|
+
.publicAppProjectMustExistExplanation
|
|
213
|
+
: en_1.lib.localDevHelpers.createNewProjectForLocalDev
|
|
214
|
+
.projectMustExistExplanation;
|
|
215
|
+
const explanationString = explanationLangFunction((0, ui_1.uiAccountDescription)(targetAccountId), projectConfig.name);
|
|
246
216
|
logger_1.logger.log();
|
|
247
217
|
(0, ui_1.uiLine)();
|
|
248
218
|
logger_1.logger.log(explanationString);
|
|
249
219
|
(0, ui_1.uiLine)();
|
|
250
|
-
shouldCreateProject = await (0, promptUtils_1.confirmPrompt)((0,
|
|
251
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
252
|
-
projectName: projectConfig.name,
|
|
253
|
-
}));
|
|
220
|
+
shouldCreateProject = await (0, promptUtils_1.confirmPrompt)(en_1.lib.localDevHelpers.createNewProjectForLocalDev.createProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)));
|
|
254
221
|
}
|
|
255
222
|
if (shouldCreateProject) {
|
|
256
223
|
SpinniesManager_1.default.add('createProject', {
|
|
257
|
-
text: (0,
|
|
258
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
259
|
-
projectName: projectConfig.name,
|
|
260
|
-
}),
|
|
224
|
+
text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.creatingProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
|
|
261
225
|
});
|
|
262
226
|
try {
|
|
263
227
|
const { data: project } = await (0, projects_1.createProject)(targetAccountId, projectConfig.name);
|
|
264
228
|
SpinniesManager_1.default.succeed('createProject', {
|
|
265
|
-
text: (0,
|
|
266
|
-
accountIdentifier: (0, ui_1.uiAccountDescription)(targetAccountId),
|
|
267
|
-
projectName: projectConfig.name,
|
|
268
|
-
}),
|
|
229
|
+
text: en_1.lib.localDevHelpers.createNewProjectForLocalDev.createdProject(projectConfig.name, (0, ui_1.uiAccountDescription)(targetAccountId)),
|
|
269
230
|
succeedColor: 'white',
|
|
270
231
|
});
|
|
271
232
|
return project;
|
|
272
233
|
}
|
|
273
234
|
catch (err) {
|
|
274
235
|
SpinniesManager_1.default.fail('createProject');
|
|
275
|
-
logger_1.logger.log(
|
|
236
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.failedToCreateProject);
|
|
276
237
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
277
238
|
}
|
|
278
239
|
}
|
|
279
240
|
else {
|
|
280
241
|
// We cannot continue if the project does not exist in the target account
|
|
281
242
|
logger_1.logger.log();
|
|
282
|
-
logger_1.logger.log(
|
|
243
|
+
logger_1.logger.log(en_1.lib.localDevHelpers.createNewProjectForLocalDev.choseNotToCreateProject);
|
|
283
244
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
284
245
|
}
|
|
285
246
|
}
|
|
286
247
|
function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
|
|
287
248
|
if (!buildId) {
|
|
288
|
-
logger_1.logger.error(
|
|
289
|
-
uploadCommand: (0, ui_1.uiCommandReference)('hs project upload'),
|
|
290
|
-
}));
|
|
249
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.genericError);
|
|
291
250
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
292
251
|
}
|
|
293
252
|
return (0, buildAndDeploy_1.pollProjectBuildAndDeploy)(accountId, projectConfig, tempFile, buildId, true);
|
|
@@ -295,13 +254,13 @@ function projectUploadCallback(accountId, projectConfig, tempFile, buildId) {
|
|
|
295
254
|
// Create an initial build if the project was newly created in the account
|
|
296
255
|
// Return the newly deployed build
|
|
297
256
|
async function createInitialBuildForNewProject(projectConfig, projectDir, targetAccountId, sendIr) {
|
|
298
|
-
const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(targetAccountId, projectConfig, projectDir, projectUploadCallback,
|
|
257
|
+
const { result: initialUploadResult, uploadError } = await (0, upload_1.handleProjectUpload)(targetAccountId, projectConfig, projectDir, projectUploadCallback, en_1.lib.localDevHelpers.createInitialBuildForNewProject.initialUploadMessage, sendIr);
|
|
299
258
|
if (uploadError) {
|
|
300
259
|
if ((0, index_1.isSpecifiedError)(uploadError, {
|
|
301
260
|
subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED,
|
|
302
261
|
})) {
|
|
303
262
|
logger_1.logger.log();
|
|
304
|
-
logger_1.logger.error(
|
|
263
|
+
logger_1.logger.error(en_1.lib.localDevHelpers.createInitialBuildForNewProject.projectLockedError);
|
|
305
264
|
logger_1.logger.log();
|
|
306
265
|
}
|
|
307
266
|
else {
|
|
@@ -336,3 +295,17 @@ function getAccountHomeUrl(accountId) {
|
|
|
336
295
|
const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_2.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
|
|
337
296
|
return `${baseUrl}/home?portalId=${accountId}`;
|
|
338
297
|
}
|
|
298
|
+
async function hasSandboxes(account) {
|
|
299
|
+
const accountId = (0, getAccountIdentifier_1.getAccountIdentifier)(account);
|
|
300
|
+
if (!accountId) {
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
const { data: { usage }, } = await (0, sandboxHubs_1.getSandboxUsageLimits)(accountId);
|
|
305
|
+
return usage.STANDARD.limit > 0 || usage.DEVELOPER.limit > 0;
|
|
306
|
+
}
|
|
307
|
+
catch (e) {
|
|
308
|
+
(0, index_2.debugError)(e);
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function logFeedbackMessage(buildId: number): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logFeedbackMessage = logFeedbackMessage;
|
|
4
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const ui_1 = require("../ui");
|
|
7
|
+
const en_1 = require("../../lang/en");
|
|
8
|
+
function logFeedbackMessage(buildId) {
|
|
9
|
+
if (buildId > 0 && buildId % constants_1.FEEDBACK_INTERVAL === 0) {
|
|
10
|
+
(0, ui_1.uiLine)();
|
|
11
|
+
logger_1.logger.log(en_1.lib.projects.logFeedbackMessage.feedbackHeader);
|
|
12
|
+
(0, ui_1.uiLine)();
|
|
13
|
+
logger_1.logger.log(en_1.lib.projects.logFeedbackMessage.feedbackMessage);
|
|
14
|
+
}
|
|
15
|
+
}
|
package/lib/projects/upload.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FileResult } from 'tmp';
|
|
2
2
|
import { ProjectConfig } from '../../types/Projects';
|
|
3
|
-
type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId
|
|
3
|
+
type ProjectUploadCallbackFunction<T> = (accountId: number, projectConfig: ProjectConfig, tempFile: FileResult, buildId: number) => Promise<T>;
|
|
4
4
|
type ProjectUploadResult<T> = {
|
|
5
5
|
result?: T;
|
|
6
6
|
uploadError?: unknown;
|
package/lib/projects/upload.js
CHANGED
|
@@ -13,20 +13,16 @@ const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
|
|
|
13
13
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
14
14
|
const SpinniesManager_1 = __importDefault(require("../ui/SpinniesManager"));
|
|
15
15
|
const ui_1 = require("../ui");
|
|
16
|
-
const lang_1 = require("../lang");
|
|
17
16
|
const exitCodes_1 = require("../enums/exitCodes");
|
|
18
17
|
const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
|
|
19
18
|
const errorHandlers_1 = require("../errorHandlers");
|
|
20
19
|
const node_util_1 = __importDefault(require("node:util"));
|
|
21
|
-
const
|
|
20
|
+
const en_1 = require("../../lang/en");
|
|
22
21
|
async function uploadProjectFiles(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation) {
|
|
23
22
|
SpinniesManager_1.default.init({});
|
|
24
23
|
const accountIdentifier = (0, ui_1.uiAccountDescription)(accountId);
|
|
25
24
|
SpinniesManager_1.default.add('upload', {
|
|
26
|
-
text:
|
|
27
|
-
accountIdentifier,
|
|
28
|
-
projectName,
|
|
29
|
-
}),
|
|
25
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.add(projectName, accountIdentifier),
|
|
30
26
|
succeedColor: 'white',
|
|
31
27
|
});
|
|
32
28
|
let buildId;
|
|
@@ -35,24 +31,15 @@ async function uploadProjectFiles(accountId, projectName, filePath, uploadMessag
|
|
|
35
31
|
const { data: upload } = await (0, projects_1.uploadProject)(accountId, projectName, filePath, uploadMessage, platformVersion, intermediateRepresentation);
|
|
36
32
|
buildId = upload.buildId;
|
|
37
33
|
SpinniesManager_1.default.succeed('upload', {
|
|
38
|
-
text:
|
|
39
|
-
accountIdentifier,
|
|
40
|
-
projectName,
|
|
41
|
-
}),
|
|
34
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.succeed(projectName, accountIdentifier),
|
|
42
35
|
});
|
|
43
36
|
if (buildId) {
|
|
44
|
-
logger_1.logger.debug(
|
|
45
|
-
buildId,
|
|
46
|
-
projectName,
|
|
47
|
-
}));
|
|
37
|
+
logger_1.logger.debug(en_1.lib.projectUpload.uploadProjectFiles.buildCreated(projectName, buildId));
|
|
48
38
|
}
|
|
49
39
|
}
|
|
50
40
|
catch (err) {
|
|
51
41
|
SpinniesManager_1.default.fail('upload', {
|
|
52
|
-
text:
|
|
53
|
-
accountIdentifier,
|
|
54
|
-
projectName,
|
|
55
|
-
}),
|
|
42
|
+
text: en_1.lib.projectUpload.uploadProjectFiles.fail(projectName, accountIdentifier),
|
|
56
43
|
});
|
|
57
44
|
error = err;
|
|
58
45
|
}
|
|
@@ -62,21 +49,15 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
|
|
|
62
49
|
const srcDir = path_1.default.resolve(projectDir, projectConfig.srcDir);
|
|
63
50
|
const filenames = fs_extra_1.default.readdirSync(srcDir);
|
|
64
51
|
if (!filenames || filenames.length === 0) {
|
|
65
|
-
logger_1.logger.log(
|
|
66
|
-
srcDir: projectConfig.srcDir,
|
|
67
|
-
}));
|
|
52
|
+
logger_1.logger.log(en_1.lib.projectUpload.handleProjectUpload.emptySource(projectConfig.srcDir));
|
|
68
53
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
69
54
|
}
|
|
70
55
|
const tempFile = tmp_1.default.fileSync({ postfix: '.zip' });
|
|
71
|
-
logger_1.logger.debug(
|
|
72
|
-
path: tempFile.name,
|
|
73
|
-
}));
|
|
56
|
+
logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.compressing(tempFile.name));
|
|
74
57
|
const output = fs_extra_1.default.createWriteStream(tempFile.name);
|
|
75
58
|
const archive = (0, archiver_1.default)('zip');
|
|
76
59
|
const result = new Promise(resolve => output.on('close', async function () {
|
|
77
|
-
logger_1.logger.debug(
|
|
78
|
-
byteCount: archive.pointer(),
|
|
79
|
-
}));
|
|
60
|
+
logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.compressed(archive.pointer()));
|
|
80
61
|
let intermediateRepresentation;
|
|
81
62
|
if (sendIR) {
|
|
82
63
|
try {
|
|
@@ -113,9 +94,7 @@ async function handleProjectUpload(accountId, projectConfig, projectDir, callbac
|
|
|
113
94
|
if (ignored) {
|
|
114
95
|
const isNodeModule = file.name.includes('node_modules');
|
|
115
96
|
if (!isNodeModule || !loggedIgnoredNodeModule) {
|
|
116
|
-
logger_1.logger.debug(
|
|
117
|
-
filename: file.name,
|
|
118
|
-
}));
|
|
97
|
+
logger_1.logger.debug(en_1.lib.projectUpload.handleProjectUpload.fileFiltered(file.name));
|
|
119
98
|
}
|
|
120
99
|
if (isNodeModule && !loggedIgnoredNodeModule) {
|
|
121
100
|
loggedIgnoredNodeModule = true;
|
package/lib/projects/urls.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function getProjectDetailUrl(projectName: string, accountId: number): string | undefined;
|
|
2
|
+
export declare function getProjectSettingsUrl(projectName: string, accountId: number): string | undefined;
|
|
2
3
|
export declare function getProjectActivityUrl(projectName: string, accountId: number): string;
|
|
3
4
|
export declare function getProjectBuildDetailUrl(projectName: string, buildId: number, accountId: number): string;
|
|
4
5
|
export declare function getProjectDeployDetailUrl(projectName: string, deployId: number, accountId: number): string;
|
package/lib/projects/urls.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getProjectDetailUrl = getProjectDetailUrl;
|
|
4
|
+
exports.getProjectSettingsUrl = getProjectSettingsUrl;
|
|
4
5
|
exports.getProjectActivityUrl = getProjectActivityUrl;
|
|
5
6
|
exports.getProjectBuildDetailUrl = getProjectBuildDetailUrl;
|
|
6
7
|
exports.getProjectDeployDetailUrl = getProjectDeployDetailUrl;
|
|
@@ -16,6 +17,11 @@ function getProjectDetailUrl(projectName, accountId) {
|
|
|
16
17
|
return;
|
|
17
18
|
return `${getProjectHomeUrl(accountId)}/project/${projectName}`;
|
|
18
19
|
}
|
|
20
|
+
function getProjectSettingsUrl(projectName, accountId) {
|
|
21
|
+
if (!projectName)
|
|
22
|
+
return;
|
|
23
|
+
return `${getProjectDetailUrl(projectName, accountId)}/settings`;
|
|
24
|
+
}
|
|
19
25
|
function getProjectActivityUrl(projectName, accountId) {
|
|
20
26
|
return `${getProjectDetailUrl(projectName, accountId)}/activity`;
|
|
21
27
|
}
|
package/lib/projects/watch.js
CHANGED
|
@@ -15,9 +15,8 @@ const ignoreRules_1 = require("@hubspot/local-dev-lib/ignoreRules");
|
|
|
15
15
|
const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
16
16
|
const index_1 = require("@hubspot/local-dev-lib/errors/index");
|
|
17
17
|
const errorHandlers_1 = require("../errorHandlers");
|
|
18
|
-
const lang_1 = require("../lang");
|
|
19
18
|
const constants_1 = require("../constants");
|
|
20
|
-
const
|
|
19
|
+
const en_1 = require("../../lang/en");
|
|
21
20
|
const queue = new p_queue_1.default({
|
|
22
21
|
concurrency: 10,
|
|
23
22
|
});
|
|
@@ -44,18 +43,18 @@ function debounceQueueBuild(accountId, projectName, platformVersion) {
|
|
|
44
43
|
clearTimeout(timer);
|
|
45
44
|
}
|
|
46
45
|
timer = setTimeout(async () => {
|
|
47
|
-
logger_1.logger.debug(
|
|
46
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.pause);
|
|
48
47
|
queue.pause();
|
|
49
48
|
await queue.onIdle();
|
|
50
49
|
try {
|
|
51
50
|
await (0, projects_1.queueBuild)(accountId, projectName, platformVersion);
|
|
52
|
-
logger_1.logger.debug(
|
|
51
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.buildStarted);
|
|
53
52
|
}
|
|
54
53
|
catch (err) {
|
|
55
54
|
if ((0, index_1.isSpecifiedError)(err, {
|
|
56
55
|
subCategory: constants_1.PROJECT_ERROR_TYPES.MISSING_PROJECT_PROVISION,
|
|
57
56
|
})) {
|
|
58
|
-
logger_1.logger.log(
|
|
57
|
+
logger_1.logger.log(en_1.commands.project.watch.logs.watchCancelledFromUi);
|
|
59
58
|
process.exit(0);
|
|
60
59
|
}
|
|
61
60
|
else {
|
|
@@ -69,24 +68,24 @@ function debounceQueueBuild(accountId, projectName, platformVersion) {
|
|
|
69
68
|
await processStandByQueue(accountId, projectName, platformVersion);
|
|
70
69
|
}
|
|
71
70
|
queue.start();
|
|
72
|
-
logger_1.logger.log(
|
|
71
|
+
logger_1.logger.log(en_1.commands.project.watch.logs.resuming);
|
|
73
72
|
logger_1.logger.log(`\n> Press ${chalk_1.default.bold('q')} to quit watching\n`);
|
|
74
73
|
}, 2000);
|
|
75
74
|
}
|
|
76
75
|
async function queueFileOrFolder(accountId, projectName, platformVersion, filePath, remotePath, action) {
|
|
77
76
|
if (action === 'upload' &&
|
|
78
77
|
!(0, path_2.isAllowedExtension)(filePath, Array.from(extensions_1.JSR_ALLOWED_EXTENSIONS))) {
|
|
79
|
-
logger_1.logger.debug(
|
|
78
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.extensionNotAllowed(filePath));
|
|
80
79
|
return;
|
|
81
80
|
}
|
|
82
81
|
if ((0, ignoreRules_1.shouldIgnoreFile)(filePath, true)) {
|
|
83
|
-
logger_1.logger.debug(
|
|
82
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.ignored(filePath));
|
|
84
83
|
return;
|
|
85
84
|
}
|
|
86
85
|
if (!queue.isPaused) {
|
|
87
86
|
debounceQueueBuild(accountId, projectName, platformVersion);
|
|
88
87
|
}
|
|
89
|
-
logger_1.logger.debug(
|
|
88
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.uploading(filePath, remotePath));
|
|
90
89
|
return queue.add(async () => {
|
|
91
90
|
try {
|
|
92
91
|
if (action === 'upload') {
|
|
@@ -95,16 +94,20 @@ async function queueFileOrFolder(accountId, projectName, platformVersion, filePa
|
|
|
95
94
|
else if (action === 'deleteFile' || action === 'deleteFolder') {
|
|
96
95
|
await (0, projects_1.deleteFileFromBuild)(accountId, projectName, remotePath);
|
|
97
96
|
}
|
|
98
|
-
logger_1.logger.log(
|
|
97
|
+
logger_1.logger.log(
|
|
98
|
+
// @ts-expect-error
|
|
99
|
+
en_1.commands.project.watch.logs[`${action}Succeeded`](remotePath, filePath));
|
|
99
100
|
}
|
|
100
101
|
catch (err) {
|
|
101
|
-
logger_1.logger.debug(
|
|
102
|
+
logger_1.logger.debug(
|
|
103
|
+
// @ts-expect-error
|
|
104
|
+
en_1.commands.project.watch.errors[`${action}Failed`](remotePath, filePath));
|
|
102
105
|
}
|
|
103
106
|
});
|
|
104
107
|
}
|
|
105
108
|
async function createNewBuild(accountId, projectName, platformVersion) {
|
|
106
109
|
try {
|
|
107
|
-
logger_1.logger.debug(
|
|
110
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.attemptNewBuild);
|
|
108
111
|
const { data: { buildId }, } = await (0, projects_1.provisionBuild)(accountId, projectName, platformVersion);
|
|
109
112
|
return buildId;
|
|
110
113
|
}
|
|
@@ -112,7 +115,7 @@ async function createNewBuild(accountId, projectName, platformVersion) {
|
|
|
112
115
|
(0, errorHandlers_1.logError)(err, new errorHandlers_1.ApiErrorContext({ accountId }));
|
|
113
116
|
if ((0, index_1.isSpecifiedError)(err, { subCategory: constants_1.PROJECT_ERROR_TYPES.PROJECT_LOCKED })) {
|
|
114
117
|
await (0, projects_1.cancelStagedBuild)(accountId, projectName);
|
|
115
|
-
logger_1.logger.log(
|
|
118
|
+
logger_1.logger.log(en_1.commands.project.watch.logs.previousStagingBuildCancelled);
|
|
116
119
|
}
|
|
117
120
|
process.exit(1);
|
|
118
121
|
}
|
|
@@ -121,7 +124,7 @@ async function handleWatchEvent(accountId, projectName, platformVersion, project
|
|
|
121
124
|
const remotePath = path_1.default.relative(projectSourceDir, filePath);
|
|
122
125
|
if (queue.isPaused) {
|
|
123
126
|
if (standbyQueue.find(file => file.filePath === filePath)) {
|
|
124
|
-
logger_1.logger.debug(
|
|
127
|
+
logger_1.logger.debug(en_1.commands.project.watch.debug.fileAlreadyQueued(filePath));
|
|
125
128
|
}
|
|
126
129
|
else {
|
|
127
130
|
standbyQueue.push({
|
|
@@ -145,7 +148,7 @@ async function createWatcher(accountId, projectConfig, projectDir, handleBuildSt
|
|
|
145
148
|
ignored: file => (0, ignoreRules_1.shouldIgnoreFile)(file),
|
|
146
149
|
});
|
|
147
150
|
watcher.on('ready', async () => {
|
|
148
|
-
logger_1.logger.log(
|
|
151
|
+
logger_1.logger.log(en_1.commands.project.watch.logs.watching(projectDir));
|
|
149
152
|
logger_1.logger.log(`\n> Press ${chalk_1.default.bold('q')} to quit watching\n`);
|
|
150
153
|
});
|
|
151
154
|
watcher.on('add', async (path) => {
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.projectNamePrompt = projectNamePrompt;
|
|
4
4
|
const promptUtils_1 = require("./promptUtils");
|
|
5
5
|
const lang_1 = require("../lang");
|
|
6
|
-
const
|
|
6
|
+
const ensureProjectExists_1 = require("../projects/ensureProjectExists");
|
|
7
7
|
const ui_1 = require("../ui");
|
|
8
8
|
const i18nKey = 'lib.prompts.projectNamePrompt';
|
|
9
9
|
async function projectNamePrompt(accountId, options = {}) {
|
|
@@ -15,7 +15,7 @@ async function projectNamePrompt(accountId, options = {}) {
|
|
|
15
15
|
if (typeof val !== 'string' || !val) {
|
|
16
16
|
return (0, lang_1.i18n)(`${i18nKey}.errors.invalidName`);
|
|
17
17
|
}
|
|
18
|
-
const { projectExists } = await (0,
|
|
18
|
+
const { projectExists } = await (0, ensureProjectExists_1.ensureProjectExists)(accountId, val, {
|
|
19
19
|
allowCreate: false,
|
|
20
20
|
noLogs: true,
|
|
21
21
|
});
|
|
@@ -10,6 +10,6 @@ export declare function listPrompt<T = string>(message: string, { choices, when,
|
|
|
10
10
|
}): Promise<T>;
|
|
11
11
|
export declare function inputPrompt(message: string, { when, validate, defaultAnswer, }?: {
|
|
12
12
|
when?: boolean | (() => boolean);
|
|
13
|
-
validate?: (input: string) => boolean | string
|
|
13
|
+
validate?: (input: string) => (boolean | string) | Promise<boolean | string>;
|
|
14
14
|
defaultAnswer?: string;
|
|
15
15
|
}): Promise<string>;
|
|
@@ -22,7 +22,7 @@ declare class SpinniesManager {
|
|
|
22
22
|
succeed(name: string, options?: Partial<SpinnerState>): SpinnerState;
|
|
23
23
|
fail(name: string, options?: Partial<SpinnerState>): SpinnerState;
|
|
24
24
|
remove(name: string): SpinnerState;
|
|
25
|
-
stopAll(newStatus?: typeof VALID_STATUSES[number]): {
|
|
25
|
+
stopAll(newStatus?: (typeof VALID_STATUSES)[number]): {
|
|
26
26
|
[key: string]: SpinnerState;
|
|
27
27
|
};
|
|
28
28
|
private hasAnySpinners;
|
package/lib/ui/index.d.ts
CHANGED
|
@@ -15,3 +15,4 @@ export declare function uiDeprecatedTag(message: string, log?: boolean): string
|
|
|
15
15
|
export declare function uiCommandDisabledBanner(command: string, url?: string, message?: string): void;
|
|
16
16
|
export declare function uiDeprecatedDescription(message: string, command: string, url?: string): string | undefined;
|
|
17
17
|
export declare function uiDeprecatedMessage(command: string, url?: string, message?: string): void;
|
|
18
|
+
export declare function indent(level: number): string;
|