@hubspot/cli 7.2.0-experimental.0 → 7.2.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.
Files changed (48) hide show
  1. package/commands/account/info.d.ts +1 -1
  2. package/commands/account/info.js +8 -5
  3. package/commands/auth.d.ts +9 -0
  4. package/commands/auth.js +89 -83
  5. package/commands/init.d.ts +11 -0
  6. package/commands/init.js +114 -100
  7. package/commands/list.d.ts +9 -0
  8. package/commands/list.js +63 -57
  9. package/commands/mv.d.ts +10 -0
  10. package/commands/mv.js +32 -32
  11. package/commands/open.d.ts +10 -0
  12. package/commands/open.js +37 -34
  13. package/commands/project/dev/deprecatedFlow.d.ts +5 -0
  14. package/commands/project/{dev.js → dev/deprecatedFlow.js} +14 -44
  15. package/commands/project/{dev.d.ts → dev/index.d.ts} +1 -3
  16. package/commands/project/dev/index.js +52 -0
  17. package/commands/project/dev/unifiedFlow.d.ts +5 -0
  18. package/commands/project/dev/unifiedFlow.js +112 -0
  19. package/commands/remove.d.ts +9 -0
  20. package/commands/remove.js +25 -23
  21. package/lang/en.lyaml +10 -6
  22. package/lib/DevServerManagerV2.d.ts +34 -0
  23. package/lib/DevServerManagerV2.js +85 -0
  24. package/lib/LocalDevManagerV2.d.ts +64 -0
  25. package/lib/LocalDevManagerV2.js +382 -0
  26. package/lib/commonOpts.d.ts +1 -0
  27. package/lib/commonOpts.js +30 -0
  28. package/lib/constants.d.ts +12 -0
  29. package/lib/constants.js +13 -1
  30. package/lib/localDev.d.ts +1 -1
  31. package/lib/localDev.js +2 -2
  32. package/lib/projects/structure.d.ts +4 -0
  33. package/lib/projects/structure.js +9 -0
  34. package/lib/prompts/accountNamePrompt.d.ts +2 -3
  35. package/lib/prompts/personalAccessKeyPrompt.d.ts +4 -4
  36. package/lib/ui/index.d.ts +1 -1
  37. package/lib/ui/index.js +2 -2
  38. package/lib/ui/supportHyperlinks.js +2 -2
  39. package/lib/ui/supportsColor.js +2 -2
  40. package/lib/usageTracking.d.ts +1 -1
  41. package/lib/yargsUtils.d.ts +9 -0
  42. package/lib/yargsUtils.js +40 -0
  43. package/package.json +3 -3
  44. package/types/ProjectComponents.d.ts +38 -0
  45. package/types/ProjectComponents.js +3 -0
  46. package/types/Yargs.d.ts +1 -0
  47. package/lib/hasFlag.d.ts +0 -1
  48. package/lib/hasFlag.js +0 -15
package/commands/list.js CHANGED
@@ -1,37 +1,68 @@
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
- // @ts-nocheck
4
- const chalk = require('chalk');
5
- const { addAccountOptions, addConfigOptions, addGlobalOptions, addUseEnvironmentOptions, } = require('../lib/commonOpts');
6
- const { trackCommandUsage } = require('../lib/usageTracking');
7
- const { isPathFolder } = require('../lib/filesystem');
8
- const { logger } = require('@hubspot/local-dev-lib/logger');
9
- const { logError } = require('../lib/errorHandlers/index');
10
- const { getDirectoryContentsByPath, } = require('@hubspot/local-dev-lib/api/fileMapper');
11
- const { HUBSPOT_FOLDER, MARKETPLACE_FOLDER } = require('../lib/constants');
12
- const { i18n } = require('../lib/lang');
6
+ exports.describe = exports.command = void 0;
7
+ exports.handler = handler;
8
+ exports.builder = builder;
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const commonOpts_1 = require("../lib/commonOpts");
11
+ const usageTracking_1 = require("../lib/usageTracking");
12
+ const filesystem_1 = require("../lib/filesystem");
13
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
14
+ const index_1 = require("../lib/errorHandlers/index");
15
+ const fileMapper_1 = require("@hubspot/local-dev-lib/api/fileMapper");
16
+ const constants_1 = require("../lib/constants");
17
+ const lang_1 = require("../lib/lang");
18
+ const exitCodes_1 = require("../lib/enums/exitCodes");
13
19
  const i18nKey = 'commands.list';
