@hubspot/cli 7.0.11-experimental.0 → 7.1.0-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/commands/auth.js CHANGED
@@ -33,7 +33,7 @@ const ALLOWED_AUTH_METHODS = [
33
33
  const SUPPORTED_AUTHENTICATION_PROTOCOLS_TEXT = commaSeparatedValues(ALLOWED_AUTH_METHODS);
34
34
  exports.command = 'auth';
35
35
  exports.describe = i18n(`${i18nKey}.describe`, {
36
- supportedProtocols: SUPPORTED_AUTHENTICATION_PROTOCOLS_TEXT,
36
+ configName: DEFAULT_HUBSPOT_CONFIG_YAML_FILE_NAME,
37
37
  });
38
38
  exports.handler = async (options) => {
39
39
  const { authType: authTypeFlagValue, config: configFlagValue, qa, providedAccountId, } = options;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const { useV3Api } = require('../../lib/projects/buildAndDeploy');
4
5
  const chalk = require('chalk');
5
6
  const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
6
7
  const { trackCommandUsage } = require('../../lib/usageTracking');
@@ -83,7 +84,7 @@ exports.handler = async (options) => {
83
84
  logger.error(i18n(`${i18nKey}.errors.noBuildId`));
84
85
  return process.exit(EXIT_CODES.ERROR);
85
86
  }
86
- const { data: deployResp } = await deployProject(derivedAccountId, projectName, buildIdToDeploy, options.useV3);
87
+ const { data: deployResp } = await deployProject(derivedAccountId, projectName, buildIdToDeploy, useV3Api(projectConfig?.platformVersion));
87
88
  if (!deployResp || deployResp.error) {
88
89
  logger.error(i18n(`${i18nKey}.errors.deploy`, {
89
90
  details: deployResp.error.message,
@@ -123,11 +124,6 @@ exports.builder = yargs => {
123
124
  describe: i18n(`${i18nKey}.options.build.describe`),
124
125
  type: 'number',
125
126
  },
126
- 'use-v3': {
127
- hidden: true,
128
- type: 'boolean',
129
- default: false,
130
- },
131
127
  });
132
128
  yargs.example([
133
129
  ['$0 project deploy', i18n(`${i18nKey}.examples.default`)],
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  // @ts-nocheck
4
+ const { useV3Api } = require('../../lib/projects/buildAndDeploy');
4
5
  const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
5
6
  const chalk = require('chalk');
6
7
  const { logger } = require('@hubspot/local-dev-lib/logger');
@@ -30,7 +31,7 @@ exports.handler = async (options) => {
30
31
  uploadCommand: true,
31
32
  });
32
33
  try {
33
- const { result, uploadError } = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, pollProjectBuildAndDeploy, message, options.translate);
34
+ const { result, uploadError } = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, pollProjectBuildAndDeploy, message, useV3Api(projectConfig?.platformVersion));
34
35
  if (uploadError) {
35
36
  if (isSpecifiedError(uploadError, {
36
37
  subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
@@ -80,11 +81,6 @@ exports.builder = yargs => {
80
81
  type: 'string',
81
82
  default: '',
82
83
  },
83
- translate: {
84
- hidden: true,
85
- type: 'boolean',
86
- default: false,
87
- },
88
84
  });
89
85
  yargs.example([['$0 project upload', i18n(`${i18nKey}.examples.default`)]]);
90
86
  addConfigOptions(yargs);
package/lang/en.lyaml CHANGED
@@ -91,7 +91,7 @@ en:
91
91
  other: "Remove {{ count }} inactive accounts from the CLI config?"
92
92
  removeSuccess: "Removed {{ accountName }} from the CLI config."
93
93
  auth:
94
- describe: "Configure authentication for a HubSpot account. Supported authentication protocols are {{ supportedProtocols }}."
94
+ describe: "Configure authentication for your HubSpot account. This will update the {{ configName }} file that stores your account information."
95
95
  errors:
96
96
  noConfigFileFound: "No config file was found. To create a new config file, use the \"hs init\" command."
97
97
  unsupportedAuthType: "Unsupported auth type: {{ type }}. The only supported authentication protocols are {{ supportedProtocols }}."
@@ -156,7 +156,7 @@ en:
156
156
  target:
157
157
  describe: "Medium to test against"
158
158
  verbose:
159
- describe: "View a detailed output of the lighthouse sores"
159
+ describe: "View a detailed output of the lighthouse scores"
160
160
  getReactModule:
161
161
  describe: "Get a specified default React module."
162
162
  selectModulePrompt: "Select a React module to download"
@@ -188,11 +188,11 @@ en:
188
188
  folderOverwritePrompt: "The folder with name \"{{ folderName }}\" already exists. Overwrite?"
189
189
  errors:
190
190
  nameRequired: "The \"name\" argument is required when creating an API Sample."
191
- noSamples: "Currently there are no samples available, please, try again later."
191
+ noSamples: "Currently there are no samples available. Please try again later."
192
192
  info:
193
193
  sampleChosen: "You've chosen {{ sampleType }} sample written on {{ sampleLanguage }} language"
194
194
  success:
195
- sampleCreated: "Please, follow {{ filePath }}/README.md to find out how to run the sample"
195
+ sampleCreated: "Please follow {{ filePath }}/README.md to find out how to run the sample"
196
196
  module:
197
197
  errors:
198
198
  nameRequired: "The \"name\" argument is required when creating a Custom Module."
@@ -443,7 +443,7 @@ en:
443
443
  success:
444
444
  fetch: "Downloaded HubDB table {{ tableId }} to {{ path }}"
445
445
  init:
446
- describe: "Initialize {{ configName }} for a HubSpot account."
446
+ describe: "Configure authentication for your HubSpot account. This will create a {{ configName }} file to store your account information."
447
447
  options:
448
448
  authType:
449
449
  describe: "Authentication mechanism"
@@ -1262,7 +1262,7 @@ en:
1262
1262
  selectScopes: "Select access scopes (see https://developers.hubspot.com/docs/methods/oauth2/initiate-oauth-integration#scopes)"
1263
1263
  personalAccessKeySetupTitle: "HubSpot Personal Access Key Setup"
1264
1264
  personalAccessKeyBrowserOpenPrep: "A personal access key is required to authenticate the CLI to interact with your HubSpot account. We'll open a secure page in your default browser where you can view and copy your personal access key."
1265
- personalAccessKeyBrowserOpenPrompt: "Open hubspot.com to copy your personal access key?"
1265
+ personalAccessKeyBrowserOpenPrompt: "Open HubSpot to copy your personal access key?"
1266
1266
  logs:
1267
1267
  openingWebBrowser: "Opening {{ url }} in your web browser"
1268
1268
  errors:
@@ -1296,8 +1296,8 @@ en:
1296
1296
  blank: "The name may not be blank. Please try again."
1297
1297
  space: "The name may not contain spaces. Please try again."
1298
1298
  createApiSamplePrompt:
1299
- selectApiSampleApp: "Please, select API sample app"
1300
- selectLanguage: "Please, select sample app's language"
1299
+ selectApiSampleApp: "Please select API sample app"
1300
+ selectLanguage: "Please select sample app's language"
1301
1301
  errors:
1302
1302
  apiSampleAppRequired: "Please select API sample app"
1303
1303
  languageRequired: "Please select API sample app's language"
@@ -1372,8 +1372,8 @@ en:
1372
1372
  installPublicAppPrompt:
1373
1373
  explanation: "Local development requires this app to be installed in the target test account"
1374
1374
  reinstallExplanation: "This app's required scopes have been updated since it was last installed on the target test account. To avoid issues with local development, we recommend reinstalling the app with the updated scopes."
1375
- prompt: "Open hubspot.com to install this app?"
1376
- reinstallPrompt: "Open hubspot.com to reinstall this app?"
1375
+ prompt: "Open HubSpot to install this app?"
1376
+ reinstallPrompt: "Open HubSpot to reinstall this app?"
1377
1377
  decline: "To continue local development of this app, install it in your target test account and re-run {{#bold}}`hs project dev`{{/bold}}"
1378
1378
  selectHubDBTablePrompt:
1379
1379
  selectTable: "Select a HubDB table:"
@@ -1517,6 +1517,8 @@ en:
1517
1517
  inactiveSecondary: "Run {{ command }} to remove inactive accounts from your CLI config"
1518
1518
  unableToDetermine: "Unable to determine if the portal is active"
1519
1519
  pak:
1520
+ incomplete: "Personal access key is valid, but there are more scopes available to your user that are not included in your key."
1521
+ incompleteSecondary: "To add the available scopes, run {{ command }} and re-authenticate your account with a new key that has those scopes. Visit HubSpot to view selected and available scopes for your personal access key. {{ link }}"
1520
1522
  invalid: "Personal access key is invalid"
1521
1523
  invalidSecondary: "To get a new key, run {{ command }}, deactivate your access key, and generate a new one. Then use that new key to authenticate your account."
1522
1524
  valid: "Personal Access Key is valid. {{ link }}"
@@ -4,10 +4,10 @@ import { CLIAccount } from '@hubspot/local-dev-lib/types/Accounts';
4
4
  import { DeveloperTestAccount } from '@hubspot/local-dev-lib/types/developerTestAccounts';
5
5
  import { SandboxResponse } from '@hubspot/local-dev-lib/types/Sandbox';
6
6
  export declare function saveAccountToConfig(accountId: number | undefined, accountName: string, env: Environment, personalAccessKey?: string, force?: boolean): Promise<string>;
7
- export declare function buildDeveloperTestAccount(name: string, accountConfig: CLIAccount, env: Environment, portalLimit: number): Promise<DeveloperTestAccount>;
7
+ export declare function buildDeveloperTestAccount(testAccountName: string, parentAccountConfig: CLIAccount, env: Environment, portalLimit: number): Promise<DeveloperTestAccount>;
8
8
  type SandboxType = typeof HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX | typeof HUBSPOT_ACCOUNT_TYPES.DEVELOPMENT_SANDBOX;
9
9
  type SandboxAccount = SandboxResponse & {
10
10
  name: string;
11
11
  };
12
- export declare function buildSandbox(name: string, accountConfig: CLIAccount, sandboxType: SandboxType, env: Environment, force?: boolean): Promise<SandboxAccount>;
12
+ export declare function buildSandbox(sandboxName: string, parentAccountConfig: CLIAccount, sandboxType: SandboxType, env: Environment, force?: boolean): Promise<SandboxAccount>;
13
13
  export {};
@@ -60,11 +60,11 @@ async function saveAccountToConfig(accountId, accountName, env, personalAccessKe
60
60
  logger_1.logger.log('');
61
61
  return validName;
62
62
  }
63
- async function buildDeveloperTestAccount(name, accountConfig, env, portalLimit) {
63
+ async function buildDeveloperTestAccount(testAccountName, parentAccountConfig, env, portalLimit) {
64
64
  const i18nKey = 'lib.developerTestAccount.create.loading';
65
- const id = (0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig);
66
- const accountId = (0, config_1.getAccountId)(id);
67
- if (!accountId) {
65
+ const id = (0, getAccountIdentifier_1.getAccountIdentifier)(parentAccountConfig);
66
+ const parentAccountId = (0, config_1.getAccountId)(id);
67
+ if (!parentAccountId) {
68
68
  throw new Error((0, lang_1.i18n)(`${i18nKey}.fail`));
69
69
  }
70
70
  SpinniesManager_1.default.init({
@@ -73,16 +73,16 @@ async function buildDeveloperTestAccount(name, accountConfig, env, portalLimit)
73
73
  logger_1.logger.log('');
74
74
  SpinniesManager_1.default.add('buildDeveloperTestAccount', {
75
75
  text: (0, lang_1.i18n)(`${i18nKey}.add`, {
76
- accountName: name,
76
+ accountName: testAccountName,
77
77
  }),
78
78
  });
79
79
  let developerTestAccount;
80
80
  try {
81
- const { data } = await (0, developerTestAccounts_1.createDeveloperTestAccount)(accountId, name);
81
+ const { data } = await (0, developerTestAccounts_1.createDeveloperTestAccount)(parentAccountId, testAccountName);
82
82
  developerTestAccount = data;
83
83
  SpinniesManager_1.default.succeed('buildDeveloperTestAccount', {
84
84
  text: (0, lang_1.i18n)(`${i18nKey}.succeed`, {
85
- accountName: name,
85
+ accountName: testAccountName,
86
86
  accountId: developerTestAccount.id,
87
87
  }),
88
88
  });
@@ -91,13 +91,13 @@ async function buildDeveloperTestAccount(name, accountConfig, env, portalLimit)
91
91
  (0, index_1.debugError)(e);
92
92
  SpinniesManager_1.default.fail('buildDeveloperTestAccount', {
93
93
  text: (0, lang_1.i18n)(`${i18nKey}.fail`, {
94
- accountName: name,
94
+ accountName: testAccountName,
95
95
  }),
96
96
  });
97
- (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(e, accountId, env, portalLimit);
97
+ (0, developerTestAccounts_2.handleDeveloperTestAccountCreateError)(e, parentAccountId, env, portalLimit);
98
98
  }
99
99
  try {
100
- await saveAccountToConfig(accountId, name, env);
100
+ await saveAccountToConfig(developerTestAccount.id, testAccountName, env);
101
101
  }
102
102
  catch (err) {
103
103
  (0, index_1.logError)(err);
@@ -105,7 +105,7 @@ async function buildDeveloperTestAccount(name, accountConfig, env, portalLimit)
105
105
  }
106
106
  return developerTestAccount;
107
107
  }
108
- async function buildSandbox(name, accountConfig, sandboxType, env, force = false) {
108
+ async function buildSandbox(sandboxName, parentAccountConfig, sandboxType, env, force = false) {
109
109
  let i18nKey;
110
110
  if (sandboxType === config_2.HUBSPOT_ACCOUNT_TYPES.STANDARD_SANDBOX) {
111
111
  i18nKey = 'lib.sandbox.create.loading.standard';
@@ -113,9 +113,9 @@ async function buildSandbox(name, accountConfig, sandboxType, env, force = false
113
113
  else {
114
114
  i18nKey = 'lib.sandbox.create.loading.developer';
115
115
  }
116
- const id = (0, getAccountIdentifier_1.getAccountIdentifier)(accountConfig);
117
- const accountId = (0, config_1.getAccountId)(id);
118
- if (!accountId) {
116
+ const id = (0, getAccountIdentifier_1.getAccountIdentifier)(parentAccountConfig);
117
+ const parentAccountId = (0, config_1.getAccountId)(id);
118
+ if (!parentAccountId) {
119
119
  throw new Error((0, lang_1.i18n)(`${i18nKey}.fail`));
120
120
  }
121
121
  SpinniesManager_1.default.init({
@@ -124,17 +124,17 @@ async function buildSandbox(name, accountConfig, sandboxType, env, force = false
124
124
  logger_1.logger.log('');
125
125
  SpinniesManager_1.default.add('buildSandbox', {
126
126
  text: (0, lang_1.i18n)(`${i18nKey}.add`, {
127
- accountName: name,
127
+ accountName: sandboxName,
128
128
  }),
129
129
  });
130
130
  let sandbox;
131
131
  try {
132
132
  const sandboxApiType = sandboxes_1.SANDBOX_API_TYPE_MAP[sandboxType];
133
- const { data } = await (0, sandboxHubs_1.createSandbox)(accountId, name, sandboxApiType);
134
- sandbox = { name, ...data };
133
+ const { data } = await (0, sandboxHubs_1.createSandbox)(parentAccountId, sandboxName, sandboxApiType);
134
+ sandbox = { name: sandboxName, ...data };
135
135
  SpinniesManager_1.default.succeed('buildSandbox', {
136
136
  text: (0, lang_1.i18n)(`${i18nKey}.succeed`, {
137
- accountName: name,
137
+ accountName: sandboxName,
138
138
  accountId: sandbox.sandbox.sandboxHubId,
139
139
  }),
140
140
  });
@@ -143,13 +143,13 @@ async function buildSandbox(name, accountConfig, sandboxType, env, force = false
143
143
  (0, index_1.debugError)(e);
144
144
  SpinniesManager_1.default.fail('buildSandbox', {
145
145
  text: (0, lang_1.i18n)(`${i18nKey}.fail`, {
146
- accountName: name,
146
+ accountName: sandboxName,
147
147
  }),
148
148
  });
149
- (0, sandboxes_1.handleSandboxCreateError)(e, env, name, accountId);
149
+ (0, sandboxes_1.handleSandboxCreateError)(e, env, sandboxName, parentAccountId);
150
150
  }
151
151
  try {
152
- await saveAccountToConfig(accountId, name, env, sandbox.personalAccessKey, force);
152
+ await saveAccountToConfig(sandbox.sandbox.sandboxHubId, sandboxName, env, sandbox.personalAccessKey, force);
153
153
  }
154
154
  catch (err) {
155
155
  (0, index_1.logError)(err);
@@ -91,16 +91,29 @@ class Doctor {
91
91
  const localI18nKey = `${i18nKey}.accountChecks`;
92
92
  try {
93
93
  await (0, personalAccessKey_1.accessTokenForPersonalAccessKey)(this.accountId, true);
94
+ const pakScopes = new Set(await (0, personalAccessKey_1.scopesOnAccessToken)(this.accountId));
95
+ const missingScopes = (await (0, personalAccessKey_1.authorizedScopesForPortalAndUser)(this.accountId)).filter((data) => data.userAuthorized && !pakScopes.has(data.scopeGroup.name));
94
96
  this.diagnosis?.addCLIConfigSection({
95
97
  type: 'success',
96
98
  message: i18n(`${localI18nKey}.active`),
97
99
  });
98
- this.diagnosis?.addCLIConfigSection({
99
- type: 'success',
100
- message: i18n(`${localI18nKey}.pak.valid`, {
101
- link: uiLink(i18n(`${localI18nKey}.pak.viewScopes`), `${(0, urls_1.getHubSpotWebsiteOrigin)(this.diagnosticInfoBuilder?.env || 'PROD')}/personal-access-key/${this.diagnosticInfo?.account.accountId}`),
102
- }),
103
- });
100
+ const linkToPakUI = uiLink(i18n(`${localI18nKey}.pak.viewScopes`), `${(0, urls_1.getHubSpotWebsiteOrigin)(this.diagnosticInfoBuilder?.env || 'PROD')}/personal-access-key/${this.diagnosticInfo?.account.accountId}`);
101
+ if (missingScopes.length > 0) {
102
+ this.diagnosis?.addCLIConfigSection({
103
+ type: 'warning',
104
+ message: i18n(`${localI18nKey}.pak.incomplete`),
105
+ secondaryMessaging: i18n(`${localI18nKey}.pak.incompleteSecondary`, {
106
+ command: (0, ui_1.uiCommandReference)(`hs auth`),
107
+ link: linkToPakUI,
108
+ }),
109
+ });
110
+ }
111
+ else {
112
+ this.diagnosis?.addCLIConfigSection({
113
+ type: 'success',
114
+ message: i18n(`${localI18nKey}.pak.valid`, { link: linkToPakUI }),
115
+ });
116
+ }
104
117
  }
105
118
  catch (error) {
106
119
  const portalNotActive = (0, index_1.isSpecifiedError)(error, {
@@ -11,7 +11,6 @@ const index_1 = require("@hubspot/local-dev-lib/errors/index");
11
11
  const suppressError_1 = require("./suppressError");
12
12
  const lang_1 = require("../lang");
13
13
  const util_1 = __importDefault(require("util"));
14
- const axios_1 = require("axios");
15
14
  const i18nKey = 'lib.errorHandlers.index';
16
15
  function logError(error, context) {
17
16
  debugError(error, context);
@@ -50,11 +49,9 @@ function debugError(error, context) {
50
49
  else {
51
50
  logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.errorOccurred`, { error: String(error) }));
52
51
  }
53
- if (error instanceof Error && error.cause) {
52
+ if (error instanceof Error && error.cause && !(0, index_1.isHubSpotHttpError)(error)) {
54
53
  logger_1.logger.debug((0, lang_1.i18n)(`${i18nKey}.errorCause`, {
55
- cause: (0, axios_1.isAxiosError)(error.cause)
56
- ? `${error.cause.message}`
57
- : util_1.default.inspect(error.cause, false, null, true),
54
+ cause: util_1.default.inspect(error.cause, false, null, true),
58
55
  }));
59
56
  }
60
57
  if (context) {
@@ -2,6 +2,7 @@ import { FileResult } from 'tmp';
2
2
  import { Build } from '@hubspot/local-dev-lib/types/Build';
3
3
  import { Deploy } from '@hubspot/local-dev-lib/types/Deploy';
4
4
  import { ProjectConfig, ProjectTask, ProjectPollResult } from '../../types/Projects';
5
+ export declare function useV3Api(platformVersion?: string | null): boolean;
5
6
  type PollTaskStatusFunction<T extends ProjectTask> = (accountId: number, taskName: string, taskId: number, deployedBuildId: number | null, silenceLogs: boolean) => Promise<T>;
6
7
  export declare const pollBuildStatus: PollTaskStatusFunction<Build>;
7
8
  export declare const pollDeployStatus: PollTaskStatusFunction<Deploy>;
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.pollDeployStatus = exports.pollBuildStatus = void 0;
7
+ exports.useV3Api = useV3Api;
7
8
  exports.displayWarnLogs = displayWarnLogs;
8
9
  exports.pollProjectBuildAndDeploy = pollProjectBuildAndDeploy;
9
10
  const chalk_1 = __importDefault(require("chalk"));
@@ -19,6 +20,13 @@ const i18nKey = 'lib.projectBuildAndDeploy';
19
20
  const SPINNER_STATUS = {
20
21
  SPINNING: 'spinning',
21
22
  };
23
+ function useV3Api(platformVersion) {
24
+ if (!platformVersion || typeof platformVersion !== 'string') {
25
+ return false;
26
+ }
27
+ const [year, minor] = platformVersion.split('.');
28
+ return Number(year) >= 2025 && Number(minor) >= 1;
29
+ }
22
30
  function getSubtasks(task) {
23
31
  if ('subbuildStatuses' in task) {
24
32
  return task.subbuildStatuses;
@@ -223,12 +223,6 @@ async function ensureProjectExists(accountId, projectName, { forceCreate = false
223
223
  return { projectExists: false };
224
224
  }
225
225
  }
226
- if ((0, index_1.isSpecifiedError)(err, {
227
- statusCode: 401,
228
- })) {
229
- logger_1.logger.error(err.message);
230
- process.exit(exitCodes_1.EXIT_CODES.ERROR);
231
- }
232
226
  (0, index_2.logError)(err, new index_2.ApiErrorContext({ accountId }));
233
227
  process.exit(exitCodes_1.EXIT_CODES.ERROR);
234
228
  }
@@ -1,8 +1,11 @@
1
- import { ComponentTypes, Component, PublicAppComponentConfig, PrivateAppComponentConfig, AppCardComponentConfig } from '../../types/Projects';
1
+ import { ComponentTypes, Component, GenericComponentConfig, PublicAppComponentConfig, PrivateAppComponentConfig, AppCardComponentConfig } from '../../types/Projects';
2
2
  export declare const CONFIG_FILES: {
3
3
  [k in ComponentTypes]: string;
4
4
  };
5
+ export declare function getComponentTypeFromConfigFile(configFile: string): ComponentTypes | null;
6
+ export declare function loadConfigFile(configPath: string): GenericComponentConfig | null;
5
7
  export declare function getAppCardConfigs(appConfig: PublicAppComponentConfig | PrivateAppComponentConfig, appPath: string): Array<AppCardComponentConfig>;
8
+ export declare function getIsLegacyApp(appConfig: GenericComponentConfig, appPath: string): boolean;
6
9
  export declare function findProjectComponents(projectSourceDir: string): Promise<Array<Component>>;
7
10
  export declare function getProjectComponentTypes(components: Array<Component>): {
8
11
  [key in ComponentTypes]?: boolean;
@@ -34,7 +34,10 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.CONFIG_FILES = void 0;
37
+ exports.getComponentTypeFromConfigFile = getComponentTypeFromConfigFile;
38
+ exports.loadConfigFile = loadConfigFile;
37
39
  exports.getAppCardConfigs = getAppCardConfigs;
40
+ exports.getIsLegacyApp = getIsLegacyApp;
38
41
  exports.findProjectComponents = findProjectComponents;
39
42
  exports.getProjectComponentTypes = getProjectComponentTypes;
40
43
  exports.getComponentUid = getComponentUid;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@hubspot/cli",
3
- "version": "7.0.11-experimental.0",
3
+ "version": "7.1.0-beta.0",
4
4
  "description": "The official CLI for developing on HubSpot",
5
5
  "license": "Apache-2.0",
6
6
  "repository": "https://github.com/HubSpot/hubspot-cli",
7
7
  "dependencies": {
8
- "@hubspot/local-dev-lib": "0.1.1-experimental.0",
9
- "@hubspot/project-parsing-lib": "0.0.3-experimental.0",
8
+ "@hubspot/local-dev-lib": "3.3.0",
9
+ "@hubspot/project-parsing-lib": "0.0.4",
10
10
  "@hubspot/serverless-dev-runtime": "7.0.2",
11
11
  "@hubspot/theme-preview-dev-server": "0.0.10",
12
12
  "@hubspot/ui-extensions-dev-server": "0.8.42",