@hubspot/cli 7.8.12-experimental.0 → 7.8.12-experimental.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +31 -25
- package/commands/__tests__/auth.test.js +5 -0
- package/commands/__tests__/doctor.test.js +16 -16
- 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 -5
- package/commands/app/migrate.js +13 -18
- package/commands/app.js +1 -6
- 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 -36
- 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 +6 -11
- 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.js +2 -2
- 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/mv.js +6 -17
- package/commands/open.js +5 -5
- package/commands/project/__tests__/add.test.js +4 -2
- package/commands/project/__tests__/deploy.test.js +3 -4
- package/commands/project/__tests__/installDeps.test.js +8 -8
- package/commands/project/__tests__/logs.test.js +1 -1
- package/commands/project/__tests__/migrate.test.js +5 -5
- package/commands/project/__tests__/migrateApp.test.js +2 -5
- package/commands/project/__tests__/validate.test.js +98 -0
- package/commands/project/add.js +3 -3
- package/commands/project/cloneApp.js +14 -19
- package/commands/project/create.js +0 -1
- package/commands/project/deploy.js +3 -3
- package/commands/project/dev/deprecatedFlow.js +7 -16
- package/commands/project/dev/index.js +14 -12
- package/commands/project/dev/unifiedFlow.js +3 -1
- package/commands/project/download.js +10 -13
- package/commands/project/installDeps.js +8 -8
- package/commands/project/listBuilds.js +11 -20
- package/commands/project/logs.js +21 -24
- package/commands/project/migrateApp.js +9 -15
- package/commands/project/open.js +6 -13
- package/commands/project/upload.d.ts +2 -2
- package/commands/project/upload.js +17 -26
- package/commands/project/validate.js +6 -6
- package/commands/project/watch.js +13 -22
- package/commands/project.js +2 -2
- package/commands/sandbox/__tests__/create.test.js +5 -5
- package/commands/sandbox/create.js +22 -32
- package/commands/sandbox/delete.js +38 -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/theme/preview.js +1 -4
- package/lang/en.d.ts +310 -124
- package/lang/en.js +351 -169
- 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 +5 -5
- package/lib/app/__tests__/migrate_legacy.test.js +1 -1
- package/lib/app/migrate.js +1 -1
- 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 +6 -1
- package/lib/constants.js +10 -1
- 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 +11 -18
- package/lib/lang.js +6 -5
- package/lib/links.js +4 -4
- 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/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 +14 -34
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +70 -39
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +2 -0
- 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 +1 -1
- package/lib/projects/create/index.js +2 -2
- package/lib/projects/create/legacy.js +2 -2
- package/lib/projects/create/v3.js +2 -2
- package/lib/projects/localDev/AppDevModeInterface.d.ts +2 -0
- package/lib/projects/localDev/AppDevModeInterface.js +22 -20
- package/lib/projects/localDev/LocalDevLogger.js +10 -11
- package/lib/projects/localDev/LocalDevManager.js +4 -5
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +0 -1
- package/lib/projects/localDev/LocalDevWebsocketServer.js +7 -10
- package/lib/projects/localDev/helpers/project.d.ts +1 -0
- package/lib/projects/localDev/helpers/project.js +37 -0
- package/lib/projects/platformVersion.d.ts +1 -1
- package/lib/projects/platformVersion.js +1 -1
- 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/__tests__/downloadProjectPrompt.test.js +1 -0
- 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 +6 -0
- 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 +27 -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/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.js +3 -3
- package/lib/theme/migrate.js +2 -2
- 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.d.ts +4 -0
- package/lib/ui/index.js +47 -38
- 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 +7 -7
- 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/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.js +2 -2
- package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +2 -2
- 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/utils/toolUsageTracking.js +2 -2
- package/package.json +6 -6
- package/types/Yargs.d.ts +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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import SpinniesManager from '../../lib/ui/SpinniesManager.js';
|
|
2
|
-
import { logger } from '@hubspot/local-dev-lib/logger';
|
|
3
2
|
import { getTableContents, getTableHeader } from '../../lib/ui/table.js';
|
|
4
3
|
import { promptUser } from '../../lib/prompts/promptUtils.js';
|
|
5
|
-
import {
|
|
4
|
+
import { commands } from '../../lang/en.js';
|
|
5
|
+
import { uiLogger } from '../../lib/ui/logger.js';
|
|
6
6
|
import { fetchThemes } from '@hubspot/local-dev-lib/api/designManager';
|
|
7
7
|
import { requestLighthouseScore, getLighthouseScoreStatus, getLighthouseScore, } from '@hubspot/local-dev-lib/api/lighthouseScore';
|
|
8
8
|
import { HUBSPOT_FOLDER, MARKETPLACE_FOLDER } from '../../lib/constants.js';
|
|
@@ -45,14 +45,14 @@ async function selectTheme(accountId) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
catch (err) {
|
|
48
|
-
|
|
48
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.errors.failedToFetchThemes);
|
|
49
49
|
process.exit(EXIT_CODES.ERROR);
|
|
50
50
|
}
|
|
51
51
|
const { theme: selectedTheme } = await promptUser([
|
|
52
52
|
{
|
|
53
53
|
type: 'list',
|
|
54
54
|
name: 'theme',
|
|
55
|
-
message:
|
|
55
|
+
message: commands.cms.subcommands.lighthouseScore.info.promptMessage,
|
|
56
56
|
choices: themes,
|
|
57
57
|
},
|
|
58
58
|
]);
|
|
@@ -75,15 +75,13 @@ async function handler(args) {
|
|
|
75
75
|
isValidTheme = false;
|
|
76
76
|
}
|
|
77
77
|
if (!isValidTheme) {
|
|
78
|
-
|
|
79
|
-
theme: themeToCheck,
|
|
80
|
-
}));
|
|
78
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.errors.themeNotFound(themeToCheck));
|
|
81
79
|
process.exit(EXIT_CODES.ERROR);
|
|
82
80
|
}
|
|
83
81
|
}
|
|
84
82
|
else {
|
|
85
83
|
themeToCheck = await selectTheme(derivedAccountId);
|
|
86
|
-
|
|
84
|
+
uiLogger.log('');
|
|
87
85
|
}
|
|
88
86
|
// Kick off the scoring
|
|
89
87
|
let requestResult;
|
|
@@ -94,17 +92,17 @@ async function handler(args) {
|
|
|
94
92
|
requestResult = data;
|
|
95
93
|
}
|
|
96
94
|
catch (err) {
|
|
97
|
-
|
|
95
|
+
uiLogger.debug(err);
|
|
98
96
|
}
|
|
99
97
|
if (!requestResult || !requestResult.mobileId || !requestResult.desktopId) {
|
|
100
|
-
|
|
98
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.errors.failedToGetLighthouseScore);
|
|
101
99
|
process.exit(EXIT_CODES.ERROR);
|
|
102
100
|
}
|
|
103
101
|
// Poll till scoring is finished
|
|
104
102
|
try {
|
|
105
103
|
SpinniesManager.init();
|
|
106
104
|
SpinniesManager.add('lighthouseScore', {
|
|
107
|
-
text:
|
|
105
|
+
text: commands.cms.subcommands.lighthouseScore.info.generatingScore(themeToCheck),
|
|
108
106
|
});
|
|
109
107
|
async function checkScoreStatus() {
|
|
110
108
|
let desktopScoreStatus = 'COMPLETED';
|
|
@@ -131,7 +129,7 @@ async function handler(args) {
|
|
|
131
129
|
SpinniesManager.remove('lighthouseScore');
|
|
132
130
|
}
|
|
133
131
|
catch (err) {
|
|
134
|
-
|
|
132
|
+
uiLogger.debug(err);
|
|
135
133
|
process.exit(EXIT_CODES.ERROR);
|
|
136
134
|
}
|
|
137
135
|
// Fetch the scoring results
|
|
@@ -166,16 +164,17 @@ async function handler(args) {
|
|
|
166
164
|
}
|
|
167
165
|
}
|
|
168
166
|
catch (err) {
|
|
169
|
-
|
|
167
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.errors.failedToGetLighthouseScore);
|
|
170
168
|
process.exit(EXIT_CODES.ERROR);
|
|
171
169
|
}
|
|
172
170
|
if (verbose) {
|
|
173
171
|
const scoreResult = target === 'desktop' ? desktopScoreResult : mobileScoreResult;
|
|
174
172
|
if (!verboseViewAverageScoreResult || !scoreResult) {
|
|
175
|
-
|
|
173
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.errors
|
|
174
|
+
.failedToGetLighthouseScore);
|
|
176
175
|
process.exit(EXIT_CODES.ERROR);
|
|
177
176
|
}
|
|
178
|
-
|
|
177
|
+
uiLogger.log(commands.cms.subcommands.lighthouseScore.info.themeToCheckTitle(themeToCheck, target));
|
|
179
178
|
const tableHeader = getTableHeader(DEFAULT_TABLE_HEADER);
|
|
180
179
|
const scores = verboseViewAverageScoreResult.scores
|
|
181
180
|
? verboseViewAverageScoreResult.scores[0]
|
|
@@ -187,10 +186,10 @@ async function handler(args) {
|
|
|
187
186
|
scores.pwaScore,
|
|
188
187
|
scores.seoScore,
|
|
189
188
|
];
|
|
190
|
-
|
|
189
|
+
uiLogger.log(getTableContents([tableHeader, averageTableData], {
|
|
191
190
|
border: { bodyLeft: ' ' },
|
|
192
191
|
}));
|
|
193
|
-
|
|
192
|
+
uiLogger.log(commands.cms.subcommands.lighthouseScore.info.pageTemplateScoreTitle);
|
|
194
193
|
const table2Header = getTableHeader([
|
|
195
194
|
'Template path',
|
|
196
195
|
...DEFAULT_TABLE_HEADER,
|
|
@@ -205,29 +204,27 @@ async function handler(args) {
|
|
|
205
204
|
score.seoScore,
|
|
206
205
|
];
|
|
207
206
|
});
|
|
208
|
-
|
|
207
|
+
uiLogger.log(getTableContents([table2Header, ...templateTableData], {
|
|
209
208
|
border: { bodyLeft: ' ' },
|
|
210
209
|
}));
|
|
211
|
-
|
|
210
|
+
uiLogger.log(commands.cms.subcommands.lighthouseScore.info.lighthouseLinksTitle);
|
|
212
211
|
scoreResult.scores.forEach(score => {
|
|
213
212
|
if (score.templatePath && score.link) {
|
|
214
|
-
|
|
213
|
+
uiLogger.log(` ${uiLink(score.templatePath, score.link)}`);
|
|
215
214
|
}
|
|
216
215
|
});
|
|
217
216
|
if (scoreResult.failedTemplatePaths.length) {
|
|
218
|
-
|
|
219
|
-
|
|
217
|
+
uiLogger.log('');
|
|
218
|
+
uiLogger.error(commands.cms.subcommands.lighthouseScore.info.failedTemplatePathsTitle);
|
|
220
219
|
scoreResult.failedTemplatePaths.forEach(failedTemplatePath => {
|
|
221
|
-
|
|
220
|
+
uiLogger.log(` ${failedTemplatePath}`);
|
|
222
221
|
});
|
|
223
222
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
target,
|
|
227
|
-
}));
|
|
223
|
+
uiLogger.log('');
|
|
224
|
+
uiLogger.info(commands.cms.subcommands.lighthouseScore.info.targetDeviceNote(target));
|
|
228
225
|
}
|
|
229
226
|
else {
|
|
230
|
-
|
|
227
|
+
uiLogger.log(commands.cms.subcommands.lighthouseScore.info.themeTitle(themeToCheck));
|
|
231
228
|
const tableHeader = getTableHeader(['Target', ...DEFAULT_TABLE_HEADER]);
|
|
232
229
|
const getTableData = (target, scoreResult) => {
|
|
233
230
|
const scores = scoreResult?.scores ? scoreResult.scores[0] : EMPTY_SCORE;
|
|
@@ -244,35 +241,35 @@ async function handler(args) {
|
|
|
244
241
|
getTableData('desktop', desktopScoreResult),
|
|
245
242
|
getTableData('mobile', mobileScoreResult),
|
|
246
243
|
];
|
|
247
|
-
|
|
244
|
+
uiLogger.log(getTableContents([tableHeader, ...tableData], {
|
|
248
245
|
border: { bodyLeft: ' ' },
|
|
249
246
|
}));
|
|
250
|
-
|
|
247
|
+
uiLogger.info(commands.cms.subcommands.lighthouseScore.info.verboseOptionNote);
|
|
251
248
|
}
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
uiLogger.log('');
|
|
250
|
+
uiLogger.log(commands.cms.subcommands.lighthouseScore.info.poweredByLink);
|
|
254
251
|
process.exit(EXIT_CODES.SUCCESS);
|
|
255
252
|
}
|
|
256
253
|
function cmslighthouseScoreBuilder(yargs) {
|
|
257
254
|
yargs.option('theme', {
|
|
258
|
-
describe:
|
|
255
|
+
describe: commands.cms.subcommands.lighthouseScore.options.theme.describe,
|
|
259
256
|
type: 'string',
|
|
260
257
|
});
|
|
261
258
|
yargs.option('target', {
|
|
262
|
-
describe:
|
|
259
|
+
describe: commands.cms.subcommands.lighthouseScore.options.target.describe,
|
|
263
260
|
type: 'string',
|
|
264
261
|
choices: ['desktop', 'mobile'],
|
|
265
262
|
default: 'desktop',
|
|
266
263
|
});
|
|
267
264
|
yargs.option('verbose', {
|
|
268
|
-
describe:
|
|
265
|
+
describe: commands.cms.subcommands.lighthouseScore.options.verbose.describe,
|
|
269
266
|
boolean: true,
|
|
270
267
|
default: false,
|
|
271
268
|
});
|
|
272
269
|
yargs.example([
|
|
273
270
|
[
|
|
274
271
|
'$0 cms lighthouse-score --theme=my-theme',
|
|
275
|
-
|
|
272
|
+
commands.cms.subcommands.lighthouseScore.examples.default,
|
|
276
273
|
],
|
|
277
274
|
]);
|
|
278
275
|
return yargs;
|
package/commands/cms.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { commands } from '../lang/en.js';
|
|
2
2
|
import { makeYargsBuilder } from '../lib/yargsUtils.js';
|
|
3
3
|
import lighthouseScore from './cms/lighthouseScore.js';
|
|
4
4
|
import convertFields from './cms/convertFields.js';
|
|
5
5
|
import getReactModule from './cms/getReactModule.js';
|
|
6
6
|
const command = 'cms';
|
|
7
|
-
const describe =
|
|
7
|
+
const describe = commands.cms.describe;
|
|
8
8
|
function cmsBuilder(yargs) {
|
|
9
9
|
yargs
|
|
10
10
|
.command(lighthouseScore)
|
package/commands/completion.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import yargsParser from 'yargs-parser';
|
|
2
|
-
import {
|
|
2
|
+
import { commands } from '../lang/en.js';
|
|
3
3
|
import { trackCommandUsage } from '../lib/usageTracking.js';
|
|
4
4
|
import { makeYargsBuilder } from '../lib/yargsUtils.js';
|
|
5
5
|
const command = 'completion';
|
|
6
|
-
const describe =
|
|
6
|
+
const describe = commands.completion.describe;
|
|
7
7
|
async function handler() {
|
|
8
8
|
await trackCommandUsage('completion');
|
|
9
9
|
}
|
|
@@ -13,7 +13,7 @@ function completionBuilder(yargs) {
|
|
|
13
13
|
yargs.completion();
|
|
14
14
|
}
|
|
15
15
|
yargs.example([
|
|
16
|
-
['$0 completion >> ~/.zshrc',
|
|
16
|
+
['$0 completion >> ~/.zshrc', commands.completion.examples.default],
|
|
17
17
|
]);
|
|
18
18
|
return yargs;
|
|
19
19
|
}
|
package/commands/config/set.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CmsPublishMode } from '@hubspot/local-dev-lib/types/Files';
|
|
2
2
|
import { CommonArgs, ConfigArgs, YargsCommandModule } from '../../types/Yargs.js';
|
|
3
3
|
type ConfigSetArgs = CommonArgs & ConfigArgs & {
|
|
4
|
-
defaultCmsPublishMode
|
|
4
|
+
defaultCmsPublishMode?: CmsPublishMode;
|
|
5
5
|
allowUsageTracking?: boolean;
|
|
6
6
|
httpTimeout?: string;
|
|
7
7
|
allowAutoUpdates?: boolean;
|
package/commands/config/set.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { i18n } from '../../lib/lang.js';
|
|
2
1
|
import { trackCommandUsage } from '../../lib/usageTracking.js';
|
|
3
2
|
import { promptUser } from '../../lib/prompts/promptUtils.js';
|
|
4
3
|
import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
5
4
|
import { setDefaultCmsPublishMode, setHttpTimeout, setAllowUsageTracking, setAllowAutoUpdates, setAutoOpenBrowser, } from '../../lib/configOptions.js';
|
|
6
5
|
import { commands } from '../../lang/en.js';
|
|
7
|
-
import { makeYargsBuilder,
|
|
6
|
+
import { makeYargsBuilder, strictEnforceBoolean, } from '../../lib/yargsUtils.js';
|
|
7
|
+
import { logError } from '../../lib/errorHandlers/index.js';
|
|
8
|
+
import { uiLogger } from '../../lib/ui/logger.js';
|
|
8
9
|
const command = 'set';
|
|
9
10
|
const describe = commands.config.subcommands.set.describe;
|
|
10
11
|
async function selectOptions() {
|
|
@@ -29,35 +30,41 @@ async function selectOptions() {
|
|
|
29
30
|
}
|
|
30
31
|
async function handleConfigUpdate(accountId, args) {
|
|
31
32
|
const { allowAutoUpdates, allowUsageTracking, defaultCmsPublishMode, httpTimeout, autoOpenBrowser, } = args;
|
|
32
|
-
if (
|
|
33
|
-
await
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
else if (typeof httpTimeout !== 'undefined') {
|
|
37
|
-
await setHttpTimeout({ httpTimeout, accountId });
|
|
38
|
-
return true;
|
|
33
|
+
if (allowAutoUpdates !== undefined) {
|
|
34
|
+
await setAllowAutoUpdates({ allowAutoUpdates, accountId });
|
|
39
35
|
}
|
|
40
|
-
|
|
36
|
+
if (allowUsageTracking !== undefined) {
|
|
41
37
|
await setAllowUsageTracking({ allowUsageTracking, accountId });
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
else if (typeof allowAutoUpdates !== 'undefined') {
|
|
45
|
-
await setAllowAutoUpdates({ allowAutoUpdates, accountId });
|
|
46
|
-
return true;
|
|
47
38
|
}
|
|
48
|
-
|
|
39
|
+
if (autoOpenBrowser !== undefined) {
|
|
49
40
|
await setAutoOpenBrowser({ autoOpenBrowser, accountId });
|
|
50
|
-
return true;
|
|
51
41
|
}
|
|
52
|
-
|
|
42
|
+
if (defaultCmsPublishMode !== undefined) {
|
|
43
|
+
await setDefaultCmsPublishMode({ defaultCmsPublishMode, accountId });
|
|
44
|
+
}
|
|
45
|
+
if (httpTimeout !== undefined) {
|
|
46
|
+
await setHttpTimeout({ httpTimeout, accountId });
|
|
47
|
+
}
|
|
53
48
|
}
|
|
54
49
|
async function handler(args) {
|
|
55
|
-
const { derivedAccountId } = args;
|
|
50
|
+
const { derivedAccountId, allowAutoUpdates, allowUsageTracking, defaultCmsPublishMode, httpTimeout, autoOpenBrowser, } = args;
|
|
56
51
|
trackCommandUsage('config-set', {}, derivedAccountId);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
try {
|
|
53
|
+
if (allowAutoUpdates !== undefined ||
|
|
54
|
+
allowUsageTracking !== undefined ||
|
|
55
|
+
autoOpenBrowser !== undefined ||
|
|
56
|
+
defaultCmsPublishMode !== undefined ||
|
|
57
|
+
httpTimeout !== undefined) {
|
|
58
|
+
await handleConfigUpdate(derivedAccountId, args);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const selectedOptions = await selectOptions();
|
|
62
|
+
await handleConfigUpdate(derivedAccountId, selectedOptions);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logError(err);
|
|
67
|
+
process.exit(EXIT_CODES.ERROR);
|
|
61
68
|
}
|
|
62
69
|
process.exit(EXIT_CODES.SUCCESS);
|
|
63
70
|
}
|
|
@@ -67,15 +74,23 @@ function configSetBuilder(yargs) {
|
|
|
67
74
|
'default-cms-publish-mode': {
|
|
68
75
|
describe: commands.config.subcommands.set.options.defaultMode.describe,
|
|
69
76
|
type: 'string',
|
|
77
|
+
choices: ['draft', 'publish'],
|
|
78
|
+
},
|
|
79
|
+
'http-timeout': {
|
|
80
|
+
describe: commands.config.subcommands.set.options.httpTimeout.describe,
|
|
81
|
+
type: 'number',
|
|
82
|
+
coerce: (value) => {
|
|
83
|
+
if (isNaN(value) || value < 3000) {
|
|
84
|
+
uiLogger.error(commands.config.subcommands.set.errors.invalidHTTPTimeout);
|
|
85
|
+
process.exit(EXIT_CODES.ERROR);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
},
|
|
70
89
|
},
|
|
71
90
|
'allow-usage-tracking': {
|
|
72
91
|
describe: commands.config.subcommands.set.options.allowUsageTracking.describe,
|
|
73
92
|
type: 'boolean',
|
|
74
93
|
},
|
|
75
|
-
'http-timeout': {
|
|
76
|
-
describe: commands.config.subcommands.set.options.httpTimeout.describe,
|
|
77
|
-
type: 'string',
|
|
78
|
-
},
|
|
79
94
|
'allow-auto-updates': {
|
|
80
95
|
describe: commands.config.subcommands.set.options.allowAutoUpdates.describe,
|
|
81
96
|
type: 'boolean',
|
|
@@ -86,17 +101,30 @@ function configSetBuilder(yargs) {
|
|
|
86
101
|
type: 'boolean',
|
|
87
102
|
},
|
|
88
103
|
})
|
|
89
|
-
.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
.check(() => {
|
|
105
|
+
// Use process.argv directly because yargs argv has already been parsed/coerced,
|
|
106
|
+
// but we need to validate the exact format the user provided (e.g., --flag=true vs --flag)
|
|
107
|
+
return strictEnforceBoolean(process.argv, [
|
|
108
|
+
'allow-usage-tracking',
|
|
109
|
+
'allow-auto-updates',
|
|
110
|
+
'auto-open-browser',
|
|
111
|
+
]);
|
|
112
|
+
})
|
|
96
113
|
.example([
|
|
114
|
+
['$0 config set', commands.config.subcommands.set.examples.default],
|
|
115
|
+
['$0 config set --allow-usage-tracking=false', 'Disable usage tracking'],
|
|
116
|
+
['$0 config set --http-timeout=5000', 'Set HTTP timeout to 5000ms'],
|
|
117
|
+
[
|
|
118
|
+
'$0 config set --default-cms-publish-mode=draft',
|
|
119
|
+
'Set default CMS publish mode to draft',
|
|
120
|
+
],
|
|
121
|
+
[
|
|
122
|
+
'$0 config set --http-timeout=3000 --allow-usage-tracking=false',
|
|
123
|
+
'Set HTTP timeout and disable usage tracking',
|
|
124
|
+
],
|
|
97
125
|
[
|
|
98
|
-
'$0 config set',
|
|
99
|
-
|
|
126
|
+
'$0 config set --default-cms-publish-mode=draft --http-timeout=4000 --allow-usage-tracking=true',
|
|
127
|
+
'Configure multiple settings at once',
|
|
100
128
|
],
|
|
101
129
|
]);
|
|
102
130
|
return yargs;
|
package/commands/config.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { commands } from '../lang/en.js';
|
|
2
2
|
import set from './config/set.js';
|
|
3
3
|
import migrate from './config/migrate.js';
|
|
4
4
|
import { makeYargsBuilder } from '../lib/yargsUtils.js';
|
|
5
5
|
const command = 'config';
|
|
6
|
-
const describe =
|
|
6
|
+
const describe = commands.config.describe;
|
|
7
7
|
function configBuilder(yargs) {
|
|
8
8
|
yargs.command(set).command(migrate).demandCommand(1, '');
|
|
9
9
|
return yargs;
|
package/commands/create.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import { logError } from '../lib/errorHandlers/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { setCLILogLevel } from '../lib/commonOpts.js';
|
|
4
4
|
import { resolveLocalPath } from '../lib/filesystem.js';
|
|
5
5
|
import { trackCommandUsage } from '../lib/usageTracking.js';
|
|
6
6
|
import assets from './create/index.js';
|
|
@@ -17,7 +17,7 @@ const describe = commands.create.describe(SUPPORTED_ASSET_TYPES);
|
|
|
17
17
|
async function handler(args) {
|
|
18
18
|
const { name, internal: getInternalVersion, type } = args;
|
|
19
19
|
let { dest } = args;
|
|
20
|
-
|
|
20
|
+
setCLILogLevel(args);
|
|
21
21
|
const assetType = type.toLowerCase();
|
|
22
22
|
if (assetType === 'global-partial') {
|
|
23
23
|
uiLogger.error(commands.create.errors.deprecatedAssetType(assetType, 'hs create template', 'global partial'));
|
|
@@ -1,52 +1,50 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { uiLogger } from '../../lib/ui/logger.js';
|
|
2
2
|
import { batchCreateObjects } from '@hubspot/local-dev-lib/api/customObjects';
|
|
3
3
|
import { inputPrompt } from '../../lib/prompts/promptUtils.js';
|
|
4
4
|
import { logError } from '../../lib/errorHandlers/index.js';
|
|
5
5
|
import { getAbsoluteFilePath } from '@hubspot/local-dev-lib/path';
|
|
6
6
|
import { checkAndConvertToJson } from '../../lib/validation.js';
|
|
7
7
|
import { trackCommandUsage } from '../../lib/usageTracking.js';
|
|
8
|
-
import {
|
|
8
|
+
import { commands } from '../../lang/en.js';
|
|
9
9
|
import { EXIT_CODES } from '../../lib/enums/exitCodes.js';
|
|
10
10
|
import { isObjectDefinition } from '../../lib/customObject.js';
|
|
11
11
|
import { makeYargsBuilder } from '../../lib/yargsUtils.js';
|
|
12
12
|
const command = 'create [name]';
|
|
13
|
-
const describe =
|
|
13
|
+
const describe = commands.customObject.subcommands.create.describe;
|
|
14
14
|
async function handler(args) {
|
|
15
15
|
const { path, name: providedName, derivedAccountId } = args;
|
|
16
16
|
let definitionPath = path;
|
|
17
17
|
let name = providedName;
|
|
18
18
|
trackCommandUsage('custom-object-batch-create', {}, derivedAccountId);
|
|
19
19
|
if (!name) {
|
|
20
|
-
name = await inputPrompt(
|
|
20
|
+
name = await inputPrompt(commands.customObject.subcommands.create.inputName);
|
|
21
21
|
}
|
|
22
22
|
if (!definitionPath) {
|
|
23
|
-
definitionPath = await inputPrompt(
|
|
23
|
+
definitionPath = await inputPrompt(commands.customObject.subcommands.create.inputPath);
|
|
24
24
|
}
|
|
25
25
|
const filePath = getAbsoluteFilePath(definitionPath);
|
|
26
26
|
const objectJson = checkAndConvertToJson(filePath);
|
|
27
27
|
if (!isObjectDefinition(objectJson)) {
|
|
28
|
-
|
|
28
|
+
uiLogger.error(commands.customObject.subcommands.create.errors.invalidObjectDefinition);
|
|
29
29
|
process.exit(EXIT_CODES.ERROR);
|
|
30
30
|
}
|
|
31
31
|
try {
|
|
32
32
|
await batchCreateObjects(derivedAccountId, name, objectJson);
|
|
33
|
-
|
|
33
|
+
uiLogger.success(commands.customObject.subcommands.create.success.objectsCreated);
|
|
34
34
|
}
|
|
35
35
|
catch (e) {
|
|
36
36
|
logError(e, { accountId: derivedAccountId });
|
|
37
|
-
|
|
38
|
-
definition: definitionPath,
|
|
39
|
-
}));
|
|
37
|
+
uiLogger.error(commands.customObject.subcommands.create.errors.creationFailed(definitionPath));
|
|
40
38
|
}
|
|
41
39
|
}
|
|
42
40
|
function customObjectCreateBuilder(yargs) {
|
|
43
41
|
yargs
|
|
44
42
|
.positional('name', {
|
|
45
|
-
describe:
|
|
43
|
+
describe: commands.customObject.subcommands.create.positionals.name.describe,
|
|
46
44
|
type: 'string',
|
|
47
45
|
})
|
|
48
46
|
.option('path', {
|
|
49
|
-
describe:
|
|
47
|
+
describe: commands.customObject.subcommands.create.options.path.describe,
|
|
50
48
|
type: 'string',
|
|
51
49
|
});
|
|
52
50
|
return yargs;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { uiLogger } from '../../../lib/ui/logger.js';
|
|
2
2
|
import { getEnv } from '@hubspot/local-dev-lib/config';
|
|
3
3
|
import { ENVIRONMENTS } from '@hubspot/local-dev-lib/constants/environments';
|
|
4
4
|
import { getAbsoluteFilePath } from '@hubspot/local-dev-lib/path';
|
|
@@ -7,37 +7,35 @@ import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
|
|
|
7
7
|
import { logError } from '../../../lib/errorHandlers/index.js';
|
|
8
8
|
import { checkAndConvertToJson } from '../../../lib/validation.js';
|
|
9
9
|
import { trackCommandUsage } from '../../../lib/usageTracking.js';
|
|
10
|
-
import {
|
|
10
|
+
import { commands } from '../../../lang/en.js';
|
|
11
11
|
import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
|
|
12
12
|
import { isSchemaDefinition } from '../../../lib/customObject.js';
|
|
13
13
|
import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
|
|
14
14
|
const command = 'create';
|
|
15
|
-
const describe =
|
|
15
|
+
const describe = commands.customObject.subcommands.schema.subcommands.create.describe;
|
|
16
16
|
async function handler(args) {
|
|
17
17
|
const { path, derivedAccountId } = args;
|
|
18
18
|
trackCommandUsage('custom-object-schema-create', {}, derivedAccountId);
|
|
19
19
|
const filePath = getAbsoluteFilePath(path);
|
|
20
20
|
const schemaJson = checkAndConvertToJson(filePath);
|
|
21
21
|
if (!isSchemaDefinition(schemaJson)) {
|
|
22
|
-
|
|
22
|
+
uiLogger.error(commands.customObject.subcommands.schema.subcommands.create.errors
|
|
23
|
+
.invalidSchema);
|
|
23
24
|
process.exit(EXIT_CODES.ERROR);
|
|
24
25
|
}
|
|
25
26
|
try {
|
|
26
27
|
const { data } = await createObjectSchema(derivedAccountId, schemaJson);
|
|
27
|
-
|
|
28
|
-
url: `${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${derivedAccountId}/objects/${data.objectTypeId}`,
|
|
29
|
-
}));
|
|
28
|
+
uiLogger.success(commands.customObject.subcommands.schema.subcommands.create.success.schemaViewable(`${getHubSpotWebsiteOrigin(getEnv() === 'qa' ? ENVIRONMENTS.QA : ENVIRONMENTS.PROD)}/contacts/${derivedAccountId}/objects/${data.objectTypeId}`));
|
|
30
29
|
}
|
|
31
30
|
catch (e) {
|
|
32
31
|
logError(e, { accountId: derivedAccountId });
|
|
33
|
-
|
|
34
|
-
definition: path,
|
|
35
|
-
}));
|
|
32
|
+
uiLogger.error(commands.customObject.subcommands.schema.subcommands.create.errors.creationFailed(path));
|
|
36
33
|
}
|
|
37
34
|
}
|
|
38
35
|
function schemaCreateBuilder(yargs) {
|
|
39
36
|
yargs.option('path', {
|
|
40
|
-
describe:
|
|
37
|
+
describe: commands.customObject.subcommands.schema.subcommands.create.options
|
|
38
|
+
.definition.describe,
|
|
41
39
|
type: 'string',
|
|
42
40
|
required: true,
|
|
43
41
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { fetchObjectSchemas, deleteObjectSchema, } from '@hubspot/local-dev-lib/api/customObjects';
|
|
2
2
|
import { EXIT_CODES } from '../../../lib/enums/exitCodes.js';
|
|
3
3
|
import { confirmPrompt, listPrompt } from '../../../lib/prompts/promptUtils.js';
|
|
4
|
-
import {
|
|
4
|
+
import { uiLogger } from '../../../lib/ui/logger.js';
|
|
5
5
|
import { trackCommandUsage } from '../../../lib/usageTracking.js';
|
|
6
|
-
import {
|
|
6
|
+
import { commands } from '../../../lang/en.js';
|
|
7
7
|
import { logError } from '../../../lib/errorHandlers/index.js';
|
|
8
8
|
import { makeYargsBuilder } from '../../../lib/yargsUtils.js';
|
|
9
9
|
const command = 'delete [name]';
|
|
10
|
-
const describe =
|
|
10
|
+
const describe = commands.customObject.subcommands.schema.subcommands.delete.describe;
|
|
11
11
|
async function handler(args) {
|
|
12
12
|
const { name: providedName, force, derivedAccountId } = args;
|
|
13
13
|
trackCommandUsage('custom-object-schema-delete', {}, derivedAccountId);
|
|
@@ -18,41 +18,41 @@ async function handler(args) {
|
|
|
18
18
|
name =
|
|
19
19
|
providedName && typeof providedName === 'string'
|
|
20
20
|
? providedName
|
|
21
|
-
: await listPrompt(
|
|
21
|
+
: await listPrompt(commands.customObject.subcommands.schema.subcommands.delete
|
|
22
|
+
.selectSchema, {
|
|
22
23
|
choices: schemaNames,
|
|
23
24
|
});
|
|
24
25
|
const shouldDelete = force ||
|
|
25
|
-
(await confirmPrompt(
|
|
26
|
+
(await confirmPrompt(commands.customObject.subcommands.schema.subcommands.delete.confirmDelete(name)));
|
|
26
27
|
if (!shouldDelete) {
|
|
27
|
-
|
|
28
|
+
uiLogger.info(commands.customObject.subcommands.schema.subcommands.delete.deleteCancelled(name));
|
|
28
29
|
return process.exit(EXIT_CODES.SUCCESS);
|
|
29
30
|
}
|
|
30
31
|
await deleteObjectSchema(derivedAccountId, name);
|
|
31
|
-
|
|
32
|
-
name,
|
|
33
|
-
}));
|
|
32
|
+
uiLogger.success(commands.customObject.subcommands.schema.subcommands.delete.success.delete(name));
|
|
34
33
|
}
|
|
35
34
|
catch (e) {
|
|
36
35
|
logError(e);
|
|
37
|
-
|
|
38
|
-
name: name || '',
|
|
39
|
-
}));
|
|
36
|
+
uiLogger.error(commands.customObject.subcommands.schema.subcommands.delete.errors.delete(name || ''));
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
function schemaDeleteBuilder(yargs) {
|
|
43
40
|
yargs
|
|
44
41
|
.example([
|
|
45
42
|
[
|
|
46
|
-
'$0 schema delete schemaName',
|
|
47
|
-
|
|
43
|
+
'$0 custom-object schema delete schemaName',
|
|
44
|
+
commands.customObject.subcommands.schema.subcommands.delete.examples
|
|
45
|
+
.default,
|
|
48
46
|
],
|
|
49
47
|
])
|
|
50
48
|
.positional('name', {
|
|
51
|
-
describe:
|
|
49
|
+
describe: commands.customObject.subcommands.schema.subcommands.delete.positionals
|
|
50
|
+
.name.describe,
|
|
52
51
|
type: 'string',
|
|
53
52
|
})
|
|
54
53
|
.option('force', {
|
|
55
|
-
describe:
|
|
54
|
+
describe: commands.customObject.subcommands.schema.subcommands.delete.options
|
|
55
|
+
.force.describe,
|
|
56
56
|
type: 'boolean',
|
|
57
57
|
});
|
|
58
58
|
return yargs;
|