14
- const { EXIT_CODES } = require('../lib/enums/exitCodes');
20
+ function addColorToContents(fileOrFolder) {
21
+ if (!(0, filesystem_1.isPathFolder)(fileOrFolder)) {
22
+ return chalk_1.default.reset.cyan(fileOrFolder);
23
+ }
24
+ if (fileOrFolder === constants_1.HUBSPOT_FOLDER || fileOrFolder === constants_1.MARKETPLACE_FOLDER) {
25
+ return chalk_1.default.reset.bold.blue(fileOrFolder);
26
+ }
27
+ return chalk_1.default.reset.blue(fileOrFolder);
28
+ }
29
+ function sortContents(a, b) {
30
+ // Pin @hubspot folder to top
31
+ if (a === constants_1.HUBSPOT_FOLDER) {
32
+ return -1;
33
+ }
34
+ else if (b === constants_1.HUBSPOT_FOLDER) {
35
+ return 1;
36
+ }
37
+ // Pin @marketplace folder to top
38
+ if (a === constants_1.MARKETPLACE_FOLDER) {
39
+ return -1;
40
+ }
41
+ else if (b === constants_1.MARKETPLACE_FOLDER) {
42
+ return 1;
43
+ }
44
+ return a.localeCompare(b);
45
+ }
15
46
  exports.command = 'list [path]';
