@hubspot/cli 7.11.8-experimental.0 → 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/__tests__/migrate.test.js +19 -1
- package/api/migrate.d.ts +1 -1
- package/api/migrate.js +2 -1
- package/bin/cli.js +12 -27
- package/commands/__tests__/customObject.test.js +0 -2
- package/commands/__tests__/doctor.test.js +0 -2
- package/commands/__tests__/getStarted.test.js +0 -4
- package/commands/__tests__/project.test.js +0 -4
- package/commands/__tests__/upgrade.test.js +309 -0
- package/commands/account/__tests__/auth.test.js +180 -0
- package/commands/account/__tests__/list.test.js +128 -3
- package/commands/account/__tests__/rename.test.js +0 -2
- package/commands/account/__tests__/use.test.js +138 -0
- package/commands/account/auth.js +1 -1
- package/commands/account/clean.js +4 -3
- package/commands/account/createOverride.js +3 -2
- package/commands/account/info.js +2 -2
- package/commands/account/list.js +4 -4
- package/commands/account/remove.js +3 -2
- package/commands/account/removeOverride.js +3 -2
- package/commands/account/use.js +4 -3
- package/commands/app/__tests__/migrate.test.js +8 -25
- package/commands/app/migrate.js +10 -16
- package/commands/app/secret/__tests__/add.test.js +112 -0
- package/commands/app/secret/add.js +13 -13
- package/commands/auth.js +8 -2
- package/commands/cms/__tests__/fetch.test.js +114 -15
- package/commands/cms/__tests__/upload.test.js +308 -0
- package/commands/cms/__tests__/watch.test.js +212 -0
- package/commands/cms/app/create.js +2 -3
- package/commands/cms/convertFields.js +1 -1
- package/commands/cms/fetch.js +3 -2
- package/commands/cms/function/deploy.js +2 -2
- package/commands/cms/function/list.js +2 -3
- package/commands/cms/lighthouseScore.js +19 -27
- package/commands/cms/module/marketplace-validate.js +0 -1
- package/commands/cms/theme/__tests__/preview.test.js +2 -8
- package/commands/cms/theme/create.js +1 -1
- package/commands/cms/theme/marketplace-validate.js +0 -1
- package/commands/cms/theme/preview.d.ts +0 -1
- package/commands/cms/theme/preview.js +12 -52
- package/commands/cms/upload.js +3 -3
- package/commands/cms/watch.js +3 -3
- package/commands/customObject.js +0 -2
- package/commands/doctor.js +10 -2
- package/commands/filemanager/__tests__/upload.test.js +161 -0
- package/commands/getStarted.js +13 -3
- package/commands/hubdb/__tests__/list.test.js +0 -9
- package/commands/hubdb/list.js +6 -8
- package/commands/init.js +8 -2
- package/commands/mcp/__tests__/start.test.js +113 -3
- package/commands/mcp/setup.js +0 -7
- package/commands/mcp/start.d.ts +1 -1
- package/commands/mcp/start.js +0 -7
- package/commands/project/__tests__/add.test.js +0 -2
- package/commands/project/__tests__/create.test.js +2 -2
- package/commands/project/__tests__/deploy.test.js +0 -4
- package/commands/project/__tests__/dev.test.js +273 -0
- package/commands/project/__tests__/devUnifiedFlow.test.js +2 -5
- package/commands/project/__tests__/installDeps.test.js +0 -2
- package/commands/project/__tests__/lint.test.js +0 -5
- package/commands/project/__tests__/logs.test.js +24 -31
- package/commands/project/__tests__/migrate.test.js +7 -12
- package/commands/project/__tests__/updateDeps.test.js +0 -2
- package/commands/project/__tests__/upload.test.js +191 -0
- package/commands/project/__tests__/validate.test.js +314 -31
- package/commands/project/cloneApp.d.ts +1 -7
- package/commands/project/cloneApp.js +1 -149
- package/commands/project/create.js +3 -4
- package/commands/project/deploy.js +18 -7
- package/commands/project/dev/deprecatedFlow.js +0 -2
- package/commands/project/dev/index.js +23 -11
- package/commands/project/dev/unifiedFlow.d.ts +1 -1
- package/commands/project/dev/unifiedFlow.js +1 -4
- package/commands/project/list.js +4 -4
- package/commands/project/listBuilds.js +2 -7
- package/commands/project/logs.js +19 -12
- package/commands/project/migrate.js +3 -3
- package/commands/project/profile/add.js +1 -1
- package/commands/project/profile/delete.js +1 -1
- package/commands/project/upload.d.ts +1 -1
- package/commands/project/upload.js +13 -4
- package/commands/project/validate.js +85 -13
- package/commands/project/watch.js +7 -7
- package/commands/project.js +0 -4
- package/commands/sandbox/__tests__/create.test.js +0 -2
- package/commands/secret/__tests__/addSecret.test.js +140 -7
- package/commands/secret/addSecret.js +3 -1
- package/commands/testAccount/__tests__/create.test.js +6 -1
- package/commands/testAccount/__tests__/importData.test.js +0 -1
- package/commands/testAccount/create.d.ts +1 -0
- package/commands/testAccount/create.js +13 -5
- package/commands/upgrade.d.ts +8 -0
- package/commands/upgrade.js +119 -0
- package/lang/en.d.ts +88 -10
- package/lang/en.js +105 -26
- package/lib/__tests__/buildAccount.test.js +0 -13
- package/lib/__tests__/cliUpgradeUtils.test.js +131 -0
- package/lib/__tests__/commonOpts.test.js +0 -1
- package/lib/__tests__/dependencyManagement.test.js +633 -13
- package/lib/__tests__/developerTestAccounts.test.js +0 -1
- package/lib/__tests__/hasFeature.test.js +0 -6
- package/lib/__tests__/importData.test.js +0 -1
- package/lib/__tests__/npmCli.test.js +84 -0
- package/lib/__tests__/oauth.test.js +1 -11
- package/lib/__tests__/process.test.js +0 -1
- package/lib/__tests__/sandboxSync.test.js +0 -1
- package/lib/__tests__/sandboxes.test.js +0 -1
- package/lib/__tests__/serverlessLogs.test.js +0 -1
- package/lib/__tests__/usageTracking.test.js +39 -6
- package/lib/__tests__/validation.test.js +0 -1
- package/lib/app/__tests__/migrate.test.js +137 -12
- package/lib/app/migrate.d.ts +5 -2
- package/lib/app/migrate.js +30 -11
- package/lib/app/urls.d.ts +1 -1
- package/lib/buildAccount.d.ts +1 -1
- package/lib/cliUpgradeUtils.d.ts +22 -0
- package/lib/cliUpgradeUtils.js +62 -0
- package/lib/cmsAssets/api-sample.js +2 -5
- package/lib/cmsAssets/function.js +1 -9
- package/lib/cmsAssets/module.js +1 -9
- package/lib/cmsAssets/template.js +1 -9
- package/lib/configOptions.d.ts +0 -1
- package/lib/configOptions.js +1 -5
- package/lib/constants.d.ts +6 -0
- package/lib/constants.js +10 -4
- package/lib/dependencyManagement.d.ts +9 -0
- package/lib/dependencyManagement.js +127 -26
- package/lib/developerTestAccounts.d.ts +1 -1
- package/lib/doctor/Diagnosis.d.ts +1 -0
- package/lib/doctor/Diagnosis.js +7 -0
- package/lib/doctor/DiagnosticInfoBuilder.d.ts +2 -1
- package/lib/doctor/DiagnosticInfoBuilder.js +8 -4
- package/lib/doctor/Doctor.d.ts +12 -0
- package/lib/doctor/Doctor.js +283 -33
- package/lib/doctor/__tests__/Diagnosis.test.js +1 -0
- package/lib/doctor/__tests__/Doctor.test.js +201 -51
- package/lib/errorHandlers/__tests__/index.test.d.ts +1 -0
- package/lib/errorHandlers/__tests__/index.test.js +278 -0
- package/lib/errorHandlers/index.d.ts +1 -0
- package/lib/errorHandlers/index.js +14 -2
- package/lib/http.js +3 -1
- package/lib/links.js +2 -3
- package/lib/mcp/__tests__/setup.test.js +69 -2
- package/lib/mcp/setup.d.ts +1 -0
- package/lib/mcp/setup.js +37 -4
- package/lib/middleware/__tests__/configMiddleware.test.js +1 -43
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.d.ts +1 -0
- package/lib/middleware/__tests__/usageTrackingMiddleware.test.js +44 -0
- package/lib/middleware/__tests__/yargsChecksMiddleware.test.js +0 -5
- package/lib/middleware/autoUpdateMiddleware.js +58 -57
- package/lib/middleware/configMiddleware.d.ts +0 -3
- package/lib/middleware/configMiddleware.js +0 -11
- package/lib/middleware/fireAlarmMiddleware.js +1 -1
- package/lib/middleware/spinniesMiddleware.d.ts +1 -0
- package/lib/middleware/spinniesMiddleware.js +4 -0
- package/lib/middleware/usageTrackingMiddleware.d.ts +13 -0
- package/lib/middleware/usageTrackingMiddleware.js +16 -0
- package/lib/{npm.d.ts → npm/npmCli.d.ts} +8 -3
- package/lib/npm/npmCli.js +59 -0
- package/lib/npm/packageJson.d.ts +24 -0
- package/lib/npm/packageJson.js +102 -0
- package/lib/npm/workspaces.d.ts +12 -0
- package/lib/npm/workspaces.js +48 -0
- package/lib/oauth.js +1 -3
- package/lib/projects/__tests__/AppDevModeInterface.test.js +40 -18
- package/lib/projects/__tests__/DevServerManager.test.js +1 -0
- package/lib/projects/__tests__/DevSessionManager.test.d.ts +1 -0
- package/lib/projects/__tests__/DevSessionManager.test.js +250 -0
- package/lib/projects/__tests__/LocalDevProcess.test.js +19 -6
- package/lib/projects/__tests__/LocalDevWebsocketServer.test.js +0 -2
- package/lib/projects/__tests__/UIExtensionsDevModeInterface.test.js +0 -1
- package/lib/projects/__tests__/components.test.js +6 -22
- package/lib/projects/__tests__/deploy.test.js +0 -1
- package/lib/projects/__tests__/localDevProjectHelpers.test.js +3 -5
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.d.ts +1 -0
- package/lib/projects/__tests__/pollProjectBuildAndDeploy.test.js +328 -0
- package/lib/projects/__tests__/projectProfiles.test.d.ts +1 -0
- package/lib/projects/__tests__/projectProfiles.test.js +441 -0
- package/lib/projects/__tests__/projects.test.js +0 -1
- package/lib/projects/__tests__/structure.test.js +0 -1
- package/lib/projects/__tests__/uieLinting.test.js +2 -11
- package/lib/projects/__tests__/upload.test.js +104 -3
- package/lib/projects/add/__tests__/legacyAddComponent.test.js +0 -2
- package/lib/projects/add/__tests__/v2AddComponent.test.js +2 -4
- package/lib/projects/add/v2AddComponent.js +2 -3
- package/lib/projects/components.d.ts +1 -1
- package/lib/projects/components.js +4 -4
- package/lib/projects/create/__tests__/legacy.test.js +0 -1
- package/lib/projects/create/__tests__/v2.test.js +0 -1
- package/lib/projects/create/v2.d.ts +1 -1
- package/lib/projects/create/v2.js +1 -1
- package/lib/projects/ensureProjectExists.js +0 -1
- package/lib/projects/localDev/AppDevModeInterface.js +9 -2
- package/lib/projects/localDev/DevSessionManager.d.ts +18 -0
- package/lib/projects/localDev/DevSessionManager.js +95 -0
- package/lib/projects/localDev/LocalDevLogger.d.ts +4 -0
- package/lib/projects/localDev/LocalDevLogger.js +18 -7
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.d.ts +4 -3
- package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +23 -12
- package/lib/projects/localDev/LocalDevProcess.d.ts +2 -1
- package/lib/projects/localDev/LocalDevProcess.js +18 -7
- package/lib/projects/localDev/LocalDevState.d.ts +3 -2
- package/lib/projects/localDev/helpers/account.d.ts +1 -1
- package/lib/projects/localDev/helpers/devSessionsApi.d.ts +9 -0
- package/lib/projects/localDev/helpers/devSessionsApi.js +19 -0
- package/lib/projects/localDev/helpers/project.d.ts +1 -1
- package/lib/projects/localDev/helpers/project.js +1 -2
- package/lib/projects/pollProjectBuildAndDeploy.js +4 -5
- package/lib/projects/projectProfiles.d.ts +17 -0
- package/lib/projects/projectProfiles.js +140 -0
- package/lib/projects/structure.d.ts +1 -1
- package/lib/projects/uieLinting.js +6 -8
- package/lib/projects/upload.d.ts +9 -1
- package/lib/projects/upload.js +11 -5
- package/lib/projects/urls.d.ts +1 -0
- package/lib/projects/urls.js +3 -3
- package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +8 -4
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +2 -0
- package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +19 -13
- package/lib/sandboxSync.d.ts +1 -1
- package/lib/sandboxes.d.ts +1 -1
- package/lib/serverlessLogs.js +0 -1
- package/lib/theme/__tests__/migrate.test.js +12 -4
- package/lib/theme/migrate.js +2 -3
- package/lib/ui/__tests__/SpinniesManager.test.js +0 -1
- package/lib/usageTracking.js +18 -0
- package/mcp-server/tools/cms/HsCreateFunctionTool.d.ts +2 -2
- package/mcp-server/tools/cms/HsCreateFunctionTool.js +2 -1
- package/mcp-server/tools/cms/HsCreateModuleTool.js +2 -1
- package/mcp-server/tools/cms/HsCreateTemplateTool.js +2 -1
- package/mcp-server/tools/cms/HsFunctionLogsTool.js +2 -2
- package/mcp-server/tools/cms/HsListFunctionsTool.js +2 -2
- package/mcp-server/tools/cms/HsListTool.js +2 -2
- package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsCreateModuleTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsCreateTemplateTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsFunctionLogsTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsListFunctionsTool.test.js +4 -4
- package/mcp-server/tools/cms/__tests__/HsListTool.test.js +4 -4
- package/mcp-server/tools/project/AddFeatureToProjectTool.js +4 -3
- package/mcp-server/tools/project/CreateProjectTool.js +4 -3
- package/mcp-server/tools/project/CreateTestAccountTool.d.ts +7 -2
- package/mcp-server/tools/project/CreateTestAccountTool.js +19 -9
- package/mcp-server/tools/project/DocFetchTool.js +2 -1
- package/mcp-server/tools/project/DocsSearchTool.js +2 -1
- package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +4 -4
- package/mcp-server/tools/project/GetApplicationInfoTool.js +5 -5
- package/mcp-server/tools/project/GetConfigValuesTool.js +2 -1
- package/mcp-server/tools/project/UploadProjectTools.js +6 -3
- package/mcp-server/tools/project/ValidateProjectTool.js +2 -1
- package/mcp-server/tools/project/__tests__/AddFeatureToProjectTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/CreateProjectTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +23 -4
- package/mcp-server/tools/project/__tests__/DeployProjectTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +0 -1
- package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +4 -2
- package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +8 -5
- package/mcp-server/tools/project/__tests__/GetBuildLogsTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +7 -3
- package/mcp-server/tools/project/__tests__/GuidedWalkthroughTool.test.js +3 -1
- package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +17 -3
- package/mcp-server/tools/project/__tests__/ValidateProjectTool.test.js +3 -1
- package/mcp-server/utils/__tests__/content.test.js +0 -3
- package/mcp-server/utils/__tests__/feedbackTracking.test.js +0 -3
- package/mcp-server/utils/__tests__/project.test.js +65 -4
- package/mcp-server/utils/project.js +6 -2
- package/package.json +15 -17
- package/types/Cms.d.ts +1 -1
- package/types/Cms.js +2 -0
- package/types/LocalDev.d.ts +3 -2
- package/types/PackageJson.d.ts +10 -0
- package/types/PackageJson.js +1 -0
- package/types/ProjectComponents.d.ts +1 -1
- package/ui/components/BoxWithTitle.js +1 -1
- package/ui/components/Table.d.ts +89 -0
- package/ui/components/Table.js +246 -0
- package/ui/lib/table.d.ts +2 -0
- package/ui/lib/table.js +11 -0
- package/ui/playground/Playground.d.ts +5 -0
- package/ui/{views/UiSandbox.js → playground/Playground.js} +4 -4
- package/ui/{lib/ui-testing-utils.d.ts → playground/fixtures.d.ts} +1 -1
- package/ui/{lib/ui-testing-utils.js → playground/fixtures.js} +33 -1
- package/ui/render.d.ts +19 -0
- package/ui/render.js +44 -0
- package/commands/__tests__/create.test.js +0 -53
- package/commands/create.d.ts +0 -4
- package/commands/create.js +0 -137
- package/commands/customObject/__tests__/schema.test.js +0 -53
- package/commands/customObject/schema/create.d.ts +0 -4
- package/commands/customObject/schema/create.js +0 -34
- package/commands/customObject/schema/delete.d.ts +0 -4
- package/commands/customObject/schema/delete.js +0 -37
- package/commands/customObject/schema/fetch-all.d.ts +0 -4
- package/commands/customObject/schema/fetch-all.js +0 -32
- package/commands/customObject/schema/fetch.d.ts +0 -4
- package/commands/customObject/schema/fetch.js +0 -36
- package/commands/customObject/schema/list.d.ts +0 -4
- package/commands/customObject/schema/list.js +0 -26
- package/commands/customObject/schema/update.d.ts +0 -4
- package/commands/customObject/schema/update.js +0 -39
- package/commands/customObject/schema.d.ts +0 -3
- package/commands/customObject/schema.js +0 -31
- package/commands/fetch.d.ts +0 -4
- package/commands/fetch.js +0 -52
- package/commands/function/deploy.d.ts +0 -4
- package/commands/function/deploy.js +0 -31
- package/commands/function/list.d.ts +0 -4
- package/commands/function/list.js +0 -33
- package/commands/function/server.d.ts +0 -4
- package/commands/function/server.js +0 -57
- package/commands/function.d.ts +0 -3
- package/commands/function.js +0 -32
- package/commands/lint.d.ts +0 -4
- package/commands/lint.js +0 -31
- package/commands/list.d.ts +0 -4
- package/commands/list.js +0 -31
- package/commands/logs.d.ts +0 -4
- package/commands/logs.js +0 -58
- package/commands/module/marketplace-validate.d.ts +0 -4
- package/commands/module/marketplace-validate.js +0 -31
- package/commands/module.d.ts +0 -3
- package/commands/module.js +0 -23
- package/commands/mv.d.ts +0 -4
- package/commands/mv.js +0 -35
- package/commands/project/__tests__/migrateApp.test.js +0 -78
- package/commands/project/migrateApp.d.ts +0 -4
- package/commands/project/migrateApp.js +0 -55
- package/commands/remove.d.ts +0 -4
- package/commands/remove.js +0 -31
- package/commands/theme/generate-selectors.d.ts +0 -4
- package/commands/theme/generate-selectors.js +0 -30
- package/commands/theme/marketplace-validate.d.ts +0 -4
- package/commands/theme/marketplace-validate.js +0 -33
- package/commands/theme/preview.d.ts +0 -4
- package/commands/theme/preview.js +0 -59
- package/commands/theme.d.ts +0 -3
- package/commands/theme.js +0 -29
- package/commands/upload.d.ts +0 -4
- package/commands/upload.js +0 -62
- package/commands/watch.d.ts +0 -4
- package/commands/watch.js +0 -73
- package/lib/__tests__/npm.test.js +0 -57
- package/lib/__tests__/projectProfiles.test.js +0 -129
- package/lib/app/__tests__/migrate_legacy.test.js +0 -143
- package/lib/app/migrate_legacy.d.ts +0 -4
- package/lib/app/migrate_legacy.js +0 -121
- package/lib/npm.js +0 -33
- package/lib/projectProfiles.d.ts +0 -7
- package/lib/projectProfiles.js +0 -73
- package/lib/ui/table.d.ts +0 -3
- package/lib/ui/table.js +0 -63
- package/ui/index.d.ts +0 -1
- package/ui/index.js +0 -6
- package/ui/views/UiSandbox.d.ts +0 -5
- /package/commands/__tests__/{create.test.d.ts → upgrade.test.d.ts} +0 -0
- /package/commands/{customObject/__tests__/schema.test.d.ts → cms/__tests__/upload.test.d.ts} +0 -0
- /package/commands/{project/__tests__/migrateApp.test.d.ts → cms/__tests__/watch.test.d.ts} +0 -0
- /package/{lib/__tests__/npm.test.d.ts → commands/project/__tests__/dev.test.d.ts} +0 -0
- /package/lib/__tests__/{projectProfiles.test.d.ts → cliUpgradeUtils.test.d.ts} +0 -0
- /package/lib/{app/__tests__/migrate_legacy.test.d.ts → __tests__/npmCli.test.d.ts} +0 -0
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import util from 'util';
|
|
2
|
-
import { isGloballyInstalled, getLatestCliVersion, DEFAULT_PACKAGE_MANAGER, } from '../npm.js';
|
|
3
|
-
import { pkg } from '../jsonLoader.js';
|
|
4
|
-
vi.mock('../../ui/logger.js');
|
|
5
|
-
vi.mock('../ui/SpinniesManager');
|
|
6
|
-
describe('lib/npm', () => {
|
|
7
|
-
let execMock;
|
|
8
|
-
function mockedPromisify(execMock) {
|
|
9
|
-
return vi
|
|
10
|
-
.fn()
|
|
11
|
-
.mockReturnValue(execMock);
|
|
12
|
-
}
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
execMock = vi.fn();
|
|
15
|
-
util.promisify = mockedPromisify(execMock);
|
|
16
|
-
});
|
|
17
|
-
describe('isGloballyInstalled()', () => {
|
|
18
|
-
it('should return true when exec is successful', async () => {
|
|
19
|
-
const actual = await isGloballyInstalled(DEFAULT_PACKAGE_MANAGER);
|
|
20
|
-
expect(actual).toBe(true);
|
|
21
|
-
expect(execMock).toHaveBeenCalledTimes(1);
|
|
22
|
-
expect(execMock).toHaveBeenCalledWith(`${DEFAULT_PACKAGE_MANAGER} --version`);
|
|
23
|
-
});
|
|
24
|
-
it('should return false when exec is unsuccessful', async () => {
|
|
25
|
-
execMock.mockImplementationOnce(() => {
|
|
26
|
-
throw new Error('unsuccessful');
|
|
27
|
-
});
|
|
28
|
-
util.promisify = mockedPromisify(execMock);
|
|
29
|
-
const actual = await isGloballyInstalled(DEFAULT_PACKAGE_MANAGER);
|
|
30
|
-
expect(actual).toBe(false);
|
|
31
|
-
expect(execMock).toHaveBeenCalledTimes(1);
|
|
32
|
-
expect(execMock).toHaveBeenCalledWith(`${DEFAULT_PACKAGE_MANAGER} --version`);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe('getLatestCliVersion()', () => {
|
|
36
|
-
it('should return the version correctly', async () => {
|
|
37
|
-
const latest = '1.0.0';
|
|
38
|
-
const next = '1.0.0.beta.1';
|
|
39
|
-
execMock.mockResolvedValueOnce({
|
|
40
|
-
stdout: JSON.stringify({ latest, next }),
|
|
41
|
-
});
|
|
42
|
-
util.promisify = mockedPromisify(execMock);
|
|
43
|
-
const actual = await getLatestCliVersion();
|
|
44
|
-
expect(actual).toEqual({ latest, next });
|
|
45
|
-
expect(execMock).toHaveBeenCalledWith(`npm info ${pkg.name} dist-tags --json`);
|
|
46
|
-
});
|
|
47
|
-
it('should throw any errors that encounter with the check', async () => {
|
|
48
|
-
const errorMessage = 'unsuccessful';
|
|
49
|
-
execMock.mockImplementationOnce(() => {
|
|
50
|
-
throw new Error(errorMessage);
|
|
51
|
-
});
|
|
52
|
-
util.promisify = mockedPromisify(execMock);
|
|
53
|
-
await expect(() => getLatestCliVersion()).rejects.toThrow(errorMessage);
|
|
54
|
-
expect(execMock).toHaveBeenCalledWith(`npm info ${pkg.name} dist-tags --json`);
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
});
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { loadHsProfileFile, getHsProfileFilename, getAllHsProfiles, } from '@hubspot/project-parsing-lib';
|
|
3
|
-
import { lib } from '../../lang/en.js';
|
|
4
|
-
import { uiBetaTag, uiLine } from '../ui/index.js';
|
|
5
|
-
import { uiLogger } from '../ui/logger.js';
|
|
6
|
-
import { EXIT_CODES } from '../enums/exitCodes.js';
|
|
7
|
-
import { logProfileHeader, logProfileFooter, loadProfile, exitIfUsingProfiles, } from '../projectProfiles.js';
|
|
8
|
-
// Mock dependencies
|
|
9
|
-
vi.mock('@hubspot/project-parsing-lib');
|
|
10
|
-
vi.mock('../ui');
|
|
11
|
-
vi.mock('../ui/logger');
|
|
12
|
-
vi.mock('../../lang/en');
|
|
13
|
-
// Mock process.exit
|
|
14
|
-
const mockExit = vi.spyOn(process, 'exit').mockImplementation(code => {
|
|
15
|
-
throw new Error(`Process.exit called with code ${code}`);
|
|
16
|
-
});
|
|
17
|
-
const mockedLoadHsProfileFile = loadHsProfileFile;
|
|
18
|
-
const mockedGetHsProfileFilename = getHsProfileFilename;
|
|
19
|
-
const mockedGetAllHsProfiles = getAllHsProfiles;
|
|
20
|
-
const mockedUiBetaTag = uiBetaTag;
|
|
21
|
-
const mockedUiLine = uiLine;
|
|
22
|
-
const mockedUiLogger = uiLogger;
|
|
23
|
-
describe('lib/projectProfiles', () => {
|
|
24
|
-
describe('logProfileHeader()', () => {
|
|
25
|
-
it('should log profile header with correct format', () => {
|
|
26
|
-
const profileName = 'test-profile';
|
|
27
|
-
const filename = 'test-profile.hsprofile';
|
|
28
|
-
mockedGetHsProfileFilename.mockReturnValue(filename);
|
|
29
|
-
logProfileHeader(profileName);
|
|
30
|
-
expect(mockedUiLine).toHaveBeenCalled();
|
|
31
|
-
expect(mockedUiBetaTag).toHaveBeenCalledWith(lib.projectProfiles.logs.usingProfile(filename));
|
|
32
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith('');
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe('logProfileFooter()', () => {
|
|
36
|
-
const mockProfile = {
|
|
37
|
-
accountId: 123,
|
|
38
|
-
variables: {
|
|
39
|
-
key1: 'value1',
|
|
40
|
-
key2: 'value2',
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
it('should log profile footer with account ID', () => {
|
|
44
|
-
logProfileFooter(mockProfile);
|
|
45
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
|
|
46
|
-
expect(mockedUiLine).toHaveBeenCalled();
|
|
47
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith('');
|
|
48
|
-
});
|
|
49
|
-
it('should log variables when includeVariables is true', () => {
|
|
50
|
-
logProfileFooter(mockProfile, true);
|
|
51
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileTargetAccount(mockProfile.accountId));
|
|
52
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith('');
|
|
53
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith(lib.projectProfiles.logs.profileVariables);
|
|
54
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith(' key1: value1');
|
|
55
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith(' key2: value2');
|
|
56
|
-
expect(mockedUiLine).toHaveBeenCalled();
|
|
57
|
-
expect(mockedUiLogger.log).toHaveBeenCalledWith('');
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
describe('loadProfile()', () => {
|
|
61
|
-
const mockProjectConfig = {
|
|
62
|
-
srcDir: 'src',
|
|
63
|
-
name: 'test-project',
|
|
64
|
-
platformVersion: '1.0.0',
|
|
65
|
-
};
|
|
66
|
-
const mockProjectDir = '/test/project';
|
|
67
|
-
const mockProfileName = 'test-profile';
|
|
68
|
-
const mockProfile = {
|
|
69
|
-
accountId: 123,
|
|
70
|
-
};
|
|
71
|
-
it('should return undefined when project config is missing', () => {
|
|
72
|
-
const result = loadProfile(null, mockProjectDir, mockProfileName);
|
|
73
|
-
expect(result).toBeUndefined();
|
|
74
|
-
expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.noProjectConfig);
|
|
75
|
-
});
|
|
76
|
-
it('should return undefined when profile is not found', () => {
|
|
77
|
-
mockedLoadHsProfileFile.mockReturnValue(null);
|
|
78
|
-
const filename = 'test-profile.hsprofile';
|
|
79
|
-
mockedGetHsProfileFilename.mockReturnValue(filename);
|
|
80
|
-
const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
|
|
81
|
-
expect(result).toBeUndefined();
|
|
82
|
-
expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.profileNotFound(filename));
|
|
83
|
-
});
|
|
84
|
-
it('should return undefined when profile has no account ID', () => {
|
|
85
|
-
mockedLoadHsProfileFile.mockReturnValue({});
|
|
86
|
-
const filename = 'test-profile.hsprofile';
|
|
87
|
-
mockedGetHsProfileFilename.mockReturnValue(filename);
|
|
88
|
-
const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
|
|
89
|
-
expect(result).toBeUndefined();
|
|
90
|
-
expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.missingAccountId(filename));
|
|
91
|
-
});
|
|
92
|
-
it('should return undefined when profile loading fails', () => {
|
|
93
|
-
mockedLoadHsProfileFile.mockImplementation(() => {
|
|
94
|
-
throw new Error('Load failed');
|
|
95
|
-
});
|
|
96
|
-
const filename = 'test-profile.hsprofile';
|
|
97
|
-
mockedGetHsProfileFilename.mockReturnValue(filename);
|
|
98
|
-
const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
|
|
99
|
-
expect(result).toBeUndefined();
|
|
100
|
-
expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.loadProfile.errors.failedToLoadProfile(filename));
|
|
101
|
-
});
|
|
102
|
-
it('should return profile when loading succeeds', () => {
|
|
103
|
-
mockedLoadHsProfileFile.mockReturnValue(mockProfile);
|
|
104
|
-
const result = loadProfile(mockProjectConfig, mockProjectDir, mockProfileName);
|
|
105
|
-
expect(result).toEqual(mockProfile);
|
|
106
|
-
expect(mockedLoadHsProfileFile).toHaveBeenCalledWith(path.join(mockProjectDir, mockProjectConfig.srcDir), mockProfileName);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('exitIfUsingProfiles()', () => {
|
|
110
|
-
const mockProjectConfig = {
|
|
111
|
-
srcDir: 'src',
|
|
112
|
-
name: 'test-project',
|
|
113
|
-
platformVersion: '1.0.0',
|
|
114
|
-
};
|
|
115
|
-
const mockProjectDir = '/test/project';
|
|
116
|
-
it('should not exit when no profiles exist', async () => {
|
|
117
|
-
mockedGetAllHsProfiles.mockResolvedValue([]);
|
|
118
|
-
await exitIfUsingProfiles(mockProjectConfig, mockProjectDir);
|
|
119
|
-
expect(mockedUiLogger.error).not.toHaveBeenCalled();
|
|
120
|
-
expect(mockExit).not.toHaveBeenCalled();
|
|
121
|
-
});
|
|
122
|
-
it('should exit with error when profiles exist', async () => {
|
|
123
|
-
mockedGetAllHsProfiles.mockResolvedValue(['profile1', 'profile2']);
|
|
124
|
-
await expect(exitIfUsingProfiles(mockProjectConfig, mockProjectDir)).rejects.toThrow(`Process.exit called with code ${EXIT_CODES.ERROR}`);
|
|
125
|
-
expect(mockedUiLogger.error).toHaveBeenCalledWith(lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
|
|
126
|
-
expect(mockExit).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { fetchPublicAppMetadata as _fetchPublicAppMetadata } from '@hubspot/local-dev-lib/api/appsDev';
|
|
2
|
-
import { downloadProject as _downloadProject, migrateApp as _migrateNonProjectApp_v2023_2, } from '@hubspot/local-dev-lib/api/projects';
|
|
3
|
-
import { extractZipArchive } from '@hubspot/local-dev-lib/archive';
|
|
4
|
-
import { promptUser as _promptUser } from '../../prompts/promptUtils.js';
|
|
5
|
-
import { EXIT_CODES } from '../../enums/exitCodes.js';
|
|
6
|
-
import { isAppDeveloperAccount as _isAppDeveloperAccount, isUnifiedAccount as _isUnifiedAccount, } from '../../accountTypes.js';
|
|
7
|
-
import { selectPublicAppForMigrationPrompt as _selectPublicAppForMigrationPrompt } from '../../prompts/selectPublicAppForMigrationPrompt.js';
|
|
8
|
-
import { projectNameAndDestPrompt as _projectNameAndDestPrompt } from '../../prompts/projectNameAndDestPrompt.js';
|
|
9
|
-
import { ensureProjectExists as _ensureProjectExists } from '../../projects/ensureProjectExists.js';
|
|
10
|
-
import { poll as _poll } from '../../polling.js';
|
|
11
|
-
import { migrateApp2023_2 } from '../migrate_legacy.js';
|
|
12
|
-
import { getConfigAccountById } from '@hubspot/local-dev-lib/config';
|
|
13
|
-
// Mock all external dependencies
|
|
14
|
-
vi.mock('@hubspot/local-dev-lib/api/appsDev');
|
|
15
|
-
vi.mock('../../ui/logger.js');
|
|
16
|
-
vi.mock('@hubspot/local-dev-lib/api/projects');
|
|
17
|
-
vi.mock('@hubspot/local-dev-lib/path');
|
|
18
|
-
vi.mock('@hubspot/local-dev-lib/urls');
|
|
19
|
-
vi.mock('@hubspot/local-dev-lib/archive');
|
|
20
|
-
vi.mock('../../prompts/promptUtils');
|
|
21
|
-
vi.mock('../../errorHandlers');
|
|
22
|
-
vi.mock('../../accountTypes');
|
|
23
|
-
vi.mock('../../prompts/selectPublicAppForMigrationPrompt');
|
|
24
|
-
vi.mock('../../prompts/projectNameAndDestPrompt');
|
|
25
|
-
vi.mock('../../projects/ensureProjectExists');
|
|
26
|
-
vi.mock('../../usageTracking');
|
|
27
|
-
vi.mock('../../ui/SpinniesManager');
|
|
28
|
-
vi.mock('../../process');
|
|
29
|
-
vi.mock('../../polling');
|
|
30
|
-
vi.mock('@hubspot/local-dev-lib/config');
|
|
31
|
-
const isAppDeveloperAccount = _isAppDeveloperAccount;
|
|
32
|
-
const isUnifiedAccount = _isUnifiedAccount;
|
|
33
|
-
const selectPublicAppForMigrationPrompt = _selectPublicAppForMigrationPrompt;
|
|
34
|
-
const projectNameAndDestPrompt = _projectNameAndDestPrompt;
|
|
35
|
-
const ensureProjectExists = _ensureProjectExists;
|
|
36
|
-
const poll = _poll;
|
|
37
|
-
const fetchPublicAppMetadata = _fetchPublicAppMetadata;
|
|
38
|
-
const migrateNonProjectApp_v2023_2 = _migrateNonProjectApp_v2023_2;
|
|
39
|
-
const downloadProject = _downloadProject;
|
|
40
|
-
const promptUser = _promptUser;
|
|
41
|
-
describe('migrateApp2023_2', () => {
|
|
42
|
-
const mockDerivedAccountId = 123;
|
|
43
|
-
const mockOptions = {
|
|
44
|
-
_: [],
|
|
45
|
-
$0: 'test',
|
|
46
|
-
derivedAccountId: 123,
|
|
47
|
-
d: false,
|
|
48
|
-
debug: false,
|
|
49
|
-
platformVersion: '2023.2',
|
|
50
|
-
unstable: false,
|
|
51
|
-
};
|
|
52
|
-
const mockAccountConfig = {
|
|
53
|
-
accountId: 123,
|
|
54
|
-
name: 'Test Account',
|
|
55
|
-
env: 'prod',
|
|
56
|
-
};
|
|
57
|
-
const appId = 12345;
|
|
58
|
-
const projectName = 'test-project';
|
|
59
|
-
beforeEach(() => {
|
|
60
|
-
// @ts-expect-error function mismatch
|
|
61
|
-
vi.spyOn(process, 'exit').mockImplementation(() => { });
|
|
62
|
-
getConfigAccountById.mockReturnValue({
|
|
63
|
-
accountId: mockDerivedAccountId,
|
|
64
|
-
name: 'Test Account',
|
|
65
|
-
authType: 'personalaccesskey',
|
|
66
|
-
personalAccessKey: 'test-key',
|
|
67
|
-
env: 'prod',
|
|
68
|
-
});
|
|
69
|
-
selectPublicAppForMigrationPrompt.mockResolvedValue({
|
|
70
|
-
appId,
|
|
71
|
-
});
|
|
72
|
-
isAppDeveloperAccount.mockReturnValue(true);
|
|
73
|
-
isUnifiedAccount.mockResolvedValue(false);
|
|
74
|
-
fetchPublicAppMetadata.mockResolvedValue({
|
|
75
|
-
// @ts-expect-error Mocking the return type
|
|
76
|
-
data: { preventProjectMigrations: false },
|
|
77
|
-
});
|
|
78
|
-
projectNameAndDestPrompt.mockResolvedValue({
|
|
79
|
-
name: projectName,
|
|
80
|
-
dest: '/test/dest',
|
|
81
|
-
});
|
|
82
|
-
promptUser.mockResolvedValue({
|
|
83
|
-
shouldCreateApp: true,
|
|
84
|
-
});
|
|
85
|
-
ensureProjectExists.mockResolvedValue({
|
|
86
|
-
projectExists: false,
|
|
87
|
-
});
|
|
88
|
-
migrateNonProjectApp_v2023_2.mockResolvedValue({
|
|
89
|
-
// @ts-expect-error Mocking the return type
|
|
90
|
-
data: { id: 'migration-id' },
|
|
91
|
-
});
|
|
92
|
-
poll.mockResolvedValue({
|
|
93
|
-
status: 'SUCCESS',
|
|
94
|
-
// @ts-expect-error
|
|
95
|
-
project: {
|
|
96
|
-
name: projectName,
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
downloadProject.mockResolvedValue({
|
|
100
|
-
// @ts-expect-error Mocking the return type
|
|
101
|
-
data: 'zipped-project-data',
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
it('should exit if account is not an app developer account and not unified', async () => {
|
|
105
|
-
isAppDeveloperAccount.mockReturnValue(false);
|
|
106
|
-
await migrateApp2023_2(mockDerivedAccountId, mockOptions, mockAccountConfig);
|
|
107
|
-
expect(migrateNonProjectApp_v2023_2).not.toHaveBeenCalled();
|
|
108
|
-
expect(process.exit).toHaveBeenCalledWith(EXIT_CODES.SUCCESS);
|
|
109
|
-
});
|
|
110
|
-
it('should proceed with migration for valid app developer account', async () => {
|
|
111
|
-
await migrateApp2023_2(mockDerivedAccountId, mockOptions, mockAccountConfig);
|
|
112
|
-
expect(selectPublicAppForMigrationPrompt).toHaveBeenCalled();
|
|
113
|
-
expect(fetchPublicAppMetadata).toHaveBeenCalledWith(appId, mockDerivedAccountId);
|
|
114
|
-
expect(projectNameAndDestPrompt).toHaveBeenCalled();
|
|
115
|
-
expect(ensureProjectExists).toHaveBeenCalled();
|
|
116
|
-
expect(migrateNonProjectApp_v2023_2).toHaveBeenCalled();
|
|
117
|
-
expect(poll).toHaveBeenCalled();
|
|
118
|
-
expect(downloadProject).toHaveBeenCalled();
|
|
119
|
-
expect(extractZipArchive).toHaveBeenCalled();
|
|
120
|
-
});
|
|
121
|
-
it('should handle migration failure gracefully', async () => {
|
|
122
|
-
const errorMessage = 'Migration failed';
|
|
123
|
-
migrateNonProjectApp_v2023_2.mockRejectedValue(new Error(errorMessage));
|
|
124
|
-
await expect(migrateApp2023_2(mockDerivedAccountId, mockOptions, mockAccountConfig)).rejects.toThrow(errorMessage);
|
|
125
|
-
});
|
|
126
|
-
it('should handle non-migratable apps', async () => {
|
|
127
|
-
fetchPublicAppMetadata.mockResolvedValue({
|
|
128
|
-
data: {
|
|
129
|
-
preventProjectMigrations: true,
|
|
130
|
-
// @ts-expect-error
|
|
131
|
-
listingInfo: { someInfo: 'test' },
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
await migrateApp2023_2(mockDerivedAccountId, mockOptions, mockAccountConfig);
|
|
135
|
-
expect(process.exit).toHaveBeenCalledWith(EXIT_CODES.ERROR);
|
|
136
|
-
});
|
|
137
|
-
it('should handle existing project error', async () => {
|
|
138
|
-
ensureProjectExists.mockResolvedValue({
|
|
139
|
-
projectExists: true,
|
|
140
|
-
});
|
|
141
|
-
await expect(migrateApp2023_2(mockDerivedAccountId, mockOptions, mockAccountConfig)).rejects.toThrow('A project with name test-project already exists');
|
|
142
|
-
});
|
|
143
|
-
});
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { HubSpotConfigAccount } from '@hubspot/local-dev-lib/types/Accounts';
|
|
2
|
-
import { ArgumentsCamelCase } from 'yargs';
|
|
3
|
-
import { MigrateAppArgs } from './migrate.js';
|
|
4
|
-
export declare function migrateApp2023_2(derivedAccountId: number, options: ArgumentsCamelCase<MigrateAppArgs>, accountConfig: HubSpotConfigAccount): Promise<void>;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { fetchPublicAppMetadata } from '@hubspot/local-dev-lib/api/appsDev';
|
|
2
|
-
import { uiLogger } from '../ui/logger.js';
|
|
3
|
-
import { checkMigrationStatus, downloadProject, migrateApp as migrateNonProjectApp_v2023_2, } from '@hubspot/local-dev-lib/api/projects';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import { getCwd, sanitizeFileName } from '@hubspot/local-dev-lib/path';
|
|
6
|
-
import { getHubSpotWebsiteOrigin } from '@hubspot/local-dev-lib/urls';
|
|
7
|
-
import { extractZipArchive } from '@hubspot/local-dev-lib/archive';
|
|
8
|
-
import { promptUser } from '../prompts/promptUtils.js';
|
|
9
|
-
import { ApiErrorContext, logError } from '../errorHandlers/index.js';
|
|
10
|
-
import { EXIT_CODES } from '../enums/exitCodes.js';
|
|
11
|
-
import { uiAccountDescription, uiLine, uiLink } from '../ui/index.js';
|
|
12
|
-
import { commands } from '../../lang/en.js';
|
|
13
|
-
import { isAppDeveloperAccount, isUnifiedAccount } from '../accountTypes.js';
|
|
14
|
-
import { selectPublicAppForMigrationPrompt } from '../prompts/selectPublicAppForMigrationPrompt.js';
|
|
15
|
-
import { projectNameAndDestPrompt } from '../prompts/projectNameAndDestPrompt.js';
|
|
16
|
-
import { ensureProjectExists } from '../projects/ensureProjectExists.js';
|
|
17
|
-
import { trackCommandMetadataUsage } from '../usageTracking.js';
|
|
18
|
-
import SpinniesManager from '../ui/SpinniesManager.js';
|
|
19
|
-
import { handleKeypress } from '../process.js';
|
|
20
|
-
import { poll } from '../polling.js';
|
|
21
|
-
import { logInvalidAccountError } from './migrate.js';
|
|
22
|
-
export async function migrateApp2023_2(derivedAccountId, options, accountConfig) {
|
|
23
|
-
const accountName = uiAccountDescription(derivedAccountId);
|
|
24
|
-
const defaultAccountIsUnified = await isUnifiedAccount(accountConfig);
|
|
25
|
-
if (!isAppDeveloperAccount(accountConfig) && !defaultAccountIsUnified) {
|
|
26
|
-
logInvalidAccountError();
|
|
27
|
-
return process.exit(EXIT_CODES.SUCCESS);
|
|
28
|
-
}
|
|
29
|
-
let appId = options.appId;
|
|
30
|
-
if (!appId) {
|
|
31
|
-
const { appId: selectAppId } = await selectPublicAppForMigrationPrompt({
|
|
32
|
-
accountId: derivedAccountId,
|
|
33
|
-
accountName,
|
|
34
|
-
isMigratingApp: true,
|
|
35
|
-
});
|
|
36
|
-
appId = selectAppId;
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const { data: selectedApp } = await fetchPublicAppMetadata(appId, derivedAccountId);
|
|
40
|
-
// preventProjectMigrations returns true if we have not added app to allowlist config.
|
|
41
|
-
// listingInfo will only exist for marketplace apps
|
|
42
|
-
const preventProjectMigrations = selectedApp.preventProjectMigrations;
|
|
43
|
-
const listingInfo = selectedApp.listingInfo;
|
|
44
|
-
if (preventProjectMigrations && listingInfo) {
|
|
45
|
-
uiLogger.error(commands.project.migrateApp.errors.invalidApp(appId));
|
|
46
|
-
return process.exit(EXIT_CODES.ERROR);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
51
|
-
return process.exit(EXIT_CODES.ERROR);
|
|
52
|
-
}
|
|
53
|
-
const { name: projectName, dest: projectDest } = await projectNameAndDestPrompt(options);
|
|
54
|
-
const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
|
|
55
|
-
allowCreate: false,
|
|
56
|
-
noLogs: true,
|
|
57
|
-
});
|
|
58
|
-
if (projectExists) {
|
|
59
|
-
throw new Error(commands.project.migrateApp.errors.projectAlreadyExists(projectName));
|
|
60
|
-
}
|
|
61
|
-
await trackCommandMetadataUsage('migrate-app', { step: 'STARTED' }, derivedAccountId);
|
|
62
|
-
uiLogger.log('');
|
|
63
|
-
uiLine();
|
|
64
|
-
uiLogger.warn(commands.project.migrateApp.warning.title);
|
|
65
|
-
uiLogger.log(commands.project.migrateApp.warning.projectConversion);
|
|
66
|
-
uiLogger.log(commands.project.migrateApp.warning.appConfig);
|
|
67
|
-
uiLogger.log(commands.project.migrateApp.warning.buildAndDeploy);
|
|
68
|
-
uiLogger.log(commands.project.migrateApp.warning.existingApps);
|
|
69
|
-
uiLogger.log(commands.project.migrateApp.warning.copyApp);
|
|
70
|
-
uiLine();
|
|
71
|
-
const { shouldCreateApp } = await promptUser({
|
|
72
|
-
name: 'shouldCreateApp',
|
|
73
|
-
type: 'confirm',
|
|
74
|
-
message: commands.project.migrateApp.createAppPrompt,
|
|
75
|
-
});
|
|
76
|
-
process.stdin.resume();
|
|
77
|
-
if (!shouldCreateApp) {
|
|
78
|
-
return process.exit(EXIT_CODES.SUCCESS);
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
SpinniesManager.init();
|
|
82
|
-
SpinniesManager.add('migrateApp', {
|
|
83
|
-
text: commands.project.migrateApp.migrationStatus.inProgress(),
|
|
84
|
-
});
|
|
85
|
-
handleKeypress(async (key) => {
|
|
86
|
-
if ((key.ctrl && key.name === 'c') || key.name === 'q') {
|
|
87
|
-
SpinniesManager.remove('migrateApp');
|
|
88
|
-
uiLogger.log(commands.project.migrateApp.migrationInterrupted);
|
|
89
|
-
return process.exit(EXIT_CODES.SUCCESS);
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
const { data: migrateResponse } = await migrateNonProjectApp_v2023_2(derivedAccountId, appId, projectName);
|
|
93
|
-
const { id } = migrateResponse;
|
|
94
|
-
const pollResponse = await poll(() => checkMigrationStatus(derivedAccountId, id));
|
|
95
|
-
const { status, project } = pollResponse;
|
|
96
|
-
if (status === 'SUCCESS') {
|
|
97
|
-
const absoluteDestPath = path.resolve(getCwd(), projectDest);
|
|
98
|
-
const { env } = accountConfig;
|
|
99
|
-
const baseUrl = getHubSpotWebsiteOrigin(env);
|
|
100
|
-
const { data: zippedProject } = await downloadProject(derivedAccountId, projectName, 1);
|
|
101
|
-
await extractZipArchive(zippedProject, sanitizeFileName(projectName), path.resolve(absoluteDestPath), { includesRootDir: true, hideLogs: true });
|
|
102
|
-
SpinniesManager.succeed('migrateApp', {
|
|
103
|
-
text: commands.project.migrateApp.migrationStatus.done(),
|
|
104
|
-
succeedColor: 'white',
|
|
105
|
-
});
|
|
106
|
-
uiLogger.log('');
|
|
107
|
-
uiLine();
|
|
108
|
-
uiLogger.success(commands.project.migrateApp.migrationStatus.success());
|
|
109
|
-
uiLogger.log('');
|
|
110
|
-
uiLogger.log(uiLink(commands.project.migrateApp.projectDetailsLink, `${baseUrl}/developer-projects/${derivedAccountId}/project/${encodeURIComponent(project.name)}`));
|
|
111
|
-
process.exit(EXIT_CODES.SUCCESS);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
SpinniesManager.fail('migrateApp', {
|
|
116
|
-
text: commands.project.migrateApp.migrationStatus.failure(),
|
|
117
|
-
failColor: 'white',
|
|
118
|
-
});
|
|
119
|
-
throw error;
|
|
120
|
-
}
|
|
121
|
-
}
|
package/lib/npm.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { exec as execAsync } from 'node:child_process';
|
|
2
|
-
import util from 'util';
|
|
3
|
-
import { uiLogger } from './ui/logger.js';
|
|
4
|
-
import { pkg } from './jsonLoader.js';
|
|
5
|
-
export const DEFAULT_PACKAGE_MANAGER = 'npm';
|
|
6
|
-
export async function isGloballyInstalled(packageName) {
|
|
7
|
-
const exec = util.promisify(execAsync);
|
|
8
|
-
try {
|
|
9
|
-
await exec(`${packageName} --version`);
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
catch (e) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export async function getLatestCliVersion() {
|
|
17
|
-
const exec = util.promisify(execAsync);
|
|
18
|
-
const { stdout } = await exec(`npm info ${pkg.name} dist-tags --json`);
|
|
19
|
-
const { latest, next } = JSON.parse(stdout);
|
|
20
|
-
return { latest, next };
|
|
21
|
-
}
|
|
22
|
-
export async function executeInstall(packages = [], flags, options) {
|
|
23
|
-
const installCommand = `${DEFAULT_PACKAGE_MANAGER} install${flags ? ` ${flags}` : ''} ${packages.join(' ')}`;
|
|
24
|
-
uiLogger.debug('Running', installCommand);
|
|
25
|
-
const exec = util.promisify(execAsync);
|
|
26
|
-
await exec(installCommand, options);
|
|
27
|
-
}
|
|
28
|
-
export async function executeUpdate(packages = [], flags, options) {
|
|
29
|
-
const updateCommand = `${DEFAULT_PACKAGE_MANAGER} update${flags ? ` ${flags}` : ''} ${packages.join(' ')}`;
|
|
30
|
-
uiLogger.debug('Running', updateCommand);
|
|
31
|
-
const exec = util.promisify(execAsync);
|
|
32
|
-
await exec(updateCommand, options);
|
|
33
|
-
}
|
package/lib/projectProfiles.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { HsProfileFile } from '@hubspot/project-parsing-lib/src/lib/types.js';
|
|
2
|
-
import { ProjectConfig } from '../types/Projects.js';
|
|
3
|
-
export declare function logProfileHeader(profileName: string): void;
|
|
4
|
-
export declare function logProfileFooter(profile: HsProfileFile, includeVariables?: boolean): void;
|
|
5
|
-
export declare function loadProfile(projectConfig: ProjectConfig | null, projectDir: string | null, profileName: string): HsProfileFile | undefined;
|
|
6
|
-
export declare function exitIfUsingProfiles(projectConfig: ProjectConfig | null, projectDir: string | null): Promise<void>;
|
|
7
|
-
export declare function loadAndValidateProfile(projectConfig: ProjectConfig | null, projectDir: string | null, argsProfile: string | undefined): Promise<number | undefined>;
|
package/lib/projectProfiles.js
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import { loadHsProfileFile, getHsProfileFilename, getAllHsProfiles, } from '@hubspot/project-parsing-lib';
|
|
3
|
-
import { lib } from '../lang/en.js';
|
|
4
|
-
import { uiBetaTag, uiLine } from './ui/index.js';
|
|
5
|
-
import { uiLogger } from './ui/logger.js';
|
|
6
|
-
import { EXIT_CODES } from './enums/exitCodes.js';
|
|
7
|
-
export function logProfileHeader(profileName) {
|
|
8
|
-
uiLine();
|
|
9
|
-
uiBetaTag(lib.projectProfiles.logs.usingProfile(getHsProfileFilename(profileName)));
|
|
10
|
-
uiLogger.log('');
|
|
11
|
-
}
|
|
12
|
-
export function logProfileFooter(profile, includeVariables = false) {
|
|
13
|
-
uiLogger.log(lib.projectProfiles.logs.profileTargetAccount(profile.accountId));
|
|
14
|
-
if (includeVariables) {
|
|
15
|
-
uiLogger.log('');
|
|
16
|
-
uiLogger.log(lib.projectProfiles.logs.profileVariables);
|
|
17
|
-
Object.entries(profile.variables ?? {}).forEach(([key, value]) => {
|
|
18
|
-
uiLogger.log(` ${key}: ${value}`);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
uiLine();
|
|
22
|
-
uiLogger.log('');
|
|
23
|
-
}
|
|
24
|
-
export function loadProfile(projectConfig, projectDir, profileName) {
|
|
25
|
-
if (!projectConfig || !projectDir) {
|
|
26
|
-
uiLogger.error(lib.projectProfiles.loadProfile.errors.noProjectConfig);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const projectSourceDir = path.join(projectDir, projectConfig.srcDir);
|
|
30
|
-
const profileFilename = getHsProfileFilename(profileName);
|
|
31
|
-
try {
|
|
32
|
-
const profile = loadHsProfileFile(projectSourceDir, profileName);
|
|
33
|
-
if (!profile) {
|
|
34
|
-
uiLogger.error(lib.projectProfiles.loadProfile.errors.profileNotFound(profileFilename));
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (!profile.accountId) {
|
|
38
|
-
uiLogger.error(lib.projectProfiles.loadProfile.errors.missingAccountId(profileFilename));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
return profile;
|
|
42
|
-
}
|
|
43
|
-
catch (e) {
|
|
44
|
-
uiLogger.error(lib.projectProfiles.loadProfile.errors.failedToLoadProfile(profileFilename));
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
export async function exitIfUsingProfiles(projectConfig, projectDir) {
|
|
49
|
-
if (projectConfig && projectDir) {
|
|
50
|
-
const existingProfiles = await getAllHsProfiles(path.join(projectDir, projectConfig.srcDir));
|
|
51
|
-
if (existingProfiles.length > 0) {
|
|
52
|
-
uiLogger.error(lib.projectProfiles.exitIfUsingProfiles.errors.noProfileSpecified);
|
|
53
|
-
process.exit(EXIT_CODES.ERROR);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
export async function loadAndValidateProfile(projectConfig, projectDir, argsProfile) {
|
|
58
|
-
if (argsProfile) {
|
|
59
|
-
logProfileHeader(argsProfile);
|
|
60
|
-
const profile = loadProfile(projectConfig, projectDir, argsProfile);
|
|
61
|
-
if (!profile) {
|
|
62
|
-
uiLine();
|
|
63
|
-
process.exit(EXIT_CODES.ERROR);
|
|
64
|
-
}
|
|
65
|
-
logProfileFooter(profile, true);
|
|
66
|
-
return profile.accountId;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
// A profile must be specified if this project has profiles configured
|
|
70
|
-
await exitIfUsingProfiles(projectConfig, projectDir);
|
|
71
|
-
}
|
|
72
|
-
return undefined;
|
|
73
|
-
}
|
package/lib/ui/table.d.ts
DELETED
package/lib/ui/table.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
import { table } from 'table';
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
|
-
function isObject(item) {
|
|
5
|
-
return item && typeof item === 'object' && !Array.isArray(item);
|
|
6
|
-
}
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
8
|
-
function mergeDeep(target,
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
-
...sources) {
|
|
11
|
-
if (!sources.length)
|
|
12
|
-
return target;
|
|
13
|
-
const source = sources.shift();
|
|
14
|
-
if (isObject(target) && source && isObject(source)) {
|
|
15
|
-
for (const key in source) {
|
|
16
|
-
if (isObject(source[key])) {
|
|
17
|
-
if (!target[key])
|
|
18
|
-
Object.assign(target, { [key]: {} });
|
|
19
|
-
mergeDeep(target[key], source[key]);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
Object.assign(target, { [key]: source[key] });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return mergeDeep(target, ...sources);
|
|
27
|
-
}
|
|
28
|
-
const tableConfigDefaults = {
|
|
29
|
-
singleLine: true,
|
|
30
|
-
border: {
|
|
31
|
-
topBody: '',
|
|
32
|
-
topJoin: '',
|
|
33
|
-
topLeft: '',
|
|
34
|
-
topRight: '',
|
|
35
|
-
bottomBody: '',
|
|
36
|
-
bottomJoin: '',
|
|
37
|
-
bottomLeft: '',
|
|
38
|
-
bottomRight: '',
|
|
39
|
-
bodyLeft: '',
|
|
40
|
-
bodyRight: '',
|
|
41
|
-
bodyJoin: '',
|
|
42
|
-
joinBody: '',
|
|
43
|
-
joinLeft: '',
|
|
44
|
-
joinRight: '',
|
|
45
|
-
joinJoin: '',
|
|
46
|
-
},
|
|
47
|
-
columnDefault: {
|
|
48
|
-
paddingLeft: 0,
|
|
49
|
-
paddingRight: 1,
|
|
50
|
-
},
|
|
51
|
-
drawHorizontalLine: () => {
|
|
52
|
-
return false;
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
export function getTableContents(
|
|
56
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
-
tableData = [], tableConfig = {}) {
|
|
58
|
-
const mergedConfig = mergeDeep({}, tableConfigDefaults, tableConfig);
|
|
59
|
-
return table(tableData, mergedConfig);
|
|
60
|
-
}
|
|
61
|
-
export function getTableHeader(headerItems) {
|
|
62
|
-
return headerItems.map(headerItem => chalk.bold(headerItem));
|
|
63
|
-
}
|
package/ui/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function renderInline(component: React.ReactNode): Promise<void>;
|
package/ui/index.js
DELETED
package/ui/views/UiSandbox.d.ts
DELETED
|
File without changes
|
/package/commands/{customObject/__tests__/schema.test.d.ts → cms/__tests__/upload.test.d.ts}
RENAMED
|
File without changes
|
|
File without changes
|