@hubspot/cli 7.2.1-experimental.0 → 7.2.3-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 +2 -0
- package/commands/app/migrate.d.ts +6 -0
- package/commands/app/migrate.js +80 -0
- package/commands/app.d.ts +4 -0
- package/commands/app.js +47 -0
- package/commands/project/cloneApp.d.ts +5 -1
- package/commands/project/cloneApp.js +78 -75
- package/commands/project/{dev/index.d.ts → dev.d.ts} +3 -1
- package/commands/project/{dev/deprecatedFlow.js → dev.js} +44 -14
- package/commands/project/migrateApp.d.ts +6 -1
- package/commands/project/migrateApp.js +17 -184
- package/commands/project/upload.js +2 -7
- package/lang/en.lyaml +26 -4
- package/lib/app/migrate.d.ts +6 -0
- package/lib/app/migrate.js +277 -0
- package/lib/constants.d.ts +0 -12
- package/lib/constants.js +1 -13
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +0 -6
- package/lib/doctor/DiagnosticInfoBuilder.js +0 -5
- package/lib/doctor/Doctor.d.ts +0 -1
- package/lib/doctor/Doctor.js +0 -10
- package/lib/projects/structure.d.ts +0 -4
- package/lib/projects/structure.js +0 -9
- package/lib/projects/upload.d.ts +1 -1
- package/lib/projects/upload.js +2 -2
- package/lib/prompts/promptUtils.d.ts +3 -3
- package/lib/ui/index.d.ts +2 -2
- package/lib/ui/index.js +7 -4
- package/lib/usageTracking.d.ts +1 -0
- package/package.json +4 -4
- package/types/Prompts.d.ts +2 -2
- package/types/Yargs.d.ts +6 -1
- package/commands/project/dev/deprecatedFlow.d.ts +0 -5
- package/commands/project/dev/index.js +0 -52
- package/commands/project/dev/unifiedFlow.d.ts +0 -5
- package/commands/project/dev/unifiedFlow.js +0 -112
- package/lib/DevServerManagerV2.d.ts +0 -34
- package/lib/DevServerManagerV2.js +0 -85
- package/lib/LocalDevManagerV2.d.ts +0 -64
- package/lib/LocalDevManagerV2.js +0 -382
- package/types/ProjectComponents.d.ts +0 -38
- package/types/ProjectComponents.js +0 -3
package/bin/cli.js
CHANGED
|
@@ -43,6 +43,7 @@ const cmsCommand = require('../commands/cms');
|
|
|
43
43
|
const feedbackCommand = require('../commands/feedback');
|
|
44
44
|
const doctorCommand = require('../commands/doctor');
|
|
45
45
|
const completionCommand = require('../commands/completion');
|
|
46
|
+
const appCommand = require('../commands/app');
|
|
46
47
|
const notifier = updateNotifier({
|
|
47
48
|
pkg: { ...pkg, name: '@hubspot/cli' },
|
|
48
49
|
distTag: 'latest',
|
|
@@ -295,6 +296,7 @@ const argv = yargs
|
|
|
295
296
|
.command(feedbackCommand)
|
|
296
297
|
.command(doctorCommand)
|
|
297
298
|
.command(completionCommand)
|
|
299
|
+
.command(appCommand)
|
|
298
300
|
.help()
|
|
299
301
|
.alias('h', 'help')
|
|
300
302
|
.recommendCommands()
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ArgumentsCamelCase, Argv } from 'yargs';
|
|
2
|
+
import { MigrateAppOptions } from '../../types/Yargs';
|
|
3
|
+
export declare const command = "migrate";
|
|
4
|
+
export declare const describe: null;
|
|
5
|
+
export declare function handler(options: ArgumentsCamelCase<MigrateAppOptions>): Promise<void>;
|
|
6
|
+
export declare function builder(yargs: Argv): Promise<Argv<{}>>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.describe = exports.command = void 0;
|
|
4
|
+
exports.handler = handler;
|
|
5
|
+
exports.builder = builder;
|
|
6
|
+
const commonOpts_1 = require("../../lib/commonOpts");
|
|
7
|
+
const usageTracking_1 = require("../../lib/usageTracking");
|
|
8
|
+
const lang_1 = require("../../lib/lang");
|
|
9
|
+
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
10
|
+
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
11
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
12
|
+
const migrate_1 = require("../../lib/app/migrate");
|
|
13
|
+
const platformVersion_1 = require("@hubspot/local-dev-lib/constants/platformVersion");
|
|
14
|
+
const { v2023_2, v2025_2, unstable } = platformVersion_1.PLATFORM_VERSIONS;
|
|
15
|
+
const validMigrationTargets = [v2023_2, v2025_2, unstable];
|
|
16
|
+
const i18nKey = 'commands.project.subcommands.migrateApp';
|
|
17
|
+
exports.command = 'migrate';
|
|
18
|
+
exports.describe = null; // uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
19
|
+
async function handler(options) {
|
|
20
|
+
const { derivedAccountId, platformVersion } = options;
|
|
21
|
+
await (0, usageTracking_1.trackCommandUsage)('migrate-app', {}, derivedAccountId);
|
|
22
|
+
const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
|
|
23
|
+
if (!accountConfig) {
|
|
24
|
+
throw new Error('Account is not configured');
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
if (platformVersion === v2025_2 || platformVersion === unstable) {
|
|
28
|
+
await (0, migrate_1.migrateApp2025_2)(derivedAccountId, options);
|
|
29
|
+
}
|
|
30
|
+
else if (platformVersion === v2023_2) {
|
|
31
|
+
await (0, migrate_1.migrateApp2023_2)(derivedAccountId, options, accountConfig);
|
|
32
|
+
}
|
|
33
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('migrate-app', { status: 'SUCCESS' }, derivedAccountId);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error &&
|
|
37
|
+
typeof error === 'object' &&
|
|
38
|
+
'errors' in error &&
|
|
39
|
+
Array.isArray(error.errors)) {
|
|
40
|
+
error.errors.forEach(err => (0, errorHandlers_1.logError)(err));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
(0, errorHandlers_1.logError)(error, new errorHandlers_1.ApiErrorContext({ accountId: derivedAccountId }));
|
|
44
|
+
}
|
|
45
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('migrate-app', { status: 'FAILURE' }, derivedAccountId);
|
|
46
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
47
|
+
}
|
|
48
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('migrate-app', { status: 'SUCCESS' }, derivedAccountId);
|
|
49
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
50
|
+
}
|
|
51
|
+
async function builder(yargs) {
|
|
52
|
+
(0, commonOpts_1.addConfigOptions)(yargs);
|
|
53
|
+
(0, commonOpts_1.addAccountOptions)(yargs);
|
|
54
|
+
(0, commonOpts_1.addUseEnvironmentOptions)(yargs);
|
|
55
|
+
yargs.options({
|
|
56
|
+
name: {
|
|
57
|
+
describe: (0, lang_1.i18n)(`${i18nKey}.options.name.describe`),
|
|
58
|
+
type: 'string',
|
|
59
|
+
},
|
|
60
|
+
dest: {
|
|
61
|
+
describe: (0, lang_1.i18n)(`${i18nKey}.options.dest.describe`),
|
|
62
|
+
type: 'string',
|
|
63
|
+
},
|
|
64
|
+
'app-id': {
|
|
65
|
+
describe: (0, lang_1.i18n)(`${i18nKey}.options.appId.describe`),
|
|
66
|
+
type: 'number',
|
|
67
|
+
},
|
|
68
|
+
'platform-version': {
|
|
69
|
+
type: 'string',
|
|
70
|
+
choices: validMigrationTargets,
|
|
71
|
+
hidden: true,
|
|
72
|
+
default: '2023.2',
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
// This is a hack so we can use the same function for both the app migrate and project migrate-app commands
|
|
76
|
+
// and have the examples be correct. If we don't can about that we can remove this.
|
|
77
|
+
const { _ } = await yargs.argv;
|
|
78
|
+
yargs.example([[`$0 ${_.join(' ')}`, (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
|
|
79
|
+
return yargs;
|
|
80
|
+
}
|
package/commands/app.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.describe = exports.command = void 0;
|
|
37
|
+
exports.builder = builder;
|
|
38
|
+
const migrateCommand = __importStar(require("./app/migrate"));
|
|
39
|
+
const commonOpts_1 = require("../lib/commonOpts");
|
|
40
|
+
exports.command = ['app', 'apps'];
|
|
41
|
+
exports.describe = null;
|
|
42
|
+
function builder(yargs) {
|
|
43
|
+
(0, commonOpts_1.addGlobalOptions)(yargs);
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
yargs.command(migrateCommand).demandCommand(1, '');
|
|
46
|
+
return yargs;
|
|
47
|
+
}
|
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
6
|
+
const ui_1 = require("../../lib/ui");
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const commonOpts_1 = require("../../lib/commonOpts");
|
|
10
|
+
const usageTracking_1 = require("../../lib/usageTracking");
|
|
11
|
+
const lang_1 = require("../../lib/lang");
|
|
12
|
+
const selectPublicAppPrompt_1 = require("../../lib/prompts/selectPublicAppPrompt");
|
|
13
|
+
const createProjectPrompt_1 = require("../../lib/prompts/createProjectPrompt");
|
|
14
|
+
const polling_1 = require("../../lib/polling");
|
|
15
|
+
const ui_2 = require("../../lib/ui");
|
|
16
|
+
const errorHandlers_1 = require("../../lib/errorHandlers");
|
|
17
|
+
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
18
|
+
const accountTypes_1 = require("../../lib/accountTypes");
|
|
19
|
+
const projects_1 = require("../../lib/projects");
|
|
20
|
+
const constants_1 = require("../../lib/constants");
|
|
21
|
+
const projects_2 = require("@hubspot/local-dev-lib/api/projects");
|
|
22
|
+
const path_2 = require("@hubspot/local-dev-lib/path");
|
|
23
|
+
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
24
|
+
const archive_1 = require("@hubspot/local-dev-lib/archive");
|
|
25
|
+
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
26
|
+
const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
|
|
27
|
+
const migrate_1 = require("../../lib/app/migrate");
|
|
24
28
|
const i18nKey = 'commands.project.subcommands.cloneApp';
|
|
25
29
|
exports.command = 'clone-app';
|
|
26
|
-
exports.describe =
|
|
30
|
+
exports.describe = (0, ui_1.uiDeprecatedTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
|
|
27
31
|
exports.handler = async (options) => {
|
|
28
32
|
const { derivedAccountId } = options;
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
if (!
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}));
|
|
39
|
-
uiLine();
|
|
40
|
-
process.exit(EXIT_CODES.SUCCESS);
|
|
33
|
+
await (0, usageTracking_1.trackCommandUsage)('clone-app', {}, derivedAccountId);
|
|
34
|
+
const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
|
|
35
|
+
const accountName = (0, ui_2.uiAccountDescription)(derivedAccountId);
|
|
36
|
+
if (!accountConfig) {
|
|
37
|
+
throw new Error('Account is not configured');
|
|
38
|
+
}
|
|
39
|
+
if (!(0, accountTypes_1.isAppDeveloperAccount)(accountConfig)) {
|
|
40
|
+
(0, migrate_1.logInvalidAccountError)(i18nKey);
|
|
41
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
41
42
|
}
|
|
42
43
|
let appId;
|
|
43
44
|
let projectName;
|
|
@@ -45,96 +46,98 @@ exports.handler = async (options) => {
|
|
|
45
46
|
try {
|
|
46
47
|
appId = options.appId;
|
|
47
48
|
if (!appId) {
|
|
48
|
-
const appIdResponse = await selectPublicAppPrompt({
|
|
49
|
+
const appIdResponse = await (0, selectPublicAppPrompt_1.selectPublicAppPrompt)({
|
|
49
50
|
accountId: derivedAccountId,
|
|
50
51
|
accountName,
|
|
51
|
-
options,
|
|
52
52
|
isMigratingApp: false,
|
|
53
53
|
});
|
|
54
54
|
appId = appIdResponse.appId;
|
|
55
55
|
}
|
|
56
|
-
const createProjectPromptResponse = await createProjectPrompt(options);
|
|
56
|
+
const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(options);
|
|
57
57
|
projectName = createProjectPromptResponse.name;
|
|
58
58
|
projectDest = createProjectPromptResponse.dest;
|
|
59
59
|
}
|
|
60
60
|
catch (error) {
|
|
61
|
-
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
62
|
-
process.exit(EXIT_CODES.ERROR);
|
|
61
|
+
(0, errorHandlers_1.logError)(error, new errorHandlers_1.ApiErrorContext({ accountId: derivedAccountId }));
|
|
62
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
63
63
|
}
|
|
64
|
-
await trackCommandMetadataUsage('clone-app', { status: 'STARTED' }, derivedAccountId);
|
|
64
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('clone-app', { status: 'STARTED' }, derivedAccountId);
|
|
65
65
|
try {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
text: i18n(`${i18nKey}.cloneStatus.inProgress`),
|
|
66
|
+
SpinniesManager_1.default.init();
|
|
67
|
+
SpinniesManager_1.default.add('cloneApp', {
|
|
68
|
+
text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.inProgress`),
|
|
69
69
|
});
|
|
70
|
-
const { data: { exportId }, } = await cloneApp(derivedAccountId, appId);
|
|
71
|
-
const { status } = await poll(() => checkCloneStatus(derivedAccountId, exportId));
|
|
70
|
+
const { data: { exportId }, } = await (0, projects_2.cloneApp)(derivedAccountId, appId);
|
|
71
|
+
const { status } = await (0, polling_1.poll)(() => (0, projects_2.checkCloneStatus)(derivedAccountId, exportId));
|
|
72
72
|
if (status === 'SUCCESS') {
|
|
73
73
|
// Ensure correct project folder structure exists
|
|
74
|
-
const baseDestPath =
|
|
75
|
-
const absoluteDestPath =
|
|
76
|
-
|
|
74
|
+
const baseDestPath = path_1.default.resolve((0, path_2.getCwd)(), projectDest);
|
|
75
|
+
const absoluteDestPath = path_1.default.resolve(baseDestPath, 'src', 'app');
|
|
76
|
+
fs_1.default.mkdirSync(absoluteDestPath, { recursive: true });
|
|
77
77
|
// Extract zipped app files and place them in correct directory
|
|
78
|
-
const { data: zippedApp } = await downloadClonedProject(derivedAccountId, exportId);
|
|
79
|
-
await extractZipArchive(zippedApp, sanitizeFileName(projectName), absoluteDestPath, {
|
|
78
|
+
const { data: zippedApp } = await (0, projects_2.downloadClonedProject)(derivedAccountId, exportId);
|
|
79
|
+
await (0, archive_1.extractZipArchive)(zippedApp, (0, path_2.sanitizeFileName)(projectName), absoluteDestPath, {
|
|
80
80
|
includesRootDir: true,
|
|
81
81
|
hideLogs: true,
|
|
82
82
|
});
|
|
83
83
|
// Create hsproject.json file
|
|
84
|
-
const configPath =
|
|
84
|
+
const configPath = path_1.default.join(baseDestPath, constants_1.PROJECT_CONFIG_FILE);
|
|
85
85
|
const configContent = {
|
|
86
86
|
name: projectName,
|
|
87
87
|
srcDir: 'src',
|
|
88
88
|
platformVersion: '2023.2',
|
|
89
89
|
};
|
|
90
|
-
const success = writeProjectConfig(configPath, configContent);
|
|
91
|
-
|
|
92
|
-
text: i18n(`${i18nKey}.cloneStatus.done`),
|
|
90
|
+
const success = (0, projects_1.writeProjectConfig)(configPath, configContent);
|
|
91
|
+
SpinniesManager_1.default.succeed('cloneApp', {
|
|
92
|
+
text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.done`),
|
|
93
93
|
succeedColor: 'white',
|
|
94
94
|
});
|
|
95
95
|
if (!success) {
|
|
96
|
-
logger.error(i18n(`${i18nKey}.errors.couldNotWriteConfigPath`), configPath);
|
|
96
|
+
logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.couldNotWriteConfigPath`), configPath);
|
|
97
97
|
}
|
|
98
|
-
logger.log('');
|
|
99
|
-
uiLine();
|
|
100
|
-
logger.success(i18n(`${i18nKey}.cloneStatus.success`, { dest }));
|
|
101
|
-
logger.log('');
|
|
102
|
-
process.exit(EXIT_CODES.SUCCESS);
|
|
98
|
+
logger_1.logger.log('');
|
|
99
|
+
(0, ui_2.uiLine)();
|
|
100
|
+
logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.cloneStatus.success`, { dest: projectDest }));
|
|
101
|
+
logger_1.logger.log('');
|
|
102
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
catch (error) {
|
|
106
|
-
await trackCommandMetadataUsage('clone-app', { status: 'FAILURE' }, derivedAccountId);
|
|
107
|
-
|
|
108
|
-
text: i18n(`${i18nKey}.cloneStatus.failure`),
|
|
106
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('clone-app', { status: 'FAILURE' }, derivedAccountId);
|
|
107
|
+
SpinniesManager_1.default.fail('cloneApp', {
|
|
108
|
+
text: (0, lang_1.i18n)(`${i18nKey}.cloneStatus.failure`),
|
|
109
109
|
failColor: 'white',
|
|
110
110
|
});
|
|
111
111
|
// Migrations endpoints return a response object with an errors property. The errors property contains an array of errors.
|
|
112
|
-
if (error
|
|
113
|
-
error
|
|
112
|
+
if (error &&
|
|
113
|
+
typeof error === 'object' &&
|
|
114
|
+
'errors' in error &&
|
|
115
|
+
Array.isArray(error.errors)) {
|
|
116
|
+
error.errors.forEach(e => (0, errorHandlers_1.logError)(e, new errorHandlers_1.ApiErrorContext({ accountId: derivedAccountId })));
|
|
114
117
|
}
|
|
115
118
|
else {
|
|
116
|
-
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
119
|
+
(0, errorHandlers_1.logError)(error, new errorHandlers_1.ApiErrorContext({ accountId: derivedAccountId }));
|
|
117
120
|
}
|
|
118
121
|
}
|
|
119
|
-
await trackCommandMetadataUsage('clone-app', { status: 'SUCCESS' }, derivedAccountId);
|
|
120
|
-
process.exit(EXIT_CODES.SUCCESS);
|
|
122
|
+
await (0, usageTracking_1.trackCommandMetadataUsage)('clone-app', { status: 'SUCCESS' }, derivedAccountId);
|
|
123
|
+
process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
|
|
121
124
|
};
|
|
122
|
-
exports.builder = yargs => {
|
|
125
|
+
exports.builder = (yargs) => {
|
|
123
126
|
yargs.options({
|
|
124
127
|
dest: {
|
|
125
|
-
describe: i18n(`${i18nKey}.options.dest.describe`),
|
|
128
|
+
describe: (0, lang_1.i18n)(`${i18nKey}.options.dest.describe`),
|
|
126
129
|
type: 'string',
|
|
127
130
|
},
|
|
128
131
|
'app-id': {
|
|
129
|
-
describe: i18n(`${i18nKey}.options.appId.describe`),
|
|
132
|
+
describe: (0, lang_1.i18n)(`${i18nKey}.options.appId.describe`),
|
|
130
133
|
type: 'number',
|
|
131
134
|
},
|
|
132
135
|
});
|
|
133
136
|
yargs.example([
|
|
134
|
-
['$0 project clone-app', i18n(`${i18nKey}.examples.default`)],
|
|
137
|
+
['$0 project clone-app', (0, lang_1.i18n)(`${i18nKey}.examples.default`)],
|
|
135
138
|
]);
|
|
136
|
-
addConfigOptions(yargs);
|
|
137
|
-
addAccountOptions(yargs);
|
|
138
|
-
addUseEnvironmentOptions(yargs);
|
|
139
|
+
(0, commonOpts_1.addConfigOptions)(yargs);
|
|
140
|
+
(0, commonOpts_1.addAccountOptions)(yargs);
|
|
141
|
+
(0, commonOpts_1.addUseEnvironmentOptions)(yargs);
|
|
139
142
|
return yargs;
|
|
140
143
|
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ArgumentsCamelCase, Argv } from 'yargs';
|
|
2
|
-
import {
|
|
2
|
+
import { CommonArgs, ConfigArgs, EnvironmentArgs } from '../../types/Yargs';
|
|
3
3
|
export declare const command = "dev";
|
|
4
4
|
export declare const describe: string | undefined;
|
|
5
|
+
type ProjectDevArgs = CommonArgs & ConfigArgs & EnvironmentArgs;
|
|
5
6
|
export declare function handler(args: ArgumentsCamelCase<ProjectDevArgs>): Promise<void>;
|
|
6
7
|
export declare function builder(yargs: Argv): Argv<ProjectDevArgs>;
|
|
8
|
+
export {};
|
|
@@ -3,25 +3,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.describe = exports.command = void 0;
|
|
7
|
+
exports.handler = handler;
|
|
8
|
+
exports.builder = builder;
|
|
9
|
+
const commonOpts_1 = require("../../lib/commonOpts");
|
|
10
|
+
const usageTracking_1 = require("../../lib/usageTracking");
|
|
11
|
+
const process_1 = require("../../lib/process");
|
|
12
|
+
const lang_1 = require("../../lib/lang");
|
|
7
13
|
const logger_1 = require("@hubspot/local-dev-lib/logger");
|
|
8
14
|
const config_1 = require("@hubspot/local-dev-lib/config");
|
|
15
|
+
const projects_1 = require("../../lib/projects");
|
|
16
|
+
const exitCodes_1 = require("../../lib/enums/exitCodes");
|
|
17
|
+
const ui_1 = require("../../lib/ui");
|
|
18
|
+
const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
|
|
19
|
+
const LocalDevManager_1 = __importDefault(require("../../lib/LocalDevManager"));
|
|
20
|
+
const accountTypes_1 = require("../../lib/accountTypes");
|
|
9
21
|
const environment_1 = require("@hubspot/local-dev-lib/environment");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const exitCodes_1 = require("../../../lib/enums/exitCodes");
|
|
14
|
-
const ui_1 = require("../../../lib/ui");
|
|
15
|
-
const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
|
|
16
|
-
const LocalDevManager_1 = __importDefault(require("../../../lib/LocalDevManager"));
|
|
17
|
-
const localDev_1 = require("../../../lib/localDev");
|
|
18
|
-
const process_1 = require("../../../lib/process");
|
|
19
|
-
const accountTypes_1 = require("../../../lib/accountTypes");
|
|
20
|
-
const projects_1 = require("../../../lib/projects");
|
|
22
|
+
const Projects_1 = require("../../types/Projects");
|
|
23
|
+
const structure_1 = require("../../lib/projects/structure");
|
|
24
|
+
const localDev_1 = require("../../lib/localDev");
|
|
21
25
|
const i18nKey = 'commands.project.subcommands.dev';
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
exports.command = 'dev';
|
|
27
|
+
exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
|
|
28
|
+
async function handler(args) {
|
|
29
|
+
const { derivedAccountId, providedAccountId } = args;
|
|
30
|
+
const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
|
|
24
31
|
const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(derivedAccountId));
|
|
32
|
+
(0, usageTracking_1.trackCommandUsage)('project-dev', {}, derivedAccountId);
|
|
33
|
+
const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
|
|
34
|
+
(0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.logs.betaMessage`));
|
|
35
|
+
logger_1.logger.log((0, ui_1.uiLink)((0, lang_1.i18n)(`${i18nKey}.logs.learnMoreLocalDevServer`), 'https://developers.hubspot.com/docs/platform/project-cli-commands#start-a-local-development-server'));
|
|
36
|
+
if (!projectConfig || !projectDir) {
|
|
37
|
+
logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noProjectConfig`, {
|
|
38
|
+
accountId: derivedAccountId,
|
|
39
|
+
authCommand: (0, ui_1.uiCommandReference)('hs auth'),
|
|
40
|
+
}));
|
|
41
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
42
|
+
}
|
|
43
|
+
if (!accountConfig) {
|
|
44
|
+
logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
|
|
45
|
+
process.exit(exitCodes_1.EXIT_CODES.ERROR);
|
|
46
|
+
}
|
|
47
|
+
(0, projects_1.validateProjectConfig)(projectConfig, projectDir);
|
|
25
48
|
const components = await (0, structure_1.findProjectComponents)(projectDir);
|
|
26
49
|
const runnableComponents = components.filter(component => component.runnable);
|
|
27
50
|
const componentTypes = (0, structure_1.getProjectComponentTypes)(runnableComponents);
|
|
@@ -135,3 +158,10 @@ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, proj
|
|
|
135
158
|
await LocalDev.start();
|
|
136
159
|
(0, process_1.handleExit)(({ isSIGHUP }) => LocalDev.stop(!isSIGHUP));
|
|
137
160
|
}
|
|
161
|
+
function builder(yargs) {
|
|
162
|
+
(0, commonOpts_1.addConfigOptions)(yargs);
|
|
163
|
+
(0, commonOpts_1.addAccountOptions)(yargs);
|
|
164
|
+
(0, commonOpts_1.addUseEnvironmentOptions)(yargs);
|
|
165
|
+
yargs.example([['$0 project dev', (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
|
|
166
|
+
return yargs;
|
|
167
|
+
}
|
|
@@ -1 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { ArgumentsCamelCase } from 'yargs';
|
|
2
|
+
import { MigrateAppOptions } from '../../types/Yargs';
|
|
3
|
+
export declare const command = "migrate-app";
|
|
4
|
+
export declare const describe: string | undefined;
|
|
5
|
+
export declare function handler(yargs: ArgumentsCamelCase<MigrateAppOptions>): Promise<void>;
|
|
6
|
+
export { builder } from '../app/migrate';
|