16
- exports.describe = i18n(`${i18nKey}.describe`);
17
- exports.handler = async (options) => {
18
- const { path, derivedAccountId } = options;
47
+ exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
48
+ async function handler(args) {
49
+ const { path, derivedAccountId } = args;
19
50
  const directoryPath = path || '/';
20
51
  let contentsResp;
21
- trackCommandUsage('list', null, derivedAccountId);
22
- logger.debug(i18n(`${i18nKey}.gettingPathContents`, {
52
+ (0, usageTracking_1.trackCommandUsage)('list', undefined, derivedAccountId);
53
+ logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.gettingPathContents`, {
23
54
  path: directoryPath,
24
55
  }));
25
56
  try {
26
- const { data } = await getDirectoryContentsByPath(derivedAccountId, directoryPath);
57
+ const { data } = await (0, fileMapper_1.getDirectoryContentsByPath)(derivedAccountId, directoryPath);
27
58
  contentsResp = data;
28
59
  }
29
60
  catch (e) {
30
- logError(e);
31
- process.exit(EXIT_CODES.SUCCESS);
61
+ (0, index_1.logError)(e);
62
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
32
63
  }
33
64
  if (!contentsResp.folder) {
34
- logger.info(i18n(`${i18nKey}.noFilesFoundAtPath`, {
65
+ logger_1.logger.info((0, lang_1.i18n)(`${i18nKey}.noFilesFoundAtPath`, {
35
66
  path: directoryPath,
36
67
  }));
37
68
  return;
@@ -41,7 +72,7 @@ exports.handler = async (options) => {
41
72
  ? ['@hubspot', ...contentsResp.children]
42
73
  : contentsResp.children;
43
74
  if (contents.length === 0) {
44
- logger.info(i18n(`${i18nKey}.noFilesFoundAtPath`, {
75
+ logger_1.logger.info((0, lang_1.i18n)(`${i18nKey}.noFilesFoundAtPath`, {
45
76
  path: directoryPath,
46
77
  }));
47
78
  return;
@@ -50,43 +81,18 @@ exports.handler = async (options) => {
50
81
  .map(addColorToContents)
51
82
  .sort(sortContents)
52
83
  .join('\n');
53
- logger.log(folderContentsOutput);
54
- };
55
- exports.builder = yargs => {
84
+ logger_1.logger.log(folderContentsOutput);
85
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
86
+ }
87
+ function builder(yargs) {
88
+ (0, commonOpts_1.addConfigOptions)(yargs);
89
+ (0, commonOpts_1.addAccountOptions)(yargs);
90
+ (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
91
+ (0, commonOpts_1.addGlobalOptions)(yargs);
56
92
  yargs.positional('path', {
57
- describe: i18n(`${i18nKey}.positionals.path.describe`),
93
+ describe: (0, lang_1.i18n)(`${i18nKey}.positionals.path.describe`),
58
94
  type: 'string',
59
95
  });
60
- yargs.example([['$0 list'], ['$0 list /'], ['$0 list serverless']]);
61
- addConfigOptions(yargs);
62
- addAccountOptions(yargs);
63
- addUseEnvironmentOptions(yargs);
64
- addGlobalOptions(yargs);
96
+ yargs.example([['$0 list'], ['$0 list /'], ['$0 list my-modules']]);
65
97
  return yargs;
66
- };
67
- const addColorToContents = fileOrFolder => {
68
- if (!isPathFolder(fileOrFolder)) {
69
- return chalk.reset.cyan(fileOrFolder);
70
- }
71
- if (fileOrFolder === HUBSPOT_FOLDER || fileOrFolder === MARKETPLACE_FOLDER) {
72
- return chalk.reset.bold.blue(fileOrFolder);
73
- }
74
- return chalk.reset.blue(fileOrFolder);
75
- };
76
- const sortContents = (a, b) => {
77
- // Pin @hubspot folder to top
78
- if (a === HUBSPOT_FOLDER) {
79
- return -1;
80
- }
81
- else if (b === HUBSPOT_FOLDER) {
82
- return 1;
83
- }
84
- // Pin @marketplace folder to top
85
- if (a === MARKETPLACE_FOLDER) {
86
- return -1;
87
- }
88
- else if (b === MARKETPLACE_FOLDER) {
89
- return 1;
90
- }
91
- return a.localeCompare(b);
92
- };
98
+ }
package/commands/mv.d.ts CHANGED
@@ -1 +1,11 @@
1
+ import { Argv, ArgumentsCamelCase } from 'yargs';
2
+ import { CommonArgs, ConfigArgs, EnvironmentArgs } from '../types/Yargs';
3
+ export declare const command = "mv <srcPath> <destPath>";
4
+ export declare const describe: string | undefined;
5
+ type MvArgs = CommonArgs & ConfigArgs & EnvironmentArgs & {
6
+ srcPath: string;
7
+ destPath: string;
8
+ };
9
+ export declare function handler(args: ArgumentsCamelCase<MvArgs>): Promise<void>;
10
+ export declare function builder(yargs: Argv): Argv<MvArgs>;
1
11
  export {};
package/commands/mv.js CHANGED
@@ -1,58 +1,62 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // @ts-nocheck
4
- const { logger } = require('@hubspot/local-dev-lib/logger');
5
- const { moveFile } = require('@hubspot/local-dev-lib/api/fileMapper');
6
- const { isSpecifiedError } = require('@hubspot/local-dev-lib/errors/index');
7
- const { logError, ApiErrorContext } = require('../lib/errorHandlers/index');
8
- const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, addGlobalOptions, } = require('../lib/commonOpts');
9
- const { trackCommandUsage } = require('../lib/usageTracking');
10
- const { isPathFolder } = require('../lib/filesystem');
11
- const { i18n } = require('../lib/lang');
12
- const { uiBetaTag } = require('../lib/ui');
3
+ exports.describe = exports.command = void 0;
4
+ exports.handler = handler;
5
+ exports.builder = builder;
6
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
7
+ const fileMapper_1 = require("@hubspot/local-dev-lib/api/fileMapper");
8
+ const index_1 = require("@hubspot/local-dev-lib/errors/index");
9
+ const index_2 = require("../lib/errorHandlers/index");
10
+ const commonOpts_1 = require("../lib/commonOpts");
11
+ const usageTracking_1 = require("../lib/usageTracking");
12
+ const filesystem_1 = require("../lib/filesystem");
13
+ const lang_1 = require("../lib/lang");
14
+ const ui_1 = require("../lib/ui");
13
15
  const i18nKey = 'commands.mv';
14
- const getCorrectedDestPath = (srcPath, destPath) => {
15
- if (!isPathFolder(srcPath)) {
16
+ function getCorrectedDestPath(srcPath, destPath) {
17
+ if (!(0, filesystem_1.isPathFolder)(srcPath)) {
16
18
  return destPath;
17
19
  }
18
20
  // Makes sure that nested folders are moved independently
19
21
  return `${destPath}/${srcPath.split('/').pop()}`;
20
- };
22
+ }
21
23
  exports.command = 'mv <srcPath> <destPath>';
22
- exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
23
- exports.handler = async (options) => {
24
- const { srcPath, destPath, derivedAccountId } = options;
25
- trackCommandUsage('mv', null, derivedAccountId);
24
+ exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
25
+ async function handler(args) {
26
+ const { srcPath, destPath, derivedAccountId } = args;
27
+ (0, usageTracking_1.trackCommandUsage)('mv', undefined, derivedAccountId);
26
28
  try {
27
- await moveFile(derivedAccountId, srcPath, getCorrectedDestPath(srcPath, destPath));
28
- logger.success(i18n(`${i18nKey}.move`, {
29
+ await (0, fileMapper_1.moveFile)(derivedAccountId, srcPath, getCorrectedDestPath(srcPath, destPath));
30
+ logger_1.logger.success((0, lang_1.i18n)(`${i18nKey}.move`, {
29
31
  accountId: derivedAccountId,
30
32
  destPath,
31
33
  srcPath,
32
34
  }));
33
35
  }
34
36
  catch (error) {
35
- logger.error(i18n(`${i18nKey}.errors.moveFailed`, {
37
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.moveFailed`, {
36
38
  accountId: derivedAccountId,
37
39
  destPath,
38
40
  srcPath,
39
41
  }));
40
- if (isSpecifiedError(error, { statusCode: 409 })) {
41
- logger.error(i18n(`${i18nKey}.errors.sourcePathExists`, {
42
+ if ((0, index_1.isSpecifiedError)(error, { statusCode: 409 })) {
43
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.sourcePathExists`, {
42
44
  destPath,
43
45
  srcPath,
44
46
  }));
45
47
  }
46
48
  else {
47
- logError(error, new ApiErrorContext({
49
+ (0, index_2.logError)(error, new index_2.ApiErrorContext({
48
50
  accountId: derivedAccountId,
49
- srcPath,
50
- destPath,
51
51
  }));
52
52
  }
53
53
  }
54
- };
55
- exports.builder = yargs => {
54
+ }
55
+ function builder(yargs) {
56
+ (0, commonOpts_1.addConfigOptions)(yargs);
57
+ (0, commonOpts_1.addAccountOptions)(yargs);
58
+ (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
59
+ (0, commonOpts_1.addGlobalOptions)(yargs);
56
60
  yargs.positional('srcPath', {
57
61
  describe: 'Remote hubspot path',
58
62
  type: 'string',
@@ -61,9 +65,5 @@ exports.builder = yargs => {
61
65
  describe: 'Remote hubspot path',
62
66
  type: 'string',
63
67
  });
64
- addConfigOptions(yargs);
65
- addAccountOptions(yargs);
66
- addUseEnvironmentOptions(yargs);
67
- addGlobalOptions(yargs);
68
68
  return yargs;
69
- };
69
+ }
@@ -1 +1,11 @@
1
+ import { Argv, ArgumentsCamelCase } from 'yargs';
2
+ import { CommonArgs, ConfigArgs, EnvironmentArgs, AccountArgs } from '../types/Yargs';
3
+ export declare const command = "open [shortcut]";
4
+ export declare const describe: string;
5
+ type OpenArgs = CommonArgs & ConfigArgs & EnvironmentArgs & AccountArgs & {
6
+ shortcut?: string;
7
+ list?: boolean;
8
+ };
9
+ export declare function handler(args: ArgumentsCamelCase<OpenArgs>): Promise<void>;
10
+ export declare function builder(yargs: Argv): Argv<OpenArgs>;
1
11
  export {};
package/commands/open.js CHANGED
@@ -1,50 +1,57 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // @ts-nocheck
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 links_1 = require("../lib/links");
9
+ const promptUtils_1 = require("../lib/prompts/promptUtils");
10
+ const lang_1 = require("../lib/lang");
4
11
  const exitCodes_1 = require("../lib/enums/exitCodes");
5
- const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addGlobalOptions, } = require('../lib/commonOpts');
6
- const { trackCommandUsage } = require('../lib/usageTracking');
7
- const { logSiteLinks, getSiteLinksAsArray, openLink } = require('../lib/links');
8
- const { promptUser } = require('../lib/prompts/promptUtils');
9
- const { i18n } = require('../lib/lang');
10
12
  const i18nKey = 'commands.open';
11
13
  const separator = ' => ';
12
- const createListPrompt = async (accountId) => promptUser([
13
- {
14
- type: 'rawlist',
15
- look: false,
16
- name: 'open',
17
- pageSize: 20,
18
- message: i18n(`${i18nKey}.selectLink`),
19
- choices: getSiteLinksAsArray(accountId).map(l => `${l.shortcut}${separator}${l.url}`),
20
- filter: val => val.split(separator)[0],
21
- },
22
- ]);
14
+ async function createListPrompt(accountId) {
15
+ return (0, promptUtils_1.promptUser)([
16
+ {
17
+ type: 'rawlist',
18
+ name: 'open',
19
+ pageSize: 20,
20
+ message: (0, lang_1.i18n)(`${i18nKey}.selectLink`),
21
+ choices: (0, links_1.getSiteLinksAsArray)(accountId).map(l => `${l.shortcut}${separator}${l.url}`),
22
+ filter: val => val.split(separator)[0],
23
+ },
24
+ ]);
25
+ }
23
26
  exports.command = 'open [shortcut]';
24
- exports.describe = i18n(`${i18nKey}.describe`);
25
- exports.handler = async (options) => {
26
- const { shortcut, list, derivedAccountId } = options;
27
- trackCommandUsage('open', null, derivedAccountId);
27
+ exports.describe = (0, lang_1.i18n)(`${i18nKey}.describe`);
28
+ async function handler(args) {
29
+ const { shortcut, list, derivedAccountId } = args;
30
+ (0, usageTracking_1.trackCommandUsage)('open', undefined, derivedAccountId);
28
31
  if (shortcut === undefined && !list) {
29
32
  const choice = await createListPrompt(derivedAccountId);
30
- openLink(derivedAccountId, choice.open);
33
+ (0, links_1.openLink)(derivedAccountId, choice.open);
31
34
  }
32
35
  else if (list) {
33
- logSiteLinks(derivedAccountId);
36
+ (0, links_1.logSiteLinks)(derivedAccountId);
34
37
  }
35
- else {
36
- openLink(derivedAccountId, shortcut);
38
+ else if (shortcut) {
39
+ (0, links_1.openLink)(derivedAccountId, shortcut);
37
40
  }
38
41
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
39
- };
40
- exports.builder = yargs => {
42
+ }
43
+ function builder(yargs) {
44
+ (0, commonOpts_1.addConfigOptions)(yargs);
45
+ (0, commonOpts_1.addAccountOptions)(yargs);
46
+ (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
47
+ (0, commonOpts_1.addGlobalOptions)(yargs);
41
48
  yargs.positional('[shortcut]', {
42
- describe: i18n(`${i18nKey}.positionals.shortcut.describe`),
49
+ describe: (0, lang_1.i18n)(`${i18nKey}.positionals.shortcut.describe`),
43
50
  type: 'string',
44
51
  });
45
52
  yargs.option('list', {
46
53
  alias: 'l',
47
- describe: i18n(`${i18nKey}.options.list.describe`),
54
+ describe: (0, lang_1.i18n)(`${i18nKey}.options.list.describe`),
48
55
  type: 'boolean',
49
56
  });
50
57
  yargs.example([
@@ -54,9 +61,5 @@ exports.builder = yargs => {
54
61
  ['$0 open settings/navigation'],
55
62
  ['$0 open sn'],
56
63
  ]);
57
- addConfigOptions(yargs);
58
- addAccountOptions(yargs);
59
- addUseEnvironmentOptions(yargs);
60
- addGlobalOptions(yargs);
61
64
  return yargs;
62
- };
65
+ }
@@ -0,0 +1,5 @@
1
+ import { ArgumentsCamelCase } from 'yargs';
2
+ import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
3
+ import { ProjectConfig } from '../../../types/Projects';
4
+ import { ProjectDevArgs } from '../../../types/Yargs';
5
+ export declare function deprecatedProjectDevFlow(args: ArgumentsCamelCase<ProjectDevArgs>, accountConfig: CLIAccount, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
@@ -3,48 +3,25 @@ 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.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");
6
+ exports.deprecatedProjectDevFlow = deprecatedProjectDevFlow;
13
7
  const logger_1 = require("@hubspot/local-dev-lib/logger");
14
8
  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");
21
9
  const environment_1 = require("@hubspot/local-dev-lib/environment");
22
- const Projects_1 = require("../../types/Projects");
23
- const structure_1 = require("../../lib/projects/structure");
24
- const localDev_1 = require("../../lib/localDev");
10
+ const structure_1 = require("../../../lib/projects/structure");
11
+ const Projects_1 = require("../../../types/Projects");
12
+ const lang_1 = require("../../../lib/lang");
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");
25
21
  const i18nKey = 'commands.project.subcommands.dev';
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);
22
+ async function deprecatedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
23
+ const { providedAccountId, derivedAccountId } = args;
31
24
  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);
48
25
  const components = await (0, structure_1.findProjectComponents)(projectDir);
49
26
  const runnableComponents = components.filter(component => component.runnable);
50
27
  const componentTypes = (0, structure_1.getProjectComponentTypes)(runnableComponents);
@@ -158,10 +135,3 @@ async function handler(args) {
158
135
  await LocalDev.start();
159
136
  (0, process_1.handleExit)(({ isSIGHUP }) => LocalDev.stop(!isSIGHUP));
160
137
  }
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,8 +1,6 @@
1
1
  import { ArgumentsCamelCase, Argv } from 'yargs';
2
- import { CommonArgs, ConfigArgs, EnvironmentArgs } from '../../types/Yargs';
2
+ import { ProjectDevArgs } from '../../../types/Yargs';
3
3
  export declare const command = "dev";
4
4
  export declare const describe: string | undefined;
5
- type ProjectDevArgs = CommonArgs & ConfigArgs & EnvironmentArgs;
6
5
  export declare function handler(args: ArgumentsCamelCase<ProjectDevArgs>): Promise<void>;
7
6
  export declare function builder(yargs: Argv): Argv<ProjectDevArgs>;
8
- export {};
@@ -0,0 +1,52 @@
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 logger_1 = require("@hubspot/local-dev-lib/logger");
10
+ const config_1 = require("@hubspot/local-dev-lib/config");
11
+ const projects_1 = require("../../../lib/projects");
12
+ const exitCodes_1 = require("../../../lib/enums/exitCodes");
13
+ const ui_1 = require("../../../lib/ui");
14
+ const deprecatedFlow_1 = require("./deprecatedFlow");
15
+ const unifiedFlow_1 = require("./unifiedFlow");
16
+ const buildAndDeploy_1 = require("../../../lib/projects/buildAndDeploy");
17
+ const i18nKey = 'commands.project.subcommands.dev';
18
+ exports.command = 'dev';
19
+ exports.describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.describe`), false);
20
+ async function handler(args) {
21
+ const { derivedAccountId } = args;
22
+ const accountConfig = (0, config_1.getAccountConfig)(derivedAccountId);
23
+ (0, usageTracking_1.trackCommandUsage)('project-dev', {}, derivedAccountId);
24
+ const { projectConfig, projectDir } = await (0, projects_1.getProjectConfig)();
25
+ (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`${i18nKey}.logs.betaMessage`));
26
+ 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'));
27
+ if (!projectConfig || !projectDir) {
28
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noProjectConfig`, {
29
+ accountId: derivedAccountId,
30
+ authCommand: (0, ui_1.uiCommandReference)('hs auth'),
31
+ }));
32
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
33
+ }
34
+ if (!accountConfig) {
35
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noAccount`));
36
+ process.exit(exitCodes_1.EXIT_CODES.ERROR);
37
+ }
38
+ (0, projects_1.validateProjectConfig)(projectConfig, projectDir);
39
+ if ((0, buildAndDeploy_1.useV3Api)(projectConfig?.platformVersion)) {
40
+ await (0, unifiedFlow_1.unifiedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
41
+ }
42
+ else {
43
+ await (0, deprecatedFlow_1.deprecatedProjectDevFlow)(args, accountConfig, projectConfig, projectDir);
44
+ }
45
+ }
46
+ function builder(yargs) {
47
+ (0, commonOpts_1.addConfigOptions)(yargs);
48
+ (0, commonOpts_1.addAccountOptions)(yargs);
49
+ (0, commonOpts_1.addUseEnvironmentOptions)(yargs);
50
+ yargs.example([['$0 project dev', (0, lang_1.i18n)(`${i18nKey}.examples.default`)]]);
51
+ return yargs;
52
+ }
@@ -0,0 +1,5 @@
1
+ import { ArgumentsCamelCase } from 'yargs';
2
+ import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
3
+ import { ProjectDevArgs } from '../../../types/Yargs';
4
+ import { ProjectConfig } from '../../../types/Projects';
5
+ export declare function unifiedProjectDevFlow(args: ArgumentsCamelCase<ProjectDevArgs>, accountConfig: CLIAccount, projectConfig: ProjectConfig, projectDir: string): Promise<void>;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.unifiedProjectDevFlow = unifiedProjectDevFlow;
7
+ const path_1 = __importDefault(require("path"));
8
+ const util_1 = __importDefault(require("util"));
9
+ const logger_1 = require("@hubspot/local-dev-lib/logger");
10
+ const errors_1 = require("@hubspot/project-parsing-lib/src/lib/errors");
11
+ const project_parsing_lib_1 = require("@hubspot/project-parsing-lib");
12
+ const config_1 = require("@hubspot/local-dev-lib/config");
13
+ const environment_1 = require("@hubspot/local-dev-lib/environment");
14
+ const errorHandlers_1 = require("../../../lib/errorHandlers");
15
+ const exitCodes_1 = require("../../../lib/enums/exitCodes");
16
+ const projects_1 = require("../../../lib/projects");
17
+ const localDev_1 = require("../../../lib/localDev");
18
+ const projectDevTargetAccountPrompt_1 = require("../../../lib/prompts/projectDevTargetAccountPrompt");
19
+ const SpinniesManager_1 = __importDefault(require("../../../lib/ui/SpinniesManager"));
20
+ const LocalDevManagerV2_1 = __importDefault(require("../../../lib/LocalDevManagerV2"));
21
+ const process_1 = require("../../../lib/process");
22
+ const accountTypes_1 = require("../../../lib/accountTypes");
23
+ const ui_1 = require("../../../lib/ui");
24
+ const lang_1 = require("../../../lib/lang");
25
+ const i18nKey = 'commands.project.subcommands.dev';
26
+ async function unifiedProjectDevFlow(args, accountConfig, projectConfig, projectDir) {
27
+ logger_1.logger.log('Unified Apps Local Dev');
28
+ const targetProjectAccountId = args.derivedAccountId;
29
+ const env = (0, environment_1.getValidEnv)((0, config_1.getEnv)(targetProjectAccountId));
30
+ let projectNodes;
31
+ // Get IR
32
+ try {
33
+ const intermediateRepresentation = await (0, project_parsing_lib_1.translateForLocalDev)({
34
+ projectSourceDir: path_1.default.join(projectDir, projectConfig.srcDir),
35
+ platformVersion: projectConfig.platformVersion,
36
+ accountId: targetProjectAccountId,
37
+ });
38
+ projectNodes = intermediateRepresentation.intermediateNodesIndexedByUid;
39
+ logger_1.logger.debug(util_1.default.inspect(projectNodes, false, null, true));
40
+ }
41
+ catch (e) {
42
+ if ((0, errors_1.isTranslationError)(e)) {
43
+ logger_1.logger.error(e.toString());
44
+ }
45
+ else {
46
+ (0, errorHandlers_1.logError)(e);
47
+ }
48
+ return process.exit(exitCodes_1.EXIT_CODES.ERROR);
49
+ }
50
+ // @TODO Do we need to do more than this or leave it to the dev servers?
51
+ if (!Object.keys(projectNodes).length) {
52
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.noRunnableComponents`, {
53
+ projectDir,
54
+ command: (0, ui_1.uiCommandReference)('hs project add'),
55
+ }));
56
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
57
+ }
58
+ // @TODO Validate component types (i.e. previously you could not have both private and public apps)
59
+ const accounts = (0, config_1.getConfigAccounts)();
60
+ // TODO Ideally this should require the user to target a Combined account
61
+ // For now, check if the account is either developer or standard
62
+ const derivedAccountIsRecommendedType = (0, accountTypes_1.isAppDeveloperAccount)(accountConfig) || (0, accountTypes_1.isStandardAccount)(accountConfig);
63
+ if (!derivedAccountIsRecommendedType) {
64
+ logger_1.logger.error((0, lang_1.i18n)(`${i18nKey}.errors.invalidUnifiedAppsAccount`), {
65
+ authCommand: (0, ui_1.uiCommandReference)('hs auth'),
66
+ });
67
+ process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
68
+ }
69
+ let targetTestingAccountId = null;
70
+ const devAccountPromptResponse = await (0, projectDevTargetAccountPrompt_1.selectDeveloperTestTargetAccountPrompt)(accounts, accountConfig);
71
+ targetTestingAccountId = devAccountPromptResponse.targetAccountId;
72
+ if (!!devAccountPromptResponse.notInConfigAccount) {
73
+ // When the developer test account isn't configured in the CLI config yet
74
+ // Walk the user through adding the account's PAK to the config
75
+ await (0, localDev_1.useExistingDevTestAccount)(env, devAccountPromptResponse.notInConfigAccount);
76
+ }
77
+ else if (devAccountPromptResponse.createNestedAccount) {
78
+ // Create a new developer test account and automatically add it to the CLI config
79
+ targetTestingAccountId = await (0, localDev_1.createDeveloperTestAccountForLocalDev)(targetProjectAccountId, accountConfig, env);
80
+ }
81
+ // Check if project exists in HubSpot
82
+ const { projectExists, project: uploadedProject } = await (0, projects_1.ensureProjectExists)(targetProjectAccountId, projectConfig.name, {
83
+ allowCreate: false,
84
+ noLogs: true,
85
+ });
86
+ let deployedBuild;
87
+ let isGithubLinked = false;
88
+ let project = uploadedProject;
89
+ SpinniesManager_1.default.init();
90
+ if (projectExists && project) {
91
+ deployedBuild = project.deployedBuild;
92
+ isGithubLinked = Boolean(project.sourceIntegration && project.sourceIntegration.source === 'GITHUB');
93
+ }
94
+ else {
95
+ project = await (0, localDev_1.createNewProjectForLocalDev)(projectConfig, targetProjectAccountId, false, false);
96
+ deployedBuild = await (0, localDev_1.createInitialBuildForNewProject)(projectConfig, projectDir, targetProjectAccountId, true);
97
+ }
98
+ const LocalDev = new LocalDevManagerV2_1.default({
99
+ projectNodes,
100
+ debug: args.debug,
101
+ deployedBuild,
102
+ isGithubLinked,
103
+ targetProjectAccountId,
104
+ targetTestingAccountId: targetTestingAccountId,
105
+ projectConfig,
106
+ projectDir,
107
+ projectId: project.id,
108
+ env,
109
+ });
110
+ await LocalDev.start();
111
+ (0, process_1.handleExit)(({ isSIGHUP }) => LocalDev.stop(!isSIGHUP));
112
+ }