@hubspot/cli 7.4.3-beta.0 → 7.4.4-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 +11 -2
- package/api/migrate.js +4 -0
- package/commands/app/migrate.d.ts +0 -1
- package/commands/app/migrate.js +15 -9
- package/commands/auth.js +9 -10
- package/commands/cms.js +1 -2
- package/commands/completion.js +2 -3
- package/commands/create.js +7 -8
- 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 +10 -11
- 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 +17 -13
- package/commands/project/cloneApp.js +16 -11
- package/commands/project/create.js +18 -14
- package/commands/project/deploy.js +17 -15
- package/commands/project/dev/deprecatedFlow.js +19 -12
- package/commands/project/dev/index.js +11 -7
- package/commands/project/dev/unifiedFlow.js +2 -3
- package/commands/project/download.js +8 -9
- package/commands/project/installDeps.js +9 -7
- package/commands/project/listBuilds.js +15 -11
- package/commands/project/logs.js +19 -17
- package/commands/project/migrate.js +20 -7
- package/commands/project/migrateApp.d.ts +1 -1
- package/commands/project/migrateApp.js +7 -5
- package/commands/project/open.js +11 -5
- package/commands/project/upload.js +12 -8
- package/commands/project/watch.js +10 -6
- package/commands/project.js +1 -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 +14 -14
- package/commands/theme.js +1 -2
- package/commands/upload.js +23 -24
- package/commands/watch.js +18 -19
- package/lang/en.d.ts +2212 -2262
- package/lang/en.js +14 -14
- package/lang/en.lyaml +3 -9
- package/lib/accountTypes.d.ts +1 -0
- package/lib/accountTypes.js +12 -0
- package/lib/app/migrate.js +53 -21
- package/lib/app/migrate_legacy.js +2 -1
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +5 -1
- package/lib/hasFeature.d.ts +3 -1
- package/lib/localDev.d.ts +2 -1
- package/lib/localDev.js +21 -3
- package/package.json +1 -1
|
@@ -17,9 +17,8 @@ const { uiBetaTag, uiFeatureHighlight } = require('../../lib/ui');
|
|
|
17
17
|
const { debugError } = require('../../lib/errorHandlers');
|
|
18
18
|
const { EXIT_CODES } = require('../../lib/enums/exitCodes');
|
|
19
19
|
const { PROJECT_CONFIG_FILE, HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, DEFAULT_PROJECT_TEMPLATE_BRANCH, } = require('../../lib/constants');
|
|
20
|
-
const i18nKey = 'commands.project.subcommands.create';
|
|
21
20
|
exports.command = 'create';
|
|
22
|
-
exports.describe = uiBetaTag(i18n(
|
|
21
|
+
exports.describe = uiBetaTag(i18n(`commands.project.subcommands.create.describe`), false);
|
|
23
22
|
exports.handler = async (options) => {
|
|
24
23
|
const { derivedAccountId } = options;
|
|
25
24
|
let latestRepoReleaseTag;
|
|
@@ -33,13 +32,13 @@ exports.handler = async (options) => {
|
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
catch (err) {
|
|
36
|
-
logger.error(i18n(
|
|
35
|
+
logger.error(i18n(`commands.project.subcommands.create.error.failedToFetchProjectList`));
|
|
37
36
|
process.exit(EXIT_CODES.ERROR);
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
const projectTemplates = await getProjectTemplateListFromRepo(templateSource, latestRepoReleaseTag || DEFAULT_PROJECT_TEMPLATE_BRANCH);
|
|
41
40
|
if (!projectTemplates.length) {
|
|
42
|
-
logger.error(i18n(
|
|
41
|
+
logger.error(i18n(`commands.project.subcommands.create.error.failedToFetchProjectList`));
|
|
43
42
|
process.exit(EXIT_CODES.ERROR);
|
|
44
43
|
}
|
|
45
44
|
const createProjectPromptResponse = await createProjectPrompt(options, projectTemplates);
|
|
@@ -48,7 +47,7 @@ exports.handler = async (options) => {
|
|
|
48
47
|
const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await getProjectConfig(projectDest);
|
|
49
48
|
// Exit if the target destination is within an existing project
|
|
50
49
|
if (existingProjectConfig && projectDest.startsWith(existingProjectDir)) {
|
|
51
|
-
logger.error(i18n(
|
|
50
|
+
logger.error(i18n(`commands.project.subcommands.create.errors.cannotNestProjects`, {
|
|
52
51
|
projectDir: existingProjectDir,
|
|
53
52
|
}));
|
|
54
53
|
process.exit(EXIT_CODES.ERROR);
|
|
@@ -62,7 +61,7 @@ exports.handler = async (options) => {
|
|
|
62
61
|
}
|
|
63
62
|
catch (err) {
|
|
64
63
|
debugError(err);
|
|
65
|
-
logger.error(i18n(
|
|
64
|
+
logger.error(i18n(`commands.project.subcommands.create.errors.failedToDownloadProject`));
|
|
66
65
|
process.exit(EXIT_CODES.ERROR);
|
|
67
66
|
}
|
|
68
67
|
const projectConfigPath = path.join(projectDest, PROJECT_CONFIG_FILE);
|
|
@@ -77,12 +76,12 @@ exports.handler = async (options) => {
|
|
|
77
76
|
fs.ensureDirSync(path.join(projectDest, 'src'));
|
|
78
77
|
}
|
|
79
78
|
logger.log('');
|
|
80
|
-
logger.success(i18n(
|
|
79
|
+
logger.success(i18n(`commands.project.subcommands.create.logs.success`, {
|
|
81
80
|
projectName: createProjectPromptResponse.name,
|
|
82
81
|
projectDest,
|
|
83
82
|
}));
|
|
84
83
|
logger.log('');
|
|
85
|
-
logger.log(chalk.bold(i18n(
|
|
84
|
+
logger.log(chalk.bold(i18n(`commands.project.subcommands.create.logs.welcomeMessage`)));
|
|
86
85
|
uiFeatureHighlight([
|
|
87
86
|
'projectCommandTip',
|
|
88
87
|
'projectUploadCommand',
|
|
@@ -97,27 +96,32 @@ exports.handler = async (options) => {
|
|
|
97
96
|
exports.builder = yargs => {
|
|
98
97
|
yargs.options({
|
|
99
98
|
name: {
|
|
100
|
-
describe: i18n(
|
|
99
|
+
describe: i18n(`commands.project.subcommands.create.options.name.describe`),
|
|
101
100
|
type: 'string',
|
|
102
101
|
},
|
|
103
102
|
dest: {
|
|
104
|
-
describe: i18n(
|
|
103
|
+
describe: i18n(`commands.project.subcommands.create.options.dest.describe`),
|
|
105
104
|
type: 'string',
|
|
106
105
|
},
|
|
107
106
|
template: {
|
|
108
|
-
describe: i18n(
|
|
107
|
+
describe: i18n(`commands.project.subcommands.create.options.template.describe`),
|
|
109
108
|
type: 'string',
|
|
110
109
|
},
|
|
111
110
|
'template-source': {
|
|
112
|
-
describe: i18n(
|
|
111
|
+
describe: i18n(`commands.project.subcommands.create.options.templateSource.describe`),
|
|
113
112
|
type: 'string',
|
|
114
113
|
},
|
|
115
114
|
});
|
|
116
|
-
yargs.example([
|
|
115
|
+
yargs.example([
|
|
116
|
+
[
|
|
117
|
+
'$0 project create',
|
|
118
|
+
i18n(`commands.project.subcommands.create.examples.default`),
|
|
119
|
+
],
|
|
120
|
+
]);
|
|
117
121
|
yargs.example([
|
|
118
122
|
[
|
|
119
123
|
'$0 project create --template-source HubSpot/ui-extensions-examples',
|
|
120
|
-
i18n(
|
|
124
|
+
i18n(`commands.project.subcommands.create.examples.templateSource`),
|
|
121
125
|
],
|
|
122
126
|
]);
|
|
123
127
|
addConfigOptions(yargs);
|
|
@@ -23,21 +23,20 @@ const ui_1 = require("../../lib/ui");
|
|
|
23
23
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
24
24
|
const ui_2 = require("../../lib/ui");
|
|
25
25
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
26
|
-
const i18nKey = 'commands.project.subcommands.deploy';
|
|
27
26
|
exports.command = 'deploy';
|
|
28
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
27
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.deploy.describe`), false);
|
|
29
28
|
function validateBuildId(buildId, deployedBuildId, latestBuildId, projectName, accountId) {
|
|
30
29
|
if (Number(buildId) > latestBuildId) {
|
|
31
|
-
return (0, lang_1.i18n)(
|
|
30
|
+
return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildIdDoesNotExist`, {
|
|
32
31
|
buildId: buildId,
|
|
33
32
|
projectName: projectName,
|
|
34
|
-
linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
33
|
+
linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
36
|
if (Number(buildId) === deployedBuildId) {
|
|
38
|
-
return (0, lang_1.i18n)(
|
|
37
|
+
return (0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.buildAlreadyDeployed`, {
|
|
39
38
|
buildId: buildId,
|
|
40
|
-
linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
39
|
+
linkToProject: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.viewProjectsBuilds`), (0, urls_1.getProjectDetailUrl)(projectName, accountId)),
|
|
41
40
|
});
|
|
42
41
|
}
|
|
43
42
|
return true;
|
|
@@ -61,7 +60,7 @@ async function handler(args) {
|
|
|
61
60
|
try {
|
|
62
61
|
const { data: { latestBuild, deployedBuildId }, } = await (0, projects_1.fetchProject)(derivedAccountId, projectName);
|
|
63
62
|
if (!latestBuild || !latestBuild.buildId) {
|
|
64
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
63
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuilds`));
|
|
65
64
|
return process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
66
65
|
}
|
|
67
66
|
if (buildIdToDeploy) {
|
|
@@ -74,7 +73,7 @@ async function handler(args) {
|
|
|
74
73
|
else {
|
|
75
74
|
const deployBuildIdPromptResponse = await (0, promptUtils_1.promptUser)({
|
|
76
75
|
name: 'buildId',
|
|
77
|
-
message: (0, lang_1.i18n)(
|
|
76
|
+
message: (0, lang_1.i18n)(`commands.project.subcommands.deploy.deployBuildIdPrompt`),
|
|
78
77
|
default: latestBuild.buildId === deployedBuildId
|
|
79
78
|
? undefined
|
|
80
79
|
: latestBuild.buildId,
|
|
@@ -83,19 +82,19 @@ async function handler(args) {
|
|
|
83
82
|
buildIdToDeploy = deployBuildIdPromptResponse.buildId;
|
|
84
83
|
}
|
|
85
84
|
if (!buildIdToDeploy) {
|
|
86
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
85
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.noBuildId`));
|
|
87
86
|
return process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
88
87
|
}
|
|
89
88
|
const { data: deployResp } = await (0, projects_1.deployProject)(derivedAccountId, projectName, buildIdToDeploy, (0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion));
|
|
90
89
|
if (!deployResp) {
|
|
91
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
90
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.deploy`));
|
|
92
91
|
return process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
93
92
|
}
|
|
94
93
|
await (0, buildAndDeploy_2.pollDeployStatus)(derivedAccountId, projectName, Number(deployResp.id), buildIdToDeploy);
|
|
95
94
|
}
|
|
96
95
|
catch (e) {
|
|
97
96
|
if ((0, index_1.isHubSpotHttpError)(e) && e.status === 404) {
|
|
98
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
97
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.deploy.errors.projectNotFound`, {
|
|
99
98
|
projectName: chalk_1.default.bold(projectName),
|
|
100
99
|
accountIdentifier: (0, ui_2.uiAccountDescription)(derivedAccountId),
|
|
101
100
|
command: (0, ui_2.uiCommandReference)('hs project upload'),
|
|
@@ -116,20 +115,23 @@ async function handler(args) {
|
|
|
116
115
|
function projectDeployBuilder(yargs) {
|
|
117
116
|
yargs.options({
|
|
118
117
|
project: {
|
|
119
|
-
describe: (0, lang_1.i18n)(
|
|
118
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.project.describe`),
|
|
120
119
|
type: 'string',
|
|
121
120
|
},
|
|
122
121
|
build: {
|
|
123
122
|
alias: ['build-id'],
|
|
124
|
-
describe: (0, lang_1.i18n)(
|
|
123
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.deploy.options.build.describe`),
|
|
125
124
|
type: 'number',
|
|
126
125
|
},
|
|
127
126
|
});
|
|
128
127
|
yargs.example([
|
|
129
|
-
[
|
|
128
|
+
[
|
|
129
|
+
'$0 project deploy',
|
|
130
|
+
(0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.default`),
|
|
131
|
+
],
|
|
130
132
|
[
|
|
131
133
|
'$0 project deploy --project="my-project" --build=5',
|
|
132
|
-
(0, lang_1.i18n)(
|
|
134
|
+
(0, lang_1.i18n)(`commands.project.subcommands.deploy.examples.withOptions`),
|
|
133
135
|
],
|
|
134
136
|
]);
|
|
135
137
|
return yargs;
|
|
@@ -18,7 +18,6 @@ const localDev_1 = require("../../../lib/localDev");
|
|
|
18
18
|
const process_1 = require("../../../lib/process");
|
|
19
19
|
const accountTypes_1 = require("../../../lib/accountTypes");
|
|
20
20
|
const projects_1 = require("../../../lib/projects");
|
|
21
|
-
const i18nKey = 'commands.project.subcommands.dev';
|
|
22
21
|
async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
|
|
23
22
|
const { providedAccountId, derivedAccountId } = args;
|
|
24
23
|
const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
|
|
@@ -28,25 +27,34 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
28
27
|
const hasPrivateApps = !!componentTypes[Projects_1.ComponentTypes.PrivateApp];
|
|
29
28
|
const hasPublicApps = !!componentTypes[Projects_1.ComponentTypes.PublicApp];
|
|
30
29
|
if (runnableComponents.length === 0) {
|
|
31
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
30
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
|
|
32
31
|
projectDir,
|
|
33
32
|
command: (0, ui_1.uiCommandReference)('hs project add'),
|
|
34
33
|
}));
|
|
35
34
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
36
35
|
}
|
|
37
36
|
else if (hasPrivateApps && hasPublicApps) {
|
|
38
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
37
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.invalidProjectComponents`));
|
|
39
38
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
40
39
|
}
|
|
41
40
|
const accounts = (0, config_1.getConfigAccounts)();
|
|
42
41
|
if (!accounts) {
|
|
43
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
42
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccountsInConfig`, {
|
|
44
43
|
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
45
44
|
}));
|
|
46
45
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
let bypassRecommendedAccountPrompt = false;
|
|
48
|
+
if ((0, accountTypes_1.isDeveloperTestAccount)(accountConfig)) {
|
|
49
|
+
bypassRecommendedAccountPrompt = true;
|
|
50
|
+
}
|
|
51
|
+
else if (!hasPublicApps && (0, accountTypes_1.isSandbox)(accountConfig)) {
|
|
52
|
+
bypassRecommendedAccountPrompt = true;
|
|
53
|
+
}
|
|
54
|
+
else if (!hasPublicApps) {
|
|
55
|
+
const defaultAccountHasSandboxes = await (0, localDev_1.hasSandboxes)(accountConfig);
|
|
56
|
+
bypassRecommendedAccountPrompt = !defaultAccountHasSandboxes;
|
|
57
|
+
}
|
|
50
58
|
// targetProjectAccountId and targetTestingAccountId are set to null if --account flag is not provided.
|
|
51
59
|
// By setting them to null, we can later check if they need to be assigned based on the default account configuration and the type of app.
|
|
52
60
|
let targetProjectAccountId = providedAccountId ? derivedAccountId : null;
|
|
@@ -60,10 +68,10 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
else {
|
|
63
|
-
(0, localDev_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
|
|
71
|
+
await (0, localDev_1.checkIfDefaultAccountIsSupported)(accountConfig, hasPublicApps);
|
|
64
72
|
}
|
|
65
73
|
// The user is targeting an account type that we recommend developing on
|
|
66
|
-
if (!targetProjectAccountId &&
|
|
74
|
+
if (!targetProjectAccountId && bypassRecommendedAccountPrompt) {
|
|
67
75
|
targetTestingAccountId = derivedAccountId;
|
|
68
76
|
await (0, localDev_1.confirmDefaultAccountIsTarget)(accountConfig);
|
|
69
77
|
if (hasPublicApps) {
|
|
@@ -86,9 +94,8 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
86
94
|
if (notInConfigAccount) {
|
|
87
95
|
await (0, localDev_1.useExistingDevTestAccount)(env, notInConfigAccount);
|
|
88
96
|
}
|
|
89
|
-
createNewSandbox =
|
|
90
|
-
createNewDeveloperTestAccount =
|
|
91
|
-
(0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && createNestedAccount;
|
|
97
|
+
createNewSandbox = hasPrivateApps && createNestedAccount;
|
|
98
|
+
createNewDeveloperTestAccount = hasPublicApps && createNestedAccount;
|
|
92
99
|
}
|
|
93
100
|
if (createNewSandbox) {
|
|
94
101
|
targetProjectAccountId = await (0, localDev_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
|
|
@@ -100,7 +107,7 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
100
107
|
targetProjectAccountId = derivedAccountId;
|
|
101
108
|
}
|
|
102
109
|
if (!targetProjectAccountId || !targetTestingAccountId) {
|
|
103
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
110
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
|
|
104
111
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
105
112
|
}
|
|
106
113
|
// eslint-disable-next-line prefer-const
|
|
@@ -14,25 +14,24 @@ const ui_1 = require("../../../lib/ui");
|
|
|
14
14
|
const deprecatedFlow_1 = require("./deprecatedFlow");
|
|
15
15
|
const unifiedFlow_1 = require("./unifiedFlow");
|
|
16
16
|
const buildAndDeploy_1 = require("../../../lib/projects/buildAndDeploy");
|
|
17
|
-
const i18nKey = 'commands.project.subcommands.dev';
|
|
18
17
|
exports.command = 'dev';
|
|
19
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
18
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.dev.describe`), false);
|
|
20
19
|
async function handler(args) {
|
|
21
20
|
const { derivedAccountId } = args;
|
|
22
21
|
const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
|
|
23
22
|
(0, usageTracking_1.trackCommandUsage)('project-dev', {}, derivedAccountId);
|
|
24
23
|
const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
|
|
25
|
-
(0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
26
|
-
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
24
|
+
(0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.dev.logs.betaMessage`));
|
|
25
|
+
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.dev.logs.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
|
|
27
26
|
if (!projectConfig || !projectDir) {
|
|
28
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
27
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noProjectConfig`, {
|
|
29
28
|
accountId: derivedAccountId,
|
|
30
29
|
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
31
30
|
}));
|
|
32
31
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
33
32
|
}
|
|
34
33
|
if (!accountConfig) {
|
|
35
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
34
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noAccount`));
|
|
36
35
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
37
36
|
}
|
|
38
37
|
(0, projects_1.validateProjectConfig)(projectConfig, projectDir);
|
|
@@ -47,6 +46,11 @@ function builder(yargs) {
|
|
|
47
46
|
(0, commonOpts_1.addConfigOptions)(yargs);
|
|
48
47
|
(0, commonOpts_1.addAccountOptions)(yargs);
|
|
49
48
|
(0, commonOpts_1.addUseEnvironmentOptions)(yargs);
|
|
50
|
-
yargs.example([
|
|
49
|
+
yargs.example([
|
|
50
|
+
[
|
|
51
|
+
'$0 project dev',
|
|
52
|
+
(0, lang_1.i18n)(`commands.project.subcommands.dev.examples.default`),
|
|
53
|
+
],
|
|
54
|
+
]);
|
|
51
55
|
return yargs;
|
|
52
56
|
}
|
|
@@ -22,7 +22,6 @@ const process_1 = require("../../../lib/process");
|
|
|
22
22
|
const accountTypes_1 = require("../../../lib/accountTypes");
|
|
23
23
|
const ui_1 = require("../../../lib/ui");
|
|
24
24
|
const lang_1 = require("../../../lib/lang");
|
|
25
|
-
const i18nKey = 'commands.project.subcommands.dev';
|
|
26
25
|
async function unifiedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
|
|
27
26
|
logger_1.logger.log('Unified Apps Local Dev');
|
|
28
27
|
const targetProjectAccountId = args.derivedAccountId;
|
|
@@ -49,7 +48,7 @@ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, project
|
|
|
49
48
|
}
|
|
50
49
|
// @TODO Do we need to do more than this or leave it to the dev servers?
|
|
51
50
|
if (!Object.keys(projectNodes).length) {
|
|
52
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
51
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
|
|
53
52
|
projectDir,
|
|
54
53
|
command: (0, ui_1.uiCommandReference)('hs project add'),
|
|
55
54
|
}));
|
|
@@ -61,7 +60,7 @@ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, project
|
|
|
61
60
|
// For now, check if the account is either developer or standard
|
|
62
61
|
const derivedAccountIsRecommendedType = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) || (0, accountTypes_1.isStandardAccount)(accountConfig);
|
|
63
62
|
if (!derivedAccountIsRecommendedType) {
|
|
64
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
63
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.invalidUnifiedAppsAccount`), {
|
|
65
64
|
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
66
65
|
});
|
|
67
66
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
@@ -18,13 +18,12 @@ const ui_1 = require("../../lib/ui");
|
|
|
18
18
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
19
19
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
20
20
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
21
|
-
const i18nKey = 'commands.project.subcommands.download';
|
|
22
21
|
exports.command = 'download';
|
|
23
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
22
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.download.describe`), false);
|
|
24
23
|
async function handler(args) {
|
|
25
24
|
const { projectConfig } = await (0, projects_2.getProjectConfig)();
|
|
26
25
|
if (projectConfig) {
|
|
27
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
26
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.download.warnings.cannotDownloadWithinProject`));
|
|
28
27
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
29
28
|
}
|
|
30
29
|
const { dest, build, derivedAccountId } = args;
|
|
@@ -41,13 +40,13 @@ async function handler(args) {
|
|
|
41
40
|
}
|
|
42
41
|
}
|
|
43
42
|
if (!buildNumberToDownload) {
|
|
44
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
43
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.download.errors.noBuildIdToDownload`));
|
|
45
44
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
46
45
|
}
|
|
47
46
|
const absoluteDestPath = dest ? path_1.default.resolve((0, path_2.getCwd)(), dest) : (0, path_2.getCwd)();
|
|
48
47
|
const { data: zippedProject } = await (0, projects_1.downloadProject)(derivedAccountId, projectName, buildNumberToDownload);
|
|
49
48
|
await (0, archive_1.extractZipArchive)(zippedProject, (0, path_2.sanitizeFileName)(projectName), path_1.default.resolve(absoluteDestPath), { includesRootDir: false });
|
|
50
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
49
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.download.logs.downloadSucceeded`, {
|
|
51
50
|
buildId: buildNumberToDownload,
|
|
52
51
|
projectName,
|
|
53
52
|
}));
|
|
@@ -64,15 +63,15 @@ async function handler(args) {
|
|
|
64
63
|
function projectDownloadBuilder(yargs) {
|
|
65
64
|
yargs.options({
|
|
66
65
|
project: {
|
|
67
|
-
describe: (0, lang_1.i18n)(
|
|
66
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.project.describe`),
|
|
68
67
|
type: 'string',
|
|
69
68
|
},
|
|
70
69
|
dest: {
|
|
71
|
-
describe: (0, lang_1.i18n)(
|
|
70
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.dest.describe`),
|
|
72
71
|
type: 'string',
|
|
73
72
|
},
|
|
74
73
|
build: {
|
|
75
|
-
describe: (0, lang_1.i18n)(
|
|
74
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.download.options.build.describe`),
|
|
76
75
|
alias: ['build-id'],
|
|
77
76
|
type: 'number',
|
|
78
77
|
},
|
|
@@ -80,7 +79,7 @@ function projectDownloadBuilder(yargs) {
|
|
|
80
79
|
yargs.example([
|
|
81
80
|
[
|
|
82
81
|
'$0 project download --project=myProject --dest=myProjectFolder',
|
|
83
|
-
(0, lang_1.i18n)(
|
|
82
|
+
(0, lang_1.i18n)(`commands.project.subcommands.download.examples.default`),
|
|
84
83
|
],
|
|
85
84
|
]);
|
|
86
85
|
return yargs;
|
|
@@ -16,16 +16,15 @@ const usageTracking_1 = require("../../lib/usageTracking");
|
|
|
16
16
|
const ui_1 = require("../../lib/ui");
|
|
17
17
|
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
18
18
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
19
|
-
const i18nKey = `commands.project.subcommands.installDeps`;
|
|
20
19
|
exports.command = 'install-deps [packages..]';
|
|
21
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
20
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.installDeps.help.describe`), false);
|
|
22
21
|
async function handler(args) {
|
|
23
22
|
const { derivedAccountId, packages } = args;
|
|
24
23
|
try {
|
|
25
24
|
(0, usageTracking_1.trackCommandUsage)('project-install-deps', undefined, derivedAccountId);
|
|
26
25
|
const projectConfig = await (0, projects_1.getProjectConfig)();
|
|
27
26
|
if (!projectConfig || !projectConfig.projectDir) {
|
|
28
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
27
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.installDeps.noProjectConfig`));
|
|
29
28
|
return process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
30
29
|
}
|
|
31
30
|
const { projectDir } = projectConfig;
|
|
@@ -36,14 +35,14 @@ async function handler(args) {
|
|
|
36
35
|
name: 'selectedInstallLocations',
|
|
37
36
|
type: 'checkbox',
|
|
38
37
|
when: () => packages && packages.length > 0,
|
|
39
|
-
message: (0, lang_1.i18n)(
|
|
38
|
+
message: (0, lang_1.i18n)(`commands.project.subcommands.installDeps.installLocationPrompt`),
|
|
40
39
|
choices: installLocations.map(dir => ({
|
|
41
40
|
name: path_1.default.relative(projectDir, dir),
|
|
42
41
|
value: dir,
|
|
43
42
|
})),
|
|
44
43
|
validate: choices => {
|
|
45
44
|
if (choices === undefined || choices.length === 0) {
|
|
46
|
-
return (0, lang_1.i18n)(
|
|
45
|
+
return (0, lang_1.i18n)(`commands.project.subcommands.installDeps.installLocationPromptRequired`);
|
|
47
46
|
}
|
|
48
47
|
return true;
|
|
49
48
|
},
|
|
@@ -65,10 +64,13 @@ async function handler(args) {
|
|
|
65
64
|
}
|
|
66
65
|
function projectInstallDepsBuilder(yargs) {
|
|
67
66
|
yargs.example([
|
|
68
|
-
[
|
|
67
|
+
[
|
|
68
|
+
'$0 project install-deps',
|
|
69
|
+
(0, lang_1.i18n)(`commands.project.subcommands.installDeps.help.installAppDepsExample`),
|
|
70
|
+
],
|
|
69
71
|
[
|
|
70
72
|
'$0 project install-deps dependency1 dependency2',
|
|
71
|
-
(0, lang_1.i18n)(
|
|
73
|
+
(0, lang_1.i18n)(`commands.project.subcommands.installDeps.help.addDepToSubComponentExample`),
|
|
72
74
|
],
|
|
73
75
|
]);
|
|
74
76
|
return yargs;
|
|
@@ -20,27 +20,26 @@ const usageTracking_1 = require("../../lib/usageTracking");
|
|
|
20
20
|
const lang_1 = require("../../lib/lang");
|
|
21
21
|
const index_2 = require("../../lib/errorHandlers/index");
|
|
22
22
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
23
|
-
const i18nKey = 'commands.project.subcommands.listBuilds';
|
|
24
23
|
exports.command = 'list-builds';
|
|
25
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
24
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.describe`), false);
|
|
26
25
|
async function fetchAndDisplayBuilds(accountId, project, options) {
|
|
27
26
|
const { data: { results, paging }, } = await (0, projects_1.fetchProjectBuilds)(accountId, project.name, options);
|
|
28
27
|
const currentDeploy = project.deployedBuildId;
|
|
29
28
|
if (options && options.after) {
|
|
30
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
29
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.logs.showingNextBuilds`, {
|
|
31
30
|
count: results.length,
|
|
32
31
|
projectName: project.name,
|
|
33
32
|
}));
|
|
34
33
|
}
|
|
35
34
|
else {
|
|
36
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
35
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.logs.showingRecentBuilds`, {
|
|
37
36
|
count: results.length,
|
|
38
37
|
projectName: project.name,
|
|
39
|
-
viewBuildsLink: (0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
38
|
+
viewBuildsLink: (0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.logs.viewAllBuildsLink`), (0, urls_1.getProjectDetailUrl)(project.name, accountId)),
|
|
40
39
|
}));
|
|
41
40
|
}
|
|
42
41
|
if (results.length === 0) {
|
|
43
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
42
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.errors.noBuilds`));
|
|
44
43
|
}
|
|
45
44
|
else {
|
|
46
45
|
const builds = results.map(build => {
|
|
@@ -70,7 +69,7 @@ async function fetchAndDisplayBuilds(accountId, project, options) {
|
|
|
70
69
|
if (paging && paging.next) {
|
|
71
70
|
await (0, promptUtils_1.promptUser)({
|
|
72
71
|
name: 'more',
|
|
73
|
-
message: (0, lang_1.i18n)(
|
|
72
|
+
message: (0, lang_1.i18n)(`commands.project.subcommands.listBuilds.continueOrExitPrompt`),
|
|
74
73
|
});
|
|
75
74
|
await fetchAndDisplayBuilds(accountId, project, {
|
|
76
75
|
limit: options.limit,
|
|
@@ -93,7 +92,9 @@ async function handler(args) {
|
|
|
93
92
|
}
|
|
94
93
|
catch (e) {
|
|
95
94
|
if ((0, index_1.isHubSpotHttpError)(e) && e.status === 404) {
|
|
96
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
95
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.listBuilds.errors.projectNotFound`, {
|
|
96
|
+
projectName,
|
|
97
|
+
}));
|
|
97
98
|
}
|
|
98
99
|
else {
|
|
99
100
|
(0, index_2.logError)(e, new index_2.ApiErrorContext({
|
|
@@ -110,16 +111,19 @@ function builder(yargs) {
|
|
|
110
111
|
(0, commonOpts_1.addUseEnvironmentOptions)(yargs);
|
|
111
112
|
yargs.options({
|
|
112
113
|
project: {
|
|
113
|
-
describe: (0, lang_1.i18n)(
|
|
114
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.listBuilds.options.project.describe`),
|
|
114
115
|
type: 'string',
|
|
115
116
|
},
|
|
116
117
|
limit: {
|
|
117
|
-
describe: (0, lang_1.i18n)(
|
|
118
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.listBuilds.options.limit.describe`),
|
|
118
119
|
type: 'string',
|
|
119
120
|
},
|
|
120
121
|
});
|
|
121
122
|
yargs.example([
|
|
122
|
-
[
|
|
123
|
+
[
|
|
124
|
+
'$0 project list-builds',
|
|
125
|
+
(0, lang_1.i18n)(`commands.project.subcommands.listBuilds.examples.default`),
|
|
126
|
+
],
|
|
123
127
|
]);
|
|
124
128
|
return yargs;
|
|
125
129
|
}
|
package/commands/project/logs.js
CHANGED
|
@@ -14,40 +14,39 @@ const lang_1 = require("../../lib/lang");
|
|
|
14
14
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
15
15
|
const ProjectLogsManager_1 = require("../../lib/projects/ProjectLogsManager");
|
|
16
16
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
17
|
-
const i18nKey = 'commands.project.subcommands.logs';
|
|
18
17
|
function getPrivateAppsUrl(accountId) {
|
|
19
18
|
const baseUrl = (0, urls_1.getHubSpotWebsiteOrigin)((0, config_1.getEnv)(accountId) === 'qa' ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD);
|
|
20
19
|
return `${baseUrl}/private-apps/${accountId}`;
|
|
21
20
|
}
|
|
22
21
|
function logTable(tableHeader, logsInfo) {
|
|
23
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
22
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.logs.logs.showingLogs`));
|
|
24
23
|
logger_1.logger.log((0, table_1.getTableContents)([tableHeader, logsInfo], { border: { bodyLeft: ' ' } }));
|
|
25
24
|
}
|
|
26
25
|
function logPreamble() {
|
|
27
26
|
if (ProjectLogsManager_1.ProjectLogsManager.isPublicFunction) {
|
|
28
27
|
logTable((0, table_1.getTableHeader)([
|
|
29
|
-
(0, lang_1.i18n)(
|
|
30
|
-
(0, lang_1.i18n)(
|
|
31
|
-
(0, lang_1.i18n)(
|
|
28
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.table.accountHeader`),
|
|
29
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.table.functionHeader`),
|
|
30
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.table.endpointHeader`),
|
|
32
31
|
]), [
|
|
33
32
|
ProjectLogsManager_1.ProjectLogsManager.accountId,
|
|
34
33
|
ProjectLogsManager_1.ProjectLogsManager.functionName,
|
|
35
34
|
ProjectLogsManager_1.ProjectLogsManager.endpointName,
|
|
36
35
|
]);
|
|
37
|
-
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
36
|
+
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.logs.logs.hubspotLogsDirectLink`), `${getPrivateAppsUrl(ProjectLogsManager_1.ProjectLogsManager.accountId)}/${ProjectLogsManager_1.ProjectLogsManager.appId}/logs/serverlessGatewayExecution?path=${ProjectLogsManager_1.ProjectLogsManager.endpointName}`));
|
|
38
37
|
}
|
|
39
38
|
else {
|
|
40
39
|
logTable((0, table_1.getTableHeader)([
|
|
41
|
-
(0, lang_1.i18n)(
|
|
42
|
-
(0, lang_1.i18n)(
|
|
40
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.table.accountHeader`),
|
|
41
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.table.functionHeader`),
|
|
43
42
|
]), [ProjectLogsManager_1.ProjectLogsManager.accountId, ProjectLogsManager_1.ProjectLogsManager.functionName]);
|
|
44
|
-
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(
|
|
43
|
+
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`commands.project.subcommands.logs.logs.hubspotLogsDirectLink`), `${getPrivateAppsUrl(ProjectLogsManager_1.ProjectLogsManager.accountId)}/${ProjectLogsManager_1.ProjectLogsManager.appId}/logs/crm?serverlessFunction=${ProjectLogsManager_1.ProjectLogsManager.functionName}`));
|
|
45
44
|
}
|
|
46
45
|
logger_1.logger.log();
|
|
47
46
|
(0, ui_1.uiLine)();
|
|
48
47
|
}
|
|
49
48
|
exports.command = 'logs';
|
|
50
|
-
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(
|
|
49
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.logs.describe`), false);
|
|
51
50
|
const handler = async (args) => {
|
|
52
51
|
const { derivedAccountId } = args;
|
|
53
52
|
(0, usageTracking_1.trackCommandUsage)('project-logs', undefined, derivedAccountId);
|
|
@@ -75,35 +74,38 @@ function projectLogsBuilder(yargs) {
|
|
|
75
74
|
yargs.options({
|
|
76
75
|
function: {
|
|
77
76
|
alias: 'function',
|
|
78
|
-
describe: (0, lang_1.i18n)(
|
|
77
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.logs.options.function.describe`),
|
|
79
78
|
requiresArg: true,
|
|
80
79
|
type: 'string',
|
|
81
80
|
},
|
|
82
81
|
latest: {
|
|
83
82
|
alias: 'l',
|
|
84
|
-
describe: (0, lang_1.i18n)(
|
|
83
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.logs.options.latest.describe`),
|
|
85
84
|
type: 'boolean',
|
|
86
85
|
},
|
|
87
86
|
compact: {
|
|
88
|
-
describe: (0, lang_1.i18n)(
|
|
87
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.logs.options.compact.describe`),
|
|
89
88
|
type: 'boolean',
|
|
90
89
|
},
|
|
91
90
|
tail: {
|
|
92
91
|
alias: ['t', 'follow'],
|
|
93
|
-
describe: (0, lang_1.i18n)(
|
|
92
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.logs.options.tail.describe`),
|
|
94
93
|
type: 'boolean',
|
|
95
94
|
},
|
|
96
95
|
limit: {
|
|
97
|
-
describe: (0, lang_1.i18n)(
|
|
96
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.logs.options.limit.describe`),
|
|
98
97
|
type: 'number',
|
|
99
98
|
},
|
|
100
99
|
});
|
|
101
100
|
yargs.conflicts('tail', 'limit');
|
|
102
101
|
yargs.example([
|
|
103
|
-
[
|
|
102
|
+
[
|
|
103
|
+
'$0 project logs',
|
|
104
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.examples.default`),
|
|
105
|
+
],
|
|
104
106
|
[
|
|
105
107
|
'$0 project logs --function=my-function',
|
|
106
|
-
(0, lang_1.i18n)(
|
|
108
|
+
(0, lang_1.i18n)(`commands.project.subcommands.logs.examples.withOptions`),
|
|
107
109
|
],
|
|
108
110
|
]);
|
|
109
111
|
return yargs;
|