@hubspot/cli 7.7.1-experimental.0 → 7.7.2-experimental.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/commands/account/auth.js +51 -82
  2. package/commands/auth.js +2 -15
  3. package/commands/config/migrate.js +17 -36
  4. package/commands/init.js +1 -2
  5. package/commands/module/marketplace-validate.js +6 -8
  6. package/commands/module.js +2 -1
  7. package/commands/project/add.d.ts +5 -2
  8. package/commands/project/add.js +43 -80
  9. package/commands/project/create.d.ts +2 -8
  10. package/commands/project/create.js +84 -55
  11. package/commands/project/dev/unifiedFlow.js +1 -0
  12. package/commands/remove.js +6 -12
  13. package/commands/theme/generate-selectors.js +7 -10
  14. package/commands/theme/marketplace-validate.js +6 -8
  15. package/commands/theme/preview.js +17 -18
  16. package/commands/theme.js +2 -2
  17. package/commands/upload.js +26 -63
  18. package/commands/watch.js +20 -32
  19. package/lang/en.d.ts +140 -92
  20. package/lang/en.js +143 -98
  21. package/lang/en.lyaml +3 -186
  22. package/lib/configMigrate.d.ts +2 -2
  23. package/lib/configMigrate.js +34 -69
  24. package/lib/constants.d.ts +23 -5
  25. package/lib/constants.js +24 -6
  26. package/lib/generateSelectors.js +3 -5
  27. package/lib/marketplaceValidate.d.ts +12 -2
  28. package/lib/marketplaceValidate.js +22 -29
  29. package/lib/middleware/configMiddleware.js +1 -0
  30. package/lib/projects/add/legacyAddComponent.d.ts +5 -0
  31. package/lib/projects/add/legacyAddComponent.js +48 -0
  32. package/lib/projects/add/v3AddComponent.d.ts +8 -0
  33. package/lib/projects/add/v3AddComponent.js +85 -0
  34. package/lib/projects/components.d.ts +2 -0
  35. package/lib/projects/components.js +82 -0
  36. package/lib/projects/create/index.d.ts +23 -0
  37. package/lib/projects/create/index.js +33 -0
  38. package/lib/projects/create/legacy.d.ts +6 -0
  39. package/lib/projects/{create.js → create/legacy.js} +20 -11
  40. package/lib/projects/create/v3.d.ts +27 -0
  41. package/lib/projects/create/v3.js +158 -0
  42. package/lib/projects/localDev/AppDevModeInterface.d.ts +3 -2
  43. package/lib/projects/localDev/AppDevModeInterface.js +38 -2
  44. package/lib/projects/localDev/LocalDevProcess.d.ts +12 -5
  45. package/lib/projects/localDev/LocalDevProcess.js +47 -17
  46. package/lib/projects/localDev/LocalDevState.d.ts +16 -3
  47. package/lib/projects/localDev/LocalDevState.js +43 -2
  48. package/lib/projects/localDev/LocalDevWatcher.js +3 -6
  49. package/lib/projects/localDev/LocalDevWebsocketServer.d.ts +3 -0
  50. package/lib/projects/localDev/LocalDevWebsocketServer.js +48 -9
  51. package/lib/prompts/createProjectPrompt.d.ts +14 -5
  52. package/lib/prompts/createProjectPrompt.js +36 -13
  53. package/lib/prompts/projectAddPrompt.d.ts +5 -1
  54. package/lib/prompts/projectAddPrompt.js +35 -7
  55. package/lib/prompts/setAsDefaultAccountPrompt.js +10 -0
  56. package/package.json +6 -5
  57. package/types/LocalDev.d.ts +11 -1
  58. package/types/Projects.d.ts +19 -2
  59. package/lib/projects/create.d.ts +0 -5
@@ -5,71 +5,75 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const path_1 = __importDefault(require("path"));
7
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const logger_1 = require("@hubspot/local-dev-lib/logger");
10
8
  const github_1 = require("@hubspot/local-dev-lib/github");
11
9
  const path_2 = require("@hubspot/local-dev-lib/path");
12
10
  const usageTracking_1 = require("../../lib/usageTracking");
13
- const createProjectPrompt_1 = require("../../lib/prompts/createProjectPrompt");
14
11
  const config_1 = require("../../lib/projects/config");
