@hubspot/cli 7.7.0-experimental.3 → 7.7.2-experimental.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +96 -94
- package/commands/account/auth.js +51 -82
- package/commands/account.js +0 -2
- package/commands/app.js +0 -2
- package/commands/auth.js +2 -17
- package/commands/cms.js +0 -2
- package/commands/completion.js +0 -2
- package/commands/config/migrate.js +17 -36
- package/commands/config.js +0 -2
- package/commands/create.js +0 -2
- package/commands/customObject.js +0 -2
- package/commands/doctor.js +0 -2
- package/commands/feedback.js +0 -2
- package/commands/filemanager.js +0 -2
- package/commands/function.js +0 -2
- package/commands/hubdb.js +0 -2
- package/commands/init.js +1 -4
- package/commands/lint.js +0 -2
- package/commands/list.js +0 -2
- package/commands/module/marketplace-validate.js +6 -8
- package/commands/module.js +2 -1
- package/commands/mv.js +0 -2
- package/commands/open.js +0 -2
- package/commands/project/add.d.ts +5 -2
- package/commands/project/add.js +43 -80
- package/commands/project/create.d.ts +2 -8
- package/commands/project/create.js +84 -55
- package/commands/project/dev/deprecatedFlow.d.ts +8 -2
- package/commands/project/dev/deprecatedFlow.js +9 -1
- package/commands/project/dev/index.js +59 -34
- package/commands/project/dev/unifiedFlow.d.ts +10 -2
- package/commands/project/dev/unifiedFlow.js +28 -41
- package/commands/project.js +0 -2
- package/commands/remove.js +6 -14
- package/commands/sandbox.js +0 -2
- package/commands/secret.js +0 -2
- package/commands/theme/generate-selectors.js +7 -10
- package/commands/theme/marketplace-validate.js +6 -8
- package/commands/theme/preview.js +17 -18
- package/commands/theme.js +2 -4
- package/commands/upload.js +26 -65
- package/commands/watch.js +20 -32
- package/lang/en.d.ts +154 -95
- package/lang/en.js +156 -100
- package/lang/en.lyaml +3 -186
- package/lib/accountTypes.js +1 -3
- package/lib/commonOpts.d.ts +1 -3
- package/lib/commonOpts.js +1 -1
- package/lib/configMigrate.d.ts +2 -2
- package/lib/configMigrate.js +34 -69
- package/lib/constants.d.ts +23 -5
- package/lib/constants.js +24 -6
- package/lib/generateSelectors.js +3 -5
- package/lib/marketplaceValidate.d.ts +12 -2
- package/lib/marketplaceValidate.js +22 -29
- package/lib/middleware/configMiddleware.js +1 -0
- package/lib/middleware/fireAlarmMiddleware.d.ts +2 -2
- package/lib/middleware/fireAlarmMiddleware.js +5 -3
- package/lib/projects/add/legacyAddComponent.d.ts +5 -0
- package/lib/projects/add/legacyAddComponent.js +48 -0
- package/lib/projects/add/v3AddComponent.d.ts +8 -0
- package/lib/projects/add/v3AddComponent.js +85 -0
- package/lib/projects/components.d.ts +2 -0
- package/lib/projects/components.js +82 -0
- package/lib/projects/create/index.d.ts +23 -0
- package/lib/projects/create/index.js +33 -0
- package/lib/projects/create/legacy.d.ts +6 -0
- package/lib/projects/{create.js → create/legacy.js} +20 -11
- package/lib/projects/create/v3.d.ts +27 -0
- package/lib/projects/create/v3.js +158 -0
- package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -2
- package/lib/projects/localDev/AppDevModeInterface.js +38 -8
- package/lib/projects/localDev/LocalDevProcess.d.ts +12 -5
- package/lib/projects/localDev/LocalDevProcess.js +47 -17
- package/lib/projects/localDev/LocalDevState.d.ts +16 -3
- package/lib/projects/localDev/LocalDevState.js +43 -2
- package/lib/projects/localDev/LocalDevWatcher.js +3 -6
- package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -0
- package/lib/projects/localDev/LocalDevWebsocketServer.js +48 -9
- package/lib/projects/upload.js +6 -0
- package/lib/prompts/createProjectPrompt.d.ts +14 -5
- package/lib/prompts/createProjectPrompt.js +36 -13
- package/lib/prompts/projectAddPrompt.d.ts +5 -1
- package/lib/prompts/projectAddPrompt.js +35 -7
- package/lib/prompts/promptUtils.d.ts +0 -1
- package/lib/prompts/promptUtils.js +0 -2
- package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
- package/package.json +7 -6
- package/types/LocalDev.d.ts +11 -1
- package/types/Projects.d.ts +19 -2
- package/types/Yargs.d.ts +2 -0
- package/commands/testAccount/create.d.ts +0 -7
- package/commands/testAccount/create.js +0 -118
- package/commands/testAccount/delete.d.ts +0 -6
- package/commands/testAccount/delete.js +0 -42
- package/commands/testAccount.d.ts +0 -3
- package/commands/testAccount.js +0 -27
- package/lib/projects/create.d.ts +0 -5
package/commands/customObject.js
CHANGED
package/commands/doctor.js
CHANGED
package/commands/feedback.js
CHANGED
package/commands/filemanager.js
CHANGED
package/commands/function.js
CHANGED
package/commands/hubdb.js
CHANGED
package/commands/init.js
CHANGED
|
@@ -76,9 +76,8 @@ async function handler(args) {
|
|
|
76
76
|
}
|
|
77
77
|
const env = args.qa ? environments_1.ENVIRONMENTS.QA : environments_1.ENVIRONMENTS.PROD;
|
|
78
78
|
if ((0, config_1.configFileExists)(true)) {
|
|
79
|
-
const globalConfigPath = (0, config_1.getConfigPath)('', true);
|
|
80
79
|
logger_1.logger.error((0, lang_1.i18n)(`commands.init.errors.globalConfigFileExists`, {
|
|
81
|
-
|
|
80
|
+
accountAuthCommand: (0, ui_1.uiCommandReference)('hs account auth'),
|
|
82
81
|
}));
|
|
83
82
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
84
83
|
}
|
|
@@ -188,5 +187,3 @@ const initCommand = {
|
|
|
188
187
|
builder,
|
|
189
188
|
};
|
|
190
189
|
exports.default = initCommand;
|
|
191
|
-
// TODO Remove this legacy export once we've migrated all commands to TS
|
|
192
|
-
module.exports = initCommand;
|
package/commands/lint.js
CHANGED
package/commands/list.js
CHANGED
|
@@ -6,32 +6,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
|
|
7
7
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
8
8
|
const marketplaceValidate_1 = require("../../lib/marketplaceValidate");
|
|
9
|
-
const
|
|
9
|
+
const en_1 = require("../../lang/en");
|
|
10
10
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
11
11
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
12
12
|
const command = 'marketplace-validate <src>';
|
|
13
|
-
const describe =
|
|
13
|
+
const describe = en_1.commands.module.subcommands.marketplaceValidate.describe;
|
|
14
14
|
async function handler(args) {
|
|
15
15
|
const { src, derivedAccountId } = args;
|
|
16
16
|
(0, usageTracking_1.trackCommandUsage)('validate', undefined, derivedAccountId);
|
|
17
17
|
SpinniesManager_1.default.init();
|
|
18
18
|
SpinniesManager_1.default.add('marketplaceValidation', {
|
|
19
|
-
text:
|
|
20
|
-
path: src,
|
|
21
|
-
}),
|
|
19
|
+
text: en_1.commands.module.subcommands.marketplaceValidate.logs.validatingModule(src),
|
|
22
20
|
});
|
|
23
21
|
const assetType = 'MODULE';
|
|
24
22
|
const validationId = await (0, marketplaceValidate_1.kickOffValidation)(derivedAccountId, assetType, src);
|
|
25
23
|
await (0, marketplaceValidate_1.pollForValidationFinish)(derivedAccountId, validationId);
|
|
26
24
|
SpinniesManager_1.default.remove('marketplaceValidation');
|
|
27
25
|
const validationResults = await (0, marketplaceValidate_1.fetchValidationResults)(derivedAccountId, validationId);
|
|
28
|
-
(0, marketplaceValidate_1.processValidationErrors)(
|
|
29
|
-
(0, marketplaceValidate_1.displayValidationResults)(
|
|
26
|
+
(0, marketplaceValidate_1.processValidationErrors)(en_1.commands.module.subcommands.marketplaceValidate.errors.invalidPath, validationResults);
|
|
27
|
+
(0, marketplaceValidate_1.displayValidationResults)(en_1.commands.module.subcommands.marketplaceValidate.results, validationResults);
|
|
30
28
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
31
29
|
}
|
|
32
30
|
function marketplaceValidateBuilder(yargs) {
|
|
33
31
|
yargs.positional('src', {
|
|
34
|
-
describe:
|
|
32
|
+
describe: en_1.commands.module.subcommands.marketplaceValidate.positionals.src,
|
|
35
33
|
type: 'string',
|
|
36
34
|
});
|
|
37
35
|
return yargs;
|
package/commands/module.js
CHANGED
|
@@ -4,9 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const marketplace_validate_1 = __importDefault(require("./module/marketplace-validate"));
|
|
7
|
+
const en_1 = require("../lang/en");
|
|
7
8
|
const yargsUtils_1 = require("../lib/yargsUtils");
|
|
8
9
|
const command = 'module';
|
|
9
|
-
const describe =
|
|
10
|
+
const describe = en_1.commands.module.describe;
|
|
10
11
|
function moduleBuilder(yargs) {
|
|
11
12
|
yargs.command(marketplace_validate_1.default).demandCommand(1, '');
|
|
12
13
|
return yargs;
|
package/commands/mv.js
CHANGED
package/commands/open.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { YargsCommandModule, CommonArgs } from '../../types/Yargs';
|
|
2
2
|
type ProjectAddArgs = CommonArgs & {
|
|
3
|
-
type
|
|
4
|
-
name
|
|
3
|
+
type?: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
features?: string[];
|
|
6
|
+
distribution?: string;
|
|
7
|
+
auth?: string;
|
|
5
8
|
};
|
|
6
9
|
declare const projectAddCommand: YargsCommandModule<unknown, ProjectAddArgs>;
|
|
7
10
|
export default projectAddCommand;
|
package/commands/project/add.js
CHANGED
|
@@ -1,87 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const path_1 = __importDefault(require("path"));
|
|
7
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
8
|
-
const github_1 = require("@hubspot/local-dev-lib/github");
|
|
9
3
|
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
10
4
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
11
|
-
const lang_1 = require("../../lib/lang");
|
|
12
|
-
const projectAddPrompt_1 = require("../../lib/prompts/projectAddPrompt");
|
|
13
5
|
const config_1 = require("../../lib/projects/config");
|
|
14
|
-
const create_1 = require("../../lib/projects/create");
|
|
15
|
-
const structure_1 = require("../../lib/projects/structure");
|
|
16
|
-
const Projects_1 = require("../../types/Projects");
|
|
17
6
|
const ui_1 = require("../../lib/ui");
|
|
18
|
-
const constants_1 = require("../../lib/constants");
|
|
19
7
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
20
8
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
9
|
+
const en_1 = require("../../lang/en");
|
|
10
|
+
const buildAndDeploy_1 = require("../../lib/projects/buildAndDeploy");
|
|
11
|
+
const legacyAddComponent_1 = require("../../lib/projects/add/legacyAddComponent");
|
|
12
|
+
const v3AddComponent_1 = require("../../lib/projects/add/v3AddComponent");
|
|
13
|
+
const constants_1 = require("../../lib/constants");
|
|
14
|
+
const logger_1 = require("../../lib/ui/logger");
|
|
21
15
|
const command = 'add';
|
|
22
|
-
const describe = (0, ui_1.uiBetaTag)(
|
|
16
|
+
const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.add.describe, false);
|
|
23
17
|
async function handler(args) {
|
|
24
|
-
const { derivedAccountId } = args;
|
|
25
|
-
(0, usageTracking_1.trackCommandUsage)('project-add', undefined, derivedAccountId);
|
|
26
|
-
const { projectConfig, projectDir } = await (0, config_1.getProjectConfig)();
|
|
27
|
-
if (!projectDir || !projectConfig) {
|
|
28
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.locationInProject`));
|
|
29
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
30
|
-
}
|
|
31
|
-
// We currently only support adding private apps to projects
|
|
32
|
-
let projectContainsPublicApp = false;
|
|
33
|
-
try {
|
|
34
|
-
const components = await (0, structure_1.findProjectComponents)(projectDir);
|
|
35
|
-
projectContainsPublicApp = components.some(c => c.type === Projects_1.ComponentTypes.PublicApp);
|
|
36
|
-
}
|
|
37
|
-
catch (err) {
|
|
38
|
-
(0, errorHandlers_1.debugError)(err);
|
|
39
|
-
}
|
|
40
|
-
if (projectContainsPublicApp) {
|
|
41
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.projectContainsPublicApp`));
|
|
42
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
43
|
-
}
|
|
44
|
-
logger_1.logger.log('');
|
|
45
|
-
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.add.creatingComponent`, {
|
|
46
|
-
projectName: projectConfig.name,
|
|
47
|
-
}));
|
|
48
|
-
logger_1.logger.log('');
|
|
49
|
-
let latestRepoReleaseTag;
|
|
50
18
|
try {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
19
|
+
const { derivedAccountId } = args;
|
|
20
|
+
(0, usageTracking_1.trackCommandUsage)('project-add', undefined, derivedAccountId);
|
|
21
|
+
const { projectConfig, projectDir } = await (0, config_1.getProjectConfig)();
|
|
22
|
+
if (!projectDir || !projectConfig) {
|
|
23
|
+
logger_1.uiLogger.error(en_1.commands.project.add.error.locationInProject);
|
|
24
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
25
|
+
}
|
|
26
|
+
const isV3ProjectCreate = (0, buildAndDeploy_1.useV3Api)(projectConfig.platformVersion);
|
|
27
|
+
if (isV3ProjectCreate) {
|
|
28
|
+
await (0, v3AddComponent_1.v3AddComponent)(args, projectDir, projectConfig);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await (0, legacyAddComponent_1.legacyAddComponent)(args, projectDir, projectConfig);
|
|
55
32
|
}
|
|
56
33
|
}
|
|
57
|
-
catch (
|
|
58
|
-
(0, errorHandlers_1.
|
|
59
|
-
}
|
|
60
|
-
if (!latestRepoReleaseTag) {
|
|
61
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
|
|
62
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
63
|
-
}
|
|
64
|
-
const components = await (0, create_1.getProjectComponentListFromRepo)(latestRepoReleaseTag);
|
|
65
|
-
if (!components.length) {
|
|
66
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
|
|
67
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
68
|
-
}
|
|
69
|
-
const projectAddPromptResponse = await (0, projectAddPrompt_1.projectAddPrompt)(components, args);
|
|
70
|
-
try {
|
|
71
|
-
const componentPath = path_1.default.join(projectDir, projectConfig.srcDir, projectAddPromptResponse.componentTemplate.insertPath, projectAddPromptResponse.name);
|
|
72
|
-
await (0, github_1.cloneGithubRepo)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH, componentPath, {
|
|
73
|
-
sourceDir: projectAddPromptResponse.componentTemplate.path,
|
|
74
|
-
tag: latestRepoReleaseTag,
|
|
75
|
-
hideLogs: true,
|
|
76
|
-
});
|
|
77
|
-
logger_1.logger.log('');
|
|
78
|
-
logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.add.success`, {
|
|
79
|
-
componentName: projectAddPromptResponse.name,
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
catch (error) {
|
|
83
|
-
(0, errorHandlers_1.debugError)(error);
|
|
84
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToDownloadComponent`));
|
|
34
|
+
catch (e) {
|
|
35
|
+
(0, errorHandlers_1.logError)(e);
|
|
85
36
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
86
37
|
}
|
|
87
38
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
@@ -89,24 +40,36 @@ async function handler(args) {
|
|
|
89
40
|
function projectAddBuilder(yargs) {
|
|
90
41
|
yargs.options({
|
|
91
42
|
type: {
|
|
92
|
-
describe:
|
|
43
|
+
describe: en_1.commands.project.add.options.type.describe,
|
|
93
44
|
type: 'string',
|
|
94
45
|
},
|
|
95
46
|
name: {
|
|
96
|
-
describe:
|
|
47
|
+
describe: en_1.commands.project.add.options.name.describe,
|
|
48
|
+
type: 'string',
|
|
49
|
+
},
|
|
50
|
+
distribution: {
|
|
51
|
+
describe: en_1.commands.project.add.options.distribution.describe,
|
|
52
|
+
hidden: true,
|
|
97
53
|
type: 'string',
|
|
54
|
+
choices: [constants_1.privateDistribution, constants_1.marketplaceDistribution],
|
|
55
|
+
},
|
|
56
|
+
auth: {
|
|
57
|
+
describe: en_1.commands.project.add.options.auth.describe,
|
|
58
|
+
hidden: true,
|
|
59
|
+
type: 'string',
|
|
60
|
+
choices: [constants_1.oAuth, constants_1.staticAuth],
|
|
61
|
+
},
|
|
62
|
+
features: {
|
|
63
|
+
describe: en_1.commands.project.add.options.features.describe,
|
|
64
|
+
hidden: true,
|
|
65
|
+
type: 'array',
|
|
98
66
|
},
|
|
99
67
|
});
|
|
100
|
-
yargs.example([
|
|
101
|
-
[
|
|
102
|
-
'$0 project add',
|
|
103
|
-
(0, lang_1.i18n)(`commands.project.subcommands.add.examples.default`),
|
|
104
|
-
],
|
|
105
|
-
]);
|
|
68
|
+
yargs.example([['$0 project add', en_1.commands.project.add.examples.default]]);
|
|
106
69
|
yargs.example([
|
|
107
70
|
[
|
|
108
71
|
'$0 project add --name="my-component" --type="components/example-app"',
|
|
109
|
-
|
|
72
|
+
en_1.commands.project.add.examples.withFlags,
|
|
110
73
|
],
|
|
111
74
|
]);
|
|
112
75
|
return yargs;
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
type ProjectCreateArgs = CommonArgs & ConfigArgs & AccountArgs & EnvironmentArgs & {
|
|
4
|
-
name?: string;
|
|
5
|
-
dest?: string;
|
|
6
|
-
templateSource?: RepoPath;
|
|
7
|
-
template?: string;
|
|
8
|
-
};
|
|
1
|
+
import { YargsCommandModule } from '../../types/Yargs';
|
|
2
|
+
import { ProjectCreateArgs } from '../../lib/projects/create';
|
|
9
3
|
declare const projectCreateCommand: YargsCommandModule<unknown, ProjectCreateArgs>;
|
|
10
4
|
export default projectCreateCommand;
|
|
@@ -5,71 +5,75 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const path_1 = __importDefault(require("path"));
|
|
7
7
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
10
8
|
const github_1 = require("@hubspot/local-dev-lib/github");
|
|
11
9
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
12
10
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
13
|
-
const createProjectPrompt_1 = require("../../lib/prompts/createProjectPrompt");
|
|
14
11
|
const config_1 = require("../../lib/projects/config");
|
|
15
|
-
const
|
|
16
|
-
const
|
|
12
|
+
const legacy_1 = require("../../lib/projects/create/legacy");
|
|
13
|
+
const v3_1 = require("../../lib/projects/create/v3");
|
|
17
14
|
const ui_1 = require("../../lib/ui");
|
|
18
15
|
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
19
16
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
20
17
|
const constants_1 = require("../../lib/constants");
|
|
21
18
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
22
|
-
const
|
|
23
|
-
const
|
|
19
|
+
const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
|
|
20
|
+
const en_1 = require("../../lang/en");
|
|
21
|
+
const logger_1 = require("../../lib/ui/logger");
|
|
22
|
+
const v3_2 = require("../../lib/projects/create/v3");
|
|
23
|
+
const create_1 = require("../../lib/projects/create");
|
|
24
|
+
const command = ['create', 'init'];
|
|
25
|
+
const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.create.describe, false);
|
|
26
|
+
const { v2023_2, v2025_1, v2025_2 } = projects_1.PLATFORM_VERSIONS;
|
|
24
27
|
async function handler(args) {
|
|
25
|
-
const { derivedAccountId } = args;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!templateSource) {
|
|
29
|
-
templateSource = constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
|
|
30
|
-
try {
|
|
31
|
-
const releaseData = await (0, github_1.fetchReleaseData)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
|
|
32
|
-
if (releaseData) {
|
|
33
|
-
latestRepoReleaseTag = releaseData.tag_name;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToFetchProjectList`));
|
|
38
|
-
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (!templateSource || !templateSource.includes('/')) {
|
|
42
|
-
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.invalidTemplateSource`));
|
|
28
|
+
const { derivedAccountId, platformVersion, templateSource } = args;
|
|
29
|
+
if (templateSource && !templateSource.includes('/')) {
|
|
30
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.invalidTemplateSource);
|
|
43
31
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
44
32
|
}
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
33
|
+
const repo = templateSource || constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
|
|
34
|
+
let handleResult;
|
|
35
|
+
try {
|
|
36
|
+
handleResult = await (0, create_1.handleProjectCreationFlow)(args);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
(0, errorHandlers_1.logError)(error);
|
|
48
40
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
49
41
|
}
|
|
50
|
-
const
|
|
42
|
+
const { authType, distribution, repoConfig, projectContents, createProjectPromptResponse, } = handleResult;
|
|
43
|
+
(0, usageTracking_1.trackCommandUsage)('project-create', {
|
|
44
|
+
type: createProjectPromptResponse.projectTemplate?.name ||
|
|
45
|
+
(createProjectPromptResponse.componentTemplates || [])
|
|
46
|
+
// @ts-expect-error
|
|
47
|
+
.map((item) => item.label)
|
|
48
|
+
.join(','),
|
|
49
|
+
}, derivedAccountId);
|
|
51
50
|
const projectDest = path_1.default.resolve((0, path_2.getCwd)(), createProjectPromptResponse.dest);
|
|
52
|
-
(0, usageTracking_1.trackCommandUsage)('project-create', { type: createProjectPromptResponse.projectTemplate.name }, derivedAccountId);
|
|
53
51
|
const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await (0, config_1.getProjectConfig)(projectDest);
|
|
54
52
|
// Exit if the target destination is within an existing project
|
|
55
53
|
if (existingProjectConfig &&
|
|
56
54
|
existingProjectDir &&
|
|
57
55
|
projectDest.startsWith(existingProjectDir)) {
|
|
58
|
-
logger_1.
|
|
59
|
-
projectDir: existingProjectDir,
|
|
60
|
-
}));
|
|
56
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.cannotNestProjects(existingProjectDir));
|
|
61
57
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
62
58
|
}
|
|
59
|
+
const components = (0, v3_2.generateComponentPaths)({
|
|
60
|
+
createProjectPromptResponse,
|
|
61
|
+
platformVersion,
|
|
62
|
+
repoConfig,
|
|
63
|
+
projectContents,
|
|
64
|
+
authType,
|
|
65
|
+
distribution,
|
|
66
|
+
});
|
|
63
67
|
try {
|
|
64
|
-
await (0, github_1.cloneGithubRepo)(
|
|
65
|
-
sourceDir: createProjectPromptResponse.projectTemplate
|
|
66
|
-
tag: latestRepoReleaseTag,
|
|
68
|
+
await (0, github_1.cloneGithubRepo)(repo, projectDest, {
|
|
69
|
+
sourceDir: createProjectPromptResponse.projectTemplate?.path || components,
|
|
67
70
|
hideLogs: true,
|
|
71
|
+
branch: 'main',
|
|
68
72
|
});
|
|
69
73
|
}
|
|
70
74
|
catch (err) {
|
|
71
75
|
(0, errorHandlers_1.debugError)(err);
|
|
72
|
-
logger_1.
|
|
76
|
+
logger_1.uiLogger.error(en_1.commands.project.create.errors.failedToDownloadProject);
|
|
73
77
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
74
78
|
}
|
|
75
79
|
const projectConfigPath = path_1.default.join(projectDest, constants_1.PROJECT_CONFIG_FILE);
|
|
@@ -79,17 +83,13 @@ async function handler(args) {
|
|
|
79
83
|
name: createProjectPromptResponse.name,
|
|
80
84
|
});
|
|
81
85
|
// If the template is 'no-template', we need to manually create a src directory
|
|
82
|
-
if (createProjectPromptResponse.projectTemplate
|
|
83
|
-
|
|
86
|
+
if (createProjectPromptResponse.projectTemplate?.name ===
|
|
87
|
+
legacy_1.EMPTY_PROJECT_TEMPLATE_NAME ||
|
|
88
|
+
projectContents === v3_1.EMPTY_PROJECT) {
|
|
84
89
|
fs_extra_1.default.ensureDirSync(path_1.default.join(projectDest, 'src'));
|
|
85
90
|
}
|
|
86
|
-
logger_1.
|
|
87
|
-
logger_1.
|
|
88
|
-
projectName: createProjectPromptResponse.name,
|
|
89
|
-
projectDest,
|
|
90
|
-
}));
|
|
91
|
-
logger_1.logger.log('');
|
|
92
|
-
logger_1.logger.log(chalk_1.default.bold((0, lang_1.i18n)(`commands.project.subcommands.create.logs.welcomeMessage`)));
|
|
91
|
+
logger_1.uiLogger.success(en_1.commands.project.create.logs.success(createProjectPromptResponse.name, projectDest));
|
|
92
|
+
logger_1.uiLogger.log(en_1.commands.project.create.logs.welcomeMessage);
|
|
93
93
|
(0, ui_1.uiFeatureHighlight)([
|
|
94
94
|
'projectCommandTip',
|
|
95
95
|
'projectUploadCommand',
|
|
@@ -104,32 +104,61 @@ async function handler(args) {
|
|
|
104
104
|
function projectCreateBuilder(yargs) {
|
|
105
105
|
yargs.options({
|
|
106
106
|
name: {
|
|
107
|
-
describe:
|
|
107
|
+
describe: en_1.commands.project.create.options.name.describe,
|
|
108
108
|
type: 'string',
|
|
109
109
|
},
|
|
110
110
|
dest: {
|
|
111
|
-
describe:
|
|
111
|
+
describe: en_1.commands.project.create.options.dest.describe,
|
|
112
112
|
type: 'string',
|
|
113
113
|
},
|
|
114
114
|
template: {
|
|
115
|
-
|
|
115
|
+
// TODO: When we release 2025.2 scaffolding, we need to point out this is only valid for 2025.1 prior
|
|
116
|
+
describe: en_1.commands.project.create.options.template.describe,
|
|
116
117
|
type: 'string',
|
|
117
118
|
},
|
|
118
119
|
'template-source': {
|
|
119
|
-
describe:
|
|
120
|
+
describe: en_1.commands.project.create.options.templateSource.describe,
|
|
121
|
+
type: 'string',
|
|
122
|
+
},
|
|
123
|
+
'platform-version': {
|
|
124
|
+
describe: en_1.commands.project.create.options.platformVersion.describe,
|
|
125
|
+
hidden: true,
|
|
120
126
|
type: 'string',
|
|
127
|
+
choices: [v2023_2, v2025_1, v2025_2],
|
|
128
|
+
default: v2023_2,
|
|
129
|
+
},
|
|
130
|
+
'project-base': {
|
|
131
|
+
describe: en_1.commands.project.create.options.projectBase.describe,
|
|
132
|
+
hidden: true,
|
|
133
|
+
type: 'string',
|
|
134
|
+
choices: [v3_1.EMPTY_PROJECT, v3_1.PROJECT_WITH_APP],
|
|
135
|
+
},
|
|
136
|
+
distribution: {
|
|
137
|
+
describe: en_1.commands.project.create.options.distribution.describe,
|
|
138
|
+
hidden: true,
|
|
139
|
+
type: 'string',
|
|
140
|
+
choices: [constants_1.privateDistribution, constants_1.marketplaceDistribution],
|
|
141
|
+
},
|
|
142
|
+
auth: {
|
|
143
|
+
describe: en_1.commands.project.create.options.auth.describe,
|
|
144
|
+
hidden: true,
|
|
145
|
+
type: 'string',
|
|
146
|
+
choices: [constants_1.oAuth, constants_1.staticAuth],
|
|
147
|
+
},
|
|
148
|
+
features: {
|
|
149
|
+
describe: en_1.commands.project.create.options.features.describe,
|
|
150
|
+
hidden: true,
|
|
151
|
+
type: 'array',
|
|
121
152
|
},
|
|
122
153
|
});
|
|
154
|
+
yargs.conflicts('template', 'features');
|
|
123
155
|
yargs.example([
|
|
124
|
-
[
|
|
125
|
-
'$0 project create',
|
|
126
|
-
(0, lang_1.i18n)(`commands.project.subcommands.create.examples.default`),
|
|
127
|
-
],
|
|
156
|
+
['$0 project create', en_1.commands.project.create.examples.default],
|
|
128
157
|
]);
|
|
129
158
|
yargs.example([
|
|
130
159
|
[
|
|
131
160
|
'$0 project create --template-source HubSpot/ui-extensions-examples',
|
|
132
|
-
|
|
161
|
+
en_1.commands.project.create.examples.templateSource,
|
|
133
162
|
],
|
|
134
163
|
]);
|
|
135
164
|
return yargs;
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { ArgumentsCamelCase } from 'yargs';
|
|
2
|
-
import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
|
|
3
2
|
import { ProjectConfig } from '../../../types/Projects';
|
|
4
3
|
import { ProjectDevArgs } from '../../../types/Yargs';
|
|
5
|
-
|
|
4
|
+
type DeprecatedProjectDevFlowArgs = {
|
|
5
|
+
args: ArgumentsCamelCase<ProjectDevArgs>;
|
|
6
|
+
accountId: number;
|
|
7
|
+
projectConfig: ProjectConfig;
|
|
8
|
+
projectDir: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }: DeprecatedProjectDevFlowArgs): Promise<void>;
|
|
11
|
+
export {};
|
|
@@ -18,7 +18,7 @@ const helpers_1 = require("../../../lib/projects/localDev/helpers");
|
|
|
18
18
|
const process_1 = require("../../../lib/process");
|
|
19
19
|
const accountTypes_1 = require("../../../lib/accountTypes");
|
|
20
20
|
const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
|
|
21
|
-
async function deprecatedProjectDevFlow(args,
|
|
21
|
+
async function deprecatedProjectDevFlow({ args, accountId, projectConfig, projectDir, }) {
|
|
22
22
|
const { providedAccountId, derivedAccountId } = args;
|
|
23
23
|
const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
|
|
24
24
|
const components = await (0, structure_1.findProjectComponents)(projectDir);
|
|
@@ -26,6 +26,14 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
26
26
|
const componentTypes = (0, structure_1.getProjectComponentTypes)(runnableComponents);
|
|
27
27
|
const hasPrivateApps = !!componentTypes[Projects_1.ComponentTypes.PrivateApp];
|
|
28
28
|
const hasPublicApps = !!componentTypes[Projects_1.ComponentTypes.PublicApp];
|
|
29
|
+
const accountConfig = (0, config_1.getAccountConfig)(accountId);
|
|
30
|
+
if (!accountConfig) {
|
|
31
|
+
logger_1.logger.error((0, lang_1.i18n)('commands.project.subcommands.dev.errors.noAccount', {
|
|
32
|
+
accountId: accountId,
|
|
33
|
+
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
34
|
+
}));
|
|
35
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
36
|
+
}
|
|
29
37
|
if (runnableComponents.length === 0) {
|
|
30
38
|
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.dev.errors.noRunnableComponents`, {
|
|
31
39
|
projectDir,
|