@hubspot/cli 7.4.4-experimental.0 → 7.4.5-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/migrate.d.ts +14 -4
- package/api/migrate.js +16 -2
- package/bin/cli.js +8 -183
- package/commands/account/auth.d.ts +10 -0
- package/commands/account/auth.js +188 -0
- package/commands/account/clean.js +38 -5
- package/commands/account/createOverride.d.ts +10 -0
- package/commands/account/createOverride.js +104 -0
- package/commands/account/info.js +38 -4
- package/commands/account/list.js +23 -5
- package/commands/account/remove.js +36 -2
- package/commands/account/removeOverride.d.ts +10 -0
- package/commands/account/removeOverride.js +76 -0
- package/commands/account/use.js +25 -3
- package/commands/account.js +7 -2
- package/commands/app/migrate.d.ts +4 -5
- package/commands/app/migrate.js +19 -8
- package/commands/auth.js +14 -11
- package/commands/cms/lighthouseScore.js +6 -2
- package/commands/cms.js +1 -2
- package/commands/completion.js +2 -3
- package/commands/config/migrate.d.ts +10 -0
- package/commands/config/migrate.js +84 -0
- package/commands/config/set.d.ts +10 -0
- package/commands/config/set.js +34 -29
- package/commands/config.d.ts +4 -1
- package/commands/config.js +45 -11
- package/commands/create/api-sample.js +3 -1
- package/commands/create/website-theme.js +1 -1
- package/commands/create.js +7 -8
- package/commands/customObject/schema/delete.js +4 -1
- package/commands/customObject/schema/fetch-all.js +2 -1
- package/commands/customObject/schema/fetch.js +2 -1
- package/commands/customObject.js +3 -4
- package/commands/doctor.js +5 -6
- package/commands/feedback.js +7 -8
- package/commands/fetch.js +6 -7
- package/commands/filemanager.js +1 -2
- package/commands/function.js +1 -2
- package/commands/hubdb/clear.js +5 -6
- package/commands/hubdb/create.js +7 -8
- package/commands/hubdb/delete.js +8 -7
- package/commands/hubdb/fetch.js +4 -5
- package/commands/hubdb.js +1 -2
- package/commands/init.js +18 -20
- package/commands/lint.js +3 -4
- package/commands/list.js +5 -6
- package/commands/logs.js +12 -13
- package/commands/module/marketplace-validate.js +5 -6
- package/commands/module.js +1 -3
- package/commands/mv.js +4 -5
- package/commands/open.js +4 -5
- package/commands/project/add.js +19 -15
- package/commands/project/cloneApp.d.ts +5 -1
- package/commands/project/cloneApp.js +25 -20
- package/commands/project/create.js +19 -15
- package/commands/project/deploy.js +19 -17
- package/commands/project/dev/deprecatedFlow.js +32 -25
- package/commands/project/dev/index.js +15 -11
- package/commands/project/dev/unifiedFlow.js +10 -11
- package/commands/project/download.js +10 -11
- package/commands/project/installDeps.d.ts +9 -1
- package/commands/project/installDeps.js +46 -31
- package/commands/project/listBuilds.js +18 -14
- package/commands/project/logs.d.ts +13 -1
- package/commands/project/logs.js +72 -63
- package/commands/project/migrate.d.ts +11 -0
- package/commands/project/migrate.js +67 -0
- package/commands/project/migrateApp.d.ts +4 -4
- package/commands/project/migrateApp.js +7 -5
- package/commands/project/open.js +15 -8
- package/commands/project/upload.d.ts +12 -0
- package/commands/project/upload.js +69 -50
- package/commands/project/watch.js +25 -7
- package/commands/project.js +3 -2
- package/commands/remove.js +7 -5
- package/commands/sandbox/create.js +10 -11
- package/commands/sandbox/delete.js +18 -19
- package/commands/sandbox.js +1 -2
- package/commands/secret/addSecret.js +5 -6
- package/commands/secret/deleteSecret.js +12 -9
- package/commands/secret/listSecret.js +3 -4
- package/commands/secret/updateSecret.js +9 -8
- package/commands/secret.js +1 -2
- package/commands/theme/generate-selectors.js +5 -6
- package/commands/theme/marketplace-validate.js +5 -6
- package/commands/theme/preview.js +16 -16
- package/commands/theme.js +1 -2
- package/commands/upload.js +23 -24
- package/commands/watch.js +18 -19
- package/lang/en.d.ts +2797 -0
- package/lang/en.js +2652 -3300
- package/lang/en.lyaml +97 -43
- package/lib/accountTypes.d.ts +1 -0
- package/lib/accountTypes.js +12 -0
- package/lib/app/migrate.d.ts +10 -4
- package/lib/app/migrate.js +188 -92
- package/lib/app/migrate_legacy.d.ts +2 -2
- package/lib/app/migrate_legacy.js +10 -7
- package/lib/buildAccount.d.ts +1 -2
- package/lib/buildAccount.js +7 -5
- package/lib/commonOpts.d.ts +2 -3
- package/lib/commonOpts.js +12 -2
- package/lib/configMigrate.d.ts +2 -0
- package/lib/configMigrate.js +104 -0
- package/lib/constants.d.ts +4 -0
- package/lib/constants.js +5 -1
- package/lib/dependencyManagement.js +2 -2
- package/lib/doctor/Diagnosis.d.ts +1 -2
- package/lib/doctor/Diagnosis.js +10 -6
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +10 -9
- package/lib/doctor/Doctor.d.ts +1 -0
- package/lib/doctor/Doctor.js +18 -0
- package/lib/hasFeature.d.ts +3 -1
- package/lib/middleware/__test__/configMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/configMiddleware.test.js +194 -0
- package/lib/middleware/__test__/gitMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/gitMiddleware.test.js +76 -0
- package/lib/middleware/__test__/notificationsMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/notificationsMiddleware.test.js +10 -0
- package/lib/middleware/__test__/requestMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/requestMiddleware.test.js +20 -0
- package/lib/middleware/__test__/utils.test.d.ts +1 -0
- package/lib/middleware/__test__/utils.test.js +53 -0
- package/lib/middleware/__test__/yargsChecksMiddleware.test.d.ts +1 -0
- package/lib/middleware/__test__/yargsChecksMiddleware.test.js +81 -0
- package/lib/middleware/configMiddleware.d.ts +13 -0
- package/lib/middleware/configMiddleware.js +116 -0
- package/lib/middleware/fireAlarmMiddleware.d.ts +4 -0
- package/lib/middleware/fireAlarmMiddleware.js +137 -0
- package/lib/middleware/gitMiddleware.d.ts +2 -0
- package/lib/middleware/gitMiddleware.js +14 -0
- package/lib/middleware/notificationsMiddleware.d.ts +1 -0
- package/lib/middleware/notificationsMiddleware.js +38 -0
- package/lib/middleware/requestMiddleware.d.ts +1 -0
- package/lib/middleware/requestMiddleware.js +11 -0
- package/lib/middleware/utils.d.ts +8 -0
- package/lib/middleware/utils.js +17 -0
- package/lib/middleware/yargsChecksMiddleware.d.ts +4 -0
- package/lib/middleware/yargsChecksMiddleware.js +24 -0
- package/lib/projects/ProjectLogsManager.d.ts +1 -1
- package/lib/projects/ProjectLogsManager.js +15 -20
- package/lib/projects/buildAndDeploy.js +15 -26
- package/lib/projects/config.d.ts +9 -0
- package/lib/projects/config.js +79 -0
- package/lib/projects/create.js +4 -5
- package/lib/projects/ensureProjectExists.d.ts +11 -0
- package/lib/projects/ensureProjectExists.js +97 -0
- package/lib/{DevServerManager.d.ts → projects/localDev/DevServerManager.d.ts} +1 -1
- package/lib/{DevServerManager.js → projects/localDev/DevServerManager.js} +5 -6
- package/lib/{DevServerManagerV2.d.ts → projects/localDev/DevServerManagerV2.d.ts} +1 -1
- package/lib/{DevServerManagerV2.js → projects/localDev/DevServerManagerV2.js} +3 -4
- package/lib/{LocalDevManager.d.ts → projects/localDev/LocalDevManager.d.ts} +1 -1
- package/lib/{LocalDevManager.js → projects/localDev/LocalDevManager.js} +42 -76
- package/lib/{LocalDevManagerV2.d.ts → projects/localDev/LocalDevManagerV2.d.ts} +2 -2
- package/lib/{LocalDevManagerV2.js → projects/localDev/LocalDevManagerV2.js} +37 -70
- package/lib/{localDev.d.ts → projects/localDev/helpers.d.ts} +4 -3
- package/lib/{localDev.js → projects/localDev/helpers.js} +72 -99
- package/lib/projects/ui.d.ts +1 -0
- package/lib/projects/ui.js +15 -0
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +9 -30
- package/lib/projects/urls.d.ts +1 -0
- package/lib/projects/urls.js +6 -0
- package/lib/projects/watch.js +18 -15
- package/lib/prompts/projectNamePrompt.js +2 -2
- package/lib/prompts/promptUtils.d.ts +1 -1
- package/lib/ui/SpinniesManager.d.ts +1 -1
- package/lib/ui/index.d.ts +1 -0
- package/lib/ui/index.js +5 -0
- package/lib/ui/spinniesUtils.d.ts +5 -5
- package/package.json +7 -6
- package/types/Yargs.d.ts +0 -10
- package/lib/projects/index.d.ts +0 -20
- package/lib/projects/index.js +0 -194
package/commands/project/add.js
CHANGED
|
@@ -12,7 +12,7 @@ const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
|
12
12
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
13
13
|
const lang_1 = require("../../lib/lang");
|
|
14
14
|
const projectAddPrompt_1 = require("../../lib/prompts/projectAddPrompt");
|
|
15
|
-
const
|
|
15
|
+
const config_1 = require("../../lib/projects/config");
|
|
16
16
|
const create_1 = require("../../lib/projects/create");
|
|
17
17
|
const structure_1 = require("../../lib/projects/structure");
|
|
18
18
|
const Projects_1 = require("../../types/Projects");
|
|
@@ -20,15 +20,14 @@ const ui_1 = require("../../lib/ui");
|
|
|
20
20
|
const constants_1 = require("../../lib/constants");
|
|
21
21
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
22
22
|
const yargsUtils_1 = require("../../lib/yargsUtils");
|
|
23
|
-
const i18nKey = 'commands.project.subcommands.add';
|
|
24
23
|
exports.command = 'add';
|
|
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.add.describe`), false);
|
|
26
25
|
async function handler(args) {
|
|
27
26
|
const { derivedAccountId } = args;
|
|
28
27
|
(0, usageTracking_1.trackCommandUsage)('project-add', undefined, derivedAccountId);
|
|
29
|
-
const { projectConfig, projectDir } = await (0,
|
|
28
|
+
const { projectConfig, projectDir } = await (0, config_1.getProjectConfig)();
|
|
30
29
|
if (!projectDir || !projectConfig) {
|
|
31
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
30
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.locationInProject`));
|
|
32
31
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
33
32
|
}
|
|
34
33
|
// We currently only support adding private apps to projects
|
|
@@ -41,11 +40,11 @@ async function handler(args) {
|
|
|
41
40
|
(0, errorHandlers_1.debugError)(err);
|
|
42
41
|
}
|
|
43
42
|
if (projectContainsPublicApp) {
|
|
44
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
43
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.projectContainsPublicApp`));
|
|
45
44
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
46
45
|
}
|
|
47
46
|
logger_1.logger.log('');
|
|
48
|
-
logger_1.logger.log((0, lang_1.i18n)(
|
|
47
|
+
logger_1.logger.log((0, lang_1.i18n)(`commands.project.subcommands.add.creatingComponent`, {
|
|
49
48
|
projectName: projectConfig.name,
|
|
50
49
|
}));
|
|
51
50
|
logger_1.logger.log('');
|
|
@@ -61,12 +60,12 @@ async function handler(args) {
|
|
|
61
60
|
(0, errorHandlers_1.debugError)(err);
|
|
62
61
|
}
|
|
63
62
|
if (!latestRepoReleaseTag) {
|
|
64
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
63
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
|
|
65
64
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
66
65
|
}
|
|
67
66
|
const components = await (0, create_1.getProjectComponentListFromRepo)(latestRepoReleaseTag);
|
|
68
67
|
if (!components.length) {
|
|
69
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
68
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToFetchComponentList`));
|
|
70
69
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
71
70
|
}
|
|
72
71
|
const projectAddPromptResponse = await (0, projectAddPrompt_1.projectAddPrompt)(components, args);
|
|
@@ -78,13 +77,13 @@ async function handler(args) {
|
|
|
78
77
|
hideLogs: true,
|
|
79
78
|
});
|
|
80
79
|
logger_1.logger.log('');
|
|
81
|
-
logger_1.logger.success((0, lang_1.i18n)(
|
|
80
|
+
logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.add.success`, {
|
|
82
81
|
componentName: projectAddPromptResponse.name,
|
|
83
82
|
}));
|
|
84
83
|
}
|
|
85
84
|
catch (error) {
|
|
86
85
|
(0, errorHandlers_1.debugError)(error);
|
|
87
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
86
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.add.error.failedToDownloadComponent`));
|
|
88
87
|
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
89
88
|
}
|
|
90
89
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
@@ -92,19 +91,24 @@ async function handler(args) {
|
|
|
92
91
|
function projectAddBuilder(yargs) {
|
|
93
92
|
yargs.options({
|
|
94
93
|
type: {
|
|
95
|
-
describe: (0, lang_1.i18n)(
|
|
94
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.add.options.type.describe`),
|
|
96
95
|
type: 'string',
|
|
97
96
|
},
|
|
98
97
|
name: {
|
|
99
|
-
describe: (0, lang_1.i18n)(
|
|
98
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.add.options.name.describe`),
|
|
100
99
|
type: 'string',
|
|
101
100
|
},
|
|
102
101
|
});
|
|
103
|
-
yargs.example([
|
|
102
|
+
yargs.example([
|
|
103
|
+
[
|
|
104
|
+
'$0 project add',
|
|
105
|
+
(0, lang_1.i18n)(`commands.project.subcommands.add.examples.default`),
|
|
106
|
+
],
|
|
107
|
+
]);
|
|
104
108
|
yargs.example([
|
|
105
109
|
[
|
|
106
110
|
'$0 project add --name="my-component" --type="components/example-app"',
|
|
107
|
-
(0, lang_1.i18n)(
|
|
111
|
+
(0, lang_1.i18n)(`commands.project.subcommands.add.examples.withFlags`),
|
|
108
112
|
],
|
|
109
113
|
]);
|
|
110
114
|
return yargs;
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { ArgumentsCamelCase, Argv, CommandModule } from 'yargs';
|
|
2
|
-
import {
|
|
2
|
+
import { AccountArgs, CommonArgs, ConfigArgs, EnvironmentArgs } from '../../types/Yargs';
|
|
3
3
|
export declare const command = "clone-app";
|
|
4
4
|
export declare const describe: string | undefined;
|
|
5
5
|
export declare const deprecated = true;
|
|
6
|
+
export type CloneAppArgs = ConfigArgs & EnvironmentArgs & AccountArgs & CommonArgs & {
|
|
7
|
+
dest: string;
|
|
8
|
+
appId: number;
|
|
9
|
+
};
|
|
6
10
|
export declare const handler: (options: ArgumentsCamelCase<CloneAppArgs>) => Promise<never>;
|
|
7
11
|
export declare const builder: (yargs: Argv) => Argv<CloneAppArgs>;
|
|
8
12
|
declare const cloneAppCommand: CommandModule<unknown, CloneAppArgs>;
|
|
@@ -17,29 +17,29 @@ const ui_2 = require("../../lib/ui");
|
|
|
17
17
|
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
18
18
|
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
19
19
|
const accountTypes_1 = require("../../lib/accountTypes");
|
|
20
|
-
const
|
|
20
|
+
const config_1 = require("../../lib/projects/config");
|
|
21
21
|
const constants_1 = require("../../lib/constants");
|
|
22
|
-
const
|
|
22
|
+
const projects_1 = require("@hubspot/local-dev-lib/api/projects");
|
|
23
23
|
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
24
24
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
25
25
|
const archive_1 = require("@hubspot/local-dev-lib/archive");
|
|
26
|
-
const
|
|
26
|
+
const config_2 = require("@hubspot/local-dev-lib/config");
|
|
27
27
|
const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
|
|
28
28
|
const migrate_1 = require("../../lib/app/migrate");
|
|
29
|
-
const i18nKey = 'commands.project.subcommands.cloneApp';
|
|
30
29
|
exports.command = 'clone-app';
|
|
31
|
-
exports.describe = (0, ui_1.uiDeprecatedTag)((0, lang_1.i18n)(
|
|
30
|
+
exports.describe = (0, ui_1.uiDeprecatedTag)((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.describe`), false);
|
|
32
31
|
exports.deprecated = true;
|
|
33
32
|
const handler = async (options) => {
|
|
34
33
|
const { derivedAccountId } = options;
|
|
35
34
|
await (0, usageTracking_1.trackCommandUsage)('clone-app', {}, derivedAccountId);
|
|
36
|
-
const accountConfig = (0,
|
|
35
|
+
const accountConfig = (0, config_2.getAccountConfig)(derivedAccountId);
|
|
37
36
|
const accountName = (0, ui_2.uiAccountDescription)(derivedAccountId);
|
|
38
37
|
if (!accountConfig) {
|
|
39
38
|
throw new Error((0, lang_1.i18n)(`commands.projects.subcommands.cloneApp.errors.noAccountConfig`));
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
const defaultAccountIsUnified = await (0, accountTypes_1.isUnifiedAccount)(accountConfig);
|
|
41
|
+
if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig) && !defaultAccountIsUnified) {
|
|
42
|
+
(0, migrate_1.logInvalidAccountError)();
|
|
43
43
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
44
44
|
}
|
|
45
45
|
let appId;
|
|
@@ -67,17 +67,17 @@ const handler = async (options) => {
|
|
|
67
67
|
try {
|
|
68
68
|
SpinniesManager_1.default.init();
|
|
69
69
|
SpinniesManager_1.default.add('cloneApp', {
|
|
70
|
-
text: (0, lang_1.i18n)(
|
|
70
|
+
text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.inProgress`),
|
|
71
71
|
});
|
|
72
|
-
const { data: { exportId }, } = await (0,
|
|
73
|
-
const { status } = await (0, polling_1.poll)(() => (0,
|
|
72
|
+
const { data: { exportId }, } = await (0, projects_1.cloneApp)(derivedAccountId, appId);
|
|
73
|
+
const { status } = await (0, polling_1.poll)(() => (0, projects_1.checkCloneStatus)(derivedAccountId, exportId));
|
|
74
74
|
if (status === 'SUCCESS') {
|
|
75
75
|
// Ensure correct project folder structure exists
|
|
76
76
|
const baseDestPath = path_1.default.resolve((0, path_2.getCwd)(), projectDest);
|
|
77
77
|
const absoluteDestPath = path_1.default.resolve(baseDestPath, 'src', 'app');
|
|
78
78
|
fs_1.default.mkdirSync(absoluteDestPath, { recursive: true });
|
|
79
79
|
// Extract zipped app files and place them in correct directory
|
|
80
|
-
const { data: zippedApp } = await (0,
|
|
80
|
+
const { data: zippedApp } = await (0, projects_1.downloadClonedProject)(derivedAccountId, exportId);
|
|
81
81
|
await (0, archive_1.extractZipArchive)(zippedApp, (0, path_2.sanitizeFileName)(projectName), absoluteDestPath, {
|
|
82
82
|
includesRootDir: true,
|
|
83
83
|
hideLogs: true,
|
|
@@ -89,17 +89,19 @@ const handler = async (options) => {
|
|
|
89
89
|
srcDir: 'src',
|
|
90
90
|
platformVersion: '2023.2',
|
|
91
91
|
};
|
|
92
|
-
const success = (0,
|
|
92
|
+
const success = (0, config_1.writeProjectConfig)(configPath, configContent);
|
|
93
93
|
SpinniesManager_1.default.succeed('cloneApp', {
|
|
94
|
-
text: (0, lang_1.i18n)(
|
|
94
|
+
text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.done`),
|
|
95
95
|
succeedColor: 'white',
|
|
96
96
|
});
|
|
97
97
|
if (!success) {
|
|
98
|
-
logger_1.logger.error((0, lang_1.i18n)(
|
|
98
|
+
logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.errors.couldNotWriteConfigPath`), configPath);
|
|
99
99
|
}
|
|
100
100
|
logger_1.logger.log('');
|
|
101
101
|
(0, ui_2.uiLine)();
|
|
102
|
-
logger_1.logger.success((0, lang_1.i18n)(
|
|
102
|
+
logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.success`, {
|
|
103
|
+
dest: projectDest,
|
|
104
|
+
}));
|
|
103
105
|
logger_1.logger.log('');
|
|
104
106
|
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
105
107
|
}
|
|
@@ -107,7 +109,7 @@ const handler = async (options) => {
|
|
|
107
109
|
catch (error) {
|
|
108
110
|
await (0, usageTracking_1.trackCommandMetadataUsage)('clone-app', { successful: false }, derivedAccountId);
|
|
109
111
|
SpinniesManager_1.default.fail('cloneApp', {
|
|
110
|
-
text: (0, lang_1.i18n)(
|
|
112
|
+
text: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.cloneStatus.failure`),
|
|
111
113
|
failColor: 'white',
|
|
112
114
|
});
|
|
113
115
|
// Migrations endpoints return a response object with an errors property. The errors property contains an array of errors.
|
|
@@ -128,16 +130,19 @@ exports.handler = handler;
|
|
|
128
130
|
const builder = (yargs) => {
|
|
129
131
|
yargs.options({
|
|
130
132
|
dest: {
|
|
131
|
-
describe: (0, lang_1.i18n)(
|
|
133
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.options.dest.describe`),
|
|
132
134
|
type: 'string',
|
|
133
135
|
},
|
|
134
136
|
'app-id': {
|
|
135
|
-
describe: (0, lang_1.i18n)(
|
|
137
|
+
describe: (0, lang_1.i18n)(`commands.project.subcommands.cloneApp.options.appId.describe`),
|
|
136
138
|
type: 'number',
|
|
137
139
|
},
|
|
138
140
|
});
|
|
139
141
|
yargs.example([
|
|
140
|
-
[
|
|
142
|
+
[
|
|
143
|
+
'$0 project clone-app',
|
|
144
|
+
(0, lang_1.i18n)(`commands.project.subcommands.cloneApp.examples.default`),
|
|
145
|
+
],
|
|
141
146
|
]);
|
|
142
147
|
(0, commonOpts_1.addConfigOptions)(yargs);
|
|
143
148
|
(0, commonOpts_1.addAccountOptions)(yargs);
|
|
@@ -10,16 +10,15 @@ const { getCwd } = require('@hubspot/local-dev-lib/path');
|
|
|
10
10
|
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
11
11
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
12
12
|
const { createProjectPrompt, } = require('../../lib/prompts/createProjectPrompt');
|
|
13
|
-
const { writeProjectConfig, getProjectConfig } = require('../../lib/projects');
|
|
13
|
+
const { writeProjectConfig, getProjectConfig, } = require('../../lib/projects/config');
|
|
14
14
|
const { getProjectTemplateListFromRepo, EMPTY_PROJECT_TEMPLATE_NAME, } = require('../../lib/projects/create');
|
|
15
15
|
const { i18n } = require('../../lib/lang');
|
|
16
16
|
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);
|
|
@@ -13,7 +13,7 @@ const index_1 = require("@hubspot/local-dev-lib/errors/index");
|
|
|
13
13
|
const buildAndDeploy_1 = require("../../lib/projects/buildAndDeploy");
|
|
14
14
|
const usageTracking_1 = require("../../lib/usageTracking");
|
|
15
15
|
const index_2 = require("../../lib/errorHandlers/index");
|
|
16
|
-
const
|
|
16
|
+
const config_2 = require("../../lib/projects/config");
|
|
17
17
|
const buildAndDeploy_2 = require("../../lib/projects/buildAndDeploy");
|
|
18
18
|
const urls_1 = require("../../lib/projects/urls");
|
|
19
19
|
const projectNamePrompt_1 = require("../../lib/prompts/projectNamePrompt");
|
|
@@ -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;
|
|
@@ -48,7 +47,7 @@ async function handler(args) {
|
|
|
48
47
|
const { project: projectOption, buildId: buildIdOption } = args;
|
|
49
48
|
const accountType = accountConfig && accountConfig.accountType;
|
|
50
49
|
(0, usageTracking_1.trackCommandUsage)('project-deploy', accountType ? { type: accountType } : undefined, derivedAccountId);
|
|
51
|
-
const { projectConfig } = await (0,
|
|
50
|
+
const { projectConfig } = await (0, config_2.getProjectConfig)();
|
|
52
51
|
let projectName = projectOption;
|
|
53
52
|
if (!projectOption && projectConfig) {
|
|
54
53
|
projectName = projectConfig.name;
|
|
@@ -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;
|
|
@@ -13,12 +13,11 @@ const lang_1 = require("../../../lib/lang");
|
|
|
13
13
|
const exitCodes_1 = require("../../../lib/enums/exitCodes");
|
|
14
14
|
const ui_1 = require("../../../lib/ui");
|
|
15
15
|
const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
|
|
16
|
-
const LocalDevManager_1 = __importDefault(require("../../../lib/LocalDevManager"));
|
|
17
|
-
const
|
|
16
|
+
const LocalDevManager_1 = __importDefault(require("../../../lib/projects/localDev/LocalDevManager"));
|
|
17
|
+
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
|
-
const
|
|
21
|
-
const i18nKey = 'commands.project.subcommands.dev';
|
|
20
|
+
const ensureProjectExists_1 = require("../../../lib/projects/ensureProjectExists");
|
|
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, helpers_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;
|
|
@@ -54,20 +62,20 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
54
62
|
let targetTestingAccountId = providedAccountId ? derivedAccountId : null;
|
|
55
63
|
// Check that the default account or flag option is valid for the type of app in this project
|
|
56
64
|
if (providedAccountId) {
|
|
57
|
-
(0,
|
|
65
|
+
(0, helpers_1.checkIfAccountFlagIsSupported)(accountConfig, hasPublicApps);
|
|
58
66
|
if (hasPublicApps) {
|
|
59
67
|
targetProjectAccountId = accountConfig.parentAccountId || null;
|
|
60
68
|
}
|
|
61
69
|
}
|
|
62
70
|
else {
|
|
63
|
-
(0,
|
|
71
|
+
await (0, helpers_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
|
-
await (0,
|
|
76
|
+
await (0, helpers_1.confirmDefaultAccountIsTarget)(accountConfig);
|
|
69
77
|
if (hasPublicApps) {
|
|
70
|
-
(0,
|
|
78
|
+
(0, helpers_1.checkIfParentAccountIsAuthed)(accountConfig);
|
|
71
79
|
targetProjectAccountId = accountConfig.parentAccountId || null;
|
|
72
80
|
}
|
|
73
81
|
else {
|
|
@@ -77,34 +85,33 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
77
85
|
let createNewSandbox = false;
|
|
78
86
|
let createNewDeveloperTestAccount = false;
|
|
79
87
|
if (!targetProjectAccountId) {
|
|
80
|
-
const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0,
|
|
88
|
+
const { targetAccountId, parentAccountId, createNestedAccount, notInConfigAccount, } = await (0, helpers_1.suggestRecommendedNestedAccount)(accounts, accountConfig, hasPublicApps);
|
|
81
89
|
targetProjectAccountId = hasPublicApps
|
|
82
90
|
? parentAccountId || null
|
|
83
91
|
: targetAccountId;
|
|
84
92
|
targetTestingAccountId = targetAccountId;
|
|
85
93
|
// Only used for developer test accounts that are not yet in the config
|
|
86
94
|
if (notInConfigAccount) {
|
|
87
|
-
await (0,
|
|
95
|
+
await (0, helpers_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
|
-
targetProjectAccountId = await (0,
|
|
101
|
+
targetProjectAccountId = await (0, helpers_1.createSandboxForLocalDev)(derivedAccountId, accountConfig, env);
|
|
95
102
|
// We will be running our tests against this new sandbox account
|
|
96
103
|
targetTestingAccountId = targetProjectAccountId;
|
|
97
104
|
}
|
|
98
105
|
if (createNewDeveloperTestAccount) {
|
|
99
|
-
targetTestingAccountId = await (0,
|
|
106
|
+
targetTestingAccountId = await (0, helpers_1.createDeveloperTestAccountForLocalDev)(derivedAccountId, accountConfig, env);
|
|
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
|
|
107
|
-
let { projectExists, project } = await (0,
|
|
114
|
+
let { projectExists, project } = await (0, ensureProjectExists_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
|
|
108
115
|
allowCreate: false,
|
|
109
116
|
noLogs: true,
|
|
110
117
|
withPolling: createNewSandbox,
|
|
@@ -117,8 +124,8 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
117
124
|
isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
|
|
118
125
|
}
|
|
119
126
|
else {
|
|
120
|
-
project = await (0,
|
|
121
|
-
deployedBuild = await (0,
|
|
127
|
+
project = await (0, helpers_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, createNewSandbox, hasPublicApps);
|
|
128
|
+
deployedBuild = await (0, helpers_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId);
|
|
122
129
|
}
|
|
123
130
|
const LocalDev = new LocalDevManager_1.default({
|
|
124
131
|
runnableComponents,
|