15
- const create_1 = require("../../lib/projects/create");
16
- const lang_1 = require("../../lib/lang");
12
+ const legacy_1 = require("../../lib/projects/create/legacy");
13
+ const v3_1 = require("../../lib/projects/create/v3");
17
14
  const ui_1 = require("../../lib/ui");
18
15
  const errorHandlers_1 = require("../../lib/errorHandlers");
19
16
  const exitCodes_1 = require("../../lib/enums/exitCodes");
20
17
  const constants_1 = require("../../lib/constants");
21
18
  const yargsUtils_1 = require("../../lib/yargsUtils");
22
- const command = 'create';
23
- const describe = (0, ui_1.uiBetaTag)((0, lang_1.i18n)(`commands.project.subcommands.create.describe`), false);
19
+ const projects_1 = require("@hubspot/local-dev-lib/constants/projects");
20
+ const en_1 = require("../../lang/en");
21
+ const logger_1 = require("../../lib/ui/logger");
22
+ const v3_2 = require("../../lib/projects/create/v3");
23
+ const create_1 = require("../../lib/projects/create");
24
+ const command = ['create', 'init'];
25
+ const describe = (0, ui_1.uiBetaTag)(en_1.commands.project.create.describe, false);
26
+ const { v2023_2, v2025_1, v2025_2 } = projects_1.PLATFORM_VERSIONS;
24
27
  async function handler(args) {
25
- const { derivedAccountId } = args;
26
- let latestRepoReleaseTag;
27
- let templateSource = args.templateSource;
28
- if (!templateSource) {
29
- templateSource = constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
30
- try {
31
- const releaseData = await (0, github_1.fetchReleaseData)(constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH);
32
- if (releaseData) {
33
- latestRepoReleaseTag = releaseData.tag_name;
34
- }
35
- }
36
- catch (err) {
37
- logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToFetchProjectList`));
38
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
39
- }
40
- }
41
- if (!templateSource || !templateSource.includes('/')) {
42
- logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.invalidTemplateSource`));
28
+ const { derivedAccountId, platformVersion, templateSource } = args;
29
+ if (templateSource && !templateSource.includes('/')) {
30
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.invalidTemplateSource);
43
31
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
44
32
  }
45
- const projectTemplates = await (0, create_1.getProjectTemplateListFromRepo)(templateSource, latestRepoReleaseTag || constants_1.DEFAULT_PROJECT_TEMPLATE_BRANCH);
46
- if (!projectTemplates.length) {
47
- logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToFetchProjectList`));
33
+ const repo = templateSource || constants_1.HUBSPOT_PROJECT_COMPONENTS_GITHUB_PATH;
34
+ let handleResult;
35
+ try {
36
+ handleResult = await (0, create_1.handleProjectCreationFlow)(args);
37
+ }
38
+ catch (error) {
39
+ (0, errorHandlers_1.logError)(error);
48
40
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
49
41
  }
50
- const createProjectPromptResponse = await (0, createProjectPrompt_1.createProjectPrompt)(args, projectTemplates);
42
+ const { authType, distribution, repoConfig, projectContents, createProjectPromptResponse, } = handleResult;
43
+ (0, usageTracking_1.trackCommandUsage)('project-create', {
44
+ type: createProjectPromptResponse.projectTemplate?.name ||
45
+ (createProjectPromptResponse.componentTemplates || [])
46
+ // @ts-expect-error
47
+ .map((item) => item.label)
48
+ .join(','),
49
+ }, derivedAccountId);
51
50
  const projectDest = path_1.default.resolve((0, path_2.getCwd)(), createProjectPromptResponse.dest);
52
- (0, usageTracking_1.trackCommandUsage)('project-create', { type: createProjectPromptResponse.projectTemplate.name }, derivedAccountId);
53
51
  const { projectConfig: existingProjectConfig, projectDir: existingProjectDir, } = await (0, config_1.getProjectConfig)(projectDest);
54
52
  // Exit if the target destination is within an existing project
55
53
  if (existingProjectConfig &&
56
54
  existingProjectDir &&
57
55
  projectDest.startsWith(existingProjectDir)) {
58
- logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.cannotNestProjects`, {
59
- projectDir: existingProjectDir,
60
- }));
56
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.cannotNestProjects(existingProjectDir));
61
57
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
62
58
  }
59
+ const components = (0, v3_2.generateComponentPaths)({
60
+ createProjectPromptResponse,
61
+ platformVersion,
62
+ repoConfig,
63
+ projectContents,
64
+ authType,
65
+ distribution,
66
+ });
63
67
  try {
64
- await (0, github_1.cloneGithubRepo)(templateSource, projectDest, {
65
- sourceDir: createProjectPromptResponse.projectTemplate.path,
66
- tag: latestRepoReleaseTag,
68
+ await (0, github_1.cloneGithubRepo)(repo, projectDest, {
69
+ sourceDir: createProjectPromptResponse.projectTemplate?.path || components,
67
70
  hideLogs: true,
71
+ branch: 'main',
68
72
  });
69
73
  }
70
74
  catch (err) {
71
75
  (0, errorHandlers_1.debugError)(err);
72
- logger_1.logger.error((0, lang_1.i18n)(`commands.project.subcommands.create.errors.failedToDownloadProject`));
76
+ logger_1.uiLogger.error(en_1.commands.project.create.errors.failedToDownloadProject);
73
77
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
74
78
  }
75
79
  const projectConfigPath = path_1.default.join(projectDest, constants_1.PROJECT_CONFIG_FILE);
@@ -79,17 +83,13 @@ async function handler(args) {
79
83
  name: createProjectPromptResponse.name,
80
84
  });
81
85
  // If the template is 'no-template', we need to manually create a src directory
82
- if (createProjectPromptResponse.projectTemplate.name ===
83
- create_1.EMPTY_PROJECT_TEMPLATE_NAME) {
86
+ if (createProjectPromptResponse.projectTemplate?.name ===
87
+ legacy_1.EMPTY_PROJECT_TEMPLATE_NAME ||
88
+ projectContents === v3_1.EMPTY_PROJECT) {
84
89
  fs_extra_1.default.ensureDirSync(path_1.default.join(projectDest, 'src'));
85
90
  }
86
- logger_1.logger.log('');
87
- logger_1.logger.success((0, lang_1.i18n)(`commands.project.subcommands.create.logs.success`, {
88
- projectName: createProjectPromptResponse.name,
89
- projectDest,
90
- }));
91
- logger_1.logger.log('');
92
- logger_1.logger.log(chalk_1.default.bold((0, lang_1.i18n)(`commands.project.subcommands.create.logs.welcomeMessage`)));
91
+ logger_1.uiLogger.success(en_1.commands.project.create.logs.success(createProjectPromptResponse.name, projectDest));
92
+ logger_1.uiLogger.log(en_1.commands.project.create.logs.welcomeMessage);
93
93
  (0, ui_1.uiFeatureHighlight)([
94
94
  'projectCommandTip',
95
95
  'projectUploadCommand',
@@ -104,32 +104,61 @@ async function handler(args) {
104
104
  function projectCreateBuilder(yargs) {
105
105
  yargs.options({
106
106
  name: {
107
- describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.name.describe`),
107
+ describe: en_1.commands.project.create.options.name.describe,
108
108
  type: 'string',
109
109
  },
110
110
  dest: {
111
- describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.dest.describe`),
111
+ describe: en_1.commands.project.create.options.dest.describe,
112
112
  type: 'string',
113
113
  },
114
114
  template: {
115
- describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.template.describe`),
115
+ // TODO: When we release 2025.2 scaffolding, we need to point out this is only valid for 2025.1 prior
116
+ describe: en_1.commands.project.create.options.template.describe,
116
117
  type: 'string',
117
118
  },
118
119
  'template-source': {
119
- describe: (0, lang_1.i18n)(`commands.project.subcommands.create.options.templateSource.describe`),
120
+ describe: en_1.commands.project.create.options.templateSource.describe,
121
+ type: 'string',
122
+ },
123
+ 'platform-version': {
124
+ describe: en_1.commands.project.create.options.platformVersion.describe,
125
+ hidden: true,
120
126
  type: 'string',
127
+ choices: [v2023_2, v2025_1, v2025_2],
128
+ default: v2023_2,
129
+ },
130
+ 'project-base': {
131
+ describe: en_1.commands.project.create.options.projectBase.describe,
132
+ hidden: true,
133
+ type: 'string',
134
+ choices: [v3_1.EMPTY_PROJECT, v3_1.PROJECT_WITH_APP],
135
+ },
136
+ distribution: {
137
+ describe: en_1.commands.project.create.options.distribution.describe,
138
+ hidden: true,
139
+ type: 'string',
140
+ choices: [constants_1.privateDistribution, constants_1.marketplaceDistribution],
141
+ },
142
+ auth: {
143
+ describe: en_1.commands.project.create.options.auth.describe,
144
+ hidden: true,
145
+ type: 'string',
146
+ choices: [constants_1.oAuth, constants_1.staticAuth],
147
+ },
148
+ features: {
149
+ describe: en_1.commands.project.create.options.features.describe,
150
+ hidden: true,
151
+ type: 'array',
121
152
  },
122
153
  });
154
+ yargs.conflicts('template', 'features');
123
155
  yargs.example([
124
- [
125
- '$0 project create',
126
- (0, lang_1.i18n)(`commands.project.subcommands.create.examples.default`),
127
- ],
156
+ ['$0 project create', en_1.commands.project.create.examples.default],
128
157
  ]);
129
158
  yargs.example([
130
159
  [
131
160
  '$0 project create --template-source HubSpot/ui-extensions-examples',
132
- (0, lang_1.i18n)(`commands.project.subcommands.create.examples.templateSource`),
161
+ en_1.commands.project.create.examples.templateSource,
133
162
  ],
134
163
  ]);
135
164
  return yargs;
@@ -124,6 +124,7 @@ async function unifiedProjectDevFlow({ args, targetProjectAccountId, providedTar
124
124
  targetTestingAccountId: targetTestingAccountId,
125
125
  projectConfig,
126
126
  projectDir,
127
+ projectName: project.name,
127
128
  projectId: project.id,
128
129
  env,
129
130
  });
@@ -1,28 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const fileMapper_1 = require("@hubspot/local-dev-lib/api/fileMapper");
4
- const logger_1 = require("@hubspot/local-dev-lib/logger");
5
4
  const index_1 = require("../lib/errorHandlers/index");
6
5
  const usageTracking_1 = require("../lib/usageTracking");
7
- const lang_1 = require("../lib/lang");
6
+ const en_1 = require("../lang/en");
8
7
  const yargsUtils_1 = require("../lib/yargsUtils");
8
+ const logger_1 = require("../lib/ui/logger");
9
9
  const command = 'remove <path>';
10
- const describe = (0, lang_1.i18n)(`commands.remove.describe`);
10
+ const describe = en_1.commands.remove.describe;
11
11
  async function handler(args) {
12
12
  const { path: hsPath, derivedAccountId } = args;
13
13
  (0, usageTracking_1.trackCommandUsage)('remove', undefined, derivedAccountId);
14
14
  try {
15
15
  await (0, fileMapper_1.deleteFile)(derivedAccountId, hsPath);
16
- logger_1.logger.log((0, lang_1.i18n)(`commands.remove.deleted`, {
17
- accountId: derivedAccountId,
18
- path: hsPath,
19
- }));
16
+ logger_1.uiLogger.log(en_1.commands.remove.deleted(hsPath, derivedAccountId));
20
17
  }
21
18
  catch (error) {
22
- logger_1.logger.error((0, lang_1.i18n)(`commands.remove.errors.deleteFailed`, {
23
- accountId: derivedAccountId,
24
- path: hsPath,
25
- }));
19
+ logger_1.uiLogger.error(en_1.commands.remove.errors.deleteFailed(hsPath, derivedAccountId));
26
20
  (0, index_1.logError)(error, new index_1.ApiErrorContext({
27
21
  accountId: derivedAccountId,
28
22
  request: hsPath,
@@ -31,7 +25,7 @@ async function handler(args) {
31
25
  }
32
26
  function cmsRemoveBuilder(yargs) {
33
27
  yargs.positional('path', {
34
- describe: (0, lang_1.i18n)(`commands.remove.positionals.path.describe`),
28
+ describe: en_1.commands.remove.positionals.path,
35
29
  type: 'string',
36
30
  });
37
31
  return yargs;
@@ -4,11 +4,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const fs_1 = __importDefault(require("fs"));
7
- const logger_1 = require("@hubspot/local-dev-lib/logger");
8
- const lang_1 = require("../../lib/lang");
7
+ const en_1 = require("../../lang/en");
9
8
  const generateSelectors_1 = require("../../lib/generateSelectors");
10
9
  const exitCodes_1 = require("../../lib/enums/exitCodes");
11
10
  const yargsUtils_1 = require("../../lib/yargsUtils");
11
+ const logger_1 = require("../../lib/ui/logger");
12
12
  const HUBL_EXPRESSION_REGEX = new RegExp(/{%\s*(.*)\s*%}/, 'g');
13
13
  const HUBL_VARIABLE_NAME_REGEX = new RegExp(/{%\s*set\s*(\w*)/, 'i');
14
14
  const HUBL_STATEMENT_REGEX = new RegExp(/{{\s*[\w.(,\d\-\s)|/~]*.*}}/, 'g');
@@ -19,12 +19,12 @@ const CSS_SELECTORS_REGEX = new RegExp(/([\s\w:.,\0-[\]]*){/, 'i');
19
19
  const CSS_EXPRESSION_REGEX = new RegExp(/(?!\s)([^}])*(?![.#\s,>])[^}]*}/, 'g');
20
20
  const THEME_PATH_REGEX = new RegExp(/=\s*.*(theme\.(\w|\.)*)/, 'i');
21
21
  const command = 'generate-selectors <path>';
22
- const describe = (0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.describe');
22
+ const describe = en_1.commands.theme.subcommands.generateSelectors.describe;
23
23
  async function handler(args) {
24
24
  const { path } = args;
25
25
  const fieldsJsonPath = (0, generateSelectors_1.findFieldsJsonPath)(path);
26
26
  if (!fieldsJsonPath) {
27
- logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.errors.fieldsNotFound'));
27
+ logger_1.uiLogger.error(en_1.commands.theme.subcommands.generateSelectors.errors.fieldsNotFound);
28
28
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
29
29
  }
30
30
  let fieldsJson = JSON.parse(fs_1.default.readFileSync(fieldsJsonPath, 'utf-8'));
@@ -134,7 +134,7 @@ async function handler(args) {
134
134
  return themeFieldsSelectorMap;
135
135
  }, {});
136
136
  if (!Object.keys(finalMap).length) {
137
- logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.errors.noSelectorsFound'));
137
+ logger_1.uiLogger.error(en_1.commands.theme.subcommands.generateSelectors.errors.noSelectorsFound);
138
138
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
139
139
  }
140
140
  Object.keys(finalMap).forEach(themeFieldKey => {
@@ -151,14 +151,11 @@ async function handler(args) {
151
151
  const selectorsMap = (0, generateSelectors_1.generateSelectorsMap)(fieldsJson);
152
152
  const selectorsPath = `${path}/editor-preview.json`;
153
153
  fs_1.default.writeFileSync(selectorsPath, `${JSON.stringify({ selectors: selectorsMap }, null, 2)}\n`);
154
- logger_1.logger.success((0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.success', {
155
- themePath: path,
156
- selectorsPath,
157
- }));
154
+ logger_1.uiLogger.success(en_1.commands.theme.subcommands.generateSelectors.success(path, selectorsPath));
158
155
  }
159
156
  function themeSelectorBuilder(yargs) {
160
157
  yargs.positional('path', {
161
- describe: (0, lang_1.i18n)('commands.theme.subcommands.generateSelectors.positionals.path.describe'),
158
+ describe: en_1.commands.theme.subcommands.generateSelectors.positionals.path,
162
159
  type: 'string',
163
160
  required: true,
164
161
  });
@@ -6,31 +6,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const SpinniesManager_1 = __importDefault(require("../../lib/ui/SpinniesManager"));
7
7
  const usageTracking_1 = require("../../lib/usageTracking");
8
8
  const marketplaceValidate_1 = require("../../lib/marketplaceValidate");
9
- const lang_1 = require("../../lib/lang");
9
+ const en_1 = require("../../lang/en");
10
10
  const yargsUtils_1 = require("../../lib/yargsUtils");
11
11
  const command = 'marketplace-validate <path>';
12
- const describe = (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.describe');
12
+ const describe = en_1.commands.theme.subcommands.marketplaceValidate.describe;
13
13
  async function handler(args) {
14
14
  const { path, derivedAccountId } = args;
15
15
  (0, usageTracking_1.trackCommandUsage)('validate', {}, derivedAccountId);
16
16
  SpinniesManager_1.default.init();
17
17
  SpinniesManager_1.default.add('marketplaceValidation', {
18
- text: (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.logs.validatingTheme', {
19
- path,
20
- }),
18
+ text: en_1.commands.theme.subcommands.marketplaceValidate.logs.validatingTheme(path),
21
19
  });
22
20
  const assetType = 'THEME';
23
21
  const validationId = await (0, marketplaceValidate_1.kickOffValidation)(derivedAccountId, assetType, path);
24
22
  await (0, marketplaceValidate_1.pollForValidationFinish)(derivedAccountId, validationId);
25
23
  SpinniesManager_1.default.remove('marketplaceValidation');
26
24
  const validationResults = await (0, marketplaceValidate_1.fetchValidationResults)(derivedAccountId, validationId);
27
- (0, marketplaceValidate_1.processValidationErrors)('commands.theme.subcommands.marketplaceValidate', validationResults);
28
- (0, marketplaceValidate_1.displayValidationResults)('commands.theme.subcommands.marketplaceValidate', validationResults);
25
+ (0, marketplaceValidate_1.processValidationErrors)(en_1.commands.theme.subcommands.marketplaceValidate.errors.invalidPath, validationResults);
26
+ (0, marketplaceValidate_1.displayValidationResults)(en_1.commands.theme.subcommands.marketplaceValidate.results, validationResults);
29
27
  process.exit();
30
28
  }
31
29
  function themeValidateBuilder(yargs) {
32
30
  yargs.positional('path', {
33
- describe: (0, lang_1.i18n)('commands.theme.subcommands.marketplaceValidate.positionals.path.describe'),
31
+ describe: en_1.commands.theme.subcommands.marketplaceValidate.positionals.path.describe,
34
32
  type: 'string',
35
33
  required: true,
36
34
  });
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const fs_1 = __importDefault(require("fs"));
7
7
  const path_1 = __importDefault(require("path"));
8
8
  const cli_progress_1 = __importDefault(require("cli-progress"));
9
- const lang_1 = require("../../lib/lang");
10
- const logger_1 = require("@hubspot/local-dev-lib/logger");
9
+ const en_1 = require("../../lang/en");
11
10
  const path_2 = require("@hubspot/local-dev-lib/path");
12
11
  const files_1 = require("@hubspot/local-dev-lib/constants/files");
13
12
  const themes_1 = require("@hubspot/local-dev-lib/cms/themes");
@@ -24,13 +23,12 @@ const Projects_1 = require("../../types/Projects");
24
23
  const hasFeature_1 = require("../../lib/hasFeature");
25
24
  const constants_1 = require("../../lib/constants");
26
25
  const yargsUtils_1 = require("../../lib/yargsUtils");
26
+ const logger_1 = require("../../lib/ui/logger");
27
27
  const command = 'preview [--src] [--dest]';
28
- const describe = (0, lang_1.i18n)('commands.theme.subcommands.preview.describe');
28
+ const describe = en_1.commands.theme.subcommands.preview.describe;
29
29
  function validateSrcPath(src) {
30
30
  const logInvalidPath = () => {
31
- logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.preview.errors.invalidPath', {
32
- path: src,
33
- }));
31
+ logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.invalidPath(src));
34
32
  };
35
33
  try {
36
34
  const stats = fs_1.default.statSync(src);
@@ -47,7 +45,7 @@ function validateSrcPath(src) {
47
45
  }
48
46
  function handleUserInput() {
49
47
  const onTerminate = () => {
50
- logger_1.logger.log((0, lang_1.i18n)('commands.theme.subcommands.preview.logs.processExited'));
48
+ logger_1.uiLogger.log(en_1.commands.theme.subcommands.preview.logs.processExited);
51
49
  process.exit(exitCodes_1.EXIT_CODES.SUCCESS);
52
50
  };
53
51
  (0, process_1.handleExit)(onTerminate);
@@ -78,7 +76,7 @@ async function determineSrcAndDest(args) {
78
76
  const projectComponents = await (0, structure_1.findProjectComponents)(projectDir);
79
77
  const themeComponents = projectComponents.filter(c => c.type === Projects_1.ComponentTypes.HublTheme);
80
78
  if (themeComponents.length === 0) {
81
- logger_1.logger.error((0, lang_1.i18n)('commands.theme.subcommands.preview.errors.noThemeComponents'));
79
+ logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.noThemeComponents);
82
80
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
83
81
  }
84
82
  const answer = await (0, previewPrompt_1.previewProjectPrompt)(themeComponents);
@@ -102,7 +100,7 @@ async function handler(args) {
102
100
  hideCursor: true,
103
101
  }, cli_progress_1.default.Presets.rect);
104
102
  initialUploadProgressBar.start(numFiles, 0, {
105
- label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.start'),
103
+ label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar.start,
106
104
  });
107
105
  let uploadsHaveStarted = false;
108
106
  const uploadOptions = {
@@ -114,7 +112,8 @@ async function handler(args) {
114
112
  if (!uploadsHaveStarted) {
115
113
  uploadsHaveStarted = true;
116
114
  initialUploadProgressBar.update(0, {
117
- label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.uploading'),
115
+ label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar
116
+ .uploading,
118
117
  });
119
118
  }
120
119
  },
@@ -127,12 +126,12 @@ async function handler(args) {
127
126
  onFinalErrorCallback: () => initialUploadProgressBar.increment(),
128
127
  onFinishCallback: (results) => {
129
128
  initialUploadProgressBar.update(numFiles, {
130
- label: (0, lang_1.i18n)('commands.theme.subcommands.preview.initialUploadProgressBar.finish'),
129
+ label: en_1.commands.theme.subcommands.preview.initialUploadProgressBar.finish,
131
130
  });
132
131
  initialUploadProgressBar.stop();
133
132
  results.forEach(result => {
134
133
  if (result.resultType == files_1.FILE_UPLOAD_RESULT_TYPES.FAILURE) {
135
- logger_1.logger.error('Uploading file "%s" to "%s" failed', result.file, dest);
134
+ logger_1.uiLogger.error(en_1.commands.theme.subcommands.preview.errors.uploadFailed(result.file, dest));
136
135
  (0, index_1.logError)(result.error, new index_1.ApiErrorContext({
137
136
  accountId: derivedAccountId,
138
137
  request: dest,
@@ -154,7 +153,7 @@ async function handler(args) {
154
153
  createUnifiedDevServer = createDevServer;
155
154
  }
156
155
  catch (e) {
157
- logger_1.logger.warn('Unified dev server requires node 20 to run. Defaulting to legacy preview.');
156
+ logger_1.uiLogger.warn('Unified dev server requires node 20 to run. Defaulting to legacy preview.');
158
157
  }
159
158
  const isUngatedForUnified = await (0, hasFeature_1.hasFeature)(derivedAccountId, constants_1.FEATURES.UNIFIED_THEME_PREVIEW);
160
159
  if (isUngatedForUnified && createUnifiedDevServer) {
@@ -183,27 +182,27 @@ async function handler(args) {
183
182
  function themePreviewBuilder(yargs) {
184
183
  yargs
185
184
  .option('src', {
186
- describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.src.describe'),
185
+ describe: en_1.commands.theme.subcommands.preview.positionals.src,
187
186
  type: 'string',
188
187
  requiresArg: true,
189
188
  })
190
189
  .option('dest', {
191
- describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.dest.describe'),
190
+ describe: en_1.commands.theme.subcommands.preview.positionals.dest,
192
191
  type: 'string',
193
192
  requiresArg: true,
194
193
  })
195
194
  .option('notify', {
196
195
  alias: 'n',
197
- describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.notify.describe'),
196
+ describe: en_1.commands.theme.subcommands.preview.options.notify,
198
197
  type: 'string',
199
198
  requiresArg: true,
200
199
  })
201
200
  .option('no-ssl', {
202
- describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.noSsl.describe'),
201
+ describe: en_1.commands.theme.subcommands.preview.options.noSsl,
203
202
  type: 'boolean',
204
203
  })
205
204
  .option('port', {
206
- describe: (0, lang_1.i18n)('commands.theme.subcommands.preview.options.port.describe'),
205
+ describe: en_1.commands.theme.subcommands.preview.options.port,
207
206
  type: 'number',
208
207
  })
209
208
  .option('resetSession', {
package/commands/theme.js CHANGED
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const marketplace_validate_1 = __importDefault(require("./theme/marketplace-validate"));
7
7
  const generate_selectors_1 = __importDefault(require("./theme/generate-selectors"));
8
8
  const preview_1 = __importDefault(require("./theme/preview"));
9
- const lang_1 = require("../lib/lang");
9
+ const en_1 = require("../lang/en");
10
10
  const yargsUtils_1 = require("../lib/yargsUtils");
11
11
  const command = ['theme', 'themes'];
12
- const describe = (0, lang_1.i18n)('commands.theme.describe');
12
+ const describe = en_1.commands.theme.describe;
13
13
  function themeBuilder(yargs) {
14
14
  yargs
15
15
  .command(preview_1.default)